changeset 151:25e238959bae

Merge from eCos master repository on 2001-02-12-23:44:24-GMT
author jlarmour
date Tue, 13 Feb 2001 01:23:16 +0000
parents f0e3fb000de8
children f935b880e96c
files host/ChangeLog host/acinclude.m4 host/aclocal.m4 host/configure host/infra/configure host/libcdl/configure host/tools/Utils/common/configure host/tools/configtool/standalone/common/configure packages/ChangeLog packages/NEWS packages/compat/posix/current/ChangeLog packages/compat/posix/current/cdl/posix.cdl packages/compat/posix/current/include/pthread.h packages/compat/posix/current/src/pthread.cxx packages/compat/posix/current/src/sem.cxx packages/compat/posix/current/src/signal.cxx packages/compat/posix/current/src/time.cxx packages/compat/posix/current/tests/pthread3.c packages/compat/posix/current/tests/sigsetjmp.c packages/devs/eth/arm/edb7xxx/current/ChangeLog packages/devs/eth/arm/edb7xxx/current/src/if_edb7xxx.c packages/devs/eth/intel/i82559/current/ChangeLog packages/devs/eth/intel/i82559/current/src/if_i82559.c packages/devs/eth/powerpc/quicc/current/ChangeLog packages/devs/eth/powerpc/quicc/current/src/if_quicc.c packages/devs/usb/sa11x0/current/ChangeLog packages/devs/usb/sa11x0/current/cdl/usbs_sa11x0.cdl packages/devs/usb/sa11x0/current/doc/devs-usb-sa11x0.html packages/devs/usb/sa11x0/current/doc/usbs_sa11x0.sgml packages/devs/usb/sa11x0/current/include/usbs_sa11x0.h packages/devs/usb/sa11x0/current/src/usbs_sa11x0.c packages/devs/usb/sa11x0/current/src/usbs_sa11x0_data.cxx packages/ecos.db packages/hal/arm/aeb/current/ChangeLog packages/hal/arm/aeb/current/cdl/hal_arm_aeb.cdl packages/hal/arm/aeb/current/include/hal_platform_ints.h packages/hal/arm/aeb/current/include/plf_stub.h packages/hal/arm/aeb/current/src/hal_diag.c packages/hal/arm/arch/current/ChangeLog packages/hal/arm/arch/current/cdl/hal_arm.cdl packages/hal/arm/arch/current/include/hal_arch.h packages/hal/arm/arch/current/src/arm_stub.c packages/hal/arm/arch/current/src/hal_misc.c packages/hal/arm/arch/current/src/vectors.S packages/hal/arm/cma230/current/ChangeLog packages/hal/arm/cma230/current/cdl/hal_arm_cma230.cdl packages/hal/arm/cma230/current/include/hal_platform_ints.h packages/hal/arm/cma230/current/include/plf_stub.h packages/hal/arm/cma230/current/src/hal_diag.c packages/hal/arm/ebsa285/current/ChangeLog packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl packages/hal/arm/ebsa285/current/include/hal_platform_ints.h packages/hal/arm/ebsa285/current/include/plf_stub.h packages/hal/arm/ebsa285/current/src/hal_diag.c packages/hal/arm/edb7xxx/current/ChangeLog packages/hal/arm/edb7xxx/current/cdl/hal_arm_edb7xxx.cdl packages/hal/arm/edb7xxx/current/include/hal_platform_ints.h packages/hal/arm/edb7xxx/current/include/plf_stub.h packages/hal/arm/edb7xxx/current/src/hal_diag.c packages/hal/arm/pid/current/ChangeLog packages/hal/arm/pid/current/cdl/hal_arm_pid.cdl packages/hal/arm/pid/current/include/hal_platform_ints.h packages/hal/arm/pid/current/include/plf_stub.h packages/hal/arm/pid/current/src/hal_diag.c packages/hal/arm/pid/current/src/pid_misc.c packages/hal/arm/sa11x0/assabet/current/ChangeLog packages/hal/arm/sa11x0/assabet/current/cdl/hal_arm_sa11x0_assabet.cdl packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.bin packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.img packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.srec packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.bin packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.img packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.srec packages/hal/arm/sa11x0/assabet/current/misc/redboot_RAM.cfg packages/hal/arm/sa11x0/assabet/current/misc/redboot_ROM.cfg packages/hal/arm/sa11x0/assabet/current/src/lcd_support.c packages/hal/arm/sa11x0/brutus/current/ChangeLog packages/hal/arm/sa11x0/brutus/current/cdl/hal_arm_sa11x0_brutus.cdl packages/hal/arm/sa11x0/sa1100mm/current/ChangeLog packages/hal/arm/sa11x0/sa1100mm/current/cdl/hal_arm_sa11x0_sa1100mm.cdl packages/hal/arm/sa11x0/var/current/ChangeLog packages/hal/arm/sa11x0/var/current/include/hal_var_ints.h packages/hal/arm/sa11x0/var/current/include/plf_stub.h packages/hal/arm/sa11x0/var/current/src/hal_diag.c packages/hal/common/current/ChangeLog packages/hal/common/current/cdl/common.cdl packages/hal/common/current/cdl/debugging.cdl packages/hal/common/current/cdl/hal.cdl packages/hal/common/current/include/hal_if.h packages/hal/common/current/include/hal_stub.h packages/hal/common/current/src/bplist-dynamic.c packages/hal/common/current/src/drv_api.c packages/hal/common/current/src/generic-stub.c packages/hal/common/current/src/hal_if.c packages/hal/common/current/src/hal_misc.c packages/hal/common/current/src/hal_stub.c packages/hal/i386/pc/current/ChangeLog packages/hal/i386/pc/current/include/plf_intr.h packages/hal/i386/pc/current/include/plf_stub.h packages/hal/mips/arch/current/ChangeLog packages/hal/mips/arch/current/include/arch.inc packages/hal/mips/arch/current/include/hal_arch.h packages/hal/mips/arch/current/include/hal_intr.h packages/hal/mips/arch/current/include/mips-stub.h packages/hal/mips/arch/current/include/mips.inc packages/hal/mips/arch/current/src/mips-stub.c packages/hal/mips/arch/current/src/vectors.S packages/hal/mips/jmr3904/current/ChangeLog packages/hal/mips/jmr3904/current/include/plf_intr.h packages/hal/mips/jmr3904/current/include/plf_stub.h packages/hal/mips/ref4955/current/ChangeLog packages/hal/mips/ref4955/current/cdl/hal_mips_tx49_ref4955.cdl packages/hal/mips/ref4955/current/include/plf_intr.h packages/hal/mips/ref4955/current/include/plf_stub.h packages/hal/mips/ref4955/current/src/pc87338.c packages/hal/mips/vrc4373/current/ChangeLog packages/hal/mips/vrc4373/current/include/plf_intr.h packages/hal/mips/vrc4373/current/include/plf_io.h packages/hal/mips/vrc4373/current/include/plf_stub.h packages/hal/mips/vrc4373/current/src/platform.S packages/hal/mn10300/stb/current/ChangeLog packages/hal/mn10300/stb/current/include/plf_intr.h packages/hal/mn10300/stb/current/include/plf_stub.h packages/hal/mn10300/stdeval1/current/ChangeLog packages/hal/mn10300/stdeval1/current/include/plf_intr.h packages/hal/mn10300/stdeval1/current/include/plf_stub.h packages/hal/powerpc/arch/current/ChangeLog packages/hal/powerpc/arch/current/src/ppc_stub.c packages/hal/powerpc/cogent/current/ChangeLog packages/hal/powerpc/cogent/current/include/plf_intr.h packages/hal/powerpc/cogent/current/include/plf_stub.h packages/hal/powerpc/cogent/current/src/hal_diag.c packages/hal/powerpc/fads/current/ChangeLog packages/hal/powerpc/fads/current/include/plf_intr.h packages/hal/powerpc/fads/current/include/plf_stub.h packages/hal/powerpc/mbx/current/ChangeLog packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl packages/hal/powerpc/mbx/current/include/plf_intr.h packages/hal/powerpc/mbx/current/include/plf_stub.h packages/hal/powerpc/mbx/current/src/hal_diag.c packages/hal/powerpc/mpc8xx/current/ChangeLog packages/hal/powerpc/mpc8xx/current/cdl/hal_powerpc_mpc8xx.cdl packages/hal/powerpc/ppc40x/current/ChangeLog packages/hal/powerpc/ppc40x/current/include/var_intr.h packages/hal/powerpc/quicc/current/ChangeLog packages/hal/powerpc/quicc/current/src/quicc_smc1.c packages/hal/sh/arch/current/ChangeLog packages/hal/sh/arch/current/tests/intr0.c packages/hal/sh/cq7708/current/ChangeLog packages/hal/sh/cq7708/current/include/plf_intr.h packages/hal/sh/cq7708/current/include/plf_stub.h packages/hal/sh/cq7708/current/src/hal_diag.c packages/hal/sh/cq7750/current/ChangeLog packages/hal/sh/cq7750/current/include/plf_intr.h packages/hal/sh/cq7750/current/include/plf_stub.h packages/hal/sh/cq7750/current/src/hal_diag.c packages/hal/sh/edk7708/current/ChangeLog packages/hal/sh/edk7708/current/include/plf_intr.h packages/hal/sh/edk7708/current/include/plf_stub.h packages/hal/sh/edk7708/current/src/hal_diag.c packages/hal/sh/sh3/current/ChangeLog packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl packages/hal/sh/sh3/current/include/sh3_sci.h packages/hal/sh/sh3/current/include/sh3_scif.h packages/hal/sh/sh3/current/include/var_intr.h packages/hal/sh/sh3/current/src/sh3_sci.c packages/hal/sh/sh3/current/src/sh3_scif.c packages/hal/sh/sh4/current/ChangeLog packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl packages/hal/sh/sh4/current/include/sh4_scif.h packages/hal/sh/sh4/current/src/sh4_scif.c packages/hal/v85x/arch/current/ChangeLog packages/hal/v85x/arch/current/include/hal_intr.h packages/hal/v85x/arch/current/src/vectors.S packages/hal/v85x/ceb_v850/current/ChangeLog packages/hal/v85x/ceb_v850/current/cdl/hal_v85x_ceb_v850.cdl packages/hal/v85x/ceb_v850/current/include/plf_stub.h packages/hal/v85x/ceb_v850/current/src/hal_diag.c packages/io/flash/current/ChangeLog packages/io/flash/current/src/flash.c packages/io/pci/current/ChangeLog packages/io/pci/current/tests/pci2.c packages/io/usb/common/current/ChangeLog packages/io/usb/common/current/cdl/usb.cdl packages/io/usb/common/current/include/usb.h packages/io/usb/eth/slave/current/ChangeLog packages/io/usb/eth/slave/current/cdl/usbs_eth.cdl packages/io/usb/eth/slave/current/doc/io-usb-slave-eth.html packages/io/usb/eth/slave/current/doc/simple.fig packages/io/usb/eth/slave/current/doc/simple.gif packages/io/usb/eth/slave/current/doc/tcpip.fig packages/io/usb/eth/slave/current/doc/tcpip.gif packages/io/usb/eth/slave/current/doc/usbseth-control.html packages/io/usb/eth/slave/current/doc/usbseth-data.html packages/io/usb/eth/slave/current/doc/usbseth-host.html packages/io/usb/eth/slave/current/doc/usbseth-init.html packages/io/usb/eth/slave/current/doc/usbseth-intro.html packages/io/usb/eth/slave/current/doc/usbseth-netdev.html packages/io/usb/eth/slave/current/doc/usbseth-protocol.html packages/io/usb/eth/slave/current/doc/usbseth.sgml packages/io/usb/eth/slave/current/host/COPYING packages/io/usb/eth/slave/current/host/Makefile packages/io/usb/eth/slave/current/host/ecos_usbeth.c packages/io/usb/eth/slave/current/include/usbs_eth.h packages/io/usb/eth/slave/current/src/usbseth.c packages/io/usb/eth/slave/current/src/usbsethdrv.c packages/io/usb/slave/current/ChangeLog packages/io/usb/slave/current/cdl/usbs.cdl packages/io/usb/slave/current/doc/io-usb-slave.html packages/io/usb/slave/current/doc/usbs-control.html packages/io/usb/slave/current/doc/usbs-data.html packages/io/usb/slave/current/doc/usbs-devtab.html packages/io/usb/slave/current/doc/usbs-enum.html packages/io/usb/slave/current/doc/usbs-halt.html packages/io/usb/slave/current/doc/usbs-intro.html packages/io/usb/slave/current/doc/usbs-start-rx.html packages/io/usb/slave/current/doc/usbs-start-tx.html packages/io/usb/slave/current/doc/usbs-start.html packages/io/usb/slave/current/doc/usbs-writing.html packages/io/usb/slave/current/doc/usbs.sgml packages/io/usb/slave/current/include/usbs.h packages/io/usb/slave/current/src/usbs.c packages/isoinfra/current/ChangeLog packages/isoinfra/current/cdl/isoinfra.cdl packages/isoinfra/current/include/stdio.h packages/isoinfra/current/include/unistd.h packages/kernel/current/ChangeLog packages/kernel/current/include/mlqueue.hxx packages/kernel/current/src/common/clock.cxx packages/kernel/current/src/common/thread.cxx packages/kernel/current/src/sched/mlqueue.cxx packages/kernel/current/tests/dhrystone.c packages/kernel/current/tests/kcache1.c packages/kernel/current/tests/kill.cxx packages/kernel/current/tests/stress_threads.c packages/language/c/libc/stdio/current/ChangeLog packages/language/c/libc/stdio/current/cdl/stdio.cdl packages/pkgconf/fixhtml.tcl packages/redboot/current/ChangeLog packages/redboot/current/cdl/redboot.cdl packages/redboot/current/include/flash_config.h packages/redboot/current/include/net/net.h packages/redboot/current/include/redboot.h packages/redboot/current/src/crc.c packages/redboot/current/src/flash.c packages/redboot/current/src/main.c packages/redboot/current/src/net/arp.c packages/redboot/current/src/net/bootp.c packages/redboot/current/src/net/enet.c packages/redboot/current/src/net/net_io.c packages/redboot/current/src/net/ping.c packages/redboot/current/src/net/udp.c packages/redboot/current/src/syscall.c packages/redboot/current/src/ticks.c packages/redboot/current/src/xyzModem.c packages/services/memalloc/common/current/ChangeLog packages/services/memalloc/common/current/tests/malloc4.cxx
diffstat 257 files changed, 29659 insertions(+), 8298 deletions(-) [+]
line wrap: on
line diff
--- a/host/ChangeLog
+++ b/host/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-29  Andreas Schuldei  <andreas@schuldei.org>
+
+	* acinclude.m4 (CYG_AC_PATH_TCL): Simplify Tcl installation searching
+
 2000-10-23  Jesper Skov  <jskov@redhat.com>
 
 	* configure: Disable ser_filter magic for now - properly this time!
--- a/host/acinclude.m4
+++ b/host/acinclude.m4
@@ -245,6 +245,29 @@ fi
 
 ])
 
+dnl ====================================================================
+dnl Inspired by KDE's autoconfig
+dnl This macro takes three Arguments like this:
+dnl AC_FIND_FILE(foo.h, $incdirs, incdir)
+dnl the filename to look for, the list of paths to check and
+dnl the variable with the result.
+
+AC_DEFUN(AC_FIND_FILE,
+[
+$3=NO
+for i in $2;
+do
+  for j in $1;
+  do
+    if test -r "$i/$j"; then
+      $3=$i
+      break 2
+    fi
+  done
+done
+])
+
+
 dnl --------------------------------------------------------------------
 dnl Convert a cygwin pathname to something acceptable to VC++ (but
 dnl still invoked from bash and cygwin's make). This means using
@@ -321,29 +344,15 @@ AC_SUBST(cyg_ac_tcl_version)
 
 dnl Where is the Tcl installation? By default assume Tcl is already
 dnl installed in the same place as the eCos host-side.
+
 AC_ARG_WITH(tcl,[ --with-tcl-header=<path>        location of Tcl header])
 AC_ARG_WITH(tcl,[ --with-tcl-lib=<path>        location of Tcl libraries])
+AC_ARG_WITH(tcl,[ --with-tcl=<path>        location of Tcl header and libraries])
 
 AC_MSG_CHECKING(for Tcl installation)
-AC_ARG_WITH(tcl,[ --with-tcl=<path>        location of Tcl header and libraries],[
-  cyg_ac_tcl_incdir=${with_tcl}/include
-  cyg_ac_tcl_libdir=${with_tcl}/lib
-],[
-  if test "${with_tcl_header}" = "no"; then
-    cyg_ac_tcl_incdir=${prefix}/include
-  else
-    with_tcl=yes
-    cyg_ac_tcl_incdir=${with_tcl_header}/include
-  fi
 
-  if test "${with_tcl_lib}" = "no"; then
-    cyg_ac_tcl_libdir=${prefix}/lib
-  else
-    with_tcl=yes
-    cyg_ac_tcl_libdir=${with_tcl_lib}/lib
-  fi
-])
-AC_MSG_RESULT(${cyg_ac_tcl_libdir})
+tcl_incdirs="${with_tcl_header} ${with_tcl}/include ${prefix}/include /usr/include/tcl$cyg_ac_tcl_version /usr/include"
+AC_FIND_FILE(tcl.h, $tcl_incdirs, cyg_ac_tcl_incdir)
 
 dnl Sanity check, make sure that there is a tcl.h header file.
 dnl If not then there is no point in proceeding.
@@ -351,6 +360,11 @@ if test \! -r ${cyg_ac_tcl_incdir}/tcl.h
   AC_MSG_ERROR(unable to locate Tcl header file tcl.h)
 fi
 
+tcl_libdirs="${with_tcl_lib} ${with_tcl}/lib ${prefix}/lib /usr/lib/tcl$cyg_ac_tcl_version /usr/lib"
+AC_FIND_FILE(tclConfig.sh, $tcl_libdirs, cyg_ac_tcl_libdir)
+
+AC_MSG_RESULT(${cyg_ac_tcl_libdir})
+
 dnl If using VC++ then there is no tclConfig.sh file, so the
 dnl library information has to be hard-wired. Otherwise ther
 dnl should be a tclConfig.sh file containing the necessary information.
--- a/host/aclocal.m4
+++ b/host/aclocal.m4
@@ -257,6 +257,29 @@ fi
 
 ])
 
+dnl ====================================================================
+dnl Inspired by KDE's autoconfig
+dnl This macro takes three Arguments like this:
+dnl AC_FIND_FILE(foo.h, $incdirs, incdir)
+dnl the filename to look for, the list of paths to check and
+dnl the variable with the result.
+
+AC_DEFUN(AC_FIND_FILE,
+[
+$3=NO
+for i in $2;
+do
+  for j in $1;
+  do
+    if test -r "$i/$j"; then
+      $3=$i
+      break 2
+    fi
+  done
+done
+])
+
+
 dnl --------------------------------------------------------------------
 dnl Convert a cygwin pathname to something acceptable to VC++ (but
 dnl still invoked from bash and cygwin's make). This means using
@@ -333,29 +356,15 @@ AC_SUBST(cyg_ac_tcl_version)
 
 dnl Where is the Tcl installation? By default assume Tcl is already
 dnl installed in the same place as the eCos host-side.
+
 AC_ARG_WITH(tcl,[ --with-tcl-header=<path>        location of Tcl header])
 AC_ARG_WITH(tcl,[ --with-tcl-lib=<path>        location of Tcl libraries])
+AC_ARG_WITH(tcl,[ --with-tcl=<path>        location of Tcl header and libraries])
 
 AC_MSG_CHECKING(for Tcl installation)
-AC_ARG_WITH(tcl,[ --with-tcl=<path>        location of Tcl header and libraries],[
-  cyg_ac_tcl_incdir=${with_tcl}/include
-  cyg_ac_tcl_libdir=${with_tcl}/lib
-],[
-  if test "${with_tcl_header}" = "no"; then
-    cyg_ac_tcl_incdir=${prefix}/include
-  else
-    with_tcl=yes
-    cyg_ac_tcl_incdir=${with_tcl_header}/include
-  fi
 
-  if test "${with_tcl_lib}" = "no"; then
-    cyg_ac_tcl_libdir=${prefix}/lib
-  else
-    with_tcl=yes
-    cyg_ac_tcl_libdir=${with_tcl_lib}/lib
-  fi
-])
-AC_MSG_RESULT(${cyg_ac_tcl_libdir})
+tcl_incdirs="${with_tcl_header} ${with_tcl}/include ${prefix}/include /usr/include/tcl$cyg_ac_tcl_version /usr/include"
+AC_FIND_FILE(tcl.h, $tcl_incdirs, cyg_ac_tcl_incdir)
 
 dnl Sanity check, make sure that there is a tcl.h header file.
 dnl If not then there is no point in proceeding.
@@ -363,6 +372,11 @@ if test \! -r ${cyg_ac_tcl_incdir}/tcl.h
   AC_MSG_ERROR(unable to locate Tcl header file tcl.h)
 fi
 
+tcl_libdirs="${with_tcl_lib} ${with_tcl}/lib ${prefix}/lib /usr/lib/tcl$cyg_ac_tcl_version /usr/lib"
+AC_FIND_FILE(tclConfig.sh, $tcl_libdirs, cyg_ac_tcl_libdir)
+
+AC_MSG_RESULT(${cyg_ac_tcl_libdir})
+
 dnl If using VC++ then there is no tclConfig.sh file, so the
 dnl library information has to be hard-wired. Otherwise ther
 dnl should be a tclConfig.sh file containing the necessary information.
--- a/host/configure
+++ b/host/configure
@@ -57,7 +57,6 @@ program_suffix=NONE
 program_transform_name=s,x,x,
 silent=
 site=
-sitefile=
 srcdir=
 target=NONE
 verbose=
@@ -172,7 +171,6 @@ Configuration:
   --help                  print this message
   --no-create             do not create output files
   --quiet, --silent       do not print \`checking...' messages
-  --site-file=FILE        use FILE as the site file
   --version               print the version of autoconf that created configure
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
@@ -343,11 +341,6 @@ EOF
   -site=* | --site=* | --sit=*)
     site="$ac_optarg" ;;
 
-  -site-file | --site-file | --site-fil | --site-fi | --site-f)
-    ac_prev=sitefile ;;
-  -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
-    sitefile="$ac_optarg" ;;
-
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -513,16 +506,12 @@ fi
 srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
 
 # Prefer explicitly selected file to automatically selected ones.
-if test -z "$sitefile"; then
-  if test -z "$CONFIG_SITE"; then
-    if test "x$prefix" != xNONE; then
-      CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-    else
-      CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-    fi
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
   fi
-else
-  CONFIG_SITE="$sitefile"
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
@@ -587,7 +576,7 @@ else { echo "configure: error: can not r
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:591: checking host system type" >&5
+echo "configure:580: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -619,7 +608,7 @@ echo "$ac_t""$host" 1>&6
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:623: checking for a BSD compatible install" >&5
+echo "configure:612: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -672,7 +661,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:676: checking whether build environment is sane" >&5
+echo "configure:665: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -729,7 +718,7 @@ test "$program_suffix" != NONE &&
 test "$program_transform_name" = "" && program_transform_name="s,x,x,"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:733: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:722: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -768,7 +757,7 @@ fi
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:772: checking for working aclocal" >&5
+echo "configure:761: checking for working aclocal" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -781,7 +770,7 @@ else
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:785: checking for working autoconf" >&5
+echo "configure:774: checking for working autoconf" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -794,7 +783,7 @@ else
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:798: checking for working automake" >&5
+echo "configure:787: checking for working automake" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -807,7 +796,7 @@ else
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:811: checking for working autoheader" >&5
+echo "configure:800: checking for working autoheader" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -820,7 +809,7 @@ else
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:824: checking for working makeinfo" >&5
+echo "configure:813: checking for working makeinfo" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -834,7 +823,7 @@ fi
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:838: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:827: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -858,7 +847,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:862: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:851: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -885,12 +874,12 @@ else
 fi
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:889: checking for Cygwin environment" >&5
+echo "configure:878: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 894 "configure"
+#line 883 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -901,7 +890,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:894: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -920,7 +909,7 @@ test "$ac_cv_cygwin" = yes && CYGWIN=yes
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:924: checking for $ac_word" >&5
+echo "configure:913: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -950,7 +939,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:954: checking for $ac_word" >&5
+echo "configure:943: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1001,7 +990,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1005: checking for $ac_word" >&5
+echo "configure:994: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1033,7 +1022,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1037: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1026: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1044,12 +1033,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1048 "configure"
+#line 1037 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1075,12 +1064,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1079: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1068: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1084: checking whether we are using GNU C" >&5
+echo "configure:1073: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1089,7 +1078,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1093: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1082: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1108,7 +1097,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1112: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1101: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1144,7 +1133,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1148: checking for $ac_word" >&5
+echo "configure:1137: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1176,7 +1165,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1180: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1169: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1187,12 +1176,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1191 "configure"
+#line 1180 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1218,12 +1207,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1222: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1211: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1227: checking whether we are using GNU C++" >&5
+echo "configure:1216: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1232,7 +1221,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1225: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1251,7 +1240,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1255: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1244: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1283,13 +1272,13 @@ else
 fi
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1287: checking for object suffix" >&5
+echo "configure:1276: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1293: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1307,19 +1296,19 @@ OBJEXT=$ac_cv_objext
 ac_objext=$ac_cv_objext
 
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1311: checking for mingw32 environment" >&5
+echo "configure:1300: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1316 "configure"
+#line 1305 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:1323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -1338,7 +1327,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=y
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1342: checking for executable suffix" >&5
+echo "configure:1331: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1348,10 +1337,10 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+      *.c | *.o | *.obj) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -1373,7 +1362,7 @@ ac_exeext=$EXEEXT
     
 
     echo $ac_n "checking "for Visual C++"""... $ac_c" 1>&6
-echo "configure:1377: checking "for Visual C++"" >&5
+echo "configure:1366: checking "for Visual C++"" >&5
     MSVC="no";
     if test "${CC}" = "cl" ; then
        MSVC="yes"
@@ -1399,7 +1388,7 @@ fi
     
 
     echo $ac_n "checking "the default compiler flags"""... $ac_c" 1>&6
-echo "configure:1403: checking "the default compiler flags"" >&5
+echo "configure:1392: checking "the default compiler flags"" >&5
 
                         cygflags_enable_debug="no"
     # Check whether --enable-debug or --disable-debug was given.
@@ -1593,7 +1582,7 @@ fi
 
 
 echo $ac_n "checking for Tcl version""... $ac_c" 1>&6
-echo "configure:1597: checking for Tcl version" >&5
+echo "configure:1586: checking for Tcl version" >&5
 # Check whether --with-tcl-version or --without-tcl-version was given.
 if test "${with_tcl_version+set}" = set; then
   withval="$with_tcl_version"
@@ -1617,6 +1606,13 @@ fi
 echo "$ac_t""${cyg_ac_tcl_version}" 1>&6
 
 
+
+# Check whether --with-tcl or --without-tcl was given.
+if test "${with_tcl+set}" = set; then
+  withval="$with_tcl"
+  :
+fi
+
 # Check whether --with-tcl or --without-tcl was given.
 if test "${with_tcl+set}" = set; then
   withval="$with_tcl"
@@ -1631,38 +1627,44 @@ fi
 
 
 echo $ac_n "checking for Tcl installation""... $ac_c" 1>&6
-echo "configure:1635: checking for Tcl installation" >&5
-# Check whether --with-tcl or --without-tcl was given.
-if test "${with_tcl+set}" = set; then
-  withval="$with_tcl"
-  
-  cyg_ac_tcl_incdir=${with_tcl}/include
-  cyg_ac_tcl_libdir=${with_tcl}/lib
+echo "configure:1631: checking for Tcl installation" >&5
+
+tcl_incdirs="${with_tcl_header} ${with_tcl}/include ${prefix}/include /usr/include/tcl$cyg_ac_tcl_version /usr/include"
 
-else
-  
-  if test "${with_tcl_header}" = "no"; then
-    cyg_ac_tcl_incdir=${prefix}/include
-  else
-    with_tcl=yes
-    cyg_ac_tcl_incdir=${with_tcl_header}/include
-  fi
+cyg_ac_tcl_incdir=NO
+for i in $tcl_incdirs;
+do
+  for j in tcl.h;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_incdir=$i
+      break 2
+    fi
+  done
+done
 
-  if test "${with_tcl_lib}" = "no"; then
-    cyg_ac_tcl_libdir=${prefix}/lib
-  else
-    with_tcl=yes
-    cyg_ac_tcl_libdir=${with_tcl_lib}/lib
-  fi
-
-fi
-
-echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
 
 if test \! -r ${cyg_ac_tcl_incdir}/tcl.h ; then
   { echo "configure: error: unable to locate Tcl header file tcl.h" 1>&2; exit 1; }
 fi
 
+tcl_libdirs="${with_tcl_lib} ${with_tcl}/lib ${prefix}/lib /usr/lib/tcl$cyg_ac_tcl_version /usr/lib"
+
+cyg_ac_tcl_libdir=NO
+for i in $tcl_libdirs;
+do
+  for j in tclConfig.sh;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_libdir=$i
+      break 2
+    fi
+  done
+done
+
+
+echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
+
 if test "${MSVC}" = "yes" ; then
   cyg_ac_tcl_libs="tcl${cyg_ac_tcl_version}.lib"
   
--- a/host/infra/configure
+++ b/host/infra/configure
@@ -45,7 +45,6 @@ program_suffix=NONE
 program_transform_name=s,x,x,
 silent=
 site=
-sitefile=
 srcdir=
 target=NONE
 verbose=
@@ -160,7 +159,6 @@ Configuration:
   --help                  print this message
   --no-create             do not create output files
   --quiet, --silent       do not print \`checking...' messages
-  --site-file=FILE        use FILE as the site file
   --version               print the version of autoconf that created configure
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
@@ -331,11 +329,6 @@ EOF
   -site=* | --site=* | --sit=*)
     site="$ac_optarg" ;;
 
-  -site-file | --site-file | --site-fil | --site-fi | --site-f)
-    ac_prev=sitefile ;;
-  -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
-    sitefile="$ac_optarg" ;;
-
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -501,16 +494,12 @@ fi
 srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
 
 # Prefer explicitly selected file to automatically selected ones.
-if test -z "$sitefile"; then
-  if test -z "$CONFIG_SITE"; then
-    if test "x$prefix" != xNONE; then
-      CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-    else
-      CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-    fi
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
   fi
-else
-  CONFIG_SITE="$sitefile"
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
@@ -577,7 +566,7 @@ else { echo "configure: error: can not r
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:581: checking host system type" >&5
+echo "configure:570: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -610,7 +599,7 @@ echo "$ac_t""$host" 1>&6
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:614: checking for a BSD compatible install" >&5
+echo "configure:603: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -663,7 +652,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:667: checking whether build environment is sane" >&5
+echo "configure:656: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -720,7 +709,7 @@ test "$program_suffix" != NONE &&
 test "$program_transform_name" = "" && program_transform_name="s,x,x,"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:724: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:713: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -759,7 +748,7 @@ fi
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:763: checking for working aclocal" >&5
+echo "configure:752: checking for working aclocal" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -772,7 +761,7 @@ else
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:776: checking for working autoconf" >&5
+echo "configure:765: checking for working autoconf" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -785,7 +774,7 @@ else
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:789: checking for working automake" >&5
+echo "configure:778: checking for working automake" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -798,7 +787,7 @@ else
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:802: checking for working autoheader" >&5
+echo "configure:791: checking for working autoheader" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -811,7 +800,7 @@ else
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:815: checking for working makeinfo" >&5
+echo "configure:804: checking for working makeinfo" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -833,7 +822,7 @@ EOF
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:837: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:826: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -857,7 +846,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:861: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:850: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -886,7 +875,7 @@ fi
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:890: checking for $ac_word" >&5
+echo "configure:879: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -916,7 +905,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:920: checking for $ac_word" >&5
+echo "configure:909: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -967,7 +956,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:971: checking for $ac_word" >&5
+echo "configure:960: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -999,7 +988,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1003: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:992: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1010,12 +999,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1014 "configure"
+#line 1003 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1041,12 +1030,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1045: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1034: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1050: checking whether we are using GNU C" >&5
+echo "configure:1039: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1055,7 +1044,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1059: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1048: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1074,7 +1063,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1078: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1067: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1110,7 +1099,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1114: checking for $ac_word" >&5
+echo "configure:1103: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1142,7 +1131,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1146: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1135: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1153,12 +1142,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1157 "configure"
+#line 1146 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1184,12 +1173,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1188: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1177: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1193: checking whether we are using GNU C++" >&5
+echo "configure:1182: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1198,7 +1187,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1191: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1217,7 +1206,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1221: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1210: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1251,7 +1240,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1255: checking for $ac_word" >&5
+echo "configure:1244: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1279,13 +1268,13 @@ else
 fi
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1283: checking for object suffix" >&5
+echo "configure:1272: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1289: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1278: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1303,12 +1292,12 @@ OBJEXT=$ac_cv_objext
 ac_objext=$ac_cv_objext
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:1307: checking for Cygwin environment" >&5
+echo "configure:1296: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1312 "configure"
+#line 1301 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1319,7 +1308,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:1323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -1336,19 +1325,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1340: checking for mingw32 environment" >&5
+echo "configure:1329: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1345 "configure"
+#line 1334 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:1352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -1367,7 +1356,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=y
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1371: checking for executable suffix" >&5
+echo "configure:1360: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1377,10 +1366,10 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+      *.c | *.o | *.obj) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -1402,7 +1391,7 @@ ac_exeext=$EXEEXT
     
 
     echo $ac_n "checking "for Visual C++"""... $ac_c" 1>&6
-echo "configure:1406: checking "for Visual C++"" >&5
+echo "configure:1395: checking "for Visual C++"" >&5
     MSVC="no";
     if test "${CC}" = "cl" ; then
        MSVC="yes"
@@ -1427,7 +1416,7 @@ fi
     
 
     echo $ac_n "checking "the default compiler flags"""... $ac_c" 1>&6
-echo "configure:1431: checking "the default compiler flags"" >&5
+echo "configure:1420: checking "the default compiler flags"" >&5
 
                         cygflags_enable_debug="no"
     # Check whether --enable-debug or --disable-debug was given.
@@ -1473,14 +1462,14 @@ fi
 
 
 echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:1477: checking whether byte ordering is bigendian" >&5
+echo "configure:1466: checking whether byte ordering is bigendian" >&5
 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_bigendian=unknown
 # See if sys/param.h defines the BYTE_ORDER macro.
 cat > conftest.$ac_ext <<EOF
-#line 1484 "configure"
+#line 1473 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -1491,11 +1480,11 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:1495: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   # It does; now see whether it defined to BIG_ENDIAN or not.
 cat > conftest.$ac_ext <<EOF
-#line 1499 "configure"
+#line 1488 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
@@ -1506,7 +1495,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:1510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1499: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_bigendian=yes
 else
@@ -1526,7 +1515,7 @@ if test "$cross_compiling" = yes; then
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 1530 "configure"
+#line 1519 "configure"
 #include "confdefs.h"
 main () {
   /* Are we little or big endian?  From Harbison&Steele.  */
@@ -1539,7 +1528,7 @@ main () {
   exit (u.c[sizeof (long) - 1] == 1);
 }
 EOF
-if { (eval echo configure:1543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1532: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_bigendian=no
 else
@@ -1568,7 +1557,7 @@ fi
     
 
     echo $ac_n "checking "for a 64 bit data type"""... $ac_c" 1>&6
-echo "configure:1572: checking "for a 64 bit data type"" >&5
+echo "configure:1561: checking "for a 64 bit data type"" >&5
 if eval "test \"`echo '$''{'cyg_ac_cv_type_64bit'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1586,7 +1575,7 @@ cross_compiling=$ac_cv_prog_cc_cross
   ctype_64bit="long long"
 else
   cat > conftest.$ac_ext <<EOF
-#line 1590 "configure"
+#line 1579 "configure"
 #include "confdefs.h"
 
                 main() {
@@ -1594,7 +1583,7 @@ else
                 }
 	    
 EOF
-if { (eval echo configure:1598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ctype_64bit=$type
 else
@@ -1617,7 +1606,7 @@ cross_compiling=$ac_cv_prog_cxx_cross
   cxxtype_64bit="long long"
 else
   cat > conftest.$ac_ext <<EOF
-#line 1621 "configure"
+#line 1610 "configure"
 #include "confdefs.h"
 #ifdef __cplusplus
 extern "C" void exit(int);
@@ -1628,7 +1617,7 @@ extern "C" void exit(int);
                 }
 	    
 EOF
-if { (eval echo configure:1632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cxxtype_64bit=$type
 else
@@ -1673,7 +1662,7 @@ EOF
 
 
 echo $ac_n "checking size of int *""... $ac_c" 1>&6
-echo "configure:1677: checking size of int *" >&5
+echo "configure:1666: checking size of int *" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_int_p'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1681,7 +1670,7 @@ else
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 1685 "configure"
+#line 1674 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -1692,7 +1681,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:1696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_int_p=`cat conftestval`
 else
@@ -1712,7 +1701,7 @@ EOF
 
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:1716: checking size of long" >&5
+echo "configure:1705: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1720,7 +1709,7 @@ else
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 1724 "configure"
+#line 1713 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -1731,7 +1720,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:1735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -1756,7 +1745,7 @@ EOF
     
 
     echo $ac_n "checking "for __PRETTY_FUNCTION__ support"""... $ac_c" 1>&6
-echo "configure:1760: checking "for __PRETTY_FUNCTION__ support"" >&5
+echo "configure:1749: checking "for __PRETTY_FUNCTION__ support"" >&5
 if eval "test \"`echo '$''{'cyg_ac_cv_c_pretty_function'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1770,14 +1759,14 @@ ac_link='${CC-cc} -o conftest${ac_exeext
 cross_compiling=$ac_cv_prog_cc_cross
 
         cat > conftest.$ac_ext <<EOF
-#line 1774 "configure"
+#line 1763 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 puts(__PRETTY_FUNCTION__);
 ; return 0; }
 EOF
-if { (eval echo configure:1781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   c_ok="yes"
 else
@@ -1796,14 +1785,14 @@ ac_link='${CXX-g++} -o conftest${ac_exee
 cross_compiling=$ac_cv_prog_cxx_cross
 
         cat > conftest.$ac_ext <<EOF
-#line 1800 "configure"
+#line 1789 "configure"
 #include "confdefs.h"
 #include <cstdio>
 int main() {
 puts(__PRETTY_FUNCTION__);
 ; return 0; }
 EOF
-if { (eval echo configure:1807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cxx_ok="yes"
 else
@@ -1843,7 +1832,7 @@ EOF
 
 
 echo $ac_n "checking for Tcl version""... $ac_c" 1>&6
-echo "configure:1847: checking for Tcl version" >&5
+echo "configure:1836: checking for Tcl version" >&5
 # Check whether --with-tcl-version or --without-tcl-version was given.
 if test "${with_tcl_version+set}" = set; then
   withval="$with_tcl_version"
@@ -1867,6 +1856,13 @@ fi
 echo "$ac_t""${cyg_ac_tcl_version}" 1>&6
 
 
+
+# Check whether --with-tcl or --without-tcl was given.
+if test "${with_tcl+set}" = set; then
+  withval="$with_tcl"
+  :
+fi
+
 # Check whether --with-tcl or --without-tcl was given.
 if test "${with_tcl+set}" = set; then
   withval="$with_tcl"
@@ -1881,38 +1877,44 @@ fi
 
 
 echo $ac_n "checking for Tcl installation""... $ac_c" 1>&6
-echo "configure:1885: checking for Tcl installation" >&5
-# Check whether --with-tcl or --without-tcl was given.
-if test "${with_tcl+set}" = set; then
-  withval="$with_tcl"
-  
-  cyg_ac_tcl_incdir=${with_tcl}/include
-  cyg_ac_tcl_libdir=${with_tcl}/lib
+echo "configure:1881: checking for Tcl installation" >&5
+
+tcl_incdirs="${with_tcl_header} ${with_tcl}/include ${prefix}/include /usr/include/tcl$cyg_ac_tcl_version /usr/include"
 
-else
-  
-  if test "${with_tcl_header}" = "no"; then
-    cyg_ac_tcl_incdir=${prefix}/include
-  else
-    with_tcl=yes
-    cyg_ac_tcl_incdir=${with_tcl_header}/include
-  fi
+cyg_ac_tcl_incdir=NO
+for i in $tcl_incdirs;
+do
+  for j in tcl.h;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_incdir=$i
+      break 2
+    fi
+  done
+done
 
-  if test "${with_tcl_lib}" = "no"; then
-    cyg_ac_tcl_libdir=${prefix}/lib
-  else
-    with_tcl=yes
-    cyg_ac_tcl_libdir=${with_tcl_lib}/lib
-  fi
-
-fi
-
-echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
 
 if test \! -r ${cyg_ac_tcl_incdir}/tcl.h ; then
   { echo "configure: error: unable to locate Tcl header file tcl.h" 1>&2; exit 1; }
 fi
 
+tcl_libdirs="${with_tcl_lib} ${with_tcl}/lib ${prefix}/lib /usr/lib/tcl$cyg_ac_tcl_version /usr/lib"
+
+cyg_ac_tcl_libdir=NO
+for i in $tcl_libdirs;
+do
+  for j in tclConfig.sh;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_libdir=$i
+      break 2
+    fi
+  done
+done
+
+
+echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
+
 if test "${MSVC}" = "yes" ; then
   cyg_ac_tcl_libs="tcl${cyg_ac_tcl_version}.lib"
   
--- a/host/libcdl/configure
+++ b/host/libcdl/configure
@@ -59,7 +59,6 @@ program_suffix=NONE
 program_transform_name=s,x,x,
 silent=
 site=
-sitefile=
 srcdir=
 target=NONE
 verbose=
@@ -174,7 +173,6 @@ Configuration:
   --help                  print this message
   --no-create             do not create output files
   --quiet, --silent       do not print \`checking...' messages
-  --site-file=FILE        use FILE as the site file
   --version               print the version of autoconf that created configure
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
@@ -345,11 +343,6 @@ EOF
   -site=* | --site=* | --sit=*)
     site="$ac_optarg" ;;
 
-  -site-file | --site-file | --site-fil | --site-fi | --site-f)
-    ac_prev=sitefile ;;
-  -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
-    sitefile="$ac_optarg" ;;
-
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -515,16 +508,12 @@ fi
 srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
 
 # Prefer explicitly selected file to automatically selected ones.
-if test -z "$sitefile"; then
-  if test -z "$CONFIG_SITE"; then
-    if test "x$prefix" != xNONE; then
-      CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-    else
-      CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-    fi
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
   fi
-else
-  CONFIG_SITE="$sitefile"
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
@@ -591,7 +580,7 @@ else { echo "configure: error: can not r
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:595: checking host system type" >&5
+echo "configure:584: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -624,7 +613,7 @@ echo "$ac_t""$host" 1>&6
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:628: checking for a BSD compatible install" >&5
+echo "configure:617: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -677,7 +666,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:681: checking whether build environment is sane" >&5
+echo "configure:670: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -734,7 +723,7 @@ test "$program_suffix" != NONE &&
 test "$program_transform_name" = "" && program_transform_name="s,x,x,"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:738: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:727: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -780,7 +769,7 @@ EOF
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:784: checking for working aclocal" >&5
+echo "configure:773: checking for working aclocal" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -793,7 +782,7 @@ else
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:797: checking for working autoconf" >&5
+echo "configure:786: checking for working autoconf" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -806,7 +795,7 @@ else
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:810: checking for working automake" >&5
+echo "configure:799: checking for working automake" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -819,7 +808,7 @@ else
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:823: checking for working autoheader" >&5
+echo "configure:812: checking for working autoheader" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -832,7 +821,7 @@ else
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:836: checking for working makeinfo" >&5
+echo "configure:825: checking for working makeinfo" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -854,7 +843,7 @@ EOF
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:858: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:847: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -878,7 +867,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:882: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:871: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -907,7 +896,7 @@ fi
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:911: checking for $ac_word" >&5
+echo "configure:900: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -937,7 +926,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:941: checking for $ac_word" >&5
+echo "configure:930: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -988,7 +977,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:992: checking for $ac_word" >&5
+echo "configure:981: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1020,7 +1009,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1024: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1013: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1031,12 +1020,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1035 "configure"
+#line 1024 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1062,12 +1051,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1066: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1055: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1071: checking whether we are using GNU C" >&5
+echo "configure:1060: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1076,7 +1065,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1080: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1069: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1095,7 +1084,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1099: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1088: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1131,7 +1120,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1135: checking for $ac_word" >&5
+echo "configure:1124: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1163,7 +1152,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1167: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1156: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1174,12 +1163,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1178 "configure"
+#line 1167 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1205,12 +1194,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1209: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1198: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1214: checking whether we are using GNU C++" >&5
+echo "configure:1203: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1219,7 +1208,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1223: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1238,7 +1227,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1242: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1231: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1272,7 +1261,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1276: checking for $ac_word" >&5
+echo "configure:1265: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1300,13 +1289,13 @@ else
 fi
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1304: checking for object suffix" >&5
+echo "configure:1293: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1310: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1299: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1324,12 +1313,12 @@ OBJEXT=$ac_cv_objext
 ac_objext=$ac_cv_objext
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:1328: checking for Cygwin environment" >&5
+echo "configure:1317: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1333 "configure"
+#line 1322 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1340,7 +1329,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:1344: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1333: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -1357,19 +1346,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1361: checking for mingw32 environment" >&5
+echo "configure:1350: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1366 "configure"
+#line 1355 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:1373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1362: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -1388,7 +1377,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=y
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1392: checking for executable suffix" >&5
+echo "configure:1381: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1398,10 +1387,10 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+      *.c | *.o | *.obj) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -1423,7 +1412,7 @@ ac_exeext=$EXEEXT
     
 
     echo $ac_n "checking "for Visual C++"""... $ac_c" 1>&6
-echo "configure:1427: checking "for Visual C++"" >&5
+echo "configure:1416: checking "for Visual C++"" >&5
     MSVC="no";
     if test "${CC}" = "cl" ; then
        MSVC="yes"
@@ -1448,7 +1437,7 @@ fi
     
 
     echo $ac_n "checking "the default compiler flags"""... $ac_c" 1>&6
-echo "configure:1452: checking "the default compiler flags"" >&5
+echo "configure:1441: checking "the default compiler flags"" >&5
 
                         cygflags_enable_debug="no"
     # Check whether --enable-debug or --disable-debug was given.
@@ -1644,7 +1633,7 @@ fi
 
 
 echo $ac_n "checking for Tcl version""... $ac_c" 1>&6
-echo "configure:1648: checking for Tcl version" >&5
+echo "configure:1637: checking for Tcl version" >&5
 # Check whether --with-tcl-version or --without-tcl-version was given.
 if test "${with_tcl_version+set}" = set; then
   withval="$with_tcl_version"
@@ -1668,6 +1657,13 @@ fi
 echo "$ac_t""${cyg_ac_tcl_version}" 1>&6
 
 
+
+# Check whether --with-tcl or --without-tcl was given.
+if test "${with_tcl+set}" = set; then
+  withval="$with_tcl"
+  :
+fi
+
 # Check whether --with-tcl or --without-tcl was given.
 if test "${with_tcl+set}" = set; then
   withval="$with_tcl"
@@ -1682,38 +1678,44 @@ fi
 
 
 echo $ac_n "checking for Tcl installation""... $ac_c" 1>&6
-echo "configure:1686: checking for Tcl installation" >&5
-# Check whether --with-tcl or --without-tcl was given.
-if test "${with_tcl+set}" = set; then
-  withval="$with_tcl"
-  
-  cyg_ac_tcl_incdir=${with_tcl}/include
-  cyg_ac_tcl_libdir=${with_tcl}/lib
+echo "configure:1682: checking for Tcl installation" >&5
+
+tcl_incdirs="${with_tcl_header} ${with_tcl}/include ${prefix}/include /usr/include/tcl$cyg_ac_tcl_version /usr/include"
 
-else
-  
-  if test "${with_tcl_header}" = "no"; then
-    cyg_ac_tcl_incdir=${prefix}/include
-  else
-    with_tcl=yes
-    cyg_ac_tcl_incdir=${with_tcl_header}/include
-  fi
+cyg_ac_tcl_incdir=NO
+for i in $tcl_incdirs;
+do
+  for j in tcl.h;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_incdir=$i
+      break 2
+    fi
+  done
+done
 
-  if test "${with_tcl_lib}" = "no"; then
-    cyg_ac_tcl_libdir=${prefix}/lib
-  else
-    with_tcl=yes
-    cyg_ac_tcl_libdir=${with_tcl_lib}/lib
-  fi
-
-fi
-
-echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
 
 if test \! -r ${cyg_ac_tcl_incdir}/tcl.h ; then
   { echo "configure: error: unable to locate Tcl header file tcl.h" 1>&2; exit 1; }
 fi
 
+tcl_libdirs="${with_tcl_lib} ${with_tcl}/lib ${prefix}/lib /usr/lib/tcl$cyg_ac_tcl_version /usr/lib"
+
+cyg_ac_tcl_libdir=NO
+for i in $tcl_libdirs;
+do
+  for j in tclConfig.sh;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_libdir=$i
+      break 2
+    fi
+  done
+done
+
+
+echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
+
 if test "${MSVC}" = "yes" ; then
   cyg_ac_tcl_libs="tcl${cyg_ac_tcl_version}.lib"
   
@@ -1749,7 +1751,7 @@ fi
 
 
 echo $ac_n "checking for infrastructure files""... $ac_c" 1>&6
-echo "configure:1753: checking for infrastructure files" >&5
+echo "configure:1755: checking for infrastructure files" >&5
 # Check whether --with-infra or --without-infra was given.
 if test "${with_infra+set}" = set; then
   withval="$with_infra"
--- a/host/tools/Utils/common/configure
+++ b/host/tools/Utils/common/configure
@@ -35,7 +35,6 @@ program_suffix=NONE
 program_transform_name=s,x,x,
 silent=
 site=
-sitefile=
 srcdir=
 target=NONE
 verbose=
@@ -150,7 +149,6 @@ Configuration:
   --help                  print this message
   --no-create             do not create output files
   --quiet, --silent       do not print \`checking...' messages
-  --site-file=FILE        use FILE as the site file
   --version               print the version of autoconf that created configure
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
@@ -321,11 +319,6 @@ EOF
   -site=* | --site=* | --sit=*)
     site="$ac_optarg" ;;
 
-  -site-file | --site-file | --site-fil | --site-fi | --site-f)
-    ac_prev=sitefile ;;
-  -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
-    sitefile="$ac_optarg" ;;
-
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -491,16 +484,12 @@ fi
 srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
 
 # Prefer explicitly selected file to automatically selected ones.
-if test -z "$sitefile"; then
-  if test -z "$CONFIG_SITE"; then
-    if test "x$prefix" != xNONE; then
-      CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-    else
-      CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-    fi
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
   fi
-else
-  CONFIG_SITE="$sitefile"
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
@@ -567,7 +556,7 @@ else { echo "configure: error: can not r
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:571: checking host system type" >&5
+echo "configure:560: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -600,7 +589,7 @@ echo "$ac_t""$host" 1>&6
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:604: checking for a BSD compatible install" >&5
+echo "configure:593: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -653,7 +642,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:657: checking whether build environment is sane" >&5
+echo "configure:646: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -710,7 +699,7 @@ test "$program_suffix" != NONE &&
 test "$program_transform_name" = "" && program_transform_name="s,x,x,"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:714: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:703: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -756,7 +745,7 @@ EOF
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:760: checking for working aclocal" >&5
+echo "configure:749: checking for working aclocal" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -769,7 +758,7 @@ else
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:773: checking for working autoconf" >&5
+echo "configure:762: checking for working autoconf" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -782,7 +771,7 @@ else
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:786: checking for working automake" >&5
+echo "configure:775: checking for working automake" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -795,7 +784,7 @@ else
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:799: checking for working autoheader" >&5
+echo "configure:788: checking for working autoheader" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -808,7 +797,7 @@ else
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:812: checking for working makeinfo" >&5
+echo "configure:801: checking for working makeinfo" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -822,7 +811,7 @@ fi
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:826: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:815: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -846,7 +835,7 @@ fi
 
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:850: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:839: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -875,7 +864,7 @@ fi
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:879: checking for $ac_word" >&5
+echo "configure:868: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -905,7 +894,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:909: checking for $ac_word" >&5
+echo "configure:898: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -956,7 +945,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:960: checking for $ac_word" >&5
+echo "configure:949: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -988,7 +977,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:992: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:981: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -999,12 +988,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1003 "configure"
+#line 992 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:1008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1030,12 +1019,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1034: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1023: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1039: checking whether we are using GNU C" >&5
+echo "configure:1028: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1044,7 +1033,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1048: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1037: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1063,7 +1052,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1067: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1056: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1099,7 +1088,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1103: checking for $ac_word" >&5
+echo "configure:1092: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1131,7 +1120,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1135: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1124: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1142,12 +1131,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1146 "configure"
+#line 1135 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1173,12 +1162,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1177: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1166: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1182: checking whether we are using GNU C++" >&5
+echo "configure:1171: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1187,7 +1176,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1191: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1206,7 +1195,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1210: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1199: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1240,7 +1229,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1244: checking for $ac_word" >&5
+echo "configure:1233: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1268,13 +1257,13 @@ else
 fi
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1272: checking for object suffix" >&5
+echo "configure:1261: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1278: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1292,12 +1281,12 @@ OBJEXT=$ac_cv_objext
 ac_objext=$ac_cv_objext
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:1296: checking for Cygwin environment" >&5
+echo "configure:1285: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1301 "configure"
+#line 1290 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1308,7 +1297,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:1312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -1325,19 +1314,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1329: checking for mingw32 environment" >&5
+echo "configure:1318: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1334 "configure"
+#line 1323 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:1341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -1356,7 +1345,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=y
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1360: checking for executable suffix" >&5
+echo "configure:1349: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1366,10 +1355,10 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+      *.c | *.o | *.obj) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -1391,7 +1380,7 @@ ac_exeext=$EXEEXT
     
 
     echo $ac_n "checking "for Visual C++"""... $ac_c" 1>&6
-echo "configure:1395: checking "for Visual C++"" >&5
+echo "configure:1384: checking "for Visual C++"" >&5
     MSVC="no";
     if test "${CC}" = "cl" ; then
        MSVC="yes"
@@ -1416,7 +1405,7 @@ fi
     
 
     echo $ac_n "checking "the default compiler flags"""... $ac_c" 1>&6
-echo "configure:1420: checking "the default compiler flags"" >&5
+echo "configure:1409: checking "the default compiler flags"" >&5
 
                         cygflags_enable_debug="no"
     # Check whether --enable-debug or --disable-debug was given.
--- a/host/tools/configtool/standalone/common/configure
+++ b/host/tools/configtool/standalone/common/configure
@@ -43,7 +43,6 @@ program_suffix=NONE
 program_transform_name=s,x,x,
 silent=
 site=
-sitefile=
 srcdir=
 target=NONE
 verbose=
@@ -158,7 +157,6 @@ Configuration:
   --help                  print this message
   --no-create             do not create output files
   --quiet, --silent       do not print \`checking...' messages
-  --site-file=FILE        use FILE as the site file
   --version               print the version of autoconf that created configure
 Directory and file names:
   --prefix=PREFIX         install architecture-independent files in PREFIX
@@ -329,11 +327,6 @@ EOF
   -site=* | --site=* | --sit=*)
     site="$ac_optarg" ;;
 
-  -site-file | --site-file | --site-fil | --site-fi | --site-f)
-    ac_prev=sitefile ;;
-  -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
-    sitefile="$ac_optarg" ;;
-
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@@ -499,16 +492,12 @@ fi
 srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
 
 # Prefer explicitly selected file to automatically selected ones.
-if test -z "$sitefile"; then
-  if test -z "$CONFIG_SITE"; then
-    if test "x$prefix" != xNONE; then
-      CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-    else
-      CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-    fi
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
   fi
-else
-  CONFIG_SITE="$sitefile"
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
@@ -580,7 +569,7 @@ ac_configure=$ac_aux_dir/configure # Thi
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:584: checking for a BSD compatible install" >&5
+echo "configure:573: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -633,7 +622,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:637: checking whether build environment is sane" >&5
+echo "configure:626: checking whether build environment is sane" >&5
 # Just in case
 sleep 1
 echo timestamp > conftestfile
@@ -690,7 +679,7 @@ test "$program_suffix" != NONE &&
 test "$program_transform_name" = "" && program_transform_name="s,x,x,"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:694: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:683: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -736,7 +725,7 @@ EOF
 
 missing_dir=`cd $ac_aux_dir && pwd`
 echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:740: checking for working aclocal" >&5
+echo "configure:729: checking for working aclocal" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -749,7 +738,7 @@ else
 fi
 
 echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:753: checking for working autoconf" >&5
+echo "configure:742: checking for working autoconf" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -762,7 +751,7 @@ else
 fi
 
 echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:766: checking for working automake" >&5
+echo "configure:755: checking for working automake" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -775,7 +764,7 @@ else
 fi
 
 echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:779: checking for working autoheader" >&5
+echo "configure:768: checking for working autoheader" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -788,7 +777,7 @@ else
 fi
 
 echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:792: checking for working makeinfo" >&5
+echo "configure:781: checking for working makeinfo" >&5
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
@@ -802,7 +791,7 @@ fi
 
 
 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:806: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:795: checking whether to enable maintainer-specific portions of Makefiles" >&5
     # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 if test "${enable_maintainer_mode+set}" = set; then
   enableval="$enable_maintainer_mode"
@@ -832,7 +821,7 @@ else { echo "configure: error: can not r
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:836: checking host system type" >&5
+echo "configure:825: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -855,7 +844,7 @@ echo "$ac_t""$host" 1>&6
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:859: checking for $ac_word" >&5
+echo "configure:848: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -885,7 +874,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:889: checking for $ac_word" >&5
+echo "configure:878: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -936,7 +925,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:940: checking for $ac_word" >&5
+echo "configure:929: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -968,7 +957,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:972: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:961: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -979,12 +968,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 983 "configure"
+#line 972 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1010,12 +999,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1014: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1003: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1019: checking whether we are using GNU C" >&5
+echo "configure:1008: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1024,7 +1013,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1017: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1043,7 +1032,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1047: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1036: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1079,7 +1068,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1083: checking for $ac_word" >&5
+echo "configure:1072: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1111,7 +1100,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1115: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1104: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1122,12 +1111,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 1126 "configure"
+#line 1115 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:1131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -1153,12 +1142,12 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1157: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1146: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1162: checking whether we are using GNU C++" >&5
+echo "configure:1151: checking whether we are using GNU C++" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1167,7 +1156,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1171: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1160: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -1186,7 +1175,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1190: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:1179: checking whether ${CXX-g++} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1218,13 +1207,13 @@ else
 fi
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1222: checking for object suffix" >&5
+echo "configure:1211: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1217: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1242,12 +1231,12 @@ OBJEXT=$ac_cv_objext
 ac_objext=$ac_cv_objext
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:1246: checking for Cygwin environment" >&5
+echo "configure:1235: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1251 "configure"
+#line 1240 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1258,7 +1247,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:1262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -1275,19 +1264,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1279: checking for mingw32 environment" >&5
+echo "configure:1268: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1284 "configure"
+#line 1273 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:1291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1280: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -1306,7 +1295,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=y
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1310: checking for executable suffix" >&5
+echo "configure:1299: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1316,10 +1305,10 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:1309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
-      *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+      *.c | *.o | *.obj) ;;
       *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
       esac
     done
@@ -1341,7 +1330,7 @@ ac_exeext=$EXEEXT
     
 
     echo $ac_n "checking "for Visual C++"""... $ac_c" 1>&6
-echo "configure:1345: checking "for Visual C++"" >&5
+echo "configure:1334: checking "for Visual C++"" >&5
     MSVC="no";
     if test "${CC}" = "cl" ; then
        MSVC="yes"
@@ -1366,7 +1355,7 @@ fi
     
 
     echo $ac_n "checking "the default compiler flags"""... $ac_c" 1>&6
-echo "configure:1370: checking "the default compiler flags"" >&5
+echo "configure:1359: checking "the default compiler flags"" >&5
 
                         cygflags_enable_debug="no"
     # Check whether --enable-debug or --disable-debug was given.
@@ -1418,7 +1407,7 @@ fi
 
 
 echo $ac_n "checking for Tcl version""... $ac_c" 1>&6
-echo "configure:1422: checking for Tcl version" >&5
+echo "configure:1411: checking for Tcl version" >&5
 # Check whether --with-tcl-version or --without-tcl-version was given.
 if test "${with_tcl_version+set}" = set; then
   withval="$with_tcl_version"
@@ -1442,6 +1431,13 @@ fi
 echo "$ac_t""${cyg_ac_tcl_version}" 1>&6
 
 
+
+# Check whether --with-tcl or --without-tcl was given.
+if test "${with_tcl+set}" = set; then
+  withval="$with_tcl"
+  :
+fi
+
 # Check whether --with-tcl or --without-tcl was given.
 if test "${with_tcl+set}" = set; then
   withval="$with_tcl"
@@ -1456,38 +1452,44 @@ fi
 
 
 echo $ac_n "checking for Tcl installation""... $ac_c" 1>&6
-echo "configure:1460: checking for Tcl installation" >&5
-# Check whether --with-tcl or --without-tcl was given.
-if test "${with_tcl+set}" = set; then
-  withval="$with_tcl"
-  
-  cyg_ac_tcl_incdir=${with_tcl}/include
-  cyg_ac_tcl_libdir=${with_tcl}/lib
+echo "configure:1456: checking for Tcl installation" >&5
+
+tcl_incdirs="${with_tcl_header} ${with_tcl}/include ${prefix}/include /usr/include/tcl$cyg_ac_tcl_version /usr/include"
 
-else
-  
-  if test "${with_tcl_header}" = "no"; then
-    cyg_ac_tcl_incdir=${prefix}/include
-  else
-    with_tcl=yes
-    cyg_ac_tcl_incdir=${with_tcl_header}/include
-  fi
+cyg_ac_tcl_incdir=NO
+for i in $tcl_incdirs;
+do
+  for j in tcl.h;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_incdir=$i
+      break 2
+    fi
+  done
+done
 
-  if test "${with_tcl_lib}" = "no"; then
-    cyg_ac_tcl_libdir=${prefix}/lib
-  else
-    with_tcl=yes
-    cyg_ac_tcl_libdir=${with_tcl_lib}/lib
-  fi
-
-fi
-
-echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
 
 if test \! -r ${cyg_ac_tcl_incdir}/tcl.h ; then
   { echo "configure: error: unable to locate Tcl header file tcl.h" 1>&2; exit 1; }
 fi
 
+tcl_libdirs="${with_tcl_lib} ${with_tcl}/lib ${prefix}/lib /usr/lib/tcl$cyg_ac_tcl_version /usr/lib"
+
+cyg_ac_tcl_libdir=NO
+for i in $tcl_libdirs;
+do
+  for j in tclConfig.sh;
+  do
+    if test -r "$i/$j"; then
+      cyg_ac_tcl_libdir=$i
+      break 2
+    fi
+  done
+done
+
+
+echo "$ac_t""${cyg_ac_tcl_libdir}" 1>&6
+
 if test "${MSVC}" = "yes" ; then
   cyg_ac_tcl_libs="tcl${cyg_ac_tcl_version}.lib"
   
@@ -1523,7 +1525,7 @@ fi
 
 
 echo $ac_n "checking for host-side infrastructure""... $ac_c" 1>&6
-echo "configure:1527: checking for host-side infrastructure" >&5
+echo "configure:1529: checking for host-side infrastructure" >&5
 cyg_ac_infra_incdir=../../../../infra
 cyg_ac_infra_libdir=../../../../infra
 if test "${MSVC}" = "yes" ; then
@@ -1556,7 +1558,7 @@ fi
 echo "$ac_t""-I${cyg_ac_infra_incdir} -L${cyg_ac_infra_libdir} libraries ${cyg_ac_infra_libraries}" 1>&6
 
 echo $ac_n "checking for libcdl""... $ac_c" 1>&6
-echo "configure:1560: checking for libcdl" >&5
+echo "configure:1562: checking for libcdl" >&5
 cyg_ac_cdl_incdir=${srcdir}/../../../../libcdl
 cyg_ac_cdl_libdir=../../../../libcdl
 if test "${MSVC}" = "yes" ; then
--- a/packages/ChangeLog
+++ b/packages/ChangeLog
@@ -1,3 +1,14 @@
+2001-02-09  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* pkgconf/rules.mak: Revert below change for now until we work
+	out something better.
+
+2001-02-06  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* pkgconf/rules.mak: When generating dependencies, accomodate
+	new gcc dependency output format (and preserve compatibility
+	with the old - it just generates a redundant dependency).
+
 2001-01-25  Jesper Skov  <jskov@redhat.com>
 
 	* ecos.db: Added generic i82559 ethernet driver.
@@ -8,6 +19,12 @@ 2000-11-25  Jonathan Larmour  <jlarmour@
 	* pkgconf/rules.mak (mlt_headers): Rewrite to work under Solaris,
 	and without excessive rebuilds.
 
+2000-11-21  Bart Veer  <bartv@redhat.com>
+
+	* ecos.db:
+	* customers:
+	Added USB support
+
 2000-11-16  Jesper Skov  <jskov@redhat.com>
 
 	* ecos.db: Added intel flash driver. Going to use it as a test to
--- a/packages/NEWS
+++ b/packages/NEWS
@@ -1,3 +1,13 @@
+* Added support for USB slave devices. This includes generic USB slave
+  support, a device driver for the SA11x0 on-chip USB device, and an
+  additional support package for developing USB-ethernet and similar
+  peripherals.
+* Added POSIX cancellation points for the sigwait family of functions,
+  pthread_join, pthread_cond_wait, pthread_cond_timedwait, sleep and
+  nanosleep
+* Virtual vectors initialization can now be configured with a finer 
+  granularity. Diagnostic output should also appear on the same channel
+  (possibly ethernet) as the application was launched from.
 * Added cyg_pci_find_matching() to PCI library API to allow more generalized
   matching on device properties.
 * ARM EBSA285 now configured to use virtual vectors all the time. Users with
--- a/packages/compat/posix/current/ChangeLog
+++ b/packages/compat/posix/current/ChangeLog
@@ -1,3 +1,32 @@
+2001-02-11  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* include/pthread.h: Add new pthread_testcancel_unlock and
+	pthread_canceled functions as eCos extensions.
+	Rename existing pthread_canceled variable to pthread_cancelled_dummy_var
+	
+	* src/pthread.cxx (pthread_canceled): New function to interrogate if
+	current thread has deferred cancel pending
+	(pthread_testcancel_unlock): New function. Like testcancel, but unlocks
+	a mutex before exitting the thread.
+	(checkforcancel): New internal function
+	(pthread_join): Add thread cancellation checks.
+	(pthread_cond_wait): Ditto.
+	(pthread_cond_timedwait): Ditto.
+	(pthread_testcancel): Use checkforcancel()
+	
+	* src/sem.cxx (sem_wait): Add thread cancellation checks
+	* src/signal.cxx (sigtimedwait): Ditto.
+	Also make compilation of this file conditional on CYGPKG_POSIX_SIGNALS
+	* src/time.cxx (nanosleep): Ditto.
+	Also make compilation of this file conditional on CYGPKG_POSIX_TIMERS
+
+	* cdl/posix.cdl (CYGPKG_POSIX_TIMERS): Implements POSIX timer ops.
+	Add explicit kernel and pthread dependencies.
+
+	* tests/sigsetjmp.c (pthread_entry1): Fix incorrect thread no. output
+
+	* tests/pthread3.c: Add deferred cancellation test.
+
 2001-01-11  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* src/pthread.cxx (pthread_testcancel): Added test for self !=
--- a/packages/compat/posix/current/cdl/posix.cdl
+++ b/packages/compat/posix/current/cdl/posix.cdl
@@ -114,10 +114,14 @@ cdl_package CYGPKG_POSIX {
 	default_value    1
         implements       CYGINT_ISO_POSIX_TIMER_TYPES
         implements       CYGINT_ISO_POSIX_TIMERS
+        implements       CYGINT_ISO_POSIX_TIMER_OPS
         requires         { CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER == \
                              "<cyg/posix/time.h>" }
         requires         { CYGBLD_ISO_POSIX_TIMERS_HEADER == \
                              "<cyg/posix/time.h>" }
+        requires         CYGPKG_KERNEL
+        requires         CYGVAR_KERNEL_COUNTERS_CLOCK
+        requires         CYGPKG_POSIX_PTHREAD
 	description      "This component provides configuration controls for
 	                  the POSIX timers."
     }
@@ -194,6 +198,8 @@ cdl_package CYGPKG_POSIX {
 	flavor           bool
 	default_value    1
 	requires	 CYGPKG_KERNEL_EXCEPTIONS
+        requires         CYGPKG_POSIX_PTHREAD
+        requires         CYGPKG_POSIX_TIMERS
         implements       CYGINT_POSIX_REALTIME_SIGNALS
 	description      "This component provides configuration controls for
 	                  the POSIX signals."
--- a/packages/compat/posix/current/include/pthread.h
+++ b/packages/compat/posix/current/include/pthread.h
@@ -352,9 +352,9 @@ struct pthread_cleanup_buffer
 // location we define we can ensure that it differs from NULL and any
 // other valid pointer (as required by the standard).
 
-externC int pthread_canceled;
+externC int pthread_canceled_dummy_var;
 
-#define PTHREAD_CANCELED                ((void *)(&pthread_canceled))
+#define PTHREAD_CANCELED                ((void *)(&pthread_canceled_dummy_var))
 
 //-----------------------------------------------------------------------------
 // Cancelability enable and type
@@ -383,6 +383,15 @@ externC int pthread_cancel (pthread_t th
 // the thread if there is one.
 externC void pthread_testcancel (void);
 
+// eCos extension:
+// Test for a pending cancellation for the current thread and terminate
+// the thread if there is one, unlocking the supplied mutex first.
+externC void pthread_testcancel_unlock ( pthread_mutex_t *__mut );
+
+// eCos extension:
+// Test for a pending cancellation for the current thread and return
+// non-zero if this thread has a deferred cancellation pending
+externC int pthread_canceled (void);
 
 // Install a cleanup routine.
 // Note that pthread_cleanup_push() and pthread_cleanup_pop() are macros that
--- a/packages/compat/posix/current/src/pthread.cxx
+++ b/packages/compat/posix/current/src/pthread.cxx
@@ -164,7 +164,7 @@ static pthread_t main_thread;
 //=============================================================================
 // Exported variables
 
-int pthread_canceled;           // pointed to by PTHREAD_CANCELED
+int pthread_canceled_dummy_var;           // pointed to by PTHREAD_CANCELED
 
 //=============================================================================
 // Internal functions
@@ -271,6 +271,27 @@ static void *call_main( void * )
 }
 
 //-----------------------------------------------------------------------------
+// Check whether there is a cancel pending and if so, whether
+// cancellations are enabled. We do it in this order to reduce the
+// number of tests in the common case - when no cancellations are
+// pending.
+// We make this inline so it can be called directly below for speed
+
+static __inline__ int
+checkforcancel( void )
+{
+     pthread_info *self = pthread_self_info();
+
+    if( self != NULL &&
+        self->cancelpending &&
+        self->cancelstate == PTHREAD_CANCEL_ENABLE )
+        return 1;
+    else
+        return 0;
+}
+
+
+//-----------------------------------------------------------------------------
 // POSIX ASR
 // This is installed as the ASR for all POSIX threads.
 
@@ -763,6 +784,9 @@ externC int pthread_join (pthread_t thre
 {
     PTHREAD_ENTRY();
     
+    // check for cancellation first.
+    pthread_testcancel();
+
     pthread_mutex.lock();
     
     // Dispose of any dead threads
@@ -787,8 +811,11 @@ externC int pthread_join (pthread_t thre
     {
     case PTHREAD_STATE_RUNNING:
         // The thread is still running, we must wait for it.
-        while( joinee->state == PTHREAD_STATE_RUNNING )
+        while( joinee->state == PTHREAD_STATE_RUNNING ) {
             joinee->joiner->wait();
+            // check if we were woken because we were being cancelled
+            pthread_testcancel_unlock( (pthread_mutex_t *)&pthread_mutex);
+        }
 
         // check that the thread is still joinable
         if( joinee->state == PTHREAD_STATE_JOIN )
@@ -1641,11 +1668,17 @@ externC int pthread_cond_wait (pthread_c
 {
     PTHREAD_ENTRY();
 
+    // check for cancellation first.
+    pthread_testcancel();
+
     PTHREAD_CHECK( cond );
     PTHREAD_CHECK( mutex );    
 
     ((Cyg_Condition_Variable *)cond)->wait( *(Cyg_Mutex *)mutex );
     
+    // check if we were woken because we were being cancelled
+    pthread_testcancel();
+
     PTHREAD_RETURN(0);
 }
 
@@ -1658,6 +1691,9 @@ externC int pthread_cond_timedwait (pthr
 {
     PTHREAD_ENTRY();
 
+    // check for cancellation first.
+    pthread_testcancel();
+
     PTHREAD_CHECK( cond );
     PTHREAD_CHECK( mutex );    
     PTHREAD_CHECK( abstime );    
@@ -1673,6 +1709,9 @@ externC int pthread_cond_timedwait (pthr
     
     ((Cyg_Condition_Variable *)cond)->wait( *(Cyg_Mutex *)mutex, ticks );
     
+    // check if we were woken because we were being cancelled
+    pthread_testcancel();
+
     PTHREAD_RETURN(0);
 }
 
@@ -1920,20 +1959,31 @@ externC int pthread_cancel (pthread_t th
 
     th->cancelpending = true;
 
-    if( th->cancelstate == PTHREAD_CANCEL_ENABLE &&
-        th->canceltype == PTHREAD_CANCEL_ASYNCHRONOUS )
+    if ( th->cancelstate == PTHREAD_CANCEL_ENABLE )
     {
-        // If the thread has cancellation enabled, and it is in
-        // asynchronous mode, set the eCos thread's ASR pending to
-        // deal with it when the thread wakes up. We also release the
-        // thread out of any current wait to make it wake up.
+        if ( th->canceltype == PTHREAD_CANCEL_ASYNCHRONOUS )
+        {
+            // If the thread has cancellation enabled, and it is in
+            // asynchronous mode, set the eCos thread's ASR pending to
+            // deal with it when the thread wakes up. We also release the
+            // thread out of any current wait to make it wake up.
         
-        th->thread->set_asr_pending();
-        th->thread->release();
+            th->thread->set_asr_pending();
+            th->thread->release();
+        }
+        else if ( th->canceltype == PTHREAD_CANCEL_DEFERRED )
+        {
+            // If the thread has cancellation enabled, and it is in 
+            // deferred mode, wake the thread up so that cancellation
+            // points can test for cancellation.
+            th->thread->release();
+        }
+        else
+            CYG_FAIL("Unknown cancellation type");
     }
-    // Otherwise the thread either has cancellation disabled, or is
-    // in deferred mode. In either case it is up to the thread to
-    // get into a state to deal with the pending cancellation.
+
+    // Otherwise the thread has cancellation disabled, in which case
+    // it is up to the thread to enable cancellation
     
     pthread_mutex.unlock();   
    
@@ -1942,6 +1992,42 @@ externC int pthread_cancel (pthread_t th
 }
 
 //-----------------------------------------------------------------------------
+// eCos extension:
+// Test for a pending cancellation for the current thread and return
+// non-zero if this thread has a deferred cancellation pending
+
+externC int pthread_canceled(void)
+{
+    PTHREAD_ENTRY();
+    PTHREAD_RETURN( checkforcancel() );
+}
+
+//-----------------------------------------------------------------------------
+// eCos extension:
+// Test for a pending cancellation for the current thread and terminate
+// the thread if there is one, unlocking the supplied mutex first.
+
+externC void pthread_testcancel_unlock( pthread_mutex_t *__mut )
+{
+    PTHREAD_ENTRY_VOID();
+    
+    if( checkforcancel() )
+    {
+        Cyg_Mutex *mut = (Cyg_Mutex *)__mut;
+        mut->unlock();
+
+        // If we have cancellation enabled, and there is a cancellation
+        // pending, then go ahead and do the deed. 
+        
+        // Exit now with special retval. pthread_exit() calls the
+        // cancellation handlers implicitly.
+        pthread_exit(PTHREAD_CANCELED);
+    }
+        
+    PTHREAD_RETURN_VOID;
+}
+
+//-----------------------------------------------------------------------------
 // Test for a pending cancellation for the current thread and terminate
 // the thread if there is one.
 
@@ -1949,17 +2035,7 @@ externC void pthread_testcancel (void)
 {
     PTHREAD_ENTRY_VOID();
 
-    pthread_info *self = pthread_self_info();
-
-    // Check whether there is a cancel pending and if so, whether
-    // cancellations are enabled. We do it in this order to reduce the
-    // number of tests in the common case - when no cancellations are
-    // pending.
-
-    if( self != NULL &&
-        self->cancelpending &&
-        self->cancelstate == PTHREAD_CANCEL_ENABLE )
-        
+    if( checkforcancel() )
     {
         // If we have cancellation enabled, and there is a cancellation
         // pending, then go ahead and do the deed. 
--- a/packages/compat/posix/current/src/sem.cxx
+++ b/packages/compat/posix/current/src/sem.cxx
@@ -135,10 +135,20 @@ externC int sem_wait  (sem_t *sem)
     
     SEMA_ENTRY();
 
+#ifdef CYGPKG_POSIX_PTHREAD
+    // check for cancellation first.
+    pthread_testcancel();
+#endif
+
     Cyg_Counting_Semaphore *sema = (Cyg_Counting_Semaphore *)sem;
 
     if( !sema->wait() ) retval = EINTR;
     
+#ifdef CYGPKG_POSIX_PTHREAD
+    // check if we were woken because we were being cancelled
+    pthread_testcancel();
+#endif
+
     SEMA_RETURN(retval);
 }
 
--- a/packages/compat/posix/current/src/signal.cxx
+++ b/packages/compat/posix/current/src/signal.cxx
@@ -44,9 +44,12 @@
 //
 //==========================================================================
 
+#include <pkgconf/posix.h>
+
+#ifdef CYGPKG_POSIX_SIGNALS
+
 #include <pkgconf/hal.h>
 #include <pkgconf/kernel.h>
-#include <pkgconf/posix.h>
 #include <pkgconf/isoinfra.h>
 
 #include <cyg/kernel/ktypes.h>          // base kernel types
@@ -769,6 +772,9 @@ externC int sigtimedwait  (const sigset_
 {
     SIGNAL_ENTRY();
 
+    // check for cancellation first.
+    pthread_testcancel();
+
     int err = 0;
     cyg_tick_count ticks;
 
@@ -792,6 +798,9 @@ externC int sigtimedwait  (const sigset_
         {
             if( ticks == 0 || !signal_sigwait.wait(ticks) )
             {
+                // first check we weren't woken up to be cancelled
+                pthread_testcancel_unlock( (pthread_mutex_t *)&signal_mutex );
+
                 // If the timeout is actually zero, or we have waited and
                 // timed out, then we must quit with an error.
                 err = EAGAIN;
@@ -803,6 +812,9 @@ externC int sigtimedwait  (const sigset_
         // Special case check for SIGALRM since the fact SIGALRM is masked
         // would have prevented it being set pending in the alarm handler.
         check_sigalarm();
+
+        // check we weren't woken up to be cancelled
+        pthread_testcancel_unlock( (pthread_mutex_t *)&signal_mutex );
     }
 
     if( err == 0 )
@@ -1125,5 +1137,7 @@ externC int raise(int sig)
     
 }
 
+#endif // ifdef CYGPKG_POSIX_SIGNALS
+
 // -------------------------------------------------------------------------
 // EOF signal.cxx
--- a/packages/compat/posix/current/src/time.cxx
+++ b/packages/compat/posix/current/src/time.cxx
@@ -44,9 +44,12 @@
 //
 //==========================================================================
 
+#include <pkgconf/posix.h>
+
+#ifdef CYGPKG_POSIX_TIMERS
+
 #include <pkgconf/hal.h>
 #include <pkgconf/kernel.h>
-#include <pkgconf/posix.h>
 
 #include <cyg/kernel/ktypes.h>          // base kernel types
 #include <cyg/infra/cyg_trac.h>         // tracing macros
@@ -605,6 +608,9 @@ externC int nanosleep( const struct time
 
     TIME_ENTRY();
 
+    // check for cancellation first.
+    pthread_testcancel();
+
     // Fail an invalid timespec
     if( !valid_timespec( rqtp ) )
         TIME_RETURN(EINVAL);
@@ -623,8 +629,10 @@ externC int nanosleep( const struct time
     
     // Do the delay, keeping track of how long we actually slept for.
     then = Cyg_Clock::real_time_clock->current_value();
-    
+
     self->thread->delay( ticks );
+    // check if we were woken up because we were cancelled.
+    pthread_testcancel();
 
     now = Cyg_Clock::real_time_clock->current_value();
 
@@ -644,5 +652,7 @@ externC int nanosleep( const struct time
     TIME_RETURN(0);
 }    
 
+#endif // ifdef CYGPKG_POSIX_TIMERS
+
 // -------------------------------------------------------------------------
 // EOF time.cxx
--- a/packages/compat/posix/current/tests/pthread3.c
+++ b/packages/compat/posix/current/tests/pthread3.c
@@ -32,7 +32,7 @@
 //#####DESCRIPTIONBEGIN####
 //
 // Author(s):     nickg
-// Contributors:  nickg
+// Contributors:  nickg, jlarmour
 // Date:          2000-04-10
 // Description:   Tests POSIX cancellation.
 //
@@ -41,13 +41,14 @@
 
 #include <sys/types.h>
 #include <pthread.h>
+#include <unistd.h> // sleep()
 
 #include <cyg/infra/testcase.h>
 
 //--------------------------------------------------------------------------
 // Thread info
 
-#define NTHREADS 2
+#define NTHREADS 3
 
 char thread_stack[NTHREADS][PTHREAD_STACK_MIN*2];
 
@@ -55,11 +56,13 @@ pthread_t thread[NTHREADS];
 
 void *pthread_entry1( void *arg);
 void *pthread_entry2( void *arg);
+void *pthread_entry3( void *arg);
 
 void *(*pthread_entry[NTHREADS])(void *) =
 {
     pthread_entry1,
-    pthread_entry2
+    pthread_entry2,
+    pthread_entry3
 };
 
 //--------------------------------------------------------------------------
@@ -67,6 +70,7 @@ void *(*pthread_entry[NTHREADS])(void *)
 volatile cyg_bool cancel_handler1_called = false;
 volatile cyg_bool cancel_handler2_called = false;
 volatile cyg_bool cancel_handler3_called = false;
+volatile cyg_bool thread_ready[NTHREADS];
 
 //--------------------------------------------------------------------------
 
@@ -129,6 +133,8 @@ void *pthread_entry1( void *arg)
     
     pthread_cleanup_push( cancel_handler1, arg );
 
+    thread_ready[0] = true;
+
     function1();    
     
     pthread_cleanup_pop( 0 );
@@ -148,6 +154,8 @@ void *pthread_entry2( void *arg)
     
     pthread_cleanup_push( cancel_handler3, arg );
 
+    thread_ready[1] = true;
+
     for(;;) sched_yield();
     
     pthread_cleanup_pop( 0 );
@@ -157,6 +165,24 @@ void *pthread_entry2( void *arg)
 
 //--------------------------------------------------------------------------
 
+void *pthread_entry3( void *arg)
+{
+    int retval = 1;
+
+    CYG_TEST_INFO( "pthread_entry3 entered");
+
+    pthread_setcanceltype( PTHREAD_CANCEL_DEFERRED, NULL );
+    
+    thread_ready[2] = true;
+
+    // stop in a cancellation point
+    sleep( 99999 );
+    
+    pthread_exit( (void *)retval );
+}
+
+//--------------------------------------------------------------------------
+
 int main(int argc, char **argv)
 {
     int i;
@@ -182,9 +208,10 @@ int main(int argc, char **argv)
     }
 
     // Let the threads get going
-    sched_yield();
-    sched_yield();
-    sched_yield();
+    for ( i = 0; i < NTHREADS ; i++ ) {
+        while ( thread_ready[i] == false )
+            sched_yield();
+    }
 
     // Now cancel them
     for( i = 0; i < NTHREADS; i++ )    
@@ -197,14 +224,13 @@ int main(int argc, char **argv)
 
     // check retvals
     for( i = 0; i < NTHREADS; i++ )
-        if( retval[0] != PTHREAD_CANCELED )
-            CYG_TEST_FAIL_FINISH( "pthread3" );
+        CYG_TEST_CHECK( retval[i] == PTHREAD_CANCELED,
+                        "thread didn't exit with PTHREAD_CANCELED" );
 
-    if( !cancel_handler1_called ) CYG_TEST_FAIL_FINISH( "pthread3" );
-    if( !cancel_handler2_called ) CYG_TEST_FAIL_FINISH( "pthread3" );
-    if( !cancel_handler3_called ) CYG_TEST_FAIL_FINISH( "pthread3" );
+    CYG_TEST_CHECK( cancel_handler1_called, "cancel_handler1 not called" );
+    CYG_TEST_CHECK( cancel_handler2_called, "cancel_handler2 not called" );
+    CYG_TEST_CHECK( cancel_handler3_called, "cancel_handler3 not called" );
 
-    
     CYG_TEST_PASS_FINISH( "pthread3" );
         
 }
--- a/packages/compat/posix/current/tests/sigsetjmp.c
+++ b/packages/compat/posix/current/tests/sigsetjmp.c
@@ -145,7 +145,7 @@ void *pthread_entry1( void *arg)
         CYG_TEST_INFO( "Thread1: calling pause()");        
         pause();
 
-        CYG_TEST_INFO( "Thread2: pause() returned");        
+        CYG_TEST_INFO( "Thread1: pause() returned");        
     } while(1);
 
     CYG_TEST_INFO( "Thread1: calling pthread_exit()");    
--- a/packages/devs/eth/arm/edb7xxx/current/ChangeLog
+++ b/packages/devs/eth/arm/edb7xxx/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-30  Gary Thomas  <gthomas@redhat.com>
+
+	* src/if_edb7xxx.c: New RedBoot config data layout.
+
 2001-01-01  David Geng <deli.geng@ncl.ac.uk> 
 
 	* src/if_edb7xxx.c (cs8900_start): Set 'txbusy' false after reset
--- a/packages/devs/eth/arm/edb7xxx/current/src/if_edb7xxx.c
+++ b/packages/devs/eth/arm/edb7xxx/current/src/if_edb7xxx.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -78,7 +78,7 @@
 RedBoot_config_option("Network hardware address [MAC]",
                       edb7xxx_esa,
                       ALWAYS_ENABLED, true,
-                      CONFIG_ESA
+                      CONFIG_ESA, 0
     );
 #endif
 #endif
--- a/packages/devs/eth/intel/i82559/current/ChangeLog
+++ b/packages/devs/eth/intel/i82559/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/if_i82559.c: Added FIXME for promisuous mode.
+
 2001-01-25  Jesper Skov  <jskov@redhat.com>
 
 	* src/if_i82559.c: Replace CYGNUM_HAL_INTERRUPT_PCI_IRQ with
--- a/packages/devs/eth/intel/i82559/current/src/if_i82559.c
+++ b/packages/devs/eth/intel/i82559/current/src/if_i82559.c
@@ -75,6 +75,8 @@
 //               some tweaking - config bits differ slightly but
 //               crucially.
 //        FIXME: EEPROM code not tested on a BE system.
+//        FIXME: Apparently promiscuous mode cannot be disabled (on
+//               BE systems?)
 //
 //####DESCRIPTIONEND####
 //
--- a/packages/devs/eth/powerpc/quicc/current/ChangeLog
+++ b/packages/devs/eth/powerpc/quicc/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-30  Gary Thomas  <gthomas@redhat.com>
+
+	* src/if_quicc.c: New RedBoot config data layout.
+
 2001-01-03  Gary Thomas  <gthomas@redhat.com>
 
 	* src/if_quicc.c: Add support in RedBoot to keep ESA (since
--- a/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c
+++ b/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -89,7 +89,7 @@ static unsigned char enaddr[] = { 0x08, 
 RedBoot_config_option("Network hardware address [MAC]",
                       quicc_esa,
                       ALWAYS_ENABLED, true,
-                      CONFIG_ESA
+                      CONFIG_ESA, 0
     );
 #endif
 #endif
new file mode 100644
--- /dev/null
+++ b/packages/devs/usb/sa11x0/current/ChangeLog
@@ -0,0 +1,128 @@
+2001-02-02  Bart Veer  <bartv@redhat.com>
+
+	* cdl/usbs_sa11x0.cdl:
+	Add doc property to the html
+
+	* doc/usbs_sa11x0.sgml, devs-usbs-sa11x0.html:
+	Incorporate changes from docs department, regenerate html
+
+2001-01-25  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0_data.cxx:
+	* cdl/usbs_sa11x0.cdl:
+	Devtab entries were never actually being built - and did not
+	build... 
+
+	* cdl/usbs_sa11x0.cdl:
+	Sort out the dependencies for minimal environments such as
+	RedBoot. 
+
+2001-01-24  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Invoke additional platform-specific initialization, if defined
+	via <cyg/hal/hal_io.h> and CYGBLD_HAL_PLATFORM_IO_H
+
+2001-01-22  Bart Veer  <bartv@redhat.com>
+
+	* doc/usbs_sa11x0.sgml, doc/makefile:
+	Added documentation.
+
+2001-01-16  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Make sure that the resume interrupt source is enabled,
+	even when the USB bus is not suspended. For some reason
+	this makes it possible to disconnect and reconnect.
+	
+2001-01-16  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Use the HAL macros for virtual->physical address translation
+	Update poll() and start() to match the documentation
+	Fix the handling of control messages affecting endpoints 1 and 2
+	if those endpoints are not currently configured.
+
+
+2001-01-02  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Change ep2_tx_packet() to start the DMA operation after the
+	UDC packet-complete bit has been set. This avoids a very high
+	error rate. Add some scheduler locking to eliminate a resulting
+	race condition, and sort out the error handling to match.
+	Comment out some assertions relating to spurious interrupts, which
+	have been observed. Instead the code now recovers from these.
+
+2000-12-15  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Add debug code for tracking stats and simulating failures.
+	Change the EP1 code to switch between DMA channels A and B as
+	required, rather than always using channel A. This is more robust
+	and was needed for the failure simulation.
+	
+	Make the ep1 packet processing code robust in case an unexpected
+	failure occurs during its invocation. It is not clear how this
+	can ever happen, but on a couple of occasions it did and caused an
+	infinite loop.
+
+2000-11-30  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Fix DMA_CONTROL_CLEAR_ALL constant, it was ignoring START_B
+	In ep2_init(), separate out the fifo write and the IN_SIZE
+	write to avoid a hardware problem.
+
+2000-11-29  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Disable some debugging features and add retries when manipulating
+	certain DMA registers - needed with some Silicon revisions.
+
+2000-11-28  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	More rewriting, plus implementing the endpoint halt support.
+
+2000-11-24  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs_sa11x0.c:
+	Clean up some of the debugging.
+	Largely rewrite the endpoint 2 support to try and get it working
+	Transmit a runt packet during initialization to work around
+	hardware problem.
+
+2000-11-22  Bart Veer  <bartv@redhat.com>
+
+	* include/usbs_sa11x0.h: Fix nested #include protection
+
+2000-11-21  Bart Veer  <bartv@redhat.com>
+
+	* First check-in of eCos USB support.
+
+//===========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//===========================================================================
new file mode 100644
--- /dev/null
+++ b/packages/devs/usb/sa11x0/current/cdl/usbs_sa11x0.cdl
@@ -0,0 +1,194 @@
+# ====================================================================
+#
+#      usbs_sa11x0.cdl
+#
+#      SA11X0 USB support.
+#
+# ====================================================================
+#####COPYRIGHTBEGIN####
+#                                                                          
+# -------------------------------------------                              
+# The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+#                                                                          
+# 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 Original Code is eCos - Embedded Configurable Operating System,      
+# released September 30, 1998.                                             
+#                                                                          
+# The Initial Developer of the Original Code is Red Hat.                   
+# Portions created by Red Hat are                                          
+# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
+# All Rights Reserved.                                                     
+# -------------------------------------------                              
+#                                                                          
+#####COPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      bartv
+# Original data:  bartv
+# Contributors:
+# Date:           2000-10-04
+#
+#####DESCRIPTIONEND####
+# ====================================================================
+
+cdl_package CYGPKG_DEVS_USB_SA11X0 {
+    display     "SA11X0 USB Device Driver"
+    include_dir "cyg/io/usb"
+    parent      CYGPKG_USB
+    implements  CYGHWR_IO_USB_SLAVE
+    doc         devs-usb-sa11x0.html
+
+    # Make sure that we are running on the right hardware.
+    requires CYGPKG_HAL_ARM
+    requires CYGPKG_HAL_ARM_SA11X0
+
+    
+    description "
+        The on-chip serial port 0 on the SA11X0 implements a USB
+        device controller, facilitating the use of this processor
+        in USB peripherals. This package provides a suitable eCos
+        device driver."
+
+
+    cdl_option CYGFUN_DEVS_USB_SA11X0_EP0 {
+	display       "Support the control endpoint 0"
+	default_value CYGINT_IO_USB_SLAVE_CLIENTS
+	# And the USB support packages
+	requires      CYGPKG_IO_USB CYGPKG_IO_USB_SLAVE
+	compile       usbs_sa11x0.c
+	compile       -library=libextras.a usbs_sa11x0_data.cxx
+	description "
+	    Enable support for endpoint 0. If this support is disabled
+	    then the entire USB port is unusable."
+    }
+    
+    cdl_option CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY {
+	display       "Provide a devtab entry for endpoint 0"
+	default_value CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES
+	requires      CYGPKG_IO
+	description "
+	    If endpoint 0 will only be accessed via the low-level
+	    USB-specific calls then there is no need for an entry
+ 	    in the device table, saving some memory. If the
+	    application intends to access the endpoint by means
+	    of open and ioctl calls then a devtab entry is needed.
+	"
+    }
+    
+    cdl_component CYGPKG_DEVS_USB_SA11X0_EP1 {
+	display       "Support endpoint 1, used for host->slave communications"
+	implements    CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS
+	requires      CYGFUN_DEVS_USB_SA11X0_EP0
+	default_value CYGFUN_DEVS_USB_SA11X0_EP0
+	description "
+            In the SA11X0 USB implementation endpoint 1 can only be
+            used for host->slave communication. If the intended application
+	    only involves slave->host transfers then the support for
+	    endpoint 1 can be disabled. Note that this does not affect
+	    control messages which always go via endpoint 0."
+
+	cdl_option CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL {
+	    display       "Control DMA usage for endpoint 1"
+	    flavor        booldata
+	    legal_values  0 to 5
+	    default_value 4
+	    description "
+	        In the SA11X0 USB implementation endpoint 1 only has
+	        a 20-byte fifo. If the application only involves
+	        small transfers then this may prove sufficient, but
+	        for larger transfers the use of a DMA engine is
+	        mandated. This configuration option allows the
+	        use of DMA engine to be disabled or enabled, and the
+	        specific DMA channel to be selected. The SA11X0
+	        supports 6 DMA channels numbered 0 to 5. If DMA
+	        is enabled for endpoint 1 then the selected channel
+	        cannot be used by any other code."
+	}
+
+	cdl_option CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY {
+	    display       "Provide a devtab entry for endpoint 1"
+	    default_value CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES
+            requires      CYGPKG_IO 
+	    description "
+	        If endpoint 1 will only be accessed via the low-level
+	        USB-specific calls then there is no need for an entry
+ 	        in the device table, saving some memory. If the
+	        application intends to access the endpoint by means
+	        of open and read calls then a devtab entry is needed.
+	    "
+	}
+    }
+
+    cdl_component CYGPKG_DEVS_USB_SA11X0_EP2 {
+	display       "Support endpoint 2, used for slave->host communications"
+	implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS
+	requires      CYGFUN_DEVS_USB_SA11X0_EP0
+	default_value CYGFUN_DEVS_USB_SA11X0_EP0
+	description "
+            In the SA11X0 USB implementation endpoint 2 can only be
+            used for slave->host communication. If the intended application
+	    only involves host->slave transfers then the support for
+	    endpoint 2 can be disabled. Note that this does not affect
+	    control messages which always go via endpoint 0."
+
+	cdl_option CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL {
+	    display       "Control DMA usage for endpoint 2"
+	    flavor        booldata
+	    legal_values  0 to 5
+	    default_value 5
+	    description "
+	        In the SA11X0 USB implementation endpoint 2 only has
+	        a 16-byte fifo. If the application only involves
+	        small transfers then this may prove sufficient, but
+	        for larger transfers the use of a DMA engine is
+	        mandated. This configuration option allows the
+	        use of DMA engine to be disabled or enabled, and the
+	        specific DMA channel to be selected. The SA11X0
+	        supports 6 DMA channels numbered 0 to 5. If DMA
+	        is enabled for endpoint 2 then the selected channel
+	        cannot be used by any other code."
+	}
+	
+	cdl_option CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY {
+	    display       "Provide a devtab entry for endpoint 2"
+	    default_value CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES
+            requires      CYGPKG_IO
+	    description "
+	        If endpoint 2 will only be accessed via the low-level
+	        USB-specific calls then there is no need for an entry
+ 	        in the device table, saving some memory. If the
+	        application intends to access the endpoint by means
+	        of open and write calls then a devtab entry is needed.
+	    "
+	}
+    }
+
+    cdl_option CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME {
+	display       "Base name for devtab entries"
+	flavor        data
+	active_if     { CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY ||
+	                CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY ||
+	                CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY
+        }
+	default_value { "\"/dev/usbs\"" }
+	description "
+            If the SA11X0 USB device driver package provides devtab
+	    entries for any of the endpoints then this option gives
+            control over the names of these entries. By default the
+	    endpoints will be called \"/dev/usbs0c\", \"/dev/usbs1r\"
+	    and \"/dev/usbs2w\" (assuming all three endpoints are
+	    enabled. The common part \"/dev/usbs\" is determined
+	    by this configuration option. It may be necessary to
+	    change this if there are multiple USB slave-side
+	    devices on the target hardware to prevent a name clash.
+	"
+    }
+}
new file mode 100644
--- /dev/null
+++ b/packages/devs/usb/sa11x0/current/doc/devs-usb-sa11x0.html
@@ -0,0 +1,341 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+SA11X0 USB Device Driver</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<H1>
+<A
+NAME="DEVS-USB-SA11X0">
+SA11X0 USB Device Driver</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN4">
+</A>
+<H2>
+Name</H2>
+SA11X0 USB Support&nbsp;--&nbsp;Device driver for the on-chip SA11X0 USB device</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN7">
+</A>
+<H2>
+SA11X0 USB Hardware</H2>
+<P>
+The Intel StrongARM SA11x0 family of processors is supplied with an
+on-chip USB slave device, the UDC (USB Device Controller). This
+supports three endpoints. Endpoint 0 can only be used for control
+messages. Endpoint 1 can only be used for bulk transfers from host to
+peripheral. Endpoint 2 can only be used for bulk transfers from
+peripheral to host. Isochronous and interrupt transfers are not
+supported.</P>
+<DIV
+CLASS="CAUTION">
+<P>
+</P>
+<TABLE
+CLASS="CAUTION"
+BORDER="1"
+WIDTH="100%">
+<TR>
+<TD
+ALIGN="CENTER">
+<B>
+Caution</B>
+</TD>
+</TR>
+<TR>
+<TD
+ALIGN="LEFT">
+<P>
+Different revisions of the SA11x0 silicon have had various problems
+with the USB support. The device driver has been tested primarily
+against stepping B4 of the SA1110 processor, and may not function as
+expected with other revisions. Application developers should obtain
+the manufacturer's current errata sheets and specification updates.
+The B4 stepping still has a number of problems, but the device driver
+can work around these. However there is a penalty in terms of extra
+code, extra cpu cycles, and increased dispatch latency because extra
+processing is needed at DSR level. Interrupt latency should not be
+affected.</P>
+<P>
+There is one specific problem inherent in the UDC design of which
+application developers should be aware: the hardware cannot fully
+implement the USB standard for bulk transfers. A bulk transfer
+typically consists of some number of full-size 64-byte packets and is
+terminated by a packet less than the full size. If the amount of data
+transferred is an exact multiple of 64 bytes then this requires a
+terminating packet of 0 bytes of data (plus header and checksum). The
+SA11x0 USB hardware does not allow a 0-byte packet to be transmitted,
+so the device driver is forced to substitute a 1-byte packet and the
+host receives more data than expected. Protocol support is needed so
+that the appropriate host-side device driver can allow buffer space
+for the extra byte, detect when it gets sent, and discard it.
+Consequently certain standard USB class protocols cannot be
+implemented using the SA11x0, and therefore custom host-side device
+drivers will generally have to be provided, rather than re-using
+existing ones that understand the standard protocol.</P>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN13">
+</A>
+<H2>
+Endpoint Data Structures</H2>
+<P>
+The SA11x0 USB device driver can provide up to three data structures
+corresponding to the three endpoints: a
+<SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+ structure
+<TT
+CLASS="LITERAL">
+usbs_sa11x0_ep0</TT>
+; a
+<SPAN
+CLASS="STRUCTNAME">
+usbs_rx_endpoint</SPAN>
+
+<TT
+CLASS="LITERAL">
+usbs_sa11x0_ep1</TT>
+; and a
+<SPAN
+CLASS="STRUCTNAME">
+usbs_tx_endpoint</SPAN>
+
+<TT
+CLASS="LITERAL">
+usbs_sa11x0_ep2</TT>
+. The header file
+<TT
+CLASS="FILENAME">
+cyg/io/usb/usbs_sa11x0.h</TT>
+
+provides declarations for these.</P>
+<P>
+Not all applications will require support for all the endpoints. For
+example, if the intended use of the UDC only involves peripheral to
+host transfers then <TT
+CLASS="LITERAL">
+usbs_sa11x0_ep1</TT>
+ is redundant.
+The device driver provides configuration options to control the
+presence of each endpoint:</P>
+<P>
+</P>
+<OL
+TYPE="1">
+<LI>
+<P>
+Endpoint 0 is controlled by
+<TT
+CLASS="LITERAL">
+CYGFUN_DEVS_USB_SA11X0_EP0</TT>
+. This defaults to
+enabled if there are any higher-level packages that require USB
+hardware or if the global preference
+<TT
+CLASS="LITERAL">
+CYGGLO_IO_USB_SLAVE_APPLICATION</TT>
+ is enabled,
+otherwise it is disabled. Usually this has the desired effect. It may
+be necessary to override this in special circumstances, for example if
+the target board uses an external USB chip in preference to the UDC
+and it is that external chip's device driver that should be used
+rather than the on-chip UDC. It is not possible to disable endpoint 0
+and at the same time enable one or both of the other endpoints, since
+a USB device is only usable if it can process the standard control
+messages.</P>
+</LI>
+<LI>
+<P>
+Endpoint 1 is controlled by
+<TT
+CLASS="LITERAL">
+CYGPKG_DEVS_USB_SA11X0_EP1</TT>
+. By default it is
+enabled whenever endpoint 0 is enabled, but it can be disabled
+manually when not required.</P>
+</LI>
+<LI>
+<P>
+Similarly endpoint 2 is controlled by
+<TT
+CLASS="LITERAL">
+CYGPKG_DEVS_USB_SA11X0_EP2</TT>
+. This is also enabled by
+default whenever endpoint 0 is enabled, but it can be disabled manually.</P>
+</LI>
+</OL>
+<P>
+The SA11X0 USB device driver implements the interface specified by the
+common eCos USB Slave Support package. The documentation for that
+package should be consulted for further details. There is only one
+major deviation: when there is a peripheral to host transfer on
+endpoint 2 which is an exact multiple of the bulk transfer packet size
+(usually 64 bytes) the device driver has to pad the transfer with one
+extra byte. This is because of a hardware limitation: the UDC is
+incapable of transmitting 0-byte packets as required by the USB
+specification. Higher-level code, including the host-side device
+driver, needs to be aware of this and adapt accordingly.</P>
+<P>
+The device driver assumes a bulk packet size of 64 bytes, so this
+value should be used in the endpoint descriptors in the enumeration
+data provided by application code. There is experimental code
+for running with <A
+HREF="devs-usb-sa11x0.html#AEN58">
+DMA disabled</A>
+,
+in which case the packet size will be 16 bytes rather than 64.</P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN39">
+</A>
+<H2>
+Devtab Entries</H2>
+<P>
+In addition to the endpoint data structures the SA11X0 USB device
+driver can also provide devtab entries for each endpoint. This allows
+higher-level code to use traditional I/O operations such as
+<TT
+CLASS="FUNCTION">
+open</TT>
+/<TT
+CLASS="FUNCTION">
+read</TT>
+/<TT
+CLASS="FUNCTION">
+write</TT>
+
+rather than the USB-specific non-blocking functions like
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+. These devtab entries are
+optional since they are not always required. The relevant
+configuration options are
+<TT
+CLASS="LITERAL">
+CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY</TT>
+,
+<TT
+CLASS="LITERAL">
+CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY</TT>
+ and
+<TT
+CLASS="LITERAL">
+CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY</TT>
+. By default
+these devtab entries are provided if the global preference
+<TT
+CLASS="LITERAL">
+CYGGLO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES</TT>
+ is enabled,
+which is usually the case. Obviously a devtab entry for a given
+endpoint will only be provided if the underlying endpoint is enabled.
+For example, there will not be a devtab entry for endpoint 1 if
+<TT
+CLASS="LITERAL">
+CYGPKG_DEVS_USB_SA11X0_EP1</TT>
+ is disabled.</P>
+<P>
+The names for the three devtab entries are determined by using a
+configurable base name and appending <TT
+CLASS="LITERAL">
+0c</TT>
+,
+<TT
+CLASS="LITERAL">
+1r</TT>
+ or <TT
+CLASS="LITERAL">
+2w</TT>
+. The base name is
+determined by the configuration option
+<TT
+CLASS="LITERAL">
+CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME</TT>
+ and has a
+default value of <TT
+CLASS="LITERAL">
+/dev/usbs</TT>
+, so the devtab entry for
+endpoint 1 would default to <TT
+CLASS="LITERAL">
+/dev/usbs1r</TT>
+. If the
+target hardware involves multiple USB devices then application
+developers may have to change the base name to prevent a name clash.</P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN58">
+</A>
+<H2>
+DMA Engines</H2>
+<P>
+The SA11X0 UDC provides only limited fifos for bulk transfers on
+endpoints 1 and 2; smaller than the normal 64-byte bulk packet size.
+Therefore a typical transfer requires the use of DMA engines. The
+SA11x0 provides six DMA engines that can be used for this, and the
+endpoints require one each (assuming both endpoints are enabled). At
+the time of writing there is no arbitration mechanism to control
+access to the DMA engines. By default the device driver will use
+DMA engine 4 for endpoint 1 and DMA engine 5 for endpoint 2, and it
+assumes that no other code uses these particular engines.</P>
+<P>
+The exact DMA engines that will be used are determined by the
+configuration options
+<TT
+CLASS="LITERAL">
+CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL</TT>
+ and
+<TT
+CLASS="LITERAL">
+CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL</TT>
+. These
+options have the booldata flavor, allowing the use of DMA to be
+disabled completely in addition to controlling which DMA engines are
+used. If DMA is disabled then the device driver will attempt to
+work purely using the fifos, and the packet size will be limited to
+only 16 bytes. This limit should be reflected in the appropriate
+endpoint descriptors in the enumeration data. The code for driving the
+endpoints without DMA should be considered experimental. At best it
+will be suitable only for applications where the amount of data
+transferred is relatively small, because four times as many interrupts
+will be raised and performance will suffer accordingly.</P>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/devs/usb/sa11x0/current/doc/usbs_sa11x0.sgml
@@ -0,0 +1,233 @@
+<!DOCTYPE refentry  PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
+
+<!-- {{{ Banner                         -->
+
+<!-- =============================================================== -->
+<!--                                                                 -->
+<!--     usbs_sa11x0.sgml                                            -->
+<!--                                                                 -->
+<!--     Documentation for the SA11x0 USB Device Driver.             -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+<!-- ####COPYRIGHTBEGIN####                                          -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<!-- =============================================================== -->
+<!--                                                                 -->      
+<!-- ####COPYRIGHTEND####                                            -->
+<!-- =============================================================== -->
+<!-- #####DESCRIPTIONBEGIN####                                       -->
+<!--                                                                 -->
+<!-- Author(s):   bartv                                              -->
+<!-- Contact(s):  bartv                                              -->
+<!-- Date:        2001/01/11                                         -->
+<!-- Version:     0.01                                               -->
+<!--                                                                 -->
+<!-- ####DESCRIPTIONEND####                                          -->
+<!-- =============================================================== -->
+
+<!-- }}} -->
+
+<refentry id="devs-usb-sa11x0">
+<refmeta>
+<refentrytitle>SA11X0 USB Device Driver</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>SA11X0 USB Support</refname>
+<refpurpose>Device driver for the on-chip SA11X0 USB device</refpurpose>
+</refnamediv>
+
+<refsect1><title>SA11X0 USB Hardware</title>
+<para>
+The Intel StrongARM SA11x0 family of processors is supplied with an
+on-chip USB slave device, the UDC (USB Device Controller). This
+supports three endpoints. Endpoint 0 can only be used for control
+messages. Endpoint 1 can only be used for bulk transfers from host to
+peripheral. Endpoint 2 can only be used for bulk transfers from
+peripheral to host. Isochronous and interrupt transfers are not
+supported.
+</para>
+<caution>    
+<para>
+Different revisions of the SA11x0 silicon have had various problems
+with the USB support. The device driver has been tested primarily
+against stepping B4 of the SA1110 processor, and may not function as
+expected with other revisions. Application developers should obtain
+the manufacturer's current errata sheets and specification updates.
+The B4 stepping still has a number of problems, but the device driver
+can work around these. However there is a penalty in terms of extra
+code, extra cpu cycles, and increased dispatch latency because extra
+processing is needed at DSR level. Interrupt latency should not be
+affected.
+</para>
+<para>
+There is one specific problem inherent in the UDC design of which
+application developers should be aware: the hardware cannot fully
+implement the USB standard for bulk transfers. A bulk transfer
+typically consists of some number of full-size 64-byte packets and is
+terminated by a packet less than the full size. If the amount of data
+transferred is an exact multiple of 64 bytes then this requires a
+terminating packet of 0 bytes of data (plus header and checksum). The
+SA11x0 USB hardware does not allow a 0-byte packet to be transmitted,
+so the device driver is forced to substitute a 1-byte packet and the
+host receives more data than expected. Protocol support is needed so
+that the appropriate host-side device driver can allow buffer space
+for the extra byte, detect when it gets sent, and discard it.
+Consequently certain standard USB class protocols cannot be
+implemented using the SA11x0, and therefore custom host-side device
+drivers will generally have to be provided, rather than re-using
+existing ones that understand the standard protocol.
+</para>
+</caution>
+</refsect1>
+
+<refsect1><title>Endpoint Data Structures</title>
+<para>
+The SA11x0 USB device driver can provide up to three data structures
+corresponding to the three endpoints: a
+<structname>usbs_control_endpoint</structname> structure
+<literal>usbs_sa11x0_ep0</literal>; a
+<structname>usbs_rx_endpoint</structname>
+<literal>usbs_sa11x0_ep1</literal>; and a
+<structname>usbs_tx_endpoint</structname>
+<literal>usbs_sa11x0_ep2</literal>. The header file
+<filename class="headerfile">cyg/io/usb/usbs_sa11x0.h</filename>
+provides declarations for these.
+</para>
+<para>
+Not all applications will require support for all the endpoints. For
+example, if the intended use of the UDC only involves peripheral to
+host transfers then <literal>usbs_sa11x0_ep1</literal> is redundant.
+The device driver provides configuration options to control the
+presence of each endpoint:
+</para>
+<orderedlist>
+<listitem>
+<para>
+Endpoint 0 is controlled by
+<literal>CYGFUN_DEVS_USB_SA11X0_EP0</literal>. This defaults to
+enabled if there are any higher-level packages that require USB
+hardware or if the global preference
+<literal>CYGGLO_IO_USB_SLAVE_APPLICATION</literal> is enabled,
+otherwise it is disabled. Usually this has the desired effect. It may
+be necessary to override this in special circumstances, for example if
+the target board uses an external USB chip in preference to the UDC
+and it is that external chip's device driver that should be used
+rather than the on-chip UDC. It is not possible to disable endpoint 0
+and at the same time enable one or both of the other endpoints, since
+a USB device is only usable if it can process the standard control
+messages.
+</para>
+</listitem>
+<listitem>
+<para>
+Endpoint 1 is controlled by
+<literal>CYGPKG_DEVS_USB_SA11X0_EP1</literal>. By default it is
+enabled whenever endpoint 0 is enabled, but it can be disabled
+manually when not required.
+</para>
+</listitem>
+<listitem>
+<para>
+Similarly endpoint 2 is controlled by
+<literal>CYGPKG_DEVS_USB_SA11X0_EP2</literal>. This is also enabled by
+default whenever endpoint 0 is enabled, but it can be disabled manually.
+</para>
+</listitem>
+</orderedlist>
+<para>
+The SA11X0 USB device driver implements the interface specified by the
+common eCos USB Slave Support package. The documentation for that
+package should be consulted for further details. There is only one
+major deviation: when there is a peripheral to host transfer on
+endpoint 2 which is an exact multiple of the bulk transfer packet size
+(usually 64 bytes) the device driver has to pad the transfer with one
+extra byte. This is because of a hardware limitation: the UDC is
+incapable of transmitting 0-byte packets as required by the USB
+specification. Higher-level code, including the host-side device
+driver, needs to be aware of this and adapt accordingly.
+</para>
+<para>
+The device driver assumes a bulk packet size of 64 bytes, so this
+value should be used in the endpoint descriptors in the enumeration
+data provided by application code. There is experimental code
+for running with <link linkend="usbs-sa11x0-dma">DMA disabled</link>,
+in which case the packet size will be 16 bytes rather than 64.
+</para>
+</refsect1>
+
+<refsect1><title>Devtab Entries</title>
+<para>
+In addition to the endpoint data structures the SA11X0 USB device
+driver can also provide devtab entries for each endpoint. This allows
+higher-level code to use traditional I/O operations such as
+<function>open</function>/<function>read</function>/<function>write</function>
+rather than the USB-specific non-blocking functions like
+<function>usbs_start_rx_buffer</function>. These devtab entries are
+optional since they are not always required. The relevant
+configuration options are
+<literal>CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY</literal>,
+<literal>CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY</literal> and
+<literal>CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY</literal>. By default
+these devtab entries are provided if the global preference
+<literal>CYGGLO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES</literal> is enabled,
+which is usually the case. Obviously a devtab entry for a given
+endpoint will only be provided if the underlying endpoint is enabled.
+For example, there will not be a devtab entry for endpoint 1 if
+<literal>CYGPKG_DEVS_USB_SA11X0_EP1</literal> is disabled.
+</para>
+<para>
+The names for the three devtab entries are determined by using a
+configurable base name and appending <literal>0c</literal>,
+<literal>1r</literal> or <literal>2w</literal>. The base name is
+determined by the configuration option
+<literal>CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME</literal> and has a
+default value of <literal>/dev/usbs</literal>, so the devtab entry for
+endpoint 1 would default to <literal>/dev/usbs1r</literal>. If the
+target hardware involves multiple USB devices then application
+developers may have to change the base name to prevent a name clash.
+</para>
+</refsect1>
+
+<refsect1><title id="usbs-sa11x0-dma">DMA Engines</title>
+<para>
+The SA11X0 UDC provides only limited fifos for bulk transfers on
+endpoints 1 and 2; smaller than the normal 64-byte bulk packet size.
+Therefore a typical transfer requires the use of DMA engines. The
+SA11x0 provides six DMA engines that can be used for this, and the
+endpoints require one each (assuming both endpoints are enabled). At
+the time of writing there is no arbitration mechanism to control
+access to the DMA engines. By default the device driver will use
+DMA engine 4 for endpoint 1 and DMA engine 5 for endpoint 2, and it
+assumes that no other code uses these particular engines.
+</para>
+<para>
+The exact DMA engines that will be used are determined by the
+configuration options
+<literal>CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL</literal> and
+<literal>CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL</literal>. These
+options have the booldata flavor, allowing the use of DMA to be
+disabled completely in addition to controlling which DMA engines are
+used. If DMA is disabled then the device driver will attempt to
+work purely using the fifos, and the packet size will be limited to
+only 16 bytes. This limit should be reflected in the appropriate
+endpoint descriptors in the enumeration data. The code for driving the
+endpoints without DMA should be considered experimental. At best it
+will be suitable only for applications where the amount of data
+transferred is relatively small, because four times as many interrupts
+will be raised and performance will suffer accordingly.
+</para>
+</refsect1>
+
+</refentry>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/packages/devs/usb/sa11x0/current/include/usbs_sa11x0.h
@@ -0,0 +1,65 @@
+#ifndef CYGONCE_USBS_SA11X0_H
+# define CYGONCE_USBS_SA11X0_H
+//==========================================================================
+//
+//      include/usbs_sa11x0.h
+//
+//      The interface exported by the SA11X0 USB device driver
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/
+//
+// 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 Original Code is eCos - Embedded Configurable Operating System,
+// released September 30, 1998.
+//
+// The Initial Developer of the Original Code is Red Hat.
+// Portions created by Red Hat are
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+// All Rights Reserved.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+// Purpose:
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <cyg/io/usb/usbs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The SA11x0 family comes with on-chip USB slave support. This
+ * provides three endpoints. Endpoint 0 can only be used for control
+ * messages. Endpoints 1 and 2 can only be used for bulk transfers,
+ * host->slave for endpoint 1 and slave->host for endpoint 2.
+ */
+extern usbs_control_endpoint    usbs_sa11x0_ep0;
+extern usbs_rx_endpoint         usbs_sa11x0_ep1;
+extern usbs_tx_endpoint         usbs_sa11x0_ep2;
+    
+#ifdef __cplusplus
+} /* extern "C" { */
+#endif
+
+
+#endif /* CYGONCE_USBS_SA11X0_H */
new file mode 100644
--- /dev/null
+++ b/packages/devs/usb/sa11x0/current/src/usbs_sa11x0.c
@@ -0,0 +1,2420 @@
+//==========================================================================
+//
+//      usbs_sa11x0.c
+//
+//      Device driver for the SA11x0 USB port.
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+//
+// This code implements support for the on-chip USB port on the SA11x0
+// family of processors. The code has been developed on the SA1110 and
+// may or may not work on other members of the SA11x0 family. There
+// have problems with the USB support on certain revisions of the silicon,
+// so the errata sheet appropriate to the specific processor being used
+// should be consulted. There also appear to be problems which do not
+// appear on any errata, which this code attempts to work around.
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_ass.h>
+#include <cyg/infra/cyg_trac.h>
+#include <cyg/infra/diag.h>
+
+#include <pkgconf/hal_arm.h>
+#include <pkgconf/devs_usb_sa11x0.h>
+
+#include <cyg/hal/drv_api.h>
+#include <cyg/hal/hal_arch.h>
+#include <cyg/hal/hal_io.h>
+#include <cyg/hal/hal_cache.h>
+#include <cyg/hal/hal_sa11x0.h>
+#include <cyg/error/codes.h>
+
+#include <cyg/io/usb/usb.h>
+#include <cyg/io/usb/usbs.h>
+
+// Debugging support. By default this driver operates mostly at
+// DSR level, with the ISR doing a minimal amount of processing.
+// However is also possible to run most of the code at thread-level,
+// This is subject to some restrictions because the USB standard
+// imposes timing constraints, e.g. some control operations such
+// as SET-ADDRESS have to complete within 50ms. However it is
+// very useful for debugging, specifically it allows you to put
+// printf()'s in various places.
+//
+// Right now these configuration options are not exported to the
+// user because running at DSR level is likely to be good enough
+// for everybody not actively debugging this code. The options
+// could be exported if necessary.
+//#define CYGPKG_DEVS_USB_SA11X0_THREAD
+#undef CYGPKG_DEVS_USB_SA11X0_THREAD
+#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
+  // Default stack size should be CYGNUM_HAL_STACK_SIZE_TYPICAL
+# define CYGNUM_DEVS_USB_SA11X0_THREAD_STACK_SIZE       4096
+# define CYGNUM_DEVS_USB_SA11X0_THREAD_PRIORITY         7
+# include <cyg/kernel/kapi.h>
+#endif
+
+#if 0
+# define DBG(a) diag_printf a
+#else
+# define DBG(a)
+#endif
+
+#undef FAILURES
+#ifdef FAILURES
+static volatile int ep1_failure = 7;
+#endif
+
+#undef STATS
+#ifdef STATS
+int ep1_receives = 0;
+int ep1_errors = 0;
+int ep2_transmits = 0;
+int ep2_errors = 0;
+# define INCR_STAT(a) (a) += 1
+# define SET_STAT(a, b) (a) = (b)
+#else
+# define INCR_STAT(a)
+# define SET_STAT(a, b)
+#endif
+
+// ----------------------------------------------------------------------------
+// Serial port 0 on the SA11x0 provides a USB slave connection (aka a
+// USB device controller or UDC). The functionality is somewhat
+// limited, there are just three endpoints.
+//
+// Endpoint 0 can only be used for control messages. It has an 8 byte
+// fifo which cannot be connected to a DMA engine. Hence incoming
+// control packets have to be limited to 8 bytes by the enumeration
+// data. The endpoint has to be managed at a low-level, i.e. the
+// incoming request has to be extracted from the fifo, processed, and
+// any response put back into the fifo within the permitted USB
+// response times.
+//
+// Endpoint 1 can only be used for host->slave bulk OUT transfers. It
+// has a 20 byte receive fifo, and it can be hooked up to any of the
+// six DMA engines. Since bulk transfers will typically involve 64
+// byte packets, most applications will require the use of DMA.
+//
+// Endpoint 2 can only be used for slave-host bulk IN transfers. There
+// is a 16 byte transmit fifo so small messages can be transferred in
+// software. The fifo can also be hooked up to DMA, which is a more
+// likely scenario.
+//
+// Start with definitions of the hardware. The use of a structure and
+// a const base pointer should allow the compiler to do base/offset
+// addressing and keep the hardware base address in a register. This
+// is better than defining each hardware register via a separate
+// address. Although the registers are only a byte wide, the peripheral
+// bus only supports word accesses.
+//
+// The USBS_CONTROL etc. macros allow for an alternative way of
+// accessing the hardware if a better approach is presented, without
+// having to rewrite all the code. Macros that correspond to registers
+// are actually addresses, making it easier in the code to distinguish
+// them from bit values: the & and * operators will just cancel out.
+
+typedef struct usbs_sa11x0_hardware {
+    volatile int control;
+    volatile int address;
+    volatile int out_size;
+    volatile int in_size;
+    volatile int ep0_control;
+    volatile int ep1_control;
+    volatile int ep2_control;
+    volatile int ep0_data;
+    volatile int ep0_write_count;
+             int dummy1;
+    volatile int fifo;
+             int dummy2;
+    volatile int status;
+} usbs_sa11x0_hardware;
+
+static usbs_sa11x0_hardware* const usbs_sa11x0_base = (usbs_sa11x0_hardware* const) 0x80000000;
+#define USBS_CONTROL    (&(usbs_sa11x0_base->control))
+#define USBS_ADDRESS    (&(usbs_sa11x0_base->address))
+#define USBS_OUT_SIZE   (&(usbs_sa11x0_base->out_size))
+#define USBS_IN_SIZE    (&(usbs_sa11x0_base->in_size))
+#define EP0_CONTROL     (&(usbs_sa11x0_base->ep0_control))
+#define EP1_CONTROL     (&(usbs_sa11x0_base->ep1_control))
+#define EP2_CONTROL     (&(usbs_sa11x0_base->ep2_control))
+#define EP0_DATA        (&(usbs_sa11x0_base->ep0_data))
+#define EP0_WRITE_COUNT (&(usbs_sa11x0_base->ep0_write_count))
+#define EP1_DATA        (&(usbs_sa11x0_base->fifo))
+#define EP2_DATA        (&(usbs_sa11x0_base->fifo))
+#define USBS_STATUS     (&(usbs_sa11x0_base->status))
+
+#define CONTROL_DISABLE                 (1 << 0)
+#define CONTROL_ACTIVE                  (1 << 1)
+// The meaning of bit 2 changed, see errata
+#define CONTROL_RESUME_INTR             (1 << 2)
+#define CONTROL_EP0_INTR                (1 << 3)
+#define CONTROL_EP1_INTR                (1 << 4)
+#define CONTROL_EP2_INTR                (1 << 5)
+// The meaning of bit 6 also changed, see errata
+#define CONTROL_SUSPEND_INTR            (1 << 6)
+#define CONTROL_RESET_INTR              (1 << 7)
+
+// Getting the control register settings right is a little bit tricky.
+// Bit 0 is the disable bit so touching that is dangerous, and the
+// other bits have inverted meanings i.e. 0 enables interrupts. The
+// following macro encapsulates this.
+#define CONTROL_ALL_INTR                0x00FC
+#define CONTROL_INTR_ENABLE(bits)  ((~(bits)) & CONTROL_ALL_INTR)
+#define CONTROL_INTR_CLEAR(bits)   ((bits) & CONTROL_ALL_INTR)
+
+// All the endpoint interrupt numbers can be handled en masse,
+// but some of the endpoints may be disabled.
+#if defined(CYGPKG_DEVS_USB_SA11X0_EP1) && defined(CYGPKG_DEVS_USB_SA11X0_EP2)
+# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR | CONTROL_EP1_INTR | CONTROL_EP2_INTR)
+#elif defined(CYGPKG_DEVS_USB_SA11X0_EP1)
+# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR | CONTROL_EP1_INTR)
+#elif defined(CYGPKG_DEVS_USB_SA11X0_EP2)
+# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR | CONTROL_EP2_INTR)
+#else
+# define CONTROL_EP_INTR_BITS      (CONTROL_EP0_INTR)
+#endif
+
+#define EP0_OUT_READY                   (1 << 0)
+#define EP0_IN_READY                    (1 << 1)
+#define EP0_SENT_STALL                  (1 << 2)
+#define EP0_FORCE_STALL                 (1 << 3)
+#define EP0_DATA_END                    (1 << 4)
+#define EP0_SETUP_END                   (1 << 5)
+#define EP0_SERVICED_OPR                (1 << 6)
+#define EP0_SERVICED_SETUP_END          (1 << 7)
+
+#define EP1_FIFO_SERVICE                (1 << 0)
+#define EP1_PACKET_COMPLETE             (1 << 1)
+#define EP1_PACKET_ERROR                (1 << 2)
+#define EP1_SENT_STALL                  (1 << 3)
+#define EP1_FORCE_STALL                 (1 << 4)
+#define EP1_FIFO_NOT_EMPTY              (1 << 5)
+
+#define EP2_FIFO_SERVICE                (1 << 0)
+#define EP2_PACKET_COMPLETE             (1 << 1)
+#define EP2_PACKET_ERROR                (1 << 2)
+#define EP2_PACKET_UNDERRUN             (1 << 3)
+#define EP2_SENT_STALL                  (1 << 4)
+#define EP2_FORCE_STALL                 (1 << 5)
+
+#define STATUS_EP0_INTR                 (1 << 0)
+#define STATUS_EP1_INTR                 (1 << 1)
+#define STATUS_EP2_INTR                 (1 << 2)
+#define STATUS_SUSPEND_INTR             (1 << 3)
+#define STATUS_RESUME_INTR              (1 << 4)
+#define STATUS_RESET_INTR               (1 << 5)
+
+#define EP0_FIFO_SIZE                     8
+#define EP0_MTU                           8
+
+#define EP1_FIFO_SIZE                   20
+#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
+# define EP1_MTU                        64
+#else
+# define EP1_MTU                        16
+#endif
+
+#define EP2_FIFO_SIZE                   16
+#ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
+# define EP2_MTU                        64
+#else
+# define EP2_MTU                        16
+#endif
+
+#if defined(CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL) || defined(CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL)
+typedef struct usbs_sa11x0_dma {
+    volatile int                address;
+    volatile int                control_set;
+    volatile int                control_clear;
+    volatile int                status;
+    volatile int                buf_a_address;  // Absolute, not remapped
+    volatile int                buf_a_size;
+    volatile int                buf_b_address;  // Absolute, not remapped
+    volatile int                buf_b_size;
+} usbs_sa11x0_dma;
+
+#define DMA_CONTROL_RUN                 (1 << 0)
+#define DMA_CONTROL_INTR_ENABLE         (1 << 1)
+#define DMA_STATUS_ERROR                (1 << 2)
+#define DMA_STATUS_DONE_A               (1 << 3)
+#define DMA_CONTROL_START_A             (1 << 4)
+#define DMA_STATUS_DONE_B               (1 << 5)
+#define DMA_CONTROL_START_B             (1 << 6)
+#define DMA_STATUS_BUFFER_IN_USE        (1 << 7)
+// All the bits that are useful to clear. BUFFER_IN_USE is read-only.
+#define DMA_CONTROL_CLEAR_ALL           (DMA_CONTROL_RUN | DMA_CONTROL_INTR_ENABLE | DMA_STATUS_ERROR | \
+                                         DMA_STATUS_DONE_A | DMA_CONTROL_START_A | DMA_STATUS_DONE_B | DMA_CONTROL_START_B)
+
+// The DMA engines operate eight-bytes at a time. This affects issues
+// such as alignment.
+#define DMA_BURST_SIZE                  8
+
+// The DMA engines bypass the cache and MMU, accessing physical
+// memory directly. Newer HALS should provide appropriate macros.
+#ifndef HAL_VIRT_TO_PHYS_ADDRESS
+# error HAL macros for translating between virtual and physical memory are required.
+#endif
+
+// Make absolutely sure that the two endpoints use different
+// DMA channels. Right now this check cannot be done easily
+// at the CDL level.
+# if defined(CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL) && defined(CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL)
+#  if (CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL == CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL)
+#   error Different DMA channels must be selected for the two endpoints.
+#  endif
+# endif
+
+# ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
+static usbs_sa11x0_dma* const ep1_dma_base = (usbs_sa11x0_dma* const)(0xB0000000 | (0x20 * CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL));
+#  define EP1_DMA_ADDRESS        (&(ep1_dma_base->address))
+#  define EP1_DMA_CONTROL_SET    (&(ep1_dma_base->control_set))
+#  define EP1_DMA_CONTROL_CLEAR  (&(ep1_dma_base->control_clear))
+#  define EP1_DMA_STATUS         (&(ep1_dma_base->status))
+#  define EP1_DMA_BUF_A_ADDRESS  (&(ep1_dma_base->buf_a_address))
+#  define EP1_DMA_BUF_A_SIZE     (&(ep1_dma_base->buf_a_size))
+#  define EP1_DMA_BUF_B_ADDRESS  (&(ep1_dma_base->buf_b_address))
+#  define EP1_DMA_BUF_B_SIZE     (&(ep1_dma_base->buf_b_size))
+
+// The correct value for the DMA address register is fixed for USB transfers
+// See table 11.6 of the SA1110 Advanced Developer's Manual
+//   Device datum width == 1 byte
+//   Device burst size  == 8 bytes
+//   Device transfer direction == read (device->memory)
+//   Endianness is controlled by the ARM architectural HAL package
+#  ifdef CYGHWR_HAL_ARM_BIGENDIAN
+#   define EP1_DMA_ADDRESS_VALUE        (0x80000A00 | 0x10 | 0x0 | 0x4 | 0x2 | 0x1)
+#  else
+#   define EP1_DMA_ADDRESS_VALUE        (0x80000A00 | 0x10 | 0x0 | 0x4 | 0x0 | 0x1)
+#  endif
+# endif // EP1_DMA
+
+# ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
+
+static usbs_sa11x0_dma* const ep2_dma_base = (usbs_sa11x0_dma* const)(0xB0000000 | (0x20 * CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL));
+#  define EP2_DMA_ADDRESS        (&(ep2_dma_base->address))
+#  define EP2_DMA_CONTROL_SET    (&(ep2_dma_base->control_set))
+#  define EP2_DMA_CONTROL_CLEAR  (&(ep2_dma_base->control_clear))
+#  define EP2_DMA_STATUS         (&(ep2_dma_base->status))
+#  define EP2_DMA_BUF_A_ADDRESS  (&(ep2_dma_base->buf_a_address))
+#  define EP2_DMA_BUF_A_SIZE     (&(ep2_dma_base->buf_a_size))
+#  define EP2_DMA_BUF_B_ADDRESS  (&(ep2_dma_base->buf_b_address))
+#  define EP2_DMA_BUF_B_SIZE     (&(ep2_dma_base->buf_b_size))
+
+#  ifdef CYGHWR_HAL_ARM_BIGENDIAN
+#   define EP2_DMA_ADDRESS_VALUE        (0x80000A00 | 0x00 | 0x0 | 0x4 | 0x2 | 0x0)
+#  else
+#   define EP2_DMA_ADDRESS_VALUE        (0x80000A00 | 0x00 | 0x0 | 0x4 | 0x0 | 0x0)
+#  endif
+# endif // EP2_DMA
+
+#endif  // EP1_DMA || EP2_DMA
+
+// ----------------------------------------------------------------------------
+// Static data. There is a data structure for each endpoint. The
+// implementation is essentially a private class that inherits from
+// common classes for control and data endpoints, but device drivers
+// are supposed to be written in C so some ugliness is required.
+//
+// Devtab entries are defined in usbs_sa11x0_data.cxx to make sure
+// that the linker does not garbage-collect them.
+
+// Support for the interrupt handling code.
+static cyg_interrupt usbs_sa11x0_intr_data;
+static cyg_handle_t  usbs_sa11x0_intr_handle;
+static volatile int  isr_status_bits    = 0;
+
+// Endpoint 0 is always present, this module would not get compiled
+// otherwise.
+static void usbs_sa11x0_ep0_start(usbs_control_endpoint*);
+static void usbs_sa11x0_poll(usbs_control_endpoint*);
+
+typedef enum ep0_state {
+    EP0_STATE_IDLE      = 0,
+    EP0_STATE_IN        = 1,
+    EP0_STATE_OUT       = 2
+} ep0_state;
+
+typedef struct ep0_impl {
+    usbs_control_endpoint   common;
+    ep0_state               ep_state;
+    int                     length;
+    int                     transmitted;
+} ep0_impl;
+
+static ep0_impl ep0 = {
+    common:
+    {
+        state:                  USBS_STATE_POWERED, // The hardware does not distinguish  between detached, attached and powered.
+        enumeration_data:       (usbs_enumeration_data*) 0,
+        start_fn:               &usbs_sa11x0_ep0_start,
+        poll_fn:                &usbs_sa11x0_poll,
+        interrupt_vector:       SA11X0_IRQ_USB_SERVICE_REQUEST,
+        control_buffer:         { 0, 0, 0, 0, 0, 0, 0, 0 },
+        state_change_fn:        (void (*)(usbs_control_endpoint*, void*, usbs_state_change, int)) 0,
+        state_change_data:      (void*) 0,
+        standard_control_fn:    (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
+        standard_control_data:  (void*) 0,
+        class_control_fn:       (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
+        class_control_data:     (void*) 0,
+        vendor_control_fn:      (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
+        vendor_control_data:    (void*) 0,
+        reserved_control_fn:    (usbs_control_return (*)(usbs_control_endpoint*, void*)) 0,
+        reserved_control_data:  (void*) 0,
+        buffer:                 (unsigned char*) 0,
+        buffer_size:            0,
+        fill_buffer_fn:         (void (*)(usbs_control_endpoint*)) 0,
+        fill_data:              (void*) 0,
+        fill_index:             0,
+        complete_fn:            (usbs_control_return (*)(usbs_control_endpoint*, int)) 0
+    },
+    ep_state:           EP0_STATE_IDLE,
+    length:             0,
+    transmitted:        0
+};
+
+extern usbs_control_endpoint usbs_sa11x0_ep0 __attribute__((alias ("ep0")));
+
+// Endpoint 1 is optional. If the application only involves control
+// messages or only slave->host transfers then the endpoint 1
+// support can be disabled.
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
+
+typedef struct ep1_impl {
+    usbs_rx_endpoint    common;
+    int                 fetched;
+    cyg_bool            using_buf_a;
+} ep1_impl;
+
+static void ep1_start_rx(usbs_rx_endpoint*);
+static void ep1_set_halted(usbs_rx_endpoint*, cyg_bool);
+
+static ep1_impl ep1 = {
+    common: {
+        start_rx_fn:        &ep1_start_rx,
+        set_halted_fn:      &ep1_set_halted,
+        complete_fn:        (void (*)(void*, int)) 0,
+        complete_data:      (void*) 0,
+        buffer:             (unsigned char*) 0,
+        buffer_size:        0,
+        halted:             0,
+    },
+    fetched:            0,
+    using_buf_a:        0
+};
+
+extern usbs_rx_endpoint usbs_sa11x0_ep1 __attribute__((alias ("ep1")));
+#endif
+
+// Endpoint 2 is optional. If the application only involves control
+// messages or only host->slave transfers then the endpoint 2 support
+// can be disabled.
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+
+typedef struct ep2_impl {
+    usbs_tx_endpoint        common;
+    int                     transmitted;
+    int                     pkt_size;
+} ep2_impl;
+
+static void ep2_start_tx(usbs_tx_endpoint*);
+static void ep2_set_halted(usbs_tx_endpoint*, cyg_bool);
+
+static ep2_impl ep2 = {
+    common: {
+        start_tx_fn:        &ep2_start_tx,
+        set_halted_fn:      &ep2_set_halted,
+        complete_fn:        (void (*)(void*, int)) 0,
+        complete_data:      (void*) 0,
+        buffer:             (const unsigned char*) 0,
+        buffer_size:        0,
+        halted:             0,
+    }, 
+    transmitted:        0,
+    pkt_size:           0
+};
+
+extern usbs_tx_endpoint usbs_sa11x0_ep2 __attribute__ ((alias ("ep2")));
+
+#endif
+
+// ----------------------------------------------------------------------------
+// Hardware problem: experiments indicate that manipulating the USB
+// controller registers does not always work as expected. The control
+// fifo is especially badly affected, with e.g. writes just being lost
+// completely. It is necessary to work around these problems using
+// retry loops. MAX_RETRIES controls the total number of attempts to
+// access a register. MAX_CHECKS controls the number of times a
+// register is checked to determine whether or not the attempt has
+// been succesful. These constants are used to access the data fifo,
+// so MAX_RETRIES has to be > 20 bytes.
+#define MAX_RETRIES     32
+#define MAX_CHECKS       8
+
+// Write one or more bits to a register. This should result in some
+// bits ending up set and other bits ending up clear. Some register
+// bits are write-1-to-clear or may have side effects.
+static cyg_bool
+usbs_sa11x0_poke(volatile int* addr, int value, int should_be_set, int should_be_clear)
+{
+    cyg_bool    result  = false;
+    int         retries, checks;
+        
+    for (retries = 0; !result && (retries < MAX_RETRIES); retries++) {
+        *addr = value;
+        (void) *addr;   // The first read is always invalid.
+        for (checks = 0; !result && (checks < MAX_CHECKS); checks++) {
+            int current_value = *addr;
+            if (should_be_set != (should_be_set & current_value)) {
+                continue;
+            }
+            if ((0 != should_be_clear) && (0 != (should_be_clear & current_value))) {
+                continue;
+            }
+            result = true;
+        }
+    }
+    if (!result) {
+        DBG(("usbs_sa11x0_poke failed: addr %x, value %x, should_be_set %x, should_be_clear %x, actual %x\n", \
+             (int) addr, value, should_be_set, should_be_clear, *addr));
+    }
+    return result;
+}
+
+// Write a whole value to a register, rather than just manipulating
+// individual bits.
+static cyg_bool
+usbs_sa11x0_poke_value(volatile int* addr, int value)
+{
+    cyg_bool    result  = false;
+    int         retries, checks;
+        
+    for (retries = 0; !result && (retries < MAX_RETRIES); retries++) {
+        *addr = value;
+        (void) *addr;   // The first read is always invalid.
+        for (checks = 0; !result && (checks < MAX_CHECKS); checks++) {
+            if (value == *addr) {
+                result = true;
+            }
+        }
+    }
+    if (!result) {
+        DBG(("usbs_sa11x0_poke_value failed: addr %x, value %x, actual %x\n", (int) addr, value, *addr));
+    }
+    return result;
+}
+
+
+// ----------------------------------------------------------------------------
+// Control transfers
+//
+// Endpoint 0 is rather more complicated than the others. This is
+// partly due to the nature of the control protocol, for example it is
+// bidirectional and transfer sizes are unpredictable.
+//
+// The USB standard imposes some timing constraints on endpoint 0, see
+// section 9.2.6 of the spec. For example the set-address operation is
+// supposed to take at most 50ms. In general the timings are reasonably
+// generous so no special action is taken here. There could be problems
+// when debugging, but that is pretty much inevitable.
+//
+// It is necessary to maintain a state for the control endpoint, the
+// default state being idle. Control operations involve roughly the
+// following sequence of events:
+//
+// 1) the host transmits a special setup token, indicating the start
+//    of a control operation and possibly cancelling any existing control
+//    operation that may be in progress. USB peripherals cannot NAK this
+//    even if they are busy.
+//
+// 2) the setup operation is followed by an eight-byte packet from the host
+//    that describes the specific control operation. This fits into the
+//    SA11X0's eight-byte control fifo. There will be an endpoint 0
+//    interrupt with the out-packet-ready bit set. If the setup token
+//    was sent while a previous control operation was also in progress
+//    then the setup-end bit will be set as well.
+//
+// 3) the eight-byte packet is described in section 9.3 of the USB spec.
+//    The first byte holds three fields, with the top bit indicating the
+//    direction of subsequent data transfer. There are also two bytes
+//    specifying the size of the subsequent transfer. Obviously the
+//    packet also contains information such as the request type.
+//
+//    If the specified size is zero then the endpoint will remain in
+//    its idle state. Otherwise the endpoint will switch to either
+//    IN or OUT state, depending on the direction of subsequent
+//    transfers.
+// 
+// 4) some standard control operations can be handled by the code
+//    here. Set-address involves poking the address register and
+//    a change of state. Set-feature and clear-feature on the
+//    data endpoints can be used in conjunction with endpoint-halt.
+//    Get-status on the data endpoints tests the halt condition.
+//    It is also possible for the hardware-specific code to
+//    implement set-feature, clear-feature and get-status
+//    for the device as a whole since the SA11x0 always has to
+//    be self-powered and is incapable of initiating a remote
+//    wakeup.
+//
+//    Other standard control operations will be handled by the
+//    application-specific installed handler, if any, or by the
+//    default handler usbs_handle_standard_control(). Class-specific
+//    and vendor-specific functions require appropriate handlers to be
+//    installed as well, If a particular request is not recognized
+//    then a stall condition should be raised. This will not prevent
+//    subsequent control operations, just the current one.
+//
+//    Data transfers on endpoint 0 involve at most eight bytes at
+//    a time. More data will only be accepted if the out-packet-ready
+//    bit has been cleared via the serviced-opr bit, with the
+//    hardware nak'ing OUT requests. To send data back to the host
+//    the FIFO should be filled and then the in-packet-ready bit
+//    should be set.
+//
+// It looks like processing all control packets at DSR level should be
+// sufficient. During the data phase the hardware will NAK IN and
+// OUT requests if the fifo is still empty/full, so timing is not
+// an issue. Timing after receipt of the initial control message
+// may be more important, e.g. the 50ms upper limit on processing
+// the set-address control message, but this should still be ok.
+// This decision may have to be re-examined in the light of
+// experience.
+
+// Init may get called during system startup or following a reset.
+// During startup no work is needed since the hardware will
+// have been reset and everything should be fine. After a reset
+// the hardware will also be ok but there may be state information
+// in ep0 that needs to be reset.
+static void
+usbs_sa11x0_ep0_init(void)
+{
+    if ((EP0_STATE_IDLE != ep0.ep_state) &&
+        ((usbs_control_return (*)(usbs_control_endpoint*, int)) 0 != ep0.common.complete_fn)) {
+        (*ep0.common.complete_fn)(&ep0.common, -EPIPE);
+    }
+    ep0.common.state            = USBS_STATE_POWERED;
+    memset(ep0.common.control_buffer, 0, 8);
+    ep0.common.buffer           = (unsigned char*) 0;
+    ep0.common.buffer_size      = 0;
+    ep0.common.fill_buffer_fn   = (void (*)(usbs_control_endpoint*)) 0;
+    ep0.common.fill_data        = (void*) 0;
+    ep0.common.fill_index       = 0;
+    ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
+    ep0.ep_state                = EP0_STATE_IDLE;
+    ep0.length                  = 0;
+    ep0.transmitted             = 0;
+}
+
+// The start function is called by higher-level code when things have
+// been set up, i.e. the enumeration data is available, appropriate
+// handlers have been installed for the different types of control
+// messages, and communication with the host is allowed to start. The
+// next event that should happen is a reset operation from the host,
+// so all other interrupts should be blocked. However it is likely
+// that the hardware will detect a suspend state before the reset
+// arrives, and hence the reset will act as a resume as well as a
+// reset.
+static void
+usbs_sa11x0_ep0_start(usbs_control_endpoint* endpoint)
+{
+    CYG_ASSERT( endpoint == &ep0.common, "USB startup involves the wrong endpoint");
+    
+    // Activate the hardware. Write a 0 to the enable/disable bit 0.
+    // Bit 1 is read-only. The other bits are set to 1 to disable
+    // the corresponding interrupt source.
+    usbs_sa11x0_poke(USBS_CONTROL, CONTROL_ALL_INTR, CONTROL_ALL_INTR, 0);
+
+    // If there is additional platform-specific initialization to
+    // perform, do it now. This macro can come from the platform HAL.
+#ifdef SA11X0_USB_PLATFORM_INIT
+    SA11X0_USB_PLATFORM_INIT;
+#endif
+        
+    // Clear any pending interrupts. There should not be any, but just
+    // in case. Note: passing 0x00FF as the should_be_clear argument
+    // is a race condition, an external event can happen at any time,
+    // so we may loop unnecessarily and lose an interrupt. However
+    // the initial reset should last for 10ms.
+    usbs_sa11x0_poke(USBS_STATUS, 0x00FF, 0x00, 0x00FF);
+
+    // The only interrupt really of interest right now is reset, but
+    // it is likely to be preceded by a resume. 
+    usbs_sa11x0_poke(USBS_CONTROL,
+                     CONTROL_INTR_ENABLE(CONTROL_RESET_INTR | CONTROL_RESUME_INTR),
+                     0,
+                     CONTROL_INTR_CLEAR(CONTROL_RESET_INTR | CONTROL_RESUME_INTR));
+}
+
+
+// Filling the fifo with a reply to the host. This can be called
+// immediately at the end of a control message, to prepare for
+// the next IN token. It will also get called after each subsequent
+// IN operation when the fifo has been emptied.
+//
+// Experiments have indicated serious problems with the control fifo:
+// some writes to the fifo just get lost completely. The failure rate
+// is sufficiently high that more often than not the host will be
+// unable to read all the enumeration data. However, the write-count
+// register appears to give a valid indication of the current fifo
+// contents. This means the code can retry stuffing a particular byte
+// into the fifo until the write-count goes up.
+
+static void
+usbs_sa11x0_ep0_fill_fifo(void)
+{
+    cyg_bool ok     = true;
+    int filled      = 0;
+    int max;
+    int fifo_count  = *EP0_WRITE_COUNT;
+
+    // The host can interrupt the current control message at any time
+    // with a new one. In practice this is unlikely, things could get
+    // rather confused on the host side. However if a control message
+    // has been received then the fifo should obviously not be filled.
+    // A new control message is indicated by the SETUP_END bit.
+    //
+    // The hardware design means that there is a race condition: the
+    // new control message can come in at any time, even in the middle
+    // of filling the fifo. Checking the SETUP_END more often would
+    // reduce the probability of things getting messed up, but not
+    // eliminate it.
+    //
+    // There is a check for SETUP_END at the start of the DSR, so
+    // the setting of this bit should have resulted in another ISR
+    // and another DSR being scheduled. Hence there is no need for
+    // special action here.
+    if (0 != (*EP0_CONTROL & EP0_SETUP_END)) {
+        DBG(("EP0_fill_fifo(), interrupted by SETUP_END\n"));
+        return;
+    }
+
+    // There should never be any data in the fifo. Any such data could
+    // be the remnant of a previous transfer to the host, but that
+    // should all have gone out already. Alternatively it could be
+    // incoming data, but that means a new control message.
+    if (0 != fifo_count) {
+        DBG(("EP0_fill_fifo(), fifo already contains %d bytes", fifo_count));
+        return;
+    }
+
+    // The IN_READY bit should never be set on entry. It can only get
+    // set by a previous call to fill_fifo(), and the data should
+    // have gone out before we get back here.
+    if (0 != (*EP0_CONTROL & EP0_IN_READY)) {
+        DBG(("EP0 fill_fifo(), in-packet-ready bit already set, state %x\n", *EP0_CONTROL));
+        return;
+    }
+
+    // Now put up to another eight bytes into the fifo.
+    max = ((ep0.length - ep0.transmitted) > EP0_FIFO_SIZE) ? EP0_FIFO_SIZE : (ep0.length - ep0.transmitted);
+    while (ok && (filled < max)) {
+        if (0 != ep0.common.buffer_size) {
+            int         datum;
+            int         retries, checks;
+            cyg_bool    written;
+
+            datum       = *ep0.common.buffer++;
+            ep0.common.buffer_size--;
+            written     = false;
+            
+            for (retries = 0; ok && !written && (retries < MAX_RETRIES); retries++) {
+                if (filled != *EP0_WRITE_COUNT) {
+                    DBG(("EP0 fill_fifo, inconsistency, written %d but write count %d\n", filled, *EP0_WRITE_COUNT));
+                    ok = false;
+                }
+                *EP0_DATA = datum;
+                // The write-count may take a few cycles to settle down.
+                for (checks = 0; !written && (checks < MAX_CHECKS); checks++) {
+                    if (filled < *EP0_WRITE_COUNT) {
+                        filled++;
+                        written = true;
+                        // DBG(("Transferred %d byte (%x) after %d checks, %d retries\n", filled - 1, datum, checks, retries));
+                    }
+                }
+            }
+        } else if ((void (*)(usbs_control_endpoint*))0 != ep0.common.fill_buffer_fn) {
+            (*ep0.common.fill_buffer_fn)(&ep0.common);
+        } else {
+            break;
+        }
+    }
+
+    // At this point either it has proved impossible to fill the fifo,
+    // e.g. because of a new control message, or up to another eight
+    // bytes have been sent. 
+    if (!ok) {
+        if (0 == (EP0_SETUP_END & *EP0_CONTROL)) {
+            // There is something seriously wrong.
+            DBG(("ep0_fill_fifo(), failed, only filled %d bytes, status %x\n", filled, *EP0_CONTROL));
+            usbs_sa11x0_poke(EP0_CONTROL, EP0_FORCE_STALL, EP0_FORCE_STALL, 0);
+        }
+        return;
+    }
+
+    // The following conditions are possible:
+    // 1) amount transferred == amount requested, transfer complete.
+    // 2) amount transferred < amount requested, this fill involved
+    //    <eight bytes, transfer complete by definition of the protocol.
+    // 3) amount transferred < amount requested but exactly eight
+    //    bytes were sent this time. It will be necessary to send
+    //    another packet of zero bytes to complete the transfer.
+    ep0.transmitted += filled;
+    if ((ep0.transmitted == ep0.length) || (filled < EP0_FIFO_SIZE)) {
+
+        ep0.ep_state    = EP0_STATE_IDLE;
+        if ((usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn) {
+            (void) (*ep0.common.complete_fn)(&ep0.common, 0);
+        }
+        ep0.common.buffer               = (unsigned char*) 0;
+        ep0.common.buffer_size          = 0;
+        ep0.common.fill_buffer_fn       = (void (*)(usbs_control_endpoint*)) 0;
+
+        // This informs the hardware that the control message has been
+        // handled.
+        usbs_sa11x0_poke(EP0_CONTROL, EP0_DATA_END, EP0_DATA_END, 0);
+    }
+    // This allows another IN operation to empty the fifo.
+    usbs_sa11x0_poke(EP0_CONTROL, EP0_IN_READY, EP0_IN_READY, 0);
+}
+
+// Another utility function to empty the fifo. This involves similar
+// hardware problems to writing, it is possible to read a byte without
+// changing the fifo state so that next time the same byte would be
+// read again. Again there is a possible race condition if another
+// control message arrives while emptying the fifo.
+static int
+usbs_sa11x0_ep0_empty_fifo(unsigned char* buf)
+{
+    int         count   = *EP0_WRITE_COUNT & 0x00FF;
+    int         emptied = 0;
+    cyg_bool    ok      = true;
+
+    CYG_ASSERT( (count >= 0) & (count <= 8), "EP0 write count must be in range");
+
+    while (ok && (emptied < count)) {
+        int      retries, checks;
+        cyg_bool read   = false;
+
+        for (retries = 0; !read && (retries < MAX_RETRIES); retries++) {
+            if ((count - emptied) != *EP0_WRITE_COUNT) {
+                DBG(("EP0_empty_fifo, inconsistency, read %d bytes of %d, but fifo count %d\n", emptied, count, *EP0_WRITE_COUNT));
+                ok = false;
+            } else {
+                buf[emptied] = *EP0_DATA;
+                for (checks = 0; !read && (checks < MAX_CHECKS); checks++) {
+                    if ((count - emptied) > *EP0_WRITE_COUNT) {
+                        //DBG(("Read %d byte (%x) after %d checks, %d retries\n", emptied, buf[emptied], checks, retries));
+                        read = true;
+                        emptied++;
+                    }
+                }
+            }
+        }
+        if (ok && !read) {
+            DBG(("EP0 empty fifo, failed to read byte from fifo\n"));
+            ok = false;
+        }
+    }
+    
+    return emptied;
+}
+
+// This is where all the hard work happens. It is a very large routine
+// for a DSR, but in practice nearly all of it is nested if's and very
+// little code actually gets executed. Note that there may be
+// invocations of callback functions and the driver has no control
+// over how much time those will take, but those callbacks should be
+// simple.
+static void
+usbs_sa11x0_ep0_dsr(void)
+{
+    int hw_state = *EP0_CONTROL;
+
+    // Handle the stall bits.
+    //
+    // Force-stall should not be a problem. It is set by the code here
+    // if the host needs to be told that the control message was
+    // unacceptable and is cleared automatically by the hardware after
+    // the stall is sent.
+    //
+    // Sent-stall is set by the hardware following a protocol
+    // violation, e.g. if there is an IN token when a new control
+    // message is expected. There is nothing the software can do about
+    // this. However if we are in the middle of an IN or OUT transfer
+    // then those are not going to complete successfully.
+    if (0 != (hw_state & EP0_SENT_STALL)) {
+        if (EP0_STATE_IDLE != ep0.ep_state) {
+            if ((usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn) {
+                (*ep0.common.complete_fn)(&ep0.common, -EIO);
+            }
+            ep0.ep_state                = EP0_STATE_IDLE;
+            ep0.common.buffer           = (unsigned char*) 0;
+            ep0.common.buffer_size      = 0;
+            ep0.common.fill_buffer_fn   = 0;
+            ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
+        }
+        usbs_sa11x0_poke(EP0_CONTROL, EP0_SENT_STALL, 0, EP0_SENT_STALL);
+    }   // STALL condition
+    
+    // Next, check whether we have received a new control message
+    // while still busy processing an old one.
+    if (0 != (hw_state & EP0_SETUP_END)) {
+        if (EP0_STATE_IDLE != ep0.ep_state) {
+            if ((usbs_control_return (*)(usbs_control_endpoint*, int)) 0 != ep0.common.complete_fn) {
+                (*ep0.common.complete_fn)(&ep0.common, -EIO);
+            }
+            ep0.ep_state                = EP0_STATE_IDLE;
+            ep0.common.buffer           = (unsigned char*) 0;
+            ep0.common.buffer_size      = 0;
+            ep0.common.fill_buffer_fn   = 0;
+            ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
+        }
+        // We are now back in idle state so the control message will be
+        // extracted and processed.
+        usbs_sa11x0_poke(EP0_CONTROL, EP0_SERVICED_SETUP_END, 0, EP0_SETUP_END);
+    }   // Interrupted control transaction
+
+    // The endpoint can be in one of three states: IN, OUT, or IDLE.
+    // For the first two it should mean that there is more data to be
+    // transferred, which is pretty straightforward. IDLE means
+    // that a new control message has arrived.
+    if ((EP0_STATE_IN == ep0.ep_state) && (0 == (EP0_IN_READY & hw_state)))  {
+        
+        usbs_sa11x0_ep0_fill_fifo();
+        
+    } else if ((EP0_STATE_OUT == ep0.ep_state) && (0 != (EP0_OUT_READY & hw_state))) {
+
+        // A host->device transfer. Higher level code must have
+        // provided a suitable buffer.
+        CYG_ASSERT( (unsigned char*)0 != ep0.common.buffer, "A receive buffer should have been provided" );
+
+        ep0.transmitted += usbs_sa11x0_ep0_empty_fifo(ep0.common.buffer + ep0.transmitted);
+
+        if (ep0.transmitted != ep0.length) {
+            // The host is not allowed to send more data than it
+            // indicated in the original control message, and all
+            // messages until the last one should be full size.
+            CYG_ASSERT( ep0.transmitted < ep0.length, "The host must not send more data than expected");
+            CYG_ASSERT( 0 == (ep0.transmitted % EP0_FIFO_SIZE), "All OUT packets until the last one should be full-size");
+
+            usbs_sa11x0_poke(EP0_CONTROL, EP0_SERVICED_OPR, 0, EP0_OUT_READY);
+        } else {
+            // The whole transfer is now complete. Invoke the
+            // completion function, and based on its return value
+            // either generate a stall or complete the message.
+            usbs_control_return result;
+            
+            CYG_ASSERT( (usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn, \
+                        "A completion function should be provided for OUT control messages");
+
+            result = (*ep0.common.complete_fn)(&ep0.common, 0);
+            ep0.common.buffer           = (unsigned char*) 0;
+            ep0.common.buffer_size      = 0;
+            ep0.common.complete_fn      = (usbs_control_return (*)(usbs_control_endpoint*, int)) 0;
+            
+            if (USBS_CONTROL_RETURN_HANDLED == result) {
+                usbs_sa11x0_poke(EP0_CONTROL,
+                                 EP0_SERVICED_OPR | EP0_DATA_END,
+                                 EP0_DATA_END,
+                                 EP0_OUT_READY);
+            } else {
+                usbs_sa11x0_poke(EP0_CONTROL,
+                                 EP0_SERVICED_OPR | EP0_DATA_END | EP0_FORCE_STALL,
+                                 EP0_FORCE_STALL,
+                                 EP0_OUT_READY);
+            }
+        }
+        
+    } else if (0 != (EP0_OUT_READY & hw_state)) {
+
+        int emptied = usbs_sa11x0_ep0_empty_fifo(ep0.common.control_buffer);
+        
+        if (8 != emptied) {
+            // This indicates a serious problem somewhere. Respond by
+            // stalling. Hopefully the host will take some action that
+            // sorts out the mess.
+            usbs_sa11x0_poke(EP0_CONTROL,
+                             EP0_SERVICED_OPR | EP0_DATA_END | EP0_FORCE_STALL,
+                             EP0_FORCE_STALL,
+                             EP0_OUT_READY);
+            
+        } else {
+            usbs_control_return result  = USBS_CONTROL_RETURN_UNKNOWN;
+            usb_devreq*         req     = (usb_devreq*) ep0.common.control_buffer;
+            int length, direction, protocol, recipient;
+            
+            // Now we need to do some decoding of the data. A non-zero
+            // length field indicates that there will be a subsequent
+            // IN or OUT phase. The direction is controlled by the
+            // top bit of the first byte. The protocol is determined
+            // by other bits of the top byte.
+            length      = (req->length_hi << 8) | req->length_lo;
+            direction   = req->type & USB_DEVREQ_DIRECTION_MASK;
+            protocol    = req->type & USB_DEVREQ_TYPE_MASK;
+            recipient   = req->type & USB_DEVREQ_RECIPIENT_MASK;
+
+#if 0
+            DBG(("ep0, new control request: type %x, code %x\n", req->type, req->request));
+            DBG(("     %s, length %d, value hi %x lo %x, index hi %x lo %x\n",
+                 (USB_DEVREQ_DIRECTION_OUT == direction) ? "out" : "in",
+                 length, req->value_hi, req->value_lo, req->index_hi, req->index_lo));
+#endif            
+            if (0 != length){
+                // Clear the fifo straightaway. There is no harm in
+                // doing this here. It may or may not do some good.
+                usbs_sa11x0_poke(EP0_CONTROL, EP0_SERVICED_OPR, 0, EP0_OUT_READY);
+            }
+            
+            if (USB_DEVREQ_TYPE_STANDARD == protocol) {
+                
+                // First see if the request can be handled entirely in
+                // this module.
+                if (USB_DEVREQ_SET_ADDRESS == req->request) {
+                    // The USB device address should be in value_lo.
+                    // No more data is expected. 
+                    int address = req->value_lo;
+                    if ((0 != length) || (address > 127)) {
+                        result = USBS_CONTROL_RETURN_STALL;
+                    } else {
+                        // poke_value() cannot be used here because
+                        // setting the address does not take effect
+                        // until the status phase.
+                        *USBS_ADDRESS = address;
+                        result = USBS_CONTROL_RETURN_HANDLED;
+                    }
+                } else if (USB_DEVREQ_GET_STATUS == req->request) {
+                    // GET_STATUS on the device as a whole is used to
+                    // check the remote-wakeup and self-powered bits.
+                    // GET_STATUS on an endpoint is used to determine
+                    // the halted condition.
+                    // GET_STATUS on anything else has to be left to
+                    // other code.
+                    if (USB_DEVREQ_RECIPIENT_DEVICE == recipient) {
+                        // The host should expect two bytes back.
+                        if ((2 == length) && (USB_DEVREQ_DIRECTION_IN == direction)) {
+                            ep0.common.control_buffer[0] = 0;   // Not self-powered, no remote wakeup
+                            ep0.common.control_buffer[1] = 0;
+                            ep0.common.buffer            = ep0.common.control_buffer;
+                            ep0.common.buffer_size       = 2;
+                            result                       = USBS_CONTROL_RETURN_HANDLED;
+                        } else {
+                            result = USBS_CONTROL_RETURN_STALL;
+                        }
+                        
+                    } else if (USB_DEVREQ_RECIPIENT_ENDPOINT == recipient) {
+                        if ((2 == length) && (USB_DEVREQ_DIRECTION_IN == direction)) {
+                            int endpoint = req->index_lo;
+                            if (0 == endpoint) {
+                                // get-status on endpoint 0 is either undefined or always valid.
+                                // endpoint 0 is always up.
+                                ep0.common.control_buffer[0] = 0;
+                                result = USBS_CONTROL_RETURN_HANDLED;
+                            }
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
+                            else if (((USB_DEVREQ_INDEX_DIRECTION_OUT | 1) == endpoint) &&
+                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
+                                
+                                ep0.common.control_buffer[0] = ep1.common.halted;
+                                result = USBS_CONTROL_RETURN_HANDLED;
+
+                            }
+#endif                            
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+                            else if (((USB_DEVREQ_INDEX_DIRECTION_IN | 2) == endpoint) &&
+                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
+
+                                ep0.common.control_buffer[0] = ep2.common.halted;
+                                result = USBS_CONTROL_RETURN_HANDLED;
+                                
+                            }
+#endif                            
+                            else {
+                                // An invalid endpoint has been specified or the
+                                // endpoint can only be examined in configured state.
+                                result = USBS_CONTROL_RETURN_STALL;
+                            }
+                            if (USBS_CONTROL_RETURN_HANDLED == result) {
+                                ep0.common.control_buffer[1] = 0;
+                                ep0.common.buffer            = ep0.common.control_buffer;
+                                ep0.common.buffer_size       = 2;
+                            }
+                        } else {
+                            result = USBS_CONTROL_RETURN_STALL;
+                        }
+                    } // Endpoint or device get-status
+                    
+                } else if (USB_DEVREQ_CLEAR_FEATURE == req->request) {
+
+                    // CLEAR_FEATURE operates in much the same way as
+                    // GET_STATUS
+                    if (USB_DEVREQ_RECIPIENT_DEVICE == recipient) {
+                        
+                        // No data should be transferred, and only remote-wakeup can be cleared.
+                        if ((0 != length) || (USB_DEVREQ_FEATURE_DEVICE_REMOTE_WAKEUP != req->value_lo)) {
+                            result = USBS_CONTROL_RETURN_STALL;
+                        } else {
+                            // Clearing remote-wakeup is a no-op.
+                            result = USBS_CONTROL_RETURN_HANDLED;
+                        }
+
+                    } else if (USB_DEVREQ_RECIPIENT_ENDPOINT == recipient) {
+                        // The only feature that can be cleared is endpoint-halt, no data should be transferred.
+                        if ((0 != length) || (USB_DEVREQ_FEATURE_ENDPOINT_HALT != req->value_lo)) {
+                            result = USBS_CONTROL_RETURN_STALL;
+                        } else {
+                            int endpoint = req->index_lo;
+                            if (0 == endpoint) {
+                                // Clearing halt on endpoint 0 is always a no-op since that endpoint cannot be halted
+                            }
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
+                            else if (((USB_DEVREQ_INDEX_DIRECTION_OUT | 1) == endpoint) &&
+                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
+                                ep1_set_halted(&ep1.common, false);
+                                result = USBS_CONTROL_RETURN_HANDLED;
+                                
+                            }
+#endif
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+                            else if (((USB_DEVREQ_INDEX_DIRECTION_IN | 2) == endpoint) &&
+                                       (USBS_STATE_CONFIGURED == (ep0.common.state & USBS_STATE_MASK))) {
+                                ep2_set_halted(&ep2.common, false);
+                                result = USBS_CONTROL_RETURN_HANDLED;
+                                    
+                            }
+#endif
+                            else {
+                                // Invalid endpoint or not in configured state.
+                                result = USBS_CONTROL_RETURN_STALL;
+                            }
+                        }
+                    }   // Endpoing or device clear-feature
+                    
+                } else if (USB_DEVREQ_SET_FEATURE == req->request) {
+
+                    // SET_FEATURE also operates in much the same way as
+                    // GET_STATUS
+                    if (USB_DEVREQ_RECIPIENT_DEVICE == recipient) {
+                        
+                        // The only valid feature that can be set is remote-wakeup,
+                        // which is not supported by the hardware.
+                        result = USBS_CONTROL_RETURN_STALL;
+                        
+                    } else if (USB_DEVREQ_RECIPIENT_ENDPOINT == recipient) {
+
+                        // Only the halt condition can be set, and no data should be transferred.
+                        // Halting endpoint 0 should probably be disallowed although the
+                        // standard does not explicitly say so.
+                        if ((0 != length) ||
+                            (USB_DEVREQ_FEATURE_ENDPOINT_HALT != req->value_lo) ||
+                            (USBS_STATE_CONFIGURED != (ep0.common.state & USBS_STATE_MASK))) {
+                            
+                            result = USBS_CONTROL_RETURN_STALL;
+                            
+                        } else {
+                            int endpoint = req->index_lo;
+                            if (0) {
+                            }
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
+                            else if ((USB_DEVREQ_INDEX_DIRECTION_OUT | 1) == endpoint) {
+                                ep1_set_halted(&ep1.common, true);
+                                result = USBS_CONTROL_RETURN_HANDLED;
+                            }
+#endif                            
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+                            else if ((USB_DEVREQ_INDEX_DIRECTION_IN | 2) == endpoint) {
+                                ep2_set_halted(&ep2.common, true);
+                                result = USBS_CONTROL_RETURN_HANDLED;
+                            }
+#endif                            
+                            else {
+                                result = USBS_CONTROL_RETURN_STALL;
+                            }
+                        }
+                    } // Endpoing or device set-feature
+                }
+
+                // If the result has not been handled yet, pass it to
+                // the install callback function (if any).
+                if (USBS_CONTROL_RETURN_UNKNOWN == result) {
+                    if ((usbs_control_return (*)(usbs_control_endpoint*, void*))0 != ep0.common.standard_control_fn) {
+                        result = (*ep0.common.standard_control_fn)(&ep0.common, ep0.common.standard_control_data);
+                    }
+                }
+
+                // If the result has still not been handled, leave it to
+                // the default implementation in the USB slave common place.
+                if (USBS_CONTROL_RETURN_UNKNOWN == result) {
+                    result = usbs_handle_standard_control(&ep0.common);
+                }
+                
+            } else {
+                // The other three types of control message can be
+                // handled by similar code.
+                usbs_control_return (*callback_fn)(usbs_control_endpoint*, void*);
+                void* callback_arg;
+                //DBG(("non-standard control request %x", req->request));
+                
+                if (USB_DEVREQ_TYPE_CLASS == protocol) {
+                    callback_fn  = ep0.common.class_control_fn;
+                    callback_arg = ep0.common.class_control_data;
+                } else if (USB_DEVREQ_TYPE_VENDOR == protocol) {
+                    callback_fn  = ep0.common.vendor_control_fn;
+                    callback_arg = ep0.common.vendor_control_data;
+                } else {
+                    callback_fn  = ep0.common.reserved_control_fn;
+                    callback_arg = ep0.common.reserved_control_data;
+                }
+
+                if ((usbs_control_return (*)(usbs_control_endpoint*, void*)) 0 == callback_fn) {
+                    result = USBS_CONTROL_RETURN_STALL;
+                } else {
+                    result = (*callback_fn)(&ep0.common, callback_arg);
+                }
+            }
+            //DBG(("Control request done, %d\n", result));
+
+            if (USBS_CONTROL_RETURN_HANDLED != result) {
+                // This control request cannot be handled. Generate a stall.
+                usbs_sa11x0_poke(EP0_CONTROL,
+                                 EP0_FORCE_STALL | EP0_SERVICED_OPR | EP0_DATA_END,
+                                 EP0_FORCE_STALL,
+                                 EP0_OUT_READY);
+            } else {
+                // The control request has been handled. Is there any more
+                // data to be transferred?
+                if (0 == length) {
+                    usbs_sa11x0_poke(EP0_CONTROL,
+                                     EP0_SERVICED_OPR | EP0_DATA_END,
+                                     EP0_DATA_END,
+                                     EP0_OUT_READY);
+                } else {
+                    // The endpoint should now go into IN or OUT mode while the
+                    // remaining data is transferred.
+                    ep0.transmitted     = 0;
+                    ep0.length          = length;
+                    if (USB_DEVREQ_DIRECTION_OUT == direction) {
+                        // Wait for the next packet from the host.
+                        ep0.ep_state = EP0_STATE_OUT;
+                        CYG_ASSERT( (unsigned char*) 0 != ep0.common.buffer, "A receive buffer should have been provided");
+                        CYG_ASSERT( (usbs_control_return (*)(usbs_control_endpoint*, int))0 != ep0.common.complete_fn, \
+                                    "A completion function should be provided for OUT control messages");
+                    } else {
+                        ep0.ep_state = EP0_STATE_IN;
+                        usbs_sa11x0_ep0_fill_fifo();
+                    }
+                }
+            }   // Control message handled
+        }       // Received 8-byte control message
+    }           // Idle state, i.e. control message
+}               // ep0_dsr
+
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
+// ----------------------------------------------------------------------------
+// Endpoint 1 is used for OUT transfers, i.e. receive operations. Only
+// the bulk protocol is supported by the hardware. The semantics allow
+// for two different modes of operation: higher-level code can ask for
+// exactly one or more bulk packets of 64 bytes each, allowing buffer
+// requirements to be determined from a header; alternatively the
+// rx request can just supply a large buffer. Processing the first
+// packet of a larger transfer separately does not introduce any
+// special problems at the protocol level.
+//
+// It is not legal to receive just part of a packet and expect the
+// hardware or the driver to buffer the rest. Not all hardware will
+// be capable of doing this buffering, and there should not be
+// a driver design requirement to provide buffering space.
+//
+//
+// The hardware design for endpoint 1 is flawed in a number of
+// respects. The receive fifo is only 20 bytes, less than the packet
+// size, so it is essential to use DMA (there is a configuration
+// option to allow for communication protocols where packets will
+// never exceed 16 bytes, but that is not the normal case). The DMA
+// engine is triggered by a receive-fifo-service high-water mark
+// bit. DMA transfers operate in bursts of eight bytes. Therefore
+// it would make sense if the high-water mark was set when the
+// receive fifo contained eight bytes or more.
+//
+// Instead the high-water mark is set when the fifo contains twelve
+// bytes or more. Worse, there is no way of measuring how many bytes
+// there are left in the fifo without actually extracting those bytes.
+//
+// For a full-size 64-byte packet, the first 56 bytes will be
+// transferred by DMA and the remainder will remain in the fifo. For a
+// partial packet of between 56 and 63 bytes, the first 56 bytes will
+// be transferred by DMA and the remainder will remain in the fifo. There
+// is no way to distinguish between these scenarios without emptying
+// the fifo.
+//
+// The result is that there is never any point in attempting a DMA
+// transfer of more than 56 bytes, and for every endpoint 1 interrupt
+// it is necessary to read the remainder from the fifo. This adds
+// a lot of software overhead, and it is not clear that DMA is
+// particularly useful. It is still necessary because of the limited
+// fifo size.
+//
+//
+// Because DMA involves the use of physical rather than virtual
+// memory, there are also cache interaction problems. Specifically it
+// would be necessary to invalidate cache lines after a DMA transfer
+// has completed, but that only works sensibly if the buffer is
+// aligned to a cache-line boundary and is a multiple of the
+// cache-line size. Imposing such restrictions on higher-level code
+// is undesirable. Also the DMA engines have an apparently undocumented
+// restriction that the buffer must be eight-byte aligned.
+//
+// To work around all these problems, the receive code works in terms
+// of a small private buffer. After a packet has been received, data
+// will be copied from this private buffer to the destination. Obviously
+// this copy operation is overhead and, because the code is expected
+// to run at DSR level, However the copy operation is limited to at
+// most 64 bytes, which is not good but not disastrous either.
+//
+// For data transfers the entry points are:
+//
+// 1) ep1_start_rx_packet() - prepare to receive another packet from
+//    the host.
+// 2) ep1_clear_error() - an error condition has occurred (CRC,
+//    bit-stuffing, fifo overrun). It appears that the only way
+//    to clear this is to clear the receive-packet-complete bit,
+//    which unfortunately allows in another packet from the host
+//    before we are ready for it. Doing anything else while
+//    the error bit is set does not work, for example it is not
+//    possible to empty the fifo by hand.
+// 3) ep1_process_packet() - a whole packet has been received
+//    and now needs to be moved into application space.
+//
+// These three routines are called by the start_rx() routine and
+// by the DSR. There are different implementations for DMA and
+// non-DMA.
+//
+// There is another hardware problem: the receive-packet-complete bit
+// comes up with the wrong default value, allowing the host to start
+// transmitting before the target is ready to receive. Unfortunately
+// there is not much that can be done about this: the
+// receive-packet-complete bit cannot be set by software and the OUT
+// max register has a minimum size of eight bytes. Fortunately for
+// many protocols the target-side code has a chance to start a receive
+// before the host is allowed to send, so this problem is ignored for
+// now.
+//
+// Another potential problem arises if the host sends more data than
+// is expected for a given transfer. It would be possible to address
+// this by manipulating the OUT max packet register and getting the
+// hardware to generate protocol violation stalls. This would also
+// eliminate the need to test for buffer overflows. For now it is
+// left to higher-level code to sort it all out.
+
+#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
+
+// DMA needs an area of physical memory. To avoid conflicts with
+// the cached shadow of this memory, this area needs to start at
+// a cache line boundary and there must be padding at the end
+// to the next cache line boundary, thus ensuring that the
+// processor will not accidentally overwrite the physical
+// memory because it is manipulating some other variable.
+//
+// NOTE: at the time of writing the toolchain has a problem with
+// the aligned attribute, so instead the start alignment has
+// to be handled in software.
+
+# define EP1_DMA_MTU            56
+# define EP1_DMA_BUFSIZE        ((EP1_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) - \
+                                 ((EP1_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) % HAL_DCACHE_LINE_SIZE))
+# define EP1_DMA_ALLOCSIZE      (EP1_DMA_BUFSIZE + HAL_DCACHE_LINE_SIZE - 1)
+
+static unsigned char    ep1_dma_data[EP1_DMA_ALLOCSIZE];
+
+// This variable cannot be initialized statically, instead it is
+// set by ep1_init(). It corresponds to the physical address
+// for the buffer.
+static unsigned char*   ep1_dma_buf;
+
+static void
+ep1_start_rx_packet(void)
+{
+    int dma_size = EP1_DMA_MTU;
+
+    // This assertion does not always hold: clearing an error condition
+    // involves the packet-complete bit so another message may have
+    // started to arrive.
+    // CYG_ASSERT( 0 == (EP1_FIFO_NOT_EMPTY & *EP1_CONTROL), "The receive fifo should be empty");
+    
+    CYG_ASSERT( 0 == ((DMA_CONTROL_RUN | DMA_CONTROL_START_A) & *EP1_DMA_STATUS), "EP1 DMA should be inactive");
+
+#ifdef FAILURES
+    ep1_failure = (ep1_failure + 1) % 32;
+    if (0 == ep1_failure) {
+        dma_size = 8;
+    }
+#endif
+    
+    // The full flexibility of the DMA engines is not required here,
+    // specifically the automatic chaining between buffers A and B.
+    // Instead always using buffer A is sufficient. To avoid the
+    // hardware switching to buffer B, an excessive size field is
+    // used, EP1_MTU rather than EP1_DMA_MTU, and hence the
+    // DMA transfer will never complete.
+    //
+    // With some silicon revisions writing to the DMA registers does
+    // not always work either, so a retry is in order. Possibly
+    // some short delays immediately after the clear and before the
+    // set would be sufficient.
+    *EP1_DMA_CONTROL_CLEAR  = DMA_CONTROL_CLEAR_ALL;
+    if (0 == (DMA_STATUS_BUFFER_IN_USE & *EP1_DMA_STATUS)) {
+        ep1.using_buf_a = true;
+        usbs_sa11x0_poke_value(EP1_DMA_BUF_A_ADDRESS, (unsigned int) ep1_dma_buf);
+        usbs_sa11x0_poke_value(EP1_DMA_BUF_A_SIZE, dma_size);
+        *EP1_DMA_CONTROL_SET = DMA_CONTROL_RUN | DMA_CONTROL_START_A;
+    } else {
+        ep1.using_buf_a = false;
+        usbs_sa11x0_poke_value(EP1_DMA_BUF_B_ADDRESS, (unsigned int) ep1_dma_buf);
+        usbs_sa11x0_poke_value(EP1_DMA_BUF_B_SIZE, dma_size);
+        *EP1_DMA_CONTROL_SET = DMA_CONTROL_RUN | DMA_CONTROL_START_B;
+    }
+
+    // This should not be necessary, but occasionally the equivalent
+    // operation during ep1_init() fails. Strictly speaking it should
+    // be calling poke_value(), but the added overheads for that are
+    // not worthwhile.
+    *USBS_OUT_SIZE      = EP1_MTU - 1;
+    
+    // Now allow the host to send the packet.
+    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
+                     EP1_PACKET_COMPLETE | EP1_SENT_STALL | EP1_FORCE_STALL);
+}
+
+// Clear an error condition following a CRC, bit stuffing or overrun
+// error. The only reliable way to do this is to halt DMA and clear
+// the packet-complete bit. Unfortunately this allows the host to send
+// another packet immediately, before start_rx_packet can be called,
+// introducing another race condition. The hardware does not appear
+// to offer any alternatives.
+static void
+ep1_clear_error(void)
+{
+    *EP1_DMA_CONTROL_CLEAR = DMA_CONTROL_CLEAR_ALL;
+    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
+                     EP1_PACKET_COMPLETE | EP1_PACKET_ERROR | EP1_SENT_STALL | EP1_FORCE_STALL | EP1_FIFO_NOT_EMPTY);
+    
+    // Clearing the packet-complete bit may cause the host to send
+    // another packet, immediately causing another error, so this
+    // assertion does not hold.
+    // CYG_ASSERT( 0 == (*EP1_CONTROL & (EP1_PACKET_ERROR | EP1_FIFO_NOT_EMPTY)), "Receive error should have been cleared");
+}
+
+// A packet has been received. Some of it may still be in the fifo
+// and must be extracted by hand. The data then has to copied to
+// a higher-level buffer.
+static void
+ep1_process_packet(void)
+{
+    // First, work out how much data has been processed by the DMA
+    // engine. This is the amount originally poked into the size
+    // register minus its current value.
+    int pkt_size;
+
+    *EP1_DMA_CONTROL_CLEAR = DMA_CONTROL_CLEAR_ALL;
+    if (ep1.using_buf_a) {
+        pkt_size = EP1_DMA_MTU - *EP1_DMA_BUF_A_SIZE;
+    } else {
+        pkt_size = EP1_DMA_MTU - *EP1_DMA_BUF_B_SIZE;
+    }
+    
+    CYG_ASSERT( 0 == (pkt_size % DMA_BURST_SIZE), "DMA transfers must be in multiples of the burst size");
+    
+    // Move these bytes from physical memory to the target buffer.
+    if ((pkt_size > 0) && ((ep1.fetched + pkt_size) < ep1.common.buffer_size)) {
+        memcpy(ep1.common.buffer + ep1.fetched, ep1_dma_buf, pkt_size);
+    } 
+    ep1.fetched += pkt_size;
+
+    // Copy remaining bytes into the target buffer directly.
+    // The DMA buffer could be used instead, moving the memcpy()
+    // down and avoiding the need for a buffer overflow check
+    // inside the loop, but at the cost of accessing physical
+    // memory every time. That cost is too high.
+    while (1) {
+        int status = *EP1_CONTROL;
+        if ((EP1_PACKET_COMPLETE | EP1_PACKET_ERROR) == ((EP1_PACKET_COMPLETE | EP1_PACKET_ERROR) & status)) {
+            break;
+        } else if (0 == (EP1_FIFO_NOT_EMPTY & status)) {
+            break;
+        } else {
+            int datum = *EP1_DATA;
+            if (ep1.fetched < ep1.common.buffer_size) {
+                ep1.common.buffer[ep1.fetched] = datum;
+            }
+            ep1.fetched++;
+        }
+    }
+}
+
+#else
+
+// Transfers not involving DMA. Obviously these are much simpler
+// but restricted to packets of 16 bytes.
+static void
+ep1_start_rx_packet(void)
+{
+    // Nothing to be done, just let the host send a packet and it will
+    // end up in the fifo.
+    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
+                     EP1_PACKET_COMPLETE | EP1_SENT_STALL | EP1_FORCE_STALL);
+}
+
+static void
+ep1_clear_error(void)
+{
+    usbs_sa11x0_poke(EP1_CONTROL, EP1_PACKET_COMPLETE | EP1_SENT_STALL, 0,
+                     EP1_PACKET_COMPLETE | EP1_SENT_STALL | EP1_FORCE_STALL);
+}
+
+static void
+ep1_process_packet(void)
+{
+    while (0 != (*EP1_CONTROL & EP1_FIFO_NOT_EMPTY)) {
+        int datum = *EP1_DATA;
+        ep1.fetched++;
+        if (ep1.fetched < ep1.common.buffer_size) {
+            ep1.common.buffer[ep1.fetched] = datum;
+        }
+    }
+}
+#endif
+
+// Complete a transfer. This takes care of invoking the completion
+// callback and resetting the buffer.
+static void
+ep1_rx_complete(int result)
+{
+    void (*complete_fn)(void*, int)  = ep1.common.complete_fn;
+    void* complete_data = ep1.common.complete_data;
+    
+    ep1.common.buffer           = (unsigned char*) 0;
+    ep1.common.buffer_size      = 0;
+    ep1.common.complete_fn      = (void (*)(void*, int)) 0;
+    ep1.common.complete_data    = (void*) 0;
+
+    if ((void (*)(void*, int))0 != complete_fn) {
+        (*complete_fn)(complete_data, result);
+    }
+}
+
+// Start a transmission. This functionality is overloaded to cope with
+// waiting for stalls to complete.
+static void
+ep1_start_rx(usbs_rx_endpoint* endpoint)
+{
+    CYG_ASSERT( endpoint == &ep1.common, "USB data transfer involves the wrong endpoint");
+
+    // Is this endpoint currently stalled? If so then a size of 0 can
+    // be used to block until the stall condition is clear, anything
+    // else should result in an immediate callback.
+    if (ep1.common.halted) {
+        if (0 != ep1.common.buffer_size) {
+            ep1_rx_complete(-EAGAIN);
+        }
+    } else if (0 == ep1.common.buffer_size) {
+        // A check to see if the endpoint is halted. It isn't.
+        ep1_rx_complete(0);
+    } else {
+        int status      = *EP1_CONTROL;
+
+        // This indicates the start of a transfer.
+        ep1.fetched     = 0;
+
+        // The sent-stall bit may get set by hardware because of
+        // a protocol violation. If so it must be cleared here.
+        if (0 != (status & EP1_SENT_STALL)) {
+            usbs_sa11x0_poke(EP1_CONTROL, EP1_SENT_STALL, 0, EP1_SENT_STALL | EP1_FORCE_STALL);
+            status = *EP1_CONTROL;
+        }
+
+        // The bogus initial value for the receive-packet-complete
+        // bit means that we may start off with an error condition.
+        if ((EP1_PACKET_COMPLETE | EP1_PACKET_ERROR) == (status & (EP1_PACKET_COMPLETE | EP1_PACKET_ERROR))) {
+            ep1_clear_error();
+            ep1_start_rx_packet();
+        } else if (0 != (status & EP1_FIFO_NOT_EMPTY)) {
+            // No error but data in the fifo. This implies a small
+            // initial packet, all held in the fifo.
+#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
+            *EP1_DMA_BUF_A_SIZE         = EP1_MTU;
+#endif            
+            ep1_process_packet();
+            ep1_rx_complete(ep1.fetched);
+        } else {
+            // Start a new transfer.
+            ep1_start_rx_packet();
+        }
+    }
+}
+
+static void
+ep1_set_halted(usbs_rx_endpoint* endpoint, cyg_bool new_value)
+{
+    CYG_ASSERT( endpoint == &ep1.common, "USB set-stall operation involves the wrong endpoint");
+
+    if (ep1.common.halted == new_value) {
+        return;
+    }
+    if (new_value) {
+        // The endpoint should be stalled. There is a potential race
+        // condition here with a current transfer. Updating the
+        // stalled flag means that the dsr will do nothing.
+        ep1.common.halted = true;
+        HAL_REORDER_BARRIER();
+
+        // Now perform the actual stall. If we are in the middle of a
+        // transfer then the stall bit may not get set for a while, so
+        // poke() is inappropriate.
+        *EP1_CONTROL = EP1_FORCE_STALL;
+
+        // And abort any current transfer.
+        ep1_rx_complete(-EAGAIN);
+        
+    } else {
+        // The stall condition should be cleared. First take care of
+        // things at the hardware level so that a new transfer is
+        // allowed.
+        usbs_sa11x0_poke(EP1_CONTROL, EP1_SENT_STALL, 0, EP1_SENT_STALL | EP1_FORCE_STALL);
+
+        // Now allow new transfers to begin.
+        ep1.common.halted = false;
+        ep1_rx_complete(0);
+    }
+}
+
+// The DSR is invoked following an interrupt. According to the docs an
+// endpoint 1 interrupt can only happen if the receive-packet-complete
+// bit is set.
+static void
+usbs_sa11x0_ep1_dsr(void)
+{
+    int status = *EP1_CONTROL;
+
+    // This assertion does not always hold. During long runs
+    // spurious interrupts have been observed.
+    // CYG_ASSERT( 0 != (status & EP1_PACKET_COMPLETE), "ep1 dsr should only be invoked when there is data");
+    if (0 == (status & EP1_PACKET_COMPLETE)) {
+        return;
+    }
+    
+    if (ep1.common.halted) {
+        // Do nothing. What may have happened is that a transfer
+        // was in progress when the stall bit was set. The
+        // set_halted() call above will have taken care of things.
+        return;
+        
+    }
+
+    // The sent-stall bit should never get set, since we always
+    // accept full-size 64-byte packets. Just in case...
+    if (0 != (status & EP1_SENT_STALL)) {
+        DBG(("ep1_dsr(), sent-stall bit\n"));
+        usbs_sa11x0_poke(EP1_CONTROL, EP1_SENT_STALL, 0, EP1_SENT_STALL | EP1_FORCE_STALL);
+    }
+
+    // Was there a receive error (CRC, bit-stuffing, fifo-overrun?).
+    // Whichever bits of the current packet have been received must be
+    // discarded, and the current packet must be retried.
+    if (0 != (status & EP1_PACKET_ERROR)) {
+        INCR_STAT(ep1_errors);
+        ep1_clear_error();
+        ep1_start_rx_packet();
+    } else {
+        // Another packet has been received. Process it, which may
+        // complete the transfer or it may leave more to be done.
+        INCR_STAT(ep1_receives);
+        ep1_process_packet();
+        if (0 != (EP1_PACKET_ERROR & *EP1_CONTROL)) {
+
+            CYG_ASSERT( 0, "an error has occurred inside ep1_process_packet()\n");
+            
+        } else if ((ep1.fetched != ep1.common.buffer_size) && (0 == (ep1.fetched % EP1_MTU))) {
+            ep1_start_rx_packet();
+        } else if (ep1.fetched > ep1.common.buffer_size) {
+            // The host has sent too much data.
+            ep1_rx_complete(-EMSGSIZE);
+        } else {
+#if 0
+            int i;
+            diag_printf("------------------------------------------------------\n");
+            diag_printf("rx: buf %x, total size %d\n", ep1.common.buffer, ep1.fetched);
+            for (i = 0; (i < ep1.fetched) && (i < 128); i+= 8) {
+                diag_printf("rx %x %x %x %x %x %x %x %x\n",
+                            ep1.common.buffer[i+0], ep1.common.buffer[i+1], ep1.common.buffer[i+2], ep1.common.buffer[i+3], 
+                            ep1.common.buffer[i+4], ep1.common.buffer[i+5], ep1.common.buffer[i+6], ep1.common.buffer[i+7]);
+            }
+            diag_printf("------------------------------------------------------\n");
+#endif
+            ep1_rx_complete(ep1.fetched);
+        }
+    }
+}
+
+// Initialization.
+//
+// This may get called during system start-up or following a reset
+// from the host.
+static void
+usbs_sa11x0_ep1_init(void)
+{
+#ifdef CYGNUM_DEVS_USB_SA11X0_EP1_DMA_CHANNEL
+    // What is the physical address that should be used for
+    // transfers?
+    unsigned int phys;
+    HAL_VIRT_TO_PHYS_ADDRESS( ep1_dma_data, phys);
+    phys += (HAL_DCACHE_LINE_SIZE - 1);
+    phys -= (phys % HAL_DCACHE_LINE_SIZE);
+    CYG_ASSERT( 0 == (phys % HAL_DCACHE_LINE_SIZE), "DMA buffer must be aligned to a cache-line boundary");
+    ep1_dma_buf = (unsigned char*)phys;
+
+    // Clear the DMA channel and fix the DMA address register. The
+    // value is determined above. 
+    *EP1_DMA_CONTROL_CLEAR      = DMA_CONTROL_CLEAR_ALL;
+    *EP1_DMA_ADDRESS            = EP1_DMA_ADDRESS_VALUE;
+#endif
+
+    // Always allow the host to send full-size packets. If there is a
+    // protocol problem and the host sends packets that are too large,
+    // it will have to be handled at a level above the device driver.
+    //
+    // With some silicon revisions reading back the register does not
+    // work, so poke_value() is not applicable. This may be an issue
+    // with reset timing.
+    *USBS_OUT_SIZE      = EP1_MTU - 1;
+
+    // Endpoints should never be halted during a start-up.
+    ep1.common.halted           = false;
+
+    // If there has been a reset and there was a receive in progress,
+    // abort it. This also takes care of sorting out the endpoint
+    // fields ready for the next rx.
+    ep1_rx_complete(-EPIPE);
+}
+
+#endif  // CYGPKG_DEVS_USB_SA11X0_EP1
+
+
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+// ----------------------------------------------------------------------------
+// Endpoint 2 is used for IN transfers, i.e. transmitting data to the
+// host. The code is mostly similar to that for endpoint 1, although
+// a little bit simpler (e.g. there is no need to worry about
+// buffer overflow, that is the host's problem). 
+//
+// There is a flaw in the hardware design. If the transfer involves an
+// exact multiple of 64 bytes then according to the USB spec there
+// should be a terminating packet of 0 bytes. However the size of the
+// current outgoing packet is determined by the IN_SIZE register and
+// that only allows for packets between 1 and 256 bytes - even though
+// USB bulk transfers can only go up to 64 bytes. This can be worked
+// around at this level by transmitting an extra byte, at the risk of
+// upsetting host-side device drivers. Both higher-level and host-side
+// code need to be aware of this problem.
+//
+// Again there appear to be problems with the DMA engine. This time it
+// appears that the transmit-fifo-service bit does not always work
+// correctly. If you set up a DMA transfer for more than the packet
+// size than once the packet has gone out the fifo-service bit just
+// remains set, the DMA engine continues to fill the fifo, and the
+// data gets lost. Instead DMA can only happen one packet at a time.
+// The same issues regarding cache line alignment etc. arise, so
+// using a small buffer here is convenient.
+//
+// 1) process_packet moves a packet from the main transmit buffer
+//    into the dma buffer.
+// 2) start_tx_packet() starts a transfer to the host
+// 3) clear_error() copes with error conditions.
+
+#ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
+// See the equivalent EP1 DMA definitions.
+# define EP2_DMA_MTU   64
+# define EP2_DMA_BUFSIZE        ((EP2_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) - \
+                                 ((EP2_DMA_MTU + HAL_DCACHE_LINE_SIZE - 1) % HAL_DCACHE_LINE_SIZE))
+# define EP2_DMA_ALLOCSIZE      (EP2_DMA_BUFSIZE + HAL_DCACHE_LINE_SIZE - 1)
+
+static unsigned char  ep2_dma_data[EP2_DMA_ALLOCSIZE];
+static unsigned char* ep2_dma_buf;
+
+static void
+ep2_process_packet(void)
+{
+    ep2.pkt_size = ep2.common.buffer_size - ep2.transmitted;
+    if (ep2.pkt_size > EP2_MTU) {
+        ep2.pkt_size = EP2_MTU;
+    }
+    // Work around the hardware's inability to send a zero-byte packet.
+    if (0 == ep2.pkt_size) {
+        ep2.pkt_size = 1;
+        ep2_dma_buf[0] = 0;
+    } else {
+        memcpy(ep2_dma_buf, ep2.common.buffer + ep2.transmitted, ep2.pkt_size);
+    }
+}
+
+static void
+ep2_tx_packet(void)
+{
+    int dma_size, dma_control_settings;
+    
+    // CYG_ASSERT( 0 != (*EP2_CONTROL & EP2_FIFO_SERVICE), "Fifo should be empty");
+
+    // Halt any DMA that may still be going on (there should not
+    // be any). Then work out the desired DMA settings for the
+    // current packet. The DMA engine needs to transfer a multiple
+    // of the burst size. If the packet size is not a multiple of
+    // the burst size, this presents a minor problem. The chances
+    // of an interrupt handler running in time to put the
+    // remaining bytes into the fifo by hand are not good, so
+    // instead more data is DMA'd in then is absolutely necessary
+    // and the surplus bytes will be cleared out during the next
+    // tx_packet.
+    //
+    // A possible optimisation is to detect small packets of
+    // less than the fifo size and byte-stuff those, bypassing
+    // DMA. It is not clear that would give any performance benefits.
+    *EP2_DMA_CONTROL_CLEAR      = DMA_CONTROL_CLEAR_ALL;
+    
+    dma_size    = ep2.pkt_size + DMA_BURST_SIZE - 1;
+    dma_size   -= (dma_size % DMA_BURST_SIZE);
+
+    CYG_ASSERT(dma_size > 0, "DMA calculations should result in a transfer of at least 8 bytes");
+    
+    // Now clear the fifo, after DMA has stopped.
+    usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL);
+
+    // Should we be using buf_a or buf_b for this transfer?
+    // Getting this wrong means that the DMA engine just idles.
+    if (0 == (*EP2_DMA_STATUS & DMA_STATUS_BUFFER_IN_USE)) {
+        usbs_sa11x0_poke_value(EP2_DMA_BUF_A_ADDRESS, (int) ep2_dma_buf);
+        usbs_sa11x0_poke_value(EP2_DMA_BUF_A_SIZE, dma_size);
+        dma_control_settings    = DMA_CONTROL_RUN | DMA_CONTROL_START_A;
+    } else {
+        usbs_sa11x0_poke_value(EP2_DMA_BUF_B_ADDRESS, (int) ep2_dma_buf);
+        usbs_sa11x0_poke_value(EP2_DMA_BUF_B_SIZE, dma_size);
+        dma_control_settings    = DMA_CONTROL_RUN | DMA_CONTROL_START_B;
+    }
+
+    // Poke the tx size register while the fifo is clearing.
+    // This operation must be reliable or the host will get
+    // confused by funny-sized packets.
+    usbs_sa11x0_poke_value(USBS_IN_SIZE, ep2.pkt_size - 1);
+
+    // The USB hardware must be updated before the DMA engine
+    // starts filling the fifo. Otherwise ~48% of outgoing
+    // packets fail with a DMA underrun. When called from
+    // start_tx() there is a race condition: if the host
+    // request comes in before the DMA starts then an
+    // error interrupt will be raised, to be processed by
+    // the DSR, and then the DMA engine gets updated again.
+    // Locking the scheduler eliminates this race.
+    cyg_drv_dsr_lock();
+    usbs_sa11x0_poke(EP2_CONTROL, EP2_PACKET_COMPLETE, 0, EP2_PACKET_COMPLETE | EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN);
+    *EP2_DMA_CONTROL_SET        = dma_control_settings;
+    cyg_drv_dsr_unlock();
+    
+    // CYG_ASSERT(0 == (*EP2_CONTROL & EP2_FIFO_SERVICE), "DMA engine should have filled up the fifo by now");
+}
+
+// Clearing an error should be a no-op when DMA is involved.
+// In practice clearing the packet-complete bit appears to
+// have some desirable effects, at the risk of the host
+// getting bogus data. This should only happen when there
+// is a real transfer in progress: an error early on is
+// likely because the PACKET_COMPLETE bit has a bogus initial
+// value.
+static void
+ep2_clear_error(void)
+{
+    usbs_sa11x0_poke(EP2_CONTROL, EP2_PACKET_COMPLETE, 0, EP2_PACKET_COMPLETE | EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN);
+}
+
+#else   // EP2_DMA
+
+// When not using DMA, process_packet() is responsible for filling the
+// fifo and keeping a shadow copy in a static buffer. clear_error()
+// refills the fifo using the shadow copy. tx_packet() starts the
+// actual transfer.
+static unsigned char ep2_tx_buf[EP2_MTU];
+
+static void
+ep2_process_packet()
+{
+    int i;
+    
+    // Clear the fifo, just in case.
+    usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL);
+
+    ep2.pkt_size = ep2.common.buffer_size - ep2.transmitted;
+    if (ep2.pkt_size > EP2_MTU) {
+        ep2.pkt_size = EP2_MTU;
+    }
+    if (0 == ep2.pkt_size) {
+        ep2.pkt_size    = 1;
+        ep2_tx_buf[i]   = 0;
+        *EP2_DATA       = 0;
+    } else {
+        for (i = 0; i < ep2.pkt_size; i++) {
+            unsigned int datum = ep2.common.buffer[ep2.transmitted + i];
+            ep2_tx_buf[i]   = datum;
+            *EP2_DATA       = datum;
+        }
+    }
+}
+
+static void
+ep2_tx_packet()
+{
+    usbs_sa11x0_poke_value(USBS_IN_SIZE, ep2.pkt_size - 1);
+    usbs_sa11x0_poke(EP2_CONTROL, EP2_PACKET_COMPLETE, 0, EP2_PACKET_COMPLETE | EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN);
+}
+
+static void
+ep2_clear_error()
+{
+    int i;
+    // Clear the fifo, just in case.
+    usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL);
+    for (i = 0; i < ep2.pkt_size; i++) {
+        *EP2_DATA       = ep2_tx_buf[i];
+    }
+}
+
+#endif  // !EP2_DMA
+
+// A utility routine for completing a transfer. This takes care of the
+// callback as well as resetting the buffer.
+static void
+ep2_tx_complete(int result)
+{
+    void (*complete_fn)(void*, int)  = ep2.common.complete_fn;
+    void* complete_data = ep2.common.complete_data;
+    
+    ep2.common.buffer           = (unsigned char*) 0;
+    ep2.common.buffer_size      = 0;
+    ep2.common.complete_fn      = (void (*)(void*, int)) 0;
+    ep2.common.complete_data    = (void*) 0;
+
+    if ((void (*)(void*, int))0 != complete_fn) {
+        (*complete_fn)(complete_data, result);
+    }
+}
+
+
+// The exported interface to start a transmission.
+static void
+ep2_start_tx(usbs_tx_endpoint* endpoint)
+{
+    CYG_ASSERT( endpoint == &ep2.common, "USB data transfer involves the wrong endpoint");
+
+    // Is this endpoint currently stalled? If so then a size of 0 can
+    // be used to block until the stall condition is clear, anything
+    // else should result in an immediate callback.
+    if (ep2.common.halted) {
+        if (0 != ep2.common.buffer_size) {
+            ep2_tx_complete(-EAGAIN);
+        }
+    } else if (0 == ep2.common.buffer_size) {
+        // A check to see if the endpoint is halted. It isn't.
+        ep2_tx_complete(0);
+    } else {
+        // There should not be any errors at the start of a
+        // transmission, but if there is one then there is no safe way
+        // to recover. process_packet() and tx_packet() will hopefully
+        // do the right thing.
+#if 0
+        {
+            int i;
+            diag_printf("----------------------------------------------\n");
+            diag_printf("ep2_start_tx: buf %x, %d bytes\n", ep2.common.buffer, ep2.common.buffer_size);
+            for (i = 0; (i < ep2.common.buffer_size) && (i < 128); i+= 8) {
+                diag_printf("tx: %x %x %x %x %x %x %x %x\n",
+                            ep2.common.buffer[i+0], ep2.common.buffer[i+1], ep2.common.buffer[i+2], ep2.common.buffer[i+3],
+                            ep2.common.buffer[i+4], ep2.common.buffer[i+5], ep2.common.buffer[i+6], ep2.common.buffer[i+7]);
+            }
+            diag_printf("----------------------------------------------\n");
+        }
+#endif
+
+        // Prepare the first packet for transmission, then send it.
+        ep2.transmitted = 0;
+        ep2_process_packet();
+        ep2_tx_packet();
+    }
+}
+
+static void
+ep2_set_halted(usbs_tx_endpoint* endpoint, cyg_bool new_value)
+{
+    CYG_ASSERT(endpoint == &ep2.common, "USB set-stall operation involves the wrong endpoint");
+
+    if (ep2.common.halted == new_value) {
+        return;
+    }
+    if (new_value) {
+        // The endpoint should be stalled. There is a potential race
+        // condition here with the current transfer and DSR invocation.
+        // Updating the stalled flag means that the DSR will do nothing.
+        ep2.common.halted = true;
+        HAL_REORDER_BARRIER();
+
+        // Now perform the actual stall. This may be delayed by the hardware
+        // so poke() cannot be used.
+        *EP2_CONTROL = EP2_FORCE_STALL;
+
+        // And abort any current transfer.
+        ep2_tx_complete(-EAGAIN);
+        
+    } else {
+        // First take care of the hardware so that a new transfer is
+        // allowed. Then allow new transfers to begin and inform
+        // higher-level code.
+        usbs_sa11x0_poke(EP2_CONTROL, EP2_SENT_STALL, 0, EP2_SENT_STALL | EP2_FORCE_STALL);
+        ep2.common.halted = false;
+        ep2_tx_complete(0);
+    }
+}
+
+// The dsr will be invoked when the transmit-packet-complete bit is
+// set. Typically this happens when a packet has been completed
+// (surprise surprise) but it can also happen for error conditions.
+static void
+usbs_sa11x0_ep2_dsr(void)
+{
+    int status = *EP2_CONTROL;
+    // This assertion does not always hold - spurious interrupts have
+    // been observed if you run for a few hours.
+    // CYG_ASSERT( 0 != (status & EP2_PACKET_COMPLETE), "ep2 dsr should only be invoked when the packet-complete bit is set");
+
+    if (0 == (status & EP2_PACKET_COMPLETE)) {
+        // Spurious interrupt, do nothing.
+    } else if (ep2.common.halted) {
+        // There is a possible race condition between a packet
+        // completing and the stalled condition being set.
+        // set_halted() above does everything that is needed.
+    } else if (0 == ep2.pkt_size) {
+        // This can happen because of the initial value for the
+        // packet-complete bit, allowing the host to retrieve data
+        // before the target is ready. The correct action is to do
+        // nothing.
+    } else if (0 != (status & (EP2_PACKET_ERROR | EP2_PACKET_UNDERRUN))) {
+        // A transmit error occurred, the details are not important.
+        INCR_STAT(ep2_errors);
+        ep2_clear_error();
+        ep2_tx_packet();
+    } else {
+        // Another packet has gone out.
+        INCR_STAT(ep2_transmits);
+        ep2.transmitted += ep2.pkt_size;
+        if (ep2.transmitted < ep2.common.buffer_size) {
+            ep2_process_packet();
+            ep2_tx_packet();
+        } else {
+            ep2_tx_complete(ep2.transmitted);
+        }
+    }
+}
+
+// Endpoint 2 initialization.
+//
+// This may be called during system start-up or following a reset
+// from the host.
+static void
+usbs_sa11x0_ep2_init(void)
+{
+#ifdef CYGNUM_DEVS_USB_SA11X0_EP2_DMA_CHANNEL
+    // What is the physical address that should be used for
+    // transfers?
+    unsigned int phys;
+    HAL_VIRT_TO_PHYS_ADDRESS(ep2_dma_data, phys);
+    phys += (HAL_DCACHE_LINE_SIZE - 1);
+    phys -= (phys % HAL_DCACHE_LINE_SIZE);
+    CYG_ASSERT(0 == (phys % HAL_DCACHE_LINE_SIZE), "DMA buffer must be aligned to a cache-line boundary");
+    ep2_dma_buf = (unsigned char*) phys;
+    
+    // Clear the DMA channel completely, otherwise it may not be
+    // possible to write the ADDRESS register. Then set the DMA
+    // address register. The value is determined above.
+    *EP2_DMA_CONTROL_CLEAR      = DMA_CONTROL_CLEAR_ALL;
+    *EP2_DMA_ADDRESS            = EP2_DMA_ADDRESS_VALUE;
+#endif
+
+    // Endpoints should never be halted after a reset
+    ep2.common.halted   = false;
+
+    // If there has been a reset and there was a receive in progress,
+    // abort it. This also takes care of clearing the endpoint
+    // structure fields.
+    ep2_tx_complete(-EPIPE);
+}
+
+#endif // CYGPKG_DEVS_USB_SA11X0_EP2
+
+// ----------------------------------------------------------------------------
+// Interrupt handling
+//
+// As much work as possible is deferred to the DSR (or to the debug
+// thread). Interrupts for the endpoints are never a problem: the
+// variuos packet-complete etc. bits ensure that the endpoints
+// remain quiescent until the relevant interrupt has been serviced.
+// Suspend and resume are more complicated. A suspend means that
+// there has been no activity for 3ms, which should be enough
+// time for the whole thing to be handled. A resume means that there
+// has been bus activity after a suspend, and again it is infrequent.
+//
+// Reset appears to be much more complicated. A reset means that the
+// host is holding the USB lines to a specific state for 10ms. This is
+// detected by the hardware, causing the USB controller to be reset
+// (i.e. any pending transfers are discarded, etc.). The reset bit in
+// the status register will be set, and an interrupt will be raised.
+// Now, in theory the correct thing to do is to process this
+// interrupt, block reset interrupts for the duration of these 10ms,
+// and wait for further activity such as the control message to set
+// the address.
+//
+// In practice this does not seem to work. Possibly the USB controller
+// gets reset continuously while the external reset signal is applied,
+// but I have not been able to confirm this. Messing about with the
+// reset interrupt control bit causes the system to go off into
+// never-never land. 10ms is too short a time to allow for manual
+// debugging of what happens. So for now the interrupt source is
+// blocked at the interrupt mask level and the dsr will do the
+// right thing. This causes a significant number of spurious interrupts
+// for the duration of the reset signal and not a lot else can happen.
+
+
+// Perform reset operations on all endpoints that have been
+// configured in. It is convenient to keep this in a separate
+// routine to allow for polling, where manipulating the
+// interrupt controller mask is a bad idea.
+static void
+usbs_sa11x0_handle_reset(void)
+{
+    int old_state = ep0.common.state;
+
+    // Any state change must be reported to higher-level code
+    ep0.common.state = USBS_STATE_DEFAULT;
+    if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != ep0.common.state_change_fn) {
+        (*ep0.common.state_change_fn)(&ep0.common, ep0.common.state_change_data,
+                                      USBS_STATE_CHANGE_RESET, old_state);
+    }
+
+    // Reinitialize all the endpoints that have been configured in.
+    usbs_sa11x0_ep0_init();
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
+    usbs_sa11x0_ep1_init();
+#endif    
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+    usbs_sa11x0_ep2_init();
+#endif    
+
+    // After a reset we need to handle endpoint interrupts, reset
+    // interrupts, and suspend interrupts. There should not be a
+    // resume since we have not suspended, but leaving resume
+    // interrupts enabled appears to be desirable with some hardware.
+    //
+    // With some silicon revisions it appears that a longer delay
+    // is needed after reset, so this poke() may not work.
+    if (!usbs_sa11x0_poke(USBS_CONTROL,
+                          CONTROL_INTR_ENABLE(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR),
+                          0,
+                          CONTROL_INTR_CLEAR(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR))) {
+        // DBG(("usbs_sa11x0_handle_reset(), update of control register failed, status %x\n", *USBS_STATUS));
+    }
+}
+
+// The DSR. This can be invoked directly by poll(), or via the usual
+// interrupt subsystem. It acts as per the current value of
+// isr_status_bits. If another interrupt goes off while this
+// DSR is running, there will be another invocation of the DSR and
+// the status bits will be updated.
+static void
+usbs_sa11x0_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
+{
+    int status = 0;
+    
+    CYG_ASSERT(SA11X0_IRQ_USB_SERVICE_REQUEST == vector, "USB DSR should only be invoked for USB interrupts" );
+    CYG_ASSERT(0 == data, "The SA11X0 USB DSR needs no global data pointer");
+
+    // There is no atomic swap support, so interrupts have to be
+    // blocked. It might be possible to do this via the USBS_CONTROL
+    // register, but at the risk of messing up the status register
+    // if another interrupt comes in. Blocking interrupts at the
+    // processor level is less intrusive on the USB code.
+
+    cyg_drv_isr_lock();
+    status = isr_status_bits;
+    isr_status_bits = 0;
+    cyg_drv_isr_unlock();
+
+    // Reset is special, since it invalidates everything else.
+    // If the reset is still ongoing then do not attempt any
+    // further processing, there will just be another interrupt.
+    // Otherwise handle_reset() does the hard work. Unmasking
+    // the interrupt means that another interrupt will occur
+    // immediately if reset is still asserted, i.e. no threads
+    // will run, but there is no easy way of triggering action
+    // at the end of reset.
+    if (0 != (status & STATUS_RESET_INTR)) {
+        
+        int new_status = *USBS_STATUS; 
+        if (0 == (new_status & STATUS_RESET_INTR)) {
+            usbs_sa11x0_handle_reset();
+        } 
+        // This unmask is likely to cause another interrupt immediately
+        cyg_drv_interrupt_unmask(SA11X0_IRQ_USB_SERVICE_REQUEST);
+        
+    } else {
+        // Process resume first. Ignore any resumes when we are not
+        // actually suspended yet, this happens mainly during system
+        // startup. If there has been a state change to suspended
+        // then we need a matching state change to resumed.
+        if (0 != (status & STATUS_RESUME_INTR)) {
+            int old_state       = ep0.common.state;
+            if (0 != (old_state & USBS_STATE_SUSPENDED)) {
+                ep0.common.state   &= ~USBS_STATE_SUSPENDED;
+                if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != ep0.common.state_change_fn) {
+                    (*ep0.common.state_change_fn)(&ep0.common, ep0.common.state_change_data,
+                                              USBS_STATE_CHANGE_RESUMED, old_state);
+                }
+                // After a resume, all interrupts should be enabled.
+                // In theory there is no need to worry about further
+                // resume interrupts, but strange hardware behaviour
+                // has been observed if resume interrupts are left
+                // disabled.
+                usbs_sa11x0_poke(USBS_CONTROL,
+                                 CONTROL_INTR_ENABLE(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR),
+                                 0,
+                                 CONTROL_INTR_CLEAR(CONTROL_EP_INTR_BITS|CONTROL_RESET_INTR|CONTROL_SUSPEND_INTR|CONTROL_RESUME_INTR));
+            }
+        }
+
+        // Now process endpoint interrupts. Control operations on
+        // endpoint 0 may have side effects on the other endpoints
+        // so it is better to leave them until last.
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1    
+        if (0 != (status & STATUS_EP1_INTR)) {
+            usbs_sa11x0_ep1_dsr();
+        }
+#endif    
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+        if (0 != (status & STATUS_EP2_INTR)) {
+            usbs_sa11x0_ep2_dsr();
+        }
+#endif
+        if (0 != (status & STATUS_EP0_INTR)) {
+            usbs_sa11x0_ep0_dsr();
+        }
+        
+        // Process suspend last, but only if there has not also been
+        // a resume. A suspend immediately followed by a resume should
+        // be ignored. A resume immediately followed by a suspend
+        // would be unfortunate, but suspend means that there has been
+        // at least 3ms of inactivity so the DSR latency would have
+        // to be pretty bad.
+        //
+        // Total robustness is possible but requires more work in the ISR.
+        if ((0 != (status & STATUS_SUSPEND_INTR)) && (0 == (status & STATUS_RESUME_INTR))) {
+            int old_state       = ep0.common.state;
+            ep0.common.state   |= USBS_STATE_SUSPENDED;
+            if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != ep0.common.state_change_fn) {
+                (*ep0.common.state_change_fn)(&ep0.common, ep0.common.state_change_data,
+                                              USBS_STATE_CHANGE_SUSPENDED, old_state);
+            }
+            // We are no longer interested in further suspend interrupts,
+            // which could happen every 3 ms, but resume has become
+            // very interesting.
+            usbs_sa11x0_poke(USBS_CONTROL,
+                             CONTROL_INTR_ENABLE(CONTROL_EP_INTR_BITS | CONTROL_RESET_INTR | CONTROL_RESUME_INTR),
+                             0,
+                             CONTROL_INTR_CLEAR(CONTROL_EP_INTR_BITS | CONTROL_RESET_INTR | CONTROL_RESUME_INTR));
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+// Optionally the USB code can do most of its processing in a thread
+// rather than in a DSR.
+#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
+static unsigned char usbs_sa11x0_thread_stack[CYGNUM_DEVS_USB_SA11X0_THREAD_STACK_SIZE];
+static cyg_thread    usbs_sa11x0_thread;
+static cyg_handle_t  usbs_sa11x0_thread_handle;
+static cyg_sem_t     usbs_sa11x0_sem;
+
+
+static void
+usbs_sa11x0_thread_fn(cyg_addrword_t param)
+{
+    for (;;) {
+        cyg_semaphore_wait(&usbs_sa11x0_sem);
+        usbs_sa11x0_dsr(SA11X0_IRQ_USB_SERVICE_REQUEST, 0, 0);
+    }
+    CYG_UNUSED_PARAM(cyg_addrword_t, param);
+}
+
+static void
+usbs_sa11x0_thread_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
+{
+    CYG_ASSERT( 0 != isr_status_bits, "DSR's should only be scheduled when there is work to do");
+    cyg_semaphore_post(&usbs_sa11x0_sem);
+    
+    CYG_UNUSED_PARAM(cyg_vector_t, vector);
+    CYG_UNUSED_PARAM(cyg_ucount32, count);
+    CYG_UNUSED_PARAM(cyg_addrword_t, data);
+}
+
+#endif
+
+// ----------------------------------------------------------------------------
+// The interrupt handler. This does as little as possible.
+static cyg_uint32
+usbs_sa11x0_isr(cyg_vector_t vector, cyg_addrword_t data)
+{
+    int old_status_bits = isr_status_bits;
+    int status_bits;
+
+    CYG_ASSERT(SA11X0_IRQ_USB_SERVICE_REQUEST == vector, "USB ISR should only be invoked for USB interrupts" );
+    CYG_ASSERT(0 == data, "The SA11X0 USB ISR needs no global data pointer" );
+
+    // Read the current status. Reset is special, it means that the
+    // whole chip has been reset apart from the one bit in the status
+    // register. Nothing should be done about this until the DSR sets
+    // the endpoints back to a consistent state and re-enables
+    // interrupts in the control register.
+    status_bits         = *USBS_STATUS;
+    
+    if (0 != (status_bits & STATUS_RESET_INTR)) {
+        isr_status_bits = STATUS_RESET_INTR;
+        *USBS_STATUS = status_bits;
+        cyg_drv_interrupt_mask(SA11X0_IRQ_USB_SERVICE_REQUEST);
+    } else {
+        *USBS_STATUS    = status_bits;
+        isr_status_bits |= status_bits;
+    }
+
+    // Now keep the rest of the system happy.
+    cyg_drv_interrupt_acknowledge(vector);
+    return (old_status_bits != isr_status_bits) ? CYG_ISR_CALL_DSR : CYG_ISR_HANDLED;
+}
+
+// ----------------------------------------------------------------------------
+// Polling support. This acts mostly like the interrupt handler: it
+// sets the isr status bits and causes the dsr to run. Reset has to be
+// handled specially: polling does nothing as long as reset is asserted.
+
+static void
+usbs_sa11x0_poll(usbs_control_endpoint* endpoint)
+{
+    CYG_ASSERT( endpoint == &ep0.common, "USB poll involves the wrong endpoint");
+    
+    if (0 != (isr_status_bits & STATUS_RESET_INTR)) {
+        // Reset was detected the last time poll() was invoked. If
+        // reset is still active, do nothing. Once the reset has
+        // completed things can continue.
+        if (0 == (STATUS_RESET_INTR & *USBS_STATUS)) {
+            isr_status_bits = 0;
+            usbs_sa11x0_handle_reset();
+        }
+    } else {
+        isr_status_bits = *USBS_STATUS;
+        if (0 != (STATUS_RESET_INTR & isr_status_bits)) {
+            // Reset has just been asserted. Do nothing, just continue
+            // polling for the duration of the reset signal.
+        } else if (0 != isr_status_bits) {
+            usbs_sa11x0_dsr(SA11X0_IRQ_USB_SERVICE_REQUEST, 0, (cyg_addrword_t) 0);
+        }
+    }
+}
+
+
+// ----------------------------------------------------------------------------
+// Initialization.
+
+void
+usbs_sa11x0_init(void)
+{
+    // Start by disabling/resetting the hardware. This is easy.
+    *USBS_CONTROL       = CONTROL_DISABLE;
+    *USBS_CONTROL       = CONTROL_DISABLE;
+    *USBS_CONTROL       = CONTROL_DISABLE;
+
+    // The USB bus is now tristated, preventing any communications.
+    // This is a good thing, the situation should change only when
+    // higher-level code has provided the enumeration data and done an
+    // explicit start. 
+    usbs_sa11x0_ep0_init();
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP1
+    usbs_sa11x0_ep1_init();
+#endif
+#ifdef CYGPKG_DEVS_USB_SA11X0_EP2
+    usbs_sa11x0_ep2_init();
+#endif
+
+    // If processing is supposed to happen in a thread rather
+    // than in DSR, initialize the threads.
+#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
+    cyg_semaphore_init(&usbs_sa11x0_sem, 0);
+    cyg_thread_create(CYGNUM_DEVS_USB_SA11X0_THREAD_PRIORITY,
+                      &usbs_sa11x0_thread_fn,
+                      0,
+                      "SA11X0 USB support",
+                      usbs_sa11x0_thread_stack,
+                      CYGNUM_DEVS_USB_SA11X0_THREAD_STACK_SIZE,
+                      &usbs_sa11x0_thread_handle,
+                      &usbs_sa11x0_thread
+        );
+    cyg_thread_resume(usbs_sa11x0_thread_handle);
+#endif
+    
+    // It is also possible and desirable to install the interrupt
+    // handler here, even though there will be no interrupts for a
+    // while yet.
+    cyg_drv_interrupt_create(SA11X0_IRQ_USB_SERVICE_REQUEST,
+                             99,        // priority
+                             0,         // data
+                             &usbs_sa11x0_isr,
+#ifdef CYGPKG_DEVS_USB_SA11X0_THREAD
+                             &usbs_sa11x0_thread_dsr,
+#else                             
+                             &usbs_sa11x0_dsr,
+#endif                             
+                             &usbs_sa11x0_intr_handle,
+                             &usbs_sa11x0_intr_data);
+    cyg_drv_interrupt_attach(usbs_sa11x0_intr_handle);
+    cyg_drv_interrupt_unmask(SA11X0_IRQ_USB_SERVICE_REQUEST);
+}
new file mode 100644
--- /dev/null
+++ b/packages/devs/usb/sa11x0/current/src/usbs_sa11x0_data.cxx
@@ -0,0 +1,165 @@
+//==========================================================================
+//
+//      usbs_sa11x0.c
+//
+//      Static data for the SA11x0 USB device driver
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+//
+// This file contains various objects that should go into extras.o
+// rather than libtarget.a, e.g. devtab entries that would normally
+// be eliminated by the selective linking.
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <cyg/io/devtab.h>
+#include <cyg/io/usb/usbs_sa11x0.h>
+#include <pkgconf/devs_usb_sa11x0.h>
+
+// ----------------------------------------------------------------------------
+// Initialization. The goal here is to call usbs_sa11x0_init()
+// early on during system startup, to take care of things like
+// registering interrupt handlers etc. which are best done
+// during system init.
+//
+// If the endpoint 0 devtab entry is available then its init()
+// function can be used to take care of this. However the devtab
+// entries are optional so an alternative mechanism must be
+// provided. Unfortunately although it is possible to give
+// a C function the constructor attribute, it cannot be given
+// an initpri attribute. Instead it is necessary to define a
+// dummy C++ class.
+
+extern "C" void usbs_sa11x0_init(void);
+
+#ifndef CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY
+class usbs_sa11x0_initialization {
+  public:
+    usbs_sa11x0_initialization() {
+        usbs_sa11x0_init();
+    }
+};
+
+static usbs_sa11x0_initialization usbs_sa11x0_init_object CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO);
+#endif
+
+// ----------------------------------------------------------------------------
+// The devtab entries. Each of these is optional, many applications
+// will want to use the lower-level API rather than go via
+// open/read/write/ioctl.
+
+#ifdef CYGVAR_DEVS_USB_SA11X0_EP0_DEVTAB_ENTRY
+
+// For endpoint 0 the only legal operations are get_config() and
+// set_config(), and these are provided by the common package.
+
+static bool
+usbs_sa11x0_devtab_ep0_init(struct cyg_devtab_entry* tab)
+{
+    CYG_UNUSED_PARAM(struct cyg_devtab_entry*, tab);
+    usbs_sa11x0_init();
+    return true;
+}
+
+static CHAR_DEVIO_TABLE(usbs_sa11x0_ep0_devtab_functions,
+                        &cyg_devio_cwrite,
+                        &cyg_devio_cread,
+                        &cyg_devio_select,
+                        &usbs_devtab_get_config,
+                        &usbs_devtab_set_config);
+
+static CHAR_DEVTAB_ENTRY(usbs_sa11x0_ep0_devtab_entry,
+                         CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "0c",
+                         0,
+                         &usbs_sa11x0_ep0_devtab_functions,
+                         &usbs_sa11x0_devtab_ep0_init,
+                         0,
+                         (void*) &usbs_sa11x0_ep0);
+#endif
+
+// ----------------------------------------------------------------------------
+// Common routines for ep1 and ep2.
+#if defined(CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY) || defined(CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY)
+static bool
+usbs_sa11x0_devtab_dummy_init(struct cyg_devtab_entry* tab)
+{
+    CYG_UNUSED_PARAM(struct cyg_devtab_entry*, tab);
+    return true;
+}
+#endif
+
+// ----------------------------------------------------------------------------
+// ep1 devtab entry. This can only be used for host->slave, so only the
+// cread() function makes sense.
+
+#ifdef CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY
+
+static CHAR_DEVIO_TABLE(usbs_sa11x0_ep1_devtab_functions,
+                        &cyg_devio_cwrite,
+                        &usbs_devtab_cread,
+                        &cyg_devio_select,
+                        &usbs_devtab_get_config,
+                        &usbs_devtab_set_config);
+
+static CHAR_DEVTAB_ENTRY(usbs_sa11x0_ep1_devtab_entry,
+                         CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "1r",
+                         0,
+                         &usbs_sa11x0_ep1_devtab_functions,
+                         &usbs_sa11x0_devtab_dummy_init,
+                         0,
+                         (void*) &usbs_sa11x0_ep1);
+#endif
+
+// ----------------------------------------------------------------------------
+// ep2 devtab entry. This can only be used for slave->host, so only
+// the cwrite() function makes sense.
+
+#ifdef CYGVAR_DEVS_USB_SA11X0_EP2_DEVTAB_ENTRY
+
+static CHAR_DEVIO_TABLE(usbs_sa11x0_ep2_devtab_functions,
+                        &usbs_devtab_cwrite,
+                        &cyg_devio_cread,
+                        &cyg_devio_select,
+                        &usbs_devtab_get_config,
+                        &usbs_devtab_set_config);
+
+static DEVTAB_ENTRY(usbs_sa11x0_ep2_devtab_entry,
+                    CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "2w",
+                    0,
+                    &usbs_sa11x0_ep2_devtab_functions,
+                    &usbs_sa11x0_devtab_dummy_init,
+                    0,
+                    (void*) &usbs_sa11x0_ep2);
+
+#endif
+
--- a/packages/ecos.db
+++ b/packages/ecos.db
@@ -122,9 +122,6 @@ package CYGPKG_DEVS_FLASH_INTEL_BOOTBLOC
            This package contains hardware support for Intel boot block flash memory."
 }
 
-
-
-
 package CYGPKG_DEVS_FLASH_EBSA285 {
 	alias 		{ "FLASH memory support for StrongARM EBSA-285" flash_ebsa285 }
 	directory	devs/flash/arm/ebsa285
@@ -164,8 +161,6 @@ package CYGPKG_DEVS_FLASH_ASSABET {
            This package contains hardware support for FLASH memory
 	   on the Intel StrongARM SA-1110 Assabet platform."
 }
-
-
 package CYGPKG_DEVS_FLASH_MBX {
 	alias 		{ "FLASH memory support for Motorola PowerPC/860 MBX" flash_mbx }
 	directory	devs/flash/powerpc/mbx
@@ -176,7 +171,6 @@ package CYGPKG_DEVS_FLASH_MBX {
 	   on the Motorola PowerPC/860 MBX platform."
 }
 
-
 package CYGPKG_IO_SERIAL_ARM_EBSA285 {
     alias 	      { "Intel EBSA285 serial driver"
                         devs_serial_arm_ebsa285 ebsa285_serial_driver }
@@ -186,7 +180,6 @@ package CYGPKG_IO_SERIAL_ARM_EBSA285 {
     description       "Intel StrongARM/EBSA285 serial device drivers"
 }
 
-
 package CYGPKG_IO_SERIAL_ARM_SA11X0 {
     alias 	      { "Intel StrongARM SA11x0 serial driver"
                         devs_serial_arm_sa11x0 sa11x0_serial_driver }
@@ -271,7 +264,6 @@ package CYGPKG_IO_SERIAL_TX39_JMR3904 {
     description       "TX39 JMR3904 serial device drivers"
 }
 
-
 package CYGPKG_IO_SERIAL_MIPS_REF4955 {
     alias             { "TX49 REF4955 serial device drivers"
                         devs_serial_mips_ref4955 ref4955_serial_driver }
@@ -281,7 +273,6 @@ package CYGPKG_IO_SERIAL_MIPS_REF4955 {
     description       "TX49 REF4955 serial device drivers"
 }
 
-
 package CYGPKG_IO_SERIAL_MIPS_VRC4373 {
     alias             { "VRC4373 serial device drivers"
                         devs_serial_mips_vrc4373 vrc4373_serial_driver }
@@ -357,7 +348,6 @@ package CYGPKG_IO_SERIAL_SH_CQ7708 {
     description       "SH3 cq7708 serial device drivers"
 }
 
-
 package CYGPKG_IO_SERIAL_V85X_V850 {
     alias             { "NEC V850 serial device drivers"
                         devs_serial_v85x_v850 v850_serial_driver }
@@ -400,6 +390,36 @@ package CYGPKG_IO_ETH_DRIVERS {
         description     "Platform independent ethernet support."
 }
 
+package CYGPKG_IO_USB { 
+        alias           { "Generic USB support" usb }
+        hardware
+        directory       io/usb/common
+        script          usb.cdl
+        description     "Generic USB support"
+}
+
+package CYGPKG_IO_USB_SLAVE {
+	alias           { "Generic USB slave-side support" usbs }
+        hardware
+        directory       io/usb/slave
+        script          usbs.cdl
+	description     "Generic USB slave-side support"
+}
+
+package CYGPKG_IO_USB_SLAVE_ETH {
+        alias		{ "USB slave-side ethernet class drivers" usbs_eth }
+        directory       io/usb/eth/slave
+        script          usbs_eth.cdl
+        description     "Support for USB peripherals that provide an ethernet-class function"
+}
+
+package CYGPKG_DEVS_USB_SA11X0 {
+        alias           { "Device-driver for the SA11X0 on-chip USB support" usb_sa11x0 }
+        hardware
+        directory       devs/usb/sa11x0
+        script          usbs_sa11x0.cdl
+        description     "A device driver for the SA11X0 on-chip USB slave port"
+}
 
 package CYGPKG_NET {
 	alias 		{ "Networking" net }
@@ -430,7 +450,6 @@ package CYGPKG_DEVS_ETH_ARM_EDB7XXX {
         description     "Ethernet driver for Cirrus Logic EDB7xxx development boards."
 }
 
-
 package CYGPKG_DEVS_ETH_ARM_EBSA285 {
 	alias 		{ "Intel EBSA285 with PRO/100+ ethernet driver"
 			   devs_eth_arm_ebsa285 ebsa285_eth_driver }
@@ -457,8 +476,6 @@ package CYGPKG_DEVS_ETH_INTEL_I82559 {
         description     "Ethernet driver for Intel 82559 NIC."
 }
 
-
-
 # Not sure whether this should be "hardware"; if so, it should be mentioned
 # in all targets that can use it.
 package CYGPKG_DEVS_ETH_CF {
@@ -515,7 +532,6 @@ package CYGPKG_DEVICES_WALLCLOCK_MIPS_RE
            Toshiba REF4955 board."
 }
 
-
 package CYGPKG_DEVICES_WATCHDOG_ARM_AEB {
 	alias		{ "Watchdog driver for ARM/AEB board" devices_watchdog_aeb device_watchdog_aeb }
 	directory	devs/watchdog/arm/aeb
@@ -585,7 +601,6 @@ This package provides memory allocator i
 dynamic memory allocators, including the ISO standard malloc
 interface. It also contains some sample implementations."
 }
-
 package CYGPKG_UITRON {
 	alias		{ "uITRON compatibility" uitron }
 	directory	compat/uitron
@@ -795,8 +810,6 @@ package CYGPKG_HAL_ARM_EBSA285 {
         eCos on a Intel EBSA285 StrongARM eval board."
 }
 
-
-
 package CYGPKG_HAL_ARM_SA11X0 {
 	alias		{ "Intel SA11X0 Chipset" hal_arm_sa11x0 }
 	directory	hal/arm/sa11x0/var
@@ -806,6 +819,7 @@ package CYGPKG_HAL_ARM_SA11X0 {
         The SA11X0 HAL package provides the support needed to run
         eCos on a Intel StrongARM SA11X0 based systems."
 }
+
 package CYGPKG_HAL_ARM_SA11X0_ASSABET {
 	alias		{ "Intel SA1110 Assabet eval board" hal_arm_sa11x0_assabet }
 	directory	hal/arm/sa11x0/assabet
@@ -815,6 +829,7 @@ package CYGPKG_HAL_ARM_SA11X0_ASSABET {
         The ASSABET HAL package provides the support needed to run
         eCos on a Intel StrongARM SA1110 evaulation board (assabet)."
 }
+
 package CYGPKG_HAL_ARM_SA11X0_BRUTUS {
 	alias		{ "Intel SA1100 Brutus eval board" hal_arm_sa11x0_brutus }
 	directory	hal/arm/sa11x0/brutus
@@ -854,7 +869,6 @@ The cma230 HAL package provides the supp
 CMA230 (ARM7TDMI) or CMA222 (ARM710T) eval board."
 }
 
-
 # --------------------------------------------------------------------------
 # SH packages
 package CYGPKG_HAL_SH {
@@ -898,6 +912,7 @@ package CYGPKG_HAL_SH_EDK7708 {
            This SH HAL package provides the support needed to run
            eCos on a Hitachi SH3 EDK7708 board."
 }
+
 package CYGPKG_HAL_SH_SH7708_CQ7708 {
         alias           { "CqREEK SH7708 board" hal_sh_cq sh_cq_hal }
         directory       hal/sh/cq7708
@@ -1143,7 +1158,6 @@ package CYGPKG_HAL_MIPS_TX39_JMR3904 {
            `target sim --board=jmr3904' should be used from inside gdb."
 }
 
-
 package CYGPKG_HAL_MIPS_TX49 {
 	alias		{ "TX49 chip HAL" hal_tx49 tx49_hal tx49_arch_hal }
 	directory	hal/mips/tx49/
@@ -1165,8 +1179,6 @@ package CYGPKG_HAL_MIPS_TX49_REF4955 {
            actual hardware."
 }
 
-
-
 package CYGPKG_HAL_MIPS_VR4300 {
 	alias		{ "VR4300 chip HAL" hal_vr4300 vr4300_hal vr4300_arch_hal }
 	directory	hal/mips/vr4300/
@@ -1293,6 +1305,7 @@ package CYGPKG_HAL_V85X_V850_CEB {
 The CEB-V850/SA1 HAL package provides the support needed to run eCos on a Cosmo CEB-V850/SA1
 evaluation board."
 }
+
 # ==========================================================================
 # --------------------------------------------------------------------------
 # ARM targets
@@ -1320,6 +1333,7 @@ target aeb {
 The aeb target provides the packages needed to run eCos on an ARM
 evaluation board (AEB-1)."
 }
+
 target ebsa285 {
 	alias { "Intel EBSA285 StrongARM board" ebsa }
 	packages { CYGPKG_HAL_ARM
@@ -1335,8 +1349,6 @@ target ebsa285 {
         eCos on an Intel EBSA285 StrongARM board."
 }
 
-
-
 target assabet {
 	alias { "Intel StrongARM SA1110 board" assabet }
 	packages { CYGPKG_HAL_ARM
@@ -1345,13 +1357,15 @@ target assabet {
 		   CYGPKG_IO_SERIAL_ARM_SA11X0
 		   CYGPKG_DEVS_PCMCIA_ASSABET
 		   CYGPKG_DEVS_FLASH_ASSABET
+                   CYGPKG_IO_USB
+                   CYGPKG_IO_USB_SLAVE
+                   CYGPKG_DEVS_USB_SA11X0
         }
         description "
         The assabet target provides the packages needed to run
         eCos on an Intel StrongARM SA1110 evaluation board."
 }
 
-
 target brutus {
 	alias { "Intel StrongARM SA1100 board" brutus }
 	packages { CYGPKG_HAL_ARM
@@ -1376,7 +1390,6 @@ target sa1100mm {
         eCos on an Intel StrongARM SA1100 Multimedia evaluation board."
 }
 
-
 target edb7xxx {
         alias		{ "Cirrus Logic development board" edb7211 eb7xxx eb7211 }
 	packages	{ CYGPKG_HAL_ARM
@@ -1399,6 +1412,7 @@ target cma230 {
 The cma230 target provides the packages needed to run eCos on a Cogent 
 CMA230 (ARM7TDMI) or CMA222 (ARM710T) board."
     }
+
 # --------------------------------------------------------------------------
 # SH targets
 
@@ -1416,7 +1430,6 @@ target sh7708 {
            The sh7708 target provides the packages needed to run
            eCos on a Hitachi EDK/SH7708 board."
 }
-
 target cq7708 {
         alias { "CqREEK SH7708 board" cq7708 }
         packages { CYGPKG_HAL_SH
@@ -1648,14 +1661,15 @@ target stb {
 # NEC targets
 
 target ceb_v850 {
-	alias { "Cosmo CEB-V850/SA1 board" CEB }
+	alias { "Cosmo CEB-V850/SA1 board" CEB ceb_v850_sa1 }
 	packages { CYGPKG_HAL_V85X
                    CYGPKG_HAL_V85X_V850
                    CYGPKG_HAL_V85X_V850_CEB
                    CYGPKG_IO_SERIAL_V85X_V850
         }
         description "
-The ceb target provides the packages needed to run eCos on a Cosmo CEB-V850/SA1
-evaluation board."
+The ceb_v850 target provides the packages needed to run eCos on a
+Cosmo CEB-V850 evaluation board fitted with a V850/SA1."
 }
+
 # --------------------------------------------------------------------------
--- a/packages/hal/arm/aeb/current/ChangeLog
+++ b/packages/hal/arm/aeb/current/ChangeLog
@@ -1,3 +1,21 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_arm_aeb.cdl: Respect channel configuration constraints.
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_None
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Moved reset macro to
+	* include/hal_platform_ints.h: this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_arm_aebC_ram.mlt:
--- a/packages/hal/arm/aeb/current/cdl/hal_arm_aeb.cdl
+++ b/packages/hal/arm/aeb/current/cdl/hal_arm_aeb.cdl
@@ -99,6 +99,7 @@ cdl_package CYGPKG_HAL_ARM_AEB {
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
@@ -110,6 +111,7 @@ cdl_package CYGPKG_HAL_ARM_AEB {
  
      cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
          display          "Diagnostic serial port"
+         active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
          flavor data
          legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
          default_value    0
--- a/packages/hal/arm/aeb/current/include/hal_platform_ints.h
+++ b/packages/hal/arm/aeb/current/include/hal_platform_ints.h
@@ -68,4 +68,12 @@
 // The vector used by the Real time clock
 #define CYGNUM_HAL_INTERRUPT_RTC               CYGNUM_HAL_INTERRUPT_TIMER0
 
+
+//----------------------------------------------------------------------------
+// Reset.
+extern void hal_aeb_reset(void);
+#define HAL_PLATFORM_RESET()             hal_aeb_reset()
+
+#define HAL_PLATFORM_RESET_ENTRY 0x4018000
+
 #endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/aeb/current/include/plf_stub.h
+++ b/packages/hal/arm/aeb/current/include/plf_stub.h
@@ -72,13 +72,6 @@ externC void cyg_hal_plf_comms_init(void
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
-//----------------------------------------------------------------------------
-// Reset.
-extern void hal_aeb_reset(void);
-#define HAL_STUB_PLATFORM_RESET()             hal_aeb_reset()
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0x4018000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/arm/aeb/current/src/hal_diag.c
+++ b/packages/hal/arm/aeb/current/src/hal_diag.c
@@ -194,9 +194,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
     return ch;
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static void
 cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, 
                          cyg_uint32 __len)
@@ -364,7 +361,6 @@ cyg_hal_plf_comms_init(void)
 
     cyg_hal_plf_serial_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 //=============================================================================
 // Compatibility with older stubs
@@ -380,7 +376,7 @@ cyg_hal_plf_comms_init(void)
 // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e.
 // totally stand-alone) system.
 
-#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#if defined(CYG_HAL_STARTUP_ROM) || !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 #define HAL_DIAG_USES_HARDWARE
 #endif
 
--- a/packages/hal/arm/arch/current/ChangeLog
+++ b/packages/hal/arm/arch/current/ChangeLog
@@ -1,3 +1,53 @@
+2001-02-09  Hugo Tyson  <hmt@redhat.com>
+
+	* src/vectors.S (UNMAPPED()): Handle CYGHWR_HAL_ROM_VADDR if so
+	defined; this is used when compiling for a different location from
+	the base of ROM.  hal_platform_setup.h might define it.  For
+	example, if flash is from 0x50000000 upwards (as on SA11x0), and
+	we are to execute at 0x50040000, then we want the reset vector to
+	point to 0x0004pqrs - the unmapped ROM address of the code -
+	rather than 0x0000pqrs, which is the offset into our flash block.
+	But usually it's not defined, so the behaviour is the obvious.
+
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* include/arm_vv.h: Removed again, compiler does magic to thumb
+	function pointers.
+	* include/hal_arch.h: Same.
+
+2001-02-07  Jesper Skov  <jskov@redhat.com>
+
+	* include/arm_vv.h: Added virtual vector accessor macros that will
+	properly mangle function pointers in thumb mode.
+	* include/hal_arch.h: Include arm_vv.h
+	* src/vectors.S: ctrlc_init can be called for thumb now (but
+	requires ROM monitor to be built with -mthumb-interwork)
+
+2001-02-02  Mark Salter  <msalter@redhat.com>
+
+	* src/arm_stub.c (__arm_breakinst): New ARM breakpoint insn.
+	(__thumb_breakinst): New thumb breakpoint insn.
+	(__is_bsp_syscall): Check for actual SWI number and support
+	thumb.
+
+	* include/hal_arch.h (HAL_BREAKINST_ADDR): New macro to provide
+	address of correct breakpoint insn of the given length.
+
+2001-02-01  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_misc.c: Don't use diag_printf directly (rely on tracing
+	macros).
+
+2001-01-31  Mark Salter  <msalter@redhat.com>
+
+	* src/vectors.S (FIQ): Fix broken fiq handling.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_arm.cdl:  Get rid of CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	options. They are replaced by the
+	CYGSEM_HAL_DIAG_MANGLER option.
+
 2001-01-24  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/vectors.S (init_flag): Add explicit alignment, just in case.
--- a/packages/hal/arm/arch/current/cdl/hal_arm.cdl
+++ b/packages/hal/arm/arch/current/cdl/hal_arm.cdl
@@ -51,11 +51,6 @@ cdl_package CYGPKG_HAL_ARM {
         necessary to select a specific target platform HAL
         package."
 
-    # This package allows GDB protocol on diag serial device
-    # to be explicitly controlled, i.e. turned off.
-
-    implements CYGINT_HAL_DIAG_DISABLE_GDB_PROTOCOL_SUPPORTED
-
     compile       hal_misc.c context.S arm_stub.c hal_syscall.c
 
     # The "-o file" is a workaround for CR100958 - without it the
--- a/packages/hal/arm/arch/current/include/hal_arch.h
+++ b/packages/hal/arm/arch/current/include/hal_arch.h
@@ -26,7 +26,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -208,6 +208,13 @@ asm volatile (" .globl  " #_label_ ";"  
 #define HAL_BREAKINST_TYPE       cyg_uint32
 #endif // __thumb__
 
+
+extern cyg_uint32 __arm_breakinst;
+extern cyg_uint16 __thumb_breakinst;
+#define HAL_BREAKINST_ADDR(x) (((x)==2)? \
+                              ((void*)&__thumb_breakinst) : \
+                              ((void*)&__arm_breakinst))
+
 //--------------------------------------------------------------------------
 // Thread register state manipulation for GDB support.
 
@@ -350,7 +357,5 @@ externC void hal_idle_thread_action(cyg_
 #define CYGARC_HAL_SAVE_GP()
 #define CYGARC_HAL_RESTORE_GP()
 
-//-----------------------------------------------------------------------------
-
 #endif // CYGONCE_HAL_ARCH_H
 // End of hal_arch.h
--- a/packages/hal/arm/arch/current/src/arm_stub.c
+++ b/packages/hal/arm/arch/current/src/arm_stub.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -77,6 +77,11 @@
 #include <cyg/hal/dbg-threads-api.h>    // dbg_currthread_id
 #endif
 
+#if defined(CYGNUM_HAL_BREAKPOINT_LIST_SIZE) && (CYGNUM_HAL_BREAKPOINT_LIST_SIZE > 0)
+cyg_uint32 __arm_breakinst = HAL_BREAKINST_ARM;
+cyg_uint16 __thumb_breakinst = HAL_BREAKINST_THUMB;
+#endif
+
 /* Given a trap value TRAP, return the corresponding signal. */
 
 int __computeSignal (unsigned int trap_number)
@@ -117,7 +122,16 @@ int __get_trap_number (void)
 #if defined(CYGSEM_REDBOOT_BSP_SYSCALLS)
 int __is_bsp_syscall(void) 
 {
-    return _hal_registers->vector == CYGNUM_HAL_EXCEPTION_INTERRUPT;
+    unsigned long pc = get_register(PC);
+    unsigned long cpsr = get_register(PS);  // condition codes
+
+    if (_hal_registers->vector == CYGNUM_HAL_EXCEPTION_INTERRUPT) {
+	if (cpsr & CPSR_THUMB_ENABLE)
+	    return *(unsigned short *)pc == 0xdf18;
+	else
+	    return *(unsigned *)pc == 0xef180001;
+    }
+    return 0;
 }
 #endif
 
--- a/packages/hal/arm/arch/current/src/hal_misc.c
+++ b/packages/hal/arm/arch/current/src/hal_misc.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -182,8 +182,6 @@ hal_arch_default_isr(CYG_ADDRWORD vector
 {
     CYG_TRACE1(true, "Interrupt: %d", vector);
 
-    diag_printf("Spurious Interrupt!!! - vector: %d, data: %x\n", vector, 
-                data);
     CYG_FAIL("Spurious Interrupt!!!");
     return 0;
 }
--- a/packages/hal/arm/arch/current/src/vectors.S
+++ b/packages/hal/arm/arch/current/src/vectors.S
@@ -110,10 +110,22 @@
 #define PTR(name)               \
 .##name: .word  name
 
+// CYGHWR_HAL_ROM_VADDR is used when compiling for a different location
+// from the base of ROM.  hal_platform_setup.h might define it.  For
+// example, if flash is from 0x50000000 upwards (as on SA11x0), and we are
+// to execute at 0x50040000, then we want the reset vector to point to
+// 0x0004pqrs - the unmapped ROM address of the code - rather than
+// 0x0000pqrs, which is the offset into our flash block.
+// 
+// But usually it's not defined, so the behaviour is the obvious.
+
 #ifdef CYGHWR_HAL_ARM_HAS_MMU
-#define UNMAPPED(x) ((x)-__exception_handlers)
+# ifndef CYGHWR_HAL_ROM_VADDR
+#  define CYGHWR_HAL_ROM_VADDR __exception_handlers
+# endif
+# define UNMAPPED(x) ((x)-CYGHWR_HAL_ROM_VADDR)
 #else
-#define UNMAPPED(x) (x)
+# define UNMAPPED(x) (x)
 #endif
                                 
 #define UNMAPPED_PTR(name)              \
@@ -331,9 +343,6 @@ 2:
         mov     r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_IRQ_MODE)
         msr     cpsr,r0
         ldr     sp,.__exception_stack
-        mov     r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_FIQ_MODE)
-        msr     cpsr,r0
-        ldr     sp,.__FIQ_exception_stack
         mov     r0,#(CPSR_IRQ_DISABLE|CPSR_FIQ_DISABLE|CPSR_UNDEF_MODE)
         msr     cpsr,r0
         ldr     sp,.__exception_stack
@@ -386,16 +395,12 @@ 2:
         str     r2,[r0,#0x24]
 #endif
 
-	// FIXME: The line with the thumb check is a hack, allowing
-	// the farm to run test. Problem is that virtual vector table
-	// API needs to be ARM/Thumb consistent. Will fix later.
-#if !defined(__thumb__) || defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \
     || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT)
         .extern hal_ctrlc_isr_init
         bl      hal_ctrlc_isr_init
 #endif
-#endif
+
         LED 2
         
         // Run through static constructors
@@ -633,14 +638,29 @@ call_exception_handler:
 
         .code   32
 FIQ:
-        // Note: I use this exception stack while saving the context because
-        // the current SP does not seem to be always valid in this CPU mode.
-        ldr     sp,.__FIQ_exception_stack       // get good stack
-        sub     lr,lr,#4                // PC at time of interrupt
-        stmfd   sp!,{r0,fp,ip,lr}               
-        mrs     r0,spsr
-        stmfd   sp!,{r0}
-        b       handle_IRQ_or_FIQ
+        // We can get here from supervisor mode or from IRQ mode.
+        mrs     r8,spsr                 // CPSR at time of interrupt
+        and     r9,r8,#CPSR_MODE_BITS   // isolate pre-interrupt mode
+        cmp	r9,#CPSR_IRQ_MODE
+        bne	1f
+        // If FIQ interrupted IRQ mode, just return with FIQ disabled.
+        // The common interrupt handling takes care of the rest.
+        orr	r8,r8,#CPSR_FIQ_DISABLE
+        msr	spsr,r8
+        subs	pc,lr,#4
+    1:
+        // If FIQ interrupted supervisor mode, switch to IRQ mode and
+        // fall through to IRQ handler.
+        ldr     sp,.__exception_stack   // get good stack to save lr and spsr
+        stmdb   sp,{r8,lr}
+        mov     r8,#CPSR_IRQ_MODE|CPSR_FIQ_DISABLE|CPSR_IRQ_DISABLE
+        msr     cpsr,r8			// switch to IRQ mode
+        ldr     sp,.__exception_stack   // get regs saved in FIQ mode
+        ldmdb	sp,{sp,lr}
+        msr     spsr,sp
+
+        // now it looks like we got an IRQ instead of an FIQ except that
+        // FIQ is disabled so we don't recurse.
 
 IRQ:
         // Note: I use this exception stack while saving the context because
@@ -936,7 +956,6 @@ PTR(__GDB_stack_base)
 PTR(__GDB_stack)
 #endif
 PTR(__startup_stack)
-PTR(__FIQ_exception_stack)
 PTR(__exception_stack)
 PTR(__undef_exception_stack)
 PTR(__bss_start)
@@ -1009,10 +1028,6 @@ hal_interrupt_objects:
         .rept   32
         .long   0
         .endr
-__FIQ_exception_stack:
-        .rept   32
-        .long   0
-        .endr
 __exception_stack:
         .rept   32
         .long   0
--- a/packages/hal/arm/cma230/current/ChangeLog
+++ b/packages/hal/arm/cma230/current/ChangeLog
@@ -1,3 +1,22 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_arm_cma230.cdl: Respect channel configuration
+	constraints.
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_None
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Moved reset macro to
+	* include/hal_platform_ints.h: this file.
+
 2000-12-04  Hugo Tyson  <hmt@redhat.com>
 
 	* include/hal_cache.h: Consistently ensure that ARM registers used
--- a/packages/hal/arm/cma230/current/cdl/hal_arm_cma230.cdl
+++ b/packages/hal/arm/cma230/current/cdl/hal_arm_cma230.cdl
@@ -114,6 +114,7 @@ cdl_package CYGPKG_HAL_ARM_CMA230 {
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
@@ -125,6 +126,7 @@ cdl_package CYGPKG_HAL_ARM_CMA230 {
  
      cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
          display          "Diagnostic serial port"
+         active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
          flavor data
          legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
          default_value    0
--- a/packages/hal/arm/cma230/current/include/hal_platform_ints.h
+++ b/packages/hal/arm/cma230/current/include/hal_platform_ints.h
@@ -64,4 +64,11 @@
 // The vector used by the Real time clock
 #define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TIMER
 
+
+//----------------------------------------------------------------------------
+// Reset.
+#define HAL_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
+
+#define HAL_PLATFORM_RESET_ENTRY 0xe000000
+
 #endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/cma230/current/include/plf_stub.h
+++ b/packages/hal/arm/cma230/current/include/plf_stub.h
@@ -71,13 +71,6 @@ externC void cyg_hal_plf_comms_init(void
 #define HAL_STUB_PLATFORM_INIT()              CYG_EMPTY_STATEMENT
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-#define HAL_STUB_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xe000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/arm/cma230/current/src/hal_diag.c
+++ b/packages/hal/arm/cma230/current/src/hal_diag.c
@@ -57,9 +57,6 @@
 #include <cyg/hal/drv_api.h>            // driver API
 #include <cyg/hal/hal_misc.h>           // Helper functions
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static void cyg_hal_plf_serial_init(void);
 
 // FIXME: Copy LCD driver from powerpc/cogent
@@ -78,7 +75,6 @@ cyg_hal_plf_comms_init(void)
     cyg_hal_plf_serial_init();
 //    cyg_hal_plf_lcd_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 //=============================================================================
 // Serial driver
@@ -257,9 +253,6 @@ cyg_hal_plf_serial_putc(void* __ch_data,
     CYGARC_HAL_RESTORE_GP();
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static const channel_data_t channels[2] = {
     { (cyg_uint8*)CMA101_DUARTA, 1000, CYGNUM_HAL_INTERRUPT_SERIAL_A},
     { (cyg_uint8*)CMA101_DUARTB, 1000, CYGNUM_HAL_INTERRUPT_SERIAL_B}
@@ -433,9 +426,6 @@ cyg_hal_plf_serial_init(void)
     CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
-
 //=============================================================================
 // Compatibility with older stubs
 //=============================================================================
@@ -451,7 +441,7 @@ cyg_hal_plf_serial_init(void)
 // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e.
 // totally stand-alone) system.
 
-#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#if defined(CYG_HAL_STARTUP_ROM) || !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 #define HAL_DIAG_USES_HARDWARE
 #endif
 
--- a/packages/hal/arm/ebsa285/current/ChangeLog
+++ b/packages/hal/arm/ebsa285/current/ChangeLog
@@ -1,3 +1,22 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+	* cdl/hal_arm_ebsa285.cdl: Respect channel configuration
+	constraints.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_None
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Moved reset macro to
+	* include/hal_platform_ints.h: this file.
+
 2001-01-03  Gary Thomas  <gthomas@redhat.com>
 
 	* src/ebsa285_misc.c (hal_delay_us): Slight rearrangement to
--- a/packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl
+++ b/packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl
@@ -141,6 +141,7 @@ cdl_package CYGPKG_HAL_ARM_EBSA285 {
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
@@ -152,6 +153,7 @@ cdl_package CYGPKG_HAL_ARM_EBSA285 {
  
      cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
          display          "Diagnostic serial port"
+         active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
          flavor data
          legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
          default_value    0
--- a/packages/hal/arm/ebsa285/current/include/hal_platform_ints.h
+++ b/packages/hal/arm/ebsa285/current/include/hal_platform_ints.h
@@ -88,4 +88,33 @@
 // The vector used by the Real time clock
 #define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TIMER_3
 
+
+//----------------------------------------------------------------------------
+// Reset.
+#include <cyg/hal/hal_ebsa285.h>        // registers
+#include <cyg/hal/hal_io.h>             // IO macros
+
+#define HAL_PLATFORM_RESET()                                               \
+    CYG_MACRO_START                                                        \
+    cyg_uint32 ctrl;                                                       \
+                                                                           \
+    /* If watchdog is already enabled, writing to timer4 has no effect. */ \
+    /* But by disabling interupts and just hanging in the loop below    */ \
+    /* the timer might run out eventually (not guaranteed).             */ \
+    HAL_DISABLE_INTERRUPTS(ctrl);                                          \
+                                                                           \
+    /* Set timer4 (must be done before enabling watchdog) */               \
+    HAL_WRITE_UINT32(SA110_TIMER4_LOAD, 2);                                \
+    HAL_WRITE_UINT32(SA110_TIMER4_CONTROL, SA110_TIMER_CONTROL_ENABLE);    \
+                                                                           \
+    /* Enable watchdog */                                                  \
+    HAL_READ_UINT32(SA110_CONTROL, ctrl);                                  \
+    ctrl |= SA110_CONTROL_WATCHDOG;                                        \
+    HAL_WRITE_UINT32(SA110_CONTROL, ctrl);                                 \
+                                                                           \
+    for(;;); /* wait for it */                                             \
+    CYG_MACRO_END
+
+#define HAL_PLATFORM_RESET_ENTRY 0x41000000
+
 #endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/ebsa285/current/include/plf_stub.h
+++ b/packages/hal/arm/ebsa285/current/include/plf_stub.h
@@ -71,35 +71,6 @@ externC void cyg_hal_plf_comms_init(void
 #define HAL_STUB_PLATFORM_INIT()              CYG_EMPTY_STATEMENT
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-#include <cyg/hal/hal_ebsa285.h>        // registers
-#include <cyg/hal/hal_io.h>             // IO macros
-
-#define HAL_STUB_PLATFORM_RESET()                                          \
-    CYG_MACRO_START                                                        \
-    cyg_uint32 ctrl;                                                       \
-                                                                           \
-    /* If watchdog is already enabled, writing to timer4 has no effect. */ \
-    /* But by disabling interupts and just hanging in the loop below    */ \
-    /* the timer might run out eventually (not guaranteed).             */ \
-    HAL_DISABLE_INTERRUPTS(ctrl);                                          \
-                                                                           \
-    /* Set timer4 (must be done before enabling watchdog) */               \
-    HAL_WRITE_UINT32(SA110_TIMER4_LOAD, 2);                                \
-    HAL_WRITE_UINT32(SA110_TIMER4_CONTROL, SA110_TIMER_CONTROL_ENABLE);    \
-                                                                           \
-    /* Enable watchdog */                                                  \
-    HAL_READ_UINT32(SA110_CONTROL, ctrl);                                  \
-    ctrl |= SA110_CONTROL_WATCHDOG;                                        \
-    HAL_WRITE_UINT32(SA110_CONTROL, ctrl);                                 \
-                                                                           \
-    for(;;); /* wait for it */                                             \
-    CYG_MACRO_END
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0x41000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/arm/ebsa285/current/src/hal_diag.c
+++ b/packages/hal/arm/ebsa285/current/src/hal_diag.c
@@ -149,9 +149,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
     return ch;
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static cyg_int32 msec_timeout;
 
 static void
@@ -306,8 +303,6 @@ cyg_hal_plf_comms_init(void)
 
     cyg_hal_plf_serial_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 
 
 //=============================================================================
@@ -325,7 +320,7 @@ cyg_hal_plf_comms_init(void)
 #undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 #endif
 
-#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#if defined(CYG_HAL_STARTUP_ROM) || !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 #define HAL_DIAG_USES_HARDWARE
 #endif
 
--- a/packages/hal/arm/edb7xxx/current/ChangeLog
+++ b/packages/hal/arm/edb7xxx/current/ChangeLog
@@ -1,3 +1,22 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+	* cdl/hal_arm_edb7xxx.cdl: Respect channel configuration
+	constraints.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_None
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Moved reset macro to
+	* include/hal_platform_ints.h: this file.
+
 2000-12-04  Hugo Tyson  <hmt@redhat.com>
 
 	* include/hal_cache.h: Consistently ensure that ARM registers used
--- a/packages/hal/arm/edb7xxx/current/cdl/hal_arm_edb7xxx.cdl
+++ b/packages/hal/arm/edb7xxx/current/cdl/hal_arm_edb7xxx.cdl
@@ -152,6 +152,7 @@ cdl_package CYGPKG_HAL_ARM_EDB7XXX {
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
@@ -163,6 +164,7 @@ cdl_package CYGPKG_HAL_ARM_EDB7XXX {
  
      cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
          display          "Diagnostic serial port"
+         active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
          flavor data
          legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
          default_value    0
--- a/packages/hal/arm/edb7xxx/current/include/hal_platform_ints.h
+++ b/packages/hal/arm/edb7xxx/current/include/hal_platform_ints.h
@@ -87,4 +87,16 @@
 // The vector used by the Real time clock
 #define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TC2OI
 
+
+
+//----------------------------------------------------------------------------
+// Reset.
+
+// Try and force the board into a reset state.  Since this hardware requires
+// a "wakeup" signal, we can't just use a watchdog/reset approach.
+externC void reset_platform(void);
+#define HAL_PLATFORM_RESET() reset_platform()
+
+#define HAL_PLATFORM_RESET_ENTRY 0xe0000000
+
 #endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/edb7xxx/current/include/plf_stub.h
+++ b/packages/hal/arm/edb7xxx/current/include/plf_stub.h
@@ -71,17 +71,6 @@ externC void cyg_hal_plf_comms_init(void
 #define HAL_STUB_PLATFORM_INIT()              CYG_EMPTY_STATEMENT
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-
-// Try and force the board into a reset state.  Since this hardware requires
-// a "wakeup" signal, we can't just use a watchdog/reset approach.
-externC void reset_platform(void);
-#define HAL_STUB_PLATFORM_RESET() reset_platform()
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xe0000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/arm/edb7xxx/current/src/hal_diag.c
+++ b/packages/hal/arm/edb7xxx/current/src/hal_diag.c
@@ -149,9 +149,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
     return ch;
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static channel_data_t edb_ser_channels[2] = {
     {(volatile struct edb_serial*)SYSCON1, 1000, CYGNUM_HAL_INTERRUPT_URXINT1},
     {(volatile struct edb_serial*)SYSCON2, 1000, CYGNUM_HAL_INTERRUPT_URXINT2}
@@ -321,7 +318,6 @@ cyg_hal_plf_comms_init(void)
 
     cyg_hal_plf_serial_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 //=============================================================================
 // Compatibility with older stubs
@@ -344,7 +340,7 @@ cyg_hal_plf_comms_init(void)
 #if defined(CYG_HAL_STARTUP_ROM) && !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
 #define HAL_DIAG_USES_HARDWARE
 #else
-#if defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#if !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 #define HAL_DIAG_USES_HARDWARE
 #elif CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL != CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL
 #define HAL_DIAG_USES_HARDWARE
--- a/packages/hal/arm/pid/current/ChangeLog
+++ b/packages/hal/arm/pid/current/ChangeLog
@@ -1,3 +1,24 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+	* cdl/hal_arm_pid.cdl: Respect channel configuration constraints.
+
+	* src/pid_misc.c (hal_hardware_init): Safe to call hal_if_init in
+	thumb mode now.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_None
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Moved reset macro to
+	* include/hal_platform_ints.h: this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_arm_pid_ram.h:
--- a/packages/hal/arm/pid/current/cdl/hal_arm_pid.cdl
+++ b/packages/hal/arm/pid/current/cdl/hal_arm_pid.cdl
@@ -130,6 +130,7 @@ cdl_package CYGPKG_HAL_ARM_PID {
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
@@ -141,6 +142,7 @@ cdl_package CYGPKG_HAL_ARM_PID {
  
      cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
          display          "Diagnostic serial port"
+         active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
          flavor data
          legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
          default_value    0
--- a/packages/hal/arm/pid/current/include/hal_platform_ints.h
+++ b/packages/hal/arm/pid/current/include/hal_platform_ints.h
@@ -72,4 +72,12 @@
 // The vector used by the Real time clock
 #define CYGNUM_HAL_INTERRUPT_RTC                  CYGNUM_HAL_INTERRUPT_TIMER2
 
+
+//----------------------------------------------------------------------------
+// Reset.
+
+#define HAL_PLATFORM_RESET() CYG_EMPTY_STATEMENT
+
+#define HAL_PLATFORM_RESET_ENTRY 0x4000000
+
 #endif // CYGONCE_HAL_PLATFORM_INTS_H
--- a/packages/hal/arm/pid/current/include/plf_stub.h
+++ b/packages/hal/arm/pid/current/include/plf_stub.h
@@ -71,14 +71,6 @@ externC void cyg_hal_plf_comms_init(void
 #define HAL_STUB_PLATFORM_INIT()              CYG_EMPTY_STATEMENT
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-
-#define HAL_STUB_PLATFORM_RESET() CYG_EMPTY_STATEMENT
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0x4000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/arm/pid/current/src/hal_diag.c
+++ b/packages/hal/arm/pid/current/src/hal_diag.c
@@ -204,9 +204,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
     return ch;
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static channel_data_t pid_ser_channels[2] = {
     { (cyg_uint8*)0x0D800000, 1000, CYGNUM_HAL_INTERRUPT_SERIALA },
     { (cyg_uint8*)0x0D800020, 1000, CYGNUM_HAL_INTERRUPT_SERIALB }
@@ -386,7 +383,6 @@ cyg_hal_plf_comms_init(void)
 
     cyg_hal_plf_serial_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 /*---------------------------------------------------------------------------*/
 
@@ -431,7 +427,7 @@ static channel_data_t pid_ser_channel = 
 // Assumption: all diagnostic output must be GDB packetized unless this is a ROM (i.e.
 // totally stand-alone) system.
 
-#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#if defined(CYG_HAL_STARTUP_ROM) || !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 #define HAL_DIAG_USES_HARDWARE
 #endif
 
--- a/packages/hal/arm/pid/current/src/pid_misc.c
+++ b/packages/hal/arm/pid/current/src/pid_misc.c
@@ -132,13 +132,8 @@ void hal_hardware_init(void)
     // Any hardware/platform initialization that needs to be done.
     HAL_WRITE_UINT32(CYG_DEVICE_IRQ_EnableClear, 0xFFFF); // Clear all
                                                          // interrupt sources
-    // FIXME: The line with the thumb check is a hack, allowing
-    // the farm to run test. Problem is that virtual vector table
-    // API needs to be ARM/Thumb consistent. Will fix later.
-#ifndef __thumb__
     // Set up eCos/ROM interfaces
     hal_if_init();
-#endif
 }
 
 //
--- a/packages/hal/arm/sa11x0/assabet/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/assabet/current/ChangeLog
@@ -1,3 +1,12 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_arm_sa11x0_assabet.cdl: Respect channel configuration
+	constraints.
+
+2001-02-02  Gary Thomas  <gthomas@redhat.com>
+
+	* src/lcd_support.c: Fix for building standalone (no "C" library).
+
 2001-01-05  Hugo Tyson  <hmt@redhat.com>
 
 	* include/plf_mmap.h: New file.  Statically defined macros for
--- a/packages/hal/arm/sa11x0/assabet/current/cdl/hal_arm_sa11x0_assabet.cdl
+++ b/packages/hal/arm/sa11x0/assabet/current/cdl/hal_arm_sa11x0_assabet.cdl
@@ -113,6 +113,7 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_ASSABE
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
@@ -124,6 +125,7 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_ASSABE
  
      cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
          display          "Diagnostic serial port"
+         active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
          flavor data
          legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
          default_value    0
index 39609f8eb0aeea8ccb56cb463b507d45b554d172..e6b3dc48dbce6f23a45358fa10674e6d4f78e541
GIT binary patch
literal 80896
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
index 5c911835006a0091d990119487b24b9173c06c18..f57dec05bbf0d71326b353a32572a5888f6380ec
GIT binary patch
literal 104032
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
--- a/packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.srec
+++ b/packages/hal/arm/sa11x0/assabet/current/images/redboot_RAM.srec
@@ -1,4 +1,4 @@
-S02B00002F776F726B2F617373616265745F726564626F6F742F52414D2F696E7374616C6C2F62696E2F7265DF
+S02B00002F776F726B2F617373616265742F726564626F6F742F52414D2F696E7374616C6C2F62696E2F72650F
 S21902000018F09FE518F09FE518F09FE518F09FE518F09FE50028
 S21902001500000018F09FE518F09FE54400020044010200C80161
 S21902002A0200000202007C02020000000000640302004C03027A
@@ -12,9 +12,9 @@ S2190200AD2080E59CD39FE5D200A0E300F029E1
 S2190200C2A0E300F029E188D39FE5DB00A0E300F029E180D39F7C
 S2190200D7E5D300A0E300F029E100F069E168D39FE574139FE5D4
 S2190200EC74239FE50000A0E3020051E10200000A040081E402AF
-S2190201010051E1FCFFFF1A480100EB3C0700EB0000A0E38C1318
-S2190201169FE5042091E5042080E5242091E5242080E5BA0B00FE
-S21902012BEB200100EB7A1200EBFEFFFFEA0000A0E300F0A0E170
+S2190201010051E1FCFFFF1A821100EBA51800EB0000A0E38C1354
+S2190201169FE5042091E5042080E5242091E5242080E5691D003D
+S21902012BEB5A1100EBE13400EBFEFFFFEA0000A0E300F0A0E19D
 S2190201400BB0ADDE14D39FE501582DE900004FE101002DE90D2F
 S219020155C0A0E100000FE11F00C0E3130080E300F029E10DB06E
 S21902016AA0E1DCD29FE50D005BE10300008ACC029FE500005B43
@@ -36,7 +36,7 @@ S2190202A5B0A0E1A0D19FE50D005BE10300008A
 S2190202BA5BE10000009A0BD0A0E14CD04DE2FF0F8DE81F009C6D
 S2190202CFE83C008DE500108DE52C208DE540308DE538408DE571
 S2190202E434E08DE54C008CE230B08DE50440A0E3FFFFFFEA447A
-S2190202F9408DE50D00A0E18A0000EB0DC0A0E100000FE1C00036
+S2190202F9408DE50D00A0E1C31000EB0DC0A0E100000FE1C000ED
 S21902030E80E300F029E10000A0E10000A0E134E09CE530D09D42
 S219020323E51F00C0E3120080E300F029E10CD0A0E138E09DE5B1
 S2190203383C009DE540C09DE500F069E1FF0F9DE80EF0B0E10409
@@ -45,3164 +45,3812 @@ S21902036200EAF0D09FE504E04EE201582DE900
 S219020377E90DC0A0E100000FE11F00C0E3D30080E300F029E151
 S21902038C0DB0A0E14CD04DE2FF0F8DE81F009CE83C008DE500F8
 S2190203A1108DE52C208DE540308DE538408DE534E08DE530B0CE
-S2190203B68DE50D90A0E10900A0E1E50000EB0040A0E10400A0DC
+S2190203B68DE50D90A0E10900A0E11F1100EB0040A0E10400A091
 S2190203CBE1D8209FE5009082E5A4109FE5041191E798209FE5C1
 S2190203E0046192E70920A0E10FE0A0E106F0A0E10DC0A0E10044
 S2190203F5000FE1C00080E300F029E10000A0E10000A0E134E0C9
 S21902040A9CE530D09DE51F00C0E3120080E300F029E10CD0A026
 S21902041FE138E09DE53C009DE540C09DE500F069E1FF0F9DE839
 S2190204340EF0B0E10EF0A0E100000FE10EF0A0E10D00A0E10E93
-S219020449F0A0E150080300500C0300501C030050070300D007CC
-S21902045E030050080300C806030030C5030030C503002401033B
-S2190204730024010300C80603002801030018020300080303001D
-S219020488000002002401030065436F73203A20004175672032BB
-S21902049D342032303030000000020000000200CCC203000DC0CB
-S2190204B2A0E100D82DE930309FE530009FE5001093E504B04C9F
-S2190204C7E228C09FE50C3091E50C308CE50C3090E5102091E515
-S2190204DC0C3081E510208CE5103090E5103081E500A81BE9F8C2
-S2190204F103030020000200501C03000DC0A0E100D82DE91C20E0
-S2190205069FE51C109FE5000092E50C3091E50C3080E51020911A
-S21902051BE504B04CE2102080E500A81BE9F8030300501C03004F
-S2190205300DC0A0E130D82DE968309FE504B04CE2002093E500AD
-S21902054540A0E1000052E30400000A443094E5040053E301006E
-S21902055A001A382084E530A81BE940509FE5003095E50130835C
-S21902056FE2003085E5010053E30000001ACBFFFFEB28309FE513
-S219020584004083E5210300EB003095E5013043E2003085E5000A
-S2190205990053E30000001AD5FFFFEB30A81BE934040300701C95
-S2190205AE030058C203000DC0A0E130D82DE924309FE504B04CCD
-S2190205C3E220409FE50350A0E1030054E10300003A0FE0A0E19D
-S2190205D804F014E4050054E1FBFFFF2A30A81BE9C4060300C451
-S2190205ED0603000DC0A0E100D82DE90030A0E10120A0E104B0A6
-S2190206024CE20C009FE50310A0E1E80C00EB0000A0E300A81B65
-S219020617E948E702000DC0A0E100D82DE904B04CE2FEDEFFE7CD
-S21902062C00A81BE90DC0A0E110D82DE970209FE570309FE57012
-S219020641109FE50040A0E3004082E5004083E564209FE50130BE
-S219020656A0E3003081E55C309FE5004082E5004083E508208266
-S21902066BE20F32E0E3003082E504B04CE2CF0000EB40309FE566
-S219020680004083E50922A0E3004082E58E0A00EB101F11EE0FA1
-S2190206951081E3101F01EE101F11EE011A81E3031081E3101F64
-S2190206AA01EE10A81BE904000590080005900C0005901000049E
-S2190206BF9014000490100000900DC0A0E130D82DE90030A0E12A
-S2190206D4010040E2000053E304B04CE21B0000DA6C509FE5009A
-S2190206E9E0A0E3014040E2001095E5002095E5010052E10300D4
-S2190206FE001A50309FE5002093E5010052E1FCFFFF0A09C2A087
-S219020713E300309CE5000053E30400000A012052E000309C458E
-S2190207280320824002E08EE0010000EA023061E003E08EE002CF
-S21902073D005EE3EAFFFFDA0030A0E10400A0E1000053E3E4FF4E
-S219020752FFCA30A81BE9100000900DC0A0E100D82DE984309FB7
-S219020767E5002093E504B04CE2FF0812E31000A0130500001A39
-S21902077CFF0C12E30800A0130200001AFF0012E31800A00300DB
-S21902079100A01358109FE558C09FE55230A0E1010013E30C000B
-S2190207A6000A0B0050E30700001A003091E50C2003E05230A0F7
-S2190207BBE1010013E30300001A010080E21B0050E3F9FFFF9AEB
-S2190207D000A81BE9200080E200A81BE9010080E2070010E3ECEA
-S2190207E5FFFF1A0000E0E300A81BE9000005901800049000F838
-S2190207FAFF0F0DC0A0E100D82DE92A0050E30B00A0C314109F0B
-S21902080FE50120A0E3003091E504B04CE21230C3E1003081E540
-S21902082400A81BE9040005900DC0A0E100D82DE92A0050E30BCF
-S21902083900A0C314109FE50120A0E3003091E504B04CE212302A
-S21902084E83E1003081E500A81BE9040005900DC0A0E100D82DFC
-S219020863E90B3040E21F0053E304B04CE20400009A1F3000E22D
-S2190208780120A0E308109FE51223A0E1002081E500A81BE91824
-S21902088D0004900DC0A0E100D82DE90B3040E21F0053E304B019
-S2190208A24CE23400009A000051E31900000A000052E30B0000A7
-S2190208B70A1F1000E2BC009FE50120A0E3003090E51221A0E1CD
-S2190208CCB0109FE5023083E1003080E5003091E5023083E10065
-S2190208E13081E500A81BE91F1000E28C009FE50120A0E30030C4
-S2190208F690E51221E0E180109FE5023003E0003080E5003091FE
-S21902090BE5023003E0003081E500A81BE9000052E30B00000A4A
-S2190209201F1000E254009FE50120A0E3003090E51221A0E1488D
-S219020935109FE5023083E1003080E5003091E50230C3E100303B
-S21902094A81E500A81BE91F1000E228009FE50120A0E30030905E
-S21902095FE51221A0E114109FE5023083E1003080E5003091E56A
-S2190209740230C3E1003081E500A81BE910000490140004900DF6
-S219020989C0A0E100D82DE904B04CE21CC09FE500309CE5003000
-S21902099EC3E1010000E0003083E100308CE51224A0E300308218
-S2190209B3E500A81BE9600100000DC0A0E100D82DE904B04CE218
-S2190209C800A81BE90DC0A0E100D82DE90C309FE50F0000E2007A
-S2190209DD00D3E704B04CE200A81BE978E702000DC0A0E100D82F
-S2190209F22DE920209FE5000092E504B04CE2000050E301000082
-S219020A07CA220600EB00A81BE90030E0E3003082E500A81BE914
-S219020A1C140403000DC0A0E100D82DE9FF0000E2613040E205CE
-S219020A310053E30010A0E104B04CE20100008A570040E200A854
-S219020A461BE9302040E2FF3002E2090053E30100008A0200A09F
-S219020A5BE100A81BE9413040E2050053E30100009A0000E0E3C6
-S219020A7000A81BE9370041E200A81BE90DC0A0E110D82DE9006C
-S219020A8530A0E304B04CE214D04DE214304BE524404BE21C008C
-S219020A9A0BE5D2FFFFEBFF0000E20410A0E1020000EB010050E1
-S219020AAFE3F9FFFF1A10A81BE90DC0A0E170D82DE90140A0E10D
-S219020AC41050D4E504B04CE2000055E30800001A240050E32842
-S219020AD900001A0130A0E31030C4E50C5084E5005084E502309A
-S219020AEE43E2043084E5210000EA010055E31700001A23005042
-S219020B03E30600001A080094E50C1094E50030A0E30130C0E732
-S219020B180220A0E31020C4E5160000EA0C1094E5020B51E3036A
-S219020B2D00001A0030A0E31030C4E50000E0E370A81BE90030E7
-S219020B4294E5082094E5003083E0003084E50100C2E7013081F5
-S219020B57E20C3084E5070000EA020055E30700001AFF0000E2CE
-S219020B6CABFFFFEB0002A0E1040084E50330A0E31030C4E5004A
-S219020B8100A0E370A81BE9030055E32300001AFF0000E2A1FFC0
-S219020B96FFEB043094E50020D4E5003083E1043084E50300524D
-S219020BABE10200000A2D00A0E3AA0500EBDCFFFFEA2B00A0E385
-S219020BC0A70500EB082094E50230D2E53A0053E31000001A005E
-S219020BD500D2E50C6094E5A00500EB083094E50100D3E59D05CC
-S219020BEA00EB0500A0E1060050E10700008A0210E0E308309415
-S219020BFFE50020D3E7033080E0010080E20120C3E7060050E123
-S219020C14F8FFFF9A0100A0E370A81BE90000E0E30030A0E3100E
-S219020C2930C4E570A81BE90DC0A0E1F0D92DE904B04CE200703B
-S219020C3EA0E168809FE52400A0E3850500EB0050A0E30540D7A2
-S219020C53E70560A0E1050054E10700000A0400A0E17E0500EB7A
-S219020C68016086E2043085E00640D7E7FF5003E2000054E3F7A8
-S219020C7DFFFF1A2300A0E3760500EB2502D8E7740500EB0F30AE
-S219020C9205E20300D8E7710500EB52FFFFEB7F0000E22B005025
-S219020CA7E3E5FFFF1AF0A91BE978E702000DC0A0E1F0DF2DE920
-S219020CBC90009FE50020A0E38C309FE504D04DE2002083E50496
-S219020CD1B04CE2001090E503A0A0E1020051E14B0000DA009097
-S219020CE6A0E16C809FE56C309FE5002093E5000052E3190000FB
-S219020CFB0A003090E554109FE5030053E30300009A003098E5C3
-S219020D10030013E30440A0030800000A30209FE5003092E50159
-S219020D2540A0E3040053E10300009A003091E5010013E301403C
-S219020D3AA0130240A0032C004BE2001091E50420A0E1BF0700BB
-S219020D4FEB070000EA742C030018040300782C0300802C030094
-S219020D64003098E50020D3E50140A0E32C204BE500309AE500FF
-S219020D790053E32400001A03C0A0E104005CE1150000AA2C601A
-S219020D8E4BE270E09FE50A70A0E16C509FE50600DCE700109E96
-S219020DA3E52032D5E70130C1E4002097E500108EE5000052E317
-S219020DB81500001A0F3000E20320D5E70120C1E400309AE5007B
-S219020DCD108EE5000053E30E00001A01C08CE204005CE1EDFFCD
-S219020DE2FFBA002099E50900A0E1003098E5022064E000208958
-S219020DF7E5043083E0003088E5000052E3010000EA7C2C0300FC
-S219020E0C78E70200B5FFFFCAF0AF1BE90DC0A0E170D82DE90499
-S219020E21B04CE268C09FE500108CE564109FE5000081E56000EC
-S219020E369FE5002080E55C209FE5000053E3003082E50C60A0BE
-S219020E4BE10A00000A4C409FE50050A0E3005084E5003094E551
-S219020E6093FFFFEB002094E5003094E5050053E10200000A056E
-S219020E7500A0E170A81BE98CFFFFEB002096E50030A0E30030D1
-S219020E8AC2E5000096E570A81BE97C2C0300782C0300742C0319
-S219020E9F00802C0300180403000DC0A0E1F0DF2DE924019FE58D
-S219020EB424219FE504D04DE20070A0E3007082E504B04CE200AA
-S219020EC93090E50290A0E1070053E15A0000DA04319FE500200D
-S219020EDE93E50010D2E503A0A0E1070051E15400000AF0809FEF
-S219020EF3E5F0109FE5003091E5000053E31000000A003090E5DF
-S219020F08030053E30300009A003098E5030013E30450A0030A50
-S219020F1D00000AB4209FE5003092E50150A0E3050053E105009D
-S219020F32009A003098E5010013E30150A0130250A0030000006C
-S219020F47EA0150A0E30040A0E3050054E1170000AA84609FE5AA
-S219020F5C003096E50100D3E4003086E5ACFEFFEB0002A0E10064
-S219020F713099E5FF7000E2000053E33000001A00309AE5010035
-S219020F86D3E400308AE5A3FEFFEB000087E1003099E5FF7000E9
-S219020F9BE2000053E32700001A2C304BE20370C4E7014084E293
-S219020FB0050054E1E8FFFFBA2C109FE5003091E5000053E309A6
-S219020FC500000A2C004BE2001098E50520A0E12B0700EB060057
-S219020FDA00EA742C030018040300782C03007C2C0300802C034E
-S219020FEF00003098E50070C3E5003099E5000053E30F00001A14
-S21902100430309FE5002093E50300A0E1003098E5022065E000BC
-S2190210192080E5053083E0003088E5000052E3050000DA0030BD
-S21902102E9AE50020D3E5000052E3000000EA742C0300ABFFFFE4
-S2190210431AF0AF1BE90DC0A0E170D82DE904B04CE25CC09FE5A6
-S21902105800008CE558009FE5001080E554109FE5002081E550FC
-S21902106D209FE5000053E3003082E50060A0E10A00000A404081
-S2190210829FE50050A0E3005084E5003094E584FFFFEB00209478
-S219021097E5003094E5050053E10200000A0500A0E170A81BE9C8
-S2190210AC7DFFFFEB000096E570A81BE9782C03007C2C03007465
-S2190210C12C0300802C0300180403000DC0A0E100D82DE904B026
-S2190210D64CE2BC0500EB08209FE50130A0E3003082E500A81B6A
-S2190210EBE9FC0303000DC0A0E170D82DE904B04CE20060A0E38D
-S2190211000150A0E1006085E50040A0E1060000EA003095E501DB
-S2190211156086E2002094E5033280E1003085E5012082E2002088
-S21902112A84E5002094E50030D2E5000053E30300000A0300A0DA
-S21902113FE136FEFFEB000050E3F0FFFFAA0600A0E170A81BE927
-S2190211540DC0A0E170D82DE904B04CE202E0A0E10060A0E300AB
-S2190211694051E20400001A3030A0E30130C0E40030C0E502004A
-S21902117EA0E370A81BE907308EE2000053E3073083B2C3E1B019
-S219021193E11300000A50509FE501104EE28131A0E134C3B0E122
-S2190211A80020A0030120A01301005EE30030A0130130A0030398
-S2190211BD2092E10600000AFFC00CE22C32D5E70130C0E40F20A8
-S2190211D20CE20230D5E7026086E20130C0E400E051E2ECFFFF89
-S2190211E71A0600A0E170A81BE978E702000DC0A0E100D82DE992
-S2190211FC04B04CE200A81BE90DC0A0E100D82DE904B04CE2002B
-S219021211A81BE90DC0A0E170D82DE9B8209FE5003092E504B0B2
-S2190212264CE2000053E30200000A003092E50FE0A0E103F0A092
-S21902123BE19C209FE5003092E5000053E30300000A0030A0E3D9
-S219021250003082E50250A0E3020000EA580A00EB450A00EB00A3
-S21902126550A0E1620C00EB000050E30000000A6A0C00EB5A0C3F
-S21902127A00EBE0FFFFEB3C0C00EB0300A0E3100600EB0300A047
-S21902128FE3DB0500EB48609FE5000055E30600000A40409FE51D
-S2190212A4003094E50500A0E10FE0A0E103F0A0E1000050E3F9EF
-S2190212B9FFFF1A450C00EB003096E5000053E30200000A0030A8
-S2190212CE96E50FE0A0E103F0A0E170A81BE910040300C8C203E5
-S2190212E3000C040300000403000DC0A0E1F0DD2DE904B04CE2C2
-S2190212F824D04DE20050A0E10040A0E348604BE2F4A09FE50036
-S21902130D309AE50180A0E3000053E30500000A0400A0E1061031
-S219021322A0E10FE0A0E103F0A0E10080A0E1020000EA0400A0B9
-S219021337E1B90300EB48000BE50600A0E1103044E2070053E3B0
-S21902134C03E0A0E1017084E21100008A0840A0E30020A0E3023F
-S219021361C0A0E144004BE20010A0E1043082E2012082E203C04D
-S219021376C1E7040052E1FAFFFFBA0010A0E106C0A0E10320A02F
-S21902138BE30130DCE4012042E20130C1E4010072E3FAFFFF1AEF
-S2190213A0000058E30700000A0510A0E107005EE30C20A09304A4
-S2190213B520A0830030A0E395FEFFEB0050A0E1100000EA0520B9
-S2190213CAA0E107005EE31730A0930730A083010073E37810A0EB
-S2190213DFE30300000A013043E20110C2E4010073E3FBFFFF1A8B
-S2190213F407005EE30200009A085085E2010000EAE8C10300188B
-S2190214095085E20740A0E1190054E3BCFFFFDAF0AD1BE90DC0F6
-S21902141EA0E1F0D92DE904B04CE20CD04DE20040A0E31A70A078
-S219021433E30130D0E40180A0E124000BE5500053E31700001A08
-S21902144824004BE228104BE226FFFFEB040050E10800000A2458
-S21902145D201BE50130D2E4FF3003E224200BE53D0053E30200AF
-S219021472001A28401BE5017084E2090000EA74209FE50030D2F8
-S219021487E50810A0E1000053E32900000A0130C1E40130F2E584
-S21902149C000053E3FBFFFF1A240000EA0450A0E1070055E118B3
-S2190214B10000AA0060A0E32C104BE2104045E2070054E32C60E8
-S2190214C60BE50C20A0930420A08324001BE50630A0E1DAFEFFC2
-S2190214DBEB2C101BE50500A0E1560300EB070054E30300009A29
-S2190214F024301BE5083083E2020000EA8CE7020024301BE51822
-S2190215053083E2015085E224300BE5070055E1E7FFFFBA282015
-S21902151A9FE50030D2E50810A0E1000053E30300000A0130C17C
-S21902152FE40130F2E5000053E3FBFFFF1A0030A0E30030C1E5E2
-S219021544000000EA90E70200F0A91BE90DC0A0E1F0D82DE974EB
-S219021559239FE504B04CE2C0D04DE20040A0E10060A0E300305A
-S21902156ED4E50270A0E10060C2E53F3043E2340053E303F19F1D
-S21902158397F40100EA5C1602005C1D0200BC1602002C1C0200C9
-S219021598E41A02005C1D02005C1D02005C1D02000C1802006C34
-S2190215AD1D02005C1D02005C1D02005C1D02005C1D0200EC1813
-S2190215C202005C1D02005C1D02000C180200A41602005C1D02B8
-S2190215D700E41A02006C1D02005C1D02005C1D02005C1D0200FC
-S2190215ECE81802005C1D02005C1D02005C1D02005C1D02005C99
-S2190216011D02005C1D02005C1D02005C1D02005C1D0200D41CD2
-S2190216160200E41A02005C1D02005C1D02005C1D0200B016027D
-S21902162B005C1D02005C1D02005C1D02000C1C02005C1D02008D
-S2190216401C1802005C1D02005C1D02005C1D0200981602002413
-S2190216551C0200E41A0200580900EB450900EB5330A0E30030A0
-S21902166AC7E50020A0E30320C7E55C129FE54032A0E10F30031F
-S21902167FE20320D1E70F0000E20030D1E70120C7E50230C7E50E
-S219021694B40100EA010084E27E0200EBB10100EA010084E2D2F4
-S2190216A90200EBAE0100EA0700A0E10CFFFFEBAB0100EA01305B
-S2190216BED4E5000053E30A00001AF10100EB08129FE50030D181
-S2190216D3E50720A0E1000053E38C01000A0130C2E40130F1E5C3
-S2190216E8000053E3FBFFFF1A870100EAA4604BE2A0504BE201DC
-S2190216FD3084E2A0300BE50500A0E10610A0E177FEFFEB0000FF
-S21902171250E32400000AA0201BE50130D2E4FF3003E2A0200BD4
-S219021727E52C0053E31E00001A0500A0E1A8104BE26CFEFFEB68
-S21902173C000050E31900000AA0201BE50130D2E4FF3003E2A0E0
-S219021751200BE52C0053E31300001AA4101BE5000051E30B00EA
-S219021766000AA8001BE5E00100EB001050E20300000AA0001BDF
-S21902177BE5A4201BE50030A0E32FFEFFEBA4201BE5A0301BE54B
-S219021790823083E0A0300BE5A0201BE50030D2E52C0053E3015E
-S2190217A5308202D4FFFF0AA0301BE50020D3E5000052E30900B2
-S2190217BA001A18119FE50030D1E50720A0E1000053E350010037
-S2190217CF0A0130C2E40130F1E5000053E3FBFFFF1A4B0100EA97
-S2190217E4F4109FE50030D1E50720A0E1000053E34601000A014B
-S2190217F930C2E40130F1E5000053E3FBFFFF1A410100EA04007E
-S21902180EA0E10710A0E100FFFFEB530100EAAC504BE20500A0B0
-S219021823E1013084E2AC300BE5B0104BE22EFEFFEB000050E32F
-S2190218381B00000AAC201BE50130D2E4FF3003E2AC200BE52CC0
-S21902184D0053E31500001A0500A0E1B4104BE223FEFFEB000098
-S21902186250E31000000AB0001BE50710A0E1B4201BE50130A030
-S219021877E366FDFFEB000050E33901001A58109FE50030D1E5CC
-S21902188C0720A0E1000053E31E01000A0130C2E40130F1E5005B
-S2190218A10053E3FBFFFF1A190100EA2C109FE50030D1E5072011
-S2190218B6A0E1000053E31401000A0130C2E40130F1E50000530F
-S2190218CBE3FBFFFF1A0F0100EA7424030078E7020090E702009C
-S2190218E094E7020098E702000160A0E3B8504BE20500A0E1014E
-S2190218F53084E2B8300BE5BC104BE2FAFDFFEB000050E36B00F1
-S21902190A000AB8201BE50130D2E4FF3003E2B8200BE52C00539D
-S21902191FE36500001A0500A0E1C0104BE2EFFDFFEB000050E3BE
-S2190219346000000AB8001BE50130D0E4FF3003E2B8000BE53A9A
-S2190219490053E35A00001A000056E33E00000AC0301BE5000067
-S21902195E53E32400000A9C504BE2C0301BE50040A0E3030054E6
-S219021973E11100002A0510A0E1B8201BE50130D2E40430C1E70B
-S219021988FF3003E2B8200BE57D0053E30300001A0130D2E42090
-S21902199D3083E30430C5E7B8200BE5014084E27F0054E3020091
-S2190219B2008AC0301BE5030054E1EEFFFF3A0500A0E1BC101BD4
-S2190219C7E50420A0E1AD0400EB040050E10700001AC0201BE5A8
-S2190219DCBC301BE5022064E0C0200BE5043083E0BC300BE5005A
-S2190219F10052E3DBFFFF1AC0301BE5000053E30900001A28132E
-S219021A069FE50030D1E50720A0E1000053E3BE00000A0130C2C1
-S219021A1BE40130F1E5000053E3FBFFFF1AB90000EA04139FE53D
-S219021A300030D1E50720A0E1000053E3B400000A0130C2E40140
-S219021A4530F1E5000053E3FBFFFF1AAF0000EABC101BE5C020F1
-S219021A5A1BE50130A0E378FDFFEB000050E30900000AC0129FA6
-S219021A6FE50030D1E50720A0E1000053E3A400000A0130C2E42D
-S219021A840130F1E5000053E3FBFFFF1A9F0000EA9C129FE5003B
-S219021A9930D1E50720A0E1000053E39A00000A0130C2E40130C1
-S219021AAEF1E5000053E3FBFFFF1A950000EA78129FE50030D16F
-S219021AC3E50720A0E1000053E39000000A0130C2E40130F1E5CC
-S219021AD8000053E3FBFFFF1A8B0000EA013084E2C4300BE5C4F5
-S219021AED504BE20020D4E50030A0E3C8300BE5530052E3430021
-S219021B0252130700001A0500A0E1C8104BE276FDFFEBC4201B5A
-S219021B17E50030D2E53B0053E301308202C4300B050500A0E136
-S219021B2CCC104BE26EFDFFEB000050E30100000ACC001BE5270E
-S219021B410800EB0300A0E3E00300EB0300A0E3AB0300EBC8005A
-S219021B561BE5000050E30800000AD8219FE5003092E5000053B7
-S219021B6BE30400000A003092E50FE0A0E103F0A0E1000050E3AF
-S219021B80C8000B05C8501BE5000055E30300000A0900A0E3C8C0
-S219021B95000BE5A80000EB740000EA990A00EB000050E304008E
-S219021BAA000A6330A0E30030C4E588219FE5623043E200308290
-S219021BBFE50030D4E5530053E3730053130600001A0500A0E134
-S219021BD486FDFFEB68219FE568319FE5003082E5AD0900EB0125
-S219021BE90000EA0100A0E37FFDFFEB0300A0E3B40300EB0300E1
-S219021BFEA0E37F0300EB0000E0E35A0000EA3C319FE500209330
-S219021C13E50FE0A0E102F0A0E10100A0E3540000EA330300EB0A
-S219021C284F0000EAD0004BE2013084E2D0300BE5D4104BE22BA7
-S219021C3DFDFFEB000050E31800000AD0201BE50130D2E4FF3049
-S219021C5203E2D0200BE52C0053E31200001A0130D2E4D0200B41
-S219021C67E5430053E30200001AD4001BE5220400EB010000EA17
-S219021C7CD4001BE51A0400EBA8109FE50030D1E50720A0E100A5
-S219021C910053E31E00000A0130C2E40130F1E5000053E3FBFFCB
-S219021CA6FF1A190000EAA0109FE50030D1E50720A0E1000053F1
-S219021CBBE31400000A0130C2E40130F1E5000053E3FBFFFF1AE5
-S219021CD00F0000EAD8004BE2013084E2D8300BE5DC104BE20151
-S219021CE5FDFFEB000050E30B00001A60109FE50030D1E50720A3
-S219021CFAA0E1000053E30300000A0130C2E40130F1E5000053D9
-S219021D0FE3FBFFFF1A0030A0E30030C2E5120000EA0C009FE5AC
-S219021D24C1FBFFEBDC001BE5650100EB0D0000EA90E7020098C8
-S219021D39E702009CE70200080403004404030024040300F0C1EA
-S219021D4E03000404030094E70200A0E702000400A0E10710A029
-S219021D63E14B2FA0E3DB0300EB0700A0E1AEFBFFEB0000A0E31F
-S219021D78F0A81BE90DC0A0E110D82DE914409FE504B04CE204A9
-S219021D8D10A0E1E30200EB0400A0E1A4FBFFEB10A81BE9742477
-S219021DA203000DC0A0E110D82DE938309FE5002093E504B04C52
-S219021DB7E2000052E3000000AAEDFFFFEB24409FE50400A0E10C
-S219021DCC2AFBFFEB0400A0E1DDFDFFEB000050E3F9FFFF0A006F
-S219021DE100A0B30100A0A310A81BE914040300741C03000DC018
-S219021DF6A0E100D82DE904B04CE200A81BE90DC0A0E100D82D81
-S219021E0BE904B04CE2ADFCFFEB850200EB2B00A0E3100100EB41
-S219021E2000A81BE90DC0A0E100D82DE908309FE504B04CE20020
-S219021E350083E500A81BE9140403000DC0A0E100D82DE93C10DA
-S219021E4A9FE55830A0E30030C1E50020A0E30320C1E504B04CAB
-S219021E5FE228C09FE54032A0E10F3003E20320DCE70F0000E22B
-S219021E740030DCE70120C1E50230C1E50100A0E169FBFFEB00F0
-S219021E89A81BE97424030078E702000DC0A0E100D82DE9382001
-S219021E9E9FE538109FE50030E0E3003082E530309FE50020A0AA
-S219021EB3E3002081E5002083E524109FE524309FE5003081E5FC
-S219021EC804B04CE21C209FE50130A0E3003082E500A81BE9D88D
-S219021EDD2C0300D42C0300842C03005C2D0300DC2C03001C044D
-S219021EF203000DC0A0E130D82DE99C309FE504B04CE20040A053
-S219021F07E1002093E50150A0E1000052E30000001ADDFFFFEB5E
-S219021F1C120054E3070000CA78309FE578109FE5002093E503BC
-S219021F31C0A0E1022061E0052082E0800052E30100009A000019
-S219021F46A0E330A81BE958E09FE500309EE5030054E10B00006E
-S219021F5B0A4C009FE5003090E548109FE5030054E1030000BA1A
-S219021F70012084E20030A0E3023181E7002080E500408EE50048
-S219021F85309CE5043181E700309CE50300A0E1053083E00030F5
-S219021F9A8CE530A81BE91C0403005C2D0300DC2C0300D82C031D
-S219021FAF00D42C0300842C03000DC0A0E1F0DD2DE904B04CE24D
-S219021FC404D04DE20060A0E174009FE50150A0E1001090E502CC
-S219021FD940A0E168A09FE5000051E31300001A0130A0E300305A
-S219021FEE80E558709FE558809FE50130A0E1031CA0E10800A0D0
-S219022003E303E1A0E101C083E28120A0E1073022E0000051E3C4
-S2190220180320A0B10210A0E1010050E2F8FFFF1A0C30A0E10E97
-S21902202D2088E7FF0053E3F0FFFF9A14709FE50030A0E3003060
-S2190220428AE5080000EA2004030018040300B71DC104602D03B2
-S2190220570025305BE5243C23E0032197E7016086E2044422E0C0
-S21902206C015045E2010075E30600000A25004BE20610A0E1018D
-S21902208120A0E3F10200EB00309AE5000053E3F0FFFF0A0400E1
-S219022096A0E1F0AD1BE90DC0A0E170D82DE928319FE504B04C83
-S2190220ABE20CD04DE21C000BE50020A0E30020C3E500C0A0E174
-S2190220C00020DCE50350A0E1430052E33700001A0130DCE55242
-S2190220D50053E33400001A0260DCE5430056E33100001A03304E
-S2190220EADCE53A0053E32E00001A1C404BE20400A0E104308C93
-S2190220FFE21C300BE520104BE2F8FBFFEB000050E33700000AF9
-S2190221141C201BE50130D2E4FF3003E21C200BE52C0053E331B9
-S21902212900001A0400A0E124104BE2EDFBFFEB000050E32C0069
-S21902213E000A20001BE524101BE50020E0E399FFFFEB80309F73
-S219022153E5004093E50010A0E1000054E30B00000A70209FE5E2
-S2190221680030D2E50510A0E1000053E30300000A0130C1E401C4
-S21902217D30F2E5000053E3FBFFFF1A0030A0E30030C1E5170056
-S21902219200EA010085E22020A0E3ECFBFFEB0060C5E5010080C0
-S2190221A7E20040C5E7100000EA1C301BE50020D3E50300A0E1AC
-S2190221BC4C0052E30210A0E10A00000A040000CA430052E30396
-S2190221D10000EA742403001804030094E70200500051E302004B
-S2190221E6000A0510A0E14B2FA0E3AF0200EB70A81BE90DC0A01B
-S2190221FBE100D82DE90030D0E504B04CE2700053E30200000A80
-S21902221008109FE54B2FA0E3AA0200EB00A81BE9742403000D2E
-S219022225C0A0E100D82DE90C309FE5002093E504B04CE2000133
-S21902223A92E700A81BE9240403000DC0A0E100D82DE90C309F21
-S21902224FE5002093E504B04CE2001182E700A81BE924040300C3
-S2190222640DC0A0E100D82DE920309FE5182093E50010A0E1000D
-S2190222790092E5FF1001E20C3092E504B04CE20FE0A0E103F0E8
-S21902228EA0E100A81BE9500000000DC0A0E100D82DE91C309F90
-S2190222A3E5182093E5000092E5103092E504B04CE20FE0A0E10A
-S2190222B803F0A0E1FF0000E200A81BE9500000000DC0A0E1006B
-S2190222CDD82DE924309FE504B04CE218C093E500109CE500204C
-S2190222E2A0E10100A0E114309CE50010A0E30FE0A0E103F0A082
-S2190222F7E100A81BE9500000000DC0A0E100D82DE9000050E37F
-S21902230C04B04CE20F00000A70209FE5003092E5013043E200A9
-S2190223213082E5000053E3160000CA0030A0E3003082E5542035
-S2190223369FE5183092E5000093E5142093E50510A0E30FE0A0FD
-S21902234BE102F0A0E100A81BE930209FE5003092E5013083E265
-S219022360003082E5010053E30600001A1C309FE5182093E500F3
-S2190223750092E5143092E50410A0E30FE0A0E103F0A0E100A8F7
-S21902238A1BE928040300500000000DC0A0E100D82DE91C309F8D
-S21902239FE5182093E5000092E5103092E504B04CE20FE0A0E10D
-S2190223B403F0A0E1FF0000E200A81BE9500000000DC0A0E1F07E
-S2190223C9DF2DE9FF1001E20D0051E304B04CE204D04DE2730078
-S2190223DE000A70319FE570219FE5000093E50010C2E7010080ED
-S2190223F3E2000083E50A0051E30100000A640050E36900001A21
-S21902240850519FE5186095E500900FE100400FE1C04084E30486
-S21902241DF029E13C019FE50D0800EB000096E50C3096E5241082
-S219022432A0E30FE0A0E103F0A0E1000096E54F80A0E30C309688
-S219022447E50810A0E10FE0A0E103F0A0E1FC309FE5002093E5CF
-S21902245C0070A0E3020057E1180000AAF8A09FE5E8209FE507C6
-S21902247130D2E72342DAE7000096E50F3003E20350DAE70C3051
-S21902248696E50410A0E10FE0A0E103F0A0E1000096E5017087D3
-S21902249BE20C3096E50510A0E10FE0A0E103F0A0E1044088E066
-S2190224B0FF8004E29C209FE5055088E0003092E5FF8005E2039E
-S2190224C50057E1E7FFFFBA000096E50C3096E52310A0E30FE04D
-S2190224DAA0E103F0A0E180309FE5000096E52812D3E70C20968C
-S2190224EFE50FE0A0E102F0A0E168209FE5000096E50F3008E259
-S2190225040310D2E70C3096E50FE0A0E103F0A0E1000096E510C9
-S2190225193096E50FE0A0E103F0A0E129004BE529305BE52B00FA
-S21902252E53E31000000A29004BE20110A0E32B0300EB000050EE
-S219022543E30800001A29305BE52D0053E3EFFFFF1AB3FFFFEAD9
-S2190225582C0403006031030050000000B0250200A4E7020030BC
-S21902256D209FE50130A0E3443082E528209FE50030A0E3003070
-S21902258282E520009FE5D50700EB00300FE1C04009E2C030C3AD
-S219022597E3043083E103F029E1020000EA500000002C04030041
-S2190225ACB0250200F0AF1BE90DC0A0E170D82DE904B04CE2010A
-S2190225C160A0E10240A0E10430A0E1014044E2000053E30050B8
-S2190225D6A0E10600000A0110D6E40500A0E176FFFFEB0430A0D4
-S2190225EBE1014044E2000053E3F8FFFF1A70A81BE90DC0A0E1DC
-S21902260070D82DE904B04CE20160A0E10240A0E10430A0E10123
-S2190226154044E2000053E30050A0E10600000A0500A0E159FF4E
-S21902262AFFEB0430A0E1014044E20100C6E4000053E3F8FFFFB7
-S21902263F1A70A81BE90DC0A0E10E002DE900D82DE90000A0E366
-S21902265410B04CE200A81BE90DC0A0E170D82DE90000A0E3049D
-S219022669B04CE223FFFFEBB4C09FE5B4509FE5B4E09FE5B460BF
-S21902267E9FE50020A0E3B0109FE50C40A0E1000091E5023190CF
-S219022693E702318CE7012082E20A0052E3FAFFFFDA001091E582
-S2190226A82C3091E52C308CE5402091E530208CE5303091E534D6
-S2190226BD308CE5342091E538208CE5383091E53C308CE5000012
-S2190226D2A0E33C3091E51C208CE20C10A0E164308CE540008279
-S2190226E7E5042042E2010052E1FBFFFFAA00309EE5004085E576
-S2190226FC000053E30400000A0030A0E300308EE50F00A0E3C3D3
-S219022711FEFFEB720700EB0F00A0E3C0FEFFEB6F0700EB0000C5
-S21902272686E570A81BE9F0C103002404030044040300C8C20359
-S21902273B0058C203000DC0A0E100D82DE904B04CE260109FE553
-S2190227500000A0E301E0A0E158C09FE500209EE500319CE70095
-S2190227653182E7010080E20A0050E3F9FFFFDA001091E52C306B
-S21902277A9CE52C3081E530209CE5402081E534309CE5303081A3
-S21902278FE538209CE5342081E53C309CE5383081E564209CE5F6
-S2190227A43C2081E50100A0E3D3FEFFEB00A81BE958C20300F05F
-S2190227B9C103000DC0A0E100D82DE90000A0E304B04CE200A8F7
-S2190227CE1BE90DC0A0E100D82DE930209FE530309FE530109F18
-S2190227E3E5003082E52C309FE52C209FE5003081E528309FE53C
-S2190227F828109FE5003082E524309FE504B04CE2003081E50022
-S21902280DA81BE908040300BC27020004040300F82802001004CE
-S21902282203005C2602000C040300402702000DC0A0E170D82DD4
-S219022837E99C209FE5006092E504B04CE2000056E32200001A2E
-S21902284C0130A0E3003082E584509FE55C0800EB343095E500A0
-S21902286100E0E30FE0A0E103F0A0E10040A0E1343095E5020013
-S219022876E0E30FE0A0E103F0A0E1141095E558309FE558209FDE
-S21902288BE5043081E554309FE5082081E50C3081E54C209FE58A
-S2190228A04C309FE5102081E5143081E5020074E3000054130319
-S2190228B500000A343095E50400A0E10FE0A0E103F0A0E1303056
-S2190228CA95E50600A0E10FE0A0E103F0A0E170A81BE9300403BA
-S2190228DF0050000000B4250200FC250200C423020094230200ED
-S2190228F4442602000DC0A0E100D82DE918309FE5403093E50468
-S219022909B04CE2000053E30100000A0FE0A0E103F0A0E100A807
-S21902291E1BE9500000000DC0A0E1F0D82DE95430A0E304B04C16
-S219022933E204D04DE20150A0E10570A0E10040A0E10130C7E43E
-S2190229484402A0E11EF8FFEB0100C5E5017087E20400A0E11A88
-S21902295DF8FFEB0100C7E40000A0E317F8FFEB0100C7E40F0099
-S219022972A0E314F8FFEB0100C7E43A60A0E30160C7E40F00A04C
-S219022987E325FEFFEB0710A0E10420A0E30030A0E320000BE542
-S21902299C20504BE20500A0E11BF9FFEB0070A0E13B40A0E3010E
-S2190229B140C7E40000A0E303F8FFEB0100C7E40D00A0E300F883
-S2190229C6FFEB0100C7E40160C7E40D00A0E312FEFFEB0710A012
-S2190229DBE10420A0E320000BE50030A0E30500A0E109F9FFEB23
-S2190229F00070A0E10140C7E40030A0E30030C7E5F0A81BE90DB6
-S219022A05C0A0E100D82DE904B04CE2030050E300F19F9728001F
-S219022A1A00EAC02A02002C2A0200402A02006C2A0200101F112E
-S219022A2FEE011A81E3031081E3101F01EE1F0000EA101F11EE52
-S219022A44011AC1E3101F01EE151F07EE0000A0E10000A0E1006E
-S219022A5900A0E10000A0E10000A0E10000A0E1140000EA0E024F
-S219022A6EA0E3021A80E2202090E4000031E1FCFFFF1A160F0745
-S219022A83EE9A0F07EE0000A0E10000A0E10000A0E10000A0E1A7
-S219022A980000A0E10000A0E1151F07EE151F08EE0000A0E1004C
-S219022AAD00A0E10000A0E10000A0E10000A0E10000A0E1100F69
-S219022AC211EE2006A0E1010000E200A81BE90DC0A0E100D82D70
-S219022AD7E904B04CE2030050E300F19F97190000EA502B02003B
-S219022AECF82A0200082B02001C2B0200101F11EE0F1081E3106B
-S219022B011F01EE110000EA101F11EE0C10C1E3101F01EE161F6E
-S219022B1607EE0C0000EA0E02A0E3021A80E2202090E4000031C2
-S219022B2BE1FCFFFF1A160F07EE9A0F07EE0000A0E10000A0E1DF
-S219022B400000A0E10000A0E10000A0E10000A0E1100F11EE2037
-S219022B5501A0E1010000E200A81BE90DC0A0E170D82DE9D020B7
-S219022B6A9FE5D0409FE504B04CE2CCC09FE50130A0E300308CD5
-S219022B7FE5C4309FE50260A0E1003082E50C50A0E1003094E5DD
-S219022B9404C0A0E1000053E32200000A04E0A0E100309EE50363
-S219022BA90053E30900009A030011E30700001A030010E3050024
-S219022BBE001A043090E4043081E400209EE5042042E200208E07
-S219022BD3E5110000EA00309CE5010053E30900009A010011E386
-S219022BE80700001A010010E30500001AB230D0E0B230C1E00088
-S219022BFD309CE5023043E200308CE5040000EA0120D0E401202F
-S219022C12C1E400309EE5013043E200308EE5003094E500005359
-S219022C27E3DDFFFF1A0030A0E3003085E50030A0E3003086E51E
-S219022C3C70A81BE934040300C431030018040300342C02000D9F
-S219022C51C0A0E130D82DE90030A0E10100A0E10310A0E11840E9
-S219022C669FE50250A0E1005084E504B04CE2B9FFFFEB0000942A
-S219022C7BE5050060E030A81BE9C43103000DC0A0E130D82DE9D3
-S219022C9018409FE50250A0E1005084E504B04CE2AEFFFFEB0047
-S219022CA50094E5050060E030A81BE9C43103000DC0A0E100D85B
-S219022CBA2DE90000A0E304B04CE200A81BE90DC0A0E100D82D84
-S219022CCFE90000A0E304B04CE200A81BE90DC0A0E100D82DE9B3
-S219022CE40000A0E304B04CE200A81BE90DC0A0E100D82DE90186
-S219022CF900A0E304B04CE200A81BE90DC0A0E100D82DE9010071
-S219022D0EA0E304B04CE200A81BE90DC0A0E100D82DE904B04C5C
-S219022D23E267F6FFEB00A81BE90DC0A0E110D82DE904B04CE291
-S219022D3800300FE100400FE1C04084E304F029E108209FE5011D
-S219022D4D30A0E3003082E5FEFFFFEA0000039010A81BE90DC01E
-S219022D62A0E100D82DE904B04CE2EEFFFFEB0000A0E300A81BE7
-S219022D77E90DC0A0E100D82DE90000A0E304B04CE200A81BE90A
-S219022D8C0DC0A0E170D82DE904B04CE20040A0E10000A0E30158
-S219022DA160A0E30010A0E1020074E30D00000A020000CA030063
-S219022DB674E30F00000A100000EA010074E30E00001ABC309F8C
-S219022DCBE5003093E5000053E3016043E20B0000CA0360A0E1EA
-S219022DE00260E003080000EAA0309FE598209FE5180083E50090
-S219022DF54082E5030000EA0040A0E1000000EA014084E20110CB
-S219022E0AA0E3000051E31B00000A74509FE5183095E500005373
-S219022E1FE30400000A000093E5143093E50410A0E30FE0A0E16B
-S219022E3403F0A0E154309FE548209FE5843283E0183085E5004F
-S219022E494082E5183095E5000050E30500000A000093E5143006
-S219022E5E93E50510A0E30FE0A0E103F0A0E1040000EA000093E3
-S219022E73E5143093E50410A0E30FE0A0E103F0A0E10600A0E1A0
-S219022E8870A81BE93804030050000000C83103000DC0A0E10039
-S219022E9DD82DE90010A0E304B04CE201C0A0E3020070E30D0010
-S219022EB2000A020000CA030070E30F00000A100000EA01007054
-S219022EC7E30E00001A64309FE5003093E5000053E301C043E208
-S219022EDC0B0000CA03C0A0E102C0E003080000EA48309FE540EE
-S219022EF1209FE5141083E5000082E5030000EA0100A0E10000BF
-S219022F0600EA010080E20110A0E3000051E30500000A18309FA4
-S219022F1BE51C209FE5000083E510309FE5802282E0142083E529
-S219022F300C00A0E100A81BE93C04030050000000C83103000DB0
-S219022F45C0A0E100D82DE904B04CE200A81BE90DC0A0E100D88D
-S219022F5A2DE904B04CE200A81BE90DC0A0E110D82DE904B04C6B
-S219022F6FE22C409FE5950600EB303094E50000E0E30FE0A0E1E2
-S219022F8403F0A0E1000050E30300000A343094E50000A0E30F0E
-S219022F99E0A0E103F0A0E110A81BE9500000000DC0A0E110D805
-S219022FAE2DE9FF1000E258309FE504B04CE2142093E50340A083
-S219022FC3E1000052E30400000A000092E50C3092E50FE0A0E134
-S219022FD803F0A0E1040000EA182094E5000092E50C3092E50F91
-S219022FEDE0A0E103F0A0E1443094E5000053E30300000A0000C3
-S219023002A0E3880000EB0030A0E3443084E510A81BE950000020
-S219023017000DC0A0E100D82DE930209FE5181092E5003092E547
-S21902302C04B04CE2130053E30600001A1430A0E3003082E500DF
-S2190230410091E5143091E50510A0E30FE0A0E103F0A0E100A81F
-S2190230561BE9500000000DC0A0E110D82DE90030A0E350209FFC
-S21902306BE504B04CE204D04DE214300BE518E092E500309EE529
-S2190230800020A0E10300A0E10130A0E118C09EE514104BE20FA2
-S219023095E0A0E10CF0A0E114301BE50040A0E1000053E3020004
-S2190230AA000A10309FE5000093E55C0000EB0400A0E1010000F7
-S2190230BFEA50000000CCC2030010A81BE90DC0A0E1F0D82DE942
-S2190230D4E0009FE5E0609FE50020A0E3DC509FE504B04CE2D8AB
-S2190230E9709FE50510A0E10231A0E1012082E2030081E73F005E
-S2190230FE52E3FAFFFFDAC0C09FE50030A0E3A8009FE501108338
-S219023113E28332A0E10720A0E303008CE7012052E2043083E27A
-S219023128FBFFFF5A0130A0E1020053E3F5FFFFDA90209FE5133A
-S21902313D30A0E3003085E5042085E584309FE584209FE5083003
-S21902315285E5402085E57C309FE57C209FE5103085E548208546
-S219023167E574309FE5306085E570209FE5347085E5203085E569
-S21902317C0140E0E31C2085E50400A0E10FE0A0E106F0A0E1041D
-S21902319100A0E10FE0A0E107F0A0E10030A0E3243085E54020E8
-S2190231A69FE5283085E54C3085E5443085E58C2085E5F0A81B3A
-S2190231BBE9782D02008C2D020050000000982E0200C831030099
-S2190231D028010300200000002C2D0200602D0200182D02004422
-S2190231E52F0200542F0200684502000DC0A0E100D82DE900002D
-S2190231FA51E304B04CE20700000A011041E20130D0E703005320
-S21902320FE30100001A0100A0E300A81BE9000051E3F7FFFF1A32
-S2190232240000A0E300A81BE90DC0A0E100D82DE9000050E31CD4
-S219023239109FE504B04CE23810901514309FE58C2093E5010029
-S21902324EA0E10FE0A0E102F0A0E100A81BE95832020050000078
-S219023263000DC0A0E130D82DE90020E0E304B04CE258C09FE582
-S2190232780040A0E100309CE50150A0E1140053E30600001A1874
-S21902328D309CE5000093E5142093E50610A0E30FE0A0E102F055
-S2190232A2A0E10020A0E1020054E10400001A0400A0E10510A05F
-S2190232B7E167FFFFEB000050E30200001A0400A0E10510A0E160
-S2190232CCC7F4FFEB30A81BE9500000000DC0A0E110D82DE9FFCA
-S2190232E10000E204B04CE20040A0E10A0054E30100001A0D00E3
-S2190232F6A0E32AFFFFEB0400A0E128FFFFEB10A81BE90DC0A067
-S21902330BE110D82DE90040A0E10030D4E504B04CE2000053E305
-S2190233200400000A0000D4E5EAFFFFEB0130F4E5000053E3FABD
-S219023335FFFF1A10A81BE90DC0A0E100D82DE90030A0E3101099
-S21902334AA0E32B20A0E304D04DE200308DE504B04CE24400004B
-S21902335FEB00A81BE90DC0A0E1F0DF2DE904B04CE224D04DE283
-S2190233740150A0E10040A0E129104BE24C300BE548A04BE204BF
-S219023389309BE50A00A0E1000053E32090A0033090A013019060
-S21902339E41E4000051E1FCFFFFAA0080A0E3053094E103000068
-S2190233B31A3030A0E348304BE5018088E2150000EA053094E1C5
-S2190233C81300000A0260A0E10070A0E30510A0E10400A0E107D4
-S2190233DD30A0E10620A0E1732B00EB68309FE50010D3E70810F5
-S2190233F2CAE70730A0E10620A0E10510A0E10400A0E10180888B
-S219023407E2072A00EB0150A0E10040A0E1053094E1EDFFFF1A69
-S21902341C08309BE5080053E10380A0A14C301BE52D0053E306F7
-S21902343100001A013048E20320DAE7090052E10380A0014C304A
-S2190234461BE50830CAE7050000EA018048E2030000EAB8E70259
-S21902345B000800DAE7018048E29BFFFFEB000058E3FAFFFFAA80
-S219023470F0AF1BE90DC0A0E100D82DE908D04DE200308DE504B4
-S219023485B04CE204309BE501C0A0E104308DE50010A0E30230EC
-S21902349AA0E10C20A0E1AFFFFFEB00A81BE90DC0A0E100D82D51
-S2190234AFE9000050E304B04CE201C0A0E31500000A0010A0E10F
-S2190234C40030D1E5000053E31000000A44E09FE5013060E00E8F
-S2190234D90053E10020D1E500C0A0A30D0052E30A005213020017
-S2190234EE000A203042E25E0053E300C0A083011081E200005CFD
-S219023503E30200000A0030D1E5000053E3EFFFFF1A0C00A0E10D
-S21902351800A81BE9010100000DC0A0E1F0DF2DE904B04CE20CC8
-S21902352DD04DE20060A0E12C100BE5DAFFFFEB004050E2170129
-S219023542001AA4039FE56EFFFFEB0600A0E179FFFFEB98039FAE
-S219023557E56AFFFFEB2000A0E35CFFFFEB2C301BE5040193E75D
-S21902356C72FFFFEB014084E2070054E3F7FFFFDA74039FE560D9
-S219023581FFFFEB090100EA0040D6E5250054E30200000A0400EA
-S219023596A0E14EFFFFEBFF0000EA0070A0E32BC0A0E30140F6E0
-S2190235ABE50710A0E1300054E30090A0130190A003303044E223
-S2190235C0090053E30600008A073187E0833084E00140F6E5301E
-S2190235D57043E2302044E2090052E3F8FFFF9A6C0054E303005B
-S2190235EA001A0140F6E56C0054E30110A0030140F60525304463
-S2190235FFE2530053E303F19F97E00000EA8439020090390200C7
-S21902361490390200903902009039020090390200903902009013
-S21902362939020090390200903902009039020090390200903955
-S21902363E02009039020090390200903902009039020090390277
-S21902365300903902009039020090390200903902009039020064
-S219023668903902009039020090390200903902009039020090BF
-S21902367D39020054390200103802005C370200903902009039F4
-S21902369202009039020090390200903902009039020090390223
-S2190236A700903902009039020090390200903902009039020010
-S2190236BC90390200903902002C380200903902009039020090D0
-S2190236D139020090390200B83702009039020090390200903987
-S2190236E6020090390200903902009039020090390200903902CF
-S2190236FB009039020054390200103802005C37020090390200AF
-S21902371090390200903902009039020090390200903902009016
-S21902372539020090390200903902009039020090390200903958
-S21902373A020090390200903902002C38020090390200903902DF
-S21902374F009039020090390200B8370200000051E30B00000A8E
-S2190237642C301BE50300B3E82C300BE5000051E3020000AA0023
-S2190237790070E20010E1E22DC0A0E30A20A0E300908DE50C30B4
-S21902378EA0E1100000EA2C301BE5040093E42C300BE500005031
-S2190237A3E3000060B22DC0A0B30A10A0E30C20A0E1100000EA91
-S2190237B8000051E30900000A00908DE50C30A0E12CC01BE50300
-S2190237CD00BCE82CC00BE51020A0E304708DE5016086E2DFFE21
-S2190237E2FFEB6E0000EA0C20A0E12CC01BE504009CE41010A0AC
-S2190237F7E32CC00BE50930A0E100708DE5016086E219FFFFEB90
-S21902380C640000EA2C301BE50000D3E5043083E22C300BE50158
-S2190238216086E2ABFEFFEB5D0000EA0050A0E32CC01BE50580A5
-S219023836A0E104409CE405A0A0E12CC00BE5050054E1AC409F6A
-S21902384B050C00000A0400A0E113FFFFEB000050E30800001A70
-S21902386098009FE50A90A0E1A6FEFFEB0400A0E1B1FEFFEB1950
-S2190238753047E2190057E30370A0C17C409FE50530D4E7016026
-S21902388A86E2000053E30300000A015085E20530D4E70000537C
-S21902389FE3FBFFFF1A000057E3070055110750A0C1000059E37C
-S2190238B40780651007A065000830A0E1018048E2000053E30155
-S2190238C9704AE2050000DA2000A0E37FFEFFEB0830A0E1018024
-S2190238DE48E2000053E3F9FFFFCA0030D4E5080000EACCE7021D
-S2190238F300E4E70200E8E70200ECE70200F4E7020008E8020077
-S2190239080000D4E571FEFFEB0130F4E5000053E30200000A0144
-S21902391D5045E2010075E3F7FFFF1A0A30A0E107A0A0E10000CC
-S21902393253E31A0000DA2000A0E365FEFFEB0A30A0E101A04AB9
-S219023947E2000053E3F9FFFFCA130000EA000057E32C301BE5F8
-S21902395C014047121F40A003005093E55534A0E1010013E32EBC
-S21902397100A0033100A01356FEFFEB014044E2F8FFFFEA250009
-S219023986A0E352FEFFEB030000EA2500A0E34FFEFFEB0400A0F8
-S21902399BE14DFEFFEB016086E20030D6E5000053E3F5FEFF1A04
-S2190239B0F0AF1BE90DC0A0E10F002DE900D82DE914B04CE220E5
-S2190239C5D04DE208309BE50C209BE504009BE52C300BE528206B
-S2190239DA0BE510309BE514209BE524300BE520200BE518309B16
-S2190239EFE51C209BE51C300BE518200BE520309BE524209BE523
-S219023A0414300BE510200BE52C104BE2C2FEFFEB00A81BE90D86
-S219023A19C0A0E1F0DF2DE904B04CE20060A0E1060051E10670FA
-S219023A2E41800170A091000057E30290A0E13B0000DA0000595E
-S219023A43E30300000AE4009FE5061069E0D7FFFFEB020000EA04
-S219023A58D4009FE50610A0E1D3FFFFEB0050A0E3108047E2100B
-S219023A6DA086E2070055E1030000AAB8009FE50510D6E7CBFF73
-S219023A82FFEB010000EAAC009FE5C8FFFFEBC54FA0E105306444
-S219023A97E00130C3E3053063E0010053E30100001A90009FE57E
-S219023AACC0FFFFEBA43EA0E1033085E00730C3E3053063E007FE
-S219023AC10053E30100001A70009FE5B8FFFFEB015085E20F003C
-S219023AD655E3E4FFFFDA60009FE5B3FFFFEB0050A0E307005531
-S219023AEBE1040000AA0510D6E7203041E25E0053E32E10A083F6
-S219023B00000000EA2010A0E338009FE5A8FFFFEB015085E20FF8
-S219023B150055E3F2FFFFDA28009FE5A3FFFFEB0A60A0E10070FF
-S219023B2A58E2C3FFFFCAF0AF1BE90CE8020014E802001CE8021D
-S219023B3F0020E8020024E8020028E802002CE802000DC0A0E1DC
-S219023B5400D82DE90020A0E304B04CE2ACFFFFEB00A81BE90D94
-S219023B69C0A0E100D82DE904B04CE2FAFCFFEB00A81BE90DC0D6
-S219023B7EA0E100D82DE9030040E204B04CE2040050E300F19FEE
-S219023B9397080000EAAC3B0200AC3B0200AC3B0200B43B0200E1
-S219023BA8B43B02000A00A0E300A81BE90200A0E300A81BE905A1
-S219023BBD00A0E300A81BE90DC0A0E100D82DE90C309FE50020A1
-S219023BD293E504B04CE2440092E500A81BE958C203000DC0A08C
-S219023BE7E100D82DE90010A0E10F00A0E304B04CE291F9FFEB7A
-S219023BFC00A81BE90DC0A0E110D82DE904B04CE20040A0E119F9
-S219023C1100A0E382F9FFEB0020A0E3244EA0E10F0054E304F1DE
-S219023C269F97560000EA6C3C0200783C0200803C02008C3C0224
-S219023C3B00943C02009C3C0200A83C0200B43C0200C43C0200E7
-S219023C50D83C0200E83C0200083D0200283D0200543D02007C5F
-S219023C653D0200843D0200202FA0E1012002E2430000EA202FF0
-S219023C7AA0E10D0000EAA02EA0E1012002E23E0000EAA02EA0CC
-S219023C8FE1080000EAA02FA0E13A0000EA0020E0E1A22FA0E19F
-S219023CA4370000EA202EA0E1012002E2340000EA202EA0E10121
-S219023CB92022E2012002E2300000EA062200E2020252E3002049
-S219023CCEA0130120A0032B0000EA062200E2022252E20120A02B
-S219023CE313270000EA092200E2000052E30030A0130130A003A8
-S219023CF8090252E30320A0110120A0031F0000EA092200E201C1
-S219023D0D0252E30030A0130130A003020152E30320A01101207F
-S219023D22A003170000EA093200E2000053E309025313202FA02E
-S219023D37E1012022E20030A0130130A003000053E30120021248
-S219023D4C0020A0030C0000EA093200E2010253E30201531320C3
-S219023D612FA0E10030A0130130A003000053E301200202012063
-S219023D76A013020000EA0120A0E3000000EA0020A0E30200A0BF
-S219023D8BE110A81BE90DC0A0E130D82DE904B04CE20050A0E160
-S219023DA00F0005E21EF9FFEB0040A0E1100015E30200001A3EED
-S219023DB53D05E2C303A0E1020000EA0F0C05E22004A0E115F9E6
-S219023DCAFFEB603005E2C332A0E1030053E303F19F9713000090
-S219023DDFEAF03D0200F83D0200003E0200083E02001440A0E11B
-S219023DF40D0000EA3440A0E10B0000EA5440A0E1090000EA00CA
-S219023E090050E30600001AA440A0E11900A0E301F9FFEB020261
-S219023E1E10E3023184E30340A011000000EA7440A0E10400A044
-S219023E33E130A81BE90DC0A0E1F0D82DE904B04CE20040A0E1E7
-S219023E480150A0E1033305E2233DA0E1030053E303F19F97B972
-S219023E5D0000EA703E0200F03F0200A440020000400200D8225C
-S219023E729FE5FF32C5E3020053E10200001A0F0005E2E6F8FFB2
-S219023E87EBF0A81BE9047084E20F3A05E20F0A53E35200001AD3
-S219023E9CB0329FE5B0229FE5033005E0020053E14D00000A0F9A
-S219023EB10805E22008A0E1D9F8FFEB0060A0E1020415E30400BF
-S219023EC6001A050AA0E1200AA0E1AEFFFFEB0040A0E103000030
-S219023EDBEAFF4005E20F3C05E2A333A0E17443A0E11E3605E2BF
-S219023EF0A33AA0E10F0053E303F19F97390000EA403F020048FD
-S219023F053F0200503F0200583F0200603F0200683F0200843F28
-S219023F1A0200A83F0200E83F0200E83F0200E83F0200E83F02FC
-S219023F2F00CC3F0200D43F0200DC3F0200E43F0200047006E0B8
-S219023F44270000EA047026E0250000EA067064E0230000EA04FC
-S219023F597066E0210000EA047086E01F0000EA1900A0E3ACF868
-S219023F6EFFEBA00EA0E1010000E2043086E0007083E0180000B6
-S219023F83EA1900A0E3A5F8FFEBA00EA0E1010000E2063064E089
-S219023F98000050E30370A011017043020F0000EA1900A0E39CCF
-S219023FADF8FFEBA00EA0E1010000E2043066E0000050E30370E4
-S219023FC2A01101704302060000EA047086E1040000EA0470A0AF
-S219023FD7E1020000EA0470C6E1000000EA0470E0E10700A0E13F
-S219023FECF0A81BE964219FE5023005E0020053E10100001A04A8
-S2190240010084E2F0A81BE9010615E3FBFFFF0A0F3A05E20F0A56
-S21902401653E3F8FFFF1A0F4805E22408A0E17EF8FFEB08308045
-S21902402BE20F0854E30060A0110360A001010415E31600000A17
-S219024040020415E30900001A020515E30300000A053AA0E12354
-S2190240553AA0E1036086E00E0000EA053AA0E1233AA0E10660CF
-S21902406A63E00A0000EA020515E30400000A050AA0E1200AA09C
-S21902407FE142FFFFEB006086E0030000EA050AA0E1200AA0E12B
-S2190240943DFFFFEB066060E0000096E5F0A81BE9027415E21AA6
-S2190240A900001A010615E3D2FFFF0A020915E3D0FFFF0A0F48D6
-S2190240BE05E22408A0E156F8FFEB083080E20F0854E30060A032
-S2190240D3110360A00107C0A0E10C20A0E178309FE5020505E2AD
-S2190240E8031005E05132A0E1010013E301C08C12012082E20ED7
-S2190240FD0052E3F9FFFFDA000050E30C618610E2FFFF1A04600D
-S21902411246E2E0FFFFEA0500A0E1B7FEFFEB000050E3B5FFFF96
-S2190241270AFF34C5E30311A0E1020515E33F0381E308008012C3
-S21902413C08008102000084E0F0A81BE90000A0E3F0A81BE910AD
-S219024151FF2F010000BF0F00000F0110000002FFFF00000DC068
-S219024166A0E170D82DE90118A0E14128A0E1211EA0E1041041C5
-S21902417BE204B04CE20060A0E1023086E2015083E30B0051E3F3
-S21902419001F19F973E0000EAC841020094420200944202009474
-S2190241A542020094420200944202009442020094420200944284
-S2190241BA0200F441020028420200604202000228A0E1C8309F5E
-S2190241CFE52208A0E1033002E0470453E32C00001A780000E20E
-S2190241E4A001A0E10DF8FFEB0050A0E1270000EA0238A0E10F02
-S2190241F90403E20002A0E12348A0E17DFEFFEB000050E320009A
-S21902420E000AFF3004E28300A0E1800014E3800BE011A00BE0F3
-S21902422311090000EA0238A0E1020313E32318A0E11600001AD9
-S219024238813AA0E1A33AA0E18300A0E1010B11E3800AE011A0B1
-S21902424D0AE011043080E2033086E0015083E30C0000EA3E1B25
-S219024262E0E30228A0E1013802E02302A0E1010312E38004E0B4
-S21902427711A004E011B230D6E1013003E0830080E1042080E26E
-S21902428C022086E0015082E30500A0E170A81BE9000087FF0DA3
-S2190242A1C0A0E130D82DE90F00A0E304B04CE2DBF7FFEB004032
-S2190242B6A0E11900A0E3D8F7FFEB200010E30600000A0400A04F
-S2190242CBE1B010D0E1A3FFFFEB88309FE5000083E580109FE541
-S2190242E00F0000EA005094E50500A0E143FEFFEB000050E30616
-S2190242F500000A0400A0E10510A0E15C409FE5CBFEFFEB0000B5
-S21902430A84E550109FE5030000EA48209FE5043084E20210A025
-S21902431FE1003082E5004091E5010014E30600000A30309FE568
-S2190243340120C4E3B000D2E128109FE5B000C3E1B010C2E1309F
-S219024349A81BE91C309FE5002094E518109FE5002083E50010FF
-S21902435E84E530A81BE9400403002C320300BEBEFFFF2832037F
-S21902437300FEDEFFE70DC0A0E100D82DE944309FE50300A0E1B4
-S219024388001093E504B04CE2000051E30B00000A010011E3046D
-S21902439D00000A28209FE5B020D2E10130C1E3B020C3E1020060
-S2190243B200EA18309FE5002093E5002081E50030A0E3003080B8
-S2190243C7E500A81BE9400403002C320300283203000DC0A0E1F6
-S2190243DC00D82DE904B04CE200A81BE90DC0A0E100D82DE90409
-S2190243F1B04CE200A81BE90DC0A0E100D82DE90F00A0E304B0A4
-S2190244064CE285F7FFEB0C309FE5030050E10000A0130100A0BE
-S21902441B0300A81BE9280602000DC0A0E110D82DE90F00A0E3C8
-S21902443004B04CE27AF7FFEB0040A0E11900A0E377F7FFEB205E
-S2190244450010E302408412044084020F00A0E30410A0E179F72F
-S21902445AFFEB10A81BE90DC0A0E100D82DE964109FE504B04C6C
-S21902446FE260C09FE500209CE50030A0E3003081E5030052E18B
-S2190244841100001A010010E30600000A00008CE540309FE50187
-S21902449900C0E3B020D0E1B420CCE1B030C0E1040000EA0000F3
-S2190244AE8CE528209FE5003090E504308CE5002080E50300A043
-S2190244C3E381F9FFEB0300A0E34CF9FFEB00A81BE944040300EA
-S2190244D830320300BEBEFFFFFEDEFFE70DC0A0E100D82DE96C7F
-S2190244ED309FE504B04CE200C093E500005CE30100000A00009B
-S219024502A0E300A81BE954209FE5001092E50130C1E3030050C7
-S219024517E10E00001A010011E30200000AB430D2E1B030C0E166
-S21902452C010000EA043092E5003080E50030A0E3003082E503FB
-S21902454100A0E361F9FFEB0300A0E32CF9FFEB0100A0E300A8D6
-S2190245561BE90C00A0E100A81BE944040300303203000DC0A0EF
-S21902456BE130D82DE984209FE50030A0E380509FE504B04CE224
-S219024580001095E50040A0E1003082E5030051E10100000A01FC
-S21902459500A0E1D1FFFFEB003095E5000053E31300001A1900A9
-S2190245AAA0E31CF7FFEB200010E30600000A013084E300308505
-S2190245BFE53C209FE5B030D4E1B430C5E1B020C4E1040000EA99
-S2190245D4004085E528209FE5003094E5043085E5002084E50382
-S2190245E900A0E337F9FFEB0300A0E302F9FFEB30A81BE944048A
-S2190245FE030030320300BEBEFFFFFEDEFFE70DC0A0E100D82DAA
-S219024613E910309FE5000093E504B04CE2000050E20100A0139E
-S21902462800A81BE9303203000DC0A0E100D82DE9001090E500A4
-S21902463D00A0E30C0081E51C30A0E31C3081E50820A0E3002020
-S21902465281E504B04CE2040081E5173043E2083081E505204229
-S219024667E20C2081E500A81BE90DC0A0E100D82DE9000090E566
-S21902467CFF1001E2203090E504B04CE2040013E30200001A2053
-S2190246913090E5040013E3FCFFFF0A141080E500A81BE90DC068
-S2190246A6A0E100D82DE9000090E5203090E504B04CE202301328
-S2190246BBE20500000A143090E50030C1E50420A0E31C2080E51B
-S2190246D00100A0E300A81BE90300A0E100A81BE90DC0A0E130F0
-S2190246E5D82DE904B04CE204D04DE20050A0E115404BE205008E
-S2190246FAA0E10410A0E1E7FFFFEB000050E3FAFFFF0A15005B19
-S21902470FE530A81BE90DC0A0E170D82DE904B04CE20160A0E15D
-S2190247240240A0E10430A0E1014044E2000053E30050A0E1068D
-S21902473900000A0110D6E40500A0E1C9FFFFEB0430A0E1014061
-S21902474E44E2000053E3F8FFFF1A70A81BE90DC0A0E170D82D04
-S219024763E904B04CE20160A0E10240A0E10430A0E1014044E2AE
-S219024778000053E30050A0E10600000A0500A0E1D4FFFFEB04C7
-S21902478D30A0E1014044E20100C6E4000053E3F8FFFF1A70A8EF
-S2190247A21BE90DC0A0E1F0D82DE904B04CE20050A0E10430954F
-S2190247B7E50160A0E13C709FE5033183E08340A0E1030000EA27
-S2190247CC483097E56400A0E30FE0A0E103F0A0E10500A0E10686
-S2190247E110A0E1AEFFFFEB000050E30200001A014044E20100DD
-S2190247F674E3F3FFFF1AF0A81BE9500000000DC0A0E10E002DD0
-S21902480BE910D82DE910B04CE204309BE50040A0E3043043E2EC
-S219024820030053E303F19F971E0000EA644802003C480200904D
-S2190248354802009C48020054209FE50130A0E3003082E50010E4
-S21902484A90E50C3091E5083083E30C3081E5080090E5F2EFFF8E
-S21902485FEB100000EA2C209FE5004092E50030A0E3003082E587
-S219024874001090E50C3091E50830C3E30C3081E5080090E5DB19
-S219024889EFFFEB050000EA084090E5030000EA60040300083002
-S21902489E9BE5044090E5043080E50400A0E110A81BE90DC0A07E
-S2190248B3E170D82DE904B04CE204D04DE200C090E520409CE5AF
-S2190248C814309CE519304BE50420A0E31C208CE50050A0E30867
-S2190248DD0090E50160A0E1830000EB005086E5020014E3060040
-S2190248F2000A19004BE20110A0E33BFAFFEB050050E10130A0A0
-S21902490713003086150150A0E30500A0E170A81BE90DC0A0E1F2
-S21902491C70D82DE984509FE50000E0E3343095E504B04CE20F37
-S219024931E0A0E103F0A0E170409FE50060A0E10400A0E139FFC3
-S219024946FFEB343095E50000A0E30FE0A0E103F0A0E11410956D
-S21902495BE550309FE550209FE5004081E5043081E548309FE527
-S219024970082081E50C3081E540209FE540309FE5102081E51479
-S2190249853081E538209FE538309FE5182081E51C3081E5342014
-S21902499A95E50600A0E10FE0A0E102F0A0E170A81BE9500000B1
-S2190249AF0048040300144702005C47020070460200E0460200BB
-S2190249C404480200B0480200A44702000DC0A0E100D82DE91C4A
-S2190249D9209FE5003092E504B04CE2000053E30200001A013012
-S2190249EEA0E3003082E5C7FFFFEB00A81BE9640403000DC0A05F
-S219024A03E130D82DE970E09FE500309EE504B04CE2000053E3F9
-S219024A181700000A0E50A0E100000FE100400FE1C04084E304F7
-S219024A2DF029E100E095E514309EE5003085E518109EE50020ED
-S219024A42A0E318208EE500300FE1C04000E2C030C3E3043083DB
-S219024A57E103F029E100009EE510209EE50CC09EE50FE0A0E170
-S219024A6C0CF0A0E1003095E5000053E3E8FFFF1A30A81BE938BD
-S219024A813203000DC0A0E100D82DE904B04CE20C209FE50030E6
-S219024A9692E5013083E2003082E500A81BE9D0C203000DC0A0B2
-S219024AABE110D82DE904B04CE234409FE5003094E5010053E356
-S219024AC00000001ACDFFFFEB0030A0E3003084E51C309FE500EE
-S219024AD52093E5000052E30200000A0130A0E3003084E5F2FFAE
-S219024AEAFFEA10A81BE9D0C20300383203000DC0A0E100D82DB6
-S219024AFFE904B04CE254EFFFEB00A81BE90DC0A0E100D82DE9BB
-S219024B1404B04CE25CEFFFEB00A81BE90DC0A0E1F0DF2DE9008F
-S219024B2900E0E301DC4DE2C0619FE5343096E504B04CE20FE04C
-S219024B3EA0E103F0A0E10090A0E1343096E50000A0E30FE0A064
-S219024B53E103F0A0E19C019FE59C319FE50050A0E3005083E5F4
-S219024B68482096E590719FE50FE0A0E102F0A0E1005087E584A6
-S219024B7D019FE584119FE584219FE584419FE50234A0E3003023
-S219024B9284E5D31000EB78019FE5D11000EB74019FE50020945A
-S219024BA7E5001097E56C419FE5CC1000EB68219FE568319FE55F
-S219024BBC0180A0E364A19FE54A7F4BE2005083E5020054E10269
-S219024BD150A0E10300000A0FE0A0E104F094E4050054E1FBFFDA
-S219024BE6FF1A0A50A0E1006095E5000056E30F00000A30419F83
-S219024BFBE530019FE5001094E5B71000EB0700A0E1002094E5A8
-S219024C10011CA0E30040A0E3823262E0032182E0004085E5827D
-S219024C2521A0E1161200EB020070E30040850500608A150000A0
-S219024C3A58E30200000AF0009FE50080A0E3A61000EB0740A018
-S219024C4FE10400A0E1011CA0E3FA20A0E3091200EB000050E36D
-S219024C64050000AACC309FE5002093E5000052E3EFFFFF0ADC65
-S219024C791500EBEDFFFFEA0600001A6C209FE5343092E5090036
-S219024C8EA0E10FE0A0E103F0A0E15FEEFFEBE5FFFFEA0400A0FD
-S219024CA3E1A41000EB000050E30F0000DA88509FE50400A0E178
-S219024CB884409FE50510A0E10420A0E1210000EB003050E204EB
-S219024CCD00000A000095E50410A0E10FE0A0E10CF093E50200CC
-S219024CE200EA5C009FE50710A0E17D1000EB0180A0E3CFFFFF0B
-S219024CF7EA50000000400D0300E0C203007CC3030000E9020045
-S219024D0C30E902003CE90200E4C2030048E902006CE90200AC6A
-S219024D21060300B406030074C3030084C30300E8C2030078E91E
-S219024D360200B4E90200BCC4030078C30300F0C20300C0E9029F
-S219024D4B00F0AF1BE90DC0A0E1F0DD2DE904B04CE20040A0E1D5
-S219024D600050A0E30170A0E10260A0E1D4809FE5D4A09FE5219E
-S219024D750000EA054186E7200052E3015085E21A0000EA220052
-S219024D8A53E31200001A052186E0043012E5040053E1014084F7
-S219024D9F02044002050030D4E5000053E3220053130300000AF7
-S219024DB40130F4E5000053E322005313FBFFFF1A0030D4E5001F
-S219024DC90053E30900001A78009FE5431000EB000000EA014010
-S219024DDE84E20030D4E5FF2003E2000052E30300000A200052B2
-S219024DF3E3E3FFFF1A0030A0E30130C4E40030D4E5000053E31B
-S219024E080800000A200053E30200001A0130F4E5200053E3FCAE
-S219024E1DFFFF0A0030D4E5FF2003E2000052E3D1FFFF1A005016
-S219024E3287E50800A0E1002096E50A10A0E1030000EBF0AD1B93
-S219024E47E99C0503000C060300D8E902000DC0A0E1F0DF2DE9B7
-S219024E5C04B04CE20040A0E10280A0E10800A0E101A0A0E131B8
-S219024E711000EB0450A0E10A0055E10090A0E12C00000A0800C6
-S219024E86A0E1001095E50920A0E1801000EB000050E32300008A
-S219024E9B1A000095E5251000EB090050E11D0000DA0170A0E322
-S219024EB00A0054E11400000A040055E10F00000A0800A0E100AD
-S219024EC51094E50920A0E1711000EB006050E20900001A00007D
-S219024EDA57E30400000A58009FE50810A0E1002095E50670A04F
-S219024EEFE1FC0F00EB48009FE5001094E5F90F00EB104084E2D2
-S219024F040A0054E1EAFFFF1A000057E30300001A2C009FE5F257
-S219024F190F00EB0700A0E1F0AF1BE90500A0E1F0AF1BE91050CE
-S219024F2E85E20A0055E1D2FFFF1A0000A0E3F0AF1BE9ECE902D9
-S219024F430014EA020018EA02000DC0A0E170D82DE904B04CE2C0
-S219024F580040A0E10150A0E130009FE50260A0E1DE0F00EB0536
-S219024F6D0054E10700000A20009FE5002094E5083094E50610DE
-S219024F82A0E1D70F00EB104084E2050054E1F7FFFF1A70A81B8F
-S219024F97E91CEA020024EA02000DC0A0E100D82DE90010C0E50C
-S219024FAC0C0080E904B04CE204309BE50C3080E508209BE51085
-S219024FC12080E50C309BE5143080E500A81BE90DC0A0E1F0DF21
-S219024FD62DE904B04CE20CD04DE200C0A0E334C00BE50CE09B0E
-S219024FEBE501A0A0E32C000BE50A005EE100C0A01301C0A00365
-S21902500008E09BE50180A0E130300BE500005EE300C0A0030036
-S219025015005CE334101B1500108E1534301BE504C09BE5304001
-S21902502A1BE50C0053E1110000AA03C0A0E104009BE5103094D3
-S21902503FE5000053E300C08315041094E5000051E30600001A01
-S219025054083094E5000053E30100000A020053E30100001A0CEF
-S2190250693094E5001083E5184084E2010050E2EFFFFF1A2CE006
-S21902507E1BE50270A0E10E0057E1870000AA071198E70030D114
-S219025093E52D0053E35300001A0050A0E330401BE50500A0E183
-S2190250A804209BE5016087E20190D1E5020055E1440000AA0011
-S2190250BD30D4E5030059E13C00001A103094E5000053E3060066
-S2190250D2000A003093E5000053E30300000A94019FE5141094FC
-S2190250E7E500A0A0E37D0F00EB043094E5000053E32000000A21
-S2190250FC070198E70230D0E53D0053E3035080020200000A07CF
-S2190251113188E0017087E2045093E5082094E5000052E302006B
-S219025126000A010052E30C00000A0D0000EA0500A0E10C1094EA
-S21902513BE50230A0E15D0000EB006050E20700001A2C019FE514
-S2190251500510A0E1142094E506A0A0E1610F00EB010000EA0C87
-S2190251653094E5005083E5102094E50130A0E3003082E5036076
-S21902517A87E00C0000EA083094E5000053E30200000A02005374
-S21902518FE30400000A060000EA0C2094E5003092E5013083E241
-S2190251A4010000EA0C2094E50130A0E3003082E50150A0E3043C
-S2190251B90000EA010080E204309BE5184084E2030050E1BAFF2E
-S2190251CEFFBA000055E33000001A0910A0E1A0009FE505A0A087
-S2190251E3E13F0F00EB2B0000EA08C09BE500005CE32400000ACC
-S2190251F834E01BE500005EE30300000A10109BE578009FE5009D
-S21902520DA0A0E3340F00EB0C109BE5000051E30200000A010057
-S21902522251E30D00000A0F0000EA08109BE50C209BE507019848
-S219025237E70230A0E11E0000EB004050E20800001A30009FE570
-S21902524C10209BE5071198E704A0A0E1220F00EB020000EA07CB
-S2190252613198E708209BE5003082E50130A0E334300BE50360D7
-S21902527687E0070000EA30EA020040EA02005CEA020070EA02D8
-S21902528B0020009FE5016087E2130F00EB08A09BE52CC01BE578
-S2190252A00670A0E10C0057E177FFFFBA0A00A0E1000000EA8093
-S2190252B5EA0200F0AF1BE90DC0A0E1F0D92DE904B04CE200C07F
-S2190252CAA0E10140A0E30A50A0E30060A0E30180A0E10270A0AF
-S2190252DFE10000DCE503E0A0E1200050E30200001A0130FCE52C
-S2190252F4200053E3FCFFFF0A0030DCE5000053E33F00000A00D4
-S2190253090054E30B00000AFF3003E2300053E30800001A01306F
-S21902531EDCE5411043E2202083E2FF2002E2190051E30230A075
-S21902533391780053E31050A00302C08C020040A0E30110DCE438
-S2190253480400A0E1302041E2413041E2050053E30900528302A2
-S21902535D00009A613041E2050053E30000008A0100A0E300009D
-S21902537250E31300000A0000A0E3302041E2FF3002E20900536A
-S219025387E30200A0910600009A613041E2050053E3570041923B
-S21902539C0200009A413041E2050053E337004192050050E10446
-S2190253B10000AA0030DCE5950626E0000053E3D0FFFF1A0F0077
-S2190253C600EA00005EE30B00000A0E20A0E10030D2E5010000F4
-S2190253DBEA0130F2E5FF3003E2000053E30100000A030051E13A
-S2190253F0F9FFFF1A0030D2E5000053E30100001A0000A0E3F0E5
-S219025405A91BE9006088E5000057E300C087150100A0E3F0A95E
-S21902541A1BE90DC0A0E100D82DE90030D0E504B04CE2200053FC
-S21902542FE30200001A0130F0E5200053E3FCFFFF0A0000D0E54D
-S219025444540050E30030A0130130A003740050E30130A0030093
-S2190254590053E30400001A460050E3660050130200000A030092
-S21902546EA0E100A81BE90130A0E3003081E50100A0E300A81B64
-S219025483E90DC0A0E110D82DE9020050E304B04CE20140A0E1FF
-S2190254985A00001A040094E56C119FE5CE0E00EB000050E310FC
-S2190254AD00001A00C00FE100400FE1C04084E304F029E1101F55
-S2190254C211EE011A81E3031081E3101F01EE101F11EE0F1081ED
-S2190254D7E3101F01EE00300FE1C0400CE2C030C3E3043083E17C
-S2190254EC03F029E110A81BE9040094E518119FE5B80E00EB0010
-S2190255010050E33B00001A00C00FE100400FE1C04084E304F0CB
-S21902551629E10E02A0E3021A80E2202090E4000031E1FCFFFF9E
-S21902552B1A160F07EE9A0F07EE0000A0E10000A0E10000A0E10F
-S2190255400000A0E10000A0E10000A0E1101F11EE011AC1E310CF
-S2190255551F01EE151F07EE0000A0E10000A0E10000A0E1000080
-S21902556AA0E10000A0E10000A0E1101F11EE0C10C1E3101F0184
-S21902557FEE161F07EE0E02A0E3021A80E2202090E4000031E121
-S219025594FCFFFF1A160F07EE9A0F07EE0000A0E10000A0E1002D
-S2190255A900A0E10000A0E10000A0E10000A0E1151F07EE151F85
-S2190255BE08EE0000A0E10000A0E10000A0E10000A0E10000A037
-S2190255D3E10000A0E1161F07EE171F08EE00300FE1C0400CE2F6
-S2190255E8C030C3E3043083E103F029E110A81BE91C009FE5041C
-S2190255FD1094E5380E00EB10A81BE910009FE5350E00EB10A8A2
-S2190256121BE9ACEA0200B0EA0200B4EA0200CCEA02000DC0A07F
-S219025627E130D82DE934309FE504B04CE230409FE50350A0E1D6
-S21902563C030054E10700000A24009FE5041094E5002094E50833
-S2190256513094E5230E00EB104084E2050054E1F7FFFF1A30A8A1
-S2190256661BE90C0603009C050300D8EA02000DC0A0E130D82D24
-S21902567BE904B04CE208D04DE20050A0E1010055E30140A0E175
-S219025690020000CA64009FE5120E00EB1F0000EA18104BE200E1
-S2190256A520A0E3040094E50230A0E101FFFFEB000050E30300F6
-S2190256BA001A40009FE5041094E5070E00EB140000EA02005514
-S2190256CFE30D0000DA1C104BE20020A0E3080094E50230A0E1C5
-S2190256E4F4FEFFEB000050E30800001A10009FE5081094E5FA5A
-S2190256F90D00EB070000EAE8EA020000EB02001CEB0200203092
-S21902570EA0E31C300BE518001BE51C101BE5221000EB30A81B6C
-S219025723E90DC0A0E170D82DE904B04CE23CD04DE23C304BE21F
-S21902573840204BE200308DE50040A0E104208DE530604BE2848E
-S21902574D319FE50600A0E108308DE50150A0E178319FE57710D4
-S219025762A0E300C093E50120A0E344C00BE50030A0E309FEFF1F
-S219025777EB0120A0E300208DE544304BE204308DE50010A0E31B
-S21902578C08108DE548319FE50400A0E10C308DE50510A0E106AB
-S2190257A130A0E109FEFFEB000050E34D00000A40301BE5000050
-S2190257B653E30C00000A20019FE544101BE53C201BE5C60D0063
-S2190257CBEB38004BE23C201BE50810A0E3823262E0032182E0FF
-S2190257E08221A0E1270F00EB020070E33D00000A44301BE50058
-S2190257F5C00FE100400FE1C04084E304F029E10E02A0E3021AA4
-S21902580A80E2202090E4000031E1FCFFFF1A160F07EE9A0F077C
-S21902581FEE0000A0E10000A0E10000A0E10000A0E10000A0E1FA
-S2190258340000A0E1101F11EE011AC1E3101F01EE151F07EE00A3
-S21902584900A0E10000A0E10000A0E10000A0E10000A0E10000BE
-S21902585EA0E1101F11EE0C10C1E3101F01EE161F07EE0E02A0C7
-S219025873E3021A80E2202090E4000031E1FCFFFF1A160F07EEC4
-S2190258889A0F07EE0000A0E10000A0E10000A0E10000A0E10062
-S21902589D00A0E10000A0E1151F07EE151F08EE0000A0E1000019
-S2190258B2A0E10000A0E10000A0E10000A0E10000A0E1161F0719
-S2190258C7EE171F08EE0FE0A0E103F0A0E1030000EA3CEB0200B1
-S2190258DC80C303004CEB020060EB020070A81BE90DC0A0E1007A
-S2190258F1D82DE908009FE504B04CE2790D00EB00A81BE9D0EB67
-S21902590602000DC0A0E1F0D92DE904B04CE20150A0E10070A092
-S21902591BE30530A0E1015045E2070053E10080A0E10260A0E140
-S219025930470000DA0FE0A0E108F0A0E1FF4000E20FE0A0E108B8
-S219025945F0A0E10010A0E3302044E2413044E2050053E30900F1
-S21902595A5283FFE000E20200009A613044E2050053E30000000D
-S21902596F8A0110A0E3000051E32F00000A00C0A0E330004EE2EE
-S219025984FF1000E241204EE2FF3002E2050053E3090051830258
-S21902599900009A61304EE2050053E30000008A01C0A0E300008E
-S2190259AE5CE32100000A0774A0E100C0A0E3301044E2FF30019E
-S2190259C3E2090053E301C0A0910600009A613044E2050053E323
-S2190259D857C044920200009A413044E2050053E337C04492008B
-S2190259ED10A0E3FF3000E2090053E30010A0910600009A613049
-S219025A024EE2050053E357104E920200009AFF3002E2050053CF
-S219025A17E337104E920C2281E1027087E1000056E30500000AB7
-S219025A2C003096E5023083E0003086E5010000EA0000E0E3F0E5
-S219025A41A91BE90530A0E1015045E2000053E3B7FFFFCA0700B2
-S219025A56A0E1F0A91BE90DC0A0E1F0DF2DE90120A0E304B04C3F
-S219025A6BE268D04DE288200BE50070A0E38C700BE50030E0E36C
-S219025A8090300BE50790A0E180100BE50080A0E1930000EA53F1
-S219025A950052E30300000A04029FE50710A0E10F0D00EB9100F9
-S219025AAA00EA0FE0A0E108F0A0E1027087E200C0A0E10800A049
-S219025ABFE10110A0E37C204BE20030A0E37C300BE5FF600CE2F1
-S219025AD48BFFFFEB004050E27CA04BE2030000AAC0019FE5078E
-S219025AE910A0E1FD0C00EB7F0000EA017087E2303046E2090048
-S219025AFE53E303F19F97620000EAD45C0200305B0200305B0294
-S219025B1300305B0200945C0200945C0200945C0200605C020055
-S219025B28605C0200605C02000800A0E12F1046E20A20A0E171D9
-S219025B3DFFFFEB0050A0E12F3047E288201BE5067083E08450B5
-S219025B520BE5000052E30A00000A80301BE5000053E304000014
-S219025B670A039065E03C019FE50910A0E1DB0C00EB000000EA29
-S219025B7C80901BE50020A0E388200BE524319FE5001093E50958
-S219025B915085E090301BE5052069E0030052E10230A03190301C
-S219025BA60BE5010055E10300003A00319FE5002093E5020055DB
-S219025BBBE10300009AF4009FE50510A0E1C60C00EB480000EA53
-S219025BD02E3084E2034066E0047087E00430A0E1014044E20075
-S219025BE50053E3080000DA0800A0E10110A0E30A20A0E142FF83
-S219025BFAFFEB0430A0E1014044E20100C5E4000053E3F6FFFFB5
-S219025C0FCA0800A0E10110A0E30020A0E339FFFFEB017087E2F3
-S219025C240000E0E17C205BE5FF3000E27C200BE5020053E102F2
-S219025C3900000A84101BE578009FE5A70C00EB8C201BE5053036
-S219025C4E69E0020053E10320A0218C200BE51C0000EA0800A08D
-S219025C63E13B1066E20A20A0E125FFFFEB4C309FE590201BE548
-S219025C780050A0E144009FE5005083E58C301BE50510A0E195D8
-S219025C8D0C00EB170000EA0710A0E12C009FE50620A0E1900C78
-S219025CA200EB120000EAECEB020018EC02003CEC02007CC303B4
-S219025CB700E4C2030054EC020090EC020080C30300CCEC020068
-S219025CCCF4EC0200017087E20FE0A0E108F0A0E10A0050E3FAE0
-S219025CE1FFFF1A0FE0A0E108F0A0E1002050E267FFFFCAF0AF86
-S219025CF61BE90DC0A0E130D82DE9B4309FE504B04CE2085193EC
-S219025D0BE50340A0E1000055E32100001A143194E5000053E36C
-S219025D200900000A183194E590209FE50310D2E78C009FE50181
-S219025D353083E2183184E5690C00EB183194E5060053E3185144
-S219025D4A84850C3194E5FF0053E3060000CA143194E500005368
-S219025D5FE30100000A5C009FE55E0C00EB0000E0E330A81BE966
-S219025D74043084E20300A0E1011CA0E3043184E5112E84E20F03
-S219025D89E0A0E100F094E50C0184E5080184E5000050E3EDFF2D
-S219025D9EFFBA083194E5042194E5013043E2083184E50100D215
-S219025DB3E4042184E530A81BE93C3203006804030020ED020097
-S219025DC824ED02000DC0A0E100D82DE920309FE504B04CE200BA
-S219025DDDC0A0E308C183E5012CA0E30C2183E5000083E5141164
-S219025DF283E518C183E500A81BE93C3203000DC0A0E100D82D7C
-S219025E07E914309FE5042083E2042183E50C1193E504B04CE241
-S219025E1C081183E500A81BE93C3203000DC0A0E1F0DD2DE90C8F
-S219025E3120A0E304B04CE2C0D04DE20080A0E130604BE206004D
-S219025E46A0E10040A0E3B8400BE50170A0E1D0400BE50410A06E
-S219025E5BE1BF0C00EB0150A0E3BA524BE1BC424BE1B0304BE251
-S219025E7000308DE504A0A0E104A08DE538339FE50C20A0E3B8E3
-S219025E85224BE17610A0E308308DE5AC404BE224339FE5040008
-S219025E9AA0E114C093E50A20A0E130C00BE50230A0E33BFCFFA9
-S219025EAFEBB4304BE200308DE594004BE200339FE57210A0E3BC
-S219025EC408308DE50A20A0E104A08DE50230A0E331FCFFEBB8D3
-S219025ED9304BE200308DE5BC204BE204208DE57C004BE2D43260
-S219025EEE9FE56210A0E308308DE50520A0E10A30A0E126FCFFF3
-S219025F03EBC0304BE200308DE5C4204BE204208DE564004BE2A0
-S219025F18AC329FE56D10A0E308308DE50520A0E10530A0E11BEA
-S219025F2DFCFFEBC8304BE200308DE5CC204BE204208DE54C00B0
-S219025F424BE284329FE56810A0E308308DE50520A0E10530A0BC
-S219025F57E110FCFFEB0530A0E300308DE5D0204BE224008DE946
-S219025F6C0800A0E15C329FE50710A0E10C308DE50520A0E1048E
-S219025F8130A0E111FCFFEB000050E3AB00000ACC301BE5000078
-S219025F9653E30800000AC8001BE50610A0E1B01100EB0000504C
-S219025FABE30300001A20029FE5C8101BE5CA0B00EB9F0000EA13
-S219025FC0C4301BE5000053E31600000AC0001BE504129FE5021F
-S219025FD50C00EB000050E301A0A0031000000AC0001BE5F01167
-S219025FEA9FE5FC0B00EB000050E30700001AE4319FE500209385
-S219025FFFE500A0A0E1000052E30600001AD4019FE5B40B00EB28
-S219026014890000EACC019FE5C0101BE5B00B00EB850000EA00C7
-S219026029005AE30700001AD0301BE5000053E30400001AAC01FC
-S21902603E9FE5A80B00EBA8019FE5A60B00EB7B0000EA00005A9C
-S219026053E32900001A0610A0E10120A0E3D4404BE2D0001BE5BF
-S2190260680430A0E1F00D00EB005050E2070000AAD4001BE5D0A8
-S21902607D401BE5E90E00EB0020A0E168019FE50410A0E1940B23
-S21902609200EB690000EA5C019FE5B0101BE50A60A0E148FFFFE2
-S2190260A7EB50819FE534704BE2010000EA0650C7E7016086E214
-S2190260BC030056E30400008A0BFFFFEB005050E2F8FFFFAA10D8
-S2190260D13198E5D4300BE5000055E3070000AAD4001BE5D00E76
-S2190260E600EB0010A0E110019FE57C0B00EB0400A0E12D0E005B
-S2190260FBEB4F0000EA01005AE30200001AF8009FE5750B00EB24
-S2190261104A0000EA39FFFFEBB4301BE5000053E31100000ABC2C
-S219026125301BE5000053E30200001AD4009FE56B0B00EB3A00E9
-S21902613A00EAB8401BE5C8609FE5000000EA0150C4E4E9FEFFF2
-S21902614FEB005050E2FBFFFFAA0600A0E1B8101BE50420A0E130
-S2190261645F0B00EB2E0000EA33004BE29C109FE50320A0E3B2CA
-S2190261790B00EB000050E30200001A8C009FE5D7FDFFEB2500D2
-S21902618E00EA34305BE5530053E31F00001A33305BE53030435F
-S2190261A3E2090053E31B00008A64009FE5B8101BE528FEFFEB5A
-S2190261B81A0000EA80ED020090C3030088ED020098ED0200A85C
-S2190261CDED0200C8ED0200E0ED0200ECED020004EE02000CEE78
-S2190261E20200BCC4030014EE02003CEE020050EE020028ED0295
-S2190261F70064EE0200D49902003C3203007CEE0200A0EE02005C
-S21902620CCCEE0200F0EE020008EF0200F85C020018009FE534BB
-S219026221101BE52F0B00EB00005AE30300001AD4004BE2DE0DE6
-S21902623600EB000000EA0CEF0200F0AD1BE90DC0A0E100D82D86
-S21902624BE90010A0E118009FE504B04CE2220B00EB10009FE593
-S21902626010109FE510209FE537FBFFEB00A81BE96CF102002C77
-S2190262750503009C0503008CF102000DC0A0E1F0DF2DE904B0FB
-S21902628A4CE230D04DE20070A0E344304BE20060A0E140504B4B
-S21902629FE244700BE50500A0E100308DE50140A0E144329FE579
-S2190262B46610A0E308308DE50720A0E104708DE50230A0E334B4
-S2190262C9FBFFEB0130A0E388008DE80600A0E120329FE50410B2
-S2190262DEA0E10C308DE50220A0E308708DE50530A0E136FBFF00
-S2190262F3EB070050E1A000000A00029FE52F0D00EB070050E1DD
-S2190263080200001AF4019FE5F40A00EB990000EAEC019FE5F116
-S21902631D0A00EB44301BE5000053E31900000ADCC19FE5483009
-S2190263324BE2D8E19FE50320A0E1D4119FE50380A0E100409EF6
-S219026347E50C60A0E100009CE50EA0A0E1003091E5840080E02E
-S21902635C043043E2940301E09C1200EB005050E20D00000A48DA
-S219026371401BE50500A0E13E1300EB0410A0E10030A0E1900137
-S2190263869FE50520A0E1D50A00EB040000EA84019FE570619FA0
-S21902639BE570A19FE5D00A00EB48804BE274919FE50010A0E396
-S2190263B0004099E5012CA0E30400A0E1670B00EB60319FE50369
-S2190263C50093E8030084E8003096E5103084E5012CA0E314308A
-S2190263DA84E50050A0E3185084E50510A0E1024084E00400A0BA
-S2190263EFE15A0B00EB30C19FE50F009CE80F0084E8003096E533
-S21902640400209AE5023083E0103084E5143084E50510A0E11844
-S2190264195084E5012CA0E3024084E00400A0E14C0B00EBFCC0D5
-S21902642E9FE50F009CE804E0A0E10700AEE8F0609FE50130CE66
-S219026443E42324A0E10120CEE42338A0E10030CEE500209AE560
-S219026458003096E5823043E0103084E5182084E50510A0E114B4
-S21902646D3084E5012CA0E3024084E00400A0E1370B00EBB0C002
-S2190264829FE50F009CE804E0A0E10700AEE80130CEE42334A00B
-S219026497E10030CEE5017087E2003096E5017087E200109AE537
-S2190264AC017087E2036061E0106084E5017087E2146084E508BE
-S2190264C120A0E1181084E50600A0E1421200EB005050E218002D
-S2190264D6000A48401BE50500A0E1E41200EB0410A0E10030A04C
-S2190264EBE128009FE50520A0E17B0A00EB200000EA94F1020061
-S219026500BCEF0200C0F10200F0F10200FCF1020058330300605F
-S2190265153303006433030020F2020048F202006833030090F22A
-S21902652A020098F20200A8F202005C330300B8F202000600A047
-S21902653FE10724A0E1001099E50830A0E1721200EB005050E27B
-S2190265540900000A48401BE50500A0E1C41200EB0410A0E100B4
-S21902656930A0E108009FE50520A0E15B0A00EB000000EAC8F23F
-S21902657E0200F0AF1BE90DC0A0E170D82DE96C309FE56C009F85
-S219026593E508D04DE268409FE5001093E5002094E504B04CE2D1
-S2190265A8015062E04D0A00EB003094E50060A0E3230456E11404
-S2190265BD00002A0030D5E5FF0053E30700000A102085E20C10B5
-S2190265D292E800C08DE51C1095E504108DE524009FE50510A078
-S2190265E7E13E0A00EB016086E2003094E5015C85E2230456E1F0
-S2190265FC030000EA5C330300F8F20200603303003CF30200EA67
-S219026611FFFF3A70A81BE90DC0A0E170D82DE9B4309FE5B41041
-S2190266269FE504B04CE2B0C09FE5002093E5005091E500009C04
-S21902663BE50C60A0E1804082E00410A0E1050054E11C00002A3A
-S219026650003094E5010073E31500000A040051E10200000A7C51
-S219026665009FE50420A0E11D0A00EB0410A0E1050054E10B0004
-S21902667A002A003094E5010073E30800000A54309FE50020930D
-S21902668FE50320C2E3021081E0050051E10200002A003091E5C6
-S2190266A4010073E3F9FFFF1A0140A0E1E4FFFFEA003096E50336
-S2190266B930C3E3034084E0E0FFFFEA040051E10200000A14002A
-S2190266CE9FE50420A0E1030A00EB70A81BE9583303005C330353
-S2190266E3006033030068F302000DC0A0E130D82DE9BC309FE5CC
-S2190266F8BC409FE5002093E500E094E504B04CE2B0C09FE58EB1
-S21902670D2082E000E09CE50050A0E102C0A0E10E005CE11A0014
-S219026722002A0400A0E1003092E5010073E31100000A02005C35
-S219026737E10200000A02306CE0430151E11600009A02C0A0E172
-S21902674C0E005CE10700002A003090E50320C3E302C08CE00E0B
-S219026761005CE10200002A00309CE5010073E3F9FFFF1A0C206E
-S219026776A0E1020000EA003090E50330C3E3032082E00E005237
-S21902678BE1E5FFFF3A02005CE10500000A02306CE0430151E1B2
-S2190267A00200008A00C085E50100A0E330A81BE90000A0E33014
-S2190267B5A81BE958330300603303005C3303000DC0A0E1F0DF49
-S2190267CA2DE904B04CE2B8D04DE20040A0E3A8400BE5B0400B6E
-S2190267DFE50080A0E1B8400BE5A0604BE2C0400BE50600A0E12C
-S2190267F4C8400BE5A4304BE200308DE5A8204BE204208DE50162
-S21902680970A0E144339FE56210A0E308308DE50120A0E3043010
-S21902681EA0E1DEF9FFEBAC304BE200308DE5B0204BE204208DC3
-S219026833E588004BE21C339FE57210A0E308308DE50120A0E389
-S2190268480430A0E1D3F9FFEBB4304BE200308DE5B8204BE2040D
-S21902685D208DE570004BE2F4329FE56510A0E308308DE5012083
-S219026872A0E30430A0E1C8F9FFEB58004BE2C0304BE204308DC4
-S219026887E5BC504BE2D0329FE56610A0E308308DE50120A0E30A
-S21902689C00508DE50430A0E1BDF9FFEBC4304BE200308DE5C83E
-S2190268B1204BE204208DE540004BE2A4329FE56C10A0E30830EA
-S2190268C68DE50120A0E30430A0E1B2F9FFEB0530A0E300308DE1
-S2190268DBE5CC204BE204208DE5043043E208308DE50800A0E181
-S2190268F074329FE50710A0E10C308DE50220A0E30630A0E1B10F
-S219026905F9FFEB040050E10200001A58029FE54AFEFFEB0D0124
-S21902691A00EAA8301BE5000053E30500000AC8301BE50000530F
-S21902692FE30200000ACC301BE5000053E30200001A2C029FE55D
-S2190269443EFEFFEB010100EAC0301BE5000053E31800000ABC21
-S219026959001BE5E91000EB006050E20600001ABC001BE5C430DC
-S21902696E1BE5030080E0010040E2E21000EB006050E20D00000B
-S2190269830ABC401BE50600A0E1B91100EB0020A0E1DC019FE5B4
-S2190269980410A0E1510900EBD4019FE5D4319FE5D4C19FE5000E
-S2190269AD1093E500209CE54B0900EBE50000EAC4619FE5A4103A
-S2190269C21BE5003096E5BC419FE5030051E10400003AC4301B0B
-S2190269D7E5002094E5033081E0020053E10600003AA0019FE5F7
-S2190269EC3D0900EB84019FE5001096E5002094E5390900EBD331
-S219026A010000EACC001BE54B0900EB0F0050E30300009A78012C
-S219026A169FE51010A0E3310900EBCB0000EAC0301BE500005320
-S219026A2BE30800001AC4101BE50500A0E12BFFFFEB000050E3A9
-S219026A400300001A4C019FE5C4101BE5250900EBBF0000EA288E
-S219026A55319FE53C519FE53C419FE5001093E5002095E50080BC
-S219026A6AA0E3000094E5019062E00910A0E1980700EB00309558
-S219026A7FE50860A0E1007094E5230458E11700002A0030D7E5B7
-S219026A94FF0053E30F00000ACC001BE50710A0E1310900EB000F
-S219026AA90050E30A00001A102097E5BC301BE5030052E1890023
-S219026ABE001ADC009FE5CC101BE53D0B00EB000050E39F000061
-S219026AD30A0180A0E3040000EA016086E2003095E5017C87E252
-S219026AE8230456E1E7FFFF3ABC101BE5C4201BE5000058E30C1E
-S219026AFD00001A003095E594009FE50860A0E1007090E50200D1
-S219026B1200EA016086E2003095E5017C87E2230456E1020000C4
-S219026B272A0030D7E5FF0053E3F7FFFF1A0100A0E1021081E003
-S219026B3C011041E2701300EB008050E21700000A54009FE5E40C
-S219026B510800EB7E0000EA80F3020094F30200A8F30200BCF383
-S219026B660200D8F30200E0F30200ECF3020000F402001CF40286
-S219026B7B003CF40200583303005C3303007CC30300E4C20300C1
-S219026B9058F4020074F40200A4F402006033030068330300F86B
-S219026BA5F4020014F5020001A0A0E3BC001BE5D0404BE2C410E2
-S219026BBA1BE50420A0E1851000EB006050E20800000A0600A050
-S219026BCFE1D0401BE508A0A0E1261100EB0410A0E10030A0E128
-S219026BE408019FE50620A0E1BD0800EB00005AE30E00000ABCA0
-S219026BF9001BE5A4101BE5C4201BE5D0304BE2C31000EB00609D
-S219026C0E50E20700000AD0401BE50600A0E1151100EB0410A0CB
-S219026C23E10030A0E1C8009FE50620A0E1AC0800EB0700A0E1A9
-S219026C380010A0E3012CA0E3460900EBCC101BE50700A0E1D788
-S219026C4D0800EBBC301BE5B0201BE5103087E5000052E3050096
-S219026C62001AC0301BE5000053E3BC201B150200001AA4201BCF
-S219026C77E5000000EAAC201BE5B8301BE5142087E5000053E3A8
-S219026C8C0200001A64309FE5003093E5000000EAB4301BE51C26
-S219026CA13087E5C4301BE5183087E50900A0E1001095E5D0208F
-S219026CB64BE2471000EB006050E21000000AD0401BE50600A0F1
-S219026CCBE1E91000EB0410A0E10030A0E120009FE50620A0E157
-S219026CE0800800EB1A0000EA14009FE57D0800EB170000EA48D0
-S219026CF5F502006CF5020080C3030090F50200CCF402003C302E
-S219026D0A9FE5001093E50900A0E1002095E5D0304BE27E100082
-S219026D1FEB006050E20A00000AD0401BE50600A0E1D01000EB65
-S219026D340410A0E10030A0E10C009FE50620A0E1670800EB016B
-S219026D490000EA68330300B0F50200F0AF1BE90DC0A0E1F0D846
-S219026D5E2DE904B04CE254D04DE20040A0E30070A0E14C504B33
-S219026D73E254400BE50500A0E15C400BE550304BE200308DE53D
-S219026D8854204BE204208DE50160A0E128319FE56610A0E308F8
-S219026D9D308DE50120A0E30430A0E17CF8FFEB58304BE200309C
-S219026DB28DE55C204BE204208DE534004BE200319FE56C10A0E2
-S219026DC7E308308DE50120A0E30430A0E171F8FFEB0220A0E3D2
-S219026DDC14008DE8E4309FE50700A0E10C308DE50610A0E108A5
-S219026DF1408DE50530A0E174F8FFEB040050E10200001AC400B3
-S219026E069FE50DFDFFEB460000EA54301BE5000053E30200000C
-S219026E1B0A5C301BE5000053E30200001AA4009FE504FDFFEB60
-S219026E303D0000EA50001BE5B20F00EB005050E20600001A5031
-S219026E45001BE558301BE5030080E0010040E2AB0F00EB00502E
-S219026E5A50E20D00000A50401BE50500A0E1821000EB0020A080
-S219026E6FE160009FE50410A0E11A0800EB58009FE558309FE5B8
-S219026E8458C09FE5001093E500209CE5140800EB240000EA50C8
-S219026E99101BE558301BE50100A0E1031081E0011041E2951274
-S219026EAE00EB000050E30C00000A28009FE5090800EB190000D3
-S219026EC3EABCF30200D8F30200BCEF0200ECF30200D4F50200F2
-S219026ED81CF402003CF40200583303005C33030014F5020050DF
-S219026EED001BE558101BE560204BE2B70F00EB005050E2090038
-S219026F02000A60401BE50500A0E1591000EB0410A0E10030A08A
-S219026F17E108009FE50520A0E1F00700EB000000EA90F50200F8
-S219026F2CF0A81BE90DC0A0E1F0DF2DE904B04CE218D04DE20081
-S219026F4160A0E300608DE52C304BE204308DE50120A0E3082084
-S219026F568DE548319FE50C308DE5022082E00630A0E118F8FFB8
-S219026F6BEB060050E10200001A30019FE5B1FCFFEB660000EA30
-S219026F8028319FE528519FE528419FE5001093E5002095E50606
-S219026F9580A0E1000094E501A062E00A10A0E14D0600EB00604A
-S219026FAA94E50270A0E3026C86E2010000EA017087E2016C86CF
-S219026FBFE2EC909FE5003099E5230457E10D00002A0030D6E5A5
-S219026FD4FF0053E3F6FFFF0A2C001BE50610A0E1E10700EB00D8
-S219026FE90050E3F1FFFF1AC4009FE52C101BE5F10900EB0000E7
-S219026FFE50E34500000A0180A0E3000058E30300001AA8009F52
-S219027013E52C101BE5B20700EB3E0000EA100096E530704BE21C
-S219027028181096E50720A0E1690F00EB005050E20700000A30DB
-S21902703D401BE50500A0E10B1000EB0410A0E10030A0E16C00B9
-S2190270529FE50520A0E1A20700EB0600A0E1FF10A0E3012CA07E
-S219027067E33C0800EB0A00A0E1001099E50720A0E1570F00EBE9
-S21902707C005050E21000000A30401BE50500A0E1F90F00EB046F
-S21902709110A0E10030A0E124009FE50520A0E1900700EB1C00B5
-S2190270A600EAE8F50200ECF302005C330300603303006833035E
-S2190270BB00F4F5020008F6020090F5020040309FE5001093E5CB
-S2190270D03C309FE5002093E50A00A0E10730A0E18D0F00EB0052
-S2190270E55050E20B00000A30401BE50500A0E1DF0F00EB041015
-S2190270FAA0E10030A0E110009FE50520A0E1760700EB020000A4
-S21902710FEA6833030060330300B0F50200F0AF1BE90DC0A0E1AE
-S219027124F0D82DE904B04CE214D04DE20060A0E300608DE520A7
-S219027139304BE204308DE50120A0E308208DE5D4309FE50C3035
-S21902714E8DE5022082E00630A0E19CF7FFEB060050E1020000C2
-S2190271631ABC009FE535FCFFEB3D0000EAB4309FE5B4409FE594
-S219027178B4509FE5001093E5002094E50670A0E1000095E501E0
-S21902718D1062E0D20500EB005095E5010000EA016086E2015CF7
-S2190271A285E2003094E5230456E10800002A0030D5E5FF0053F5
-S2190271B7E3F7FFFF0A20001BE50510A0E1690700EB000050E396
-S2190271CCF2FFFF1A0170A0E3000057E30300001A54009FE5205A
-S2190271E1101BE53F0700EB1E0000EA48209FE5140095E500309F
-S2190271F692E5030050E10500003A38309FE518C095E5001093B2
-S21902720BE50C2080E0010052E10B00003A24009FE5310700EBB2
-S219027220100000EAE8F50200ECF302005C330300603303006808
-S21902723533030008F602007CC30300E4C2030020F602001010E4
-S21902724A95E50C20A0E1A20500EB08209FE51C3095E50030824B
-S21902725FE5000000EA80C30300F0A81BE90DC0A0E1F0D92DE935
-S21902727444209FE504D04DE2004092E504B04CE2000054E3271C
-S21902728900001A30809FE50118A0E3000098E50130A0E300309E
-S21902729E82E5010840E2820E00EB001050E20600000A10009FC6
-S2190272B3E50B0700EB0400A0E11B0000EA70040300E4C2030033
-S2190272C838F6020060709FE560609FE50100A0E15C409FE50739
-S2190272DD10A0E10620A0E19B0E00EB50509FE50400A0E105100B
-S2190272F2A0E1A80E00EB44009FE5001097E5002096E500C0941B
-S219027307E5003095E500C08DE5F40600EB003094E5002098E57E
-S21902731C24109FE5013883E2022063E0002081E50100A0E3058B
-S2190273310000EA583303005C330300603303006433030060F6B0
-S219027346020068330300F0A91BE90DC0A0E130D82DE904B04C82
-S21902735BE20050A0E1010055E30140A0E1020000CA48009FE5D0
-S219027370B3FBFFEB30A81BE9BBFFFFEB000050E30C00000A346C
-S219027385009FE534109FE5042094E5AFF6FFEB003050E204000E
-S21902739A000A0500A0E10410A0E10FE0A0E10CF093E530A81BDB
-S2190273AFE910009FE5A2FBFFEB30A81BE98CF602002C0503002A
-S2190273C49C050300A0F602000DC0A0E1F0DD2DE904B04CE264FA
-S2190273D9D04DE20080A0E10140A0E1080098E502A0A0E100002E
-S2190273EE50E30D00000A80104BE20120A0E3AE0100EB0C20987A
-S219027403E5000052E30200000A80301BE5000053E35400000A03
-S219027418000052E30200001A80301BE5000053E34F00001A2890
-S21902742D039FE528339FE5041098E5036084E0A90600EB1030AB
-S21902744298E5013043E2050053E303F19F97410000EA6C7402E9
-S219027457008C740200F0740200F87402009C740200B474020007
-S21902746CF0229FE5003096E5EC129FE5EC029FE5000053E30297
-S21902748110A001970600EB330000EADC029FE5001096E5930613
-S21902749600EB2F0000EA0600A0E1BF0C00EB0010A0E1BC029FAB
-S2190274ABE58D0600EB290000EA0050A0E3B4429FE50510D6E730
-S2190274C00400A0E1870600EB040055E30100008AA0029FE58343
-S2190274D50600EB015085E2050055E3F5FFFF9A90029FE57E068E
-S2190274EA00EB1A0000EA88029FE51B0000EA84029FE50650A084
-S2190274FFE1780600EB0030D6E50640A0E1000053E31100000A24
-S2190275146C729FE50030D5E50A0053E30200000A0130F4E50AAF
-S2190275290053E3FCFFFF1A0700A0E10030A0E30030C4E50510D3
-S21902753EA0E1680600EB0A30A0E30130C4E40450A0E10030D5E7
-S219027553E5000053E3EEFFFF1A00005AE30300000A18029FE513
-S2190275685E0600EB0200A0E38A0000EA103098E5040053E313B5
-S21902757D00000A74404BE20400A0E15010A0E30A20A0E1BC0731
-S21902759200EB000050E30000E0E30470A0E17E0000BA0700A028
-S2190275A7E1630600EB000050E3EDFFFF0A74305BE52E0053E323
-S2190275BC0A00A0017600000A5E0053E30300A0037300000A10C1
-S2190275D13098E5013043E2050053E303F19F976D0000EAFC756E
-S2190275E602001076020094770200C07602002C7602005C760242
-S2190275FB0074004BE2004096E50610A0E183F7FFEB0A0000EA29
-S21902761074004BE20610A0E10020A0E3004096E50230A0E124F1
-S219027625F7FFEB030000EA74004BE2004096E50610A0E10B0C71
-S21902763A00EB000050E30400A0E35500000A000096E500005461
-S21902764FE10100A0130200A003500000EA7C404BE20400A0E13D
-S2190276640610A0E10620A0E39B0400EB0050A0E304A0A0E184C4
-S219027679404BE274304BE288300BE588704BE2E8809FE50410EA
-S21902768EA0E10720A0E188001BE50830A0E106F7FFEB0000503F
-S2190276A3E32600000A84305BE50530C6E7015085E2050055E3ED
-S2190276B8F3FFFF9A360000EAC4009FE50650A0E1060600EB7481
-S2190276CD704BE2B8609FE50A0000EA74305BE50740A0E10000C8
-S2190276E253E30400000A0030D4E50130C5E40120F4E500005239
-S2190276F7E3FAFFFF1A0A30A0E30130C5E40040A0E30040C5E53E
-S21902770C0600A0E1F40500EB0700A0E15010A0E30420A0E1588E
-S2190277210700EB040050E10000E0E31B0000BA0700A0E10006FF
-S21902773600EB040050E1E5FFFF1A150000EA0600A0E10A10A0DA
-S21902774BE10620A0E3620400EB0400A0E3100000EA20F70200AD
-S2190277606C33030034F702002CF7020028F702003CF702004083
-S219027775F7020048F702004CF7020050F7020054F7020058F794
-S21902778A020060F702008CF7020008009FE5D20500EB0100A014
-S21902779FE3000000EA50F70200F0AD1BE90DC0A0E100D82DE9DB
-S2190277B4031081E22111A0E10130A0E1011041E204B04CE200C8
-S2190277C9E0A0E10000A0E300C0A0E1000053E1090000DA012047
-S2190277DEA0E1011041E204309EE40F005CE3133C83E103002000
-S2190277F3E001C08C1200C0A003000052E3F5FFFFCA00A81BE93A
-S2190278080DC0A0E100D82DE9010040E204B04CE2050050E300EB
-S21902781DF19F970C0000EA3C7802003C7802004C780200547834
-S21902783202003C780200447802000400A0E300A81BE90800A0E9
-S219027847E300A81BE90000A0E300A81BE9020CA0E300A81BE92A
-S21902785C0DC0A0E1F0DF2DE904B04CE243DE4DE208D04DE24C58
-S219027871040BE50080A0E350140BE504A0A0E379FEFFEBB491E3
-S2190278869FE5080050E10970A0E18800000A426E4BE208604612
-S21902789BE20600A0E19C519FE5012BA0E30510A0E10B0400EBB8
-S2190278B0433E4BE2083043E20C3043E200308DE5434E4BE204EC
-S2190278C5808DE5084044E274319FE5084044E2008083E50400C4
-S2190278DAA0E168319FE56C10A0E308308DE50820A0E10230A0D0
-S2190278EFE3AAF5FFEB0120A0E304018DE84C041BE548319FE5A6
-S21902790408808DE550141BE50C308DE50430A0E1ADF5FFEB0812
-S2190279190050E16500000A1E0000EA0700A0E144241BE50A10A0
-S21902792EA0E1A5FEFFEB010080E2050050E300F19F9716000057
-S219027943EA5C790200AC79020070790200747902008879020063
-S219027958987902000500A0E10610A0E1012BA0E3DC0300EB5119
-S21902796D0000EA0180A0E3100097E5A2FFFFEB00A08AE014706B
-S21902798287E2050000EA090057E1147047120970A00101000058
-S219027997EAB4009FE5510500EBB0309FE5030057E1DDFFFF1ADD
-S2190279AC000058E34000000AA0309FE5A0209FE50540A0E100DC
-S2190279C13084E50400A0E1F82384E5FF1FA0E375FFFFEBFC030A
-S2190279D684E584309FE584409FE5002093E5001094E57C009F70
-S2190279EBE5817042E0730700EB000050E32E00000A001094E52F
-S219027A000700A0E1114D4BE2084044E20420A0E1F10C00EB005C
-S219027A156050E21500000A48441BE50600A0E1930D00EB0410F2
-S219027A2AA0E10030A0E138009FE50620A0E12A0500EB1D000074
-S219027A3FEA0C0603006C33030084C3030090F70200BCEF02000A
-S219027A54A8F70200AC060300CEFAAD0BADDEADDE5C3303006038
-S219027A69330300BCF7020020F202000700A0E10510A0E1012BB8
-S219027A7EA0E30430A0E1240D00EB006050E20900000A48441B4C
-S219027A93E50600A0E1760D00EB0410A0E10030A0E108009FE52B
-S219027AA80620A0E10D0500EB000000EAE8F70200F0AF1BE90DA3
-S219027ABDC0A0E1F0DF2DE904B04CE20480A0E30070A0E101505C
-S219027AD2A0E10290A0E1D8609FE5E2FDFFEBD4A09FE500005037
-S219027AE7E33100000A0A0056E12C00000AC4309FE50710A0E1DE
-S219027AFC000096E5034088E0190500EB000050E31F00001A10C3
-S219027B110096E5090050E11800001A013040E2050053E303F1EF
-S219027B269F97130000EA447B0200447B0200B47B0200787B0268
-S219027B3B00507B0200647B0200003094E5003085E5F0AF1BE99A
-S219027B500500A0E10410A0E10420A0E35F0300EBF0AF1BE90562
-S219027B6500A0E10410A0E10620A0E35A0300EBF0AF1BE900401A
-S219027B7A85E5F0AF1BE93C009FE50710A0E1D60400EBF0AF1B0B
-S219027B8FE9100096E51BFFFFEB008088E0146086E20A0056E15D
-S219027BA4D2FFFF1A18009FE50710A0E1CC0400EBF0AF1BE90C3D
-S219027BB9060300AC0603006C33030014F8020040F802000DC03B
-S219027BCEA0E130D82DE90030A0E304B04CE294509FE504D04DDE
-S219027BE3E2003085E59FFDFFEB000050E33F00000A80309FE5D4
-S219027BF880009FE580409FE5001090E5012BA0E300C093E504B9
-S219027C0D00A0E18C1041E0310300EB0400A0E1FF1FA0E3E1FEF9
-S219027C22FFEBFC3394E5030050E10700001A002094E54C309FAB
-S219027C37E5030052E10300001AF82394E540309FE5030052E13B
-S219027C4C1100000A38009FE5A30400EB0400A0E130209FE5005A
-S219027C6130A0E3003082E50310A0E1012BA0E33A0500EB1E0032
-S219027C7600EA74C30300603303005C3303006C330300CEFAAD8F
-S219027C8B0BADDEADDE60F8020084C3030018104BE23C009FE503
-S219027CA00120A0E384FFFFEB18301BE5000053E30700000A2800
-S219027CB5009FE528109FE50420A0E37DFFFFEB20009FE5201092
-S219027CCA9FE50220A0E379FFFFEB0130A0E3003085E5040000C1
-S219027CDFEACCF60200E4F6020084C303000CF70200E8C2030003
-S219027CF430A81BE90DC0A0E100D82DE9803260E0030180E00006
-S219027D090180E014209FE50002A0E1483092E504B04CE20FE002
-S219027D1EA0E103F0A0E100A81BE9500000000DC0A0E1F0DF2D0E
-S219027D33E904B04CE206DD4DE298010BE5041090E59C110BE5A8
-S219027D480020A0E3A4210BE5007091E5A0210BE549F3FFEB51B9
-S219027D5DF3FFEB47F3FFEB043097E5010053E3A200001A07005F
-S219027D72A0E10410A0E3C30B00EB043097E5040053E302000038
-S219027D870AD4029FE5550400EBF1FFFFEA0700A0E12010A0E324
-S219027D9C632F4BE2013CA0E390310BE500C0A0E394C10BE565AE
-S219027DB14F4BE200408DE5193E4BE28C0A00EB000050E363AF3E
-S219027DC64BE20700000A94329FE528104BE2F32091E1410F528D
-S219027DDBE30200000A84029FE53F0400EBDBFFFFEA0700A0E11A
-S219027DF00030A0E394310BE51510A0E3653F4BE200308DE50AEA
-S219027E0520A0E1193E4BE2780A00EB000050E31B00000A628F86
-S219027E1A4BE20840A0E10130D4E444929FE5000053E3020000DB
-S219027E2F0A0130D4E4000053E3FCFFFF1A0460A0E10130D4E42C
-S219027E44000053E3FCFFFF1A0450A0E10130D4E4000053E3FCE8
-S219027E59FFFF1AA4111BE5000051E30100000A04029FE51D0456
-S219027E6E00EB0900A0E10610A0E10820A0E100408DE50530A0BC
-S219027E83E1170400EB0700A0E11A10A0E30050A0E394510BE51F
-S219027E98653F4BE200308DE50A20A0E1193E4BE2510A00EB05E1
-S219027EAD0050E10800000A0A00A0E190111BE58C204BE2260B40
-S219027EC200EB8C301BE5A0111BE5050050E10310A011A0110B96
-S219027ED7E5A0211BE5000052E30200001A8C019FE5FE0300EB9B
-S219027EEC9AFFFFEA0510A0E180519FE507CDA0E30500A0E10828
-S219027F013097E5813083E00C20D3E70120C0E7011081E205007D
-S219027F1651E3F8FFFFDA0700A0E10030A0E394310BE51B10A090
-S219027F2BE3653F4BE200308DE50A20A0E1193E4BE22C0A00EB94
-S219027F40000050E32900000A0A00A0E190111BE574204BE2C70B
-S219027F550A00EB000050E32000000A9C111BE570201BE5003051
-S219027F6A91E5101093E5024081E09C211BE5044082E5A0111B16
-S219027F7FE574205BE50700A0E1450A00EB1F30D4E51F30C4E56B
-S219027F940720D4E5800012E30200001A0730D4E5800013E3FCFE
-S219027FA9FFFF0A98111BE5003091E50100A0E1202093E5051016
-S219027FBEA0E10FE0A0E100F092E59C211BE5343092E50140A0D6
-S219027FD3E30C4083E5B2F2FFEB0400A0E12B0000EA94009FE5BB
-S219027FE8BE0300EB5AFFFFEA8C009FE5BB0300EB57FFFFEA0592
-S219027FFD0053E30200001A7C009FE5B60300EB52FFFFEAA4F2A2
-S219028012FFEB3200A0E336FFFFEBA4311BE5000053E301000088
-S2190280271A5C009FE5AD0300EBA4111BE554009FE5011081E2A7
-S21902803CA4110BE5A80300EBA4211BE50000A0E30A0052E30F57
-S21902805100000A0700A0E1CD0100EB88F2FFEB3DFFFFEAA4F8A3
-S21902806602009EFEFFFFC0F80200DCF80200D8F80200ECF8021A
-S21902807B00B404030008F902001CF9020038F9020058F902008E
-S21902809078F90200F0AF1BE90DC0A0E170D82DE90040A0E10849
-S2190280A56094E5045096E504B04CE2E70A00EB0000A0E3D80AF4
-S2190280BA00EB000085E5344085E50600A0E117FFFFEB70A81BBD
-S2190280CFE90DC0A0E100D82DE904B04CE204C090E504109CE5C0
-S2190280E42130A0E30030C1E5FF20A0E30720C1E5213043E20FE2
-S2190280F930C1E530308CE500A81BE90DC0A0E110D82DE904E0E8
-S21902810E90E504B04CE204C09EE52130A0E30030CCE54820A0FA
-S219028123E30E20CCE50000A0E30B00CCE50A00CCE5013043E22E
-S2190281380C30CCE5462042E20D20CCE5203083E20430CCE51824
-S21902814D008EE514008EE508308EE50140A0E12C008EE56010A0
-S219028162A0E30110CCE53F3083E20330CCE57E2082E20220CC14
-S219028177E5203043E210308EE57F2082E20720CCE5203043E28F
-S21902818C0F30CCE50C20A0E10110C2E40710CCE50030D4E700D0
-S2190281A130C2E7010080E2050050E3FAFFFFDA2230A0E3003077
-S2190281B6CCE50020A0E30D20CCE51E3043E20C30CCE501208278
-S2190281CBE230208EE510A81BE90DC0A0E100D82DE9010C51E2BB
-S2190281E00100A01304B04CE200A81BE90DC0A0E100D82DE90401
-S2190281F52090E504B04CE2143092E50000A0E3000053E1020083
-S21902820A000A183092E5000053E10000001A0100A0E300A81BFA
-S21902821FE90DC0A0E100D82DE904B04CE204C090E504009CE57E
-S2190282342230A0E30030C0E50520C0E54224A0E10620C0E50404
-S21902824910C0E5043083E20030C0E50120A0E32C208CE500A8ED
-S21902825E1BE90DC0A0E1F0DF2DE904B04CE20090A0E10380A0B7
-S219028273E13F0058E3044099E50850A0C14050A0D304309BE562
-S2190282880160A0E1087094E502A0A0E1040094E5400057E304E9
-S21902829D00001A147084E51C3084E5245084E55030A0E3030026
-S2190282B200EA187084E5203084E5285084E54030A0E30830848C
-S2190282C7E52230A0E30030C0E50A50C0E54534A0E10B30C0E533
-S2190282DC0020A0E30820C0E502E0A0E10970C0E54030A0E3079B
-S2190282F130C0E5122082E20020C0E50A005EE10F0000AA8E3180
-S219028306A0E1062083E004C092E501E08EE2061093E70C20A069
-S21902831BE101C04CE2000052E3F4FFFFDA0C20A0E10130D1E4E2
-S21902833001C04CE21030C0E5000052E3F9FFFFCAEDFFFFEA058D
-S2190283450058E1040000AA0030A0E305E068E01030C0E501E08F
-S21902835A5EE2FCFFFF1A2C2094E50730D0E5400013E3FCFFFFD2
-S21902836F0A000052E30800001A143094E5030057E10130A003C5
-S2190283840230A0130C3084E50900A0E10710A0E10520A0E1A0EB
-S219028399FFFFEBF0AF1BE90DC0A0E170D82DE904D04DE200602D
-S2190283AEA0E1045096E5044095E50C20D4E56230A0E30030C4B7
-S2190283C3E50710D4E5403043E20030C4E504B04CE22A0000EA85
-S2190283D80430A0E30000A0E30A30C4E50B00C4E5800052E308FB
-S2190283ED00C4E56020A0030920C4E5103095E5020053E10200E4
-S219028402001A013041E20330C4E5210000EA0010A0E11C004B11
-S219028417E2102085E54030A0E30730C4E50A20A0E30020C4E584
-S21902842C1030D4E50130C0E7011081E2030051E3FAFFFF9A190D
-S219028441305BE51A105BE50600A0E1002096E5031481E120C0CA
-S21902845692E5041041E20FE0A0E104F09CE51B305BE501304378
-S21902846BE20330C4E56220A0E30020C4E50710D4E52230A0E3C4
-S2190284800030C4E50320D4E5FF1001E2012082E2010052E1CFB1
-S219028495FFFF1A70A81BE90DC0A0E170D82DE904B04CE200C049
-S2190284AAA0E30C40A0E10260A0E1040090E5060054E104E0905B
-S2190284BFE50150A0E1060000AA0520A0E106C0A0E1043092E5A2
-S2190284D401C05CE2034084E0082082E2FAFFFF1A2230A0E30073
-S2190284E930CEE50A40CEE54434A0E10B30CEE50420A0E30820E1
-S2190284FECEE51010D0E500C0A0E30910CEE54030A0E30730CED3
-S219028513E5062082E20020CEE506005CE10D0000AA8C21A0E1E2
-S219028528053082E0041093E5050092E7000051E301208CE203D0
-S21902853D00000A1030DEE50130C0E4011051E2FBFFFF1A02C027
-S219028552A0E106005CE1F1FFFFBA70A81BE90DC0A0E170D82DC1
-S219028567E90050A0E1044095E5043094E50C2094E504B04CE24C
-S21902857C0410D3E5010052E30300001A1C6094E50030A0E31408
-S2190285913084E5020000EA206094E50030A0E3183084E51410C8
-S2190285A694E50030A0E32C3084E5030051E10500000A242094AC
-S2190285BBE50500A0E116FFFFEB0130A0E30C3084E5090000EAEE
-S2190285D0181094E5000051E30500000A282094E50500A0E10D57
-S2190285E5FFFFEB0230A0E30C3084E5000000EA0C1084E50500C3
-S2190285FAA0E1003095E50610A0E120C093E50020A0E30FE0A019
-S21902860FE108F09CE570A81BE90DC0A0E100D82DE90C009FE50D
-S2190286240C109FE504B04CE22D0200EB00A81BE97CF9020080FB
-S219028639F902000DC0A0E1F0D82DE90050A0E1047095E50460DB
-S21902864E97E52230A0E30030C6E50720D6E504B04CE2FF4002DF
-S219028663E2000054E31600000A0740C6E5303097E5000053E3BE
-S2190286781400000A0A0014E30200000A0500A0E10410A0E1B3ED
-S21902868DFFFFEB050014E30200000A0500A0E10410A0E13EFF88
-S2190286A2FFEB300014E30200000A0500A0E10410A0E1D7FFFFAF
-S2190286B7EB0730D6E5FF4003E2000054E3E8FFFF1A000097E5F3
-S2190286CC730900EBF0A81BE90DC0A0E100D82DE9043090E500AA
-S2190286E12093E504B04CE2200092E500A81BE90DC0A0E130D86A
-S2190286F62DE98C209FE58C309FE504B04CE2001092E50040A099
-S21902870BE1005093E5000051E30400001A0130A0E3003082E50C
-S2190287203500A0E30120A0E1F7F0FFEB0E33A0E3083084E502AB
-S2190287352CA0E30C2084E53E3383E2103084E50123A0E314208A
-S21902874A84E5033383E2183084E58300A0E31C2084E53530A0AE
-S21902875FE3203084E58010A0E386E0FFEB010515E30200001AE5
-S2190287740130A0E3043084E530A81BE90030A0E3043084E5303C
-S219028789A81BE9BC040300000004900DC0A0E100D82DE9243041
-S21902879E9FE5002093E504B04CE2010512E30200001A0130A0D9
-S2190287B3E3043080E500A81BE90030A0E3043080E500A81BE98A
-S2190287C8000004900DC0A0E100D82DE9803260E0030180E0006F
-S2190287DD0180E014209FE50002A0E1483092E504B04CE20FE024
-S2190287F2A0E103F0A0E100A81BE9500000000DC0A0E170D82DB7
-S219028807E9040051E304B04CE24CD04DE20040A0E12900001A03
-S21902881C045094E5010055E32600001A8300A0E38110A0E3548C
-S219028831E0FFEB1E00A0E3E3FFFFEB8300A0E30310A0E3023026
-S219028846A0E3043084E50060A0E34CE0FFEB0500A0E1DBFFFF9E
-S21902885BEB8300A0E30330A0E3043084E50510A0E145E0FFEB18
-S2190288700500A0E3D4FFFFEB020000EA0A00A0E3D1FFFFEB0173
-S2190288856086E2090056E30C0000CA0400A0E12010A0E300308F
-S21902889AA0E360300BE560204BE200208DE55C304BE258204B04
-S2190288AFE2CF0700EB000050E3EFFFFF0A0430A0E3043084E58C
-S2190288C470A81BE90DC0A0E100D82DE93500A0E304B04CE28620
-S2190288D9F0FFEB00A81BE90DC0A0E100D82DE904B04CE202C01D
-S2190288EEA0E100E0A0E103005CE30200009A003081E103001306
-S219028903E30A00000A0C30A0E101C04CE2000053E30500000A70
-S2190289180C20A0E10130D1E401C04CE20130CEE4000052E3F9B0
-S21902892DFFFF1A00A81BE900E0A0E10F005CE30E00009A0430DF
-S21902894291E404308EE4042091E404208EE4043091E404308E64
-S219028957E4042091E410C04CE204208EE40F005CE3F4FFFF8A29
-S21902896C020000EA043091E404C04CE204308EE403005CE3FA86
-S219028981FFFF8A0C30A0E101C04CE2000053E30500000A0C2035
-S219028996A0E10130D1E401C04CE20130CEE4000052E3F9FFFF60
-S2190289AB1A00A81BE90DC0A0E1F0DF2DE904B04CE250D04DE286
-S2190289C00170A0E178404BE200A0A0E3005050E20260A0E10339
-S2190289D580A0E10490A0E10300001A3030A0E378304BE57740E1
-S2190289EA4BE2090000EA0500A0E10610A0E1241700EB0030D806
-S2190289FFE70610A0E10130C4E40500A0E1C31500EB005050E23A
-S219028A14F5FFFF1A090054E10500000A0920A0E1013074E501B7
-S219028A29A08AE20130C7E4020054E1FAFFFF1A0A00A0E1003045
-S219028A3EA0E30030C7E5F0AF1BE90DC0A0E1F0DF2DE904B04CE7
-S219028A53E234D04DE24C200BE50180A0E148204BE250200BE59F
-S219028A680060A0E30140D8E40070A0E158600BE5060054E1FE40
-S219028A7D00000A250054E3ED00001A0030A0E354300BE5014008
-S219028A92D8E40350A0E12D0054E30200001A0120A0E354200B95
-S219028AA7E50140D8E4300054E30200001A0140D8E40190A0E33D
-S219028ABC060000EA0390A0E1040000EA053185E08330A0E130AD
-S219028AD13043E2045083E00140D8E4303044E2090053E3F7FFC5
-S219028AE6FF9A2E0054E30600001A0140D8E4019089E20000005D
-S219028AFBEA0140D8E4303044E2090053E3FBFFFF9A00A0A0E3FD
-S219028B106C0054E30140D804584044E2200054E304F19F9772D7
-S219028B250000EACC8B0200F48C0200F48C0200F48C0200F48CEB
-S219028B3A0200F48C0200F48C0200F48C0200F48C0200F48C0293
-S219028B4F00F48C0200D08C0200CC8B0200F48C0200F48C0200CD
-S219028B64F48C0200F48C0200F48C0200F48C0200F48C0200F477
-S219028B798C0200F48C0200F48C0200F48C0200AC8B0200F48C13
-S219028B8E0200F48C0200B08C0200F48C0200F48C0200F48C0283
-S219028BA300F48C0200CC8B02003000A0E30FE0A0E107F0A0E140
-S219028BB87800A0E30FE0A0E107F0A0E10190A0E30850A0E34C83
-S219028BCD301BE5040093E44C300BE5200054E304F19F972F00C4
-S219028BE200EA908C0200A48C0200A48C0200A48C0200A48C02A7
-S219028BF700A48C0200A48C0200A48C0200A48C0200A48C020068
-S219028C0CA48C0200A48C0200688C0200A48C0200A48C0200A4EA
-S219028C218C0200A48C0200A48C0200A48C0200A48C0200A48CB1
-S219028C360200A48C0200A48C0200A48C0200848C0200A48C0246
-S219028C4B00A48C0200A48C0200A48C0200A48C0200A48C020013
-S219028C60A48C0200848C0200000050E32DA0A0B3000060B24807
-S219028C75104BE2B4319FE50A20A0E3050000EA48104BE2A83143
-S219028C8A9FE5010000EA48104BE2A0319FE51020A0E343FFFF91
-S219028C9FEB58000BE548204BE250200BE5140000EA4C301BE517
-S219028CB4042093E450200BE54C300BE50200A0E19C0000EB58DB
-S219028CC9000BE50C0000EA4C301BE5043083E24C300BE50160C7
-S219028CDE86E2040053E5019088E20FE0A0E107F0A0E15D000096
-S219028CF3EA3F00A0E30FE0A0E107F0A0E1016086E258201BE590
-S219028D08055062E000005AE301504512000059E30800000A3055
-S219028D1D40A0E300005AE30600000A0A00A0E10FE0A0E107F038
-S219028D32A0E1016086E200A0A0E3000000EA2040A0E358201B58
-S219028D47E5019088E254301BE5012042E25C200BE5000053E3C5
-S219028D5C0800001A030000EA0400A0E10FE0A0E107F0A0E1017E
-S219028D716086E20530A0E1015045E2000053E3F7FFFFCA0000FB
-S219028D865AE30300000A0A00A0E10FE0A0E107F0A0E10160862D
-S219028D9BE25C201BE558301BE50F0000EA50301BE50140D3E465
-S219028DB0016086E250300BE50400A0E10FE0A0E107F0A0E10AF7
-S219028DC50054E30300001A0D00A0E30FE0A0E107F0A0E1016065
-S219028DDA86E258301BE50320A0E1012042E258200BE5000053E9
-S219028DEFE3ECFFFFCA54301BE5000053E31A00000A0530A0E13D
-S219028E04015045E2000053E3160000DA2000A0E30FE0A0E1079A
-S219028E19F0A0E1016086E20530A0E1015045E2000053E3F7FFA9
-S219028E2EFFCA0D0000EA90F902009CF90200B0F902000400A0F7
-S219028E43E10FE0A0E107F0A0E1016086E20A0054E3019088E245
-S219028E580300001A0D00A0E30FE0A0E107F0A0E1016086E200A0
-S219028E6D40D8E50980A0E1000054E300FFFF1A0600A0E1F0AF6D
-S219028E821BE90DC0A0E100D82DE918309FE5002093E50100C26D
-S219028E97E40010A0E3002083E504B04CE20010C2E500A81BE97B
-S219028EAC6C3703000DC0A0E10E002DE900D82DE918309FE500D8
-S219028EC10083E510B04CE204109BE50C009FE508208BE2DBFEAD
-S219028ED6FFEB010000EA6C370300848E020000A81BE90DC0A0D8
-S219028EEBE10F002DE900D82DE910009FE514B04CE204109BE55D
-S219028F0008208BE2CFFEFFEB000000EA8891020000A81BE90D4B
-S219028F15C0A0E100D82DE90030A0E10120A0E10310A0E1080022
-S219028F2A9FE504B04CE2C4FEFFEB00A81BE9889102000DC0A0E5
-S219028F3FE100D82DE90020A0E30130D0E404B04CE2020053E1A7
-S219028F540300000A0130D0E4012082E2000053E3FBFFFF1A023F
-S219028F6900A0E100A81BE90DC0A0E100D82DE90130D1E400207D
-S219028F7EA0E10100D2E404B04CE2030050E10500001A0000501A
-S219028F93E30400000A0100D2E40130D1E4030050E1F9FFFF0AFF
-S219028FA8000063E000A81BE90DC0A0E100D82DE90130D1E4009C
-S219028FBD0053E304B04CE20300000A0130C0E40130D1E40000B8
-S219028FD253E3FBFFFF1A0030A0E30030C0E500A81BE90DC0A099
-S219028FE7E100D82DE900E0A0E10120DEE404B04CE2020000EA8D
-S219028FFC000050E30F00000A0120DEE401C0D1E4200082E2FF31
-S2190290110000E2413042E2190053E30200A08120308CE2FF207D
-S21902902603E241304CE2190053E30C30A0810230A09103005048
-S21902903BE1EEFFFF0A000063E000A81BE90DC0A0E100D82DE917
-S219029050000052E304B04CE200C0A0E10300001A0200A0E1000C
-S219029065A81BE9000063E000A81BE90100DCE40130D1E40300AA
-S21902907A50E1F9FFFF1A000050E30100000A012052E2F7FFFF10
-S21902908F1A0000A0E300A81BE90DC0A0E110D82DE9000052E3FB
-S2190290A404B04CE20040A0E10500001A0200A0E110A81BE900AF
-S2190290B90063E010A81BE9012052E21000000A01C0D4E401E0D3
-S2190290CED1E420008CE2FF0000E241304CE2190053E30C00A0C8
-S2190290E38120308EE2FFC003E241304EE2190053E30E30A0813D
-S2190290F80C30A091030050E1ECFFFF1A000050E3ECFFFF1A0080
-S21902910D00A0E310A81BE90DC0A0E100D82DE904B04CE202C027
-S219029122A0E1070000EA0120D0E40130D1E4030052E1030000CB
-S2190291370A013050E5010051E5030060E000A81BE90C30A0E1C9
-S21902914C01C04CE2000053E3F3FFFFCA0000A0E300A81BE90DEB
-S219029161C0A0E100D82DE9012052E2FF1001E204B04CE2020098
-S219029176004A0110C0E4012052E2FCFFFF5A00A81BE90DC0A01C
-S21902918BE1F0D92DE9BC309FE504B04CE2004093E5FF6000E2BD
-S2190291A0000054E31900001AA8309FE50000E0E30380A0E134F2
-S2190291B52093E50850A0E10FE0A0E102F0A0E10070A0E13430F5
-S2190291CA95E50400A0E10FE0A0E103F0A0E1143095E500009355
-S2190291DFE5014084E20C3093E50610A0E10FE0A0E103F0A0E1B9
-S2190291F4000054E3F2FFFFDA343098E50700A0E10FE0A0E10382
-S219029209F0A0E1F0A91BE940209FE5143092E5000053E3050061
-S21902921E000A000093E50C3093E50610A0E10FE0A0E103F0A064
-S219029233E1F0A91BE9183092E5000093E50C3093E50610A0E11F
-S2190292480FE0A0E103F0A0E1F0A91BE9E0C20300500000000D87
-S21902925DC0A0E110D82DE930209FE504B04CE2143092E5004005
-S219029272A0E1000053E30500000A000093E5103093E50FE0A05B
-S219029287E103F0A0E10000C4E510A81BE9183092E5F7FFFFEA73
-S21902929C500000000DC0A0E1F0DF2DE9E0309FE504B04CE200BD
-S2190292B160A0E1004093E50390A0E1000054E31C00001A000087
-S2190292C6E0E3C4309FE50450A0E10380A0E1342093E50870A094
-S2190292DBE10FE0A0E102F0A0E100A0A0E1343097E50500A0E12C
-S2190292F00FE0A0E103F0A0E1143097E5000093E51C3093E5067C
-S21902930510A0E10FE0A0E103F0A0E1004050E20C00001A0150EE
-S21902931A85E2000055E3F0FFFFDA343098E50A00A0E10FE0A0D5
-S21902932FE103F0A0E1130000EA54209FE5143092E5000053E3E7
-S2190293440800000A080000EA0130A0E3003089E5302098E505E5
-S21902935900A0E10FE0A0E102F0A0E10400A0E1F0AF1BE9183024
-S21902936E92E5000093E51C3093E50610A0E10FE0A0E103F0A096
-S219029383E10040A0E10400A0E1F0AF1BE9E0C20300500000000F
-S2190293980DC0A0E1F0D92DE9D8309FE504B04CE2004093E50066
-S2190293AD60A0E1000054E31C00001AC4309FE50000E0E3038098
-S2190293C2A0E1342093E50850A0E10FE0A0E102F0A0E10070A076
-S2190293D7E1343095E50400A0E10FE0A0E103F0A0E114C095E504
-S2190293EC00005CE30500000A00009CE50710A0E314309CE50631
-S21902940120A0E10FE0A0E103F0A0E1014084E2000054E3EFFFFE
-S219029416FFDA343098E50700A0E10FE0A0E103F0A0E10A00000A
-S21902942BEA50309FE514C093E50380A0E100005CE30500000A99
-S21902944000009CE50710A0E314309CE50620A0E10FE0A0E10316
-S219029455F0A0E118C098E500005CE30500000A00009CE507104F
-S21902946AA0E314309CE50620A0E10FE0A0E103F0A0E1F0A91B5F
-S21902947FE9E0C20300500000000DC0A0E1F0DD2DE904B04CE2E0
-S21902949404D04DE20250A0E10060A0E10640A0E10070A0E3B497
-S2190294A9819FE5002098E5000052E30600000A0030D2E50000D9
-S2190294BE53E30300000A0130D2E425304BE5002088E516000040
-S2190294D3EA060054E10030A0130130A003000055E30030A0D3C6
-S2190294E8000053E30D00000A3200A0E3A7FFFFEB000000EA32BA
-S2190294FD5045E2000055E3030000DA25004BE263FFFFEB0070B9
-S21902951250E2F8FFFF0A000057E30300001A0000E0E3510000A0
-S219029527EA25004BE24AFFFFEB25205BE50030A0E30D0052E33F
-S21902953C0030C4E50200A0E11B00000A080000CA080050E32C59
-S21902955100000A020000CA030050E30C00000A380000EA0A00B0
-S21902956650E31200000A350000EA2B0050E32E00000A020000E3
-S21902957BCA240050E32B00000A2F0000EA7F0050E31D00000A8C
-S2190295902C0000EA060054E10300001AC4009FE550FEFFEB01D0
-S2190295A500E0E3300000EA0100C4E4B4A09FE5270000EA2520F6
-S2190295BA5BE5A8A09FE50A0052E30200001A0030DAE50D0053DF
-S2190295CFE32000000A0D0052E30200001A0030DAE50A0053E3E6
-S2190295E41B00000A0D00A0E3E5FEFFEB0A00A0E3E3FEFFEB256C
-S2190295F9305BE50030CAE50100A0E3190000EA5CA09FE50600FA
-S21902960E54E11000000A0800A0E3DAFEFFEB2000A0E3D8FEFF2C
-S219029623EB0800A0E3D6FEFFEB014044E2080000EA060054E163
-S2190296380200001AF8E1FFEB0000A0E3090000EACEFEFFEB25E6
-S21902964D305BE514A09FE50130C4E425305BE50030CAE591FF7C
-S219029662FFEA84C30300C4F90200C0040300F0AD1BE90DC0A025
-S219029677E1F0DF2DE904B04CE20060A0E1060051E106704180DF
-S21902968C0170A091000057E30290A0E13B0000DA000059E3037F
-S2190296A100000AE4009FE5061069E00DFEFFEB020000EAD40027
-S2190296B69FE50610A0E109FEFFEB0050A0E3108047E210A086CA
-S2190296CBE2070055E1030000AAB8009FE50510D6E701FEFFEBC0
-S2190296E0010000EAAC009FE5FEFDFFEBC54FA0E1053064E0015F
-S2190296F530C3E3053063E0010053E30100001A90009FE5F6FDB2
-S21902970AFFEBA43EA0E1033085E00730C3E3053063E0070053AF
-S21902971FE30100001A70009FE5EEFDFFEB015085E20F0055E368
-S219029734E4FFFFDA60009FE5E9FDFFEB0050A0E3070055E10495
-S2190297490000AA0510D6E7203041E25E0053E32E10A083000020
-S21902975E00EA2010A0E338009FE5DEFDFFEB015085E20F0055B5
-S219029773E3F2FFFFDA28009FE5D9FDFFEB0A60A0E1007058E22C
-S219029788C3FFFFCAF0AF1BE9C8F90200D4F90200DCF90200E04E
-S21902979DF90200E4F90200E8F90200ECF902000DC0A0E100D8E6
-S2190297B22DE90020A0E304B04CE2ACFFFFEB00A81BE90DC0A052
-S2190297C7E10F002DE930D82DE914B04CE208D04DE248409FE55D
-S2190297DC04009BE5005094E508108BE2C9FDFFEB38009FE5BC77
-S2190297F1FDFFEB1C004BE20020A0E3002084E50810A0E31FFF47
-S219029806FFEB1C305BE5590053E30000A0130100A0037900531E
-S21902981BE30100A003005084E5010000EA84C30300F0F90200D1
-S21902983030A81BE90DC0A0E1F0DF2DE904B04CE20050A0E10159
-S21902984570A0E14C419FE50260A0E12CC014E503A0A0E1000019
-S21902985A5CE30300000A0A30A0E300308AE50000E0E3F0AF1BCD
-S21902986FE90100A0E3710C00EB0000C4E52004A0E10100C4E510
-S2190298840500A0E10030D0E5022084E2000053E30300000A0191
-S21902989930C2E40130F0E5000053E3FBFFFF1A0030A0E30130AA
-S2190298AEC2E4030056E1E4009F050200000A010056E3E6FFFF0C
-S2190298C31AD8009FE50030D0E5D4809FE5D4609FE5000053E368
-S2190298D80300000A0130C2E40130F0E5000053E3FBFFFF1A0839
-S2190298ED40A0E10400A0E10050A0E30050C2E50510A0E10C208D
-S219029902A0E315FEFFEB144044E20190A0E3BA91C4E10500A0A6
-S219029917E13D0C00EB140084E5003096E5B000D6E1093083E0F4
-S21902992C003086E5420C00EBB801C4E1B430D7E1050053E10216
-S21902994100001A4500A0E33C0C00EBB400C7E1180088E20720F0
-S219029956A0E150109FE50830A0E11F0A00EB000050E307000089
-S21902996BBA149008E50C5084E50030E0E3103084E5085084E573
-S219029980045084E50500A0E1F0AF1BE90000E0E30930A0E30066
-S219029995308AE5F0AF1BE99C37030008FA020014FA02008437CF
-S2190299AA0300C8040300050200000DC0A0E100D82DE90000A0EC
-S2190299BFE308309FE504B04CE2000083E500A81BE9703703004D
-S2190299D40DC0A0E1F0DF2DE904B04CE218D04DE234000BE50027
-S2190299E930A0E33C300BE538100BE50280A0E10C629FE5010025
-S2190299FE53E1870000AA2C5046E20C3095E5000053E315000043
-S219029A13DA34001BE538C01BE53C201BE5341295E50C4062E087
-S219029A28040053E10340A0B10420A0E1A9FBFFEB34C01BE534FB
-S219029A3D3295E504C08CE034C00BE50C2095E5043083E03432AA
-S219029A5285E5022064E00C2085E53C101BE5041081E03C100B7A
-S219029A67E5690000EA103095E5020C53E36A00003A0530A0E351
-S219029A7C88019FE50020A0E330300BE5209085E22C200BE51467
-S219029A91A085E274119FE530304BE200308DE50920A0E10A3096
-S219029AA6A0E1140A00EB004050E20470A0E31C0000AA04309522
-S219029ABBE5013083E2043085E5050053E3020000CA083095E5BD
-S219029AD0000053E30100001A0830A0E3470000EA0700A0E1D5E0
-S219029AE50B00EB0000C6E52004A0E10100C6E5B800D5E1D00B2A
-S219029AFA00EB0200C6E50710A0E12004A0E10300C6E50920A004
-S219029B0FE1F4009FE50A30A0E1B10900EB000050E33B0000AA69
-S219029B240930A0E3340000EA0030D6E50100D6E5000483E1C07C
-S219029B390B00EB030050E32000001A0230D6E50300D6E50004FB
-S219029B4E83E1BA0B00EB083095E5013083E2030050E105000066
-S219029B631A044044E2104085E50C4085E5043086E2343285E586
-S219029B78080085E50700A0E1AE0B00EB0000C6E52004A0E101E2
-S219029B8D00C6E5B800D5E1A90B00EB0200C6E50710A0E120049B
-S219029BA2A0E10300C6E50920A0E158009FE50A30A0E18A0900A4
-S219029BB7EB000050E3140000AA0930A0E30D0000EA0030D6E518
-S219029BCC0100D6E5000483E1990B00EB050050E30600001A0270
-S219029BE130D6E50300D6E5000483E1930B00EB000088E5000061
-S219029BF6E0E30A0000EA0B30A0E3003088E50000E0E306000078
-S219029C0BEA9C370300050200003C201BE538301BE5030052E17C
-S219029C2078FFFFBA3C001BE5F0AF1BE90DC0A0E100D82DE901DC
-S219029C350040E204B04CE20B0050E300F19F97230000EA789C89
-S219029C4A0200809C0200889C0200909C0200989C0200A09C0216
-S219029C5F00A89C0200B09C0200B89C0200C09C0200C89C02003B
-S219029C74D09C020060009FE500A81BE95C009FE500A81BE958F2
-S219029C89009FE500A81BE954009FE500A81BE950009FE500A88F
-S219029C9E1BE94C009FE500A81BE948009FE500A81BE944009FCF
-S219029CB3E500A81BE940009FE500A81BE93C009FE500A81BE928
-S219029CC838009FE500A81BE934009FE500A81BE930009FE50000
-S219029CDDA81BE92CFA02003CFA020050FA020074FA02008CFA1D
-S219029CF20200A0FA0200B4FA0200C4FA0200D8FA0200F4FA0284
-S219029D070008FB02001CFB02001CFA02000DC0A0E170D82DE95E
-S219029D1CAC309FE504B04CE20160A0E1004093E50350A0E1007B
-S219029D310054E31800001AD50D00EB90009FE5043090E505001E
-S219029D4653E30500001AB831D0E1000053E30000001AFD0D00B8
-S219029D5BEB0400A0E170A81BE9000053E30400001A2D0100EBF3
-S219029D700A30A0E30030C6E50100A0E370A81BE950409FE5800B
-S219029D8520A0E30410A0E10F0E00EB44309FE5000085E50040E0
-S219029D9A83E5000095E5000050E30800000A2CC09FE500109C6A
-S219029DAFE50130D1E40030C6E5002095E50100A0E300108CE553
-S219029DC4012042E2002085E570A81BE9D0040300B439030008C9
-S219029DD9400300884003000DC0A0E170D82DE904B04CE204D0FE
-S219029DEE4DE26440A0E30060A0E119504BE2090000EA01405404
-S219029E03E20200001A0F0000EB6440A0E3040000EA28309FE55A
-S219029E18482093E56400A0E30FE0A0E102F0A0E10600A0E105F8
-S219029E2D10A0E1B7FFFFEB000050E3F0FFFF0A19005BE5000064
-S219029E4200EA5000000070A81BE90DC0A0E1F0DD2DE99C709FD2
-S219029E57E504B04CE20760A0E194509FE594A09FE594809FE588
-S219029E6C0A0000EA0400A0E1002095E50610A0E10F0E00EB0028
-S219029E810050E3030000DA003095E5006086E0033060E00030A2
-S219029E9685E57D0D00EB003095E5000053E30900000A58409FA7
-S219029EABE5043094E5050053E30100001A0400A0E1A40D00EB92
-S219029EC0043094E5000053E3E8FFFF1AD50000EB00708AE544C0
-S219029ED53098E50040A0E3004085E5040053E10200000A04000F
-S219029EEAA0E1CEE4FFEB444088E5F0AD1BE98C400300D4040303
-S219029EFF008C41030050000000B43903000DC0A0E110D82DE9EB
-S219029F14A8209FE5A8409FE5003092E5FF1001E20110C3E42404
-S219029F290051E3003082E504B04CE20130A003003084050020C2
-S219029F3E94E5230051E30030A0130130A003000052E30030A07B
-S219029F5303000053E30500000A68209FE50130A0E3003082E553
-S219029F6860109FE5013043E2003081E558209FE5003092E50159
-S219029F7D3083E2003082E5010C53E30900000A38309FE500203A
-S219029F9293E5000052E30800000A2C209FE5003092E5013083C9
-S219029FA7E2003082E5030053E30200001AA4FFFFEB0030A0E390
-S219029FBC003084E510A81BE98C410300A8390300AC390300B0E8
-S219029FD1390300D40403000DC0A0E110D82DE904B04CE27600B9
-S219029FE600EB0040A0E114009FE514109FE5EE20A0E3BAFBFF2E
-S219029FFBEB0400A0E17F0000EB10A81BE9F8FB020000FC0200C1
-S21902A0100DC0A0E110D82DE904B04CE2680000EB0040A0E114DE
-S21902A025009FE514109FE5012CA0E3ACFBFFEB0400A0E17100BC
-S21902A03A00EB10A81BE9F8FB020010FC02000DC0A0E1F0D82D1D
-S21902A04FE904B04CE20060A0E10150A0E17AFFFFEB44209FE52C
-S21902A064003092E540709FE5033183E08340A0E1030000EA48F5
-S21902A0793097E56400A0E30FE0A0E103F0A0E10600A0E10510B8
-S21902A08EA0E11FFFFFEB000050E30200001A014044E201007402
-S21902A0A3E3F3FFFF1AF0A81BE9CC040300500000000DC0A0E1A6
-S21902A0B80E002DE930D82DE910B04CE204309BE50050A0E304D1
-S21902A0CD3043E2030053E303F19F97200000EA1CA10200ECA06A
-S21902A0E202003CA1020050A1020054409FE554309FE5001094CA
-S21902A0F7E50120A0E3002083E5000051E30100001A830500EB7A
-S21902A10C000084E5000094E5C4D9FFEB100000EA28309FE520D8
-S21902A121209FE5005093E5000092E50010A0E3001083E5B0D9AB
-S21902A136FFEB080000EA04309FE5005093E5050000EAD80403E3
-S21902A14B00DC04030010209FE508309BE5005092E5003082E54B
-S21902A1600500A0E1000000EACC04030030A81BE90DC0A0E13046
-S21902A175D82DE904B04CE204D04DE20040A0E10200A0E1015066
-S21902A18AA0E159EAFFEB0400A0E10030A0E3003085E515104BC9
-S21902A19FE2DBFEFFEB000050E30300000A15305BE5030053E301
-S21902A1B40130A003003085050100A0E330A81BE90DC0A0E13023
-S21902A1C9D82DE92C409FE50000E0E3343094E504B04CE20FE02B
-S21902A1DEA0E103F0A0E10050A0E1343094E50000A0E30FE0A0B0
-S21902A1F3E103F0A0E10500A0E130A81BE9500000000DC0A0E1FB
-S21902A20800D82DE910309FE5342093E504B04CE20FE0A0E10268
-S21902A21DF0A0E100A81BE9500000000DC0A0E110D82DE9381024
-S21902A2329FE538209FE50030A0E3003081E530409FE5000092E1
-S21902A247E5343094E504B04CE20FE0A0E103F0A0E11C209FE5B3
-S21902A25C303094E5000092E50FE0A0E103F0A0E110A81BE9E016
-S21902A271C203000040030050000000044003000DC0A0E170D89C
-S21902A2862DE964309FE50150A0E3005083E504B04CE258409FE9
-S21902A29BE50060E0E3342094E50600A0E10FE0A0E102F0A0E168
-S21902A2B044309FE5000083E5342094E50500A0E10FE0A0E1026D
-S21902A2C5F0A0E1301094E50600A0E10FE0A0E101F0A0E120309A
-S21902A2DA9FE5000083E5302094E50500A0E10FE0A0E102F0A02B
-S21902A2EFE170A81BE9E0C20300500000000040030004400300D7
-S21902A3040DC0A0E170D82DE9AC609FE5003096E504B04CE20074
-S21902A3190053E31E00001A9C409FE5343094E50000E0E30FE0CB
-S21902A32EA0E103F0A0E10050A0E1343094E50100A0E30FE0A05D
-S21902A343E103F0A0E1141094E574309FE574209FE5043081E532
-S21902A35870309FE5082081E50C3081E568209FE568309FE5105D
-S21902A36D2081E5143081E560209FE560309FE5182081E51C30A2
-S21902A38281E5342094E50500A0E10FE0A0E102F0A0E10130A052
-S21902A397E3003086E540309FE540409FE5B010D3E10400A0E13B
-S21902A3AC3E0C00EB34209FE5043094E5003082E570A81BE9E048
-S21902A3C104030050000000D89F020010A002000C9F0200E09DD4
-S21902A3D60200B4A0020070A1020048A0020070C30300B43903F0
-S21902A3EB00FC3F03000DC0A0E130D82DE904B04CE2240C00EBAF
-S21902A40078309FE578109FE5002093E50350A0E1040091E50121
-S21902A41540A0E1000052E11400000A040050E30E00001A94FF27
-S21902A42AFFEB54309FE554009FE5000083E550109FE50130A02F
-S21902A43FE3003081E548109FE548309FE50D20A0E30020C0E53B
-S21902A454003081E53C209FE50030A0E3003082E5043094E5007F
-S21902A4690053E30000001AA3FFFFEB043094E5003085E530A8DC
-S21902A47E1BE9FC3F0300B43903008840030008400300D00403A3
-S21902A493008C4103008C400300D40403000DC0A0E1F0D92DE906
-S21902A4A868319FE5001093E504B04CE2000051E30900001A5862
-S21902A4BD019FE558219FE50130A0E3003080E5001082E54C31C4
-S21902A4D29FE54C119FE5003081E50080A0E1150000EA40019F93
-S21902A4E7E530119FE50120A0E371F5FFEB34019FE528119FE545
-S21902A4FC0220A0E314419FE56CF5FFEB0410A0E120019FE50140
-S21902A51120A0E368F5FFEB18019FE518119FE50520A0E364F5F9
-S21902A526FFEB10019FE50480A0E10C119FE50520A0E35FF5FFF9
-S21902A53BEB04419FE50030A0E3003084E5FC509FE5110300EB35
-S21902A550480800EBF4309FE50460A0E1030055E10370A0E109F1
-S21902A56500000A0140A0E30500A0E10FE0A0E104F095E50000A8
-S21902A57A50E30C4085150C008505105085E2070055E1F6FFFF1E
-S21902A58F1ABC309FE5002093E5000052E30200001AB0009FE509
-S21902A5A44FFAFFEBF0A91BE9003098E5000053E30600000A9C3C
-S21902A5B9009FE5C80500EB000050E30200000A90009FE545FAB8
-S21902A5CEFFEB010000EA0130A0E3003086E5003096E50000534F
-S21902A5E3E30A00000A4C009FE56C0000EB0010A0E168009FE5C1
-S21902A5F83AFAFFEB40009FE5670000EB0010A0E158009FE53571
-S21902A60DFAFFEB3BFFFFEBF0A91BE974C30300ECC2030028C5B4
-S21902A62203002823000070C3030074FB02004CFB0200A4FB023D
-S21902A63700C0FB0200F0040300E8FB0200A4C30300BCC4030081
-S21902A64CB4060300C40603002CC503001CFC020090C303003CC8
-S21902A661FC020068FC020070FC02000DC0A0E1F0DF2DE904B024
-S21902A6764CE20040A0E10190A0E100A0A0E30A80A0E10160A098
-S21902A68BE30070A0E301C0D4E40A50A0E307005CE13500000A04
-S21902A6A030005CE30030A0130130A003030016E10A00000A006A
-S21902A6B530D4E5411043E2202083E2FF2002E2190051E3023003
-S21902A6CAA091780053E30200001A1050A0E3014084E201C0D45A
-S21902A6DFE400E0A0E30E60A0E130104CE2FF0001E241204CE24A
-S21902A6F4FF3002E2050053E3090050830200009A61304CE205C0
-S21902A7090053E30000008A01E0A0E300005EE31200000A0000B3
-S21902A71EA0E3FF3001E2090053E30100A0910600009A61304C9C
-S21902A733E2050053E357004C920200009AFF3002E2050053E3CE
-S21902A74837004C92050050E1040000AA01C0D4E4950727E000E0
-S21902A75D005CE3CEFFFF1A030000EA2E005CE30100000A000056
-S21902A772A0E3F0AF1BE9033068E28331A0E117A38AE1018088C5
-S21902A787E2030058E3BDFFFFDA0A00A0E19E0800EB000089E577
-S21902A79C0100A0E3F0AF1BE90DC0A0E110D82DE90010A0E10895
-S21902A7B1D04DE20230D1E528409FE500308DE50320D1E504201A
-S21902A7C68DE50020D1E50130D1E504B04CE210109FE50400A01E
-S21902A7DBE1B3F9FFEB0400A0E1010000EA9041030088FC020021
-S21902A7F010A81BE90DC0A0E1F0D82DE904B04CE200E0A0E1081A
-S21902A805C09EE5FF1001E204609BE50250A0E1000096E503705D
-S21902A81AA0E108208EE2140092E8044082E000C08CE014000095
-S21902A82FEA010052E10E00001A0230DCE508009EE502E093E2F2
-S21902A8440500000A0E10A0E10030DCE5011051E20130C5E40239
-S21902A859C08CE2FAFFFF1A00E087E50C3060E0003086E501003F
-S21902A86EA0E3F0A81BE90230DCE58330A0E1043083E203C08CA0
-S21902A883E004005CE10300002A0020DCE5FF3002E2FF0053E342
-S21902A898E4FFFF1A0000A0E3F0A81BE90DC0A0E100D82DE90845
-S21902A8AD3090E5FF2002E20120C3E704B04CE200A81BE90DC0C1
-S21902A8C2A0E100D82DE90610A0E3002090E504B04CE201C0D268
-S21902A8D7E45C31A0E1010013E30100000A0130D2E4A32382E062
-S21902A8EC011051E2F8FFFF5A002080E500A81BE90DC0A0E1003D
-S21902A901D82DE9002090E50130D2E404B04CE21C1003E21C00C1
-S21902A91651E301208212033003E2030053E30120821200208096
-S21902A92BE500A81BE90DC0A0E1F0DF2DE904B04CE20040A0E3A7
-S21902A9400090A0E100C099E50460A0E10120DCE401E0A0E16024
-S21902A9553002E2A332A0E14430CEE5800012E34100000A012074
-S21902A96ADCE40470A0E10F3002E2013083E240308EE503005726
-S21902A97FE13A0000AA303002E223A2A0E12283A0E10750A0E16F
-S21902A99403005AE30AF19F97130000EAF0A90200B0A90200B88B
-S21902A9A9A90200CCA902000160DCE40D0000EA0120DCE5003046
-S21902A9BEDCE5026483E102C08CE2080000EA0300DCE50020DC10
-S21902A9D3E50230DCE50110DCE5002C82E10338A0E1013483E1DA
-S21902A9E8036082E104C08CE20E6085E7030058E308F19F971301
-S21902A9FD0000EA50AA020010AA020018AA02002CAA02000140BF
-S21902AA12DCE40D0000EA0120DCE50030DCE5024483E102C08CA6
-S21902AA27E2080000EA0300DCE50020DCE50230DCE50110DCE5D5
-S21902AA3C002C82E10338A0E1013483E1034082E104C08CE20141
-S21902AA514084E220308EE2054083E7017087E240309EE50450B3
-S21902AA6685E2030057E1C8FFFFBA00C089E5F0AF1BE90DC0A074
-S21902AA7BE130D82DE904B04CE204D04DE200C0A0E118000BE592
-S21902AA900C10A0E10130D1E40250A0E1FF3003E218100BE51B0D
-S21902AAA50053E30800000A18C00BE510009FE510109FE500202D
-S21902AABADCE5BCE3FFEB0000A0E3240000EA94FC0200B8FC025D
-S21902AACF00010081E218000BE50120D1E5011080E218100BE59D
-S21902AAE43F3002E20030C5E5800012E30300000A0130D0E501C0
-S21902AAF930C5E5012081E218200BE518301BE50140D3E4024039
-S21902AB0EC5E518300BE5010014E30100000A18004BE266FFFF9D
-S21902AB23EB020014E30100000A18004BE262FFFFEB040014E39C
-S21902AB380100000A18004BE26DFFFFEB080014E30200000A1838
-S21902AB4D004BE2041085E275FFFFEB0100A0E330A81BE90DC0B9
-S21902AB62A0E100D82DE904B04CE200C0A0E10130DCE402E0A0D2
-S21902AB77E11A0053E30500000A90009FE590109FE501205CE5E8
-S21902AB8C88E3FFEB0000A0E300A81BE901C08CE20100DCE40039
-S21902ABA130A0E301C08CE200308EE5031010E20500004A03209C
-S21902ABB6A0E10130DCE7022483E1011051E2FBFFFF5A00208E3F
-S21902ABCBE5033000E2013083E203C08CE00010A0E33C3000E2CE
-S21902ABE02331A0E1013083E204308EE5030051E1060000AA085A
-S21902ABF5008EE20130DCE40130C0E704209EE5011081E20200EE
-S21902AC0A51E1F9FFFFBA0100A0E300A81BE994FC0200CCFC02BF
-S21902AC1F000DC0A0E100D82DE9001050E204B04CE20300000AAC
-S21902AC3410009FE55DE3FFEB0000A0E300A81BE904009FE5008F
-S21902AC49A81BE9DCFC0200B04103000DC0A0E130D82DE904B055
-S21902AC5E4CE20050A0E31C409FE5005084E50400A0E19EF6FF28
-S21902AC73EB2C4084E2015085E2000055E3F8FFFFDA30A81BE96C
-S21902AC88B04103000DC0A0E100D82DE904B04CE2D8F6FFEB00E6
-S21902AC9DA81BE90DC0A0E100D82DE904B04CE205F7FFEB00A843
-S21902ACB21BE90DC0A0E110D82DE940409FE51C3094E504B04C6D
-S21902ACC7E2000053E30100000A0000A0E310A81BE9030084E8A0
-S21902ACDC980200EB000050E30500001A083094E50120A0E31C14
-S21902ACF12084E5003063E2103084E510A81BE910A81BE900C563
-S21902AD0603000DC0A0E100D82DE93C209FE50010A0E11C3092A3
-S21902AD1BE504B04CE2000053E30100001A0700A0E300A81BE9CE
-S21902AD30143092E5030051E10300003A183092E50000A0E30395
-S21902AD450051E10000003A0100A0E300A81BE900C503000DC0C1
-S21902AD5AA0E100D82DE930009FE504B04CE21C3090E502C0A0B5
-S21902AD6FE1000053E30500000A143090E5003081E5182090E5A6
-S21902AD8400208CE50000A0E300A81BE90700A0E300A81BE900BD
-S21902AD99C503000DC0A0E100D82DE92C209FE51C3092E504B053
-S21902ADAE4CE2000053E30500000A083092E5003080E50C209214
-S21902ADC3E5002081E50000A0E300A81BE90700A0E300A81BE9A4
-S21902ADD800C503000DC0A0E1F0DF2DE904B04CE200A0A0E3005F
-S21902ADED50A0E10180A0E108C19FE50290A0E11C309CE50C70CE
-S21902AE02A0E10A0053E10100001A0700A0E3F0AF1BE900609736
-S21902AE17E5E8109FE5E8209FE50600A0E1022061E0ACF6FFEBBC
-S21902AE2C0E02A0E3021A80E2202090E4000031E1FCFFFF1A1609
-S21902AE410F07EE9A0F07EE0000A0E10000A0E10000A0E10000D0
-S21902AE56A0E10000A0E10000A0E1101F11EE011AC1E3101F0140
-S21902AE6BEE151F07EE0000A0E10000A0E10000A0E10000A0E1B0
-S21902AE800000A0E10000A0E1103097E5034005E00410A0E10833
-S21902AE955085E070009FE50520A0E110F8FFEB68809FE50400F0
-S21902AEAA00EA083097E560009FE50130C3E3034084E009F8FF8C
-S21902AEBFEB050054E10600002A0400A0E10FE0A0E106F0A0E1B6
-S21902AED4730200EB00A050E2F2FFFF0A004089E5101F11EE0159
-S21902AEE91A81E3031081E3101F01EE0800A0E1FAF7FFEB0A00CC
-S21902AEFEA0E1F0AF1BE900C5030054B9020074BA0200F8FC0217
-S21902AF130014FD020010FD02000DC0A0E1F0DF2DE904B04CE2EB
-S21902AF2804D04DE20270A0E10090A0E30050A0E1A4C09FE5014A
-S21902AF3D60A0E11C209CE50CA0A0E12C300BE5090052E107009E
-S21902AF52A0034300000A00809AE584109FE584209FE50800A00C
-S21902AF67E1022061E05BF6FFEB0E02A0E3021A80E2202090E48A
-S21902AF7C000031E1FCFFFF1A160F07EE9A0F07EE0000A0E1005A
-S21902AF9100A0E10000A0E10000A0E10000A0E10000A0E1101FF0
-S21902AFA611EE011AC1E3101F01EE151F07EE0000A0E10000A069
-S21902AFBBE10000A0E10000A0E10000A0E10000A0E11C009FE5F5
-S21902AFD00610A0E1072086E00530A0E1C1F7FFEB090000EA00F6
-S21902AFE5C5030074BA0200B4BB020018FD020070009FE5077065
-S21902AFFA64E0B9F7FFEB0130C4E3035085E0036086E0000057AD
-S21902B00FE30D0000DA0500A0E108309AE50610A0E1030057E14C
-S21902B0240740A0B10340A0A10420A0E10FE0A0E108F0A0E11A4C
-S21902B0390200EB009050E2EBFFFF0A2C301BE5005083E5101F16
-S21902B04E11EE011A81E3031081E3101F01EE0C009FE5A0F7FFAD
-S21902B063EB0900A0E1010000EA10FD020014FD0200F0AF1BE9AC
-S21902B0780DC0A0E100D82DE904B04CE2070050E300F19F971726
-S21902B08D0000EAB0B00200B8B00200C0B00200C8B00200D0B085
-S21902B0A20200D8B00200E0B00200E8B0020040009FE500A81B53
-S21902B0B7E93C009FE500A81BE938009FE500A81BE934009FE508
-S21902B0CC00A81BE930009FE500A81BE92C009FE500A81BE928D8
-S21902B0E1009FE500A81BE924009FE500A81BE920009FE500A883
-S21902B0F61BE938FD020058FD020070FD020088FD0200A4FD0213
-S21902B10B00BCFD0200CCFD0200F0FD020014FE02000DC0A0E151
-S21902B12000D82DE9003090E5000053E104B04CE20500000A0457
-S21902B1353090E5001083E5043090E5090081E8041080E500A8A5
-S21902B14A1BE9041083E5001083E5043081E5003081E500A81BFE
-S21902B15FE90DC0A0E100D82DE90010A0E1000091E504B04CE2C6
-S21902B174010050E10400000A003090E5003081E5002090E504AB
-S21902B1891082E500A81BE90000A0E300A81BE90DC0A0E170D8C2
-S21902B19E2DE93C309FE53C209FE53C509FE5043083E504B04C03
-S21902B1B3E2003083E50F40A0E3042082E50260A0E1002082E53F
-S21902B1C80600A0E10510A0E1D1FFFFEB615E85E2014054E2F9FE
-S21902B1DDFFFF5A70A81BE9E4410300DC410300EC4103000DC09D
-S21902B1F2A0E130D82DE90620A0E304B04CE20050A0E1100085B1
-S21902B207E20140A0E1B3F5FFEB0410A0E118009FE50620A0E31B
-S21902B21CAFF5FFEB10309FE5005083E50500A0E1020000EB3069
-S21902B231A81BE920C503002CC503000DC0A0E100D82DE900300D
-S21902B246A0E1101080E204B04CE200C093E50020A0E30FE0A09D
-S21902B25BE100F09CE500A81BE90DC0A0E1F0DF2DE944319FE5AD
-S21902B27004B04CE288D04DE23CC19FE50540A0E34C8093E500CC
-S21902B28590A0E100509CE50270A0E1AC100BE5000058E31000E1
-S21902B29A000A0850A0E100C095E514219FE520309CE524308C11
-S21902B2AFE50C3095E520208CE5000053E30700001A0500A0E15A
-S21902B2C4F8109FE50320A0E10FE0A0E100F09CE50C3095E501A6
-S21902B2D93083E30C3085E5D0609FE50A0000EA003095E50500C6
-S21902B2EEA0E10FE0A0E118F093E5C8009FE5483096E50140440F
-S21902B303E20FE0A0E103F0A0E1000054E33E0000DA003095E56F
-S21902B3180500A0E10FE0A0E10CF093E5000050E3EEFFFF0AA8DE
-S21902B32D900BE50EA0A0E3A4A00BE5AC301BE59C700BE5A03077
-S21902B3420BE50500A0E17C409FE50030A0E3003084E5A8104BEA
-S21902B357E200C095E50220A0E300408DE50A3087E00FE0A0E156
-S21902B36C10F09CE558309FE5002093E50460A0E1000052E3186E
-S21902B38100000A8EFBFFEB0040A0E140009FE5D4F6FFEB0900F1
-S21902B396A0E10A10A0E102F9FFEBAC001BE50710A0E1FFF8FF60
-S21902B3ABEB0400A0E193FBFFEB0B0000EA500000002CC5030065
-S21902B3C0E404030020C50300400D0300F0A8030028C50300249F
-S21902B3D5FE0200002095E50500A0E10FE0A0E118F092E500301D
-S21902B3EA96E5000053E3F8FFFF0A000058E30400000A00309588
-S21902B3FFE5242093E5202083E50010A0E3241083E5F0AF1BE917
-S21902B4140DC0A0E100D82DE930309FE5030051E104B04CE200E5
-S21902B429C0A0E10200001A0130A0E3003081E500A81BE9003084
-S21902B43E9CE50C00A0E124C093E50FE0A0E108F09CE500A81BDC
-S21902B453E9F0A803000DC0A0E1F0D92DE9DC309FE5DC209FE51C
-S21902B46804B04CE20070A0E14C6093E50180A0E1005092E50008
-S21902B47D0056E31000000A0650A0E100C095E5B8209FE52030A3
-S21902B4929CE524308CE50C3095E520208CE5000053E3070000B4
-S21902B4A71A0500A0E19C109FE50320A0E10FE0A0E100F09CE534
-S21902B4BC0C3095E5013083E30C3085E5003095E50500A0E10F42
-S21902B4D1E0A0E118F093E574009FE51FFFFFEB004050E20D00FF
-S21902B4E6000A0700A0E10C1084E20E20A0E3F9F4FFEB0800A006
-S21902B4FBE1082094E51A1084E20E2042E2F4F4FFEB44009FE537
-S21902B5100410A0E100FFFFEB080094E5000000EA0400A0E100B1
-S21902B5250056E30400000A003095E5242093E5202083E50010A5
-S21902B53AA0E3241083E5F0A91BE9500000002CC50300E404030A
-S21902B54F0020C50300E4410300DC4103000DC0A0E1F0D92DE983
-S21902B56404B04CE20050A0E30280A0E1080055E10160A0E10DE6
-S21902B5790000AA34709FE58541A0E1060094E7001097E506404A
-S21902B58E84E0042094E5D1F4FFEB003097E5042094E5015085D2
-S21902B5A3E2023083E0003087E5080055E1F2FFFFBAF0A91BE9F4
-S21902B5B8F4A803000DC0A0E1F0D92DE904B04CE280D04DE2004A
-S21902B5CD60A0E10C019FE50170A0E1E0FEFFEB008050E20C5028
-S21902B5E288120800001AF5FAFFEB0040A0E1F0009FE5F0109FE4
-S21902B5F7E50720A0E1EC509FE538F6FFEB0400A0E1FDFAFFEB6D
-S21902B60CA0500BE50600A0E19C700BE5A0104BE2003096E50136
-S21902B62120A0E30FE0A0E114F093E5C0209FE5003092E5000073
-S21902B63653E30B00000AE0FAFFEB0040A0E1AC009FE526F6FFDD
-S21902B64BEB0500A0E10E10A0E354F8FFEB0E0085E20E1047E2DF
-S21902B66051F8FFEB0400A0E1E5FAFFEB003096E5242093E500E6
-S21902B6750052E31200000A1E1085E274009FE50420A0E3A1F69D
-S21902B68AFFEB000050E30C00000A64309FE5002096E5005083EB
-S21902B69FE5144092E524C092E554309FE50600A0E1143082E54A
-S21902B6B40710A0E10FE0A0E104F09CE5003096E5144083E50096
-S21902B6C90058E30E00000A087088E52C009FE50810A0E18EFE58
-S21902B6DEFFEB0C0000EADC41030034FE020054FE0200ECA20337
-S21902B6F30028C5030064FE0200F0040300F4A803005CB502003E
-S21902B708E4410300A0001BE59C101BE524F8FFEBF0A91BE90D01
-S21902B71DC0A0E100D82DE914309FE5000093E5002090E504B058
-S21902B7324CE20FE0A0E11CF092E500A81BE92CC503000DC0A0CD
-S21902B747E1F0D82DE9F8209FE5F8109FE5022061E004B04CE2BA
-S21902B75CF0709FE55CD04DE2004097E50400A0E15BF4FFEB0E0A
-S21902B77102A0E3021A80E2202090E4000031E1FCFFFF1A160FBA
-S21902B78607EE9A0F07EE0000A0E10000A0E10000A0E10000A0F1
-S21902B79BE10000A0E10000A0E1101F11EE011AC1E3101F01EEA4
-S21902B7B0151F07EE0000A0E10000A0E10000A0E10000A0E10050
-S21902B7C500A0E10000A0E150504BE20500A0E10FE0A0E104F0AF
-S21902B7DAA0E1101F11EE011A81E3031081E3101F01EE0560A08B
-S21902B7EFE140404BE20400A0E158109FE50320A0E310F6FFEBA9
-S21902B804000050E31400000A48009FE5B4F5FFEB3430A0E3246D
-S21902B819308DE504E0A0E10F00BEE80DC0A0E10F00ACE80F0057
-S21902B82EBEE80F00ACE800309EE500308CE50F0096E8C2E0FF33
-S21902B843EB0800A0E3150000EA7CBC0200B4BB020000C5030001
-S21902B85874FE020078FE02000532A0E3143087E530C0D5E52FA5
-S21902B86D10D5E52EE0D5E52D20D5E50C1481E18134A0E10E243C
-S21902B88282E1012082E2083087E50114A0E10C2087E59102035A
-S21902B897E08330A0E1053283E2183087E5F0A81BE90DC0A0E147
-S21902B8AC10D82DE944309FE504B04CE20040A0E1033004E000D0
-S21902B8C10053E30A00000A30009FE50410A0E184F5FFEB28301D
-S21902B8D69FE5033004E0000053E30100000A0400A0E310A81B20
-S21902B8EBE90200A0E310A81BE90300A0E110A81BE97E007E00DB
-S21902B90098FE0200100010000DC0A0E100D82DE934309FE5004F
-S21902B91520A0E3030050E104B04CE20100008A030051E1040099
-S21902B92A008A1C309FE5030050E10200008A030051E1000000B2
-S21902B93F9A0120A0E30200A0E100A81BE94400020048E7020008
-S21902B9540DC0A0E130D82DE904B04CE20040A0E1103F11EE2357
-S21902B96951A0E1015015E21000000A0E02A0E3021A80E220203D
-S21902B97E90E4000031E1FCFFFF1A160F07EE9A0F07EE0000A0BB
-S21902B993E10000A0E10000A0E10000A0E10000A0E10000A0E132
-S21902B9A8101F11EE0C10C1E3101F01EE161F07EE98C09FE598D9
-S21902B9BDE09FE598309FE5A41BA0E194209FE5811BA0E10030F9
-S21902B9D281E58C309FE5002081E5003084E5000091E50E3000E0
-S21902B9E7E00E0053E10100000A01C05CE2F9FFFF1A6C309FE5E7
-S21902B9FC6C209FE5033000E0002081E5000053E30B00000A0437
-S21902BA113094E40128A0E3010073E30500001A042042E2000007
-S21902BA2652E3020000DA043094E4010073E3F9FFFF0A0000529D
-S21902BA3BE30000A003000055E30200000A101F11EE0F1081E374
-S21902BA50101F01EE30A81BE9404B4C0080008000500050002049
-S21902BA65002000D000D0007E007E00FF00FF000DC0A0E1F0D8F5
-S21902BA7A2DE904B04CE20040A0E10160A0E102E0A0E100C0A052
-S21902BA8FE3103F11EE2351A0E1015015E21000000A0E02A0E380
-S21902BAA4021A80E2202090E4000031E1FCFFFF1A160F07EE9A7A
-S21902BAB90F07EE0000A0E10000A0E10000A0E10000A0E1000069
-S21902BACEA0E10000A0E1101F11EE0C10C1E3101F01EE161F0712
-S21902BAE3EEAC309FE5A40BA0E1A8709FE5800BA0E1003080E58C
-S21902BAF8070000EA9C309FE5003080E5042094E4043096E4030F
-S21902BB0D0052E18CC09F151600001A04E04EE200005EE3130051
-S21902BB2200DA7C309FE5003080E5002096E5002084E500C090F4
-S21902BB37E56C109FE507300CE0070053E10600000A4C209FE5AF
-S21902BB4C011051E20700000A00C090E502300CE0020053E1F906
-S21902BB61FFFF1A44309FE503300CE0000053E3E1FFFF0A243026
-S21902BB769FE5003080E5000055E30200000A101F11EE0F108188
-S21902BB8BE3101F01EE0C00A0E1F0A81BE95000500080008000D4
-S21902BBA0FF00FF001099109910001000404B4C007E007E000D39
-S21902BBB5C0A0E100D82DE904B04CE200E0A0E1103F11EE23C1D0
-S21902BBCAA0E101C01CE21000000A0E02A0E3021A80E220209024
-S21902BBDFE4000031E1FCFFFF1A160F07EE9A0F07EE0000A0E107
-S21902BBF40000A0E10000A0E10000A0E10000A0E10000A0E110A0
-S21902BC091F11EE0C10C1E3101F01EE161F07EE50209FE5503085
-S21902BC1E9FE50512A0E3003081E5012042E2000052E3FCFFFFE2
-S21902BC33CA0020A0E3043091E4012082E20130CEE4330052E30F
-S21902BC48FAFFFF9A24309FE5003081E500005CE30200000A1085
-S21902BC5D1F11EE0F1081E3101F01EE0000A0E300A81BE9400D90
-S21902BC72030098009800FF00FF000DC0A0E110D82DE94C309F1E
-S21902BC87E504B04CE2000093E50140A0E1000050E30000000A63
-S21902BC9C0FF3FFEB0030D4E5020053E30900001A1C0084E224B6
-S21902BCB1109FE50620A0E315F5FFEB000050E30300001A1010D6
-S21902BCC684E210009FE50420A0E302F3FFEB10A81BE9F8A80383
-S21902BCDB0020C50300F00403000DC0A0E1F0DF2DE90010A0E3A8
-S21902BCF04B2FA0E36C319FE504B04CE252DF4DE2000083E5165A
-S21902BD055E4BE20500A0E113F5FFEB54419FE554119FE50030ED
-S21902BD1AA0E30030C4E50130C4E50230C4E50330C4E50100A07F
-S21902BD2FE33C219FE528304BE20200C3E734319FE528204BE2A5
-S21902BD440300C2E72CC19FE50620A0E328304BE20C20C3E720A2
-S21902BD59319FE55C310BE5510F4BE2DDF2FFEBFFC0A0E3053DD2
-S21902BD6EE0E328104BE203C0C1E74F2FE0E30130A0E102C0C3AE
-S21902BD83E7F8309FE503C0C1E7F4109FE528304BE201C0C3E72E
-S21902BD98EC309FE528104BE203C0C1E7E4109FE528304BE20121
-S21902BDADC0C3E70270A0E3D8309FE528104BE203C0C1E705902A
-S21902BDC2A0E1CC109FE528304BE201C0C3E70480A0E1C0309F00
-S21902BDD7E528104BE203C0C1E70850A0E1013083E203C0C1E7C1
-S21902BDEC34004BE2A8209FE54410A0E3390000EB5BAF4BE279E3
-S21902BE010700EB0060A0E10900A0E14B1FA0E34430A0E30030B4
-S21902BE168DE50A20A0E1013043E2A90000EBA00200EB0030D577
-S21902BE2BE5000053E30800001A0130D8E5000053E30500001A7B
-S21902BE400230D5E5000053E30200001A0340D5E5000054E31262
-S21902BE5500000A4400A0E3410000EB0000A0E31B0000EAF8A8AC
-S21902BE6A0300F004030020C50300C8FEFFFFC9FEFFFFCAFEFF8A
-S21902BE7FFF55553412BCFEFFFFBDFEFFFFBEFEFFFFC0FEFFFFD1
-S21902BE94C1FEFFFFC2FEFFFFC4FEFFFF7CBC0200500700EB00DB
-S21902BEA90066E07D0E50E3DBFFFF3A0730A0E1017047E2000014
-S21902BEBE53E3CEFFFFCA4400A0E3260000EB08309FE50000E028
-S21902BED3E3004083E5000000EA28C50300F0AF1BE90DC0A0E1FD
-S21902BEE870D82DE90118A0E16C309FE504B04CE20040A0E10281
-S21902BEFD50A0E14108A0E100C093E50360A0E100005CE309002A
-S21902BF12000A0038A0E12328A0E1B430DCE1020053E1010000AC
-S21902BF271A0000E0E370A81BE900C09CE500005CE3F7FFFF1A76
-S21902BF3C0008A0E12008A0E1BD0200EBB400C4E1085084E500F3
-S21902BF513096E5003084E50000A0E3004086E570A81BE9FCA8A2
-S21902BF6603000DC0A0E1F0D92DE90008A0E14008A0E15C309F12
-S21902BF7BE504B04CE20060A0E3005093E50380A0E1060055E1F8
-S21902BF901000000A0078A0E1B440D5E12708A0E1A60200EB0095
-S21902BFA50054E10600001A000056E30200000A003095E500300C
-S21902BFBA86E5010000EA003095E5003088E50560A0E100509503
-S21902BFCFE5000055E3EFFFFF1AF0A91BE9FCA803000DC0A0E1A0
-S21902BFE4F0D92DE9BC309FE504D04DE20070A0E1086097E50416
-S21902BFF9B04CE2B620D6E10180A0E1045097E5030052E1003089
-S21902C00EA003B630C601B430D6E1B230C5E1B400D6E1860200B0
-S21902C023EB0040A0E10500A0E10A0200EB0020A0E10600A0E1B0
-S21902C0380410A0E1E30100EB0008B0E11D00001A60309FE500A4
-S21902C04D5093E5000055E31900000AB420D5E1B230D6E103008E
-S21902C06252E11200001AB400D6E1730200EB084040E2B000D6A8
-S21902C077E1700200EB0038A0E10500A0E1081086E22338A0E1D4
-S21902C08C00308DE50420A0E10830A0E10FE0A0E108F095E507AF
-S21902C0A100A0E1BB0100EB060000EAFFFF0000FCA80300005076
-S21902C0B695E5000055E3E5FFFF1A0700A0E1B30100EBF0A91BE4
-S21902C0CBE90DC0A0E1F0DF2DE90338A0E104B04CE20160A0E1BD
-S21902C0E000A0A0E10290A0E1E8C09FE54378A0E1F450DBE10C9C
-S21902C0F50056E13500008AD8009FE5840100EB008050E231008A
-S21902C10A000A083086E2BC30C8E1084098E50508A0E10450989B
-S21902C11FE52008A0E1450200EBB000C4E10708A0E12008A0E1B6
-S21902C134410200EBB200C4E1BC00D8E13E0200EB0030A0E30A0D
-S21902C14910A0E1B400C4E10620A0E1B630C4E1080084E2DFF180
-S21902C15EFFEB0C0085E274109FE50420A0E3DBF1FFEB1000856E
-S21902C173E20910A0E10420A0E3D7F1FFEB1170A0E30970C5E5B4
-S21902C188B430D4E1B230C5E1BC60D8E10500A0E1AF0100EB0084
-S21902C19D20A0E10400A0E10610A0E1880100EB0008A0E12008A4
-S21902C1B2A0E1210200EB0710A0E1B600C4E10920A0E10800A09D
-S21902C1C7E1F10000EB0800A0E1700100EBF0AF1BE9BE05000054
-S21902C1DCEA050000F00403000DC0A0E1F0D92DE904B04CE21042
-S21902C1F1D04DE20080A0E10240A0E10400A0E10170A0E12C606C
-S21902C2064BE20610A0E10350A0E1440600EB000050E30F00000D
-S21902C21BBAB400D4E1060200EB0048A0E1B400D5E12448A0E1D1
-S21902C230020200EB0038A0E10800A0E10710A0E12338A0E1004D
-S21902C245308DE50620A0E10430A0E19DFFFFEB0000A0E30300D3
-S21902C25A00EA0C009FE50C109FE51FF3FFEB0000E0E3010000EE
-S21902C26FEAA4FE0200C8FE0200F0A91BE90DC0A0E1F0D92DE993
-S21902C28464009FE50240A0E1004080E55C809FE504B04CE2000C
-S21902C2990098E50370A0E1F450DBE14C609FE58CF1FFEB003051
-S21902C2AE96E5000053E30900000A0508A0E12008A0E1DE01009A
-S21902C2C3EB001096E5B400C1E1003097E5003081E50020A0E3AE
-S21902C2D8002088E5F0A91BE914009FE50410A0E1FEF2FFEBF029
-S21902C2EDA91BE904A9030000A9030008A90300D8FE02000DC0D3
-S21902C302A0E1F0DF2DE904B04CE20CD04DE20050A0E1B400D374
-S21902C317E10160A0E104909BE50270A0E1C50100EB0048A0E1C6
-S21902C32C34004BE214209FE52418A0E1E9FEFFEB000050E30219
-S21902C3410000AA0000E0E31F0000EA7CC2020078109FE57800A6
-S21902C3569FE578309FE5041099E8005081E50480A0E1006080EB
-S21902C36BE501A0A0E1007083E50060E0E30070A0E1821262E0ED
-S21902C38054009FE5012182E0901C83E02333A0E1825183E01415
-S21902C3950600EB0040A0E1120600EB000064E0050050E1040059
-S21902C3AA002A3E0100EB00309AE5000053E3F7FFFF1A00609738
-S21902C3BFE52808A0E1E7FEFFEB0600A0E1030000EA00A90300DD
-S21902C3D404A9030008A90300D34D6210F0AF1BE90DC0A0E11056
-S21902C3E9D82DE90030D0E504B04CE2FF0053E30A00001A0130F9
-S21902C3FED0E5FF0053E30700001A0230D0E5FF0053E3040000F8
-S21902C4131A0330D0E5FF0053E30100001A0100A0E310A81BE97B
-S21902C4284C409FE50420A0E30410A0E136F3FFEB000050E3F76F
-S21902C43DFFFF0A0030D4E5000053E30900001A0130D4E50000AF
-S21902C45253E30600001A0230D4E5000053E30300001A0330D433
-S21902C467E50100A0E3000053E30000000A0000A0E310A81BE9D1
-S21902C47CF00403000DC0A0E1F0D82DE904B04CE20CD04DE20094
-S21902C49150A0E1044095E50160A0E1100084E2CFFFFFEB0000F0
-S21902C4A650E30700000A0400A0E10010D4E50020A0E30F100125
-S21902C4BBE20111A0E1C20000EB0008B0E10200000A0500A0E118
-S21902C4D0B00000EB2D0000EA28704BE20700A0E10C1084E204CB
-S21902C4E520A0E3FCF0FFEB24004BE20610A0E10620A0E3F8F049
-S21902C4FAFFEB0030D4E5B200D4E10F3003E20361A0E14B010097
-S21902C50FEB000066E0BC00C5E10930D4E5060053E30C00000A39
-S21902C524020000CA010053E30300000A140000EA110053E30C9A
-S21902C53900000A110000EA0500A0E1063084E0083085E5071008
-S21902C54EA0E1420100EB0D0000EA0500A0E1063084E00830854E
-S21902C563E50710A0E1B90200EB070000EA0500A0E1063084E088
-S21902C578083085E50710A0E196FEFFEB010000EA0500A0E181FD
-S21902C58D0000EBF0A81BE90DC0A0E1F0DF2DE90060A0E10830BF
-S21902C5A286E2080113E8038048E004B04CE2045096E54801A0CC
-S21902C5B7E1BC30D6E10F0000E2083083E0BC30C6E1400080E322
-S21902C5CC0000C5E50070A0E30170C5E501A0A0E1BC00D6E10204
-S21902C5E190A0E1150100EB80409FE5B200C5E1B000D4E1110119
-S21902C5F600EBB400C5E1B030D4E16C109FE5013083E2B030C415
-S21902C60BE1B670C5E14030A0E30830C5E509A0C5E50420A0E397
-S21902C620BA70C5E10C0085E2ACF0FFEB100085E20910A0E10420
-S21902C63520A0E3A8F0FFEB0500A0E10810A0E10720A0E160009D
-S21902C64A00EB0008A0E12008A0E1F90000EB041089E2BA00C5D5
-S21902C65FE1022BA0E30600A0E1CB0000EBF0AF1BE90CA9030096
-S21902C674F00403000DC0A0E1F0D82DE97C209FE5003092E504BC
-S21902C689B04CE2000053E31A00001A03E0A0E10130A0E3003005
-S21902C69E82E50E40A0E15C709FE504C0A0E158509FE503E0A006
-S21902C6B3E354609FE50500A0E1001096E507208CE0023002E296
-S21902C6C8022083E05ECE8CE2103085E2042083E70CC08CE200C8
-S21902C6DD1080E501E05EE228309FE50010A0E1BE30C0E114405B
-S21902C6F284E2140081E2F0FFFF5A001086E5F0A81BE9000503E8
-S21902C7070060A9030010A9030010C10300EA0500000DC0A0E13D
-S21902C71C00D82DE960309FE504B04CE200C093E500005CE31294
-S21902C73100000A00209CE5002083E510309CE504308CE5401003
-S21902C7469FE5143083E208308CE538E09FE50030A0E3BC30CCFA
-S21902C75BE1003091E52C209FE5013083E2003081E5001092E5B8
-S21902C77000009EE5033061E0000053E100308EC50C00A0E10072
-S21902C785A81BE910C10300F8040300F4040300FC0403000DC04E
-S21902C79AA0E100D82DE920209FE5003092E51C109FE501304385
-S21902C7AFE2003082E5003091E5003080E504B04CE2000081E572
-S21902C7C400A81BE9F804030010C103000DC0A0E100D82DE9029C
-S21902C7D91051E204B04CE202C0A0E10300004AB230D0E00210EB
-S21902C7EE51E203C08CE0FBFFFF5A010071E30500001A0030D006
-S21902C803E5FF20CEE302E083E1FFECCEE30E38A0E123C88CE064
-S21902C8180C08A0E12C28A0E130109FE520C882E00C3061E0010E
-S21902C82D005CE103C0A0C10C00E0E10008A0E12E0880E160E859
-S21902C842A0E1200CA0E10008A0E10E0C80E12008A0E100A81B3C
-S21902C857E9FFFF00000DC0A0E100D82DE90020A0E304D04DE2FC
-S21902C86CBC30D0E104B04CE210204BE50910D0E50F104BE5BEF6
-S21902C88120D0E1B011D0E1B2C1D0E1023083E0013083E0B0213A
-S21902C8965BE10C3083E0B200D0E1023083E0000083E000A81B8D
-S21902C8ABE90DC0A0E110D82DE904B04CE210D04DE2B4009FE513
-S21902C8C094FFFFEB004050E20200001AA8009FE584F1FFEBFEC8
-S21902C8D5FFFFEA101094E594209FE520004BE2DBFAFFEBBC00C6
-S21902C8EAC4E10008B0E12600000A84209FE5003092E5B4015BE5
-S21902C8FFE1013083E2003082E54C0000EB020B50E30500000A89
-S21902C91468309FE5030050E10C00000A0400A0E19BFFFFEBE3B5
-S21902C929FFFFEA54309FE5002093E5101094E5012082E200202C
-S21902C93E83E5041084E50400A0E11A104BE2CBFEFFEBD9FFFF92
-S21902C953EA30309FE5002093E5101094E5012082E2002083E5BC
-S21902C968041084E50400A0E1C70300EBD0FFFFEAEA0500000451
-S21902C97DFF02000C05030006080000040503000805030004005B
-S21902C992A0E17FFFFFEB10A81BE90DC0A0E170D82DE904B04C38
-S21902C9A7E210D04DE20050A0E128604BE20600A0E10240A0E1B3
-S21902C9BC0620A0E3C6EFFFEB22004BE238109FE50620A0E3C291
-S21902C9D1EFFFEB0448A0E12408A0E1170000EBBC014BE11010EC
-S21902C9E695E5BC20D5E10600A0E11BFAFFEB10209FE50030922D
-S21902C9FBE5013083E2003082E5010000EA20C503001005030023
-S21902CA1070A81BE90DC0A0E1203CA0E1003C83E1FF2800E2001A
-S21902CA25D82DE9FF0C00E20004A0E1220480E1000083E104B0F6
-S21902CA3A4CE200A81BE90DC0A0E100D82DE90008A0E1FF38000A
-S21902CA4FE2200CA0E1230480E104B04CE200A81BE90DC0A0E1D8
-S21902CA6430D82DE90040A0E1080094E504B04CE2B030D0E101E2
-S21902CA7950A0E1080053E31600001ABC10D4E10020A0E34FFFF0
-S21902CA8EFFEB0008A0E120C8B0E11000001A083094E500C0C342
-S21902CAA3E5082094E5B2C0C2E1080094E5BC10D4E10C20A0E12D
-S21902CAB844FFFFEB0008A0E12008A0E1DDFFFFEB083094E5018B
-S21902CACD10A0E3B200C3E10520A0E10400A0E1ACFEFFEB0400A1
-S21902CAE2A0E12BFFFFEB30A81BE90DC0A0E1F0DF2DE904B04C94
-S21902CAF7E204D04DE20060A0E10140A0E1307086E2048097E593
-S21902CB0C020014E3085097E50290A0E10F00000A1830A0E3BC8D
-S21902CB2130C7E10C30D5E550019FE59030C3E3603083E30C30BD
-S21902CB36C5E5B5FFFFEB2C104BE22C000BE50420A0E3140085D6
-S21902CB4BE263EFFFEB0030A0E3B831C6E1060000EAB831D6E1DD
-S21902CB60143083E2BC30C7E10C20D5E5A020C2E3502082E30C50
-S21902CB7520C5E50C30D5E50F30C3E30C30C5E5580096E5A1FFA6
-S21902CB8AFFEB040085E5540096E59EFFFFEB0030A0E3B031C588
-S21902CB9FE1000059E3080085E508A086E21800001AB401D6E13D
-S21902CBB4A1FFFFEBB000C5E1B601D6E19EFFFFEBB200C5E10D2B
-S21902CBC940C5E5B831D6E1000053E3083084130D30C515A0000A
-S21902CBDE9FE596FFFFEBBE00C5E1B291C5E10420A0E390109F05
-S21902CBF3E50C0088E238EFFFEB100088E20A10A0E10420A0E3FE
-S21902CC0834EFFFEB0630A0E30930C8E5BC00D7E188FFFFEBB2CD
-S21902CC1D00C8E1BC40D7E10800A0E10BFFFFEB0020A0E105007B
-S21902CC32A0E10410A0E1E4FEFFEB0008A0E12008A0E17DFFFF57
-S21902CC47EB0610A0E3B001C5E10A20A0E10700A0E14DFEFFEB8E
-S21902CC5C043096E50A0053E30A00001A1C109FE51C0086E2185D
-S21902CC71209FE50630A0E1B20200EB110000EAB2050402B2053E
-S21902CC860000F0040300C0D4010094CE02000D30D5E503001395
-S21902CC9BE30200001AB831D6E1000053E30600000A1C0086E214
-S21902CCB0FA1FA0E308209FE50630A0E1A10200EB000000EA7879
-S21902CCC5CE0200F0AF1BE90DC0A0E1F0DF2DE904B04CE208D0F3
-S21902CCDA4DE22C000BE52C301BE5089090E5046093E50800990D
-S21902CCEFE530100BE546FFFFEB00A0A0E1040099E543FFFFEB16
-S21902CD040080A0E1B200D9E14BFFFFEB0058A0E1B000D9E145EA
-S21902CD1958A0E147FFFFEB149086E20048A0E12C301BE5147040
-S21902CD2EA0E3BC70C3E10A00A0E15030A0E30C30C9E54448A0F2
-S21902CD43E132FFFFEB040089E50800A0E12FFFFFEB080089E54F
-S21902CD58010BA0E337FFFFEBBE00C9E10030A0E3B231C9E10563
-S21902CD6D58A0E1B031C9E12508A0E130FFFFEBB401C6E10448D7
-S21902CD82A0E12408A0E12CFFFFEBB200C9E10D70C9E50420A007
-S21902CD97E370109FE50C0086E2CEEEFFEB100086E230101BE5C7
-S21902CDAC0420A0E3CAEEFFEB0650A0E30950C6E52C301BE5BC2D
-S21902CDC100D3E11DFFFFEBB200C6E12C301BE5BC40D3E1060031
-S21902CDD6A0E19FFEFFEB0020A0E10900A0E10410A0E178FEFF04
-S21902CDEBEB0008A0E12008A0E111FFFFEBB001C9E130201BE56A
-S21902CE002C001BE50510A0E1E1FDFFEB000000EAF0040300F0BB
-S21902CE15AF1BE90DC0A0E100D82DE94C309FE50010A0E300205F
-S21902CE2A93E504B04CE2010052E10D00000A03C0A0E1000052B1
-S21902CE3FE10600001A000051E30200000A003092E5003081E559
-S21902CE54010000EA003092E500308CE50210A0E1002092E50065
-S21902CE690052E3F2FFFF1A00A81BE914C103000DC0A0E100D8C4
-S21902CE7E2DE90010A0E30120A0E304B04CE216FFFFEB00A81BA7
-S21902CE93E90DC0A0E100D82DE90030A0E3043080E504B04CE230
-S21902CEA8DAFFFFEB00A81BE90DC0A0E110D82DE90040A0E144AE
-S21902CEBD0094E504B04CE2000050E30500000A003090E54430A3
-S21902CED284E52FFEFFEB440094E5000050E3F9FFFF1A10A81BF0
-S21902CEE7E90DC0A0E110D82DE90030A0E304B04CE20040A0E1A4
-S21902CEFC043084E51C0084E2290200EB0400A0E1E7FFFFEB048C
-S21902CF1100A0E1BFFFFFEB10A81BE90DC0A0E1F0D82DE9017082
-S21902CF26A0E1082097E5BC10D7E104B04CE20C30D2E50050A081
-S21902CF3BE1040092E52332A0E10331A0E1014063E0036082E0AA
-S21902CF50AFFEFFEB542095E5003062E0000053E3170000CA02B5
-S21902CF653060E0044063E0036086E0000054E3120000DA043099
-S21902CF7A82E0543085E5442095E50030A0E3003087E5030052C9
-S21902CF8FE10600000A000000EA002092E5003092E5000053E337
-S21902CFA4FBFFFF1A007082E5020000EA447085E54C4085E5483F
-S21902CFB96085E50100A0E3F0A81BE90000A0E3F0A81BE90DC086
-S21902CFCEA0E130D82DE9083091E50040A0E1080093E504B04CB9
-S21902CFE3E28AFEFFEB583094E50050A0E1053063E0000053E35E
-S21902CFF8140000DA1C0084E2EA0100EB582094E5B831D4E10543
-S21902D00D1062E0030051E10310A0A1000051E30B0000DAB8312A
-S21902D022D4E1033061E0B831C4E1012082E0582084E50338B0EC
-S21902D037E10400000A380094E5B821D4E1140080E2011080E0C8
-S21902D04C23EEFFEB30A81BE90DC0A0E1F0DD2DE90080A0E1BC03
-S21902D06100D8E1086098E504B04CE2044098E50170A0E171FE11
-S21902D076FFEBB200C4E100A0A0E3BC50D8E10400A0E1F3FDFF01
-S21902D08BEB0020A0E10600A0E10510A0E1CCFDFFEB0008B0E194
-S21902D0A0F600001AC4339FE5005093E5000000EA005095E5006D
-S21902D0B50055E31200000AB200D6E1B441D5E15DFEFFEB0000B2
-S21902D0CA54E1F7FFFF1AB631D5E1000053E30A00000AB000D699
-S21902D0DFE10340A0E155FEFFEB000054E1EFFFFF1A0700A0E18F
-S21902D0F4081085E20420A0E304F0FFEB000050E3E9FFFF1A00E8
-S21902D1090055E3D800000A0C0085E2041087E20620A0E3EFED7B
-S21902D11EFFEB043095E5020053E30700000A0D30D6E504001305
-S21902D133E30400000A0500A0E169FFFFEB0800A0E193FDFFEB14
-S21902D148F0AD1BE9043095E5013043E2090053E303F19F97C2FB
-S21902D15D0000EA88D10200E8D1020080D4020050D2020050D21A
-S21902D1720200FCD2020040D30200D4D3020018D402005CD402F1
-S21902D187000D30D6E5020013E31000000A0230A0E3043085E52F
-S21902D19C040096E51BFEFFEB013080E2B000D6E1543085E522EB
-S21902D1B1FEFFEBB601C5E1002097E51210A0E3082085E500301A
-S21902D1C6A0E3B831C5E10500A0E1B035C5E18C0000EA0800A00C
-S21902D1DBE10710A0E1B9FEFFEBA50000EA1C0085E26F0100EBB1
-S21902D1F00D30D6E5041013E20200000A0130A0E3043085E59D27
-S21902D2050000EA020013E30300000A0500A0E10120A0E333FEC3
-S21902D21AFFEB970000EA100013E39500000A080096E5F8FDFF71
-S21902D22FEB583095E5013083E2030050E18F00001A0430A0E3CC
-S21902D244043085E5580085E58B0000EA0D30D6E5544095E510E3
-S21902D2590013E30200000A0500A0E10810A0E157FFFFEB050053
-S21902D26EA0E10810A0E128FFFFEB0D30D6E500A0A0E10100134C
-S21902D283E30800000A040096E5E0FDFFEB543095E5030050E122
-S21902D2980300001A013080E2543085E50520A0E3042085E55452
-S21902D2AD3095E5040053E10200001AB035D5E1000053E36E0028
-S21902D2C2000AB841D5E1000054E30700001A1C0085E235010086
-S21902D2D7EB0500A0E11010A0E30420A0E100FEFFEBB045C5E1FF
-S21902D2EC630000EA0130A0E3B035C5E1600000EA0D30D6E51048
-S21902D3010013E35D00000A0500A0E10810A0E12DFFFFEB080076
-S21902D31696E5BDFDFFEB583095E5013083E2030050E1540000BC
-S21902D32B1A0030A0E3043085E50500A0E1B6FEFFEB4F0000EA1E
-S21902D3400D30D6E5100013E31700000A0500A0E10810A0E11C77
-S21902D355FFFFEB080096E5ACFDFFEB583095E5013083E2030022
-S21902D36A50E10E00001A0D30D6E5010013E30900000A0500A0A7
-S21902D37FE11010A0E3543095E50A20A0E3042085E5013083E23F
-S21902D394543085E50A2042E2D2FDFFEB010000EA0830A0E304DE
-S21902D3A93085E50D30D6E5010013E33100000A1C0085E2FB0026
-S21902D3BE00EB0500A0E11110A0E3543095E50920A0E30A00008A
-S21902D3D3EA0500A0E10810A0E1CEFEFFEB0D30D6E500A0A0E166
-S21902D3E8010013E32300000A0500A0E11010A0E3543095E50AD4
-S21902D3FD20A0E3042085E5013083E2543085E50020A0E3B5FD0A
-S21902D412FFEB190000EA0D30D6E5100013E31600000A0500A04E
-S21902D427E10810A0E1E6FEFFEB080096E576FDFFEB583095E5BF
-S21902D43C013083E2030050E10D00001A1C0085E2D70000EB0A94
-S21902D45130A0E3043085E5080000EA0500A0E10010A0E3012042
-S21902D466A0E39FFDFFEB030000EA14C103000800A0E10710A09C
-S21902D47BE112FEFFEB00005AE30100001A0800A0E1C1FCFFEB32
-S21902D490F0AD1BE90DC0A0E100D82DE904B04CE201FDFFEBD900
-S21902D4A50000EB00A81BE90DC0A0E130D82DE954209FE504B0BC
-S21902D4BA4CE20040A0E10158A0E14558A0E10010A0E323EFFFCB
-S21902D4CFEB0130A0E3043084E5B451C4E15C2084E2402084E5B0
-S21902D4E4342084E524109FE524209FE5703084E2383084E5BE5A
-S21902D4F923C4E1003091E5003084E50000A0E3004081E530A80F
-S21902D50E1BE94806000014C10300EA0500000DC0A0E110D82D85
-S21902D523E90040A0E1043094E504B04CE2010000EAD6FFFFEB09
-S21902D538043094E5000053E30200000AB831D4E1000053E3F81C
-S21902D54DFFFF1A10A81BE90DC0A0E110D82DE904B04CE2004080
-S21902D562A0E1ECFFFFEB041094E5020051E30030A0130130A0E0
-S21902D57703040051E30320A0110120A003000052E30600000A80
-S21902D58C0400A0E11110A0E30730A0E3043084E50020A0E3510F
-S21902D5A1FDFFEB060000EA050051E30400001A0400A0E1063085
-S21902D5B6A0E3043084E51110A0E349FDFFEB0400A0E138FEFFAB
-S21902D5CBEB10A81BE90DC0A0E1F0D82DE904B04CE20160A0E1AD
-S21902D5E0005052E20040A0E1020000DA4C3094E5000053E303E0
-S21902D5F500001A0000A0E3F0A81BE94C0084E52B0000EA0430E3
-S21902D60A94E5040053E30070A0E3170000EA481094E50600A0E6
-S21902D61FE1AEECFFEB4C3094E5440094E5037087E0002090E569
-S21902D634036086E0442084E5055063E054FCFFEB440094E500B5
-S21902D6490050E3EBFFFF0A081090E50C30D1E5BC20D0E123323E
-S21902D65EA0E1032142E04C2084E50C30D1E52332A0E1031181B7
-S21902D673E0481084E5000055E30D00000A4C2094E5020055E18E
-S21902D688E2FFFFAA0600A0E1481094E50520A0E190ECFFEB4850
-S21902D69D3094E5057087E04C2094E5053083E0483084E502206C
-S21902D6B265E04C2084E50700A0E1F0A81BE90DC0A0E170D82D5B
-S21902D6C7E904B04CE20040A0E1380094E5005052E2010000CABB
-S21902D6DC0000A0E370A81BE9043094E5043043E2010053E30155
-S21902D6F100009A0000E0E370A81BE9B861D4E1000056E30C0091
-S21902D706001A34309FE5140080E2030055E10350A0210520A07D
-S21902D71BE16FECFFEB0400A0E11010A0E3B851C4E10620A0E14F
-S21902D730EDFCFFEB0500A0E170A81BE90000A0E370A81BE9B217
-S21902D7450500000DC0A0E170D82DE904B04CE20060A0E1024012
-S21902D75AA0E1041086E50350A0E1200100EB080086E50C40868E
-S21902D76FE534309FE5002093E50310A0E1105086E5000052E3A5
-S21902D7840400000A060052E10500000A002092E5000052E3FA6D
-S21902D799FFFF1A003091E5003086E5006081E570A81BE918C160
-S21902D7AE03000DC0A0E100D82DE94C109FE50020A0E3003091DC
-S21902D7C3E504B04CE2020053E10D00000A000053E10700001AE1
-S21902D7D8000052E30200000A003093E5003082E500A81BE90009
-S21902D7ED3093E5003081E500A81BE90320A0E1003093E50000EA
-S21902D80253E3F1FFFF1A00A81BE918C103000DC0A0E170D82D80
-S21902D817E970309FE504B04CE20050A0E3004093E50360A0E197
-S21902D82C050054E11500000AEC0000EB0C0094E9000063E002E2
-S21902D8410050E10C00003A000055E30200000A003094E5003037
-S21902D85685E5010000EA003094E5003086E5100094E50FE0A005
-S21902D86BE10CF094E5004096E50050A0E3010000EA0450A0E1FD
-S21902D880004094E5000054E3E9FFFF1A70A81BE918C103000D96
-S21902D895C0A0E1F0D92DE90070A0E1045097E5B200D5E104B07A
-S21902D8AA4CE263FCFFEB0040A0E1B000D5E160FCFFEB0100502D
-S21902D8BFE3020B54033B00001A186085E20600A0E1EC809FE55B
-S21902D8D40420A0E30810A0E10CEEFFEB000050E33300001AB6DE
-S21902D8E900D5E153FCFFEB010050E31C00001A0200A0E34FFCFA
-S21902D8FEFFEB0E4085E20410A0E1B600C5E10420A0E30600A031
-S21902D913E1F1EBFFEB126085E20600A0E1085085E20510A0E19C
-S21902D9280620A0E3EBEBFFEB0400A0E10810A0E10420A0E3E7CE
-S21902D93DEBFFEB0500A0E17C109FE50620A0E3E3EBFFEB1C30B6
-S21902D952A0E3BC30C7E10700A0E168209FE50610A0E10CFCFF70
-S21902D967EB120000EAB600D5E132FCFFEB020050E30E00001ADC
-S21902D97C4C409FE5003094E5000053E30A00000A0E1085E208FF
-S21902D9910094E50420A0E3DDEDFFEB006050E20400001A0810DE
-S21902D9A685E2040094E50620A0E3CAEBFFEB006084E50700A0C9
-S21902D9BBE175FBFFEBF0A91BE9F004030020C50300060800008B
-S21902D9D01CC103000DC0A0E1F0DF2DE904B04CE208D04DE2003F
-S21902D9E590A0E12C00A0E30180A0E148FBFFEB007050E2040091
-S21902D9FA001A470000EA0700A0E163FBFFEB0400A0E14400002D
-S21902DA0FEA044097E50100A0E308FCFFEBB600C4E10100A0E300
-S21902DA2405FCFFEBB000C4E1020BA0E302FCFFEBB200C4E106D1
-S21902DA3960A0E30460C4E50450A0E30550C4E50520A0E18410D2
-S21902DA4E9FE50E0084E2A1EBFFEB080084E278109FE50620A00E
-S21902DA63E19DEBFFEB180084E20910A0E10520A0E199EBFFEB28
-S21902DA78FF30A0E330304BE52F304BE52E304BE52D304BE52C7A
-S21902DA8D304BE52B304BE544209FE5016086E2048082E530A026
-S21902DAA24BE2089082E5FE3043E2003082E50280A0E11C30A063
-S21902DAB7E3BC30C7E10700A0E11C209FE50A10A0E1B3FBFFEB61
-S21902DACC460000EB0050A0E1070000EAF004030020C503001C50
-S21902DAE1C10300060800006FFBFFEB004098E5000054E3C1FF4F
-S21902DAF6FF0A3B0000EB000065E0F90050E3F7FFFF9A0630A00F
-S21902DB0BE1016046E2000053E3E6FFFFCA0700A0E11DFBFFEB26
-S21902DB200000E0E3F0AF1BE90DC0A0E1F0DD2DE904B04CE20070
-S21902DB3580A0E10150A0E1A0A09FE50070A0E30A60A0E1080057
-S21902DB4AA0E10640A0E10410A0E10420A0E36DEDFFEB00305077
-S21902DB5FE20E00000A0C6084E2017087E20F0057E3F4FFFFDAEF
-S21902DB740500A0E10810A0E10420A0E356EBFFEB0800A0E10417
-S21902DB891085E290FFFFEB000050E3050000AA0000E0E3F0AD4E
-S21902DB9E1BE9070096E8070085E80300A0E1F0AD1BE930E09F9A
-S21902DBB3E500C09EE5070095E88C308CE003318AE0070083E872
-S21902DBC801C08CE200C08EE510005CE30030A00300308E0500FA
-S21902DBDD00A0E3F0AD1BE928C10300140503000DC0A0E100D8DA
-S21902DBF22DE928309FE5FA0FA0E3482093E504B04CE20FE0A048
-S21902DC07E102F0A0E114109FE5003091E5013083E20300A0E145
-S21902DC1C003081E500A81BE950000000180503000DC0A0E1F0FC
-S21902DC31DF2DE904B04CE214D04DE20270A0E101A0A0E12C00AC
-S21902DC460BE5006053E2BF00001A0A0057E14200009A010857E6
-S21902DC5BE30300002AFF0057E30800A0830000A093020000EA1A
-S21902DC70010457E31800A0231000A03340139FE53220A0E102EF
-S21902DC8530D1E7003083E0200073E20600000A1770A0E12C103F
-S21902DC9A1BE5203060E23133A0E11AA083E11110A0E12C100BF0
-S21902DCAFE50798A0E12998A0E10A00A0E12788A0E10810A0E1BE
-S21902DCC4710200EB0040A0E10A00A0E10810A0E1110100EB0004
-S21902DCD960A0E1990602E02C101BE52138A0E1044883E1020005
-S21902DCEE54E10500002A016046E2074094E00200002A020054F0
-S21902DD03E10160463207408430044062E00400A0E10810A0E1AB
-S21902DD185C0200EB0050A0E10400A0E10810A0E1FC0000EB9937
-S21902DD2D0002E02C101BE50138A0E12338A0E1055883E1020063
-S21902DD4255E10400002A010040E2075095E00100002A020055F0
-S21902DD57E10100403206C880E1E60000EA000057E30300001A06
-S21902DD6C0100A0E30210A0E1E90000EB0070A0E1010857E30775
-S21902DD8120A0E10300002AFF0057E30800A0830000A09302001F
-S21902DD9600EA010457E31800A0231000A03318129FE53220A0EA
-S21902DDABE10230D1E7003083E0200073E20130A00330300B0545
-S21902DDC00AA067003400000A202060E21770A0E12C101BE53AF8
-S21902DDD552A0E13132A0E11110A0E12C100BE51AA083E12788E0
-S21902DDEAA0E10798A0E12998A0E10500A0E10810A0E1230200F6
-S21902DDFFEB0040A0E10500A0E10810A0E1C30000EB0060A0E1AE
-S21902DE14990602E02A38A0E1044883E1020054E10500002A0177
-S21902DE296046E2074094E00200002A020054E101604632074017
-S21902DE3E8430044062E00400A0E10810A0E10F0200EB0050A084
-S21902DE53E10400A0E10810A0E1AF0000EB990002E00A38A0E1DC
-S21902DE682338A0E1055883E1020055E10500002A010040E20770
-S21902DE7D5095E00200002A020055E10100403207508530066873
-S21902DE9280E105A062E030600BE50798A0E12998A0E10A00A0A0
-S21902DEA7E12788A0E10810A0E1F60100EB0040A0E10A00A0E187
-S21902DEBC0810A0E1960000EB0060A0E1990602E02C101BE52171
-S21902DED138A0E1044883E1020054E10500002A016046E2074096
-S21902DEE694E00200002A020054E10160463207408430044062CF
-S21902DEFBE00400A0E10810A0E1E10100EB0050A0E10400A0E1EA
-S21902DF100810A0E1810000EB990002E02C101BE50138A0E1235C
-S21902DF2538A0E1055883E1020055E10400002A010040E2075086
-S21902DF3A95E00100002A020055E10100403206C880E16D0000E4
-S21902DF4FEA0A0056E10020A08330200B8502C0A0816800008A93
-S21902DF64010856E30620A0E10300002AFF0056E30800A0830028
-S21902DF7900A093020000EA010456E31800A0231000A033301031
-S21902DF8E9FE53220A0E10230D1E7003083E0200073E208000026
-S21902DFA31A2C301BE506005AE10700539101C0A0E300C0A031EB
-S21902DFB80010A0E330100BE5500000EA24FF0200202060E23772
-S21902DFCD32A0E1166083E11770A0E12C101BE53A52A0E13132F7
-S21902DFE2A0E11110A0E12C100BE51AA083E12698A0E10628A0A9
-S21902DFF7E12228A0E10500A0E134200BE50910A0E1A00100EB72
-S21902E00C0040A0E10500A0E10910A0E1400000EB34201BE50098
-S21902E02180A0E1980202E02A38A0E1044883E1020054E1050097
-S21902E036002A018048E2064094E00200002A020054E101804813
-S21902E04B3206408430044062E00400A0E10910A0E18B0100EB71
-S21902E0600050A0E10400A0E10910A0E12B0000EB34201BE590BA
-S21902E0750202E00A38A0E12338A0E1055883E1020055E105000E
-S21902E08A002A010040E2065095E00200002A020055E1010040BD
-S21902E09F320650853008C880E105A062E02C08A0E12738A0E17B
-S21902E0B40018CCE10328C7E191020EE0900202E0930101E090BE
-S21902E0C90303E0011092E00138832201E89EE02138A3E00A00A7
-S21902E0DE53E10500008A2C101BE50030A0130130A0030000531D
-S21902E0F3E301005E110000009A01C04CE20020A0E330200BE552
-S21902E1083CC00BE530301BE540204BE238300BE5030092E9F05C
-S21902E11DAF1BE9000051E31F00000A0130A0E30020A0E301007E
-S21902E13250E11900003A010251E3000051310112A0310332A0DB
-S21902E14731FAFFFF3A020151E3000051318110A0318330A031BA
-S21902E15CFAFFFF3A010050E10100402003208221A10050E1A1A9
-S21902E171004020A3208221210150E12101402023218221A1016E
-S21902E18650E1A1014020A3218221000050E32332B0112112A0C7
-S21902E19B11EFFFFF1A0200A0E10EF0A0E104E02DE5640100EB08
-S21902E1B00000A0E30080BDE80DC0A0E1F0DF2DE904B04CE22472
-S21902E1C5D04DE20260A0E10180A0E138000BE530C04BE234C021
-S21902E1DA0BE5007053E29700001A080056E11800009A01085693
-S21902E1EFE30300002AFF0056E30800A0830000A093020000EA82
-S21902E204010456E31800A0231000A033D4129FE53220A0E102C3
-S21902E21930D1E7003083E0203073E23C300BE55200000A166398
-S21902E22EA0E138101BE5203063E23C201BE53133A0E118828318
-S21902E243E11112A0E138100BE5490000EA000056E30300001A79
-S21902E2580100A0E30210A0E1AEFFFFEB0060A0E1010856E306D3
-S21902E26D20A0E10300002AFF0056E30800A0830000A09302002F
-S21902E28200EA010456E31800A0231000A03354129FE53220A0BE
-S21902E297E10230D1E7003083E0203073E23C300BE5088066001E
-S21902E2AC3100000A3C201BE53C304BE2081093E83C101BE52027
-S21902E2C12062E21663A0E13852A0E13C32A0E140200BE51CC1BC
-S21902E2D6A0E138C00BE5188183E12678A0E106A8A0E12AA8A006
-S21902E2EBE10500A0E10710A0E1E50000EB0040A0E10500A0E101
-S21902E3000710A0E185FFFFEB9A0002E02838A0E1044883E102EC
-S21902E3150054E10300002A064094E00100002A020054E1064028
-S21902E32A8430044062E00400A0E10710A0E1D40000EB0050A0D1
-S21902E33FE10400A0E10710A0E174FFFFEB9A0002E00838A0E12A
-S21902E3542338A0E1055883E1020055E10300002A065095E001DF
-S21902E36900002A020055E106508530058062E006A8A0E12AA863
-S21902E37EA0E10800A0E12678A0E10710A0E1BF0000EB0040A038
-S21902E393E10800A0E10710A0E15FFFFFEB9A0002E038C01BE5B0
-S21902E3A82C38A0E1044883E1020054E10300002A064094E001A5
-S21902E3BD00002A020054E106408430044062E00400A0E10710C7
-S21902E3D2A0E1AD0000EB0050A0E10400A0E10710A0E14DFFFFDD
-S21902E3E7EB9A0002E038101BE50138A0E12338A0E1055883E114
-S21902E3FC020055E10300002A065095E00100002A020055E1066C
-S21902E411508530055062E038500BE534201BE5000052E39600BC
-S21902E426000A38301BE53CC01BE5333CA0E148300BE50010A064
-S21902E43BE344100BE58B0000EA080057E10500009A48000BE512
-S21902E45044800BE540204BE20C0012E930C04BE2860000EA01DA
-S21902E4650857E30720A0E10300002AFF0057E30800A083000020
-S21902E47AA093020000EA010457E31800A0231000A03358109F63
-S21902E48FE53220A0E10230D1E7003083E0203073E23C300BE53B
-S21902E4A41100001A38301BE5070058E1060053910200003A065D
-S21902E4B9C053E00780C8E038C00BE534101BE5000051E36C0059
-S21902E4CE000A38201BE548200BE544800BE540204BE20C001219
-S21902E4E3E901C0A0E1640000EA240003003C301BE53CC01BE515
-S21902E4F838201BE5203063E240300BE540101BE53633A0E1176A
-S21902E50D7C83E1166CA0E13851A0E13231A0E1122CA0E138200A
-S21902E5220BE5188C83E12798A0E10738A0E12338A0E10500A064
-S21902E537E14C300BE50910A0E1520000EB0040A0E10500A0E15D
-S21902E54C0910A0E1F2FEFFEB4C201BE500A0A0E19A0202E0280C
-S21902E56138A0E1044883E1020054E10500002A01A04AE20740BB
-S21902E57694E00200002A020054E101A04A3207408430044062F4
-S21902E58BE00400A0E10910A0E13D0000EB0050A0E10400A0E1F7
-S21902E5A00910A0E1DDFEFFEB4C201BE5900202E00838A0E1233C
-S21902E5B538A0E1055883E1020055E10500002A010040E20750EF
-S21902E5CA95E00200002A020055E10100403207508530058062F6
-S21902E5DFE00A3880E12308A0E126C8A0E10018C3E10C28C6E1EB
-S21902E5F491020EE0900202E09C0101E0900C0CE0011092E0018C
-S21902E609C88C2201E89EE021C8ACE008005CE10500008A381087
-S21902E61E1BE50030A0130130A003000053E301005E1102000081
-S21902E6339A06205EE007C0CCE002E0A0E134301BE5000053E35D
-S21902E6480D00000A38201BE50E1052E00C80C8E03CC01BE53196
-S21902E65D3CA0E140101BE5183183E148300BE5388CA0E1448076
-S21902E6720BE534C01BE540204BE20C0012E90C008CE830304BE9
-S21902E687E2030093E8F0AF1BE9000051E32600000A0130A0E35C
-S21902E69C010050E10EF0A031010251E3000051310112A03103C1
-S21902E6B132A031FAFFFF3A020151E3000051318110A03183304A
-S21902E6C6A031FAFFFF3A0020A0E3010050E101004020A100500E
-S21902E6DBE1A1004020E3208221210150E121014020632182219F
-S21902E6F0A10150E1A1014020E321822103C0A0E1000050E323F8
-S21902E70532B0112112A011EEFFFF1A0E2212E20EF0A001EC016B
-S21902E71A12E1A10180106C0112E121018010EC0012E1A10080AC
-S21902E72F100EF0A0E104E02DE5010000EB0000A0E30080BDE8B5
-S20802E7440EF0A0E14B
-S21902E74853707572696F757320496E74657272757074212121FB
-S21902E75D202D20766563746F723A2025642C20646174613A207D
-S21902E77225780A000000303132333435363738396162636465E8
-S21902E7876600000000503031004F4B0000453031004530330077
-S21902E79C45303200423031003031323334353637383941424344
-S21902E7B144454600000000303132333435363738394142434466
-S21902E7C64546000000003C42616420666F726D61742073747247
-S21902E7DB696E673A2000000000203A00003E0A00003C6E756C5D
-S21902E7F06C3E00003C4E6F74206120737472696E673A203078BC
-S21902E8050000003E000000253038583A2000002530325800009B
-S21902E81A00002020000020000000207C0000256300007C0A00D8
-S21902E82F003C746F7069633E0048656C702061626F75742068E8
-S21902E844656C703F0000000068656C70000000005B2D77203C34
-S21902E85974696D656F75743E5D205B656E7472795D000045783A
-S21902E86E656375746520636F64652061742061206C6F63617414
-S21902E883696F6E0000676F00003C6C6F636174696F6E3E205B0F
-S21902E8983C6C656E6774683E5D000000446973706C61792028ED
-S21902E8AD6865782064756D702920612072616E6765206F662048
-S21902E8C26D656D6F72790000000064756D70000000005B4F4EF3
-S21902E8D7207C204F46465D00004D616E616765206D61636869C6
-S21902E8EC6E652063616368657300000063616368650000000AB8
-S21902E901526564426F6F7428746D2920646562756720656E7689
-S21902E91669726F6E6D656E74202D206275696C742025732C20E8
-S21902E92B25730A000030383A35383A3433000000004175672041
-S21902E9403234203230303000436F707972696768742028432906
-S21902E95520323030302C20526564204861742C20496E632E0A82
-S21902E96A0A0052414D3A2025702D25700A003D3D2045786563CD
-S21902E97F7574696E6720626F6F742073637269707420696E20B5
-S21902E9942564207365636F6E6473202D20656E746572205E4383
-S21902E9A920746F2061626F72740A00526564426F6F743E200000
-S21902E9BE0000496C6C6567616C20636F6D6D616E643A20257392
-S21902E9D30A00000000556E62616C616E63656420737472696EE1
-S21902E9E867210A00416D626967756F757320636F6D6D616E64D6
-S21902E9FD20272573272C2063686F69636573206172653A2025F7
-S21902EA127300202573000A00000055736167653A0A0020202515
-S21902EA277325732025730A0000257320616C72656164207365ED
-S21902EA3C740A0000696E76616C6964206E756D62657220272544
-S21902EA51732720666F722025730A00696E76616C696420666C0D
-S21902EA66616720272563270A0000257320616C72656164792012
-S21902EA7B7365740A006E6F2064656661756C742F6E6F6E2D663A
-S21902EA906C616720617267756D656E747320737570706F727403
-S21902EAA565640A000000006F6E00006F666600496E76616C6907
-S21902EABA64206361636865206D6F64653A2025730A00636163E0
-S21902EACF686573203F0A00000025730A20202025732025730A26
-S21902EAE40000000044756D702077686174205B6C6F63617469B5
-S21902EAF96F6E5D3F0A0000496E76616C69642073746172742049
-S21902EB0E616464726573733A2025730A0000496E76616C696442
-S21902EB23206C656E6774682F656E6420616464726573733A206E
-S21902EB3825730A00776169742074696D656F75740000000073D0
-S21902EB4D74617274696E6720616464726573730000000041620A
-S21902EB626F757420746F20737461727420657865637574696F68
-S21902EB776E206174202570202D2061626F7274207769746820E9
-S21902EB8C5E432077697468696E202564207365636F6E64730A57
-S21902EBA10000005B2D7261775D205B2D62203C6D656D5F616460
-S21902EBB664723E5D5D004C6F616420612066696C65006C6F6178
-S21902EBCB6400000000454C4620696D61676573206E6F74207359
-S21902EBE07570706F727465640A000000496E76616C6964205362
-S21902EBF52D7265636F7264206174206F66667365742025702CDB
-S21902EC0A20696E7075743A2025630A00000042616420532D7299
-S21902EC1F65636F726420636F756E74206174206F6666736574E7
-S21902EC342025700A0000000041646472657373206F666673650C
-S21902EC4974203D2025700A00000000417474656D707420746F3D
-S21902EC5E206C6F616420532D7265636F7264206461746120746D
-S21902EC736F20616464726573733A202570205B6E6F7420696E5E
-S21902EC882052414D5D0A00002A2A2A205761726E696E67212054
-S21902EC9D436865636B73756D206661696C757265202D2041640E
-S21902ECB264723A20256C782C202530326C58203C3E2025303235
-S21902ECC76C580A0000456E74727920706F696E743A2025702CEC
-S21902ECDC20616464726573732072616E67653A2025702D257038
-S21902ECF10A0000496E76616C696420532D7265636F7264206196
-S21902ED0674206F6666736574203078256C782C20747970653ABD
-S21902ED1B2025780A00256308000A00000075736167653A206CA0
-S21902ED306F6164203C66696C655F6E616D653E205B2D725D20C2
-S21902ED455B2D765D205B2D68203C686F73743E5D205B2D6D205D
-S21902ED5A7B54465450207C205A4D4F44454D7D5D205B2D622058
-S21902ED6F3C626173655F616464726573733E5D0A007665726218
-S21902ED846F7365006C6F61642072617720646174610000006CFC
-S21902ED996F6164206164647265737300000000646F776E6C6F91
-S21902EDAE6164206D6F6465202854465450206F72205A4D4F44DE
-S21902EDC3454D290000686F7374206E616D652028495020616434
-S21902EDD8647265737329000066696C65206E616D65000000492B
-S21902EDED6E76616C696420495020616464726573733A202573DB
-S21902EE020A007A6D6F64656D00007466747000000000544654B2
-S21902EE1750206D6F6465207265717569726573206120776F7241
-S21902EE2C6B696E67206E6574776F726B0A000000496E76616CF3
-S21902EE41696420276D6F6465273A2025730A0046696C65206ECB
-S21902EE56616D65206D697373696E670A000043616E2774206C10
-S21902EE6B6F616420272573273A2025730A000000004572726FBD
-S21902EE80722072656164696E6720686561646572207669612001
-S21902EE95544654503A2025730A0000536F7272792C207A6D6F66
-S21902EEAA64656D20646F776E6C6F6164206E6F7420796574209B
-S21902EEBF617661696C61626C650A000000526177206C6F6164A2
-S21902EED42072657175697265732061206D656D6F727920616473
-S21902EEE964726573730A005261772066696C65206C6F616465D3
-S21902EEFE642025702D25700A0000454C4600556E7265636F6769
-S21902EF136E697A656420696D61676520747970653A20256C7860
-S21902EF280A0000007B636D64737D00004D616E61676520464C29
-S21902EF3D41534820696D6167657300666973005B2D6C5D0000B3
-S21902EF5200004D616E61676520636F6E66696775726174696F30
-S21902EF676E206B65707420696E20464C415348206D656D6F7287
-S21902EF7C7900000066636F6E666967005B2D665D000000004990
-S21902EF916E697469616C697A6520464C41534820496D6167650A
-S21902EFA62053797374656D205B4649535D00696E69740000003C
-S21902EFBB0000000000446973706C617920636F6E74656E7473D6
-S21902EFD0206F6620464C41534820496D61676520537973746567
-S21902EFE56D205B4649535D000000006C69737400000000446980
-S21902EFFA73706C61792066726565205B617661696C61626C65F4
-S21902F00F5D206C6F636174696F6E732077697468696E20464C37
-S21902F02441534820496D6167652053797374656D205B464953EF
-S21902F0395D000066726565000000002D66203C666C6173685F60
-S21902F04E616464723E202D6C203C6C656E6774683E00457261E0
-S21902F063736520464C41534820636F6E74656E7473000000009D
-S21902F07865726173650000006E616D6500000000446973706CCF
-S21902F08D617920616E20696D6167652066726F6D20464C415361
-S21902F0A24820496D6167652053797374656D205B4649535D00A8
-S21902F0B70064656C65746500004C6F616420696D6167652066A1
-S21902F0CC726F6D20464C41534820496D61676520537973746511
-S21902F0E16D205B4649535D20696E746F2052414D0000006C6F37
-S21902F0F66164000000002D62203C6D656D5F626173653E202D8A
-S21902F10B6C203C6C656E6774683E205B2D66203C666C617368E8
-S21902F1205F616464723E5D205B2D65203C656E7472795F706F65
-S21902F135696E743E5D205B2D72203C72616D5F616464723E5D8D
-S21902F14A203C6E616D653E00000043726561746520616E2069A2
-S21902F15F6D6167650063726561746500002A2A2A20696E76613A
-S21902F1746C696420276669732720636F6D6D616E643A202573A5
-S21902F1890A0000666973200000000066756C6C20696E6974690E
-S21902F19E616C697A6174696F6E2C2065726173657320616C6C62
-S21902F1B3206F6620666C6173680000000041626F757420746F1F
-S21902F1C820696E697469616C697A65205B666F726D61745D2058
-S21902F1DD464C41534820696D6167652073797374656D002A2A6C
-S21902F1F22041626F727465640A002A2A2A20496E697469616CAE
-S21902F207697A6520464C41534820496D616765205379737465DA
-S21902F21C6D0A0000202020696E697469616C697A6174696F6E17
-S21902F231206661696C65642025703A202578282573290A00009D
-S21902F2460000202020205761726E696E673A206465766963658C
-S21902F25B20636F6E74656E7473206E6F74206572617365642CD8
-S21902F27020736F6D6520626C6F636B73206D6179206E6F742018
-S21902F285626520757361626C650A00526564426F6F740052659A
-S21902F29A64426F6F745B6261636B75705D00526564426F6F7483
-S21902F2AF20636F6E6669670000464953206469726563746F724F
-S21902F2C4790000004572726F722077726974696E6720696D6130
-S21902F2D967652064657363726970746F72732061742025703A97
-S21902F2EE202578282573290A00004E616D6520202020202020F3
-S21902F30320202020202020464C41534820616464722020204D38
-S21902F318656D2061646472202020204C656E67746820202020EA
-S21902F32D456E74727920706F696E740A000000252D3136732012
-S21902F3422030782530386C5820202030782530386C58202030CD
-S21902F357782530366C58202030782530386C580A0020203078A8
-S21902F36C2530386C58202E2E2030782530386C580A0000006D28
-S21902F381656D6F727920626173652061646472657373007261B0
-S21902F3966D2062617365206164647265737300000000656E74E6
-S21902F3AB727920706F696E74206164647265737300464C4153E5
-S21902F3C048206D656D6F7279206261736520616464726573736F
-S21902F3D50000006C656E677468000066696C65206E616D650039
-S21902F3EA0000696E76616C696420617267756D656E747300002A
-S21902F3FF00726571756972656420706172616D65746572206D23
-S21902F414697373696E670000496E76616C696420464C415348FA
-S21902F42920616464726573733A20257020282573290A0020207F
-S21902F43E2076616C69642072616E67652069732025702D2570E2
-S21902F4530A00000000496E76616C69642052414D206164647211
-S21902F4686573733A2025700A000000004E616D65206973207433
-S21902F47D6F6F206C6F6E672C206D757374206265206C657373F2
-S21902F492207468616E2025642063686172730A00000043616E9D
-S21902F4A72774206C6F6361746520256C64206279746573206634
-S21902F4BC72656520696E20464C4153480A000000496D61676586
-S21902F4D120666F756E642C2062757420464C4153482061646475
-S21902F4E67265737320696E636F72726563740A000000416E208B
-S21902F4FB696D616765206E616D656420272573272065786973EE
-S21902F5107473000043616E27742070726F6772616D20746869CE
-S21902F5257320726567696F6E202D20636F6E7461696E73206364
-S21902F53A6F646520696E20757365210A000043616E27742065BC
-S21902F54F7261736520726567696F6E2061742025703A202578B0
-S21902F564282573290A00000043616E27742070726F6772616DD3
-S21902F57920726567696F6E2061742025703A2025782825732948
-S21902F58E0A004572726F722065726173696E672061742025709A
-S21902F5A33A202578282573290A000000004572726F7220707256
-S21902F5B86F6772616D6D696E672061742025703A202578282588
-S21902F5CD73290A000000006D697373696E6720617267756D65E1
-S21902F5E26E7400000000696D616765206E616D65000044656C52
-S21902F5F765746520696D61676520272573270000004E6F20694B
-S21902F60C6D616765202725732720666F756E640A000000004EAE
-S21902F6216F742061206C6F616461626C6520696D6167650A00E8
-S21902F6360000464C4153483A2064726976657220696E69742070
-S21902F64B6661696C6564212C207374617475733A2025780A002C
-S21902F660464C4153483A202570202D2025702C20256420626C6C
-S21902F6756F636B73206F662025702062797465732065612E0ABA
-S21902F68A0000746F6F2066657720617267756D656E74730000BA
-S21902F69F00756E7265636F676E697A656420636F6D6D616E6443
-S21902F6B40000000052756E2073637269707420617420626F6FFB
-S21902F6C9740000626F6F745F73637269707400426F6F742073E2
-S21902F6DE637269707400626F6F745F7363726970745F646174AE
-S21902F6F36100000000426F6F74207363726970742074696D6582
-S21902F7086F757400626F6F745F7363726970745F74696D656F68
-S21902F71D75740025733A2000000000257320007472756500007D
-S21902F732000066616C7365000000256420003078253032580080
-S21902F747003A000000200000003F3F00000A0000002E2E202523
-S21902F75C730A0000456E746572207363726970742C20746572CA
-S21902F7716D696E617465207769746820656D707479206C696E70
-S21902F786650A000000003E3E20006C69737420636F6E6669670A
-S21902F79B75726174696F6E206F6E6C79002A2A20696E76616CE0
-S21902F7B0696420656E7472790A000000557064617465205265DA
-S21902F7C564426F6F74206E6F6E2D766F6C6174696C6520636F46
-S21902F7DA6E66696775726174696F6E0000004572726F722077CC
-S21902F7EF726974696E6720636F6E66696720646174612061742C
-S21902F8042025703A202578282573290A00000000526571756547
-S21902F819737420666F7220636F6E6669672076616C756520276B
-S21902F82E257327202D2077726F6E6720747970650A0043616E67
-S21902F84327742066696E6420636F6E6669672076616C7565205A
-S21902F858272573270A000000464C41534820636F6E666967752B
-S21902F86D726174696F6E20636865636B73756D206572726F7235
-S21902F882206F7220696E76616C6964206B65790A0000657468AE
-S21902F897300000000073635F6C7065000043462063617264204C
-S21902F8AC776F6E277420676F207265616479210A000000004EAD
-S21902F8C16F742061205343204C50452C20736F7272790A00007B
-S21902F8D600000A00000025733A2025732025732025730A000008
-S21902F8EB00436F756C646E27742066696E6420434F5220706F3D
-S21902F900696E746572210A0043616E2774207061727365204353
-S21902F91549530A0000000043616E277420666574636820636F67
-S21902F92A6E66696720696E666F0A00000000436F6D7061637480
-S21902F93F20466C61736820636172642072656D6F766564210AA7
-S21902F954000000002E2E2E2057616974696E6720666F72206E25
-S21902F9696574776F726B20636172643A2000002E00000025730C
-S21902F97E0A0073635F6C70655F4275664576656E7400303132DC
-S21902F9933334353637383900003031323334353637383961620E
-S21902F9A8636465660000000030313233343536373839414243DE
-S21902F9BD444546000000005E430A003078253038583A200000CD
-S21902F9D2000025303258000000002020000020000000207C003E
-S21902F9E700256300007C0A0000202D2061726520796F75207341
-S21902F9FC7572652028792F6E293F20004E45544153434949006D
-S21902FA110000004F43544554000000556E6B6E6F776E20657273
-S21902FA26726F7200000066696C65206E6F7420666F756E640024
-S21902FA3B006163636573732076696F6C6174696F6E0000000048
-S21902FA506469736B2066756C6C206F7220616C6C6F63617469B2
-S21902FA656F6E20657863656564656400000000696C6C656761E3
-S21902FA7A6C2054465450206F7065726174696F6E0000756E6B67
-S21902FA8F6E6F776E207472616E736665722049440066696C65C7
-S21902FAA420616C726561647920657869737473006E6F2073759F
-S21902FAB963682075736572000000006F7065726174696F6E2096
-S21902FACE74696D6564206F757400736F6D6520736F7274206F66
-S21902FAE366206E6574776F726B206572726F720000696E76617F
-S21902FAF86C696420706172616D6574657200000070726F746FA4
-S21902FB0D636F6C2076696F6C6174696F6E000066696C65206980
-S21902FB2273206C6172676572207468616E206275666665720052
-S21902FB370047444220636F6E6E656374696F6E20706F727400B0
-S21902FB4C6764625F706F7274000000004E6574776F726B2064DE
-S21902FB616562756720617420626F6F742074696D6500006E657A
-S21902FB76745F646562756700000055736520424F4F5450206642
-S21902FB8B6F72206E6574776F726B20636F6E6669677572617401
-S21902FBA0696F6E00626F6F74700000004C6F63616C204950201B
-S21902FBB56164647265737300000000626F6F74705F6D795F691D
-S21902FBCA700044656661756C74207365727665722049502061F9
-S21902FBDF646472657373000000626F6F74705F7365727665726B
-S21902FBF45F69700025732E25640A00006E65745F696F5F77729E
-S21902FC09697465000000006E65745F696F5F72656164004E6F67
-S21902FC1E206E6574776F726B20696E74657266616365732066D6
-S21902FC336F756E640A0000000043616E27742067657420424F37
-S21902FC484F545020696E666F202D206E6574776F726B2064697D
-S21902FC5D7361626C6564210A00000049503A20257300002C201E
-S21902FC7244656661756C74207365727665723A2025730A0000FE
-S21902FC870025642E25642E25642E2564002573202D2063616C7E
-S21902FC9C6C6564207769746820696E76616C6964204349533AFB
-S21902FCB12025780A00000063665F70617273655F6366746162CE
-S21902FCC66C650000000063665F70617273655F636F6E66696739
-S21902FCDB0050434D4349413A20496E76616C696420736C6F745D
-S21902FCF02025640A000000002E2E2E2045726173652066726F44
-S21902FD056D2025702D25703A2000002E0000000A0000002E2E10
-S21902FD1A2E2050726F6772616D2066726F6D2025702D2570203C
-S21902FD2F61742025703A2000004E6F206572726F72202D206FF1
-S21902FD447065726174696F6E20636F6D706C657465000000497F
-S21902FD596E76616C696420464C4153482061646472657373007C
-S21902FD6E00004572726F7220747279696E6720746F2065726157
-S21902FD8373650000004572726F7220747279696E6720746F20A2
-S21902FD986C6F636B2F756E6C6F636B004572726F722074727962
-S21902FDAD696E6720746F2070726F6772616D0047656E65726987
-S21902FDC263206572726F720000004465766963652F7265676952
-S21902FDD76F6E2069732077726974652D70726F746563746564F5
-S21902FDEC00000000464C415348207375622D73797374656D2031
-S21902FE016E6F7420696E697469616C697A656400000000556E1B
-S21902FE166B6E6F776E206572726F7200000045746865726E658E
-S21902FE2B742073656E643A0A0025733A207061636B6574206F40
-S21902FE40662025642062797465732064726F707065640A0065D3
-S21902FE5574685F6472765F726563760000000045746865726E95
-S21902FE6A657420726563763A0A005152590043616E277420695D
-S21902FE7F64656E7469667920464C4153482C20736F7272790A51
-S21902FE9400000000457272203D2025780A00000025733A2043D0
-S21902FEA9616E27742066696E642061646472657373206F6620F7
-S21902FEBE7365727665720A0000005F5F7564705F73656E647403
-S21902FED36F000000007564705F7265637666726F6D202D2064C7
-S21902FEE8726F70706564207061636B6574206F662025642062BC
-S21902FEFD797465730A00005F5F656E65745F706F6C6C3A206ED2
-S21902FF126F206D6F726520627566666572730A00000000010277
-S21902FF2702030303030404040404040404050505050505050568
-S21902FF3C05050505050505050606060606060606060606060633
-S21902FF5106060606060606060606060606060606060606070714
-S21902FF66070707070707070707070707070707070707070707EC
-S21902FF7B070707070707070707070707070707070707070707D7
-S21902FF90070707070707070707070707070707070707070708C1
-S21902FFA508080808080808080808080808080808080808080898
-S21902FFBA08080808080808080808080808080808080808080883
-S21902FFCF0808080808080808080808080808080808080808086E
-S21902FFE408080808080808080808080808080808080808080859
-S21902FFF908080808080808080808080808080808080808080844
-S21903000E0808080808080808080808080808080808080808082D
-S21903002308000102020303030304040404040404040505050573
-S21903003805050505050505050505050506060606060606060639
-S21903004D06060606060606060606060606060606060606060618
-S219030062060607070707070707070707070707070707070707F0
-S219030077070707070707070707070707070707070707070707D9
-S21903008C070707070707070707070707070707070707070707C4
-S2190300A10707070808080808080808080808080808080808089D
-S2190300B608080808080808080808080808080808080808080885
-S2190300CB08080808080808080808080808080808080808080870
-S2190300E00808080808080808080808080808080808080808085B
-S2190300F508080808080808080808080808080808080808080846
-S21903010A08080808080808080808080808080808080808080830
-S20903011F0808080808AB
-S219030124000000006432020064320200643202006432020064FA
-S2190301393202006432020064320200643202006432020064327F
-S21903014E0200643202006432020064320200643202006432029A
-S21903016300643202006432020064320200643202006432020087
-S2190301786432020064320200643202006432020064320200640E
-S21903018D3202006432020064320200643202006432020064322B
-S2190301A202006432020064320200643202006432020064320246
-S2190301B700643202006432020064320200643202006432020033
-S2190301CC643202006432020064320200643202006432020064BA
-S2190301E1320200643202006432020064320200643202006432D7
-S2190301F6020064320200643202006432020064320200643202F2
-S21903020B0064320200643202006432020000000000000000000E
-S219030220000000000000000000000000000000000000000000C1
-S219030235000000000000000000000000000000000000000000AC
-S21903024A00000000000000000000000000000000000000000097
-S21903025F00000000000000000000000000000000000000000082
-S2190302740000000000000000000000000000000000000000006D
-S21903028900000000000000000000000000000000000000000058
-S21903029E00000000000000000000000000000000000000000043
-S2190302B30000000000000000000000000000000000000000002E
-S2190302C800000000000000000000000000000000000000000019
-S2190302DD00000000000000000000000000000000000000000004
-S2190302F2000000000000000000000000000000000000000000EF
-S219030307000000000000000000000000000000000000000000D9
-S21903031C000000000000000000000000000000000000000000C4
-S219030331000000000000000000000000000000000000000000AF
-S2190303460000000000000000000000000000000000000000009A
-S21903035B00000000000000000000000000000000000000000085
-S21903037000000000000000000000000000000000000000000070
-S2190303850000000000000000000000000000000000000000005B
-S21903039A00000000000000000000000000000000000000000046
-S2190303AF00000000000000000000000000000000000000000031
-S2190303C40000000000000000000000000000000000000000001C
-S2190303D900000000000000000000000000000000000000000007
-S2190303EE000000000000000000002000000000000000A41D020F
-S21903040300F41D0200000000000000000000000000FFFFFFFFCD
-S219030418000000000000000000000000F0C10300000000000013
-S21903042D0000000000000000000000FEFFFFFFFEFFFFFF0000BC
-S21903044200000000000000000180E80300000F0000000000051D
-S21903045780E80300001100000000000000000000007C2F2D5CD8
-S21903046C7C2D00000000000004810200D0800200D4810200ECAE
-S219030481810200608202009C8402003C860200D4860200E404CD
-S21903049603000000000074040300C0C4030094F80200000000B6
-S2190304AB00000000000000000008881234567800000000000090
-S2190304C000000000141E0000141E0000F40100000000000000C6
-S2190304D5000000000000000000000000000000F0B10200BCB5F6
-S2190304EA020014B4020000000000000000000000000000000029
-S2190304FF000000000000000000000000000000000000000000E0
-S219030514000000000000000000000000000000000000000000CA
-S21903052900000064F1020054F10200FCF00200C4670200B8F054
-S21903053E020088F0020080F00200306F020078F0020060F00255
-S2190305530044F00200586D02003CF00200F8EF0200BCEF0200CA
-S21903056818660200B4EF020090EF020088EF020080620200F083
-S21903057DEF0200C0EF0200BCEF020084650200F4F00200C0F091
-S219030592020080F0020020710200F8E80200E0E80200D4E802DB
-S2190305A70084540200CCE80200A4E802008CE8020074560200D7
-S2190305BC48EF020034EF02002CEF02005073020080EF0200541D
-S2190305D1EF02004CEF02005C78020088E802006CE8020054E805
-S2190305E60200245702004CE8020038E8020030E802002456028B
-S2190305FB00C8EB0200BCEB0200A4EB0200285E0200CCF60200A8
-S219030610B8F60200000000000100000001000000E4F60200D867
-S219030625F60200CCF6020001000000040000000CF70200F8F604
-S21903063A0200CCF602000100000002000000A4FB020080FB02BC
-S21903064F00000000000100000001000000C0FB0200ACFB020026
-S219030664A4FB02000000000005000000E8FB0200CCFB0200A481
-S219030679FB020000000000050000004CFB020038FB02000000E4
-S21903068E0000010000000200000074FB020058FB020000000086
-S2190306A3000100000001000000CC7B0200A0A402009CF8020013
-S2140306B8988002009C04030000000000683B0200C8
+S219020449F0A0E1803D03008041030080510300803C0300003DD2
+S21902045E0300803D0300003C0300A0F90300A0F9030000330312
+S2190204730000330300003C030004330300F4330300E434030079
+S219020488000002000033030065436F73203A20004A616E2033B0
+S21902049D30203230303100000002000000020080F703000DC0E5
+S2190204B2A0E170D82DE904B04CE2BCD04DE2BC304BE2C0204B6E
+S2190204C7E200308DE50040A0E104208DE530604BE2E4319FE5E8
+S2190204DC0600A0E108308DE50150A0E1D8319FE57710A0E3006A
+S2190204F1C093E50120A0E3C4C00BE50030A0E30E2400EB0120AE
+S219020506A0E300208DE5C4304BE204308DE50400A0E1AC319FFC
+S21902051BE50040A0E30C308DE50510A0E108408DE50630A0E167
+S2190205300E2400EB040050E16700000AC0301BE5040053E10CB8
+S21902054500000A80019FE5C4101BE5BC201BE5E42000EB3800B4
+S21902055A4BE2BC201BE50810A0E3823262E0032182E08221A022
+S21902056FE1412200EB020070E35700000A50C19FE550319FE5F1
+S2190205840420A0E103306CE0030052E10600002AB8004BE203E9
+S21902059910A0E104309CE4023180E7012082E2010052E1FAFFB5
+S2190205AEFF3A00300FE100400FE1C04084E304F029E10E02A093
+S2190205C3E3021A80E2202090E4000031E1FCFFFF1A0000A0E35E
+S2190205D8160F07EE9A0F07EE101F11EE011AC1E3101F01EE0044
+S2190205ED10A0E3151F07EE0000A0E10000A0E10000A0E10000B3
+S219020602A0E10000A0E10000A0E1101F11EE0C10C1E3101F013B
+S219020617EE0010A0E3161F07EE0E02A0E3021A80E2202090E457
+S21902062C000031E1FCFFFF1A0000A0E3160F07EE9A0F07EE0051
+S21902064110A0E3151F07EE151F08EE0000A0E10000A0E10000B5
+S219020656A0E10000A0E10000A0E10000A0E10010A0E3161F07B5
+S21902066BEE171F08EEC4301BE5B8204BE2032182E20F32C3E3F1
+S219020680033183E20350A0E10210A0E101F0A0E100000FE100FC
+S219020695F069E11F00C0E3120080E300F029E105E0A0E105D0A3
+S2190206AAA0E10010A0E3101F01EE0000A0E31910A0E30EF0B025
+S2190206BFE1050000EAC011030060F80300D0110300E411030044
+S2190206D490060200DC06020070A81BE90DC0A0E100D82DE9082E
+S2190206E9009FE504B04CE27D2000EB00A81BE93C1203000DC03D
+S2190206FEA0E1F0D92DE904B04CE20150A0E10070A0E30530A004
+S219020713E1015045E2070053E10080A0E10260A0E1470000DA31
+S2190207280FE0A0E108F0A0E1FF4000E20FE0A0E108F0A0E100C2
+S21902073D10A0E3302044E2413044E2050053E309005283FFE008
+S21902075200E20200009A613044E2050053E30000008A0110A0E0
+S219020767E3000051E32F00000A00C0A0E330004EE2FF1000E292
+S21902077C41204EE2FF3002E2050053E3090051830200009A61A8
+S219020791304EE2050053E30000008A01C0A0E300005CE3210083
+S2190207A6000A0774A0E100C0A0E3301044E2FF3001E20900531A
+S2190207BBE301C0A0910600009A613044E2050053E357C04492CE
+S2190207D00200009A413044E2050053E337C044920010A0E3FF40
+S2190207E53000E2090053E30010A0910600009A61304EE2050000
+S2190207FA53E357104E920200009AFF3002E2050053E337104EE7
+S21902080F920C2281E1027087E1000056E30500000A003096E5DE
+S219020824023083E0003086E5010000EA0000E0E3F0A91BE90538
+S21902083930A0E1015045E2000053E3B7FFFFCA0700A0E1F0A9A4
+S21902084E1BE90DC0A0E1F0DF2DE90120A0E304B04CE268D04D4C
+S219020863E288200BE50070A0E38C700BE50030E0E390300BE57D
+S2190208780790A0E180100BE50080A0E1980000EA530052E303BE
+S21902088D00000A18029FE50710A0E1132000EB960000EA0FE082
+S2190208A2A0E108F0A0E1027087E200C0A0E10800A0E10110A0EA
+S2190208B7E37C204BE20030A0E37C300BE5FF600CE28BFFFFEB69
+S2190208CC005050E27CA04BE2030000AAD4019FE50710A0E101A6
+S2190208E12000EB840000EA017087E2303046E2090053E303F1ED
+S2190208F69F97670000EADC0A02002409020024090200240902EA
+S21902090B009C0A02009C0A02009C0A0200580A0200580A020010
+S219020920580A02000800A0E12F1046E20A20A0E171FFFFEB0062
+S21902093540A0E12F3047E288201BE5067083E084400BE5000028
+S21902094A52E30A00000A80301BE5000053E30400000A0390645D
+S21902095FE050019FE50910A0E1DF1F00EB000000EA80901BE54A
+S2190209740020A0E388200BE538319FE5001093E5094084E0907A
+S219020989301BE5042069E0030052E10230A03190300BE50100CB
+S21902099E54E10300003A14319FE5002093E5020054E103000030
+S2190209B39A08019FE50410A0E1CA1F00EB4D0000EA2E3085E29C
+S2190209C8035066E0057087E00530A0E1015045E2000053E30832
+S2190209DD0000DA0800A0E10110A0E30A20A0E142FFFFEB0530FC
+S2190209F2A0E1015045E20100C4E4000053E3F6FFFFCA0800A0AB
+S219020A07E10110A0E30020A0E339FFFFEB017087E20000E0E1FE
+S219020A1C7C205BE5FF3000E27C200BE5020053E10300000A847E
+S219020A31101BE58C009FE5AB1F00EB2E0000EA8C201BE50430DC
+S219020A4669E0020053E10320A0218C200BE5200000EA0800A0E3
+S219020A5BE13B1066E20A20A0E124FFFFEB5C309FE590201BE593
+S219020A700040A0E154009FE5004083E58C301BE50410A0E19840
+S219020A851F00EB0FE0A0E108F0A0E1000050E3FBFFFFCA170055
+S219020A9A00EA0710A0E12C009FE50620A0E18F1F00EB120000BC
+S219020AAFEA5812030084120300A812030058F80300C4F703006D
+S219020AC4C0120300FC12030060F8030038130300601303000110
+S219020AD97087E20FE0A0E108F0A0E10A0050E3FAFFFF1A0FE001
+S219020AEEA0E108F0A0E1002050E262FFFFCAF0AF1BE90DC0A066
+S219020B03E130D82DE9D4309FE504B04CE2085193E50340A0E1D8
+S219020B18000055E3010000AA0000E0E330A81BE92600001A14EB
+S219020B2D3194E5000053E30900000A183194E5A4209FE503109C
+S219020B42D2E7A0009FE5013083E2183184E5651F00EB18319426
+S219020B57E5060053E3185184850C3194E5FF0053E3050000CA35
+S219020B6C143194E5000053E3E9FFFF0A70009FE55A1F00EBE64A
+S219020B81FFFFEA043084E20300A0E1011CA0E3043184E5112ED5
+S219020B9684E20FE0A0E100F094E50C0184E5080184E5000050CC
+S219020BABE3050000CA143194E5000053E3D8FFFF0A2C009FE5F8
+S219020BC0491F00EBD5FFFFEA083194E5042194E5013043E2085B
+S219020BD53184E50100D2E4042184E530A81BE940F50300643677
+S219020BEA03008C130300901303000DC0A0E100D82DE920309F79
+S219020BFFE504B04CE200C0A0E308C183E5012CA0E30C2183E55A
+S219020C14000083E5141183E518C183E500A81BE940F503000D9D
+S219020C29C0A0E100D82DE914309FE5042083E2042183E50C1185
+S219020C3E93E504B04CE2081183E500A81BE940F503000DC0A06E
+S219020C53E1F0DD2DE90C20A0E304B04CE2C0D04DE20080A0E170
+S219020C6830604BE20600A0E10040A0E3B8400BE50170A0E1D0BF
+S219020C7D400BE50410A0E19F1D00EB0150A0E3BA524BE1BC42E5
+S219020C924BE1B0304BE200308DE504A0A0E104A08DE5D4339F8A
+S219020CA7E50C20A0E3B8224BE17610A0E308308DE5AC404BE2CB
+S219020CBCC0339FE50400A0E114C093E50A20A0E130C00BE50247
+S219020CD130A0E3192200EBB4304BE200308DE594004BE29C33EB
+S219020CE69FE57210A0E308308DE50A20A0E104A08DE50230A02C
+S219020CFBE30F2200EBB8304BE200308DE5BC204BE204208DE588
+S219020D107C004BE270339FE56210A0E308308DE50520A0E10AA8
+S219020D2530A0E1042200EBC0304BE200308DE5C4204BE20420FC
+S219020D3A8DE564004BE248339FE56D10A0E308308DE50520A02C
+S219020D4FE10530A0E1F92100EBC8304BE200308DE5CC204BE20C
+S219020D6404208DE54C004BE220339FE56810A0E308308DE505E3
+S219020D7920A0E10530A0E1EE2100EB0530A0E300308DE5D020C3
+S219020D8E4BE224008DE90800A0E1F8329FE50710A0E10C308DEA
+S219020DA3E50520A0E10430A0E1EF2100EB000050E3E500000AD7
+S219020DB8CC301BE5000053E30800000AC8001BE50610A0E1D8A4
+S219020DCD2C00EB000050E30300001ABC029FE5C8101BE5C11EAA
+S219020DE200EBD90000EAC4301BE5000053E33400000AC0401BC4
+S219020DF7E5014084E20400A0E1CE1E00EB0020A0E190129FE531
+S219020E0C0400A0E1251F00EB000050E31900001AC0001BE500F0
+S219020E2120D0E5411042E2203082E2FF3003E2190051E3023024
+S219020E36A081790053E30010A0E10800000A020000CA78005396
+S219020E4BE30300000A080000EA7A0053E30400000A050000EAFC
+S219020E6001A0A0E3170000EA02A0A0E3150000EA03A0A0E313F4
+S219020E750000EA24029FE59A1E00EBB20000EAC0001BE51812A4
+S219020E8A9FE5D91E00EB000050E30700001A0C329FE50020931D
+S219020E9FE500A0A0E1000052E30600001AFC019FE58D1E00EBC5
+S219020EB4A50000EAE4019FE5C0101BE5891E00EBA10000EA003D
+S219020EC9005AE30800001AD0301BE5000053E30500001AD00188
+S219020EDE9FE5811E00EBCC019FE5CC119FE57E1E00EB9600001B
+S219020EF3EABC301BE5000053E30B00000AB8219FE5B8101BE59D
+S219020F08003092E5030051E10300003AA8319FE5002093E502BD
+S219020F1D0051E10200009A9C019FE56F1E00EB870000EA0000E0
+S219020F325AE31000001A0610A0E10120A0E3D4C04BE20C30A064
+S219020F47E1D0001BE50C80A0E1302B00EB005050E2030000AA5B
+S219020F5CD4001BE5D0401BE5382C00EB0E0000EA58019FE5B0C1
+S219020F71101BE51EFFFFEB120000EA0A10A0E1D4304BE2032062
+S219020F86A0E1D0001BE50380A0E18F2300EB005050E2070000D4
+S219020F9BAAD4001BE5D0401BE59F2400EB0020A0E11C019FE5BC
+S219020FB00410A0E14C1E00EB640000EA10019FE50010A0E30ABB
+S219020FC5FFFFEB0040A0E304719FE534604BE2010000EA04506B
+S219020FDAC6E7014084E2030054E30400008AC4FEFFEB00505093
+S219020FEFE2F8FFFFAA103197E5D4300BE5000055E3480000BA79
+S21902100407FFFFEBB4301BE5000053E31100000ABC301BE500BF
+S2190210190053E30200001AB4009FE5301E00EB3E0000EAB840D8
+S21902102E1BE5A8609FE5000000EA0150C4E4AFFEFFEB00505000
+S219021043E2FBFFFFAA0600A0E1B8101BE50420A0E1241E00EBEB
+S219021058320000EA33004BE27C109FE50320A0E37B1E00EB00C6
+S21902106D0050E31D00001A6C009FE598FDFFEB290000EA9413D4
+S219021082030070F803009C130300AC130300BC130300E01303A8
+S21902109700F8130300041403001C140300241403003814030057
+S2190210AC9CF9030040140300681403007C140300143603005882
+S2190210C1F80300C4F703008C140300F4BD0200B4140300749F26
+S2190210D6020040F50300CC140300F014030008150300000B02AD
+S2190210EB0034305BE5530053E30800001A33305BE5303043E272
+S219021100090053E30400008A08009FE5B8101BE5CEFDFFEB03FA
+S2190211150000EA000B020028009FE534101BE5F01D00EB0000DF
+S21902112A5AE30100001A0800A0E1262B00EB00005AE30300004C
+S21902113F0A0800A0E11F2400EB000000EA0C150300F0AD1BE924
+S2190211540DC0A0E100D82DE9031081E22111A0E10130A0E10167
+S2190211691041E204B04CE200C0A0E10000A0E3000053E1050058
+S21902117E00DA0120A0E1011041E204309CE4000052E303002099
+S219021193E0F9FFFFCA00A81BE90DC0A0E1F0D82DE978309FE59B
+S2190211A878409FE5001093E574509FE504B04CE2002094E500A4
+S2190211BD70A0E1000095E5011062E01A1C00EB003094E500602E
+S2190211D2A0E3005095E5230456E10E00002A0030D5E5FF0053E2
+S2190211E7E30600000A0700A0E10510A0E1E01D00EB000050E3C0
+S2190211FC0100001A0500A0E1F0A81BE9016086E2003094E50127
+S2190212115C85E2230456E1F0FFFF3A0000A0E3F0A81BE9845184
+S219021226030088510300905103000DC0A0E100D82DE90010A0FD
+S21902123BE118009FE504B04CE2A81D00EB10009FE510109FE550
+S21902125010209FE5A42000EB00A81BE908180300E439030074BC
+S2190212653A0300281803000DC0A0E1F0DF2DE904B04CE230D0D8
+S21902127A4DE20080A0E344304BE20060A0E140504BE244800B18
+S21902128FE50500A0E100308DE50140A0E14C329FE56610A0E379
+S2190212A408308DE50820A0E104808DE50230A0E3A12000EB0183
+S2190212B930A0E308018DE80600A0E128329FE50410A0E10C30B2
+S2190212CE8DE50220A0E308808DE50530A0E1A32000EB08005037
+S2190212E3E1A800000A08029FE5D91F00EB080050E10200001A96
+S2190212F8FC019FE57A1D00EBA10000EAF4019FE5771D00EBF064
+S21902130D119FE544201BE5EC319FE500E091E50190A0E1006062
+S21902132293E502085EE30E70A0A10278A0B3000052E315000016
+S2190213370A8740A0E1040086E048C04BE2C0119FE50C20A0E1A7
+S21902134C003091E50CA0A0E1023043E29E0301E0011064E04F35
+S2190213612D00EB005050E20B00000A48401BE50500A0E1832E02
+S21902137600EB0410A0E10030A0E188019FE50520A0E1571D0003
+S21902138BEB020000EA7C019FE5541D00EB48A04BE274319FE5D4
+S2190213A00010A0E3004093E5012CA0E30400A0E1D41B00EB6077
+S2190213B5319FE5030093E8030084E8106084E5146084E518703C
+S2190213CA84E5012CA0E3024084E00400A0E10010A0E3C91B004C
+S2190213DFEB38C19FE50F009CE80F0084E8187084E5073086E0EE
+S2190213F4103084E50010A0E3143084E5012CA0E3014C84E2048D
+S21902140900A0E1BD1B00EB0CC19FE50F009CE804E0A0E1070033
+S21902141EAEE800519FE50130CEE42324A0E10120CEE42338A0CE
+S219021433E10030CEE5002099E5003095E5823043E0103084E513
+S219021448182084E50010A0E3143084E5012CA0E3024084E0044D
+S21902145D00A0E1A81B00EBC0C09FE50F009CE804E0A0E1070041
+S219021472AEE80130CEE42334A0E10030CEE5018088E20030957A
+S219021487E5018088E2001099E5018088E2036061E0106084E583
+S21902149C018088E2146084E50A20A0E1181084E50600A0E1E6C3
+S2190214B12D00EB0600A0E1001099E50A20A0E1F72C00EB0050E9
+S2190214C650E21800000A48401BE50500A0E12B2E00EB0410A0B0
+S2190214DBE10030A0E128009FE50520A0E1FF1C00EB1F0000EA02
+S2190214F030180300FC1503005C1803008C180300981803008828
+S219021505510300805103008C510300BC180300E418030090510B
+S21902151A03002C19030034190300441903008451030054190372
+S21902152F004C309FE50600A0E1001093E50824A0E10A30A0E129
+S219021544222D00EB005050E20700000A48401BE50500A0E10AA6
+S2190215592E00EB0410A0E10030A0E11C009FE50520A0E1DE1CD7
+S21902156E00EB0600A0E1001099E50A20A0E1672D00EB01000036
+S219021583EA9051030064190300F0AF1BE90DC0A0E1F0D82DE92F
+S21902159804B04CE22CD04DE20070A0E338304BE20060A0E1348D
+S2190215AD504BE238700BE50500A0E100308DE50140A0E1AC3047
+S2190215C29FE56310A0E308308DE50720A0E104708DE50230A089
+S2190215D7E3D81F00EB0130A0E388008DE80600A0E188309FE5BF
+S2190215EC0410A0E10C308DE50220A0E308708DE50530A0E1DA81
+S2190216011F00EB070050E12E00000A68E09FE568009FE5683003
+S2190216169FE568409FE538201BE564109FE500C093E507005227
+S21902162BE1003094E50E10A0010C5063E0AB1C00EB003094E560
+S2190216400760A0E1230456E11E00002A0030D5E5FF0053E316CB
+S21902165500000A30009FE538301BE5102095E5000053E309006A
+S21902166A000AFCC095E5080000EA98190300FC150300F8190356
+S21902167F00AC1903008451030088510300EC190300041A0300AA
+S21902169414C095E5183095E500308DE51C3095E504308DE50517
+S2190216A910A0E10C30A0E18D1C00EB016086E2003094E5015C74
+S2190216BE85E2230456E1E0FFFF3AF0A81BE90DC0A0E170D82DD4
+S2190216D3E9B4309FE5B4109FE504B04CE2B0C09FE5002093E5F4
+S2190216E8005091E500009CE50C60A0E1804082E00410A0E105F6
+S2190216FD0054E11C00002A003094E5010073E31500000A040033
+S21902171251E10200000A7C009FE50420A0E1711C00EB0410A0AC
+S219021727E1050054E10B00002A003094E5010073E30800000A44
+S21902173C54309FE5002093E50320C2E3021081E0050051E1027D
+S21902175100002A003091E5010073E3F9FFFF1A0140A0E1E4FF9F
+S219021766FFEA003096E50330C3E3034084E0E0FFFFEA04005136
+S21902177BE10200000A14009FE50420A0E1571C00EB70A81BE9AE
+S219021790805103008451030088510300301A03000DC0A0E130EA
+S2190217A5D82DE9BC309FE5BC409FE5002093E500E094E504B0A5
+S2190217BA4CE2B0C09FE58E2082E000E09CE50050A0E102C0A04D
+S2190217CFE10E005CE11A00002A0400A0E1003092E5010073E30B
+S2190217E41100000A02005CE10200000A02306CE0430151E11679
+S2190217F900009A02C0A0E10E005CE10700002A003090E50320B3
+S21902180EC3E302C08CE00E005CE10200002A00309CE50100734E
+S219021823E3F9FFFF1A0C20A0E1020000EA003090E50330C3E39E
+S219021838032082E00E0052E1E5FFFF3A02005CE10500000A0261
+S21902184D306CE0430151E10200008A00C085E50100A0E330A87B
+S2190218621BE90000A0E330A81BE980510300885103008451037F
+S219021877000DC0A0E1F0DF2DE904B04CE2F8D04DE20040A0E386
+S21902188CD8400BE5E0400BE5E8400BE5F0400BE50080A0E1F8F7
+S2190218A1400BE5D0604BE200410BE50600A0E104410BE5D430AD
+S2190218B64BE200308DE5D8204BE204208DE50170A0E1B4339F14
+S2190218CBE56210A0E308308DE50120A0E30430A0E1171F00EB03
+S2190218E0DC304BE200308DE5E0204BE204208DE5B8004BE28CDD
+S2190218F5339FE57210A0E308308DE50120A0E30430A0E10C1FED
+S21902190A00EBE4304BE200308DE5E8204BE204208DE5A0004B3D
+S21902191FE264339FE56510A0E308308DE50120A0E30430A0E1B4
+S219021934011F00EB88004BE2F0304BE204308DE5EC504BE2403B
+S219021949339FE56610A0E308308DE50120A0E300508DE504308E
+S21902195EA0E1F61E00EBF4304BE200308DE5F8204BE204208D04
+S219021973E570004BE214339FE56C10A0E308308DE50120A0E3BE
+S2190219880430A0E1EB1E00EBFC304BE200308DE5012C4BE20441
+S21902199D208DE558004BE2EC329FE57310A0E308308DE50120A4
+S2190219B2A0E30430A0E1E01E00EB413F4BE200308DE540004B1E
+S2190219C7E2CC329FE56E10A0E308308DE50420A0E104408DE59A
+S2190219DC0230A0E3D61E00EB0730A0E300308DE5422F4BE2045D
+S2190219F1208DE5063043E208308DE50800A0E198329FE5071055
+S219021A06A0E10C308DE50220A0E30630A0E1D51E00EB04005007
+S219021A1BE10570A0E10200001A78029FE500FEFFEB4D0100EA9E
+S219021A3004211BE5000052E30200001AD8301BE5000053E30ADC
+S219021A4500000A000052E30200000AF0301BE5000053E30500DF
+S219021A5A000AF8301BE5000053E30200000A08311BE500005370
+S219021A6FE30200001A2C029FE5ECFDFFEB390100EA00311BE582
+S219021A84F4001BE5000053E3FC000B0514529FE5004095E50468
+S219021A990080E0010040E20410A0E1293C00EB940003E0FC2036
+S219021AAE1BE50590A0E1F4300BE5020053E10200002AE8019F08
+S219021AC3E5881B00EB260100EAF0301BE5000053E31800000A0B
+S219021AD8EC001BE53B2B00EB006050E20600001AEC001BE5FC1B
+S219021AED301BE5030080E0010040E2342B00EB006050E20D003E
+S219021B02000AEC401BE50600A0E19D2C00EB0020A0E198019F7D
+S219021B17E50410A0E1721B00EB90019FE590319FE590C19FE591
+S219021B2C001093E500209CE56C1B00EB0A0100EA08011BE57E86
+S219021B411B00EB0F0050E30300009A70019FE51010A0E3641B8C
+S219021B5600EB020100EA04311BE5000053E31C00001A58619FA2
+S219021B6BE5D4101BE5003096E550419FE5030051E10400003A62
+S219021B80FC301BE5002094E5033081E0020053E10500003A3447
+S219021B95019FE5531B00EB14019FE5001096E5002094E54F1B2F
+S219021BAA00EBF0301BE5000053E30800001AF4101BE50700A011
+S219021BBFE1F6FEFFEB000050E30300001A00019FE5F4101BE572
+S219021BD4441B00EBE20000EADC309FE5001099E5EC409FE50011
+S219021BE980A0E300C093E50120A0E1000094E50CC061E010C1AC
+S219021BFE0BE50C10A0E18B1900EB003099E50860A0E100709414
+S219021C13E5230458E13500002A0030D7E5FF0053E32D00000AB9
+S219021C2808011BE50710A0E1511B00EB000050E32800001AF043
+S219021C3D301BE5000053E30300000A102097E5EC301BE503004D
+S219021C5252E19E00001A181097E5F4201BE5020051E19D000002
+S219021C671A6C009FE508111BE5781D00EB000050E3BA00000AC7
+S219021C7C0180A0E31B0000EA481A03005C1A0300701A03008454
+S219021C911A0300A01A0300B81A0300D41A0300081B0300141B42
+S219021CA60300281B030088510300441B0300741B0300941B0357
+S219021CBB008051030084510300B01B030058F80300C4F7030082
+S219021CD0E01B03000C1C030090510300981C0300016086E2006B
+S219021CE53099E5017C87E2230456E1C9FFFF3A04211BE50000CB
+S219021CFA58E30C00001A003099E5E0119FE50860A0E100709160
+S219021D0FE5020000EA016086E2003099E5017C87E2230456E12C
+S219021D240200002A0030D7E5FF0053E3F7FFFF1A000052E32CE6
+S219021D3900001AEC101BE5FC301BE50100A0E1031081E0011045
+S219021D4E41E2630C00EB008050E20200000A8C019FE5E11A0032
+S219021D63EB7F0000EA01A0A0E3EC001BE5435F4BE2F4101BE52D
+S219021D780520A0E1C82A00EB006050E20800000A0600A0E10C95
+S219021D8D411BE508A0A0E1FB2B00EB0410A0E10030A0E14C012C
+S219021DA29FE50620A0E1CF1A00EB00005AE30E00000AEC001BCA
+S219021DB7E5D4101BE5FC201BE50530A0E1022B00EB006050E2CB
+S219021DCC0700000A0C411BE50600A0E1EA2B00EB0410A0E10081
+S219021DE130A0E10C019FE50620A0E1BE1A00EB0700A0E10010A2
+S219021DF6A0E3012CA0E3411900EB08111BE50700A0E1EB1A00B3
+S219021E0BEBEC301BE5E0201BE5103087E5000052E30500001AB4
+S219021E20F0301BE5000053E3EC201B150200001AD4201BE50004
+S219021E350000EADC201BE5E8301BE5142087E5000053E30200BB
+S219021E4A001AA8309FE5003093E5000000EAE4301BE51C30878D
+S219021E5FE5F4301BE5183087E5FC201BE5202087E5EC001BE5F6
+S219021E74FC101BE5B5FCFFEBFC0087E510011BE5434F4BE20073
+S219021E891099E50420A0E16E2B00EB10011BE5001099E50420C3
+S219021E9EA0E17F2A00EB006050E20450A0E11600000A0C411B24
+S219021EB3E50600A0E1B22B00EB0410A0E10030A0E134009FE5E1
+S219021EC80620A0E1861A00EB1D0000EA28009FE5831A00EB2170
+S219021EDD0000EA20009FE5801A00EB1E0000EA90510300B41C1A
+S219021EF20300E81C03000C1D030060F80300341D0300341C039C
+S219021F0700601C03004C309FE510011BE5001093E5002099E508
+S219021F1C0530A0E1AB2A00EB006050E20700000A0C411BE5063D
+S219021F3100A0E1932B00EB0410A0E10030A0E11C009FE506205E
+S219021F46A0E1671A00EB10011BE5001099E50520A0E1F02A0033
+S219021F5BEB010000EA90510300541D0300F0AF1BE90DC0A0E14B
+S219021F70F0D82DE904B04CE254D04DE20040A0E30070A0E14C42
+S219021F85504BE254400BE50500A0E15C400BE550304BE2003050
+S219021F9A8DE554204BE204208DE50160A0E128319FE56610A0AD
+S219021FAFE308308DE50120A0E30430A0E15F1D00EB58304BE214
+S219021FC400308DE55C204BE204208DE534004BE200319FE56C9E
+S219021FD910A0E308308DE50120A0E30430A0E1541D00EB0220D8
+S219021FEEA0E314008DE8E4309FE50700A0E10C308DE50610A047
+S219022003E108408DE50530A0E1571D00EB040050E10200001AC0
+S219022018C4009FE583FCFFEB460000EA54301BE5000053E3020F
+S21902202D00000A5C301BE5000053E30200001AA4009FE57AFC11
+S219022042FFEB3D0000EA50001BE5DF2900EB005050E2060000A6
+S2190220571A50001BE558301BE5030080E0010040E2D82900EB09
+S21902206C005050E20D00000A50401BE50500A0E1412B00EB0052
+S21902208120A0E160009FE50410A0E1161A00EB58009FE55830AA
+S2190220969FE558C09FE5001093E500209CE5101A00EB240000AC
+S2190220ABEA50101BE558301BE50100A0E1031081E0011041E21D
+S2190220C0870B00EB000050E30C00000A28009FE5051A00EB196F
+S2190220D50000EA841A0300781D0300FC150300141B0300801DE9
+S2190220EA0300741B0300941B03008051030084510300941D0333
+S2190220FF0050001BE558101BE560204BE2E42900EB005050E2E6
+S2190221140900000A60401BE50500A0E1182B00EB0410A0E100B3
+S21902212930A0E108009FE50520A0E1EC1900EB000000EA341D8C
+S21902213E0300F0A81BE90DC0A0E1F0D82DE904B04CE254D04D67
+S219022153E20040A0E30070A0E14C504BE254400BE50500A0E107
+S2190221685C400BE550304BE200308DE554204BE204208DE50148
+S21902217D60A0E1FC309FE56610A0E308308DE50120A0E304303A
+S219022192A0E1E91C00EB58304BE200308DE55C204BE204208D0F
+S2190221A7E534004BE2D4309FE56C10A0E308308DE50120A0E301
+S2190221BC0430A0E1DE1C00EB0220A0E314008DE8B8309FE507CC
+S2190221D100A0E10C308DE50610A0E108408DE50530A0E1E11CBF
+S2190221E600EB040050E10200001A98009FE50DFCFFEB3A000058
+S2190221FBEA54301BE5000053E30200000A5C301BE5000053E356
+S2190222100200001A78009FE504FCFFEB310000EA50001BE569DC
+S2190222252900EB005050E20600001A50001BE558301BE503000C
+S21902223A80E0010040E2622900EB005050E21600000A50401B42
+S21902224FE50500A0E1CB2A00EB0020A0E134009FE50410A0E13A
+S219022264A01900EB2C009FE52C309FE52CC09FE5001093E50032
+S219022279209CE59A1900EB180000EA841A0300781D0300FC15BE
+S21902228E0300141B0300801D0300741B0300941B030080510347
+S2190222A3008451030050001BE558101BE560204BE2192A00EBB4
+S2190222B8005050E20900000A60401BE50500A0E1AE2A00EB0488
+S2190222CD10A0E10030A0E108009FE50520A0E1821900EB0000FB
+S2190222E200EAC81D0300F0A81BE90DC0A0E1F0D82DE904B04C46
+S2190222F7E254D04DE20040A0E30070A0E14C504BE254400BE595
+S21902230C0500A0E15C400BE550304BE200308DE554204BE204AF
+S219022321208DE50160A0E1FC309FE56610A0E308308DE50120B8
+S219022336A0E30430A0E17F1C00EB58304BE200308DE55C204BAF
+S21902234BE204208DE534004BE2D4309FE56C10A0E308308DE56C
+S2190223600120A0E30430A0E1741C00EB0220A0E314008DE8B8A7
+S219022375309FE50700A0E10C308DE50610A0E108408DE50530DC
+S21902238AA0E1771C00EB040050E10200001A98009FE5A3FBFF2E
+S21902239FEB3A0000EA54301BE5000053E30200000A5C301BE5C1
+S2190223B4000053E30200001A78009FE59AFBFFEB310000EA50D5
+S2190223C9001BE5FF2800EB005050E20600001A50001BE558306C
+S2190223DE1BE5030080E0010040E2F82800EB005050E2160000BA
+S2190223F30A50401BE50500A0E1612A00EB0020A0E134009FE5DF
+S2190224080410A0E1361900EB2C009FE52C309FE52CC09FE500E9
+S21902241D1093E500209CE5301900EB180000EA841A0300781D0E
+S2190224320300FC150300141B0300801D0300741B0300941B0361
+S21902244700805103008451030050001BE558101BE560204BE268
+S21902245CFB2900EB005050E20900000A60401BE50500A0E14456
+S2190224712A00EB0410A0E10030A0E108009FE50520A0E1181991
+S21902248600EB000000EAE81D0300F0A81BE90DC0A0E1F0DF2D77
+S21902249BE904B04CE218D04DE20060A0E300608DE52C304BE205
+S2190224B004308DE50120A0E308208DE55C319FE50C308DE5026B
+S2190224C52082E00630A0E1271C00EB060050E10200001A4401FC
+S2190224DA9FE553FBFFEB6D0000EA3C319FE53C519FE53C419FB5
+S2190224EFE5001093E5002095E50680A0E1000094E5019062E077
+S2190225040910A0E14A1700EB006094E50270A0E3026C86E2052C
+S219022519A0A0E1010000EA017087E2016C86E200309AE5230415
+S21902252E57E10D00002A0030D6E5FF0053E3F7FFFF0A2C001BBC
+S219022543E50610A0E10B1900EB000050E3F2FFFF1AD8009FE558
+S2190225582C101BE53D1B00EB000050E34C00000A0180A0E3005B
+S21902256D0058E30300001ABC009FE52C101BE5DA1800EB45005C
+S21902258200EA100096E530404BE2181096E50420A0E1C22800F9
+S219022597EB005050E20470A0E10700000A30401BE50500A0E1BF
+S2190225ACF52900EB0410A0E10030A0E17C009FE50520A0E1C955
+S2190225C11800EB0900A0E100109AE50720A0E19E2900EB060082
+S2190225D6A0E1FF10A0E3012CA0E3481700EB0900A0E100109AA8
+S2190225EBE50720A0E1AB2800EB005050E21000000A30401BE57D
+S2190226000500A0E1DF2900EB0410A0E10030A0E124009FE50552
+S21902261520A0E1B31800EB170000EA0C1E0300141B030084511D
+S21902262A03008851030090510300181E03002C1E0300341D03F7
+S21902263F004C309FE5001093E50900A0E100209AE50730A0E116
+S219022654DE2800EB005050E20700000A30401BE50500A0E1C62A
+S2190226692900EB0410A0E10030A0E11C009FE50520A0E19A1803
+S21902267E00EB0900A0E100109AE50720A0E1232900EB0100005C
+S219022693EA90510300541D0300F0AF1BE90DC0A0E1F0D82DE91A
+S2190226A804B04CE250D04DE20040A0E30070A0E14C504BE25414
+S2190226BD400BE50500A0E158400BE550304BE200308DE5542000
+S2190226D24BE204208DE50160A0E1E4309FE56210A0E308308DF5
+S2190226E7E50120A0E30430A0E1921B00EB58304BE200308DE5AA
+S2190226FC34004BE2C4309FE56310A0E308308DE50420A0E104A0
+S219022711408DE50230A0E3881B00EB0220A0E300208DE55C30F4
+S2190227264BE204308DE50110A0E308108DE594309FE50700A0B7
+S21902273BE10C308DE50610A0E10530A0E1881B00EB040050E1E3
+S2190227500200001A78009FE5B4FAFFEB3D0000EA5C001BE58CAE
+S219022765FAFFEB005050E20300001A60009FE55C101BE55B1812
+S21902277A00EB350000EA54301BE5000053E31430950550300B16
+S21902278F0544209FE550001BE5003092E5030050E10500003AD7
+S2190227A434309FE518C095E5001093E50C2080E0010052E10A8D
+S2190227B900003A20009FE5491800EB230000EA441E0300601EEA
+S2190227CE03000C1E0300141B03002C1E030058F80300C4F7032F
+S2190227E300741E0300101095E50C20A0E1901600EB50001BE51D
+S2190227F84C309FE51C2095E5201095E5002083E551FAFFEB5850
+S21902280D301BE50040A0E1000053E30200000A2C009FE50410B8
+S219022822A0E1301800EBFC1095E5000051E30800000A010054C5
+S219022837E10600000A10009FE50420A0E1281800EB020000EA44
+S21902284C60F803008C1E0300A01E0300F0A81BE90DC0A0E1F0CD
+S219022861D92DE944209FE504D04DE2004092E504B04CE20000E8
+S21902287654E32700001A30809FE50118A0E3000098E50130A0B0
+S21902288BE3003082E5010840E2B82700EB001050E20600000A70
+S2190228A010009FE5101800EB0400A0E11B0000EA6C360300C482
+S2190228B5F70300E41E030060709FE560609FE50100A0E15C4052
+S2190228CA9FE50710A0E10620A0E1D12700EB50509FE50400A084
+S2190228DFE10510A0E1DE2700EB44009FE5001097E5002096E587
+S2190228F400C094E5003095E500C08DE5F91700EB003094E5000F
+S2190229092098E524109FE5013883E2022063E0002081E50100D3
+S21902291EA0E3050000EA8051030084510300885103008C5103C3
+S21902293300101F030090510300F0A91BE90DC0A0E130D82DE969
+S21902294804B04CE20050A0E1010055E30140A0E1020000CA48B1
+S21902295D009FE532FAFFEB30A81BE9BBFFFFEB000050E30C0005
+S219022972000A34009FE534109FE5042094E59B1A00EB00305002
+S219022987E20400000A0500A0E10410A0E10FE0A0E10CF093E545
+S21902299C30A81BE910009FE521FAFFEB30A81BE9401F0300E488
+S2190229B1390300743A0300541F03000DC0A0E1F0DD2DE904B0C2
+S2190229C64CE24BDF4DE20040A0E10150A0E10330D4E502A0A0AD
+S2190229DBE1000053E31000000A131E4BE20100D4E50120A0E3F3
+S2190229F0040080E2000084E0040200EB0220D4E5000052E302FE
+S219022A0500000A30311BE5000053E36500000A000052E302006E
+S219022A1A001A30311BE5000053E36000001A0320D4E500005544
+S219022A2FE30130D4E5022084E0043083E2037082E00300000ABD
+S219022A44B8039FE50510A0E1A61700EB020000EAA8039FE504DA
+S219022A591084E2A21700EB0080D4E5013048E2050053E303F184
+S219022A6E9F97490000EA8C2A0200BC2A0200302B0200382B0281
+S219022A8300DC2A0200F42A02004D0F4BE20710A0E10420A0E347
+S219022A98E61500EB64239FE534311BE560139FE560039FE500EE
+S219022AAD0053E30210A0018C1700EB370000EA4E0F4BE20710D4
+S219022AC2A0E10420A0E3DA1500EB40039FE538111BE58417004B
+S219022AD7EB2F0000EA0700A0E1E12500EB0010A0E120039FE52E
+S219022AEC7E1700EB290000EA0050A0E318439FE50510D7E704B2
+S219022B0100A0E1781700EB040055E30100008A04039FE57417E0
+S219022B1600EB015085E2050055E3F5FFFF9AF4029FE56F170036
+S219022B2BEB1A0000EAEC029FE51B0000EAE8029FE50750A0E1E2
+S219022B40691700EB0030D7E50740A0E1000053E31100000AD039
+S219022B55629FE50030D5E50A0053E30200000A0130F4E50A0034
+S219022B6A53E3FCFFFF1A0600A0E10030A0E30030C4E50510A03D
+S219022B7FE1591700EB0A30A0E30130C4E40450A0E10030D5E5A9
+S219022B94000053E3EEFFFF1A00005AE30300000A7C029FE54F4E
+S219022BA91700EB0200A0E3A30000EA040058E31500000A494F06
+S219022BBE4BE20400A0E1011CA0E30A20A0E1AA1800EB00005001
+S219022BD3E30000E0E30460A0E1980000BA0600A0E1551700EB2B
+S219022BE8000050E3EEFFFF0AFF30E0E324204BE20330D2E72E2B
+S219022BFD0053E30A00A0018E00000A5E0053E30300A0038B007E
+S219022C12000A013048E2050053E303F19F97860000EA3C2C0202
+S219022C2700882C0200382E02006C2D0200CC2C0200082D0200A7
+S219022C3C4D0F4BE20710A0E10420A0E37A1500EB490F4BE24F66
+S219022C514F4BE20410A0E1561B00EB000050E36500000A342103
+S219022C661BE53C311BE5030052E1CDFFFF0A0700A0E10410A09E
+S219022C7BE10420A0E36C1500EB6D0000EA4E0F4BE20710A0E1D0
+S219022C900420A0E3671500EB490F4BE2054D4BE20410A0E10081
+S219022CA520A0E30230A0E1E91A00EB000050E35000000A3821E9
+S219022CBA1BE540311BE5030052E1EAFFFF1AB7FFFFEA510F4B0B
+S219022CCFE20710A0E10420A0E3561500EB490F4BE2524F4BE21F
+S219022CE40410A0E1112500EB000050E34100000A44211BE548F3
+S219022CF9311BE5030052E1DBFFFF1AA8FFFFEA4B4F4BE204000A
+S219022D0EA0E10710A0E10620A0E3461500EB0050A0E304A0A08A
+S219022D23E1534F4BE2493F4BE250310BE5156E4BE2E0809FE52A
+S219022D380410A0E10620A0E150011BE50830A0E1C21A00EB0072
+S219022D4D0050E32500000A0030D4E50530C7E7015085E205007F
+S219022D6255E3F3FFFF9A340000EABC009FE50750A0E1DC16006A
+S219022D77EB496F4BE2B0709FE5090000EA0030D6E50640A0E127
+S219022D8C000053E30300000A0130C5E40130F4E5000053E3FBD3
+S219022DA1FFFF1A0A30A0E30130C5E40040A0E30040C5E50700B3
+S219022DB6A0E1CB1600EB0600A0E1011CA0E30420A0E12B1800A5
+S219022DCBEB040050E10000E0E31A0000BA0600A0E1D71600EBD6
+S219022DE0040050E1E6FFFF1A140000EA0700A0E10A10A0E1067D
+S219022DF520A0E30E1500EB0400A0E30F0000EAE81F0300FC1F6C
+S219022E0A0300F41F0300F01F0300042003000C200300142003F4
+S219022E1F00182003001C20030020200300242003002C20030044
+S219022E345820030008009FE5AA1600EB0100A0E3000000EA1C46
+S219022E49200300F0AD1BE90DC0A0E100D82DE9031081E22111C5
+S219022E5EA0E10130A0E1011041E204B04CE200E0A0E10000A00E
+S219022E73E300C0A0E1000053E1090000DA0120A0E1011041E232
+S219022E8804309EE40F005CE3133C83E1030020E001C08C120015
+S219022E9DC0A003000052E3F5FFFFCA00A81BE90DC0A0E100D8F2
+S219022EB22DE9010040E204B04CE2050050E300F19F970C00007E
+S219022EC7EAE02E0200E02E0200F02E0200F82E0200E02E02008D
+S219022EDCE82E02000400A0E300A81BE90800A0E300A81BE90058
+S219022EF100A0E300A81BE9020CA0E300A81BE90DC0A0E1F0DF3C
+S219022F062DE904B04CE242DE4DE20CD04DE20080A0E30070A04A
+S219022F1BE101A0A0E14DFEFFEB60919FE5080050E16B00000A3F
+S219022F30426E4BE2086046E20600A0E14C519FE5012BA0E305BC
+S219022F4510A0E1BA1400EB433E4BE2083043E20C3043E200308A
+S219022F5A8DE5434E4BE204808DE5084044E224319FE508404462
+S219022F6FE2008083E50400A0E118319FE56C10A0E308308DE581
+S219022F840820A0E10230A0E36B1900EB0120A0E304018DE8FC4A
+S219022F99309FE50700A0E10C308DE50A10A0E108808DE5043069
+S219022FAEA0E16E1900EB080050E105A0A0E14700000A08508A82
+S219022FC3E2FE3F8AE2030055E13D00002A0830DAE5080053E194
+S219022FD83A00000A0000D5E50070A0E3B0FFFFEB0120D5E5ACCC
+S219022FED409FE50330D5E5002082E0043083E2036082E0000037
+S21902300200EA184084E2090054E10500000A000094E5041085AB
+S219023017E2571600EB000050E3F7FFFF1A047094E50500A0E1AE
+S21902302C44241BE50710A0E160FEFFEB010080E2050050E300A5
+S219023041F19F97190000EA60300200C8300200783002007C3067
+S219023056020084300200A83002000A00A0E1421E4BE20810415B
+S21902306BE2012BA0E3701400EB190000EA0180A0E3065085E087
+S2190230800A0000EA18509FE5080000EAE43B03009451030064F4
+S219023095F803005C200300FC150300243B03009C510300280017
+S2190230AA9FE50E1600EB24309FE5030055E10200002A0030D535
+S2190230BFE5000053E3C4FFFF1A000058E30300000A030000EBC8
+S2190230D4010000EA742003008C550300F0AF1BE90DC0A0E1F099
+S2190230E9DF2DE9A8309FE5FF1FA0E3A4209FE504B04CE2A0709F
+S2190230FE9FE5019BA0E3009087E504D04DE2043087E5F82387D2
+S219023113E50700A0E14CFFFFEBFC0387E580409FE580309FE51B
+S219023128001094E5002093E578009FE5816042E0461800EB0022
+S21902313D0050E30480A0E13000000A0600A0E12C404BE20010D4
+S21902315298E50420A0E1BC2600EB0600A0E1001098E50420A09A
+S219023167E1CD2500EB005050E204A0A0E10F00000A2C401BE562
+S21902317C0500A0E1002700EB0410A0E10030A0E120009FE505B0
+S21902319120A0E1D41500EB150000EACEFAAD0BADDEADDE945133
+S2190231A60300885103008451030088200300BC1803000600A02E
+S2190231BBE10710A0E10920A0E10A30A0E1012600EB005050E286
+S2190231D00700000A2C401BE50500A0E1E92600EB0410A0E10051
+S2190231E530A0E118009FE50520A0E1BD1500EB0600A0E1001087
+S2190231FA98E50A20A0E1462600EB000000EAB4200300F0AF1BBF
+S21902320FE90DC0A0E1F0DD2DE908319FE504B04CE20080A0E1E9
+S2190232240160A0E1003093E502A0A0E1000053E30100001A038D
+S21902323900A0E1F0AD1BE9E4509FE53F3E85E2030055E1300052
+S21902324E002A0000D5E514FFFFEB01C0D5E5041085E20320D595
+S219023263E500E08CE00800A0E1043082E203708EE0022085E095
+S21902327804C08CE20C4082E0BD1500EB000050E31D00001A0033
+S21902328D30D5E50A0053E11500001A01304AE2050053E303F142
+S2190232A29F97100000EAC0320200C0320200FC320200E83202AC
+S2190232B700C0320200D43202000600A0E10410A0E10420A0E33C
+S2190232CCD91300EB090000EA0600A0E10410A0E10620A0E3D483
+S2190232E11300EB040000EA004086E5020000EA38009FE508107A
+S2190232F6A0E17B1500EB0100A0E3F0AD1BE928309FE5075085E3
+S21902330BE0030055E1CEFFFF3A1C009FE50810A0E1721500EBDC
+S2190233200000A0E3F0AD1BE9945503009C510300E02003008C02
+S2190233355503000C2103000DC0A0E1F0D92DE904B04CE2007075
+S21902334AA0E10080A0E378519FE50030D5E5000053E34B00002B
+S21902335F1A006097E50600A0E1741500EB014080E2100097E532
+S219023374CCFEFFEB043088E0040080E2082097E5008083E00000
+S2190233890052E30400000A0200A0E1691500EB010080E2008016
+S21902339E88E0000000EA0200A0E13F0E58E34200008A0140C5E4
+S2190233B3E50300C5E51030D7E50030C5E50C20D7E50220C5E5E2
+S2190233C80020D6E5045085E2000052E30500000A0030D5E50223
+S2190233DD3083E00130C5E40120F6E5000052E3F9FFFF1A0030F5
+S2190233F2A0E30130C5E4030050E10B00000A086097E50020D63F
+S219023407E5030052E10500000A0030D5E5023083E00130C5E426
+S21902341C0120F6E5000052E3F9FFFF1A0030A0E30130C5E410B5
+S2190234313097E5013043E2050053E303F19F970E0000EA5C3490
+S21902344602005C34020080340200803402005C34020070340232
+S21902345B000500A0E1141087E20420A0E3721300EB030000EA3E
+S2190234700500A0E1141087E20620A0E36D1300EB100097E58805
+S219023485FEFFEB0100A0E3F0A91BE90000D5E584FEFFEB0120DB
+S21902349AD5E50330D5E5002082E0043083E2034082E0045085D6
+S2190234AFE0048088E03F0E58E3A5FFFF3A10009FE5001097E5B0
+S2190234C4081500EB0000A0E3F0A91BE99C510300302103000D73
+S2190234D9C0A0E170D82DE90010A0E370409FE5012BA0E36C5006
+S2190234EE9FE504B04CE268609FE50400A0E1811300EB060055B1
+S219023503E10600000A0500A0E18AFFFFEB000050E30F00000A76
+S219023518185085E2060055E1F8FFFF1A3C209FE5013BA0E300DD
+S21902352D3084E5042084E530309FE50400A0E1F83384E5FF1F41
+S219023542A0E341FEFFEBFC0384E51C209FE50130A0E300308233
+S219023557E570A81BE994510300243B0300E43B0300CEFAAD0B6B
+S21902356CADDEADDE945503000DC0A0E170D82DE98C609FE50025
+S21902358130A0E388509FE504B04CE2003086E504D04DE200306F
+S21902359685E5AFFCFFEB000050E33800000A6C309FE56C009F7A
+S2190235ABE56C409FE5001090E5012BA0E300C093E50400A0E1FE
+S2190235C08C1041E01B1300EB0400A0E1FF1FA0E31EFEFFEBFCF1
+S2190235D53394E5030050E10700001A042094E538309FE503004D
+S2190235EA52E10300001AF82394E52C309FE5030052E10B0000C0
+S2190235FF0A24009FE5B81400EBB2FFFFEB1D0000EA94550300B9
+S21902361464F80300885103008451030094510300CEFAAD0BAD72
+S219023629DEADDE482103001C104BE23C009FE50120A0E3F3FE02
+S21902363EFFEB1C301BE5000053E30700000A0510A0E124009F9A
+S219023653E50420A0E3ECFEFFEB1C009FE51C109FE50220A0E306
+S219023668E8FEFFEB0130A0E3003086E5030000EA801F03009800
+S21902367D1F0300D41F0300C8F7030070A81BE90DC0A0E100D815
+S2190236922DE9803260E0030180E0000180E014209FE50002A0F5
+S2190236A7E1483092E504B04CE20FE0A0E103F0A0E100A81BE9C5
+S2190236BC500000000DC0A0E1F0DF2DE90010A0E304B04CE26199
+S2190236D1DF4DE2A4110BE598010BE5042090E59C210BE5A011AA
+S2190236E60BE5007092E50130A0E3A8310BE5120F00EB1A0F003F
+S2190236FBEB100F00EB042097E5010052E30500000AA8111BE520
+S219023710040052E30030A0130130A003014013E0A400000A00CB
+S21902372530A0E3A8310BE5040052E30200000A0700A0E104102B
+S21902373AA0E3042400EB043097E5040053E30300000ACC029F79
+S21902374FE5651400EBA8011BE5BB0000EA0700A0E1013CA0E37F
+S21902376490310BE52010A0E3A8311BE5632F4BE294310BE56533
+S2190237794F4BE200408DE5193E4BE2CC2200EB000050E363AF64
+S21902378E4BE20700000A88329FE528104BE2F32091E1410F5217
+S2190237A3E30200000A78029FE54E1400EBD0FFFFEA0700A0E190
+S2190237B80030A0E394310BE51510A0E3653F4BE200308DE50A68
+S2190237CD20A0E1193E4BE2B82200EB000050E31B00000A628FAD
+S2190237E24BE20840A0E10130D4E438929FE5000053E302000066
+S2190237F70A0130D4E4000053E3FCFFFF1A0460A0E10130D4E4AB
+S21902380C000053E3FCFFFF1A0450A0E10130D4E4000053E3FC66
+S219023821FFFF1AA4111BE5000051E30100000AF8019FE52C14C2
+S21902383600EB0900A0E10610A0E10820A0E100408DE50530A03A
+S21902384BE1261400EB0700A0E11A10A0E30050A0E394510BE57E
+S219023860653F4BE200308DE50A20A0E1193E4BE2912200EB0507
+S2190238750050E10800000A0A00A0E190111BE58C204BE2662366
+S21902388A00EB8C301BE5A0111BE5050050E10310A011A0110B14
+S21902389FE5A0211BE5000052E392FFFF0A0510A0E17C519FE5B1
+S2190238B407CDA0E30500A0E1083097E5813083E00C20D3E7016C
+S2190238C920C0E7011081E2050051E3F8FFFFDA0700A0E10030E7
+S2190238DEA0E394310BE51B10A0E3653F4BE200308DE50A20A0AB
+S2190238F3E1193E4BE26F2200EB000050E32900000A0A00A0E1E7
+S21902390890111BE574204BE20A2300EB000050E32000000A9C30
+S21902391D111BE570201BE5003091E5101093E5024081E09C214F
+S2190239321BE5044082E5A0111BE574205BE50700A0E188220017
+S219023947EB1F30D4E51F30C4E50720D4E5800012E30200001A08
+S21902395C0730D4E5800013E3FCFFFF0A98111BE5003091E50195
+S21902397100A0E1242093E50510A0E10FE0A0E100F092E59C21D3
+S2190239861BE5343092E50140A0E30C4083E5730E00EB0400A0C2
+S21902399BE12A0000EA90009FE5D01300EB52FFFFEA88009FE5F3
+S2190239B0CD1300EB4FFFFFEA050052E30200001A78009FE5C8DF
+S2190239C51300EB4AFFFFEA650E00EB3200A0E32CFFFFEBA431B9
+S2190239DA1BE5000053E30100001A58009FE5BF1300EBA4111B17
+S2190239EFE550009FE5011081E2A4110BE5BA1300EBA4211BE56D
+S219023A040400A0E10A0052E30E00000A0700A0E16D0400EB499D
+S219023A190E00EB35FFFFEA8C2103009EFEFFFFA8210300C42180
+S219023A2E0300C0210300B4360300D4210300E82103000422037B
+S219023A43002422030044220300F0AF1BE90DC0A0E170D82DE966
+S219023A580040A0E1086094E5045096E504B04CE22B2300EB00C6
+S219023A6D00A0E31C2300EB000085E5344085E50600A0E10EFFB4
+S219023A82FFEB70A81BE90DC0A0E100D82DE904B04CE204C090B0
+S219023A97E504109CE52130A0E30030C1E5FF20A0E30720C1E580
+S219023AAC213043E20F30C1E530308CE500A81BE90DC0A0E130A8
+S219023AC1D82DE9044090E504B04CE204C094E52130A0E300301F
+S219023AD6CCE54820A0E30E20CCE50000A0E30B00CCE50A00CC44
+S219023AEBE5013043E20C30CCE5462042E20D20CCE5203083E27A
+S219023B000430CCE5180084E5140084E5083084E50150A0E12C27
+S219023B150084E55010A0E30110CCE53F3083E20330CCE57E2030
+S219023B2A82E20220CCE5303043E2103084E57F2082E20720CC24
+S219023B3FE5103043E20F30CCE59F2042E20020CCE500E0A0E11B
+S219023B5401208CE20710CCE50E30D5E70E30C2E701E08EE205C7
+S219023B69005EE3FAFFFFDA2230A0E30030CCE50020A0E30D20A7
+S219023B7ECCE51E3043E20C30CCE5012082E2302084E530A81BE9
+S219023B93E90DC0A0E100D82DE9010C51E20100A01304B04CE21B
+S219023BA800A81BE90DC0A0E100D82DE9042090E504B04CE2148A
+S219023BBD3092E50000A0E3000053E10200000A183092E50000C3
+S219023BD253E10000001A0100A0E300A81BE90DC0A0E100D82D06
+S219023BE7E904B04CE204C090E504009CE52230A0E30030C0E58F
+S219023BFC0520C0E54224A0E10620C0E50410C0E5043083E200DF
+S219023C1130C0E50120A0E32C208CE500A81BE90DC0A0E1F0DF98
+S219023C262DE904B04CE20090A0E10380A0E13F0058E30440991E
+S219023C3BE50850A0C14050A0D304309BE50160A0E1087094E545
+S219023C5002A0A0E1040094E5400057E30400001A147084E51C17
+S219023C653084E5245084E54830A0E3030000EA187084E52030A4
+S219023C7A84E5285084E54030A0E3083084E52230A0E30030C08B
+S219023C8FE50A50C0E54534A0E10B30C0E50020A0E30820C0E5EB
+S219023CA402E0A0E10970C0E54030A0E30730C0E5122082E2001E
+S219023CB920C0E50A005EE10F0000AA8E31A0E1062083E004C09B
+S219023CCE92E501E08EE2061093E70C20A0E101C04CE200005294
+S219023CE3E3F4FFFFDA0C20A0E10130D1E401C04CE21030C0E5AF
+S219023CF8000052E3F9FFFFCAEDFFFFEA050058E1040000AA00F9
+S219023D0D30A0E305E068E01030C0E501E05EE2FCFFFF1A2C2054
+S219023D2294E50730D0E5400013E3FCFFFF0A000052E3080000A9
+S219023D371A143094E5030057E10130A0030230A0130C3084E500
+S219023D4C0900A0E10710A0E10520A0E1A0FFFFEBF0AF1BE90D5A
+S219023D61C0A0E170D82DE904D04DE20060A0E1045096E50440B0
+S219023D7695E50C20D4E56230A0E30030C4E50710D4E540304361
+S219023D8BE20030C4E504B04CE22A0000EA0430A0E30000A0E331
+S219023DA00A30C4E50B00C4E5800052E30800C4E55020A00309EE
+S219023DB520C4E5103095E5020053E10200001A013041E2033096
+S219023DCAC4E5210000EA0010A0E11C004BE2102085E54030A0A5
+S219023DDFE30730C4E50A20A0E30020C4E51030D4E50130C0E7BE
+S219023DF4011081E2030051E3FAFFFF9A19305BE51A105BE5067D
+S219023E0900A0E1002096E5031481E124C092E5041041E20FE087
+S219023E1EA0E104F09CE51B305BE5013043E20330C4E56220A0B3
+S219023E33E30020C4E50710D4E52230A0E30030C4E50320D4E56D
+S219023E48FF1001E2012082E2010052E1CFFFFF1A70A81BE90DA3
+S219023E5DC0A0E170D82DE904B04CE200C0A0E30C40A0E1026056
+S219023E72A0E1040090E5060054E104E090E50150A0E1060000CE
+S219023E87AA0520A0E106C0A0E1043092E501C05CE2034084E037
+S219023E9C082082E2FAFFFF1A2230A0E30030CEE50A40CEE54473
+S219023EB134A0E10B30CEE50420A0E30820CEE51010D0E500C03B
+S219023EC6A0E30910CEE54030A0E30730CEE5062082E20020CE3C
+S219023EDBE506005CE10F0000AA8C31A0E1051093E701008CE2AE
+S219023EF0000051E3053083E00600000A042093E5000052E30306
+S219023F0500000A1030DEE50130C1E4012052E2FBFFFF1A00C095
+S219023F1AA0E106005CE1EFFFFFBA70A81BE90DC0A0E170D82D41
+S219023F2FE90050A0E1044095E5043094E50C2094E504B04CE2CA
+S219023F440410D3E5010052E30300001A1C6094E50030A0E31486
+S219023F593084E5020000EA206094E50030A0E3183084E5141046
+S219023F6E94E50030A0E32C3084E5030051E10500000A2420942A
+S219023F83E50500A0E114FFFFEB0130A0E30C3084E5090000EA6E
+S219023F98181094E5000051E30500000A282094E50500A0E10BD7
+S219023FADFFFFEB0230A0E30C3084E5000000EA0C1084E5050041
+S219023FC2A0E1003095E50610A0E124C093E50020A0E30FE0A093
+S219023FD7E108F09CE570A81BE90DC0A0E100D82DE904B04CE23A
+S219023FEC00A81BE90DC0A0E1F0D82DE90060A0E1047096E5040D
+S2190240015097E52230A0E30030C5E50720D5E504B04CE2FF4026
+S21902401602E2100000EA0A0014E30200000A0600A0E10410A068
+S21902402BE1BDFFFFEB050014E30200000A0600A0E10410A0E1CE
+S21902404046FFFFEB300014E30200000A0600A0E10410A0E1E105
+S219024055FFFFEB0730D5E5FF4003E2000054E30300000A0740C6
+S21902406AC5E5303097E5000053E3E8FFFF1A000097E5B9210028
+S21902407FEBF0A81BE90DC0A0E100D82DE9043090E5002093E521
+S21902409404B04CE2200092E500A81BE90DC0A0E100D82DE91C93
+S2190240A9209FE5083090E5030093E8030082E804B04CE20C10C1
+S2190240BE9FE50130A0E3003081E500A81BE99C55030098550388
+S2190240D3000DC0A0E1F0DF2DE904B04CE245DF4DE20070A0E178
+S2190240E8D0504BE20500A0E1FC304BE200308DE5012C4BE20490
+S2190240FD208DE50160A0E174339FE56E10A0E308308DE501203C
+S219024112A0E30030A0E3081500EB413F4BE200308DE5422F4B48
+S219024127E204208DE5B8004BE24C339FE57410A0E308308DE56B
+S21902413C0120A0E30030A0E3FD1400EB433F4BE200308DE511B2
+S2190241512E4BE204208DE5A0004BE224339FE56910A0E3083085
+S2190241668DE50120A0E30230A0E1F21400EB453F4BE200308D15
+S21902417BE5462F4BE204208DE588004BE2FC329FE56810A0E3A9
+S21902419008308DE50120A0E30230A0E1E71400EB473F4BE20079
+S2190241A5308DE5122E4BE204208DE570004BE2D4329FE56C10B6
+S2190241BAA0E308308DE50120A0E30030A0E3DC1400EB58004BE7
+S2190241CFE2493F4BE200308DE50040A0E3B0329FE57610A0E369
+S2190241E408308DE50420A0E104408DE50230A0E3D11400EB4AEB
+S2190241F93F4BE200308DE54B2F4BE204208DE540004BE284323C
+S21902420E9FE57210A0E308308DE50120A0E30430A0E1C614002E
+S219024223EB0730A0E318008DE80700A0E164329FE50610A0E114
+S2190242380C308DE50120A0E308408DE50530A0E1C81400EB04DD
+S21902424D0050E10200001A44029FE5A31100EBCB0000EA1031A9
+S2190242621BE5000053E30900000ADC304BE20C011BE50310A0FE
+S219024277E1AD1F00EB000050E30800001A18029FE50C111BE583
+S21902428C961100EBBE0000EADC304BE20300A0E10420A0E30078
+S2190242A1129FE5E30F00EB18311BE5000053E31000000AE840CD
+S2190242B64BE214011BE50410A0E19B1F00EB000050E3D4019FC9
+S2190242CBE50600000AE8004BE2F8404BE20410A0E11C1E00EBAE
+S2190242E0000050E3060000AABC019FE514111BE57D1100EBA55B
+S2190242F50000EAB0019FE57A1100EBA20000EA2C311BE500002F
+S21902430A53E3FA3FA00328310B0520311BE5000053E34030A085
+S21902431F031C310B0500311BE5000053E30A30A003FC300B05A2
+S21902433408311BE5000053E3FA3FA00304310B05DC004BE2C70D
+S2190243491F00EB0010A0E15C019FE500A0A0E3631100EBE80072
+S21902435E4BE2C11F00EB0010A0E148019FE55E1100EB44019FAF
+S219024373E50A70A0E1981900EB660000EA012C4BE2BC3152E1E8
+S219024388084098E5083083E2BC30C8E10060A0E3045098E50866
+S21902439D30A0E30030C4E5017087E20160C4E50708A0E1B260F2
+S2190243B2C4E12008A0E1801900EBB600C4E10620A0E1BC10D877
+S2190243C7E10400A0E1DE1800EB0008A0E12008A0E1781900EBE5
+S2190243DCDC104BE2B200C4E10420A0E30C0085E2910F00EB10A0
+S2190243F10085E2E8104BE20420A0E38D0F00EB0140A0E30940E9
+S219024406C5E5BC00D8E16B1900EB0410A0E1B200C5E1F8204BBC
+S21902441BE20800A0E1161800EB0800A0E1B91800EB7B1500EB41
+S21902443088209FE5006082E504311BE50060A0E1034086E002BC
+S21902444550A0E1000000EAF51800EB003095E5000053E30200C6
+S21902445A001A6F1500EB040050E1F8FFFF3A6C1500EB0080A0CC
+S21902446FE16A1500EB28311BE5034080E0110000EAAC2203001E
+S219024484D0220300FC22030010230300202303003C23030050D8
+S21902449923030070230300742303009823030010390300B823CC
+S2190244AE0300E42303000824030020240300A04002009855039D
+S2190244C300D71800EB541500EB040050E1FBFFFF3A0900A0E1BD
+S2190244D8EC104BE20420A0E3540F00EB003095E5000053E30AC0
+S2190244ED00000A24311BE501A08AE2000053E30600000A74305D
+S2190245029FE5B600D3E12C1900EB0010A0E168009FE508206674
+S219024517E0F31000EBFC301BE5030057E10E0000AAEC504BE232
+S21902452C0500A0E14C409FE50420A0E30410A0E13D0F00EB0466
+S21902454100A0E1DC104BE20420A0E3390F00EB30009FE54E18D0
+S21902455600EB008050E20490A0E186FFFF1A2A1900EB1C009F10
+S21902456BE5FC201BE50A10A0E1DC1000EB040000EA9C550300DF
+S2190245802824030010390300EA0500004C240300F0AF1BE90D72
+S219024595C0A0E100D82DE930309FE530009FE5001093E504B007
+S2190245AA4CE228C09FE50C3091E50C308CE50C3090E51020918A
+S2190245BFE50C3081E510208CE5103090E5103081E500A81BE9B1
+S2190245D4BC36030020000200A45503000DC0A0E100D82DE91C60
+S2190245E9209FE51C109FE5000092E50C3091E50C3080E5102068
+S2190245FE91E504B04CE2102080E500A81BE9BC360300A4550317
+S219024613000DC0A0E130D82DE96C209FE504B04CE2003092E586
+S2190246280040A0E1000053E30500000A443094E5040053E30247
+S21902463D00001A003092E5383084E530A81BE940509FE50030AF
+S21902465295E5013083E2003085E5010053E30000001ACAFFFF89
+S219024667EB28309FE5004083E5400400EB003095E5013043E299
+S21902467C003085E5000053E30000001AD4FFFFEB30A81BE9FCA3
+S219024691360300C455030008F703000DC0A0E130D82DE92430F6
+S2190246A69FE504B04CE220409FE50350A0E1030054E10300009F
+S2190246BB3A0FE0A0E104F014E4050054E1FBFFFF2A30A81BE914
+S2190246D0FC3B0300FC3B03000DC0A0E100D82DE90030A0E1016C
+S2190246E520A0E104B04CE20C009FE50310A0E15D0E00EB0000BC
+S2190246FAA0E300A81BE9742403000DC0A0E100D82DE904B04C9E
+S21902470FE2FEDEFFE700A81BE90DC0A0E110D82DE970209FE5DE
+S21902472470309FE570109FE50040A0E3004082E5004083E564DB
+S219024739209FE50130A0E3003081E55C309FE5004082E500407F
+S21902474E83E5082082E20F32E0E3003082E504B04CE2CF00000F
+S219024763EB40309FE5004083E50922A0E3004082E5030C00EB64
+S219024778101F11EE0F1081E3101F01EE101F11EE011A81E303A6
+S21902478D1081E3101F01EE10A81BE904000590080005900C0080
+S2190247A205901000049014000490100000900DC0A0E130D82DF7
+S2190247B7E90030A0E1010040E2000053E304B04CE21B0000DA1C
+S2190247CC6C509FE500E0A0E3014040E2001095E5002095E501A6
+S2190247E10052E10300001A50309FE5002093E5010052E1FCFFA1
+S2190247F6FF0A09C2A0E300309CE5000053E30400000A012052E8
+S21902480BE000309C450320824002E08EE0010000EA023061E00D
+S21902482003E08EE002005EE3EAFFFFDA0030A0E10400A0E100F0
+S2190248350053E3E4FFFFCA30A81BE9100000900DC0A0E100D8E3
+S21902484A2DE984309FE5002093E504B04CE2FF0812E31000A0DE
+S21902485F130500001AFF0C12E30800A0130200001AFF0012E340
+S2190248741800A0030000A01358109FE558C09FE55230A0E1012E
+S2190248890013E30C00000A0B0050E30700001A003091E50C20D6
+S21902489E03E05230A0E1010013E30300001A010080E21B005036
+S2190248B3E3F9FFFF9A00A81BE9200080E200A81BE9010080E238
+S2190248C8070010E3ECFFFF1A0000E0E300A81BE90000059018BA
+S2190248DD00049000F8FF0F0DC0A0E100D82DE92A0050E30B0081
+S2190248F2A0C314109FE50120A0E3003091E504B04CE21230C36E
+S219024907E1003081E500A81BE9040005900DC0A0E100D82DE99C
+S21902491C2A0050E30B00A0C314109FE50120A0E3003091E504BE
+S219024931B04CE2123083E1003081E500A81BE9040005900DC03E
+S219024946A0E100D82DE90B3040E21F0053E304B04CE20400004E
+S21902495B9A1F3000E20120A0E308109FE51223A0E1002081E5F9
+S21902497000A81BE9180004900DC0A0E100D82DE90B3040E21F1B
+S2190249850053E304B04CE23400009A000051E31900000A0000D9
+S21902499A52E30B00000A1F1000E2BC009FE50120A0E300309002
+S2190249AFE51221A0E1B0109FE5023083E1003080E5003091E53E
+S2190249C4023083E1003081E500A81BE91F1000E28C009FE501DD
+S2190249D920A0E3003090E51221E0E180109FE5023003E000302D
+S2190249EE80E5003091E5023003E0003081E500A81BE9000052F9
+S219024A03E30B00000A1F1000E254009FE50120A0E3003090E56D
+S219024A181221A0E148109FE5023083E1003080E5003091E5021F
+S219024A2D30C3E1003081E500A81BE91F1000E228009FE5012079
+S219024A42A0E3003090E51221A0E114109FE5023083E10030808E
+S219024A57E5003091E50230C3E1003081E500A81BE910000490FC
+S219024A6C140004900DC0A0E100D82DE904B04CE21CC09FE50008
+S219024A81309CE50030C3E1010000E0003083E100308CE5122448
+S219024A96A0E3003082E500A81BE9600100000DC0A0E100D82D8A
+S219024AABE92C209FE5003092E528109FE5FF3F83E3003082E598
+S219024AC0003091E504B04CE2FF3F83E3003081E5102042E2FFC5
+S219024AD53FA0E3003082E500A81BE91C000490040004900DC0AB
+S219024AEAA0E110D82DE90D40A0E110D09FE504B04CE20FE0A08E
+S219024AFFE100F0A0E104D0A0E110A81BE9FCFFFF010DC0A0E1EF
+S219024B1430D82DE9A4209FE5A4309FE504B04CE2001092E5005E
+S219024B2940A0E1005093E5000051E30600001A0130A0E30030AF
+S219024B3E82E53500A0E30120A0E11F0A00EB3500A0E3180A00AC
+S219024B53EB0E33A0E3083084E5022CA0E30C2084E53E3383E2DA
+S219024B68103084E50123A0E3142084E5033383E2183084E51CDC
+S219024B7D2084E53530A0E3203084E5010515E30900001A34306D
+S219024B929FE5002093E5010012E30200000A0430A0E30430847A
+S219024BA7E530A81BE90130A0E3043084E530A81BE90030A0E351
+S219024BBC043084E530A81BE9C036030000000490600100000D69
+S219024BD1C0A0E100D82DE924309FE5002093E504B04CE2010541
+S219024BE612E30200001A0130A0E3043080E500A81BE90030A0D9
+S219024BFBE3043080E500A81BE9000004900DC0A0E100D82DE9A6
+S219024C10803260E0030180E0000180E014209FE50002A0E1484E
+S219024C253092E504B04CE20FE0A0E103F0A0E100A81BE950000A
+S219024C3A00000DC0A0E170D82DE9040051E304B04CE24CD04D2F
+S219024C4FE20040A0E12900001A045094E5010055E32600001A1D
+S219024C648300A0E38110A0E37FFFFFEB1E00A0E3E3FFFFEB83C2
+S219024C7900A0E30310A0E30230A0E3043084E50060A0E377FF5B
+S219024C8EFFEB0500A0E1DBFFFFEB8300A0E30330A0E304308462
+S219024CA3E50510A0E170FFFFEB0500A0E3D4FFFFEB020000EAF0
+S219024CB80A00A0E3D1FFFFEB016086E2090056E30C0000CA04B4
+S219024CCD00A0E12010A0E30030A0E360300BE560204BE2002097
+S219024CE28DE55C304BE258204BE2721D00EB000050E3EFFFFF4C
+S219024CF70A0430A0E3043084E570A81BE90DC0A0E100D82DE9EB
+S219024D0C3500A0E304B04CE2A70900EB00A81BE90DC0A0E1F06C
+S219024D21D82DE9E8209FE5E8109FE5022061E004B04CE2E070EB
+S219024D369FE55CD04DE2004097E50400A0E13B0D00EB0E02A05E
+S219024D4BE3021A80E2202090E4000031E1FCFFFF1A0000A0E38E
+S219024D60160F07EE9A0F07EE101F11EE011AC1E3101F01EE0074
+S219024D7510A0E3151F07EE0000A0E10000A0E10000A0E10000E3
+S219024D8AA0E10000A0E10000A0E150504BE20500A0E10FE0A0A8
+S219024D9FE104F0A0E1101F11EE011A81E3031081E3101F01EE60
+S219024DB40560A0E140404BE20400A0E158109FE50320A0E32316
+S219024DC90F00EB000050E31400000A48009FE5C30E00EB343097
+S219024DDEA0E324308DE504E0A0E10F00BEE80DC0A0E10F00AC4D
+S219024DF3E80F00BEE80F00ACE800309EE500308CE50F0096E883
+S219024E08FF0C00EB0800A0E3150000EA2CE0020064DF0200902B
+S219024E1DF70300A4240300A82403000532A0E3143087E530C08B
+S219024E32D5E52F10D5E52EE0D5E52D20D5E50C1481E18134A00B
+S219024E47E10E2482E1012082E2083087E50114A0E10C2087E582
+S219024E5C910203E08330A0E1053283E2183087E5F0A81BE90D97
+S219024E71C0A0E110D82DE954309FE504B04CE20040A0E1033008
+S219024E8604E0000053E30E00000A40009FE50410A0E1930E00E4
+S219024E9BEB38309FE5033004E0000053E30100000A0400A0E345
+S219024EB010A81BE924009FE5000004E0000050E30200A01308AE
+S219024EC500A00310A81BE90300A0E110A81BE97E007E00C8244A
+S219024EDA030010001000200020000DC0A0E100D82DE934309F1A
+S219024EEFE50020A0E3030050E104B04CE20100008A030051E149
+S219024F040400008A1C309FE5030050E10200008A030051E1003E
+S219024F1900009A0120A0E30200A0E100A81BE944000200781140
+S219024F2E03000DC0A0E100D82DE90C309FE50F0000E20000D3A4
+S219024F43E704B04CE200A81BE9D42403000DC0A0E100D82DE9A6
+S219024F5820209FE5000092E504B04CE2000050E3010000CA32F0
+S219024F6D0600EB00A81BE90030E0E3003082E500A81BE9DC3643
+S219024F8203000DC0A0E100D82DE9FF0000E2613040E2050053E8
+S219024F97E30010A0E104B04CE20100008A570040E200A81BE9F8
+S219024FAC302040E2FF3002E2090053E30100008A0200A0E10017
+S219024FC1A81BE9413040E2050053E30100009A0000E0E300A854
+S219024FD61BE9370041E200A81BE90DC0A0E110D82DE90030A099
+S219024FEBE304B04CE214D04DE214304BE524404BE21C000BE5C1
+S219025000D2FFFFEBFF0000E20410A0E1020000EB010050E3F949
+S219025015FFFF1A10A81BE90DC0A0E170D82DE90140A0E11050DD
+S21902502AD4E504B04CE2000055E30800001A240050E3280000F6
+S21902503F1A0130A0E31030C4E50C5084E5005084E5023043E2C9
+S219025054043084E5210000EA010055E31700001A230050E306D2
+S21902506900001A080094E50C1094E50030A0E30130C0E702204E
+S21902507EA0E31020C4E5160000EA0C1094E5020B51E3030000E1
+S2190250931A0030A0E31030C4E50000E0E370A81BE9003094E5C3
+S2190250A8082094E5003083E0003084E50100C2E7013081E20CD5
+S2190250BD3084E5070000EA020055E30700001AFF0000E2ABFF67
+S2190250D2FFEB0002A0E1040084E50330A0E31030C4E50000A0A9
+S2190250E7E370A81BE9030055E32300001AFF0000E2A1FFFFEBCB
+S2190250FC043094E50020D4E5003083E1043084E5030052E102A9
+S21902511100000A2D00A0E3BA0500EBDCFFFFEA2B00A0E3B705F0
+S21902512600EB082094E50230D2E53A0053E31000001A0000D28C
+S21902513BE50C6094E5B00500EB083094E50100D3E5AD0500EBE7
+S2190251500500A0E1060050E10700008A0210E0E3083094E5006F
+S21902516520D3E7033080E0010080E20120C3E7060050E1F8FF65
+S21902517AFF9A0100A0E370A81BE90000E0E30030A0E31030C466
+S21902518FE570A81BE90DC0A0E1F0D92DE904B04CE20070A0E103
+S2190251A468809FE52400A0E3950500EB0050A0E30540D7E7057C
+S2190251B960A0E1050054E10700000A0400A0E18E0500EB01604A
+S2190251CE86E2043085E00640D7E7FF5003E2000054E3F7FFFF60
+S2190251E31A2300A0E3860500EB2502D8E7840500EB0F3005E2FA
+S2190251F80300D8E7810500EB52FFFFEB7F0000E22B0050E3E589
+S21902520DFFFF1AF0A91BE9D42403000DC0A0E1F0DF2DE9900012
+S2190252229FE50020A0E38C309FE504D04DE2002083E504B04C7E
+S219025237E2001090E503A0A0E1020051E14B0000DA0090A0E166
+S21902524C6C809FE56C309FE5002093E5000052E31900000A00C6
+S2190252613090E554109FE5030053E30300009A003098E503001E
+S21902527613E30440A0030800000A30209FE5003092E50140A0D1
+S21902528BE3040053E10300009A003091E5010013E30140A013BE
+S2190252A00240A0032C004BE2001091E50420A0E1DB0700EB07B5
+S2190252B50000EAC8650300E0360300CC650300D465030000300A
+S2190252CA98E50020D3E50140A0E32C204BE500309AE500005331
+S2190252DFE32400001A03C0A0E104005CE1150000AA2C604BE295
+S2190252F470E09FE50A70A0E16C509FE50600DCE700109EE52013
+S21902530932D5E70130C1E4002097E500108EE5000052E315005B
+S21902531E001A0F3000E20320D5E70120C1E400309AE500108E46
+S219025333E5000053E30E00001A01C08CE204005CE1EDFFFFBA06
+S219025348002099E50900A0E1003098E5022064E0002089E5047C
+S21902535D3083E0003088E5000052E3010000EAD0650300D424B4
+S2190253720300B5FFFFCAF0AF1BE90DC0A0E170D82DE904B04C50
+S219025387E268C09FE500108CE564109FE5000081E560009FE5B9
+S21902539C002080E55C209FE5000053E3003082E50C60A0E10AAC
+S2190253B100000A4C409FE50050A0E3005084E5003094E593FFFF
+S2190253C6FFEB002094E5003094E5050053E10200000A0500A0B5
+S2190253DBE170A81BE98CFFFFEB002096E50030A0E30030C2E51F
+S2190253F0000096E570A81BE9D0650300CC650300C8650300D49A
+S219025405650300E03603000DC0A0E1F0DF2DE924019FE52421E9
+S21902541A9FE504D04DE20070A0E3007082E504B04CE200309083
+S21902542FE50290A0E1070053E15A0000DA04319FE5002093E5A9
+S2190254440010D2E503A0A0E1070051E15400000AF0809FE5F0E6
+S219025459109FE5003091E5000053E31000000A003090E5030005
+S21902546E53E30300009A003098E5030013E30450A0030A0000A8
+S2190254830AB4209FE5003092E50150A0E3050053E10500009A58
+S219025498003098E5010013E30150A0130250A003000000EA0170
+S2190254AD50A0E30040A0E3050054E1170000AA84609FE50030BA
+S2190254C296E50100D3E4003086E5ACFEFFEB0002A0E100309920
+S2190254D7E5FF7000E2000053E33000001A00309AE50100D3E49C
+S2190254EC00308AE5A3FEFFEB000087E1003099E5FF7000E20013
+S2190255010053E32700001A2C304BE20370C4E7014084E20500C4
+S21902551654E1E8FFFFBA2C109FE5003091E5000053E3090000FF
+S21902552B0A2C004BE2001098E50520A0E1470700EB060000EAA5
+S219025540C8650300E0360300CC650300D0650300D4650300005E
+S2190255553098E50070C3E5003099E5000053E30F00001A303008
+S21902556A9FE5002093E50300A0E1003098E5022065E0002080D1
+S21902557FE5053083E0003088E5000052E3050000DA00309AE533
+S2190255940020D3E5000052E3000000EAC8650300ABFFFF1AF021
+S2190255A9AF1BE90DC0A0E170D82DE904B04CE25CC09FE5000005
+S2190255BE8CE558009FE5001080E554109FE5002081E550209F92
+S2190255D3E5000053E3003082E50060A0E10A00000A40409FE511
+S2190255E80050A0E3005084E5003094E584FFFFEB002094E5006C
+S2190255FD3094E5050053E10200000A0500A0E170A81BE97DFF86
+S219025612FFEB000096E570A81BE9CC650300D0650300C865035F
+S21902562700D4650300E03603000DC0A0E100D82DE904B04CE2F4
+S21902563CD80500EB08209FE50130A0E3003082E500A81BE9C423
+S2190256513603000DC0A0E170D82DE904B04CE20060A0E3015042
+S219025666A0E1006085E50040A0E1060000EA003095E50160869B
+S21902567BE2002094E5033280E1003085E5012082E2002084E55A
+S219025690002094E50030D2E5000053E30300000A0300A0E13681
+S2190256A5FEFFEB000050E3F0FFFFAA0600A0E170A81BE90DC0C6
+S2190256BAA0E170D82DE904B04CE202E0A0E10060A0E30040513C
+S2190256CFE20400001A3030A0E30130C0E40030C0E50200A0E3AD
+S2190256E470A81BE907308EE2000053E3073083B2C3E1B0E113FD
+S2190256F900000A50509FE501104EE28131A0E134C3B0E100204B
+S21902570EA0030120A01301005EE30030A0130130A0030320925A
+S219025723E10600000AFFC00CE22C32D5E70130C0E40F200CE2C0
+S2190257380230D5E7026086E20130C0E400E051E2ECFFFF1A06AB
+S21902574D00A0E170A81BE9D42403000DC0A0E100D82DE904B0B8
+S2190257624CE200A81BE90DC0A0E100D82DE904B04CE200A81B70
+S219025777E90DC0A0E170D82DE9F0209FE5003092E504B04CE264
+S21902578C000053E30200000A003092E50FE0A0E103F0A0E1DA5A
+S2190257A12200EB000050E30A00000A752500EB000050E30700D9
+S2190257B6001ABC209FE5003092E5000053E32A00000A0030928A
+S2190257CBE50FE0A0E103F0A0E170A81BE9A0209FE5003092E5F2
+S2190257E0000053E30300000A0030A0E3003082E50250A0E30249
+S2190257F50000EABC2200EBA92200EB0050A0E1D12400EB00007E
+S21902580A50E30000000AD92400EBC92400EBD2FFFFEBAB2400FB
+S21902581FEB0300A0E3220600EB0300A0E3F00500EB44609FE55B
+S219025834000055E30600000A40409FE5003094E50500A0E10FCE
+S219025849E0A0E103F0A0E1000050E3F9FFFF1AB42400EB003037
+S21902585E96E5000053E30200000A003096E50FE0A0E103F0A0C3
+S219025873E170A81BE9D8360300D436030078F70300C83603008B
+S2190258880DC0A0E1F0DD2DE904B04CE224D04DE20050A0E100FD
+S21902589D40A0E348604BE2F4A09FE500309AE50180A0E300008C
+S2190258B253E30500000A0400A0E10610A0E10FE0A0E103F0A076
+S2190258C7E10080A0E1020000EA0400A0E1BB0300EB48000BE591
+S2190258DC0600A0E1103044E2070053E303E0A0E1017084E2113A
+S2190258F100008A0840A0E30020A0E302C0A0E144004BE20010DF
+S219025906A0E1043082E2012082E203C0C1E7040052E1FAFFFF4D
+S21902591BBA0010A0E106C0A0E10320A0E30130DCE4012042E202
+S2190259300130C1E4010072E3FAFFFF1A000058E30700000A05CC
+S21902594510A0E107005EE30C20A0930420A0830030A0E387FE8F
+S21902595AFFEB0050A0E1100000EA0520A0E107005EE31730A0A7
+S21902596F930730A083010073E37810A0E30300000A013043E26A
+S2190259840110C2E4010073E3FBFFFF1A07005EE30200009A08FA
+S2190259995085E2010000EA98F60300185085E20740A0E119000F
+S2190259AE54E3BCFFFFDAF0AD1BE90DC0A0E1F0D92DE904B04C44
+S2190259C3E20CD04DE20040A0E31A70A0E30130D0E40180A0E124
+S2190259D824000BE5500053E31700001A24004BE228104BE2181A
+S2190259EDFFFFEB040050E10800000A24201BE50130D2E4FF3014
+S219025A0203E224200BE53D0053E30200001A28401BE501708483
+S219025A17E2090000EA74209FE50030D2E50810A0E1000053E3D0
+S219025A2C2900000A0130C1E40130F2E5000053E3FBFFFF1A24E0
+S219025A410000EA0450A0E1070055E1180000AA0060A0E32C106C
+S219025A564BE2104045E2070054E32C600BE50C20A0930420A0B3
+S219025A6B8324001BE50630A0E1CCFEFFEB2C101BE50500A0E14B
+S219025A80580300EB070054E30300009A24301BE5083083E202F6
+S219025A950000EAE824030024301BE5183083E2015085E22430EF
+S219025AAA0BE5070055E1E7FFFFBA28209FE50030D2E50810A0A9
+S219025ABFE1000053E30300000A0130C1E40130F2E5000053E393
+S219025AD4FBFFFF1A0030A0E30030C1E5000000EAEC240300F02D
+S219025AE9A91BE90DC0A0E1F0D82DE974239FE504B04CE2C0D03B
+S219025AFE4DE20040A0E10060A0E30030D4E50270A0E10060C2BB
+S219025B13E53F3043E2340053E303F19F97F60100EAF85B020033
+S219025B2800630200585C0200D0610200806002000063020000CC
+S219025B3D63020000630200A85D0200106302000063020000633E
+S219025B5202000063020000630200885E020000630200006302B9
+S219025B6700A85D0200405C0200006302008060020010630200C1
+S219025B7C006302000063020000630200845E0200006302000095
+S219025B916302000063020000630200006302000063020000639C
+S219025BA6020000630200006302007862020080600200006302F4
+S219025BBB0000630200006302004C5C0200006302000063020090
+S219025BD000630200AC61020000630200B85D0200006302000064
+S219025BE563020000630200345C0200C861020080600200BC215E
+S219025BFA00EBA92100EB5330A0E30030C7E50020A0E30320C780
+S219025C0FE55C129FE54032A0E10F3003E20320D1E70F0000E2BF
+S219025C240030D1E70120C7E50230C7E5B60100EA010084E28049
+S219025C390200EBB30100EA010084E2D40200EBB00100EA0700FA
+S219025C4EA0E10CFFFFEBAD0100EA0130D4E5000053E30A000002
+S219025C631AF30100EB08129FE50030D1E50720A0E1000053E3CA
+S219025C788E01000A0130C2E40130F1E5000053E3FBFFFF1A89C7
+S219025C8D0100EAA4604BE2A0504BE2013084E2A0300BE5050066
+S219025CA2A0E10610A0E169FEFFEB000050E32400000AA0201B41
+S219025CB7E50130D2E4FF3003E2A0200BE52C0053E31E00001AA7
+S219025CCC0500A0E1A8104BE25EFEFFEB000050E31900000AA015
+S219025CE1201BE50130D2E4FF3003E2A0200BE52C0053E3130067
+S219025CF6001AA4101BE5000051E30B00000AA8001BE5E20100F0
+S219025D0BEB001050E20300000AA0001BE5A4201BE50030A0E32B
+S219025D2021FEFFEBA4201BE5A0301BE5823083E0A0300BE5A055
+S219025D35201BE50030D2E52C0053E301308202D4FFFF0AA03088
+S219025D4A1BE50020D3E5000052E30900001A18119FE50030D15F
+S219025D5FE50720A0E1000053E35201000A0130C2E40130F1E52A
+S219025D74000053E3FBFFFF1A4D0100EAF4109FE50030D1E5071D
+S219025D8920A0E1000053E34801000A0130C2E40130F1E50000F6
+S219025D9E53E3FBFFFF1A430100EA0400A0E10710A0E100FFFF57
+S219025DB3EB550100EAAC504BE20500A0E1013084E2AC300BE597
+S219025DC8B0104BE220FEFFEB000050E31B00000AAC201BE501A5
+S219025DDD30D2E4FF3003E2AC200BE52C0053E31500001A05005E
+S219025DF2A0E1B4104BE215FEFFEB000050E31000000AB0001B0E
+S219025E07E50710A0E1B4201BE50130A0E358FDFFEB000050E308
+S219025E1C3B01001A58109FE50030D1E50720A0E1000053E32044
+S219025E3101000A0130C2E40130F1E5000053E3FBFFFF1A1B0107
+S219025E4600EA2C109FE50030D1E50720A0E1000053E3160100BB
+S219025E5B0A0130C2E40130F1E5000053E3FBFFFF1A110100EAFE
+S219025E70C85D0300D4240300EC240300F0240300F424030001AD
+S219025E8560A0E3B8504BE20500A0E1013084E2B8300BE5BC1028
+S219025E9A4BE2ECFDFFEB000050E36B00000AB8201BE50130D269
+S219025EAFE4FF3003E2B8200BE52C0053E36500001A0500A0E1B0
+S219025EC4C0104BE2E1FDFFEB000050E36000000AB8001BE501A7
+S219025ED930D0E4FF3003E2B8000BE53A0053E35A00001A000029
+S219025EEE56E33E00000AC0301BE5000053E32400000A9C504B8C
+S219025F03E2C0301BE50040A0E3030054E11100002A0510A0E1E4
+S219025F18B8201BE50130D2E40430C1E7FF3003E2B8200BE57D79
+S219025F2D0053E30300001A0130D2E4203083E30430C5E7B820B0
+S219025F420BE5014084E27F0054E30200008AC0301BE503005423
+S219025F57E1EEFFFF3A0500A0E1BC101BE50420A0E1BB0400EB86
+S219025F6C040050E10700001AC0201BE5BC301BE5022064E0C0D1
+S219025F81200BE5043083E0BC300BE5000052E3DBFFFF1AC03069
+S219025F961BE5000053E30900001A30139FE50030D1E50720A022
+S219025FABE1000053E3C000000A0130C2E40130F1E5000053E3E5
+S219025FC0FBFFFF1ABB0000EA0C139FE50030D1E50720A0E100DC
+S219025FD50053E3B600000A0130C2E40130F1E5000053E3FBFFAC
+S219025FEAFF1AB10000EABC101BE5C0201BE50130A0E36AFDFF21
+S219025FFFEB000050E30900000AC8129FE50030D1E50720A0E169
+S219026014000053E3A600000A0130C2E40130F1E5000053E3FB7B
+S219026029FFFF1AA10000EAA4129FE50030D1E50720A0E10000F0
+S21902603E53E39C00000A0130C2E40130F1E5000053E3FBFFFF5D
+S2190260531A970000EA80129FE50030D1E50720A0E1000053E3BC
+S2190260689200000A0130C2E40130F1E5000053E3FBFFFF1A8DCC
+S21902607D0000EA013084E2C4300BE5C4504BE20020D4E5003058
+S219026092A0E3C8300BE5530052E3430052130700001A0500A091
+S2190260A7E1C8104BE268FDFFEBC4201BE50030D2E53B0053E36C
+S2190260BC01308202C4300B050500A0E1CC104BE260FDFFEB0039
+S2190260D10050E30100000ACC001BE5962000EB0300A0E3F2038D
+S2190260E600EB0300A0E3C00300EBC8001BE5000050E30800007C
+S2190260FB0AE0219FE5003092E5000053E30400000A003092E568
+S2190261100FE0A0E103F0A0E1000050E3C8000B05C8501BE5006C
+S2190261250055E30300000A0900A0E3C8000BE5AA0000EB7600CA
+S21902613A00EA082300EB000050E30400000A6330A0E30030C4FE
+S21902614FE590219FE5623043E2003082E50030D4E5530053E35A
+S219026164730053130600001A0500A0E178FDFFEB70219FE570BC
+S219026179319FE5003082E51C2200EB010000EA0100A0E371FDB8
+S21902618EFFEB0300A0E3C60300EB0300A0E3940300EBB1010017
+S2190261A3EB0000E0E35B0000EAAE0100EB3C319FE5002093E5CA
+S2190261B80FE0A0E102F0A0E10100A0E3540000EA3F0300EB4FAA
+S2190261CD0000EAD0004BE2013084E2D0300BE5D4104BE21BFD1F
+S2190261E2FFEB000050E31800000AD0201BE50130D2E4FF300359
+S2190261F7E2D0200BE52C0053E31200001A0130D2E4D0200BE575
+S21902620C430053E30200001AD4001BE5750400EB010000EAD4EA
+S219026221001BE56D0400EBA8109FE50030D1E50720A0E100003B
+S21902623653E31E00000A0130C2E40130F1E5000053E3FBFFFFE1
+S21902624B1A190000EAA0109FE50030D1E50720A0E1000053E322
+S2190262601400000A0130C2E40130F1E5000053E3FBFFFF1A0FCE
+S2190262750000EAD8004BE2013084E2D8300BE5DC104BE2F1FC89
+S21902628AFFEB000050E30B00001A60109FE50030D1E50720A015
+S21902629FE1000053E30300000A0130C2E40130F1E5000053E3AB
+S2190262B4FBFFFF1A0030A0E30030C2E5120000EA0C009FE5B1F4
+S2190262C9FBFFEBDC001BE5710100EB0D0000EAEC240300F42479
+S2190262DE0300F8240300D036030050390300EC360300A0F6032F
+S2190262F300CC360300F0240300FC2403000400A0E10710A0E133
+S2190263084B2FA0E3E70300EB0700A0E19EFBFFEB0000A0E3F029
+S21902631DA81BE90DC0A0E110D82DE914409FE504B04CE204109E
+S219026332A0E1EF0200EB0400A0E194FBFFEB10A81BE9C85D0310
+S219026347000DC0A0E110D82DE938309FE5002093E504B04CE288
+S21902635C000052E3000000AAEDFFFFEB24409FE50400A0E11AE9
+S219026371FBFFEB0400A0E1DBFDFFEB000050E3F9FFFF0A0000B0
+S219026386A0B30100A0A310A81BE9DC360300C85503000DC0A006
+S21902639BE100D82DE904B04CE200A81BE90DC0A0E100D82DE94D
+S2190263B004B04CE29DFCFFEB910200EB2B00A0E3100100EB0044
+S2190263C5A81BE90DC0A0E100D82DE908309FE504B04CE2000036
+S2190263DA83E500A81BE9DC3603000DC0A0E100D82DE93C109F57
+S2190263EFE55830A0E30030C1E50020A0E30320C1E504B04CE27E
+S21902640428C09FE54032A0E10F3003E20320DCE70F0000E20022
+S21902641930DCE70120C1E50230C1E50100A0E159FBFFEB00A86D
+S21902642E1BE9C85D0300D42403000DC0A0E100D82DE938209FF8
+S219026443E538109FE50030E0E3003082E530309FE50020A0E37B
+S219026458002081E5002083E524109FE524309FE5003081E504F0
+S21902646DB04CE21C209FE50130A0E3003082E500A81BE92C66EC
+S219026482030028660300D8650300B066030030660300E436035B
+S219026497000DC0A0E130D82DE99C309FE504B04CE20040A0E18A
+S2190264AC002093E50150A0E1000052E30000001ADDFFFFEB1243
+S2190264C10054E3070000CA78309FE578109FE5002093E503C024
+S2190264D6A0E1022061E0052082E0800052E30100009A0000A04F
+S2190264EBE330A81BE958E09FE500309EE5030054E10B00000A1A
+S2190265004C009FE5003090E548109FE5030054E1030000BA0138
+S2190265152084E20030A0E3023181E7002080E500408EE500302E
+S21902652A9CE5043181E700309CE50300A0E1053083E000308CAE
+S21902653FE530A81BE9E4360300B0660300306603002C6603001B
+S21902655428660300D86503000DC0A0E1F0DD2DE904B04CE20443
+S219026569D04DE20060A0E174009FE50150A0E1001090E50240A5
+S21902657EA0E168A09FE5000051E31300001A0130A0E30030802F
+S219026593E558709FE558809FE50130A0E1031CA0E10800A0E382
+S2190265A803E1A0E101C083E28120A0E1073022E0000051E303BA
+S2190265BD20A0B10210A0E1010050E2F8FFFF1A0C30A0E10E2090
+S2190265D288E7FF0053E3F0FFFF9A14709FE50030A0E300308A0C
+S2190265E7E5080000EAE8360300E0360300B71DC104B4660300D1
+S2190265FC25305BE5243C23E0032197E7016086E2044422E001D5
+S2190266115045E2010075E30600000A25004BE20610A0E1012083
+S219026626A0E3FD0200EB00309AE5000053E3F0FFFF0A0400A06A
+S21902663BE1F0AD1BE90DC0A0E170D82DE928319FE504B04CE256
+S2190266500CD04DE21C000BE50020A0E30020C3E500C0A0E1006B
+S21902666520DCE50350A0E1430052E33700001A0130DCE5520057
+S21902667A53E33400001A0260DCE5430056E33100001A0330DC87
+S21902668FE53A0053E32E00001A1C404BE20400A0E104308CE2A2
+S2190266A41C300BE520104BE2E8FBFFEB000050E33700000A1CE4
+S2190266B9201BE50130D2E4FF3003E21C200BE52C0053E33100EB
+S2190266CE001A0400A0E124104BE2DDFBFFEB000050E32C00008F
+S2190266E30A20001BE524101BE50020E0E399FFFFEB80309FE5A4
+S2190266F8004093E50010A0E1000054E30B00000A70209FE500DD
+S21902670D30D2E50510A0E1000053E30300000A0130C1E40130A9
+S219026722F2E5000053E3FBFFFF1A0030A0E30030C1E51700009B
+S219026737EA010085E22020A0E3DCFBFFEB0060C5E5010080E203
+S21902674C0040C5E7100000EA1C301BE50020D3E50300A0E14C57
+S2190267610052E30210A0E10A00000A040000CA430052E30300F7
+S21902677600EAC85D0300E0360300F0240300500051E30200003F
+S21902678B0A0510A0E14B2FA0E3BB0200EB70A81BE90DC0A0E143
+S2190267A000D82DE90030D0E504B04CE2700053E30200000A086E
+S2190267B5109FE54B2FA0E3B60200EB00A81BE9C85D03000DC0F3
+S2190267CAA0E100D82DE90C309FE5002093E504B04CE200019277
+S2190267DFE700A81BE9EC3603000DC0A0E100D82DE90C309FE5EA
+S2190267F4002093E504B04CE2001182E700A81BE9EC3603000DB7
+S219026809C0A0E100D82DE920309FE5182093E50010A0E100002F
+S21902681E92E5FF1001E20C3092E504B04CE20FE0A0E103F0A05D
+S219026833E100A81BE9500000000DC0A0E100D82DE91C309FE560
+S219026848182093E5000092E5103092E504B04CE20FE0A0E10301
+S21902685DF0A0E1FF0000E200A81BE9500000000DC0A0E100D8AB
+S2190268722DE91C309FE5182093E5000092E50810A0E31430928C
+S219026887E504B04CE20FE0A0E103F0A0E100A81BE9500000004E
+S21902689C0DC0A0E100D82DE924309FE504B04CE218C093E5009A
+S2190268B1109CE50020A0E10100A0E114309CE50010A0E30FE0D0
+S2190268C6A0E103F0A0E100A81BE9500000000DC0A0E100D82D72
+S2190268DBE9000050E304B04CE20F00000A70209FE5003092E5CF
+S2190268F0013043E2003082E5000053E3160000CA0030A0E300D6
+S2190269053082E554209FE5183092E5000093E5142093E50510EF
+S21902691AA0E30FE0A0E102F0A0E100A81BE930209FE5003092B9
+S21902692FE5013083E2003082E5010053E30600001A1C309FE513
+S219026944182093E5000092E5143092E50410A0E30FE0A0E1034B
+S219026959F0A0E100A81BE9F0360300500000000DC0A0E100D866
+S21902696E2DE91C309FE5182093E5000092E5103092E504B04C49
+S219026983E20FE0A0E103F0A0E1FF0000E200A81BE95000000055
+S2190269980DC0A0E1F0DF2DE9FF1001E20D0051E304B04CE20497
+S2190269ADD04DE27300000A70319FE570219FE5000093E5001090
+S2190269C2C2E7010080E2000083E50A0051E30100000A64005048
+S2190269D7E36900001A50519FE5186095E500900FE100400FE177
+S2190269ECC04084E304F029E13C019FE56E2000EB000096E50C69
+S219026A013096E52410A0E30FE0A0E103F0A0E1000096E54F80E9
+S219026A16A0E30C3096E50810A0E10FE0A0E103F0A0E1FC309FE2
+S219026A2BE5002093E50070A0E3020057E1180000AAF8A09FE5C7
+S219026A40E8209FE50730D2E72342DAE7000096E50F3003E203F6
+S219026A5550DAE70C3096E50410A0E10FE0A0E103F0A0E10000E4
+S219026A6A96E5017087E20C3096E50510A0E10FE0A0E103F0A06B
+S219026A7FE1044088E0FF8004E29C209FE5055088E0003092E565
+S219026A94FF8005E2030057E1E7FFFFBA000096E50C3096E52351
+S219026AA910A0E30FE0A0E103F0A0E180309FE5000096E5281271
+S219026ABED3E70C2096E50FE0A0E102F0A0E168209FE5000096D6
+S219026AD3E50F3008E20310D2E70C3096E50FE0A0E103F0A0E132
+S219026AE8000096E5103096E50FE0A0E103F0A0E129004BE529F6
+S219026AFD305BE52B0053E31000000A29004BE20110A0E3650340
+S219026B1200EB000050E30800001A29305BE52D0053E3EFFFFF3E
+S219026B271AB3FFFFEAF4360300B46A030050000000846B02000E
+S219026B3C0025030030209FE50130A0E3443082E528209FE500E6
+S219026B5130A0E3003082E520009FE5362000EB00300FE1C040D9
+S219026B6609E2C030C3E3043083E103F029E1020000EA500000C1
+S219026B7B00F4360300846B0200F0AF1BE90DC0A0E170D82DE991
+S219026B9004B04CE20160A0E10240A0E10430A0E1014044E20046
+S219026BA50053E30050A0E10600000A0110D6E40500A0E176FFF7
+S219026BBAFFEB0430A0E1014044E2000053E3F8FFFF1A70A81B40
+S219026BCFE90DC0A0E170D82DE904B04CE20160A0E10240A0E18E
+S219026BE40430A0E1014044E2000053E30050A0E10600000A055D
+S219026BF900A0E159FFFFEB0430A0E1014044E20100C6E40000F6
+S219026C0E53E3F8FFFF1A70A81BE90DC0A0E10E002DE900D82D91
+S219026C23E90000A0E310B04CE200A81BE90DC0A0E170D82DE9A3
+S219026C380000A0E304B04CE223FFFFEBB4C09FE5B4509FE5B49B
+S219026C4DE09FE5B4609FE50020A0E3B0109FE50C40A0E100007B
+S219026C6291E5023190E702318CE7012082E20A0052E3FAFFFF94
+S219026C77DA001091E52C3091E52C308CE5402091E530208CE56B
+S219026C8C303091E534308CE5342091E538208CE5383091E53C94
+S219026CA1308CE50000A0E33C3091E51C208CE20C10A0E16430F6
+S219026CB68CE5400082E5042042E2010052E1FBFFFFAA00309EBD
+S219026CCBE5004085E5000053E30400000A0030A0E300308EE584
+S219026CE00F00A0E3B7FEFFEBD31F00EB0F00A0E3B4FEFFEBD08C
+S219026CF51F00EB000086E570A81BE9A0F60300EC3603005039AB
+S219026D0A030078F7030008F703000DC0A0E100D82DE904B04CBA
+S219026D1FE260109FE50000A0E301E0A0E158C09FE500209EE55E
+S219026D3400319CE7003182E7010080E20A0050E3F9FFFFDA0084
+S219026D491091E52C309CE52C3081E530209CE5402081E534300E
+S219026D5E9CE5303081E538209CE5342081E53C309CE538308169
+S219026D73E564209CE53C2081E50100A0E3D3FEFFEB00A81BE96D
+S219026D8808F70300A0F603000DC0A0E100D82DE90000A0E30491
+S219026D9DB04CE200A81BE90DC0A0E100D82DE930209FE53030E0
+S219026DB29FE530109FE5003082E52C309FE52C209FE500308185
+S219026DC7E528309FE528109FE5003082E524309FE504B04CE2E2
+S219026DDC003081E500A81BE9D0360300906D0200CC360300CC80
+S219026DF16E0200D8360300306C0200D4360300146D02000DC00A
+S219026E06A0E170D82DE99C209FE5006092E504B04CE200005642
+S219026E1BE32200001A0130A0E3003082E584509FE5F62000EB98
+S219026E30343095E50000E0E30FE0A0E103F0A0E10040A0E134CC
+S219026E453095E50200E0E30FE0A0E103F0A0E1141095E55830B8
+S219026E5A9FE558209FE5043081E554309FE5082081E50C3081AF
+S219026E6FE54C209FE54C309FE5102081E5143081E5020074E399
+S219026E84000054130300000A343095E50400A0E10FE0A0E103A8
+S219026E99F0A0E1303095E50600A0E10FE0A0E103F0A0E170A80F
+S219026EAE1BE9F836030050000000886B0200D06B02009869020E
+S219026EC30068690200186C02000DC0A0E100D82DE918309FE552
+S219026ED8403093E504B04CE2000053E30100000A0FE0A0E10320
+S219026EEDF0A0E100A81BE9500000000DC0A0E1F0D92DE954306B
+S219026F02A0E304B04CE208D04DE20160A0E10680A0E10050A02E
+S219026F17E328500BE50040A0E10130C8E44402A0E100F8FFEBCC
+S219026F2C0100C6E5018088E20400A0E1FCF7FFEB0100C8E4059E
+S219026F4100A0E1F9F7FFEB0100C8E40F00A0E3F6F7FFEB0100C2
+S219026F56C8E43A70A0E30170C8E40F00A0E317FEFFEB0810A0E0
+S219026F6BE10420A0E30530A0E124000BE524604BE20600A0E180
+S219026F80FDF8FFEB0080A0E128004BE20810A0E10520A0E1057C
+S219026F9530A0E1F7F8FFEB0080A0E13B40A0E30140C8E4050065
+S219026FAAA0E1DFF7FFEB0100C8E40D00A0E3DCF7FFEB0100C8C7
+S219026FBFE40170C8E40D00A0E3FEFDFFEB0810A0E10420A0E300
+S219026FD424000BE50530A0E10600A0E1E5F8FFEB0080A0E10187
+S219026FE940C8E40050C8E5F0A91BE90DC0A0E100D82DE904B016
+S219026FFE4CE2030050E300F19F97250000EAA47002001C700239
+S219027013003070020060700200101F11EE011A81E3031081E3C9
+S219027028101F01EE1C0000EA101F11EE011AC1E3101F01EE001D
+S21902703D10A0E3151F07EE0000A0E10000A0E10000A0E10000F8
+S219027052A0E10000A0E10000A0E1100000EA0E02A0E3021A8076
+S219027067E2202090E4000031E1FCFFFF1A0000A0E3160F07EEB4
+S21902707C9A0F07EE0010A0E3151F07EE151F08EE0000A0E100F3
+S21902709100A0E10000A0E10000A0E10000A0E10000A0E1100F3F
+S2190270A611EE2006A0E1010000E200A81BE90DC0A0E100D82D46
+S2190270BBE904B04CE2030050E300F19F97150000EA24710200FB
+S2190270D0DC700200EC70020004710200101F11EE0F1081E310C0
+S2190270E51F01EE0D0000EA101F11EE0C10C1E3101F01EE00106E
+S2190270FAA0E3161F07EE070000EA0E02A0E3021A80E2202090FB
+S21902710FE4000031E1FCFFFF1A0000A0E3160F07EE9A0F07EE1F
+S219027124100F11EE2001A0E1010000E200A81BE90DC0A0E17042
+S219027139D82DE9D0209FE5D0409FE504B04CE2CCC09FE5013021
+S21902714EA0E300308CE5C4309FE50260A0E1003082E50C50A013
+S219027163E1003094E504C0A0E1000053E32200000A04E0A0E17A
+S21902717800309EE5030053E30900009A030011E30700001A0351
+S21902718D0010E30500001A043090E4043081E400209EE50420CC
+S2190271A242E200208EE5110000EA00309CE5010053E30900002E
+S2190271B79A010011E30700001A010010E30500001AB230D0E067
+S2190271CCB230C1E000309CE5023043E200308CE5040000EA018C
+S2190271E120D0E40120C1E400309EE5013043E200308EE500301C
+S2190271F694E5000053E3DDFFFF1A0030A0E3003085E50030A0BC
+S21902720BE3003086E570A81BE9FC360300186B0300E0360300F9
+S219027220087202000DC0A0E130D82DE90030A0E10100A0E10334
+S21902723510A0E118409FE50250A0E1005084E504B04CE2B9FFAA
+S21902724AFFEB000094E5050060E030A81BE9186B03000DC0A0B1
+S21902725FE130D82DE918409FE50250A0E1005084E504B04CE2CA
+S219027274AEFFFFEB000094E5050060E030A81BE9186B03000D3A
+S219027289C0A0E100D82DE90000A0E304B04CE200A81BE90DC0DC
+S21902729EA0E100D82DE90000A0E304B04CE200A81BE90DC0A0E7
+S2190272B3E100D82DE90000A0E304B04CE200A81BE90DC0A0E191
+S2190272C830D82DE904B04CE268C09FE500309CE5000053E31601
+S2190272DD00000A0C50A0E100000FE100400FE1C04084E304F033
+S2190272F229E100C095E514309CE5003085E518109CE50020A074
+S219027307E318208CE500300FE1C04000E2C030C3E3043083E1AE
+S21902731C03F029E100009CE510209CE50FE0A0E10CF09CE50039
+S2190273313095E5000053E3E9FFFF1A30A81BE91C6B03000DC02C
+S219027346A0E100D82DE904B04CE20C209FE5003092E5013083CF
+S21902735BE2003082E500A81BE97CF703000DC0A0E110D82DE92F
+S21902737004B04CE234409FE5003094E5010053E30000001ACE5F
+S219027385FFFFEB0030A0E3003084E51C309FE5002093E500004F
+S21902739A52E30200000A0130A0E3003084E5F2FFFFEA10A81B9C
+S2190273AFE97CF703001C6B03000DC0A0E100D82DE904B04CE2BB
+S2190273C45EF5FFEB00A81BE90DC0A0E100D82DE904B04CE26640
+S2190273D9F5FFEB00A81BE90DC0A0E100D82DE90100A0E304B099
+S2190273EE4CE200A81BE90DC0A0E100D82DE90100A0E304B04CE9
+S219027403E200A81BE90DC0A0E100D82DE904B04CE2E5F4FFEBFE
+S21902741800A81BE90DC0A0E110D82DE904B04CE200300FE1005E
+S21902742D400FE1C04084E304F029E108209FE50130A0E300301E
+S21902744282E5FEFFFFEA0000039010A81BE90DC0A0E100D82D3F
+S219027457E904B04CE2EEFFFFEB0000A0E300A81BE90DC0A0E1FA
+S21902746C00D82DE90000A0E304B04CE200A81BE90DC0A0E17047
+S219027481D82DE904B04CE20040A0E10000A0E30160A0E30010E7
+S219027496A0E1020074E30D00000A020000CA030074E30F0000B4
+S2190274AB0A100000EA010074E30E00001ABC309FE5003093E529
+S2190274C0000053E3016043E20B0000CA0360A0E10260E00308EE
+S2190274D50000EAA0309FE598209FE5180083E5004082E50300F7
+S2190274EA00EA0040A0E1000000EA014084E20110A0E300005165
+S2190274FFE31B00000A74509FE5183095E5000053E30400000A1B
+S219027514000093E5143093E50410A0E30FE0A0E103F0A0E15458
+S219027529309FE548209FE5843283E0183085E5004082E51830EC
+S21902753E95E5000050E30500000A000093E5143093E50510A08C
+S219027553E30FE0A0E103F0A0E1040000EA000093E5143093E533
+S2190275680410A0E30FE0A0E103F0A0E10600A0E170A81BE900E9
+S21902757D37030050000000206B03000DC0A0E100D82DE900108E
+S219027592A0E304B04CE201C0A0E3020070E30D00000A020000C6
+S2190275A7CA030070E30F00000A100000EA010070E30E00001A19
+S2190275BC64309FE5003093E5000053E301C043E20B0000CA03FF
+S2190275D1C0A0E102C0E003080000EA48309FE540209FE51410C2
+S2190275E683E5000082E5030000EA0100A0E1000000EA010080E0
+S2190275FBE20110A0E3000051E30500000A18309FE51C209FE52F
+S219027610000083E510309FE5802282E0142083E50C00A0E10005
+S219027625A81BE90437030050000000206B03000DC0A0E100D85B
+S21902763A2DE904B04CE200A81BE90DC0A0E100D82DE904B04C54
+S21902764FE200A81BE90DC0A0E100D82DE904B04CE2E91E00EB81
+S21902766400A81BE90DC0A0E110D82DE9FF1000E254309FE50415
+S219027679B04CE2142093E50340A0E1000052E30400000A000064
+S21902768E92E50C3092E50FE0A0E103F0A0E1040000EA18209418
+S2190276A3E5000092E50C3092E50FE0A0E103F0A0E1443094E5EB
+S2190276B8000053E30200000A0000A0E3440084E5860000EB10C3
+S2190276CDA81BE9500000000DC0A0E100D82DE930209FE518106D
+S2190276E292E5003092E504B04CE2130053E30600001A1430A03F
+S2190276F7E3003082E5000091E5143091E50510A0E30FE0A0E1C5
+S21902770C03F0A0E100A81BE9500000000DC0A0E110D82DE900A5
+S21902772130A0E350209FE504B04CE204D04DE214300BE518E094
+S21902773692E500309EE50020A0E10300A0E10130A0E118C09EC0
+S21902774BE514104BE20FE0A0E10CF0A0E114301BE50040A0E1FA
+S219027760000053E30200000A10309FE5000093E55C0000EB0444
+S21902777500A0E1010000EA5000000080F7030010A81BE90DC039
+S21902778AA0E1F0D82DE9E0009FE5E0609FE50020A0E3DC509FEE
+S21902779FE504B04CE2D8709FE50510A0E10231A0E1012082E26C
+S2190277B4030081E73F0052E3FAFFFFDAC0C09FE50030A0E3A8A9
+S2190277C9009FE5011083E28332A0E10720A0E303008CE7012033
+S2190277DE52E2043083E2FBFFFF5A0130A0E1020053E3F5FFFF92
+S2190277F3DA90209FE51330A0E3003085E5042085E584309FE546
+S21902780884209FE5083085E5402085E57C309FE57C209FE51070
+S21902781D3085E5482085E574309FE5306085E570209FE5347009
+S21902783285E5203085E50140E0E31C2085E50400A0E10FE0A058
+S219027847E106F0A0E10400A0E10FE0A0E107F0A0E10030A0E3AD
+S21902785C243085E540209FE5283085E54C3085E5443085E58C5C
+S2190278712085E5F0A81BE9687402007C740200500000008875B8
+S2190278860200206B030004330300200000001C740200507402A4
+S21902789B00087402003476020044760200C0EC02000DC0A0E1EF
+S2190278B000D82DE9000051E304B04CE20700000A011041E20172
+S2190278C530D0E7030053E30100001A0100A0E300A81BE900003C
+S2190278DA51E3F7FFFF1A0000A0E300A81BE90DC0A0E100D82DCD
+S2190278EFE9000050E31C109FE504B04CE23810901514309FE51A
+S2190279048C2093E50100A0E10FE0A0E102F0A0E100A81BE9141E
+S219027919790200500000000DC0A0E130D82DE90020E0E304B084
+S21902792E4CE258C09FE50040A0E100309CE50150A0E1140053C8
+S219027943E30600001A18309CE5000093E5142093E50610A0E39F
+S2190279580FE0A0E102F0A0E10020A0E1020054E10400001A0436
+S21902796D00A0E10510A0E167FFFFEB000050E30200001A040044
+S219027982A0E10510A0E152F3FFEB30A81BE9500000000DC0A00A
+S219027997E110D82DE9FF0000E204B04CE20040A0E10A0054E330
+S2190279AC0100001A0D00A0E32BFFFFEB0400A0E129FFFFEB1059
+S2190279C1A81BE90DC0A0E110D82DE90040A0E10030D4E504B054
+S2190279D64CE2000053E30400000A0000D4E5EAFFFFEB0130F472
+S2190279EBE5000053E3FAFFFF1A10A81BE90DC0A0E100D82DE95B
+S219027A000030A0E31010A0E32B20A0E304D04DE200308DE5049D
+S219027A15B04CE2440000EB00A81BE90DC0A0E1F0DF2DE904B0B5
+S219027A2A4CE224D04DE20150A0E10040A0E129104BE24C300B6F
+S219027A3FE548A04BE204309BE50A00A0E1000053E32090A00369
+S219027A543090A013019041E4000051E1FCFFFFAA0080A0E3050F
+S219027A693094E10300001A3030A0E348304BE5018088E21500B4
+S219027A7E00EA053094E11300000A0260A0E10070A0E30510A0B0
+S219027A93E10400A0E10730A0E10620A0E1502400EB68309FE597
+S219027AA80010D3E70810CAE70730A0E10620A0E10510A0E10436
+S219027ABD00A0E1018088E2E42200EB0150A0E10040A0E1053088
+S219027AD294E1EDFFFF1A08309BE5080053E10380A0A14C301BCF
+S219027AE7E52D0053E30600001A013048E20320DAE7090052E1A0
+S219027AFC0380A0014C301BE50830CAE7050000EA018048E20348
+S219027B110000EA142503000800DAE7018048E29BFFFFEB00003A
+S219027B2658E3FAFFFFAAF0AF1BE90DC0A0E100D82DE908D04D62
+S219027B3BE200308DE504B04CE204309BE501C0A0E104308DE52C
+S219027B500010A0E30230A0E10C20A0E1AFFFFFEB00A81BE90DD5
+S219027B65C0A0E100D82DE9000050E304B04CE201C0A0E3150067
+S219027B7A000A0010A0E10030D1E5000053E31000000A44E09F5B
+S219027B8FE5013060E00E0053E10020D1E500C0A0A30D0052E327
+S219027BA40A0052130200000A203042E25E0053E300C0A083015E
+S219027BB91081E200005CE30200000A0030D1E5000053E3EFFFE8
+S219027BCEFF1A0C00A0E100A81BE9010100000DC0A0E1F0DF2DFD
+S219027BE3E904B04CE20CD04DE20060A0E12C100BE5DAFFFFEBE0
+S219027BF8004050E21701001AA4039FE56EFFFFEB0600A0E1794B
+S219027C0DFFFFEB98039FE56AFFFFEB2000A0E35CFFFFEB2C30BC
+S219027C221BE5040193E772FFFFEB014084E2070054E3F7FFFF92
+S219027C37DA74039FE560FFFFEB090100EA0040D6E5250054E3C8
+S219027C4C0200000A0400A0E14EFFFFEBFF0000EA0070A0E32B4D
+S219027C61C0A0E30140F6E50710A0E1300054E30090A0130190D5
+S219027C76A003303044E2090053E30600008A073187E083308424
+S219027C8BE00140F6E5307043E2302044E2090052E3F8FFFF9AD8
+S219027CA06C0054E30300001A0140F6E56C0054E30110A0030194
+S219027CB540F605253044E2530053E303F19F97E00000EA4080C0
+S219027CCA02004C8002004C8002004C8002004C8002004C800296
+S219027CDF004C8002004C8002004C8002004C8002004C80020083
+S219027CF44C8002004C8002004C8002004C8002004C8002004C22
+S219027D098002004C8002004C8002004C8002004C8002004C80D8
+S219027D1E02004C8002004C8002004C8002004C8002004C800241
+S219027D33004C8002004C80020010800200CC7E0200187E020022
+S219027D484C8002004C8002004C8002004C8002004C8002004CCD
+S219027D5D8002004C8002004C8002004C8002004C8002004C8084
+S219027D7202004C8002004C8002004C800200E87E02004C800253
+S219027D87004C8002004C8002004C800200747E02004C800200B4
+S219027D9C4C8002004C8002004C8002004C8002004C8002004C79
+S219027DB18002004C8002004C80020010800200CC7E0200187E24
+S219027DC602004C8002004C8002004C8002004C8002004C800299
+S219027DDB004C8002004C8002004C8002004C8002004C80020086
+S219027DF04C8002004C8002004C8002004C800200E87E02004C8B
+S219027E058002004C8002004C8002004C800200747E0200000081
+S219027E1A51E30B00000A2C301BE50300B3E82C300BE50000516C
+S219027E2FE3020000AA000070E20010E1E22DC0A0E30A20A0E366
+S219027E4400908DE50C30A0E1100000EA2C301BE5040093E42C66
+S219027E59300BE5000050E3000060B22DC0A0B30A10A0E30C209F
+S219027E6EA0E1100000EA000051E30900000A00908DE50C30A058
+S219027E83E12CC01BE50300BCE82CC00BE51020A0E304708DE5FA
+S219027E98016086E2DFFEFFEB6E0000EA0C20A0E12CC01BE50449
+S219027EAD009CE41010A0E32CC00BE50930A0E100708DE50160BD
+S219027EC286E219FFFFEB640000EA2C301BE50000D3E504308321
+S219027ED7E22C300BE5016086E2ABFEFFEB5D0000EA0050A0E3EB
+S219027EEC2CC01BE50580A0E104409CE405A0A0E12CC00BE505BD
+S219027F010054E1AC409F050C00000A0400A0E113FFFFEB000008
+S219027F1650E30800001A98009FE50A90A0E1A6FEFFEB0400A091
+S219027F2BE1B1FEFFEB193047E2190057E30370A0C17C409FE5E7
+S219027F400530D4E7016086E2000053E30300000A015085E2056C
+S219027F5530D4E7000053E3FBFFFF1A000057E3070055110750DE
+S219027F6AA0C1000059E30780651007A065000830A0E1018048D4
+S219027F7FE2000053E301704AE2050000DA2000A0E37FFEFFEB48
+S219027F940830A0E1018048E2000053E3F9FFFFCA0030D4E50885
+S219027FA90000EA282503004025030044250300482503005025C9
+S219027FBE0300642503000000D4E571FEFFEB0130F4E5000053A9
+S219027FD3E30200000A015045E2010075E3F7FFFF1A0A30A0E108
+S219027FE807A0A0E1000053E31A0000DA2000A0E365FEFFEB0A31
+S219027FFD30A0E101A04AE2000053E3F9FFFFCA130000EA0000F6
+S21902801257E32C301BE5014047121F40A003005093E55534A02F
+S219028027E1010013E32E00A0033100A01356FEFFEB014044E20B
+S21902803CF8FFFFEA2500A0E352FEFFEB030000EA2500A0E34F82
+S219028051FEFFEB0400A0E14DFEFFEB016086E20030D6E50000BD
+S21902806653E3F5FEFF1AF0AF1BE90DC0A0E10F002DE900D82DA1
+S21902807BE914B04CE220D04DE208309BE50C209BE504009BE507
+S2190280902C300BE528200BE510309BE514209BE524300BE52078
+S2190280A5200BE518309BE51C209BE51C300BE518200BE5203077
+S2190280BA9BE524209BE514300BE510200BE52C104BE2C2FEFFEA
+S2190280CFEB00A81BE90DC0A0E1F0DF2DE904B04CE20060A0E108
+S2190280E4060051E1067041800170A091000057E30290A0E13BE7
+S2190280F90000DA000059E30300000AE4009FE5061069E0D7FFAB
+S21902810EFFEB020000EAD4009FE50610A0E1D3FFFFEB0050A0E4
+S219028123E3108047E210A086E2070055E1030000AAB8009FE566
+S2190281380510D6E7CBFFFFEB010000EAAC009FE5C8FFFFEBC514
+S21902814D4FA0E1053064E00130C3E3053063E0010053E3010046
+S219028162001A90009FE5C0FFFFEBA43EA0E1033085E00730C335
+S219028177E3053063E0070053E30100001A70009FE5B8FFFFEBA4
+S21902818C015085E20F0055E3E4FFFFDA60009FE5B3FFFFEB009C
+S2190281A150A0E3070055E1040000AA0510D6E7203041E25E0061
+S2190281B653E32E10A083000000EA2010A0E338009FE5A8FFFF17
+S2190281CBEB015085E20F0055E3F2FFFFDA28009FE5A3FFFFEBAC
+S2190281E00A60A0E1007058E2C3FFFFCAF0AF1BE96825030070C0
+S2190281F5250300782503007C2503008025030084250300882501
+S21902820A03000DC0A0E100D82DE90020A0E304B04CE2ACFFFFEA
+S21902821FEB00A81BE90DC0A0E100D82DE904B04CE207FDFFEBA0
+S21902823400A81BE90DC0A0E100D82DE904B04CE202C0A0E10021
+S219028249E0A0E103005CE30200009A003081E1030013E30A0045
+S21902825E000A0C30A0E101C04CE2000053E30500000A0C20A03D
+S219028273E10130D1E401C04CE20130CEE4000052E3F9FFFF1A10
+S21902828800A81BE900E0A0E10F005CE30E00009A043091E4042A
+S21902829D308EE4042091E404208EE4043091E404308EE4042081
+S2190282B291E410C04CE204208EE40F005CE3F4FFFF8A020000DB
+S2190282C7EA043091E404C04CE204308EE403005CE3FAFFFF8AAC
+S2190282DC0C30A0E101C04CE2000053E30500000A0C20A0E101E7
+S2190282F130D1E401C04CE20130CEE4000052E3F9FFFF1A00A8CC
+S2190283061BE90DC0A0E100D82DE9030052E304B04CE200C0A0A1
+S21902831BE10100009A030010E30900000A0230A0E1012042E2C9
+S219028330000053E30400000A0230A0E1012042E20110CCE40034
+S2190283450053E3FAFFFF1A00A81BE900C0A0E1FF1001E20134C0
+S21902835A81E1033883E10F0052E30900009A04308CE404308CBB
+S21902836FE404308CE4102042E204308CE40F0052E3F8FFFF8AAE
+S219028384010000EA042042E204308CE4030052E3FBFFFF8A0C3F
+S21902839930A0E1000052E30200000A0110C3E4012052E2FCFFCE
+S2190283AEFF1A00A81BE90DC0A0E1F0DF2DE904B04CE250D04D6C
+S2190283C3E20170A0E178404BE200A0A0E3005050E20260A0E15D
+S2190283D80380A0E10490A0E10300001A3030A0E378304BE57721
+S2190283ED404BE2090000EA0500A0E10610A0E12F2300EB00308A
+S219028402D8E70610A0E10130C4E40500A0E1CE2100EB0050502F
+S219028417E2F5FFFF1A090054E10500000A0920A0E1013074E5D9
+S21902842C01A08AE20130C7E4020054E1FAFFFF1A0A00A0E10077
+S21902844130A0E30030C7E5F0AF1BE90DC0A0E1F0DF2DE904B006
+S2190284564CE234D04DE24C200BE50180A0E148204BE250200B3B
+S21902846BE50060A0E30140D8E40070A0E158600BE5060054E15C
+S219028480FE00000A250054E3ED00001A0030A0E354300BE5014D
+S21902849540D8E40350A0E12D0054E30200001A0120A0E3542063
+S2190284AA0BE50140D8E4300054E30200001A0140D8E40190A018
+S2190284BFE3060000EA0390A0E1040000EA053185E08330A0E1FD
+S2190284D4303043E2045083E00140D8E4303044E2090053E3F797
+S2190284E9FFFF9A2E0054E30600001A0140D8E4019089E2000061
+S2190284FE00EA0140D8E4303044E2090053E3FBFFFF9A00A0A0E3
+S219028513E36C0054E30140D804584044E2200054E304F19F9769
+S219028528720000EAD0850200F8860200F8860200F8860200F80C
+S21902853D860200F8860200F8860200F8860200F8860200F8861C
+S2190285520200F8860200D4860200D0850200F8860200F88602D8
+S21902856700F8860200F8860200F8860200F8860200F886020078
+S21902857CF8860200F8860200F8860200F8860200B0850200F8B4
+S219028591860200F8860200B4860200F8860200F8860200F8860C
+S2190285A60200F8860200D08502003000A0E30FE0A0E107F0A026
+S2190285BBE17800A0E30FE0A0E107F0A0E10190A0E30850A0E3F1
+S2190285D04C301BE5040093E44C300BE5200054E304F19F972F7B
+S2190285E50000EA94860200A8860200A8860200A8860200A886B6
+S2190285FA0200A8860200A8860200A8860200A8860200A8860273
+S21902860F00A8860200A88602006C860200A8860200A88602009B
+S219028624A8860200A8860200A8860200A8860200A8860200A8A2
+S219028639860200A8860200A8860200A886020088860200A886CF
+S21902864E0200A8860200A8860200A8860200A8860200A886021E
+S21902866300A886020088860200000050E32DA0A0B3000060B256
+S21902867848104BE2B4319FE50A20A0E3050000EA48104BE2A82F
+S21902868D319FE5010000EA48104BE2A0319FE51020A0E343FF62
+S2190286A2FFEB58000BE548204BE250200BE5140000EA4C301B00
+S2190286B7E5042093E450200BE54C300BE50200A0E19C0000EB51
+S2190286CC58000BE50C0000EA4C301BE5043083E24C300BE501D2
+S2190286E16086E2040053E5019088E20FE0A0E107F0A0E15D0039
+S2190286F600EA3F00A0E30FE0A0E107F0A0E1016086E258201B78
+S21902870BE5055062E000005AE301504512000059E30800000AA3
+S2190287203040A0E300005AE30600000A0A00A0E10FE0A0E107FB
+S219028735F0A0E1016086E200A0A0E3000000EA2040A0E3582086
+S21902874A1BE5019088E254301BE5012042E25C200BE500005390
+S21902875FE30800001A030000EA0400A0E10FE0A0E107F0A0E19F
+S219028774016086E20530A0E1015045E2000053E3F7FFFFCA00FD
+S219028789005AE30300000A0A00A0E10FE0A0E107F0A0E10160B6
+S21902879E86E25C201BE558301BE50F0000EA50301BE50140D3C6
+S2190287B3E4016086E250300BE50400A0E10FE0A0E107F0A0E120
+S2190287C80A0054E30300001A0D00A0E30FE0A0E107F0A0E101BE
+S2190287DD6086E258301BE50320A0E1012042E258200BE50000DF
+S2190287F253E3ECFFFFCA54301BE5000053E31A00000A0530A0CE
+S219028807E1015045E2000053E3160000DA2000A0E30FE0A0E1C3
+S21902881C07F0A0E1016086E20530A0E1015045E2000053E3F7A4
+S219028831FFFFCA0D0000EA8C25030098250300AC250300040020
+S219028846A0E10FE0A0E107F0A0E1016086E20A0054E30190888A
+S21902885BE20300001A0D00A0E30FE0A0E107F0A0E1016086E2C1
+S2190288700040D8E50980A0E1000054E300FFFF1A0600A0E1F01F
+S219028885AF1BE90DC0A0E100D82DE918309FE5002093E5010083
+S21902889AC2E40010A0E3002083E504B04CE20010C2E500A81BA5
+S2190288AFE9806B03000DC0A0E10E002DE900D82DE918309FE5AA
+S2190288C4000083E510B04CE204109BE50C009FE508208BE2DBAE
+S2190288D9FEFFEB010000EA806B03008888020000A81BE90DC037
+S2190288EEA0E10F002DE900D82DE910009FE514B04CE204109BA5
+S219028903E508208BE2CFFEFFEB000000EA748B020000A81BE990
+S2190289180DC0A0E100D82DE90030A0E10120A0E10310A0E10818
+S21902892D009FE504B04CE2C4FEFFEB00A81BE9748B02000DC0A2
+S219028942A0E100D82DE90020A0E3000050E304B04CE2060000EC
+S2190289570A0130D0E4020053E10300000A0130D0E4012082E268
+S21902896C000053E3FBFFFF1A0200A0E100A81BE90DC0A0E10029
+S219028981D82DE90130D1E40020A0E10100D2E404B04CE20300C9
+S21902899650E10500001A000050E30400000A0100D2E40130D17B
+S2190289ABE4030050E1F9FFFF0A000063E000A81BE90DC0A0E15A
+S2190289C000D82DE90130D1E40020A0E1000053E304B04CE2030B
+S2190289D500000A0130C0E40130D1E4000053E3FBFFFF1A003048
+S2190289EAA0E30030C0E50200A0E100A81BE90DC0A0E100D82D97
+S2190289FFE900E0A0E10120DEE404B04CE2020000EA000050E32E
+S219028A140F00000A0120DEE401C0D1E4200082E2FF0000E2412E
+S219028A293042E2190053E30200A08120308CE2FF2003E2413038
+S219028A3E4CE2190053E30C30A0810230A091030050E1EEFFFFBF
+S219028A530A000063E000A81BE90DC0A0E100D82DE9000052E39D
+S219028A6804B04CE200C0A0E10300001A0200A0E100A81BE90083
+S219028A7D0063E000A81BE90100DCE40130D1E4030050E1F9FF1B
+S219028A92FF1A000050E30100000A012052E2F7FFFF1A0000A06D
+S219028AA7E300A81BE90DC0A0E110D82DE9000052E304B04CE2C1
+S219028ABC0040A0E10500001A0200A0E110A81BE9000063E0102C
+S219028AD1A81BE9012052E21000000A01C0D4E401E0D1E420003F
+S219028AE68CE2FF0000E241304CE2190053E30C00A08120308E2C
+S219028AFBE2FFC003E241304EE2190053E30E30A0810C30A0911D
+S219028B10030050E1ECFFFF1A000050E3ECFFFF1A0000A0E31047
+S219028B25A81BE90DC0A0E100D82DE904B04CE202C0A0E1070020
+S219028B3A00EA0120D0E40130D1E4030052E10300000A013050B6
+S219028B4FE5010051E5030060E000A81BE90C30A0E101C04CE253
+S219028B64000053E3F3FFFF1A0000A0E300A81BE90DC0A0E1F047
+S219028B79D92DE9BC309FE504B04CE2004093E5FF6000E20000A6
+S219028B8E54E31900001AA8309FE50000E0E30380A0E134209357
+S219028BA3E50850A0E10FE0A0E102F0A0E10070A0E1343095E546
+S219028BB80400A0E10FE0A0E103F0A0E1143095E5000093E50101
+S219028BCD4084E20C3093E50610A0E10FE0A0E103F0A0E10000B7
+S219028BE254E3F2FFFFDA343098E50700A0E10FE0A0E103F0A00A
+S219028BF7E1F0A91BE940209FE5143092E5000053E30500000A00
+S219028C0C000093E50C3093E50610A0E10FE0A0E103F0A0E1F0B5
+S219028C21A91BE9183092E5000093E50C3093E50610A0E10FE019
+S219028C36A0E103F0A0E1F0A91BE9C0F70300500000000DC0A019
+S219028C4BE110D82DE930209FE504B04CE2143092E50040A0E1FC
+S219028C60000053E30500000A000093E5103093E50FE0A0E10310
+S219028C75F0A0E10000C4E510A81BE9183092E5F7FFFFEA50001F
+S219028C8A00000DC0A0E1F0DF2DE9E8309FE504B04CE20060A01D
+S219028C9FE1004093E50390A0E1000054E31E00001AD0309FE519
+S219028CB40000E0E30370A0E1342093E507A0A0E10FE0A0E10287
+S219028CC9F0A0E10080A0E1343097E50400A0E10FE0A0E103F055
+S219028CDEA0E1143097E5000093E51C3093E50610A0E10FE0A0D7
+S219028CF3E103F0A0E1005050E20200000A0030D6E5000053E361
+S219028D080C00001A014084E2000054E3EDFFFFDA34309AE5089B
+S219028D1D00A0E10FE0A0E103F0A0E1130000EA54209FE514309C
+S219028D3292E5000053E30800000A080000EA0130A0E300308907
+S219028D47E5302097E50400A0E10FE0A0E102F0A0E10500A0E171
+S219028D5CF0AF1BE9183092E5000093E51C3093E50610A0E10FB7
+S219028D71E0A0E103F0A0E10050A0E10500A0E1F0AF1BE9C0F760
+S219028D860300500000000DC0A0E1F0D92DE9D8309FE504B04CC5
+S219028D9BE2004093E50060A0E1000054E31C00001AC4309FE55C
+S219028DB00000E0E30380A0E1342093E50850A0E10FE0A0E102C9
+S219028DC5F0A0E10070A0E1343095E50400A0E10FE0A0E103F06A
+S219028DDAA0E114C095E500005CE30500000A00009CE50710A028
+S219028DEFE314309CE50620A0E10FE0A0E103F0A0E1014084E28E
+S219028E04000054E3EFFFFFDA343098E50700A0E10FE0A0E10378
+S219028E19F0A0E10A0000EA50309FE514C093E50380A0E1000084
+S219028E2E5CE30500000A00009CE50710A0E314309CE50620A034
+S219028E43E10FE0A0E103F0A0E118C098E500005CE30500000AAB
+S219028E5800009CE50710A0E314309CE50620A0E10FE0A0E10304
+S219028E6DF0A0E1F0A91BE9C0F70300500000000DC0A0E1F0DDB6
+S219028E822DE904B04CE204D04DE20250A0E10060A0E10640A03F
+S219028E97E10070A0E3F0819FE5002098E5000052E30600000A14
+S219028EAC0030D2E5000053E30300000A0130D2E425304BE50014
+S219028EC12088E5160000EA060054E10030A0130130A003000016
+S219028ED655E30030A0D3000053E30D00000A0500A0E1A7FFFF2D
+S219028EEBEB000000EA325045E2000055E3030000DA25004BE286
+S219028F0061FFFFEB007050E2F8FFFF0A000057E30300001A0012
+S219028F1500E0E3610000EA25004BE248FFFFEB25205BE50030FA
+S219028F2AA0E30D0052E30030C4E50200A0E11B00000A080000DD
+S219028F3FCA080050E33300000A020000CA030050E30C00000ABC
+S219028F54430000EA0A0050E31200000A400000EA2B0050E339BA
+S219028F6900000A020000CA240050E33600000A3A0000EA7F00DC
+S219028F7E50E32400000A370000EA060054E10300001A00019F5D
+S219028F93E554FEFFEB0100E0E3400000EA0100C4E4F0A09FE5F6
+S219028FA8360000EA25205BE5E4A09FE50A0052E30200001A00A5
+S219028FBD30DAE50D0053E30400000A0D0052E30500001A0030C7
+S219028FD2DAE50A0053E30200001A0030A0E325304BE527000009
+S219028FE7EAB0309FE5002093E5000052E30300000A0D00A0E3B6
+S219028FFCDCFEFFEB0A00A0E3DAFEFFEB25305BE50030CAE501D1
+S21902901100A0E3220000EA7CA09FE5060054E11800000A743013
+S2190290269FE5002093E5000052E30500000A0800A0E3CDFEFF79
+S21902903BEB2000A0E3CBFEFFEB0800A0E3C9FEFFEB014044E235
+S2190290500C0000EA060054E10200001AD9F4FFEB0000A0E30E6F
+S2190290650000EA30309FE5002093E5000052E30000000ABDFE8F
+S21902907AFFEB25305BE514A09FE50130C4E425305BE50030CABB
+S21902908FE582FFFFEA64F80300C0250300083703005CF8030096
+S2190290A4F0AD1BE90DC0A0E1F0DF2DE904B04CE204D04DE201F6
+S2190290B970A0E1070052E1078042800280A091000058E32C30DD
+S2190290CE0BE50060A0E14D0000DA2C301BE5000053E3040000F8
+S2190290E30AD0009FE5071063E00FE0A0E106F0A0E1030000EAE5
+S2190290F8BC009FE50710A0E10FE0A0E106F0A0E10050A0E310BA
+S21902910DA048E2109087E2080055E1040000AA9C009FE5051052
+S219029122D7E70FE0A0E106F0A0E1020000EA8C009FE50FE0A001
+S219029137E106F0A0E1C54FA0E1053064E00130C3E3053063E067
+S21902914C010053E30200001A6C009FE50FE0A0E106F0A0E1A439
+S2190291613EA0E1033085E00730C3E3053063E0070053E3020007
+S219029176001A48009FE50FE0A0E106F0A0E1015085E20F0055F4
+S21902918BE3E0FFFFDA34009FE50FE0A0E106F0A0E10050A0E3BB
+S2190291A0080055E1090000AA0510D7E7203041E25E0053E32EBA
+S2190291B510A083050000EAC4250300D0250300D8250300DC2597
+S2190291CA0300E02503002010A0E328009FE50FE0A0E106F0A019
+S2190291DFE1015085E20F0055E3ECFFFFDA14009FE50FE0A0E1C8
+S2190291F406F0A0E10970A0E100805AE2010000EAE4250300E853
+S219029209250300B1FFFFCAF0AF1BE90DC0A0E100D82DE9023097
+S21902921EA0E104B04CE201C0A0E10010A0E108009FE50C20A0A6
+S219029233E19BFFFFEB00A81BE9EC8802000DC0A0E100D82DE95C
+S2190292480020A0E304B04CE2EFFFFFEB00A81BE90DC0A0E10FA4
+S21902925D002DE930D82DE914B04CE208D04DE248409FE50400B8
+S2190292729BE5005094E508108BE2A5FDFFEB38009FE598FDFF36
+S219029287EB1C004BE20020A0E3002084E50810A0E3F7FEFFEBF1
+S21902929C1C305BE5590053E30000A0130100A003790053E30194
+S2190292B100A003005084E5010000EA64F80300EC25030030A80F
+S2190292C61BE90DC0A0E1F0DD2DE904B04CE20040A0E10050A0C4
+S2190292DBE30170A0E10260A0E1FC809FE5FCA09FE52C0000EA89
+S2190292F0054186E70030D4E5015085E2220000EA0030D4E522F7
+S2190293050053E31D00001A052186E0043012E5040053E10140AF
+S21902931A8402044002050030D4E50400A0E1000053E32200534D
+S21902932F130900000A0430A0E10110D3E45C0051E30340A0010B
+S2190293440020D4E50120C0E40130F4E5000053E322005313F5B2
+S219029359FFFF1A0030D4E5000053E30200001A80009FE55EFD46
+S21902936EFFEB040000EA040050E10030A0130030C015050000E9
+S219029383EA014084E20030D4E5000053E30300000A200053E3BB
+S219029398D8FFFF1A0030A0E30130C4E40030D4E5000053E30717
+S2190293AD00000A200053E30200001A0130F4E5200053E3FCFFCD
+S2190293C2FF0A0030D4E5000053E3C7FFFF1A005087E50800A024
+S2190293D7E1002096E50A10A0E1030000EBF0AD1BE9743A030023
+S2190293EC243B0300042603000DC0A0E1F0DF2DE904B04CE200C1
+S21902940140A0E10280A0E10800A0E101A0A0E14AFDFFEB04505B
+S219029416A0E10A0055E10090A0E12C00000A0800A0E100109504
+S21902942BE50920A0E19DFDFFEB000050E32300001A000095E528
+S2190294403EFDFFEB090050E11D0000DA0170A0E30A0054E11473
+S21902945500000A040055E10F00000A0800A0E1001094E5092063
+S21902946AA0E18EFDFFEB006050E20900001A000057E3040000FD
+S21902947F0A58009FE50810A0E1002095E50670A0E115FDFFEBC5
+S21902949448009FE5001094E512FDFFEB104084E20A0054E1EA8F
+S2190294A9FFFF1A000057E30300001A2C009FE50BFDFFEB07008F
+S2190294BEA0E1F0AF1BE90500A0E1F0AF1BE9105085E20A00551F
+S2190294D3E1D2FFFF1A0000A0E3F0AF1BE91826030040260300E2
+S2190294E8442603000DC0A0E170D82DE904B04CE20040A0E101AB
+S2190294FD50A0E130009FE50260A0E1F7FCFFEB050054E10700CD
+S219029512000A20009FE5002094E5083094E50610A0E1F0FCFFC3
+S219029527EB104084E2050054E1F7FFFF1A70A81BE948260300B1
+S21902953C502603000DC0A0E100D82DE90010C0E50C0080E90430
+S219029551B04CE204309BE50C3080E508209BE5102080E50C3052
+S2190295669BE5143080E500A81BE90DC0A0E1F0DF2DE904B04CE1
+S21902957BE20CD04DE200C0A0E334C00BE50CE09BE501A0A0E330
+S2190295902C000BE50A005EE100C0A01301C0A00308E09BE5011A
+S2190295A580A0E130300BE500005EE300C0A00300005CE3341032
+S2190295BA1B1500108E1534301BE504C09BE530401BE50C00533B
+S2190295CFE1110000AA03C0A0E104009BE5103094E5000053E32D
+S2190295E400C08315041094E5000051E30600001A083094E50081
+S2190295F90053E30100000A020053E30100001A0C3094E50010FD
+S21902960E83E5184084E2010050E2EFFFFF1A2CE01BE50270A0C2
+S219029623E10E0057E1860000AA071198E70030D1E52D0053E3F4
+S2190296385300001A0050A0E330401BE50500A0E104209BE5013B
+S21902964D6087E20190D1E5020055E1440000AA0030D4E50300DF
+S21902966259E13C00001A103094E5000053E30600000A0030939A
+S219029677E5000053E30300000A94019FE5141094E500A0A0E3D6
+S21902968C96FCFFEB043094E5000053E32000000A070198E702B0
+S2190296A130D0E53D0053E3035080020200000A073188E0017063
+S2190296B687E2045093E5082094E5000052E30200000A0100522E
+S2190296CBE30C00000A0D0000EA0500A0E10C1094E50230A0E1C5
+S2190296E05C0000EB006050E20700001A2C019FE50510A0E11419
+S2190296F52094E506A0A0E17AFCFFEB010000EA0C3094E5005049
+S21902970A83E5102094E50130A0E3003082E5036087E00C000011
+S21902971FEA083094E5000053E30200000A020053E30400000A0B
+S219029734060000EA0C2094E5003092E5013083E2010000EA0C50
+S2190297492094E50130A0E3003082E50150A0E3040000EA01005D
+S21902975E80E204309BE5184084E2030050E1BAFFFFBA00005520
+S219029773E32F00001A0910A0E1A0009FE505A0A0E158FCFFEB8C
+S2190297882A0000EA08C09BE500005CE32300000A34E01BE500E9
+S21902979D005EE30300000A10109BE56C009FE500A0A0E34DFC66
+S2190297B2FFEB0C109BE5000051E30200000A010051E30D000093
+S2190297C70A0F0000EA08109BE50C209BE5070198E70230A0E105
+S2190297DC1D0000EB004050E20800001A30009FE510209BE5076A
+S2190297F11198E704A0A0E13BFCFFEB020000EA073198E70820BB
+S2190298069BE5003082E50130A0E334300BE5036087E006000057
+S21902981BEA5C2603007C260300A426030020009FE5016087E2E2
+S2190298302DFCFFEB08A09BE52CC01BE50670A0E10C0057E17842
+S219029845FFFFBA0A00A0E1000000EAC4260300F0AF1BE90DC07D
+S21902985AA0E1F0D92DE904B04CE200C0A0E10140A0E30A50A0B1
+S21902986FE30060A0E30180A0E10270A0E10000DCE503E0A0E1FD
+S219029884200050E30200001A0130FCE5200053E3FCFFFF0A00ED
+S21902989930DCE5000053E33F00000A000054E30B00000AFF30C8
+S2190298AE03E2300053E30800001A0130DCE5411043E220208306
+S2190298C3E2FF2002E2190051E30230A091780053E31050A00343
+S2190298D802C08C020040A0E30110DCE40400A0E1302041E24157
+S2190298ED3041E2050053E3090052830200009A613041E205009E
+S21902990253E30000008A0100A0E3000050E31300000A0000A015
+S219029917E3302041E2FF3002E2090053E30200A0910600009AB9
+S21902992C613041E2050053E3570041920200009A413041E205D1
+S2190299410053E337004192050050E1040000AA0030DCE595065A
+S21902995626E0000053E3D0FFFF1A0F0000EA00005EE30B00008C
+S21902996B0A0E20A0E10030D2E5010000EA0130F2E5FF3003E239
+S219029980000053E30100000A030051E1F9FFFF1A0030D2E5005D
+S2190299950053E30100001A0000A0E3F0A91BE9006088E5000078
+S2190299AA57E300C087150100A0E3F0A91BE90DC0A0E100D82D97
+S2190299BFE90030D0E504B04CE2200053E30200001A0130F0E564
+S2190299D4200053E3FCFFFF0A0000D0E5540050E30030A01301FD
+S2190299E930A003740050E30130A003000053E30400001A46007A
+S2190299FE50E3660050130200000A0300A0E100A81BE90130A044
+S219029A13E3003081E50100A0E300A81BE90DC0A0E100D82DE952
+S219029A2828309FE5FA0FA0E3482093E504B04CE20FE0A0E10286
+S219029A3DF0A0E114109FE5003091E5013083E20300A0E1003004
+S219029A5281E500A81BE9500000000C3703000DC0A0E110D82DED
+S219029A67E904B04CE204D04DE21C409FE5003094E5000093E514
+S219029A7C1C2093E511104BE20FE0A0E102F0A0E1000050E300B6
+S219029A910000EA846B0300F5FFFF1A10A81BE90DC0A0E1F0D8FE
+S219029AA62DE904B04CE204D04DE20060A0E398529FE51D704B80
+S219029ABBE20540A0E1003095E5000093E51C2093E50710A0E179
+S219029AD00FE0A0E102F0A0E1000050E39A00000A1D305BE50132
+S219029AE53043E2170053E303F19F97290000EA549B0200609B9A
+S219029AFA02009C9B0200949B02009C9B02009C9B02009C9B0239
+S219029B0F009C9B02009C9B02009C9B02009C9B02009C9B02001D
+S219029B249C9B02009C9B02009C9B02009C9B02009C9B02009C6C
+S219029B399B02009C9B02009C9B02009C9B02009C9B02009C9B58
+S219029B4E0200809B02001C3494E5013083E21C3484E51D305B1C
+S219029B63E5020053E30200001A203494E5013083E2203484E58D
+S219029B780160A0E3060000EA243494E5013083E2243484E504D1
+S219029B8D00E0E38C0000EA0300E0E38A0000EA000056E3C6FF4B
+S219029BA2FF0A003095E5000093E5011B85E21C2093E5081081AC
+S219029BB7E20FE0A0E102F0A0E1000050E36000000A003095E586
+S219029BCC000093E5011B85E21C2093E5091081E20FE0A0E102E0
+S219029BE1F0A0E1000050E35700000A0040A0E31D305BE50420EF
+S219029BF685E2010053E3042485E5013BA0138030A00310348518
+S219029C0BE5030054E10E0000AA0260A0E1003095E5000093E563
+S219029C201C2093E50710A0E10FE0A0E102F0A0E1000050E34482
+S219029C3500000A1D305BE50430C6E7102495E5014084E2020044
+S219029C4A54E1F1FFFFBA003095E5000093E5011B85E21C2093AC
+S219029C5FE50A1081E20FE0A0E102F0A0E1000050E33500000A32
+S219029C74283495E5000053E30800000A003095E5000093E50193
+S219029C891B85E21C2093E50B1081E20FE0A0E102F0A0E1000028
+S219029C9E50E32900000AAC209FE5AC109FE50200D5E70130D5F0
+S219029CB3E7003023E0FF0053E30200000A66FFFFEB0500E0E323
+S219029CC83E0000EA282495E5000052E32400000A00C0A0E310DC
+S219029CDD3495E50C40A0E103005CE10D0000AA046085E203002B
+S219029CF2A0E164E09FE50430D6E70C18A0E1014084E2213C2350
+S219029D07E08330A0E1B3209EE1000054E1212422E00228A0E1B3
+S219029D1C42C8A0E1F4FFFFBA38209FE538109FE50200D5E7018D
+S219029D3130D5E70C28A0E1003483E1220853E11F00000A060050
+S219029D46E0E31E0000EA0200E0E31C0000EA846B03000804006D
+S219029D5B0009040000103703000A0400000B04000002C0A0E135
+S219029D70103495E50C40A0E103005CE1090000AA040085E203EB
+S219029D8510A0E10430D0E70C28A0E1223883E00338A0E143C80D
+S219029D9AA0E1014084E2010054E1F7FFFFBA0600E0E318309FF0
+S219029DAFE50C20A0E10310D5E7FF2002E2020051E10000001AE6
+S219029DC40000A0E3000000EA0A040000F0A81BE90DC0A0E1F02E
+S219029DD9DF2DE904B04CE20A80A0E30170A0E1030057E30290C9
+S219029DEEA0E10300001A0130E0E3003089E50000E0E3F0AF1BAC
+S219029E03E954519FE5343095E50000E0E30FE0A0E103F0A0E1AC
+S219029E180060A0E1342095E53C419FE50FE0A0E102F0A0E11487
+S219029E2D3095E5003084E5342095E50600A0E10FE0A0E102F01F
+S219029E42A0E100C094E500009CE50710A0E314309CE57D2EA01F
+S219029E57E30FE0A0E103F0A0E10020A0E3102484E50130A0E334
+S219029E6C283484E52C2484E5147484E5182484E505A0A0E11C84
+S219029E812484E50460A0E1202484E50650A0E1242484E513709B
+S219029E96A0E300FFFFEB004050E20F00001ABC309FE50320D541
+S219029EABE7000052E30500001A003095E5000093E50C2093E59A
+S219029EC00610A0E30FE0A0E102F0A0E1104485E594209FE50113
+S219029ED530A0E30230C5E70400A0E1F0AF1BE9030074E313004B
+S219029EEA001A018048E2000058E30030A0D3283485D56C009FF8
+S219029EFFE548309AE50FE0A0E103F0A0E100C096E5281496E595
+S219029F1400009CE5000051E30C209CE51510A0034310A0130FF2
+S219029F29E0A0E102F0A0E1183496E5013083E2183486E505002F
+S219029F3E74E30300000A0730A0E1017047E2000053E3D0FFFF4D
+S219029F53CA0000E0E3004089E5F0AF1BE950000000846B0300D2
+S219029F68080400000C04000020A107000DC0A0E1F0DF2DE904C2
+S219029F7DB04CE20CD04DE22C000BE50030A0E334300BE501902B
+S219029F92A0E1A4019FE5030059E10030A0D30130A0C32C1490C5
+S219029FA7E50060A0E1000051E30030A01330200BE5000053E34B
+S219029FBC7F00000A00A0A0E1103490E5000053E35E00001A1365
+S219029FD180A0E364719FE5B0FEFFEB005050E21100001A58116A
+S219029FE69FE558419FE50120D6E70430D6E7030052E146000073
+S219029FFB0A013043E2FF3003E2030052E10600001A003096E5D5
+S21902A010000093E50C2093E50610A0E30FE0A0E102F0A0E1306C
+S21902A0250000EA0750E0E3050075E33100000A040075E31F0008
+S21902A03A001A003096E5000093E50C2093E50610A0E30FE0A001
+S21902A04FE102F0A0E1143496E5020053E31300001A003096E5CE
+S21902A064281496E5000093E5000051E30C2093E51510A00343CE
+S21902A07910A0130FE0A0E102F0A0E1183496E5013083E218347C
+S21902A08E86E582FEFFEB003096E50050A0E1000093E50C20932E
+S21902A0A3E50610A0E30FE0A0E102F0A0E10130A0E32C3486E5C1
+S21902A0B80F0000EA003097E5281497E5000093E5000051E30C77
+S21902A0CD2093E51510A0034310A0130FE0A0E102F0A0E11834E2
+S21902A0E297E5013083E2183487E50830A0E1018048E2000053E1
+S21902A0F7E3B6FFFFCA000055E3110000AA30201BE5005082E5F2
+S21902A10C0030E0E3103486E5290000EA003096E5000093E50C53
+S21902A1212093E50610A0E30FE0A0E102F0A0E10430D6E70130EC
+S21902A13683E20430C6E7EEFFFFEA846B0300080400000C0400E3
+S21902A14B0010449AE52C001BE504149AE5040059E10940A0B18A
+S21902A1600420A0E133F8FFEB2C301BE534201BE5043083E02CB6
+S21902A175300BE510349AE5042082E034200BE5099064E004241C
+S21902A18A9AE5033064E010348AE5042082E004248AE50A00A049
+S21902A19FE12C249AE5000059E30030A0D30130A0C3000052E34C
+S21902A1B40030A013000053E380FFFF1A34001BE5F0AF1BE90DFA
+S21902A1C9C0A0E100D82DE93C009FE53C109FE504B04CE238E0C1
+S21902A1DE9FE508D04DE234C09FE524349CE500308DE518249C0F
+S21902A1F3E504208DE528349CE51C249CE5000053E320349CE52C
+S21902A2080E10A001B6F9FFEB030000EAF82603003C270300402E
+S21902A21D270300846B030000A81BE90DC0A0E100D82DE9080019
+S21902A23280E204B04CE2070050E300F19F97170000EA9CA2022A
+S21902A2470094A202008CA2020084A202007CA2020074A2020033
+S21902A25C6CA2020064A2020040009FE500A81BE93C009FE5009E
+S21902A271A81BE938009FE500A81BE934009FE500A81BE9300029
+S21902A2869FE500A81BE92C009FE500A81BE928009FE500A81BC1
+S21902A29BE924009FE500A81BE920009FE500A81BE948270300A8
+S21902A2B05C2703007C2703008827030094270300A0270300B07C
+S21902A2C5270300C4270300DC2703000DC0A0E110D82DE90030E3
+S21902A2DAD0E504B04CE2FF0053E30A00001A0130D0E5FF005340
+S21902A2EFE30700001A0230D0E5FF0053E30400001A0330D0E52D
+S21902A304FF0053E30100001A0100A0E310A81BE94C409FE50499
+S21902A31920A0E30410A0E100FAFFEB000050E3F7FFFF0A0030AA
+S21902A32ED4E5000053E30900001A0130D4E5000053E3060000DB
+S21902A3431A0230D4E5000053E30300001A0330D4E50100A0E336
+S21902A358000053E30000000A0000A0E310A81BE9103903000D11
+S21902A36DC0A0E1F0D82DE904B04CE20CD04DE20050A0E10440B3
+S21902A38295E50160A0E1100084E2CFFFFFEB000050E3070000FB
+S21902A3970A0400A0E10010D4E50020A0E30F1001E20111A0E11A
+S21902A3ACE60000EB0008B0E10200000A0500A0E1D40000EB2DAD
+S21902A3C10000EA28704BE20700A0E10C1084E20420A0E397F792
+S21902A3D6FFEB24004BE20610A0E10620A0E393F7FFEB0030D478
+S21902A3EBE5B200D4E10F3003E20361A0E1700100EB000066E05F
+S21902A400BC00C5E10930D4E5060053E30C00000A020000CA01CD
+S21902A4150053E30300000A140000EA110053E30C00000A11007C
+S21902A42A00EA0500A0E1063084E0083085E50710A0E17C010055
+S21902A43FEB0D0000EA0500A0E1063084E0083085E50710A0E1C5
+S21902A454FD0200EB070000EA0500A0E1063084E0083085E50748
+S21902A46910A0E14E1400EB010000EA0500A0E1A50000EBF0A860
+S21902A47E1BE90DC0A0E1F0DF2DE90060A0E1083086E2080113EE
+S21902A493E8038048E004B04CE2045096E54801A0E1BC30D6E1FC
+S21902A4A80F0000E2083083E0BC30C6E1400080E30000C5E5002C
+S21902A4BD70A0E30170C5E501A0A0E1BC00D6E10290A0E13A0192
+S21902A4D200EB80409FE5B200C5E1B000D4E1360100EBB400C5E7
+S21902A4E7E1B030D4E16C109FE5013083E2B030C4E1B670C5E1FC
+S21902A4FC4030A0E30830C5E509A0C5E50420A0E3BA70C5E10C99
+S21902A5110085E247F7FFEB100085E20910A0E10420A0E343F7AD
+S21902A526FFEB0500A0E10810A0E10720A0E1840000EB0008A051
+S21902A53BE12008A0E11E0100EB041089E2BA00C5E1022BA0E3E1
+S21902A5500600A0E1F00000EBF0AF1BE9B46F0300103903000D6B
+S21902A565C0A0E1F0D82DE97C209FE5003092E504B04CE2000012
+S21902A57A53E31A00001A03E0A0E10130A0E3003082E50E40A0BE
+S21902A58FE15C709FE504C0A0E158509FE503E0A0E354609FE570
+S21902A5A40500A0E1001096E507208CE0023002E2022083E05EFE
+S21902A5B9CE8CE2103085E2042083E70CC08CE2001080E501E085
+S21902A5CE5EE228309FE50010A0E1BE30C0E1144084E2140081E6
+S21902A5E3E2F0FFFF5A001086E5F0A81BE9203903000870030044
+S21902A5F8B86F0300B8870300EA0500000DC0A0E1F0DD2DE904B7
+S21902A60DB04CE20CD04DE20060A0E360509FE50670A0E15CA03E
+S21902A6229FE50580A0E1BE30D5E10A00A0E1BCE0D5E10610A05B
+S21902A637E1004095E5016086E200308DE510C088E207309CE70D
+S21902A64C0520A0E104E08DE5145085E208408DE5147087E2A1E3
+S21902A661F8FFEB030056E3EEFFFFDA14309FE514009FE5001089
+S21902A67693E59BF8FFEB030000EAB86F0300EC270300B8870364
+S21902A68B0018280300F0AD1BE90DC0A0E100D82DE960309FE57F
+S21902A6A004B04CE200C093E500005CE31200000A00209CE50088
+S21902A6B52083E510309CE504308CE540109FE5143083E20830E6
+S21902A6CA8CE538E09FE50030A0E3BC30CCE1003091E52C209F8A
+S21902A6DFE5013083E2003081E5001092E500009EE5033061E0D0
+S21902A6F4000053E100308EC50C00A0E100A81BE9B88703001800
+S21902A709390300143903001C3903000DC0A0E100D82DE92020D4
+S21902A71E9FE5003092E51C109FE5013043E2003082E500309196
+S21902A733E5003080E504B04CE2000081E500A81BE91839030048
+S21902A748B88703000DC0A0E100D82DE9021051E204B04CE2024E
+S21902A75DC0A0E10300004AB230D0E0021051E203C08CE0FBFF52
+S21902A772FF5A010071E30500001A0030D0E5FF20CEE302E083E4
+S21902A787E1FFECCEE30E38A0E123C88CE00C08A0E12C28A0E1B1
+S21902A79C30109FE520C882E00C3061E001005CE103C0A0C10CA8
+S21902A7B100E0E10008A0E12E0880E160E8A0E1200CA0E100082D
+S21902A7C6A0E10E0C80E12008A0E100A81BE9FFFF00000DC0A0BB
+S21902A7DBE100D82DE90020A0E304D04DE2BC30D0E104B04CE26E
+S21902A7F010204BE50910D0E50F104BE5BE20D0E1B011D0E1B21D
+S21902A805C1D0E1023083E0013083E0B0215BE10C3083E0B2003E
+S21902A81AD0E1023083E0000083E000A81BE90DC0A0E110D82D6A
+S21902A82FE904B04CE210D04DE2B8009FE594FFFFEB004050E208
+S21902A8440300001AAC009FE526F8FFEB6BFFFFEBFEFFFFEA1059
+S21902A8591094E594209FE520004BE24C0A00EBBC00C4E100082B
+S21902A86EB0E12600000A84209FE5003092E5B4015BE101308399
+S21902A883E2003082E54C0000EB020B50E30500000A68309FE59E
+S21902A898030050E10C00000A0400A0E19AFFFFEBE2FFFFEA5434
+S21902A8AD309FE5002093E5101094E5012082E2002083E5041089
+S21902A8C284E50400A0E11A104BE2A6FEFFEBD8FFFFEA30309FE8
+S21902A8D7E5002093E5101094E5012082E2002083E5041084E5C5
+S21902A8EC0400A0E1E60300EBCFFFFFEAEA050000282803002CD2
+S21902A9013903000608000024390300283903000400A0E17EFF2A
+S21902A916FFEB10A81BE90DC0A0E170D82DE904B04CE210D04DC4
+S21902A92BE20050A0E128604BE20600A0E10240A0E10620A0E3B5
+S21902A9403CF6FFEB22004BE238109FE50620A0E338F6FFEB04FF
+S21902A95548A0E12408A0E1170000EBBC014BE1101095E5BC200F
+S21902A96AD5E10600A0E18C0900EB10209FE5003092E501308305
+S21902A97FE2003082E5010000EAB0F703003039030070A81BE926
+S21902A9940DC0A0E1203CA0E1003C83E1FF2800E200D82DE9FFE6
+S21902A9A90C00E20004A0E1220480E1000083E104B04CE200A8AA
+S21902A9BE1BE90DC0A0E100D82DE90008A0E1FF3800E2200CA0CF
+S21902A9D3E1230480E104B04CE200A81BE90DC0A0E100D82DE935
+S21902A9E820209FE5003092E504B04CE2000053E30200001A00B4
+S21902A9FD0082E50300A0E100A81BE90000E0E300A81BE9BC87F5
+S21902AA1203000DC0A0E100D82DE90030A0E308209FE504B04C8A
+S21902AA27E2003082E500A81BE9BC8703000DC0A0E130D82DE93C
+S21902AA3C0040A0E1080094E504B04CE2B030D0E10150A0E1086F
+S21902AA510053E31700001ABC10D4E10020A0E339FFFFEB000834
+S21902AA66A0E120C8B0E11100001A083094E500C0C3E5082094DA
+S21902AA7BE5B2C0C2E1080094E5BC10D4E10C20A0E12EFFFFEBFF
+S21902AA900008A0E12008A0E1C8FFFFEB083094E50110A0E3B2D0
+S21902AAA500C3E10520A0E10400A0E172FEFFEB070000EA243027
+S21902AABA9FE5003093E5000053E30300000A0400A0E10510A0D7
+S21902AACFE10FE0A0E103F0A0E10400A0E10CFFFFEB30A81BE950
+S21902AAE4BC8703000DC0A0E1F0DF2DE904B04CE204D04DE200F8
+S21902AAF960A0E10140A0E1307086E2048097E5020014E3085045
+S21902AB0E97E50290A0E10F00000A1830A0E3BC30C7E10C30D513
+S21902AB23E550019FE59030C3E3603083E30C30C5E596FFFFEB9B
+S21902AB382C104BE22C000BE50420A0E3140085E2BAF5FFEB00C1
+S21902AB4D30A0E3B831C6E1060000EAB831D6E1143083E2BC3084
+S21902AB62C7E10C20D5E5A020C2E3502082E30C20C5E50C30D528
+S21902AB77E50F30C3E30C30C5E5580096E582FFFFEB040085E566
+S21902AB8C540096E57FFFFFEB0030A0E3B031C5E1000059E308F8
+S21902ABA10085E508A086E21800001AB401D6E182FFFFEBB00065
+S21902ABB6C5E1B601D6E17FFFFFEBB200C5E10D40C5E5B831D6F9
+S21902ABCBE1000053E3083084130D30C515A0009FE577FFFFEBED
+S21902ABE0BE00C5E1B291C5E10420A0E390109FE50C0088E28F3C
+S21902ABF5F5FFEB100088E20A10A0E10420A0E38BF5FFEB063009
+S21902AC0AA0E30930C8E5BC00D7E169FFFFEBB200C8E1BC40D7D1
+S21902AC1FE10800A0E1EBFEFFEB0020A0E10500A0E10410A0E120
+S21902AC34C4FEFFEB0008A0E12008A0E15EFFFFEB0610A0E3B096
+S21902AC4901C5E10A20A0E10700A0E109FEFFEB043096E50A006B
+S21902AC5E53E30A00001A1C109FE51C0086E218209FE50630A0BA
+S21902AC73E1B20200EB110000EAB2050402B2050000103903008A
+S21902AC88C0D4010090AE02000D30D5E5030013E30200001AB817
+S21902AC9D31D6E1000053E30600000A1C0086E2FA1FA0E3082025
+S21902ACB29FE50630A0E1A10200EB000000EA74AE0200F0AF1BF5
+S21902ACC7E90DC0A0E1F0DF2DE904B04CE208D04DE22C000BE550
+S21902ACDC2C301BE5089090E5046093E5080099E530100BE5273A
+S21902ACF1FFFFEB00A0A0E1040099E524FFFFEB0080A0E1B200FB
+S21902AD06D9E12CFFFFEB0058A0E1B000D9E14558A0E128FFFFDB
+S21902AD1BEB149086E20048A0E12C301BE51470A0E3BC70C3E129
+S21902AD300A00A0E15030A0E30C30C9E54448A0E113FFFFEB0482
+S21902AD450089E50800A0E110FFFFEB080089E5010BA0E318FFE6
+S21902AD5AFFEBBE00C9E10030A0E3B231C9E10558A0E1B031C9C3
+S21902AD6FE12508A0E111FFFFEBB401C6E10448A0E12408A0E169
+S21902AD840DFFFFEBB200C9E10D70C9E50420A0E370109FE50C7F
+S21902AD990086E225F5FFEB100086E230101BE50420A0E321F5BD
+S21902ADAEFFEB0650A0E30950C6E52C301BE5BC00D3E1FEFEFFFB
+S21902ADC3EBB200C6E12C301BE5BC40D3E10600A0E17FFEFFEB36
+S21902ADD80020A0E10900A0E10410A0E158FEFFEB0008A0E120B6
+S21902ADED08A0E1F2FEFFEBB001C9E130201BE52C001BE50510FB
+S21902AE02A0E19DFDFFEB000000EA10390300F0AF1BE90DC0A0E9
+S21902AE17E100D82DE94C309FE50010A0E3002093E504B04CE243
+S21902AE2C010052E10D00000A03C0A0E1000052E10600001A0028
+S21902AE410051E30200000A003092E5003081E5010000EA00305D
+S21902AE5692E500308CE50210A0E1002092E5000052E3F2FFFF79
+S21902AE6B1A00A81BE9C08703000DC0A0E100D82DE90010A0E3EC
+S21902AE800120A0E304B04CE216FFFFEB00A81BE90DC0A0E10037
+S21902AE95D82DE90030A0E3043080E504B04CE2DAFFFFEB00A81A
+S21902AEAA1BE90DC0A0E110D82DE90040A0E1440094E504B04CBE
+S21902AEBFE2000050E30500000A003090E5443084E50FFEFFEBDA
+S21902AED4440094E5000050E3F9FFFF1A10A81BE90DC0A0E11047
+S21902AEE9D82DE90030A0E304B04CE20040A0E1043084E51C0050
+S21902AEFE84E2290200EB0400A0E1E7FFFFEB0400A0E1BFFFFF25
+S21902AF13EB10A81BE90DC0A0E1F0D82DE90170A0E1082097E5B9
+S21902AF28BC10D7E104B04CE20C30D2E50050A0E1040092E52345
+S21902AF3D32A0E10331A0E1014063E0036082E090FEFFEB54205B
+S21902AF5295E5003062E0000053E3170000CA023060E0044063C7
+S21902AF67E0036086E0000054E3120000DA043082E0543085E57E
+S21902AF7C442095E50030A0E3003087E5030052E10600000A0046
+S21902AF910000EA002092E5003092E5000053E3FBFFFF1A0070C3
+S21902AFA682E5020000EA447085E54C4085E5486085E50100A075
+S21902AFBBE3F0A81BE90000A0E3F0A81BE90DC0A0E130D82DE970
+S21902AFD0083091E50040A0E1080093E504B04CE26BFEFFEB58E9
+S21902AFE53094E50050A0E1053063E0000053E3140000DA1C001E
+S21902AFFA84E2EA0100EB582094E5B831D4E1051062E0030051C5
+S21902B00FE10310A0A1000051E30B0000DAB831D4E1033061E0C5
+S21902B024B831C4E1012082E0582084E50338B0E10400000A380C
+S21902B0390094E5B821D4E1140080E2011080E07AF4FFEB30A8DD
+S21902B04E1BE90DC0A0E1F0DD2DE90080A0E1BC00D8E10860983B
+S21902B063E504B04CE2044098E50170A0E152FEFFEBB200C4E1C6
+S21902B07800A0A0E3BC50D8E10400A0E1D3FDFFEB0020A0E106EE
+S21902B08D00A0E10510A0E1ACFDFFEB0008B0E1F600001AC4335D
+S21902B0A29FE5005093E5000000EA005095E5000055E312000048
+S21902B0B70AB200D6E1B441D5E13EFEFFEB000054E1F7FFFF1AF5
+S21902B0CCB631D5E1000053E30A00000AB000D6E10340A0E13620
+S21902B0E1FEFFEB000054E1EFFFFF1A0700A0E1081085E2042004
+S21902B0F6A0E38AF6FFEB000050E3E9FFFF1A000055E3D800000D
+S21902B10B0A0C0085E2041087E20620A0E346F4FFEB043095E5B3
+S21902B120020053E30700000A0D30D6E5040013E30400000A05C5
+S21902B13500A0E169FFFFEB0800A0E173FDFFEBF0AD1BE9043073
+S21902B14A95E5013043E2090053E303F19F97C20000EA84B102CD
+S21902B15F00E4B102007CB402004CB202004CB20200F8B202005F
+S21902B1743CB30200D0B3020014B4020058B402000D30D6E50277
+S21902B1890013E31000000A0230A0E3043085E5040096E5FCFDCF
+S21902B19EFFEB013080E2B000D6E1543085E503FEFFEBB601C55C
+S21902B1B3E1002097E51210A0E3082085E50030A0E3B831C5E18A
+S21902B1C80500A0E1B035C5E18C0000EA0800A0E10710A0E1B90A
+S21902B1DDFEFFEBA50000EA1C0085E26F0100EB0D30D6E50410F5
+S21902B1F213E20200000A0130A0E3043085E59D0000EA02001352
+S21902B207E30300000A0500A0E10120A0E333FEFFEB970000EA75
+S21902B21C100013E39500000A080096E5D9FDFFEB583095E5012B
+S21902B2313083E2030050E18F00001A0430A0E3043085E55800E2
+S21902B24685E58B0000EA0D30D6E5544095E5100013E3020000FF
+S21902B25B0A0500A0E10810A0E157FFFFEB0500A0E10810A0E14F
+S21902B27028FFFFEB0D30D6E500A0A0E1010013E30800000A048B
+S21902B2850096E5C1FDFFEB543095E5030050E10300001A01300A
+S21902B29A80E2543085E50520A0E3042085E5543095E5040053BD
+S21902B2AFE10200001AB035D5E1000053E36E00000AB841D5E18E
+S21902B2C4000054E30700001A1C0085E2350100EB0500A0E110DC
+S21902B2D910A0E30420A0E100FEFFEBB045C5E1630000EA013020
+S21902B2EEA0E3B035C5E1600000EA0D30D6E5100013E35D000091
+S21902B3030A0500A0E10810A0E12DFFFFEB080096E59EFDFFEBE7
+S21902B318583095E5013083E2030050E15400001A0030A0E30428
+S21902B32D3085E50500A0E1B6FEFFEB4F0000EA0D30D6E5100005
+S21902B34213E31700000A0500A0E10810A0E11CFFFFEB08009616
+S21902B357E58DFDFFEB583095E5013083E2030050E10E00001A8D
+S21902B36C0D30D6E5010013E30900000A0500A0E11010A0E35446
+S21902B3813095E50A20A0E3042085E5013083E2543085E50A201D
+S21902B39642E2D2FDFFEB010000EA0830A0E3043085E50D30D667
+S21902B3ABE5010013E33100000A1C0085E2FB0000EB0500A0E180
+S21902B3C01110A0E3543095E50920A0E30A0000EA0500A0E108A1
+S21902B3D510A0E1CEFEFFEB0D30D6E500A0A0E1010013E32300E2
+S21902B3EA000A0500A0E11010A0E3543095E50A20A0E3042085C0
+S21902B3FFE5013083E2543085E50020A0E3B5FDFFEB190000EA87
+S21902B4140D30D6E5100013E31600000A0500A0E10810A0E1E6F9
+S21902B429FEFFEB080096E557FDFFEB583095E5013083E20300C3
+S21902B43E50E10D00001A1C0085E2D70000EB0A30A0E3043085DF
+S21902B453E5080000EA0500A0E10010A0E30120A0E39FFDFFEBC3
+S21902B468030000EAC08703000800A0E10710A0E112FEFFEB0076
+S21902B47D005AE30100001A0800A0E1A1FCFFEBF0AD1BE90DC0DD
+S21902B492A0E100D82DE904B04CE2E1FCFFEBD90000EB00A81BFF
+S21902B4A7E90DC0A0E130D82DE954209FE504B04CE20040A0E199
+S21902B4BC0158A0E14558A0E10010A0E38EF3FFEB0130A0E304C6
+S21902B4D13084E5B451C4E15C2084E2402084E5342084E5241080
+S21902B4E69FE524209FE5703084E2383084E5BE23C4E1003091E0
+S21902B4FBE5003084E50000A0E3004081E530A81BE94806000064
+S21902B510C0870300EA0500000DC0A0E110D82DE90040A0E104D5
+S21902B5253094E504B04CE2010000EAD6FFFFEB043094E5000028
+S21902B53A53E30200000AB831D4E1000053E3F8FFFF1A10A81BFC
+S21902B54FE90DC0A0E110D82DE904B04CE20040A0E1ECFFFFEB33
+S21902B564041094E5020051E30030A0130130A003040051E30316
+S21902B57920A0110120A003000052E30600000A0400A0E1111036
+S21902B58EA0E30730A0E3043084E50020A0E351FDFFEB060000E6
+S21902B5A3EA050051E30400001A0400A0E10630A0E3043084E570
+S21902B5B81110A0E349FDFFEB0400A0E138FEFFEB10A81BE90D35
+S21902B5CDC0A0E1F0D82DE904B04CE20160A0E1005052E20040BB
+S21902B5E2A0E1020000DA4C3094E5000053E30300001A0000A008
+S21902B5F7E3F0A81BE94C0084E52B0000EA043094E5040053E308
+S21902B60C0070A0E3170000EA481094E50600A0E105F3FFEB4CA8
+S21902B6213094E5440094E5037087E0002090E5036086E044200B
+S21902B63684E5055063E034FCFFEB440094E5000050E3EBFFFF04
+S21902B64B0A081090E50C30D1E5BC20D0E12332A0E1032142E0B1
+S21902B6604C2084E50C30D1E52332A0E1031181E0481084E500FB
+S21902B6750055E30D00000A4C2094E5020055E1E2FFFFAA0600BD
+S21902B68AA0E1481094E50520A0E1E7F2FFEB483094E5057087FC
+S21902B69FE04C2094E5053083E0483084E5022065E04C2084E515
+S21902B6B40700A0E1F0A81BE90DC0A0E170D82DE904B04CE200C8
+S21902B6C940A0E1380094E5005052E2010000CA0000A0E370A809
+S21902B6DE1BE9043094E5043043E2010053E30100009A0000E094
+S21902B6F3E370A81BE9B861D4E1000056E30C00001A34309FE527
+S21902B708140080E2030055E10350A0210520A0E1C6F2FFEB0416
+S21902B71D00A0E11010A0E3B851C4E10620A0E1EDFCFFEB0500BF
+S21902B732A0E170A81BE90000A0E370A81BE9B20500000DC0A09B
+S21902B747E170D82DE904B04CE20060A0E10240A0E1041086E5A2
+S21902B75C0350A0E1AEF8FFEB080086E50C4086E534309FE5005B
+S21902B7712093E50310A0E1105086E5000052E30400000A06007C
+S21902B78652E10500000A002092E5000052E3FAFFFF1A003091C6
+S21902B79BE5003086E5006081E570A81BE9C48703000DC0A0E194
+S21902B7B000D82DE94C109FE50020A0E3003091E504B04CE20282
+S21902B7C50053E10D00000A000053E10700001A000052E3020091
+S21902B7DA000A003093E5003082E500A81BE9003093E500308105
+S21902B7EFE500A81BE90320A0E1003093E5000053E3F1FFFF1A22
+S21902B80400A81BE9C48703000DC0A0E170D82DE970309FE5045A
+S21902B819B04CE20050A0E3004093E50360A0E1050054E1150077
+S21902B82E000A7AF8FFEB0C0094E9000063E0020050E10C00008D
+S21902B8433A000055E30200000A003094E5003085E5010000EA3D
+S21902B858003094E5003086E5100094E50FE0A0E10CF094E50022
+S21902B86D4096E50050A0E3010000EA0450A0E1004094E50000B8
+S21902B88254E3E9FFFF1A70A81BE9C48703000DC0A0E1F0D92DC4
+S21902B897E90070A0E1045097E5B200D5E104B04CE244FCFFEB77
+S21902B8AC0040A0E1B000D5E141FCFFEB010050E3020B54033B5F
+S21902B8C100001A186085E20600A0E1EC809FE50420A0E308103C
+S21902B8D6A0E192F4FFEB000050E33300001AB600D5E134FCFF4A
+S21902B8EBEB010050E31C00001A0200A0E330FCFFEB0E4085E29C
+S21902B9000410A0E1B600C5E10420A0E30600A0E148F2FFEB12D6
+S21902B9156085E20600A0E1085085E20510A0E10620A0E342F296
+S21902B92AFFEB0400A0E10810A0E10420A0E33EF2FFEB0500A093
+S21902B93FE17C109FE50620A0E33AF2FFEB1C30A0E3BC30C7E1D9
+S21902B9540700A0E168209FE50610A0E1EDFBFFEB120000EAB628
+S21902B96900D5E113FCFFEB020050E30E00001A4C409FE5003076
+S21902B97E94E5000053E30A00000A0E1085E2080094E50420A020
+S21902B993E363F4FFEB006050E20400001A081085E2040094E5C8
+S21902B9A80620A0E321F2FFEB006084E50700A0E155FBFFEBF062
+S21902B9BDA91BE910390300B0F7030006080000C88703000DC09E
+S21902B9D2A0E1F0DF2DE90420A0E304B04CE208D04DE200A0A023
+S21902B9E7E114519FE50180A0E10510A0E14BF4FFEB004050E247
+S21902B9FC0500001A0800A0E1FC109FE50620A0E309F2FFEB0465
+S21902BA1100A0E14D0000EA2C00A0E31CFBFFEB007050E204000B
+S21902BA26001A470000EA0700A0E137FBFFEB0400A0E14400004C
+S21902BA3BEA044097E50100A0E3DDFBFFEBB600C4E10100A0E320
+S21902BA50DAFBFFEBB000C4E1020BA0E3D7FBFFEB0510A0E106DE
+S21902BA6560A0E3B200C4E10450A0E30460C4E50520A0E10550AC
+S21902BA7AC4E50E0084E2ECF1FFEB080084E278109FE50620A08C
+S21902BA8FE1E8F1FFEB180084E20A10A0E10520A0E1E4F1FFEB79
+S21902BAA4FF30A0E330304BE52F304BE52E304BE52D304BE52C6E
+S21902BAB9304BE52B304BE544209FE5016086E2048082E530902A
+S21902BACE4BE208A082E5FE3043E2003082E50280A0E11C30A047
+S21902BAE3E3BC30C7E10700A0E11C209FE50910A0E188FBFFEB81
+S21902BAF8C8F7FFEB0050A0E1070000EA10390300B0F70300C809
+S21902BB0D8703000608000043FBFFEB004098E5000054E3C1FFA8
+S21902BB22FF0ABDF7FFEB000065E0F90050E3F7FFFF9A0630A08A
+S21902BB37E1016046E2000053E3E6FFFFCA0700A0E1F1FAFFEB47
+S21902BB4C0000E0E3F0AF1BE90DC0A0E1F0DD2DE904B04CE20064
+S21902BB6180A0E10150A0E1A0A09FE50070A0E30A60A0E108004B
+S21902BB76A0E10640A0E10410A0E10420A0E3E7F3FFEB003050EB
+S21902BB8BE20E00000A0C6084E2017087E20F0057E3F4FFFFDAE3
+S21902BBA00500A0E10810A0E10420A0E3A1F1FFEB0800A0E104BA
+S21902BBB51085E284FFFFEB000050E3050000AA0000E0E3F0AD4E
+S21902BBCA1BE9070096E8070085E80300A0E1F0AD1BE930E09F8E
+S21902BBDFE500C09EE5070095E88C308CE003318AE0070083E866
+S21902BBF401C08CE200C08EE510005CE30030A00300308E0500EE
+S21902BC0900A0E3F0AD1BE9D4870300343903000DC0A0E1F0DF10
+S21902BC1E2DE904B04CE204D04DE20050A0E10180A0E164419FF8
+S21902BC33E50260A0E12CC014E50390A0E100005CE30A30A01308
+S21902BC483F00001A0100A0E35AFBFFEB0000C4E52004A0E10175
+S21902BC5D00C4E50500A0E10030D0E5022084E2000053E30300F6
+S21902BC72000A0130C2E40130F0E5000053E3FBFFFF1A0030A0B6
+S21902BC87E30130C2E4030056E108019F050300000A010056E3B9
+S21902BC9C0A30A0132900001AF8009FE50030D0E5F4709FE50013
+S21902BCB10053E30300000A0130C2E40130F0E5000053E3FBFF27
+S21902BCC6FF1A0050A0E3D8609FE50510A0E10050C2E50600A087
+S21902BCDBE10C20A0E388F1FFEB144046E201A0A0E3BAA1C4E1BA
+S21902BCF00500A0E126FBFFEB140084E5003097E5B000D7E10A0C
+S21902BD053083E0003087E52BFBFFEBB801C4E1B430D8E10500E3
+S21902BD1A53E10200001A4500A0E325FBFFEBB400C8E1180086F0
+S21902BD2FE20820A0E174109FE50630A0E19B0E00EB000050E3E7
+S21902BD44030000AA0930A0E3003089E50000E0E31D0000EA4CC6
+S21902BD59309FE514A003E50C5084E50060E0E3106084E5290094
+S21902BD6E4BE2085084E50A10A0E1045084E50920A0E11B0000AE
+S21902BD83EB010050E30900000A18309FE5145003E50000E0E397
+S21902BD980C0000EAC088030048280300542803003C390300A83C
+S21902BDAD88030005020000343294E50500A0E10C2094E50130AD
+S21902BDC243E2343284E5012082E20C2084E5F0AF1BE90DC0A047
+S21902BDD7E100D82DE90000A0E308309FE504B04CE2000083E5F8
+S21902BDEC00A81BE9948803000DC0A0E1F0DF2DE904B04CE21843
+S21902BE01D04DE234000BE50030A0E33C300BE538100BE5028039
+S21902BE16A0E10C629FE5010053E1870000AA2C5046E20C3095C2
+S21902BE2BE5000053E3150000DA34001BE538C01BE53C201BE569
+S21902BE40341295E50C4062E0040053E10340A0B10420A0E1F730
+S21902BE55F0FFEB34C01BE5343295E504C08CE034C00BE50C20E3
+S21902BE6A95E5043083E0343285E5022064E00C2085E53C101B78
+S21902BE7FE5041081E03C100BE5690000EA103095E5020C53E3C0
+S21902BE946A00003A0130A0E388019FE50020A0E330300BE5201A
+S21902BEA99085E22C200BE514A085E274119FE530304BE2003069
+S21902BEBE8DE50920A0E10A30A0E17F0E00EB004050E20470A093
+S21902BED3E31C0000AA043095E5013083E2043085E50F0053E383
+S21902BEE8020000CA083095E5000053E30100001A0830A0E3476D
+S21902BEFD0000EA0700A0E1ADFAFFEB0000C6E52004A0E10100D5
+S21902BF12C6E5B800D5E1A8FAFFEB0200C6E50710A0E12004A065
+S21902BF27E10300C6E50920A0E1F4009FE50A30A0E11C0E00EB7D
+S21902BF3C000050E33B0000AA0930A0E3340000EA0030D6E5010B
+S21902BF5100D6E5000483E198FAFFEB030050E32000001A023093
+S21902BF66D6E50300D6E5000483E192FAFFEB083095E501308302
+S21902BF7BE2030050E10500001A044044E2104085E50C4085E59B
+S21902BF90043086E2343285E5080085E50700A0E186FAFFEB00C5
+S21902BFA500C6E52004A0E10100C6E5B800D5E181FAFFEB0200AF
+S21902BFBAC6E50710A0E12004A0E10300C6E50920A0E158009F34
+S21902BFCFE50A30A0E1F50D00EB000050E3140000AA0930A0E31C
+S21902BFE40D0000EA0030D6E50100D6E5000483E171FAFFEB05E1
+S21902BFF90050E30600001A0230D6E50300D6E5000483E16BFA61
+S21902C00EFFEB000088E50000E0E30A0000EA0B30A0E300308892
+S21902C023E50000E0E3060000EAC0880300050200003C201BE5BB
+S21902C03838301BE5030052E178FFFFBA3C001BE5F0AF1BE90D32
+S21902C04DC0A0E100D82DE9010040E204B04CE20B0050E300F174
+S21902C0629F97230000EA98C00200A0C00200A8C00200B0C002E7
+S21902C07700B8C00200C0C00200C8C00200D0C00200D8C00200FB
+S21902C08CE0C00200E8C00200F0C0020060009FE500A81BE95CAE
+S21902C0A1009FE500A81BE958009FE500A81BE954009FE500A84B
+S21902C0B61BE950009FE500A81BE94C009FE500A81BE948009F87
+S21902C0CBE500A81BE944009FE500A81BE940009FE500A81BE9E4
+S21902C0E03C009FE500A81BE938009FE500A81BE934009FE500B8
+S21902C0F5A81BE930009FE500A81BE96C2803007C28030090282D
+S21902C10A0300B4280300CC280300E0280300F4280300042903E6
+S21902C11F001829030034290300482903005C2903005C280300DD
+S21902C1340DC0A0E1F0DF2DE904B04CE20040A0E10190A0E10007
+S21902C149A0A0E30A80A0E10160A0E30070A0E301C0D4E40A5002
+S21902C15EA0E307005CE13500000A30005CE30030A0130130A09C
+S21902C17303030016E10A00000A0030D4E5411043E2202083E29B
+S21902C188FF2002E2190051E30230A091780053E30200001A100E
+S21902C19D50A0E3014084E201C0D4E400E0A0E30E60A0E1301001
+S21902C1B24CE2FF0001E241204CE2FF3002E2050053E30900502B
+S21902C1C7830200009A61304CE2050053E30000008A01E0A0E355
+S21902C1DC00005EE31200000A0000A0E3FF3001E2090053E30115
+S21902C1F100A0910600009A61304CE2050053E357004C92020030
+S21902C206009AFF3002E2050053E337004C92050050E1040000E5
+S21902C21BAA01C0D4E4950727E000005CE3CEFFFF1A030000EA2F
+S21902C2302E005CE30100000A0000A0E3F0AF1BE9033068E28354
+S21902C24531A0E117A38AE1018088E2030058E3BDFFFFDA0A003E
+S21902C25AA0E1CCF9FFEB000089E50100A0E3F0AF1BE90DC0A096
+S21902C26FE110D82DE90010A0E108D04DE20230D1E528409FE568
+S21902C28400308DE50320D1E504208DE50020D1E50130D1E504CC
+S21902C299B04CE210109FE50400A0E182F1FFEB0400A0E101009F
+S21902C2AE00EACC8A03007829030010A81BE90DC0A0E1F0D82D8E
+S21902C2C3E904B04CE200E0A0E108C09EE5FF1001E204609BE512
+S21902C2D80250A0E1000096E50370A0E108208EE2140092E804DE
+S21902C2ED4082E000C08CE0140000EA010052E10E00001A0230DB
+S21902C302DCE508009EE502E093E20500000A0E10A0E10030DCC2
+S21902C317E5011051E20130C5E402C08CE2FAFFFF1A00E087E579
+S21902C32C0C3060E0003086E50100A0E3F0A81BE90230DCE58348
+S21902C34130A0E1043083E203C08CE004005CE10300002A0020D9
+S21902C356DCE5FF3002E2FF0053E3E4FFFF1A0000A0E3F0A81B90
+S21902C36BE90DC0A0E100D82DE9083090E5FF2002E20120C3E716
+S21902C38004B04CE200A81BE90DC0A0E100D82DE90610A0E3003E
+S21902C3952090E504B04CE201C0D2E45C31A0E1010013E3010098
+S21902C3AA000A0130D2E4A32382E0011051E2F8FFFF5A0020802A
+S21902C3BFE500A81BE90DC0A0E100D82DE9002090E50130D2E419
+S21902C3D404B04CE21C1003E21C0051E301208212033003E2033A
+S21902C3E90053E301208212002080E500A81BE90DC0A0E1F0DFFF
+S21902C3FE2DE904B04CE20040A0E30090A0E100C099E50460A015
+S21902C413E10120DCE401E0A0E1603002E2A332A0E14430CEE5F8
+S21902C428800012E34100000A0120DCE40470A0E10F3002E2013E
+S21902C43D3083E240308EE5030057E13A0000AA303002E223A243
+S21902C452A0E12283A0E10750A0E103005AE30AF19F97130000CB
+S21902C467EAB8C4020078C4020080C4020094C402000160DCE452
+S21902C47C0D0000EA0120DCE50030DCE5026483E102C08CE208D8
+S21902C4910000EA0300DCE50020DCE50230DCE50110DCE5002C0F
+S21902C4A682E10338A0E1013483E1036082E104C08CE20E6085D7
+S21902C4BBE7030058E308F19F97130000EA18C50200D8C4020097
+S21902C4D0E0C40200F4C402000140DCE40D0000EA0120DCE50016
+S21902C4E530DCE5024483E102C08CE2080000EA0300DCE500209A
+S21902C4FADCE50230DCE50110DCE5002C82E10338A0E10134839D
+S21902C50FE1034082E104C08CE2014084E220308EE2054083E741
+S21902C524017087E240309EE5045085E2030057E1C8FFFFBA00B8
+S21902C539C089E5F0AF1BE90DC0A0E130D82DE904B04CE204D0F3
+S21902C54E4DE200C0A0E118000BE50C10A0E10130D1E40250A0E4
+S21902C563E1FF3003E218100BE51B0053E30800000A18C00BE584
+S21902C57810009FE510109FE50020DCE5B9EEFFEB0000A0E32456
+S21902C58D0000EA84290300A8290300010081E218000BE5012097
+S21902C5A2D1E5011080E218100BE53F3002E20030C5E58000127D
+S21902C5B7E30300000A0130D0E50130C5E5012081E218200BE50B
+S21902C5CC18301BE50140D3E40240C5E518300BE5010014E301F6
+S21902C5E100000A18004BE266FFFFEB020014E30100000A180084
+S21902C5F64BE262FFFFEB040014E30100000A18004BE26DFFFFFB
+S21902C60BEB080014E30200000A18004BE2041085E275FFFFEBFF
+S21902C6200100A0E330A81BE90DC0A0E100D82DE904B04CE20080
+S21902C635C0A0E10130DCE402E0A0E11A0053E30500000A900065
+S21902C64A9FE590109FE501205CE585EEFFEB0000A0E300A81B27
+S21902C65FE901C08CE20100DCE40030A0E301C08CE200308EE561
+S21902C674031010E20500004A0320A0E10130DCE7022483E10133
+S21902C6891051E2FBFFFF5A00208EE5033000E2013083E203C0FE
+S21902C69E8CE00010A0E33C3000E22331A0E1013083E204308E06
+S21902C6B3E5030051E1060000AA08008EE20130DCE40130C0E760
+S21902C6C804209EE5011081E2020051E1F9FFFFBA0100A0E300D2
+S21902C6DDA81BE984290300BC2903000DC0A0E100D82DE90010B1
+S21902C6F250E204B04CE20300000A10009FE55AEEFFEB0000A0A5
+S21902C707E300A81BE904009FE500A81BE9CC290300EC8A0300E2
+S21902C71C0DC0A0E130D82DE904B04CE20050A0E31C409FE50000
+S21902C7315084E50400A0E1F4E0FFEB2C4084E2015085E2000066
+S21902C74655E3F8FFFFDA30A81BE9EC8A03000DC0A0E100D82D27
+S21902C75BE904B04CE235E1FFEB00A81BE90DC0A0E100D82DE90F
+S21902C77004B04CE262E1FFEB00A81BE90DC0A0E110D82DE94066
+S21902C785409FE51C3094E504B04CE2000053E30100000A0000EC
+S21902C79AA0E310A81BE9030084E85CE1FFEB000050E305000076
+S21902C7AF1A083094E50120A0E31C2084E5003063E2103084E53C
+S21902C7C410A81BE910A81BE990F703000DC0A0E100D82DE93CDF
+S21902C7D9209FE50010A0E11C3092E504B04CE2000053E3010033
+S21902C7EE001A0700A0E300A81BE9143092E5030051E1030000EC
+S21902C8033A183092E50000A0E3030051E10000003A0100A0E3AA
+S21902C81800A81BE990F703000DC0A0E100D82DE930009FE504DA
+S21902C82DB04CE21C3090E502C0A0E1000053E30500000A143084
+S21902C84290E5003081E5182090E500208CE50000A0E300A81B4B
+S21902C857E90700A0E300A81BE990F703000DC0A0E100D82DE9E0
+S21902C86C2C209FE51C3092E504B04CE2000053E30500000A08EE
+S21902C8813092E5003080E50C2092E5002081E50000A0E300A80B
+S21902C8961BE90700A0E300A81BE990F703000DC0A0E1F0DF2D78
+S21902C8ABE904B04CE200A0A0E30050A0E10180A0E1F8C09FE574
+S21902C8C00290A0E11C309CE50C70A0E10A0053E10100001A071F
+S21902C8D500A0E3F0AF1BE9006097E5D8109FE5D8209FE5060057
+S21902C8EAA0E1022061E050EEFFEB0E02A0E3021A80E220209045
+S21902C8FFE4000031E1FCFFFF1A0000A0E3160F07EE9A0F07EED8
+S21902C914101F11EE011AC1E3101F01EE0010A0E3151F07EE0040
+S21902C92900A0E10000A0E10000A0E10000A0E10000A0E100006D
+S21902C93EA0E1103097E5034005E00410A0E1085085E070009F17
+S21902C953E50520A0E1E3EFFFEB68809FE5040000EA083097E573
+S21902C96860009FE50130C3E3034084E0DCEFFFEB050054E1065C
+S21902C97D00002A0400A0E10FE0A0E106F0A0E137E1FFEB00A066
+S21902C99250E2F2FFFF0A004089E5101F11EE011A81E30310816E
+S21902C9A7E3101F01EE0800A0E1CDEFFFEB0A00A0E1F0AF1BE916
+S21902C9BC90F7030008DD020024DE0200E8290300042A030000A5
+S21902C9D12A03000DC0A0E1F0DF2DE904B04CE204D04DE2027093
+S21902C9E6A0E10090A0E30050A0E194C09FE50160A0E11C209C3E
+S21902C9FBE50CA0A0E12C300BE5090052E10700A0033F00000A93
+S21902CA1000809AE574109FE574209FE50800A0E1022061E003FC
+S21902CA25EEFFEB0E02A0E3021A80E2202090E4000031E1FCFF4B
+S21902CA3AFF1A0000A0E3160F07EE9A0F07EE101F11EE011AC182
+S21902CA4FE3101F01EE0010A0E3151F07EE0000A0E10000A0E10C
+S21902CA640000A0E10000A0E10000A0E10000A0E11C009FE5060C
+S21902CA7910A0E1072086E00530A0E198EFFFEB090000EA90F7E2
+S21902CA8E030024DE020064DF0200082A030070009FE50770643C
+S21902CAA3E090EFFFEB0130C4E3035085E0036086E0000057E39B
+S21902CAB80D0000DA0500A0E108309AE50610A0E1030057E10765
+S21902CACD40A0B10340A0A10420A0E10FE0A0E108F0A0E1E2E0E8
+S21902CAE2FFEB009050E2EBFFFF0A2C301BE5005083E5101F1145
+S21902CAF7EE011A81E3031081E3101F01EE0C009FE577EFFFEB41
+S21902CB0C0900A0E1010000EA002A0300042A0300F0AF1BE90D8A
+S21902CB21C0A0E1F0DF2DE904B04CE200A0A0E30050A0E101807B
+S21902CB36A0E1F8C09FE50290A0E11C309CE50C70A0E10A0053EC
+S21902CB4BE10100001A0700A0E3F0AF1BE9006097E5D8109FE55D
+S21902CB60D8209FE50600A0E1022061E0B1EDFFEB0E02A0E30236
+S21902CB751A80E2202090E4000031E1FCFFFF1A0000A0E3160FA6
+S21902CB8A07EE9A0F07EE101F11EE011AC1E3101F01EE0010A041
+S21902CB9FE3151F07EE0000A0E10000A0E10000A0E10000A0E16A
+S21902CBB40000A0E10000A0E1103097E5034005E00410A0E108E2
+S21902CBC95085E070009FE50520A0E144EFFFEB68809FE5040074
+S21902CBDE00EA083097E560009FE50130C3E3034084E03DEFFF10
+S21902CBF3EB050054E10600002A0400A0E10FE0A0E106F0A0E165
+S21902CC0898E0FFEB00A050E2F2FFFF0A004089E5101F11EE0105
+S21902CC1D1A81E3031081E3101F01EE0800A0E12EEFFFEB0A004E
+S21902CC32A0E1F0AF1BE990F703002CE0020004E10200282A03EE
+S21902CC4700042A0300002A03000DC0A0E1F0DF2DE904B04CE25E
+S21902CC5C00A0A0E30050A0E10180A0E100C19FE50290A0E11C52
+S21902CC71309CE50C60A0E10A0053E10100001A0700A0E3F0AF87
+S21902CC861BE9007096E5E0109FE5E0209FE50700A0E1022061A0
+S21902CC9BE065EDFFEB0E02A0E3021A80E2202090E4000031E18A
+S21902CCB0FCFFFF1A0000A0E3160F07EE9A0F07EE101F11EE01EA
+S21902CCC51AC1E3101F01EE0010A0E3151F07EE0000A0E100003A
+S21902CCDAA0E10000A0E10000A0E10000A0E10000A0E1103096E3
+S21902CCEFE5034005E00410A0E1085085E078009FE50520A0E128
+S21902CD04F8EEFFEB70809FE5040000EA083096E568009FE50141
+S21902CD1930C3E3034084E0F1EEFFEB050054E10800002A081034
+S21902CD2E96E50C2096E50400A0E10FE0A0E107F0A0E14AE0FF31
+S21902CD43EB00A050E2F0FFFF0A004089E5101F11EE011A81E3C4
+S21902CD58031081E3101F01EE0800A0E1E0EEFFEB0A00A0E1F06E
+S21902CD6DAF1BE990F7030004E10200A8E20200402A0300042A5F
+S21902CD820300002A03000DC0A0E100D82DE904B04CE20B0050EC
+S21902CD97E300F19F97210000EAD0CD0200E8CD0200F0CD020056
+S21902CDACF8CD020000CE020008CE020010CE020018CE0200280C
+S21902CDC1CE0200D8CD0200E0CD020020CE020058009FE500A8BC
+S21902CDD61BE954009FE500A81BE950009FE500A81BE94C009F4E
+S21902CDEBE500A81BE948009FE500A81BE944009FE500A81BE9AF
+S21902CE0040009FE500A81BE93C009FE500A81BE938009FE5007E
+S21902CE15A81BE934009FE500A81BE930009FE500A81BE92C0065
+S21902CE2A9FE500A81BE9582A0300782A03009C2A0300C02A03DC
+S21902CE3F00D82A0300F02A03000C2B0300242B0300342B0300C7
+S21902CE54582B03007C2B0300A02B03000DC0A0E100D82DE90088
+S21902CE693090E5000053E104B04CE20500000A043090E500102A
+S21902CE7E83E5043090E5090081E8041080E500A81BE904108359
+S21902CE93E5001083E5043081E5003081E500A81BE90DC0A0E1FC
+S21902CEA800D82DE90010A0E1000091E504B04CE2010050E10461
+S21902CEBD00000A003090E5003081E5002090E5041082E500A85C
+S21902CED21BE90000A0E300A81BE90DC0A0E170D82DE93C309F5A
+S21902CEE7E53C209FE53C509FE5043083E504B04CE2003083E544
+S21902CEFC0F40A0E3042082E50260A0E1002082E50600A0E105C7
+S21902CF1110A0E1D1FFFFEB615E85E2014054E2F9FFFF5A70A8B3
+S21902CF261BE9208B0300188B0300288B03000DC0A0E130D82D5E
+S21902CF3BE90620A0E304B04CE20050A0E1100085E20140A0E15C
+S21902CF50B8ECFFEB0410A0E118009FE50620A0E3B4ECFFEB10C3
+S21902CF65309FE5005083E50500A0E1020000EB30A81BE9B0F74E
+S21902CF7A0300BCF703000DC0A0E100D82DE90030A0E110108055
+S21902CF8FE204B04CE200C093E50020A0E30FE0A0E100F09CE506
+S21902CFA400A81BE90DC0A0E1F0DF2DE944319FE504B04CE2882F
+S21902CFB9D04DE23CC19FE50540A0E34C8093E50090A0E100506F
+S21902CFCE9CE50270A0E1AC100BE5000058E31000000A0850A0DA
+S21902CFE3E100C095E514219FE524309CE528308CE50C3095E50A
+S21902CFF824208CE5000053E30700001A0500A0E1F8109FE503FC
+S21902D00D20A0E10FE0A0E100F09CE50C3095E5013083E30C30FC
+S21902D02285E5D0609FE50A0000EA003095E50500A0E10FE0A021
+S21902D037E11CF093E5C8009FE5483096E5014044E20FE0A0E162
+S21902D04C03F0A0E1000054E3370000DA003095E50500A0E10FCD
+S21902D061E0A0E10CF093E5000050E3EEFFFF0AA8900BE50EA0DF
+S21902D076A0E3A4A00BE5AC301BE59C700BE584209FE584009FC4
+S21902D08BE5A0300BE50060A0E1001092E50030A0E3003080E534
+S21902D0A0030051E10B00000AA60B00EB0040A0E160009FE50CDD
+S21902D0B5EEFFEB0900A0E10A10A0E15EF0FFEBAC001BE5071067
+S21902D0CAA0E15BF0FFEB0400A0E1AB0B00EB0500A0E1A8104BE5
+S21902D0DFE200C095E50220A0E300608DE50E3087E20FE0A0E18B
+S21902D0F410F09CE50B0000EA50000000BCF7030040390300B078
+S21902D109F70300400D0300B8F7030028EC0300B02B03000020F9
+S21902D11E95E50500A0E10FE0A0E11CF092E5003096E500005304
+S21902D133E3F8FFFF0A000058E30400000A003095E5282093E54A
+S21902D148242083E50010A0E3281083E5F0AF1BE90DC0A0E100FB
+S21902D15DD82DE930309FE5030051E104B04CE200C0A0E102008A
+S21902D172001A0130A0E3003081E500A81BE900309CE50C00A034
+S21902D187E128C093E50FE0A0E108F09CE500A81BE928EC03009F
+S21902D19C0DC0A0E1F0D92DE9DC309FE5DC209FE504B04CE20058
+S21902D1B170A0E14C6093E50180A0E1005092E5000056E310003B
+S21902D1C6000A0650A0E100C095E5B8209FE524309CE528308C1D
+S21902D1DBE50C3095E524208CE5000053E30700001A0500A0E10B
+S21902D1F09C109FE50320A0E10FE0A0E100F09CE50C3095E501B7
+S21902D2053083E30C3085E5003095E50500A0E10FE0A0E11CF025
+S21902D21A93E574009FE51FFFFFEB004050E20D00000A0700A050
+S21902D22FE10C1084E20E20A0E3FEEBFFEB0800A0E1082094E5D2
+S21902D2441A1084E20E2042E2F9EBFFEB44009FE50410A0E100C1
+S21902D259FFFFEB080094E5000000EA0400A0E1000056E30400A3
+S21902D26E000A003095E5282093E5242083E50010A0E328108336
+S21902D283E5F0A91BE950000000BCF7030040390300B0F70300E1
+S21902D298208B0300188B03000DC0A0E1F0D92DE904B04CE20017
+S21902D2AD50A0E30280A0E1080055E10160A0E10D0000AA347014
+S21902D2C29FE58541A0E1060094E7001097E5064084E004209416
+S21902D2D7E5D6EBFFEB003097E5042094E5015085E2023083E015
+S21902D2EC003087E5080055E1F2FFFFBAF0A91BE92CEC03000DDD
+S21902D301C0A0E1F0D92DE904B04CE280D04DE20060A0E1E800C6
+S21902D3169FE50170A0E1E0FEFFEB008050E20C5088120050A025
+S21902D32B03A0500BE50600A0E19C700BE5A0104BE2003096E5F8
+S21902D3400120A0E30FE0A0E114F093E5B4209FE5003092E50042
+S21902D3550053E30B00000AF90A00EB0040A0E1A0009FE55FED52
+S21902D36AFFEB0500A0E10E10A0E3B1EFFFEB0E0085E20E104732
+S21902D37FE2AEEFFFEB0400A0E1FE0A00EB003096E5282093E546
+S21902D394000052E31200000A1E1085E268009FE50420A0E3DE26
+S21902D3A9EDFFEB000050E30C00000A58309FE5002096E5005051
+S21902D3BE83E5144092E528C092E548309FE50600A0E114308278
+S21902D3D3E50710A0E10FE0A0E104F09CE5003096E5144083E575
+S21902D3E8000058E30B00000A087088E520009FE50810A0E19720
+S21902D3FDFEFFEB060000EA188B0300B8F70300C02B03001039AD
+S21902D41203002CEC0300A0D20200208B0300F0A91BE90DC0A0B4
+S21902D427E100D82DE914309FE5000093E5002090E504B04CE263
+S21902D43C0FE0A0E120F092E500A81BE9BCF703000DC0A0E1002D
+S21902D451D82DE93C009FE504B04CE222EDFFEB34009FE534103A
+S21902D4669FE534209FE534309FE51DEDFFEB30009FE51BEDFFB7
+S21902D47BEB2C009FE52C309FE52CC09FE5001093E500209CE581
+S21902D49015EDFFEB00A81BE9D43503002C2D0300442D030060AC
+S21902D4A52D0300082C0300702D03009C2D030058F80300C4F78A
+S21902D4BA03000DC0A0E1F0DF2DE90000E0E304D04DE244429F35
+S21902D4CFE5343094E504B04CE20FE0A0E103F0A0E12C000BE59D
+S21902D4E40060A0E3343094E50600A0E10FE0A0E103F0A0E11CE5
+S21902D4F9029FE51C329FE51C229FE5006083E50180A0E30080B1
+S21902D50E82E5483094E50FE0A0E103F0A0E104229FE504129F66
+S21902D523E5006082E50234A0E3003081E5F8519FE5EF0100EB49
+S21902D5380600A0E10610A0E1C1FFFFEBE8319FE5E8A19FE5E87D
+S21902D54D719FE5030055E10340A0E10300000A0FE0A0E104F05F
+S21902D56295E4040055E1FBFFFF1A00E09AE500005EE335000012
+S21902D5770AC0219FE5C0419FE5C0119FE50E90A0E1003092E589
+S21902D58C0400A0E1832263E0023183E08351A0E19125CCE0C504
+S21902D5A12FA0E14C2362E00210A0E1823262E0032182E082215B
+S21902D5B645E0CBECFFEB0030A0E300308AE5090055E31A0000E6
+S21902D5CBDA0700A0E1011CA0E30A20A0E327EEFFEB0060A0E1B5
+S21902D5E0010056E30A00001A58319FE50400A0E19325C1E0C521
+S21902D5F52FA0E1412362E00210A0E1823262E0032182E0822112
+S21902D60A45E0B6ECFFEBEBFFFFEA010076E30600001A28319F0E
+S21902D61FE5002093E5000052E30000000AD80A00EB0A5045E2E5
+S21902D634E2FFFFEA020076E30200001A0030A0E300308AE50047
+S21902D6490000EA00908AE5000058E30200000AF0009FE50080A1
+S21902D65EA0E3A1ECFFEB0700A0E1011CA0E3FA20A0E301EEFF03
+S21902D673EB0060A0E1010076E30500001AC4309FE5002093E546
+S21902D688000052E3EFFFFF0ABF0A00EBEDFFFFEA000056E30791
+S21902D69D00001A70209FE52C001BE5343092E50FE0A0E103F0D9
+S21902D6B2A0E198009FE50ADDFFEBE3FFFFEA0700A0E19DECFF13
+S21902D6C7EB000050E30F0000DA80509FE50700A0E17C409FE524
+S21902D6DC0510A0E10420A0E1F7EEFFEB003050E20400000A00B8
+S21902D6F10095E50410A0E10FE0A0E10CF093E5020000EA5400EA
+S21902D7069FE5001094E576ECFFEB0180A0E3CDFFFFEA500000A5
+S21902D71B00400D0300C0F703005CF8030058F80300C4F7030080
+S21902D730E43B0300EC3B030064F8030030EC0300C8F70300A8A9
+S21902D7452D0300D34D62109CF90300EC2D03000447020054F8B9
+S21902D75A0300D0F70300F82D0300F0AF1BE90DC0A0E110D82DB8
+S21902D76FE9020050E304B04CE20140A0E15400001A040094E5F1
+S21902D78454119FE59AECFFEB000050E31000001A00C00FE10023
+S21902D799400FE1C04084E304F029E1101F11EE011A81E303101F
+S21902D7AE81E3101F01EE101F11EE0F1081E3101F01EE00300FCF
+S21902D7C3E1C0400CE2C030C3E3043083E103F029E110A81BE994
+S21902D7D8040094E500119FE584ECFFEB000050E33500001A0047
+S21902D7EDC00FE100400FE1C04084E304F029E10E02A0E3021A2C
+S21902D80280E2202090E4000031E1FCFFFF1A0000A0E3160F071F
+S21902D817EE9A0F07EE101F11EE011AC1E3101F01EE0010A0E3CB
+S21902D82C151F07EE0000A0E10000A0E10000A0E10000A0E100B3
+S21902D84100A0E10000A0E1101F11EE0C10C1E3101F01EE0010AD
+S21902D856A0E3161F07EE0E02A0E3021A80E2202090E400003113
+S21902D86BE1FCFFFF1A0000A0E3160F07EE9A0F07EE0010A0E3DE
+S21902D880151F07EE151F08EE0000A0E10000A0E10000A0E100B6
+S21902D89500A0E10000A0E10000A0E10010A0E3161F07EE171F01
+S21902D8AA08EE00300FE1C0400CE2C030C3E3043083E103F02914
+S21902D8BFE110A81BE91C009FE5041094E506ECFFEB10A81BE9EB
+S21902D8D410009FE503ECFFEB10A81BE91C2E0300202E0300244D
+S21902D8E92E03003C2E03000DC0A0E170D82DE90030A0E304B072
+S21902D8FE4CE214D04DE21C300BE50350A0E11C304BE204308D83
+S21902D913E500508DE524309FE50C308DE50120A0E308208DE58D
+S21902D9280530A0E10FEFFFEB000050E30400001A08009FE5EA7E
+S21902D93DEBFFEB230000EA482E0300502E03001C001BE50000D6
+S21902D95250E30100000AF8EBFFEB0050A0E15C409FE55C309F92
+S21902D967E5030054E10360A0E11700000A1C001BE50130A0E3B2
+S21902D97C000050E30500000A001094E50520A0E146ECFFEB0002
+S21902D9910050E30030A0130130A003000053E30400000A20002C
+S21902D9A69FE5041094E5002094E5083094E5CCEBFFEB10408495
+S21902D9BBE2060054E1020000EA743A0300243B0300642E03009F
+S21902D9D0E7FFFF1A70A81BE90DC0A0E170D82DE904B04CE25042
+S21902D9E5D04DE20060A0E148404BE20400A0E14C304BE2003033
+S21902D9FA8DE550204BE204208DE50150A0E18C309FE56210A048
+S21902DA0FE308308DE50120A0E30030A0E3C7EEFFEB54304BE2C7
+S21902DA2400308DE558204BE204208DE530004BE264309FE56C28
+S21902DA3910A0E308308DE50120A0E30030A0E3BCEEFFEB023077
+S21902DA4EA0E300308DE50020A0E304208DE508208DE50600A01E
+S21902DA63E138309FE50510A0E10C308DE5012082E20430A0E15C
+S21902DA78BCEEFFEB000050E31000000A50301BE5000053E306F5
+S21902DA8D00001A10009FE594EBFFEB0A0000EA742E0300842E1B
+S21902DAA20300082C03008C2E030058301BE5000053E32030A0C3
+S21902DAB70354300B054C001BE554101BE5DDEDFFEB70A81BE93C
+S21902DACC0DC0A0E170D82DE904B04CE23CD04DE23C304BE2409C
+S21902DAE1204BE200308DE50040A0E104208DE530604BE26C3189
+S21902DAF69FE50600A0E108308DE50150A0E160319FE57710A051
+S21902DB0BE300C093E50120A0E344C00BE50030A0E387EEFFEB39
+S21902DB200120A0E300208DE544304BE204308DE50010A0E308D1
+S21902DB35108DE530319FE50400A0E10C308DE50510A0E106306E
+S21902DB4AA0E187EEFFEB000050E34700000A40301BE500005398
+S21902DB5FE30C00000A08019FE544101BE53C201BE55DEBFFEB42
+S21902DB7438004BE23C201BE50810A0E3823262E0032182E0823B
+S21902DB8921A0E1BAECFFEB020070E33700000A44301BE500C084
+S21902DB9E0FE100400FE1C04084E304F029E10E02A0E3021A80B7
+S21902DBB3E2202090E4000031E1FCFFFF1A0000A0E3160F07EEFD
+S21902DBC89A0F07EE101F11EE011AC1E3101F01EE0010A0E315F0
+S21902DBDD1F07EE0000A0E10000A0E10000A0E10000A0E1000014
+S21902DBF2A0E10000A0E1101F11EE0C10C1E3101F01EE0010A059
+S21902DC07E3161F07EE0E02A0E3021A80E2202090E4000031E11D
+S21902DC1CFCFFFF1A0000A0E3160F07EE9A0F07EE0010A0E315F5
+S21902DC311F07EE151F08EE0000A0E10000A0E10000A0E1000016
+S21902DC46A0E10000A0E10000A0E10010A0E3161F07EE171F0844
+S21902DC5BEE0300A0E1A0DBFFEB030000EAA42E030060F80300B9
+S21902DC70B42E0300C82E030070A81BE90DC0A0E110D82DE95002
+S21902DC85009FE504B04CE216EBFFEB48409FE548009FE54830E2
+S21902DC9A94E50FE0A0E103F0A0E13C009FE50FEBFFEB38009F96
+S21902DCAFE5482094E50FE0A0E102F0A0E100300FE100400FE160
+S21902DCC4C04084E304F029E11C209FE50130A0E3003082E5FED6
+S21902DCD9FFFFEA0C2F030050000000400D03001C2F030050C308
+S21902DCEE00000000039010A81BE90DC0A0E100D82DE904B04C8F
+S21902DD03E200A81BE90DC0A0E130D82DE904B04CE20040A0E167
+S21902DD18103F11EE2351A0E1015015E21000000A0E02A0E302B5
+S21902DD2D1A80E2202090E4000031E1FCFFFF1A160F07EE9A0FC1
+S21902DD4207EE0000A0E10000A0E10000A0E10000A0E10000A02C
+S21902DD57E10000A0E1101F11EE0C10C1E3101F01EE161F07EE18
+S21902DD6C94C09FE594E09FE594309FE594209FE5FE1404E20053
+S21902DD813081E58C309FE5002081E5003084E5000091E50E30DD
+S21902DD9600E00E0053E10100000A01C05CE2F9FFFF1A6C309FF9
+S21902DDABE56C209FE5033000E0002081E5000053E30B00000A83
+S21902DDC0043094E40128A0E3010073E30500001A042042E20031
+S21902DDD50052E3020000DA043094E4010073E3F9FFFF0A00001D
+S21902DDEA52E30000A003000055E30200000A101F11EE0F108133
+S21902DDFFE3101F01EE30A81BE9404B4C008000800050005000B4
+S21902DE1420002000D000D0007E007E00FF00FF000DC0A0E1F0DA
+S21902DE29D92DE904B04CE20060A0E10150A0E10240A0E100C0D6
+S21902DE3EA0E3103F11EE2371A0E1017017E21000000A0E02A0AE
+S21902DE53E3021A80E2202090E4000031E1FCFFFF1A160F07EE5E
+S21902DE689A0F07EE0000A0E10000A0E10000A0E10000A0E100FC
+S21902DE7D00A0E10000A0E1101F11EE0C10C1E3101F01EE161F46
+S21902DE9207EEAC309FE5AC809FE5FE0406E2003080E5070000E9
+S21902DEA7EAA0309FE5003080E5042096E4045085E20E0052E1F2
+S21902DEBC90C09F151700001A044044E2000054E3140000DA8006
+S21902DED1309FE580109FE5003080E5002095E5002086E500C0F3
+S21902DEE690E502E0A0E108300CE0080053E10600000A4C209FCD
+S21902DEFBE5011051E20700000A00C090E502300CE0020053E148
+S21902DF10F9FFFF1A44309FE503300CE0000053E3E0FFFF0A248B
+S21902DF25309FE5003080E5000057E30200000A101F11EE0F1004
+S21902DF3A81E3101F01EE0C00A0E1F0A91BE9500050008000807F
+S21902DF4F00FF00FF001099109910001000404B4C007E007E0073
+S21902DF640DC0A0E100D82DE904B04CE200E0A0E1103F11EE23B1
+S21902DF79C1A0E101C01CE21000000A0E02A0E3021A80E2202020
+S21902DF8E90E4000031E1FCFFFF1A160F07EE9A0F07EE0000A085
+S21902DFA3E10000A0E10000A0E10000A0E10000A0E10000A0E1FC
+S21902DFB8101F11EE0C10C1E3101F01EE161F07EE50209FE550D3
+S21902DFCD309FE50512A0E3003081E5012042E2000052E3FCFFDF
+S21902DFE2FFCA0020A0E3043091E4012082E20130CEE433005221
+S21902DFF7E3FAFFFF9A24309FE5003081E500005CE30200000AE0
+S21902E00C101F11EE0F1081E3101F01EE0000A0E300A81BE940BA
+S21902E0210D030098009800FF00FF000DC0A0E130D82DE904B085
+S21902E0364CE200E0A0E1FE440EE2A4509FE5103F11EE23C1A0C3
+S21902E04BE101C01CE21000000A0E02A0E3021A80E2202090E43A
+S21902E060000031E1FCFFFF1A160F07EE9A0F07EE0000A0E10045
+S21902E07500A0E10000A0E10000A0E10000A0E10000A0E1101FDB
+S21902E08A11EE0C10C1E3101F01EE161F07EE50109FE550309F70
+S21902E09FE550209FE5003084E54C309FE500208EE500308EE5BD
+S21902E0B4000094E5013000E0010053E10100000A015055E2F905
+S21902E0C9FFFF1A2C309FE5003084E500005CE30200000A101F30
+S21902E0DE11EE0F1081E3101F01EE30A81BE9404B4C00800080D3
+S21902E0F300500050006000600001000100FF00FF000DC0A0E163
+S21902E108F0DF2DE904B04CE280D04DE200E0A0E101A0A0E10230
+S21902E11D60A0E1103F11EE2371A0E1017017E21000000A0E020E
+S21902E132A0E3021A80E2202090E4000031E1FCFFFF1A160F07CA
+S21902E147EE9A0F07EE0000A0E10000A0E10000A0E10000A0E12C
+S21902E15C0000A0E10000A0E1101F11EE0C10C1E3101F01EE1683
+S21902E1711F07EEFE540EE20520A0E130309FE50010A0E30030EF
+S21902E18685E5060051E1100000AAA8004BE20180A0E103C0CABD
+S21902E19BE314409FE5004082E50E0052E10300001A0180C0E780
+S21902E1B0030000EA5000500098009800083092E50130C0E70C03
+S21902E1C52082E0011081E2060051E1F2FFFFBAB0109FE5B0C0B2
+S21902E1DA9FE5B0309FE5B0209FE500308EE500208EE500009522
+S21902E1EFE50C3000E00C0053E10100000A011051E2F9FFFF1A73
+S21902E2040520A0E10010A0E3060051E1150000AAA8804BE27405
+S21902E219909FE52AE1A0E10130D8E7014081E2000053E30A0075
+S21902E22E000A009082E550109FE55C309FE54CC09FE50030829D
+S21902E243E5000095E50C3000E00C0053E10100000A011051E2B5
+S21902E258F9FFFF1A0E2182E00410A0E1060051E1EBFFFFBA2C6C
+S21902E26D309FE5003085E5000057E30200000A101F11EE0F10B4
+S21902E28281E3101F01EE050000EA404B4C008000800060006078
+S21902E29700D000D00001000100FF00FF00F0AF1BE90DC0A0E1DA
+S21902E2AC00D82DE9030040E204B04CE2040050E300F19F9708FB
+S21902E2C10000EAD8E20200D8E20200D8E20200E0E20200E0E29D
+S21902E2D602000A00A0E300A81BE90200A0E300A81BE90500A01B
+S21902E2EBE300A81BE90DC0A0E100D82DE90C309FE5002093E5F4
+S21902E30004B04CE2440092E500A81BE908F703000DC0A0E10068
+S21902E315D82DE918309FE5002093E5440092E504B04CE20200FB
+S21902E32A50E30000A0130100A00300A81BE908F703000DC0A032
+S21902E33FE100D82DE90010A0E10F00A0E304B04CE224E1FFEBFF
+S21902E35400A81BE90DC0A0E110D82DE904B04CE20040A0E119F9
+S21902E36900A0E315E1FFEB0020A0E3244EA0E10F0054E304F164
+S21902E37E9F97560000EAC4E30200D0E30200D8E30200E4E30229
+S21902E39300ECE30200F4E3020000E402000CE402001CE40200EA
+S21902E3A830E4020040E4020060E4020080E40200ACE40200D40B
+S21902E3BDE40200DCE40200202FA0E1012002E2430000EA202F4B
+S21902E3D2A0E10D0000EAA02EA0E1012002E23E0000EAA02EA0CD
+S21902E3E7E1080000EAA02FA0E13A0000EA0020E0E1A22FA0E1A0
+S21902E3FC370000EA202EA0E1012002E2340000EA202EA0E10122
+S21902E4112022E2012002E2300000EA062200E2020252E3002049
+S21902E426A0130120A0032B0000EA062200E2022252E20120A02B
+S21902E43B13270000EA092200E2000052E30030A0130130A003A8
+S21902E450090252E30320A0110120A0031F0000EA092200E201C1
+S21902E4650252E30030A0130130A003020152E30320A011012080
+S21902E47AA003170000EA093200E2000053E309025313202FA02F
+S21902E48FE1012022E20030A0130130A003000053E30120021249
+S21902E4A40020A0030C0000EA093200E2010253E30201531320C4
+S21902E4B92FA0E10030A0130130A003000053E301200202012064
+S21902E4CEA013020000EA0120A0E3000000EA0020A0E30200A0C0
+S21902E4E3E110A81BE90DC0A0E130D82DE904B04CE20050A0E161
+S21902E4F80F0005E2B1E0FFEB0040A0E1100015E30200001A3E74
+S21902E50D3D05E2C303A0E1020000EA0F0C05E22004A0E1A8E06C
+S21902E522FFEB603005E2C332A0E1030053E303F19F9713000090
+S21902E537EA48E5020050E5020058E5020060E502001440A0E11D
+S21902E54C0D0000EA3440A0E10B0000EA5440A0E1090000EA00CA
+S21902E5610050E30600001AA440A0E11900A0E394E0FFEB0202E8
+S21902E57610E3023184E30340A011000000EA7440A0E10400A045
+S21902E58BE130A81BE90DC0A0E1F0D82DE904B04CE20040A0E1E8
+S21902E5A00150A0E1033305E2233DA0E1030053E303F19F97B973
+S21902E5B50000EAC8E5020048E70200FCE7020058E70200D82260
+S21902E5CA9FE5FF32C5E3020053E10200001A0F0005E279E0FF38
+S21902E5DFEBF0A81BE9047084E20F3A05E20F0A53E35200001AD4
+S21902E5F4B0329FE5B0229FE5033005E0020053E14D00000A0F9B
+S21902E6090805E22008A0E16CE0FFEB0060A0E1020415E3040044
+S21902E61E001A050AA0E1200AA0E1AEFFFFEB0040A0E103000030
+S21902E633EAFF4005E20F3C05E2A333A0E17443A0E11E3605E2BF
+S21902E648A33AA0E10F0053E303F19F97390000EA98E60200A0A6
+S21902E65DE60200A8E60200B0E60200B8E60200C0E60200DCE687
+S21902E672020000E7020040E7020040E7020040E7020040E702FD
+S21902E6870024E702002CE7020034E702003CE70200047006E0B9
+S21902E69C270000EA047026E0250000EA067064E0230000EA04FD
+S21902E6B17066E0210000EA047086E01F0000EA1900A0E33FE0EE
+S21902E6C6FFEBA00EA0E1010000E2043086E0007083E0180000B7
+S21902E6DBEA1900A0E338E0FFEBA00EA0E1010000E2063064E00F
+S21902E6F0000050E30370A011017043020F0000EA1900A0E32F3D
+S21902E705E0FFEBA00EA0E1010000E2043066E0000050E30370FC
+S21902E71AA01101704302060000EA047086E1040000EA0470A0AF
+S21902E72FE1020000EA0470C6E1000000EA0470E0E10700A0E13F
+S21902E744F0A81BE964219FE5023005E0020053E10100001A04A8
+S21902E7590084E2F0A81BE9010615E3FBFFFF0A0F3A05E20F0A57
+S21902E76E53E3F8FFFF1A0F4805E22408A0E111E0FFEB083080CB
+S21902E783E20F0854E30060A0110360A001010415E31600000A18
+S21902E798020415E30900001A020515E30300000A053AA0E12355
+S21902E7AD3AA0E1036086E00E0000EA053AA0E1233AA0E10660D0
+S21902E7C263E00A0000EA020515E30400000A050AA0E1200AA09D
+S21902E7D7E142FFFFEB006086E0030000EA050AA0E1200AA0E12C
+S21902E7EC3DFFFFEB066060E0000096E5F0A81BE9027415E21AA7
+S21902E80100001A010615E3D2FFFF0A020915E3D0FFFF0A0F48D6
+S21902E81605E22408A0E1E9DFFFEB083080E20F0854E30060A0B8
+S21902E82B110360A00107C0A0E10C20A0E178309FE5020505E2AD
+S21902E840031005E05132A0E1010013E301C08C12012082E20ED7
+S21902E8550052E3F9FFFFDA000050E30C618610E2FFFF1A04600D
+S21902E86A46E2E0FFFFEA0500A0E1B7FEFFEB000050E3B5FFFF97
+S21902E87F0AFF34C5E30311A0E1020515E33F0381E308008012C4
+S21902E89408008102000084E0F0A81BE90000A0E3F0A81BE910AE
+S21902E8A9FF2F010000BF0F00000F0110000002FFFF00000DC069
+S21902E8BEA0E170D82DE90118A0E14128A0E1211EA0E1041041C6
+S21902E8D3E204B04CE20060A0E1023086E2015083E30B0051E3F4
+S21902E8E801F19F973E0000EA20E90200ECE90200ECE90200EC1F
+S21902E8FDE90200ECE90200ECE90200ECE90200ECE90200ECE9E3
+S21902E91202004CE9020080E90200B8E902000228A0E1C8309F60
+S21902E927E52208A0E1033002E0470453E32C00001A780000E20E
+S21902E93CA001A0E1A0DFFFEB0050A0E1270000EA0238A0E10F88
+S21902E9510403E20002A0E12348A0E17DFEFFEB000050E320009A
+S21902E966000AFF3004E28300A0E1800014E3800BE011A00BE0F4
+S21902E97B11090000EA0238A0E1020313E32318A0E11600001ADA
+S21902E990813AA0E1A33AA0E18300A0E1010B11E3800AE011A0B2
+S21902E9A50AE011043080E2033086E0015083E30C0000EA3E1B26
+S21902E9BAE0E30228A0E1013802E02302A0E1010312E38004E0B5
+S21902E9CF11A004E011B230D6E1013003E0830080E1042080E26F
+S21902E9E4022086E0015082E30500A0E170A81BE9000087FF0DA4
+S21902E9F9C0A0E130D82DE90F00A0E304B04CE26EDFFFEB0040B8
+S21902EA0EA0E11900A0E36BDFFFEB200010E30600000A0400A0D4
+S21902EA23E1B010D0E1A3FFFFEB88309FE5000083E580109FE541
+S21902EA380F0000EA005094E50500A0E143FEFFEB000050E30616
+S21902EA4D00000A0400A0E10510A0E15C409FE5CBFEFFEB0000B5
+S21902EA6284E550109FE5030000EA48209FE5043084E20210A026
+S21902EA77E1003082E5004091E5010014E30600000A30309FE569
+S21902EA8C0120C4E3B000D2E128109FE5B000C3E1B010C2E130A0
+S21902EAA1A81BE91C309FE5002094E518109FE5002083E5001000
+S21902EAB684E530A81BE94C39030034ED0300BEBEFFFF30ED03B9
+S21902EACB00FEDEFFE70DC0A0E100D82DE944309FE50300A0E1B5
+S21902EAE0001093E504B04CE2000051E30B00000A010011E3046E
+S21902EAF500000A28209FE5B020D2E10130C1E3B020C3E1020061
+S21902EB0A00EA18309FE5002093E5002081E50030A0E3003080B8
+S21902EB1FE500A81BE94C39030034ED030030ED03000DC0A0E12F
+S21902EB3400D82DE904B04CE200A81BE90DC0A0E100D82DE90409
+S21902EB49B04CE200A81BE90DC0A0E100D82DE90F00A0E304B0A4
+S21902EB5E4CE218DFFFEB0C309FE5030050E10000A0130100A044
+S21902EB730300A81BE9104702000DC0A0E110D82DE90F00A0E3A0
+S21902EB8804B04CE20DDFFFEB0040A0E11900A0E30ADFFFEB2069
+S21902EB9D0010E302408412044084020F00A0E30410A0E10CDFB5
+S21902EBB2FFEB10A81BE90DC0A0E100D82DE964109FE504B04C6D
+S21902EBC7E260C09FE500209CE50030A0E3003081E5030052E18C
+S21902EBDC1100001A010010E30600000A00008CE540309FE50188
+S21902EBF100C0E3B020D0E1B420CCE1B030C0E1040000EA0000F4
+S21902EC068CE528209FE5003090E504308CE5002080E50300A043
+S21902EC1BE324E1FFEB0300A0E3F2E0FFEB00A81BE95039030091
+S21902EC3038ED0300BEBEFFFFFEDEFFE70DC0A0E100D82DE96CBC
+S21902EC45309FE504B04CE200C093E500005CE30100000A00009B
+S21902EC5AA0E300A81BE954209FE5001092E50130C1E3030050C8
+S21902EC6FE10E00001A010011E30200000AB430D2E1B030C0E167
+S21902EC84010000EA043092E5003080E50030A0E3003082E503FC
+S21902EC9900A0E304E1FFEB0300A0E3D2E0FFEB0100A0E300A8BF
+S21902ECAE1BE90C00A0E100A81BE95039030038ED03000DC0A0EC
+S21902ECC3E130D82DE984209FE50030A0E380509FE504B04CE225
+S21902ECD8001095E50040A0E1003082E5030051E10100000A01FD
+S21902ECED00A0E1D1FFFFEB003095E5000053E31300001A1900AA
+S21902ED02A0E3AFDEFFEB200010E30600000A013084E30030858B
+S21902ED17E53C209FE5B030D4E1B430C5E1B020C4E1040000EA99
+S21902ED2C004085E528209FE5003094E5043085E5002084E50382
+S21902ED4100A0E3DAE0FFEB0300A0E3A8E0FFEB30A81BE9503932
+S21902ED56030038ED0300BEBEFFFFFEDEFFE70DC0A0E100D82DE7
+S21902ED6BE910309FE5000093E504B04CE2000050E20100A0139F
+S21902ED8000A81BE938ED03000DC0A0E1F0D92DE90000A0E304EF
+S21902ED95B04CE20CD04DE289DEFFEB0040A0E10100A0E386DE7F
+S21902EDAAFFEB0070A0E10200A0E383DEFFEB0080A0E10300A0FE
+S21902EDBFE380DEFFEB0060A0E10D00A0E37DDEFFEB045090E58E
+S21902EDD41900A0E37ADEFFEB1F0000E2130050E30500001A0CD3
+S21902EDE900A0E375DEFFEB0010A0E10F00A0E37ADEFFEB0400E5
+S21902EDFE00EA0E00A0E36FDEFFEB0010A0E10F00A0E374DEFFD3
+S21902EE13EB010054E30C00000AFA0F54E30200A0E30F00000ACC
+S21902EE280400A0E10710A0E124304BE204308DE50820A0E100E1
+S21902EE3D508DE50630A0E1610100EB000050E30100001A0500A0
+S21902EE52A0E3030000EA24101BE50000A0E360DEFFEB0000A0B5
+S21902EE67E3F0A91BE90DC0A0E100D82DE9001090E50000A0E3CB
+S21902EE7C0C0081E51C30A0E31C3081E50820A0E3002081E50452
+S21902EE91B04CE2040081E5173043E2083081E5052042E20C209E
+S21902EEA681E500A81BE90DC0A0E100D82DE9000090E5FF10017D
+S21902EEBBE2203090E504B04CE2040013E30200001A203090E5D7
+S21902EED0040013E3FCFFFF0A141080E500A81BE90DC0A0E100A5
+S21902EEE5D82DE9000090E5203090E504B04CE2023013E20500DB
+S21902EEFA000A143090E50030C1E50420A0E31C2080E50100A07A
+S21902EF0FE300A81BE90300A0E100A81BE90DC0A0E130D82DE9BB
+S21902EF2404B04CE204D04DE20050A0E115404BE20500A0E1040F
+S21902EF3910A0E1E7FFFFEB000050E3FAFFFF0A15005BE530A8F9
+S21902EF4E1BE90DC0A0E170D82DE904B04CE20160A0E10240A051
+S21902EF63E10430A0E1014044E2000053E30050A0E10600000A7E
+S21902EF780110D6E40500A0E1C9FFFFEB0430A0E1014044E2005E
+S21902EF8D0053E3F8FFFF1A70A81BE90DC0A0E170D82DE904B0A6
+S21902EFA24CE20160A0E10240A0E10430A0E1014044E200005311
+S21902EFB7E30050A0E10600000A0500A0E1D4FFFFEB0430A0E182
+S21902EFCC014044E20100C6E4000053E3F8FFFF1A70A81BE90DA8
+S21902EFE1C0A0E1F0D82DE904B04CE20050A0E1043095E5016033
+S21902EFF6A0E13C709FE5033183E08340A0E1030000EA48309777
+S21902F00BE56400A0E30FE0A0E103F0A0E10500A0E10610A0E11C
+S21902F020AEFFFFEB000050E30200001A014044E2010074E3F33C
+S21902F035FFFF1AF0A81BE9500000000DC0A0E10E002DE910D861
+S21902F04A2DE910B04CE204309BE50040A0E3043043E203005380
+S21902F05FE303F19F971E0000EAA0F0020078F00200CCF00200C6
+S21902F074D8F0020054209FE50130A0E3003082E5001090E50CE2
+S21902F0893091E5083083E30C3081E5080090E51DD6FFEB10001B
+S21902F09E00EA2C209FE5004092E50030A0E3003082E5001090FB
+S21902F0B3E50C3091E50830C3E30C3081E5080090E506D6FFEBE7
+S21902F0C8050000EA084090E5030000EA6C39030008309BE5042F
+S21902F0DD4090E5043080E50400A0E110A81BE90DC0A0E170D8F2
+S21902F0F22DE904B04CE204D04DE200C090E520409CE514309C11
+S21902F107E519304BE50420A0E31C208CE50050A0E3080090E5EA
+S21902F11C0160A0E1A4E0FFEB005086E5020014E30600000A19AA
+S21902F131004BE20110A0E3DBE1FFEB050050E10130A013003011
+S21902F14686150150A0E30500A0E170A81BE90DC0A0E170D82DD9
+S21902F15BE984509FE50000E0E3343095E504B04CE20FE0A0E164
+S21902F17003F0A0E170409FE50060A0E10400A0E139FFFFEB341F
+S21902F1853095E50000A0E30FE0A0E103F0A0E1141095E550303F
+S21902F19A9FE550209FE5004081E5043081E548309FE5082081FC
+S21902F1AFE50C3081E540209FE540309FE5102081E5143081E5A5
+S21902F1C438209FE538309FE5182081E51C3081E5342095E50643
+S21902F1D900A0E10FE0A0E102F0A0E170A81BE9500000005439BD
+S21902F1EE030050EF020098EF0200ACEE02001CEF020040F0025D
+S21902F20300ECF00200E0EF02000DC0A0E100D82DE91C209FE544
+S21902F218003092E504B04CE2000053E30200001A0130A0E3004B
+S21902F22D3082E5C7FFFFEB00A81BE9703903000DC0A0E1F0D810
+S21902F2422DE904B04CE20040A0E30260A0E1060054E10150A0E6
+S21902F257E1140000AA54709FE5143097E5000053E318309705DA
+S21902F26C000093E5103093E50FE0A0E103F0A0E1FF0000E2048D
+S21902F28100C5E70430D5E70D0053E30A0053130300001A0420E1
+S21902F29685E00030A0E30130C2E5020000EA014084E20600547F
+S21902F2ABE1EBFFFFBA0400A0E1F0A81BE9500000000DC0A0E104
+S21902F2C0F0D82DE904B04CE20160A0E10270A0E1005057E223F1
+S21902F2D50000DA0030D6E58C409FE50A0053E30E00001A14305C
+S21902F2EA94E5000053E30500000A000093E50C3093E50D10A061
+S21902F2FFE30FE0A0E103F0A0E1050000EA183094E5000093E504
+S21902F3140C3093E50D10A0E30FE0A0E103F0A0E1143094E501E7
+S21902F32910D6E4000053E30400000A000093E50C3093E50FE09F
+S21902F33EA0E103F0A0E1040000EA183094E5000093E50C3093C8
+S21902F353E50FE0A0E103F0A0E1015045E2000055E3DBFFFFCA82
+S21902F3680700A0E1F0A81BE9500000000DC0A0E100D82DE904D5
+S21902F37D00E0E304B04CE200A81BE90DC0A0E100D82DE90000E7
+S21902F392A0E304B04CE200A81BE90DC0A0E100D82DE90400E02E
+S21902F3A7E304B04CE200A81BE90DC0A0E100D82DE9000050E36A
+S21902F3BC04B04CE20030A013003080150000A0E300A81BE90D6F
+S21902F3D1C0A0E100D82DE904B04CE200E0A0E300C0A0E1050066
+S21902F3E65CE30100A0E10210A0E10320A0E11300000A050000F1
+S21902F3FBCA03005CE31600000A0C0000CA02005CE31000000A99
+S21902F4101E0000EA11005CE31600000A020000CA06005CE31047
+S21902F42500000A180000EA74309FE503005CE11200000A140027
+S21902F43A00EA7EFFFFEB00E0A0E1130000EA9BFFFFEB00E0A003
+S21902F44FE1100000EAC6FFFFEB00E0A0E10D0000EAC8FFFFEB0E
+S21902F46400E0A0E10A0000EACAFFFFEB00E0A0E1070000EACC66
+S21902F479FFFFEB00E0A0E1040000EA20309FE5003080E50100D5
+S21902F48E00EA0000A0E300A81BE908309BE50100A0E300E083AA
+S21902F4A3E500A81BE9ADBA0000743903000DC0A0E170D82DE9F9
+S21902F4B80118A0E16C309FE504B04CE20040A0E10250A0E141C7
+S21902F4CD08A0E100C093E50360A0E100005CE30900000A0038F4
+S21902F4E2A0E12328A0E1B430DCE1020053E10100001A0000E0EF
+S21902F4F7E370A81BE900C09CE500005CE3F7FFFF1A0008A0E1E2
+S21902F50C2008A0E12AEDFFEBB400C4E1085084E5003096E50074
+S21902F5213084E50000A0E3004086E570A81BE940ED03000DC0EE
+S21902F536A0E1F0D92DE90008A0E14008A0E15C309FE504B04CF7
+S21902F54BE20060A0E3005093E50380A0E1060055E11000000ABD
+S21902F5600078A0E1B440D5E12708A0E113EDFFEB000054E10617
+S21902F57500001A000056E30200000A003095E5003086E50100D5
+S21902F58A00EA003095E5003088E50560A0E1005095E50000552F
+S21902F59FE3EFFFFF1AF0A91BE940ED03000DC0A0E1F0D92DE96C
+S21902F5B4BC309FE504D04DE20070A0E1086097E504B04CE2B65B
+S21902F5C920D6E10180A0E1045097E5030052E10030A003B6308E
+S21902F5DEC601B430D6E1B230C5E1B400D6E1F3ECFFEB0040A013
+S21902F5F3E10500A0E176ECFFEB0020A0E10600A0E10410A0E18C
+S21902F6084FECFFEB0008B0E11D00001A60309FE5005093E50015
+S21902F61D0055E31900000AB420D5E1B230D6E1030052E112000B
+S21902F632001AB400D6E1E0ECFFEB084040E2B000D6E1DDECFFE8
+S21902F647EB0038A0E10500A0E1081086E22338A0E100308DE57F
+S21902F65C0420A0E10830A0E10FE0A0E108F095E50700A0E127A3
+S21902F671ECFFEB060000EAFFFF000040ED0300005095E50000BF
+S21902F68655E3E5FFFF1A0700A0E11FECFFEBF0A91BE90DC0A0AC
+S21902F69BE1F0DF2DE90338A0E104B04CE20160A0E100A0A0E1EC
+S21902F6B00290A0E1E8C09FE54378A0E1F450DBE10C0056E1354B
+S21902F6C500008AD8009FE5F0EBFFEB008050E23100000A083059
+S21902F6DA86E2BC30C8E1084098E50508A0E1045098E52008A02B
+S21902F6EFE1B2ECFFEBB000C4E10708A0E12008A0E1AEECFFEB84
+S21902F704B200C4E1BC00D8E1ABECFFEB0030A0E30A10A0E1B49A
+S21902F71900C4E10620A0E1B630C4E1080084E2C2E2FFEB0C00F5
+S21902F72E85E274109FE50420A0E3BEE2FFEB100085E20910A0EF
+S21902F743E10420A0E3BAE2FFEB1170A0E30970C5E5B430D4E1DC
+S21902F758B230C5E1BC60D8E10500A0E11BECFFEB0020A0E1041C
+S21902F76D00A0E10610A0E1F4EBFFEB0008A0E12008A0E18EECF3
+S21902F782FFEB0710A0E1B600C4E10920A0E10800A0E139EBFF38
+S21902F797EB0800A0E1DCEBFFEBF0AF1BE9BE050000EA050000DC
+S21902F7AC103903000DC0A0E1F0D92DE904B04CE210D04DE200D7
+S21902F7C180A0E10240A0E10400A0E10170A0E12C604BE2061022
+S21902F7D6A0E10350A0E1DCF0FFEB000050E30F0000BAB400D488
+S21902F7EBE173ECFFEB0048A0E1B400D5E12448A0E16FECFFEB73
+S21902F8000038A0E10800A0E10710A0E12338A0E100308DE5068E
+S21902F81520A0E10430A0E19DFFFFEB0000A0E3030000EA0C007F
+S21902F82A9FE50C109FE52DE4FFEB0000E0E3010000EA502F0373
+S21902F83F00742F0300F0A91BE90DC0A0E1F0D92DE964009FE555
+S21902F8540240A0E1004080E55C809FE504B04CE2000098E5036E
+S21902F86970A0E1F450DBE14C609FE56FE2FFEB003096E500007C
+S21902F87E53E30900000A0508A0E12008A0E14BECFFEB00109627
+S21902F893E5B400C1E1003097E5003081E50020A0E3002088E5AC
+S21902F8A8F0A91BE914009FE50410A0E10CE4FFEBF0A91BE948BB
+S21902F8BDED030044ED03004CED0300842F03000DC0A0E1F0DFFC
+S21902F8D22DE904B04CE20CD04DE20050A0E1B400D3E10160A0DD
+S21902F8E7E104909BE50270A0E132ECFFEB0048A0E134004BE2EB
+S21902F8FC14209FE52418A0E1E9FEFFEB000050E3020000AA00CB
+S21902F91100E0E31F0000EA48F8020078109FE578009FE578301C
+S21902F9269FE5041099E8005081E50480A0E1006080E501A0A0EB
+S21902F93BE1007083E50060E0E30070A0E1821262E054009FE535
+S21902F950012182E0901C83E02333A0E1825183E02EE8FFEB00FB
+S21902F96540A0E12CE8FFEB000064E0050050E10400002AAAEB8A
+S21902F97AFFEB00309AE5000053E3F7FFFF1A006097E52808A0E7
+S21902F98FE1E7FEFFEB0600A0E1030000EA44ED030048ED0300CC
+S21902F9A44CED0300D34D6210F0AF1BE90DC0A0E170D82DE9AC7E
+S21902F9B9309FE504B04CE20160A0E1004093E50350A0E100002E
+S21902F9CE54E31800001AADEEFFEB90009FE5043090E50500531A
+S21902F9E3E30500001AB831D0E1000053E30000001AD5EEFFEB6F
+S21902F9F80400A0E170A81BE9000053E30400001A670100EB0AA1
+S21902FA0D30A0E30030C6E50100A0E370A81BE950409FE58020FB
+S21902FA22A0E30410A0E1E7EEFFEB44309FE5000085E5004083CC
+S21902FA37E5000095E5000050E30800000A2CC09FE500109CE50E
+S21902FA4C0130D1E40030C6E5002095E50100A0E300108CE5013D
+S21902FA612042E2002085E570A81BE9C03903005CED0300B0F3B4
+S21902FA76030030F403000DC0A0E170D82DE904B04CE204D04D9B
+S21902FA8BE20040A0E10150A0E1C5FFFFEB000050E32A00000AD5
+S21902FAA00030D5E5FF0053E32700001A19604BE20400A0E119A6
+S21902FAB5104BE2BCFFFFEB000050E3FAFFFF0A19305BE5F400A1
+S21902FACA53E30D00001A0400A0E10330A0E30030C5E5FF10A0FF
+S21902FADFE3670000EB0400A0E1FC10A0E3640000EB0400A0E1EE
+S21902FAF40610A0E3610000EB2E0000EB0100A0E3100000EAFD7D
+S21902FB090053E30E00001A0400A0E10610A0E1A4FFFFEB0000D9
+S21902FB1E50E3FAFFFF0A0400A0E1FF10A0E3540000EB0400A09C
+S21902FB33E1FC10A0E3510000EB19105BE50400A0E14E0000EBE3
+S21902FB480000A0E370A81BE90DC0A0E170D82DE904B04CE20470
+S21902FB5DD04DE26440A0E30060A0E119504BE2090000EA0140BB
+S21902FB7254E20200001A0F0000EB6440A0E3040000EA28309F1F
+S21902FB87E5482093E56400A0E30FE0A0E102F0A0E10600A0E14C
+S21902FB9C0510A0E1B5FFFFEB000050E3F0FFFF0A19005BE50095
+S21902FBB10000EA5000000070A81BE90DC0A0E1F0DD2DE9A4709D
+S21902FBC69FE504B04CE20760A0E19C509FE59C409FE59CA09F2A
+S21902FBDBE59C809FE50A0000EA0400A0E1002095E50610A0E1DF
+S21902FBF0B1EEFFEB000050E3030000DA003095E5006086E003ED
+S21902FC053060E0003085E51FEEFFEB003095E5000053E30800FA
+S21902FC1A000A043094E5050053E30100001A0400A0E147EEFF08
+S21902FC2FEB043094E5000053E3E9FFFF1ADA0000EB00708AE546
+S21902FC440060A0E3006085E50400A0E130EEFFEB443098E50673
+S21902FC590053E10200000A446088E50600A0E11EDFFFEBF0AD33
+S21902FC6E1BE934F40300C43903005CED030034F5030050000083
+S21902FC83000DC0A0E110D82DE9A8209FE5A8409FE5003092E5BA
+S21902FC98FF1001E20110C3E4240051E3003082E504B04CE201D4
+S21902FCAD30A00300308405002094E5230051E30030A0130130AB
+S21902FCC2A003000052E30030A003000053E30500000A68209F0F
+S21902FCD7E50130A0E3003082E560109FE5013043E2003081E501
+S21902FCEC58209FE5003092E5013083E2003082E5010C53E309E0
+S21902FD0100000A38309FE5002093E5000052E30800000A2C20C5
+S21902FD169FE5003092E5013083E2003082E5030053E30200003E
+S21902FD2B1AA2FFFFEB0030A0E3003084E510A81BE934F50300E3
+S21902FD4050ED030054ED030058ED0300C43903000DC0A0E1107D
+S21902FD55D82DE904B04CE2790000EB0040A0E114009FE51410E1
+S21902FD6A9FE5472FA0E3DDE2FFEB0400A0E1820000EB10A81B92
+S21902FD7FE970300300783003000DC0A0E110D82DE904B04CE203
+S21902FD946B0000EB0040A0E114009FE514109FE514209FE5CF75
+S21902FDA9E2FFEB0400A0E1740000EB10A81BE970300300883077
+S21902FDBE03002E0100000DC0A0E1F0D82DE904B04CE20060A0E9
+S21902FDD3E10150A0E177FFFFEB44209FE5003092E540709FE53E
+S21902FDE8033183E08340A0E1030000EA483097E56400A0E30F4D
+S21902FDFDE0A0E103F0A0E10600A0E10510A0E11AFFFFEB0000F5
+S21902FE1250E30200001A014044E2010074E3F3FFFF1AF0A81B08
+S21902FE27E9BC390300500000000DC0A0E10E002DE930D82DE9FE
+S21902FE3C10B04CE204309BE50050A0E3043043E2040053E3039F
+S21902FE51F19F97240000EA9CFE02006CFE0200BCFE0200C8FED6
+S21902FE660200E8FE020068409FE568309FE5001094E50120A004
+S21902FE7BE3002083E5000051E30100001A65F5FFEB000084E504
+S21902FE90000094E59ED2FFEB130000EA3C309FE534209FE500BE
+S21902FEA55093E5000092E50010A0E3001083E58AD2FFEB0B00A6
+S21902FEBA00EA18309FE5005093E5080000EA14209FE508309B31
+S21902FECFE5005092E5003082E5030000EAC8390300CC390300DB
+S21902FEE4BC39030033FFFFEB0500A0E130A81BE90DC0A0E1300E
+S21902FEF9D82DE904B04CE204D04DE20040A0E10200A0E1015085
+S21902FF0EA0E128DDFFEB0400A0E10030A0E3003085E515104B25
+S21902FF23E2D4FEFFEB000050E30300000A15305BE5030053E326
+S21902FF380130A003003085050100A0E330A81BE90DC0A0E13041
+S21902FF4DD82DE92C409FE50000E0E3343094E504B04CE20FE049
+S21902FF62A0E103F0A0E10050A0E1343094E50000A0E30FE0A0CE
+S21902FF77E103F0A0E10500A0E130A81BE9500000000DC0A0E119
+S21902FF8C00D82DE910309FE5342093E504B04CE20FE0A0E10287
+S21902FFA1F0A0E100A81BE9500000000DC0A0E110D82DE9441037
+S21902FFB69FE544209FE50030A0E3003081E53C409FE5000092E8
+S21902FFCBE5343094E504B04CE20FE0A0E103F0A0E128209FE5C6
+S21902FFE0303094E5000092E50FE0A0E103F0A0E118209FE50114
+S21902FFF530A0E3003082E510A81BE9C0F70300A8F30300500042
+S21903000A0000ACF303005CF803000DC0A0E170D82DE970309FF5
+S21903001FE570209FE50150A0E3005083E504B04CE264409FE535
+S2190300340030A0E3003082E50060E0E3342094E50600A0E10FDF
+S219030049E0A0E102F0A0E148309FE5000083E5342094E5050090
+S21903005EA0E10FE0A0E102F0A0E1301094E50600A0E10FE0A052
+S219030073E101F0A0E124309FE5000083E5302094E50500A0E18E
+S2190300880FE0A0E102F0A0E170A81BE9C0F703005CF8030050FB
+S21903009D000000A8F30300ACF303000DC0A0E170D82DE9AC604E
+S2190300B29FE5003096E504B04CE2000053E31E00001A9C409F37
+S2190300C7E5343094E50000E0E30FE0A0E103F0A0E10050A0E1E2
+S2190300DC343094E50100A0E30FE0A0E103F0A0E1141094E574B1
+S2190300F1309FE574209FE5043081E570309FE5082081E50C309E
+S21903010681E568209FE568309FE5102081E5143081E560209FEF
+S21903011BE560309FE5182081E51C3081E5342094E50500A0E12B
+S2190301300FE0A0E102F0A0E10130A0E3003086E540309FE5404C
+S219030145409FE5B010D3E10400A0E1D4ECFFEB34209FE504302A
+S21903015A94E5003082E570A81BE9D03903005000000050FD02B1
+S21903016F0088FD020084FC020050FB020030FE0200F4FE0200F9
+S219030184C4FD020050F803005CED0300A4F303000DC0A0E130EC
+S219030199D82DE904B04CE2BAECFFEB78309FE578109FE5002091
+S2190301AE93E50350A0E1040091E50140A0E1000052E114000065
+S2190301C30A040050E30E00001A90FFFFEB54309FE554009FE55D
+S2190301D8000083E550109FE50130A0E3003081E548109FE54850
+S2190301ED309FE50D20A0E30020C0E5003081E53C209FE5003026
+S219030202A0E3003082E5043094E5000053E30000001AA3FFFF27
+S219030217EB043094E5003085E530A81BE9A4F303005CED0300D6
+S21903022C30F40300B0F30300C039030034F5030034F40300C4D1
+S2190302413903000DC0A0E1F0DF2DE950019FE550119FE55031F6
+S2190302569FE550519FE550419FE501A0A0E300A085E50080A07F
+S21903026BE3008081E504B04CE2003084E50A20A0E1E3CBFFEBEF
+S2190302800410A0E12C019FE50220A0E3DFCBFFEB0510A0E1202C
+S219030295019FE50A20A0E11C719FE5DACBFFEB0710A0E11401CF
+S2190302AA9FE50520A0E310619FE5D5CBFFEB0610A0E108019F4D
+S2190302BFE50520A0E304419FE5D0CBFFEB008084E501F3FFEB80
+S2190302D4A2E8FFEBF4809FE50590A0E1F0309FE50450A0E1030F
+S2190302E90058E10360A0E10900000A0A40A0E10800A0E10FE085
+S2190302FEA0E104F098E5000050E30C4088150C00880510808824
+S219030313E2060058E1F6FFFF1AB8309FE5002093E5000052E365
+S2190303280200001AAC009FE56DE1FFEBF0AF1BE9003099E500E3
+S21903033D0053E30600000A98009FE5430000EB000050E30200DE
+S219030352000A8C009FE563E1FFEB010000EA0130A0E3003085F2
+S219030367E5003095E5000053E30A00000A0700A0E1BBEFFFEB84
+S21903037C0010A0E164009FE558E1FFEB38009FE5B6EFFFEB007D
+S21903039110A0E154009FE553E1FFEB41FFFFEBF0AF1BE9EC2FE0
+S2190303A60300B8F7030028230000CCF7030050F80300C42F0333
+S2190303BB001C300300103903003830030084F80300603003000D
+S2190303D09CF90300EC3B0300FC3B0300BCF70300943003007027
+S2190303E5F80300B4300300E0300300E83003000DC0A0E110D8B5
+S2190303FA2DE94C309FE504B04CE2000093E50140A0E100005064
+S21903040FE30000000A87DFFFEB0030D4E5020053E30900001A4F
+S2190304241C0084E224109FE50620A0E3BCE1FFEB000050E3031B
+S21903043900001A101084E210009FE50420A0E37ADFFFEB10A8D0
+S21903044E1BE938F50300B0F70300103903000DC0A0E1F0DF2D1D
+S219030463E90010A0E34B2FA0E36C319FE504B04CE252DF4DE2A0
+S219030478000083E5165E4BE20500A0E19FDFFFEB54419FE55403
+S21903048D119FE50030A0E30030C4E50130C4E50230C4E5033049
+S2190304A2C4E50100A0E33C219FE528304BE20200C3E734319FFA
+S2190304B7E528204BE20300C2E72CC19FE50620A0E328304BE283
+S2190304CC0C20C3E720319FE55C310BE5510F4BE255DFFFEBFF41
+S2190304E1C0A0E3053DE0E328104BE203C0C1E74F2FE0E3013074
+S2190304F6A0E102C0C3E7F8309FE503C0C1E7F4109FE528304BBA
+S21903050BE201C0C3E7EC309FE528104BE203C0C1E7E4109FE59E
+S21903052028304BE201C0C3E70270A0E3D8309FE528104BE203E5
+S219030535C0C1E70590A0E1CC109FE528304BE201C0C3E7048057
+S21903054AA0E1C0309FE528104BE203C0C1E70850A0E101308342
+S21903055FE203C0C1E734004BE2A8209FE54410A0E3CEFBFFEBFB
+S2190305745BAF4BE228E5FFEB0060A0E10900A0E14B1FA0E344A0
+S21903058930A0E300308DE50A20A0E1013043E23EFCFFEBA1E852
+S21903059EFFEB0030D5E5000053E30800001A0130D8E5000053D3
+S2190305B3E30500001A0230D5E5000053E30200001A0340D5E5EE
+S2190305C8000054E31200000A4400A0E3D6FBFFEB0000A0E31BA3
+S2190305DD0000EA38F5030010390300B0F70300C8FEFFFFC9FE66
+S2190305F2FFFFCAFEFFFF55553412BCFEFFFFBDFEFFFFBEFEFF0C
+S219030607FFC0FEFFFFC1FEFFFFC2FEFFFFC4FEFFFFF4030300E6
+S21903061CFFE4FFEB000066E07D0E50E3DBFFFF3A0730A0E10124
+S2190306317047E2000053E3CEFFFFCA4400A0E3BBFBFFEB0830A8
+S2190306469FE50000E0E3004083E5000000EAB8F70300F0AF1B52
+S21903065BE90DC0A0E1F0DF2DE904B04CE214D04DE20270A0E17E
+S21903067001A0A0E12C000BE5006053E2BF00001A0A0057E1423D
+S21903068500009A010857E30300002AFF0057E30800A0830000EA
+S21903069AA093020000EA010457E31800A0231000A03340139F35
+S2190306AFE53220A0E10230D1E7003083E0200073E20600000A74
+S2190306C41770A0E12C101BE5203060E23133A0E11AA083E1112F
+S2190306D910A0E12C100BE50798A0E12998A0E10A00A0E12788AB
+S2190306EEA0E10810A0E1710200EB0040A0E10A00A0E10810A073
+S219030703E1110100EB0060A0E1990602E02C101BE52138A0E183
+S219030718044883E1020054E10500002A016046E2074094E00268
+S21903072D00002A020054E10160463207408430044062E00400F0
+S219030742A0E10810A0E15C0200EB0050A0E10400A0E10810A029
+S219030757E1FC0000EB990002E02C101BE50138A0E12338A0E170
+S21903076C055883E1020055E10400002A010040E2075095E00159
+S21903078100002A020055E10100403206C880E1E60000EA000087
+S21903079657E30300001A0100A0E30210A0E1E90000EB0070A0F4
+S2190307ABE1010857E30720A0E10300002AFF0057E30800A083D4
+S2190307C00000A093020000EA010457E31800A0231000A03318E8
+S2190307D5129FE53220A0E10230D1E7003083E0200073E201307B
+S2190307EAA00330300B050AA067003400000A202060E21770A0E7
+S2190307FFE12C101BE53A52A0E13132A0E11110A0E12C100BE501
+S2190308141AA083E12788A0E10798A0E12998A0E10500A0E10889
+S21903082910A0E1230200EB0040A0E10500A0E10810A0E1C3006E
+S21903083E00EB0060A0E1990602E02A38A0E1044883E102005467
+S219030853E10500002A016046E2074094E00200002A020054E1D1
+S2190308680160463207408430044062E00400A0E10810A0E10FEC
+S21903087D0200EB0050A0E10400A0E10810A0E1AF0000EB99004F
+S21903089202E00A38A0E12338A0E1055883E1020055E1050000CA
+S2190308A72A010040E2075095E00200002A020055E10100403244
+S2190308BC07508530066880E105A062E030600BE50798A0E12994
+S2190308D198A0E10A00A0E12788A0E10810A0E1F60100EB00407B
+S2190308E6A0E10A00A0E10810A0E1960000EB0060A0E19906024D
+S2190308FBE02C101BE52138A0E1044883E1020054E10500002AD4
+S219030910016046E2074094E00200002A020054E1016046320743
+S219030925408430044062E00400A0E10810A0E1E10100EB005000
+S21903093AA0E10400A0E10810A0E1810000EB990002E02C101BC3
+S21903094FE50138A0E12338A0E1055883E1020055E10400002AE9
+S219030964010040E2075095E00100002A020055E10100403206AB
+S219030979C880E16D0000EA0A0056E10020A08330200B8502C0BB
+S21903098EA0816800008A010856E30620A0E10300002AFF0056CE
+S2190309A3E30800A0830000A093020000EA010456E31800A023F1
+S2190309B81000A03330109FE53220A0E10230D1E7003083E0200B
+S2190309CD0073E20800001A2C301BE506005AE10700539101C04D
+S2190309E2A0E300C0A0310010A0E330100BE5500000EA003103B3
+S2190309F700202060E23732A0E1166083E11770A0E12C101BE559
+S219030A0C3A52A0E13132A0E11110A0E12C100BE51AA083E126CA
+S219030A2198A0E10628A0E12228A0E10500A0E134200BE5091042
+S219030A36A0E1A00100EB0040A0E10500A0E10910A0E140000075
+S219030A4BEB34201BE50080A0E1980202E02A38A0E1044883E13F
+S219030A60020054E10500002A018048E2064094E00200002A0280
+S219030A750054E10180483206408430044062E00400A0E1091016
+S219030A8AA0E18B0100EB0050A0E10400A0E10910A0E12B00003C
+S219030A9FEB34201BE5900202E00A38A0E12338A0E1055883E127
+S219030AB4020055E10500002A010040E2065095E00200002A02A2
+S219030AC90055E1010040320650853008C880E105A062E02C0810
+S219030ADEA0E12738A0E10018CCE10328C7E191020EE0900202ED
+S219030AF3E0930101E0900303E0011092E00138832201E89EE053
+S219030B082138A3E00A0053E10500008A2C101BE50030A0130107
+S219030B1D30A003000053E301005E110000009A01C04CE2002099
+S219030B32A0E330200BE53CC00BE530301BE540204BE238300B97
+S219030B47E5030092E9F0AF1BE9000051E31F00000A0130A0E37A
+S219030B5C0020A0E3010050E11900003A010251E300005131019A
+S219030B7112A0310332A031FAFFFF3A020151E300005131811002
+S219030B86A0318330A031FAFFFF3A010050E10100402003208293
+S219030B9B21A10050E1A1004020A3208221210150E1210140200E
+S219030BB023218221A10150E1A1014020A3218221000050E323AF
+S219030BC532B0112112A011EFFFFF1A0200A0E10EF0A0E104E04F
+S219030BDA2DE5640100EB0000A0E30080BDE80DC0A0E1F0DF2DAA
+S219030BEFE904B04CE224D04DE20260A0E10180A0E138000BE5EE
+S219030C0430C04BE234C00BE5007053E29700001A080056E11825
+S219030C1900009A010856E30300002AFF0056E30800A083000052
+S219030C2EA093020000EA010456E31800A0231000A033D4129F09
+S219030C43E53220A0E10230D1E7003083E0203073E23C300BE55E
+S219030C585200000A1663A0E138101BE5203063E23C201BE531BF
+S219030C6D33A0E1188283E11112A0E138100BE5490000EA0000A9
+S219030C8256E30300001A0100A0E30210A0E1AEFFFFEB0060A051
+S219030C97E1010856E30620A0E10300002AFF0056E30800A083E6
+S219030CAC0000A093020000EA010456E31800A0231000A03354BC
+S219030CC1129FE53220A0E10230D1E7003083E0203073E23C301F
+S219030CD60BE5088066003100000A3C201BE53C304BE208109348
+S219030CEBE83C101BE5202062E21663A0E13852A0E13C32A0E140
+S219030D0040200BE51CC1A0E138C00BE5188183E12678A0E1061E
+S219030D15A8A0E12AA8A0E10500A0E10710A0E1E50000EB004017
+S219030D2AA0E10500A0E10710A0E185FFFFEB9A0002E02838A023
+S219030D3FE1044883E1020054E10300002A064094E00100002ABD
+S219030D54020054E106408430044062E00400A0E10710A0E1D4DA
+S219030D690000EB0050A0E10400A0E10710A0E174FFFFEB9A009D
+S219030D7E02E00838A0E12338A0E1055883E1020055E1030000DD
+S219030D932A065095E00100002A020055E106508530058062E019
+S219030DA806A8A0E12AA8A0E10800A0E12678A0E10710A0E1BFAD
+S219030DBD0000EB0040A0E10800A0E10710A0E15FFFFFEB9A006A
+S219030DD202E038C01BE52C38A0E1044883E1020054E10300005B
+S219030DE72A064094E00100002A020054E106408430044062E029
+S219030DFC0400A0E10710A0E1AD0000EB0050A0E10400A0E107C8
+S219030E1110A0E14DFFFFEB9A0002E038101BE50138A0E1233824
+S219030E26A0E1055883E1020055E10300002A065095E00100003C
+S219030E3B2A020055E106508530055062E038500BE534201BE5CA
+S219030E50000052E39600000A38301BE53CC01BE5333CA0E14814
+S219030E65300BE50010A0E344100BE58B0000EA080057E10500BF
+S219030E7A009A48000BE544800BE540204BE20C0012E930C04B06
+S219030E8FE2860000EA010857E30720A0E10300002AFF0057E3A3
+S219030EA40800A0830000A093020000EA010457E31800A02310BD
+S219030EB900A03358109FE53220A0E10230D1E7003083E02030BD
+S219030ECE73E23C300BE51100001A38301BE5070058E10600532A
+S219030EE3910200003A06C053E00780C8E038C00BE534101BE5D1
+S219030EF8000051E36C00000A38201BE548200BE544800BE5408F
+S219030F0D204BE20C0012E901C0A0E1640000EA003203003C3042
+S219030F221BE53CC01BE538201BE5203063E240300BE540101BFE
+S219030F37E53633A0E1177C83E1166CA0E13851A0E13231A0E1E6
+S219030F4C122CA0E138200BE5188C83E12798A0E10738A0E12356
+S219030F6138A0E10500A0E14C300BE50910A0E1520000EB0040B1
+S219030F76A0E10500A0E10910A0E1F2FEFFEB4C201BE500A0A037
+S219030F8BE19A0202E02838A0E1044883E1020054E10500002AF3
+S219030FA001A04AE2074094E00200002A020054E101A04A320725
+S219030FB5408430044062E00400A0E10910A0E13D0000EB00500E
+S219030FCAA0E10400A0E10910A0E1DDFEFFEB4C201BE5900202A5
+S219030FDFE00838A0E12338A0E1055883E1020055E10500002A50
+S219030FF4010040E2075095E00200002A020055E1010040320713
+S219031009508530058062E00A3880E12308A0E126C8A0E1001828
+S21903101EC3E10C28C6E191020EE0900202E09C0101E0900C0C1B
+S219031033E0011092E001C88C2201E89EE021C8ACE008005CE1A5
+S2190310480500008A38101BE50030A0130130A003000053E301C6
+S21903105D005E110200009A06205EE007C0CCE002E0A0E13430CD
+S2190310721BE5000053E30D00000A38201BE50E1052E00C80C818
+S219031087E03CC01BE5313CA0E140101BE5183183E148300BE51D
+S21903109C388CA0E144800BE534C01BE540204BE20C0012E90CAA
+S2190310B1008CE830304BE2030093E8F0AF1BE9000051E32600A6
+S2190310C6000A0130A0E3010050E10EF0A031010251E3000051C6
+S2190310DB310112A0310332A031FAFFFF3A020151E300005131F2
+S2190310F08110A0318330A031FAFFFF3A0020A0E3010050E101F5
+S219031105004020A10050E1A1004020E3208221210150E121017F
+S21903111A402063218221A10150E1A1014020E321822103C0A052
+S21903112FE1000050E32332B0112112A011EEFFFF1A0E2212E26B
+S2190311440EF0A001EC0112E1A10180106C0112E121018010ECDF
+S2190311590012E1A10080100EF0A0E104E02DE5010000EB0000F4
+S20E03116EA0E30080BDE80EF0A0E148
+S2190311785B2D772074696D656F75745D205B3C656E7472795F8F
+S21903118D706F696E743E5D000000004578656375746520616EBE
+S2190311A220696D616765202D2077697468204D4D55206F66667A
+S2190311B7006578656300000000776169742074696D656F75749A
+S2190311CC000000007374617274696E6720616464726573730094
+S2190311E100000041626F757420746F2073746172742065786543
+S2190311F6637574696F6E206174202570202D2061626F727420FB
+S21903120B77697468205E432077697468696E2025642073656392
+S2190312206F6E64730A0000004C6F616420612066696C65006CC6
+S2190312356F616400000000454C4620696D61676573206E6F748A
+S21903124A20737570706F727465640A000000496E76616C6964B0
+S21903125F20532D7265636F7264206174206F6666736574202572
+S219031274702C20696E7075743A2025630A00000042616420530B
+S2190312892D7265636F726420636F756E74206174206F66667390
+S21903129E65742025700A0000000041646472657373206F66667A
+S2190312B3736574203D2025700A00000000417474656D707420B7
+S2190312C8746F206C6F616420532D7265636F726420646174618D
+S2190312DD20746F20616464726573733A202570205B6E6F742010
+S2190312F2696E2052414D5D0A00002A2A2A205761726E696E672D
+S2190313072120436865636B73756D206661696C757265202D20E0
+S21903131C416464723A20256C782C202530326C58203C3E202560
+S21903133130326C580A0000456E74727920706F696E743A202594
+S219031346702C20616464726573732072616E67653A2025702D9F
+S21903135B25700A0000496E76616C696420532D7265636F7264F0
+S219031370206174206F6666736574203078256C782C207479704A
+S219031385653A2025780A00256308000A000000766572626F73BA
+S21903139A65006C6F61642072617720646174610000006C6F61D1
+S2190313AF64206164647265737300000000646F776E6C6F61645F
+S2190313C4206D6F6465202854465450206F722078797A4D4F4455
+S2190313D9454D2900000000686F7374206E616D652028495020BC
+S2190313EE6164647265737329000066696C65206E616D65000072
+S21903140300496E76616C696420495020616464726573733A20EC
+S21903141825730A006D6F64656D000000496E76616C69642027F5
+S21903142D6D6F6465273A2025730A007466747000000000544682
+S2190314425450206D6F6465207265717569726573206120776F0D
+S219031457726B696E67206E6574776F726B0A00000046696C65A9
+S21903146C206E616D65206D697373696E670A0000757361676569
+S2190314813A206C6F61642025730A0053706563696669656420E6
+S219031496616464726573732028257029206973206E6F74206957
+S2190314AB6E2052414D2E0A000043616E2774206C6F61642027CA
+S2190314C02573273A2025730A00000000526177206C6F6164204A
+S2190314D572657175697265732061206D656D6F72792061646407
+S2190314EA726573730A005261772066696C65206C6F61646564AB
+S2190314FF2025702D25700A0000454C4600556E7265636F676E37
+S219031514697A656420696D61676520747970653A20256C780A9C
+S2190315290000007B636D64737D00004D616E61676520464C41CA
+S21903153E534820696D6167657300666973005B2D6C5D000000CC
+S219031553004D616E61676520636F6E66696775726174696F6E9A
+S219031568206B65707420696E20464C415348206D656D6F727954
+S21903157D00000066636F6E666967005B2D665D00000000496E73
+S219031592697469616C697A6520464C41534820496D6167652030
+S2190315A753797374656D205B4649535D00696E69740000000034
+S2190315BC5B2D635D00000000446973706C617920636F6E7465BB
+S2190315D16E7473206F6620464C41534820496D61676520537936
+S2190315E67374656D205B4649535D000000006C697374000000B9
+S2190315FB0000000000446973706C61792066726565205B6176E9
+S21903161061696C61626C655D206C6F636174696F6E73207769AA
+S2190316257468696E20464C41534820496D616765205379737491
+S21903163A656D205B4649535D000066726565000000002D6620B2
+S21903164F3C666C6173685F616464723E202D6C203C6C656E6741
+S21903166474683E00457261736520464C41534820636F6E746598
+S2190316796E74730000000065726173650000004C4F434B204660
+S21903168E4C41534820636F6E74656E7473006C6F636B000000E0
+S2190316A300554E4C4F434B20464C41534820636F6E74656E74B5
+S2190316B873000000756E6C6F636B00006E616D65000000004431
+S2190316CD6973706C617920616E20696D6167652066726F6D2068
+S2190316E2464C41534820496D6167652053797374656D205B4614
+S2190316F749535D000064656C65746500005B2D62203C6D656DE5
+S21903170C6F72795F6C6F61645F616464726573733E5D205B2DDF
+S219031721635D206E616D65000000004C6F616420696D61676587
+S2190317362066726F6D20464C41534820496D61676520537973D2
+S21903174B74656D205B4649535D20696E746F2052414D000000A7
+S2190317606C6F6164000000002D62203C6D656D5F626173653E6A
+S219031775202D6C203C696D6167655F6C656E6774683E205B2D78
+S21903178A73203C646174615F6C656E6774683E5D200A202020D3
+S21903179F202020202020202020202020205B2D66203C666C6110
+S2190317B473685F616464723E5D205B2D65203C656E7472795FAE
+S2190317C9706F696E743E5D205B2D72203C72616D5F616464728E
+S2190317DE3E5D205B2D6E5D203C6E616D653E000000004372658B
+S2190317F361746520616E20696D61676500637265617465000019
+S2190318082A2A2A20696E76616C696420276669732720636F6D2F
+S21903181D6D616E643A2025730A000066697320000000006675D5
+S2190318326C6C20696E697469616C697A6174696F6E2C20657296
+S2190318476173657320616C6C206F6620666C617368000000005C
+S21903185C41626F757420746F20696E697469616C697A65205BA4
+S219031871666F726D61745D20464C41534820696D616765207330
+S219031886797374656D002A2A2041626F727465640A002A2A2A56
+S21903189B20496E697469616C697A6520464C41534820496D6139
+S2190318B067652053797374656D0A0000202020696E69746961C2
+S2190318C56C697A6174696F6E206661696C65642025703A2030D8
+S2190318DA782578282573290A0000202020205761726E696E6793
+S2190318EF3A2064657669636520636F6E74656E7473206E6F7413
+S219031904206572617365642C20736F6D6520626C6F636B732074
+S2190319196D6179206E6F7420626520757361626C650A005265B5
+S21903192E64426F6F7400526564426F6F745B6261636B75705DC7
+S21903194300526564426F6F7420636F6E66696700004649532040
+S2190319586469726563746F72790000004572726F722077726921
+S21903196D74696E6720696D6167652064657363726970746F7229
+S219031982732061742025703A2030782578282573290A00000099
+S21903199700646973706C617920636865636B73756D7300000057
+S2190319AC4E616D652020202020202020202020202020464C410A
+S2190319C1534820616464722020202573202020204C656E677441
+S2190319D668202020202020456E74727920706F696E740A000066
+S2190319EB00436865636B73756D000000004D656D2061646472D2
+S219031A0000000000252D313673202030782530386C5820202004
+S219031A1530782530386C58202030782530386C58202030782575
+S219031A2A30386C580A00202030782530386C58202E2E203078EC
+S219031A3F2530386C580A0000006D656D6F7279206261736520BB
+S219031A54616464726573730072616D20626173652061646472D9
+S219031A6965737300000000656E74727920706F696E74206164B4
+S219031A7E647265737300464C415348206D656D6F727920626120
+S219031A9373652061646472657373000000696D616765206C6564
+S219031AA86E677468205B696E20464C4153485D00696D61676530
+S219031ABD2073697A65205B61637475616C20646174615D000025
+S219031AD20000646F6E277420636F70792066726F6D2052414D6C
+S219031AE720746F20464C4153482C206A75737420757064617401
+S219031AFC65206469726563746F72790066696C65206E616D6512
+S219031B11000000696E76616C696420617267756D656E747300DA
+S219031B260000726571756972656420706172616D657465722040
+S219031B3B6D697373696E670000496E76616C696420464C415386
+S219031B504820696D6167652073697A652F6C656E6774682063FE
+S219031B656F6D62696E6174696F6E0A00000000496E76616C69C6
+S219031B7A6420464C41534820616464726573733A20257020281F
+S219031B8F2573290A0020202076616C69642072616E6765206948
+S219031BA4732025702D25700A000000004E616D6520697320741F
+S219031BB96F6F206C6F6E672C206D757374206265206C6573738E
+S219031BCE207468616E2025642063686172730A0000002A2A20D7
+S219031BE35741524E494E473A2052414D20616464726573733A55
+S219031BF8202570206D617920626520696E76616C69640A004379
+S219031C0D616E2774206C6F6361746520256C642062797465735C
+S219031C22206672656520696E20464C4153480A000000496D613D
+S219031C37676520666F756E642C2062757420464C4153482061E2
+S219031C4C64647265737320696E636F72726563740A00000049BA
+S219031C616D61676520666F756E642C20627574204C454E47545F
+S219031C764820697320696E636F727265637420283078256C782B
+S219031C8B20213D203078256C78290A0000416E20696D616765E8
+S219031CA0206E616D6564202725732720657869737473000043F9
+S219031CB5616E27742070726F6772616D2074686973207265675A
+S219031CCA696F6E202D20636F6E7461696E7320636F64652069A7
+S219031CDF6E20757365210A000043616E277420657261736520E5
+S219031CF4726567696F6E2061742025703A203078257828257346
+S219031D09290A0043616E27742070726F6772616D2072656769FE
+S219031D1E6F6E2061742025703A2030782578282573290A00008F
+S219031D33004572726F722065726173696E672061742025703A9C
+S219031D482030782578282573290A00004572726F722070726FAB
+S219031D5D6772616D6D696E672061742025703A203078257828A6
+S219031D722573290A00006C656E67746800006D697373696E670D
+S219031D8720617267756D656E740000000043616E277420657218
+S219031D9C617365207468697320726567696F6E202D20636F6EC8
+S219031DB17461696E7320636F646520696E20757365210A0000AC
+S219031DC600004572726F72206C6F636B696E6720617420257045
+S219031DDB3A2030782578282573290A00004572726F7220756E4C
+S219031DF06C6F636B696E672061742025703A2030782578282559
+S219031E0573290A00000000696D616765206E616D6500004465AD
+S219031E1A6C65746520696D61676520272573270000004E6F20FB
+S219031E2F696D616765202725732720666F756E640A0000000047
+S219031E446D656D6F7279205B6C6F61645D2062617365206164D0
+S219031E5964726573730000646973706C617920636865636B73C4
+S219031E6E756D000000004E6F742061206C6F616461626C65204F
+S219031E83696D6167650A000000436865636B73756D3A20307800
+S219031E982530386C780A00002A2A205761726E696E67202D20FB
+S219031EAD636865636B73756D206661696C7572652E2020737468
+S219031EC26F7265643A2030782530386C782C20636F6D70757402
+S219031ED765643A2030782530386C780A00464C4153483A20647C
+S219031EEC726976657220696E6974206661696C6564212C207378
+S219031F0174617475733A20307825780A000000464C4153483A41
+S219031F16202570202D2025702C20256420626C6F636B73206FF5
+S219031F2B6620257020627974657320656163682E0A000000004E
+S219031F40746F6F2066657720617267756D656E74730000007565
+S219031F556E7265636F676E697A656420636F6D6D616E640000D8
+S219031F6A000052756E2073637269707420617420626F6F7400A7
+S219031F7F00626F6F745F73637269707400426F6F7420736372A1
+S219031F9469707400626F6F745F7363726970745F646174610042
+S219031FA9000000426F6F74207363726970742074696D656F751F
+S219031FBE742028313030306D73207265736F6C7574696F6E290C
+S219031FD300626F6F745F7363726970745F74696D656F757400E3
+S219031FE825733A2000000000257320007472756500000000660C
+S219031FFD616C7365000000256C64200000000030782530325886
+S21903201200003A000000200000003F3F00000A0000002E2E2053
+S21903202725730A0000456E746572207363726970742C20746522
+S21903203C726D696E617465207769746820656D707479206C6977
+S2190320516E650A000000003E3E20006C69737420636F6E66690E
+S2190320666775726174696F6E206F6E6C79002A2A20696E7661F0
+S21903207B6C696420656E7472790A0000005570646174652052DE
+S2190320906564426F6F74206E6F6E2D766F6C6174696C6520635B
+S2190320A56F6E66696775726174696F6E0000004572726F7220DF
+S2190320BA77726974696E6720636F6E6669672064617461206134
+S2190320CF742025703A2030782578282573290A0000526571759C
+S2190320E465737420666F7220636F6E6669672076616C75652039
+S2190320F927257327202D2077726F6E6720747970650A004361BA
+S21903210E6E27742066696E6420636F6E6669672064617461207A
+S219032123666F7220272573270A000000004E6F2073706163655F
+S21903213820746F2061646420272573270A000000464C415348C0
+S21903214D20636F6E66696775726174696F6E20636865636B734C
+S219032162756D206572726F72206F7220696E76616C6964206BA1
+S21903217765790A0000657468300000000073635F6C706500007C
+S21903218C4346206361726420776F6E277420676F207265616432
+S2190321A179210A000000004E6F742061205343204C50452C20C8
+S2190321B6736F7272790A000000000A00000025733A202573200F
+S2190321CB25732025730A00000043616E27742070617273652095
+S2190321E04349530A0000000043616E277420666574636820639F
+S2190321F56F6E66696720696E666F0A00000000436F6D70616391
+S21903220A7420466C61736820636172642072656D6F7665642148
+S21903221F0A000000002E2E2E2057616974696E6720666F722094
+S2190322346E6574776F726B20636172643A2000002E0000005BE6
+S2190322492D765D205B2D6E203C636F756E743E5D205B2D742006
+S21903225E3C74696D656F75743E5D205B2D69203C49505F61645B
+S21903227364723E5D202D68203C49505F616464723E00000000FB
+S2190322884E6574776F726B20636F6E6E656374697669747920F0
+S21903229D7465737400000070696E67000000003C636F756E7451
+S2190322B23E202D206E756D626572206F66207061636B657473DB
+S2190322C720746F2074657374003C74696D656F75743E202D2029
+S2190322DC6D617820236D7320706572207061636B6574205B7290
+S2190322F16F756E7420747269705D006C6F63616C204950206189
+S21903230664647265737300000000686F73742049502061646475
+S21903231B72657373003C6C656E6774683E202D2073697A6520A4
+S2190323306F66207061796C6F61640000766572626F7365206F2C
+S2190323457065726174696F6E0000003C726174653E202D207412
+S21903235A696D65206265747765656E207061636B657473000016
+S21903236F000000000050494E47202D20496E76616C6964206F60
+S2190323847074696F6E207370656369666965640A0000000050EC
+S219032399494E47202D20496E76616C69642049502061646472A1
+S2190323AE6573733A2025730A000050494E473A2043616E277496
+S2190323C32066696E642061646472657373206F66207365727661
+S2190323D8657220272573270A0000000050494E47202D20686F8F
+S2190323ED73742049502061646472657373207265717569726510
+S219032402640A000000004E6574776F726B2050494E47202D20AA
+S21903241766726F6D202573000020746F2025730A0069636D70CE
+S21903242C202D207365713A20256C642C2074696D653A20256CA8
+S2190324416420287469636B73290A0050494E47202D20726563AC
+S219032456656976656420256C64206F6620256C6420657870656B
+S21903246B637465640A0000000053707572696F757320496E74F5
+S219032480657272757074212121202D20766563746F723A2025BB
+S219032495642C20646174613A2025780A0000005152590043613F
+S2190324AA6E2774206964656E7469667920464C4153482C207343
+S2190324BF6F7272790A00000000457272203D2025780A000000DD
+S2190324D430313233343536373839616263646566000000005039
+S2190324E93031004F4B0000453031004530330045303200423074
+S2190324FE310030313233343536373839414243444546000000EE
+S21903251300303132333435363738394142434445460000000009
+S2190325283C42616420666F726D617420737472696E673A200099
+S21903253D000000203A00003E0A00003C6E756C6C3E00003C4E20
+S2190325526F74206120737472696E673A2030780000003E000011
+S21903256700253038583A200000253032580000000020200000F9
+S21903257C20000000207C0000256300007C0A000030313233347E
+S21903259135363738390000303132333435363738396162636483
+S2190325A6656600000000303132333435363738394142434445F1
+S2190325BB46000000005E430A003078253038583A20000000002B
+S2190325D025303258000000002020000020000000207C000025EE
+S2190325E56300007C0A0000202D2061726520796F752073757254
+S2190325FA652028792F6E293F2000556E62616C616E636564206C
+S21903260F737472696E67210A00416D626967756F757320636F4E
+S2190326246D6D616E6420272573272C2063686F696365732061DB
+S21903263972653A20257300202573000A00000055736167653ACA
+S21903264E0A002020257325732025730A00002A2A204572726F27
+S219032663723A20257320616C72656164792073706563696669F1
+S21903267865640A002A2A204572726F723A20696E76616C6964B3
+S21903268D206E756D626572202725732720666F722025730A0058
+S2190326A200002A2A204572726F723A20696E76616C69642066D6
+S2190326B76C616720272563270A000000002A2A204572726F7254
+S2190326CC3A206E6F2064656661756C742F6E6F6E2D666C616774
+S2190326E120617267756D656E747320737570706F727465640AD6
+S2190326F6000078797A4D6F64656D202D202573206D6F64652C74
+S21903270B20256428534F48292F256428535458292F25642843A2
+S219032720414E29207061636B6574732C202564207265747269BE
+S21903273565730A0000000043524300436B73756D000000436126
+S21903274A6E2774206163636573732066696C65000000536F72E3
+S21903275F72792C207A4D6F64656D206E6F7420617661696C61BB
+S219032774626C65207965740054696D6564206F757400000045F3
+S2190327896E64206F662066696C650043616E63656C6C65640031
+S21903279E0000496E76616C6964206672616D696E67004352437B
+S2190327B32F636865636B73756D206572726F720000426C6F63BD
+S2190327C86B2073657175656E6365206572726F72000000005571
+S2190327DD6E6B6E6F776E206572726F720000004275665B2564F9
+S2190327F25D2F25703A206275663A2025702C206C656E3A202519
+S219032807642F25642C206E6578743A2025700A00004672656512
+S21903281C206C697374203D2025700A005F5F656E65745F706FFF
+S2190328316C6C3A206E6F206D6F726520627566666572730A0091
+S21903284600004E45544153434949000000004F435445540000A6
+S21903285B00556E6B6E6F776E206572726F7200000066696C6586
+S219032870206E6F7420666F756E6400006163636573732076692D
+S2190328856F6C6174696F6E000000006469736B2066756C6C20A2
+S21903289A6F7220616C6C6F636174696F6E206578636565646507
+S2190328AF6400000000696C6C6567616C2054465450206F70650C
+S2190328C4726174696F6E0000756E6B6E6F776E207472616E7312
+S2190328D96665722049440066696C6520616C72656164792065D1
+S2190328EE7869737473006E6F2073756368207573657200000003
+S219032903006F7065726174696F6E2074696D6564206F7574003B
+S219032918736F6D6520736F7274206F66206E6574776F726B20C7
+S21903292D6572726F720000696E76616C696420706172616D65E6
+S21903294274657200000070726F746F636F6C2076696F6C61740C
+S219032957696F6E000066696C65206973206C6172676572207450
+S21903296C68616E20627566666572000025642E25642E25642E58
+S2190329812564002573202D2063616C6C656420776974682069E1
+S2190329966E76616C6964204349533A2025780A00000063665F7E
+S2190329AB70617273655F63667461626C650000000063665F702C
+S2190329C0617273655F636F6E6669670050434D4349413A20492A
+S2190329D56E76616C696420736C6F742025640A000000002E2E76
+S2190329EA2E2045726173652066726F6D2025702D25703A2000ED
+S2190329FF002E0000000A0000002E2E2E2050726F6772616D20E1
+S219032A1466726F6D2025702D25702061742025703A2000002E48
+S219032A292E2E204C6F636B2066726F6D2025702D25703A2000E6
+S219032A3E00002E2E2E20556E6C6F636B2066726F6D2025702DAF
+S219032A5325703A20004E6F206572726F72202D206F70657261EC
+S219032A6874696F6E20636F6D706C657465000000446576696333
+S219032A7D6520697320696E2065726173652073757370656E6492
+S219032A9220737461746500000000446576696365206973206911
+S219032AA76E2070726F6772616D2073757370656E642073746102
+S219032ABC74650000496E76616C696420464C4153482061646486
+S219032AD1726573730000004572726F7220747279696E672074D0
+S219032AE66F2065726173650000004572726F7220747279696ED4
+S219032AFB6720746F206C6F636B2F756E6C6F636B004572726F38
+S219032B107220747279696E6720746F2070726F6772616D004717
+S219032B25656E65726963206572726F7200000044657669636583
+S219032B3A2F726567696F6E2069732077726974652D70726F7492
+S219032B4F656374656400000000464C415348207375622D737973
+S219032B647374656D206E6F7420696E697469616C697A65640074
+S219032B790000004461746120766572696679206661696C65648B
+S219032B8E206166746572206F7065726174696F6E0000556E6BD9
+S219032BA36E6F776E206572726F7200000045746865726E6574CA
+S219032BB82073656E643A0A0045746865726E65742072656376E3
+S219032BCD3A0A006574685F6472765F6473722073686F756C6464
+S219032BE2206E6F742062652063616C6C65643A20766563746F7E
+S219032BF7722025642C20646174612025780A00000000000000F9
+S219032C0C446973706C617920526564426F6F74207665727369BD
+S219032C216F6E20696E666F726D6174696F6E0076657273696F5B
+S219032C366E005B3C746F7069633E5D00000048656C7020616256
+S219032C4B6F75742068656C703F0000000068656C700000000063
+S219032C605B2D77203C74696D656F75743E5D205B656E747279AD
+S219032C755D00004578656375746520636F6465206174206120C1
+S219032C8A6C6F636174696F6E0000676F00002D62203C6C6F63D5
+S219032C9F6174696F6E3E205B2D6C203C6C656E6774683E5D0032
+S219032CB4446973706C617920286865782064756D702920612000
+S219032CC972616E6765206F66206D656D6F72790000000064755A
+S219032CDE6D70000000005B4F4E207C204F46465D00004D616EF4
+S219032CF3616765206D616368696E65206361636865730000001B
+S219032D08636163686500000052657365742074686520737973D7
+S219032D1D74656D000000007265736574000000506C6174666FCA
+S219032D32726D3A20257320282573292025730A000000417373C1
+S219032D476162657420646576656C6F706D656E7420737973741D
+S219032D5C656D00005374726F6E6741524D203131313000004305
+S219032D716F707972696768742028432920323030302C2032308B
+S219032D8630312C20526564204861742C20496E632E0A0A000083
+S219032D9B0052414D3A2025702D25700A003D3D204578656375EC
+S219032DB074696E6720626F6F742073637269707420696E20258F
+S219032DC5642E25303364207365636F6E6473202D20656E74654B
+S219032DDA72205E4320746F2061626F72740A0000000052656449
+S219032DEF426F6F743E200000002A2A204572726F723A20496C48
+S219032E046C6567616C20636F6D6D616E643A20222573220A006D
+S219032E190000006F6E00006F666600496E76616C6964206361D9
+S219032E2E636865206D6F64653A2025730A00636163686573200F
+S219032E433F0A0000003C746F7069633E00496E76616C696420A9
+S219032E58617267756D656E740A00000025730A20202025732036
+S219032E6D25730A00000000626173652061646472657373000005
+S219032E8200006C656E677468000044756D702077686174205BCC
+S219032E976C6F636174696F6E5D3F0A0000776169742074696D00
+S219032EAC656F7574000000007374617274696E67206164647225
+S219032EC16573730000000041626F757420746F2073746172745D
+S219032ED620657865637574696F6E206174202570202D20616211
+S219032EEB6F72742077697468205E432077697468696E2025647C
+S219032F00207365636F6E64730A0000002E2E2E205265736574EE
+S219032F1574696E672E00000A0000002121206F6F70732C2052F4
+S219032F2A45534554206E6F7420776F726B696E67206F6E207436
+S219032F3F68697320706C6174666F726D0A0000000025733A20B0
+S219032F5443616E27742066696E642061646472657373206F66F7
+S219032F69207365727665720A0000005F5F7564705F73656E647A
+S219032F7E746F000000007564705F7265637666726F6D202D20DA
+S219032F9364726F70706564207061636B6574206F6620256420DD
+S219032FA862797465730A000047444220636F6E6E656374696F2C
+S219032FBD6E20706F7274006764625F706F7274000000004E65A0
+S219032FD274776F726B20646562756720617420626F6F74207427
+S219032FE7696D6500006E65745F64656275670000005573652098
+S219032FFC424F4F545020666F72206E6574776F726B20636F6E43
+S21903301166696775726174696F6E00626F6F74700000004C6F8B
+S21903302663616C204950206164647265737300000000626F6F5E
+S21903303B74705F6D795F69700044656661756C74207365727672
+S21903305065722049502061646472657373000000626F6F7470A9
+S2190330655F7365727665725F69700025732E25640A00006E65F4
+S21903307A745F696F5F7772697465000000006E65745F696F5F27
+S21903308F72656164004E6F206E6574776F726B20696E7465725F
+S2190330A4666163657320666F756E640A0000000043616E27741A
+S2190330B92067657420424F4F545020696E666F202D206E657476
+S2190330CE776F726B2064697361626C6564210A00000049503ACC
+S2190330E320257300002C2044656661756C742073657276657250
+S2190330F83A2025730A000000000102020303030304040404049A
+S21903310D0404040505050505050505050505050505050506063D
+S21903312206060606060606060606060606060606060606060612
+S219033137060606060606060606070707070707070707070707F1
+S21903314C070707070707070707070707070707070707070707D3
+S219033161070707070707070707070707070707070707070707BE
+S2190331760707070707070707070708080808080808080808089E
+S21903318B0808080808080808080808080808080808080808087F
+S2190331A00808080808080808080808080808080808080808086A
+S2190331B508080808080808080808080808080808080808080855
+S2190331CA08080808080808080808080808080808080808080840
+S2190331DF0808080808080808080808080808080808080808082B
+S2190331F408080808080808080808080800010202030303030449
+S21903320904040404040404050505050505050505050505050546
+S21903321E05050606060606060606060606060606060606060617
+S219033233060606060606060606060606060707070707070707F8
+S219033248070707070707070707070707070707070707070707D6
+S21903325D070707070707070707070707070707070707070707C1
+S219033272070707070707070707070707070708080808080808A5
+S21903328708080808080808080808080808080808080808080882
+S21903329C0808080808080808080808080808080808080808086D
+S2190332B108080808080808080808080808080808080808080858
+S2190332C608080808080808080808080808080808080808080843
+S2190332DB0808080808080808080808080808080808080808082E
+S2140332F00808080808080808080808080808080846
+S21903330000000000207902002079020020790200207902002024
+S2190333157902002079020020790200207902002079020020791B
+S21903332A0200207902002079020020790200207902002079027D
+S21903333F0020790200207902002079020020790200207902006A
+S21903335420790200207902002079020020790200207902002035
+S219033369790200207902002079020020790200207902002079C7
+S21903337E02002079020020790200207902002079020020790229
+S21903339300207902002079020020790200207902002079020016
+S2190333A8207902002079020020790200207902002079020020E1
+S2190333BD79020020790200207902002079020020790200207973
+S2190333D2020020790200207902002079020020790200207902D5
+S2190333E7002079020020790200207902000000000000000000F8
+S2190333FC000000000000000000000000000000000000000000B4
+S2190334110000000000000000000000000000000000000000009E
+S21903342600000000000000000000000000000000000000000089
+S21903343B00000000000000000000000000000000000000000074
+S2190334500000000000000000000000000000000000000000005F
+S2190334650000000000000000000000000000000000000000004A
+S21903347A00000000000000000000000000000000000000000035
+S21903348F00000000000000000000000000000000000000000020
+S2190334A40000000000000000000000000000000000000000000B
+S2190334B9000000000000000000000000000000000000000000F6
+S2190334CE000000000000000000000000000000000000000000E1
+S2190334E3000000000000000000000000000000000000000000CC
+S2190334F8000000000000000000000000000000000000000000B7
+S21903350D000000000000000000000000000000000000000000A1
+S2190335220000000000000000000000000000000000000000008C
+S21903353700000000000000000000000000000000000000000077
+S21903354C00000000000000000000000000000000000000000062
+S2190335610000000000000000000000000000000000000000004D
+S21903357600000000000000000000000000000000000000000038
+S21903358B00000000000000000000000000000000000000000023
+S2190335A00000000000000000000000000000000000000000000E
+S2190335B5000000000000000000000000000000000000000000F9
+S2190335CA000000000000000000000A526564426F6F7428746D22
+S2190335DF2920646562756720656E7669726F6E6D656E74202D5D
+S2190335F4206275696C742031313A35303A31312C204A616E2038
+S219033609333020323030310A0000005B2D725D205B2D765D2062
+S21903361E5B2D68203C686F73743E5D205B2D6D207B54465450FC
+S219033633207C2078797A4D4F44454D7D5D205B2D62203C6261DE
+S21903364873655F616464726573733E5D203C66696C655F6E6183
+S21903365D6D653E000000007C2F2D5C7C2D000000000000BC3A6D
+S2190336720200883A0200943B0200AC3B0200203C02005C3E02C1
+S21903368700F03F0200F03F020084400200403903000000000082
+S21903369C7036030060F603007C2103000000000000000000006F
+S2190336B100000008881234567800002000000000000000000038
+S2190336C60000486302009863020000000000000000000000003D
+S2190336DB00FFFFFFFF000000000000000000000000A0F603003D
+S2190336F000000000000000000000000000000000FEFFFFFFFEC4
+S219033705FFFFFF000000000000000000002110422063308440C0
+S21903371AA550C660E770088129914AA16BB18CC1ADD1CEE1EF6D
+S21903372FF13112100273325222B5529442F772D6623993188339
+S2190337447BB35AA3BDD39CC3FFF3DEE36224433420040114E67F
+S21903375964C774A44485546AA54BB528850995EEE5CFF5ACC591
+S21903376E8DD55336722611163006D776F6669556B4465BB77A44
+S219033783A719973887DFF7FEE79DD7BCC7C448E5588668A7780B
+S2190337984008611802282338CCC9EDD98EE9AFF9488969990A77
+S2190337ADA92BB9F55AD44AB77A966A711A500A333A122AFDDB6E
+S2190337C2DCCBBFFB9EEB799B588B3BBB1AABA66C877CE44CC544
+S2190337D75C222C033C600C411CAEED8FFDECCDCDDD2AAD0BBDFA
+S2190337EC688D499D977EB66ED55EF44E133E322E511E700E9FFA
+S219033801FFBEEFDDDFFCCF1BBF3AAF599F788F8891A981CAB1F7
+S219033816EBA10CD12DC14EF16FE18010A100C230E32004502510
+S21903382B4046706760B9839893FBA3DAB33DC31CD37FE35EF38F
+S219033840B1029012F322D2323542145277625672EAB5CBA5A8C8
+S2190338559589856EF54FE52CD50DC5E234C324A0148104667439
+S21903386A476424540544DBA7FAB79987B8975FE77EF71DC73C58
+S21903387FD7D326F2369106B01657667676154634564CD96DC9EE
+S2190338940EF92FE9C899E9898AB9ABA94458654806782768C078
+S2190338A918E1088238A3287DCB5CDB3FEB1EFBF98BD89BBBAB5D
+S2190338BE9ABB754A545A376A167AF10AD01AB32A923A2EFD0F32
+S2190338D3ED6CDD4DCDAABD8BADE89DC98D267C076C645C454CA8
+S2190338E8A23C832CE01CC10C1FEF3EFF5DCF7CDF9BAFBABFD9FF
+S2190338FD8FF89F176E367E554E745E932EB23ED10EF01E00003C
+S21903391200000000000000000000000000000000000000000098
+S2190339270000000000000000000000000000000000141E000051
+S21903393C141E000034CF020000D3020058D10200000000000037
+S21903395100000000000180E80300000F00000000000580E8036E
+S21903396600001100000000000000000000000200000000000031
+S21903397B0000000000000000000000000000000000000000002F
+S2190339900000000000000000000000000000000000000000001A
+S2190339A500000000000000000000000000000000000000000005
+S2190339BA0000F4010000000000000000000000000000000000FB
+S2190339CF000000000000000000000000000000000000000000DB
+S2190339E400180300F01703006817030078180200FC160300CCAC
+S2190339F9160300C41603009424020080160300681603004C1685
+S219033A0E03006C1F02004416030000160300FC150300CC16029D
+S219033A2300B415030090150300881503006C120200F4150300E6
+S219033A38C4150300BC15030090150200601703002C1703000456
+S219033A4D170300A02602009C160300881603004C16030044215A
+S219033A620200BC160300A41603004C160300EC220200082D0306
+S219033A7700F02C0300E42C030068D70200DC2C0300B42C0300D1
+S219033A8C982C0300D8D90200B81103009811030078110300B0EF
+S219033AA104020048150300341503002C15030040290200801512
+S219033AB60300541503004C150300002F0200942C0300782C0385
+S219033ACB00602C0300CCDA0200582C0300442C0300382C030046
+S219033AE0F0D80200341203002812030014360300500C0200A42A
+S219033AF52203008822030048220300D4400200242D0300102DCE
+S219033B0A0300082C03007CDC0200302C03000C2C0300082C0339
+S219033B1F004CD40200801F03006C1F0300000000000100000036
+S219033B340100000000000000981F03008C1F0300801F03000168
+S219033B4900000004000000FC150300D41F0300AC1F0300801FE4
+S219033B5E03000100000002000000000000001C300300F82F03CB
+S219033B73000000000001000000010000000100000038300300C7
+S219033B88243003001C3003000000000005000000000000006015
+S219033B9D300300443003001C300300000000000500000000000D
+S219033BB20000C42F0300B02F030000000000010000000200001B
+S219033BC70028230000EC2F0300D02F0300000000000100000075
+S219033BDC010000000000000074350200440203008421030050DF
+S213033BF13A02009C360300000000002482020004
 S804020044B5
index e4f4be89933eebabf47538fdfc1fc9dc6744eb33..faacb69cb17f0b281a7a7e055d7d1b9c70f62dc7
GIT binary patch
literal 84620
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
ZjDH+s^kc3-3!eu4JkqYOpM6k;{wH)Uq(%S$
index da525fb481590a9d3e273a3512feb966a9d6bb48..da3156f5aa011c02098de25c33606338e1f412cd
GIT binary patch
literal 109007
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%0Ave{)
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
AD*ylh
--- a/packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.srec
+++ b/packages/hal/arm/sa11x0/assabet/current/images/redboot_ROM.srec
@@ -1,3440 +1,4033 @@
-S02B00002F776F726B2F617373616265745F726564626F6F742F524F4D2F696E7374616C6C2F62696E2F7265D1
+S02B00002F776F726B2F617373616265742F726564626F6F742F524F4D2F696E7374616C6C2F62696E2F726501
 S31A5000000018F09FE518F09FE518F09FE518F09FE518F09FE500D9
-S31A5000001500000018F09FE518F09FE54400000078030050FC035A
-S31A5000002A005034040050B004005000000000980500508005001D
-S30A5000003F505402005070
-S31A500000441214A0E388269FE5022A82E3012982E3002081E57C54
-S31A50000059169FE57C269FE5002081E578369FE5BF2FA0E3002033
-S31A5000006E83E570269FE5002081E56C369FE56420A0E3009093CF
-S31A50000083E5012052E2FCFFFF1A4C269FE5002081E548369FE546
-S31A500000980128A0E3002083E5520F0FEE44169FE50B20A0E300DF
-S31A500000AD2081E5510F0FEE0000A0E10000A0E11214A0E3102624
-S31A500000C29FE5022AC2E3012982E3002081E51C169FE501104161
-S31A500000D7E2000051E3FCFFFF1A10169FE510269FE5021041E0FD
+S31A5000001500000018F09FE518F09FE54400000068030050EC037A
+S31A5000002A005024040050A004005000000000880500507005005D
+S30A5000003F503C02005088
+S31A500000441214A0E378269FE5022A82E3012982E3002081E56C74
+S31A50000059169FE56C269FE5002081E568369FE5BF2FA0E3002053
+S31A5000006E83E560269FE5002081E55C369FE56420A0E3009093EF
+S31A50000083E5012052E2FCFFFF1A3C269FE5002081E538369FE566
+S31A500000980128A0E3002083E5520F0FEE34169FE50B20A0E300EF
+S31A500000AD2081E5510F0FEE0000A0E10000A0E11214A0E3002634
+S31A500000C29FE5022AC2E3012982E3002081E50C169FE501104171
+S31A500000D7E2000051E3FCFFFF1A00169FE500269FE5021041E01D
 S31A500000EC042091E4043091E4003082E5042091E4000052E3FA08
-S31A50000101FFFF1A1214A0E3C8259FE5022A82E30129C2E30020E1
-S31A5000011681E5E0159FE50120A0E3002081E5D8159FE50820A03C
+S31A50000101FFFF1A1214A0E3B8259FE5022A82E30129C2E30020F1
+S31A5000011681E5D0159FE50120A0E3002081E5C8159FE50820A05C
 S31A5000012BE3002081E50311A0E3002091E5002091E5002091E5A7
 S31A50000140002091E5002091E5002091E5002091E5002091E50A5C
-S31A5000015512A0E3A8259FE5002081E51B0000EA040000A07FAA01
-S31A5000016AAAAA080000A0AAAAAAAA0C0000A0AAAAAAAA10000022
-S31A5000017FA0384B384B140000A019242122180000A04A994A99BD
-S31A500001941C0000A02703FC49200000A07FAAAAAA240000A0AA2A
-S31A500001A9AAAAAA280000A0AAAAAAAA2C0000A049441942300099
-S31A500001BE00A0CCAFCCAF000000A0547254720000000000000014
-S31A500001D30028159FE51020A0E3002081E524159FE50321A0E363
-S31A500001E802D081E1840200EB1214A0E3DC249FE5022A82E30148
-S31A500001FD29C2E3002081E504259FE57110A0E3101F01EE02F082
-S31A50000212A0E10000A0E10000A0E10000A0E11214A0E3AC249F65
-S31A50000227E5022AC2E30129C2E3002081E5D8149FE5002081E56B
-S31A5000023CD4149FE5009081E50000A0E3CC149FE5082091E50868
-S31A500002512080E50000A0E35C149FE5282091E5282080E51820A3
-S31A5000026691E5182080E5382091E5382080E51C2091E51C208021
-S31A5000027BE53C2091E53C2080E50C2091E50C2080E52C2091E5AB
-S31A500002902C2080E5102091E5102080E5302091E5302080E5009C
-S31A500002A52091E5002080E56C249FE5202080E5E8339FE5E84350
-S31A500002BA9FE5E8539FE5050054E10500000A043043E20440446C
-S31A500002CFE20400B3E50400A4E5050054E1FBFFFF1AA0D39FE575
-S31A500002E4D200A0E300F029E19CD39FE5D100A0E300F029E18C93
-S31A500002F9D39FE5DB00A0E300F029E184D39FE5D300A0E300F0CA
-S31A5000030E29E100F069E16CD39FE578139FE578239FE50000A0AF
-S31A50000323E3020051E10200000A040081E4020051E1FCFFFF1A9B
-S31A500003385B0100EB9B0800EB0000A0E3D8139FE5042091E504F5
-S31A5000034D2080E5242091E5242080E58D0F00EB330100EB9E1603
-S31A5000036200EBFEFFFFEAD300A0E300F029E1B3FFFFEA0BB0AD0C
-S31A50000377DE14D39FE501582DE900004FE101002DE90DC0A0E1CE
-S31A5000038C00000FE11F00C0E3130080E300F029E10DB0A0E1DCCA
-S31A500003A1D29FE50D005BE10300008ACC029FE500005BE1000037
-S31A500003B6009A0BD0A0E14CD04DE2FF0F8DE81F009CE820001045
-S31A500003CBE304404402024044123C008DE500108DE52C208DE5D4
-S31A500003E040308DE538408DE534E08DE54C008CE230B08DE50153
-S31A500003F540A0E34B0000EA5CD04DE2FF0F8DE800004FE1200077
-S31A5000040A10E304304E0202304E123C008DE540C08DE538308D69
-S31A5000041FE534E08DE55C008DE230008DE50240A0E33D0000EAAE
-S31A5000043458D29FE504E04EE201582DE900004FE101002DE90DD8
-S31A50000449C0A0E100000FE11F00C0E3130080E300F029E10DB028
-S31A5000045EA0E11CD29FE50D005BE10300008A0C029FE500005B7D
-S31A50000473E10000009A0BD0A0E14CD04DE2FF0F8DE81F009CE8D6
-S31A500004883C008DE500108DE52C208DE540308DE538408DE5341B
-S31A5000049DE08DE54C008CE230B08DE50340A0E31E0000EADCD11B
-S31A500004B29FE504E04EE201582DE900004FE101002DE90DC0A024
-S31A500004C7E100000FE11F00C0E3130080E300F029E10DB0A0E189
-S31A500004DCA0D19FE50D005BE10300008A90019FE500005BE10099
-S31A500004F100009A0BD0A0E14CD04DE2FF0F8DE81F009CE83C00FD
-S31A500005068DE500108DE52C208DE540308DE538408DE534E08D6B
-S31A5000051BE54C008CE230B08DE50440A0E3FFFFFFEA44408DE5E0
-S31A500005300D00A0E19C0000EB0DC0A0E100000FE1C00080E300EA
-S31A50000545F029E10000A0E10000A0E134E09CE530D09DE51F0019
-S31A5000055AC0E3120080E300F029E10CD0A0E138E09DE53C009D54
-S31A5000056FE540C09DE500F069E1FF0F9DE80EF0B0E104D19FE505
-S31A5000058404E04EE201582DE900004FE101002DE9040000EAF064
-S31A50000599D09FE504E04EE201582DE900004FE101002DE90DC00C
-S31A500005AEA0E100000FE11F00C0E3D30080E300F029E10DB0A022
-S31A500005C3E14CD04DE2FF0F8DE81F009CE83C008DE500108DE54B
-S31A500005D82C208DE540308DE538408DE534E08DE530B08DE50D49
-S31A500005ED90A0E10900A0E1F70000EB0040A0E10400A0E120219F
-S31A500006029FE5009082E5A4109FE5041191E798209FE50461921A
-S31A50000617E70920A0E10FE0A0E106F0A0E10DC0A0E100000FE1C2
-S31A5000062CC00080E300F029E10000A0E10000A0E134E09CE5307F
-S31A50000641D09DE51F00C0E3120080E300F029E10CD0A0E138E056
-S31A500006569DE53C009DE540C09DE500F069E1FF0F9DE80EF0B0FC
-S31A5000066BE10EF0A0E100000FE10EF0A0E10D00A0E10EF0A0E148
-S31A5000068030870000308B0000309B000030860000B086000030B6
-S31A50000695870000B0850000404401004044010028140150008027
-S31A500006AA0000B085000004800000F4800000E481000000000053
-S31A500006BF500080000065436F73203A2000417567203234203207
-S31A500006D430303000E414A00004000490FCA707080800049000AD
-S31A500006E9A407080000049014000290A0860100640100500000DD
-S31A500006FE0050600002800400029055725472309B00002002004F
-S31A500007135060010000640100000000005044020050000000502F
-S31A50000728DC4101000DC0A0E100D82DE930309FE530009FE50074
-S31A5000073D1093E504B04CE228C09FE50C3091E50C308CE50C30E0
-S31A5000075290E5102091E50C3081E510208CE5103090E510308168
-S31A50000767E500A81BE9D482000020000050309B00000DC0A0E1B7
-S31A5000077C00D82DE91C209FE51C109FE5000092E50C3091E50C7F
-S31A500007913080E5102091E504B04CE2102080E500A81BE9D48249
-S31A500007A60000309B00000DC0A0E130D82DE968309FE504B04C95
-S31A500007BBE2002093E50040A0E1000052E30400000A443094E568
-S31A500007D0040053E30100001A382084E530A81BE940509FE500B8
-S31A500007E53095E5013083E2003085E5010053E30000001ACBFFB4
-S31A500007FAFFEB28309FE5004083E54A0400EB003095E5013043CF
-S31A5000080FE2003085E5000053E30000001AD5FFFFEB30A81BE918
-S31A500008241C830000509B0000684101000DC0A0E130D82DE924A5
-S31A50000839309FE504B04CE220409FE50350A0E1030054E10300CB
-S31A5000084E003A0FE0A0E104F014E4050054E1FBFFFF2A30A81B59
-S31A50000863E9AC850000AC8500000DC0A0E100D82DE90030A0E1F2
-S31A500008780120A0E104B04CE20C009FE50310A0E19D1000EB00D5
-S31A5000088D00A0E300A81BE908FA00500DC0A0E100D82DE904B08F
-S31A500008A24CE2FEDEFFE700A81BE90DC0A0E110D82DE970209FD4
-S31A500008B7E570309FE570109FE50040A0E3004082E5004083E5B7
-S31A500008CC64209FE50130A0E3003081E55C309FE5004082E500B8
-S31A500008E14083E5082082E20F32E0E3003082E504B04CE2AE014C
-S31A500008F600EB40309FE5004083E50922A0E3004082E5410E006C
-S31A5000090BEB101F11EE0F1081E3101F01EE101F11EE011A81E31A
-S31A50000920031081E3101F01EE10A81BE904000590080005900CD9
-S31A500009350005901000049014000490100000900DC0A0E130D880
-S31A5000094A2DE90030A0E1010040E2000053E304B04CE21B000025
-S31A5000095FDA6C509FE500E0A0E3014040E2001095E5002095E529
-S31A50000974010052E10300001A50309FE5002093E5010052E1FCFB
-S31A50000989FFFF0A09C2A0E300309CE5000053E30400000A012097
-S31A5000099E52E000309C450320824002E08EE0010000EA023061F8
-S31A500009B3E003E08EE002005EE3EAFFFFDA0030A0E10400A0E16D
-S31A500009C8000053E3E4FFFFCA30A81BE9100000900DC0A0E10018
-S31A500009DDD82DE984309FE5002093E504B04CE2FF0812E3100003
-S31A500009F2A0130500001AFF0C12E30800A0130200001AFF0012E0
-S31A50000A07E31800A0030000A01358109FE558C09FE55230A0E1A8
-S31A50000A1C010013E30C00000A0B0050E30700001A003091E50C51
-S31A50000A312003E05230A0E1010013E30300001A010080E21B00C2
-S31A50000A4650E3F9FFFF9A00A81BE9200080E200A81BE901008026
-S31A50000A5BE2070010E3ECFFFF1A0000E0E300A81BE9000005904C
-S31A50000A701800049000F8FF0F0DC0A0E100D82DE92A0050E30BC5
-S31A50000A8500A0C314109FE50120A0E3003091E504B04CE212308D
-S31A50000A9AC3E1003081E500A81BE9040005900DC0A0E100D82D1F
-S31A50000AAFE92A0050E30B00A0C314109FE50120A0E3003091E536
-S31A50000AC404B04CE2123083E1003081E500A81BE9040005900D57
-S31A50000AD9C0A0E100D82DE90B3040E21F0053E304B04CE20400EB
-S31A50000AEE009A1F3000E20120A0E308109FE51223A0E10020813B
-S31A50000B03E500A81BE9180004900DC0A0E100D82DE90B3040E2B1
-S31A50000B181F0053E304B04CE23400009A000051E31900000A0016
-S31A50000B2D0052E30B00000A1F1000E2BC009FE50120A0E30030EE
-S31A50000B4290E51221A0E1B0109FE5023083E1003080E5003091EF
-S31A50000B57E5023083E1003081E500A81BE91F1000E28C009FE555
-S31A50000B6C0120A0E3003090E51221E0E180109FE5023003E000B8
-S31A50000B813080E5003091E5023003E0003081E500A81BE9000077
-S31A50000B9652E30B00000A1F1000E254009FE50120A0E30030905D
-S31A50000BABE51221A0E148109FE5023083E1003080E5003091E599
-S31A50000BC00230C3E1003081E500A81BE91F1000E228009FE501F4
-S31A50000BD520A0E3003090E51221A0E114109FE5023083E100304B
-S31A50000BEA80E5003091E50230C3E1003081E500A81BE910000469
-S31A50000BFF90140004900DC0A0E110D82DE904B04CE260439FE5FE
-S31A50000C14104F02EE0330A0E3103F03EE0400A0E10010A0E30117
-S31A50000C2929A0E3FB2500EB0010A0E3052CA0E32000A0E302C0FD
-S31A50000C3EA0E3033B8CE30C3083E3013A83E1023184E7010040FB
-S31A50000C53E2011081E2012082E2000050E3F6FFFFCA8020A0E347
-S31A50000C680210A0E10400A0E302C0A0E3033B8CE30C3083E30172
-S31A50000C7D3A83E1023184E7010040E2011081E2012082E20000B4
-S31A50000C9250E3F6FFFFCA012CA0E30210A0E18000A0E3D0C29F8F
-S31A50000CA7E5013AA0E12C3683E1023184E7010040E2011081E246
-S31A50000CBC012082E2000050E3F7FFFFCA062DA0E30210A0E1808D
-S31A50000CD100A0E3A0C29FE5013AA0E12C3683E1023184E701002E
-S31A50000CE640E2011081E2012082E2000050E3F7FFFFCA612FA066
-S31A50000CFBE30210A0E10100A0E370C29FE5013AA0E12C3683E15C
-S31A50000D10023184E7010040E2011081E2012082E2000050E3F794
-S31A50000D25FFFFCA622FA0E30210A0E10100A0E340C29FE5013AAF
-S31A50000D3AA0E12C3683E1023184E7010040E2011081E20120822F
-S31A50000D4FE2000050E3F7FFFFCA632FA0E30210A0E10100A0E339
-S31A50000D6410C29FE5013AA0E12C3683E1023184E7010040E2018A
-S31A50000D791081E2012082E2000050E3F7FFFFCA192EA0E3021049
-S31A50000D8EA0E10400A0E3E0C19FE5013AA0E12C3683E102318494
-S31A50000DA3E7010040E2011081E2012082E2000050E3F7FFFFCAF0
-S31A50000DB8652FA0E30210A0E10400A0E3B0C19FE5013AA0E12CC2
-S31A50000DCD3683E1023184E7010040E2011081E2012082E2000067
-S31A50000DE250E3F7FFFFCA022CA0E30210A0E10200A0E180C19F0D
-S31A50000DF7E5013AA0E12C3683E1023184E7010040E2011081E2F5
-S31A50000E0C012082E2000050E3F7FFFFCA032CA0E30210A0E102BD
-S31A50000E210CA0E350C19FE5013AA0E12C3683E1023184E7010021
-S31A50000E3640E2011081E2012082E2000050E3F7FFFFCA012BA078
-S31A50000E4BE30210A0E18000A0E320C19FE5013AA0E12C3683E1DC
-S31A50000E60023184E7010040E2011081E2012082E2000050E3F743
-S31A50000E75FFFFCA122DA0E30210A0E18000A0E3F0C09FE5013A83
-S31A50000E8AA0E12C3683E1023184E7010040E2011081E2012082DE
-S31A50000E9FE2000050E3F7FFFFCA022BA0E30210A0E1010BA0E342
-S31A50000EB4C0C09FE5013AA0E12C3683E1023184E7010040E2018B
-S31A50000EC91081E2012082E2000050E3F7FFFFCA031BA0E3002013
-S31A50000EDEA0E32000A0E302C0A0E3033B8CE30C3083E3013A8331
-S31A50000EF3E1023184E7010040E2011081E2012082E2000050E3C6
-S31A50000F08F6FFFFCA032BA0E30210A0E12000A0E302C0A0E30391
-S31A50000F1D3B8CE3043083E3013A83E1023184E7010040E20110B4
-S31A50000F3281E2012082E2000050E3F6FFFFCA0E2CA0E30210A00C
-S31A50000F47E18000A0E302C0A0E3033B8CE30C3083E3013A83E128
-S31A50000F5C023184E7010040E2011081E2012082E2000050E3F647
-S31A50000F71FFFFCA10A81BE9004000C00020C0000DC0A0E100D88B
-S31A50000F862DE904B04CE21CC09FE500309CE50030C3E101000022
-S31A50000F9BE0003083E100308CE51224A0E3003082E500A81BE9DA
-S31A50000FB0600100000DC0A0E100D82DE904B04CE200A81BE90D9E
-S31A50000FC5C0A0E100D82DE90C309FE50F0000E20000D3E704B073
-S31A50000FDA4CE200A81BE938FA00500DC0A0E100D82DE920209F35
-S31A50000FEFE5000092E504B04CE2000050E3010000CAED0800EB7B
-S31A5000100400A81BE90030E0E3003082E500A81BE9F08200000D20
-S31A50001019C0A0E100D82DE9FF0000E2613040E2050053E300105E
-S31A5000102EA0E104B04CE20100008A570040E200A81BE9302040B4
-S31A50001043E2FF3002E2090053E30100008A0200A0E100A81BE954
-S31A50001058413040E2050053E30100009A0000E0E300A81BE9371E
-S31A5000106D0041E200A81BE90DC0A0E110D82DE90030A0E304B096
-S31A500010824CE214D04DE214304BE524404BE21C000BE5D2FFFFE1
-S31A50001097EBFF0000E20410A0E1020000EB010050E3F9FFFF1A5B
-S31A500010AC10A81BE90DC0A0E170D82DE90140A0E11050D4E50492
-S31A500010C1B04CE2000055E30800001A240050E32800001A0130C2
-S31A500010D6A0E31030C4E50C5084E5005084E5023043E2043084B6
-S31A500010EBE5210000EA010055E31700001A230050E30600001ACA
-S31A50001100080094E50C1094E50030A0E30130C0E70220A0E3102E
-S31A5000111520C4E5160000EA0C1094E5020B51E30300001A003083
-S31A5000112AA0E31030C4E50000E0E370A81BE9003094E5082094AA
-S31A5000113FE5003083E0003084E50100C2E7013081E20C3084E551
-S31A50001154070000EA020055E30700001AFF0000E2ABFFFFEB006F
-S31A5000116902A0E1040084E50330A0E31030C4E50000A0E370A8F1
-S31A5000117E1BE9030055E32300001AFF0000E2A1FFFFEB04309457
-S31A50001193E50020D4E5003083E1043084E5030052E10200000AC0
-S31A500011A82D00A0E3750800EBDCFFFFEA2B00A0E3720800EB08E5
-S31A500011BD2094E50230D2E53A0053E31000001A0000D2E50C6088
-S31A500011D294E56B0800EB083094E50100D3E5680800EB0500A071
-S31A500011E7E1060050E10700008A0210E0E3083094E50020D3E794
-S31A500011FC033080E0010080E20120C3E7060050E1F8FFFF9A01FF
-S31A5000121100A0E370A81BE90000E0E30030A0E31030C4E570A85C
-S31A500012261BE90DC0A0E1F0D92DE904B04CE20070A0E168809FD2
-S31A5000123BE52400A0E3500800EB0050A0E30540D7E70560A0E1BD
-S31A50001250050054E10700000A0400A0E1490800EB016086E2045A
-S31A500012653085E00640D7E7FF5003E2000054E3F7FFFF1A2300E8
-S31A5000127AA0E3410800EB2502D8E73F0800EB0F3005E20300D839
-S31A5000128FE73C0800EB52FFFFEB7F0000E22B0050E3E5FFFF1AE7
-S31A500012A4F0A91BE938FA00500DC0A0E1F0DF2DE990009FE50079
-S31A500012B920A0E38C309FE504D04DE2002083E504B04CE200106A
-S31A500012CE90E503A0A0E1020051E14B0000DA0090A0E16C809F27
-S31A500012E3E56C309FE5002093E5000052E31900000A003090E506
-S31A500012F854109FE5030053E30300009A003098E5030013E30423
-S31A5000130D40A0030800000A30209FE5003092E50140A0E304003D
-S31A5000132253E10300009A003091E5010013E30140A0130240A01C
-S31A50001337032C004BE2001091E50420A0E1A00A00EB070000EA3E
-S31A5000134C54AB0000F482000058AB000060AB0000003098E50006
-S31A5000136120D3E50140A0E32C204BE500309AE5000053E3240000
-S31A50001376001A03C0A0E104005CE1150000AA2C604BE270E09F06
-S31A5000138BE50A70A0E16C509FE50600DCE700109EE52032D5E76D
-S31A500013A00130C1E4002097E500108EE5000052E31500001A0F7A
-S31A500013B53000E20320D5E70120C1E400309AE500108EE50000E4
-S31A500013CA53E30E00001A01C08CE204005CE1EDFFFFBA0020998C
-S31A500013DFE50900A0E1003098E5022064E0002089E5043083E0FC
-S31A500013F4003088E5000052E3010000EA5CAB000038FA0050B593
-S31A50001409FFFFCAF0AF1BE90DC0A0E170D82DE904B04CE268C057
-S31A5000141E9FE500108CE564109FE5000081E560009FE50020807C
-S31A50001433E55C209FE5000053E3003082E50C60A0E10A00000A9B
-S31A500014484C409FE50050A0E3005084E5003094E593FFFFEB0078
-S31A5000145D2094E5003094E5050053E10200000A0500A0E170A8FF
-S31A500014721BE98CFFFFEB002096E50030A0E30030C2E5000096DB
-S31A50001487E570A81BE95CAB000058AB000054AB000060AB0000E5
-S31A5000149CF48200000DC0A0E1F0DF2DE924019FE524219FE504C6
-S31A500014B1D04DE20070A0E3007082E504B04CE2003090E50290EE
-S31A500014C6A0E1070053E15A0000DA04319FE5002093E50010D298
-S31A500014DBE503A0A0E1070051E15400000AF0809FE5F0109FE58E
-S31A500014F0003091E5000053E31000000A003090E5030053E303BA
-S31A5000150500009A003098E5030013E30450A0030A00000AB4205C
-S31A5000151A9FE5003092E50150A0E3050053E10500009A003098C7
-S31A5000152FE5010013E30150A0130250A003000000EA0150A0E3BE
-S31A500015440040A0E3050054E1170000AA84609FE5003096E5016A
-S31A5000155900D3E4003086E5ACFEFFEB0002A0E1003099E5FF70A1
-S31A5000156E00E2000053E33000001A00309AE50100D3E400308A8F
-S31A50001583E5A3FEFFEB000087E1003099E5FF7000E2000053E3F0
-S31A500015982700001A2C304BE20370C4E7014084E2050054E1E837
-S31A500015ADFFFFBA2C109FE5003091E5000053E30900000A2C0040
-S31A500015C24BE2001098E50520A0E10C0A00EB060000EA54AB006E
-S31A500015D700F482000058AB00005CAB000060AB0000003098E571
-S31A500015EC0070C3E5003099E5000053E30F00001A30309FE5008B
-S31A500016012093E50300A0E1003098E5022065E0002080E5053094
-S31A5000161683E0003088E5000052E3050000DA00309AE50020D3B3
-S31A5000162BE5000052E3000000EA54AB0000ABFFFF1AF0AF1BE9EB
-S31A500016400DC0A0E170D82DE904B04CE25CC09FE500008CE55848
-S31A50001655009FE5001080E554109FE5002081E550209FE50000CF
-S31A5000166A53E3003082E50060A0E10A00000A40409FE50050A05F
-S31A5000167FE3005084E5003094E584FFFFEB002094E5003094E50C
-S31A50001694050053E10200000A0500A0E170A81BE97DFFFFEB009E
-S31A500016A90096E570A81BE958AB00005CAB000054AB000060AB2B
-S31A500016BE0000F48200000DC0A0E100D82DE904B04CE2800800A5
-S31A500016D3EB08209FE50130A0E3003082E500A81BE9D8820000C4
-S31A500016E80DC0A0E170D82DE904B04CE20060A0E30150A0E10054
-S31A500016FD6085E50040A0E1060000EA003095E5016086E2002074
-S31A5000171294E5033280E1003085E5012082E2002084E500209401
-S31A50001727E50030D2E5000053E30300000A0300A0E136FEFFEBA6
-S31A5000173C000050E3F0FFFFAA0600A0E170A81BE90DC0A0E17016
-S31A50001751D82DE904B04CE202E0A0E10060A0E3004051E20400A0
-S31A50001766001A3030A0E30130C0E40030C0E50200A0E370A81BB9
-S31A5000177BE907308EE2000053E3073083B2C3E1B0E11300000A7F
-S31A5000179050509FE501104EE28131A0E134C3B0E10020A003010A
-S31A500017A520A01301005EE30030A0130130A003032092E1060071
-S31A500017BA000AFFC00CE22C32D5E70130C0E40F200CE20230D5FA
-S31A500017CFE7026086E20130C0E400E051E2ECFFFF1A0600A0E18B
-S31A500017E470A81BE938FA00500DC0A0E110D82DE90010A0E18897
-S31A500017F9309FE504B04CE2002093E500E0A0E30E0052E11C0097
-S31A5000180E00DA74409FE500C094E50E005CE10300000A0100A02B
-S31A50001823E30FE0A0E10CF0A0E100E0A0E101005EE30200001ACB
-S31A5000183850309FE500E0C3E510A81BE9003094E501007EE300F2
-S31A5000184D0053130B00001A38309FE5003093E5000053E30700D4
-S31A50001862000A0100A0E30FE0A0E103F0A0E1000050E302000074
-S31A500018770A18209FE50130A0E30030C2E510A81BE9F4400100C4
-S31A5000188C00830000F8820000E8400100FC8200000DC0A0E110EF
-S31A500018A1D82DE974409FE50030D4E504B04CE2000053E30B00AA
-S31A500018B6000A64309FE500C093E500005CE30700000A58309FF6
-S31A500018CBE50000A0E3002093E50010A0E10FE0A0E10CF0A0E134
-S31A500018E00030A0E30030C4E53C409FE50030D4E5000053E308EA
-S31A500018F500000A30309FE5003093E5000053E30400000A0000AE
-S31A5000190AA0E30FE0A0E103F0A0E10030A0E30030C4E510A81BAC
-S31A5000191FE9F882000000830000F4400100FC820000E84001009B
-S31A500019340DC0A0E170D82DE9B8209FE5003092E504B04CE200B7
-S31A500019490053E30200000A003092E50FE0A0E103F0A0E19C20AA
-S31A5000195E9FE5003092E5000053E30300000A0030A0E30030824B
-S31A50001973E50250A0E3020000EA610D00EB4E0D00EB0050A0E1F3
-S31A500019886B0F00EB000050E30000000A730F00EB630F00EBBECA
-S31A5000199DFFFFEB450F00EB0300A0E3A70800EB0300A0E3720897
-S31A500019B200EB48609FE5000055E30600000A40409FE5003094A3
-S31A500019C7E50500A0E10FE0A0E103F0A0E1000050E3F9FFFF1A22
-S31A500019DC4E0F00EB003096E5000053E30200000A003096E50FB1
-S31A500019F1E0A0E103F0A0E170A81BE9EC820000D8410100E882A8
-S31A50001A060000DC8200000DC0A0E1F0DD2DE904B04CE224D04DC3
-S31A50001A1BE20050A0E10040A0E348604BE2F4A09FE500309AE54E
-S31A50001A300180A0E3000053E30500000A0400A0E10610A0E10FD7
-S31A50001A45E0A0E103F0A0E10080A0E1020000EA0400A0E13A06AF
-S31A50001A5A00EB48000BE50600A0E1103044E2070053E303E0A051
-S31A50001A6FE1017084E21100008A0840A0E30020A0E302C0A0E108
-S31A50001A8444004BE20010A0E1043082E2012082E203C0C1E70469
-S31A50001A990052E1FAFFFFBA0010A0E106C0A0E10320A0E301304E
-S31A50001AAEDCE4012042E20130C1E4010072E3FAFFFF1A00005832
-S31A50001AC3E30700000A0510A0E107005EE30C20A0930420A08340
-S31A50001AD80030A0E34BFEFFEB0050A0E1100000EA0520A0E10745
-S31A50001AED005EE31730A0930730A083010073E37810A0E3030014
-S31A50001B02000A013043E20110C2E4010073E3FBFFFF1A07005E92
-S31A50001B17E30200009A085085E2010000EAEC400100185085E23E
-S31A50001B2C0740A0E1190054E3BCFFFFDAF0AD1BE90DC0A0E1F0C3
-S31A50001B41D92DE904B04CE20CD04DE20040A0E31A70A0E301305C
-S31A50001B56D0E40180A0E124000BE5500053E31700001A24004B34
-S31A50001B6BE228104BE2DCFEFFEB040050E10800000A24201BE579
-S31A50001B800130D2E4FF3003E224200BE53D0053E30200001A2814
-S31A50001B95401BE5017084E2090000EA74209FE50030D2E50810C4
-S31A50001BAAA0E1000053E32900000A0130C1E40130F2E5000053B5
-S31A50001BBFE3FBFFFF1A240000EA0450A0E1070055E1180000AAE3
-S31A50001BD40060A0E32C104BE2104045E2070054E32C600BE50C1D
-S31A50001BE920A0930420A08324001BE50630A0E190FEFFEB2C1068
-S31A50001BFE1BE50500A0E1D70500EB070054E30300009A24301BE5
-S31A50001C13E5083083E2020000EA4CFA005024301BE5183083E261
-S31A50001C28015085E224300BE5070055E1E7FFFFBA28209FE500AD
-S31A50001C3D30D2E50810A0E1000053E30300000A0130C1E4013072
-S31A50001C52F2E5000053E3FBFFFF1A0030A0E30030C1E50000007E
-S31A50001C67EA50FA0050F0A91BE90DC0A0E1F0D82DE9D4239FE54A
-S31A50001C7C04B04CE2C0D04DE20040A0E10070A0E30030D4E502BD
-S31A50001C9160A0E10070C2E53F3043E23B0053E303F19F971702A8
-S31A50001CA600EA981D0050082500503C1E0050D8230050682200E8
-S31A50001CBB500825005008250050082500508C1F0050B0230050D9
-S31A50001CD0082500500825005008250050082500507020005008CD
-S31A50001CE5250050082500508C1F0050241E00500825005068220E
-S31A50001CFA0050C42300500825005008250050082500506C2000F5
-S31A50001D0F500825005008250050082500500825005008250050A8
-S31A50001D2408250050082500500825005008250050802400506804
-S31A50001D39220050F01D00500825005008250050301E00500825AB
-S31A50001D4E0050082500500825005090230050082500509C1F00A5
-S31A50001D6350082500500825005008250050181E0050A8230050AD
-S31A50001D786822005008250050082500500825005008250050082A
-S31A50001D8D25005008250050D41D00505A0C00EB470C00EB5330A6
-S31A50001DA2A0E30030C6E50020A0E30320C6E5A0129FE54032A0BF
-S31A50001DB7E10F3003E20320D1E70F0000E20030D1E70120C6E53C
-S31A50001DCC0230C6E5D00100EA0600A0E1021BA0E32020A0E359D1
-S31A50001DE1FEFFEB0030A0E30030C6E7C90100EA64129FE5003041
-S31A50001DF6D1E50620A0E1000053E3AE01000A0130C2E40130F13D
-S31A50001E0BE5000053E3FBFFFF1AA90100EA010084E2890200EBCD
-S31A50001E20BC0100EA010084E2EC0200EBB90100EA0600A0E1F451
-S31A50001E35FEFFEBB60100EA0130D4E5000053E30A00001AFC0178
-S31A50001E4A00EB0C129FE50030D1E50620A0E1000053E397010045
-S31A50001E5F0A0130C2E40130F1E5000053E3FBFFFF1A920100EA6A
-S31A50001E74A4704BE2A0504BE2013084E2A0300BE50500A0E107C1
-S31A50001E8910A0E115FEFFEB000050E32400000AA0201BE501300E
-S31A50001E9ED2E4FF3003E2A0200BE52C0053E31E00001A0500A020
-S31A50001EB3E1A8104BE20AFEFFEB000050E31900000AA0201BE5F6
-S31A50001EC80130D2E4FF3003E2A0200BE52C0053E31300001AA4D1
-S31A50001EDD101BE5000051E30B00000AA8001BE5EB0100EB0010B2
-S31A50001EF250E20300000AA0001BE5A4201BE50030A0E3CDFDFF66
-S31A50001F07EBA4201BE5A0301BE5823083E0A0300BE5A0201BE55B
-S31A50001F1C0030D2E52C0053E301308202D4FFFF0AA0301BE500B0
-S31A50001F3120D3E5000052E30900001A1C119FE50030D1E5062058
-S31A50001F46A0E1000053E35B01000A0130C2E40130F1E5000053E2
-S31A50001F5BE3FBFFFF1A560100EAF8109FE50030D1E50620A0E1CB
-S31A50001F70000053E35101000A0130C2E40130F1E5000053E3FB65
-S31A50001F85FFFF1A4C0100EA0400A0E10610A0E1E8FEFFEB5E0157
-S31A50001F9A00EAAC504BE20500A0E1013084E2AC300BE5B0104BD5
-S31A50001FAFE2CCFDFFEB000050E31B00000AAC201BE50130D2E427
-S31A50001FC4FF3003E2AC200BE52C0053E31500001A0500A0E1B417
-S31A50001FD9104BE2C1FDFFEB000050E31000000AB0001BE50610A5
-S31A50001FEEA0E1B4201BE50130A0E304FDFFEB000050E34401001C
-S31A500020031A5C109FE50030D1E50620A0E1000053E32901000A71
-S31A500020180130C2E40130F1E5000053E3FBFFFF1A240100EA30F7
-S31A5000202D109FE50030D1E50620A0E1000053E31F01000A013096
-S31A50002042C2E40130F1E5000053E3FBFFFF1A1A0100EA54A30041
-S31A500020570038FA005054FA005050FA005084FA005088FA0050C4
-S31A5000206C0170A0E3B8504BE20500A0E1013084E2B8300BE5BC2F
-S31A50002081104BE297FDFFEB000050E36B00000AB8201BE5013088
-S31A50002096D2E4FF3003E2B8200BE52C0053E36500001A0500A0C7
-S31A500020ABE1C0104BE28CFDFFEB000050E36000000AB8001BE524
-S31A500020C00130D0E4FF3003E2B8000BE53A0053E35A00001A0030
-S31A500020D50057E33E00000AC0301BE5000053E32400000A9C50DE
-S31A500020EA4BE2C0301BE50040A0E3030054E11100002A0510A083
-S31A500020FFE1B8201BE50130D2E40430C1E7FF3003E2B8200BE51E
-S31A500021147D0053E30300001A0130D2E4203083E30430C5E7B85B
-S31A50002129200BE5014084E27F0054E30200008AC0301BE503005F
-S31A5000213E54E1EEFFFF3A0500A0E1BC101BE50420A0E12B0700B2
-S31A50002153EB040050E10700001AC0201BE5BC301BE5022064E0AE
-S31A50002168C0200BE5043083E0BC300BE5000052E3DBFFFF1AC0E1
-S31A5000217D301BE5000053E30900001A50139FE50030D1E506207B
-S31A50002192A0E1000053E3C800000A0130C2E40130F1E500005328
-S31A500021A7E3FBFFFF1AC30000EA2C139FE50030D1E50620A0E1DA
-S31A500021BC000053E3BE00000A0130C2E40130F1E5000053E3FBAB
-S31A500021D1FFFF1AB90000EABC101BE5C0201BE50130A0E315FD76
-S31A500021E6FFEB000050E30900000AE8129FE50030D1E50620A034
-S31A500021FBE1000053E3AE00000A0130C2E40130F1E5000053E396
-S31A50002210FBFFFF1AA90000EAC4129FE50030D1E50620A0E100D6
-S31A500022250053E3A400000A0130C2E40130F1E5000053E3FBFF5C
-S31A5000223AFF1A9F0000EAA0129FE50030D1E50620A0E100005381
-S31A5000224FE39A00000A0130C2E40130F1E5000053E3FBFFFF1A76
-S31A50002264950000EA013084E2C4300BE5C4504BE20020D4E500FB
-S31A5000227930A0E3C8300BE5530052E3430052130700001A050009
-S31A5000228EA0E1C8104BE213FDFFEBC4201BE50030D2E53B00530C
-S31A500022A3E301308202C4300B050500A0E1CC104BE20BFDFFEBB3
-S31A500022B8000050E30100000ACC001BE5170B00EB0300A0E35EC0
-S31A500022CD0600EB0300A0E3290600EBC8001BE5000050E3080012
-S31A500022E2000A00229FE5003092E5000053E30400000A00309234
-S31A500022F7E50FE0A0E103F0A0E1000050E3C8000B05C8501BE590
-S31A5000230C000055E30300000A0900A0E3C8000BE5B20000EB7EC2
-S31A500023210000EA680D00EB000050E30400000A6330A0E3003080
-S31A50002336C4E5B0219FE5623043E2003082E50030D4E553005361
-S31A5000234BE3730053130600001A0500A0E123FDFFEB90219FE586
-S31A5000236090319FE5003082E59D0C00EB010000EA0100A0E31C17
-S31A50002375FDFFEB0300A0E3320600EB0300A0E3FD0500EB0000FA
-S31A5000238AE0E3640000EA64319FE5002093E50FE0A0E102F0A024
-S31A5000239FE10100A0E35E0000EA940500EB590000EA010084E2F8
-S31A500023B40610A0E14B2FA0E3D30200EB540000EA010084E206BF
-S31A500023C910A0E14B2FA0E3B80200EB4F0000EAD0004BE201300F
-S31A500023DE84E2D0300BE5D4104BE2BEFCFFEB000050E31800003E
-S31A500023F30AD0201BE50130D2E4FF3003E2D0200BE52C0053E348
-S31A500024081200001A0130D2E4D0200BE5430053E30200001AD40D
-S31A5000241D001BE5960600EB010000EAD4001BE58E0600EBA810D7
-S31A500024329FE50030D1E50620A0E1000053E31E00000A0130C2DD
-S31A50002447E40130F1E5000053E3FBFFFF1A190000EAA0109FE5BF
-S31A5000245C0030D1E50620A0E1000053E31400000A0130C2E4015C
-S31A5000247130F1E5000053E3FBFFFF1A0F0000EAD8004BE2013082
-S31A5000248684E2D8300BE5DC104BE294FCFFEB000050E30B0000BC
-S31A5000249B1A60109FE50030D1E50620A0E1000053E30300000AF8
-S31A500024B00130C2E40130F1E5000053E3FBFFFF1A0030A0E300E7
-S31A500024C530C2E5120000EA0C009FE554FBFFEBDC001BE5C3036E
-S31A500024DA00EB0D0000EA50FA005088FA00508CFA0050E482000D
-S31A500024EF002C8300000C83000000410100E082000084FA0050D2
-S31A5000250490FA00500400A0E10610A0E14B2FA0E34F0600EB0633
-S31A5000251900A0E141FBFFEB0000A0E3F0A81BE90DC0A0E110D85B
-S31A5000252E2DE914409FE504B04CE20410A0E13A0500EB0400A00F
-S31A50002543E137FBFFEB10A81BE954A300000DC0A0E110D82DE931
-S31A5000255838309FE5002093E504B04CE2000052E3000000AAEDE6
-S31A5000256DFFFFEB24409FE50400A0E1BDFAFFEB0400A0E1BAFDD0
-S31A50002582FFEB000050E3F9FFFF0A0000A0B30100A0A310A81B66
-S31A50002597E9F0820000549B00000DC0A0E100D82DE904B04CE271
-S31A500025AC00A81BE90DC0A0E100D82DE904B04CE240FCFFEBDCF8
-S31A500025C10400EB2B00A0E36E0300EB00A81BE90DC0A0E100D8E4
-S31A500025D62DE908309FE504B04CE2000083E500A81BE9F0820060
-S31A500025EB000DC0A0E100D82DE93C109FE55830A0E30030C1E598
-S31A500026000020A0E30320C1E504B04CE228C09FE54032A0E10FB3
-S31A500026153003E20320DCE70F0000E20030DCE70120C1E5023082
-S31A5000262AC1E50100A0E1FCFAFFEB00A81BE954A3000038FA0068
-S31A5000263F500DC0A0E100D82DE938209FE538109FE50030E0E309
-S31A50002654003082E530309FE50020A0E3002081E5002083E524CB
-S31A50002669109FE524309FE5003081E504B04CE21C209FE5013031
-S31A5000267EA0E3003082E500A81BE9B8AB0000B4AB000064AB005A
-S31A50002693003CAC0000BCAB0000048300000DC0A0E130D82DE99A
-S31A500026A89C309FE504B04CE20040A0E1002093E50150A0E1006A
-S31A500026BD0052E30000001ADDFFFFEB120054E3070000CA7830DB
-S31A500026D29FE578109FE5002093E503C0A0E1022061E005208227
-S31A500026E7E0800052E30100009A0000A0E330A81BE958E09FE53D
-S31A500026FC00309EE5030054E10B00000A4C009FE5003090E548B6
-S31A50002711109FE5030054E1030000BA012084E20030A0E3023167
-S31A5000272681E7002080E500408EE500309CE5043181E700309C8E
-S31A5000273BE50300A0E1053083E000308CE530A81BE9048300002E
-S31A500027503CAC0000BCAB0000B8AB0000B4AB000064AB00000DF1
-S31A50002765C0A0E1F0DD2DE904B04CE204D04DE20060A0E17400AB
-S31A5000277A9FE50150A0E1001090E50240A0E168A09FE500005179
-S31A5000278FE31300001A0130A0E3003080E558709FE558809FE5DE
-S31A500027A40130A0E1031CA0E10800A0E303E1A0E101C083E281E1
-S31A500027B920A0E1073022E0000051E30320A0B10210A0E101009F
-S31A500027CE50E2F8FFFF1A0C30A0E10E2088E7FF0053E3F0FFFFE1
-S31A500027E39A14709FE50030A0E300308AE5080000EA088300001A
-S31A500027F8F4820000B71DC10440AC000025305BE5243C23E00380
-S31A5000280D2197E7016086E2044422E0015045E2010075E30600D7
-S31A50002822000A25004BE20610A0E10120A0E3650500EB00309A95
-S31A50002837E5000053E3F0FFFF0A0400A0E1F0AD1BE90DC0A0E1AF
-S31A5000284C70D82DE968319FE504B04CE20CD04DE21C000BE500AD
-S31A5000286120A0E30020C3E500C0A0E10020DCE50350A0E1430068
-S31A5000287652E33700001A0130DCE5520053E33400001A0260DC6B
-S31A5000288BE5430056E33100001A0330DCE53A0053E32E00001A8A
-S31A500028A01C404BE20400A0E104308CE21C300BE520104BE28BF9
-S31A500028B5FBFFEB000050E34600000A1C201BE50130D2E4FF30FE
-S31A500028CA03E21C200BE52C0053E34000001A0400A0E124104BD2
-S31A500028DFE280FBFFEB000050E33B00000A20001BE524101BE57B
-S31A500028F40020E0E399FFFFEBC0309FE5004093E50010A0E10057
-S31A500029090054E30B00000AB0209FE50030D2E50510A0E1000046
-S31A5000291E53E30300000A0130C1E40130F2E5000053E3FBFFFFFE
-S31A500029331A0030A0E30030C1E5260000EA010085E22020A0E35B
-S31A500029487FFBFFEB0060C5E5010080E20040C5E71F0000EA1C42
-S31A5000295D301BE50300A0E10120D0E44C0052E30210A0E106006C
-S31A50002972000A020000CA430052E30B00000A110000EA500051FB
-S31A50002987E30400000A0E0000EA0510A0E14B2FA0E3C60100EBB7
-S31A5000299C0E0000EA0510A0E14B2FA0E3040200EB0A0000EA055B
-S31A500029B110A0E1022BA0E3110100EB060000EA54A30000F48220
-S31A500029C6000084FA00500300A0E10510A0E14B2FA0E3140500A8
-S31A500029DBEB70A81BE90DC0A0E100D82DE90030D0E504B04CE287
-S31A500029F0700053E30300001A18109FE54B2FA0E3420100EB00E2
-S31A50002A05A81BE908109FE54B2FA0E30B0500EB00A81BE954A383
-S31A50002A1A00000DC0A0E100D82DE9682080E2020050E104B04CF8
-S31A50002A2FE20300002A043091E4043080E4020050E1FBFFFF3A86
-S31A50002A4400A81BE90DC0A0E100D82DE94530A0E30130C0E43042
-S31A50002A5920A0E30120C0E4133043E20130C0E404B04CE200A8E3
-S31A50002A6E1BE90DC0A0E100D82DE94F30A0E30130C0E44B20A0DB
-S31A50002A83E30120C0E404B04CE200A81BE90DC0A0E170D82DE906
-S31A50002A9804B04CE20060A0E10040A0E3005051E20700000A01B8
-S31A50002AAD00D6E4015045E257F9FFEB004084E1000055E304323F
-S31A50002AC2A0E10340A011F7FFFF1A0400A0E170A81BE90DC0A017
-S31A50002AD7E130D82DE904B04CE20050A0E10140A0E10210A0E38B
-S31A50002AECE7FFFFEB000084E5020085E230A81BE90DC0A0E13083
-S31A50002B01D82DE904B04CE20050A0E10140A0E10810A0E3DDFF8F
-S31A50002B16FFEB000084E5080085E230A81BE90DC0A0E100D82D63
-S31A50002B2BE9FF0000E2613040E2050053E304B04CE20300008A18
-S31A50002B40573040E2003081E50100A0E300A81BE9413040E20523
-S31A50002B550053E337304092F8FFFF9A302040E2FF3002E2090088
-S31A50002B6A53E30100009A0000A0E300A81BE90100A0E3002081DB
-S31A50002B7FE500A81BE90DC0A0E110D82DE90040A0E10100D4E494
-S31A50002B9404B04CE2E1FFFFEB0400A0E110A81BE90DC0A0E1009B
-S31A50002BA9D82DE904B04CE218C09FE5FF3001E22322DCE701205A
-S31A50002BBEC0E40F1001E20130DCE70130C0E400A81BE994FA0003
-S31A50002BD3500DC0A0E1F0D82DE904B04CE204D04DE20040A0E175
-S31A50002BE80060A0E30170A0E120504BE2030000EA20301BE501D2
-S31A50002BFD4084E20F3003E2066283E10000D4E50510A0E1C3FFC6
-S31A50002C12FFEB000050E3F6FFFF1A0400A0E1006087E5F0A81B28
-S31A50002C27E90DC0A0E1F0D82DE904B04CE20050A0E10170A0E188
-S31A50002C3C106085E2060055E10800002A0100D5E4F1F8FFEB005B
-S31A50002C5140A0E10100D5E4EEF8FFEB040280E10100C7E40600B4
-S31A50002C6655E1F6FFFF3A0500A0E1F0A81BE90DC0A0E110D82D1A
-S31A50002C7BE904B04CE20140A0E1241CA0E1C5FFFFEB2418A0E135
-S31A50002C90FF1001E2C2FFFFEB2414A0E1FF1001E2BFFFFFEBFFEA
-S31A50002CA54004E20410A0E1BCFFFFEB10A81BE90DC0A0E130D852
-S31A50002CBA2DE904B04CE20150A0E10520A0E10130D2E40040A078
-S31A50002CCFE3040053E10300000A0130D2E4014084E2000053E3AE
-S31A50002CE4FBFFFF1AC80054E3C840A0A3FF1004E2AAFFFFEB049C
-S31A50002CF930A0E1014044E2000053E3080000DA0420A0E101306A
-S31A50002D0ED5E4014044E2230053E3000053132A30A0030130C08D
-S31A50002D23E4000052E3F6FFFFCA30A81BE90DC0A0E130D82DE926
-S31A50002D3804B04CE20150A0E1104080E2040050E10300002A0167
-S31A50002D4D10D5E493FFFFEB040050E1FBFFFF3A30A81BE90DC0C5
-S31A50002D62A0E100D82DE90330A0E30020A0E304B04CE2013043E8
-S31A50002D77E20120C0E4010073E3FBFFFF1A413CA0E10130C0E40D
-S31A50002D8C4128A0E10120C0E44134A0E10130C0E40010C0E500AD
-S31A50002DA1A81BE90DC0A0E100D82DE9040080E20310A0E304B02F
-S31A50002DB64CE200C0A0E30120A0E1011041E20130D0E400005234
-S31A50002DCBE30CC483E1F9FFFFCA0C00A0E100A81BE90DC0A0E13E
-S31A50002DE000D82DE90720A0E304B04CE20130D1E4012042E201E2
-S31A50002DF530C0E4010072E3FAFFFF1A00A81BE90DC0A0E130D835
-S31A50002E0A2DE904B04CE208D04DE20140A0E11C504BE20500A05E
-S31A50002E1FE1B00700EB000050E30900000A5130A0E30130C4E4A2
-S31A50002E344320A0E30120C4E40500A0E1D7FFFFEB0010A0E104A9
-S31A50002E4900A0E188FFFFEB010000EA0400A0E1FAFEFFEB00409A
-S31A50002E5EA0E10030A0E30030C4E530A81BE90DC0A0E110D82DBD
-S31A50002E73E90010A0E104B04CE220D04DE218404BE20400A0E16F
-S31A50002E88B4FFFFEB0400A0E130104BE2B80700EB000050E30370
-S31A50002E9D00000A28301BE50100A0E3000053E30000001A000094
-S31A50002EB2A0E310A81BE90DC0A0E130D82DE904B04CE204D04D07
-S31A50002EC7E20040A0E10150A0E118104BE23EFFFFEB000054E17A
-S31A50002EDC0600000A18001BE5E0FFFFEB000050E30200000A0556
-S31A50002EF100A0E1DDFEFFEB010000EA0500A0E1D0FEFFEB0030D7
-S31A50002F06A0E30030C0E530A81BE90DC0A0E130D82DE90030E0B0
-S31A50002F1BE304B04CE20CD04DE20120D0E40150A0E120300BE594
-S31A50002F30670052E32100000A020000CA630052E30700000A2ECC
-S31A50002F450000EA700052E32C00001A20104BE20AFFFFEB1C10D0
-S31A50002F5A4BE231FFFFEB2A0000EA0030D0E52D0053E306000063
-S31A50002F6F1A0130D0E5310053E30300001A08219FE50030A0E313
-S31A50002F84003082E5030000EAF8409FE50410A0E10EFFFFEB0412
-S31A50002F9920A0E1000092E5000050E30200000AAFFFFFEB0000DE
-S31A50002FAE50E31300000A0500A0E1ACFEFFEB120000EAC8409FAB
-S31A50002FC3E50410A0E101FFFFEB001094E51C004BE261FFFFEB23
-S31A50002FD8004094E5010074E30100000A000054E30200001A021D
-S31A50002FED30A0E320300BE5050000EA0130A0E320300BE50200A1
-S31A5000300200EA0500A0E18EFEFFEB0050A0E120301BE5013083A8
-S31A50003017E2030053E303F19F971E0000EAAC3000503430005021
-S31A5000302C443000508030005058209FE558309FE5003082E519BD
-S31A500030410000EA50409FE548109FE50400A0E171FEFFEB1C0050
-S31A500030564BE21A10A0E30420A0E1580700EB000050E30C000007
-S31A5000306B0A20309FE5004083E50500A0E17CFEFFEB090000EA97
-S31A500030800500A0E179FEFFEB060000EAF4400100F04001000C9C
-S31A5000309583000000410100704101000500A0E167FEFFEB005034
-S31A500030AAA0E10030A0E30030C5E530A81BE90DC0A0E1F0DF2D87
-S31A500030BFE904B04CE208D04DE20160A0E10070A0E32C104BE296
-S31A500030D40240A0E1A9FEFFEB30104BE27BFEFFEB50509FE50544
-S31A500030E910A0E1CDFEFFEB1A4044E2049086E05130A0E3013087
-S31A500030FEC6E44D20A0E30120C6E40710A0E106A0A0E10A00A099
-S31A50003113E1A2FEFFEB0060A0E10680A0E13030A0E30130C6E440
-S31A500031280510A0E10600A0E1FEFEFFEB0060A0E1080000EA4026
-S31A5000313DB00000017087E20600A0E10410A0E1F7FEFFEB006042
-S31A50003152A0E10500A0E10410A0E11EFFFFEB090056E10D000022
-S31A500031672A30301BE5030057E10A0000AA3C409FE50510A0E1EE
-S31A5000317C2C001BE50420A0E1E90600EB0030A0E32C300BE5033B
-S31A500031910050E1E9FFFF1A313083E20030C8E50A00A0E1FF1064
-S31A500031A607E27DFEFFEB0030A0E30030C6E5000000EA48B00000
-S31A500031BB00F0AF1BE90DC0A0E130D82DE90030A0E304B04CE205
-S31A500031D024D04DE22C300BE528300BE524300BE50150A0E120A7
-S31A500031E5300BE538104BE242FEFFEB1C404BE20410A0E18AFE1A
-S31A500031FAFFEB0400A0E134404BE20410A0E1DB0600EB000050A9
-S31A5000320FE33700000A7130A0E30130C5E47020A0E30120C5E455
-S31A5000322438101BE50500A0E190FEFFEB0410A0E1BDFEFFEB3887
-S31A50003239301BE50050A0E1020013E30600000A0210A0E388FE06
-S31A5000324EFFEB0210A0E352FEFFEB2C105BE550FEFFEB0050A0B8
-S31A50003263E138301BE5040013E30800000A28301BE5000053E31D
-S31A500032780500000A0500A0E10410A0E37AFEFFEB28101BE5889D
-S31A5000328DFEFFEB0050A0E138301BE5080013E30800000A243051
-S31A500032A21BE5000053E30500000A0500A0E10810A0E36EFEFFF0
-S31A500032B7EB24101BE57CFEFFEB0050A0E138301BE5100013E3EA
-S31A500032CC0B00000A20301BE5000053E30800000A0500A0E11054
-S31A500032E110A0E362FEFFEB20101BE570FEFFEB010000EA05002D
-S31A500032F6A0E1D2FDFFEB0050A0E10030A0E30030C5E530A81BE2
-S31A5000330BE90DC0A0E170D82DE904B04CE208D04DE20040A0E118
-S31A5000332020504BE20500A0E10160A0E10210A0E18AFEFFEB0533
-S31A5000333500A0E10410A0E10620A0E1B30600EB70A81BE90DC0E3
-S31A5000334AA0E100D82DE90C309FE5002093E504B04CE2000192DC
-S31A5000335FE700A81BE90C8300000DC0A0E100D82DE90C309FE5E5
-S31A50003374002093E504B04CE2001182E700A81BE90C8300000DB2
-S31A50003389C0A0E100D82DE920309FE5182093E50010A0E1000095
-S31A5000339E92E5FF1001E20C3092E504B04CE20FE0A0E103F0A0C3
-S31A500033B3E100A81BE9500000000DC0A0E100D82DE91C309FE5C6
-S31A500033C8182093E5000092E5103092E504B04CE20FE0A0E10367
-S31A500033DDF0A0E1FF0000E200A81BE9500000000DC0A0E100D811
-S31A500033F22DE924309FE504B04CE218C093E500109CE50020A0FF
-S31A50003407E10100A0E114309CE50010A0E30FE0A0E103F0A0E1BB
-S31A5000341C00A81BE9500000000DC0A0E100D82DE9000050E304D6
-S31A50003431B04CE20F00000A70209FE5003092E5013043E20030F8
-S31A5000344682E5000053E3160000CA0030A0E3003082E554209F41
-S31A5000345BE5183092E5000093E5142093E50510A0E30FE0A0E136
-S31A5000347002F0A0E100A81BE930209FE5003092E5013083E200C1
-S31A500034853082E5010053E30600001A1C309FE5182093E500006E
-S31A5000349A92E5143092E50410A0E30FE0A0E103F0A0E100A81B57
-S31A500034AFE910830000500000000DC0A0E100D82DE91C309FE5DA
-S31A500034C4182093E5000092E5103092E504B04CE20FE0A0E1036A
-S31A500034D9F0A0E1FF0000E200A81BE9500000000DC0A0E1F0DF1D
-S31A500034EE2DE9FF1001E20D0051E304B04CE208D04DE26C0000D5
-S31A500035030A68319FE568219FE5000093E50010C2E70A0051E3BA
-S31A50003518010080E2000083E50390A0E10100000A640050E36166
-S31A5000352D00001A44319FE5186093E500200FE100400FE1C040F0
-S31A5000354284E304F029E130200BE5000096E50C3096E52410A073
-S31A50003557E30FE0A0E103F0A0E1000096E54F80A0E30C3096E5BE
-S31A5000356C0810A0E10FE0A0E103F0A0E1002099E50070A0E302E4
-S31A500035810057E1170000AAF0A09FE5E4209FE50730D2E72342F5
-S31A50003596DAE7000096E50F3003E20350DAE70C3096E50410A0EB
-S31A500035ABE10FE0A0E103F0A0E1000096E5017087E20C3096E5E4
-S31A500035C00510A0E10FE0A0E103F0A0E1044088E0FF8004E20510
-S31A500035D55088E0003099E5FF8005E2030057E1E8FFFFBA0000E4
-S31A500035EA96E50C3096E52310A0E30FE0A0E103F0A0E17C309F5F
-S31A500035FFE5000096E52812D3E70C2096E50FE0A0E102F0A0E183
-S31A5000361464209FE5000096E50F3008E20310D2E70C3096E50F0D
-S31A50003629E0A0E103F0A0E1000096E5103096E50FE0A0E103F0C8
-S31A5000363EA0E129004BE529305BE52B0053E30F00000A29004BC0
-S31A50003653E20110A0E3380300EB000050E30700001A29305BE583
-S31A500036682D0053E3EFFFFF1AB5FFFFEA1483000050B000005009
-S31A5000367D000000A8FA005028209FE50130A0E3443082E5002075
-S31A50003692A0E3002089E530201BE500300FE1C04002E2C030C3B5
-S31A500036A7E3043083E103F029E1000000EA50000000F0AF1BE963
-S31A500036BC0DC0A0E170D82DE904B04CE20160A0E10240A0E1046C
-S31A500036D130A0E1014044E2000053E30050A0E10600000A01104E
-S31A500036E6D6E40500A0E17DFFFFEB0430A0E1014044E200005364
-S31A500036FBE3F8FFFF1A70A81BE90DC0A0E170D82DE904B04CE2C7
-S31A500037100160A0E10240A0E10430A0E1014044E2000053E30057
-S31A5000372550A0E10600000A0500A0E160FFFFEB0430A0E1014093
-S31A5000373A44E20100C6E4000053E3F8FFFF1A70A81BE90DC0A084
-S31A5000374FE10E002DE900D82DE90000A0E310B04CE200A81BE9FF
-S31A500037640DC0A0E170D82DE90000A0E304B04CE22AFFFFEBB422
-S31A50003779C09FE5B4509FE5B4E09FE5B4609FE50020A0E3B01006
-S31A5000378E9FE50C40A0E1000091E5023190E702318CE701208216
-S31A500037A3E20A0052E3FAFFFFDA001091E52C3091E52C308CE5A3
-S31A500037B8402091E530208CE5303091E534308CE5342091E53862
-S31A500037CD208CE5383091E53C308CE50000A0E33C3091E51C20A4
-S31A500037E28CE20C10A0E164308CE5400082E5042042E20100522A
-S31A500037F7E1FBFFFFAA00309EE5004085E5000053E30400000A42
-S31A5000380C0030A0E300308EE50F00A0E3CAFEFFEBE00700EB0FD6
-S31A5000382100A0E3C7FEFFEBDD0700EB000086E570A81BE9004173
-S31A5000383601000C8300002C830000D8410100684101000DC0A0B7
-S31A5000384BE100D82DE904B04CE260109FE50000A0E301E0A0E188
-S31A5000386058C09FE500209EE500319CE7003182E7010080E20A03
-S31A500038750050E3F9FFFFDA001091E52C309CE52C3081E530206F
-S31A5000388A9CE5402081E534309CE5303081E538209CE534208133
-S31A5000389FE53C309CE5383081E564209CE53C2081E50100A0E3D3
-S31A500038B4DAFEFFEB00A81BE968410100004101000DC0A0E10001
-S31A500038C9D82DE90000A0E304B04CE200A81BE90DC0A0E100D86F
-S31A500038DE2DE930209FE530309FE530109FE5003082E52C309F5B
-S31A500038F3E52C209FE5003081E528309FE528109FE5003082E5F0
-S31A5000390824309FE504B04CE2003081E500A81BE9E4820000C42E
-S31A5000391D380050E0820000003A0050EC82000064370050E88208
-S31A500039320000483800500DC0A0E170D82DE99C209FE50060927C
-S31A50003947E504B04CE2000056E32200001A0130A0E3003082E58E
-S31A5000395C84509FE5CA0800EB343095E50000E0E30FE0A0E103D7
-S31A50003971F0A0E10040A0E1343095E50200E0E30FE0A0E103F0B3
-S31A50003986A0E1141095E558309FE558209FE5043081E554309FF2
-S31A5000399BE5082081E50C3081E54C209FE54C309FE5102081E526
-S31A500039B0143081E5020074E3000054130300000A343095E50453
-S31A500039C500A0E10FE0A0E103F0A0E1303095E50600A0E10FE0E2
-S31A500039DAA0E103F0A0E170A81BE91883000050000000BC360094
-S31A500039EF5004370050E8340050B83400504C3700500DC0A0E1C9
-S31A50003A0400D82DE918309FE5403093E504B04CE2000053E3019C
-S31A50003A1900000A0FE0A0E103F0A0E100A81BE9500000000DC08B
-S31A50003A2EA0E1F0D82DE95430A0E304B04CE208D04DE20150A0ED
-S31A50003A43E10570A0E10040A0E10130C7E44402A0E15AF5FFEBA4
-S31A50003A580100C5E5017087E20400A0E156F5FFEB0100C7E474A4
-S31A50003A6D30A0E30130C7E46820A0E30120C7E4023043E2013000
-S31A50003A82C7E4032042E20120C7E4113043E20130C7E401204276
-S31A50003A97E20120C7E43A50A0E30150C7E4F80400EB00C0A0E1E5
-S31A50003AAC20004BE24C3CA0E120304BE54C28A0E11F204BE5076E
-S31A50003AC110A0E11DC04BE54C34A0E11E304BE50420A0E30030A6
-S31A50003AD6A0E34CF6FFEB0070A0E13B40A0E30140C7E40000A05B
-S31A50003AEBE334F5FFEB0100C7E40F00A0E331F5FFEB0100C7E480
-S31A50003B000150C7E40F00A0E30EFEFFEB0710A0E10420A0E30097
-S31A50003B1530A0E324000BE524604BE20600A0E139F6FFEB0070BD
-S31A50003B2AA0E10140C7E40000A0E322F5FFEB0100C7E40D00A0E6
-S31A50003B3FE31FF5FFEB0100C7E40150C7E40D00A0E3FCFDFFEB1F
-S31A50003B540710A0E10420A0E324000BE50030A0E30600A0E12851
-S31A50003B69F6FFEB0070A0E10140C7E40030A0E30030C7E5F0A80D
-S31A50003B7E1BE90DC0A0E100D82DE904B04CE2030050E300F19FF4
-S31A50003B9397280000EA3C3C0050A83B0050BC3B0050E83B005069
-S31A50003BA8101F11EE011A81E3031081E3101F01EE1F0000EA1057
-S31A50003BBD1F11EE011AC1E3101F01EE151F07EE0000A0E10000F8
-S31A50003BD2A0E10000A0E10000A0E10000A0E10000A0E1140000EF
-S31A50003BE7EA0E02A0E3021A80E2202090E4000031E1FCFFFF1A9E
-S31A50003BFC160F07EE9A0F07EE0000A0E10000A0E10000A0E10023
-S31A50003C1100A0E10000A0E10000A0E1151F07EE151F08EE000072
-S31A50003C26A0E10000A0E10000A0E10000A0E10000A0E10000A00E
-S31A50003C3BE1100F11EE2006A0E1010000E200A81BE90DC0A0E19B
-S31A50003C5000D82DE904B04CE2030050E300F19F97190000EACC0D
-S31A50003C653C0050743C0050843C0050983C0050101F11EE0F10E7
-S31A50003C7A81E3101F01EE110000EA101F11EE0C10C1E3101F0144
-S31A50003C8FEE161F07EE0C0000EA0E02A0E3021A80E2202090E4F7
-S31A50003CA4000031E1FCFFFF1A160F07EE9A0F07EE0000A0E10056
-S31A50003CB900A0E10000A0E10000A0E10000A0E10000A0E1100FFC
-S31A50003CCE11EE2001A0E1010000E200A81BE90DC0A0E170D82D98
-S31A50003CE3E9D0209FE5D0409FE504B04CE2CCC09FE50130A0E3DF
-S31A50003CF800308CE5C4309FE50260A0E1003082E50C50A0E100F1
-S31A50003D0D3094E504C0A0E1000053E32200000A04E0A0E1003066
-S31A50003D229EE5030053E30900009A030011E30700001A030010AC
-S31A50003D37E30500001A043090E4043081E400209EE5042042E2F3
-S31A50003D4C00208EE5110000EA00309CE5010053E30900009A01F2
-S31A50003D610011E30700001A010010E30500001AB230D0E0B2305B
-S31A50003D76C1E000309CE5023043E200308CE5040000EA0120D0B9
-S31A50003D8BE40120C1E400309EE5013043E200308EE5003094E5CE
-S31A50003DA0000053E3DDFFFF1A0030A0E3003085E50030A0E3008D
-S31A50003DB53086E570A81BE91C830000B4B00000F4820000B03D86
-S31A50003DCA00500DC0A0E130D82DE90030A0E10100A0E10310A0EC
-S31A50003DDFE118409FE50250A0E1005084E504B04CE2B9FFFFEBAC
-S31A50003DF4000094E5050060E030A81BE9B4B000000DC0A0E130E8
-S31A50003E09D82DE918409FE50250A0E1005084E504B04CE2AEFF69
-S31A50003E1EFFEB000094E5050060E030A81BE9B4B000000DC0A0E4
-S31A50003E33E100D82DE90000A0E304B04CE200A81BE90DC0A0E1F6
-S31A50003E4800D82DE90000A0E304B04CE200A81BE90DC0A0E100C2
-S31A50003E5DD82DE90000A0E304B04CE200A81BE90DC0A0E100D8D5
-S31A50003E722DE90100A0E304B04CE200A81BE90DC0A0E100D82D6A
-S31A50003E87E90100A0E304B04CE200A81BE90DC0A0E100D82DE999
-S31A50003E9C04B04CE2A7F2FFEB00A81BE90DC0A0E110D82DE9045A
-S31A50003EB1B04CE200300FE100400FE1C04084E304F029E10820EB
-S31A50003EC69FE50130A0E3003082E5FEFFFFEA0000039010A81B76
-S31A50003EDBE90DC0A0E100D82DE904B04CE2EEFFFFEB0000A0E31B
-S31A50003EF000A81BE90DC0A0E100D82DE90000A0E304B04CE2001A
-S31A50003F05A81BE90DC0A0E170D82DE904B04CE20040A0E1000056
-S31A50003F1AA0E30160A0E30010A0E1020074E30D00000A020000D2
-S31A50003F2FCA030074E30F00000A100000EA010074E30E00001A70
-S31A50003F44BC309FE5003093E5000053E3016043E20B0000CA0366
-S31A50003F5960A0E10260E003080000EAA0309FE598209FE518003D
-S31A50003F6E83E5004082E5030000EA0040A0E1000000EA0140847C
-S31A50003F83E20110A0E3000051E31B00000A74509FE5183095E5FA
-S31A50003F98000053E30400000A000093E5143093E50410A0E30FA0
-S31A50003FADE0A0E103F0A0E154309FE548209FE5843283E018307F
-S31A50003FC285E5004082E5183095E5000050E30500000A000093EC
-S31A50003FD7E5143093E50510A0E30FE0A0E103F0A0E1040000EA74
-S31A50003FEC000093E5143093E50410A0E30FE0A0E103F0A0E106B5
-S31A5000400100A0E170A81BE92083000050000000B8B000000DC08F
-S31A50004016A0E100D82DE90010A0E304B04CE201C0A0E3020070A5
-S31A5000402BE30D00000A020000CA030070E30F00000A100000EAFB
-S31A50004040010070E30E00001A64309FE5003093E5000053E301A2
-S31A50004055C043E20B0000CA03C0A0E102C0E003080000EA4830F3
-S31A5000406A9FE540209FE5141083E5000082E5030000EA0100A002
-S31A5000407FE1000000EA010080E20110A0E3000051E30500000AD1
-S31A5000409418309FE51C209FE5000083E510309FE5802282E014F1
-S31A500040A92083E50C00A0E100A81BE92483000050000000B8B08C
-S31A500040BE00000DC0A0E100D82DE904B04CE200A81BE90DC0A060
-S31A500040D3E100D82DE904B04CE200A81BE90DC0A0E110D82DE9D9
-S31A500040E804B04CE22C409FE5E60600EB303094E50000E0E30F19
-S31A500040FDE0A0E103F0A0E1000050E30300000A343094E5000066
-S31A50004112A0E30FE0A0E103F0A0E110A81BE9500000000DC0A062
-S31A50004127E110D82DE9FF1000E258309FE504B04CE2142093E5C3
-S31A5000413C0340A0E1000052E30400000A000092E50C3092E50FD8
-S31A50004151E0A0E103F0A0E1040000EA182094E5000092E50C30DC
-S31A5000416692E50FE0A0E103F0A0E1443094E5000053E30300006D
-S31A5000417B0A0000A0E37D0000EB0030A0E3443084E510A81BE998
-S31A50004190500000000DC0A0E100D82DE904B04CE200A81BE90D9D
-S31A500041A5C0A0E110D82DE90030A0E350209FE504B04CE204D013
-S31A500041BA4DE214300BE518E092E500309EE50020A0E10300A0D1
-S31A500041CFE10130A0E118C09EE514104BE20FE0A0E10CF0A0E159
-S31A500041E414301BE50040A0E1000053E30200000A10309FE50065
-S31A500041F90093E55E0000EB0400A0E1010000EA50000000DC41BD
-S31A5000420E010010A81BE90DC0A0E1F0D82DE9E8009FE5E8609F09
-S31A50004223E50020A0E3E4509FE504B04CE2E0709FE50510A0E1A4
-S31A500042380231A0E1012082E2030081E73F0052E3FAFFFFDAC869
-S31A5000424DC09FE50030A0E3B0009FE5011083E28332A0E1072008
-S31A50004262A0E303008CE7012052E2043083E2FBFFFF5A0130A0E6
-S31A50004277E1020053E3F5FFFFDA98209FE51330A0E3003085E55A
-S31A5000428C042085E58C309FE58C209FE5083085E5402085E584D9
-S31A500042A1309FE584209FE5103085E5482085E57C309FE530609A
-S31A500042B685E578209FE5347085E5203085E50140E0E31C20858A
-S31A500042CBE50400A0E10FE0A0E106F0A0E10400A0E10FE0A0E142
-S31A500042E007F0A0E10030A0E3243085E5283085E54C3085E5449E
-S31A500042F53085E53C0085E2720200EB34309FE58C3085E5F0A81C
-S31A5000430A1BE9F43E0050083F00505000000014400050B8B000CF
-S31A5000431F000480000020000000A83E0050DC3E0050943E0050CD
-S31A50004334C0400050D0400050285800500DC0A0E100D82DE90062
-S31A500043490051E304B04CE20700000A011041E20130D0E70300C3
-S31A5000435E53E30100001A0100A0E300A81BE9000051E3F7FFFF4A
-S31A500043731A0000A0E300A81BE90DC0A0E100D82DE9000050E327
-S31A500043881C109FE504B04CE23810901514309FE58C2093E5015E
-S31A5000439D00A0E10FE0A0E102F0A0E100A81BE9A843005050001A
-S31A500043B200000DC0A0E130D82DE90020E0E304B04CE258C09FB8
-S31A500043C7E50040A0E100309CE50150A0E1140053E30600001AF8
-S31A500043DC18309CE5000093E5142093E50610A0E30FE0A0E1027E
-S31A500043F1F0A0E10020A0E1020054E10400001A0400A0E1051060
-S31A50004406A0E165FFFFEB000050E30200001A0400A0E10510A0F3
-S31A5000441BE112F1FFEB30A81BE9500000000DC0A0E110D82DE9F0
-S31A50004430FF0000E204B04CE20040A0E10A0054E30100001A0D34
-S31A5000444500A0E335FFFFEB0400A0E133FFFFEB10A81BE90DC041
-S31A5000445AA0E110D82DE90040A0E10030D4E504B04CE200005399
-S31A5000446FE30400000A0000D4E5EAFFFFEB0130F4E5000053E325
-S31A50004484FAFFFF1A10A81BE90DC0A0E100D82DE90030A0E31000
-S31A5000449910A0E32B20A0E304D04DE200308DE504B04CE244008C
-S31A500044AE00EB00A81BE90DC0A0E1F0DF2DE904B04CE224D04DB6
-S31A500044C3E20150A0E10040A0E129104BE24C300BE548A04BE232
-S31A500044D804309BE50A00A0E1000053E32090A0033090A013013D
-S31A500044ED9041E4000051E1FCFFFFAA0080A0E3053094E1030029
-S31A50004502001A3030A0E348304BE5018088E2150000EA053094F6
-S31A50004517E11300000A0260A0E10070A0E30510A0E10400A0E14A
-S31A5000452C0730A0E10620A0E1CF2B00EB68309FE50010D3E708F2
-S31A5000454110CAE70730A0E10620A0E10510A0E10400A0E1018053
-S31A5000455688E2632A00EB0150A0E10040A0E1053094E1EDFFFFF0
-S31A5000456B1A08309BE5080053E10380A0A14C301BE52D0053E334
-S31A500045800600001A013048E20320DAE7090052E10380A0014CC5
-S31A50004595301BE50830CAE7050000EA018048E2030000EABCFA65
-S31A500045AA00500800DAE7018048E29BFFFFEB000058E3FAFFFF2B
-S31A500045BFAAF0AF1BE90DC0A0E100D82DE908D04DE200308DE55F
-S31A500045D404B04CE204309BE501C0A0E104308DE50010A0E30269
-S31A500045E930A0E10C20A0E1AFFFFFEB00A81BE90DC0A0E100D89F
-S31A500045FE2DE9000050E304B04CE201C0A0E31500000A0010A014
-S31A50004613E10030D1E5000053E31000000A44E09FE5013060E00C
-S31A500046280E0053E10020D1E500C0A0A30D0052E30A0052130259
-S31A5000463D00000A203042E25E0053E300C0A083011081E20000A9
-S31A500046525CE30200000A0030D1E5000053E3EFFFFF1A0C00A0E3
-S31A50004667E100A81BE9010100000DC0A0E1F0DF2DE904B04CE244
-S31A5000467C0CD04DE20060A0E12C100BE5DAFFFFEB004050E2176F
-S31A5000469101001AA4039FE56EFFFFEB0600A0E179FFFFEB98039D
-S31A500046A69FE56AFFFFEB2000A0E35CFFFFEB2C301BE5040193F6
-S31A500046BBE772FFFFEB014084E2070054E3F7FFFFDA74039FE5A3
-S31A500046D060FFFFEB090100EA0040D6E5250054E30200000A04DB
-S31A500046E500A0E14EFFFFEBFF0000EA0070A0E32BC0A0E3014027
-S31A500046FAF6E50710A0E1300054E30090A0130190A00330304460
-S31A5000470FE2090053E30600008A073187E0833084E00140F6E5BC
-S31A50004724307043E2302044E2090052E3F8FFFF9A6C0054E3037B
-S31A5000473900001A0140F6E56C0054E30110A0030140F6052530F7
-S31A5000474E44E2530053E303F19F97E00000EAD44A0050E04A00C5
-S31A5000476350E04A0050E04A0050E04A0050E04A0050E04A005039
-S31A50004778E04A0050E04A0050E04A0050E04A0050E04A0050E094
-S31A5000478D4A0050E04A0050E04A0050E04A0050E04A0050E04A15
-S31A500047A20050E04A0050E04A0050E04A0050E04A0050E04A004A
-S31A500047B750E04A0050E04A0050E04A0050E04A0050E04A0050E5
-S31A500047CCE04A0050A44A005060490050AC480050E04A0050E033
-S31A500047E14A0050E04A0050E04A0050E04A0050E04A0050E04AC1
-S31A500047F60050E04A0050E04A0050E04A0050E04A0050E04A00F6
-S31A5000480B50E04A0050E04A00507C490050E04A0050E04A0050F5
-S31A50004820E04A0050E04A005008490050E04A0050E04A0050E0C4
-S31A500048354A0050E04A0050E04A0050E04A0050E04A0050E04A6C
-S31A5000484A0050E04A0050A44A005060490050AC480050E04A0094
-S31A5000485F50E04A0050E04A0050E04A0050E04A0050E04A00503C
-S31A50004874E04A0050E04A0050E04A0050E04A0050E04A0050E097
-S31A500048894A0050E04A0050E04A00507C490050E04A0050E04A7D
-S31A5000489E0050E04A0050E04A005008490050000051E30B00008B
-S31A500048B30A2C301BE50300B3E82C300BE5000051E3020000AA6A
-S31A500048C8000070E20010E1E22DC0A0E30A20A0E300908DE50C35
-S31A500048DD30A0E1100000EA2C301BE5040093E42C300BE50000A2
-S31A500048F250E3000060B22DC0A0B30A10A0E30C20A0E11000007C
-S31A50004907EA000051E30900000A00908DE50C30A0E12CC01BE569
-S31A5000491C0300BCE82CC00BE51020A0E304708DE5016086E2DF6C
-S31A50004931FEFFEB6E0000EA0C20A0E12CC01BE504009CE410109E
-S31A50004946A0E32CC00BE50930A0E100708DE5016086E219FFFF2B
-S31A5000495BEB640000EA2C301BE50000D3E5043083E22C300BE5BF
-S31A50004970016086E2ABFEFFEB5D0000EA0050A0E32CC01BE50575
-S31A5000498580A0E104409CE405A0A0E12CC00BE5050054E1AC40DA
-S31A5000499A9F050C00000A0400A0E113FFFFEB000050E30800003C
-S31A500049AF1A98009FE50A90A0E1A6FEFFEB0400A0E1B1FEFFEBA0
-S31A500049C4193047E2190057E30370A0C17C409FE50530D4E701BE
-S31A500049D96086E2000053E30300000A015085E20530D4E70000C0
-S31A500049EE53E3FBFFFF1A000057E3070055110750A0C10000595D
-S31A50004A03E30780651007A065000830A0E1018048E2000053E3C3
-S31A50004A1801704AE2050000DA2000A0E37FFEFFEB0830A0E101F3
-S31A50004A2D8048E2000053E3F9FFFFCA0030D4E5080000EAD0FAD8
-S31A50004A420050E8FA0050ECFA0050F0FA0050F8FA00500CFB00CE
-S31A50004A57500000D4E571FEFFEB0130F4E5000053E30200000A46
-S31A50004A6C015045E2010075E3F7FFFF1A0A30A0E107A0A0E1001C
-S31A50004A810053E31A0000DA2000A0E365FEFFEB0A30A0E101A054
-S31A50004A964AE2000053E3F9FFFFCA130000EA000057E32C301BE4
-S31A50004AABE5014047121F40A003005093E55534A0E1010013E356
-S31A50004AC02E00A0033100A01356FEFFEB014044E2F8FFFFEA252C
-S31A50004AD500A0E352FEFFEB030000EA2500A0E34FFEFFEB0400E9
-S31A50004AEAA0E14DFEFFEB016086E20030D6E5000053E3F5FEFFCF
-S31A50004AFF1AF0AF1BE90DC0A0E10F002DE900D82DE914B04CE23C
-S31A50004B1420D04DE208309BE50C209BE504009BE52C300BE528BB
-S31A50004B29200BE510309BE514209BE524300BE520200BE51830E1
-S31A50004B3E9BE51C209BE51C300BE518200BE520309BE524209BBD
-S31A50004B53E514300BE510200BE52C104BE2C2FEFFEB00A81BE9FF
-S31A50004B680DC0A0E1F0DF2DE904B04CE20060A0E1060051E106AE
-S31A50004B7D7041800170A091000057E30290A0E13B0000DA000098
-S31A50004B9259E30300000AE4009FE5061069E0D7FFFFEB020000E6
-S31A50004BA7EAD4009FE50610A0E1D3FFFFEB0050A0E3108047E282
-S31A50004BBC10A086E2070055E1030000AAB8009FE50510D6E7CBB3
-S31A50004BD1FFFFEB010000EAAC009FE5C8FFFFEBC54FA0E10530FA
-S31A50004BE664E00130C3E3053063E0010053E30100001A90009F50
-S31A50004BFBE5C0FFFFEBA43EA0E1033085E00730C3E3053063E071
-S31A50004C10070053E30100001A70009FE5B8FFFFEB015085E20F85
-S31A50004C250055E3E4FFFFDA60009FE5B3FFFFEB0050A0E30700D6
-S31A50004C3A55E1040000AA0510D6E7203041E25E0053E32E10A074
-S31A50004C4F83000000EA2010A0E338009FE5A8FFFFEB015085E2D5
-S31A50004C640F0055E3F2FFFFDA28009FE5A3FFFFEB0A60A0E100B1
-S31A50004C797058E2C3FFFFCAF0AF1BE910FB005018FB005020FB1F
-S31A50004C8E005024FB005028FB00502CFB005030FB00500DC0A02A
-S31A50004CA3E100D82DE90020A0E304B04CE2ACFFFFEB00A81BE911
-S31A50004CB80DC0A0E100D82DE904B04CE205FDFFEB00A81BE90DCE
-S31A50004CCDC0A0E100D82DE908309FE504B04CE2000083E500A89F
-S31A50004CE21BE918B100000DC0A0E100D82DE930109FE530309F9B
-S31A50004CF7E5000081E5002093E5002092E504B04CE2000052E3C1
-S31A50004D0C0100001A0200A0E100A81BE90200A0E30FE0A0E102FB
-S31A50004D21F0A0E100A81BE91CB1000018B100000DC0A0E100D84E
-S31A50004D362DE934309FE504B04CE230C09FE507008CE800209390
-S31A50004D4BE5002092E5000052E30100001A0200A0E100A81BE902
-S31A50004D600300A0E30C10A0E10FE0A0E102F0A0E100A81BE9181E
-S31A50004D75B100001CB100000DC0A0E100D82DE934309FE504B07D
-S31A50004D8A4CE230C09FE503008CE8002093E5002092E500005224
-S31A50004D9FE30100001A0200A0E100A81BE90400A0E30C10A0E158
-S31A50004DB40FE0A0E102F0A0E100A81BE918B100001CB100000D62
-S31A50004DC9C0A0E100D82DE934309FE504B04CE230C09FE507000B
-S31A50004DDE8CE8002093E5002092E5000052E30100001A0200A0D5
-S31A50004DF3E100A81BE90500A0E30C10A0E10FE0A0E102F0A0E1C0
-S31A50004E0800A81BE918B100001CB100000DC0A0E100D82DE9348D
-S31A50004E1D309FE504B04CE230C09FE507008CE8002093E50020ED
-S31A50004E3292E5000052E30100001A0200A0E100A81BE90700A078
-S31A50004E47E30C10A0E10FE0A0E102F0A0E100A81BE918B1000028
-S31A50004E5C1CB100000DC0A0E12034A0E1FF3C03E2203C83E1001B
-S31A50004E71D82DE90024A0E1FF2802E2023083E1000C83E104B07E
-S31A50004E864CE200A81BE90DC0A0E100D82DE904B04CE208D04DA4
-S31A50004E9BE214004BE290FFFFEB000050E30300000A10001BE5C0
-S31A50004EB0EAFFFFEB0008A0E12008A0E100A81BE90DC0A0E10098
-S31A50004EC5D82DE9030040E204B04CE2040050E300F19F97080027
-S31A50004EDA00EAF04E0050F04E0050F04E0050F84E0050F84E00FD
-S31A50004EEF500A00A0E300A81BE90200A0E300A81BE90500A0E316
-S31A50004F0400A81BE90DC0A0E100D82DE90C309FE5002093E504FE
-S31A50004F19B04CE2440092E500A81BE9684101000DC0A0E100D818
-S31A50004F2E2DE90010A0E10F00A0E304B04CE209F9FFEB00A81B4E
-S31A50004F43E90DC0A0E110D82DE904B04CE20040A0E11900A0E38F
-S31A50004F58FAF8FFEB0020A0E3244EA0E10F0054E304F19F9756B5
-S31A50004F6D0000EAB04F0050BC4F0050C44F0050D04F0050D84F4C
-S31A50004F820050E04F0050EC4F0050F84F0050085000501C5000BF
-S31A50004F97502C5000504C5000506C50005098500050C050005003
-S31A50004FACC8500050202FA0E1012002E2430000EA202FA0E10D53
-S31A50004FC10000EAA02EA0E1012002E23E0000EAA02EA0E10800C8
-S31A50004FD600EAA02FA0E13A0000EA0020E0E1A22FA0E1370000A8
-S31A50004FEBEA202EA0E1012002E2340000EA202EA0E1012022E28B
-S31A50005000012002E2300000EA062200E2020252E30020A013010F
-S31A5000501520A0032B0000EA062200E2022252E20120A0132700FB
-S31A5000502A00EA092200E2000052E30030A0130130A003090252DB
-S31A5000503FE30320A0110120A0031F0000EA092200E2010252E33D
-S31A500050540030A0130130A003020152E30320A0110120A0031753
-S31A500050690000EA093200E2000053E309025313202FA0E101203D
-S31A5000507E22E20030A0130130A003000053E3012002120020A0E1
-S31A50005093030C0000EA093200E2010253E302015313202FA0E12A
-S31A500050A80030A0130130A003000053E3012002020120A01302B5
-S31A500050BD0000EA0120A0E3000000EA0020A0E30200A0E110A832
-S31A500050D21BE90DC0A0E130D82DE904B04CE20050A0E10F00053C
-S31A500050E7E296F8FFEB0040A0E1100015E30200001A3E3D05E2BD
-S31A500050FCC303A0E1020000EA0F0C05E22004A0E18DF8FFEB60A0
-S31A500051113005E2C332A0E1030053E303F19F97130000EA3451C1
-S31A5000512600503C510050445100504C5100501440A0E10D00003D
-S31A5000513BEA3440A0E10B0000EA5440A0E1090000EA000050E3FA
-S31A500051500600001AA440A0E11900A0E379F8FFEB020210E3027F
-S31A500051653184E30340A011000000EA7440A0E10400A0E130A8D7
-S31A5000517A1BE90DC0A0E1F0D82DE904B04CE20040A0E10150A006
-S31A5000518FE1033305E2233DA0E1030053E303F19F97B90000EAD0
-S31A500051A4B451005034530050E853005044530050D8229FE5FF85
-S31A500051B932C5E3020053E10200001A0F0005E25EF8FFEBF0A891
-S31A500051CE1BE9047084E20F3A05E20F0A53E35200001AB0329F2C
-S31A500051E3E5B0229FE5033005E0020053E14D00000A0F0805E283
-S31A500051F82008A0E151F8FFEB0060A0E1020415E30400001A056E
-S31A5000520D0AA0E1200AA0E1AEFFFFEB0040A0E1030000EAFF407C
-S31A5000522205E20F3C05E2A333A0E17443A0E11E3605E2A33AA0C1
-S31A50005237E10F0053E303F19F97390000EA845200508C52005045
-S31A5000524C945200509C520050A4520050AC520050C8520050EC99
-S31A500052615200502C5300502C5300502C5300502C5300501053A1
-S31A500052760050185300502053005028530050047006E0270000B3
-S31A5000528BEA047026E0250000EA067064E0230000EA047066E0C4
-S31A500052A0210000EA047086E01F0000EA1900A0E324F8FFEBA073
-S31A500052B50EA0E1010000E2043086E0007083E0180000EA190094
-S31A500052CAA0E31DF8FFEBA00EA0E1010000E2063064E00000501B
-S31A500052DFE30370A011017043020F0000EA1900A0E314F8FFEB1C
-S31A500052F4A00EA0E1010000E2043066E0000050E30370A011016B
-S31A50005309704302060000EA047086E1040000EA0470A0E10200D4
-S31A5000531E00EA0470C6E1000000EA0470E0E10700A0E1F0A81BC5
-S31A50005333E964219FE5023005E0020053E10100001A040084E24B
-S31A50005348F0A81BE9010615E3FBFFFF0A0F3A05E20F0A53E3F8E5
-S31A5000535DFFFF1A0F4805E22408A0E1F6F7FFEB083080E20F085A
-S31A5000537254E30060A0110360A001010415E31600000A0204154C
-S31A50005387E30900001A020515E30300000A053AA0E1233AA0E10B
-S31A5000539C036086E00E0000EA053AA0E1233AA0E1066063E00A94
-S31A500053B10000EA020515E30400000A050AA0E1200AA0E142FF1E
-S31A500053C6FFEB006086E0030000EA050AA0E1200AA0E13DFFFF69
-S31A500053DBEB066060E0000096E5F0A81BE9027415E21A00001A1E
-S31A500053F0010615E3D2FFFF0A020915E3D0FFFF0A0F4805E2243C
-S31A5000540508A0E1CEF7FFEB083080E20F0854E30060A0110360A8
-S31A5000541AA00107C0A0E10C20A0E178309FE5020505E20310055F
-S31A5000542FE05132A0E1010013E301C08C12012082E20E0052E310
-S31A50005444F9FFFFDA000050E30C618610E2FFFF1A046046E2E090
-S31A50005459FFFFEA0500A0E1B7FEFFEB000050E3B5FFFF0AFF34B8
-S31A5000546EC5E30311A0E1020515E33F0381E308008012080081CE
-S31A5000548302000084E0F0A81BE90000A0E3F0A81BE910FF2F015E
-S31A500054980000BF0F00000F0110000002FFFF00000DC0A0E170FD
-S31A500054ADD82DE90118A0E14128A0E1211EA0E1041041E204B077
-S31A500054C24CE20060A0E1023086E2015083E30B0051E301F19F4F
-S31A500054D7973E0000EA0C550050D8550050D8550050D855005083
-S31A500054ECD8550050D8550050D8550050D8550050D855005038AC
-S31A500055015500506C550050A45500500228A0E1C8309FE52208EF
-S31A50005516A0E1033002E0470453E32C00001A780000E2A001A032
-S31A5000552BE185F7FFEB0050A0E1270000EA0238A0E10F0403E239
-S31A500055400002A0E12348A0E17DFEFFEB000050E32000000AFFD0
-S31A500055553004E28300A0E1800014E3800BE011A00BE011090039
-S31A5000556A00EA0238A0E1020313E32318A0E11600001A813AA0EF
-S31A5000557FE1A33AA0E18300A0E1010B11E3800AE011A00AE01168
-S31A50005594043080E2033086E0015083E30C0000EA3E1BE0E302B2
-S31A500055A928A0E1013802E02302A0E1010312E38004E011A0041B
-S31A500055BEE011B230D6E1013003E0830080E1042080E2022086D2
-S31A500055D3E0015082E30500A0E170A81BE9000087FF0DC0A0E161
-S31A500055E830D82DE90F00A0E304B04CE253F7FFEB0040A0E119B8
-S31A500055FD00A0E350F7FFEB200010E30600000A0400A0E1B01027
-S31A50005612D0E1A3FFFFEB88309FE5000083E580109FE50F000029
-S31A50005627EA005094E50500A0E143FEFFEB000050E30600000A71
-S31A5000563C0400A0E10510A0E15C409FE5CBFEFFEB000084E5505C
-S31A50005651109FE5030000EA48209FE5043084E20210A0E1003024
-S31A5000566682E5004091E5010014E30600000A30309FE50120C4EB
-S31A5000567BE3B000D2E128109FE5B000C3E1B010C2E130A81BE92F
-S31A500056901C309FE5002094E518109FE5002083E5001084E53069
-S31A500056A5A81BE9288300002CB10000BEBEFFFF28B10000FEDE37
-S31A500056BAFFE70DC0A0E100D82DE944309FE50300A0E100109344
-S31A500056CFE504B04CE2000051E30B00000A010011E30400000A5D
-S31A500056E428209FE5B020D2E10130C1E3B020C3E1020000EA18BF
-S31A500056F9309FE5002093E5002081E50030A0E3003080E500A884
-S31A5000570E1BE9288300002CB1000028B100000DC0A0E100D82D78
-S31A50005723E904B04CE200A81BE90DC0A0E100D82DE904B04CE286
-S31A5000573800A81BE90DC0A0E100D82DE90F00A0E304B04CE2FDAD
-S31A5000574DF6FFEB0C309FE5030050E10000A0130100A00300A81E
-S31A500057621BE9A40800500DC0A0E110D82DE90F00A0E304B04CFE
-S31A50005777E2F2F6FFEB0040A0E11900A0E3EFF6FFEB200010E3D4
-S31A5000578C02408412044084020F00A0E30410A0E1F1F6FFEB1008
-S31A500057A1A81BE90DC0A0E100D82DE96C309FE504B04CE200C0F3
-S31A500057B693E500005CE30100000A0000A0E300A81BE954209F84
-S31A500057CBE5001092E50130C1E3030050E10E00001A010011E3E1
-S31A500057E00200000AB430D2E1B030C0E1010000EA043092E500A4
-S31A500057F53080E50030A0E3003082E50300A0E310F9FFEB0300EE
-S31A5000580AA0E3DBF8FFEB0100A0E300A81BE90C00A0E100A81B73
-S31A5000581FE92C83000030B100000DC0A0E130D82DE984209FE511
-S31A500058340030A0E380509FE504B04CE2001095E50040A0E100D5
-S31A500058493082E5030051E10100000A0100A0E1D1FFFFEB0030B1
-S31A5000585E95E5000053E31300001A1900A0E3B5F6FFEB200010A1
-S31A50005873E30600000A013084E3003085E53C209FE5B030D4E130
-S31A50005888B430C5E1B020C4E1040000EA004085E528209FE50052
-S31A5000589D3094E5043085E5002084E50300A0E3E6F8FFEB03007F
-S31A500058B2A0E3B1F8FFEB30A81BE92C83000030B10000BEBEFF8E
-S31A500058C7FFFEDEFFE70DC0A0E100D82DE910309FE5000093E53D
-S31A500058DC04B04CE2000050E20100A01300A81BE930B100000DFF
-S31A500058F1C0A0E100D82DE9001090E50000A0E30C0081E51C3057
-S31A50005906A0E31C3081E50820A0E3002081E504B04CE204008169
-S31A5000591BE5173043E2083081E5052042E20C2081E500A81BE9AB
-S31A500059300DC0A0E100D82DE9000090E5FF1001E2203090E504A0
-S31A50005945B04CE2040013E30200001A203090E5040013E3FCFF49
-S31A5000595AFF0A141080E500A81BE90DC0A0E100D82DE9000090D8
-S31A5000596FE5203090E504B04CE2023013E20500000A143090E552
-S31A500059840030C1E50420A0E31C2080E50100A0E300A81BE90367
-S31A5000599900A0E100A81BE90DC0A0E130D82DE904B04CE204D054
-S31A500059AE4DE20050A0E115404BE20500A0E10410A0E1E7FFFF0C
-S31A500059C3EB000050E3FAFFFF0A15005BE530A81BE90DC0A0E1DA
-S31A500059D870D82DE904B04CE20160A0E10240A0E10430A0E101C9
-S31A500059ED4044E2000053E30050A0E10600000A0110D6E4050002
-S31A50005A02A0E1C9FFFFEB0430A0E1014044E2000053E3F8FFFFBE
-S31A50005A171A70A81BE90DC0A0E170D82DE904B04CE20160A0E17E
-S31A50005A2C0240A0E10430A0E1014044E2000053E30050A0E10623
-S31A50005A4100000A0500A0E1D4FFFFEB0430A0E1014044E2010090
-S31A50005A56C6E4000053E3F8FFFF1A70A81BE90DC0A0E1F0D82D96
-S31A50005A6BE904B04CE20050A0E1043095E50160A0E13C709FE574
-S31A50005A80033183E08340A0E1030000EA483097E56400A0E30F09
-S31A50005A95E0A0E103F0A0E10500A0E10610A0E1AEFFFFEB00001D
-S31A50005AAA50E30200001A014044E2010074E3F3FFFF1AF0A81BC5
-S31A50005ABFE9500000000DC0A0E10E002DE910D82DE910B04CE2E5
-S31A50005AD404309BE50040A0E3043043E2030053E303F19F971E16
-S31A50005AE90000EA245B0050FC5A0050505B00505C5B005054207D
-S31A50005AFE9FE50130A0E3003082E5001090E50C3091E50830837C
-S31A50005B13E30C3081E5080090E5E1EBFFEB100000EA2C209FE5A5
-S31A50005B28004092E50030A0E3003082E5001090E50C3091E508D2
-S31A50005B3D30C3E30C3081E5080090E5CAEBFFEB050000EA084032
-S31A50005B5290E5030000EA4883000008309BE5044090E504308096
-S31A50005B67E50400A0E110A81BE90DC0A0E170D82DE904B04CE21F
-S31A50005B7C04D04DE200C090E520409CE514309CE519304BE50463
-S31A50005B9120A0E31C208CE50050A0E3080090E50160A0E18300A4
-S31A50005BA600EB005086E5020014E30600000A19004BE20110A0EE
-S31A50005BBBE3DFF9FFEB050050E10130A013003086150150A0E321
-S31A50005BD00500A0E170A81BE90DC0A0E170D82DE984509FE500C4
-S31A50005BE500E0E3343095E504B04CE20FE0A0E103F0A0E170403E
-S31A50005BFA9FE50060A0E10400A0E139FFFFEB343095E50000A0B6
-S31A50005C0FE30FE0A0E103F0A0E1141095E550309FE550209FE5CD
-S31A50005C24004081E5043081E548309FE5082081E50C3081E54069
-S31A50005C39209FE540309FE5102081E5143081E538209FE53830E4
-S31A50005C4E9FE5182081E51C3081E5342095E50600A0E10FE0A033
-S31A50005C63E102F0A0E170A81BE95000000030830000D4590050E6
-S31A50005C781C5A005030590050A0590050C45A0050705B005064EC
-S31A50005C8D5A00500DC0A0E100D82DE91C209FE5003092E504B0AB
-S31A50005CA24CE2000053E30200001A0130A0E3003082E5C7FFFF07
-S31A50005CB7EB00A81BE94C8300000DC0A0E130D82DE970E09FE5DC
-S31A50005CCC00309EE504B04CE2000053E31700000A0E50A0E100A2
-S31A50005CE1000FE100400FE1C04084E304F029E100E095E5143035
-S31A50005CF69EE5003085E518109EE50020A0E318208EE500300FEE
-S31A50005D0BE1C04000E2C030C3E3043083E103F029E100009EE5BC
-S31A50005D2010209EE50CC09EE50FE0A0E10CF0A0E1003095E5007F
-S31A50005D350053E3E8FFFF1A30A81BE938B100000DC0A0E100D8E2
-S31A50005D4A2DE904B04CE20C209FE5003092E5013083E200308257
-S31A50005D5FE500A81BE9E04101000DC0A0E110D82DE904B04CE2F8
-S31A50005D7434409FE5003094E5010053E30000001ACDFFFFEB001C
-S31A50005D8930A0E3003084E51C309FE5002093E5000052E30200C4
-S31A50005D9E000A0130A0E3003084E5F2FFFFEA10A81BE9E041018B
-S31A50005DB30038B100000DC0A0E100D82DE904B04CE243EBFFEB66
-S31A50005DC800A81BE90DC0A0E100D82DE904B04CE24BEBFFEB0086
-S31A50005DDDA81BE90DC0A0E1F0DF2DE90000E0E301DC4DE2C0618C
-S31A50005DF29FE5343096E504B04CE20FE0A0E103F0A0E10090A0ED
-S31A50005E07E1343096E50000A0E30FE0A0E103F0A0E19C019FE5E8
-S31A50005E1C9C319FE50050A0E3005083E5482096E590719FE50FC8
-S31A50005E31E0A0E102F0A0E1005087E584019FE584119FE58421AF
-S31A50005E469FE584419FE50234A0E3003084E5D31000EB78019FEC
-S31A50005E5BE5D11000EB74019FE5002094E5001097E56C419FE5DC
-S31A50005E70CC1000EB68219FE568319FE50180A0E364A19FE54AFF
-S31A50005E857F4BE2005083E5020054E10250A0E10300000A0FE048
-S31A50005E9AA0E104F094E4050054E1FBFFFF1A0A50A0E100609593
-S31A50005EAFE5000056E30F00000A30419FE530019FE5001094E51E
-S31A50005EC4B71000EB0700A0E1002094E5011CA0E30040A0E382BB
-S31A50005ED93262E0032182E0004085E58221A0E1161200EB020081
-S31A50005EEE70E30040850500608A15000058E30200000AF0009F57
-S31A50005F03E50080A0E3A61000EB0740A0E10400A0E1011CA0E3BD
-S31A50005F18FA20A0E3091200EB000050E3050000AACC309FE50019
-S31A50005F2D2093E5000052E3EFFFFF0ADC1500EBEDFFFFEA06008E
-S31A50005F42001A6C209FE5343092E50900A0E10FE0A0E103F0A062
-S31A50005F57E14EEAFFEBE5FFFFEA0400A0E1A41000EB000050E3B8
-S31A50005F6C0F0000DA88509FE50400A0E184409FE50510A0E1041E
-S31A50005F8120A0E1210000EB003050E20400000A000095E504100A
-S31A50005F96A0E10FE0A0E10CF093E5020000EA5C009FE50710A0B8
-S31A50005FABE17D1000EB0180A0E3CFFFFFEA50000000400D0300D7
-S31A50005FC0F04101008C42010004FC005034FC005040FC0050F425
-S31A50005FD54101004CFC005070FC0050948500009C8500008442CB
-S31A50005FEA010094420100F84101007CFC0050B8FC0050CC43015E
-S31A50005FFF008842010000420100C4FC0050F0AF1BE90DC0A0E128
-S31A50006014F0DD2DE904B04CE20040A0E10050A0E30170A0E102D4
-S31A5000602960A0E1D4809FE5D4A09FE5210000EA054186E720007D
-S31A5000603E52E3015085E21A0000EA220053E31200001A052186D6
-S31A50006053E0043012E5040053E101408402044002050030D4E5A4
-S31A50006068000053E3220053130300000A0130F4E5000053E322A0
-S31A5000607D005313FBFFFF1A0030D4E5000053E30900001A780085
-S31A500060929FE5431000EB000000EA014084E20030D4E5FF200345
-S31A500060A7E2000052E30300000A200052E3E3FFFF1A0030A0E367
-S31A500060BC0130C4E40030D4E5000053E30800000A200053E30217
-S31A500060D100001A0130F4E5200053E3FCFFFF0A0030D4E5FF20DE
-S31A500060E603E2000052E3D1FFFF1A005087E50800A0E100209651
-S31A500060FBE50A10A0E1030000EBF0AD1BE984840000F4840000AB
-S31A50006110DCFC00500DC0A0E1F0DF2DE904B04CE20040A0E10224
-S31A5000612580A0E10800A0E101A0A0E1311000EB0450A0E10A0058
-S31A5000613A55E10090A0E12C00000A0800A0E1001095E50920A0A1
-S31A5000614FE1801000EB000050E32300001A000095E5251000EB7F
-S31A50006164090050E11D0000DA0170A0E30A0054E11400000A044A
-S31A500061790055E10F00000A0800A0E1001094E50920A0E171102F
-S31A5000618E00EB006050E20900001A000057E30400000A58009FC7
-S31A500061A3E50810A0E1002095E50670A0E1FC0F00EB48009FE5C0
-S31A500061B8001094E5F90F00EB104084E20A0054E1EAFFFF1A0009
-S31A500061CD0057E30300001A2C009FE5F20F00EB0700A0E1F0AF4D
-S31A500061E21BE90500A0E1F0AF1BE9105085E20A0055E1D2FFFF4E
-S31A500061F71A0000A0E3F0AF1BE9F0FC005018FD00501CFD0050F3
-S31A5000620C0DC0A0E170D82DE904B04CE20040A0E10150A0E130D6
-S31A50006221009FE50260A0E1DE0F00EB050054E10700000A200068
-S31A500062369FE5002094E5083094E50610A0E1D70F00EB104084F3
-S31A5000624BE2050054E1F7FFFF1A70A81BE920FD005028FD0050BF
-S31A500062600DC0A0E100D82DE90010C0E50C0080E904B04CE20487
-S31A50006275309BE50C3080E508209BE5102080E50C309BE5143030
-S31A5000628A80E500A81BE90DC0A0E1F0DF2DE904B04CE20CD04D5A
-S31A5000629FE200C0A0E334C00BE50CE09BE501A0A0E32C000BE5DF
-S31A500062B40A005EE100C0A01301C0A00308E09BE50180A0E130C5
-S31A500062C9300BE500005EE300C0A00300005CE334101B150010E3
-S31A500062DE8E1534301BE504C09BE530401BE50C0053E111000049
-S31A500062F3AA03C0A0E104009BE5103094E5000053E300C0831587
-S31A50006308041094E5000051E30600001A083094E5000053E30161
-S31A5000631D00000A020053E30100001A0C3094E5001083E5184033
-S31A5000633284E2010050E2EFFFFF1A2CE01BE50270A0E10E0057FC
-S31A50006347E1870000AA071198E70030D1E52D0053E35300001A8C
-S31A5000635C0050A0E330401BE50500A0E104209BE5016087E2019E
-S31A5000637190D1E5020055E1440000AA0030D4E5030059E13C00F3
-S31A50006386001A103094E5000053E30600000A003093E500005398
-S31A5000639BE30300000A94019FE5141094E500A0A0E37D0F00EB57
-S31A500063B0043094E5000053E32000000A070198E70230D0E53DCA
-S31A500063C50053E3035080020200000A073188E0017087E2045088
-S31A500063DA93E5082094E5000052E30200000A010052E30C0000BC
-S31A500063EF0A0D0000EA0500A0E10C1094E50230A0E15D0000EB2C
-S31A50006404006050E20700001A2C019FE50510A0E1142094E50680
-S31A50006419A0A0E1610F00EB010000EA0C3094E5005083E5102014
-S31A5000642E94E50130A0E3003082E5036087E00C0000EA083094B3
-S31A50006443E5000053E30200000A020053E30400000A060000EA91
-S31A500064580C2094E5003092E5013083E2010000EA0C2094E50166
-S31A5000646D30A0E3003082E50150A0E3040000EA010080E2043021
-S31A500064829BE5184084E2030050E1BAFFFFBA000055E330000063
-S31A500064971A0910A0E1A0009FE505A0A0E13F0F00EB2B0000EA4E
-S31A500064AC08C09BE500005CE32400000A34E01BE500005EE30378
-S31A500064C100000A10109BE578009FE500A0A0E3340F00EB0C105D
-S31A500064D69BE5000051E30200000A010051E30D00000A0F000040
-S31A500064EBEA08109BE50C209BE5070198E70230A0E11E0000EBD5
-S31A50006500004050E20800001A30009FE510209BE5071198E7049D
-S31A50006515A0A0E1220F00EB020000EA073198E708209BE5003063
-S31A5000652A82E50130A0E334300BE5036087E0070000EA34FD00AB
-S31A5000653F5044FD005060FD005074FD005020009FE5016087E234
-S31A50006554130F00EB08A09BE52CC01BE50670A0E10C0057E17709
-S31A50006569FFFFBA0A00A0E1000000EA84FD0050F0AF1BE90DC059
-S31A5000657EA0E1F0D92DE904B04CE200C0A0E10140A0E30A50A071
-S31A50006593E30060A0E30180A0E10270A0E10000DCE503E0A0E1BD
-S31A500065A8200050E30200001A0130FCE5200053E3FCFFFF0A00AD
-S31A500065BD30DCE5000053E33F00000A000054E30B00000AFF3088
-S31A500065D203E2300053E30800001A0130DCE5411043E2202083C6
-S31A500065E7E2FF2002E2190051E30230A091780053E31050A00303
-S31A500065FC02C08C020040A0E30110DCE40400A0E1302041E24117
-S31A500066113041E2050053E3090052830200009A613041E205005D
-S31A5000662653E30000008A0100A0E3000050E31300000A0000A0D5
-S31A5000663BE3302041E2FF3002E2090053E30200A0910600009A79
-S31A50006650613041E2050053E3570041920200009A413041E20591
-S31A500066650053E337004192050050E1040000AA0030DCE595061A
-S31A5000667A26E0000053E3D0FFFF1A0F0000EA00005EE30B00004C
-S31A5000668F0A0E20A0E10030D2E5010000EA0130F2E5FF3003E2F9
-S31A500066A4000053E30100000A030051E1F9FFFF1A0030D2E5001D
-S31A500066B90053E30100001A0000A0E3F0A91BE9006088E5000038
-S31A500066CE57E300C087150100A0E3F0A91BE90DC0A0E100D82D57
-S31A500066E3E90030D0E504B04CE2200053E30200001A0130F0E524
-S31A500066F8200053E3FCFFFF0A0000D0E5540050E30030A01301BD
-S31A5000670D30A003740050E30130A003000053E30400001A460039
-S31A5000672250E3660050130200000A0300A0E100A81BE90130A003
-S31A50006737E3003081E50100A0E300A81BE90DC0A0E110D82DE902
-S31A5000674C020050E304B04CE20140A0E15A00001A040094E56CAC
-S31A50006761119FE5CE0E00EB000050E31000001A00C00FE1004024
-S31A500067760FE1C04084E304F029E1101F11EE011A81E303108122
-S31A5000678BE3101F01EE101F11EE0F1081E3101F01EE00300FE1B3
-S31A500067A0C0400CE2C030C3E3043083E103F029E110A81BE904B5
-S31A500067B50094E518119FE5B80E00EB000050E33B00001A00C05A
-S31A500067CA0FE100400FE1C04084E304F029E10E02A0E3021A80B0
-S31A500067DFE2202090E4000031E1FCFFFF1A160F07EE9A0F07EEDB
-S31A500067F40000A0E10000A0E10000A0E10000A0E10000A0E100B5
-S31A5000680900A0E1101F11EE011AC1E3101F01EE151F07EE00006F
-S31A5000681EA0E10000A0E10000A0E10000A0E10000A0E10000A0EA
-S31A50006833E1101F11EE0C10C1E3101F01EE161F07EE0E02A0E350
-S31A50006848021A80E2202090E4000031E1FCFFFF1A160F07EE9AD9
-S31A5000685D0F07EE0000A0E10000A0E10000A0E10000A0E10000C8
-S31A50006872A0E10000A0E1151F07EE151F08EE0000A0E10000A045
-S31A50006887E10000A0E10000A0E10000A0E10000A0E1161F07EE97
-S31A5000689C171F08EE00300FE1C0400CE2C030C3E3043083E10326
-S31A500068B1F029E110A81BE91C009FE5041094E5380E00EB10A8B0
-S31A500068C61BE910009FE5350E00EB10A81BE9B0FD0050B4FD0037
-S31A500068DB50B8FD0050D0FD00500DC0A0E130D82DE934309FE58C
-S31A500068F004B04CE230409FE50350A0E1030054E10700000A2426
-S31A50006905009FE5041094E5002094E5083094E5230E00EB104060
-S31A5000691A84E2050054E1F7FFFF1A30A81BE9F484000084840007
-S31A5000692F00DCFD00500DC0A0E130D82DE904B04CE208D04DE27F
-S31A500069440050A0E1010055E30140A0E1020000CA64009FE51256
-S31A500069590E00EB1F0000EA18104BE20020A0E3040094E502302A
-S31A5000696EA0E101FFFFEB000050E30300001A40009FE504109497
-S31A50006983E5070E00EB140000EA020055E30D0000DA1C104BE24C
-S31A500069980020A0E3080094E50230A0E1F4FEFFEB000050E308A6
-S31A500069AD00001A10009FE5081094E5FA0D00EB070000EAECFD74
-S31A500069C2005004FE005020FE00502030A0E31C300BE518001B18
-S31A500069D7E51C101BE5221000EB30A81BE90DC0A0E170D82DE99F
-S31A500069EC04B04CE23CD04DE23C304BE240204BE200308DE5005B
-S31A50006A0140A0E104208DE530604BE284319FE50600A0E108301E
-S31A50006A168DE50150A0E178319FE57710A0E300C093E50120A0A1
-S31A50006A2BE344C00BE50030A0E309FEFFEB0120A0E300208DE54F
-S31A50006A4044304BE204308DE50010A0E308108DE548319FE50486
-S31A50006A5500A0E10C308DE50510A0E10630A0E109FEFFEB000069
-S31A50006A6A50E34D00000A40301BE5000053E30C00000A20019FBB
-S31A50006A7FE544101BE53C201BE5C60D00EB38004BE23C201BE598
-S31A50006A940810A0E3823262E0032182E08221A0E1270F00EB0239
-S31A50006AA90070E33D00000A44301BE500C00FE100400FE1C04094
-S31A50006ABE84E304F029E10E02A0E3021A80E2202090E400003112
-S31A50006AD3E1FCFFFF1A160F07EE9A0F07EE0000A0E10000A0E1A9
-S31A50006AE80000A0E10000A0E10000A0E10000A0E1101F11EE0110
-S31A50006AFD1AC1E3101F01EE151F07EE0000A0E10000A0E1000027
-S31A50006B12A0E10000A0E10000A0E10000A0E1101F11EE0C10C109
-S31A50006B27E3101F01EE161F07EE0E02A0E3021A80E2202090E413
-S31A50006B3C000031E1FCFFFF1A160F07EE9A0F07EE0000A0E1008F
-S31A50006B5100A0E10000A0E10000A0E10000A0E10000A0E1151F20
-S31A50006B6607EE151F08EE0000A0E10000A0E10000A0E10000A082
-S31A50006B7BE10000A0E10000A0E1161F07EE171F08EE0FE0A0E106
-S31A50006B9003F0A0E1030000EA40FE00509042010050FE005064D6
-S31A50006BA5FE005070A81BE90DC0A0E100D82DE908009FE504B09F
-S31A50006BBA4CE2790D00EB00A81BE9D4FE00500DC0A0E1F0D92DBF
-S31A50006BCFE904B04CE20150A0E10070A0E30530A0E1015045E29D
-S31A50006BE4070053E10080A0E10260A0E1470000DA0FE0A0E1088E
-S31A50006BF9F0A0E1FF4000E20FE0A0E108F0A0E10010A0E33020D3
-S31A50006C0E44E2413044E2050053E309005283FFE000E202000082
-S31A50006C239A613044E2050053E30000008A0110A0E3000051E328
-S31A50006C382F00000A00C0A0E330004EE2FF1000E241204EE2FF94
-S31A50006C4D3002E2050053E3090051830200009A61304EE205004E
-S31A50006C6253E30000008A01C0A0E300005CE32100000A0774A03E
-S31A50006C77E100C0A0E3301044E2FF3001E2090053E301C0A091E5
-S31A50006C8C0600009A613044E2050053E357C044920200009A4141
-S31A50006CA13044E2050053E337C044920010A0E3FF3000E209007D
-S31A50006CB653E30010A0910600009A61304EE2050053E357104EAB
-S31A50006CCB920200009AFF3002E2050053E337104E920C2281E12B
-S31A50006CE0027087E1000056E30500000A003096E5023083E000E7
-S31A50006CF53086E5010000EA0000E0E3F0A91BE90530A0E1015047
-S31A50006D0A45E2000053E3B7FFFFCA0700A0E1F0A91BE90DC0A0B0
-S31A50006D1FE1F0DF2DE90120A0E304B04CE268D04DE288200BE5BE
-S31A50006D340070A0E38C700BE50030E0E390300BE50790A0E180DA
-S31A50006D49100BE50080A0E1930000EA530052E30300000A0402C6
-S31A50006D5E9FE50710A0E10F0D00EB910000EA0FE0A0E108F0A024
-S31A50006D73E1027087E200C0A0E10800A0E10110A0E37C204BE2D2
-S31A50006D880030A0E37C300BE5FF600CE28BFFFFEB004050E27CA2
-S31A50006D9DA04BE2030000AAC0019FE50710A0E1FD0C00EB7F00C1
-S31A50006DB200EA017087E2303046E2090053E303F19F976200005F
-S31A50006DC7EA946F0050F06D0050F06D0050F06D0050546F00500A
-S31A50006DDC546F0050546F0050206F0050206F0050206F00500881
-S31A50006DF100A0E12F1046E20A20A0E171FFFFEB0050A0E12F301A
-S31A50006E0647E288201BE5067083E084500BE5000052E30A000074
-S31A50006E1B0A80301BE5000053E30400000A039065E03C019FE575
-S31A50006E300910A0E1DB0C00EB000000EA80901BE50020A0E38866
-S31A50006E45200BE524319FE5001093E5095085E090301BE50520CE
-S31A50006E5A69E0030052E10230A03190300BE5010055E103000061
-S31A50006E6F3A00319FE5002093E5020055E10300009AF4009FE5E4
-S31A50006E840510A0E1C60C00EB480000EA2E3084E2034066E004CD
-S31A50006E997087E00430A0E1014044E2000053E3080000DA08007B
-S31A50006EAEA0E10110A0E30A20A0E142FFFFEB0430A0E101404454
-S31A50006EC3E20100C5E4000053E3F6FFFFCA0800A0E10110A0E3C7
-S31A50006ED80020A0E339FFFFEB017087E20000E0E17C205BE5FF14
-S31A50006EED3000E27C200BE5020053E10200000A84101BE578004E
-S31A50006F029FE5A70C00EB8C201BE5053069E0020053E10320A0DF
-S31A50006F17218C200BE51C0000EA0800A0E13B1066E20A20A0E185
-S31A50006F2C25FFFFEB4C309FE590201BE50050A0E144009FE500A3
-S31A50006F415083E58C301BE50510A0E1950C00EB170000EA071037
-S31A50006F56A0E12C009FE50620A0E1900C00EB120000EAF0FE0087
-S31A50006F6B501CFF005040FF00508C420100F441010058FF0050C5
-S31A50006F8094FF005090420100D0FF0050F8FF0050017087E20FA1
-S31A50006F95E0A0E108F0A0E10A0050E3FAFFFF1A0FE0A0E108F000
-S31A50006FAAA0E1002050E267FFFFCAF0AF1BE90DC0A0E130D82D54
-S31A50006FBFE9B4309FE504B04CE2085193E50340A0E1000055E367
-S31A50006FD42100001A143194E5000053E30900000A183194E590BE
-S31A50006FE9209FE50310D2E78C009FE5013083E2183184E5690C00
-S31A50006FFE00EB183194E5060053E3185184850C3194E5FF0053C5
-S31A50007013E3060000CA143194E5000053E30100000A5C009FE580
-S31A500070285E0C00EB0000E0E330A81BE9043084E20300A0E101EA
-S31A5000703D1CA0E3043184E5112E84E20FE0A0E100F094E50C0120
-S31A5000705284E5080184E5000050E3EDFFFFBA083194E5042194B5
-S31A50007067E5013043E2083184E50100D2E4042184E530A81BE9C0
-S31A5000707C3CB100005083000024000150280001500DC0A0E100AD
-S31A50007091D82DE920309FE504B04CE200C0A0E308C183E5012C4F
-S31A500070A6A0E30C2183E5000083E5141183E518C183E500A81B6E
-S31A500070BBE93CB100000DC0A0E100D82DE914309FE5042083E207
-S31A500070D0042183E50C1193E504B04CE2081183E500A81BE93CE8
-S31A500070E5B100000DC0A0E1F0DD2DE90C20A0E304B04CE2C0D03D
-S31A500070FA4DE20080A0E130604BE20600A0E10040A0E3B8400BF1
-S31A5000710FE50170A0E1D0400BE50410A0E1BF0C00EB0150A0E31F
-S31A50007124BA524BE1BC424BE1B0304BE200308DE504A0A0E104C6
-S31A50007139A08DE538339FE50C20A0E3B8224BE17610A0E30830F4
-S31A5000714E8DE5AC404BE224339FE50400A0E114C093E50A20A0D5
-S31A50007163E130C00BE50230A0E33BFCFFEBB4304BE200308DE577
-S31A5000717894004BE200339FE57210A0E308308DE50A20A0E104D6
-S31A5000718DA08DE50230A0E331FCFFEBB8304BE200308DE5BC2026
-S31A500071A24BE204208DE57C004BE2D4329FE56210A0E308308DD2
-S31A500071B7E50520A0E10A30A0E126FCFFEBC0304BE200308DE55C
-S31A500071CCC4204BE204208DE564004BE2AC329FE56D10A0E308B6
-S31A500071E1308DE50520A0E10530A0E11BFCFFEBC8304BE20030EF
-S31A500071F68DE5CC204BE204208DE54C004BE284329FE56810A042
-S31A5000720BE308308DE50520A0E10530A0E110FCFFEB0530A0E381
-S31A5000722000308DE5D0204BE224008DE90800A0E15C329FE50708
-S31A5000723510A0E10C308DE50520A0E10430A0E111FCFFEB00005D
-S31A5000724A50E3AB00000ACC301BE5000053E30800000AC8001BCA
-S31A5000725FE50610A0E1B01100EB000050E30300001A20029FE5A6
-S31A50007274C8101BE5CA0B00EB9F0000EAC4301BE5000053E3164E
-S31A5000728900000AC0001BE504129FE5020C00EB000050E301A069
-S31A5000729EA0031000000AC0001BE5F0119FE5FC0B00EB00005041
-S31A500072B3E30700001AE4319FE5002093E500A0A0E1000052E3E5
-S31A500072C80600001AD4019FE5B40B00EB890000EACC019FE5C0B4
-S31A500072DD101BE5B00B00EB850000EA00005AE30700001AD030C3
-S31A500072F21BE5000053E30400001AAC019FE5A80B00EBA8019FC6
-S31A50007307E5A60B00EB7B0000EA00005AE32900001A0610A0E11E
-S31A5000731C0120A0E3D4404BE2D0001BE50430A0E1F00D00EB00B4
-S31A500073315050E2070000AAD4001BE5D0401BE5E90E00EB0020D8
-S31A50007346A0E168019FE50410A0E1940B00EB690000EA5C019F00
-S31A5000735BE5B0101BE50A60A0E148FFFFEB50819FE534704BE2E0
-S31A50007370010000EA0650C7E7016086E2030056E30400008A0B25
-S31A50007385FFFFEB005050E2F8FFFFAA103198E5D4300BE50000E0
-S31A5000739A55E3070000AAD4001BE5D00E00EB0010A0E110019FC1
-S31A500073AFE57C0B00EB0400A0E12D0E00EB4F0000EA01005AE3FA
-S31A500073C40200001AF8009FE5750B00EB4A0000EA39FFFFEBB451
-S31A500073D9301BE5000053E31100000ABC301BE5000053E30200A4
-S31A500073EE001AD4009FE56B0B00EB3A0000EAB8401BE5C8609F7E
-S31A50007403E5000000EA0150C4E4E9FEFFEB005050E2FBFFFFAA60
-S31A500074180600A0E1B8101BE50420A0E15F0B00EB2E0000EA3375
-S31A5000742D004BE29C109FE50320A0E3B20B00EB000050E3020014
-S31A50007442001A8C009FE5D7FDFFEB250000EA34305BE55300539E
-S31A50007457E31F00001A33305BE5303043E2090053E31B00008AA2
-S31A5000746C64009FE5B8101BE528FEFFEB1A0000EA84000150A07C
-S31A500074814201008C0001509C000150AC000150CC000150E40095
-S31A500074960150F00001500801015010010150CC43010018010113
-S31A500074AB5040010150540101502C0001506801015094AC005027
-S31A500074C03CB1000080010150A4010150D0010150F40101500C38
-S31A500074D5020150B86F005018009FE534101BE52F0B00EB00007D
-S31A500074EA5AE30300001AD4004BE2DE0D00EB000000EA10020109
-S31A500074FF50F0AD1BE90DC0A0E100D82DE90010A0E118009FE5C8
-S31A5000751404B04CE2220B00EB10009FE510109FE510209FE537EF
-S31A50007529FBFFEB00A81BE970040150148400008484000090046D
-S31A5000753E01500DC0A0E1F0DF2DE904B04CE230D04DE20070A03D
-S31A50007553E344304BE20060A0E140504BE244700BE50500A0E181
-S31A5000756800308DE50140A0E144329FE56610A0E308308DE507B0
-S31A5000757D20A0E104708DE50230A0E334FBFFEB0130A0E3880012
-S31A500075928DE80600A0E120329FE50410A0E10C308DE50220A0B7
-S31A500075A7E308708DE50530A0E136FBFFEB070050E1A000000AF9
-S31A500075BC00029FE52F0D00EB070050E10200001AF4019FE5F4F6
-S31A500075D10A00EB990000EAEC019FE5F10A00EB44301BE500000C
-S31A500075E653E31900000ADCC19FE548304BE2D8E19FE50320A01B
-S31A500075FBE1D4119FE50380A0E100409EE50C60A0E100009CE5A6
-S31A500076100EA0A0E1003091E5840080E0043043E2940301E09CE9
-S31A500076251200EB005050E20D00000A48401BE50500A0E13E1305
-S31A5000763A00EB0410A0E10030A0E190019FE50520A0E1D50A001A
-S31A5000764FEB040000EA84019FE570619FE570A19FE5D00A00EB3F
-S31A5000766448804BE274919FE50010A0E3004099E5012CA0E30438
-S31A5000767900A0E1670B00EB60319FE5030093E8030084E8003096
-S31A5000768E96E5103084E5012CA0E3143084E50050A0E318508451
-S31A500076A3E50510A0E1024084E00400A0E15A0B00EB30C19FE511
-S31A500076B80F009CE80F0084E8003096E500209AE5023083E0106A
-S31A500076CD3084E5143084E50510A0E1185084E5012CA0E30240B3
-S31A500076E284E00400A0E14C0B00EBFCC09FE50F009CE804E0A0BB
-S31A500076F7E10700AEE8F0609FE50130CEE42324A0E10120CEE458
-S31A5000770C2338A0E10030CEE500209AE5003096E5823043E01024
-S31A500077213084E5182084E50510A0E1143084E5012CA0E302408E
-S31A5000773684E00400A0E1370B00EBB0C09FE50F009CE804E0A0C7
-S31A5000774BE10700AEE80130CEE42334A0E10030CEE5017087E2DD
-S31A50007760003096E5017087E200109AE5017087E2036061E0101C
-S31A500077756084E5017087E2146084E50820A0E1181084E50600E9
-S31A5000778AA0E1421200EB005050E21800000A48401BE50500A003
-S31A5000779FE1E41200EB0410A0E10030A0E128009FE50520A0E125
-S31A500077B47B0A00EB200000EA98040150C0020150C4040150F4E3
-S31A500077C90401500005015058B2000060B2000064B2000024054F
-S31A500077DE01504C05015068B20000940501509C050150AC0501A5
-S31A500077F3505CB20000BC0501500600A0E10724A0E1001099E5FA
-S31A500078080830A0E1721200EB005050E20900000A48401BE505CB
-S31A5000781D00A0E1C41200EB0410A0E10030A0E108009FE50520C7
-S31A50007832A0E15B0A00EB000000EACC050150F0AF1BE90DC0A0FE
-S31A50007847E170D82DE96C309FE56C009FE508D04DE268409FE554
-S31A5000785C001093E5002094E504B04CE2015062E04D0A00EB00E9
-S31A500078713094E50060A0E3230456E11400002A0030D5E5FF009B
-S31A5000788653E30700000A102085E20C1092E800C08DE51C109530
-S31A5000789BE504108DE524009FE50510A0E13E0A00EB016086E2DD
-S31A500078B0003094E5015C85E2230456E1030000EA5CB20000FCAB
-S31A500078C505015060B2000040060150EAFFFF3A70A81BE90DC04E
-S31A500078DAA0E170D82DE9B4309FE5B4109FE504B04CE2B0C09FC3
-S31A500078EFE5002093E5005091E500009CE50C60A0E1804082E05B
-S31A500079040410A0E1050054E11C00002A003094E5010073E315EE
-S31A5000791900000A040051E10200000A7C009FE50420A0E11D0AEB
-S31A5000792E00EB0410A0E1050054E10B00002A003094E5010073E2
-S31A50007943E30800000A54309FE5002093E50320C2E3021081E009
-S31A50007958050051E10200002A003091E5010073E3F9FFFF1A0152
-S31A5000796D40A0E1E4FFFFEA003096E50330C3E3034084E0E0FF18
-S31A50007982FFEA040051E10200000A14009FE50420A0E1030A0025
-S31A50007997EB70A81BE958B200005CB2000060B200006C06015091
-S31A500079AC0DC0A0E130D82DE9BC309FE5BC409FE5002093E5007C
-S31A500079C1E094E504B04CE2B0C09FE58E2082E000E09CE500506B
-S31A500079D6A0E102C0A0E10E005CE11A00002A0400A0E1003092AC
-S31A500079EBE5010073E31100000A02005CE10200000A02306CE011
-S31A50007A00430151E11600009A02C0A0E10E005CE10700002A0036
-S31A50007A153090E50320C3E302C08CE00E005CE10200002A0030C3
-S31A50007A2A9CE5010073E3F9FFFF1A0C20A0E1020000EA003090AF
-S31A50007A3FE50330C3E3032082E00E0052E1E5FFFF3A02005CE1FC
-S31A50007A540500000A02306CE0430151E10200008A00C085E5010D
-S31A50007A6900A0E330A81BE90000A0E330A81BE958B2000060B2D8
-S31A50007A7E00005CB200000DC0A0E1F0DF2DE904B04CE2B8D04DA5
-S31A50007A93E20040A0E3A8400BE5B0400BE50080A0E1B8400BE542
-S31A50007AA8A0604BE2C0400BE50600A0E1C8400BE5A4304BE200D6
-S31A50007ABD308DE5A8204BE204208DE50170A0E144339FE56210D2
-S31A50007AD2A0E308308DE50120A0E30430A0E1DEF9FFEBAC304BDB
-S31A50007AE7E200308DE5B0204BE204208DE588004BE21C339FE595
-S31A50007AFC7210A0E308308DE50120A0E30430A0E1D3F9FFEBB4AD
-S31A50007B11304BE200308DE5B8204BE204208DE570004BE2F432AC
-S31A50007B269FE56510A0E308308DE50120A0E30430A0E1C8F9FFB5
-S31A50007B3BEB58004BE2C0304BE204308DE5BC504BE2D0329FE5ED
-S31A50007B506610A0E308308DE50120A0E300508DE50430A0E1BD4F
-S31A50007B65F9FFEBC4304BE200308DE5C8204BE204208DE5400024
-S31A50007B7A4BE2A4329FE56C10A0E308308DE50120A0E30430A0F8
-S31A50007B8FE1B2F9FFEB0530A0E300308DE5CC204BE204208DE50C
-S31A50007BA4043043E208308DE50800A0E174329FE50710A0E10C1C
-S31A50007BB9308DE50220A0E30630A0E1B1F9FFEB040050E1020098
-S31A50007BCE001A58029FE54AFEFFEB0D0100EAA8301BE5000053FF
-S31A50007BE3E30500000AC8301BE5000053E30200000ACC301BE50F
-S31A50007BF8000053E30200001A2C029FE53EFEFFEB010100EAC04C
-S31A50007C0D301BE5000053E31800000ABC001BE5E91000EB006084
-S31A50007C2250E20600001ABC001BE5C4301BE5030080E001004051
-S31A50007C37E2E21000EB006050E20D00000ABC401BE50600A0E1F7
-S31A50007C4CB91100EB0020A0E1DC019FE50410A0E1510900EBD468
-S31A50007C61019FE5D4319FE5D4C19FE5001093E500209CE54B0914
-S31A50007C7600EBE50000EAC4619FE5A4101BE5003096E5BC419F45
-S31A50007C8BE5030051E10400003AC4301BE5002094E5033081E015
-S31A50007CA0020053E10600003AA0019FE53D0900EB84019FE500A4
-S31A50007CB51096E5002094E5390900EBD30000EACC001BE54B0936
-S31A50007CCA00EB0F0050E30300009A78019FE51010A0E3310900AB
-S31A50007CDFEBCB0000EAC0301BE5000053E30800001AC4101BE57E
-S31A50007CF40500A0E12BFFFFEB000050E30300001A4C019FE5C4A6
-S31A50007D09101BE5250900EBBF0000EA28319FE53C519FE53C41D2
-S31A50007D1E9FE5001093E5002095E50080A0E3000094E5019062E5
-S31A50007D33E00910A0E1980700EB003095E50860A0E1007094E565
-S31A50007D48230458E11700002A0030D7E5FF0053E30F00000ACC29
-S31A50007D5D001BE50710A0E1310900EB000050E30A00001A102077
-S31A50007D7297E5BC301BE5030052E18900001ADC009FE5CC101B0E
-S31A50007D87E53D0B00EB000050E39F00000A0180A0E3040000EAAB
-S31A50007D9C016086E2003095E5017C87E2230456E1E7FFFF3ABCEA
-S31A50007DB1101BE5C4201BE5000058E30C00001A003095E59400D4
-S31A50007DC69FE50860A0E1007090E5020000EA016086E200309586
-S31A50007DDBE5017C87E2230456E10200002A0030D7E5FF0053E3C7
-S31A50007DF0F7FFFF1A0100A0E1021081E0011041E2701300EB0082
-S31A50007E058050E21700000A54009FE5E40800EB7E0000EA84069E
-S31A50007E1A015098060150AC060150C0060150DC060150E4060185
-S31A50007E2F50F006015004070150200701504007015058B20000DB
-S31A50007E445CB200008C420100F44101005C07015078070150A894
-S31A50007E5907015060B2000068B20000FC0701501808015001A0D4
-S31A50007E6EA0E3BC001BE5D0404BE2C4101BE50420A0E18510001F
-S31A50007E83EB006050E20800000A0600A0E1D0401BE508A0A0E145
-S31A50007E98261100EB0410A0E10030A0E108019FE50620A0E1BD26
-S31A50007EAD0800EB00005AE30E00000ABC001BE5A4101BE5C420CE
-S31A50007EC21BE5D0304BE2C31000EB006050E20700000AD0401B9C
-S31A50007ED7E50600A0E1151100EB0410A0E10030A0E1C8009FE531
-S31A50007EEC0620A0E1AC0800EB0700A0E10010A0E3012CA0E346D4
-S31A50007F010900EBCC101BE50700A0E1D70800EBBC301BE5B02037
-S31A50007F161BE5103087E5000052E30500001AC0301BE5000053BD
-S31A50007F2BE3BC201B150200001AA4201BE5000000EAAC201BE566
-S31A50007F40B8301BE5142087E5000053E30200001A64309FE500E4
-S31A50007F553093E5000000EAB4301BE51C3087E5C4301BE5183057
-S31A50007F6A87E50900A0E1001095E5D0204BE2471000EB0060501D
-S31A50007F7FE21000000AD0401BE50600A0E1E91000EB0410A0E18B
-S31A50007F940030A0E120009FE50620A0E1800800EB1A0000EA14FB
-S31A50007FA9009FE57D0800EB170000EA4C08015070080150904238
-S31A50007FBE010094080150D00701503C309FE5001093E50900A021
-S31A50007FD3E1002095E5D0304BE27E1000EB006050E20A00000A7C
-S31A50007FE8D0401BE50600A0E1D01000EB0410A0E10030A0E10C7A
-S31A50007FFD009FE50620A0E1670800EB010000EA68B20000B408D3
-S31A500080120150F0AF1BE90DC0A0E1F0D82DE904B04CE254D04D90
-S31A50008027E20040A0E30070A0E14C504BE254400BE50500A0E185
-S31A5000803C5C400BE550304BE200308DE554204BE204208DE501C6
-S31A5000805160A0E128319FE56610A0E308308DE50120A0E304308B
-S31A50008066A0E17CF8FFEB58304BE200308DE55C204BE204208D1F
-S31A5000807BE534004BE200319FE56C10A0E308308DE50120A0E352
-S31A500080900430A0E171F8FFEB0220A0E314008DE8E4309FE507B0
-S31A500080A500A0E10C308DE50610A0E108408DE50530A0E174F8CE
-S31A500080BAFFEB040050E10200001AC4009FE50DFDFFEB4600009E
-S31A500080CFEA54301BE5000053E30200000A5C301BE5000053E3D4
-S31A500080E40200001AA4009FE504FDFFEB3D0000EA50001BE5B2D9
-S31A500080F90F00EB005050E20600001A50001BE558301BE50300A5
-S31A5000810E80E0010040E2AB0F00EB005050E20D00000A50401B9A
-S31A50008123E50500A0E1821000EB0020A0E160009FE50410A0E1EF
-S31A500081381A0800EB58009FE558309FE558C09FE5001093E500C3
-S31A5000814D209CE5140800EB240000EA50101BE558301BE5010028
-S31A50008162A0E1031081E0011041E2951200EB000050E30C0000B8
-S31A500081770A28009FE5090800EB190000EAC0060150DC0601509E
-S31A5000818CC0020150F0060150D808015020070150400701505895
-S31A500081A1B200005CB200001808015050001BE558101BE560200A
-S31A500081B64BE2B70F00EB005050E20900000A60401BE50500A0A6
-S31A500081CBE1591000EB0410A0E10030A0E108009FE50520A0E19C
-S31A500081E0F00700EB000000EA94080150F0A81BE90DC0A0E1F0A1
-S31A500081F5DF2DE904B04CE218D04DE20060A0E300608DE52C3020
-S31A5000820A4BE204308DE50120A0E308208DE548319FE50C308D32
-S31A5000821FE5022082E00630A0E118F8FFEB060050E10200001A87
-S31A5000823430019FE5B1FCFFEB660000EA28319FE528519FE52841
-S31A50008249419FE5001093E5002095E50680A0E1000094E501A0C2
-S31A5000825E62E00A10A0E14D0600EB006094E50270A0E3026C86D8
-S31A50008273E2010000EA017087E2016C86E2EC909FE5003099E576
-S31A50008288230457E10D00002A0030D6E5FF0053E3F6FFFF0A2CAB
-S31A5000829D001BE50610A0E1E10700EB000050E3F1FFFF1AC4000C
-S31A500082B29FE52C101BE5F10900EB000050E34500000A0180A019
-S31A500082C7E3000058E30300001AA8009FE52C101BE5B20700EB05
-S31A500082DC3E0000EA100096E530704BE2181096E50720A0E16903
-S31A500082F10F00EB005050E20700000A30401BE50500A0E10B1084
-S31A5000830600EB0410A0E10030A0E16C009FE50520A0E1A207009C
-S31A5000831BEB0600A0E1FF10A0E3012CA0E33C0800EB0A00A0E189
-S31A50008330001099E50720A0E1570F00EB005050E21000000A308F
-S31A50008345401BE50500A0E1F90F00EB0410A0E10030A0E12400AA
-S31A5000835A9FE50520A0E1900700EB1C0000EAEC080150F00601CA
-S31A5000836F505CB2000060B2000068B20000F80801500C09015062
-S31A500083849408015040309FE5001093E53C309FE5002093E50A93
-S31A5000839900A0E10730A0E18D0F00EB005050E20B00000A3040B2
-S31A500083AE1BE50500A0E1DF0F00EB0410A0E10030A0E110009F10
-S31A500083C3E50520A0E1760700EB020000EA68B2000060B2000044
-S31A500083D8B4080150F0AF1BE90DC0A0E1F0D82DE904B04CE21468
-S31A500083EDD04DE20060A0E300608DE520304BE204308DE501202D
-S31A50008402A0E308208DE5D4309FE50C308DE5022082E00630A062
-S31A50008417E19CF7FFEB060050E10200001ABC009FE535FCFFEBEE
-S31A5000842C3D0000EAB4309FE5B4409FE5B4509FE5001093E500CE
-S31A500084412094E50670A0E1000095E5011062E0D20500EB005061
-S31A5000845695E5010000EA016086E2015C85E2003094E5230456A3
-S31A5000846BE10800002A0030D5E5FF0053E3F7FFFF0A20001BE555
-S31A500084800510A0E1690700EB000050E3F2FFFF1A0170A0E3006F
-S31A500084950057E30300001A54009FE520101BE53F0700EB1E00CE
-S31A500084AA00EA48209FE5140095E5003092E5030050E105000023
-S31A500084BF3A38309FE518C095E5001093E50C2080E0010052E192
-S31A500084D40B00003A24009FE5310700EB100000EAEC080150F0FE
-S31A500084E90601505CB2000060B2000068B200000C0901508C4263
-S31A500084FE0100F441010024090150101095E50C20A0E1A2050070
-S31A50008513EB08209FE51C3095E5003082E5000000EA904201004C
-S31A50008528F0A81BE90DC0A0E1F0D92DE944209FE504D04DE20034
-S31A5000853D4092E504B04CE2000054E32700001A30809FE5011875
-S31A50008552A0E3000098E50130A0E3003082E5010840E2820E00B8
-S31A50008567EB001050E20600000A10009FE50B0700EB0400A0E156
-S31A5000857C1B0000EA58830000F44101003C09015060709FE56034
-S31A50008591609FE50100A0E15C409FE50710A0E10620A0E19B0E11
-S31A500085A600EB50509FE50400A0E10510A0E1A80E00EB44009FBC
-S31A500085BBE5001097E5002096E500C094E5003095E500C08DE534
-S31A500085D0F40600EB003094E5002098E524109FE5013883E202BD
-S31A500085E52063E0002081E50100A0E3050000EA58B200005CB2B7
-S31A500085FA000060B2000064B200006409015068B20000F0A91B62
-S31A5000860FE90DC0A0E130D82DE904B04CE20050A0E1010055E3BF
-S31A500086240140A0E1020000CA48009FE5B3FBFFEB30A81BE9BB62
-S31A50008639FFFFEB000050E30C00000A34009FE534109FE5042000
-S31A5000864E94E5AFF6FFEB003050E20400000A0500A0E10410A00F
-S31A50008663E10FE0A0E10CF093E530A81BE910009FE5A2FBFFEBF0
-S31A5000867830A81BE9900901501484000084840000A40901500D26
-S31A5000868DC0A0E1F0DD2DE904B04CE264D04DE20080A0E10140D7
-S31A500086A2A0E1080098E502A0A0E1000050E30D00000A80104B1F
-S31A500086B7E20120A0E3AE0100EB0C2098E5000052E30200000A4E
-S31A500086CC80301BE5000053E35400000A000052E30200001A802E
-S31A500086E1301BE5000053E34F00001A28039FE528339FE50410BD
-S31A500086F698E5036084E0A90600EB103098E5013043E2050053D0
-S31A5000870BE303F19F97410000EA2C8700504C870050B08700501E
-S31A50008720B88700505C87005074870050F0229FE5003096E5ECB4
-S31A50008735129FE5EC029FE5000053E30210A001970600EB33002D
-S31A5000874A00EADC029FE5001096E5930600EB2F0000EA0600A0AA
-S31A5000875FE1BF0C00EB0010A0E1BC029FE58D0600EB290000EAB4
-S31A500087740050A0E3B4429FE50510D6E70400A0E1870600EB047A
-S31A500087890055E30100008AA0029FE5830600EB015085E205006B
-S31A5000879E55E3F5FFFF9A90029FE57E0600EB1A0000EA88029FF9
-S31A500087B3E51B0000EA84029FE50650A0E1780600EB0030D6E53C
-S31A500087C80640A0E1000053E31100000A6C729FE50030D5E50AD8
-S31A500087DD0053E30200000A0130F4E50A0053E3FCFFFF1A07008A
-S31A500087F2A0E10030A0E30030C4E50510A0E1680600EB0A30A046
-S31A50008807E30130C4E40450A0E10030D5E5000053E3EEFFFF1A4F
-S31A5000881C00005AE30300000A18029FE55E0600EB0200A0E38AAB
-S31A500088310000EA103098E5040053E31300000A74404BE20400F9
-S31A50008846A0E15010A0E30A20A0E1BC0700EB000050E30000E0F7
-S31A5000885BE30470A0E17E0000BA0700A0E1630600EB000050E393
-S31A50008870EDFFFF0A74305BE52E0053E30A00A0017600000A5ED7
-S31A500088850053E30300A0037300000A103098E5013043E2050017
-S31A5000889A53E303F19F976D0000EABC880050D0880050548A00A2
-S31A500088AF5080890050EC8800501C89005074004BE2004096E5A0
-S31A500088C40610A0E183F7FFEB0A0000EA74004BE20610A0E10022
-S31A500088D920A0E3004096E50230A0E124F7FFEB030000EA7400BD
-S31A500088EE4BE2004096E50610A0E10B0C00EB000050E30400A0C7
-S31A50008903E35500000A000096E5000054E10100A0130200A003BE
-S31A50008918500000EA7C404BE20400A0E10610A0E10620A0E39B71
-S31A5000892D0400EB0050A0E304A0A0E184404BE274304BE288307E
-S31A500089420BE588704BE2E8809FE50410A0E10720A0E188001BE9
-S31A50008957E50830A0E106F7FFEB000050E32600000A84305BE5D9
-S31A5000896C0530C6E7015085E2050055E3F3FFFF9A360000EAC45A
-S31A50008981009FE50650A0E1060600EB74704BE2B8609FE50A0082
-S31A5000899600EA74305BE50740A0E1000053E30400000A0030D498
-S31A500089ABE50130C5E40120F4E5000052E3FAFFFF1A0A30A0E3A4
-S31A500089C00130C5E40040A0E30040C5E50600A0E1F40500EB0753
-S31A500089D500A0E15010A0E30420A0E1580700EB040050E10000AF
-S31A500089EAE0E31B0000BA0700A0E1000600EB040050E1E5FFFFF9
-S31A500089FF1A150000EA0600A0E10A10A0E10620A0E3620400EBD8
-S31A50008A140400A0E3100000EA240A01506CB20000380A01503016
-S31A50008A290A01502C0A0150400A0150440A01504C0A0150500AC5
-S31A50008A3E0150540A0150580A01505C0A0150640A0150900A0109
-S31A50008A535008009FE5D20500EB0100A0E3000000EA540A0150FD
-S31A50008A68F0AD1BE90DC0A0E100D82DE9031081E22111A0E1019C
-S31A50008A7D30A0E1011041E204B04CE200E0A0E10000A0E300C023
-S31A50008A92A0E1000053E1090000DA0120A0E1011041E204309E39
-S31A50008AA7E40F005CE3133C83E1030020E001C08C1200C0A003BA
-S31A50008ABC000052E3F5FFFFCA00A81BE90DC0A0E100D82DE90174
-S31A50008AD10040E204B04CE2050050E300F19F970C0000EAFC8A5B
-S31A50008AE60050FC8A00500C8B0050148B0050FC8A0050048B00C4
-S31A50008AFB500400A0E300A81BE90800A0E300A81BE90000A0E3D3
-S31A50008B1000A81BE9020CA0E300A81BE90DC0A0E1F0DF2DE904DA
-S31A50008B25B04CE243DE4DE208D04DE24C040BE50080A0E3501409
-S31A50008B3A0BE504A0A0E379FEFFEBB4919FE5080050E10970A03D
-S31A50008B4FE18800000A426E4BE2086046E20600A0E19C519FE5E3
-S31A50008B64012BA0E30510A0E10B0400EB433E4BE2083043E20C50
-S31A50008B793043E200308DE5434E4BE204808DE5084044E27431D3
-S31A50008B8E9FE5084044E2008083E50400A0E168319FE56C10A0E4
-S31A50008BA3E308308DE50820A0E10230A0E3AAF5FFEB0120A0E34F
-S31A50008BB804018DE84C041BE548319FE508808DE550141BE50C21
-S31A50008BCD308DE50430A0E1ADF5FFEB080050E16500000A1E0094
-S31A50008BE200EA0700A0E144241BE50A10A0E1A5FEFFEB010080A5
-S31A50008BF7E2050050E300F19F97160000EA1C8C00506C8C005092
-S31A50008C0C308C0050348C0050488C0050588C00500500A0E106FD
-S31A50008C2110A0E1012BA0E3DC0300EB510000EA0180A0E310008F
-S31A50008C3697E5A2FFFFEB00A08AE0147087E2050000EA09005786
-S31A50008C4BE1147047120970A001010000EAB4009FE5510500EB82
-S31A50008C60B0309FE5030057E1DDFFFF1A000058E34000000AA0F0
-S31A50008C75309FE5A0209FE50540A0E1003084E50400A0E1F8239D
-S31A50008C8A84E5FF1FA0E375FFFFEBFC0384E584309FE584409F14
-S31A50008C9FE5002093E5001094E57C009FE5817042E0730700EBEC
-S31A50008CB4000050E32E00000A001094E50700A0E1114D4BE20846
-S31A50008CC94044E20420A0E1F10C00EB006050E21500000A484410
-S31A50008CDE1BE50600A0E1930D00EB0410A0E10030A0E138009FFC
-S31A50008CF3E50620A0E12A0500EB1D0000EAF48400006CB20000D3
-S31A50008D0894420100940A0150C0020150AC0A015094850000CE39
-S31A50008D1DFAAD0BADDEADDE5CB2000060B20000C00A01502405BF
-S31A50008D3201500700A0E10510A0E1012BA0E30430A0E1240D00D2
-S31A50008D47EB006050E20900000A48441BE50600A0E1760D00EBB0
-S31A50008D5C0410A0E10030A0E108009FE50620A0E10D0500EB0036
-S31A50008D710000EAEC0A0150F0AF1BE90DC0A0E1F0DF2DE904B0DC
-S31A50008D864CE20480A0E30070A0E10150A0E10290A0E1D8609FA0
-S31A50008D9BE5E2FDFFEBD4A09FE5000050E33100000A0A0056E118
-S31A50008DB02C00000AC4309FE50710A0E1000096E5034088E019D3
-S31A50008DC50500EB000050E31F00001A100096E5090050E118000A
-S31A50008DDA001A013040E2050053E303F19F97130000EA048E00CD
-S31A50008DEF50048E0050748E0050388E0050108E0050248E00508F
-S31A50008E04003094E5003085E5F0AF1BE90500A0E10410A0E104FE
-S31A50008E1920A0E35F0300EBF0AF1BE90500A0E10410A0E106201A
-S31A50008E2EA0E35A0300EBF0AF1BE9004085E5F0AF1BE93C009F43
-S31A50008E43E50710A0E1D60400EBF0AF1BE9100096E51BFFFFEB50
-S31A50008E58008088E0146086E20A0056E1D2FFFF1A18009FE5071D
-S31A50008E6D10A0E1CC0400EBF0AF1BE9F4840000948500006CB2FC
-S31A50008E820000180B0150440B01500DC0A0E130D82DE90030A035
-S31A50008E97E304B04CE294509FE504D04DE2003085E59FFDFFEB20
-S31A50008EAC000050E33F00000A80309FE580009FE580409FE50063
-S31A50008EC11090E5012BA0E300C093E50400A0E18C1041E0310364
-S31A50008ED600EB0400A0E1FF1FA0E3E1FEFFEBFC3394E50300505C
-S31A50008EEBE10700001A002094E54C309FE5030052E10300001A2E
-S31A50008F00F82394E540309FE5030052E11100000A38009FE5A3CE
-S31A50008F150400EB0400A0E130209FE50030A0E3003082E503104C
-S31A50008F2AA0E1012BA0E33A0500EB1E0000EA8442010060B200A1
-S31A50008F3F005CB200006CB20000CEFAAD0BADDEADDE640B015045
-S31A50008F549442010018104BE23C009FE50120A0E384FFFFEB189D
-S31A50008F69301BE5000053E30700000A28009FE528109FE504209A
-S31A50008F7EA0E37DFFFFEB20009FE520109FE50220A0E379FFFF2B
-S31A50008F93EB0130A0E3003085E5040000EAD0090150E8090150E0
-S31A50008FA894420100100A0150F841010030A81BE90DC0A0E100B8
-S31A50008FBDD82DE9803260E0030180E0000180E014209FE50002EA
-S31A50008FD2A0E1483092E504B04CE20FE0A0E103F0A0E100A81B3B
-S31A50008FE7E9500000000DC0A0E1F0DF2DE904B04CE206DD4DE2BF
-S31A50008FFC98010BE5041090E59C110BE50020A0E3A4210BE50003
-S31A500090117091E5A0210BE549F3FFEB51F3FFEB47F3FFEB0430B1
-S31A5000902697E5010053E3A200001A0700A0E10410A0E3C30B0083
-S31A5000903BEB043097E5040053E30200000AD4029FE5550400EB4B
-S31A50009050F1FFFFEA0700A0E12010A0E3632F4BE2013CA0E39092
-S31A50009065310BE500C0A0E394C10BE5654F4BE200408DE5193E0D
-S31A5000907A4BE28C0A00EB000050E363AF4BE20700000A94329FF5
-S31A5000908FE528104BE2F32091E1410F52E30200000A84029FE50C
-S31A500090A43F0400EBDBFFFFEA0700A0E10030A0E394310BE5156B
-S31A500090B910A0E3653F4BE200308DE50A20A0E1193E4BE2780A95
-S31A500090CE00EB000050E31B00000A628F4BE20840A0E10130D408
-S31A500090E3E444929FE5000053E30200000A0130D4E4000053E383
-S31A500090F8FCFFFF1A0460A0E10130D4E4000053E3FCFFFF1A04DD
-S31A5000910D50A0E10130D4E4000053E3FCFFFF1AA4111BE500003E
-S31A5000912251E30100000A04029FE51D0400EB0900A0E10610A0CD
-S31A50009137E10820A0E100408DE50530A0E1170400EB0700A0E14D
-S31A5000914C1A10A0E30050A0E394510BE5653F4BE200308DE50AE6
-S31A5000916120A0E1193E4BE2510A00EB050050E10800000A0A00E6
-S31A50009176A0E190111BE58C204BE2260B00EB8C301BE5A0111BEF
-S31A5000918BE5050050E10310A011A0110BE5A0211BE5000052E303
-S31A500091A00200001A8C019FE5FE0300EB9AFFFFEA0510A0E180B3
-S31A500091B5519FE507CDA0E30500A0E1083097E5813083E00C20A9
-S31A500091CAD3E70120C0E7011081E2050051E3F8FFFFDA0700A094
-S31A500091DFE10030A0E394310BE51B10A0E3653F4BE200308DE5BB
-S31A500091F40A20A0E1193E4BE22C0A00EB000050E32900000A0A50
-S31A5000920900A0E190111BE574204BE2C70A00EB000050E3200008
-S31A5000921E000A9C111BE570201BE5003091E5101093E50240819D
-S31A50009233E09C211BE5044082E5A0111BE574205BE50700A0E17B
-S31A50009248450A00EB1F30D4E51F30C4E50720D4E5800012E3022A
-S31A5000925D00001A0730D4E5800013E3FCFFFF0A98111BE5003049
-S31A5000927291E50100A0E1202093E50510A0E10FE0A0E100F09259
-S31A50009287E59C211BE5343092E50140A0E30C4083E5B2F2FFEBF9
-S31A5000929C0400A0E12B0000EA94009FE5BE0300EB5AFFFFEA8C3B
-S31A500092B1009FE5BB0300EB57FFFFEA050053E30200001A7C0013
-S31A500092C69FE5B60300EB52FFFFEAA4F2FFEB3200A0E336FFFF72
-S31A500092DBEBA4311BE5000053E30100001A5C009FE5AD0300EB9C
-S31A500092F0A4111BE554009FE5011081E2A4110BE5A80300EBA433
-S31A50009305211BE50000A0E30A0052E30F00000A0700A0E1CD01AB
-S31A5000931A00EB88F2FFEB3DFFFFEAA80B01509EFEFFFFC40B0106
-S31A5000932F50E00B0150DC0B0150F00B01509C8300000C0C01503B
-S31A50009344200C01503C0C01505C0C01507C0C0150F0AF1BE90D66
-S31A50009359C0A0E170D82DE90040A0E1086094E5045096E504B0E5
-S31A5000936E4CE2E70A00EB0000A0E3D80A00EB000085E5344085D7
-S31A50009383E50600A0E117FFFFEB70A81BE90DC0A0E100D82DE9BB
-S31A5000939804B04CE204C090E504109CE52130A0E30030C1E5FF11
-S31A500093AD20A0E30720C1E5213043E20F30C1E530308CE500A811
-S31A500093C21BE90DC0A0E110D82DE904E090E504B04CE204C09E53
-S31A500093D7E52130A0E30030CCE54820A0E30E20CCE50000A0E344
-S31A500093EC0B00CCE50A00CCE5013043E20C30CCE5462042E20DC5
-S31A5000940120CCE5203083E20430CCE518008EE514008EE508304B
-S31A500094168EE50140A0E12C008EE56010A0E30110CCE53F308370
-S31A5000942BE20330CCE57E2082E20220CCE5203043E210308EE513
-S31A500094407F2082E20720CCE5203043E20F30CCE50C20A0E101D3
-S31A5000945510C2E40710CCE50030D4E70030C2E7010080E2050002
-S31A5000946A50E3FAFFFFDA2230A0E30030CCE50020A0E30D20CC40
-S31A5000947FE51E3043E20C30CCE5012082E230208EE510A81BE939
-S31A500094940DC0A0E100D82DE9010C51E20100A01304B04CE2005B
-S31A500094A9A81BE90DC0A0E100D82DE9042090E504B04CE21430B1
-S31A500094BE92E50000A0E3000053E10200000A183092E5000053F7
-S31A500094D3E10000001A0100A0E300A81BE90DC0A0E100D82DE9C7
-S31A500094E804B04CE204C090E504009CE52230A0E30030C0E505CA
-S31A500094FD20C0E54224A0E10620C0E50410C0E5043083E200300B
-S31A50009512C0E50120A0E32C208CE500A81BE90DC0A0E1F0DF2DF2
-S31A50009527E904B04CE20090A0E10380A0E13F0058E3044099E5BD
-S31A5000953C0850A0C14050A0D304309BE50160A0E1087094E5027F
-S31A50009551A0A0E1040094E5400057E30400001A147084E51C3040
-S31A5000956684E5245084E55030A0E3030000EA187084E52030849F
-S31A5000957BE5285084E54030A0E3083084E52230A0E30030C0E581
-S31A500095900A50C0E54534A0E10B30C0E50020A0E30820C0E50225
-S31A500095A5E0A0E10970C0E54030A0E30730C0E5122082E2002057
-S31A500095BAC0E50A005EE10F0000AA8E31A0E1062083E004C09280
-S31A500095CFE501E08EE2061093E70C20A0E101C04CE2000052E39A
-S31A500095E4F4FFFFDA0C20A0E10130D1E401C04CE21030C0E500E9
-S31A500095F90052E3F9FFFFCAEDFFFFEA050058E1040000AA003020
-S31A5000960EA0E305E068E01030C0E501E05EE2FCFFFF1A2C209447
-S31A50009623E50730D0E5400013E3FCFFFF0A000052E30800001A7A
-S31A50009638143094E5030057E10130A0030230A0130C3084E50968
-S31A5000964D00A0E10710A0E10520A0E1A0FFFFEBF0AF1BE90DC0FA
-S31A50009662A0E170D82DE904D04DE20060A0E1045096E504409532
-S31A50009677E50C20D4E56230A0E30030C4E50710D4E5403043E26B
-S31A5000968C0030C4E504B04CE22A0000EA0430A0E30000A0E30A60
-S31A500096A130C4E50B00C4E5800052E30800C4E56020A00309201F
-S31A500096B6C4E5103095E5020053E10200001A013041E20330C449
-S31A500096CBE5210000EA0010A0E11C004BE2102085E54030A0E3DD
-S31A500096E00730C4E50A20A0E30020C4E51030D4E50130C0E701F7
-S31A500096F51081E2030051E3FAFFFF9A19305BE51A105BE50600D5
-S31A5000970AA0E1002096E5031481E120C092E5041041E20FE0A042
-S31A5000971FE104F09CE51B305BE5013043E20330C4E56220A0E3C7
-S31A500097340020C4E50710D4E52230A0E30030C4E50320D4E5FFA8
-S31A500097491001E2012082E2010052E1CFFFFF1A70A81BE90DC039
-S31A5000975EA0E170D82DE904B04CE200C0A0E30C40A0E10260A0CD
-S31A50009773E1040090E5060054E104E090E50150A0E1060000AA1B
-S31A500097880520A0E106C0A0E1043092E501C05CE2034084E00830
-S31A5000979D2082E2FAFFFF1A2230A0E30030CEE50A40CEE544349E
-S31A500097B2A0E10B30CEE50420A0E30820CEE51010D0E500C0A026
-S31A500097C7E30910CEE54030A0E30730CEE5062082E20020CEE54E
-S31A500097DC06005CE10D0000AA8C21A0E1053082E0041093E505D2
-S31A500097F10092E7000051E301208CE20300000A1030DEE5013090
-S31A50009806C0E4011051E2FBFFFF1A02C0A0E106005CE1F1FFFF87
-S31A5000981BBA70A81BE90DC0A0E170D82DE90050A0E1044095E5D1
-S31A50009830043094E50C2094E504B04CE20410D3E5010052E30394
-S31A5000984500001A1C6094E50030A0E3143084E5020000EA2060DD
-S31A5000985A94E50030A0E3183084E5141094E50030A0E32C308496
-S31A5000986FE5030051E10500000A242094E50500A0E116FFFFEB23
-S31A500098840130A0E30C3084E5090000EA181094E5000051E30553
-S31A5000989900000A282094E50500A0E10DFFFFEB0230A0E30C302C
-S31A500098AE84E5000000EA0C1084E50500A0E1003095E50610A091
-S31A500098C3E120C093E50020A0E30FE0A0E108F09CE570A81BE959
-S31A500098D80DC0A0E100D82DE90C009FE50C109FE504B04CE22DAA
-S31A500098ED0200EB00A81BE9800C0150840C01500DC0A0E1F0D8A3
-S31A500099022DE90050A0E1047095E5046097E52230A0E30030C67A
-S31A50009917E50720D6E504B04CE2FF4002E2000054E31600000AC2
-S31A5000992C0740C6E5303097E5000053E31400000A0A0014E302AB
-S31A5000994100000A0500A0E10410A0E1B3FFFFEB050014E30200FC
-S31A50009956000A0500A0E10410A0E13EFFFFEB300014E302000031
-S31A5000996B0A0500A0E10410A0E1D7FFFFEB0730D6E5FF4003E296
-S31A50009980000054E3E8FFFF1A000097E5730900EBF0A81BE90DB9
-S31A50009995C0A0E100D82DE9043090E5002093E504B04CE22000F5
-S31A500099AA92E500A81BE90DC0A0E130D82DE98C209FE58C309F38
-S31A500099BFE504B04CE2001092E50040A0E1005093E5000051E332
-S31A500099D40400001A0130A0E3003082E53500A0E30120A0E1F76E
-S31A500099E9F0FFEB0E33A0E3083084E5022CA0E30C2084E53E331D
-S31A500099FE83E2103084E50123A0E3142084E5033383E218308445
-S31A50009A13E58300A0E31C2084E53530A0E3203084E58010A0E3A4
-S31A50009A2854DDFFEB010515E30200001A0130A0E3043084E5301D
-S31A50009A3DA81BE90030A0E3043084E530A81BE9A48300000000BF
-S31A50009A5204900DC0A0E100D82DE924309FE5002093E504B04C69
-S31A50009A67E2010512E30200001A0130A0E3043080E500A81BE9A2
-S31A50009A7C0030A0E3043080E500A81BE9000004900DC0A0E100A5
-S31A50009A91D82DE9803260E0030180E0000180E014209FE500020B
-S31A50009AA6A0E1483092E504B04CE20FE0A0E103F0A0E100A81B5C
-S31A50009ABBE9500000000DC0A0E170D82DE9040051E304B04CE241
-S31A50009AD04CD04DE20040A0E12900001A045094E5010055E326B0
-S31A50009AE500001A8300A0E38110A0E322DDFFEB1E00A0E3E3FF76
-S31A50009AFAFFEB8300A0E30310A0E30230A0E3043084E50060A029
-S31A50009B0FE31ADDFFEB0500A0E1DBFFFFEB8300A0E30330A0E321
-S31A50009B24043084E50510A0E113DDFFEB0500A0E3D4FFFFEB0282
-S31A50009B390000EA0A00A0E3D1FFFFEB016086E2090056E30C0079
-S31A50009B4E00CA0400A0E12010A0E30030A0E360300BE560204BAC
-S31A50009B63E200208DE55C304BE258204BE2CF0700EB000050E3D1
-S31A50009B78EFFFFF0A0430A0E3043084E570A81BE90DC0A0E100CD
-S31A50009B8DD82DE93500A0E304B04CE286F0FFEB00A81BE90DC00C
-S31A50009BA2A0E100D82DE904B04CE202C0A0E100E0A0E103005C04
-S31A50009BB7E30200009A003081E1030013E30A00000A0C30A0E168
-S31A50009BCC01C04CE2000053E30500000A0C20A0E10130D1E40166
-S31A50009BE1C04CE20130CEE4000052E3F9FFFF1A00A81BE900E076
-S31A50009BF6A0E10F005CE30E00009A043091E404308EE404209189
-S31A50009C0BE404208EE4043091E404308EE4042091E410C04CE28E
-S31A50009C2004208EE40F005CE3F4FFFF8A020000EA043091E404E0
-S31A50009C35C04CE204308EE403005CE3FAFFFF8A0C30A0E101C0EE
-S31A50009C4A4CE2000053E30500000A0C20A0E10130D1E401C04C9C
-S31A50009C5FE20130CEE4000052E3F9FFFF1A00A81BE90DC0A0E195
-S31A50009C74F0DF2DE904B04CE250D04DE20170A0E178404BE20098
-S31A50009C89A0A0E3005050E20260A0E10380A0E10490A0E10300CC
-S31A50009C9E001A3030A0E378304BE577404BE2090000EA0500A00A
-S31A50009CB3E10610A0E1241700EB0030D8E70610A0E10130C4E449
-S31A50009CC80500A0E1C31500EB005050E2F5FFFF1A090054E10516
-S31A50009CDD00000A0920A0E1013074E501A08AE20130C7E40200F3
-S31A50009CF254E1FAFFFF1A0A00A0E10030A0E30030C7E5F0AF1BEC
-S31A50009D07E90DC0A0E1F0DF2DE904B04CE234D04DE24C200BE564
-S31A50009D1C0180A0E148204BE250200BE50060A0E30140D8E40005
-S31A50009D3170A0E158600BE5060054E1FE00000A250054E3ED00A2
-S31A50009D46001A0030A0E354300BE50140D8E40350A0E12D00541F
-S31A50009D5BE30200001A0120A0E354200BE50140D8E4300054E332
-S31A50009D700200001A0140D8E40190A0E3060000EA0390A0E10453
-S31A50009D850000EA053185E08330A0E1303043E2045083E001403D
-S31A50009D9AD8E4303044E2090053E3F7FFFF9A2E0054E3060000E3
-S31A50009DAF1A0140D8E4019089E2000000EA0140D8E4303044E2C9
-S31A50009DC4090053E3FBFFFF9A00A0A0E36C0054E30140D8045827
-S31A50009DD94044E2200054E304F19F97720000EA8C9E0050B49F0E
-S31A50009DEE0050B49F0050B49F0050B49F0050B49F0050B49F00DB
-S31A50009E0350B49F0050B49F0050B49F0050B49F0050909F005099
-S31A50009E188C9E0050B49F0050B49F0050B49F0050B49F0050B425
-S31A50009E2D9F0050B49F0050B49F0050B49F0050B49F0050B49FFC
-S31A50009E420050B49F00506C9E0050B49F0050B49F0050709F0013
-S31A50009E5750B49F0050B49F0050B49F0050B49F00508C9E00504A
-S31A50009E6C3000A0E30FE0A0E107F0A0E17800A0E30FE0A0E1077E
-S31A50009E81F0A0E10190A0E30850A0E34C301BE5040093E44C30A3
-S31A50009E960BE5200054E304F19F972F0000EA509F0050649F0094
-S31A50009EAB50649F0050649F0050649F0050649F0050649F00505D
-S31A50009EC0649F0050649F0050649F0050649F0050649F00502870
-S31A50009ED59F0050649F0050649F0050649F0050649F0050649FE4
-S31A50009EEA0050649F0050649F0050649F0050649F0050649F006E
-S31A50009EFF50649F0050449F0050649F0050649F0050649F005029
-S31A50009F14649F0050649F0050649F0050649F0050449F00500063
-S31A50009F290050E32DA0A0B3000060B248104BE2B4319FE50A2050
-S31A50009F3EA0E3050000EA48104BE2A8319FE5010000EA48104BD6
-S31A50009F53E2A0319FE51020A0E343FFFFEB58000BE548204BE2B0
-S31A50009F6850200BE5140000EA4C301BE5042093E450200BE54C6D
-S31A50009F7D300BE50200A0E19C0000EB58000BE50C0000EA4C3095
-S31A50009F921BE5043083E24C300BE5016086E2040053E501908841
-S31A50009FA7E20FE0A0E107F0A0E15D0000EA3F00A0E30FE0A0E10C
-S31A50009FBC07F0A0E1016086E258201BE5055062E000005AE301AC
-S31A50009FD1504512000059E30800000A3040A0E300005AE30600FA
-S31A50009FE6000A0A00A0E10FE0A0E107F0A0E1016086E200A0A08A
-S31A50009FFBE3000000EA2040A0E358201BE5019088E254301BE554
-S31A5000A010012042E25C200BE5000053E30800001A030000EA04EB
-S31A5000A02500A0E10FE0A0E107F0A0E1016086E20530A0E1015097
-S31A5000A03A45E2000053E3F7FFFFCA00005AE30300000A0A00A0AB
-S31A5000A04FE10FE0A0E107F0A0E1016086E25C201BE558301BE510
-S31A5000A0640F0000EA50301BE50140D3E4016086E250300BE504E3
-S31A5000A07900A0E10FE0A0E107F0A0E10A0054E30300001A0D00A8
-S31A5000A08EA0E30FE0A0E107F0A0E1016086E258301BE50320A0E8
-S31A5000A0A3E1012042E258200BE5000053E3ECFFFFCA54301BE556
-S31A5000A0B8000053E31A00000A0530A0E1015045E2000053E31669
-S31A5000A0CD0000DA2000A0E30FE0A0E107F0A0E1016086E20530C5
-S31A5000A0E2A0E1015045E2000053E3F7FFFFCA0D0000EA940C018D
-S31A5000A0F750A00C0150B40C01500400A0E10FE0A0E107F0A0E133
-S31A5000A10C016086E20A0054E3019088E20300001A0D00A0E30F27
-S31A5000A121E0A0E107F0A0E1016086E20040D8E50980A0E100002A
-S31A5000A13654E300FFFF1A0600A0E1F0AF1BE90DC0A0E100D82DF2
-S31A5000A14BE918309FE5002093E50100C2E40010A0E3002083E59A
-S31A5000A16004B04CE20010C2E500A81BE96CB600000DC0A0E10ED1
-S31A5000A175002DE900D82DE918309FE5000083E510B04CE2041045
-S31A5000A18A9BE50C009FE508208BE2DBFEFFEB010000EA6CB600F5
-S31A5000A19F0044A1005000A81BE90DC0A0E10F002DE900D82DE913
-S31A5000A1B410009FE514B04CE204109BE508208BE2CFFEFFEB00DA
-S31A5000A1C90000EA48A4005000A81BE90DC0A0E100D82DE90030ED
-S31A5000A1DEA0E10120A0E10310A0E108009FE504B04CE2C4FEFF30
-S31A5000A1F3EB00A81BE948A400500DC0A0E100D82DE90020A0E34F
-S31A5000A2080130D0E404B04CE2020053E10300000A0130D0E401FB
-S31A5000A21D2082E2000053E3FBFFFF1A0200A0E100A81BE90DC00D
-S31A5000A232A0E100D82DE90130D1E40020A0E10100D2E404B04C14
-S31A5000A247E2030050E10500001A000050E30400000A0100D2E47F
-S31A5000A25C0130D1E4030050E1F9FFFF0A000063E000A81BE90D80
-S31A5000A271C0A0E100D82DE90130D1E4000053E304B04CE2030052
-S31A5000A286000A0130C0E40130D1E4000053E3FBFFFF1A0030A08F
-S31A5000A29BE30030C0E500A81BE90DC0A0E100D82DE900E0A0E157
-S31A5000A2B00120DEE404B04CE2020000EA000050E30F00000A0145
-S31A5000A2C520DEE401C0D1E4200082E2FF0000E2413042E21900C3
-S31A5000A2DA53E30200A08120308CE2FF2003E241304CE2190053F3
-S31A5000A2EFE30C30A0810230A091030050E1EEFFFF0A000063E0F4
-S31A5000A30400A81BE90DC0A0E100D82DE9000052E304B04CE200EF
-S31A5000A319C0A0E10300001A0200A0E100A81BE9000063E000A861
-S31A5000A32E1BE90100DCE40130D1E4030050E1F9FFFF1A00005084
-S31A5000A343E30100000A012052E2F7FFFF1A0000A0E300A81BE92E
-S31A5000A3580DC0A0E110D82DE9000052E304B04CE20040A0E10571
-S31A5000A36D00001A0200A0E110A81BE9000063E010A81BE901200C
-S31A5000A38252E21000000A01C0D4E401E0D1E420008CE2FF000086
-S31A5000A397E241304CE2190053E30C00A08120308EE2FFC003E2FA
-S31A5000A3AC41304EE2190053E30E30A0810C30A091030050E1EC6A
-S31A5000A3C1FFFF1A000050E3ECFFFF1A0000A0E310A81BE90DC0D6
-S31A5000A3D6A0E100D82DE904B04CE202C0A0E1070000EA0120D0A6
-S31A5000A3EBE40130D1E4030052E10300000A013050E5010051E55D
-S31A5000A400030060E000A81BE90C30A0E101C04CE2000053E3F32D
-S31A5000A415FFFFCA0000A0E300A81BE90DC0A0E100D82DE9012088
-S31A5000A42A52E2FF1001E204B04CE20200004A0110C0E40120524B
-S31A5000A43FE2FCFFFF5A00A81BE90DC0A0E1F0D92DE9BC309FE533
-S31A5000A45404B04CE2004093E5FF6000E2000054E31900001AA8B0
-S31A5000A469309FE50000E0E30380A0E1342093E50850A0E10FE079
-S31A5000A47EA0E102F0A0E10070A0E1343095E50400A0E10FE0A09C
-S31A5000A493E103F0A0E1143095E5000093E5014084E20C3093E578
-S31A5000A4A80610A0E10FE0A0E103F0A0E1000054E3F2FFFFDA3499
-S31A5000A4BD3098E50700A0E10FE0A0E103F0A0E1F0A91BE940201E
-S31A5000A4D29FE5143092E5000053E30500000A000093E50C309354
-S31A5000A4E7E50610A0E10FE0A0E103F0A0E1F0A91BE9183092E54E
-S31A5000A4FC000093E50C3093E50610A0E10FE0A0E103F0A0E1F05E
-S31A5000A511A91BE9F0410100500000000DC0A0E110D82DE9302014
-S31A5000A5269FE504B04CE2143092E50040A0E1000053E3050000AD
-S31A5000A53B0A000093E5103093E50FE0A0E103F0A0E10000C4E5EE
-S31A5000A55010A81BE9183092E5F7FFFFEA500000000DC0A0E1F0B8
-S31A5000A565DF2DE9E0309FE504B04CE20060A0E1004093E50390F4
-S31A5000A57AA0E1000054E31C00001A0000E0E3C4309FE50450A059
-S31A5000A58FE10380A0E1342093E50870A0E10FE0A0E102F0A0E1D4
-S31A5000A5A400A0A0E1343097E50500A0E10FE0A0E103F0A0E114CD
-S31A5000A5B93097E5000093E51C3093E50610A0E10FE0A0E103F055
-S31A5000A5CEA0E1004050E20C00001A015085E2000055E3F0FFFF2B
-S31A5000A5E3DA343098E50A00A0E10FE0A0E103F0A0E1130000EAE6
-S31A5000A5F854209FE5143092E5000053E30800000A080000EA010A
-S31A5000A60D30A0E3003089E5302098E50500A0E10FE0A0E102F0DC
-S31A5000A622A0E10400A0E1F0AF1BE9183092E5000093E51C30930E
-S31A5000A637E50610A0E10FE0A0E103F0A0E10040A0E10400A0E112
-S31A5000A64CF0AF1BE9F0410100500000000DC0A0E1F0D92DE9D879
-S31A5000A661309FE504B04CE2004093E50060A0E1000054E31C000C
-S31A5000A676001AC4309FE50000E0E30380A0E1342093E50850A05C
-S31A5000A68BE10FE0A0E102F0A0E10070A0E1343095E50400A0E14C
-S31A5000A6A00FE0A0E103F0A0E114C095E500005CE30500000A00CF
-S31A5000A6B5009CE50710A0E314309CE50620A0E10FE0A0E103F050
-S31A5000A6CAA0E1014084E2000054E3EFFFFFDA343098E50700A077
-S31A5000A6DFE10FE0A0E103F0A0E10A0000EA50309FE514C093E507
-S31A5000A6F40380A0E100005CE30500000A00009CE50710A0E3147A
-S31A5000A709309CE50620A0E10FE0A0E103F0A0E118C098E5000054
-S31A5000A71E5CE30500000A00009CE50710A0E314309CE50620A0DC
-S31A5000A733E10FE0A0E103F0A0E1F0A91BE9F041010050000000D7
-S31A5000A7480DC0A0E1F0DD2DE904B04CE204D04DE20250A0E100BD
-S31A5000A75D60A0E10640A0E10070A0E3B4819FE5002098E50000A0
-S31A5000A77252E30600000A0030D2E5000053E30300000A0130D20A
-S31A5000A787E425304BE5002088E5160000EA060054E10030A01353
-S31A5000A79C0130A003000055E30030A0D3000053E30D00000A3224
-S31A5000A7B100A0E3A7FFFFEB000000EA325045E2000055E303005C
-S31A5000A7C600DA25004BE263FFFFEB007050E2F8FFFF0A000057B7
-S31A5000A7DBE30300001A0000E0E3510000EA25004BE24AFFFFEB90
-S31A5000A7F025205BE50030A0E30D0052E30030C4E50200A0E11B0D
-S31A5000A80500000A080000CA080050E32C00000A020000CA0300CC
-S31A5000A81A50E30C00000A380000EA0A0050E31200000A350000DA
-S31A5000A82FEA2B0050E32E00000A020000CA240050E32B00000AE6
-S31A5000A8442F0000EA7F0050E31D00000A2C0000EA060054E10363
-S31A5000A85900001AC4009FE550FEFFEB0100E0E3300000EA01001B
-S31A5000A86EC4E4B4A09FE5270000EA25205BE5A8A09FE50A005241
-S31A5000A883E30200001A0030DAE50D0053E32000000A0D0052E3CD
-S31A5000A8980200001A0030DAE50A0053E31B00000A0D00A0E3E570
-S31A5000A8ADFEFFEB0A00A0E3E3FEFFEB25305BE50030CAE501008B
-S31A5000A8C2A0E3190000EA5CA09FE5060054E11000000A0800A028
-S31A5000A8D7E3DAFEFFEB2000A0E3D8FEFFEB0800A0E3D6FEFFEBC5
-S31A5000A8EC014044E2080000EA060054E10200001A33DFFFEB0055
-S31A5000A90100A0E3090000EACEFEFFEB25305BE514A09FE50130C1
-S31A5000A916C4E425305BE50030CAE591FFFFEA94420100C80C0195
-S31A5000A92B50A8830000F0AD1BE90DC0A0E1F0DF2DE904B04CE290
-S31A5000A9400060A0E1060051E1067041800170A091000057E3027E
-S31A5000A95590A0E13B0000DA000059E30300000AE4009FE50610AA
-S31A5000A96A69E00DFEFFEB020000EAD4009FE50610A0E109FEFF63
-S31A5000A97FEB0050A0E3108047E210A086E2070055E1030000AAF4
-S31A5000A994B8009FE50510D6E701FEFFEB010000EAAC009FE5FE48
-S31A5000A9A9FDFFEBC54FA0E1053064E00130C3E3053063E00100FE
-S31A5000A9BE53E30100001A90009FE5F6FDFFEBA43EA0E1033085D1
-S31A5000A9D3E00730C3E3053063E0070053E30100001A70009FE598
-S31A5000A9E8EEFDFFEB015085E20F0055E3E4FFFFDA60009FE5E9A7
-S31A5000A9FDFDFFEB0050A0E3070055E1040000AA0510D6E7203028
-S31A5000AA1241E25E0053E32E10A083000000EA2010A0E338009F4D
-S31A5000AA27E5DEFDFFEB015085E20F0055E3F2FFFFDA28009FE5A5
-S31A5000AA3CD9FDFFEB0A60A0E1007058E2C3FFFFCAF0AF1BE9CC60
-S31A5000AA510C0150D80C0150E00C0150E40C0150E80C0150EC0C4D
-S31A5000AA660150F00C01500DC0A0E100D82DE90020A0E304B04C08
-S31A5000AA7BE2ACFFFFEB00A81BE90DC0A0E10F002DE930D82DE9BC
-S31A5000AA9014B04CE208D04DE248409FE504009BE5005094E50801
-S31A5000AAA5108BE2C9FDFFEB38009FE5BCFDFFEB1C004BE2002051
-S31A5000AABAA0E3002084E50810A0E31FFFFFEB1C305BE55900534A
-S31A5000AACFE30000A0130100A003790053E30100A003005084E5D6
-S31A5000AAE4010000EA94420100F40C015030A81BE90DC0A0E1F0DA
-S31A5000AAF9DF2DE904B04CE20050A0E10170A0E14C419FE50260E5
-S31A5000AB0EA0E12CC014E503A0A0E100005CE30300000A0A30A02C
-S31A5000AB23E300308AE50000E0E3F0AF1BE90100A0E3710C00EBF3
-S31A5000AB380000C4E52004A0E10100C4E50500A0E10030D0E5024D
-S31A5000AB4D2084E2000053E30300000A0130C2E40130F0E50000F7
-S31A5000AB6253E3FBFFFF1A0030A0E30130C2E4030056E1E4009FF8
-S31A5000AB77050200000A010056E3E6FFFF1AD8009FE50030D0E5E9
-S31A5000AB8CD4809FE5D4609FE5000053E30300000A0130C2E401B3
-S31A5000ABA130F0E5000053E3FBFFFF1A0840A0E10400A0E100505D
-S31A5000ABB6A0E30050C2E50510A0E10C20A0E315FEFFEB144044E0
-S31A5000ABCBE20190A0E3BA91C4E10500A0E13D0C00EB140084E502
-S31A5000ABE0003096E5B000D6E1093083E0003086E5420C00EBB8D0
-S31A5000ABF501C4E1B430D7E1050053E10200001A4500A0E33C0C4E
-S31A5000AC0A00EBB400C7E1180088E20720A0E150109FE50830A0B2
-S31A5000AC1FE11F0A00EB000050E3070000BA149008E50C5084E58B
-S31A5000AC340030E0E3103084E5085084E5045084E50500A0E1F025
-S31A5000AC49AF1BE90000E0E30930A0E300308AE5F0AF1BE99CB6DA
-S31A5000AC5E00000C0D0150180D015084B60000B083000005020037
-S31A5000AC73000DC0A0E100D82DE90000A0E308309FE504B04CE219
-S31A5000AC88000083E500A81BE970B600000DC0A0E1F0DF2DE904F0
-S31A5000AC9DB04CE218D04DE234000BE50030A0E33C300BE53810DC
-S31A5000ACB20BE50280A0E10C629FE5010053E1870000AA2C50462A
-S31A5000ACC7E20C3095E5000053E3150000DA34001BE538C01BE539
-S31A5000ACDC3C201BE5341295E50C4062E0040053E10340A0B10493
-S31A5000ACF120A0E1A9FBFFEB34C01BE5343295E504C08CE034C0D1
-S31A5000AD060BE50C2095E5043083E0343285E5022064E00C2085CE
-S31A5000AD1BE53C101BE5041081E03C100BE5690000EA103095E5DE
-S31A5000AD30020C53E36A00003A0530A0E388019FE50020A0E33038
-S31A5000AD45300BE5209085E22C200BE514A085E274119FE53030AC
-S31A5000AD5A4BE200308DE50920A0E10A30A0E1140A00EB004050C1
-S31A5000AD6FE20470A0E31C0000AA043095E5013083E2043085E5F8
-S31A5000AD84050053E3020000CA083095E5000053E30100001A0852
-S31A5000AD9930A0E3470000EA0700A0E1D50B00EB0000C6E5200449
-S31A5000ADAEA0E10100C6E5B800D5E1D00B00EB0200C6E50710A075
-S31A5000ADC3E12004A0E10300C6E50920A0E1F4009FE50A30A0E114
-S31A5000ADD8B10900EB000050E33B0000AA0930A0E3340000EA0079
-S31A5000ADED30D6E50100D6E5000483E1C00B00EB030050E32000E0
-S31A5000AE02001A0230D6E50300D6E5000483E1BA0B00EB0830953B
-S31A5000AE17E5013083E2030050E10500001A044044E2104085E5DE
-S31A5000AE2C0C4085E5043086E2343285E5080085E50700A0E1AEF1
-S31A5000AE410B00EB0000C6E52004A0E10100C6E5B800D5E1A90B92
-S31A5000AE5600EB0200C6E50710A0E12004A0E10300C6E50920A045
-S31A5000AE6BE158009FE50A30A0E18A0900EB000050E3140000AA95
-S31A5000AE800930A0E30D0000EA0030D6E50100D6E5000483E1990C
-S31A5000AE950B00EB050050E30600001A0230D6E50300D6E5000455
-S31A5000AEAA83E1930B00EB000088E50000E0E30A0000EA0B30A051
-S31A5000AEBFE3003088E50000E0E3060000EA9CB60000050200009C
-S31A5000AED43C201BE538301BE5030052E178FFFFBA3C001BE5F0BD
-S31A5000AEE9AF1BE90DC0A0E100D82DE9010040E204B04CE20B00FF
-S31A5000AEFE50E300F19F97230000EA38AF005040AF005048AF0015
-S31A5000AF135050AF005058AF005060AF005068AF005070AF0050A8
-S31A5000AF2878AF005080AF005088AF005090AF005060009FE500CE
-S31A5000AF3DA81BE95C009FE500A81BE958009FE500A81BE9540095
-S31A5000AF529FE500A81BE950009FE500A81BE94C009FE500A81B51
-S31A5000AF67E948009FE500A81BE944009FE500A81BE940009FE5E6
-S31A5000AF7C00A81BE93C009FE500A81BE938009FE500A81BE934B6
-S31A5000AF91009FE500A81BE930009FE500A81BE9300D0150400DEA
-S31A5000AFA60150540D0150780D0150900D0150A40D0150B80D01B1
-S31A5000AFBB50C80D0150DC0D0150F80D01500C0E0150200E01503B
-S31A5000AFD0200D01500DC0A0E170D82DE9AC309FE504B04CE201A9
-S31A5000AFE560A0E1004093E50350A0E1000054E31800001AD50D49
-S31A5000AFFA00EB90009FE5043090E5050053E30500001AB831D031
-S31A5000B00FE1000053E30000001AFD0D00EB0400A0E170A81BE90F
-S31A5000B024000053E30400001A2D0100EB0A30A0E30030C6E501BB
-S31A5000B03900A0E370A81BE950409FE58020A0E30410A0E10F0E24
-S31A5000B04E00EB44309FE5000085E5004083E5000095E5000050D8
-S31A5000B063E30800000A2CC09FE500109CE50130D1E40030C6E5CB
-S31A5000B078002095E50100A0E300108CE5012042E2002085E5708F
-S31A5000B08DA81BE9B8830000B4B8000008BF000088BF00000DC02A
-S31A5000B0A2A0E170D82DE904B04CE204D04DE26440A0E30060A058
-S31A5000B0B7E119504BE2090000EA014054E20200001A0F0000EB37
-S31A5000B0CC6440A0E3040000EA28309FE5482093E56400A0E30F52
-S31A5000B0E1E0A0E102F0A0E10600A0E10510A0E1B7FFFFEB000073
-S31A5000B0F650E3F0FFFF0A19005BE5000000EA5000000070A81BFE
-S31A5000B10BE90DC0A0E1F0DD2DE99C709FE504B04CE20760A0E165
-S31A5000B12094509FE594A09FE594809FE50A0000EA0400A0E10093
-S31A5000B1352095E50610A0E10F0E00EB000050E3030000DA003036
-S31A5000B14A95E5006086E0033060E0003085E57D0D00EB00309513
-S31A5000B15FE5000053E30900000A58409FE5043094E5050053E353
-S31A5000B1740100001A0400A0E1A40D00EB043094E5000053E3E869
-S31A5000B189FFFF1AD50000EB00708AE5443098E50040A0E30040B0
-S31A5000B19E85E5040053E10200000A0400A0E172E4FFEB444088C7
-S31A5000B1B3E5F0AD1BE98CBF0000BC8300008CC000005000000085
-S31A5000B1C8B4B800000DC0A0E110D82DE9A8209FE5A8409FE500AC
-S31A5000B1DD3092E5FF1001E20110C3E4240051E3003082E504B013
-S31A5000B1F24CE20130A00300308405002094E5230051E30030A077
-S31A5000B207130130A003000052E30030A003000053E30500000AA8
-S31A5000B21C68209FE50130A0E3003082E560109FE5013043E20026
-S31A5000B2313081E558209FE5003092E5013083E2003082E5010C3F
-S31A5000B24653E30900000A38309FE5002093E5000052E308000093
-S31A5000B25B0A2C209FE5003092E5013083E2003082E5030053E3A1
-S31A5000B2700200001AA4FFFFEB0030A0E3003084E510A81BE98C36
-S31A5000B285C00000A8B80000ACB80000B0B80000BC8300000DC066
-S31A5000B29AA0E110D82DE904B04CE2760000EB0040A0E114009F13
-S31A5000B2AFE514109FE5EE20A0E3BAFBFFEB0400A0E17F0000EB88
-S31A5000B2C410A81BE9FC0E0150040F01500DC0A0E110D82DE90454
-S31A5000B2D9B04CE2680000EB0040A0E114009FE514109FE5012CAB
-S31A5000B2EEA0E3ACFBFFEB0400A0E1710000EB10A81BE9FC0E0139
-S31A5000B30350140F01500DC0A0E1F0D82DE904B04CE20060A0E12C
-S31A5000B3180150A0E17AFFFFEB44209FE5003092E540709FE503CF
-S31A5000B32D3183E08340A0E1030000EA483097E56400A0E30FE026
-S31A5000B342A0E103F0A0E10600A0E10510A0E11FFFFFEB00005036
-S31A5000B357E30200001A014044E2010074E3F3FFFF1AF0A81BE926
-S31A5000B36CB4830000500000000DC0A0E10E002DE930D82DE9104F
-S31A5000B381B04CE204309BE50050A0E3043043E2030053E303F176
-S31A5000B3969F97200000EADCB30050ACB30050FCB3005010B400BB
-S31A5000B3AB5054409FE554309FE5001094E50120A0E3002083E512
-S31A5000B3C0000051E30100001A830500EB000084E5000094E5B3CB
-S31A5000B3D5D5FFEB100000EA28309FE520209FE5005093E50000EC
-S31A5000B3EA92E50010A0E3001083E59FD5FFEB080000EA04309F53
-S31A5000B3FFE5005093E5050000EAC0830000C483000010209FE509
-S31A5000B41408309BE5005092E5003082E50500A0E1000000EAB493
-S31A5000B42983000030A81BE90DC0A0E130D82DE904B04CE204D037
-S31A5000B43E4DE20040A0E10200A0E10150A0E159EAFFEB0400A08D
-S31A5000B453E10030A0E3003085E515104BE2DBFEFFEB000050E318
-S31A5000B4680300000A15305BE5030053E30130A00300308505011F
-S31A5000B47D00A0E330A81BE90DC0A0E130D82DE92C409FE50000A9
-S31A5000B492E0E3343094E504B04CE20FE0A0E103F0A0E10050A0F9
-S31A5000B4A7E1343094E50000A0E30FE0A0E103F0A0E10500A0E18F
-S31A5000B4BC30A81BE9500000000DC0A0E100D82DE910309FE534C5
-S31A5000B4D12093E504B04CE20FE0A0E102F0A0E100A81BE95000B7
-S31A5000B4E600000DC0A0E110D82DE938109FE538209FE50030A037
-S31A5000B4FBE3003081E530409FE5000092E5343094E504B04CE243
-S31A5000B5100FE0A0E103F0A0E11C209FE5303094E5000092E50FCD
-S31A5000B525E0A0E103F0A0E110A81BE9F041010000BF00005000E9
-S31A5000B53A000004BF00000DC0A0E170D82DE964309FE50150A02E
-S31A5000B54FE3005083E504B04CE258409FE50060E0E3342094E508
-S31A5000B5640600A0E10FE0A0E102F0A0E144309FE5000083E5347E
-S31A5000B5792094E50500A0E10FE0A0E102F0A0E1301094E50600A6
-S31A5000B58EA0E10FE0A0E101F0A0E120309FE5000083E5302094CF
-S31A5000B5A3E50500A0E10FE0A0E102F0A0E170A81BE9F0410100A1
-S31A5000B5B85000000000BF000004BF00000DC0A0E170D82DE9ACFE
-S31A5000B5CD609FE5003096E504B04CE2000053E31E00001A9C4058
-S31A5000B5E29FE5343094E50000E0E30FE0A0E103F0A0E10050A006
-S31A5000B5F7E1343094E50100A0E30FE0A0E103F0A0E1141094E526
-S31A5000B60C74309FE574209FE5043081E570309FE5082081E50C3B
-S31A5000B6213081E568209FE568309FE5102081E5143081E5602040
-S31A5000B6369FE560309FE5182081E51C3081E5342094E50500A04F
-S31A5000B64BE10FE0A0E102F0A0E10130A0E3003086E540309FE58D
-S31A5000B66040409FE5B010D3E10400A0E13E0C00EB34209FE50471
-S31A5000B6753094E5003082E570A81BE9C88300005000000098B229
-S31A5000B68A0050D0B20050CCB10050A0B0005074B3005030B4006B
-S31A5000B69F5008B3005080420100B4B80000FCBE00000DC0A0E1AE
-S31A5000B6B430D82DE904B04CE2240C00EB78309FE578109FE500D8
-S31A5000B6C92093E50350A0E1040091E50140A0E1000052E1140027
-S31A5000B6DE000A040050E30E00001A94FFFFEB54309FE554009F20
-S31A5000B6F3E5000083E550109FE50130A0E3003081E548109FE595
-S31A5000B70848309FE50D20A0E30020C0E5003081E53C209FE500EF
-S31A5000B71D30A0E3003082E5043094E5000053E30000001AA3FFD8
-S31A5000B732FFEB043094E5003085E530A81BE9FCBE0000B4B80079
-S31A5000B7470088BF000008BF0000B88300008CC000008CBF0000B7
-S31A5000B75CBC8300000DC0A0E1F0D92DE968319FE5001093E5046D
-S31A5000B771B04CE2000051E30900001A58019FE558219FE501302D
-S31A5000B786A0E3003080E5001082E54C319FE54C119FE500308136
-S31A5000B79BE50080A0E1150000EA40019FE530119FE50120A0E330
-S31A5000B7B071F5FFEB34019FE528119FE50220A0E314419FE56C7E
-S31A5000B7C5F5FFEB0410A0E120019FE50120A0E368F5FFEB1801FC
-S31A5000B7DA9FE518119FE50520A0E364F5FFEB10019FE50480A02F
-S31A5000B7EFE10C119FE50520A0E35FF5FFEB04419FE50030A0E30B
-S31A5000B804003084E5FC509FE5110300EB480800EBF4309FE5048A
-S31A5000B81960A0E1030055E10370A0E10900000A0140A0E30500DA
-S31A5000B82EA0E10FE0A0E104F095E5000050E30C4085150C0085A6
-S31A5000B84305105085E2070055E1F6FFFF1ABC309FE5002093E57B
-S31A5000B858000052E30200001AB0009FE54FFAFFEBF0A91BE90030
-S31A5000B86D3098E5000053E30600000A9C009FE5C80500EB0000A5
-S31A5000B88250E30200000A90009FE545FAFFEB010000EA0130A023
-S31A5000B897E3003086E5003096E5000053E30A00000A4C009FE503
-S31A5000B8AC6C0000EB0010A0E168009FE53AFAFFEB40009FE56714
-S31A5000B8C10000EB0010A0E158009FE535FAFFEB3BFFFFEBF0A9EE
-S31A5000B8D61BE984420100FC410100384401002823000080420173
-S31A5000B8EB00780E0150500E0150A80E0150C40E0150D8830000E7
-S31A5000B900EC0E0150B4420100CC4301009C850000AC8500003CFC
-S31A5000B915440100200F0150A0420100400F01506C0F0150740F30
-S31A5000B92A01500DC0A0E1F0DF2DE904B04CE20040A0E10190A05A
-S31A5000B93FE100A0A0E30A80A0E10160A0E30070A0E301C0D4E43E
-S31A5000B9540A50A0E307005CE13500000A30005CE30030A01301D5
-S31A5000B96930A003030016E10A00000A0030D4E5411043E22020F3
-S31A5000B97E83E2FF2002E2190051E30230A091780053E302000096
-S31A5000B9931A1050A0E3014084E201C0D4E400E0A0E30E60A0E1DA
-S31A5000B9A830104CE2FF0001E241204CE2FF3002E2050053E309FE
-S31A5000B9BD0050830200009A61304CE2050053E30000008A01E04B
-S31A5000B9D2A0E300005EE31200000A0000A0E3FF3001E209005339
-S31A5000B9E7E30100A0910600009A61304CE2050053E357004C9211
-S31A5000B9FC0200009AFF3002E2050053E337004C92050050E104A7
-S31A5000BA110000AA01C0D4E4950727E000005CE3CEFFFF1A0300DC
-S31A5000BA2600EA2E005CE30100000A0000A0E3F0AF1BE903306892
-S31A5000BA3BE28331A0E117A38AE1018088E2030058E3BDFFFFDAA6
-S31A5000BA500A00A0E19E0800EB000089E50100A0E3F0AF1BE90DCD
-S31A5000BA65C0A0E110D82DE90010A0E108D04DE20230D1E528404F
-S31A5000BA7A9FE500308DE50320D1E504208DE50020D1E50130D1F4
-S31A5000BA8FE504B04CE210109FE50400A0E1B3F9FFEB0400A0E141
-S31A5000BAA4010000EA90C000008C0F015010A81BE90DC0A0E1F016
-S31A5000BAB9D82DE904B04CE200E0A0E108C09EE5FF1001E2046050
-S31A5000BACE9BE50250A0E1000096E50370A0E108208EE21400920D
-S31A5000BAE3E8044082E000C08CE0140000EA010052E10E00001AE4
-S31A5000BAF80230DCE508009EE502E093E20500000A0E10A0E10060
-S31A5000BB0D30DCE5011051E20130C5E402C08CE2FAFFFF1A00E09C
-S31A5000BB2287E50C3060E0003086E50100A0E3F0A81BE90230DC07
-S31A5000BB37E58330A0E1043083E203C08CE004005CE10300002A54
-S31A5000BB4C0020DCE5FF3002E2FF0053E3E4FFFF1A0000A0E3F0F6
-S31A5000BB61A81BE90DC0A0E100D82DE9083090E5FF2002E20120C0
-S31A5000BB76C3E704B04CE200A81BE90DC0A0E100D82DE90610A03A
-S31A5000BB8BE3002090E504B04CE201C0D2E45C31A0E1010013E379
-S31A5000BBA00100000A0130D2E4A32382E0011051E2F8FFFF5A008C
-S31A5000BBB52080E500A81BE90DC0A0E100D82DE9002090E50130F2
-S31A5000BBCAD2E404B04CE21C1003E21C0051E3012082120330032C
-S31A5000BBDFE2030053E301208212002080E500A81BE90DC0A0E1AC
-S31A5000BBF4F0DF2DE904B04CE20040A0E30090A0E100C099E50409
-S31A5000BC0960A0E10120DCE401E0A0E1603002E2A332A0E144306E
-S31A5000BC1ECEE5800012E34100000A0120DCE40470A0E10F300231
-S31A5000BC33E2013083E240308EE5030057E13A0000AA303002E2E8
-S31A5000BC4823A2A0E12283A0E10750A0E103005AE30AF19F9713C9
-S31A5000BC5D0000EAB0BC005070BC005078BC00508CBC00500160DD
-S31A5000BC72DCE40D0000EA0120DCE50030DCE5026483E102C08CC5
-S31A5000BC87E2080000EA0300DCE50020DCE50230DCE50110DCE514
-S31A5000BC9C002C82E10338A0E1013483E1036082E104C08CE20E53
-S31A5000BCB16085E7030058E308F19F97130000EA10BD0050D0BC49
-S31A5000BCC60050D8BC0050ECBC00500140DCE40D0000EA0120DCF2
-S31A5000BCDBE50030DCE5024483E102C08CE2080000EA0300DCE598
-S31A5000BCF00020DCE50230DCE50110DCE5002C82E10338A0E101F7
-S31A5000BD053483E1034082E104C08CE2014084E220308EE20540B7
-S31A5000BD1A83E7017087E240309EE5045085E2030057E1C8FFFFCB
-S31A5000BD2FBA00C089E5F0AF1BE90DC0A0E130D82DE904B04CE2D0
-S31A5000BD4404D04DE200C0A0E118000BE50C10A0E10130D1E402C3
-S31A5000BD5950A0E1FF3003E218100BE51B0053E30800000A18C047
-S31A5000BD6E0BE510009FE510109FE50020DCE560E3FFEB0000A094
-S31A5000BD83E3240000EA980F0150BC0F0150010081E218000BE5E4
-S31A5000BD980120D1E5011080E218100BE53F3002E20030C5E58031
-S31A5000BDAD0012E30300000A0130D0E50130C5E5012081E21820AC
-S31A5000BDC20BE518301BE50140D3E40240C5E518300BE5010014AD
-S31A5000BDD7E30100000A18004BE266FFFFEB020014E30100000A7B
-S31A5000BDEC18004BE262FFFFEB040014E30100000A18004BE26DA4
-S31A5000BE01FFFFEB080014E30200000A18004BE2041085E275FFAE
-S31A5000BE16FFEB0100A0E330A81BE90DC0A0E100D82DE904B04C3B
-S31A5000BE2BE200C0A0E10130DCE402E0A0E11A0053E30500000AD6
-S31A5000BE4090009FE590109FE501205CE52CE3FFEB0000A0E30081
-S31A5000BE55A81BE901C08CE20100DCE40030A0E301C08CE20030D4
-S31A5000BE6A8EE5031010E20500004A0320A0E10130DCE702248365
-S31A5000BE7FE1011051E2FBFFFF5A00208EE5033000E2013083E2A2
-S31A5000BE9403C08CE00010A0E33C3000E22331A0E1013083E204C4
-S31A5000BEA9308EE5030051E1060000AA08008EE20130DCE401300C
-S31A5000BEBEC0E704209EE5011081E2020051E1F9FFFFBA0100A0D1
-S31A5000BED3E300A81BE9980F0150D00F01500DC0A0E100D82DE911
-S31A5000BEE8001050E204B04CE20300000A10009FE501E3FFEB005C
-S31A5000BEFD00A0E300A81BE904009FE500A81BE9E00F0150B0C0C7
-S31A5000BF1200000DC0A0E130D82DE904B04CE20050A0E31C409FA8
-S31A5000BF27E5005084E50400A0E19EF6FFEB2C4084E2015085E284
-S31A5000BF3C000055E3F8FFFFDA30A81BE9B0C000000DC0A0E100F8
-S31A5000BF51D82DE904B04CE2D8F6FFEB00A81BE90DC0A0E100D82B
-S31A5000BF662DE904B04CE205F7FFEB00A81BE90DC0A0E110D82D83
-S31A5000BF7BE940409FE51C3094E504B04CE2000053E30100000A86
-S31A5000BF900000A0E310A81BE9030084E8980200EB000050E305DB
-S31A5000BFA500001A083094E50120A0E31C2084E5003063E2103068
-S31A5000BFBA84E510A81BE910A81BE9104401000DC0A0E100D82D93
-S31A5000BFCFE93C209FE50010A0E11C3092E504B04CE2000053E3D2
-S31A5000BFE40100001A0700A0E300A81BE9143092E5030051E103AE
-S31A5000BFF900003A183092E50000A0E3030051E10000003A0100F1
-S31A5000C00EA0E300A81BE9104401000DC0A0E100D82DE930009F38
-S31A5000C023E504B04CE21C3090E502C0A0E1000053E30500000AA2
-S31A5000C038143090E5003081E5182090E500208CE50000A0E3008D
-S31A5000C04DA81BE90700A0E300A81BE9104401000DC0A0E100D82B
-S31A5000C0622DE92C209FE51C3092E504B04CE2000053E3050000AD
-S31A5000C0770A083092E5003080E50C2092E5002081E50000A0E364
-S31A5000C08C00A81BE90700A0E300A81BE9104401000DC0A0E1F0D4
-S31A5000C0A1DF2DE904B04CE200A0A0E30050A0E10180A0E108C19E
-S31A5000C0B69FE50290A0E11C309CE50C70A0E10A0053E10100007F
-S31A5000C0CB1A0700A0E3F0AF1BE9006097E5E8109FE5E8209FE5DF
-S31A5000C0E00600A0E1022061E0ACF6FFEB0E02A0E3021A80E2204E
-S31A5000C0F52090E4000031E1FCFFFF1A160F07EE9A0F07EE00006E
-S31A5000C10AA0E10000A0E10000A0E10000A0E10000A0E10000A0A5
-S31A5000C11FE1101F11EE011AC1E3101F01EE151F07EE0000A0E11F
-S31A5000C1340000A0E10000A0E10000A0E10000A0E10000A0E1100B
-S31A5000C1493097E5034005E00410A0E1085085E070009FE505204C
-S31A5000C15EA0E110F8FFEB68809FE5040000EA083097E560009FF6
-S31A5000C173E50130C3E3034084E009F8FFEB050054E10600002AA9
-S31A5000C1880400A0E10FE0A0E106F0A0E1730200EB00A050E2F2BC
-S31A5000C19DFFFF0A004089E5101F11EE011A81E3031081E3101F2E
-S31A5000C1B201EE0800A0E1FAF7FFEB0A00A0E1F0AF1BE91044014C
-S31A5000C1C70014CC005034CD0050FC0F0150181001501410015042
-S31A5000C1DC0DC0A0E1F0DF2DE904B04CE204D04DE20270A0E100ED
-S31A5000C1F190A0E30050A0E1A4C09FE50160A0E11C209CE50CA0CC
-S31A5000C206A0E12C300BE5090052E10700A0034300000A00809AB3
-S31A5000C21BE584109FE584209FE50800A0E1022061E05BF6FFEB6C
-S31A5000C2300E02A0E3021A80E2202090E4000031E1FCFFFF1A16A2
-S31A5000C2450F07EE9A0F07EE0000A0E10000A0E10000A0E1000069
-S31A5000C25AA0E10000A0E10000A0E1101F11EE011AC1E3101F01D9
-S31A5000C26FEE151F07EE0000A0E10000A0E10000A0E10000A0E149
-S31A5000C2840000A0E10000A0E11C009FE50610A0E1072086E00584
-S31A5000C29930A0E1C1F7FFEB090000EA1044010034CD005074CE0C
-S31A5000C2AE00501C10015070009FE5077064E0B9F7FFEB0130C41A
-S31A5000C2C3E3035085E0036086E0000057E30D0000DA0500A0E105
-S31A5000C2D808309AE50610A0E1030057E10740A0B10340A0A10452
-S31A5000C2ED20A0E10FE0A0E108F0A0E11A0200EB009050E2EBFFA9
-S31A5000C302FF0A2C301BE5005083E5101F11EE011A81E303108172
-S31A5000C317E3101F01EE0C009FE5A0F7FFEB0900A0E1010000EA34
-S31A5000C32C1410015018100150F0AF1BE90DC0A0E100D82DE904D5
-S31A5000C341B04CE2070050E300F19F97170000EA70C3005078C393
-S31A5000C356005080C3005088C3005090C3005098C30050A0C3004D
-S31A5000C36B50A8C3005040009FE500A81BE93C009FE500A81BE980
-S31A5000C38038009FE500A81BE934009FE500A81BE930009FE500D2
-S31A5000C395A81BE92C009FE500A81BE928009FE500A81BE92400B9
-S31A5000C3AA9FE500A81BE920009FE500A81BE93C1001505C10019E
-S31A5000C3BF50741001508C100150A8100150C0100150D0100150A6
-S31A5000C3D4F4100150181101500DC0A0E100D82DE9003090E5004E
-S31A5000C3E90053E104B04CE20500000A043090E5001083E504306F
-S31A5000C3FE90E5090081E8041080E500A81BE9041083E5001083B9
-S31A5000C413E5043081E5003081E500A81BE90DC0A0E100D82DE9C1
-S31A5000C4280010A0E1000091E504B04CE2010050E10400000A0080
-S31A5000C43D3090E5003081E5002090E5041082E500A81BE900009D
-S31A5000C452A0E300A81BE90DC0A0E170D82DE93C309FE53C209FB9
-S31A5000C467E53C509FE5043083E504B04CE2003083E50F40A0E38D
-S31A5000C47C042082E50260A0E1002082E50600A0E10510A0E1D172
-S31A5000C491FFFFEB615E85E2014054E2F9FFFF5A70A81BE9E4C0A9
-S31A5000C4A60000DCC00000ECC000000DC0A0E130D82DE90620A0B1
-S31A5000C4BBE304B04CE20050A0E1100085E20140A0E1B3F5FFEBB5
-S31A5000C4D00410A0E118009FE50620A0E3AFF5FFEB10309FE500D5
-S31A5000C4E55083E50500A0E1020000EB30A81BE9304401003C44F0
-S31A5000C4FA01000DC0A0E100D82DE90030A0E1101080E204B04C67
-S31A5000C50FE200C093E50020A0E30FE0A0E100F09CE500A81BE977
-S31A5000C5240DC0A0E1F0DF2DE944319FE504B04CE288D04DE23CDB
-S31A5000C539C19FE50540A0E34C8093E50090A0E100509CE50270F2
-S31A5000C54EA0E1AC100BE5000058E31000000A0850A0E100C095D2
-S31A5000C563E514219FE520309CE524308CE50C3095E520208CE5D2
-S31A5000C578000053E30700001A0500A0E1F8109FE50320A0E10F3C
-S31A5000C58DE0A0E100F09CE50C3095E5013083E30C3085E5D0604E
-S31A5000C5A29FE50A0000EA003095E50500A0E10FE0A0E118F0937B
-S31A5000C5B7E5C8009FE5483096E5014044E20FE0A0E103F0A0E1AA
-S31A5000C5CC000054E33E0000DA003095E50500A0E10FE0A0E10C09
-S31A5000C5E1F093E5000050E3EEFFFF0AA8900BE50EA0A0E3A4A0C1
-S31A5000C5F60BE5AC301BE59C700BE5A0300BE50500A0E17C409F71
-S31A5000C60BE50030A0E3003084E5A8104BE200C095E50220A0E3CF
-S31A5000C62000408DE50A3087E00FE0A0E110F09CE558309FE5005F
-S31A5000C6352093E50460A0E1000052E31800000A8EFBFFEB004013
-S31A5000C64AA0E140009FE5D4F6FFEB0900A0E10A10A0E102F9FF6D
-S31A5000C65FEBAC001BE50710A0E1FFF8FFEB0400A0E193FBFFEB63
-S31A5000C6740B0000EA500000003C440100CC830000304401004091
-S31A5000C6890D0300F02701003844010028110150002095E5050078
-S31A5000C69EA0E10FE0A0E118F092E5003096E5000053E3F8FFFFEA
-S31A5000C6B30A000058E30400000A003095E5242093E5202083E5BB
-S31A5000C6C80010A0E3241083E5F0AF1BE90DC0A0E100D82DE930C9
-S31A5000C6DD309FE5030051E104B04CE200C0A0E10200001A013099
-S31A5000C6F2A0E3003081E500A81BE900309CE50C00A0E124C09363
-S31A5000C707E50FE0A0E108F09CE500A81BE9F02701000DC0A0E1E7
-S31A5000C71CF0D92DE9DC309FE5DC209FE504B04CE20070A0E14CA4
-S31A5000C7316093E50180A0E1005092E5000056E31000000A065053
-S31A5000C746A0E100C095E5B8209FE520309CE524308CE50C30950A
-S31A5000C75BE520208CE5000053E30700001A0500A0E19C109FE5D0
-S31A5000C7700320A0E10FE0A0E100F09CE50C3095E5013083E30C80
-S31A5000C7853085E5003095E50500A0E10FE0A0E118F093E574001B
-S31A5000C79A9FE51FFFFFEB004050E20D00000A0700A0E10C1084F7
-S31A5000C7AFE20E20A0E3F9F4FFEB0800A0E1082094E51A1084E2FB
-S31A5000C7C40E2042E2F4F4FFEB44009FE50410A0E100FFFFEB0898
-S31A5000C7D90094E5000000EA0400A0E1000056E30400000A003096
-S31A5000C7EE95E5242093E5202083E50010A0E3241083E5F0A91B1F
-S31A5000C803E9500000003C440100CC83000030440100E4C00000A8
-S31A5000C818DCC000000DC0A0E1F0D92DE904B04CE20050A0E30235
-S31A5000C82D80A0E1080055E10160A0E10D0000AA34709FE58541DA
-S31A5000C842A0E1060094E7001097E5064084E0042094E5D1F4FFF2
-S31A5000C857EB003097E5042094E5015085E2023083E0003087E559
-S31A5000C86C080055E1F2FFFFBAF0A91BE9F42701000DC0A0E1F082
-S31A5000C881D92DE904B04CE280D04DE20060A0E10C019FE5017019
-S31A5000C896A0E1E0FEFFEB008050E20C5088120800001AF5FAFF36
-S31A5000C8ABEB0040A0E1F0009FE5F0109FE50720A0E1EC509FE516
-S31A5000C8C038F6FFEB0400A0E1FDFAFFEBA0500BE50600A0E19C8C
-S31A5000C8D5700BE5A0104BE2003096E50120A0E30FE0A0E114F0F8
-S31A5000C8EA93E5C0209FE5003092E5000053E30B00000AE0FAFF3C
-S31A5000C8FFEB0040A0E1AC009FE526F6FFEB0500A0E10E10A0E3C5
-S31A5000C91454F8FFEB0E0085E20E1047E251F8FFEB0400A0E1E529
-S31A5000C929FAFFEB003096E5242093E5000052E31200000A1E10D9
-S31A5000C93E85E274009FE50420A0E3A1F6FFEB000050E30C0000C8
-S31A5000C9530A64309FE5002096E5005083E5144092E524C092E5DE
-S31A5000C96854309FE50600A0E1143082E50710A0E10FE0A0E1041E
-S31A5000C97DF09CE5003096E5144083E5000058E30E00000A0870AC
-S31A5000C99288E52C009FE50810A0E18EFEFFEB0C0000EADCC0007C
-S31A5000C9A7003811015058110150EC21010038440100681101507C
-S31A5000C9BCD8830000F42701001CC80050E4C00000A0001BE59C85
-S31A5000C9D1101BE524F8FFEBF0A91BE90DC0A0E100D82DE91430C8
-S31A5000C9E69FE5000093E5002090E504B04CE20FE0A0E11CF09265
-S31A5000C9FBE500A81BE93C4401000DC0A0E1F0D82DE9F8209FE5F7
-S31A5000CA10F8109FE5022061E004B04CE2F0709FE55CD04DE200AB
-S31A5000CA254097E50400A0E15BF4FFEB0E02A0E3021A80E22020DB
-S31A5000CA3A90E4000031E1FCFFFF1A160F07EE9A0F07EE0000A09F
-S31A5000CA4FE10000A0E10000A0E10000A0E10000A0E10000A0E116
-S31A5000CA64101F11EE011AC1E3101F01EE151F07EE0000A0E100B2
-S31A5000CA7900A0E10000A0E10000A0E10000A0E10000A0E150502D
-S31A5000CA8E4BE20500A0E10FE0A0E104F0A0E1101F11EE011A81DB
-S31A5000CAA3E3031081E3101F01EE0560A0E140404BE20400A0E198
-S31A5000CAB858109FE50320A0E310F6FFEB000050E31400000A48F8
-S31A5000CACD009FE5B4F5FFEB3430A0E324308DE504E0A0E10F00C6
-S31A5000CAE2BEE80DC0A0E10F00ACE80F00BEE80F00ACE800309E2C
-S31A5000CAF7E500308CE50F0096E866E0FFEB0800A0E3150000EA07
-S31A5000CB0C3CCF005074CE005010440100781101507C11015005BF
-S31A5000CB2132A0E3143087E530C0D5E52F10D5E52EE0D5E52D208C
-S31A5000CB36D5E50C1481E18134A0E10E2482E1012082E208308749
-S31A5000CB4BE50114A0E10C2087E5910203E08330A0E1053283E226
-S31A5000CB60183087E5F0A81BE90DC0A0E110D82DE944309FE504D2
-S31A5000CB75B04CE20040A0E1033004E0000053E30A00000A300025
-S31A5000CB8A9FE50410A0E184F5FFEB28309FE5033004E00000537E
-S31A5000CB9FE30100000A0400A0E310A81BE90200A0E310A81BE9B9
-S31A5000CBB40300A0E110A81BE97E007E009C110150100010000DAF
-S31A5000CBC9C0A0E100D82DE934309FE50020A0E3030050E104B05F
-S31A5000CBDE4CE20100008A030051E10400008A1C309FE50300504D
-S31A5000CBF3E10200008A030051E10000009A0120A0E30200A0E174
-S31A5000CC0800A81BE94400005008FA00500DC0A0E130D82DE904BF
-S31A5000CC1DB04CE20040A0E1103F11EE2351A0E1015015E2100072
-S31A5000CC32000A0E02A0E3021A80E2202090E4000031E1FCFFFFBC
-S31A5000CC471A160F07EE9A0F07EE0000A0E10000A0E10000A0E12D
-S31A5000CC5C0000A0E10000A0E10000A0E1101F11EE0C10C1E310EC
-S31A5000CC711F01EE161F07EE98C09FE598E09FE598309FE5A41B3D
-S31A5000CC86A0E194209FE5811BA0E1003081E58C309FE5002081F6
-S31A5000CC9BE5003084E5000091E50E3000E00E0053E10100000ACF
-S31A5000CCB001C05CE2F9FFFF1A6C309FE56C209FE5033000E000C6
-S31A5000CCC52081E5000053E30B00000A043094E40128A0E30100DA
-S31A5000CCDA73E30500001A042042E2000052E3020000DA04309459
-S31A5000CCEFE4010073E3F9FFFF0A000052E30000A003000055E38E
-S31A5000CD040200000A101F11EE0F1081E3101F01EE30A81BE940CD
-S31A5000CD194B4C00800080005000500020002000D000D0007E001A
-S31A5000CD2E7E00FF00FF000DC0A0E1F0D82DE904B04CE20040A030
-S31A5000CD43E10160A0E102E0A0E100C0A0E3103F11EE2351A0E1D9
-S31A5000CD58015015E21000000A0E02A0E3021A80E2202090E40049
-S31A5000CD6D0031E1FCFFFF1A160F07EE9A0F07EE0000A0E10000FC
-S31A5000CD82A0E10000A0E10000A0E10000A0E10000A0E1101F1181
-S31A5000CD97EE0C10C1E3101F01EE161F07EEAC309FE5A40BA0E1AB
-S31A5000CDACA8709FE5800BA0E1003080E5070000EA9C309FE5009E
-S31A5000CDC13080E5042094E4043096E4030052E18CC09F151600DC
-S31A5000CDD6001A04E04EE200005EE3130000DA7C309FE5003080B6
-S31A5000CDEBE5002096E5002084E500C090E56C109FE507300CE07C
-S31A5000CE00070053E10600000A4C209FE5011051E20700000A0037
-S31A5000CE15C090E502300CE0020053E1F9FFFF1A44309FE50330ED
-S31A5000CE2A0CE0000053E3E1FFFF0A24309FE5003080E5000055D0
-S31A5000CE3FE30200000A101F11EE0F1081E3101F01EE0C00A0E13D
-S31A5000CE54F0A81BE95000500080008000FF00FF001099109910D7
-S31A5000CE69001000404B4C007E007E000DC0A0E100D82DE904B08B
-S31A5000CE7E4CE200E0A0E1103F11EE23C1A0E101C01CE210000038
-S31A5000CE930A0E02A0E3021A80E2202090E4000031E1FCFFFF1A3F
-S31A5000CEA8160F07EE9A0F07EE0000A0E10000A0E10000A0E100E4
-S31A5000CEBD00A0E10000A0E10000A0E1101F11EE0C10C1E3101F6A
-S31A5000CED201EE161F07EE50209FE550309FE50512A0E300308199
-S31A5000CEE7E5012042E2000052E3FCFFFFCA0020A0E3043091E471
-S31A5000CEFC012082E20130CEE4330052E3FAFFFF9A24309FE50091
-S31A5000CF113081E500005CE30200000A101F11EE0F1081E3101FF4
-S31A5000CF2601EE0000A0E300A81BE9400D030098009800FF00FF04
-S31A5000CF3B000DC0A0E110D82DE94C309FE504B04CE2000093E5E5
-S31A5000CF500140A0E1000050E30000000A0FF3FFEB0030D4E502A0
-S31A5000CF650053E30900001A1C0084E224109FE50620A0E315F51B
-S31A5000CF7AFFEB000050E30300001A101084E210009FE50420A034
-S31A5000CF8FE302F3FFEB10A81BE9F827010030440100D8830000C9
-S31A5000CFA40DC0A0E1F0DF2DE90010A0E34B2FA0E36C319FE5043A
-S31A5000CFB9B04CE252DF4DE2000083E5165E4BE20500A0E113F538
-S31A5000CFCEFFEB54419FE554119FE50030A0E30030C4E50130C48B
-S31A5000CFE3E50230C4E50330C4E50100A0E33C219FE528304BE25D
-S31A5000CFF80200C3E734319FE528204BE20300C2E72CC19FE506A1
-S31A5000D00D20A0E328304BE20C20C3E720319FE55C310BE5510F08
-S31A5000D0224BE2DDF2FFEBFFC0A0E3053DE0E328104BE203C0C18D
-S31A5000D037E74F2FE0E30130A0E102C0C3E7F8309FE503C0C1E731
-S31A5000D04CF4109FE528304BE201C0C3E7EC309FE528104BE203F9
-S31A5000D061C0C1E7E4109FE528304BE201C0C3E70270A0E3D83097
-S31A5000D0769FE528104BE203C0C1E70590A0E1CC109FE528304BE2
-S31A5000D08BE201C0C3E70480A0E1C0309FE528104BE203C0C1E7A4
-S31A5000D0A00850A0E1013083E203C0C1E734004BE2A8209FE5445A
-S31A5000D0B510A0E3390000EB5BAF4BE2790700EB0060A0E10900CD
-S31A5000D0CAA0E14B1FA0E34430A0E300308DE50A20A0E1013043D5
-S31A5000D0DFE2A90000EBA00200EB0030D5E5000053E30800001AA1
-S31A5000D0F40130D8E5000053E30500001A0230D5E5000053E3026A
-S31A5000D10900001A0340D5E5000054E31200000A4400A0E3410049
-S31A5000D11E00EB0000A0E31B0000EAF8270100D883000030440143
-S31A5000D13300C8FEFFFFC9FEFFFFCAFEFFFF55553412BCFEFFFF9A
-S31A5000D148BDFEFFFFBEFEFFFFC0FEFFFFC1FEFFFFC2FEFFFFC40E
-S31A5000D15DFEFFFF3CCF0050500700EB000066E07D0E50E3DBFFF0
-S31A5000D172FF3A0730A0E1017047E2000053E3CEFFFFCA4400A017
-S31A5000D187E3260000EB08309FE50000E0E3004083E5000000EA38
-S31A5000D19C38440100F0AF1BE90DC0A0E170D82DE90118A0E16C56
-S31A5000D1B1309FE504B04CE20040A0E10250A0E14108A0E100C05F
-S31A5000D1C693E50360A0E100005CE30900000A0038A0E12328A0AC
-S31A5000D1DBE1B430DCE1020053E10100001A0000E0E370A81BE937
-S31A5000D1F000C09CE500005CE3F7FFFF1A0008A0E12008A0E1BD56
-S31A5000D2050200EBB400C4E1085084E5003096E5003084E5000073
-S31A5000D21AA0E3004086E570A81BE9FC2701000DC0A0E1F0D92DF7
-S31A5000D22FE90008A0E14008A0E15C309FE504B04CE20060A0E384
-S31A5000D244005093E50380A0E1060055E11000000A0078A0E1B4B0
-S31A5000D25940D5E12708A0E1A60200EB000054E10600001A0000DC
-S31A5000D26E56E30200000A003095E5003086E5010000EA0030951B
-S31A5000D283E5003088E50560A0E1005095E5000055E3EFFFFF1ACF
-S31A5000D298F0A91BE9FC2701000DC0A0E1F0D92DE9BC309FE504C9
-S31A5000D2ADD04DE20070A0E1086097E504B04CE2B620D6E1018052
-S31A5000D2C2A0E1045097E5030052E10030A003B630C601B430D640
-S31A5000D2D7E1B230C5E1B400D6E1860200EB0040A0E10500A0E15E
-S31A5000D2EC0A0200EB0020A0E10600A0E10410A0E1E30100EB0054
-S31A5000D30108B0E11D00001A60309FE5005093E5000055E31900C4
-S31A5000D316000AB420D5E1B230D6E1030052E11200001AB400D693
-S31A5000D32BE1730200EB084040E2B000D6E1700200EB0038A0E16F
-S31A5000D3400500A0E1081086E22338A0E100308DE50420A0E10851
-S31A5000D35530A0E10FE0A0E108F095E50700A0E1BB0100EB0600A5
-S31A5000D36A00EAFFFF0000FC270100005095E5000055E3E5FFFF67
-S31A5000D37F1A0700A0E1B30100EBF0A91BE90DC0A0E1F0DF2DE932
-S31A5000D3940338A0E104B04CE20160A0E100A0A0E10290A0E1E892
-S31A5000D3A9C09FE54378A0E1F450DBE10C0056E13500008AD800BF
-S31A5000D3BE9FE5840100EB008050E23100000A083086E2BC30C8CF
-S31A5000D3D3E1084098E50508A0E1045098E52008A0E1450200EB0F
-S31A5000D3E8B000C4E10708A0E12008A0E1410200EBB200C4E1BC0B
-S31A5000D3FD00D8E13E0200EB0030A0E30A10A0E1B400C4E1062014
-S31A5000D412A0E1B630C4E1080084E2DFF1FFEB0C0085E274109FE5
-S31A5000D427E50420A0E3DBF1FFEB100085E20910A0E10420A0E3A0
-S31A5000D43CD7F1FFEB1170A0E30970C5E5B430D4E1B230C5E1BCCF
-S31A5000D45160D8E10500A0E1AF0100EB0020A0E10400A0E10610FA
-S31A5000D466A0E1880100EB0008A0E12008A0E1210200EB0710A06F
-S31A5000D47BE1B600C4E10920A0E10800A0E1F10000EB0800A0E172
-S31A5000D490700100EBF0AF1BE9BE050000EA050000D88300000D18
-S31A5000D4A5C0A0E1F0D92DE904B04CE210D04DE20080A0E10240C8
-S31A5000D4BAA0E10400A0E10170A0E12C604BE20610A0E10350A0CC
-S31A5000D4CFE1440600EB000050E30F0000BAB400D4E1060200EB84
-S31A5000D4E40048A0E1B400D5E12448A0E1020200EB0038A0E1080D
-S31A5000D4F900A0E10710A0E12338A0E100308DE50620A0E1043056
-S31A5000D50EA0E19DFFFFEB0000A0E3030000EA0C009FE50C109FF0
-S31A5000D523E51FF3FFEB0000E0E3010000EAA8110150CC110150D6
-S31A5000D538F0A91BE90DC0A0E1F0D92DE964009FE50240A0E10013
-S31A5000D54D4080E55C809FE504B04CE2000098E50370A0E1F450D7
-S31A5000D562DBE14C609FE58CF1FFEB003096E5000053E309000021
-S31A5000D5770A0508A0E12008A0E1DE0100EB001096E5B400C1E15D
-S31A5000D58C003097E5003081E50020A0E3002088E5F0A91BE91411
-S31A5000D5A1009FE50410A0E1FEF2FFEBF0A91BE90428010000283A
-S31A5000D5B6010008280100DC1101500DC0A0E1F0DF2DE904B04C67
-S31A5000D5CBE20CD04DE20050A0E1B400D3E10160A0E104909BE5D9
-S31A5000D5E00270A0E1C50100EB0048A0E134004BE214209FE52436
-S31A5000D5F518A0E1E9FEFFEB000050E3020000AA0000E0E31F00A0
-S31A5000D60A00EA3CD5005078109FE578009FE578309FE504109989
-S31A5000D61FE8005081E50480A0E1006080E501A0A0E1007083E53E
-S31A5000D6340060E0E30070A0E1821262E054009FE5012182E090B5
-S31A5000D6491C83E02333A0E1825183E0140600EB0040A0E112060C
-S31A5000D65E00EB000064E0050050E10400002A3E0100EB00309ADA
-S31A5000D673E5000053E3F7FFFF1A006097E52808A0E1E7FEFFEBC6
-S31A5000D6880600A0E1030000EA002801000428010008280100D369
-S31A5000D69D4D6210F0AF1BE90DC0A0E110D82DE90030D0E504B0DB
-S31A5000D6B24CE2FF0053E30A00001A0130D0E5FF0053E307000064
-S31A5000D6C71A0230D0E5FF0053E30400001A0330D0E5FF0053E387
-S31A5000D6DC0100001A0100A0E310A81BE94C409FE50420A0E304CD
-S31A5000D6F110A0E136F3FFEB000050E3F7FFFF0A0030D4E500000F
-S31A5000D70653E30900001A0130D4E5000053E30600001A0230D419
-S31A5000D71BE5000053E30300001A0330D4E50100A0E3000053E3C5
-S31A5000D7300000000A0000A0E310A81BE9D88300000DC0A0E1F0AC
-S31A5000D745D82DE904B04CE20CD04DE20050A0E1044095E50160AE
-S31A5000D75AA0E1100084E2CFFFFFEB000050E30700000A0400A0CD
-S31A5000D76FE10010D4E50020A0E30F1001E20111A0E1C20000EBC0
-S31A5000D7840008B0E10200000A0500A0E1B00000EB2D0000EA2835
-S31A5000D799704BE20700A0E10C1084E20420A0E3FCF0FFEB2400DD
-S31A5000D7AE4BE20610A0E10620A0E3F8F0FFEB0030D4E5B200D462
-S31A5000D7C3E10F3003E20361A0E14B0100EB000066E0BC00C5E132
-S31A5000D7D80930D4E5060053E30C00000A020000CA010053E3039C
-S31A5000D7ED00000A140000EA110053E30C00000A110000EA05006C
-S31A5000D802A0E1063084E0083085E50710A0E1420100EB0D00002B
-S31A5000D817EA0500A0E1063084E0083085E50710A0E1B90200EBBC
-S31A5000D82C070000EA0500A0E1063084E0083085E50710A0E196B0
-S31A5000D841FEFFEB010000EA0500A0E1810000EBF0A81BE90DC04E
-S31A5000D856A0E1F0DF2DE90060A0E1083086E2080113E8038048B1
-S31A5000D86BE004B04CE2045096E54801A0E1BC30D6E10F0000E263
-S31A5000D880083083E0BC30C6E1400080E30000C5E50070A0E301CE
-S31A5000D89570C5E501A0A0E1BC00D6E10290A0E1150100EB8040A5
-S31A5000D8AA9FE5B200C5E1B000D4E1110100EBB400C5E1B030D4C7
-S31A5000D8BFE16C109FE5013083E2B030C4E1B670C5E14030A0E343
-S31A5000D8D40830C5E509A0C5E50420A0E3BA70C5E10C0085E2AC1E
-S31A5000D8E9F0FFEB100085E20910A0E10420A0E3A8F0FFEB0500BB
-S31A5000D8FEA0E10810A0E10720A0E1600000EB0008A0E12008A061
-S31A5000D913E1F90000EB041089E2BA00C5E1022BA0E30600A0E1CE
-S31A5000D928CB0000EBF0AF1BE90C280100D88300000DC0A0E1F06D
-S31A5000D93DD82DE97C209FE5003092E504B04CE2000053E31A0098
-S31A5000D952001A03E0A0E10130A0E3003082E50E40A0E15C709F67
-S31A5000D967E504C0A0E158509FE503E0A0E354609FE50500A0E1DB
-S31A5000D97C001096E507208CE0023002E2022083E05ECE8CE210DD
-S31A5000D9913085E2042083E70CC08CE2001080E501E05EE22830DE
-S31A5000D9A69FE50010A0E1BE30C0E1144084E2140081E2F0FFFF53
-S31A5000D9BB5A001086E5F0A81BE9E8830000602801001028010063
-S31A5000D9D010400100EA0500000DC0A0E100D82DE960309FE50458
-S31A5000D9E5B04CE200C093E500005CE31200000A00209CE50020A5
-S31A5000D9FA83E510309CE504308CE540109FE5143083E208308CB3
-S31A5000DA0FE538E09FE50030A0E3BC30CCE1003091E52C209FE569
-S31A5000DA24013083E2003081E5001092E500009EE5033061E000ED
-S31A5000DA390053E100308EC50C00A0E100A81BE910400100E083DE
-S31A5000DA4E0000DC830000E48300000DC0A0E100D82DE920209F8C
-S31A5000DA63E5003092E51C109FE5013043E2003082E5003091E589
-S31A5000DA78003080E504B04CE2000081E500A81BE9E08300001047
-S31A5000DA8D4001000DC0A0E100D82DE9021051E204B04CE202C0C8
-S31A5000DAA2A0E10300004AB230D0E0021051E203C08CE0FBFFFF4C
-S31A5000DAB75A010071E30500001A0030D0E5FF20CEE302E083E13B
-S31A5000DACCFFECCEE30E38A0E123C88CE00C08A0E12C28A0E1309B
-S31A5000DAE1109FE520C882E00C3061E001005CE103C0A0C10C0011
-S31A5000DAF6E0E10008A0E12E0880E160E8A0E1200CA0E10008A0C6
-S31A5000DB0BE10E0C80E12008A0E100A81BE9FFFF00000DC0A0E1B2
-S31A5000DB2000D82DE90020A0E304D04DE2BC30D0E104B04CE21077
-S31A5000DB35204BE50910D0E50F104BE5BE20D0E1B011D0E1B2C1A4
-S31A5000DB4AD0E1023083E0013083E0B0215BE10C3083E0B200D068
-S31A5000DB5FE1023083E0000083E000A81BE90DC0A0E110D82DE98A
-S31A5000DB7404B04CE210D04DE2B4009FE594FFFFEB004050E2022C
-S31A5000DB8900001AA8009FE584F1FFEBFEFFFFEA101094E5942059
-S31A5000DB9E9FE520004BE2DBFAFFEBBC00C4E10008B0E12600006C
-S31A5000DBB30A84209FE5003092E5B4015BE1013083E2003082E510
-S31A5000DBC84C0000EB020B50E30500000A68309FE5030050E10C10
-S31A5000DBDD00000A0400A0E19BFFFFEBE3FFFFEA54309FE50020D7
-S31A5000DBF293E5101094E5012082E2002083E5041084E50400A089
-S31A5000DC07E11A104BE2CBFEFFEBD9FFFFEA30309FE5002093E58A
-S31A5000DC1C101094E5012082E2002083E5041084E50400A0E1C72E
-S31A5000DC310300EBD0FFFFEAEA05000008120150F4830000060803
-S31A5000DC460000EC830000F08300000400A0E17FFFFFEB10A81BD1
-S31A5000DC5BE90DC0A0E170D82DE904B04CE210D04DE20050A0E107
-S31A5000DC7028604BE20600A0E10240A0E10620A0E3C6EFFFEB22E0
-S31A5000DC85004BE238109FE50620A0E3C2EFFFEB0448A0E12408FE
-S31A5000DC9AA0E1170000EBBC014BE1101095E5BC20D5E10600A0E1
-S31A5000DCAFE11BFAFFEB10209FE5003092E5013083E2003082E5A2
-S31A5000DCC4010000EA30440100F883000070A81BE90DC0A0E12090
-S31A5000DCD93CA0E1003C83E1FF2800E200D82DE9FF0C00E200049B
-S31A5000DCEEA0E1220480E1000083E104B04CE200A81BE90DC0A064
-S31A5000DD03E100D82DE90008A0E1FF3800E2200CA0E1230480E10F
-S31A5000DD1804B04CE200A81BE90DC0A0E130D82DE90040A0E108DD
-S31A5000DD2D0094E504B04CE2B030D0E10150A0E1080053E3160079
-S31A5000DD42001ABC10D4E10020A0E34FFFFFEB0008A0E120C8B0DF
-S31A5000DD57E11000001A083094E500C0C3E5082094E5B2C0C2E187
-S31A5000DD6C080094E5BC10D4E10C20A0E144FFFFEB0008A0E120C7
-S31A5000DD8108A0E1DDFFFFEB083094E50110A0E3B200C3E1052028
-S31A5000DD96A0E10400A0E1ACFEFFEB0400A0E12BFFFFEB30A81BFC
-S31A5000DDABE90DC0A0E1F0DF2DE904B04CE204D04DE20060A0E12B
-S31A5000DDC00140A0E1307086E2048097E5020014E3085097E5025F
-S31A5000DDD590A0E10F00000A1830A0E3BC30C7E10C30D5E5500113
-S31A5000DDEA9FE59030C3E3603083E30C30C5E5B5FFFFEB2C104BE3
-S31A5000DDFFE22C000BE50420A0E3140085E263EFFFEB0030A0E3AA
-S31A5000DE14B831C6E1060000EAB831D6E1143083E2BC30C7E10C3A
-S31A5000DE2920D5E5A020C2E3502082E30C20C5E50C30D5E50F306F
-S31A5000DE3EC3E30C30C5E5580096E5A1FFFFEB040085E554009638
-S31A5000DE53E59EFFFFEB0030A0E3B031C5E1000059E3080085E510
-S31A5000DE6808A086E21800001AB401D6E1A1FFFFEBB000C5E1B60B
-S31A5000DE7D01D6E19EFFFFEBB200C5E10D40C5E5B831D6E100000C
-S31A5000DE9253E3083084130D30C515A0009FE596FFFFEBBE00C5E3
-S31A5000DEA7E1B291C5E10420A0E390109FE50C0088E238EFFFEBF4
-S31A5000DEBC100088E20A10A0E10420A0E334EFFFEB0630A0E30970
-S31A5000DED130C8E5BC00D7E188FFFFEBB200C8E1BC40D7E108000D
-S31A5000DEE6A0E10BFFFFEB0020A0E10500A0E10410A0E1E4FEFFBF
-S31A5000DEFBEB0008A0E12008A0E17DFFFFEB0610A0E3B001C5E149
-S31A5000DF100A20A0E10700A0E14DFEFFEB043096E50A0053E30A45
-S31A5000DF2500001A1C109FE51C0086E218209FE50630A0E1B2021C
-S31A5000DF3A00EB110000EAB2050402B2050000D8830000C0D40132
-S31A5000DF4F0054E100500D30D5E5030013E30200001AB831D6E136
-S31A5000DF64000053E30600000A1C0086E2FA1FA0E308209FE5063A
-S31A5000DF7930A0E1A10200EB000000EA38E10050F0AF1BE90DC03B
-S31A5000DF8EA0E1F0DF2DE904B04CE208D04DE22C000BE52C301B46
-S31A5000DFA3E5089090E5046093E5080099E530100BE546FFFFEB60
-S31A5000DFB800A0A0E1040099E543FFFFEB0080A0E1B200D9E14B77
-S31A5000DFCDFFFFEB0058A0E1B000D9E14558A0E147FFFFEB1490CB
-S31A5000DFE286E20048A0E12C301BE51470A0E3BC70C3E10A00A0C6
-S31A5000DFF7E15030A0E30C30C9E54448A0E132FFFFEB040089E557
-S31A5000E00C0800A0E12FFFFFEB080089E5010BA0E337FFFFEBBE25
-S31A5000E02100C9E10030A0E3B231C9E10558A0E1B031C9E1250814
-S31A5000E036A0E130FFFFEBB401C6E10448A0E12408A0E12CFFFFE5
-S31A5000E04BEBB200C9E10D70C9E50420A0E370109FE50C0086E2D9
-S31A5000E060CEEEFFEB100086E230101BE50420A0E3CAEEFFEB06A8
-S31A5000E07550A0E30950C6E52C301BE5BC00D3E11DFFFFEBB200E5
-S31A5000E08AC6E12C301BE5BC40D3E10600A0E19FFEFFEB0020A0AA
-S31A5000E09FE10900A0E10410A0E178FEFFEB0008A0E12008A0E184
-S31A5000E0B411FFFFEBB001C9E130201BE52C001BE50510A0E1E1B9
-S31A5000E0C9FDFFEB000000EAD8830000F0AF1BE90DC0A0E100D8F7
-S31A5000E0DE2DE94C309FE50010A0E3002093E504B04CE201005261
-S31A5000E0F3E10D00000A03C0A0E1000052E10600001A000051E3FF
-S31A5000E1080200000A003092E5003081E5010000EA003092E500D1
-S31A5000E11D308CE50210A0E1002092E5000052E3F2FFFF1A00A8E5
-S31A5000E1321BE9144001000DC0A0E100D82DE90010A0E30120A099
-S31A5000E147E304B04CE216FFFFEB00A81BE90DC0A0E100D82DE9C1
-S31A5000E15C0030A0E3043080E504B04CE2DAFFFFEB00A81BE90DAE
-S31A5000E171C0A0E110D82DE90040A0E1440094E504B04CE20000A4
-S31A5000E18650E30500000A003090E5443084E52FFEFFEB4400947B
-S31A5000E19BE5000050E3F9FFFF1A10A81BE90DC0A0E110D82DE9E8
-S31A5000E1B00030A0E304B04CE20040A0E1043084E51C0084E22966
-S31A5000E1C50200EB0400A0E1E7FFFFEB0400A0E1BFFFFFEB10A8C8
-S31A5000E1DA1BE90DC0A0E1F0D82DE90170A0E1082097E5BC10D771
-S31A5000E1EFE104B04CE20C30D2E50050A0E1040092E52332A0E1ED
-S31A5000E2040331A0E1014063E0036082E0AFFEFFEB542095E5002C
-S31A5000E2193062E0000053E3170000CA023060E0044063E00360B5
-S31A5000E22E86E0000054E3120000DA043082E0543085E54420957F
-S31A5000E243E50030A0E3003087E5030052E10600000A000000EA0C
-S31A5000E258002092E5003092E5000053E3FBFFFF1A007082E502FB
-S31A5000E26D0000EA447085E54C4085E5486085E50100A0E3F0A81A
-S31A5000E2821BE90000A0E3F0A81BE90DC0A0E130D82DE9083091D9
-S31A5000E297E50040A0E1080093E504B04CE28AFEFFEB583094E5A1
-S31A5000E2AC0050A0E1053063E0000053E3140000DA1C0084E2EA2E
-S31A5000E2C10100EB582094E5B831D4E1051062E0030051E10310D8
-S31A5000E2D6A0A1000051E30B0000DAB831D4E1033061E0B831C4C4
-S31A5000E2EBE1012082E0582084E50338B0E10400000A380094E5F8
-S31A5000E300B821D4E1140080E2011080E023EEFFEB30A81BE90D59
-S31A5000E315C0A0E1F0DD2DE90080A0E1BC00D8E1086098E504B06A
-S31A5000E32A4CE2044098E50170A0E171FEFFEBB200C4E100A0A0B7
-S31A5000E33FE3BC50D8E10400A0E1F3FDFFEB0020A0E10600A0E144
-S31A5000E3540510A0E1CCFDFFEB0008B0E1F600001AC4339FE500F1
-S31A5000E3695093E5000000EA005095E5000055E31200000AB200C7
-S31A5000E37ED6E1B441D5E15DFEFFEB000054E1F7FFFF1AB631D58D
-S31A5000E393E1000053E30A00000AB000D6E10340A0E155FEFFEB8C
-S31A5000E3A8000054E1EFFFFF1A0700A0E1081085E20420A0E3041C
-S31A5000E3BDF0FFEB000050E3E9FFFF1A000055E3D800000A0C00C1
-S31A5000E3D285E2041087E20620A0E3EFEDFFEB043095E50200538A
-S31A5000E3E7E30700000A0D30D6E5040013E30400000A0500A0E151
-S31A5000E3FC69FFFFEB0800A0E193FDFFEBF0AD1BE9043095E50111
-S31A5000E4113043E2090053E303F19F97C20000EA48E40050A8E42E
-S31A5000E426005040E7005010E5005010E50050BCE5005000E60063
-S31A5000E43B5094E60050D8E600501CE700500D30D6E5020013E30B
-S31A5000E4501000000A0230A0E3043085E5040096E51BFEFFEB0171
-S31A5000E4653080E2B000D6E1543085E522FEFFEBB601C5E10020DE
-S31A5000E47A97E51210A0E3082085E50030A0E3B831C5E10500A09D
-S31A5000E48FE1B035C5E18C0000EA0800A0E10710A0E1B9FEFFEB7E
-S31A5000E4A4A50000EA1C0085E26F0100EB0D30D6E5041013E2029D
-S31A5000E4B900000A0130A0E3043085E59D0000EA020013E303001A
-S31A5000E4CE000A0500A0E10120A0E333FEFFEB970000EA100013F0
-S31A5000E4E3E39500000A080096E5F8FDFFEB583095E5013083E252
-S31A5000E4F8030050E18F00001A0430A0E3043085E5580085E58B3A
-S31A5000E50D0000EA0D30D6E5544095E5100013E30200000A05009C
-S31A5000E522A0E10810A0E157FFFFEB0500A0E10810A0E128FFFFEF
-S31A5000E537EB0D30D6E500A0A0E1010013E30800000A040096E5ED
-S31A5000E54CE0FDFFEB543095E5030050E10300001A013080E25467
-S31A5000E5613085E50520A0E3042085E5543095E5040053E1020047
-S31A5000E576001AB035D5E1000053E36E00000AB841D5E1000054D4
-S31A5000E58BE30700001A1C0085E2350100EB0500A0E11010A0E354
-S31A5000E5A00420A0E100FEFFEBB045C5E1630000EA0130A0E3B037
-S31A5000E5B535C5E1600000EA0D30D6E5100013E35D00000A05006C
-S31A5000E5CAA0E10810A0E12DFFFFEB080096E5BDFDFFEB58309572
-S31A5000E5DFE5013083E2030050E15400001A0030A0E3043085E563
-S31A5000E5F40500A0E1B6FEFFEB4F0000EA0D30D6E5100013E3174A
-S31A5000E60900000A0500A0E10810A0E11CFFFFEB080096E5ACFD4C
-S31A5000E61EFFEB583095E5013083E2030050E10E00001A0D30D6A0
-S31A5000E633E5010013E30900000A0500A0E11010A0E3543095E566
-S31A5000E6480A20A0E3042085E5013083E2543085E50A2042E2D288
-S31A5000E65DFDFFEB010000EA0830A0E3043085E50D30D6E501002E
-S31A5000E67213E33100000A1C0085E2FB0000EB0500A0E11110A05C
-S31A5000E687E3543095E50920A0E30A0000EA0500A0E10810A0E188
-S31A5000E69CCEFEFFEB0D30D6E500A0A0E1010013E32300000A051B
-S31A5000E6B100A0E11010A0E3543095E50A20A0E3042085E5013070
-S31A5000E6C683E2543085E50020A0E3B5FDFFEB190000EA0D30D641
-S31A5000E6DBE5100013E31600000A0500A0E10810A0E1E6FEFFEBDC
-S31A5000E6F0080096E576FDFFEB583095E5013083E2030050E10D06
-S31A5000E70500001A1C0085E2D70000EB0A30A0E3043085E50800E7
-S31A5000E71A00EA0500A0E10010A0E30120A0E39FFDFFEB03000064
-S31A5000E72FEA144001000800A0E10710A0E112FEFFEB00005AE3E8
-S31A5000E7440100001A0800A0E1C1FCFFEBF0AD1BE90DC0A0E10030
-S31A5000E759D82DE904B04CE201FDFFEBD90000EB00A81BE90DC060
-S31A5000E76EA0E130D82DE954209FE504B04CE20040A0E10158A00D
-S31A5000E783E14558A0E10010A0E323EFFFEB0130A0E3043084E54C
-S31A5000E798B451C4E15C2084E2402084E5342084E524109FE52428
-S31A5000E7AD209FE5703084E2383084E5BE23C4E1003091E500302A
-S31A5000E7C284E50000A0E3004081E530A81BE948060000144001DB
-S31A5000E7D700EA0500000DC0A0E110D82DE90040A0E1043094E52E
-S31A5000E7EC04B04CE2010000EAD6FFFFEB043094E5000053E30251
-S31A5000E80100000AB831D4E1000053E3F8FFFF1A10A81BE90DC035
-S31A5000E816A0E110D82DE904B04CE20040A0E1ECFFFFEB041094F8
-S31A5000E82BE5020051E30030A0130130A003040051E30320A011A4
-S31A5000E8400120A003000052E30600000A0400A0E11110A0E30734
-S31A5000E85530A0E3043084E50020A0E351FDFFEB060000EA050038
-S31A5000E86A51E30400001A0400A0E10630A0E3043084E51110A055
-S31A5000E87FE349FDFFEB0400A0E138FEFFEB10A81BE90DC0A0E16C
-S31A5000E894F0D82DE904B04CE20160A0E1005052E20040A0E10230
-S31A5000E8A90000DA4C3094E5000053E30300001A0000A0E3F0A8C7
-S31A5000E8BE1BE94C0084E52B0000EA043094E5040053E30070A02A
-S31A5000E8D3E3170000EA481094E50600A0E1AEECFFEB4C3094E525
-S31A5000E8E8440094E5037087E0002090E5036086E0442084E505FE
-S31A5000E8FD5063E054FCFFEB440094E5000050E3EBFFFF0A0810E8
-S31A5000E91290E50C30D1E5BC20D0E12332A0E1032142E04C20849A
-S31A5000E927E50C30D1E52332A0E1031181E0481084E5000055E36A
-S31A5000E93C0D00000A4C2094E5020055E1E2FFFFAA0600A0E148E3
-S31A5000E9511094E50520A0E190ECFFEB483094E5057087E04C208D
-S31A5000E96694E5053083E0483084E5022065E04C2084E50700A071
-S31A5000E97BE1F0A81BE90DC0A0E170D82DE904B04CE20040A0E165
-S31A5000E990380094E5005052E2010000CA0000A0E370A81BE90479
-S31A5000E9A53094E5043043E2010053E30100009A0000E0E370A858
-S31A5000E9BA1BE9B861D4E1000056E30C00001A34309FE514008045
-S31A5000E9CFE2030055E10350A0210520A0E16FECFFEB0400A0E13E
-S31A5000E9E41010A0E3B851C4E10620A0E1EDFCFFEB0500A0E17007
-S31A5000E9F9A81BE90000A0E370A81BE9B20500000DC0A0E170D81B
-S31A5000EA0E2DE904B04CE20060A0E10240A0E1041086E50350A08F
-S31A5000EA23E1200100EB080086E50C4086E534309FE5002093E5F1
-S31A5000EA380310A0E1105086E5000052E30400000A060052E10593
-S31A5000EA4D00000A002092E5000052E3FAFFFF1A003091E50030A0
-S31A5000EA6286E5006081E570A81BE9184001000DC0A0E100D82D50
-S31A5000EA77E94C109FE50020A0E3003091E504B04CE2020053E10A
-S31A5000EA8C0D00000A000053E10700001A000052E30200000A0072
-S31A5000EAA13093E5003082E500A81BE9003093E5003081E500A839
-S31A5000EAB61BE90320A0E1003093E5000053E3F1FFFF1A00A81BA3
-S31A5000EACBE9184001000DC0A0E170D82DE970309FE504B04CE2EC
-S31A5000EAE00050A0E3004093E50360A0E1050054E11500000AEC17
-S31A5000EAF50000EB0C0094E9000063E0020050E10C00003A000086
-S31A5000EB0A55E30200000A003094E5003085E5010000EA0030946A
-S31A5000EB1FE5003086E5100094E50FE0A0E10CF094E5004096E5E2
-S31A5000EB340050A0E3010000EA0450A0E1004094E5000054E3E90A
-S31A5000EB49FFFF1A70A81BE9184001000DC0A0E1F0D92DE9007037
-S31A5000EB5EA0E1045097E5B200D5E104B04CE263FCFFEB0040A088
-S31A5000EB73E1B000D5E160FCFFEB010050E3020B54033B00001ABD
-S31A5000EB88186085E20600A0E1EC809FE50420A0E30810A0E10C80
-S31A5000EB9DEEFFEB000050E33300001AB600D5E153FCFFEB01000F
-S31A5000EBB250E31C00001A0200A0E34FFCFFEB0E4085E20410A06C
-S31A5000EBC7E1B600C5E10420A0E30600A0E1F1EBFFEB126085E2D9
-S31A5000EBDC0600A0E1085085E20510A0E10620A0E3EBEBFFEB0485
-S31A5000EBF100A0E10810A0E10420A0E3E7EBFFEB0500A0E17C102A
-S31A5000EC069FE50620A0E3E3EBFFEB1C30A0E3BC30C7E10700A0B4
-S31A5000EC1BE168209FE50610A0E10CFCFFEB120000EAB600D5E1B0
-S31A5000EC3032FCFFEB020050E30E00001A4C409FE5003094E5004B
-S31A5000EC450053E30A00000A0E1085E2080094E50420A0E3DDEDA3
-S31A5000EC5AFFEB006050E20400001A081085E2040094E50620A0F3
-S31A5000EC6FE3CAEBFFEB006084E50700A0E175FBFFEBF0A91BE970
-S31A5000EC84D883000030440100060800001C4001000DC0A0E1F0AC
-S31A5000EC99DF2DE904B04CE208D04DE20090A0E12C00A0E30180F1
-S31A5000ECAEA0E148FBFFEB007050E20400001A470000EA0700A0B5
-S31A5000ECC3E163FBFFEB0400A0E1440000EA044097E50100A0E3C6
-S31A5000ECD808FCFFEBB600C4E10100A0E305FCFFEBB000C4E102C2
-S31A5000ECED0BA0E302FCFFEBB200C4E10660A0E30460C4E50450A5
-S31A5000ED02A0E30550C4E50520A0E184109FE50E0084E2A1EBFF68
-S31A5000ED17EB080084E278109FE50620A0E19DEBFFEB180084E295
-S31A5000ED2C0910A0E10520A0E199EBFFEBFF30A0E330304BE52F5D
-S31A5000ED41304BE52E304BE52D304BE52C304BE52B304BE5442071
-S31A5000ED569FE5016086E2048082E530A04BE2089082E5FE3043AD
-S31A5000ED6BE2003082E50280A0E11C30A0E3BC30C7E10700A0E1D6
-S31A5000ED801C209FE50A10A0E1B3FBFFEB460000EB0050A0E1072C
-S31A5000ED950000EAD8830000304401001C400100060800006FFB84
-S31A5000EDAAFFEB004098E5000054E3C1FFFF0A3B0000EB000065CC
-S31A5000EDBFE0F90050E3F7FFFF9A0630A0E1016046E2000053E3D8
-S31A5000EDD4E6FFFFCA0700A0E11DFBFFEB0000E0E3F0AF1BE90D29
-S31A5000EDE9C0A0E1F0DD2DE904B04CE20080A0E10150A0E1A0A0A6
-S31A5000EDFE9FE50070A0E30A60A0E10800A0E10640A0E10410A044
-S31A5000EE13E10420A0E36DEDFFEB003050E20E00000A0C6084E27C
-S31A5000EE28017087E20F0057E3F4FFFFDA0500A0E10810A0E1046D
-S31A5000EE3D20A0E356EBFFEB0800A0E1041085E290FFFFEB00001F
-S31A5000EE5250E3050000AA0000E0E3F0AD1BE9070096E8070085FE
-S31A5000EE67E80300A0E1F0AD1BE930E09FE500C09EE5070095E8D8
-S31A5000EE7C8C308CE003318AE0070083E801C08CE200C08EE51081
-S31A5000EE91005CE30030A00300308E050000A0E3F0AD1BE92840B5
-S31A5000EEA60100FC8300000DC0A0E100D82DE928309FE5FA0FA0C0
-S31A5000EEBBE3482093E504B04CE20FE0A0E102F0A0E114109FE5BC
-S31A5000EED0003091E5013083E20300A0E1003081E500A81BE95085
-S31A5000EEE5000000008400000DC0A0E1F0DF2DE904B04CE214D045
-S31A5000EEFA4DE20270A0E101A0A0E12C000BE5006053E2BF0000F9
-S31A5000EF0F1A0A0057E14200009A010857E30300002AFF0057E3B6
-S31A5000EF240800A0830000A093020000EA010457E31800A023100E
-S31A5000EF3900A03340139FE53220A0E10230D1E7003083E0200053
-S31A5000EF4E73E20600000A1770A0E12C101BE5203060E23133A019
-S31A5000EF63E11AA083E11110A0E12C100BE50798A0E12998A0E114
-S31A5000EF780A00A0E12788A0E10810A0E1710200EB0040A0E10AB1
-S31A5000EF8D00A0E10810A0E1110100EB0060A0E1990602E02C1064
-S31A5000EFA21BE52138A0E1044883E1020054E10500002A0160466D
-S31A5000EFB7E2074094E00200002A020054E101604632074084301B
-S31A5000EFCC044062E00400A0E10810A0E15C0200EB0050A0E10418
-S31A5000EFE100A0E10810A0E1FC0000EB990002E02C101BE50138D4
-S31A5000EFF6A0E12338A0E1055883E1020055E10400002A010040EB
-S31A5000F00BE2075095E00100002A020055E10100403206C880E1E7
-S31A5000F020E60000EA000057E30300001A0100A0E30210A0E1E95E
-S31A5000F0350000EB0070A0E1010857E30720A0E10300002AFF007D
-S31A5000F04A57E30800A0830000A093020000EA010457E31800A0E0
-S31A5000F05F231000A03318129FE53220A0E10230D1E7003083E042
-S31A5000F074200073E20130A00330300B050AA067003400000A2009
-S31A5000F0892060E21770A0E12C101BE53A52A0E13132A0E1111064
-S31A5000F09EA0E12C100BE51AA083E12788A0E10798A0E12998A08B
-S31A5000F0B3E10500A0E10810A0E1230200EB0040A0E10500A0E19B
-S31A5000F0C80810A0E1C30000EB0060A0E1990602E02A38A0E1044D
-S31A5000F0DD4883E1020054E10500002A016046E2074094E0020070
-S31A5000F0F2002A020054E10160463207408430044062E00400A054
-S31A5000F107E10810A0E10F0200EB0050A0E10400A0E10810A0E138
-S31A5000F11CAF0000EB990002E00A38A0E12338A0E1055883E10211
-S31A5000F1310055E10500002A010040E2075095E00200002A0200F1
-S31A5000F14655E10100403207508530066880E105A062E030600B58
-S31A5000F15BE50798A0E12998A0E10A00A0E12788A0E10810A0E1AE
-S31A5000F170F60100EB0040A0E10A00A0E10810A0E1960000EB00EC
-S31A5000F18560A0E1990602E02C101BE52138A0E1044883E10200F5
-S31A5000F19A54E10500002A016046E2074094E00200002A020054E0
-S31A5000F1AFE10160463207408430044062E00400A0E10810A0E19C
-S31A5000F1C4E10100EB0050A0E10400A0E10810A0E1810000EB991F
-S31A5000F1D90002E02C101BE50138A0E12338A0E1055883E1020054
-S31A5000F1EE55E10400002A010040E2075095E00100002A020055E1
-S31A5000F203E10100403206C880E16D0000EA0A0056E10020A08342
-S31A5000F21830200B8502C0A0816800008A010856E30620A0E103EA
-S31A5000F22D00002AFF0056E30800A0830000A093020000EA0104C5
-S31A5000F24256E31800A0231000A03330109FE53220A0E10230D1D0
-S31A5000F257E7003083E0200073E20800001A2C301BE506005AE19E
-S31A5000F26C0700539101C0A0E300C0A0310010A0E330100BE55064
-S31A5000F2810000EA28120150202060E23732A0E1166083E11770E0
-S31A5000F296A0E12C101BE53A52A0E13132A0E11110A0E12C100B76
-S31A5000F2ABE51AA083E12698A0E10628A0E12228A0E10500A0E1B6
-S31A5000F2C034200BE50910A0E1A00100EB0040A0E10500A0E10929
-S31A5000F2D510A0E1400000EB34201BE50080A0E1980202E02A38DF
-S31A5000F2EAA0E1044883E1020054E10500002A018048E20640949D
-S31A5000F2FFE00200002A020054E10180483206408430044062E0E6
-S31A5000F3140400A0E10910A0E18B0100EB0050A0E10400A0E10999
-S31A5000F32910A0E12B0000EB34201BE5900202E00A38A0E12338EC
-S31A5000F33EA0E1055883E1020055E10500002A010040E2065095AD
-S31A5000F353E00200002A020055E1010040320650853008C880E15C
-S31A5000F36805A062E02C08A0E12738A0E10018CCE10328C7E19195
-S31A5000F37D020EE0900202E0930101E0900303E0011092E001381A
-S31A5000F392832201E89EE02138A3E00A0053E10500008A2C101B04
-S31A5000F3A7E50030A0130130A003000053E301005E110000009A1F
-S31A5000F3BC01C04CE20020A0E330200BE53CC00BE530301BE54088
-S31A5000F3D1204BE238300BE5030092E9F0AF1BE9000051E31F00B8
-S31A5000F3E6000A0130A0E30020A0E3010050E11900003A01025182
-S31A5000F3FBE3000051310112A0310332A031FAFFFF3A020151E3EF
-S31A5000F410000051318110A0318330A031FAFFFF3A010050E101C4
-S31A5000F42500402003208221A10050E1A1004020A32082212101FB
-S31A5000F43A50E12101402023218221A10150E1A1014020A32182B2
-S31A5000F44F21000050E32332B0112112A011EFFFFF1A0200A0E17A
-S31A5000F4640EF0A0E104E02DE5640100EB0000A0E30080BDE80DC3
-S31A5000F479C0A0E1F0DF2DE904B04CE224D04DE20260A0E1018099
-S31A5000F48EA0E138000BE530C04BE234C00BE5007053E29700002D
-S31A5000F4A31A080056E11800009A010856E30300002AFF0056E34C
-S31A5000F4B80800A0830000A093020000EA010456E31800A0231076
-S31A5000F4CD00A033D4129FE53220A0E10230D1E7003083E02030F7
-S31A5000F4E273E23C300BE55200000A1663A0E138101BE5203063BD
-S31A5000F4F7E23C201BE53133A0E1188283E11112A0E138100BE5AD
-S31A5000F50C490000EA000056E30300001A0100A0E30210A0E1AE46
-S31A5000F521FFFFEB0060A0E1010856E30620A0E10300002AFF00A0
-S31A5000F53656E30800A0830000A093020000EA010456E31800A0F1
-S31A5000F54B231000A03354129FE53220A0E10230D1E7003083E015
-S31A5000F560203073E23C300BE5088066003100000A3C201BE53C7E
-S31A5000F575304BE2081093E83C101BE5202062E21663A0E13852E7
-S31A5000F58AA0E13C32A0E140200BE51CC1A0E138C00BE5188183F4
-S31A5000F59FE12678A0E106A8A0E12AA8A0E10500A0E10710A0E161
-S31A5000F5B4E50000EB0040A0E10500A0E10710A0E185FFFFEB9A35
-S31A5000F5C90002E02838A0E1044883E1020054E10300002A0640BA
-S31A5000F5DE94E00100002A020054E106408430044062E00400A0C8
-S31A5000F5F3E10710A0E1D40000EB0050A0E10400A0E10710A0E187
-S31A5000F60874FFFFEB9A0002E00838A0E12338A0E1055883E1025E
-S31A5000F61D0055E10300002A065095E00100002A020055E106509B
-S31A5000F6328530058062E006A8A0E12AA8A0E10800A0E12678A0A8
-S31A5000F647E10710A0E1BF0000EB0040A0E10800A0E10710A0E153
-S31A5000F65C5FFFFFEB9A0002E038C01BE52C38A0E1044883E102F0
-S31A5000F6710054E10300002A064094E00100002A020054E106406A
-S31A5000F6868430044062E00400A0E10710A0E1AD0000EB0050A03A
-S31A5000F69BE10400A0E10710A0E14DFFFFEB9A0002E038101BE50C
-S31A5000F6B00138A0E12338A0E1055883E1020055E10300002A062D
-S31A5000F6C55095E00100002A020055E106508530055062E0385088
-S31A5000F6DA0BE534201BE5000052E39600000A38301BE53CC01B2D
-S31A5000F6EFE5333CA0E148300BE50010A0E344100BE58B0000EA27
-S31A5000F704080057E10500009A48000BE544800BE540204BE20C36
-S31A5000F7190012E930C04BE2860000EA010857E30720A0E103000F
-S31A5000F72E002AFF0057E30800A0830000A093020000EA01045767
-S31A5000F743E31800A0231000A03358109FE53220A0E10230D1E711
-S31A5000F758003083E0203073E23C300BE51100001A38301BE50718
-S31A5000F76D0058E1060053910200003A06C053E00780C8E038C0B2
-S31A5000F7820BE534101BE5000051E36C00000A38201BE548200B73
-S31A5000F797E544800BE540204BE20C0012E901C0A0E1640000EA4A
-S31A5000F7AC281301503C301BE53CC01BE538201BE5203063E240D1
-S31A5000F7C1300BE540101BE53633A0E1177C83E1166CA0E1385100
-S31A5000F7D6A0E13231A0E1122CA0E138200BE5188C83E12798A0F5
-S31A5000F7EBE10738A0E12338A0E10500A0E14C300BE50910A0E1AA
-S31A5000F800520000EB0040A0E10500A0E10910A0E1F2FEFFEB4C59
-S31A5000F815201BE500A0A0E19A0202E02838A0E1044883E1020036
-S31A5000F82A54E10500002A01A04AE2074094E00200002A02005405
-S31A5000F83FE101A04A3207408430044062E00400A0E10910A0E1C0
-S31A5000F8543D0000EB0050A0E10400A0E10910A0E1DDFEFFEB4C20
-S31A5000F869201BE5900202E00838A0E12338A0E1055883E1020040
-S31A5000F87E55E10500002A010040E2075095E00200002A02005548
-S31A5000F893E10100403207508530058062E00A3880E12308A0E194
-S31A5000F8A826C8A0E10018C3E10C28C6E191020EE0900202E09C5E
-S31A5000F8BD0101E0900C0CE0011092E001C88C2201E89EE021C82C
-S31A5000F8D2ACE008005CE10500008A38101BE50030A0130130A06F
-S31A5000F8E703000053E301005E110200009A06205EE007C0CCE09A
-S31A5000F8FC02E0A0E134301BE5000053E30D00000A38201BE50E27
-S31A5000F9111052E00C80C8E03CC01BE5313CA0E140101BE5183192
-S31A5000F92683E148300BE5388CA0E144800BE534C01BE540204B12
-S31A5000F93BE20C0012E90C008CE830304BE2030093E8F0AF1BE94A
-S31A5000F950000051E32600000A0130A0E3010050E10EF0A0310132
-S31A5000F9650251E3000051310112A0310332A031FAFFFF3A020160
-S31A5000F97A51E3000051318110A0318330A031FAFFFF3A0020A094
-S31A5000F98FE3010050E101004020A10050E1A1004020E32082211E
-S31A5000F9A4210150E12101402063218221A10150E1A1014020E344
-S31A5000F9B921822103C0A0E1000050E32332B0112112A011EEFFC1
-S31A5000F9CEFF1A0E2212E20EF0A001EC0112E1A10180106C011261
-S31A5000F9E3E121018010EC0012E1A10080100EF0A0E104E02DE5A1
-S3155000F9F8010000EB0000A0E30080BDE80EF0A0E196
-S31A5000FA0853707572696F757320496E74657272757074212121D9
-S31A5000FA1D202D20766563746F723A2025642C20646174613A205B
-S31A5000FA3225780A000000303132333435363738396162636465C6
-S31A5000FA476600000000503031004F4B000065436F73204744422C
-S31A5000FA5C207374756273202D206275696C74204175672032349E
-S31A5000FA712032303030202F2030383A35383A31310000004530B9
-S31A5000FA863100453033004530320042303100303132333435368D
-S31A5000FA9B37383961626364656600000000303132333435363767
-S31A5000FAB038394142434445460000000030313233343536373811
-S31A5000FAC539414243444546000000003C42616420666F726D6190
-S31A5000FADA7420737472696E673A2000000000203A00003E0A009A
-S31A5000FAEF003C6E756C6C3E00003C4E6F74206120737472696E39
-S31A5000FB04673A2030780000003E000000253038583A200000258B
-S31A5000FB19303258000000002020000020000000207C0000256343
-S31A5000FB2E00007C0A00003C746F7069633E0048656C70206162E1
-S31A5000FB436F75742068656C703F0000000068656C70000000004E
-S31A5000FB585B2D77203C74696D656F75743E5D205B656E74727998
-S31A5000FB6D5D00004578656375746520636F6465206174206120AC
-S31A5000FB826C6F636174696F6E0000676F00003C6C6F6361746931
-S31A5000FB976F6E3E205B3C6C656E6774683E5D0000004469737084
-S31A5000FBAC6C617920286865782064756D702920612072616E67D3
-S31A5000FBC165206F66206D656D6F72790000000064756D70000010
-S31A5000FBD600005B4F4E207C204F46465D00004D616E616765206F
-S31A5000FBEB6D616368696E652063616368657300000063616368C4
-S31A5000FC00650000000A526564426F6F7428746D29206465627589
-S31A5000FC156720656E7669726F6E6D656E74202D206275696C74BB
-S31A5000FC2A2025732C2025730A000030383A35383A323600000018
-S31A5000FC3F00417567203234203230303000436F70797269676890
-S31A5000FC54742028432920323030302C20526564204861742C204B
-S31A5000FC69496E632E0A0A0052414D3A2025702D25700A003D3DBF
-S31A5000FC7E20457865637574696E6720626F6F742073637269703A
-S31A5000FC937420696E202564207365636F6E6473202D20656E742F
-S31A5000FCA86572205E4320746F2061626F72740A00526564426F48
-S31A5000FCBD6F743E20000000496C6C6567616C20636F6D6D616E46
-S31A5000FCD2643A2025730A00000000556E62616C616E636564205A
-S31A5000FCE7737472696E67210A00416D626967756F757320636F52
-S31A5000FCFC6D6D616E6420272573272C2063686F696365732061DF
-S31A5000FD1172653A20257300202573000A00000055736167653ACD
-S31A5000FD260A002020257325732025730A0000257320616C7265DA
-S31A5000FD3B6164207365740A0000696E76616C6964206E756D6269
-S31A5000FD506572202725732720666F722025730A00696E76616C28
-S31A5000FD65696420666C616720272563270A0000257320616C72B5
-S31A5000FD7A65616479207365740A006E6F2064656661756C742FF4
-S31A5000FD8F6E6F6E2D666C616720617267756D656E7473207375F9
-S31A5000FDA470706F727465640A000000006F6E00006F666600498B
-S31A5000FDB96E76616C6964206361636865206D6F64653A20257396
-S31A5000FDCE0A00636163686573203F0A00000025730A20202025C9
-S31A5000FDE3732025730A0000000044756D702077686174205B6C2F
-S31A5000FDF86F636174696F6E5D3F0A0000496E76616C69642073B3
-S31A5000FE0D7461727420616464726573733A2025730A0000496E16
-S31A5000FE2276616C6964206C656E6774682F656E642061646472A2
-S31A5000FE376573733A2025730A00776169742074696D656F75743D
-S31A5000FE4C000000007374617274696E67206164647265737300D9
-S31A5000FE6100000041626F757420746F2073746172742065786588
-S31A5000FE76637574696F6E206174202570202D2061626F72742040
-S31A5000FE8B77697468205E432077697468696E20256420736563D8
-S31A5000FEA06F6E64730A0000005B2D7261775D205B2D62203C6D37
-S31A5000FEB5656D5F616464723E5D5D004C6F616420612066696CC2
-S31A5000FECA65006C6F616400000000454C4620696D61676573203B
-S31A5000FEDF6E6F7420737570706F727465640A000000496E7661C9
-S31A5000FEF46C696420532D7265636F7264206174206F6666736523
-S31A5000FF09742025702C20696E7075743A2025630A000000426159
-S31A5000FF1E6420532D7265636F726420636F756E74206174206F28
-S31A5000FF3366667365742025700A000000004164647265737320A6
-S31A5000FF486F6666736574203D2025700A00000000417474656DB0
-S31A5000FF5D707420746F206C6F616420532D7265636F72642064EF
-S31A5000FF7261746120746F20616464726573733A202570205B6E0D
-S31A5000FF876F7420696E2052414D5D0A00002A2A2A205761726E98
-S31A5000FF9C696E672120436865636B73756D206661696C75726540
-S31A5000FFB1202D20416464723A20256C782C202530326C58203CA7
-S31A5000FFC63E202530326C580A0000456E74727920706F696E74C1
-S31A5000FFDB3A2025702C20616464726573732072616E67653A2013
-S31A5000FFF025702D25700A0000496E76616C696420532D726563A4
-S31A500100056F7264206174206F6666736574203078256C782C2091
-S31A5001001A747970653A2025780A00256308000A000000757361D4
-S31A5001002F67653A206C6F6164203C66696C655F6E616D653E2045
-S31A500100445B2D725D205B2D765D205B2D68203C686F73743E5DB9
-S31A50010059205B2D6D207B54465450207C205A4D4F44454D7D5DEB
-S31A5001006E205B2D62203C626173655F616464726573733E5D0A3B
-S31A5001008300766572626F7365006C6F61642072617720646174B8
-S31A50010098610000006C6F61642061646472657373000000006491
-S31A500100AD6F776E6C6F6164206D6F6465202854465450206F72A7
-S31A500100C2205A4D4F44454D290000686F7374206E616D652028F6
-S31A500100D74950206164647265737329000066696C65206E616DF9
-S31A500100EC65000000496E76616C69642049502061646472657330
-S31A50010101733A2025730A007A6D6F64656D0000746674700000D9
-S31A50010116000054465450206D6F646520726571756972657320CA
-S31A5001012B6120776F726B696E67206E6574776F726B0A000000B2
-S31A50010140496E76616C696420276D6F6465273A2025730A004637
-S31A50010155696C65206E616D65206D697373696E670A000043617B
-S31A5001016A6E2774206C6F616420272573273A2025730A0000005E
-S31A5001017F004572726F722072656164696E672068656164657287
-S31A500101942076696120544654503A2025730A0000536F72727926
-S31A500101A92C207A6D6F64656D20646F776E6C6F6164206E6F7429
-S31A500101BE2079657420617661696C61626C650A0000005261776E
-S31A500101D3206C6F61642072657175697265732061206D656D6F21
-S31A500101E8727920616464726573730A005261772066696C6520A6
-S31A500101FD6C6F616465642025702D25700A0000454C4600556E12
-S31A500102127265636F676E697A656420696D616765207479706551
-S31A500102273A20256C780A0000007B636D64737D00004D616E61E2
-S31A5001023C676520464C41534820696D6167657300666973005BC9
-S31A500102512D6C5D000000004D616E61676520636F6E66696775F7
-S31A50010266726174696F6E206B65707420696E20464C4153482026
-S31A5001027B6D656D6F727900000066636F6E666967005B2D665D57
-S31A5001029000000000496E697469616C697A6520464C4153482042
-S31A500102A5496D6167652053797374656D205B4649535D00696ED4
-S31A500102BA69740000000000000000446973706C617920636F6EC5
-S31A500102CF74656E7473206F6620464C41534820496D61676520EF
-S31A500102E453797374656D205B4649535D000000006C69737400B3
-S31A500102F9000000446973706C61792066726565205B61766169E5
-S31A5001030E6C61626C655D206C6F636174696F6E7320776974685E
-S31A50010323696E20464C41534820496D6167652053797374656D61
-S31A50010338205B4649535D000066726565000000002D66203C66A8
-S31A5001034D6C6173685F616464723E202D6C203C6C656E677468CD
-S31A500103623E00457261736520464C41534820636F6E74656E7458
-S31A50010377730000000065726173650000006E616D6500000000F6
-S31A5001038C446973706C617920616E20696D6167652066726F6D49
-S31A500103A120464C41534820496D6167652053797374656D205B3F
-S31A500103B64649535D000064656C65746500004C6F616420696DB3
-S31A500103CB6167652066726F6D20464C41534820496D6167652014
-S31A500103E053797374656D205B4649535D20696E746F2052414D98
-S31A500103F50000006C6F6164000000002D62203C6D656D5F6261B0
-S31A5001040A73653E202D6C203C6C656E6774683E205B2D66203C31
-S31A5001041F666C6173685F616464723E5D205B2D65203C656E741E
-S31A5001043472795F706F696E743E5D205B2D72203C72616D5F61D7
-S31A500104496464723E5D203C6E616D653E000000437265617465E3
-S31A5001045E20616E20696D6167650063726561746500002A2A2A2E
-S31A5001047320696E76616C696420276669732720636F6D6D616ECB
-S31A50010488643A2025730A0000666973200000000066756C6C2073
-S31A5001049D696E697469616C697A6174696F6E2C206572617365AF
-S31A500104B27320616C6C206F6620666C6173680000000041626FDD
-S31A500104C7757420746F20696E697469616C697A65205B666F72C9
-S31A500104DC6D61745D20464C41534820696D616765207379737471
-S31A500104F1656D002A2A2041626F727465640A002A2A2A20496E39
-S31A50010506697469616C697A6520464C41534820496D616765207D
-S31A5001051B53797374656D0A0000202020696E697469616C697AB8
-S31A500105306174696F6E206661696C65642025703A2025782825C6
-S31A5001054573290A00000000202020205761726E696E673A206490
-S31A5001055A657669636520636F6E74656E7473206E6F7420657233
-S31A5001056F617365642C20736F6D6520626C6F636B73206D61797E
-S31A50010584206E6F7420626520757361626C650A00526564426F41
-S31A500105996F7400526564426F6F745B6261636B75705D0052657F
-S31A500105AE64426F6F7420636F6E66696700004649532064697212
-S31A500105C36563746F72790000004572726F722077726974696E6F
-S31A500105D86720696D6167652064657363726970746F72732061DA
-S31A500105ED742025703A202578282573290A00004E616D652020CE
-S31A50010602202020202020202020202020464C4153482061646455
-S31A50010617722020204D656D2061646472202020204C656E677451
-S31A5001062C6820202020456E74727920706F696E740A00000025EF
-S31A500106412D313673202030782530386C58202020307825303878
-S31A500106566C58202030782530366C58202030782530386C580AFA
-S31A5001066B00202030782530386C58202E2E2030782530386C5855
-S31A500106800A0000006D656D6F7279206261736520616464726590
-S31A5001069573730072616D20626173652061646472657373000012
-S31A500106AA0000656E74727920706F696E74206164647265737362
-S31A500106BF00464C415348206D656D6F7279206261736520616408
-S31A500106D464726573730000006C656E677468000066696C652057
-S31A500106E96E616D65000000696E76616C696420617267756D657C
-S31A500106FE6E7473000000726571756972656420706172616D6544
-S31A50010713746572206D697373696E670000496E76616C6964202E
-S31A50010728464C41534820616464726573733A2025702028257322
-S31A5001073D290A0020202076616C69642072616E67652069732064
-S31A5001075225702D25700A00000000496E76616C69642052414D13
-S31A5001076720616464726573733A2025700A000000004E616D65A6
-S31A5001077C20697320746F6F206C6F6E672C206D757374206265D7
-S31A50010791206C657373207468616E2025642063686172730A0076
-S31A500107A6000043616E2774206C6F6361746520256C6420627992
-S31A500107BB746573206672656520696E20464C4153480A00000035
-S31A500107D0496D61676520666F756E642C2062757420464C4153C1
-S31A500107E548206164647265737320696E636F72726563740A0067
-S31A500107FA0000416E20696D616765206E616D6564202725732796
-S31A5001080F20657869737473000043616E27742070726F67726165
-S31A500108246D207468697320726567696F6E202D20636F6E7461FD
-S31A50010839696E7320636F646520696E20757365210A000043611B
-S31A5001084E6E277420657261736520726567696F6E206174202527
-S31A50010863703A202578282573290A00000043616E277420707220
-S31A500108786F6772616D20726567696F6E2061742025703A202531
-S31A5001088D78282573290A004572726F722065726173696E672061
-S31A500108A261742025703A202578282573290A000000004572724D
-S31A500108B76F722070726F6772616D6D696E672061742025703A4D
-S31A500108CC202578282573290A000000006D697373696E67206195
-S31A500108E17267756D656E7400000000696D616765206E616D65E5
-S31A500108F6000044656C65746520696D616765202725732700001A
-S31A5001090B004E6F20696D616765202725732720666F756E640A54
-S31A50010920000000004E6F742061206C6F616461626C6520696D6F
-S31A500109356167650A000000464C4153483A2064726976657220AB
-S31A5001094A696E6974206661696C6564212C207374617475733ABD
-S31A5001095F2025780A00464C4153483A202570202D2025702C20BA
-S31A50010974256420626C6F636B73206F66202570206279746573FF
-S31A500109892065612E0A0000746F6F2066657720617267756D658F
-S31A5001099E6E7473000000756E7265636F676E697A656420636F99
-S31A500109B36D6D616E640000000052756E20736372697074206160
-S31A500109C87420626F6F740000626F6F745F736372697074004291
-S31A500109DD6F6F742073637269707400626F6F745F736372697073
-S31A500109F2745F6461746100000000426F6F7420736372697074E3
-S31A50010A072074696D656F757400626F6F745F7363726970745F55
-S31A50010A1C74696D656F75740025733A2000000000257320007449
-S31A50010A317275650000000066616C7365000000256420003078B1
-S31A50010A462530325800003A000000200000003F3F00000A000083
-S31A50010A5B002E2E2025730A0000456E746572207363726970745E
-S31A50010A702C207465726D696E617465207769746820656D707453
-S31A50010A8579206C696E650A000000003E3E20006C6973742063DF
-S31A50010A9A6F6E66696775726174696F6E206F6E6C79002A2A2085
-S31A50010AAF696E76616C696420656E7472790A000000557064610E
-S31A50010AC4746520526564426F6F74206E6F6E2D766F6C617469F7
-S31A50010AD96C6520636F6E66696775726174696F6E000000457291
-S31A50010AEE726F722077726974696E6720636F6E666967206461AA
-S31A50010B0374612061742025703A202578282573290A000000001D
-S31A50010B185265717565737420666F7220636F6E66696720766194
-S31A50010B2D6C75652027257327202D2077726F6E67207479706594
-S31A50010B420A0043616E27742066696E6420636F6E6669672076A3
-S31A50010B57616C756520272573270A000000464C41534820636F1B
-S31A50010B6C6E66696775726174696F6E20636865636B73756D20E4
-S31A50010B816572726F72206F7220696E76616C6964206B65790A63
-S31A50010B960000657468300000000073635F6C7065000043462063
-S31A50010BAB6361726420776F6E277420676F207265616479210ADF
-S31A50010BC0000000004E6F742061205343204C50452C20736F72C0
-S31A50010BD572790A000000000A00000025733A2025732025732053
-S31A50010BEA25730A000000436F756C646E27742066696E642043D9
-S31A50010BFF4F5220706F696E746572210A0043616E2774207061FF
-S31A50010C14727365204349530A0000000043616E27742066657415
-S31A50010C29636820636F6E66696720696E666F0A00000000436F76
-S31A50010C3E6D7061637420466C61736820636172642072656D6F9A
-S31A50010C53766564210A000000002E2E2E2057616974696E67202E
-S31A50010C68666F72206E6574776F726B20636172643A2000002E6D
-S31A50010C7D00000025730A0073635F6C70655F4275664576656EE9
-S31A50010C9274003031323334353637383900003031323334353610
-S31A50010CA737383961626364656600000000303132333435363748
-S31A50010CBC3839414243444546000000005E430A003078253038E6
-S31A50010CD1583A20000000002530325800000000202000002000C6
-S31A50010CE60000207C0000256300007C0A0000202D206172652033
-S31A50010CFB796F7520737572652028792F6E293F20004E45544143
-S31A50010D1053434949000000004F43544554000000556E6B6E6FC5
-S31A50010D25776E206572726F7200000066696C65206E6F7420669C
-S31A50010D3A6F756E6400006163636573732076696F6C6174696F9E
-S31A50010D4F6E000000006469736B2066756C6C206F7220616C6CF2
-S31A50010D646F636174696F6E206578636565646564000000006976
-S31A50010D796C6C6567616C2054465450206F7065726174696F6E4E
-S31A50010D8E0000756E6B6E6F776E207472616E73666572204944B7
-S31A50010DA30066696C6520616C7265616479206578697374730082
-S31A50010DB86E6F20737563682075736572000000006F7065726129
-S31A50010DCD74696F6E2074696D6564206F757400736F6D6520730E
-S31A50010DE26F7274206F66206E6574776F726B206572726F7200E7
-S31A50010DF700696E76616C696420706172616D65746572000000C8
-S31A50010E0C70726F746F636F6C2076696F6C6174696F6E000066AD
-S31A50010E21696C65206973206C6172676572207468616E206275D0
-S31A50010E3666666572000047444220636F6E6E656374696F6E2070
-S31A50010E4B706F7274006764625F706F7274000000004E65747787
-S31A50010E606F726B20646562756720617420626F6F742074696D80
-S31A50010E756500006E65745F646562756700000055736520424F21
-S31A50010E8A4F545020666F72206E6574776F726B20636F6E666949
-S31A50010E9F6775726174696F6E00626F6F74700000004C6F6361DB
-S31A50010EB46C204950206164647265737300000000626F6F747083
-S31A50010EC95F6D795F69700044656661756C7420736572766572C4
-S31A50010EDE2049502061646472657373000000626F6F74705F73F3
-S31A50010EF365727665725F69700025732E25640A00006E65745F38
-S31A50010F08696F5F7772697465000000006E65745F696F5F726567
-S31A50010F1D6164004E6F206E6574776F726B20696E7465726661B3
-S31A50010F3263657320666F756E640A0000000043616E277420679E
-S31A50010F47657420424F4F545020696E666F202D206E6574776F5B
-S31A50010F5C726B2064697361626C6564210A00000049503A2025B1
-S31A50010F717300002C2044656661756C74207365727665723A207F
-S31A50010F8625730A00000025642E25642E25642E256400257320F7
-S31A50010F9B2D2063616C6C6564207769746820696E76616C696455
-S31A50010FB0204349533A2025780A00000063665F70617273655F33
-S31A50010FC563667461626C650000000063665F70617273655F63EA
-S31A50010FDA6F6E6669670050434D4349413A20496E76616C6964CA
-S31A50010FEF20736C6F742025640A000000002E2E2E2045726173CC
-S31A50011004652066726F6D2025702D25703A2000002E0000000A3E
-S31A500110190000002E2E2E2050726F6772616D2066726F6D2025D0
-S31A5001102E702D25702061742025703A2000004E6F206572726F8B
-S31A5001104372202D206F7065726174696F6E20636F6D706C65747D
-S31A5001105865000000496E76616C696420464C4153482061646429
-S31A5001106D726573730000004572726F7220747279696E672074FF
-S31A500110826F2065726173650000004572726F7220747279696E03
-S31A500110976720746F206C6F636B2F756E6C6F636B004572726F67
-S31A500110AC7220747279696E6720746F2070726F6772616D004747
-S31A500110C1656E65726963206572726F72000000446576696365B3
-S31A500110D62F726567696F6E2069732077726974652D70726F74C2
-S31A500110EB656374656400000000464C415348207375622D7379A3
-S31A500111007374656D206E6F7420696E697469616C697A656400A3
-S31A50011115000000556E6B6E6F776E206572726F7200000045747B
-S31A5001112A6865726E65742073656E643A0A0025733A207061639F
-S31A5001113F6B6574206F662025642062797465732064726F7070D6
-S31A5001115465640A006574685F6472765F7265637600000000451C
-S31A50011169746865726E657420726563763A0A005152590043616C
-S31A5001117E6E2774206964656E7469667920464C4153482C207333
-S31A500111936F7272790A00000000457272203D2025780A000000CD
-S31A500111A825733A2043616E27742066696E6420616464726573E8
-S31A500111BD73206F66207365727665720A0000005F5F7564705F37
-S31A500111D273656E64746F000000007564705F7265637666726F85
-S31A500111E76D202D2064726F70706564207061636B6574206F6647
-S31A500111FC2025642062797465730A00005F5F656E65745F706FE5
-S31A500112116C6C3A206E6F206D6F726520627566666572730A0078
-S31A500112260000000102020303030304040404040404040505051C
-S31A5001123B050505050505050505050505050606060606060606D6
-S31A50011250060606060606060606060606060606060606060606B4
-S31A500112650606060707070707070707070707070707070707078D
-S31A5001127A07070707070707070707070707070707070707070775
-S31A5001128F07070707070707070707070707070707070707070760
-S31A500112A40707070708080808080808080808080808080808083A
-S31A500112B908080808080808080808080808080808080808080821
-S31A500112CE0808080808080808080808080808080808080808080C
-S31A500112E3080808080808080808080808080808080808080808F7
-S31A500112F8080808080808080808080808080808080808080808E2
-S31A5001130D080808080808080808080808080808080808080808CC
-S31A5001132208080808080800010202030303030404040404040402
-S31A50011337040505050505050505050505050505050506060606DE
-S31A5001134C060606060606060606060606060606060606060606B7
-S31A5001136106060606060606070707070707070707070707070794
-S31A5001137607070707070707070707070707070707070707070778
-S31A5001138B07070707070707070707070707070707070707070763
-S31A500113A007070707070707070808080808080808080808080841
-S31A500113B508080808080808080808080808080808080808080824
-S31A500113CA0808080808080808080808080808080808080808080F
-S31A500113DF080808080808080808080808080808080808080808FA
-S31A500113F4080808080808080808080808080808080808080808E5
-S31A50011409080808080808080808080808080808080808080808CF
-S30F5001141E080808080808080808081D
-S31A5001142800000000B4430050B4430050B4430050B4430050B488
-S31A5001143D430050B4430050B4430050B4430050B4430050B4439D
-S31A500114520050B4430050B4430050B4430050B4430050B44300CB
-S31A5001146750B4430050B4430050B4430050B4430050B443005066
-S31A5001147CB4430050B4430050B4430050B4430050B4430050B4ED
-S31A50011491430050B4430050B4430050B4430050B4430050B44349
-S31A500114A60050B4430050B4430050B4430050B4430050B4430077
-S31A500114BB50B4430050B4430050B4430050B4430050B443005012
-S31A500114D0B4430050B4430050B4430050B4430050B4430050B499
-S31A500114E5430050B4430050B4430050B4430050B4430050B443F5
-S31A500114FA0050B4430050B4430050B4430050B4430050B4430023
-S31A5001150F50B4430050B4430050B443005000000000000000004B
-S31A500115240000000000000000000000000000000000000000005B
-S31A5001153900000000000000000000000000000000000000000046
-S31A5001154E00000000000000000000000000000000000000000031
-S31A500115630000000000000000000000000000000000000000001C
-S31A5001157800000000000000000000000000000000000000000007
-S31A5001158D000000000000000000000000000000000000000000F2
-S31A500115A2000000000000000000000000000000000000000000DD
-S31A500115B7000000000000000000000000000000000000000000C8
-S31A500115CC000000000000000000000000000000000000000000B3
-S31A500115E10000000000000000000000000000000000000000009E
-S31A500115F600000000000000000000000000000000000000000089
-S31A5001160B00000000000000000000000000000000000000000073
-S31A500116200000000000000000000000000000000000000000005E
-S31A5001163500000000000000000000000000000000000000000049
-S31A5001164A00000000000000000000000000000000000000000034
-S31A5001165F0000000000000000000000000000000000000000001F
-S31A500116740000000000000000000000000000000000000000000A
-S31A50011689000000000000000000000000000000000000000000F5
-S31A5001169E000000000000000000000000000000000000000000E0
-S31A500116B3000000000000000000000000000000000000000000CB
-S31A500116C8000000000000000000000000000000000000000000B6
-S31A500116DD000000000000000000000000000000000000000000A1
-S31A500116F2000000000000000000002000000000000000502500F7
-S31A5001170750A0250050000000000000000000000000FFFFFFFF15
-S31A5001171C0000000000000000000000000C3300500000000000D2
-S31A500117310000000041010000000000000000000000000000000A
-S31A500117460000FEFFFFFFFEFFFFFF000000000000000000000140
-S31A5001175B80E80300000F00000000000580E80300001100000027
-S31A5001177000000000000000007C2F2D5C7C2D000000000000C46C
-S31A500117859300509093005094940050AC940050209500505C97A2
-S31A5001179A0050FC98005094990050CC830000000000005C830004
-S31A500117AF00D0430100980B0150000000000000000000000000C6
-S31A500117C408881234567800000000000000000000141E000014CF
-S31A500117D91E0000F4010000000000000000000000000000000091
-S31A500117EE000000000000B0C400507CC80050D4C600500000004D
-S31A5001180300000000000000000000000000000000000000000079
-S31A5001181800000000000000000000000000000000000000000064
-S31A5001182D00000000000000000000000000000068040150580436
-S31A50011842015000040150847A0050BC0301508C030150840301CE
-S31A5001185750F08100507C03015064030150480301501880005008
-S31A5001186C40030150FC020150C0020150D8780050B802015094DB
-S31A500118810201508C02015040750050F4020150C4020150C002A4
-S31A50011896015044780050F8030150C403015084030150E08300EA
-S31A500118AB50FCFB0050E4FB0050D8FB005044670050D0FB0050D2
-S31A500118C0A8FB005090FB0050346900504C0201503802015030A7
-S31A500118D5020150108600508402015058020150500201501C8BA2
-S31A500118EA00508CFB005070FB005058FB0050E469005050FB0025
-S31A500118FF503CFB005034FB0050E4680050CCFE0050C0FE005063
-S31A50011914A8FE0050E8700050D0090150BC090150000000000188
-S31A5001192900000001000000E8090150DC090150D00901500100AE
-S31A5001193E000004000000100A0150FC090150D00901500100004D
-S31A500119530002000000A80E0150840E015000000000010000003B
-S31A5001196801000000C40E0150B00E0150A80E01500000000005D4
-S31A5001197D000000EC0E0150D00E0150A80E015000000000050078
-S31A500119920000500E01503C0E015000000000010000000200009C
-S31A500119A700780E01505C0E015000000000010000000100000040
-S31A500119BC8C8E005060B70050A00B0150589300508483000000B0
-S30C500119D1000000B84C005064
+S31A5000015512A0E398259FE5002081E5150000EA040000A07FAA17
+S31A5000016AAAAA080000A0AAAAAAAA0C0000A0AAAAAAAA1800001A
+S31A5000017FA04A994A991C0000A02703FC49200000A07FAAAAAA47
+S31A50000194240000A0AAAAAAAA280000A0AAAAAAAA300000A0CC88
+S31A500001A9AFCCAF000000A0547254720000000000000000301550
+S31A500001BE9FE51020A0E3002081E52C159FE50321A0E302D0815A
+S31A500001D3E1C01200EB1214A0E3E4249FE5022A82E30129C2E38E
+S31A500001E8002081E50C259FE57110A0E3101F01EE02F0A0E100DC
+S31A500001FD00A0E10000A0E10000A0E11214A0E3B4249FE5022AE3
+S31A50000212C2E30129C2E3002081E5E0149FE5002081E5DC149FFA
+S31A50000227E5009081E50000A0E3D4149FE5082091E5082080E577
+S31A5000023C0000A0E364149FE5282091E5282080E5182091E518A7
+S31A500002512080E5382091E5382080E51C2091E51C2080E53C2083
+S31A5000026691E53C2080E50C2091E50C2080E52C2091E52C208035
+S31A5000027BE5102091E5102080E5302091E5302080E50000A0E3FA
+S31A5000029014149FE5002091E5002080E56C249FE5202080E5E89B
+S31A500002A5339FE5E8439FE5E8539FE5050054E10500000A04304C
+S31A500002BA43E2044044E20400B3E50400A4E5050054E1FBFFFFEE
+S31A500002CF1AA0D39FE5D200A0E300F029E19CD39FE5D100A0E31D
+S31A500002E400F029E18CD39FE5DB00A0E300F029E184D39FE5D3CC
+S31A500002F900A0E300F029E100F069E16CD39FE578139FE5782376
+S31A5000030E9FE50000A0E3020051E10200000A040081E402005181
+S31A50000323E1FCFFFF1A951100EBEB1900EB0000A0E3D8139FE508
+S31A50000338042091E5042080E5242091E5242080E5232100EB6D38
+S31A5000034D1100EB843700EBFEFFFFEAD300A0E300F029E1B1FFBD
+S31A50000362FFEA0BB0ADDE14D39FE501582DE900004FE101002DC9
+S31A50000377E90DC0A0E100000FE11F00C0E3130080E300F029E1C2
+S31A5000038C0DB0A0E1DCD29FE50D005BE10300008ACC029FE5006E
+S31A500003A1005BE10000009A0BD0A0E14CD04DE2FF0F8DE81F00D2
+S31A500003B69CE8200010E304404402024044123C008DE500108DD8
+S31A500003CBE52C208DE540308DE538408DE534E08DE54C008CE218
+S31A500003E030B08DE50140A0E34B0000EA5CD04DE2FF0F8DE80089
+S31A500003F5004FE1200010E304304E0202304E123C008DE540C096
+S31A5000040A8DE538308DE534E08DE55C008DE230008DE50240A066
+S31A5000041FE33D0000EA58D29FE504E04EE201582DE900004FE107
+S31A5000043401002DE90DC0A0E100000FE11F00C0E3130080E300D0
+S31A50000449F029E10DB0A0E11CD29FE50D005BE10300008A0C02BA
+S31A5000045E9FE500005BE10000009A0BD0A0E14CD04DE2FF0F8D97
+S31A50000473E81F009CE83C008DE500108DE52C208DE540308DE5C3
+S31A5000048838408DE534E08DE54C008CE230B08DE50340A0E31EA9
+S31A5000049D0000EADCD19FE504E04EE201582DE900004FE1010025
+S31A500004B22DE90DC0A0E100000FE11F00C0E3130080E300F0293A
+S31A500004C7E10DB0A0E1A0D19FE50D005BE10300008A90019FE5CB
+S31A500004DC00005BE10000009A0BD0A0E14CD04DE2FF0F8DE81F96
+S31A500004F1009CE83C008DE500108DE52C208DE540308DE53840D4
+S31A500005068DE534E08DE54C008CE230B08DE50440A0E3FFFFFFC2
+S31A5000051BEA44408DE50D00A0E1D51000EB0DC0A0E100000FE1F9
+S31A50000530C00080E300F029E10000A0E10000A0E134E09CE5307C
+S31A50000545D09DE51F00C0E3120080E300F029E10CD0A0E138E053
+S31A5000055A9DE53C009DE540C09DE500F069E1FF0F9DE80EF0B0F9
+S31A5000056FE104D19FE504E04EE201582DE900004FE101002DE91D
+S31A50000584040000EAF0D09FE504E04EE201582DE900004FE10126
+S31A50000599002DE90DC0A0E100000FE11F00C0E3D30080E300F0BB
+S31A500005AE29E10DB0A0E14CD04DE2FF0F8DE81F009CE83C008D60
+S31A500005C3E500108DE52C208DE540308DE538408DE534E08DE556
+S31A500005D830B08DE50D90A0E10900A0E1311100EB0040A0E104CC
+S31A500005ED00A0E120219FE5009082E5A4109FE5041191E79820E9
+S31A500006029FE5046192E70920A0E10FE0A0E106F0A0E10DC0A02D
+S31A50000617E100000FE1C00080E300F029E10000A0E10000A0E188
+S31A5000062C34E09CE530D09DE51F00C0E3120080E300F029E10C0F
+S31A50000641D0A0E138E09DE53C009DE540C09DE500F069E1FF0FDB
+S31A500006569DE80EF0B0E10EF0A0E100000FE10EF0A0E10D00A08A
+S31A5000066BE10EF0A0E1808A0000808E0000809E00008089000085
+S31A50000680008A0000808A000000890000D0460100D04601008C38
+S31A50000695410150008000000089000004800000F4800000E48102
+S31A500006AA0000000000500080000065436F73203A20004A616EF8
+S31A500006BF203330203230303100E414A00004000490FCA7070888
+S31A500006D40800049000A407080000049014000290A086010064A7
+S31A500006E901005000000050600002800400029055725472809EE2
+S31A500006FE0000080200506001000064010000000000502C0200F3
+S31A500007135000000050B04401000DC0A0E170D82DE904B04CE258
+S31A50000728BCD04DE2BC304BE2C0204BE200308DE50040A0E1041E
+S31A5000073D208DE530604BE2E4319FE50600A0E108308DE50150E7
+S31A50000752A0E1D8319FE57710A0E300C093E50120A0E3C4C00BB9
+S31A50000767E50030A0E3293500EB0120A0E300208DE5C4304BE2EF
+S31A5000077C04308DE50400A0E1AC319FE50040A0E30C308DE50510
+S31A5000079110A0E108408DE50630A0E1293500EB040050E1670016
+S31A500007A6000AC0301BE5040053E10C00000A80019FE5C4101BAC
+S31A500007BBE5BC201BE57C2400EB38004BE2BC201BE50810A0E3AB
+S31A500007D0823262E0032182E08221A0E1D92500EB020070E35789
+S31A500007E500000A50C19FE550319FE50420A0E103306CE00300DE
+S31A500007FA52E10600002AB8004BE20310A0E104309CE402318051
+S31A5000080FE7012082E2010052E1FAFFFF3A00300FE100400FE15C
+S31A50000824C04084E304F029E10E02A0E3021A80E2202090E4003F
+S31A500008390031E1FCFFFF1A0000A0E3160F07EE9A0F07EE101FC4
+S31A5000084E11EE011AC1E3101F01EE0010A0E3151F07EE0000A007
+S31A50000863E10000A0E10000A0E10000A0E10000A0E10000A0E1C4
+S31A50000878101F11EE0C10C1E3101F01EE0010A0E3161F07EE0E3E
+S31A5000088D02A0E3021A80E2202090E4000031E1FCFFFF1A000023
+S31A500008A2A0E3160F07EE9A0F07EE0010A0E3151F07EE151F08B8
+S31A500008B7EE0000A0E10000A0E10000A0E10000A0E10000A0E163
+S31A500008CC0000A0E10010A0E3161F07EE171F08EEC4301BE5B8AB
+S31A500008E1204BE2032182E20F32C3E3033183E20350A0E1021071
+S31A500008F6A0E101F0A0E100000FE100F069E11F00C0E312008026
+S31A5000090BE300F029E105E0A0E105D0A0E10010A0E3101F01EE37
+S31A500009200000A0E31910A0E30EF0B0E1050000EA382001509086
+S31A50000935450100482001505C200150FC0800504809005070A87E
+S31A5000094A1BE90DC0A0E100D82DE908009FE504B04CE21524005B
+S31A5000095FEB00A81BE9B42001500DC0A0E1F0D92DE904B04CE262
+S31A500009740150A0E10070A0E30530A0E1015045E2070053E100EA
+S31A5000098980A0E10260A0E1470000DA0FE0A0E108F0A0E1FF40D6
+S31A5000099E00E20FE0A0E108F0A0E10010A0E3302044E241304465
+S31A500009B3E2050053E309005283FFE000E20200009A613044E2CA
+S31A500009C8050053E30000008A0110A0E3000051E32F00000A00FE
+S31A500009DDC0A0E330004EE2FF1000E241204EE2FF3002E2050072
+S31A500009F253E3090051830200009A61304EE2050053E3000000EF
+S31A50000A078A01C0A0E300005CE32100000A0774A0E100C0A0E30D
+S31A50000A1C301044E2FF3001E2090053E301C0A0910600009A61C5
+S31A50000A313044E2050053E357C044920200009A413044E20500A4
+S31A50000A4653E337C044920010A0E3FF3000E2090053E30010A0AF
+S31A50000A5B910600009A61304EE2050053E357104E920200009A20
+S31A50000A70FF3002E2050053E337104E920C2281E1027087E1003C
+S31A50000A850056E30500000A003096E5023083E0003086E50100E2
+S31A50000A9A00EA0000E0E3F0A91BE90530A0E1015045E200005326
+S31A50000AAFE3B7FFFFCA0700A0E1F0A91BE90DC0A0E1F0DF2DE922
+S31A50000AC40120A0E304B04CE268D04DE288200BE50070A0E38CC3
+S31A50000AD9700BE50030E0E390300BE50790A0E180100BE5008097
+S31A50000AEEA0E1980000EA530052E30300000A18029FE50710A0B0
+S31A50000B03E1AB2300EB960000EA0FE0A0E108F0A0E1027087E2A9
+S31A50000B1800C0A0E10800A0E10110A0E37C204BE20030A0E37C1C
+S31A50000B2D300BE5FF600CE28BFFFFEB005050E27CA04BE20300AE
+S31A50000B4200AAD4019FE50710A0E1992300EB840000EA017087A0
+S31A50000B57E2303046E2090053E303F19F97670000EA480D00506A
+S31A50000B6C900B0050900B0050900B0050080D0050080D0050088B
+S31A50000B810D0050C40C0050C40C0050C40C00500800A0E12F1084
+S31A50000B9646E20A20A0E171FFFFEB0040A0E12F3047E288201BBB
+S31A50000BABE5067083E084400BE5000052E30A00000A80301BE574
+S31A50000BC0000053E30400000A039064E050019FE50910A0E177C9
+S31A50000BD52300EB000000EA80901BE50020A0E388200BE5383109
+S31A50000BEA9FE5001093E5094084E090301BE5042069E003005265
+S31A50000BFFE10230A03190300BE5010054E10300003A14319FE5BB
+S31A50000C14002093E5020054E10300009A08019FE50410A0E16285
+S31A50000C292300EB4D0000EA2E3085E2035066E0057087E00530AC
+S31A50000C3EA0E1015045E2000053E3080000DA0800A0E10110A000
+S31A50000C53E30A20A0E142FFFFEB0530A0E1015045E20100C4E4A6
+S31A50000C68000053E3F6FFFFCA0800A0E10110A0E30020A0E33934
+S31A50000C7DFFFFEB017087E20000E0E17C205BE5FF3000E27C20FF
+S31A50000C920BE5020053E10300000A84101BE58C009FE5432300BA
+S31A50000CA7EB2E0000EA8C201BE5043069E0020053E10320A0219C
+S31A50000CBC8C200BE5200000EA0800A0E13B1066E20A20A0E1243C
+S31A50000CD1FFFFEB5C309FE590201BE50040A0E154009FE5004036
+S31A50000CE683E58C301BE50410A0E1302300EB0FE0A0E108F0A0A4
+S31A50000CFBE1000050E3FBFFFFCA170000EA0710A0E12C009FE56E
+S31A50000D100620A0E1272300EB120000EAD0200150FC20015020D2
+S31A50000D2521015088450100F44401003821015074210150904585
+S31A50000D3A0100B0210150D8210150017087E20FE0A0E108F0A0FF
+S31A50000D4FE10A0050E3FAFFFF1A0FE0A0E108F0A0E1002050E2CE
+S31A50000D6462FFFFCAF0AF1BE90DC0A0E130D82DE9D4309FE5045F
+S31A50000D79B04CE2085193E50340A0E1000055E3010000AA0000B9
+S31A50000D8EE0E330A81BE92600001A143194E5000053E30900001E
+S31A50000DA30A183194E5A4209FE50310D2E7A0009FE5013083E24B
+S31A50000DB8183184E5FD2200EB183194E5060053E3185184850C98
+S31A50000DCD3194E5FF0053E3050000CA143194E5000053E3E9FF31
+S31A50000DE2FF0A70009FE5F22200EBE6FFFFEA043084E20300A09F
+S31A50000DF7E1011CA0E3043184E5112E84E20FE0A0E100F094E5F4
+S31A50000E0C0C0184E5080184E5000050E3050000CA143194E500D3
+S31A50000E210053E3D8FFFF0A2C009FE5E12200EBD5FFFFEA0831BC
+S31A50000E3694E5042194E5013043E2083184E50100D2E4042184E2
+S31A50000E4BE530A81BE960420100A08300000422015008220150C3
+S31A50000E600DC0A0E100D82DE920309FE504B04CE200C0A0E308EA
+S31A50000E75C183E5012CA0E30C2183E5000083E5141183E518C1D6
+S31A50000E8A83E500A81BE9604201000DC0A0E100D82DE914309F27
+S31A50000E9FE5042083E2042183E50C1193E504B04CE2081183E5F5
+S31A50000EB400A81BE9604201000DC0A0E1F0DD2DE90C20A0E304A0
+S31A50000EC9B04CE2C0D04DE20080A0E130604BE20600A0E100409C
+S31A50000EDEA0E3B8400BE50170A0E1D0400BE50410A0E13721005F
+S31A50000EF3EB0150A0E3BA524BE1BC424BE1B0304BE200308DE5C4
+S31A50000F0804A0A0E104A08DE5D4339FE50C20A0E3B8224BE1768D
+S31A50000F1D10A0E308308DE5AC404BE2C0339FE50400A0E114C043
+S31A50000F3293E50A20A0E130C00BE50230A0E3343300EBB4304B1B
+S31A50000F47E200308DE594004BE29C339FE57210A0E308308DE5F8
+S31A50000F5C0A20A0E104A08DE50230A0E32A3300EBB8304BE20057
+S31A50000F71308DE5BC204BE204208DE57C004BE270339FE5621092
+S31A50000F86A0E308308DE50520A0E10A30A0E11F3300EBC0304BFA
+S31A50000F9BE200308DE5C4204BE204208DE564004BE248339FE530
+S31A50000FB06D10A0E308308DE50520A0E10530A0E1143300EBC8D6
+S31A50000FC5304BE200308DE5CC204BE204208DE54C004BE2203347
+S31A50000FDA9FE56810A0E308308DE50520A0E10530A0E1093300EB
+S31A50000FEFEB0530A0E300308DE5D0204BE224008DE90800A0E112
+S31A50001004F8329FE50710A0E10C308DE50520A0E10430A0E10A28
+S31A500010193300EB000050E3E500000ACC301BE5000053E30800F2
+S31A5000102E000AC8001BE50610A0E17E2C00EB000050E303000023
+S31A500010431ABC029FE5C8101BE5592200EBD90000EAC4301BE5F1
+S31A50001058000053E33400000AC0401BE5014084E20400A0E16627
+S31A5000106D2200EB0020A0E190129FE50400A0E1BD2200EB0000F5
+S31A5000108250E31900001AC0001BE50020D0E5411042E2203082C1
+S31A50001097E2FF3003E2190051E30230A081790053E30010A0E118
+S31A500010AC0800000A020000CA780053E30300000A080000EA7AD4
+S31A500010C10053E30400000A050000EA01A0A0E3170000EA02A0CA
+S31A500010D6A0E3150000EA03A0A0E3130000EA24029FE53222000C
+S31A500010EBEBB20000EAC0001BE518129FE5712200EB000050E3F4
+S31A500011000700001A0C329FE5002093E500A0A0E1000052E306AD
+S31A5000111500001AFC019FE5252200EBA50000EAE4019FE5C010DA
+S31A5000112A1BE5212200EBA10000EA00005AE30800001AD0301B27
+S31A5000113FE5000053E30500001AD0019FE5192200EBCC019FE53F
+S31A50001154CC119FE5162200EB960000EABC301BE5000053E30BFF
+S31A5000116900000AB8219FE5B8101BE5003092E5030051E103000D
+S31A5000117E003AA8319FE5002093E5020051E10200009A9C019FCB
+S31A50001193E5072200EB870000EA00005AE31000001A0610A0E189
+S31A500011A80120A0E3D4C04BE20C30A0E1D0001BE50C80A0E1D607
+S31A500011BD2A00EB005050E2030000AAD4001BE5D0401BE5DE2B96
+S31A500011D200EB0E0000EA58019FE5B0101BE51EFFFFEB12000019
+S31A500011E7EA0A10A0E1D4304BE20320A0E1D0001BE50380A0E16F
+S31A500011FCC93600EB005050E2070000AAD4001BE5D0401BE5D9AE
+S31A500012113700EB0020A0E11C019FE50410A0E1E42100EB640025
+S31A5000122600EA10019FE50010A0E30AFFFFEB0040A0E304719F81
+S31A5000123BE534604BE2010000EA0450C6E7014084E2030054E3D5
+S31A500012500400008AC4FEFFEB005050E2F8FFFFAA103197E5D446
+S31A50001265300BE5000055E3480000BA07FFFFEBB4301BE50000F0
+S31A5000127A53E31100000ABC301BE5000053E30200001AB4009F27
+S31A5000128FE5C82100EB3E0000EAB8401BE5A8609FE5000000EAA5
+S31A500012A40150C4E4AFFEFFEB005050E2FBFFFFAA0600A0E1B8EB
+S31A500012B9101BE50420A0E1BC2100EB320000EA33004BE27C1045
+S31A500012CE9FE50320A0E3132200EB000050E31D00001A6C009FF6
+S31A500012E3E598FDFFEB290000EA0C220150A0450100142201503D
+S31A500012F8242201503422015058220150702201507C220150941C
+S31A5000130D2201509C220150B0220150CC460100B8220150E02290
+S31A500013220150F42201505083000088450100F4440100042301A6
+S31A5000133750F8BE00502C230150C8EE00506042010044230150F4
+S31A5000134C68230150802301506C0D005034305BE5530053E30868
+S31A5000136100001A33305BE5303043E2090053E30400008A08000A
+S31A500013769FE5B8101BE5CEFDFFEB030000EA6C0D005028009F8E
+S31A5000138BE534101BE5882100EB00005AE30100001A0800A0E159
+S31A500013A0CC2A00EB00005AE30300000A0800A0E1593700EB00B3
+S31A500013B50000EA84230150F0AD1BE90DC0A0E100D82DE90310FB
+S31A500013CA81E22111A0E10130A0E1011041E204B04CE200C0A07A
+S31A500013DFE10000A0E3000053E1050000DA0120A0E1011041E256
+S31A500013F404309CE4000052E3030020E0F9FFFFCA00A81BE90D28
+S31A50001409C0A0E1F0D82DE978309FE578409FE5001093E57450A5
+S31A5000141E9FE504B04CE2002094E50070A0E1000095E501106286
+S31A50001433E0B21F00EB003094E50060A0E3005095E5230456E1FE
+S31A500014480E00002A0030D5E5FF0053E30600000A0700A0E10545
+S31A5000145D10A0E1782100EB000050E30100001A0500A0E1F0A8A3
+S31A500014721BE9016086E2003094E5015C85E2230456E1F0FFFF89
+S31A500014873A0000A0E3F0A81BE9849E0000889E0000909E00002B
+S31A5000149C0DC0A0E100D82DE90010A0E118009FE504B04CE2405A
+S31A500014B12100EB10009FE510109FE510209FE5BF3100EB00A855
+S31A500014C61BE980260150E486000074870000A02601500DC0A0D7
+S31A500014DBE1F0DF2DE904B04CE230D04DE20080A0E344304BE22B
+S31A500014F00060A0E140504BE244800BE50500A0E100308DE50116
+S31A5000150540A0E14C329FE56610A0E308308DE50820A0E10480E8
+S31A5000151A8DE50230A0E3BC3100EB0130A0E308018DE80600A08F
+S31A5000152FE128329FE50410A0E10C308DE50220A0E308808DE5B0
+S31A500015440530A0E1BE3100EB080050E1A800000A08029FE571C2
+S31A500015592300EB080050E10200001AFC019FE5122100EBA10084
+S31A5000156E00EAF4019FE50F2100EBF0119FE544201BE5EC319FEF
+S31A50001583E500E091E50190A0E1006093E502085EE30E70A0A1CE
+S31A500015980278A0B3000052E31500000A8740A0E1040086E048CD
+S31A500015ADC04BE2C0119FE50C20A0E1003091E50CA0A0E10230DF
+S31A500015C243E29E0301E0011064E0F52C00EB005050E20B000029
+S31A500015D70A48401BE50500A0E1292E00EB0410A0E10030A0E109
+S31A500015EC88019FE50520A0E1EF2000EB020000EA7C019FE5EC0E
+S31A500016012000EB48A04BE274319FE50010A0E3004093E5012CBD
+S31A50001616A0E30400A0E16C1F00EB60319FE5030093E8030084D1
+S31A5000162BE8106084E5146084E5187084E5012CA0E3024084E06F
+S31A500016400400A0E10010A0E3611F00EB38C19FE50F009CE80F9D
+S31A500016550084E8187084E5073086E0103084E50010A0E31430B0
+S31A5000166A84E5012CA0E3014C84E20400A0E1551F00EB0CC19FF9
+S31A5000167FE50F009CE804E0A0E10700AEE800519FE50130CEE4CE
+S31A500016942324A0E10120CEE42338A0E10030CEE5002099E500F3
+S31A500016A93095E5823043E0103084E5182084E50010A0E3143036
+S31A500016BE84E5012CA0E3024084E00400A0E1401F00EBC0C09F14
+S31A500016D3E50F009CE804E0A0E10700AEE80130CEE42334A0E177
+S31A500016E80030CEE5018088E2003095E5018088E2001099E501A5
+S31A500016FD8088E2036061E0106084E5018088E2146084E50A2029
+S31A50001712A0E1181084E50600A0E18C2D00EB0600A0E1001099FF
+S31A50001727E50A20A0E19D2C00EB005050E21800000A48401BE5E7
+S31A5000173C0500A0E1D12D00EB0410A0E10030A0E128009FE505DC
+S31A5000175120A0E1972000EB1F0000EAA826015074240150D426DF
+S31A5000176601500427015010270150889E0000809E00008C9E0055
+S31A5000177B00342701505C270150909E0000A4270150AC27015015
+S31A50001790BC270150849E0000CC2701504C309FE50600A0E100CD
+S31A500017A51093E50824A0E10A30A0E1C82C00EB005050E2070081
+S31A500017BA000A48401BE50500A0E1B02D00EB0410A0E10030A07F
+S31A500017CFE11C009FE50520A0E1762000EB0600A0E1001099E5F2
+S31A500017E40A20A0E10D2D00EB010000EA909E0000DC270150F06D
+S31A500017F9AF1BE90DC0A0E1F0D82DE904B04CE22CD04DE2007029
+S31A5000180EA0E338304BE20060A0E134504BE238700BE50500A088
+S31A50001823E100308DE50140A0E1AC309FE56310A0E308308DE515
+S31A500018380720A0E104708DE50230A0E3F33000EB0130A0E388B8
+S31A5000184D008DE80600A0E188309FE50410A0E10C308DE5022093
+S31A50001862A0E308708DE50530A0E1F53000EB070050E12E000082
+S31A500018770A68E09FE568009FE568309FE568409FE538201BE5A4
+S31A5000188C64109FE500C093E5070052E1003094E50E10A0010C13
+S31A500018A15063E0432000EB003094E50760A0E1230456E11E00EE
+S31A500018B6002A0030D5E5FF0053E31600000A30009FE538301B27
+S31A500018CBE5102095E5000053E30900000AFCC095E5080000EAB2
+S31A500018E010280150742401507028015024280150849E000088FB
+S31A500018F59E0000642801507C28015014C095E5183095E50030D8
+S31A5000190A8DE51C3095E504308DE50510A0E10C30A0E1252000FC
+S31A5000191FEB016086E2003094E5015C85E2230456E1E0FFFF3AC6
+S31A50001934F0A81BE90DC0A0E170D82DE9B4309FE5B4109FE5044C
+S31A50001949B04CE2B0C09FE5002093E5005091E500009CE50C6016
+S31A5000195EA0E1804082E00410A0E1050054E11C00002A003094A2
+S31A50001973E5010073E31500000A040051E10200000A7C009FE56C
+S31A500019880420A0E1092000EB0410A0E1050054E10B00002A0037
+S31A5000199D3094E5010073E30800000A54309FE5002093E503200A
+S31A500019B2C2E3021081E0050051E10200002A003091E501007335
+S31A500019C7E3F9FFFF1A0140A0E1E4FFFFEA003096E50330C3E3AF
+S31A500019DC034084E0E0FFFFEA040051E10200000A14009FE50453
+S31A500019F120A0E1EF1F00EB70A81BE9809E0000849E0000889E6F
+S31A50001A060000A82801500DC0A0E130D82DE9BC309FE5BC409FDD
+S31A50001A1BE5002093E500E094E504B04CE2B0C09FE58E2082E0A4
+S31A50001A3000E09CE50050A0E102C0A0E10E005CE11A00002A0443
+S31A50001A4500A0E1003092E5010073E31100000A02005CE102005B
+S31A50001A5A000A02306CE0430151E11600009A02C0A0E10E005CC6
+S31A50001A6FE10700002A003090E50320C3E302C08CE00E005CE113
+S31A50001A840200002A00309CE5010073E3F9FFFF1A0C20A0E10203
+S31A50001A990000EA003090E50330C3E3032082E00E0052E1E5FFD0
+S31A50001AAEFF3A02005CE10500000A02306CE0430151E102000050
+S31A50001AC38A00C085E50100A0E330A81BE90000A0E330A81BE945
+S31A50001AD8809E0000889E0000849E00000DC0A0E1F0DF2DE90406
+S31A50001AEDB04CE2F8D04DE20040A0E3D8400BE5E0400BE5E840B6
+S31A50001B020BE5F0400BE50080A0E1F8400BE5D0604BE200410B96
+S31A50001B17E50600A0E104410BE5D4304BE200308DE5D8204BE2CA
+S31A50001B2C04208DE50170A0E1B4339FE56210A0E308308DE501BB
+S31A50001B4120A0E30430A0E1323000EBDC304BE200308DE5E020B9
+S31A50001B564BE204208DE5B8004BE28C339FE57210A0E308308D6F
+S31A50001B6BE50120A0E30430A0E1273000EBE4304BE200308DE5AC
+S31A50001B80E8204BE204208DE5A0004BE264339FE56510A0E30847
+S31A50001B95308DE50120A0E30430A0E11C3000EB88004BE2F030DE
+S31A50001BAA4BE204308DE5EC504BE240339FE56610A0E308308DDF
+S31A50001BBFE50120A0E300508DE50430A0E1113000EBF4304BE23E
+S31A50001BD400308DE5F8204BE204208DE570004BE214339FE56C55
+S31A50001BE910A0E308308DE50120A0E30430A0E1063000EBFC30AE
+S31A50001BFE4BE200308DE5012C4BE204208DE558004BE2EC329F7B
+S31A50001C13E57310A0E308308DE50120A0E30430A0E1FB2F00EB63
+S31A50001C28413F4BE200308DE540004BE2CC329FE56E10A0E3080A
+S31A50001C3D308DE50420A0E104408DE50230A0E3F12F00EB073048
+S31A50001C52A0E300308DE5422F4BE204208DE5063043E208308DAE
+S31A50001C67E50800A0E198329FE50710A0E10C308DE50220A0E36B
+S31A50001C7C0630A0E1F02F00EB040050E10570A0E10200001A787D
+S31A50001C91029FE500FEFFEB4D0100EA04211BE5000052E30200E6
+S31A50001CA6001AD8301BE5000053E30A00000A000052E302000030
+S31A50001CBB0AF0301BE5000053E30500000AF8301BE5000053E3F1
+S31A50001CD00200000A08311BE5000053E30200001A2C029FE5EC74
+S31A50001CE5FDFFEB390100EA00311BE5F4001BE5000053E3FC0032
+S31A50001CFA0B0514529FE5004095E5040080E0010040E20410A090
+S31A50001D0FE12C3F00EB940003E0FC201BE50590A0E1F4300BE575
+S31A50001D24020053E10200002AE8019FE5201F00EB260100EAF05A
+S31A50001D39301BE5000053E31800000AEC001BE5E12A00EB006075
+S31A50001D4E50E20600001AEC001BE5FC301BE5030080E00100401C
+S31A50001D63E2DA2A00EB006050E20D00000AEC401BE50600A0E1E8
+S31A50001D78432C00EB0020A0E198019FE50410A0E10A1F00EB90AF
+S31A50001D8D019FE590319FE590C19FE5001093E500209CE5041F00
+S31A50001DA200EB0A0100EA08011BE5161F00EB0F0050E303000088
+S31A50001DB79A70019FE51010A0E3FC1E00EB020100EA04311BE568
+S31A50001DCC000053E31C00001A58619FE5D4101BE5003096E55024
+S31A50001DE1419FE5030051E10400003AFC301BE5002094E5033067
+S31A50001DF681E0020053E10500003A34019FE5EB1E00EB14019F4B
+S31A50001E0BE5001096E5002094E5E71E00EBF0301BE5000053E31D
+S31A50001E200800001AF4101BE50700A0E1F6FEFFEB000050E30395
+S31A50001E3500001A00019FE5F4101BE5DC1E00EBE20000EADC30E2
+S31A50001E4A9FE5001099E5EC409FE50080A0E300C093E50120A06F
+S31A50001E5FE1000094E50CC061E010C10BE50C10A0E1231D00EB28
+S31A50001E74003099E50860A0E1007094E5230458E13500002A00C4
+S31A50001E8930D7E5FF0053E32D00000A08011BE50710A0E1E91EEE
+S31A50001E9E00EB000050E32800001AF0301BE5000053E303000020
+S31A50001EB30A102097E5EC301BE5030052E19E00001A181097E560
+S31A50001EC8F4201BE5020051E19D00001A6C009FE508111BE51097
+S31A50001EDD2100EB000050E3BA00000A0180A0E31B0000EAC028A6
+S31A50001EF20150D4280150E8280150FC2801501829015030290125
+S31A50001F07504C290150802901508C290150A0290150889E000019
+S31A50001F1CBC290150EC2901500C2A0150809E0000849E000028CF
+S31A50001F312A015088450100F4440100582A0150842A0150909EC3
+S31A50001F460000102B0150016086E2003099E5017C87E2230456CA
+S31A50001F5BE1C9FFFF3A04211BE5000058E30C00001A003099E505
+S31A50001F70E0119FE50860A0E1007091E5020000EA016086E2000D
+S31A50001F853099E5017C87E2230456E10200002A0030D7E5FF00E8
+S31A50001F9A53E3F7FFFF1A000052E32C00001AEC101BE5FC301BD9
+S31A50001FAFE50100A0E1031081E0011041E2450D00EB008050E2C9
+S31A50001FC40200000A8C019FE5791E00EB7F0000EA01A0A0E3EC9A
+S31A50001FD9001BE5435F4BE2F4101BE50520A0E16E2A00EB006041
+S31A50001FEE50E20800000A0600A0E10C411BE508A0A0E1A12B007B
+S31A50002003EB0410A0E10030A0E14C019FE50620A0E1671E00EB59
+S31A5000201800005AE30E00000AEC001BE5D4101BE5FC201BE50517
+S31A5000202D30A0E1A82A00EB006050E20700000A0C411BE50600E4
+S31A50002042A0E1902B00EB0410A0E10030A0E10C019FE50620A06F
+S31A50002057E1561E00EB0700A0E10010A0E3012CA0E3D91C00EB33
+S31A5000206C08111BE50700A0E1831E00EBEC301BE5E0201BE510B0
+S31A500020813087E5000052E30500001AF0301BE5000053E3EC20A2
+S31A500020961B150200001AD4201BE5000000EADC201BE5E8301B86
+S31A500020ABE5142087E5000053E30200001AA8309FE5003093E5EF
+S31A500020C0000000EAE4301BE51C3087E5F4301BE5183087E5FC2B
+S31A500020D5201BE5202087E5EC001BE5FC101BE5B5FCFFEBFC0045
+S31A500020EA87E510011BE5434F4BE2001099E50420A0E1142B00DD
+S31A500020FFEB10011BE5001099E50420A0E1252A00EB006050E27B
+S31A500021140450A0E11600000A0C411BE50600A0E1582B00EB0425
+S31A5000212910A0E10030A0E134009FE50620A0E11E1E00EB1D0066
+S31A5000213E00EA28009FE51B1E00EB210000EA20009FE5181E0097
+S31A50002153EB1E0000EA909E00002C2B0150602B0150842B01507C
+S31A5000216890450100AC2B0150AC2A0150D82A01504C309FE51084
+S31A5000217D011BE5001093E5002099E50530A0E1512A00EB006054
+S31A5000219250E20700000A0C411BE50600A0E1392B00EB0410A0C8
+S31A500021A7E10030A0E11C009FE50620A0E1FF1D00EB10011BE5DC
+S31A500021BC001099E50520A0E1962A00EB010000EA909E0000CCF4
+S31A500021D12B0150F0AF1BE90DC0A0E1F0D82DE904B04CE254D052
+S31A500021E64DE20040A0E30070A0E14C504BE254400BE50500A0B9
+S31A500021FBE15C400BE550304BE200308DE554204BE204208DE586
+S31A500022100160A0E128319FE56610A0E308308DE50120A0E30459
+S31A5000222530A0E17A2E00EB58304BE200308DE55C204BE20420E6
+S31A5000223A8DE534004BE200319FE56C10A0E308308DE50120A047
+S31A5000224FE30430A0E16F2E00EB0220A0E314008DE8E4309FE53E
+S31A500022640700A0E10C308DE50610A0E108408DE50530A0E17260
+S31A500022792E00EB040050E10200001AC4009FE583FCFFEB460099
+S31A5000228E00EA54301BE5000053E30200000A5C301BE500005356
+S31A500022A3E30200001AA4009FE57AFCFFEB3D0000EA50001BE5D2
+S31A500022B8852900EB005050E20600001A50001BE558301BE503A5
+S31A500022CD0080E0010040E27E2900EB005050E20D00000A504068
+S31A500022E21BE50500A0E1E72A00EB0020A0E160009FE50410A0D6
+S31A500022F7E1AE1D00EB58009FE558309FE558C09FE5001093E5D9
+S31A5000230C00209CE5A81D00EB240000EA50101BE558301BE5011E
+S31A5000232100A0E1031081E0011041E2690C00EB000050E30C0089
+S31A50002336000A28009FE59D1D00EB190000EAFC280150F02B014D
+S31A5000234B50742401508C290150F82B0150EC2901500C2A015087
+S31A50002360809E0000849E00000C2C015050001BE558101BE56031
+S31A50002375204BE28A2900EB005050E20900000A60401BE50500D8
+S31A5000238AA0E1BE2A00EB0410A0E10030A0E108009FE50520A0FD
+S31A5000239FE1841D00EB000000EAAC2B0150F0A81BE90DC0A0E16A
+S31A500023B4F0D82DE904B04CE254D04DE20040A0E30070A0E14CAB
+S31A500023C9504BE254400BE50500A0E15C400BE550304BE20030B9
+S31A500023DE8DE554204BE204208DE50160A0E1FC309FE56610A043
+S31A500023F3E308308DE50120A0E30430A0E1042E00EB58304BE2C7
+S31A5000240800308DE55C204BE204208DE534004BE2D4309FE56C33
+S31A5000241D10A0E308308DE50120A0E30430A0E1F92D00EB02208B
+S31A50002432A0E314008DE8B8309FE50700A0E10C308DE50610A0DB
+S31A50002447E108408DE50530A0E1FC2D00EB040050E10200001A74
+S31A5000245C98009FE50DFCFFEB3A0000EA54301BE5000053E30226
+S31A5000247100000A5C301BE5000053E30200001A78009FE504FC1C
+S31A50002486FFEB310000EA50001BE50F2900EB005050E2060000EB
+S31A5000249B1A50001BE558301BE5030080E0010040E2082900EB42
+S31A500024B0005050E21600000A50401BE50500A0E1712A00EB0083
+S31A500024C520A0E134009FE50410A0E1381D00EB2C009FE52C3072
+S31A500024DA9FE52CC09FE5001093E500209CE5321D00EB18000028
+S31A500024EFEAFC280150F02B0150742401508C290150F82B015054
+S31A50002504EC2901500C2A0150809E0000849E000050001BE55897
+S31A50002519101BE560204BE2BF2900EB005050E20900000A604092
+S31A5000252E1BE50500A0E1542A00EB0410A0E10030A0E108009F66
+S31A50002543E50520A0E11A1D00EB000000EA402C0150F0A81BE93D
+S31A500025580DC0A0E1F0D82DE904B04CE254D04DE20040A0E300F4
+S31A5000256D70A0E14C504BE254400BE50500A0E15C400BE5503033
+S31A500025824BE200308DE554204BE204208DE50160A0E1FC309F3B
+S31A50002597E56610A0E308308DE50120A0E30430A0E19A2D00EB46
+S31A500025AC58304BE200308DE55C204BE204208DE534004BE2D4F9
+S31A500025C1309FE56C10A0E308308DE50120A0E30430A0E18F2D3D
+S31A500025D600EB0220A0E314008DE8B8309FE50700A0E10C308DC4
+S31A500025EBE50610A0E108408DE50530A0E1922D00EB040050E1BA
+S31A500026000200001A98009FE5A3FBFFEB3A0000EA54301BE50007
+S31A500026150053E30200000A5C301BE5000053E30200001A7800C2
+S31A5000262A9FE59AFBFFEB310000EA50001BE5A52800EB0050507F
+S31A5000263FE20600001A50001BE558301BE5030080E0010040E2D0
+S31A500026549E2800EB005050E21600000A50401BE50500A0E107AB
+S31A500026692A00EB0020A0E134009FE50410A0E1CE1C00EB2C0002
+S31A5000267E9FE52C309FE52CC09FE5001093E500209CE5C81C0010
+S31A50002693EB180000EAFC280150F02B0150742401508C2901501F
+S31A500026A8F82B0150EC2901500C2A0150809E0000849E000050D6
+S31A500026BD001BE558101BE560204BE2A12900EB005050E209005D
+S31A500026D2000A60401BE50500A0E1EA2900EB0410A0E10030A00A
+S31A500026E7E108009FE50520A0E1B01C00EB000000EA602C0150F7
+S31A500026FCF0A81BE90DC0A0E1F0DF2DE904B04CE218D04DE200AB
+S31A5000271160A0E300608DE52C304BE204308DE50120A0E30820AD
+S31A500027268DE55C319FE50C308DE5022082E00630A0E1422D006D
+S31A5000273BEB060050E10200001A44019FE553FBFFEB6D0000EA9D
+S31A500027503C319FE53C519FE53C419FE5001093E5002095E506F3
+S31A5000276580A0E1000094E5019062E00910A0E1E21A00EB0060DB
+S31A5000277A94E50270A0E3026C86E205A0A0E1010000EA017087A7
+S31A5000278FE2016C86E200309AE5230457E10D00002A0030D6E5F8
+S31A500027A4FF0053E3F7FFFF0A2C001BE50610A0E1A31C00EB0029
+S31A500027B90050E3F2FFFF1AD8009FE52C101BE5D51E00EB000002
+S31A500027CE50E34C00000A0180A0E3000058E30300001ABC009F60
+S31A500027E3E52C101BE5721C00EB450000EA100096E530404BE29A
+S31A500027F8181096E50420A0E1682800EB005050E20470A0E10735
+S31A5000280D00000A30401BE50500A0E19B2900EB0410A0E10030EC
+S31A50002822A0E17C009FE50520A0E1611C00EB0900A0E100109A88
+S31A50002837E50720A0E1442900EB0600A0E1FF10A0E3012CA0E388
+S31A5000284CE01A00EB0900A0E100109AE50720A0E1512800EB0017
+S31A500028615050E21000000A30401BE50500A0E1852900EB0410CD
+S31A50002876A0E10030A0E124009FE50520A0E14B1C00EB1700000E
+S31A5000288BEA842C01508C290150849E0000889E0000909E00007B
+S31A500028A0902C0150A42C0150AC2B01504C309FE5001093E509E6
+S31A500028B500A0E100209AE50730A0E1842800EB005050E20700C0
+S31A500028CA000A30401BE50500A0E16C2900EB0410A0E10030A0BE
+S31A500028DFE11C009FE50520A0E1321C00EB0900A0E100109AE515
+S31A500028F40720A0E1C92800EB010000EA909E0000CC2B0150F0A4
+S31A50002909AF1BE90DC0A0E1F0D82DE904B04CE250D04DE2004013
+S31A5000291EA0E30070A0E14C504BE254400BE50500A0E158400B64
+S31A50002933E550304BE200308DE554204BE204208DE50160A0E1EC
+S31A50002948E4309FE56210A0E308308DE50120A0E30430A0E1ADE7
+S31A5000295D2C00EB58304BE200308DE534004BE2C4309FE5631055
+S31A50002972A0E308308DE50420A0E104408DE50230A0E3A32C00EE
+S31A50002987EB0220A0E300208DE55C304BE204308DE50110A0E3D0
+S31A5000299C08108DE594309FE50700A0E10C308DE50610A0E1052C
+S31A500029B130A0E1A32C00EB040050E10200001A78009FE5B4FA55
+S31A500029C6FFEB3D0000EA5C001BE58CFAFFEB005050E203000044
+S31A500029DB1A60009FE55C101BE5F31B00EB350000EA54301BE58B
+S31A500029F0000053E31430950550300B0544209FE550001BE500A0
+S31A50002A053092E5030050E10500003A34309FE518C095E5001002
+S31A50002A1A93E50C2080E0010052E10A00003A20009FE5E11B0035
+S31A50002A2FEB230000EABC2C0150D82C0150842C01508C290150AF
+S31A50002A44A42C015088450100F4440100EC2C0150101095E50CF0
+S31A50002A5920A0E1281A00EB50001BE54C309FE51C2095E520100E
+S31A50002A6E95E5002083E551FAFFEB58301BE50040A0E10000532A
+S31A50002A83E30200000A2C009FE50410A0E1C81B00EBFC1095E560
+S31A50002A98000051E30800000A010054E10600000A10009FE504AF
+S31A50002AAD20A0E1C01B00EB020000EA90450100042D0150182DCE
+S31A50002AC20150F0A81BE90DC0A0E1F0D92DE944209FE504D04D86
+S31A50002AD7E2004092E504B04CE2000054E32700001A30809FE56D
+S31A50002AEC0118A0E3000098E50130A0E3003082E5010840E25E92
+S31A50002B012700EB001050E20600000A10009FE5A81B00EB0400BF
+S31A50002B16A0E11B0000EAA8830000F44401005C2D015060709F21
+S31A50002B2BE560609FE50100A0E15C409FE50710A0E10620A0E135
+S31A50002B40772700EB50509FE50400A0E10510A0E1842700EB4488
+S31A50002B55009FE5001097E5002096E500C094E5003095E500C0C7
+S31A50002B6A8DE5911B00EB003094E5002098E524109FE50138833D
+S31A50002B7FE2022063E0002081E50100A0E3050000EA809E00008D
+S31A50002B94849E0000889E00008C9E0000882D0150909E0000F040
+S31A50002BA9A91BE90DC0A0E130D82DE904B04CE20050A0E10100F4
+S31A50002BBE55E30140A0E1020000CA48009FE532FAFFEB30A81B11
+S31A50002BD3E9BBFFFFEB000050E30C00000A34009FE534109FE541
+S31A50002BE8042094E5B62B00EB003050E20400000A0500A0E1041F
+S31A50002BFD10A0E10FE0A0E10CF093E530A81BE910009FE521FA6D
+S31A50002C12FFEB30A81BE9B82D0150E486000074870000CC2D01FC
+S31A50002C27500DC0A0E1F0DD2DE904B04CE24BDF4DE20040A0E1C5
+S31A50002C3C0150A0E10330D4E502A0A0E1000053E31000000A13E9
+S31A50002C511E4BE20100D4E50120A0E3040080E2000084E004029F
+S31A50002C6600EB0220D4E5000052E30200000A30311BE500005348
+S31A50002C7BE36500000A000052E30200001A30311BE5000053E3B4
+S31A50002C906000001A0320D4E5000055E30130D4E5022084E004D7
+S31A50002CA53083E2037082E00300000AB8039FE50510A0E13E1B1F
+S31A50002CBA00EB020000EAA8039FE5041084E23A1B00EB0080D49B
+S31A50002CCFE5013048E2050053E303F19F97490000EAF82C00504E
+S31A50002CE4282D00509C2D0050A42D0050482D0050602D00504DB7
+S31A50002CF90F4BE20710A0E10420A0E37E1900EB64239FE5343103
+S31A50002D0E1BE560139FE560039FE5000053E30210A001241B0054
+S31A50002D23EB370000EA4E0F4BE20710A0E10420A0E3721900EBFA
+S31A50002D3840039FE538111BE51C1B00EB2F0000EA0700A0E187D6
+S31A50002D4D2500EB0010A0E120039FE5161B00EB290000EA005054
+S31A50002D62A0E318439FE50510D7E70400A0E1101B00EB040055DD
+S31A50002D77E30100008A04039FE50C1B00EB015085E2050055E3F1
+S31A50002D8CF5FFFF9AF4029FE5071B00EB1A0000EAEC029FE51B37
+S31A50002DA10000EAE8029FE50750A0E1011B00EB0030D7E507405D
+S31A50002DB6A0E1000053E31100000AD0629FE50030D5E50A0053E3
+S31A50002DCBE30200000A0130F4E50A0053E3FCFFFF1A0600A0E1C9
+S31A50002DE00030A0E30030C4E50510A0E1F11A00EB0A30A0E301B2
+S31A50002DF530C4E40450A0E10030D5E5000053E3EEFFFF1A0000A0
+S31A50002E0A5AE30300000A7C029FE5E71A00EB0200A0E3A30000FD
+S31A50002E1FEA040058E31500000A494F4BE20400A0E1011CA0E316
+S31A50002E340A20A0E1421C00EB000050E30000E0E30460A0E198CC
+S31A50002E490000BA0600A0E1ED1A00EB000050E3EEFFFF0AFF3093
+S31A50002E5EE0E324204BE20330D2E72E0053E30A00A0018E00004C
+S31A50002E730A5E0053E30300A0038B00000A013048E2050053E385
+S31A50002E8803F19F97860000EAA82E0050F42E0050A4300050D8B1
+S31A50002E9D2F0050382F0050742F00504D0F4BE20710A0E104205C
+S31A50002EB2A0E3121900EB490F4BE24F4F4BE20410A0E1712C009A
+S31A50002EC7EB000050E36500000A34211BE53C311BE5030052E11B
+S31A50002EDCCDFFFF0A0700A0E10410A0E10420A0E3041900EB6D7D
+S31A50002EF10000EA4E0F4BE20710A0E10420A0E3FF1800EB490F69
+S31A50002F064BE2054D4BE20410A0E10020A0E30230A0E1042C0099
+S31A50002F1BEB000050E35000000A38211BE540311BE5030052E1D3
+S31A50002F30EAFFFF1AB7FFFFEA510F4BE20710A0E10420A0E3EEDB
+S31A50002F451800EB490F4BE2524F4BE20410A0E1B72400EB000070
+S31A50002F5A50E34100000A44211BE548311BE5030052E1DBFFFFA1
+S31A50002F6F1AA8FFFFEA4B4F4BE20400A0E10710A0E10620A0E3C0
+S31A50002F84DE1800EB0050A0E304A0A0E1534F4BE2493F4BE25035
+S31A50002F99310BE5156E4BE2E0809FE50410A0E10620A0E150018B
+S31A50002FAE1BE50830A0E1DD2B00EB000050E32500000A0030D4A6
+S31A50002FC3E50530C7E7015085E2050055E3F3FFFF9A340000EA3D
+S31A50002FD8BC009FE50750A0E1741A00EB496F4BE2B0709FE5096B
+S31A50002FED0000EA0030D6E50640A0E1000053E30300000A013069
+S31A50003002C5E40130F4E5000053E3FBFFFF1A0A30A0E30130C5B4
+S31A50003017E40040A0E30040C5E50700A0E1631A00EB0600A0E146
+S31A5000302C011CA0E30420A0E1C31B00EB040050E10000E0E31A19
+S31A500030410000BA0600A0E16F1A00EB040050E1E6FFFF1A140028
+S31A5000305600EA0700A0E10A10A0E10620A0E3A61800EB0400A00C
+S31A5000306BE30F0000EA602E0150742E01506C2E0150682E01507A
+S31A500030807C2E0150842E01508C2E0150902E0150942E01509822
+S31A500030952E01509C2E0150A42E0150D02E015008009FE5421ADC
+S31A500030AA00EB0100A0E3000000EA942E0150F0AD1BE90DC0A041
+S31A500030BFE100D82DE9031081E22111A0E10130A0E1011041E2C8
+S31A500030D404B04CE200E0A0E10000A0E300C0A0E1000053E1094D
+S31A500030E90000DA0120A0E1011041E204309EE40F005CE3133C79
+S31A500030FE83E1030020E001C08C1200C0A003000052E3F5FFFF16
+S31A50003113CA00A81BE90DC0A0E100D82DE9010040E204B04CE29A
+S31A50003128050050E300F19F970C0000EA4C3100504C3100505CF1
+S31A5000313D310050643100504C310050543100500400A0E300A8F0
+S31A500031521BE90800A0E300A81BE90000A0E300A81BE9020CA0FA
+S31A50003167E300A81BE90DC0A0E1F0DF2DE904B04CE242DE4DE20A
+S31A5000317C0CD04DE20080A0E30070A0E101A0A0E14DFEFFEB6032
+S31A50003191919FE5080050E16B00000A426E4BE2086046E206009D
+S31A500031A6A0E14C519FE5012BA0E30510A0E1521800EB433E4BB6
+S31A500031BBE2083043E20C3043E200308DE5434E4BE204808DE5B3
+S31A500031D0084044E224319FE5084044E2008083E50400A0E1185A
+S31A500031E5319FE56C10A0E308308DE50820A0E10230A0E3862A13
+S31A500031FA00EB0120A0E304018DE8FC309FE50700A0E10C308D60
+S31A5000320FE50A10A0E108808DE50430A0E1892A00EB080050E14E
+S31A5000322405A0A0E14700000A08508AE2FE3F8AE2030055E13DE5
+S31A5000323900002A0830DAE5080053E13A00000A0000D5E500705F
+S31A5000324EA0E3B0FFFFEB0120D5E5AC409FE50330D5E50020821F
+S31A50003263E0043083E2036082E0000000EA184084E2090054E1DC
+S31A500032780500000A000094E5041085E2EF1900EB000050E3F7CB
+S31A5000328DFFFF1A047094E50500A0E144241BE50710A0E160FEED
+S31A500032A2FFEB010080E2050050E300F19F97190000EACC320014
+S31A500032B75034330050E4320050E8320050F032005014330050CC
+S31A500032CC0A00A0E1421E4BE2081041E2012BA0E3081800EB1971
+S31A500032E10000EA0180A0E3065085E00A0000EA18509FE50800F1
+S31A500032F600EAE4880000949E000094450100D42E01507424011F
+S31A5000330B50248800009C9E000028009FE5A61900EB24309FE5F3
+S31A50003320030055E10200002A0030D5E5000053E3C4FFFF1A00E1
+S31A500033350058E30300000A030000EB010000EAEC2E01508CA273
+S31A5000334A0000F0AF1BE90DC0A0E1F0DF2DE9A8309FE5FF1FA028
+S31A5000335FE3A4209FE504B04CE2A0709FE5019BA0E3009087E547
+S31A5000337404D04DE2043087E5F82387E50700A0E14CFFFFEBFC0B
+S31A500033890387E580409FE580309FE5001094E5002093E5780059
+S31A5000339E9FE5816042E0DE1B00EB000050E30480A0E1300000F1
+S31A500033B30A0600A0E12C404BE2001098E50420A0E1622600EBE0
+S31A500033C80600A0E1001098E50420A0E1732500EB005050E204D8
+S31A500033DDA0A0E10F00000A2C401BE50500A0E1A62600EB04108E
+S31A500033F2A0E10030A0E120009FE50520A0E16C1900EB1500006F
+S31A50003407EACEFAAD0BADDEADDE949E0000889E0000849E000060
+S31A5000341C002F0150342701500600A0E10710A0E10920A0E10A46
+S31A5000343130A0E1A72500EB005050E20700000A2C401BE50500C4
+S31A50003446A0E18F2600EB0410A0E10030A0E118009FE50520A053
+S31A5000345BE1551900EB0600A0E1001098E50A20A0E1EC2500EB11
+S31A50003470000000EA2C2F0150F0AF1BE90DC0A0E1F0DD2DE9087F
+S31A50003485319FE504B04CE20080A0E10160A0E1003093E502A018
+S31A5000349AA0E1000053E30100001A0300A0E1F0AD1BE9E4509FFD
+S31A500034AFE53F3E85E2030055E13000002A0000D5E514FFFFEB9F
+S31A500034C401C0D5E5041085E20320D5E500E08CE00800A0E104F1
+S31A500034D93082E203708EE0022085E004C08CE20C4082E055193E
+S31A500034EE00EB000050E31D00001A0030D5E50A0053E1150000E1
+S31A500035031A01304AE2050053E303F19F97100000EA2C350050D6
+S31A500035182C35005068350050543500502C350050403500500655
+S31A5000352D00A0E10410A0E10420A0E3711700EB090000EA06000A
+S31A50003542A0E10410A0E10620A0E36C1700EB040000EA0040863D
+S31A50003557E5020000EA38009FE50810A0E1131900EB0100A0E348
+S31A5000356CF0AD1BE928309FE5075085E0030055E1CEFFFF3A1C60
+S31A50003581009FE50810A0E10A1900EB0000A0E3F0AD1BE994A25A
+S31A5000359600009C9E0000582F01508CA20000842F01500DC0A019
+S31A500035ABE1F0D92DE904B04CE20070A0E10080A0E378519FE5D2
+S31A500035C00030D5E5000053E34B00001A006097E50600A0E10CAC
+S31A500035D51900EB014080E2100097E5CCFEFFEB043088E0040004
+S31A500035EA80E2082097E5008083E0000052E30400000A0200A0A8
+S31A500035FFE1011900EB010080E2008088E0000000EA0200A0E1C3
+S31A500036143F0E58E34200008A0140C5E50300C5E51030D7E50063
+S31A5000362930C5E50C20D7E50220C5E50020D6E5045085E2000012
+S31A5000363E52E30500000A0030D5E5023083E00130C5E40120F66D
+S31A50003653E5000052E3F9FFFF1A0030A0E30130C5E4030050E120
+S31A500036680B00000A086097E50020D6E5030052E10500000A00DE
+S31A5000367D30D5E5023083E00130C5E40120F6E5000052E3F9FF60
+S31A50003692FF1A0030A0E30130C5E4103097E5013043E2050053BD
+S31A500036A7E303F19F970E0000EAC8360050C8360050EC360050A5
+S31A500036BCEC360050C8360050DC3600500500A0E1141087E2046A
+S31A500036D120A0E30A1700EB030000EA0500A0E1141087E20620B9
+S31A500036E6A0E3051700EB100097E588FEFFEB0100A0E3F0A91BBB
+S31A500036FBE90000D5E584FEFFEB0120D5E50330D5E5002082E00B
+S31A50003710043083E2034082E0045085E0048088E03F0E58E3A53E
+S31A50003725FFFF3A10009FE5001097E5A01800EB0000A0E3F0A922
+S31A5000373A1BE99C9E0000A82F01500DC0A0E170D82DE90010A062
+S31A5000374FE370409FE5012BA0E36C509FE504B04CE268609FE5DB
+S31A500037640400A0E1191700EB060055E10600000A0500A0E18AFE
+S31A50003779FFFFEB000050E30F00000A185085E2060055E1F8FFAE
+S31A5000378EFF1A3C209FE5013BA0E3003084E5042084E530309FF3
+S31A500037A3E50400A0E1F83384E5FF1FA0E341FEFFEBFC0384E58B
+S31A500037B81C209FE50130A0E3003082E570A81BE9949E00002429
+S31A500037CD880000E4880000CEFAAD0BADDEADDE94A200000DC004
+S31A500037E2A0E170D82DE98C609FE50030A0E388509FE504B04C1E
+S31A500037F7E2003086E504D04DE2003085E5AFFCFFEB000050E385
+S31A5000380C3800000A6C309FE56C009FE56C409FE5001090E50149
+S31A500038212BA0E300C093E50400A0E18C1041E0B31600EB04005C
+S31A50003836A0E1FF1FA0E31EFEFFEBFC3394E5030050E10700001C
+S31A5000384B1A042094E538309FE5030052E10300001AF82394E588
+S31A500038602C309FE5030052E10B00000A24009FE5501800EBB225
+S31A50003875FFFFEB1D0000EA94A2000094450100889E0000849EA0
+S31A5000388A0000949E0000CEFAAD0BADDEADDEC02F01501C104B54
+S31A5000389FE23C009FE50120A0E3F3FEFFEB1C301BE5000053E31B
+S31A500038B40700000A0510A0E124009FE50420A0E3ECFEFFEB1CC3
+S31A500038C9009FE51C109FE50220A0E3E8FEFFEB0130A0E3003007
+S31A500038DE86E5030000EAF82D0150102E01504C2E0150F844011A
+S31A500038F30070A81BE90DC0A0E100D82DE9803260E0030180E0BC
+S31A50003908000180E014209FE50002A0E1483092E504B04CE20FD8
+S31A5000391DE0A0E103F0A0E100A81BE9500000000DC0A0E1F0DF51
+S31A500039322DE90010A0E304B04CE261DF4DE2A4110BE598010BE7
+S31A50003947E5042090E59C210BE5A0110BE5007092E50130A0E3AE
+S31A5000395CA8310BE5B91200EBC11200EBB71200EB042097E5016E
+S31A500039710052E30500000AA8111BE5040052E30030A0130130A1
+S31A50003986A003014013E0A400000A0030A0E3A8310BE50400527F
+S31A5000399BE30200000A0700A0E10410A0E3AA2300EB043097E54B
+S31A500039B0040053E30300000ACC029FE5FD1700EBA8011BE5BBB0
+S31A500039C50000EA0700A0E1013CA0E390310BE52010A0E3A83128
+S31A500039DA1BE5632F4BE294310BE5654F4BE200408DE5193E4BD9
+S31A500039EFE2722200EB000050E363AF4BE20700000A88329FE54B
+S31A50003A0428104BE2F32091E1410F52E30200000A78029FE5E6F8
+S31A50003A191700EBD0FFFFEA0700A0E10030A0E394310BE5151073
+S31A50003A2EA0E3653F4BE200308DE50A20A0E1193E4BE25E220088
+S31A50003A43EB000050E31B00000A628F4BE20840A0E10130D4E405
+S31A50003A5838929FE5000053E30200000A0130D4E4000053E3FC58
+S31A50003A6DFFFF1A0460A0E10130D4E4000053E3FCFFFF1A04506A
+S31A50003A82A0E10130D4E4000053E3FCFFFF1AA4111BE50000511F
+S31A50003A97E30100000AF8019FE5C41700EB0900A0E10610A0E172
+S31A50003AAC0820A0E100408DE50530A0E1BE1700EB0700A0E11A3C
+S31A50003AC110A0E30050A0E394510BE5653F4BE200308DE50A20C2
+S31A50003AD6A0E1193E4BE2372200EB050050E10800000A0A00A04A
+S31A50003AEBE190111BE58C204BE20C2300EB8C301BE5A0111BE58E
+S31A50003B00050050E10310A011A0110BE5A0211BE5000052E39237
+S31A50003B15FFFF0A0510A0E17C519FE507CDA0E30500A0E1083041
+S31A50003B2A97E5813083E00C20D3E70120C0E7011081E205005128
+S31A50003B3FE3F8FFFFDA0700A0E10030A0E394310BE51B10A0E3CA
+S31A50003B54653F4BE200308DE50A20A0E1193E4BE2152200EB0042
+S31A50003B690050E32900000A0A00A0E190111BE574204BE2B022CC
+S31A50003B7E00EB000050E32000000A9C111BE570201BE500309196
+S31A50003B93E5101093E5024081E09C211BE5044082E5A0111BE58E
+S31A50003BA874205BE50700A0E12E2200EB1F30D4E51F30C4E50714
+S31A50003BBD20D4E5800012E30200001A0730D4E5800013E3FCFFD2
+S31A50003BD2FF0A98111BE5003091E50100A0E1242093E50510A03D
+S31A50003BE7E10FE0A0E100F092E59C211BE5343092E50140A0E35F
+S31A50003BFC0C4083E51A1200EB0400A0E12A0000EA90009FE5687E
+S31A50003C111700EB52FFFFEA88009FE5651700EB4FFFFFEA05005D
+S31A50003C2652E30200001A78009FE5601700EB4AFFFFEA0C120034
+S31A50003C3BEB3200A0E32CFFFFEBA4311BE5000053E30100001A43
+S31A50003C5058009FE5571700EBA4111BE550009FE5011081E2A433
+S31A50003C65110BE5521700EBA4211BE50400A0E10A0052E30E0008
+S31A50003C7A000A0700A0E14F0500EBF01100EB35FFFFEA043001D0
+S31A50003C8F509EFEFFFF203001503C30015038300150F083000056
+S31A50003CA44C300150603001507C3001509C300150BC300150F0C0
+S31A50003CB9AF1BE90DC0A0E170D82DE90040A0E1086094E504504B
+S31A50003CCE96E504B04CE2D12200EB0000A0E3C22200EB00008579
+S31A50003CE3E5344085E50600A0E10EFFFFEB70A81BE90DC0A0E1CB
+S31A50003CF800D82DE904B04CE204C090E504109CE52130A0E300EF
+S31A50003D0D30C1E5FF20A0E30720C1E5213043E20F30C1E530304B
+S31A50003D228CE500A81BE90DC0A0E130D82DE9044090E504B04CF4
+S31A50003D37E204C094E52130A0E30030CCE54820A0E30E20CCE583
+S31A50003D4C0000A0E30B00CCE50A00CCE5013043E20C30CCE54689
+S31A50003D612042E20D20CCE5203083E20430CCE5180084E51400A6
+S31A50003D7684E5083084E50150A0E12C0084E55010A0E30110CCB1
+S31A50003D8BE53F3083E20330CCE57E2082E20220CCE5303043E2D6
+S31A50003DA0103084E57F2082E20720CCE5103043E20F30CCE59F40
+S31A50003DB52042E20020CCE500E0A0E101208CE20710CCE50E3098
+S31A50003DCAD5E70E30C2E701E08EE205005EE3FAFFFFDA2230A090
+S31A50003DDFE30030CCE50020A0E30D20CCE51E3043E20C30CCE5D4
+S31A50003DF4012082E2302084E530A81BE90DC0A0E100D82DE9010D
+S31A50003E090C51E20100A01304B04CE200A81BE90DC0A0E100D8A7
+S31A50003E1E2DE9042090E504B04CE2143092E50000A0E300005317
+S31A50003E33E10200000A183092E5000053E10000001A0100A0E3A6
+S31A50003E4800A81BE90DC0A0E100D82DE904B04CE204C090E50408
+S31A50003E5D009CE52230A0E30030C0E50520C0E54224A0E10620F8
+S31A50003E72C0E50410C0E5043083E20030C0E50120A0E32C208C9D
+S31A50003E87E500A81BE90DC0A0E1F0DF2DE904B04CE20090A0E119
+S31A50003E9C0380A0E13F0058E3044099E50850A0C14050A0D304BB
+S31A50003EB1309BE50160A0E1087094E502A0A0E1040094E5400043
+S31A50003EC657E30400001A147084E51C3084E5245084E54830A0A2
+S31A50003EDBE3030000EA187084E5203084E5285084E54030A0E32E
+S31A50003EF0083084E52230A0E30030C0E50A50C0E54534A0E10B18
+S31A50003F0530C0E50020A0E30820C0E502E0A0E10970C0E540301B
+S31A50003F1AA0E30730C0E5122082E20020C0E50A005EE10F00002A
+S31A50003F2FAA8E31A0E1062083E004C092E501E08EE2061093E798
+S31A50003F440C20A0E101C04CE2000052E3F4FFFFDA0C20A0E101C7
+S31A50003F5930D1E401C04CE21030C0E5000052E3F9FFFFCAEDFF62
+S31A50003F6EFFEA050058E1040000AA0030A0E305E068E01030C033
+S31A50003F83E501E05EE2FCFFFF1A2C2094E50730D0E5400013E3D2
+S31A50003F98FCFFFF0A000052E30800001A143094E5030057E1016A
+S31A50003FAD30A0030230A0130C3084E50900A0E10710A0E1052005
+S31A50003FC2A0E1A0FFFFEBF0AF1BE90DC0A0E170D82DE904D04D1A
+S31A50003FD7E20060A0E1045096E5044095E50C20D4E56230A0E335
+S31A50003FEC0030C4E50710D4E5403043E20030C4E504B04CE22A47
+S31A500040010000EA0430A0E30000A0E30A30C4E50B00C4E5800019
+S31A5000401652E30800C4E55020A0030920C4E5103095E502005365
+S31A5000402BE10200001A013041E20330C4E5210000EA0010A0E161
+S31A500040401C004BE2102085E54030A0E30730C4E50A20A0E300B2
+S31A5000405520C4E51030D4E50130C0E7011081E2030051E3FAFFC2
+S31A5000406AFF9A19305BE51A105BE50600A0E1002096E5031481A5
+S31A5000407FE124C092E5041041E20FE0A0E104F09CE51B305BE5F3
+S31A50004094013043E20330C4E56220A0E30020C4E50710D4E522CF
+S31A500040A930A0E30030C4E50320D4E5FF1001E2012082E20100CC
+S31A500040BE52E1CFFFFF1A70A81BE90DC0A0E170D82DE904B04CB5
+S31A500040D3E200C0A0E30C40A0E10260A0E1040090E5060054E1F9
+S31A500040E804E090E50150A0E1060000AA0520A0E106C0A0E104A1
+S31A500040FD3092E501C05CE2034084E0082082E2FAFFFF1A22301B
+S31A50004112A0E30030CEE50A40CEE54434A0E10B30CEE50420A034
+S31A50004127E30820CEE51010D0E500C0A0E30910CEE54030A0E398
+S31A5000413C0730CEE5062082E20020CEE506005CE10F0000AA8C49
+S31A5000415131A0E1051093E701008CE2000051E3053083E0060081
+S31A50004166000A042093E5000052E30300000A1030DEE50130C111
+S31A5000417BE4012052E2FBFFFF1A00C0A0E106005CE1EFFFFFBA62
+S31A5000419070A81BE90DC0A0E170D82DE90050A0E1044095E50469
+S31A500041A53094E50C2094E504B04CE20410D3E5010052E303007A
+S31A500041BA001A1C6094E50030A0E3143084E5020000EA2060942B
+S31A500041CFE50030A0E3183084E5141094E50030A0E32C3084E527
+S31A500041E4030051E10500000A242094E50500A0E114FFFFEB01EB
+S31A500041F930A0E30C3084E5090000EA181094E5000051E3050036
+S31A5000420E000A282094E50500A0E10BFFFFEB0230A0E30C30848B
+S31A50004223E5000000EA0C1084E50500A0E1003095E50610A0E115
+S31A5000423824C093E50020A0E30FE0A0E108F09CE570A81BE90D0A
+S31A5000424DC0A0E100D82DE904B04CE200A81BE90DC0A0E1F0D833
+S31A500042622DE90060A0E1047096E5045097E52230A0E30030C571
+S31A50004277E50720D5E504B04CE2FF4002E2100000EA0A0014E316
+S31A5000428C0200000A0600A0E10410A0E1BDFFFFEB050014E302FB
+S31A500042A100000A0600A0E10410A0E146FFFFEB300014E3020034
+S31A500042B6000A0600A0E10410A0E1E1FFFFEB0730D5E5FF40037A
+S31A500042CBE2000054E30300000A0740C5E5303097E5000053E35F
+S31A500042E0E8FFFF1A000097E55F2100EBF0A81BE90DC0A0E100A2
+S31A500042F5D82DE9043090E5002093E504B04CE2200092E500A80E
+S31A5000430A1BE90DC0A0E100D82DE91C209FE5083090E503009305
+S31A5000431FE8030082E804B04CE20C109FE50130A0E3003081E512
+S31A5000433400A81BE99CA2000098A200000DC0A0E1F0DF2DE904C3
+S31A50004349B04CE245DF4DE20070A0E1D0504BE20500A0E1FC30E8
+S31A5000435E4BE200308DE5012C4BE204208DE50160A0E174339F0D
+S31A50004373E56E10A0E308308DE50120A0E30030A0E3232600EBC4
+S31A50004388413F4BE200308DE5422F4BE204208DE5B8004BE24C16
+S31A5000439D339FE57410A0E308308DE50120A0E30030A0E31826B8
+S31A500043B200EB433F4BE200308DE5112E4BE204208DE5A0004B77
+S31A500043C7E224339FE56910A0E308308DE50120A0E30230A0E1D1
+S31A500043DC0D2600EB453F4BE200308DE5462F4BE204208DE58845
+S31A500043F1004BE2FC329FE56810A0E308308DE50120A0E3023007
+S31A50004406A0E1022600EB473F4BE200308DE5122E4BE204208D44
+S31A5000441BE570004BE2D4329FE56C10A0E308308DE50120A0E3DD
+S31A500044300030A0E3F72500EB58004BE2493F4BE200308DE5008B
+S31A5000444540A0E3B0329FE57610A0E308308DE50420A0E1044047
+S31A5000445A8DE50230A0E3EC2500EB4A3F4BE200308DE54B2F4BB7
+S31A5000446FE204208DE540004BE284329FE57210A0E308308DE514
+S31A500044840120A0E30430A0E1E12500EB0730A0E318008DE80735
+S31A5000449900A0E164329FE50610A0E10C308DE50120A0E30840EC
+S31A500044AE8DE50530A0E1E32500EB040050E10200001A44029F52
+S31A500044C3E53B1500EBCB0000EA10311BE5000053E30900000A2F
+S31A500044D8DC304BE20C011BE50310A0E1531F00EB000050E30807
+S31A500044ED00001A18029FE50C111BE52E1500EBBE0000EADC30AD
+S31A500045024BE20300A0E10420A0E300129FE57B1300EB18311B83
+S31A50004517E5000053E31000000AE8404BE214011BE50410A0E105
+S31A5000452C411F00EB000050E3D4019FE50600000AE8004BE2F830
+S31A50004541404BE20410A0E1C21D00EB000050E3060000AABC01A3
+S31A500045569FE514111BE5151500EBA50000EAB0019FE512150051
+S31A5000456BEBA20000EA2C311BE5000053E3FA3FA00328310B0596
+S31A5000458020311BE5000053E34030A0031C310B0500311BE500A8
+S31A500045950053E30A30A003FC300B0508311BE5000053E3FA3FC4
+S31A500045AAA00304310B05DC004BE26D1F00EB0010A0E15C019FB1
+S31A500045BFE500A0A0E3FB1400EBE8004BE2671F00EB0010A0E178
+S31A500045D448019FE5F61400EB44019FE50A70A0E13E1900EB664E
+S31A500045E90000EA012C4BE2BC3152E1084098E5083083E2BC30B5
+S31A500045FEC8E10060A0E3045098E50830A0E30030C4E501708769
+S31A50004613E20160C4E50708A0E1B260C4E12008A0E1261900EB36
+S31A50004628B600C4E10620A0E1BC10D8E10400A0E1841800EB0094
+S31A5000463D08A0E12008A0E11E1900EBDC104BE2B200C4E104202A
+S31A50004652A0E30C0085E2291300EB100085E2E8104BE20420A080
+S31A50004667E3251300EB0140A0E30940C5E5BC00D8E1111900EBA1
+S31A5000467C0410A0E1B200C5E1F8204BE20800A0E1BC1700EB0852
+S31A5000469100A0E15F1800EB3D1700EB88209FE5006082E5043174
+S31A500046A61BE50060A0E1034086E00250A0E1000000EA9B1800AF
+S31A500046BBEB003095E5000053E30200001A311700EB040050E145
+S31A500046D0F8FFFF3A2E1700EB0080A0E12C1700EB28311BE50394
+S31A500046E54080E0110000EA2431015048310150743101508831B0
+S31A500046FA015098310150B4310150C8310150E8310150EC3101E2
+S31A5000470F501032015058840000303201505C32015080320150EB
+S31A50004724983201500C43005098A200007D1800EB161700EB049A
+S31A500047390050E1FBFFFF3A0900A0E1EC104BE20420A0E3EC1259
+S31A5000474E00EB003095E5000053E30A00000A24311BE501A08AA1
+S31A50004763E2000053E30600000A74309FE5B600D3E1D21800EB5C
+S31A500047780010A0E168009FE5082066E08B1400EBFC301BE50332
+S31A5000478D0057E10E0000AAEC504BE20500A0E14C409FE50420AE
+S31A500047A2A0E30410A0E1D51200EB0400A0E1DC104BE20420A060
+S31A500047B7E3D11200EB30009FE5F41700EB008050E20490A0E175
+S31A500047CC86FFFF1AD01800EB1C009FE5FC201BE50A10A0E17446
+S31A500047E11400EB040000EA9CA20000A032015058840000EA0554
+S31A500047F60000C4320150F0AF1BE90DC0A0E100D82DE930309F33
+S31A5000480BE530009FE5001093E504B04CE228C09FE50C3091E521
+S31A500048200C308CE50C3090E5102091E50C3081E510208CE510D6
+S31A500048353090E5103081E500A81BE9F883000020000050A4A2F0
+S31A5000484A00000DC0A0E100D82DE91C209FE51C109FE5000092C5
+S31A5000485FE50C3091E50C3080E5102091E504B04CE2102080E599
+S31A5000487400A81BE9F8830000A4A200000DC0A0E130D82DE96C94
+S31A50004889209FE504B04CE2003092E50040A0E1000053E305009B
+S31A5000489E000A443094E5040053E30200001A003092E5383084CF
+S31A500048B3E530A81BE940509FE5003095E5013083E2003085E5EB
+S31A500048C8010053E30000001ACAFFFFEB28309FE5004083E56C91
+S31A500048DD0500EB003095E5013043E2003085E5000053E30000B0
+S31A500048F2001AD4FFFFEB30A81BE944840000C4A20000384401FD
+S31A50004907000DC0A0E130D82DE924309FE504B04CE220409FE53B
+S31A5000491C0350A0E1030054E10300003A0FE0A0E104F014E40586
+S31A500049310054E1FBFFFF2A30A81BE9FC880000FC8800000DC012
+S31A50004946A0E100D82DE90030A0E10120A0E104B04CE20C009FB7
+S31A5000495BE50310A0E1F51100EB0000A0E300A81BE9EC320150E9
+S31A500049700DC0A0E100D82DE904B04CE2FEDEFFE700A81BE90D43
+S31A50004985C0A0E110D82DE970209FE570309FE570109FE500400C
+S31A5000499AA0E3004082E5004083E564209FE50130A0E300308173
+S31A500049AFE55C309FE5004082E5004083E5082082E20F32E0E3C9
+S31A500049C4003082E504B04CE2AE0100EB40309FE5004083E509D0
+S31A500049D922A0E3004082E59D0F00EB101F11EE0F1081E3101FB0
+S31A500049EE01EE101F11EE011A81E3031081E3101F01EE10A81B5A
+S31A50004A03E904000590080005900C00059010000490140004903C
+S31A50004A18100000900DC0A0E130D82DE90030A0E1010040E20053
+S31A50004A2D0053E304B04CE21B0000DA6C509FE500E0A0E301402D
+S31A50004A4240E2001095E5002095E5010052E10300001A50309F53
+S31A50004A57E5002093E5010052E1FCFFFF0A09C2A0E300309CE540
+S31A50004A6C000053E30400000A012052E000309C45032082400250
+S31A50004A81E08EE0010000EA023061E003E08EE002005EE3EAFFA1
+S31A50004A96FFDA0030A0E10400A0E1000053E3E4FFFFCA30A81BD1
+S31A50004AABE9100000900DC0A0E100D82DE984309FE5002093E50B
+S31A50004AC004B04CE2FF0812E31000A0130500001AFF0C12E308C3
+S31A50004AD500A0130200001AFF0012E31800A0030000A0135810DD
+S31A50004AEA9FE558C09FE55230A0E1010013E30C00000A0B0050D6
+S31A50004AFFE30700001A003091E50C2003E05230A0E1010013E399
+S31A50004B140300001A010080E21B0050E3F9FFFF9A00A81BE9200B
+S31A50004B290080E200A81BE9010080E2070010E3ECFFFF1A0000B2
+S31A50004B3EE0E300A81BE9000005901800049000F8FF0F0DC0A0E9
+S31A50004B53E100D82DE92A0050E30B00A0C314109FE50120A0E311
+S31A50004B68003091E504B04CE21230C3E1003081E500A81BE9042E
+S31A50004B7D0005900DC0A0E100D82DE92A0050E30B00A0C314100D
+S31A50004B929FE50120A0E3003091E504B04CE2123083E1003081B1
+S31A50004BA7E500A81BE9040005900DC0A0E100D82DE90B3040E2E0
+S31A50004BBC1F0053E304B04CE20400009A1F3000E20120A0E308DC
+S31A50004BD1109FE51223A0E1002081E500A81BE9180004900DC084
+S31A50004BE6A0E100D82DE90B3040E21F0053E304B04CE23400002D
+S31A50004BFB9A000051E31900000A000052E30B00000A1F1000E203
+S31A50004C10BC009FE50120A0E3003090E51221A0E1B0109FE502B6
+S31A50004C253083E1003080E5003091E5023083E1003081E500A881
+S31A50004C3A1BE91F1000E28C009FE50120A0E3003090E51221E08E
+S31A50004C4FE180109FE5023003E0003080E5003091E5023003E0A0
+S31A50004C64003081E500A81BE9000052E30B00000A1F1000E254F4
+S31A50004C79009FE50120A0E3003090E51221A0E148109FE5023041
+S31A50004C8E83E1003080E5003091E50230C3E1003081E500A81BED
+S31A50004CA3E91F1000E228009FE50120A0E3003090E51221A0E103
+S31A50004CB814109FE5023083E1003080E5003091E50230C3E10042
+S31A50004CCD3081E500A81BE910000490140004900DC0A0E110D8B8
+S31A50004CE22DE904B04CE260439FE5104F02EE0330A0E3103F03F1
+S31A50004CF7EE0400A0E10010A0E30129A0E3B21100EB0010A0E35E
+S31A50004D0C052CA0E32000A0E302C0A0E3033B8CE30C3083E30150
+S31A50004D213A83E1023184E7010040E2011081E2012082E20000CF
+S31A50004D3650E3F6FFFFCA8020A0E30210A0E10400A0E302C0A082
+S31A50004D4BE3033B8CE30C3083E3013A83E1023184E7010040E26B
+S31A50004D60011081E2012082E2000050E3F6FFFFCA012CA0E3024C
+S31A50004D7510A0E18000A0E3D0C29FE5013AA0E12C3683E1023174
+S31A50004D8A84E7010040E2011081E2012082E2000050E3F7FFFF0F
+S31A50004D9FCA062DA0E30210A0E18000A0E3A0C29FE5013AA0E1F1
+S31A50004DB42C3683E1023184E7010040E2011081E2012082E20014
+S31A50004DC90050E3F7FFFFCA612FA0E30210A0E10100A0E370C231
+S31A50004DDE9FE5013AA0E12C3683E1023184E7010040E201108111
+S31A50004DF3E2012082E2000050E3F7FFFFCA622FA0E30210A0E155
+S31A50004E080100A0E340C29FE5013AA0E12C3683E1023184E70114
+S31A50004E1D0040E2011081E2012082E2000050E3F7FFFFCA632F8B
+S31A50004E32A0E30210A0E10100A0E310C29FE5013AA0E12C368384
+S31A50004E47E1023184E7010040E2011081E2012082E2000050E332
+S31A50004E5CF7FFFFCA192EA0E30210A0E10400A0E3E0C19FE50122
+S31A50004E713AA0E12C3683E1023184E7010040E2011081E20120FF
+S31A50004E8682E2000050E3F7FFFFCA652FA0E30210A0E10400A01D
+S31A50004E9BE3B0C19FE5013AA0E12C3683E1023184E7010040E291
+S31A50004EB0011081E2012082E2000050E3F7FFFFCA022CA0E302F9
+S31A50004EC510A0E10200A0E180C19FE5013AA0E12C3683E10231F4
+S31A50004EDA84E7010040E2011081E2012082E2000050E3F7FFFFBE
+S31A50004EEFCA032CA0E30210A0E1020CA0E350C19FE5013AA0E167
+S31A50004F042C3683E1023184E7010040E2011081E2012082E200C2
+S31A50004F190050E3F7FFFFCA012BA0E30210A0E18000A0E320C115
+S31A50004F2E9FE5013AA0E12C3683E1023184E7010040E2011081BF
+S31A50004F43E2012082E2000050E3F7FFFFCA122DA0E30210A0E155
+S31A50004F588000A0E3F0C09FE5013AA0E12C3683E1023184E70196
+S31A50004F6D0040E2011081E2012082E2000050E3F7FFFFCA022B9F
+S31A50004F82A0E30210A0E1010BA0E3C0C09FE5013AA0E12C36837A
+S31A50004F97E1023184E7010040E2011081E2012082E2000050E3E1
+S31A50004FACF7FFFFCA031BA0E30020A0E32000A0E302C0A0E303AC
+S31A50004FC13B8CE30C3083E3013A83E1023184E7010040E20110C8
+S31A50004FD681E2012082E2000050E3F6FFFFCA032BA0E30210A034
+S31A50004FEBE12000A0E302C0A0E3033B8CE3043083E3013A83E1AC
+S31A50005000023184E7010040E2011081E2012082E2000050E3F662
+S31A50005015FFFFCA0E2CA0E30210A0E18000A0E302C0A0E3033B92
+S31A5000502A8CE30C3083E3013A83E1023184E7010040E201108118
+S31A5000503FE2012082E2000050E3F6FFFFCA10A81BE9004000C0F2
+S31A500050540020C0000DC0A0E100D82DE904B04CE21CC09FE50093
+S31A50005069309CE50030C3E1010000E0003083E100308CE512240B
+S31A5000507EA0E3003082E500A81BE9600100000DC0A0E100D82D4D
+S31A50005093E92C209FE5003092E528109FE5FF3F83E3003082E55B
+S31A500050A8003091E504B04CE2FF3F83E3003081E5102042E2FF88
+S31A500050BD3FA0E3003082E500A81BE91C000490040004900DC06E
+S31A500050D2A0E110D82DE90D40A0E110D09FE504B04CE20FE0A051
+S31A500050E7E100F0A0E104D0A0E110A81BE9FCFFFF010DC0A0E1B2
+S31A500050FC30D82DE9B0209FE5B0309FE504B04CE2001092E5000A
+S31A5000511140A0E1005093E5000051E30600001A0130A0E3003072
+S31A5000512682E53500A0E30120A0E1E70C00EB3500A0E3E00C00DB
+S31A5000513BEB0E33A0E3083084E5022CA0E30C2084E53E3383E29D
+S31A50005150103084E50123A0E3142084E5033383E2183084E58338
+S31A5000516500A0E31C2084E53530A0E3203084E58010A0E3B6FF4E
+S31A5000517AFFEB010515E30900001A34309FE5002093E50100122C
+S31A5000518FE30200000A0430A0E3043084E530A81BE90130A0E3E2
+S31A500051A4043084E530A81BE90030A0E3043084E530A81BE9FCFF
+S31A500051B983000000000490600100000DC0A0E100D82DE9243083
+S31A500051CE9FE5002093E504B04CE2010512E30200001A0130A090
+S31A500051E3E3043080E500A81BE90030A0E3043080E500A81BE941
+S31A500051F8000004900DC0A0E100D82DE9803260E0030180E00026
+S31A5000520D0180E014209FE50002A0E1483092E504B04CE20FE0DA
+S31A50005222A0E103F0A0E100A81BE9500000000DC0A0E170D82D6D
+S31A50005237E9040051E304B04CE24CD04DE20040A0E12900001ABA
+S31A5000524C045094E5010055E32600001A8300A0E38110A0E37C1B
+S31A50005261FFFFEB1E00A0E3E3FFFFEB8300A0E30310A0E30230BE
+S31A50005276A0E3043084E50060A0E374FFFFEB0500A0E1DBFFFF0E
+S31A5000528BEB8300A0E30330A0E3043084E50510A0E16DFFFFEB88
+S31A500052A00500A0E3D4FFFFEB020000EA0A00A0E3D1FFFFEB012A
+S31A500052B56086E2090056E30C0000CA0400A0E12010A0E3003046
+S31A500052CAA0E360300BE560204BE200208DE55C304BE258204BBB
+S31A500052DFE2361C00EB000050E3EFFFFF0A0430A0E3043084E5C7
+S31A500052F470A81BE90DC0A0E100D82DE93500A0E304B04CE26CF1
+S31A500053090C00EB00A81BE90DC0A0E1F0D82DE9E8209FE5E810E6
+S31A5000531E9FE5022061E004B04CE2E0709FE55CD04DE200409755
+S31A50005333E50400A0E1F10F00EB0E02A0E3021A80E2202090E4F5
+S31A50005348000031E1FCFFFF1A0000A0E3160F07EE9A0F07EE1089
+S31A5000535D1F11EE011AC1E3101F01EE0010A0E3151F07EE00002E
+S31A50005372A0E10000A0E10000A0E10000A0E10000A0E10000A0AB
+S31A50005387E150504BE20500A0E10FE0A0E104F0A0E1101F11EE74
+S31A5000539C011A81E3031081E3101F01EE0560A0E140404BE204FB
+S31A500053B100A0E158109FE50320A0E3D91100EB000050E3140062
+S31A500053C6000A48009FE5791100EB3430A0E324308DE504E0A000
+S31A500053DBE10F00BEE80DC0A0E10F00ACE80F00BEE80F00ACE888
+S31A500053F000309EE500308CE50F0096E8B50F00EB0800A0E31522
+S31A500054050000EA28F5005060F40050C04401001C330150203349
+S31A5000541A01500532A0E3143087E530C0D5E52F10D5E52EE0D5E6
+S31A5000542FE52D20D5E50C1481E18134A0E10E2482E1012082E254
+S31A50005444083087E50114A0E10C2087E5910203E08330A0E1057C
+S31A500054593283E2183087E5F0A81BE90DC0A0E110D82DE9543031
+S31A5000546E9FE504B04CE20040A0E1033004E0000053E30E000051
+S31A500054830A40009FE50410A0E1491100EB38309FE5033004E013
+S31A50005498000053E30100000A0400A0E310A81BE924009FE5007D
+S31A500054AD0004E0000050E30200A0130800A00310A81BE903005E
+S31A500054C2A0E110A81BE97E007E00403301501000100020002022
+S31A500054D7000DC0A0E100D82DE934309FE50020A0E3030050E16F
+S31A500054EC04B04CE20100008A030051E10400008A1C309FE50352
+S31A500055010050E10200008A030051E10000009A0120A0E302000D
+S31A50005516A0E100A81BE944000050F01F01500DC0A0E100D82DB6
+S31A5000552BE90C309FE50F0000E20000D3E704B04CE200A81BE933
+S31A500055404C3301500DC0A0E100D82DE920209FE5000092E504B5
+S31A50005555B04CE2000050E3010000CAE10800EB00A81BE900305F
+S31A5000556AE0E3003082E500A81BE9188400000DC0A0E100D82DE1
+S31A5000557FE9FF0000E2613040E2050053E30010A0E104B04CE296
+S31A500055940100008A570040E200A81BE9302040E2FF3002E2096E
+S31A500055A90053E30100008A0200A0E100A81BE9413040E205000F
+S31A500055BE53E30100009A0000E0E300A81BE9370041E200A81B25
+S31A500055D3E90DC0A0E110D82DE90030A0E304B04CE214D04DE290
+S31A500055E814304BE524404BE21C000BE5D2FFFFEBFF0000E204A7
+S31A500055FD10A0E1020000EB010050E3F9FFFF1A10A81BE90DC0F7
+S31A50005612A0E170D82DE90140A0E11050D4E504B04CE20000553C
+S31A50005627E30800001A240050E32800001A0130A0E31030C4E5DD
+S31A5000563C0C5084E5005084E5023043E2043084E5210000EA0185
+S31A500056510055E31700001A230050E30600001A080094E50C1072
+S31A5000566694E50030A0E30130C0E70220A0E31020C4E516000041
+S31A5000567BEA0C1094E5020B51E30300001A0030A0E31030C4E54B
+S31A500056900000E0E370A81BE9003094E5082094E5003083E000F3
+S31A500056A53084E50100C2E7013081E20C3084E5070000EA02002B
+S31A500056BA55E30700001AFF0000E2ABFFFFEB0002A0E1040084AC
+S31A500056CFE50330A0E31030C4E50000A0E370A81BE9030055E312
+S31A500056E42300001AFF0000E2A1FFFFEB043094E50020D4E5002D
+S31A500056F93083E1043084E5030052E10200000A2D00A0E36908B2
+S31A5000570E00EBDCFFFFEA2B00A0E3660800EB082094E50230D2D5
+S31A50005723E53A0053E31000001A0000D2E50C6094E55F0800EBAE
+S31A50005738083094E50100D3E55C0800EB0500A0E1060050E10789
+S31A5000574D00008A0210E0E3083094E50020D3E7033080E0010073
+S31A5000576280E20120C3E7060050E1F8FFFF9A0100A0E370A81B31
+S31A50005777E90000E0E30030A0E31030C4E570A81BE90DC0A0E115
+S31A5000578CF0D92DE904B04CE20070A0E168809FE52400A0E344A9
+S31A500057A10800EB0050A0E30540D7E70560A0E1050054E10700AD
+S31A500057B6000A0400A0E13D0800EB016086E2043085E00640D74A
+S31A500057CBE7FF5003E2000054E3F7FFFF1A2300A0E3350800EB44
+S31A500057E02502D8E7330800EB0F3005E20300D8E7300800EB52F5
+S31A500057F5FFFFEB7F0000E22B0050E3E5FFFF1AF0A91BE94C3388
+S31A5000580A01500DC0A0E1F0DF2DE990009FE50020A0E38C309F9D
+S31A5000581FE504D04DE2002083E504B04CE2001090E503A0A0E123
+S31A50005834020051E14B0000DA0090A0E16C809FE56C309FE5000F
+S31A500058492093E5000052E31900000A003090E554109FE5030074
+S31A5000585E53E30300009A003098E5030013E30440A00308000077
+S31A500058730A30209FE5003092E50140A0E3040053E10300009AAC
+S31A50005888003091E5010013E30140A0130240A0032C004BE200E6
+S31A5000589D1091E50420A0E1A00A00EB070000EAC8B200001C84D5
+S31A500058B20000CCB20000D4B20000003098E50020D3E50140A021
+S31A500058C7E32C204BE500309AE5000053E32400001A03C0A0E1B0
+S31A500058DC04005CE1150000AA2C604BE270E09FE50A70A0E16C6D
+S31A500058F1509FE50600DCE700109EE52032D5E70130C1E4002018
+S31A5000590697E500108EE5000052E31500001A0F3000E20320D5BA
+S31A5000591BE70120C1E400309AE500108EE5000053E30E00001AE4
+S31A5000593001C08CE204005CE1EDFFFFBA002099E50900A0E100CF
+S31A500059453098E5022064E0002089E5043083E0003088E5000022
+S31A5000595A52E3010000EAD0B200004C330150B5FFFFCAF0AF1B39
+S31A5000596FE90DC0A0E170D82DE904B04CE268C09FE500108CE529
+S31A5000598464109FE5000081E560009FE5002080E55C209FE500F1
+S31A500059990053E3003082E50C60A0E10A00000A4C409FE5005075
+S31A500059AEA0E3005084E5003094E593FFFFEB002094E5003094D0
+S31A500059C3E5050053E10200000A0500A0E170A81BE98CFFFFEB38
+S31A500059D8002096E50030A0E30030C2E5000096E570A81BE9D0D8
+S31A500059EDB20000CCB20000C8B20000D4B200001C8400000DC0B2
+S31A50005A02A0E1F0DF2DE924019FE524219FE504D04DE20070A04E
+S31A50005A17E3007082E504B04CE2003090E50290A0E1070053E195
+S31A50005A2C5A0000DA04319FE5002093E50010D2E503A0A0E10798
+S31A50005A410051E15400000AF0809FE5F0109FE5003091E500004C
+S31A50005A5653E31000000A003090E5030053E30300009A00309852
+S31A50005A6BE5030013E30450A0030A00000AB4209FE5003092E5E8
+S31A50005A800150A0E3050053E10500009A003098E5010013E3016A
+S31A50005A9550A0130250A003000000EA0150A0E30040A0E3050028
+S31A50005AAA54E1170000AA84609FE5003096E50100D3E40030861A
+S31A50005ABFE5ACFEFFEB0002A0E1003099E5FF7000E2000053E34B
+S31A50005AD43000001A00309AE50100D3E400308AE5A3FEFFEB008C
+S31A50005AE90087E1003099E5FF7000E2000053E32700001A2C3018
+S31A50005AFE4BE20370C4E7014084E2050054E1E8FFFFBA2C109F96
+S31A50005B13E5003091E5000053E30900000A2C004BE2001098E56D
+S31A50005B280520A0E10C0A00EB060000EAC8B200001C840000CC95
+S31A50005B3DB20000D0B20000D4B20000003098E50070C3E500304E
+S31A50005B5299E5000053E30F00001A30309FE5002093E50300A0EC
+S31A50005B67E1003098E5022065E0002080E5053083E0003088E524
+S31A50005B7C000052E3050000DA00309AE50020D3E5000052E300EE
+S31A50005B910000EAC8B20000ABFFFF1AF0AF1BE90DC0A0E170D849
+S31A50005BA62DE904B04CE25CC09FE500008CE558009FE50010801F
+S31A50005BBBE554109FE5002081E550209FE5000053E3003082E56B
+S31A50005BD00060A0E10A00000A40409FE50050A0E3005084E500E5
+S31A50005BE53094E584FFFFEB002094E5003094E5050053E10200C2
+S31A50005BFA000A0500A0E170A81BE97DFFFFEB000096E570A81B80
+S31A50005C0FE9CCB20000D0B20000C8B20000D4B200001C840000A1
+S31A50005C240DC0A0E100D82DE904B04CE2800800EB08209FE501D7
+S31A50005C3930A0E3003082E500A81BE9008400000DC0A0E170D8F0
+S31A50005C4E2DE904B04CE20060A0E30150A0E1006085E50040A094
+S31A50005C63E1060000EA003095E5016086E2002094E5033280E163
+S31A50005C78003085E5012082E2002084E5002094E50030D2E50099
+S31A50005C8D0053E30300000A0300A0E136FEFFEB000050E3F0FFA5
+S31A50005CA2FFAA0600A0E170A81BE90DC0A0E170D82DE904B04C9F
+S31A50005CB7E202E0A0E10060A0E3004051E20400001A3030A0E3E6
+S31A50005CCC0130C0E40030C0E50200A0E370A81BE907308EE2007B
+S31A50005CE10053E3073083B2C3E1B0E11300000A50509FE501102F
+S31A50005CF64EE28131A0E134C3B0E10020A0030120A01301005E62
+S31A50005D0BE30030A0130130A003032092E10600000AFFC00CE240
+S31A50005D202C32D5E70130C0E40F200CE20230D5E7026086E20153
+S31A50005D3530C0E400E051E2ECFFFF1A0600A0E170A81BE94C33F6
+S31A50005D4A01500DC0A0E110D82DE90010A0E188309FE504B04C84
+S31A50005D5FE2002093E500E0A0E30E0052E11C0000DA74409FE58D
+S31A50005D7400C094E50E005CE10300000A0100A0E30FE0A0E10C33
+S31A50005D89F0A0E100E0A0E101005EE30200001A50309FE500E09B
+S31A50005D9EC3E510A81BE9003094E501007EE3000053130B0000BA
+S31A50005DB31A38309FE5003093E5000053E30700000A0100A0E30C
+S31A50005DC80FE0A0E103F0A0E1000050E30200000A18209FE50190
+S31A50005DDD30A0E30030C2E510A81BE9C4430100288400002084BD
+S31A50005DF20000B8430100248400000DC0A0E110D82DE974409F03
+S31A50005E07E50030D4E504B04CE2000053E30B00000A64309FE51D
+S31A50005E1C00C093E500005CE30700000A58309FE50000A0E30004
+S31A50005E312093E50010A0E10FE0A0E10CF0A0E10030A0E300300D
+S31A50005E46C4E53C409FE50030D4E5000053E30800000A30309F18
+S31A50005E5BE5003093E5000053E30400000A0000A0E30FE0A0E118
+S31A50005E7003F0A0E10030A0E30030C4E510A81BE920840000283F
+S31A50005E85840000C443010024840000B84301000DC0A0E170D8EC
+S31A50005E9A2DE9B8209FE5003092E504B04CE2000053E30200006A
+S31A50005EAF0A003092E50FE0A0E103F0A0E19C209FE5003092E50C
+S31A50005EC4000053E30300000A0030A0E3003082E50250A0E3020F
+S31A50005ED90000EAA32500EB902500EB0050A0E1AD2700EB000091
+S31A50005EEE50E30000000AB52700EBA52700EBBEFFFFEB87270039
+S31A50005F03EB0300A0E3AB0800EB0300A0E3790800EB48609FE506
+S31A50005F18000055E30600000A40409FE5003094E50500A0E10F94
+S31A50005F2DE0A0E103F0A0E1000050E3F9FFFF1A902700EB00301E
+S31A50005F4296E5000053E30200000A003096E50FE0A0E103F0A089
+S31A50005F57E170A81BE914840000A8440100108400000484000041
+S31A50005F6C0DC0A0E1F0DD2DE904B04CE224D04DE20050A0E100C3
+S31A50005F8140A0E348604BE2F4A09FE500309AE50180A0E3000052
+S31A50005F9653E30500000A0400A0E10610A0E10FE0A0E103F0A03C
+S31A50005FABE10080A0E1020000EA0400A0E12E0600EB48000BE5E1
+S31A50005FC00600A0E1103044E2070053E303E0A0E1017084E21100
+S31A50005FD500008A0840A0E30020A0E302C0A0E144004BE20010A5
+S31A50005FEAA0E1043082E2012082E203C0C1E7040052E1FAFFFF14
+S31A50005FFFBA0010A0E106C0A0E10320A0E30130DCE4012042E2C9
+S31A500060140130C1E4010072E3FAFFFF1A000058E30700000A0592
+S31A5000602910A0E107005EE30C20A0930420A0830030A0E34BFE91
+S31A5000603EFFEB0050A0E1100000EA0520A0E107005EE31730A06D
+S31A50006053930730A083010073E37810A0E30300000A013043E230
+S31A500060680110C2E4010073E3FBFFFF1A07005EE30200009A08C0
+S31A5000607D5085E2010000EABC430100185085E20740A0E1190066
+S31A5000609254E3BCFFFFDAF0AD1BE90DC0A0E1F0D92DE904B04C0A
+S31A500060A7E20CD04DE20040A0E31A70A0E30130D0E40180A0E1EA
+S31A500060BC24000BE5500053E31700001A24004BE228104BE2DC1C
+S31A500060D1FEFFEB040050E10800000A24201BE50130D2E4FF30DB
+S31A500060E603E224200BE53D0053E30200001A28401BE50170844A
+S31A500060FBE2090000EA74209FE50030D2E50810A0E1000053E397
+S31A500061102900000A0130C1E40130F2E5000053E3FBFFFF1A24A6
+S31A500061250000EA0450A0E1070055E1180000AA0060A0E32C1032
+S31A5000613A4BE2104045E2070054E32C600BE50C20A0930420A079
+S31A5000614F8324001BE50630A0E190FEFFEB2C101BE50500A0E14D
+S31A50006164CB0500EB070054E30300009A24301BE5083083E20247
+S31A500061790000EA6033015024301BE5183083E2015085E22430E0
+S31A5000618E0BE5070055E1E7FFFFBA28209FE50030D2E50810A06F
+S31A500061A3E1000053E30300000A0130C1E40130F2E5000053E359
+S31A500061B8FBFFFF1A0030A0E30030C1E5000000EA64330150F01E
+S31A500061CDA91BE90DC0A0E1F0D82DE99C239FE504B04CE2C0D0D9
+S31A500061E24DE20040A0E10070A0E30030D4E50260A0E10070C271
+S31A500061F7E53F3043E2340053E303F19F970B0200EADC620050AB
+S31A5000620C386A0050646300500869005090670050386A005038EC
+S31A500062216A0050386A0050B4640050E0680050386A0050386AD2
+S31A500062360050386A0050386A005098650050386A0050386A00E8
+S31A5000624B50B46400504C630050386A005090670050F46800504C
+S31A50006260386A0050386A0050386A005094650050386A0050388A
+S31A500062756A0050386A0050386A0050386A0050386A0050386A9A
+S31A5000628A0050386A0050386A0050B0690050906700501863004A
+S31A5000629F50386A0050386A005058630050386A0050386A005071
+S31A500062B4386A0050BC680050386A0050C4640050386A00503885
+S31A500062C96A0050386A005040630050D868005090670050A3242D
+S31A500062DE00EB902400EB5330A0E30030C6E50020A0E30320C65E
+S31A500062F3E584129FE54032A0E10F3003E20320D1E70F0000E25E
+S31A500063080030D1E70120C6E50230C6E5CB0100EA64129FE500E9
+S31A5000631D30D1E50620A0E1000053E3B001000A0130C2E401308F
+S31A50006332F1E5000053E3FBFFFF1AAB0100EA010084E28B020057
+S31A50006347EBBE0100EA010084E2EE0200EBBB0100EA0600A0E1E8
+S31A5000635C02FFFFEBB80100EA0130D4E5000053E30A00001AFE06
+S31A500063710100EB0C129FE50030D1E50620A0E1000053E39901D6
+S31A50006386000A0130C2E40130F1E5000053E3FBFFFF1A940100E6
+S31A5000639BEAA4704BE2A0504BE2013084E2A0300BE50500A0E172
+S31A500063B00710A0E123FEFFEB000050E32400000AA0201BE501BD
+S31A500063C530D2E4FF3003E2A0200BE52C0053E31E00001A050024
+S31A500063DAA0E1A8104BE218FEFFEB000050E31900000AA0201BC1
+S31A500063EFE50130D2E4FF3003E2A0200BE52C0053E31300001A24
+S31A50006404A4101BE5000051E30B00000AA8001BE5ED0100EB00AF
+S31A500064191050E20300000AA0001BE5A4201BE50030A0E3DBFDDA
+S31A5000642EFFEBA4201BE5A0301BE5823083E0A0300BE5A0201BD5
+S31A50006443E50030D2E52C0053E301308202D4FFFF0AA0301BE55F
+S31A500064580020D3E5000052E30900001A1C119FE50030D1E5060C
+S31A5000646D20A0E1000053E35D01000A0130C2E40130F1E50000A7
+S31A5000648253E3FBFFFF1A580100EAF8109FE50030D1E50620A0EB
+S31A50006497E1000053E35301000A0130C2E40130F1E5000053E311
+S31A500064ACFBFFFF1A4E0100EA0400A0E10610A0E1F6FEFFEB60DF
+S31A500064C10100EAAC504BE20500A0E1013084E2AC300BE5B010B3
+S31A500064D64BE2DAFDFFEB000050E31B00000AAC201BE50130D246
+S31A500064EBE4FF3003E2AC200BE52C0053E31500001A0500A0E17B
+S31A50006500B4104BE2CFFDFFEB000050E31000000AB0001BE50686
+S31A5000651510A0E1B4201BE50130A0E312FDFFEB000050E346018F
+S31A5000652A001A5C109FE50030D1E50620A0E1000053E32B01000D
+S31A5000653F0A0130C2E40130F1E5000053E3FBFFFF1A260100EAAF
+S31A5000655430109FE50030D1E50620A0E1000053E32101000A0128
+S31A5000656930C2E40130F1E5000053E3FBFFFF1A1C0100EAC8AA28
+S31A5000657E00004C3301501483000064330150683301506C3301D7
+S31A50006593500170A0E3B8504BE20500A0E1013084E2B8300BE52F
+S31A500065A8BC104BE2A5FDFFEB000050E36B00000AB8201BE50182
+S31A500065BD30D2E4FF3003E2B8200BE52C0053E36500001A0500CB
+S31A500065D2A0E1C0104BE29AFDFFEB000050E36000000AB8001BEF
+S31A500065E7E50130D0E4FF3003E2B8000BE53A0053E35A00001ADF
+S31A500065FC000057E33E00000AC0301BE5000053E32400000A9CC2
+S31A50006611504BE2C0301BE50040A0E3030054E11100002A051066
+S31A50006626A0E1B8201BE50130D2E40430C1E7FF3003E2B8200BF6
+S31A5000663BE57D0053E30300001A0130D2E4203083E30430C5E7C2
+S31A50006650B8200BE5014084E27F0054E30200008AC0301BE5033B
+S31A500066650054E1EEFFFF3A0500A0E1BC101BE50420A0E1390738
+S31A5000667A00EB040050E10700001AC0201BE5BC301BE502206422
+S31A5000668FE0C0200BE5043083E0BC300BE5000052E3DBFFFF1A55
+S31A500066A4C0301BE5000053E30900001A58139FE50030D1E50667
+S31A500066B920A0E1000053E3CA00000A0130C2E40130F1E50000ED
+S31A500066CE53E3FBFFFF1AC50000EA34139FE50030D1E50620A0F2
+S31A500066E3E1000053E3C000000A0130C2E40130F1E5000053E357
+S31A500066F8FBFFFF1ABB0000EABC101BE5C0201BE50130A0E323FC
+S31A5000670DFDFFEB000050E30900000AF0129FE50030D1E5062062
+S31A50006722A0E1000053E3B000000A0130C2E40130F1E50000536A
+S31A50006737E3FBFFFF1AAB0000EACC129FE50030D1E50620A0E17D
+S31A5000674C000053E3A600000A0130C2E40130F1E5000053E3FBED
+S31A50006761FFFF1AA10000EAA8129FE50030D1E50620A0E100005F
+S31A5000677653E39C00000A0130C2E40130F1E5000053E3FBFFFFCF
+S31A5000678B1A970000EA013084E2C4300BE5C4504BE20020D4E573
+S31A500067A00030A0E3C8300BE5530052E3430052130700001A059D
+S31A500067B500A0E1C8104BE221FDFFEBC4201BE50030D2E53B00E5
+S31A500067CA53E301308202C4300B050500A0E1CC104BE219FDFFD1
+S31A500067DFEB000050E30100000ACC001BE5672300EB0300A0E35F
+S31A500067F4700600EB0300A0E33E0600EBC8001BE5000050E30821
+S31A5000680900000A08229FE5003092E5000053E30400000A003051
+S31A5000681E92E50FE0A0E103F0A0E1000050E3C8000B05C8501B76
+S31A50006833E5000055E30300000A0900A0E3C8000BE5B40000EBED
+S31A50006848800000EAB82500EB000050E30400000A6330A0E3005C
+S31A5000685D30C4E5B8219FE5623043E2003082E50030D4E5530010
+S31A5000687253E3730053130600001A0500A0E131FDFFEB98219F96
+S31A50006887E598319FE5003082E5ED2400EB010000EA0100A0E372
+S31A5000689C2AFDFFEB0300A0E3440600EB0300A0E3120600EB1923
+S31A500068B10400EB0000E0E3650000EA160400EB64319FE500203D
+S31A500068C693E50FE0A0E102F0A0E10100A0E35E0000EAA005009B
+S31A500068DBEB590000EA010084E20610A0E14B2FA0E3D30200EB69
+S31A500068F0540000EA010084E20610A0E14B2FA0E3B80200EB4F10
+S31A500069050000EAD0004BE2013084E2D0300BE5D4104BE2CAFCE2
+S31A5000691AFFEB000050E31800000AD0201BE50130D2E4FF3003CA
+S31A5000692FE2D0200BE52C0053E31200001A0130D2E4D0200BE5E6
+S31A50006944430053E30200001AD4001BE5E90600EB010000EAD4E6
+S31A50006959001BE5E10600EBA8109FE50030D1E50620A0E1000038
+S31A5000696E53E31E00000A0130C2E40130F1E5000053E3FBFFFF53
+S31A500069831A190000EAA0109FE50030D1E50620A0E1000053E395
+S31A500069981400000A0130C2E40130F1E5000053E3FBFFFF1A0F40
+S31A500069AD0000EAD8004BE2013084E2D8300BE5DC104BE2A0FC4C
+S31A500069C2FFEB000050E30B00001A60109FE50030D1E50620A088
+S31A500069D7E1000053E30300000A0130C2E40130F1E5000053E31D
+S31A500069ECFBFFFF1A0030A0E30030C2E5120000EA0C009FE560B7
+S31A50006A01FBFFEBDC001BE5CF0300EB0D0000EA643301506C332E
+S31A50006A160150703301500C8400009886000034840000D0430156
+S31A50006A2B000884000068330150743301500400A0E10610A0E174
+S31A50006A404B2FA0E35B0600EB0600A0E14DFBFFEB0000A0E3F076
+S31A50006A55A81BE90DC0A0E110D82DE914409FE504B04CE2041010
+S31A50006A6AA0E1460500EB0400A0E143FBFFEB10A81BE9C8AA002F
+S31A50006A7F000DC0A0E110D82DE938309FE5002093E504B04CE2FA
+S31A50006A94000052E3000000AAEDFFFFEB24409FE50400A0E1C9AC
+S31A50006AA9FAFFEB0400A0E1C6FDFFEB000050E3F9FFFF0A000038
+S31A50006ABEA0B30100A0A310A81BE918840000C8A200000DC0A0A7
+S31A50006AD3E100D82DE904B04CE200A81BE90DC0A0E100D82DE9BF
+S31A50006AE804B04CE24CFCFFEBE80400EB2B00A0E36E0300EB004E
+S31A50006AFDA81BE90DC0A0E100D82DE908309FE504B04CE20000A8
+S31A50006B1283E500A81BE9188400000DC0A0E100D82DE93C109F41
+S31A50006B27E55830A0E30030C1E50020A0E30320C1E504B04CE2EF
+S31A50006B3C28C09FE54032A0E10F3003E20320DCE70F0000E20094
+S31A50006B5130DCE70120C1E50230C1E50100A0E108FBFFEB00A830
+S31A50006B661BE9C8AA00004C3301500DC0A0E100D82DE938209F4B
+S31A50006B7BE538109FE50030E0E3003082E530309FE50020A0E3ED
+S31A50006B90002081E5002083E524109FE524309FE5003081E50462
+S31A50006BA5B04CE21C209FE50130A0E3003082E500A81BE92CB311
+S31A50006BBA000028B30000D8B20000B0B3000030B300002C840015
+S31A50006BCF000DC0A0E130D82DE99C309FE504B04CE20040A0E1FC
+S31A50006BE4002093E50150A0E1000052E30000001ADDFFFFEB12B5
+S31A50006BF90054E3070000CA78309FE578109FE5002093E503C096
+S31A50006C0EA0E1022061E0052082E0800052E30100009A0000A0C0
+S31A50006C23E330A81BE958E09FE500309EE5030054E10B00000A8B
+S31A50006C384C009FE5003090E548109FE5030054E1030000BA01AA
+S31A50006C4D2084E20030A0E3023181E7002080E500408EE50030A0
+S31A50006C629CE5043181E700309CE50300A0E1053083E000308C20
+S31A50006C77E530A81BE92C840000B0B3000030B300002CB300001C
+S31A50006C8C28B30000D8B200000DC0A0E1F0DD2DE904B04CE20421
+S31A50006CA1D04DE20060A0E174009FE50150A0E1001090E5024017
+S31A50006CB6A0E168A09FE5000051E31300001A0130A0E3003080A1
+S31A50006CCBE558709FE558809FE50130A0E1031CA0E10800A0E3F4
+S31A50006CE003E1A0E101C083E28120A0E1073022E0000051E3032C
+S31A50006CF520A0B10210A0E1010050E2F8FFFF1A0C30A0E10E2002
+S31A50006D0A88E7FF0053E3F0FFFF9A14709FE50030A0E300308A7D
+S31A50006D1FE5080000EA308400001C840000B71DC104B4B30000DE
+S31A50006D3425305BE5243C23E0032197E7016086E2044422E00146
+S31A50006D495045E2010075E30600000A25004BE20610A0E10120F5
+S31A50006D5EA0E3710500EB00309AE5000053E3F0FFFF0A0400A065
+S31A50006D73E1F0AD1BE90DC0A0E170D82DE968319FE504B04CE288
+S31A50006D880CD04DE21C000BE50020A0E30020C3E500C0A0E100DD
+S31A50006D9D20DCE50350A0E1430052E33700001A0130DCE55200C9
+S31A50006DB253E33400001A0260DCE5430056E33100001A0330DCF9
+S31A50006DC7E53A0053E32E00001A1C404BE20400A0E104308CE214
+S31A50006DDC1C300BE520104BE297FBFFEB000050E34600000A1C98
+S31A50006DF1201BE50130D2E4FF3003E21C200BE52C0053E340004E
+S31A50006E06001A0400A0E124104BE28CFBFFEB000050E33B000042
+S31A50006E1B0A20001BE524101BE50020E0E399FFFFEBC0309FE5D5
+S31A50006E30004093E50010A0E1000054E30B00000AB0209FE5000E
+S31A50006E4530D2E50510A0E1000053E30300000A0130C1E401301B
+S31A50006E5AF2E5000053E3FBFFFF1A0030A0E30030C1E5260000FE
+S31A50006E6FEA010085E22020A0E38BFBFFEB0060C5E5010080E2C6
+S31A50006E840040C5E71F0000EA1C301BE50300A0E10120D0E44CBD
+S31A50006E990052E30210A0E10600000A020000CA430052E30B0067
+S31A50006EAE000A110000EA500051E30400000A0E0000EA0510A035
+S31A50006EC3E14B2FA0E3C60100EB0E0000EA0510A0E14B2FA0E349
+S31A50006ED8040200EB0A0000EA0510A0E1022BA0E3110100EB0621
+S31A50006EED0000EAC8AA00001C840000683301500300A0E10510B9
+S31A50006F02A0E14B2FA0E3200500EB70A81BE90DC0A0E100D82D27
+S31A50006F17E90030D0E504B04CE2700053E30300001A18109FE5F0
+S31A50006F2C4B2FA0E3420100EB00A81BE908109FE54B2FA0E31773
+S31A50006F410500EB00A81BE9C8AA00000DC0A0E100D82DE9682013
+S31A50006F5680E2020050E104B04CE20300002A043091E4043080CF
+S31A50006F6BE4020050E1FBFFFF3A00A81BE90DC0A0E100D82DE989
+S31A50006F804530A0E30130C0E43020A0E30120C0E4133043E201D8
+S31A50006F9530C0E404B04CE200A81BE90DC0A0E100D82DE94F3074
+S31A50006FAAA0E30130C0E44B20A0E30120C0E404B04CE200A81BCC
+S31A50006FBFE90DC0A0E170D82DE904B04CE20060A0E10040A0E34C
+S31A50006FD4005051E20700000A0100D6E4015045E263F9FFEB0045
+S31A50006FE94084E1000055E30432A0E10340A011F7FFFF1A0400A2
+S31A50006FFEA0E170A81BE90DC0A0E130D82DE904B04CE20050A04D
+S31A50007013E10140A0E10210A0E3E7FFFFEB000084E5020085E238
+S31A5000702830A81BE90DC0A0E130D82DE904B04CE20050A0E10101
+S31A5000703D40A0E10810A0E3DDFFFFEB000084E5080085E230A816
+S31A500070521BE90DC0A0E100D82DE9FF0000E2613040E2050053A7
+S31A50007067E304B04CE20300008A573040E2003081E50100A0E3A9
+S31A5000707C00A81BE9413040E2050053E337304092F8FFFF9A3036
+S31A500070912040E2FF3002E2090053E30100009A0000A0E300A83A
+S31A500070A61BE90100A0E3002081E500A81BE90DC0A0E110D82D62
+S31A500070BBE90040A0E10100D4E404B04CE2E1FFFFEB0400A0E1D6
+S31A500070D010A81BE90DC0A0E100D82DE904B04CE218C09FE5FF20
+S31A500070E53001E22322DCE70120C0E40F1001E20130DCE7013039
+S31A500070FAC0E400A81BE9783301500DC0A0E1F0D82DE904B04CB3
+S31A5000710FE204D04DE20040A0E10060A0E30170A0E120504BE2FD
+S31A50007124030000EA20301BE5014084E20F3003E2066283E1002C
+S31A5000713900D4E50510A0E1C3FFFFEB000050E3F6FFFF1A0400AB
+S31A5000714EA0E1006087E5F0A81BE90DC0A0E1F0D82DE904B04CC1
+S31A50007163E20050A0E10170A0E1106085E2060055E10800002AD7
+S31A500071780100D5E4FDF8FFEB0040A0E10100D5E4FAF8FFEB04B8
+S31A5000718D0280E10100C7E4060055E1F6FFFF3A0500A0E1F0A800
+S31A500071A21BE90DC0A0E110D82DE904B04CE20140A0E1241CA0AE
+S31A500071B7E1C5FFFFEB2418A0E1FF1001E2C2FFFFEB2414A0E1CB
+S31A500071CCFF1001E2BFFFFFEBFF4004E20410A0E1BCFFFFEB104F
+S31A500071E1A81BE90DC0A0E130D82DE904B04CE20150A0E1052052
+S31A500071F6A0E10130D2E40040A0E3040053E10300000A0130D2BB
+S31A5000720BE4014084E2000053E3FBFFFF1AC80054E3C840A0A3FA
+S31A50007220FF1004E2AAFFFFEB0430A0E1014044E2000053E30821
+S31A500072350000DA0420A0E10130D5E4014044E2230053E30000C5
+S31A5000724A53132A30A0030130C0E4000052E3F6FFFFCA30A81BBB
+S31A5000725FE90DC0A0E130D82DE904B04CE20150A0E1104080E209
+S31A50007274040050E10300002A0110D5E493FFFFEB040050E1FBD7
+S31A50007289FFFF3A30A81BE90DC0A0E100D82DE90330A0E3002074
+S31A5000729EA0E304B04CE2013043E20120C0E4010073E3FBFFFFB5
+S31A500072B31A413CA0E10130C0E44128A0E10120C0E44134A0E1DE
+S31A500072C80130C0E40010C0E500A81BE90DC0A0E100D82DE904E5
+S31A500072DD0080E20310A0E304B04CE200C0A0E30120A0E1011076
+S31A500072F241E20130D0E4000052E30CC483E1F9FFFFCA0C00A053
+S31A50007307E100A81BE90DC0A0E100D82DE90720A0E304B04CE2C6
+S31A5000731C0130D1E4012042E20130C0E4010072E3FAFFFF1A009E
+S31A50007331A81BE90DC0A0E130D82DE904B04CE208D04DE20140AF
+S31A50007346A0E11C504BE20500A0E11C1900EB000050E3090000E0
+S31A5000735B0A5130A0E30130C4E44320A0E30120C4E40500A0E1AB
+S31A50007370D7FFFFEB0010A0E10400A0E188FFFFEB010000EA047C
+S31A5000738500A0E1FAFEFFEB0040A0E10030A0E30030C4E530A815
+S31A5000739A1BE90DC0A0E110D82DE90010A0E104B04CE220D04D88
+S31A500073AFE218404BE20400A0E1B4FFFFEB0400A0E130104BE2F8
+S31A500073C4241900EB000050E30300000A28301BE50100A0E3001A
+S31A500073D90053E30000001A0000A0E310A81BE90DC0A0E130D864
+S31A500073EE2DE904B04CE204D04DE20040A0E10150A0E118104B33
+S31A50007403E23EFFFFEB000054E10600000A18001BE5E0FFFFEBEF
+S31A50007418000050E30200000A0500A0E1DDFEFFEB010000EA058F
+S31A5000742D00A0E1D0FEFFEB0030A0E30030C0E530A81BE90DC08A
+S31A50007442A0E130D82DE90030E0E304B04CE20CD04DE20120D06F
+S31A50007457E40150A0E120300BE5670052E32100000A020000CA41
+S31A5000746C630052E30700000A2E0000EA700052E32C00001A20E9
+S31A50007481104BE20AFFFFEB1C104BE231FFFFEB2A0000EA0030B9
+S31A50007496D0E52D0053E30600001A0130D0E5310053E303000003
+S31A500074AB1A08219FE50030A0E3003082E5030000EAF8409FE5BC
+S31A500074C00410A0E10EFFFFEB0420A0E1000092E5000050E30284
+S31A500074D500000AAFFFFFEB000050E31300000A0500A0E1ACFE2A
+S31A500074EAFFEB120000EAC8409FE50410A0E101FFFFEB001094A2
+S31A500074FFE51C004BE261FFFFEB004094E5010074E30100000A8E
+S31A50007514000054E30200001A0230A0E320300BE5050000EA01D4
+S31A5000752930A0E320300BE5020000EA0500A0E18EFEFFEB0050CC
+S31A5000753EA0E120301BE5013083E2030053E303F19F971E0000FA
+S31A50007553EADC7500506475005074750050B075005058209FE56F
+S31A5000756858309FE5003082E5190000EA50409FE548109FE5041E
+S31A5000757D00A0E171FEFFEB1C004BE21A10A0E30420A0E1C41852
+S31A5000759200EB000050E30C00000A20309FE5004083E50500A039
+S31A500075A7E17CFEFFEB090000EA0500A0E179FEFFEB060000EA6A
+S31A500075BCC4430100C043010034840000D0430100404401000502
+S31A500075D100A0E167FEFFEB0050A0E10030A0E30030C5E530A849
+S31A500075E61BE90DC0A0E1F0DF2DE904B04CE208D04DE20160A019
+S31A500075FBE10070A0E32C104BE20240A0E1A9FEFFEB30104BE227
+S31A500076107BFEFFEB50509FE50510A0E1CDFEFFEB1A4044E204B9
+S31A500076259086E05130A0E30130C6E44D20A0E30120C6E4071053
+S31A5000763AA0E106A0A0E10A00A0E1A2FEFFEB0060A0E10680A021
+S31A5000764FE13030A0E30130C6E40510A0E10600A0E1FEFEFFEB2E
+S31A500076640060A0E1080000EAB4B70000017087E20600A0E10418
+S31A5000767910A0E1F7FEFFEB0060A0E10500A0E10410A0E11EFF1D
+S31A5000768EFFEB090056E10D00002A30301BE5030057E10A00008B
+S31A500076A3AA3C409FE50510A0E12C001BE50420A0E1551800EB13
+S31A500076B80030A0E32C300BE5030050E1E9FFFF1A313083E2006D
+S31A500076CD30C8E50A00A0E1FF1007E27DFEFFEB0030A0E30030AA
+S31A500076E2C6E5000000EABCB70000F0AF1BE90DC0A0E130D82D0F
+S31A500076F7E90030A0E304B04CE224D04DE22C300BE528300BE5F3
+S31A5000770C24300BE50150A0E120300BE538104BE242FEFFEB1C01
+S31A50007721404BE20410A0E18AFEFFEB0400A0E134404BE204104F
+S31A50007736A0E1471800EB000050E33700000A7130A0E30130C58F
+S31A5000774BE47020A0E30120C5E438101BE50500A0E190FEFFEBCC
+S31A500077600410A0E1BDFEFFEB38301BE50050A0E1020013E3064D
+S31A5000777500000A0210A0E388FEFFEB0210A0E352FEFFEB2C108F
+S31A5000778A5BE550FEFFEB0050A0E138301BE5040013E3080000E1
+S31A5000779F0A28301BE5000053E30500000A0500A0E10410A0E3BB
+S31A500077B47AFEFFEB28101BE588FEFFEB0050A0E138301BE5081F
+S31A500077C90013E30800000A24301BE5000053E30500000A0500AF
+S31A500077DEA0E10810A0E36EFEFFEB24101BE57CFEFFEB0050A046
+S31A500077F3E138301BE5100013E30B00000A20301BE5000053E341
+S31A500078080800000A0500A0E11010A0E362FEFFEB20101BE570F0
+S31A5000781DFEFFEB010000EA0500A0E1D2FDFFEB0050A0E10030ED
+S31A50007832A0E30030C5E530A81BE90DC0A0E170D82DE904B04C06
+S31A50007847E208D04DE20040A0E120504BE20500A0E10160A0E127
+S31A5000785C0210A0E18AFEFFEB0500A0E10410A0E10620A0E11FDB
+S31A500078711800EB70A81BE90DC0A0E100D82DE90C309FE5002071
+S31A5000788693E504B04CE2000192E700A81BE9348400000DC0A0F2
+S31A5000789BE100D82DE90C309FE5002093E504B04CE2001182E7FF
+S31A500078B000A81BE9348400000DC0A0E100D82DE920309FE518E1
+S31A500078C52093E50010A0E1000092E5FF1001E20C3092E504B05F
+S31A500078DA4CE20FE0A0E103F0A0E100A81BE9500000000DC0A0C8
+S31A500078EFE100D82DE91C309FE5182093E5000092E5103092E5B1
+S31A5000790404B04CE20FE0A0E103F0A0E1FF0000E200A81BE95075
+S31A500079190000000DC0A0E100D82DE91C309FE5182093E5000047
+S31A5000792E92E50810A0E3143092E504B04CE20FE0A0E103F0A03C
+S31A50007943E100A81BE9500000000DC0A0E100D82DE924309FE5E8
+S31A5000795804B04CE218C093E500109CE50020A0E10100A0E114CA
+S31A5000796D309CE50010A0E30FE0A0E103F0A0E100A81BE950008B
+S31A5000798200000DC0A0E100D82DE9000050E304B04CE20F00003A
+S31A500079970A70209FE5003092E5013043E2003082E5000053E39D
+S31A500079AC160000CA0030A0E3003082E554209FE5183092E5008F
+S31A500079C10093E5142093E50510A0E30FE0A0E102F0A0E100A814
+S31A500079D61BE930209FE5003092E5013083E2003082E501005346
+S31A500079EBE30600001A1C309FE5182093E5000092E5143092E57C
+S31A50007A000410A0E30FE0A0E103F0A0E100A81BE93884000050E8
+S31A50007A150000000DC0A0E100D82DE91C309FE5182093E500004A
+S31A50007A2A92E5103092E504B04CE20FE0A0E103F0A0E1FF0000FE
+S31A50007A3FE200A81BE9500000000DC0A0E1F0DF2DE9FF1001E2D9
+S31A50007A540D0051E304B04CE208D04DE26C00000A68319FE568A2
+S31A50007A69219FE5000093E50010C2E70A0051E3010080E200003B
+S31A50007A7E83E50390A0E10100000A640050E36100001A44319FF0
+S31A50007A93E5186093E500200FE100400FE1C04084E304F029E10E
+S31A50007AA830200BE5000096E50C3096E52410A0E30FE0A0E103D7
+S31A50007ABDF0A0E1000096E54F80A0E30C3096E50810A0E10FE0E1
+S31A50007AD2A0E103F0A0E1002099E50070A0E3020057E117000072
+S31A50007AE7AAF0A09FE5E4209FE50730D2E72342DAE7000096E55D
+S31A50007AFC0F3003E20350DAE70C3096E50410A0E10FE0A0E10328
+S31A50007B11F0A0E1000096E5017087E20C3096E50510A0E10FE007
+S31A50007B26A0E103F0A0E1044088E0FF8004E2055088E000309968
+S31A50007B3BE5FF8005E2030057E1E8FFFFBA000096E50C3096E587
+S31A50007B502310A0E30FE0A0E103F0A0E17C309FE5000096E5285D
+S31A50007B6512D3E70C2096E50FE0A0E102F0A0E164209FE5000057
+S31A50007B7A96E50F3008E20310D2E70C3096E50FE0A0E103F0A076
+S31A50007B8FE1000096E5103096E50FE0A0E103F0A0E129004BE537
+S31A50007BA429305BE52B0053E30F00000A29004BE20110A0E37207
+S31A50007BB90300EB000050E30700001A29305BE52D0053E3EFFF35
+S31A50007BCEFF1AB5FFFFEA3C840000C4B70000500000008C33014B
+S31A50007BE35028209FE50130A0E3443082E50020A0E3002089E55B
+S31A50007BF830201BE500300FE1C04002E2C030C3E3043083E1039D
+S31A50007C0DF029E1000000EA50000000F0AF1BE90DC0A0E170D89F
+S31A50007C222DE904B04CE20160A0E10240A0E10430A0E101404420
+S31A50007C37E2000053E30050A0E10600000A0110D6E40500A0E198
+S31A50007C4C7DFFFFEB0430A0E1014044E2000053E3F8FFFF1A7095
+S31A50007C61A81BE90DC0A0E170D82DE904B04CE20160A0E102405A
+S31A50007C76A0E10430A0E1014044E2000053E30050A0E1060000F9
+S31A50007C8B0A0500A0E160FFFFEB0430A0E1014044E20100C6E4EE
+S31A50007CA0000053E3F8FFFF1A70A81BE90DC0A0E10E002DE900A5
+S31A50007CB5D82DE90000A0E310B04CE200A81BE90DC0A0E170D8C3
+S31A50007CCA2DE90000A0E304B04CE22AFFFFEBB4C09FE5B4509F26
+S31A50007CDFE5B4E09FE5B4609FE50020A0E3B0109FE50C40A0E1F1
+S31A50007CF4000091E5023190E702318CE7012082E20A0052E3FAA1
+S31A50007D09FFFFDA001091E52C3091E52C308CE5402091E53020EC
+S31A50007D1E8CE5303091E534308CE5342091E538208CE538309152
+S31A50007D33E53C308CE50000A0E33C3091E51C208CE20C10A0E177
+S31A50007D4864308CE5400082E5042042E2010052E1FBFFFFAA0005
+S31A50007D5D309EE5004085E5000053E30400000A0030A0E3003037
+S31A50007D728EE50F00A0E3BEFEFFEB222000EB0F00A0E3BBFEFF84
+S31A50007D87EB1F2000EB000086E570A81BE9D04301003484000029
+S31A50007D9C98860000A8440100384401000DC0A0E100D82DE904B4
+S31A50007DB1B04CE260109FE50000A0E301E0A0E158C09FE50020F4
+S31A50007DC69EE500319CE7003182E7010080E20A0050E3F9FFFFEA
+S31A50007DDBDA001091E52C309CE52C3081E530209CE5402081E5A7
+S31A50007DF034309CE5303081E538209CE5342081E53C309CE538C5
+S31A50007E053081E564209CE53C2081E50100A0E3DAFEFFEB00A8C7
+S31A50007E1A1BE938440100D04301000DC0A0E100D82DE90000A08C
+S31A50007E2FE304B04CE200A81BE90DC0A0E100D82DE930209FE567
+S31A50007E4430309FE530109FE5003082E52C309FE52C209FE500E4
+S31A50007E593081E528309FE528109FE5003082E524309FE504B06D
+S31A50007E6E4CE2003081E500A81BE90C840000247E00500884002B
+S31A50007E8300607F005014840000C47C005010840000A87D005034
+S31A50007E980DC0A0E170D82DE99C209FE5006092E504B04CE200DA
+S31A50007EAD0056E32200001A0130A0E3003082E584509FE50C2125
+S31A50007EC200EB343095E50000E0E30FE0A0E103F0A0E10040A005
+S31A50007ED7E1343095E50200E0E30FE0A0E103F0A0E1141095E53A
+S31A50007EEC58309FE558209FE5043081E554309FE5082081E50CE7
+S31A50007F013081E54C209FE54C309FE5102081E5143081E502004D
+S31A50007F1674E3000054130300000A343095E50400A0E10FE0A043
+S31A50007F2BE103F0A0E1303095E50600A0E10FE0A0E103F0A0E151
+S31A50007F4070A81BE940840000500000001C7C0050647C00504846
+S31A50007F557A0050187A0050AC7C00500DC0A0E100D82DE9183019
+S31A50007F6A9FE5403093E504B04CE2000053E30100000A0FE0A08E
+S31A50007F7FE103F0A0E100A81BE9500000000DC0A0E1F0D92DE919
+S31A50007F945430A0E304B04CE20CD04DE20160A0E10680A0E100A5
+S31A50007FA950A0E32C500BE50040A0E10130C8E44402A0E158F57C
+S31A50007FBEFFEB0100C6E5018088E20400A0E154F5FFEB0100C856
+S31A50007FD3E47430A0E30130C8E46820A0E30120C8E4023043E22C
+S31A50007FE80130C8E4032042E20120C8E4113043E20130C8E401F9
+S31A50007FFD2042E20120C8E43A60A0E30160C8E4561600EB00C0C7
+S31A50008012A0E124004BE24C3CA0E124304BE54C28A0E123204B21
+S31A50008027E50810A0E121C04BE54C34A0E122304BE50420A0E335
+S31A5000803C0530A0E14AF6FFEB0080A0E13B40A0E30140C8E40508
+S31A5000805100A0E132F5FFEB0100C8E40F00A0E32FF5FFEB0100E4
+S31A50008066C8E40160C8E40F00A0E300FEFFEB0810A0E10420A01F
+S31A5000807BE30530A0E128000BE528704BE20700A0E137F6FFEB85
+S31A500080900080A0E12C004BE20810A0E10520A0E10530A0E13105
+S31A500080A5F6FFEB0080A0E10140C8E40500A0E11AF5FFEB010022
+S31A500080BAC8E40D00A0E317F5FFEB0100C8E40160C8E40D00A0C2
+S31A500080CFE3E8FDFFEB0810A0E10420A0E328000BE50530A0E186
+S31A500080E40700A0E120F6FFEB0080A0E10140C8E40050C8E5F0CE
+S31A500080F9A91BE90DC0A0E100D82DE904B04CE2030050E300F12A
+S31A5000810E9F97250000EAAC81005024810050388100506881005D
+S31A5000812350101F11EE011A81E3031081E3101F01EE1C0000EA59
+S31A50008138101F11EE011AC1E3101F01EE0010A0E3151F07EE0015
+S31A5000814D00A0E10000A0E10000A0E10000A0E10000A0E1000042
+S31A50008162A0E1100000EA0E02A0E3021A80E2202090E400003141
+S31A50008177E1FCFFFF1A0000A0E3160F07EE9A0F07EE0010A0E3DA
+S31A5000818C151F07EE151F08EE0000A0E10000A0E10000A0E100B2
+S31A500081A100A0E10000A0E10000A0E1100F11EE2006A0E101002A
+S31A500081B600E200A81BE90DC0A0E100D82DE904B04CE20300505F
+S31A500081CBE300F19F97150000EA2C820050E4810050F4810050C8
+S31A500081E00C820050101F11EE0F1081E3101F01EE0D0000EA1080
+S31A500081F51F11EE0C10C1E3101F01EE0010A0E3161F07EE07005F
+S31A5000820A00EA0E02A0E3021A80E2202090E4000031E1FCFFFF4E
+S31A5000821F1A0000A0E3160F07EE9A0F07EE100F11EE2001A0E1DF
+S31A50008234010000E200A81BE90DC0A0E170D82DE9D0209FE5D060
+S31A50008249409FE504B04CE2CCC09FE50130A0E300308CE5C430CB
+S31A5000825E9FE50260A0E1003082E50C50A0E1003094E504C0A0CD
+S31A50008273E1000053E32200000A04E0A0E100309EE5030053E30C
+S31A500082880900009A030011E30700001A030010E30500001A04B7
+S31A5000829D3090E4043081E400209EE5042042E200208EE51100AA
+S31A500082B200EA00309CE5010053E30900009A010011E3070000F0
+S31A500082C71A010010E30500001AB230D0E0B230C1E000309CE559
+S31A500082DC023043E200308CE5040000EA0120D0E40120C1E400B6
+S31A500082F1309EE5013043E200308EE5003094E5000053E3DDFFBB
+S31A50008306FF1A0030A0E3003085E50030A0E3003086E570A81B25
+S31A5000831BE94484000028B800001C840000108300500DC0A0E195
+S31A5000833030D82DE90030A0E10100A0E10310A0E118409FE5021F
+S31A5000834550A0E1005084E504B04CE2B9FFFFEB000094E5050041
+S31A5000835A60E030A81BE928B800000DC0A0E130D82DE918409F59
+S31A5000836FE50250A0E1005084E504B04CE2AEFFFFEB000094E540
+S31A50008384050060E030A81BE928B800000DC0A0E100D82DE90051
+S31A5000839900A0E304B04CE200A81BE90DC0A0E100D82DE900002C
+S31A500083AEA0E304B04CE200A81BE90DC0A0E100D82DE90000A077
+S31A500083C3E304B04CE200A81BE90DC0A0E130D82DE904B04CE290
+S31A500083D868C09FE500309CE5000053E31600000A0C50A0E100AA
+S31A500083ED000FE100400FE1C04084E304F029E100C095E5143022
+S31A500084029CE5003085E518109CE50020A0E318208CE500300FC0
+S31A50008417E1C04000E2C030C3E3043083E103F029E100009CE58B
+S31A5000842C10209CE50FE0A0E10CF09CE5003095E5000053E3E97E
+S31A50008441FFFF1A30A81BE92CB800000DC0A0E100D82DE904B008
+S31A500084564CE20C209FE5003092E5013083E2003082E500A81B46
+S31A5000846BE9AC4401000DC0A0E110D82DE904B04CE234409FE5A6
+S31A50008480003094E5010053E30000001ACEFFFFEB0030A0E3002D
+S31A500084953084E51C309FE5002093E5000052E30200000A013009
+S31A500084AAA0E3003084E5F2FFFFEA10A81BE9AC4401002CB800E0
+S31A500084BF000DC0A0E100D82DE904B04CE2B7F1FFEB00A81BE9F6
+S31A500084D40DC0A0E100D82DE904B04CE2BFF1FFEB00A81BE90DCC
+S31A500084E9C0A0E100D82DE90100A0E304B04CE200A81BE90DC01A
+S31A500084FEA0E100D82DE90100A0E304B04CE200A81BE90DC0A025
+S31A50008513E100D82DE904B04CE23EF1FFEB00A81BE90DC0A0E139
+S31A5000852810D82DE904B04CE200300FE100400FE1C04084E3044D
+S31A5000853DF029E108209FE50130A0E3003082E5FEFFFFEA0000FC
+S31A50008552039010A81BE90DC0A0E100D82DE904B04CE2EEFFFF65
+S31A50008567EB0000A0E300A81BE90DC0A0E100D82DE90000A0E3D0
+S31A5000857C04B04CE200A81BE90DC0A0E170D82DE904B04CE20078
+S31A5000859140A0E10000A0E30160A0E30010A0E1020074E30D0060
+S31A500085A6000A020000CA030074E30F00000A100000EA010074B2
+S31A500085BBE30E00001ABC309FE5003093E5000053E3016043E276
+S31A500085D00B0000CA0360A0E10260E003080000EAA0309FE59864
+S31A500085E5209FE5180083E5004082E5030000EA0040A0E10000B2
+S31A500085FA00EA014084E20110A0E3000051E31B00000A74509F35
+S31A5000860FE5183095E5000053E30400000A000093E5143093E5E1
+S31A500086240410A0E30FE0A0E103F0A0E154309FE548209FE584F8
+S31A500086393283E0183085E5004082E5183095E5000050E30500EE
+S31A5000864E000A000093E5143093E50510A0E30FE0A0E103F0A0E8
+S31A50008663E1040000EA000093E5143093E50410A0E30FE0A0E1A2
+S31A5000867803F0A0E10600A0E170A81BE948840000500000003034
+S31A5000868DB800000DC0A0E100D82DE90010A0E304B04CE201C058
+S31A500086A2A0E3020070E30D00000A020000CA030070E30F00004D
+S31A500086B70A100000EA010070E30E00001A64309FE5003093E518
+S31A500086CC000053E301C043E20B0000CA03C0A0E102C0E0030861
+S31A500086E10000EA48309FE540209FE5141083E5000082E503006E
+S31A500086F600EA0100A0E1000000EA010080E20110A0E30000517B
+S31A5000870BE30500000A18309FE51C209FE5000083E510309FE559
+S31A50008720802282E0142083E50C00A0E100A81BE94C84000050F5
+S31A5000873500000030B800000DC0A0E100D82DE904B04CE200A82B
+S31A5000874A1BE90DC0A0E100D82DE904B04CE200A81BE90DC0A089
+S31A5000875FE100D82DE904B04CE2E21E00EB00A81BE90DC0A0E119
+S31A5000877410D82DE9FF1000E254309FE504B04CE2142093E50312
+S31A5000878940A0E1000052E30400000A000092E50C3092E50FE068
+S31A5000879EA0E103F0A0E1040000EA182094E5000092E50C309297
+S31A500087B3E50FE0A0E103F0A0E1443094E5000053E30200000A63
+S31A500087C80000A0E3440084E57B0000EB10A81BE9500000000D97
+S31A500087DDC0A0E100D82DE904B04CE200A81BE90DC0A0E110D83E
+S31A500087F22DE90030A0E350209FE504B04CE204D04DE214300B2B
+S31A50008807E518E092E500309EE50020A0E10300A0E10130A0E128
+S31A5000881C18C09EE514104BE20FE0A0E10CF0A0E114301BE50014
+S31A5000883140A0E1000053E30200000A10309FE5000093E55E003F
+S31A5000884600EB0400A0E1010000EA50000000B044010010A81B54
+S31A5000885BE90DC0A0E1F0D82DE9E8009FE5E8609FE50020A0E3C2
+S31A50008870E4509FE504B04CE2E0709FE50510A0E10231A0E101E4
+S31A500088852082E2030081E73F0052E3FAFFFFDAC8C09FE5003017
+S31A5000889AA0E3B0009FE5011083E28332A0E10720A0E303008CD7
+S31A500088AFE7012052E2043083E2FBFFFF5A0130A0E1020053E34C
+S31A500088C4F5FFFFDA98209FE51330A0E3003085E5042085E58CC6
+S31A500088D9309FE58C209FE5083085E5402085E584309FE5842008
+S31A500088EE9FE5103085E5482085E57C309FE5306085E578209FBE
+S31A50008903E5347085E5203085E50140E0E31C2085E50400A0E12D
+S31A500089180FE0A0E106F0A0E10400A0E10FE0A0E107F0A0E100A0
+S31A5000892D30A0E3243085E5283085E54C3085E5443085E53C00AC
+S31A5000894285E2981300EB34309FE58C3085E5F0A81BE97085002E
+S31A500089575084850050500000009086005030B8000004800000EA
+S31A5000896C200000002485005058850050108500503C8700504C16
+S31A5000898187005090FE00500DC0A0E100D82DE9000051E304B0B2
+S31A500089964CE20700000A011041E20130D0E7030053E3010000E1
+S31A500089AB1A0100A0E300A81BE9000051E3F7FFFF1A0000A0E351
+S31A500089C000A81BE90DC0A0E100D82DE9000050E31C109FE5047D
+S31A500089D5B04CE23810901514309FE58C2093E50100A0E10FE00F
+S31A500089EAA0E102F0A0E100A81BE9F0890050500000000DC0A0FC
+S31A500089FFE130D82DE950309FE504B04CE20150A0E1182093E5A6
+S31A50008A140610A0E300C092E50040A0E1143092E50C00A0E10F0F
+S31A50008A29E0A0E103F0A0E1000054E10400001A0400A0E1051020
+S31A50008A3EA0E169FFFFEB000050E30200001A0400A0E10510A071
+S31A50008A53E1BAEFFFEB30A81BE9500000000DC0A0E110D82DE9CC
+S31A50008A68FF0000E204B04CE20040A0E10A0054E30100001A0DB6
+S31A50008A7D00A0E33AFFFFEB0400A0E138FFFFEB10A81BE90DC0B9
+S31A50008A92A0E110D82DE90040A0E10030D4E504B04CE20000531B
+S31A50008AA7E30400000A0000D4E5EAFFFFEB0130F4E5000053E3A7
+S31A50008ABCFAFFFF1A10A81BE90DC0A0E100D82DE90030A0E31082
+S31A50008AD110A0E32B20A0E304D04DE200308DE504B04CE244000E
+S31A50008AE600EB00A81BE90DC0A0E1F0DF2DE904B04CE224D04D38
+S31A50008AFBE20150A0E10040A0E129104BE24C300BE548A04BE2B4
+S31A50008B1004309BE50A00A0E1000053E32090A0033090A01301BE
+S31A50008B259041E4000051E1FCFFFFAA0080A0E3053094E10300AA
+S31A50008B3A001A3030A0E348304BE5018088E2150000EA05309478
+S31A50008B4FE11300000A0260A0E10070A0E30510A0E10400A0E1CC
+S31A50008B640730A0E10620A0E1BB2300EB68309FE50010D3E70890
+S31A50008B7910CAE70730A0E10620A0E10510A0E10400A0E10180D5
+S31A50008B8E88E24F2200EB0150A0E10040A0E1053094E1EDFFFF8E
+S31A50008BA31A08309BE5080053E10380A0A14C301BE52D0053E3B6
+S31A50008BB80600001A013048E20320DAE7090052E10380A0014C47
+S31A50008BCD301BE50830CAE7050000EA018048E2030000EAA033CA
+S31A50008BE201500800DAE7018048E29BFFFFEB000058E3FAFFFFAC
+S31A50008BF7AAF0AF1BE90DC0A0E100D82DE908D04DE200308DE5E1
+S31A50008C0C04B04CE204309BE501C0A0E104308DE50010A0E302EA
+S31A50008C2130A0E10C20A0E1AFFFFFEB00A81BE90DC0A0E100D820
+S31A50008C362DE9000050E304B04CE201C0A0E31500000A0010A095
+S31A50008C4BE10030D1E5000053E31000000A44E09FE5013060E08E
+S31A50008C600E0053E10020D1E500C0A0A30D0052E30A00521302DB
+S31A50008C7500000A203042E25E0053E300C0A083011081E200002B
+S31A50008C8A5CE30200000A0030D1E5000053E3EFFFFF1A0C00A065
+S31A50008C9FE100A81BE9010100000DC0A0E1F0DF2DE904B04CE2C6
+S31A50008CB40CD04DE20060A0E12C100BE5DAFFFFEB004050E217F1
+S31A50008CC901001AA4039FE56EFFFFEB0600A0E179FFFFEB98031F
+S31A50008CDE9FE56AFFFFEB2000A0E35CFFFFEB2C301BE504019378
+S31A50008CF3E772FFFFEB014084E2070054E3F7FFFFDA74039FE525
+S31A50008D0860FFFFEB090100EA0040D6E5250054E30200000A045C
+S31A50008D1D00A0E14EFFFFEBFF0000EA0070A0E32BC0A0E30140A8
+S31A50008D32F6E50710A0E1300054E30090A0130190A003303044E1
+S31A50008D47E2090053E30600008A073187E0833084E00140F6E53E
+S31A50008D5C307043E2302044E2090052E3F8FFFF9A6C0054E303FD
+S31A50008D7100001A0140F6E56C0054E30110A0030140F605253079
+S31A50008D8644E2530053E303F19F97E00000EA0C91005018910049
+S31A50008D9B50189100501891005018910050189100501891005040
+S31A50008DB018910050189100501891005018910050189100501863
+S31A50008DC5910050189100501891005018910050189100501891D5
+S31A50008DDA00501891005018910050189100501891005018910051
+S31A50008DEF501891005018910050189100501891005018910050EC
+S31A50008E0418910050DC900050988F0050E48E0050189100501804
+S31A50008E1991005018910050189100501891005018910050189180
+S31A50008E2E005018910050189100501891005018910050189100FC
+S31A50008E43501891005018910050B48F00501891005018910050FD
+S31A50008E581891005018910050408F005018910050189100501894
+S31A50008E6D9100501891005018910050189100501891005018912C
+S31A50008E82005018910050DC900050988F0050E48E00501891009E
+S31A50008E9750189100501891005018910050189100501891005043
+S31A50008EAC18910050189100501891005018910050189100501866
+S31A50008EC19100501891005018910050B48F00501891005018913E
+S31A50008ED600501891005018910050408F0050000051E30B000091
+S31A50008EEB0A2C301BE50300B3E82C300BE5000051E3020000AAEC
+S31A50008F00000070E20010E1E22DC0A0E30A20A0E300908DE50CB6
+S31A50008F1530A0E1100000EA2C301BE5040093E42C300BE5000023
+S31A50008F2A50E3000060B22DC0A0B30A10A0E30C20A0E1100000FD
+S31A50008F3FEA000051E30900000A00908DE50C30A0E12CC01BE5EB
+S31A50008F540300BCE82CC00BE51020A0E304708DE5016086E2DFEE
+S31A50008F69FEFFEB6E0000EA0C20A0E12CC01BE504009CE4101020
+S31A50008F7EA0E32CC00BE50930A0E100708DE5016086E219FFFFAD
+S31A50008F93EB640000EA2C301BE50000D3E5043083E22C300BE541
+S31A50008FA8016086E2ABFEFFEB5D0000EA0050A0E32CC01BE505F7
+S31A50008FBD80A0E104409CE405A0A0E12CC00BE5050054E1AC405C
+S31A50008FD29F050C00000A0400A0E113FFFFEB000050E3080000BE
+S31A50008FE71A98009FE50A90A0E1A6FEFFEB0400A0E1B1FEFFEB22
+S31A50008FFC193047E2190057E30370A0C17C409FE50530D4E70140
+S31A500090116086E2000053E30300000A015085E20530D4E7000041
+S31A5000902653E3FBFFFF1A000057E3070055110750A0C1000059DE
+S31A5000903BE30780651007A065000830A0E1018048E2000053E345
+S31A5000905001704AE2050000DA2000A0E37FFEFFEB0830A0E10175
+S31A500090658048E2000053E3F9FFFFCA0030D4E5080000EAB4333D
+S31A5000907A0150CC330150D0330150D4330150DC330150F03301BA
+S31A5000908F500000D4E571FEFFEB0130F4E5000053E30200000AC8
+S31A500090A4015045E2010075E3F7FFFF1A0A30A0E107A0A0E1009E
+S31A500090B90053E31A0000DA2000A0E365FEFFEB0A30A0E101A0D6
+S31A500090CE4AE2000053E3F9FFFFCA130000EA000057E32C301B66
+S31A500090E3E5014047121F40A003005093E55534A0E1010013E3D8
+S31A500090F82E00A0033100A01356FEFFEB014044E2F8FFFFEA25AE
+S31A5000910D00A0E352FEFFEB030000EA2500A0E34FFEFFEB04006A
+S31A50009122A0E14DFEFFEB016086E20030D6E5000053E3F5FEFF50
+S31A500091371AF0AF1BE90DC0A0E10F002DE900D82DE914B04CE2BD
+S31A5000914C20D04DE208309BE50C209BE504009BE52C300BE5283D
+S31A50009161200BE510309BE514209BE524300BE520200BE5183063
+S31A500091769BE51C209BE51C300BE518200BE520309BE524209B3F
+S31A5000918BE514300BE510200BE52C104BE2C2FEFFEB00A81BE981
+S31A500091A00DC0A0E1F0DF2DE904B04CE20060A0E1060051E10630
+S31A500091B57041800170A091000057E30290A0E13B0000DA00001A
+S31A500091CA59E30300000AE4009FE5061069E0D7FFFFEB02000068
+S31A500091DFEAD4009FE50610A0E1D3FFFFEB0050A0E3108047E204
+S31A500091F410A086E2070055E1030000AAB8009FE50510D6E7CB35
+S31A50009209FFFFEB010000EAAC009FE5C8FFFFEBC54FA0E105307B
+S31A5000921E64E00130C3E3053063E0010053E30100001A90009FD1
+S31A50009233E5C0FFFFEBA43EA0E1033085E00730C3E3053063E0F2
+S31A50009248070053E30100001A70009FE5B8FFFFEB015085E20F07
+S31A5000925D0055E3E4FFFFDA60009FE5B3FFFFEB0050A0E3070058
+S31A5000927255E1040000AA0510D6E7203041E25E0053E32E10A0F6
+S31A5000928783000000EA2010A0E338009FE5A8FFFFEB015085E257
+S31A5000929C0F0055E3F2FFFFDA28009FE5A3FFFFEB0A60A0E10033
+S31A500092B17058E2C3FFFFCAF0AF1BE9F4330150FC33015004344A
+S31A500092C60150083401500C34015010340150143401500DC0A033
+S31A500092DBE100D82DE90020A0E304B04CE2ACFFFFEB00A81BE993
+S31A500092F00DC0A0E100D82DE904B04CE216FDFFEB00A81BE90D3F
+S31A50009305C0A0E100D82DE904B04CE202C0A0E100E0A0E1030045
+S31A5000931A5CE30200009A003081E1030013E30A00000A0C30A092
+S31A5000932FE101C04CE2000053E30500000A0C20A0E10130D1E42B
+S31A5000934401C04CE20130CEE4000052E3F9FFFF1A00A81BE900FA
+S31A50009359E0A0E10F005CE30E00009A043091E404308EE40420DF
+S31A5000936E91E404208EE4043091E404308EE4042091E410C04C85
+S31A50009383E204208EE40F005CE3F4FFFF8A020000EA043091E4A8
+S31A5000939804C04CE204308EE403005CE3FAFFFF8A0C30A0E10150
+S31A500093ADC04CE2000053E30500000A0C20A0E10130D1E401C0CE
+S31A500093C24CE20130CEE4000052E3F9FFFF1A00A81BE90DC0A0D0
+S31A500093D7E100D82DE9030052E304B04CE200C0A0E10100009A66
+S31A500093EC030010E30900000A0230A0E1012042E2000053E304DB
+S31A5000940100000A0230A0E1012042E20110CCE4000053E3FAFF0E
+S31A50009416FF1A00A81BE900C0A0E1FF1001E2013481E10338839E
+S31A5000942BE10F0052E30900009A04308CE404308CE404308CE422
+S31A50009440102042E204308CE40F0052E3F8FFFF8A010000EA0416
+S31A500094552042E204308CE4030052E3FBFFFF8A0C30A0E100004C
+S31A5000946A52E30200000A0110C3E4012052E2FCFFFF1A00A81B72
+S31A5000947FE90DC0A0E1F0DF2DE904B04CE250D04DE20170A0E143
+S31A5000949478404BE200A0A0E3005050E20260A0E10380A0E104F8
+S31A500094A990A0E10300001A3030A0E378304BE577404BE2090082
+S31A500094BE00EA0500A0E10610A0E19A2200EB0030D8E70610A0F0
+S31A500094D3E10130C4E40500A0E1392100EB005050E2F5FFFF1A1A
+S31A500094E8090054E10500000A0920A0E1013074E501A08AE2018A
+S31A500094FD30C7E4020054E1FAFFFF1A0A00A0E10030A0E3003072
+S31A50009512C7E5F0AF1BE90DC0A0E1F0DF2DE904B04CE234D04D39
+S31A50009527E24C200BE50180A0E148204BE250200BE50060A0E3C1
+S31A5000953C0140D8E40070A0E158600BE5060054E1FE00000A25C6
+S31A500095510054E3ED00001A0030A0E354300BE50140D8E40350FA
+S31A50009566A0E12D0054E30200001A0120A0E354200BE50140D878
+S31A5000957BE4300054E30200001A0140D8E40190A0E3060000EA1D
+S31A500095900390A0E1040000EA053185E08330A0E1303043E20416
+S31A500095A55083E00140D8E4303044E2090053E3F7FFFF9A2E0029
+S31A500095BA54E30600001A0140D8E4019089E2000000EA0140D8F3
+S31A500095CFE4303044E2090053E3FBFFFF9A00A0A0E36C0054E32F
+S31A500095E40140D804584044E2200054E304F19F97720000EA9CC7
+S31A500095F9960050C4970050C4970050C4970050C4970050C4971A
+S31A5000960E0050C4970050C4970050C4970050C4970050C497009A
+S31A5000962350A09700509C960050C4970050C4970050C497005082
+S31A50009638C4970050C4970050C4970050C4970050C4970050C4AC
+S31A5000964D970050C4970050C49700507C960050C4970050C4970D
+S31A50009662005080970050C4970050C4970050C4970050C497008A
+S31A50009677509C9600503000A0E30FE0A0E107F0A0E17800A0E320
+S31A5000968C0FE0A0E107F0A0E10190A0E30850A0E34C301BE5041C
+S31A500096A10093E44C300BE5200054E304F19F972F0000EA6097E9
+S31A500096B600507497005074970050749700507497005074970082
+S31A500096CB5074970050749700507497005074970050749700501D
+S31A500096E074970050389700507497005074970050749700507420
+S31A500096F5970050749700507497005074970050749700507497AC
+S31A5000970A0050749700507497005054970050749700507497004D
+S31A5000971F507497005074970050749700507497005074970050C8
+S31A5000973454970050000050E32DA0A0B3000060B248104BE2B4F1
+S31A50009749319FE50A20A0E3050000EA48104BE2A8319FE5010081
+S31A5000975E00EA48104BE2A0319FE51020A0E343FFFFEB58000B9A
+S31A50009773E548204BE250200BE5140000EA4C301BE5042093E49C
+S31A5000978850200BE54C300BE50200A0E19C0000EB58000BE50C4C
+S31A5000979D0000EA4C301BE5043083E24C300BE5016086E2040029
+S31A500097B253E5019088E20FE0A0E107F0A0E15D0000EA3F00A00B
+S31A500097C7E30FE0A0E107F0A0E1016086E258201BE5055062E094
+S31A500097DC00005AE301504512000059E30800000A3040A0E300FC
+S31A500097F1005AE30600000A0A00A0E10FE0A0E107F0A0E10160EC
+S31A5000980686E200A0A0E3000000EA2040A0E358201BE50190880E
+S31A5000981BE254301BE5012042E25C200BE5000053E30800001A73
+S31A50009830030000EA0400A0E10FE0A0E107F0A0E1016086E205A5
+S31A5000984530A0E1015045E2000053E3F7FFFFCA00005AE303005A
+S31A5000985A000A0A00A0E10FE0A0E107F0A0E1016086E25C201BC6
+S31A5000986FE558301BE50F0000EA50301BE50140D3E4016086E2E7
+S31A5000988450300BE50400A0E10FE0A0E107F0A0E10A0054E30358
+S31A5000989900001A0D00A0E30FE0A0E107F0A0E1016086E2583081
+S31A500098AE1BE50320A0E1012042E258200BE5000053E3ECFFFFDE
+S31A500098C3CA54301BE5000053E31A00000A0530A0E1015045E264
+S31A500098D8000053E3160000DA2000A0E30FE0A0E107F0A0E10173
+S31A500098ED6086E20530A0E1015045E2000053E3F7FFFFCA0D0018
+S31A5000990200EA1834015024340150383401500400A0E10FE0A0F9
+S31A50009917E107F0A0E1016086E20A0054E3019088E20300001A6A
+S31A5000992C0D00A0E30FE0A0E107F0A0E1016086E20040D8E50989
+S31A5000994180A0E1000054E300FFFF1A0600A0E1F0AF1BE90DC074
+S31A50009956A0E100D82DE918309FE5002093E50100C2E40010A07C
+S31A5000996BE3002083E504B04CE20010C2E500A81BE990B8000099
+S31A500099800DC0A0E10E002DE900D82DE918309FE5000083E510D8
+S31A50009995B04CE204109BE50C009FE508208BE2DBFEFFEB01000C
+S31A500099AA00EA90B800005499005000A81BE90DC0A0E10F002DAD
+S31A500099BFE900D82DE910009FE514B04CE204109BE508208BE2B7
+S31A500099D4CFFEFFEB000000EA409C005000A81BE90DC0A0E10061
+S31A500099E9D82DE90030A0E10120A0E10310A0E108009FE504B0FE
+S31A500099FE4CE2C4FEFFEB00A81BE9409C00500DC0A0E100D82DF9
+S31A50009A13E90020A0E3000050E304B04CE20600000A0130D0E452
+S31A50009A28020053E10300000A0130D0E4012082E2000053E3FBF5
+S31A50009A3DFFFF1A0200A0E100A81BE90DC0A0E100D82DE901300A
+S31A50009A52D1E40020A0E10100D2E404B04CE2030050E105000081
+S31A50009A671A000050E30400000A0100D2E40130D1E4030050E168
+S31A50009A7CF9FFFF0A000063E000A81BE90DC0A0E100D82DE90152
+S31A50009A9130D1E40020A0E1000053E304B04CE20300000A01308E
+S31A50009AA6C0E40130D1E4000053E3FBFFFF1A0030A0E30030C0DF
+S31A50009ABBE50200A0E100A81BE90DC0A0E100D82DE900E0A0E18F
+S31A50009AD00120DEE404B04CE2020000EA000050E30F00000A012D
+S31A50009AE520DEE401C0D1E4200082E2FF0000E2413042E21900AB
+S31A50009AFA53E30200A08120308CE2FF2003E241304CE2190053DB
+S31A50009B0FE30C30A0810230A091030050E1EEFFFF0A000063E0DB
+S31A50009B2400A81BE90DC0A0E100D82DE9000052E304B04CE200D7
+S31A50009B39C0A0E10300001A0200A0E100A81BE9000063E000A849
+S31A50009B4E1BE90100DCE40130D1E4030050E1F9FFFF1A0000506C
+S31A50009B63E30100000A012052E2F7FFFF1A0000A0E300A81BE916
+S31A50009B780DC0A0E110D82DE9000052E304B04CE20040A0E10559
+S31A50009B8D00001A0200A0E110A81BE9000063E010A81BE90120F4
+S31A50009BA252E21000000A01C0D4E401E0D1E420008CE2FF00006E
+S31A50009BB7E241304CE2190053E30C00A08120308EE2FFC003E2E2
+S31A50009BCC41304EE2190053E30E30A0810C30A091030050E1EC52
+S31A50009BE1FFFF1A000050E3ECFFFF1A0000A0E310A81BE90DC0BE
+S31A50009BF6A0E100D82DE904B04CE202C0A0E1070000EA0120D08E
+S31A50009C0BE40130D1E4030052E10300000A013050E5010051E544
+S31A50009C20030060E000A81BE90C30A0E101C04CE2000053E3F315
+S31A50009C35FFFF1A0000A0E300A81BE90DC0A0E1F0D92DE9BC3064
+S31A50009C4A9FE504B04CE2004093E5FF6000E2000054E319000000
+S31A50009C5F1AA8309FE50000E0E30380A0E1342093E50850A0E1B8
+S31A50009C740FE0A0E102F0A0E10070A0E1343095E50400A0E10F3F
+S31A50009C89E0A0E103F0A0E1143095E5000093E5014084E20C3082
+S31A50009C9E93E50610A0E10FE0A0E103F0A0E1000054E3F2FFFF41
+S31A50009CB3DA343098E50700A0E10FE0A0E103F0A0E1F0A91BE982
+S31A50009CC840209FE5143092E5000053E30500000A000093E50CC9
+S31A50009CDD3093E50610A0E10FE0A0E103F0A0E1F0A91BE9183014
+S31A50009CF292E5000093E50C3093E50610A0E10FE0A0E103F0A0CA
+S31A50009D07E1F0A91BE9F0440100500000000DC0A0E110D82DE9A2
+S31A50009D1C30209FE504B04CE2143092E50040A0E1000053E3056F
+S31A50009D3100000A000093E5103093E50FE0A0E103F0A0E10000A9
+S31A50009D46C4E510A81BE9183092E5F7FFFFEA500000000DC0A0F2
+S31A50009D5BE1F0DF2DE9E8309FE504B04CE20060A0E1004093E5C0
+S31A50009D700390A0E1000054E31E00001AD0309FE50000E0E303BB
+S31A50009D8570A0E1342093E507A0A0E10FE0A0E102F0A0E100802B
+S31A50009D9AA0E1343097E50400A0E10FE0A0E103F0A0E1143097B9
+S31A50009DAFE5000093E51C3093E50610A0E10FE0A0E103F0A0E1AD
+S31A50009DC4005050E20200000A0030D6E5000053E30C00001A015E
+S31A50009DD94084E2000054E3EDFFFFDA34309AE50800A0E10FE022
+S31A50009DEEA0E103F0A0E1130000EA54209FE5143092E500005312
+S31A50009E03E30800000A080000EA0130A0E3003089E5302097E5EF
+S31A50009E180400A0E10FE0A0E102F0A0E10500A0E1F0AF1BE91836
+S31A50009E2D3092E5000093E51C3093E50610A0E10FE0A0E103F0ED
+S31A50009E42A0E10050A0E10500A0E1F0AF1BE9F0440100500000B5
+S31A50009E57000DC0A0E1F0D92DE9D8309FE504B04CE2004093E54D
+S31A50009E6C0060A0E1000054E31C00001AC4309FE50000E0E303FF
+S31A50009E8180A0E1342093E50850A0E10FE0A0E102F0A0E100707D
+S31A50009E96A0E1343095E50400A0E10FE0A0E103F0A0E114C09530
+S31A50009EABE500005CE30500000A00009CE50710A0E314309CE539
+S31A50009EC00620A0E10FE0A0E103F0A0E1014084E2000054E3EFDF
+S31A50009ED5FFFFDA343098E50700A0E10FE0A0E103F0A0E10A00F3
+S31A50009EEA00EA50309FE514C093E50380A0E100005CE30500008B
+S31A50009EFF0A00009CE50710A0E314309CE50620A0E10FE0A0E1F7
+S31A50009F1403F0A0E118C098E500005CE30500000A00009CE50743
+S31A50009F2910A0E314309CE50620A0E10FE0A0E103F0A0E1F0A951
+S31A50009F3E1BE9F0440100500000000DC0A0E1F0DD2DE904B04CFE
+S31A50009F53E204D04DE20250A0E10060A0E10640A0E10070A0E350
+S31A50009F68F0819FE5002098E5000052E30600000A0030D2E500D0
+S31A50009F7D0053E30300000A0130D2E425304BE5002088E5160027
+S31A50009F9200EA060054E10030A0130130A003000055E30030A080
+S31A50009FA7D3000053E30D00000A0500A0E1A7FFFFEB000000EA2F
+S31A50009FBC325045E2000055E3030000DA25004BE261FFFFEB00E0
+S31A50009FD17050E2F8FFFF0A000057E30300001A0000E0E3610008
+S31A50009FE600EA25004BE248FFFFEB25205BE50030A0E30D00520C
+S31A50009FFBE30030C4E50200A0E11B00000A080000CA080050E38A
+S31A5000A0103300000A020000CA030050E30C00000A430000EA0A59
+S31A5000A0250050E31200000A400000EA2B0050E33900000A0200B4
+S31A5000A03A00CA240050E33600000A3A0000EA7F0050E324000060
+S31A5000A04F0A370000EA060054E10300001A00019FE554FEFFEB62
+S31A5000A0640100E0E3400000EA0100C4E4F0A09FE5360000EA25A1
+S31A5000A079205BE5E4A09FE50A0052E30200001A0030DAE50D00BD
+S31A5000A08E53E30400000A0D0052E30500001A0030DAE50A005376
+S31A5000A0A3E30200001A0030A0E325304BE5270000EAB0309FE5A6
+S31A5000A0B8002093E5000052E30300000A0D00A0E3DCFEFFEB0A05
+S31A5000A0CD00A0E3DAFEFFEB25305BE50030CAE50100A0E32200C9
+S31A5000A0E200EA7CA09FE5060054E11800000A74309FE500209351
+S31A5000A0F7E5000052E30500000A0800A0E3CDFEFFEB2000A0E3F2
+S31A5000A10CCBFEFFEB0800A0E3C9FEFFEB014044E20C0000EA0696
+S31A5000A1210054E10200001A74F2FFEB0000A0E30E0000EA303057
+S31A5000A1369FE5002093E5000052E30000000ABDFEFFEB25305B0E
+S31A5000A14BE514A09FE50130C4E425305BE50030CAE582FFFFEAD5
+S31A5000A160944501004C340150508400008C450100F0AD1BE90D95
+S31A5000A175C0A0E1F0DF2DE904B04CE204D04DE20170A0E107007B
+S31A5000A18A52E1078042800280A091000058E32C300BE50060A0B4
+S31A5000A19FE14D0000DA2C301BE5000053E30400000AD0009FE559
+S31A5000A1B4071063E00FE0A0E106F0A0E1030000EABC009FE507CB
+S31A5000A1C910A0E10FE0A0E106F0A0E10050A0E310A048E2109066
+S31A5000A1DE87E2080055E1040000AA9C009FE50510D7E70FE0A03F
+S31A5000A1F3E106F0A0E1020000EA8C009FE50FE0A0E106F0A0E1C6
+S31A5000A208C54FA0E1053064E00130C3E3053063E0010053E30255
+S31A5000A21D00001A6C009FE50FE0A0E106F0A0E1A43EA0E103304F
+S31A5000A23285E00730C3E3053063E0070053E30200001A48009FC7
+S31A5000A247E50FE0A0E106F0A0E1015085E20F0055E3E0FFFFDA29
+S31A5000A25C34009FE50FE0A0E106F0A0E10050A0E3080055E109DE
+S31A5000A2710000AA0510D7E7203041E25E0053E32E10A083050098
+S31A5000A28600EA503401505C34015064340150683401506C340156
+S31A5000A29B502010A0E328009FE50FE0A0E106F0A0E1015085E20A
+S31A5000A2B00F0055E3ECFFFFDA14009FE50FE0A0E106F0A0E109B0
+S31A5000A2C570A0E100805AE2010000EA7034015074340150B1FFF8
+S31A5000A2DAFFCAF0AF1BE90DC0A0E100D82DE90230A0E104B04CBE
+S31A5000A2EFE201C0A0E10010A0E108009FE50C20A0E19BFFFFEB92
+S31A5000A30400A81BE9B89900500DC0A0E100D82DE90020A0E304BE
+S31A5000A319B04CE2EFFFFFEB00A81BE90DC0A0E10F002DE930D8FC
+S31A5000A32E2DE914B04CE208D04DE248409FE504009BE500509441
+S31A5000A343E508108BE2A5FDFFEB38009FE598FDFFEB1C004BE235
+S31A5000A3580020A0E3002084E50810A0E3F7FEFFEB1C305BE5590F
+S31A5000A36D0053E30000A0130100A003790053E30100A003005055
+S31A5000A38284E5010000EA944501007834015030A81BE90DC0A0FC
+S31A5000A397E100D82DE928309FE5FA0FA0E3482093E504B04CE262
+S31A5000A3AC0FE0A0E102F0A0E114109FE5003091E5013083E2037C
+S31A5000A3C100A0E1003081E500A81BE950000000548400000DC079
+S31A5000A3D6A0E110D82DE90030D0E504B04CE2FF0053E30A000097
+S31A5000A3EB1A0130D0E5FF0053E30700001A0230D0E5FF0053E395
+S31A5000A4000400001A0330D0E5FF0053E30100001A0100A0E31007
+S31A5000A415A81BE94C409FE50420A0E30410A0E1F2FDFFEB00000B
+S31A5000A42A50E3F7FFFF0A0030D4E5000053E30900001A0130D44E
+S31A5000A43FE5000053E30600001A0230D4E5000053E30300001A39
+S31A5000A4540330D4E50100A0E3000053E30000000A0000A0E3105A
+S31A5000A469A81BE9588400000DC0A0E1F0D82DE904B04CE20CD016
+S31A5000A47E4DE20050A0E1044095E50160A0E1100084E2CFFFFF90
+S31A5000A493EB000050E30700000A0400A0E10010D4E50020A0E33E
+S31A5000A4A80F1001E20111A0E1E60000EB0008B0E10200000A0539
+S31A5000A4BD00A0E1D40000EB2D0000EA28704BE20700A0E10C1074
+S31A5000A4D284E20420A0E389FBFFEB24004BE20610A0E10620A0F6
+S31A5000A4E7E385FBFFEB0030D4E5B200D4E10F3003E20361A0E164
+S31A5000A4FC700100EB000066E0BC00C5E10930D4E5060053E30CB7
+S31A5000A51100000A020000CA010053E30300000A140000EA1100B6
+S31A5000A52653E30C00000A110000EA0500A0E1063084E0083085A6
+S31A5000A53BE50710A0E17C0100EB0D0000EA0500A0E1063084E0B9
+S31A5000A550083085E50710A0E1FD0200EB070000EA0500A0E106FF
+S31A5000A5653084E0083085E50710A0E1AB1700EB010000EA050020
+S31A5000A57AA0E1A50000EBF0A81BE90DC0A0E1F0DF2DE90060A096
+S31A5000A58FE1083086E2080113E8038048E004B04CE2045096E580
+S31A5000A5A44801A0E1BC30D6E10F0000E2083083E0BC30C6E14080
+S31A5000A5B90080E30000C5E50070A0E30170C5E501A0A0E1BC003E
+S31A5000A5CED6E10290A0E13A0100EB80409FE5B200C5E1B000D412
+S31A5000A5E3E1360100EBB400C5E1B030D4E16C109FE5013083E285
+S31A5000A5F8B030C4E1B670C5E14030A0E30830C5E509A0C5E5047B
+S31A5000A60D20A0E3BA70C5E10C0085E239FBFFEB100085E209104E
+S31A5000A622A0E10420A0E335FBFFEB0500A0E10810A0E10720A0A5
+S31A5000A637E1840000EB0008A0E12008A0E11E0100EB041089E2AD
+S31A5000A64CBA00C5E1022BA0E30600A0E1F00000EBF0AF1BE994FA
+S31A5000A661B80000588400000DC0A0E1F0D82DE97C209FE500307E
+S31A5000A67692E504B04CE2000053E31A00001A03E0A0E10130A081
+S31A5000A68BE3003082E50E40A0E15C709FE504C0A0E158509FE55A
+S31A5000A6A003E0A0E354609FE50500A0E1001096E507208CE0020B
+S31A5000A6B53002E2022083E05ECE8CE2103085E2042083E70CC006
+S31A5000A6CA8CE2001080E501E05EE228309FE50010A0E1BE30C006
+S31A5000A6DFE1144084E2140081E2F0FFFF5A001086E5F0A81BE99F
+S31A5000A6F468840000E8B8000098B8000098D00000EA0500000DBB
+S31A5000A709C0A0E1F0DD2DE904B04CE20CD04DE20060A0E3605041
+S31A5000A71E9FE50670A0E15CA09FE50580A0E1BE30D5E10A00A081
+S31A5000A733E1BCE0D5E10610A0E1004095E5016086E200308DE5CC
+S31A5000A74810C088E207309CE70520A0E104E08DE5145085E208E3
+S31A5000A75D408DE5147087E293FCFFEB030056E3EEFFFFDA143033
+S31A5000A7729FE514009FE5001093E58DFCFFEB030000EA98B80028
+S31A5000A787009034015098D00000BC340150F0AD1BE90DC0A0E1BA
+S31A5000A79C00D82DE960309FE504B04CE200C093E500005CE312E5
+S31A5000A7B100000A00209CE5002083E510309CE504308CE5401054
+S31A5000A7C69FE5143083E208308CE538E09FE50030A0E3BC30CC4B
+S31A5000A7DBE1003091E52C209FE5013083E2003081E5001092E509
+S31A5000A7F000009EE5033061E0000053E100308EC50C00A0E100C3
+S31A5000A805A81BE998D00000608400005C840000648400000DC05B
+S31A5000A81AA0E100D82DE920209FE5003092E51C109FE5013043D5
+S31A5000A82FE2003082E5003091E5003080E504B04CE2000081E5C2
+S31A5000A84400A81BE96084000098D000000DC0A0E100D82DE90273
+S31A5000A8591051E204B04CE202C0A0E10300004AB230D0E002103B
+S31A5000A86E51E203C08CE0FBFFFF5A010071E30500001A0030D056
+S31A5000A883E5FF20CEE302E083E1FFECCEE30E38A0E123C88CE0B5
+S31A5000A8980C08A0E12C28A0E130109FE520C882E00C3061E0015F
+S31A5000A8AD005CE103C0A0C10C00E0E10008A0E12E0880E160E8AA
+S31A5000A8C2A0E1200CA0E10008A0E10E0C80E12008A0E100A81B8D
+S31A5000A8D7E9FFFF00000DC0A0E100D82DE90020A0E304D04DE24D
+S31A5000A8ECBC30D0E104B04CE210204BE50910D0E50F104BE5BE47
+S31A5000A90120D0E1B011D0E1B2C1D0E1023083E0013083E0B0218A
+S31A5000A9165BE10C3083E0B200D0E1023083E0000083E000A81BDD
+S31A5000A92BE90DC0A0E110D82DE904B04CE210D04DE2B8009FE55F
+S31A5000A94094FFFFEB004050E20300001AAC009FE518FCFFEB6B07
+S31A5000A955FFFFEBFEFFFFEA101094E594209FE520004BE24C0A54
+S31A5000A96A00EBBC00C4E10008B0E12600000A84209FE500309283
+S31A5000A97FE5B4015BE1013083E2003082E54C0000EB020B50E3F3
+S31A5000A9940500000A68309FE5030050E10C00000A0400A0E19AC4
+S31A5000A9A9FFFFEBE2FFFFEA54309FE5002093E5101094E5012036
+S31A5000A9BE82E2002083E5041084E50400A0E11A104BE2A6FEFF46
+S31A5000A9D3EBD8FFFFEA30309FE5002093E5101094E5012082E2D4
+S31A5000A9E8002083E5041084E50400A0E1E60300EBCFFFFFEAEA05
+S31A5000A9FD050000CC34015074840000060800006C8400007084AF
+S31A5000AA1200000400A0E17EFFFFEB10A81BE90DC0A0E170D82D6E
+S31A5000AA27E904B04CE210D04DE20050A0E128604BE20600A0E1DD
+S31A5000AA3C0240A0E10620A0E32EFAFFEB22004BE238109FE50610
+S31A5000AA5120A0E32AFAFFEB0448A0E12408A0E1170000EBBC01B0
+S31A5000AA664BE1101095E5BC20D5E10600A0E18C0900EB10209F57
+S31A5000AA7BE5003092E5013083E2003082E5010000EAE0440100A7
+S31A5000AA907884000070A81BE90DC0A0E1203CA0E1003C83E1FF79
+S31A5000AAA52800E200D82DE9FF0C00E20004A0E1220480E1000055
+S31A5000AABA83E104B04CE200A81BE90DC0A0E100D82DE90008A05B
+S31A5000AACFE1FF3800E2200CA0E1230480E104B04CE200A81BE95F
+S31A5000AAE40DC0A0E100D82DE920209FE5003092E504B04CE2007E
+S31A5000AAF90053E30200001A000082E50300A0E100A81BE9000009
+S31A5000AB0EE0E300A81BE99CD000000DC0A0E100D82DE90030A0F5
+S31A5000AB23E308209FE504B04CE2003082E500A81BE99CD00000A7
+S31A5000AB380DC0A0E130D82DE90040A0E1080094E504B04CE2B072
+S31A5000AB4D30D0E10150A0E1080053E31700001ABC10D4E10020DA
+S31A5000AB62A0E339FFFFEB0008A0E120C8B0E11100001A083094EA
+S31A5000AB77E500C0C3E5082094E5B2C0C2E1080094E5BC10D4E16E
+S31A5000AB8C0C20A0E12EFFFFEB0008A0E12008A0E1C8FFFFEB08AF
+S31A5000ABA13094E50110A0E3B200C3E10520A0E10400A0E172FE1B
+S31A5000ABB6FFEB070000EA24309FE5003093E5000053E3030000A0
+S31A5000ABCB0A0400A0E10510A0E10FE0A0E103F0A0E10400A0E191
+S31A5000ABE00CFFFFEB30A81BE99CD000000DC0A0E1F0DF2DE90496
+S31A5000ABF5B04CE204D04DE20060A0E10140A0E1307086E20480E5
+S31A5000AC0A97E5020014E3085097E50290A0E10F00000A1830A082
+S31A5000AC1FE3BC30C7E10C30D5E550019FE59030C3E3603083E32C
+S31A5000AC340C30C5E596FFFFEB2C104BE22C000BE50420A0E31410
+S31A5000AC490085E2ACF9FFEB0030A0E3B831C6E1060000EAB8318E
+S31A5000AC5ED6E1143083E2BC30C7E10C20D5E5A020C2E35020825A
+S31A5000AC73E30C20C5E50C30D5E50F30C3E30C30C5E5580096E529
+S31A5000AC8882FFFFEB040085E5540096E57FFFFFEB0030A0E3B0EE
+S31A5000AC9D31C5E1000059E3080085E508A086E21800001AB401D0
+S31A5000ACB2D6E182FFFFEBB000C5E1B601D6E17FFFFFEBB200C572
+S31A5000ACC7E10D40C5E5B831D6E1000053E3083084130D30C5158E
+S31A5000ACDCA0009FE577FFFFEBBE00C5E1B291C5E10420A0E39005
+S31A5000ACF1109FE50C0088E281F9FFEB100088E20A10A0E1042051
+S31A5000AD06A0E37DF9FFEB0630A0E30930C8E5BC00D7E169FFFF85
+S31A5000AD1BEBB200C8E1BC40D7E10800A0E1EBFEFFEB0020A0E1D6
+S31A5000AD300500A0E10410A0E1C4FEFFEB0008A0E12008A0E15E61
+S31A5000AD45FFFFEB0610A0E3B001C5E10A20A0E10700A0E109FE90
+S31A5000AD5AFFEB043096E50A0053E30A00001A1C109FE51C00863F
+S31A5000AD6FE218209FE50630A0E1B20200EB110000EAB2050402CD
+S31A5000AD84B205000058840000C0D4010094AF00500D30D5E503AF
+S31A5000AD990013E30200001AB831D6E1000053E30600000A1C003B
+S31A5000ADAE86E2FA1FA0E308209FE50630A0E1A10200EB00000045
+S31A5000ADC3EA78AF0050F0AF1BE90DC0A0E1F0DF2DE904B04CE20C
+S31A5000ADD808D04DE22C000BE52C301BE5089090E5046093E508A0
+S31A5000ADED0099E530100BE527FFFFEB00A0A0E1040099E524FF77
+S31A5000AE02FFEB0080A0E1B200D9E12CFFFFEB0058A0E1B000D917
+S31A5000AE17E14558A0E128FFFFEB149086E20048A0E12C301BE58F
+S31A5000AE2C1470A0E3BC70C3E10A00A0E15030A0E30C30C9E54428
+S31A5000AE4148A0E113FFFFEB040089E50800A0E110FFFFEB0800E5
+S31A5000AE5689E5010BA0E318FFFFEBBE00C9E10030A0E3B231C9CC
+S31A5000AE6BE10558A0E1B031C9E12508A0E111FFFFEBB401C6E12E
+S31A5000AE800448A0E12408A0E10DFFFFEBB200C9E10D70C9E5046C
+S31A5000AE9520A0E370109FE50C0086E217F9FFEB100086E2301085
+S31A5000AEAA1BE50420A0E313F9FFEB0650A0E30950C6E52C301B4C
+S31A5000AEBFE5BC00D3E1FEFEFFEBB200C6E12C301BE5BC40D3E188
+S31A5000AED40600A0E17FFEFFEB0020A0E10900A0E10410A0E1580D
+S31A5000AEE9FEFFEB0008A0E12008A0E1F2FEFFEBB001C9E130205F
+S31A5000AEFE1BE52C001BE50510A0E19DFDFFEB000000EA588400DD
+S31A5000AF1300F0AF1BE90DC0A0E100D82DE94C309FE50010A0E361
+S31A5000AF28002093E504B04CE2010052E10D00000A03C0A0E100B5
+S31A5000AF3D0052E10600001A000051E30200000A003092E500303F
+S31A5000AF5281E5010000EA003092E500308CE50210A0E1002092B6
+S31A5000AF67E5000052E3F2FFFF1A00A81BE9A0D000000DC0A0E1F1
+S31A5000AF7C00D82DE90010A0E30120A0E304B04CE216FFFFEB0064
+S31A5000AF91A81BE90DC0A0E100D82DE90030A0E3043080E504B06D
+S31A5000AFA64CE2DAFFFFEB00A81BE90DC0A0E110D82DE90040A077
+S31A5000AFBBE1440094E504B04CE2000050E30500000A003090E5C4
+S31A5000AFD0443084E50FFEFFEB440094E5000050E3F9FFFF1A1031
+S31A5000AFE5A81BE90DC0A0E110D82DE90030A0E304B04CE2004034
+S31A5000AFFAA0E1043084E51C0084E2290200EB0400A0E1E7FFFFCC
+S31A5000B00FEB0400A0E1BFFFFFEB10A81BE90DC0A0E1F0D82DE9D6
+S31A5000B0240170A0E1082097E5BC10D7E104B04CE20C30D2E500D2
+S31A5000B03950A0E1040092E52332A0E10331A0E1014063E00360EE
+S31A5000B04E82E090FEFFEB542095E5003062E0000053E317000010
+S31A5000B063CA023060E0044063E0036086E0000054E3120000DAD3
+S31A5000B078043082E0543085E5442095E50030A0E3003087E503B9
+S31A5000B08D0052E10600000A000000EA002092E5003092E50000ED
+S31A5000B0A253E3FBFFFF1A007082E5020000EA447085E54C408508
+S31A5000B0B7E5486085E50100A0E3F0A81BE90000A0E3F0A81BE9F8
+S31A5000B0CC0DC0A0E130D82DE9083091E50040A0E1080093E504BA
+S31A5000B0E1B04CE26BFEFFEB583094E50050A0E1053063E0000089
+S31A5000B0F653E3140000DA1C0084E2EA0100EB582094E5B831D4C5
+S31A5000B10BE1051062E0030051E10310A0A1000051E30B0000DAFF
+S31A5000B120B831D4E1033061E0B831C4E1012082E0582084E503BD
+S31A5000B13538B0E10400000A380094E5B821D4E1140080E2011012
+S31A5000B14A80E06CF8FFEB30A81BE90DC0A0E1F0DD2DE90080A0BF
+S31A5000B15FE1BC00D8E1086098E504B04CE2044098E50170A0E1B5
+S31A5000B17452FEFFEBB200C4E100A0A0E3BC50D8E10400A0E1D39F
+S31A5000B189FDFFEB0020A0E10600A0E10510A0E1ACFDFFEB00081B
+S31A5000B19EB0E1F600001AC4339FE5005093E5000000EA00509593
+S31A5000B1B3E5000055E31200000AB200D6E1B441D5E13EFEFFEBBE
+S31A5000B1C8000054E1F7FFFF1AB631D5E1000053E30A00000AB041
+S31A5000B1DD00D6E10340A0E136FEFFEB000054E1EFFFFF1A07002B
+S31A5000B1F2A0E1081085E20420A0E37CFAFFEB000050E3E9FFFFD1
+S31A5000B2071A000055E3D800000A0C0085E2041087E20620A0E30F
+S31A5000B21C38F8FFEB043095E5020053E30700000A0D30D6E504BA
+S31A5000B2310013E30400000A0500A0E169FFFFEB0800A0E173FDDD
+S31A5000B246FFEBF0AD1BE9043095E5013043E2090053E303F19F3C
+S31A5000B25B97C20000EA88B20050E8B2005080B5005050B30050F9
+S31A5000B27050B30050FCB3005040B40050D4B4005018B500505C8C
+S31A5000B285B500500D30D6E5020013E31000000A0230A0E3043066
+S31A5000B29A85E5040096E5FCFDFFEB013080E2B000D6E15430857A
+S31A5000B2AFE503FEFFEBB601C5E1002097E51210A0E3082085E534
+S31A5000B2C40030A0E3B831C5E10500A0E1B035C5E18C0000EA084E
+S31A5000B2D900A0E10710A0E1B9FEFFEBA50000EA1C0085E26F01CE
+S31A5000B2EE00EB0D30D6E5041013E20200000A0130A0E304308590
+S31A5000B303E59D0000EA020013E30300000A0500A0E10120A0E344
+S31A5000B31833FEFFEB970000EA100013E39500000A080096E5D92D
+S31A5000B32DFDFFEB583095E5013083E2030050E18F00001A043025
+S31A5000B342A0E3043085E5580085E58B0000EA0D30D6E554409527
+S31A5000B357E5100013E30200000A0500A0E10810A0E157FFFFEB35
+S31A5000B36C0500A0E10810A0E128FFFFEB0D30D6E500A0A0E1012C
+S31A5000B3810013E30800000A040096E5C1FDFFEB543095E5030031
+S31A5000B39650E10300001A013080E2543085E50520A0E30420852C
+S31A5000B3ABE5543095E5040053E10200001AB035D5E1000053E32F
+S31A5000B3C06E00000AB841D5E1000054E30700001A1C0085E235EB
+S31A5000B3D50100EB0500A0E11010A0E30420A0E100FEFFEBB04576
+S31A5000B3EAC5E1630000EA0130A0E3B035C5E1600000EA0D30D669
+S31A5000B3FFE5100013E35D00000A0500A0E10810A0E12DFFFFEB5C
+S31A5000B414080096E59EFDFFEB583095E5013083E2030050E154A5
+S31A5000B42900001A0030A0E3043085E50500A0E1B6FEFFEB4F00DA
+S31A5000B43E00EA0D30D6E5100013E31700000A0500A0E10810A05C
+S31A5000B453E11CFFFFEB080096E58DFDFFEB583095E5013083E219
+S31A5000B468030050E10E00001A0D30D6E5010013E30900000A0516
+S31A5000B47D00A0E11010A0E3543095E50A20A0E3042085E50130D6
+S31A5000B49283E2543085E50A2042E2D2FDFFEB010000EA0830A032
+S31A5000B4A7E3043085E50D30D6E5010013E33100000A1C0085E20C
+S31A5000B4BCFB0000EB0500A0E11110A0E3543095E50920A0E30A61
+S31A5000B4D10000EA0500A0E10810A0E1CEFEFFEB0D30D6E500A0B9
+S31A5000B4E6A0E1010013E32300000A0500A0E11010A0E354309514
+S31A5000B4FBE50A20A0E3042085E5013083E2543085E50020A0E39F
+S31A5000B510B5FDFFEB190000EA0D30D6E5100013E31600000A050E
+S31A5000B52500A0E10810A0E1E6FEFFEB080096E557FDFFEB58308A
+S31A5000B53A95E5013083E2030050E10D00001A1C0085E2D70000E1
+S31A5000B54FEB0A30A0E3043085E5080000EA0500A0E10010A0E340
+S31A5000B5640120A0E39FFDFFEB030000EAA0D000000800A0E10765
+S31A5000B57910A0E112FEFFEB00005AE30100001A0800A0E1A1FC5E
+S31A5000B58EFFEBF0AD1BE90DC0A0E100D82DE904B04CE2E1FCFFCD
+S31A5000B5A3EBD90000EB00A81BE90DC0A0E130D82DE954209FE57E
+S31A5000B5B804B04CE20040A0E10158A0E14558A0E10010A0E3807A
+S31A5000B5CDF7FFEB0130A0E3043084E5B451C4E15C2084E24020F5
+S31A5000B5E284E5342084E524109FE524209FE5703084E238308466
+S31A5000B5F7E5BE23C4E1003091E5003084E50000A0E3004081E516
+S31A5000B60C30A81BE948060000A0D00000EA0500000DC0A0E110EC
+S31A5000B621D82DE90040A0E1043094E504B04CE2010000EAD6FFC0
+S31A5000B636FFEB043094E5000053E30200000AB831D4E1000053DF
+S31A5000B64BE3F8FFFF1A10A81BE90DC0A0E110D82DE904B04CE2B7
+S31A5000B6600040A0E1ECFFFFEB041094E5020051E30030A0130142
+S31A5000B67530A003040051E30320A0110120A003000052E306008C
+S31A5000B68A000A0400A0E11110A0E30730A0E3043084E50020A00B
+S31A5000B69FE351FDFFEB060000EA050051E30400001A0400A0E159
+S31A5000B6B40630A0E3043084E51110A0E349FDFFEB0400A0E13844
+S31A5000B6C9FEFFEB10A81BE90DC0A0E1F0D82DE904B04CE2016003
+S31A5000B6DEA0E1005052E20040A0E1020000DA4C3094E500005317
+S31A5000B6F3E30300001A0000A0E3F0A81BE94C0084E52B0000EA03
+S31A5000B708043094E5040053E30070A0E3170000EA481094E50624
+S31A5000B71D00A0E1F7F6FFEB4C3094E5440094E5037087E00020BD
+S31A5000B73290E5036086E0442084E5055063E034FCFFEB44009417
+S31A5000B747E5000050E3EBFFFF0A081090E50C30D1E5BC20D0E180
+S31A5000B75C2332A0E1032142E04C2084E50C30D1E52332A0E103C6
+S31A5000B7711181E0481084E5000055E30D00000A4C2094E5020004
+S31A5000B78655E1E2FFFFAA0600A0E1481094E50520A0E1D9F6FFCC
+S31A5000B79BEB483094E5057087E04C2094E5053083E0483084E52D
+S31A5000B7B0022065E04C2084E50700A0E1F0A81BE90DC0A0E17010
+S31A5000B7C5D82DE904B04CE20040A0E1380094E5005052E2010052
+S31A5000B7DA00CA0000A0E370A81BE9043094E5043043E201005341
+S31A5000B7EFE30100009A0000E0E370A81BE9B861D4E1000056E38B
+S31A5000B8040C00001A34309FE5140080E2030055E10350A0210503
+S31A5000B81920A0E1B8F6FFEB0400A0E11010A0E3B851C4E106208F
+S31A5000B82EA0E1EDFCFFEB0500A0E170A81BE90000A0E370A81B03
+S31A5000B843E9B20500000DC0A0E170D82DE904B04CE20060A0E18B
+S31A5000B8580240A0E1041086E50350A0E1CAFAFFEB080086E50C42
+S31A5000B86D4086E534309FE5002093E50310A0E1105086E50000E6
+S31A5000B88252E30400000A060052E10500000A002092E5000052E7
+S31A5000B897E3FAFFFF1A003091E5003086E5006081E570A81BE92E
+S31A5000B8ACA4D000000DC0A0E100D82DE94C109FE50020A0E300FE
+S31A5000B8C13091E504B04CE2020053E10D00000A000053E107000C
+S31A5000B8D6001A000052E30200000A003093E5003082E500A81BAA
+S31A5000B8EBE9003093E5003081E500A81BE90320A0E1003093E5D3
+S31A5000B900000053E3F1FFFF1A00A81BE9A4D000000DC0A0E170BF
+S31A5000B915D82DE970309FE504B04CE20050A0E3004093E50360E5
+S31A5000B92AA0E1050054E11500000A96FAFFEB0C0094E900006372
+S31A5000B93FE0020050E10C00003A000055E30200000A003094E557
+S31A5000B954003085E5010000EA003094E5003086E5100094E50F27
+S31A5000B969E0A0E10CF094E5004096E50050A0E3010000EA0450D0
+S31A5000B97EA0E1004094E5000054E3E9FFFF1A70A81BE9A4D0005C
+S31A5000B993000DC0A0E1F0D92DE90070A0E1045097E5B200D5E1F3
+S31A5000B9A804B04CE244FCFFEB0040A0E1B000D5E141FCFFEB01D9
+S31A5000B9BD0050E3020B54033B00001A186085E20600A0E1EC8061
+S31A5000B9D29FE50420A0E30810A0E184F8FFEB000050E33300007A
+S31A5000B9E71AB600D5E134FCFFEB010050E31C00001A0200A0E366
+S31A5000B9FC30FCFFEB0E4085E20410A0E1B600C5E10420A0E30677
+S31A5000BA1100A0E13AF6FFEB126085E20600A0E1085085E20510FB
+S31A5000BA26A0E10620A0E334F6FFEB0400A0E10810A0E10420A095
+S31A5000BA3BE330F6FFEB0500A0E17C109FE50620A0E32CF6FFEB62
+S31A5000BA501C30A0E3BC30C7E10700A0E168209FE50610A0E1ED10
+S31A5000BA65FBFFEB120000EAB600D5E113FCFFEB020050E30E00ED
+S31A5000BA7A001A4C409FE5003094E5000053E30A00000A0E1085A1
+S31A5000BA8FE2080094E50420A0E355F8FFEB006050E20400001A5B
+S31A5000BAA4081085E2040094E50620A0E313F6FFEB006084E507CF
+S31A5000BAB900A0E155FBFFEBF0A91BE958840000E04401000608BB
+S31A5000BACE0000A8D000000DC0A0E1F0DF2DE90420A0E304B04CBB
+S31A5000BAE3E208D04DE200A0A0E114519FE50180A0E10510A0E16D
+S31A5000BAF83DF8FFEB004050E20500001A0800A0E1FC109FE50614
+S31A5000BB0D20A0E3FBF5FFEB0400A0E14D0000EA2C00A0E31CFBCE
+S31A5000BB22FFEB007050E20400001A470000EA0700A0E137FBFF24
+S31A5000BB37EB0400A0E1440000EA044097E50100A0E3DDFBFFEBFF
+S31A5000BB4CB600C4E10100A0E3DAFBFFEBB000C4E1020BA0E3D734
+S31A5000BB61FBFFEB0510A0E10660A0E3B200C4E10450A0E3046083
+S31A5000BB76C4E50520A0E10550C4E50E0084E2DEF5FFEB0800845A
+S31A5000BB8BE278109FE50620A0E1DAF5FFEB180084E20A10A0E1E8
+S31A5000BBA00520A0E1D6F5FFEBFF30A0E330304BE52F304BE52EE0
+S31A5000BBB5304BE52D304BE52C304BE52B304BE544209FE50160D8
+S31A5000BBCA86E2048082E530904BE208A082E5FE3043E2003082BC
+S31A5000BBDFE50280A0E11C30A0E3BC30C7E10700A0E11C209FE568
+S31A5000BBF40910A0E188FBFFEBE4F9FFEB0050A0E1070000EA58FE
+S31A5000BC09840000E0440100A8D000000608000043FBFFEB004039
+S31A5000BC1E98E5000054E3C1FFFF0AD9F9FFEB000065E0F90050F4
+S31A5000BC33E3F7FFFF9A0630A0E1016046E2000053E3E6FFFFCA10
+S31A5000BC480700A0E1F1FAFFEB0000E0E3F0AF1BE90DC0A0E1F090
+S31A5000BC5DDD2DE904B04CE20080A0E10150A0E1A0A09FE50070A0
+S31A5000BC72A0E30A60A0E10800A0E10640A0E10410A0E10420A050
+S31A5000BC87E3D9F7FFEB003050E20E00000A0C6084E2017087E28F
+S31A5000BC9C0F0057E3F4FFFFDA0500A0E10810A0E10420A0E393CF
+S31A5000BCB1F5FFEB0800A0E1041085E284FFFFEB000050E30500A0
+S31A5000BCC600AA0000E0E3F0AD1BE9070096E8070085E80300A069
+S31A5000BCDBE1F0AD1BE930E09FE500C09EE5070095E88C308CE0F9
+S31A5000BCF003318AE0070083E801C08CE200C08EE510005CE30028
+S31A5000BD0530A00300308E050000A0E3F0AD1BE9B4D000007C8495
+S31A5000BD1A00000DC0A0E1F0DF2DE904B04CE204D04DE20050A0B6
+S31A5000BD2FE10180A0E164419FE50260A0E12CC014E50390A0E1C1
+S31A5000BD4400005CE30A30A0133F00001A0100A0E35AFBFFEB004C
+S31A5000BD5900C4E52004A0E10100C4E50500A0E10030D0E50220FA
+S31A5000BD6E84E2000053E30300000A0130C2E40130F0E500005391
+S31A5000BD83E3FBFFFF1A0030A0E30130C2E4030056E108019F05EE
+S31A5000BD980300000A010056E30A30A0132900001AF8009FE5004D
+S31A5000BDAD30D0E5F4709FE5000053E30300000A0130C2E4013013
+S31A5000BDC2F0E5000053E3FBFFFF1A0050A0E3D8609FE50510A0B4
+S31A5000BDD7E10050C2E50600A0E10C20A0E37AF5FFEB144046E21E
+S31A5000BDEC01A0A0E3BAA1C4E10500A0E126FBFFEB140084E500BA
+S31A5000BE013097E5B000D7E10A3083E0003087E52BFBFFEBB801C0
+S31A5000BE16C4E1B430D8E1050053E10200001A4500A0E325FBFF43
+S31A5000BE2BEBB400C8E1180086E20820A0E174109FE50630A0E17C
+S31A5000BE40F81100EB000050E3030000AA0930A0E3003089E50069
+S31A5000BE5500E0E31D0000EA4C309FE514A003E50C5084E50060F7
+S31A5000BE6AE0E3106084E529004BE2085084E50A10A0E104508447
+S31A5000BE7FE50920A0E11B0000EB010050E30900000A18309FE5B0
+S31A5000BE94145003E50000E0E30C0000EAA0D10000EC340150F864
+S31A5000BEA93401508484000088D1000005020000343294E505005D
+S31A5000BEBEA0E10C2094E5013043E2343284E5012082E20C208499
+S31A5000BED3E5F0AF1BE90DC0A0E100D82DE90000A0E308309FE501
+S31A5000BEE804B04CE2000083E500A81BE974D100000DC0A0E1F076
+S31A5000BEFDDF2DE904B04CE218D04DE234000BE50030A0E33C30A9
+S31A5000BF120BE538100BE50280A0E10C629FE5010053E1870000EB
+S31A5000BF27AA2C5046E20C3095E5000053E3150000DA34001BE552
+S31A5000BF3C38C01BE53C201BE5341295E50C4062E0040053E103BD
+S31A5000BF5140A0B10420A0E1E9F4FFEB34C01BE5343295E504C0F0
+S31A5000BF668CE034C00BE50C2095E5043083E0343285E50220648D
+S31A5000BF7BE00C2085E53C101BE5041081E03C100BE5690000EA95
+S31A5000BF90103095E5020C53E36A00003A0130A0E388019FE500E3
+S31A5000BFA520A0E330300BE5209085E22C200BE514A085E274114B
+S31A5000BFBA9FE530304BE200308DE50920A0E10A30A0E1DC110017
+S31A5000BFCFEB004050E20470A0E31C0000AA043095E5013083E2A9
+S31A5000BFE4043085E50F0053E3020000CA083095E5000053E3015A
+S31A5000BFF900001A0830A0E3470000EA0700A0E1ADFAFFEB0000BE
+S31A5000C00EC6E52004A0E10100C6E5B800D5E1A8FAFFEB0200C609
+S31A5000C023E50710A0E12004A0E10300C6E50920A0E1F4009FE5C0
+S31A5000C0380A30A0E1791100EB000050E33B0000AA0930A0E33465
+S31A5000C04D0000EA0030D6E50100D6E5000483E198FAFFEB030010
+S31A5000C06250E32000001A0230D6E50300D6E5000483E192FAFF68
+S31A5000C077EB083095E5013083E2030050E10500001A044044E26E
+S31A5000C08C104085E50C4085E5043086E2343285E5080085E507F4
+S31A5000C0A100A0E186FAFFEB0000C6E52004A0E10100C6E5B80095
+S31A5000C0B6D5E181FAFFEB0200C6E50710A0E12004A0E10300C651
+S31A5000C0CBE50920A0E158009FE50A30A0E1521100EB000050E363
+S31A5000C0E0140000AA0930A0E30D0000EA0030D6E50100D6E500DD
+S31A5000C0F50483E171FAFFEB050050E30600001A0230D6E50300DB
+S31A5000C10AD6E5000483E16BFAFFEB000088E50000E0E30A00001E
+S31A5000C11FEA0B30A0E3003088E50000E0E3060000EAA0D100004C
+S31A5000C134050200003C201BE538301BE5030052E178FFFFBA3C33
+S31A5000C149001BE5F0AF1BE90DC0A0E100D82DE9010040E204B0D5
+S31A5000C15E4CE20B0050E300F19F97230000EA9CC10050A4C100C4
+S31A5000C17350ACC10050B4C10050BCC10050C4C10050CCC1005010
+S31A5000C188D4C10050DCC10050E4C10050ECC10050F4C100506023
+S31A5000C19D009FE500A81BE95C009FE500A81BE958009FE500A8F7
+S31A5000C1B21BE954009FE500A81BE950009FE500A81BE94C009F2F
+S31A5000C1C7E500A81BE948009FE500A81BE944009FE500A81BE990
+S31A5000C1DC40009FE500A81BE93C009FE500A81BE938009FE50060
+S31A5000C1F1A81BE934009FE500A81BE930009FE500A81BE910352E
+S31A5000C2060150203501503435015058350150703501508435018E
+S31A5000C21B5098350150A8350150BC350150D8350150EC3501500A
+S31A5000C23000360150003501500DC0A0E1F0DF2DE904B04CE20081
+S31A5000C24540A0E10190A0E100A0A0E30A80A0E10160A0E3007039
+S31A5000C25AA0E301C0D4E40A50A0E307005CE13500000A30005C91
+S31A5000C26FE30030A0130130A003030016E10A00000A0030D4E5D3
+S31A5000C284411043E2202083E2FF2002E2190051E30230A0917809
+S31A5000C2990053E30200001A1050A0E3014084E201C0D4E400E005
+S31A5000C2AEA0E30E60A0E130104CE2FF0001E241204CE2FF3002A3
+S31A5000C2C3E2050053E3090050830200009A61304CE2050053E381
+S31A5000C2D80000008A01E0A0E300005EE31200000A0000A0E3FF2E
+S31A5000C2ED3001E2090053E30100A0910600009A61304CE20500FE
+S31A5000C30253E357004C920200009AFF3002E2050053E337004CF8
+S31A5000C31792050050E1040000AA01C0D4E4950727E000005CE3EA
+S31A5000C32CCEFFFF1A030000EA2E005CE30100000A0000A0E3F0E8
+S31A5000C341AF1BE9033068E28331A0E117A38AE1018088E2030019
+S31A5000C35658E3BDFFFFDA0A00A0E1CCF9FFEB000089E50100A063
+S31A5000C36BE3F0AF1BE90DC0A0E110D82DE90010A0E108D04DE2FD
+S31A5000C3800230D1E528409FE500308DE50320D1E504208DE5006D
+S31A5000C39520D1E50130D1E504B04CE210109FE50400A0E174F50C
+S31A5000C3AAFFEB0400A0E1010000EAACD300001C36015010A81BD9
+S31A5000C3BFE90DC0A0E1F0D82DE904B04CE200E0A0E108C09EE570
+S31A5000C3D4FF1001E204609BE50250A0E1000096E50370A0E108DE
+S31A5000C3E9208EE2140092E8044082E000C08CE0140000EA0100FA
+S31A5000C3FE52E10E00001A0230DCE508009EE502E093E20500009F
+S31A5000C4130A0E10A0E10030DCE5011051E20130C5E402C08CE2D6
+S31A5000C428FAFFFF1A00E087E50C3060E0003086E50100A0E3F0C0
+S31A5000C43DA81BE90230DCE58330A0E1043083E203C08CE00400F5
+S31A5000C4525CE10300002A0020DCE5FF3002E2FF0053E3E4FFFF0A
+S31A5000C4671A0000A0E3F0A81BE90DC0A0E100D82DE9083090E548
+S31A5000C47CFF2002E20120C3E704B04CE200A81BE90DC0A0E100AB
+S31A5000C491D82DE90610A0E3002090E504B04CE201C0D2E45C313E
+S31A5000C4A6A0E1010013E30100000A0130D2E4A32382E001105137
+S31A5000C4BBE2F8FFFF5A002080E500A81BE90DC0A0E100D82DE977
+S31A5000C4D0002090E50130D2E404B04CE21C1003E21C0051E30141
+S31A5000C4E5208212033003E2030053E301208212002080E500A805
+S31A5000C4FA1BE90DC0A0E1F0DF2DE904B04CE20040A0E30090A0CB
+S31A5000C50FE100C099E50460A0E10120DCE401E0A0E1603002E206
+S31A5000C524A332A0E14430CEE5800012E34100000A0120DCE4048A
+S31A5000C53970A0E10F3002E2013083E240308EE5030057E13A0095
+S31A5000C54E00AA303002E223A2A0E12283A0E10750A0E103005AF3
+S31A5000C563E30AF19F97130000EABCC500507CC5005084C5005061
+S31A5000C57898C500500160DCE40D0000EA0120DCE50030DCE502BE
+S31A5000C58D6483E102C08CE2080000EA0300DCE50020DCE5023082
+S31A5000C5A2DCE50110DCE5002C82E10338A0E1013483E1036082D2
+S31A5000C5B7E104C08CE20E6085E7030058E308F19F97130000EAC2
+S31A5000C5CC1CC60050DCC50050E4C50050F8C500500140DCE40DCD
+S31A5000C5E10000EA0120DCE50030DCE5024483E102C08CE2080050
+S31A5000C5F600EA0300DCE50020DCE50230DCE50110DCE5002C82D8
+S31A5000C60BE10338A0E1013483E1034082E104C08CE2014084E20F
+S31A5000C62020308EE2054083E7017087E240309EE5045085E203B5
+S31A5000C6350057E1C8FFFFBA00C089E5F0AF1BE90DC0A0E130D8BB
+S31A5000C64A2DE904B04CE204D04DE200C0A0E118000BE50C10A085
+S31A5000C65FE10130D1E40250A0E1FF3003E218100BE51B0053E359
+S31A5000C6740800000A18C00BE510009FE510109FE50020DCE5ABBD
+S31A5000C689F2FFEB0000A0E3240000EA283601504C360150010056
+S31A5000C69E81E218000BE50120D1E5011080E218100BE53F3002F3
+S31A5000C6B3E20030C5E5800012E30300000A0130D0E50130C5E51D
+S31A5000C6C8012081E218200BE518301BE50140D3E40240C5E51817
+S31A5000C6DD300BE5010014E30100000A18004BE266FFFFEB020039
+S31A5000C6F214E30100000A18004BE262FFFFEB040014E30100004F
+S31A5000C7070A18004BE26DFFFFEB080014E30200000A18004BE2D2
+S31A5000C71C041085E275FFFFEB0100A0E330A81BE90DC0A0E1002B
+S31A5000C731D82DE904B04CE200C0A0E10130DCE402E0A0E11A001E
+S31A5000C74653E30500000A90009FE590109FE501205CE577F2FF41
+S31A5000C75BEB0000A0E300A81BE901C08CE20100DCE40030A0E3B6
+S31A5000C77001C08CE200308EE5031010E20500004A0320A0E10193
+S31A5000C78530DCE7022483E1011051E2FBFFFF5A00208EE503306F
+S31A5000C79A00E2013083E203C08CE00010A0E33C3000E22331A0B8
+S31A5000C7AFE1013083E204308EE5030051E1060000AA08008EE2A4
+S31A5000C7C40130DCE40130C0E704209EE5011081E2020051E1F9F9
+S31A5000C7D9FFFFBA0100A0E300A81BE928360150603601500DC0AA
+S31A5000C7EEA0E100D82DE9001050E204B04CE20300000A10009F91
+S31A5000C803E54CF2FFEB0000A0E300A81BE904009FE500A81BE95A
+S31A5000C81870360150CCD300000DC0A0E130D82DE904B04CE200D1
+S31A5000C82D50A0E31C409FE5005084E50400A0E12DE2FFEB2C404A
+S31A5000C84284E2015085E2000055E3F8FFFFDA30A81BE9CCD300EA
+S31A5000C857000DC0A0E100D82DE904B04CE271E2FFEB00A81BE96F
+S31A5000C86C0DC0A0E100D82DE904B04CE29EE2FFEB00A81BE90D20
+S31A5000C881C0A0E110D82DE940409FE51C3094E504B04CE2000062
+S31A5000C89653E30100000A0000A0E310A81BE9030084E898E2FFCF
+S31A5000C8ABEB000050E30500001A083094E50120A0E31C2084E5EB
+S31A5000C8C0003063E2103084E510A81BE910A81BE9C04401000D65
+S31A5000C8D5C0A0E100D82DE93C209FE50010A0E11C3092E504B0E1
+S31A5000C8EA4CE2000053E30100001A0700A0E300A81BE914309258
+S31A5000C8FFE5030051E10300003A183092E50000A0E3030051E100
+S31A5000C9140000003A0100A0E300A81BE9C04401000DC0A0E100FB
+S31A5000C929D82DE930009FE504B04CE21C3090E502C0A0E100001B
+S31A5000C93E53E30500000A143090E5003081E5182090E500208CA1
+S31A5000C953E50000A0E300A81BE90700A0E300A81BE9C04401002A
+S31A5000C9680DC0A0E100D82DE92C209FE51C3092E504B04CE200B3
+S31A5000C97D0053E30500000A083092E5003080E50C2092E5002003
+S31A5000C99281E50000A0E300A81BE90700A0E300A81BE9C044016A
+S31A5000C9A7000DC0A0E1F0DF2DE904B04CE200A0A0E30050A0E11C
+S31A5000C9BC0180A0E1F8C09FE50290A0E11C309CE50C70A0E10AEB
+S31A5000C9D10053E10100001A0700A0E3F0AF1BE9006097E5D810BB
+S31A5000C9E69FE5D8209FE50600A0E1022061E042F2FFEB0E02A02E
+S31A5000C9FBE3021A80E2202090E4000031E1FCFFFF1A0000A0E313
+S31A5000CA10160F07EE9A0F07EE101F11EE011AC1E3101F01EE00F8
+S31A5000CA2510A0E3151F07EE0000A0E10000A0E10000A0E1000067
+S31A5000CA3AA0E10000A0E10000A0E1103097E5034005E00410A076
+S31A5000CA4FE1085085E070009FE50520A0E1D5F3FFEB68809FE526
+S31A5000CA64040000EA083097E560009FE50130C3E3034084E0CE95
+S31A5000CA79F3FFEB050054E10600002A0400A0E10FE0A0E106F020
+S31A5000CA8EA0E173E2FFEB00A050E2F2FFFF0A004089E5101F11C3
+S31A5000CAA3EE011A81E3031081E3101F01EE0800A0E1BFF3FFEB01
+S31A5000CAB80A00A0E1F0AF1BE9C044010024F2005030F300508C7B
+S31A5000CACD360150A8360150A43601500DC0A0E1F0DF2DE904B036
+S31A5000CAE24CE204D04DE20270A0E10090A0E30050A0E194C09FEE
+S31A5000CAF7E50160A0E11C209CE50CA0A0E12C300BE5090052E19B
+S31A5000CB0C0700A0033F00000A00809AE574109FE574209FE508A4
+S31A5000CB2100A0E1022061E0F5F1FFEB0E02A0E3021A80E22020A4
+S31A5000CB3690E4000031E1FCFFFF1A0000A0E3160F07EE9A0F07AD
+S31A5000CB4BEE101F11EE011AC1E3101F01EE0010A0E3151F07EECA
+S31A5000CB600000A0E10000A0E10000A0E10000A0E10000A0E100E5
+S31A5000CB7500A0E11C009FE50610A0E1072086E00530A0E18AF3DD
+S31A5000CB8AFFEB090000EAC044010030F3005060F40050AC360164
+S31A5000CB9F5070009FE5077064E082F3FFEB0130C4E3035085E03D
+S31A5000CBB4036086E0000057E30D0000DA0500A0E108309AE506E9
+S31A5000CBC910A0E1030057E10740A0B10340A0A10420A0E10FE085
+S31A5000CBDEA0E108F0A0E11EE2FFEB009050E2EBFFFF0A2C301BDC
+S31A5000CBF3E5005083E5101F11EE011A81E3031081E3101F01EEF8
+S31A5000CC080C009FE569F3FFEB0900A0E1010000EAA4360150A8A3
+S31A5000CC1D360150F0AF1BE90DC0A0E1F0DF2DE904B04CE200A0CD
+S31A5000CC32A0E30050A0E10180A0E1F8C09FE50290A0E11C309C0A
+S31A5000CC47E50C70A0E10A0053E10100001A0700A0E3F0AF1BE91A
+S31A5000CC5C006097E5D8109FE5D8209FE50600A0E1022061E0A31C
+S31A5000CC71F1FFEB0E02A0E3021A80E2202090E4000031E1FCFFAB
+S31A5000CC86FF1A0000A0E3160F07EE9A0F07EE101F11EE011AC1E5
+S31A5000CC9BE3101F01EE0010A0E3151F07EE0000A0E10000A0E16F
+S31A5000CCB00000A0E10000A0E10000A0E10000A0E1103097E50356
+S31A5000CCC54005E00410A0E1085085E070009FE50520A0E136F3CA
+S31A5000CCDAFFEB68809FE5040000EA083097E560009FE50130C31F
+S31A5000CCEFE3034084E02FF3FFEB050054E10600002A0400A0E155
+S31A5000CD040FE0A0E106F0A0E1D4E1FFEB00A050E2F2FFFF0A0072
+S31A5000CD194089E5101F11EE011A81E3031081E3101F01EE0800B7
+S31A5000CD2EA0E120F3FFEB0A00A0E1F0AF1BE9C044010050D500C4
+S31A5000CD435018D60050CC360150A8360150A43601500DC0A0E1FC
+S31A5000CD58F0DF2DE904B04CE200A0A0E30050A0E10180A0E100B3
+S31A5000CD6DC19FE50290A0E11C309CE50C60A0E10A0053E101000A
+S31A5000CD82001A0700A0E3F0AF1BE9007096E5E0109FE5E0209F01
+S31A5000CD97E50700A0E1022061E057F1FFEB0E02A0E3021A80E21E
+S31A5000CDAC202090E4000031E1FCFFFF1A0000A0E3160F07EE9A0B
+S31A5000CDC10F07EE101F11EE011AC1E3101F01EE0010A0E3151F31
+S31A5000CDD607EE0000A0E10000A0E10000A0E10000A0E10000A059
+S31A5000CDEBE10000A0E1103096E5034005E00410A0E1085085E046
+S31A5000CE0078009FE50520A0E1EAF2FFEB70809FE5040000EA08F5
+S31A5000CE153096E568009FE50130C3E3034084E0E3F2FFEB0500D9
+S31A5000CE2A54E10800002A081096E50C2096E50400A0E10FE0A0E8
+S31A5000CE3FE107F0A0E186E1FFEB00A050E2F0FFFF0A004089E566
+S31A5000CE54101F11EE011A81E3031081E3101F01EE0800A0E1D2D6
+S31A5000CE69F2FFEB0A00A0E1F0AF1BE9C044010018D60050ACD78E
+S31A5000CE7E0050E4360150A8360150A43601500DC0A0E100D82DE1
+S31A5000CE93E904B04CE20B0050E300F19F97210000EAD4CE005007
+S31A5000CEA8ECCE0050F4CE0050FCCE005004CF00500CCF00501487
+S31A5000CEBDCF00501CCF00502CCF0050DCCE0050E4CE005024CF76
+S31A5000CED2005058009FE500A81BE954009FE500A81BE950009FAA
+S31A5000CEE7E500A81BE94C009FE500A81BE948009FE500A81BE95B
+S31A5000CEFC44009FE500A81BE940009FE500A81BE93C009FE50027
+S31A5000CF11A81BE938009FE500A81BE934009FE500A81BE930000D
+S31A5000CF269FE500A81BE92C009FE500A81BE9FC3601501C37013D
+S31A5000CF3B5040370150643701507C37015094370150B03701502F
+S31A5000CF50C8370150D8370150FC37015020380150443801500DBF
+S31A5000CF65C0A0E100D82DE9003090E5000053E104B04CE2050072
+S31A5000CF7A000A043090E5001083E5043090E5090081E804108072
+S31A5000CF8FE500A81BE9041083E5001083E5043081E5003081E582
+S31A5000CFA400A81BE90DC0A0E100D82DE90010A0E1000091E5042F
+S31A5000CFB9B04CE2010050E10400000A003090E5003081E5002094
+S31A5000CFCE90E5041082E500A81BE90000A0E300A81BE90DC0A0C0
+S31A5000CFE3E170D82DE93C309FE53C209FE53C509FE5043083E528
+S31A5000CFF804B04CE2003083E50F40A0E3042082E50260A0E10014
+S31A5000D00D2082E50600A0E10510A0E1D1FFFFEB615E85E20140F3
+S31A5000D02254E2F9FFFF5A70A81BE900D40000F8D3000008D40085
+S31A5000D037000DC0A0E130D82DE90620A0E304B04CE20050A0E1C6
+S31A5000D04C100085E20140A0E1AAF0FFEB0410A0E118009FE50685
+S31A5000D06120A0E3A6F0FFEB10309FE5005083E50500A0E102003D
+S31A5000D07600EB30A81BE9E0440100EC4401000DC0A0E100D82DDF
+S31A5000D08BE90030A0E1101080E204B04CE200C093E50020A0E361
+S31A5000D0A00FE0A0E100F09CE500A81BE90DC0A0E1F0DF2DE94421
+S31A5000D0B5319FE504B04CE288D04DE23CC19FE50540A0E34C80DD
+S31A5000D0CA93E50090A0E100509CE50270A0E1AC100BE5000058AA
+S31A5000D0DFE31000000A0850A0E100C095E514219FE524309CE548
+S31A5000D0F428308CE50C3095E524208CE5000053E30700001A0541
+S31A5000D10900A0E1F8109FE50320A0E10FE0A0E100F09CE50C30ED
+S31A5000D11E95E5013083E30C3085E5D0609FE50A0000EA00309582
+S31A5000D133E50500A0E10FE0A0E11CF093E5C8009FE5483096E5F3
+S31A5000D148014044E20FE0A0E103F0A0E1000054E3370000DA00E9
+S31A5000D15D3095E50500A0E10FE0A0E10CF093E5000050E3EEFF33
+S31A5000D172FF0AA8900BE50EA0A0E3A4A00BE5AC301BE59C700BC9
+S31A5000D187E584209FE584009FE5A0300BE50060A0E1001092E500
+S31A5000D19C0030A0E3003080E5030051E10B00000A030F00EB0099
+S31A5000D1B140A0E160009FE5FEF1FFEB0900A0E10A10A0E150F42C
+S31A5000D1C6FFEBAC001BE50710A0E14DF4FFEB0400A0E1080F0009
+S31A5000D1DBEB0500A0E1A8104BE200C095E50220A0E300608DE5E2
+S31A5000D1F00E3087E20FE0A0E110F09CE50B0000EA50000000EC0B
+S31A5000D20544010088840000E0440100400D0300E844010008358E
+S31A5000D21A010054380150002095E50500A0E10FE0A0E11CF0929D
+S31A5000D22FE5003096E5000053E3F8FFFF0A000058E30400000A85
+S31A5000D244003095E5282093E5242083E50010A0E3281083E5F046
+S31A5000D259AF1BE90DC0A0E100D82DE930309FE5030051E104B0AE
+S31A5000D26E4CE200C0A0E10200001A0130A0E3003081E500A81BBD
+S31A5000D283E900309CE50C00A0E128C093E50FE0A0E108F09CE5D0
+S31A5000D29800A81BE9083501000DC0A0E1F0D92DE9DC309FE5DCA8
+S31A5000D2AD209FE504B04CE20070A0E14C6093E50180A0E1005029
+S31A5000D2C292E5000056E31000000A0650A0E100C095E5B8209FAF
+S31A5000D2D7E524309CE528308CE50C3095E524208CE5000053E3C8
+S31A5000D2EC0700001A0500A0E19C109FE50320A0E10FE0A0E100EC
+S31A5000D301F09CE50C3095E5013083E30C3085E5003095E50500AE
+S31A5000D316A0E10FE0A0E11CF093E574009FE51FFFFFEB004050A7
+S31A5000D32BE20D00000A0700A0E10C1084E20E20A0E3F0EFFFEB1A
+S31A5000D3400800A0E1082094E51A1084E20E2042E2EBEFFFEB446E
+S31A5000D355009FE50410A0E100FFFFEB080094E5000000EA0400FC
+S31A5000D36AA0E1000056E30400000A003095E5282093E52420835F
+S31A5000D37FE50010A0E3281083E5F0A91BE950000000EC4401000D
+S31A5000D39488840000E044010000D40000F8D300000DC0A0E1F020
+S31A5000D3A9D92DE904B04CE20050A0E30280A0E1080055E10160D3
+S31A5000D3BEA0E10D0000AA34709FE58541A0E1060094E700109735
+S31A5000D3D3E5064084E0042094E5C8EFFFEB003097E5042094E5D9
+S31A5000D3E8015085E2023083E0003087E5080055E1F2FFFFBAF019
+S31A5000D3FDA91BE90C3501000DC0A0E1F0D92DE904B04CE280D077
+S31A5000D4124DE20060A0E1E8009FE50170A0E1E0FEFFEB008050A9
+S31A5000D427E20C5088120050A003A0500BE50600A0E19C700BE56C
+S31A5000D43CA0104BE2003096E50120A0E30FE0A0E114F093E5B4B9
+S31A5000D451209FE5003092E5000053E30B00000A560E00EB00404B
+S31A5000D466A0E1A0009FE551F1FFEB0500A0E10E10A0E3A3F3FFCE
+S31A5000D47BEB0E0085E20E1047E2A0F3FFEB0400A0E15B0E00EB49
+S31A5000D490003096E5282093E5000052E31200000A1E1085E26878
+S31A5000D4A5009FE50420A0E3D0F1FFEB000050E30C00000A583075
+S31A5000D4BA9FE5002096E5005083E5144092E528C092E548309FEF
+S31A5000D4CFE50600A0E1143082E50710A0E10FE0A0E104F09CE55E
+S31A5000D4E4003096E5144083E5000058E30B00000A087088E52021
+S31A5000D4F9009FE50810A0E197FEFFEB060000EAF8D30000E84445
+S31A5000D50E010064380150588400000C350100A4D3005000D4000B
+S31A5000D52300F0A91BE90DC0A0E100D82DE914309FE5000093E584
+S31A5000D538002090E504B04CE20FE0A0E120F092E500A81BE9EC82
+S31A5000D54D4401000DC0A0E130D82DE904B04CE200E0A0E1FE443D
+S31A5000D5620EE294509FE5103F11EE23C1A0E101C01CE20C000088
+S31A5000D5770A0E02A0E3021A80E2202090E4000031E1FCFFFF1A54
+S31A5000D58C0000A0E3160F07EE9A0F07EE101F11EE0C10C1E310FB
+S31A5000D5A11F01EE0010A0E3161F07EE50109FE550309FE55020FC
+S31A5000D5B69FE5003084E54C309FE500208EE500308EE500009423
+S31A5000D5CBE5013000E0010053E10100000A015055E2F9FFFF1A26
+S31A5000D5E02C309FE5003084E500005CE30200000A101F11EE0FDF
+S31A5000D5F51081E3101F01EE30A81BE9404B4C0080008000500036
+S31A5000D60A50006000600001000100FF00FF000DC0A0E1F0DF2D5B
+S31A5000D61FE904B04CE280D04DE200E0A0E101A0A0E10260A0E1F0
+S31A5000D634103F11EE2371A0E1017017E20C00000A0E02A0E30213
+S31A5000D6491A80E2202090E4000031E1FCFFFF1A0000A0E3160F78
+S31A5000D65E07EE9A0F07EE101F11EE0C10C1E3101F01EE0010A012
+S31A5000D673E3161F07EEFE540EE20520A0E130309FE50010A0E3E0
+S31A5000D688003085E5060051E1100000AAA8004BE20180A0E103D1
+S31A5000D69DC0CAE314409FE5004082E50E0052E10300001A018057
+S31A5000D6B2C0E7030000EA5000500098009800083092E50130C009
+S31A5000D6C7E70C2082E0011081E2060051E1F2FFFFBAB0109FE5E9
+S31A5000D6DCB0C09FE5B0309FE5B0209FE500308EE500208EE50001
+S31A5000D6F10095E50C3000E00C0053E10100000A011051E2F9FFB1
+S31A5000D706FF1A0520A0E10010A0E3060051E1150000AAA8804BFC
+S31A5000D71BE274909FE52AE1A0E10130D8E7014081E2000053E3E3
+S31A5000D7300A00000A009082E550109FE55C309FE54CC09FE500FF
+S31A5000D7453082E5000095E50C3000E00C0053E10100000A0110F0
+S31A5000D75A51E2F9FFFF1A0E2182E00410A0E1060051E1EBFFFFD9
+S31A5000D76FBA2C309FE5003085E5000057E30200000A101F11EEA7
+S31A5000D7840F1081E3101F01EE050000EA404B4C00800080006073
+S31A5000D799006000D000D00001000100FF00FF00F0AF1BE90DC0B5
+S31A5000D7AEA0E100D82DE908309FE504B04CE2000083E500A81BD8
+S31A5000D7C3E9103501000DC0A0E100D82DE930109FE530309FE5E8
+S31A5000D7D8000081E5002093E5002092E504B04CE2000052E30139
+S31A5000D7ED00001A0200A0E100A81BE90200A0E30FE0A0E102F0A1
+S31A5000D802A0E100A81BE914350100103501000DC0A0E100D82DAB
+S31A5000D817E934309FE504B04CE230C09FE507008CE8002093E56C
+S31A5000D82C002092E5000052E30100001A0200A0E100A81BE90378
+S31A5000D84100A0E30C10A0E10FE0A0E102F0A0E100A81BE9103588
+S31A5000D8560100143501000DC0A0E100D82DE934309FE504B04CF8
+S31A5000D86BE230C09FE503008CE8002093E5002092E5000052E321
+S31A5000D8800100001A0200A0E100A81BE90400A0E30C10A0E10FC0
+S31A5000D895E0A0E102F0A0E100A81BE910350100143501000DC04B
+S31A5000D8AAA0E100D82DE934309FE504B04CE230C09FE507008CD3
+S31A5000D8BFE8002093E5002092E5000052E30100001A0200A0E114
+S31A5000D8D400A81BE90500A0E30C10A0E10FE0A0E102F0A0E10035
+S31A5000D8E9A81BE910350100143501000DC0A0E100D82DE93430F8
+S31A5000D8FE9FE504B04CE230C09FE507008CE8002093E500209220
+S31A5000D913E5000052E30100001A0200A0E100A81BE90700A0E3BB
+S31A5000D9280C10A0E10FE0A0E102F0A0E100A81BE910350100140E
+S31A5000D93D3501000DC0A0E12034A0E1FF3C03E2203C83E100D86E
+S31A5000D9522DE90024A0E1FF2802E2023083E1000C83E104B04C9E
+S31A5000D967E200A81BE90DC0A0E100D82DE904B04CE208D04DE2A2
+S31A5000D97C14004BE290FFFFEB000050E30300000A10001BE5EA4C
+S31A5000D991FFFFEB0008A0E12008A0E100A81BE90DC0A0E1F0DD49
+S31A5000D9A62DE904B04CE20040A0E10050A0E30170A0E10260A096
+S31A5000D9BBE1FC809FE5FCA09FE52C0000EA054186E70030D4E54E
+S31A5000D9D0015085E2220000EA0030D4E5220053E31D00001A05AB
+S31A5000D9E52186E0043012E5040053E101408402044002050030AB
+S31A5000D9FAD4E50400A0E1000053E3220053130900000A0430A0DF
+S31A5000DA0FE10110D3E45C0051E30340A0010020D4E50120C0E4F1
+S31A5000DA240130F4E5000053E322005313F5FFFF1A0030D4E500D9
+S31A5000DA390053E30200001A80009FE5DBEFFFEB040000EA040086
+S31A5000DA4E50E10030A0130030C015050000EA014084E20030D4BA
+S31A5000DA63E5000053E30300000A200053E3D8FFFF1A0030A0E337
+S31A5000DA780130C4E40030D4E5000053E30700000A200053E302E2
+S31A5000DA8D00001A0130F4E5200053E3FCFFFF0A0030D4E50000C7
+S31A5000DAA253E3C7FFFF1A005087E50800A0E1002096E50A10A06A
+S31A5000DAB7E1030000EBF0AD1BE97487000024880000AC380150B8
+S31A5000DACC0DC0A0E1F0DF2DE904B04CE20040A0E10280A0E1080E
+S31A5000DAE100A0E101A0A0E1C7EFFFEB0450A0E10A0055E10090F2
+S31A5000DAF6A0E12C00000A0800A0E1001095E50920A0E11AF0FF48
+S31A5000DB0BEB000050E32300001A000095E5BBEFFFEB090050E10C
+S31A5000DB201D0000DA0170A0E30A0054E11400000A040055E10F09
+S31A5000DB3500000A0800A0E1001094E50920A0E10BF0FFEB00607A
+S31A5000DB4A50E20900001A000057E30400000A58009FE50810A03F
+S31A5000DB5FE1002095E50670A0E192EFFFEB48009FE5001094E529
+S31A5000DB748FEFFFEB104084E20A0054E1EAFFFF1A000057E303AA
+S31A5000DB8900001A2C009FE588EFFFEB0700A0E1F0AF1BE90500D6
+S31A5000DB9EA0E1F0AF1BE9105085E20A0055E1D2FFFF1A0000A067
+S31A5000DBB3E3F0AF1BE9C0380150E8380150EC3801500DC0A0E104
+S31A5000DBC870D82DE904B04CE20040A0E10150A0E130009FE50269
+S31A5000DBDD60A0E174EFFFEB050054E10700000A20009FE50020A0
+S31A5000DBF294E5083094E50610A0E16DEFFFEB104084E2050054B2
+S31A5000DC07E1F7FFFF1A70A81BE9F0380150F83801500DC0A0E15E
+S31A5000DC1C00D82DE90010C0E50C0080E904B04CE204309BE50CE3
+S31A5000DC313080E508209BE5102080E50C309BE5143080E500A8A9
+S31A5000DC461BE90DC0A0E1F0DF2DE904B04CE20CD04DE200C0A0EF
+S31A5000DC5BE334C00BE50CE09BE501A0A0E32C000BE50A005EE1A2
+S31A5000DC7000C0A01301C0A00308E09BE50180A0E130300BE500B8
+S31A5000DC85005EE300C0A00300005CE334101B1500108E153430C6
+S31A5000DC9A1BE504C09BE530401BE50C0053E1110000AA03C0A00D
+S31A5000DCAFE104009BE5103094E5000053E300C08315041094E5D1
+S31A5000DCC4000051E30600001A083094E5000053E30100000A02AD
+S31A5000DCD90053E30100001A0C3094E5001083E5184084E20100A3
+S31A5000DCEE50E2EFFFFF1A2CE01BE50270A0E10E0057E1860000C7
+S31A5000DD03AA071198E70030D1E52D0053E35300001A0050A0E3EB
+S31A5000DD1830401BE50500A0E104209BE5016087E20190D1E502F3
+S31A5000DD2D0055E1440000AA0030D4E5030059E13C00001A1030AB
+S31A5000DD4294E5000053E30600000A003093E5000053E3030000D6
+S31A5000DD570A94019FE5141094E500A0A0E313EFFFEB043094E5E5
+S31A5000DD6C000053E32000000A070198E70230D0E53D0053E30308
+S31A5000DD815080020200000A073188E0017087E2045093E50820EB
+S31A5000DD9694E5000052E30200000A010052E30C00000A0D00000F
+S31A5000DDABEA0500A0E10C1094E50230A0E15C0000EB006050E27C
+S31A5000DDC00700001A2C019FE50510A0E1142094E506A0A0E1F7C5
+S31A5000DDD5EEFFEB010000EA0C3094E5005083E5102094E50130D9
+S31A5000DDEAA0E3003082E5036087E00C0000EA083094E5000053F0
+S31A5000DDFFE30200000A020053E30400000A060000EA0C2094E5EF
+S31A5000DE14003092E5013083E2010000EA0C2094E50130A0E30022
+S31A5000DE293082E50150A0E3040000EA010080E204309BE51840C6
+S31A5000DE3E84E2030050E1BAFFFFBA000055E32F00001A0910A033
+S31A5000DE53E1A0009FE505A0A0E1D5EEFFEB2A0000EA08C09BE530
+S31A5000DE6800005CE32300000A34E01BE500005EE30300000A1071
+S31A5000DE7D109BE56C009FE500A0A0E3CAEEFFEB0C109BE5000059
+S31A5000DE9251E30200000A010051E30D00000A0F0000EA08109BED
+S31A5000DEA7E50C209BE5070198E70230A0E11D0000EB004050E2CB
+S31A5000DEBC0800001A30009FE510209BE5071198E704A0A0E1B801
+S31A5000DED1EEFFEB020000EA073198E708209BE5003082E50130FB
+S31A5000DEE6A0E334300BE5036087E0060000EA0439015024390154
+S31A5000DEFB504C39015020009FE5016087E2AAEEFFEB08A09BE57E
+S31A5000DF102CC01BE50670A0E10C0057E178FFFFBA0A00A0E100C4
+S31A5000DF250000EA6C390150F0AF1BE90DC0A0E1F0D92DE904B02D
+S31A5000DF3A4CE200C0A0E10140A0E30A50A0E30060A0E30180A068
+S31A5000DF4FE10270A0E10000DCE503E0A0E1200050E30200001AFF
+S31A5000DF640130FCE5200053E3FCFFFF0A0030DCE5000053E33F80
+S31A5000DF7900000A000054E30B00000AFF3003E2300053E3080065
+S31A5000DF8E001A0130DCE5411043E2202083E2FF2002E219005194
+S31A5000DFA3E30230A091780053E31050A00302C08C020040A0E309
+S31A5000DFB80110DCE40400A0E1302041E2413041E2050053E3095D
+S31A5000DFCD0052830200009A613041E2050053E30000008A0100FE
+S31A5000DFE2A0E3000050E31300000A0000A0E3302041E2FF3002DA
+S31A5000DFF7E2090053E30200A0910600009A613041E2050053E3DC
+S31A5000E00C570041920200009A413041E2050053E3370041920505
+S31A5000E0210050E1040000AA0030DCE5950626E0000053E3D0FF1E
+S31A5000E036FF1A0F0000EA00005EE30B00000A0E20A0E10030D266
+S31A5000E04BE5010000EA0130F2E5FF3003E2000053E30100000A3D
+S31A5000E060030051E1F9FFFF1A0030D2E5000053E30100001A00D7
+S31A5000E07500A0E3F0A91BE9006088E5000057E300C087150100BC
+S31A5000E08AA0E3F0A91BE90DC0A0E100D82DE90030D0E504B04CEA
+S31A5000E09FE2200053E30200001A0130F0E5200053E3FCFFFF0A62
+S31A5000E0B40000D0E5540050E30030A0130130A003740050E30166
+S31A5000E0C930A003000053E30400001A460050E366005013020081
+S31A5000E0DE000A0300A0E100A81BE90130A0E3003081E50100A0B2
+S31A5000E0F3E300A81BE90DC0A0E100D82DE93C009FE504B04CE255
+S31A5000E1082AEEFFEB34009FE534109FE534209FE534309FE52545
+S31A5000E11DEEFFEB30009FE523EEFFEB2C009FE52C309FE52CC094
+S31A5000E1329FE5001093E500209CE51DEEFFEB00A81BE9D48200DE
+S31A5000E14700C43A0150DC3A0150F83A0150A0390150083B015076
+S31A5000E15C343B015088450100F44401000DC0A0E1F0DF2DE9005E
+S31A5000E17100E0E304D04DE244429FE5343094E504B04CE20FE0C5
+S31A5000E186A0E103F0A0E12C000BE50060A0E3343094E50600A0B7
+S31A5000E19BE10FE0A0E103F0A0E11C029FE51C329FE51C229FE51E
+S31A5000E1B0006083E50180A0E3008082E5483094E50FE0A0E103ED
+S31A5000E1C5F0A0E104229FE504129FE5006082E50234A0E300308A
+S31A5000E1DA81E5F8519FE5EF0100EB0600A0E10610A0E1C1FFFFEF
+S31A5000E1EFEBE8319FE5E8A19FE5E8719FE5030055E10340A0E156
+S31A5000E2040300000A0FE0A0E104F095E4040055E1FBFFFF1A0078
+S31A5000E219E09AE500005EE33500000AC0219FE5C0419FE5C01100
+S31A5000E22E9FE50E90A0E1003092E50400A0E1832263E002318318
+S31A5000E243E08351A0E19125CCE0C52FA0E14C2362E00210A0E120
+S31A5000E258823262E0032182E0822145E0D3EDFFEB0030A0E300BA
+S31A5000E26D308AE5090055E31A0000DA0700A0E1011CA0E30A2020
+S31A5000E282A0E32FEFFFEB0060A0E1010056E30A00001A58319F3F
+S31A5000E297E50400A0E19325C1E0C52FA0E1412362E00210A0E1AB
+S31A5000E2AC823262E0032182E0822145E0BEEDFFEBEBFFFFEA015A
+S31A5000E2C10076E30600001A28319FE5002093E5000052E30000CF
+S31A5000E2D6000A4B0B00EB0A5045E2E2FFFFEA020076E3020000EA
+S31A5000E2EB1A0030A0E300308AE5000000EA00908AE5000058E338
+S31A5000E3000200000AF0009FE50080A0E3A9EDFFEB0700A0E10126
+S31A5000E3151CA0E3FA20A0E309EFFFEB0060A0E1010076E305003F
+S31A5000E32A001AC4309FE5002093E5000052E3EFFFFF0A320B00F5
+S31A5000E33FEBEDFFFFEA000056E30700001A70209FE52C001BE519
+S31A5000E354343092E50FE0A0E103F0A0E198009FE559DBFFEBE382
+S31A5000E369FFFFEA0700A0E1A5EDFFEB000050E30F0000DA805071
+S31A5000E37E9FE50700A0E17C409FE50510A0E10420A0E182FDFF2F
+S31A5000E393EB003050E20400000A000095E50410A0E10FE0A0E145
+S31A5000E3A80CF093E5020000EA54009FE5001094E57EEDFFEB01F3
+S31A5000E3BD80A0E3CDFFFFEA50000000400D0300F04401008C4597
+S31A5000E3D2010088450100F4440100E4880000EC8800009445011E
+S31A5000E3E70020350100F8440100403B0150D34D6210CC460100C7
+S31A5000E3FC843B0150704900508445010000450100903B0150F081
+S31A5000E411AF1BE90DC0A0E110D82DE9020050E304B04CE2014049
+S31A5000E426A0E15400001A040094E554119FE5A2EDFFEB0000506D
+S31A5000E43BE31000001A00C00FE100400FE1C04084E304F029E124
+S31A5000E450101F11EE011A81E3031081E3101F01EE101F11EE0FE2
+S31A5000E4651081E3101F01EE00300FE1C0400CE2C030C3E30430E2
+S31A5000E47A83E103F029E110A81BE9040094E500119FE58CEDFF90
+S31A5000E48FEB000050E33500001A00C00FE100400FE1C04084E36E
+S31A5000E4A404F029E10E02A0E3021A80E2202090E4000031E1FC3C
+S31A5000E4B9FFFF1A0000A0E3160F07EE9A0F07EE101F11EE011A5C
+S31A5000E4CEC1E3101F01EE0010A0E3151F07EE0000A0E10000A044
+S31A5000E4E3E10000A0E10000A0E10000A0E10000A0E1101F11EEBB
+S31A5000E4F80C10C1E3101F01EE0010A0E3161F07EE0E02A0E30289
+S31A5000E50D1A80E2202090E4000031E1FCFFFF1A0000A0E3160FA5
+S31A5000E52207EE9A0F07EE0010A0E3151F07EE151F08EE0000A075
+S31A5000E537E10000A0E10000A0E10000A0E10000A0E10000A0E113
+S31A5000E54C0010A0E3161F07EE171F08EE00300FE1C0400CE2C0AD
+S31A5000E56130C3E3043083E103F029E110A81BE91C009FE5041074
+S31A5000E57694E50EEDFFEB10A81BE910009FE50BEDFFEB10A81BD7
+S31A5000E58BE9B43B0150B83B0150BC3B0150D43B01500DC0A0E1C2
+S31A5000E5A070D82DE90030A0E304B04CE214D04DE21C300BE503CB
+S31A5000E5B550A0E11C304BE204308DE500508DE524309FE50C3035
+S31A5000E5CA8DE50120A0E308208DE50530A0E19AFDFFEB000050AF
+S31A5000E5DFE30400001A08009FE5F2ECFFEB230000EAE03B015003
+S31A5000E5F4E83B01501C001BE5000050E30100000A00EDFFEB0017
+S31A5000E60950A0E15C409FE55C309FE5030054E10360A0E1170072
+S31A5000E61E000A1C001BE50130A0E3000050E30500000A001094D1
+S31A5000E633E50520A0E14EEDFFEB000050E30030A0130130A003E2
+S31A5000E648000053E30400000A20009FE5041094E5002094E50851
+S31A5000E65D3094E5D4ECFFEB104084E2060054E1020000EA748727
+S31A5000E672000024880000FC3B0150E7FFFF1A70A81BE90DC0A081
+S31A5000E687E170D82DE904B04CE250D04DE20060A0E148404BE222
+S31A5000E69C0400A0E14C304BE200308DE550204BE204208DE5010F
+S31A5000E6B150A0E18C309FE56210A0E308308DE50120A0E300307A
+S31A5000E6C6A0E352FDFFEB54304BE200308DE558204BE204208D84
+S31A5000E6DBE530004BE264309FE56C10A0E308308DE50120A0E32D
+S31A5000E6F00030A0E347FDFFEB0230A0E300308DE50020A0E304E0
+S31A5000E705208DE508208DE50600A0E138309FE50510A0E10C3038
+S31A5000E71A8DE5012082E20430A0E147FDFFEB000050E310000077
+S31A5000E72F0A50301BE5000053E30600001A10009FE59CECFFEB99
+S31A5000E7440A0000EA0C3C01501C3C0150A0390150243C01505801
+S31A5000E759301BE5000053E32030A00354300B054C001BE55410B8
+S31A5000E76E1BE5E5EEFFEB70A81BE90DC0A0E170D82DE904B04CBB
+S31A5000E783E23CD04DE23C304BE240204BE200308DE50040A0E185
+S31A5000E79804208DE530604BE26C319FE50600A0E108308DE50170
+S31A5000E7AD50A0E160319FE57710A0E300C093E50120A0E344C031
+S31A5000E7C20BE50030A0E312FDFFEB0120A0E300208DE544304B5B
+S31A5000E7D7E204308DE50010A0E308108DE530319FE50400A0E1C8
+S31A5000E7EC0C308DE50510A0E10630A0E112FDFFEB000050E34754
+S31A5000E80100000A40301BE5000053E30C00000A08019FE5441005
+S31A5000E8161BE53C201BE565ECFFEB38004BE23C201BE50810A087
+S31A5000E82BE3823262E0032182E08221A0E1C2EDFFEB020070E311
+S31A5000E8403700000A44301BE500C00FE100400FE1C04084E3046D
+S31A5000E855F029E10E02A0E3021A80E2202090E4000031E1FCFF8C
+S31A5000E86AFF1A0000A0E3160F07EE9A0F07EE101F11EE011AC1E5
+S31A5000E87FE3101F01EE0010A0E3151F07EE0000A0E10000A0E16F
+S31A5000E8940000A0E10000A0E10000A0E10000A0E1101F11EE0CDB
+S31A5000E8A910C1E3101F01EE0010A0E3161F07EE0E02A0E3021AC6
+S31A5000E8BE80E2202090E4000031E1FCFFFF1A0000A0E3160F0704
+S31A5000E8D3EE9A0F07EE0010A0E3151F07EE151F08EE0000A0E1E7
+S31A5000E8E80000A0E10000A0E10000A0E10000A0E10000A0E10040
+S31A5000E8FD10A0E3161F07EE171F08EE0300A0E1EFD9FFEB03008E
+S31A5000E91200EA3C3C0150904501004C3C0150603C015070A81B18
+S31A5000E927E90DC0A0E110D82DE950009FE504B04CE21EECFFEBA6
+S31A5000E93C48409FE548009FE5483094E50FE0A0E103F0A0E13C87
+S31A5000E951009FE517ECFFEB38009FE5482094E50FE0A0E102F0EB
+S31A5000E966A0E100300FE100400FE1C04084E304F029E11C209F35
+S31A5000E97BE50130A0E3003082E5FEFFFFEAA43C0150500000009A
+S31A5000E990400D0300B43C015050C300000000039010A81BE90D1C
+S31A5000E9A5C0A0E100D82DE904B04CE200A81BE90DC0A0E110D814
+S31A5000E9BA2DE904B04CE204D04DE21C409FE5003094E5000093DB
+S31A5000E9CFE51C2093E511104BE20FE0A0E102F0A0E1000050E3E0
+S31A5000E9E4000000EA20360100F5FFFF1A10A81BE90DC0A0E1F080
+S31A5000E9F9D82DE904B04CE204D04DE20060A0E398529FE51D7002
+S31A5000EA0E4BE20540A0E1003095E5000093E51C2093E50710A01D
+S31A5000EA23E10FE0A0E102F0A0E1000050E39A00000A1D305BE560
+S31A5000EA38013043E2170053E303F19F97290000EAA8EA0050B4FD
+S31A5000EA4DEA0050F0EA0050E8EA0050F0EA0050F0EA0050F0EAAA
+S31A5000EA620050F0EA0050F0EA0050F0EA0050F0EA0050F0EA0077
+S31A5000EA7750F0EA0050F0EA0050F0EA0050F0EA0050F0EA005012
+S31A5000EA8CF0EA0050F0EA0050F0EA0050F0EA0050F0EA0050F05D
+S31A5000EAA1EA0050D4EA00501C3494E5013083E21C3484E51D305D
+S31A5000EAB65BE5020053E30200001A203494E5013083E220348426
+S31A5000EACBE50160A0E3060000EA243494E5013083E2243484E5FF
+S31A5000EAE00400E0E38C0000EA0300E0E38A0000EA000056E3C655
+S31A5000EAF5FFFF0A003095E5000093E5011B85E21C2093E508103D
+S31A5000EB0A81E20FE0A0E102F0A0E1000050E36000000A003095F8
+S31A5000EB1FE5000093E5011B85E21C2093E5091081E20FE0A0E10B
+S31A5000EB3402F0A0E1000050E35700000A0040A0E31D305BE5041B
+S31A5000EB492085E2010053E3042485E5013BA0138030A00310348B
+S31A5000EB5E85E5030054E10E0000AA0260A0E1003095E5000093D2
+S31A5000EB73E51C2093E50710A0E10FE0A0E102F0A0E1000050E3F0
+S31A5000EB884400000A1D305BE50430C6E7102495E5014084E2020F
+S31A5000EB9D0054E1F1FFFFBA003095E5000093E5011B85E21C204E
+S31A5000EBB293E50A1081E20FE0A0E102F0A0E1000050E3350000B8
+S31A5000EBC70A283495E5000053E30800000A003095E5000093E599
+S31A5000EBDC011B85E21C2093E50B1081E20FE0A0E102F0A0E10036
+S31A5000EBF10050E32900000AAC209FE5AC109FE50200D5E70130D4
+S31A5000EC06D5E7003023E0FF0053E30200000A66FFFFEB0500E03F
+S31A5000EC1BE33E0000EA282495E5000052E32400000A00C0A0E317
+S31A5000EC30103495E50C40A0E103005CE10D0000AA046085E20329
+S31A5000EC4500A0E164E09FE50430D6E70C18A0E1014084E2213C81
+S31A5000EC5A23E08330A0E1B3209EE1000054E1212422E00228A080
+S31A5000EC6FE142C8A0E1F4FFFFBA38209FE538109FE50200D5E7BC
+S31A5000EC840130D5E70C28A0E1003483E1220853E11F00000A065E
+S31A5000EC9900E0E31E0000EA0200E0E31C0000EA20360100080417
+S31A5000ECAE000009040000948400000A0400000B04000002C0A057
+S31A5000ECC3E1103495E50C40A0E103005CE1090000AA040085E21C
+S31A5000ECD80310A0E10430D0E70C28A0E1223883E00338A0E143E1
+S31A5000ECEDC8A0E1014084E2010054E1F7FFFFBA0600E0E31830D6
+S31A5000ED029FE50C20A0E10310D5E7FF2002E2020051E10000006F
+S31A5000ED171A0000A0E3000000EA0A040000F0A81BE90DC0A0E112
+S31A5000ED2CF0DF2DE904B04CE20A80A0E30170A0E1030057E30277
+S31A5000ED4190A0E10300001A0130E0E3003089E50000E0E3F0AF45
+S31A5000ED561BE954519FE5343095E50000E0E30FE0A0E103F0A081
+S31A5000ED6BE10060A0E1342095E53C419FE50FE0A0E102F0A0E1C9
+S31A5000ED80143095E5003084E5342095E50600A0E10FE0A0E1020A
+S31A5000ED95F0A0E100C094E500009CE50710A0E314309CE57D2EDE
+S31A5000EDAAA0E30FE0A0E103F0A0E10020A0E3102484E50130A086
+S31A5000EDBFE3283484E52C2484E5147484E5182484E505A0A0E1CC
+S31A5000EDD41C2484E50460A0E1202484E50650A0E1242484E513FE
+S31A5000EDE970A0E300FFFFEB004050E20F00001ABC309FE50320B5
+S31A5000EDFED5E7000052E30500001A003095E5000093E50C2093B9
+S31A5000EE13E50610A0E30FE0A0E102F0A0E1104485E594209FE53D
+S31A5000EE280130A0E30230C5E70400A0E1F0AF1BE9030074E31358
+S31A5000EE3D00001A018048E2000058E30030A0D3283485D56C00A5
+S31A5000EE529FE548309AE50FE0A0E103F0A0E100C096E5281496E9
+S31A5000EE67E500009CE5000051E30C209CE51510A0034310A0132B
+S31A5000EE7C0FE0A0E102F0A0E1183496E5013083E2183486E5052F
+S31A5000EE910074E30300000A0730A0E1017047E2000053E3D0FF5B
+S31A5000EEA6FFCA0000E0E3004089E5F0AF1BE9500000002036017D
+S31A5000EEBB00080400000C04000020A107000DC0A0E1F0DF2DE9D5
+S31A5000EED004B04CE20CD04DE22C000BE50030A0E334300BE501C6
+S31A5000EEE590A0E1A4019FE5030059E10030A0D30130A0C32C14D4
+S31A5000EEFA90E50060A0E1000051E30030A01330200BE5000053AD
+S31A5000EF0FE37F00000A00A0A0E1103490E5000053E35E00001AA3
+S31A5000EF241380A0E364719FE5B0FEFFEB005050E21100001A5876
+S31A5000EF39119FE558419FE50120D6E70430D6E7030052E1460070
+S31A5000EF4E000A013043E2FF3003E2030052E10600001A003096C8
+S31A5000EF63E5000093E50C2093E50610A0E30FE0A0E102F0A0E1C6
+S31A5000EF78300000EA0750E0E3050075E33100000A040075E31FE7
+S31A5000EF8D00001A003096E5000093E50C2093E50610A0E30FE0B0
+S31A5000EFA2A0E102F0A0E1143496E5020053E31300001A00309622
+S31A5000EFB7E5281496E5000093E5000051E30C2093E51510A0033B
+S31A5000EFCC4310A0130FE0A0E102F0A0E1183496E5013083E2187C
+S31A5000EFE13486E582FEFFEB003096E50050A0E1000093E50C209C
+S31A5000EFF693E50610A0E30FE0A0E102F0A0E10130A0E32C348622
+S31A5000F00BE50F0000EA003097E5281497E5000093E5000051E3AC
+S31A5000F0200C2093E51510A0034310A0130FE0A0E102F0A0E11818
+S31A5000F0353497E5013083E2183487E50830A0E1018048E200000E
+S31A5000F04A53E3B6FFFFCA000055E3110000AA30201BE500508292
+S31A5000F05FE50030E0E3103486E5290000EA003096E5000093E589
+S31A5000F0740C2093E50610A0E30FE0A0E102F0A0E10430D6E7011F
+S31A5000F0893083E20430C6E7EEFFFFEA20360100080400000C045D
+S31A5000F09E000010449AE52C001BE504149AE5040059E10940A04A
+S31A5000F0B3B10420A0E191E8FFEB2C301BE534201BE5043083E0F2
+S31A5000F0C82C300BE510349AE5042082E034200BE5099064E00423
+S31A5000F0DD249AE5033064E010348AE5042082E004248AE50A00D4
+S31A5000F0F2A0E12C249AE5000059E30030A0D30130A0C30000529E
+S31A5000F107E30030A013000053E380FFFF1A34001BE5F0AF1BE932
+S31A5000F11C0DC0A0E100D82DE93C009FE53C109FE504B04CE238A2
+S31A5000F131E09FE508D04DE234C09FE524349CE500308DE51824D9
+S31A5000F1469CE504208DE528349CE51C249CE5000053E320349C83
+S31A5000F15BE50E10A00114EAFFEB030000EAE83C01502C3D0150A1
+S31A5000F170303D01502036010000A81BE90DC0A0E100D82DE9082F
+S31A5000F1850080E204B04CE2070050E300F19F97170000EAF0F198
+S31A5000F19A0050E8F10050E0F10050D8F10050D0F10050C8F1008D
+S31A5000F1AF50C0F10050B8F1005040009FE500A81BE93C009FE57B
+S31A5000F1C400A81BE938009FE500A81BE934009FE500A81BE93038
+S31A5000F1D9009FE500A81BE92C009FE500A81BE928009FE500A8EB
+S31A5000F1EE1BE924009FE500A81BE920009FE500A81BE9383D0198
+S31A5000F203504C3D01506C3D0150783D0150843D0150903D015046
+S31A5000F218A03D0150B43D0150CC3D01500DC0A0E130D82DE90451
+S31A5000F22DB04CE20040A0E1103F11EE2351A0E1015015E20C0040
+S31A5000F242000A0E02A0E3021A80E2202090E4000031E1FCFFFF86
+S31A5000F2571A0000A0E3160F07EE9A0F07EE101F11EE0C10C1E309
+S31A5000F26C101F01EE0010A0E3161F07EE94C09FE594E09FE594F8
+S31A5000F281309FE594209FE5FE1404E2003081E58C309FE5002048
+S31A5000F29681E5003084E5000091E50E3000E00E0053E101000037
+S31A5000F2AB0A01C05CE2F9FFFF1A6C309FE56C209FE5033000E09B
+S31A5000F2C0002081E5000053E30B00000A043094E40128A0E301B9
+S31A5000F2D50073E30500001A042042E2000052E3020000DA0430CC
+S31A5000F2EA94E4010073E3F9FFFF0A000052E30000A003000055BC
+S31A5000F2FFE30200000A101F11EE0F1081E3101F01EE30A81BE90A
+S31A5000F314404B4C00800080005000500020002000D000D0007EB9
+S31A5000F329007E00FF00FF000DC0A0E1F0D92DE904B04CE200608E
+S31A5000F33EA0E10150A0E10240A0E100C0A0E3103F11EE2371A089
+S31A5000F353E1017017E20C00000A0E02A0E3021A80E2202090E429
+S31A5000F368000031E1FCFFFF1A0000A0E3160F07EE9A0F07EE10C9
+S31A5000F37D1F11EE0C10C1E3101F01EE0010A0E3161F07EEAC3090
+S31A5000F3929FE5AC809FE5FE0406E2003080E5070000EAA0309FFD
+S31A5000F3A7E5003080E5042096E4045085E20E0052E190C09F15E3
+S31A5000F3BC1700001A044044E2000054E3140000DA80309FE58072
+S31A5000F3D1109FE5003080E5002095E5002086E500C090E502E06C
+S31A5000F3E6A0E108300CE0080053E10600000A4C209FE501105179
+S31A5000F3FBE20700000A00C090E502300CE0020053E1F9FFFF1A1A
+S31A5000F41044309FE503300CE0000053E3E0FFFF0A24309FE50084
+S31A5000F4253080E5000057E30200000A101F11EE0F1081E3101FC1
+S31A5000F43A01EE0C00A0E1F0A91BE95000500080008000FF00FFB0
+S31A5000F44F001099109910001000404B4C007E007E000DC0A0E1BF
+S31A5000F46400D82DE904B04CE200E0A0E1103F11EE23C1A0E10158
+S31A5000F479C01CE21000000A0E02A0E3021A80E2202090E400008B
+S31A5000F48E31E1FCFFFF1A160F07EE9A0F07EE0000A0E10000A014
+S31A5000F4A3E10000A0E10000A0E10000A0E10000A0E1101F11EEEB
+S31A5000F4B80C10C1E3101F01EE161F07EE50209FE550309FE505E4
+S31A5000F4CD12A0E3003081E5012042E2000052E3FCFFFFCA00204B
+S31A5000F4E2A0E3043091E4012082E20130CEE4330052E3FAFFFFCB
+S31A5000F4F79A24309FE5003081E500005CE30200000A101F11EE29
+S31A5000F50C0F1081E3101F01EE0000A0E300A81BE9400D030098DC
+S31A5000F521009800FF00FF000DC0A0E100D82DE9030040E204B0D4
+S31A5000F5364CE2040050E300F19F97080000EA58F5005058F50002
+S31A5000F54B5058F5005060F5005060F500500A00A0E300A81BE9E5
+S31A5000F5600200A0E300A81BE90500A0E300A81BE90DC0A0E1008D
+S31A5000F575D82DE90C309FE5002093E504B04CE2440092E500A8A0
+S31A5000F58A1BE9384401000DC0A0E100D82DE90010A0E10F00A019
+S31A5000F59FE304B04CE2BBE0FFEB00A81BE90DC0A0E110D82DE9BF
+S31A5000F5B404B04CE20040A0E11900A0E3ACE0FFEB0020A0E32470
+S31A5000F5C94EA0E10F0054E304F19F97560000EA18F6005024F6DF
+S31A5000F5DE00502CF6005038F6005040F6005048F6005054F60024
+S31A5000F5F35060F6005070F6005084F6005094F60050B4F6005063
+S31A5000F608D4F6005000F7005028F7005030F70050202FA0E1017F
+S31A5000F61D2002E2430000EA202FA0E10D0000EAA02EA0E101201A
+S31A5000F63202E23E0000EAA02EA0E1080000EAA02FA0E13A000096
+S31A5000F647EA0020E0E1A22FA0E1370000EA202EA0E1012002E246
+S31A5000F65C340000EA202EA0E1012022E2012002E2300000EA060C
+S31A5000F6712200E2020252E30020A0130120A0032B0000EA06221D
+S31A5000F68600E2022252E20120A013270000EA092200E20000529B
+S31A5000F69BE30030A0130130A003090252E30320A0110120A00392
+S31A5000F6B01F0000EA092200E2010252E30030A0130130A00302E8
+S31A5000F6C50152E30320A0110120A003170000EA093200E20000EE
+S31A5000F6DA53E309025313202FA0E1012022E20030A0130130A075
+S31A5000F6EF03000053E3012002120020A0030C0000EA093200E26C
+S31A5000F704010253E302015313202FA0E10030A0130130A0030071
+S31A5000F7190053E3012002020120A013020000EA0120A0E30000C6
+S31A5000F72E00EA0020A0E30200A0E110A81BE90DC0A0E130D82D21
+S31A5000F743E904B04CE20050A0E10F0005E248E0FFEB0040A0E1F6
+S31A5000F758100015E30200001A3E3D05E2C303A0E1020000EA0F7E
+S31A5000F76D0C05E22004A0E13FE0FFEB603005E2C332A0E10300A0
+S31A5000F78253E303F19F97130000EA9CF70050A4F70050ACF7004E
+S31A5000F79750B4F700501440A0E10D0000EA3440A0E10B0000EA06
+S31A5000F7AC5440A0E1090000EA000050E30600001AA440A0E11919
+S31A5000F7C100A0E32BE0FFEB020210E3023184E30340A0110000E0
+S31A5000F7D600EA7440A0E10400A0E130A81BE90DC0A0E1F0D82D05
+S31A5000F7EBE904B04CE20040A0E10150A0E1033305E2233DA0E157
+S31A5000F800030053E303F19F97B90000EA1CF800509CF9005050FE
+S31A5000F815FA0050ACF90050D8229FE5FF32C5E3020053E10200BA
+S31A5000F82A001A0F0005E210E0FFEBF0A81BE9047084E20F3A05C5
+S31A5000F83FE20F0A53E35200001AB0329FE5B0229FE5033005E0ED
+S31A5000F854020053E14D00000A0F0805E22008A0E103E0FFEB0048
+S31A5000F86960A0E1020415E30400001A050AA0E1200AA0E1AEFF4F
+S31A5000F87EFFEB0040A0E1030000EAFF4005E20F3C05E2A333A0B9
+S31A5000F893E17443A0E11E3605E2A33AA0E10F0053E303F19F97E9
+S31A5000F8A8390000EAECF80050F4F80050FCF8005004F900500CC5
+S31A5000F8BDF9005014F9005030F9005054F9005094F9005094F9BA
+S31A5000F8D2005094F9005094F9005078F9005080F9005088F900B6
+S31A5000F8E75090F90050047006E0270000EA047026E0250000EA99
+S31A5000F8FC067064E0230000EA047066E0210000EA047086E01F1C
+S31A5000F9110000EA1900A0E3D6DFFFEBA00EA0E1010000E2043020
+S31A5000F92686E0007083E0180000EA1900A0E3CFDFFFEBA00EA0B9
+S31A5000F93BE1010000E2063064E0000050E30370A0110170430216
+S31A5000F9500F0000EA1900A0E3C6DFFFEBA00EA0E1010000E20412
+S31A5000F9653066E0000050E30370A01101704302060000EA047050
+S31A5000F97A86E1040000EA0470A0E1020000EA0470C6E1000000D1
+S31A5000F98FEA0470E0E10700A0E1F0A81BE964219FE5023005E0AA
+S31A5000F9A4020053E10100001A040084E2F0A81BE9010615E3FBA7
+S31A5000F9B9FFFF0A0F3A05E20F0A53E3F8FFFF1A0F4805E22408E2
+S31A5000F9CEA0E1A8DFFFEB083080E20F0854E30060A0110360A0E0
+S31A5000F9E301010415E31600000A020415E30900001A020515E37B
+S31A5000F9F80300000A053AA0E1233AA0E1036086E00E0000EA0533
+S31A5000FA0D3AA0E1233AA0E1066063E00A0000EA020515E3040055
+S31A5000FA22000A050AA0E1200AA0E142FFFFEB006086E003000040
+S31A5000FA37EA050AA0E1200AA0E13DFFFFEB066060E0000096E5F8
+S31A5000FA4CF0A81BE9027415E21A00001A010615E3D2FFFF0A0237
+S31A5000FA610915E3D0FFFF0A0F4805E22408A0E180DFFFEB0830F5
+S31A5000FA7680E20F0854E30060A0110360A00107C0A0E10C20A04C
+S31A5000FA8BE178309FE5020505E2031005E05132A0E1010013E322
+S31A5000FAA001C08C12012082E20E0052E3F9FFFFDA000050E30CC4
+S31A5000FAB5618610E2FFFF1A046046E2E0FFFFEA0500A0E1B7FE66
+S31A5000FACAFFEB000050E3B5FFFF0AFF34C5E30311A0E10205156B
+S31A5000FADFE33F0381E30800801208008102000084E0F0A81BE90E
+S31A5000FAF40000A0E3F0A81BE910FF2F010000BF0F00000F01105B
+S31A5000FB09000002FFFF00000DC0A0E170D82DE90118A0E14128E2
+S31A5000FB1EA0E1211EA0E1041041E204B04CE20060A0E102308689
+S31A5000FB33E2015083E30B0051E301F19F973E0000EA74FB005080
+S31A5000FB4840FC005040FC005040FC005040FC005040FC00504056
+S31A5000FB5DFC005040FC005040FC0050A0FB0050D4FB00500CFCC7
+S31A5000FB7200500228A0E1C8309FE52208A0E1033002E047045353
+S31A5000FB87E32C00001A780000E2A001A0E137DFFFEB0050A0E19D
+S31A5000FB9C270000EA0238A0E10F0403E20002A0E12348A0E17D4E
+S31A5000FBB1FEFFEB000050E32000000AFF3004E28300A0E180000B
+S31A5000FBC614E3800BE011A00BE011090000EA0238A0E1020313FF
+S31A5000FBDBE32318A0E11600001A813AA0E1A33AA0E18300A0E152
+S31A5000FBF0010B11E3800AE011A00AE011043080E2033086E00164
+S31A5000FC055083E30C0000EA3E1BE0E30228A0E1013802E02302E1
+S31A5000FC1AA0E1010312E38004E011A004E011B230D6E10130032E
+S31A5000FC2FE0830080E1042080E2022086E0015082E30500A0E15C
+S31A5000FC4470A81BE9000087FF0DC0A0E130D82DE90F00A0E304B1
+S31A5000FC59B04CE205DFFFEB0040A0E11900A0E302DFFFEB20004C
+S31A5000FC6E10E30600000A0400A0E1B010D0E1A3FFFFEB88309F4F
+S31A5000FC83E5000083E580109FE50F0000EA005094E50500A0E16D
+S31A5000FC9843FEFFEB000050E30600000A0400A0E10510A0E15C1C
+S31A5000FCAD409FE5CBFEFFEB000084E550109FE5030000EA4820D3
+S31A5000FCC29FE5043084E20210A0E1003082E5004091E5010014C4
+S31A5000FCD7E30600000A30309FE50120C4E3B000D2E128109FE504
+S31A5000FCECB000C3E1B010C2E130A81BE91C309FE5002094E51899
+S31A5000FD01109FE5002083E5001084E530A81BE994860000543A7E
+S31A5000FD160100BEBEFFFF503A0100FEDEFFE70DC0A0E100D82D67
+S31A5000FD2BE944309FE50300A0E1001093E504B04CE2000051E36A
+S31A5000FD400B00000A010011E30400000A28209FE5B020D2E101F0
+S31A5000FD5530C1E3B020C3E1020000EA18309FE5002093E500208B
+S31A5000FD6A81E50030A0E3003080E500A81BE994860000543A012B
+S31A5000FD7F00503A01000DC0A0E100D82DE904B04CE200A81BE9C4
+S31A5000FD940DC0A0E100D82DE904B04CE200A81BE90DC0A0E100EC
+S31A5000FDA9D82DE90F00A0E304B04CE2AFDEFFEB0C309FE5030053
+S31A5000FDBE50E10000A0130100A00300A81BE97C4900500DC0A024
+S31A5000FDD3E110D82DE90F00A0E304B04CE2A4DEFFEB0040A0E145
+S31A5000FDE81900A0E3A1DEFFEB200010E302408412044084020FE7
+S31A5000FDFD00A0E30410A0E1A3DEFFEB10A81BE90DC0A0E100D836
+S31A5000FE122DE96C309FE504B04CE200C093E500005CE3010000F5
+S31A5000FE270A0000A0E300A81BE954209FE5001092E50130C1E3E3
+S31A5000FE3C030050E10E00001A010011E30200000AB430D2E1B0B7
+S31A5000FE5130C0E1010000EA043092E5003080E50030A0E3003067
+S31A5000FE6682E50300A0E3D2E0FFEB0300A0E3A0E0FFEB0100A017
+S31A5000FE7BE300A81BE90C00A0E100A81BE998860000583A0100A3
+S31A5000FE900DC0A0E130D82DE984209FE50030A0E380509FE50468
+S31A5000FEA5B04CE2001095E50040A0E1003082E5030051E10100FC
+S31A5000FEBA000A0100A0E1D1FFFFEB003095E5000053E3130000A4
+S31A5000FECF1A1900A0E367DEFFEB200010E30600000A013084E328
+S31A5000FEE4003085E53C209FE5B030D4E1B430C5E1B020C4E104A1
+S31A5000FEF90000EA004085E528209FE5003094E5043085E50020D7
+S31A5000FF0E84E50300A0E3A8E0FFEB0300A0E376E0FFEB30A81B6E
+S31A5000FF23E998860000583A0100BEBEFFFFFEDEFFE70DC0A0E14F
+S31A5000FF3800D82DE910309FE5000093E504B04CE2000050E2011F
+S31A5000FF4D00A01300A81BE9583A01000DC0A0E100D82DE900100B
+S31A5000FF6290E50000A0E30C0081E51C30A0E31C3081E50820A081
+S31A5000FF77E3002081E504B04CE2040081E5173043E2083081E560
+S31A5000FF8C052042E20C2081E500A81BE90DC0A0E100D82DE90047
+S31A5000FFA10090E5FF1001E2203090E504B04CE2040013E30200EB
+S31A5000FFB6001A203090E5040013E3FCFFFF0A141080E500A81BB7
+S31A5000FFCBE90DC0A0E100D82DE9000090E5203090E504B04CE28A
+S31A5000FFE0023013E20500000A143090E50030C1E50420A0E31C2E
+S31A5000FFF52080E50100A0E300A81BE90300A0E100A81BE90DC0EF
+S31A5001000AA0E130D82DE904B04CE204D04DE20050A0E115404B95
+S31A5001001FE20500A0E10410A0E1E7FFFFEB000050E3FAFFFF0A73
+S31A5001003415005BE530A81BE90DC0A0E170D82DE904B04CE201A0
+S31A5001004960A0E10240A0E10430A0E1014044E2000053E3005005
+S31A5001005EA0E10600000A0110D6E40500A0E1C9FFFFEB0430A0CE
+S31A50010073E1014044E2000053E3F8FFFF1A70A81BE90DC0A0E129
+S31A5001008870D82DE904B04CE20160A0E10240A0E10430A0E10171
+S31A5001009D4044E2000053E30050A0E10600000A0500A0E1D4FF21
+S31A500100B2FFEB0430A0E1014044E20100C6E4000053E3F8FFFF05
+S31A500100C71A70A81BE90DC0A0E1F0D82DE904B04CE20050A0E1B8
+S31A500100DC043095E50160A0E13C709FE5033183E08340A0E1031A
+S31A500100F10000EA483097E56400A0E30FE0A0E103F0A0E10500F5
+S31A50010106A0E10610A0E1AEFFFFEB000050E30200001A0140440A
+S31A5001011BE2010074E3F3FFFF1AF0A81BE9500000000DC0A0E1F9
+S31A500101300E002DE910D82DE910B04CE204309BE50040A0E304D8
+S31A500101453043E2030053E303F19F971E0000EA8C01015064014B
+S31A5001015A0150B8010150C401015054209FE50130A0E30030826A
+S31A5001016FE5001090E50C3091E5083083E30C3081E5080090E54B
+S31A500101847DD2FFEB100000EA2C209FE5004092E50030A0E300A2
+S31A500101993082E5001090E50C3091E50830C3E30C3081E50800A4
+S31A500101AE90E566D2FFEB050000EA084090E5030000EAB486007B
+S31A500101C30008309BE5044090E5043080E50400A0E110A81BE985
+S31A500101D80DC0A0E170D82DE904B04CE204D04DE200C090E520D5
+S31A500101ED409CE514309CE519304BE50420A0E31C208CE5005003
+S31A50010202A0E3080090E50160A0E1ABE0FFEB005086E502001468
+S31A50010217E30600000A19004BE20110A0E3D7E1FFEB050050E1D6
+S31A5001022C0130A013003086150150A0E30500A0E170A81BE90D34
+S31A50010241C0A0E170D82DE984509FE50000E0E3343095E504B005
+S31A500102564CE20FE0A0E103F0A0E170409FE50060A0E10400A071
+S31A5001026BE139FFFFEB343095E50000A0E30FE0A0E103F0A0E1DF
+S31A50010280141095E550309FE550209FE5004081E5043081E548F4
+S31A50010295309FE5082081E50C3081E540209FE540309FE5102011
+S31A500102AA81E5143081E538209FE538309FE5182081E51C3081A5
+S31A500102BFE5342095E50600A0E10FE0A0E102F0A0E170A81BE99A
+S31A500102D4500000009C8600003C0001508400015098FF005008FB
+S31A500102E90001502C010150D8010150CC0001500DC0A0E100D86D
+S31A500102FE2DE91C209FE5003092E504B04CE2000053E3020000FD
+S31A500103131A0130A0E3003082E5C7FFFFEB00A81BE9B88600007F
+S31A500103280DC0A0E170D82DE90118A0E16C309FE504B04CE20021
+S31A5001033D40A0E10250A0E14108A0E100C093E50360A0E10000DA
+S31A500103525CE30900000A0038A0E12328A0E1B430DCE102005372
+S31A50010367E10100001A0000E0E370A81BE900C09CE500005CE3CF
+S31A5001037CF7FFFF1A0008A0E12008A0E1CDE9FFEBB400C4E108D3
+S31A500103915084E5003096E5003084E50000A0E3004086E570A8BD
+S31A500103A61BE9603A01000DC0A0E1F0D92DE90008A0E14008A0AE
+S31A500103BBE15C309FE504B04CE20060A0E3005093E50380A0E154
+S31A500103D0060055E11000000A0078A0E1B440D5E12708A0E1B662
+S31A500103E5E9FFEB000054E10600001A000056E30200000A00300F
+S31A500103FA95E5003086E5010000EA003095E5003088E50560A04B
+S31A5001040FE1005095E5000055E3EFFFFF1AF0A91BE9603A01005F
+S31A500104240DC0A0E1F0D92DE9BC309FE504D04DE20070A0E108D3
+S31A500104396097E504B04CE2B620D6E10180A0E1045097E5030037
+S31A5001044E52E10030A003B630C601B430D6E1B230C5E1B400D6E2
+S31A50010463E196E9FFEB0040A0E10500A0E119E9FFEB0020A0E10F
+S31A500104780600A0E10410A0E1F2E8FFEB0008B0E11D00001A6008
+S31A5001048D309FE5005093E5000055E31900000AB420D5E1B230C0
+S31A500104A2D6E1030052E11200001AB400D6E183E9FFEB0840408C
+S31A500104B7E2B000D6E180E9FFEB0038A0E10500A0E1081086E27E
+S31A500104CC2338A0E100308DE50420A0E10830A0E10FE0A0E10870
+S31A500104E1F095E50700A0E1CAE8FFEB060000EAFFFF0000603A99
+S31A500104F60100005095E5000055E3E5FFFF1A0700A0E1C2E8FF69
+S31A5001050BEBF0A91BE90DC0A0E1F0DF2DE90338A0E104B04CE22B
+S31A500105200160A0E100A0A0E10290A0E1E8C09FE54378A0E1F4FD
+S31A5001053550DBE10C0056E13500008AD8009FE593E8FFEB00800B
+S31A5001054A50E23100000A083086E2BC30C8E1084098E50508A031
+S31A5001055FE1045098E52008A0E155E9FFEBB000C4E10708A0E1C8
+S31A500105742008A0E151E9FFEBB200C4E1BC00D8E14EE9FFEB0061
+S31A5001058930A0E30A10A0E1B400C4E10620A0E1B630C4E1080025
+S31A5001059E84E257E3FFEB0C0085E274109FE50420A0E353E3FF10
+S31A500105B3EB100085E20910A0E10420A0E34FE3FFEB1170A0E319
+S31A500105C80970C5E5B430D4E1B230C5E1BC60D8E10500A0E1BE6A
+S31A500105DDE8FFEB0020A0E10400A0E10610A0E197E8FFEB0008B2
+S31A500105F2A0E12008A0E131E9FFEB0710A0E1B600C4E10920A0B3
+S31A50010607E10800A0E1DCE7FFEB0800A0E17FE8FFEBF0AF1BE9F3
+S31A5001061CBE050000EA050000588400000DC0A0E1F0D92DE904B3
+S31A50010631B04CE210D04DE20080A0E10240A0E10400A0E10170B6
+S31A50010646A0E12C604BE20610A0E10350A0E17FEDFFEB000050FD
+S31A5001065BE30F0000BAB400D4E116E9FFEB0048A0E1B400D5E102
+S31A500106702448A0E112E9FFEB0038A0E10800A0E10710A0E1234F
+S31A5001068538A0E100308DE50620A0E10430A0E19DFFFFEB0000CC
+S31A5001069AA0E3030000EA0C009FE50C109FE5C2E4FFEB0000E0E4
+S31A500106AFE3010000EADC3D0150003E0150F0A91BE90DC0A0E12D
+S31A500106C4F0D92DE964009FE50240A0E1004080E55C809FE50437
+S31A500106D9B04CE2000098E50370A0E1F450DBE14C609FE504E34F
+S31A500106EEFFEB003096E5000053E30900000A0508A0E12008A06C
+S31A50010703E1EEE8FFEB001096E5B400C1E1003097E5003081E5C6
+S31A500107180020A0E3002088E5F0A91BE914009FE50410A0E1A1DA
+S31A5001072DE4FFEBF0A91BE9683A0100643A01006C3A0100103EBE
+S31A5001074201500DC0A0E1F0DF2DE904B04CE20CD04DE20050A0EA
+S31A50010757E1B400D3E10160A0E104909BE50270A0E1D5E8FFEB5D
+S31A5001076C0048A0E134004BE214209FE52418A0E1E9FEFFEB00B1
+S31A500107810050E3020000AA0000E0E31F0000EAC00601507810C2
+S31A500107969FE578009FE578309FE5041099E8005081E50480A0DC
+S31A500107ABE1006080E501A0A0E1007083E50060E0E30070A0E12E
+S31A500107C0821262E054009FE5012182E0901C83E02333A0E18233
+S31A500107D55183E0EDE6FFEB0040A0E1EBE6FFEB000064E0050082
+S31A500107EA50E10400002A4DE8FFEB00309AE5000053E3F7FFFF4B
+S31A500107FF1A006097E52808A0E1E7FEFFEB0600A0E1030000EAA4
+S31A50010814643A0100683A01006C3A0100D34D6210F0AF1BE90D4D
+S31A50010829C0A0E170D82DE9AC309FE504B04CE20160A0E1004060
+S31A5001083E93E50350A0E1000054E31800001A50EBFFEB90009F45
+S31A50010853E5043090E5050053E30500001AB831D0E1000053E381
+S31A500108680000001A78EBFFEB0400A0E170A81BE9000053E304E2
+S31A5001087D00001A670100EB0A30A0E30030C6E50100A0E370A86E
+S31A500108921BE950409FE58020A0E30410A0E18AEBFFEB44309FB8
+S31A500108A7E5000085E5004083E5000095E5000050E30800000A2F
+S31A500108BC2CC09FE500109CE50130D1E40030C6E5002095E50173
+S31A500108D100A0E300108CE5012042E2002085E570A81BE9C08686
+S31A500108E600007C3A0100D0400100504101000DC0A0E170D82D89
+S31A500108FBE904B04CE204D04DE20040A0E10150A0E1C5FFFFEB82
+S31A50010910000050E32A00000A0030D5E5FF0053E32700001A199B
+S31A50010925604BE20400A0E119104BE2BCFFFFEB000050E3FAFF2D
+S31A5001093AFF0A19305BE5F40053E30D00001A0400A0E10330A016
+S31A5001094FE30030C5E5FF10A0E3670000EB0400A0E1FC10A0E387
+S31A50010964640000EB0400A0E10610A0E3610000EB2E0000EB0154
+S31A5001097900A0E3100000EAFD0053E30E00001A0400A0E106109F
+S31A5001098EA0E1A4FFFFEB000050E3FAFFFF0A0400A0E1FF10A086
+S31A500109A3E3540000EB0400A0E1FC10A0E3510000EB19105BE50D
+S31A500109B80400A0E14E0000EB0000A0E370A81BE90DC0A0E170B8
+S31A500109CDD82DE904B04CE204D04DE26440A0E30060A0E119507A
+S31A500109E24BE2090000EA014054E20200001A0F0000EB6440A0B8
+S31A500109F7E3040000EA28309FE5482093E56400A0E30FE0A0E1B0
+S31A50010A0C02F0A0E10600A0E10510A0E1B5FFFFEB000050E3F02D
+S31A50010A21FFFF0A19005BE5000000EA5000000070A81BE90DC0E5
+S31A50010A36A0E1F0DD2DE9A4709FE504B04CE20760A0E19C509F03
+S31A50010A4BE59C409FE59CA09FE59C809FE50A0000EA0400A0E121
+S31A50010A60002095E50610A0E154EBFFEB000050E3030000DA00C0
+S31A50010A753095E5006086E0033060E0003085E5C2EAFFEB0030D2
+S31A50010A8A95E5000053E30800000A043094E5050053E301000055
+S31A50010A9F1A0400A0E1EAEAFFEB043094E5000053E3E9FFFF1AAA
+S31A50010AB4DA0000EB00708AE50060A0E3006085E50400A0E1D32D
+S31A50010AC9EAFFEB443098E5060053E10200000A446088E506009F
+S31A50010ADEA0E1B7DFFFEBF0AD1BE954410100C48600007C3A0173
+S31A50010AF30054420100500000000DC0A0E110D82DE9A8209FE518
+S31A50010B08A8409FE5003092E5FF1001E20110C3E4240051E3006C
+S31A50010B1D3082E504B04CE20130A00300308405002094E52300AA
+S31A50010B3251E30030A0130130A003000052E30030A00300005311
+S31A50010B47E30500000A68209FE50130A0E3003082E560109FE505
+S31A50010B5C013043E2003081E558209FE5003092E5013083E20008
+S31A50010B713082E5010C53E30900000A38309FE5002093E50000A7
+S31A50010B8652E30800000A2C209FE5003092E5013083E2003082FD
+S31A50010B9BE5030053E30200001AA2FFFFEB0030A0E3003084E5DD
+S31A50010BB010A81BE954420100703A0100743A0100783A0100C4B5
+S31A50010BC58600000DC0A0E110D82DE904B04CE2790000EB00406C
+S31A50010BDAA0E114009FE514109FE5472FA0E372E3FFEB0400A012
+S31A50010BEFE1820000EB10A81BE9FC3E0150043F01500DC0A0E123
+S31A50010C0410D82DE904B04CE26B0000EB0040A0E114009FE514E1
+S31A50010C19109FE514209FE564E3FFEB0400A0E1740000EB10A856
+S31A50010C2E1BE9FC3E0150143F01502E0100000DC0A0E1F0D82DB5
+S31A50010C43E904B04CE20060A0E10150A0E177FFFFEB44209FE57F
+S31A50010C58003092E540709FE5033183E08340A0E1030000EA4845
+S31A50010C6D3097E56400A0E30FE0A0E103F0A0E10600A0E1051008
+S31A50010C82A0E11AFFFFEB000050E30200001A014044E201007457
+S31A50010C97E3F3FFFF1AF0A81BE9BC860000500000000DC0A0E187
+S31A50010CAC0E002DE930D82DE910B04CE204309BE50050A0E30421
+S31A50010CC13043E2040053E303F19F97240000EA140D0150E40C9E
+S31A50010CD60150340D0150400D0150600D015068409FE568309F10
+S31A50010CEBE5001094E50120A0E3002083E5000051E30100001AB4
+S31A50010D0008F2FFEB000084E5000094E59BCFFFEB130000EA3C34
+S31A50010D15309FE534209FE5005093E5000092E50010A0E3001004
+S31A50010D2A83E587CFFFEB0B0000EA18309FE5005093E508000024
+S31A50010D3FEA14209FE508309BE5005092E5003082E5030000EAA3
+S31A50010D54C8860000CC860000BC86000033FFFFEB0500A0E1307F
+S31A50010D69A81BE90DC0A0E130D82DE904B04CE204D04DE20040E1
+S31A50010D7EA0E10200A0E10150A0E1CCDDFFEB0400A0E10030A04B
+S31A50010D93E3003085E515104BE2D4FEFFEB000050E30300000A29
+S31A50010DA815305BE5030053E30130A003003085050100A0E330DF
+S31A50010DBDA81BE90DC0A0E130D82DE92C409FE50000E0E334309B
+S31A50010DD294E504B04CE20FE0A0E103F0A0E10050A0E1343094AD
+S31A50010DE7E50000A0E30FE0A0E103F0A0E10500A0E130A81BE9F2
+S31A50010DFC500000000DC0A0E100D82DE910309FE5342093E5046B
+S31A50010E11B04CE20FE0A0E102F0A0E100A81BE9500000000DC0EB
+S31A50010E26A0E110D82DE944109FE544209FE50030A0E3003081BD
+S31A50010E3BE53C409FE5000092E5343094E504B04CE20FE0A0E1C0
+S31A50010E5003F0A0E128209FE5303094E5000092E50FE0A0E10333
+S31A50010E65F0A0E118209FE50130A0E3003082E510A81BE9F044B9
+S31A50010E7A0100C840010050000000CC4001008C4501000DC0A066
+S31A50010E8FE170D82DE970309FE570209FE50150A0E3005083E5F4
+S31A50010EA404B04CE264409FE50030A0E3003082E50060E0E33437
+S31A50010EB92094E50600A0E10FE0A0E102F0A0E148309FE50000CE
+S31A50010ECE83E5342094E50500A0E10FE0A0E102F0A0E130109446
+S31A50010EE3E50600A0E10FE0A0E101F0A0E124309FE5000083E515
+S31A50010EF8302094E50500A0E10FE0A0E102F0A0E170A81BE9F050
+S31A50010F0D4401008C45010050000000C8400100CC4001000DC02E
+S31A50010F22A0E170D82DE9AC609FE5003096E504B04CE200005314
+S31A50010F37E31E00001A9C409FE5343094E50000E0E30FE0A0E1C3
+S31A50010F4C03F0A0E10050A0E1343094E50100A0E30FE0A0E10320
+S31A50010F61F0A0E1141094E574309FE574209FE5043081E570309C
+S31A50010F769FE5082081E50C3081E568209FE568309FE510208182
+S31A50010F8BE5143081E560209FE560309FE5182081E51C3081E503
+S31A50010FA0342094E50500A0E10FE0A0E102F0A0E10130A0E300FB
+S31A50010FB53086E540309FE540409FE5B010D3E10400A0E177E9E4
+S31A50010FCAFFEB34209FE5043094E5003082E570A81BE9D0860043
+S31A50010FDF0050000000C80B0150000C0150FC0A0150C80901505C
+S31A50010FF4A80C01506C0D01503C0C0150804501007C3A0100C4E8
+S31A500110094001000DC0A0E130D82DE904B04CE25DE9FFEB783014
+S31A5001101E9FE578109FE5002093E50350A0E1040091E50140A00F
+S31A50011033E1000052E11400000A040050E30E00001A90FFFFEB47
+S31A5001104854309FE554009FE5000083E550109FE50130A0E3005C
+S31A5001105D3081E548109FE548309FE50D20A0E30020C0E5003014
+S31A5001107281E53C209FE50030A0E3003082E5043094E500005382
+S31A50011087E30000001AA3FFFFEB043094E5003085E530A81BE951
+S31A5001109CC44001007C3A010050410100D0400100C086000054EF
+S31A500110B142010054410100C48600000DC0A0E1F0DF2DE950012C
+S31A500110C69FE550119FE550319FE550519FE550419FE501A0A0D5
+S31A500110DBE300A085E50080A0E3008081E504B04CE2003084E558
+S31A500110F00A20A0E1E0C8FFEB0410A0E12C019FE50220A0E3DC90
+S31A50011105C8FFEB0510A0E120019FE50A20A0E11C719FE5D7C836
+S31A5001111AFFEB0710A0E114019FE50520A0E310619FE5D2C8FF18
+S31A5001112FEB0610A0E108019FE50520A0E304419FE5CDC8FFEB55
+S31A50011144008084E5A4EFFFEB45E5FFEBF4809FE50590A0E1F0C7
+S31A50011159309FE50450A0E1030058E10360A0E10900000A0A4024
+S31A5001116EA0E10800A0E10FE0A0E104F098E5000050E30C408823
+S31A50011183150C008805108088E2060058E1F6FFFF1AB8309FE59F
+S31A50011198002093E5000052E30200001AAC009FE502E2FFEBF014
+S31A500111ADAF1BE9003099E5000053E30600000A98009FE54300D0
+S31A500111C200EB000050E30200000A8C009FE5F8E1FFEB010000C3
+S31A500111D7EA0130A0E3003085E5003095E5000053E30A00000A80
+S31A500111EC0700A0E15EECFFEB0010A0E164009FE5EDE1FFEB3872
+S31A50011201009FE559ECFFEB0010A0E154009FE5E8E1FFEB41FF72
+S31A50011216FFEBF0AF1BE9783E0150E844010028230000FC44011F
+S31A5001122B0080450100503E0150A83E015058840000C43E01504C
+S31A50011240B4450100EC3E0150CC460100EC880000FC880000ECD6
+S31A50011255440100203F0150A0450100403F01506C3F0150743FD3
+S31A5001126A01500DC0A0E110D82DE94C309FE504B04CE200009306
+S31A5001127FE50140A0E1000050E30000000A1CE0FFEB0030D4E550
+S31A50011294020053E30900001A1C0084E224109FE50620A0E3515F
+S31A500112A9E2FFEB000050E30300001A101084E210009FE504207F
+S31A500112BEA0E30FE0FFEB10A81BE958420100E044010058840010
+S31A500112D3000DC0A0E1F0DF2DE90010A0E34B2FA0E36C319FE5CB
+S31A500112E804B04CE252DF4DE2000083E5165E4BE20500A0E13495
+S31A500112FDE0FFEB54419FE554119FE50030A0E30030C4E50130FC
+S31A50011312C4E50230C4E50330C4E50100A0E33C219FE528304B07
+S31A50011327E20200C3E734319FE528204BE20300C2E72CC19FE551
+S31A5001133C0620A0E328304BE20C20C3E720319FE55C310BE5519E
+S31A500113510F4BE2EADFFFEBFFC0A0E3053DE0E328104BE203C0D2
+S31A50011366C1E74F2FE0E30130A0E102C0C3E7F8309FE503C0C1E4
+S31A5001137BE7F4109FE528304BE201C0C3E7EC309FE528104BE2A2
+S31A5001139003C0C1E7E4109FE528304BE201C0C3E70270A0E3D851
+S31A500113A5309FE528104BE203C0C1E70590A0E1CC109FE528308A
+S31A500113BA4BE201C0C3E70480A0E1C0309FE528104BE203C0C1CD
+S31A500113CFE70850A0E1013083E203C0C1E734004BE2A8209FE544
+S31A500113E44410A0E3CEFBFFEB5BAF4BE2E7E3FFEB0060A0E1093E
+S31A500113F900A0E14B1FA0E34430A0E300308DE50A20A0E10130A5
+S31A5001140E43E23EFCFFEB44E5FFEB0030D5E5000053E3080000EE
+S31A500114231A0130D8E5000053E30500001A0230D5E5000053E3DE
+S31A500114380200001A0340D5E5000054E31200000A4400A0E3D63F
+S31A5001144DFBFFEB0000A0E31B0000EA5842010058840000E0442B
+S31A500114620100C8FEFFFFC9FEFFFFCAFEFFFF55553412BCFEFF25
+S31A50011477FFBDFEFFFFBEFEFFFFC0FEFFFFC1FEFFFFC2FEFFFF60
+S31A5001148CC4FEFFFF6C120150BEE3FFEB000066E07D0E50E3DBFB
+S31A500114A1FFFF3A0730A0E1017047E2000053E3CEFFFFCA440045
+S31A500114B6A0E3BBFBFFEB08309FE50000E0E3004083E500000080
+S31A500114CBEAE8440100F0AF1BE90DC0A0E1F0DF2DE904B04CE2E6
+S31A500114E014D04DE20270A0E101A0A0E12C000BE5006053E2BF08
+S31A500114F500001A0A0057E14200009A010857E30300002AFF00E4
+S31A5001150A57E30800A0830000A093020000EA010457E31800A0FA
+S31A5001151F231000A03340139FE53220A0E10230D1E7003083E033
+S31A50011534200073E20600000A1770A0E12C101BE5203060E231BF
+S31A5001154933A0E11AA083E11110A0E12C100BE50798A0E12998B5
+S31A5001155EA0E10A00A0E12788A0E10810A0E1710200EB0040A00E
+S31A50011573E10A00A0E10810A0E1110100EB0060A0E1990602E0A8
+S31A500115882C101BE52138A0E1044883E1020054E10500002A01CA
+S31A5001159D6046E2074094E00200002A020054E10160463207401C
+S31A500115B28430044062E00400A0E10810A0E15C0200EB0050A03C
+S31A500115C7E10400A0E10810A0E1FC0000EB990002E02C101BE51B
+S31A500115DC0138A0E12338A0E1055883E1020055E10400002A01E5
+S31A500115F10040E2075095E00100002A020055E10100403206C8FC
+S31A5001160680E1E60000EA000057E30300001A0100A0E30210A0BA
+S31A5001161BE1E90000EB0070A0E1010857E30720A0E10300002AA5
+S31A50011630FF0057E30800A0830000A093020000EA010457E31874
+S31A5001164500A0231000A03318129FE53220A0E10230D1E70030F8
+S31A5001165A83E0200073E20130A00330300B050AA06700340000C3
+S31A5001166F0A202060E21770A0E12C101BE53A52A0E13132A0E14E
+S31A500116841110A0E12C100BE51AA083E12788A0E10798A0E12995
+S31A5001169998A0E10500A0E10810A0E1230200EB0040A0E10500D7
+S31A500116AEA0E10810A0E1C30000EB0060A0E1990602E02A38A0A4
+S31A500116C3E1044883E1020054E10500002A016046E2074094E080
+S31A500116D80200002A020054E10160463207408430044062E004E5
+S31A500116ED00A0E10810A0E10F0200EB0050A0E10400A0E108100D
+S31A50011702A0E1AF0000EB990002E00A38A0E12338A0E105588366
+S31A50011717E1020055E10500002A010040E2075095E00200002A03
+S31A5001172C020055E10100403207508530066880E105A062E030B4
+S31A50011741600BE50798A0E12998A0E10A00A0E12788A0E10810B7
+S31A50011756A0E1F60100EB0040A0E10A00A0E10810A0E196000049
+S31A5001176BEB0060A0E1990602E02C101BE52138A0E1044883E1FF
+S31A50011780020054E10500002A016046E2074094E00200002A0225
+S31A500117950054E10160463207408430044062E00400A0E10810BC
+S31A500117AAA0E1E10100EB0050A0E10400A0E10810A0E181000015
+S31A500117BFEB990002E02C101BE50138A0E12338A0E1055883E1C5
+S31A500117D4020055E10400002A010040E2075095E00100002A0227
+S31A500117E90055E10100403206C880E16D0000EA0A0056E1002004
+S31A500117FEA08330200B8502C0A0816800008A010856E30620A09F
+S31A50011813E10300002AFF0056E30800A0830000A093020000EAD9
+S31A50011828010456E31800A0231000A03330109FE53220A0E102BF
+S31A5001183D30D1E7003083E0200073E20800001A2C301BE50600CB
+S31A500118525AE10700539101C0A0E300C0A0310010A0E330100B51
+S31A50011867E5500000EA8C3F0150202060E23732A0E1166083E194
+S31A5001187C1770A0E12C101BE53A52A0E13132A0E11110A0E12CFD
+S31A50011891100BE51AA083E12698A0E10628A0E12228A0E105000F
+S31A500118A6A0E134200BE50910A0E1A00100EB0040A0E10500A085
+S31A500118BBE10910A0E1400000EB34201BE50080A0E1980202E04A
+S31A500118D02A38A0E1044883E1020054E10500002A018048E20602
+S31A500118E54094E00200002A020054E10180483206408430044047
+S31A500118FA62E00400A0E10910A0E18B0100EB0050A0E10400A035
+S31A5001190FE10910A0E12B0000EB34201BE5900202E00A38A0E150
+S31A500119242338A0E1055883E1020055E10500002A010040E2062A
+S31A500119395095E00200002A020055E1010040320650853008C8CB
+S31A5001194E80E105A062E02C08A0E12738A0E10018CCE10328C799
+S31A50011963E191020EE0900202E0930101E0900303E0011092E0D4
+S31A500119780138832201E89EE02138A3E00A0053E10500008A2CE9
+S31A5001198D101BE50030A0130130A003000053E301005E11000081
+S31A500119A2009A01C04CE20020A0E330200BE53CC00BE530301B06
+S31A500119B7E540204BE238300BE5030092E9F0AF1BE9000051E3A5
+S31A500119CC1F00000A0130A0E30020A0E3010050E11900003A01A9
+S31A500119E10251E3000051310112A0310332A031FAFFFF3A0201C3
+S31A500119F651E3000051318110A0318330A031FAFFFF3A01005066
+S31A50011A0BE10100402003208221A10050E1A1004020A32082212E
+S31A50011A20210150E12101402023218221A10150E1A1014020A326
+S31A50011A35218221000050E32332B0112112A011EFFFFF1A02004B
+S31A50011A4AA0E10EF0A0E104E02DE5640100EB0000A0E30080BD2A
+S31A50011A5FE80DC0A0E1F0DF2DE904B04CE224D04DE20260A0E118
+S31A50011A740180A0E138000BE530C04BE234C00BE5007053E2979F
+S31A50011A8900001A080056E11800009A010856E30300002AFF0078
+S31A50011A9E56E30800A0830000A093020000EA010456E31800A063
+S31A50011AB3231000A033D4129FE53220A0E10230D1E7003083E007
+S31A50011AC8203073E23C300BE55200000A1663A0E138101BE520F3
+S31A50011ADD3063E23C201BE53133A0E1188283E11112A0E13810FD
+S31A50011AF20BE5490000EA000056E30300001A0100A0E30210A0D9
+S31A50011B07E1AEFFFFEB0060A0E1010856E30620A0E10300002A03
+S31A50011B1CFF0056E30800A0830000A093020000EA010456E31885
+S31A50011B3100A0231000A03354129FE53220A0E10230D1E70030CB
+S31A50011B4683E0203073E23C300BE5088066003100000A3C201B2F
+S31A50011B5BE53C304BE2081093E83C101BE5202062E21663A0E143
+S31A50011B703852A0E13C32A0E140200BE51CC1A0E138C00BE51861
+S31A50011B858183E12678A0E106A8A0E12AA8A0E10500A0E10710D1
+S31A50011B9AA0E1E50000EB0040A0E10500A0E10710A0E185FFFF2C
+S31A50011BAFEB9A0002E02838A0E1044883E1020054E10300002A6E
+S31A50011BC4064094E00100002A020054E106408430044062E00415
+S31A50011BD900A0E10710A0E1D40000EB0050A0E10400A0E107105B
+S31A50011BEEA0E174FFFFEB9A0002E00838A0E12338A0E1055883B4
+S31A50011C03E1020055E10300002A065095E00100002A020055E101
+S31A50011C1806508530058062E006A8A0E12AA8A0E10800A0E1265D
+S31A50011C2D78A0E10710A0E1BF0000EB0040A0E10800A0E10710AF
+S31A50011C42A0E15FFFFFEB9A0002E038C01BE52C38A0E104488345
+S31A50011C57E1020054E10300002A064094E00100002A020054E1C0
+S31A50011C6C06408430044062E00400A0E10710A0E1AD0000EB00D7
+S31A50011C8150A0E10400A0E10710A0E14DFFFFEB9A0002E038100F
+S31A50011C961BE50138A0E12338A0E1055883E1020055E103000050
+S31A50011CAB2A065095E00100002A020055E106508530055062E0D3
+S31A50011CC038500BE534201BE5000052E39600000A38301BE53C73
+S31A50011CD5C01BE5333CA0E148300BE50010A0E344100BE58B0029
+S31A50011CEA00EA080057E10500009A48000BE544800BE540204B2E
+S31A50011CFFE20C0012E930C04BE2860000EA010857E30720A0E118
+S31A50011D140300002AFF0057E30800A0830000A093020000EA01B2
+S31A50011D290457E31800A0231000A03358109FE53220A0E1023061
+S31A50011D3ED1E7003083E0203073E23C300BE51100001A38301B3F
+S31A50011D53E5070058E1060053910200003A06C053E00780C8E0B1
+S31A50011D6838C00BE534101BE5000051E36C00000A38201BE54899
+S31A50011D7D200BE544800BE540204BE20C0012E901C0A0E16400FC
+S31A50011D9200EA8C4001503C301BE53CC01BE538201BE52030636B
+S31A50011DA7E240300BE540101BE53633A0E1177C83E1166CA0E15A
+S31A50011DBC3851A0E13231A0E1122CA0E138200BE5188C83E12797
+S31A50011DD198A0E10738A0E12338A0E10500A0E14C300BE50910E6
+S31A50011DE6A0E1520000EB0040A0E10500A0E10910A0E1F2FEFF03
+S31A50011DFBEB4C201BE500A0A0E19A0202E02838A0E1044883E1F5
+S31A50011E10020054E10500002A01A04AE2074094E00200002A024A
+S31A50011E250054E101A04A3207408430044062E00400A0E10910E0
+S31A50011E3AA0E13D0000EB0050A0E10400A0E10910A0E1DDFEFFC9
+S31A50011E4FEB4C201BE5900202E00838A0E12338A0E1055883E1FE
+S31A50011E64020055E10500002A010040E2075095E00200002A028E
+S31A50011E790055E10100403207508530058062E00A3880E12308B3
+S31A50011E8EA0E126C8A0E10018C3E10C28C6E191020EE09002024C
+S31A50011EA3E09C0101E0900C0CE0011092E001C88C2201E89EE08C
+S31A50011EB821C8ACE008005CE10500008A38101BE50030A0130149
+S31A50011ECD30A003000053E301005E110200009A06205EE007C069
+S31A50011EE2CCE002E0A0E134301BE5000053E30D00000A38201B61
+S31A50011EF7E50E1052E00C80C8E03CC01BE5313CA0E140101BE5DC
+S31A50011F0C183183E148300BE5388CA0E144800BE534C01BE54027
+S31A50011F21204BE20C0012E90C008CE830304BE2030093E8F0AFD6
+S31A50011F361BE9000051E32600000A0130A0E3010050E10EF0A053
+S31A50011F4B31010251E3000051310112A0310332A031FAFFFF3A24
+S31A50011F60020151E3000051318110A0318330A031FAFFFF3A0044
+S31A50011F7520A0E3010050E101004020A10050E1A1004020E320F4
+S31A50011F8A8221210150E12101402063218221A10150E1A1014097
+S31A50011F9F20E321822103C0A0E1000050E32332B0112112A0119E
+S31A50011FB4EEFFFF1A0E2212E20EF0A001EC0112E1A10180106C7A
+S31A50011FC90112E121018010EC0012E1A10080100EF0A0E104E093
+S31750011FDE2DE5010000EB0000A0E30080BDE80EF0A0E175
+S31A50011FF05B2D772074696D656F75745D205B3C656E7472795FBA
+S31A50012005706F696E743E5D000000004578656375746520616EE8
+S31A5001201A20696D616765202D2077697468204D4D55206F6666A4
+S31A5001202F006578656300000000776169742074696D656F7574C4
+S31A50012044000000007374617274696E67206164647265737300BE
+S31A5001205900000041626F757420746F207374617274206578656D
+S31A5001206E637574696F6E206174202570202D2061626F72742025
+S31A5001208377697468205E432077697468696E20256420736563BD
+S31A500120986F6E64730A0000004C6F616420612066696C65006CF1
+S31A500120AD6F616400000000454C4620696D61676573206E6F74B5
+S31A500120C220737570706F727465640A000000496E76616C6964DB
+S31A500120D720532D7265636F7264206174206F666673657420259D
+S31A500120EC702C20696E7075743A2025630A000000426164205336
+S31A500121012D7265636F726420636F756E74206174206F666673BA
+S31A5001211665742025700A0000000041646472657373206F6666A4
+S31A5001212B736574203D2025700A00000000417474656D707420E1
+S31A50012140746F206C6F616420532D7265636F72642064617461B7
+S31A5001215520746F20616464726573733A202570205B6E6F74203A
+S31A5001216A696E2052414D5D0A00002A2A2A205761726E696E6757
+S31A5001217F2120436865636B73756D206661696C757265202D200B
+S31A50012194416464723A20256C782C202530326C58203C3E20258B
+S31A500121A930326C580A0000456E74727920706F696E743A2025BF
+S31A500121BE702C20616464726573732072616E67653A2025702DCA
+S31A500121D325700A0000496E76616C696420532D7265636F72641B
+S31A500121E8206174206F6666736574203078256C782C2074797075
+S31A500121FD653A2025780A00256308000A000000766572626F73E5
+S31A5001221265006C6F61642072617720646174610000006C6F61FB
+S31A5001222764206164647265737300000000646F776E6C6F616489
+S31A5001223C206D6F6465202854465450206F722078797A4D4F447F
+S31A50012251454D2900000000686F7374206E616D652028495020E6
+S31A500122666164647265737329000066696C65206E616D6500009C
+S31A5001227B00496E76616C696420495020616464726573733A2017
+S31A5001229025730A006D6F64656D000000496E76616C6964202720
+S31A500122A56D6F6465273A2025730A0074667470000000005446AD
+S31A500122BA5450206D6F6465207265717569726573206120776F38
+S31A500122CF726B696E67206E6574776F726B0A00000046696C65D4
+S31A500122E4206E616D65206D697373696E670A0000757361676594
+S31A500122F93A206C6F61642025730A005370656369666965642011
+S31A5001230E616464726573732028257029206973206E6F74206981
+S31A500123236E2052414D2E0A000043616E2774206C6F61642027F4
+S31A500123382573273A2025730A00000000526177206C6F61642074
+S31A5001234D72657175697265732061206D656D6F72792061646431
+S31A50012362726573730A005261772066696C65206C6F61646564D5
+S31A500123772025702D25700A0000454C4600556E7265636F676E61
+S31A5001238C697A656420696D61676520747970653A20256C780AC7
+S31A500123A10000007B636D64737D00004D616E61676520464C41F5
+S31A500123B6534820696D6167657300666973005B2D6C5D000000F7
+S31A500123CB004D616E61676520636F6E66696775726174696F6EC5
+S31A500123E0206B65707420696E20464C415348206D656D6F72797F
+S31A500123F500000066636F6E666967005B2D665D00000000496E9E
+S31A5001240A697469616C697A6520464C41534820496D616765205A
+S31A5001241F53797374656D205B4649535D00696E6974000000005E
+S31A500124345B2D635D00000000446973706C617920636F6E7465E5
+S31A500124496E7473206F6620464C41534820496D61676520537960
+S31A5001245E7374656D205B4649535D000000006C697374000000E3
+S31A500124730000000000446973706C61792066726565205B617613
+S31A5001248861696C61626C655D206C6F636174696F6E73207769D5
+S31A5001249D7468696E20464C41534820496D6167652053797374BC
+S31A500124B2656D205B4649535D000066726565000000002D6620DD
+S31A500124C73C666C6173685F616464723E202D6C203C6C656E676C
+S31A500124DC74683E00457261736520464C41534820636F6E7465C3
+S31A500124F16E74730000000065726173650000004C4F434B20468B
+S31A500125064C41534820636F6E74656E7473006C6F636B0000000A
+S31A5001251B00554E4C4F434B20464C41534820636F6E74656E74DF
+S31A5001253073000000756E6C6F636B00006E616D6500000000445B
+S31A500125456973706C617920616E20696D6167652066726F6D2092
+S31A5001255A464C41534820496D6167652053797374656D205B463E
+S31A5001256F49535D000064656C65746500005B2D62203C6D656D0F
+S31A500125846F72795F6C6F61645F616464726573733E5D205B2D0A
+S31A50012599635D206E616D65000000004C6F616420696D616765B2
+S31A500125AE2066726F6D20464C41534820496D61676520537973FD
+S31A500125C374656D205B4649535D20696E746F2052414D000000D2
+S31A500125D86C6F6164000000002D62203C6D656D5F626173653E95
+S31A500125ED202D6C203C696D6167655F6C656E6774683E205B2DA3
+S31A5001260273203C646174615F6C656E6774683E5D200A202020FD
+S31A50012617202020202020202020202020205B2D66203C666C613A
+S31A5001262C73685F616464723E5D205B2D65203C656E7472795FD8
+S31A50012641706F696E743E5D205B2D72203C72616D5F61646472B8
+S31A500126563E5D205B2D6E5D203C6E616D653E00000000437265B5
+S31A5001266B61746520616E20696D61676500637265617465000043
+S31A500126802A2A2A20696E76616C696420276669732720636F6D5A
+S31A500126956D616E643A2025730A00006669732000000000667500
+S31A500126AA6C6C20696E697469616C697A6174696F6E2C206572C1
+S31A500126BF6173657320616C6C206F6620666C6173680000000087
+S31A500126D441626F757420746F20696E697469616C697A65205BCF
+S31A500126E9666F726D61745D20464C41534820696D61676520735B
+S31A500126FE797374656D002A2A2041626F727465640A002A2A2A81
+S31A5001271320496E697469616C697A6520464C41534820496D6163
+S31A5001272867652053797374656D0A0000202020696E69746961EC
+S31A5001273D6C697A6174696F6E206661696C65642025703A203002
+S31A50012752782578282573290A0000202020205761726E696E67BD
+S31A500127673A2064657669636520636F6E74656E7473206E6F743D
+S31A5001277C206572617365642C20736F6D6520626C6F636B73209F
+S31A500127916D6179206E6F7420626520757361626C650A005265E0
+S31A500127A664426F6F7400526564426F6F745B6261636B75705DF2
+S31A500127BB00526564426F6F7420636F6E6669670000464953206B
+S31A500127D06469726563746F72790000004572726F72207772694C
+S31A500127E574696E6720696D6167652064657363726970746F7254
+S31A500127FA732061742025703A2030782578282573290A000000C4
+S31A5001280F00646973706C617920636865636B73756D7300000081
+S31A500128244E616D652020202020202020202020202020464C4134
+S31A50012839534820616464722020202573202020204C656E67746B
+S31A5001284E68202020202020456E74727920706F696E740A000090
+S31A5001286300436865636B73756D000000004D656D2061646472FC
+S31A5001287800000000252D313673202030782530386C582020202F
+S31A5001288D30782530386C58202030782530386C582020307825A0
+S31A500128A230386C580A00202030782530386C58202E2E20307817
+S31A500128B72530386C580A0000006D656D6F7279206261736520E6
+S31A500128CC616464726573730072616D2062617365206164647204
+S31A500128E165737300000000656E74727920706F696E74206164DF
+S31A500128F6647265737300464C415348206D656D6F72792062614B
+S31A5001290B73652061646472657373000000696D616765206C658E
+S31A500129206E677468205B696E20464C4153485D00696D6167655A
+S31A500129352073697A65205B61637475616C20646174615D00004F
+S31A5001294A0000646F6E277420636F70792066726F6D2052414D96
+S31A5001295F20746F20464C4153482C206A7573742075706461742B
+S31A5001297465206469726563746F72790066696C65206E616D653C
+S31A50012989000000696E76616C696420617267756D656E74730005
+S31A5001299E0000726571756972656420706172616D65746572206B
+S31A500129B36D697373696E670000496E76616C696420464C4153B1
+S31A500129C84820696D6167652073697A652F6C656E677468206329
+S31A500129DD6F6D62696E6174696F6E0A00000000496E76616C69F1
+S31A500129F26420464C41534820616464726573733A20257020284A
+S31A50012A072573290A0020202076616C69642072616E6765206972
+S31A50012A1C732025702D25700A000000004E616D65206973207449
+S31A50012A316F6F206C6F6E672C206D757374206265206C657373B8
+S31A50012A46207468616E2025642063686172730A0000002A2A2001
+S31A50012A5B5741524E494E473A2052414D20616464726573733A7F
+S31A50012A70202570206D617920626520696E76616C69640A0043A3
+S31A50012A85616E2774206C6F6361746520256C6420627974657387
+S31A50012A9A206672656520696E20464C4153480A000000496D6168
+S31A50012AAF676520666F756E642C2062757420464C41534820610D
+S31A50012AC464647265737320696E636F72726563740A00000049E5
+S31A50012AD96D61676520666F756E642C20627574204C454E47548A
+S31A50012AEE4820697320696E636F727265637420283078256C7856
+S31A50012B0320213D203078256C78290A0000416E20696D61676512
+S31A50012B18206E616D656420272573272065786973747300004323
+S31A50012B2D616E27742070726F6772616D20746869732072656784
+S31A50012B42696F6E202D20636F6E7461696E7320636F64652069D1
+S31A50012B576E20757365210A000043616E2774206572617365200F
+S31A50012B6C726567696F6E2061742025703A203078257828257370
+S31A50012B81290A0043616E27742070726F6772616D207265676929
+S31A50012B966F6E2061742025703A2030782578282573290A0000BA
+S31A50012BAB004572726F722065726173696E672061742025703AC7
+S31A50012BC02030782578282573290A00004572726F722070726FD6
+S31A50012BD56772616D6D696E672061742025703A203078257828D1
+S31A50012BEA2573290A00006C656E67746800006D697373696E6738
+S31A50012BFF20617267756D656E740000000043616E277420657243
+S31A50012C14617365207468697320726567696F6E202D20636F6EF2
+S31A50012C297461696E7320636F646520696E20757365210A0000D6
+S31A50012C3E00004572726F72206C6F636B696E672061742025706F
+S31A50012C533A2030782578282573290A00004572726F7220756E76
+S31A50012C686C6F636B696E672061742025703A2030782578282583
+S31A50012C7D73290A00000000696D616765206E616D6500004465D8
+S31A50012C926C65746520696D61676520272573270000004E6F2026
+S31A50012CA7696D616765202725732720666F756E640A0000000072
+S31A50012CBC6D656D6F7279205B6C6F61645D2062617365206164FB
+S31A50012CD164726573730000646973706C617920636865636B73EF
+S31A50012CE6756D000000004E6F742061206C6F616461626C65207A
+S31A50012CFB696D6167650A000000436865636B73756D3A2030782B
+S31A50012D102530386C780A00002A2A205761726E696E67202D2025
+S31A50012D25636865636B73756D206661696C7572652E2020737492
+S31A50012D3A6F7265643A2030782530386C782C20636F6D7075742C
+S31A50012D4F65643A2030782530386C780A00464C4153483A2064A6
+S31A50012D64726976657220696E6974206661696C6564212C2073A2
+S31A50012D7974617475733A20307825780A000000464C4153483A6C
+S31A50012D8E202570202D2025702C20256420626C6F636B73206F20
+S31A50012DA36620257020627974657320656163682E0A0000000079
+S31A50012DB8746F6F2066657720617267756D656E74730000007590
+S31A50012DCD6E7265636F676E697A656420636F6D6D616E64000003
+S31A50012DE2000052756E2073637269707420617420626F6F7400D2
+S31A50012DF700626F6F745F73637269707400426F6F7420736372CC
+S31A50012E0C69707400626F6F745F7363726970745F64617461006C
+S31A50012E21000000426F6F74207363726970742074696D656F7549
+S31A50012E36742028313030306D73207265736F6C7574696F6E2936
+S31A50012E4B00626F6F745F7363726970745F74696D656F7574000D
+S31A50012E6025733A20000000002573200074727565000000006636
+S31A50012E75616C7365000000256C642000000000307825303258B0
+S31A50012E8A00003A000000200000003F3F00000A0000002E2E207E
+S31A50012E9F25730A0000456E746572207363726970742C2074654D
+S31A50012EB4726D696E617465207769746820656D707479206C69A2
+S31A50012EC96E650A000000003E3E20006C69737420636F6E666939
+S31A50012EDE6775726174696F6E206F6E6C79002A2A20696E76611B
+S31A50012EF36C696420656E7472790A000000557064617465205209
+S31A50012F086564426F6F74206E6F6E2D766F6C6174696C65206385
+S31A50012F1D6F6E66696775726174696F6E0000004572726F722009
+S31A50012F3277726974696E6720636F6E666967206461746120615E
+S31A50012F47742025703A2030782578282573290A000052657175C6
+S31A50012F5C65737420666F7220636F6E6669672076616C75652063
+S31A50012F7127257327202D2077726F6E6720747970650A004361E4
+S31A50012F866E27742066696E6420636F6E666967206461746120A5
+S31A50012F9B666F7220272573270A000000004E6F2073706163658A
+S31A50012FB020746F2061646420272573270A000000464C415348EB
+S31A50012FC520636F6E66696775726174696F6E20636865636B7377
+S31A50012FDA756D206572726F72206F7220696E76616C6964206BCC
+S31A50012FEF65790A0000657468300000000073635F6C70650000A7
+S31A500130044346206361726420776F6E277420676F20726561645C
+S31A5001301979210A000000004E6F742061205343204C50452C20F2
+S31A5001302E736F7272790A000000000A00000025733A2025732039
+S31A5001304325732025730A00000043616E277420706172736520BF
+S31A500130584349530A0000000043616E27742066657463682063C9
+S31A5001306D6F6E66696720696E666F0A00000000436F6D706163BB
+S31A500130827420466C61736820636172642072656D6F7665642173
+S31A500130970A000000002E2E2E2057616974696E6720666F7220BF
+S31A500130AC6E6574776F726B20636172643A2000002E0000005B11
+S31A500130C12D765D205B2D6E203C636F756E743E5D205B2D742031
+S31A500130D63C74696D656F75743E5D205B2D69203C49505F616486
+S31A500130EB64723E5D202D68203C49505F616464723E0000000026
+S31A500131004E6574776F726B20636F6E6E6563746976697479201A
+S31A500131157465737400000070696E67000000003C636F756E747B
+S31A5001312A3E202D206E756D626572206F66207061636B65747305
+S31A5001313F20746F2074657374003C74696D656F75743E202D2053
+S31A500131546D617820236D7320706572207061636B6574205B72BA
+S31A500131696F756E7420747269705D006C6F63616C2049502061B3
+S31A5001317E64647265737300000000686F737420495020616464A0
+S31A5001319372657373003C6C656E6774683E202D2073697A6520CF
+S31A500131A86F66207061796C6F61640000766572626F7365206F57
+S31A500131BD7065726174696F6E0000003C726174653E202D20743D
+S31A500131D2696D65206265747765656E207061636B657473000041
+S31A500131E7000000000050494E47202D20496E76616C6964206F8B
+S31A500131FC7074696F6E207370656369666965640A000000005017
+S31A50013211494E47202D20496E76616C69642049502061646472CB
+S31A500132266573733A2025730A000050494E473A2043616E2774C0
+S31A5001323B2066696E642061646472657373206F6620736572768B
+S31A50013250657220272573270A0000000050494E47202D20686FB9
+S31A500132657374204950206164647265737320726571756972653A
+S31A5001327A640A000000004E6574776F726B2050494E47202D20D5
+S31A5001328F66726F6D202573000020746F2025730A0069636D70F9
+S31A500132A4202D207365713A20256C642C2074696D653A20256CD3
+S31A500132B96420287469636B73290A0050494E47202D20726563D7
+S31A500132CE656976656420256C64206F6620256C64206578706596
+S31A500132E3637465640A0000000053707572696F757320496E7420
+S31A500132F8657272757074212121202D20766563746F723A2025E6
+S31A5001330D642C20646174613A2025780A00000051525900436169
+S31A500133226E2774206964656E7469667920464C4153482C20736D
+S31A500133376F7272790A00000000457272203D2025780A00000007
+S31A5001334C30313233343536373839616263646566000000005063
+S31A500133613031004F4B000045303100453033004530320042309E
+S31A5001337631003031323334353637383961626364656600000058
+S31A5001338B00303132333435363738394142434445460000000034
+S31A500133A030313233343536373839414243444546000000003CE3
+S31A500133B542616420666F726D617420737472696E673A200000EB
+S31A500133CA0000203A00003E0A00003C6E756C6C3E00003C4E6FC7
+S31A500133DF74206120737472696E673A2030780000003E00000096
+S31A500133F4253038583A20000025303258000000002020000020EF
+S31A50013409000000207C0000256300007C0A00003031323334357E
+S31A5001341E36373839000030313233343536373839616263646568
+S31A5001343366000000003031323334353637383941424344454625
+S31A50013448000000005E430A003078253038583A20000000002561
+S31A5001345D303258000000002020000020000000207C00002563C5
+S31A5001347200007C0A0000202D2061726520796F75207375726567
+S31A500134872028792F6E293F20004275665B25645D2F25703A2077
+S31A5001349C6275663A2025702C206C656E3A2025642F25642C2026
+S31A500134B16E6578743A2025700A000046726565206C6973742079
+S31A500134C63D2025700A005F5F656E65745F706F6C6C3A206E6FE7
+S31A500134DB206D6F726520627566666572730A0000004E45544173
+S31A500134F053434949000000004F43544554000000556E6B6E6FBE
+S31A50013505776E206572726F7200000066696C65206E6F74206694
+S31A5001351A6F756E6400006163636573732076696F6C6174696F96
+S31A5001352F6E000000006469736B2066756C6C206F7220616C6CEA
+S31A500135446F636174696F6E20657863656564656400000000696E
+S31A500135596C6C6567616C2054465450206F7065726174696F6E46
+S31A5001356E0000756E6B6E6F776E207472616E73666572204944AF
+S31A500135830066696C6520616C726561647920657869737473007A
+S31A500135986E6F20737563682075736572000000006F7065726121
+S31A500135AD74696F6E2074696D6564206F757400736F6D65207306
+S31A500135C26F7274206F66206E6574776F726B206572726F7200DF
+S31A500135D700696E76616C696420706172616D65746572000000C0
+S31A500135EC70726F746F636F6C2076696F6C6174696F6E000066A6
+S31A50013601696C65206973206C6172676572207468616E206275C8
+S31A5001361666666572000025642E25642E25642E2564002573203F
+S31A5001362B2D2063616C6C6564207769746820696E76616C69649E
+S31A50013640204349533A2025780A00000063665F70617273655F7C
+S31A5001365563667461626C650000000063665F70617273655F6333
+S31A5001366A6F6E6669670050434D4349413A20496E76616C696413
+S31A5001367F20736C6F742025640A000000002E2E2E204572617315
+S31A50013694652066726F6D2025702D25703A2000002E0000000A88
+S31A500136A90000002E2E2E2050726F6772616D2066726F6D20251A
+S31A500136BE702D25702061742025703A2000002E2E2E204C6F63A2
+S31A500136D36B2066726F6D2025702D25703A200000002E2E2E20D1
+S31A500136E8556E6C6F636B2066726F6D2025702D25703A20004E17
+S31A500136FD6F206572726F72202D206F7065726174696F6E2063E7
+S31A500137126F6D706C657465000000446576696365206973206980
+S31A500137276E2065726173652073757370656E6420737461746535
+S31A5001373C0000000044657669636520697320696E2070726F6706
+S31A5001375172616D2073757370656E642073746174650000496EB2
+S31A5001376676616C696420464C4153482061646472657373000053
+S31A5001377B004572726F7220747279696E6720746F20657261734D
+S31A50013790650000004572726F7220747279696E6720746F206C12
+S31A500137A56F636B2F756E6C6F636B004572726F722074727969CE
+S31A500137BA6E6720746F2070726F6772616D0047656E65726963F6
+S31A500137CF206572726F720000004465766963652F726567696FAF
+S31A500137E46E2069732077726974652D70726F74656374656400CD
+S31A500137F9000000464C415348207375622D73797374656D206E2C
+S31A5001380E6F7420696E697469616C697A6564000000004461749C
+S31A500138236120766572696679206661696C65642061667465726C
+S31A50013838206F7065726174696F6E0000556E6B6E6F776E2065BE
+S31A5001384D72726F7200000045746865726E65742073656E643A07
+S31A500138620A0045746865726E657420726563763A0A006574685C
+S31A500138775F6472765F6473722073686F756C64206E6F742062F0
+S31A5001388C652063616C6C65643A20766563746F722025642C2004
+S31A500138A1646174612025780A000000556E62616C616E6365646D
+S31A500138B620737472696E67210A00416D626967756F7573206395
+S31A500138CB6F6D6D616E6420272573272C2063686F6963657320C5
+S31A500138E06172653A20257300202573000A00000055736167659B
+S31A500138F53A0A002020257325732025730A00002A2A2045727254
+S31A5001390A6F723A20257320616C726561647920737065636966E2
+S31A5001391F6965640A002A2A204572726F723A20696E76616C69A5
+S31A5001393464206E756D626572202725732720666F722025730AEB
+S31A500139490000002A2A204572726F723A20696E76616C69642033
+S31A5001395E666C616720272563270A000000002A2A204572726F57
+S31A50013973723A206E6F2064656661756C742F6E6F6E2D666C6160
+S31A500139886720617267756D656E747320737570706F7274656470
+S31A5001399D0A000000000000446973706C617920526564426F6F83
+S31A500139B2742076657273696F6E20696E666F726D6174696F6E49
+S31A500139C70076657273696F6E005B3C746F7069633E5D0000003D
+S31A500139DC48656C702061626F75742068656C703F00000000684B
+S31A500139F1656C70000000005B2D77203C74696D656F75743E5D2C
+S31A50013A06205B656E7472795D00004578656375746520636F6421
+S31A50013A1B652061742061206C6F636174696F6E0000676F000015
+S31A50013A302D62203C6C6F636174696F6E3E205B2D6C203C6C6567
+S31A50013A456E6774683E5D00446973706C617920286865782064E2
+S31A50013A5A756D702920612072616E6765206F66206D656D6F72A2
+S31A50013A6F790000000064756D70000000005B4F4E207C204F4673
+S31A50013A84465D00004D616E616765206D616368696E6520636111
+S31A50013A9963686573000000636163686500000052657365742007
+S31A50013AAE7468652073797374656D000000007265736574000083
+S31A50013AC300506C6174666F726D3A20257320282573292025739F
+S31A50013AD80A0000004173736162657420646576656C6F706D65D4
+S31A50013AED6E742073797374656D00005374726F6E6741524D2049
+S31A50013B02313131300000436F70797269676874202843292032D5
+S31A50013B173030302C20323030312C20526564204861742C20496A
+S31A50013B2C6E632E0A0A00000052414D3A2025702D25700A003D42
+S31A50013B413D20457865637574696E6720626F6F7420736372696A
+S31A50013B56707420696E2025642E25303364207365636F6E647356
+S31A50013B6B202D20656E746572205E4320746F2061626F72740A5D
+S31A50013B8000000000526564426F6F743E200000002A2A204572A1
+S31A50013B95726F723A20496C6C6567616C20636F6D6D616E643A24
+S31A50013BAA20222573220A000000006F6E00006F666600496E7664
+S31A50013BBF616C6964206361636865206D6F64653A2025730A002B
+S31A50013BD4636163686573203F0A0000003C746F7069633E0049D3
+S31A50013BE96E76616C696420617267756D656E740A0000002573CD
+S31A50013BFE0A20202025732025730A000000006261736520616417
+S31A50013C136472657373000000006C656E677468000044756D700C
+S31A50013C282077686174205B6C6F636174696F6E5D3F0A0000776B
+S31A50013C3D6169742074696D656F7574000000007374617274691F
+S31A50013C526E6720616464726573730000000041626F757420749C
+S31A50013C676F20737461727420657865637574696F6E206174202B
+S31A50013C7C2570202D2061626F72742077697468205E4320776925
+S31A50013C917468696E202564207365636F6E64730A0000002E2EF6
+S31A50013CA62E20526573657474696E672E00000A00000021212015
+S31A50013CBB6F6F70732C205245534554206E6F7420776F726B6950
+S31A50013CD06E67206F6E207468697320706C6174666F726D0A004F
+S31A50013CE500000078797A4D6F64656D202D202573206D6F64654C
+S31A50013CFA2C20256428534F48292F256428535458292F25642866
+S31A50013D0F43414E29207061636B6574732C202564207265747290
+S31A50013D246965730A0000000043524300436B73756D00000043CA
+S31A50013D39616E2774206163636573732066696C65000000536FA0
+S31A50013D4E7272792C207A4D6F64656D206E6F7420617661696C56
+S31A50013D6361626C65207965740054696D6564206F757400000083
+S31A50013D78456E64206F662066696C650043616E63656C6C656498
+S31A50013D8D000000496E76616C6964206672616D696E670043526A
+S31A50013DA2432F636865636B73756D206572726F720000426C6F89
+S31A50013DB7636B2073657175656E6365206572726F72000000000F
+S31A50013DCC556E6B6E6F776E206572726F7200000025733A20431C
+S31A50013DE1616E27742066696E642061646472657373206F662030
+S31A50013DF67365727665720A0000005F5F7564705F73656E64743C
+S31A50013E0B6F000000007564705F7265637666726F6D202D2064FF
+S31A50013E20726F70706564207061636B6574206F662025642062F4
+S31A50013E35797465730A000047444220636F6E6E656374696F6E35
+S31A50013E4A20706F7274006764625F706F7274000000004E6574AF
+S31A50013E5F776F726B20646562756720617420626F6F7420746947
+S31A50013E746D6500006E65745F64656275670000005573652042D4
+S31A50013E894F4F545020666F72206E6574776F726B20636F6E6634
+S31A50013E9E696775726174696F6E00626F6F74700000004C6F63A4
+S31A50013EB3616C204950206164647265737300000000626F6F7463
+S31A50013EC8705F6D795F69700044656661756C7420736572766597
+S31A50013EDD722049502061646472657373000000626F6F74705FC5
+S31A50013EF27365727665725F69700025732E25640A00006E6574F5
+S31A50013F075F696F5F7772697465000000006E65745F696F5F723E
+S31A50013F1C656164004E6F206E6574776F726B20696E7465726680
+S31A50013F316163657320666F756E640A0000000043616E27742075
+S31A50013F4667657420424F4F545020696E666F202D206E65747734
+S31A50013F5B6F726B2064697361626C6564210A00000049503A2038
+S31A50013F70257300002C2044656661756C74207365727665723A4B
+S31A50013F852025730A0000000001020203030303040404040404E5
+S31A50013F9A04040505050505050505050505050505050506060651
+S31A50013FAF06060606060606060606060606060606060606060628
+S31A50013FC406060606060606060707070707070707070707070706
+S31A50013FD9070707070707070707070707070707070707070707E9
+S31A50013FEE070707070707070707070707070707070707070707D4
+S31A50014003070707070707070707080808080808080808080808B2
+S31A5001401808080808080808080808080808080808080808080894
+S31A5001402D0808080808080808080808080808080808080808087F
+S31A500140420808080808080808080808080808080808080808086A
+S31A5001405708080808080808080808080808080808080808080855
+S31A5001406C08080808080808080808080808080808080808080840
+S31A5001408108080808080808080808080001020203030303040462
+S31A500140960404040404040505050505050505050505050505055B
+S31A500140AB0506060606060606060606060606060606060606062C
+S31A500140C00606060606060606060606060707070707070707070D
+S31A500140D5070707070707070707070707070707070707070707EC
+S31A500140EA070707070707070707070707070707070707070707D7
+S31A500140FF070707070707070707070707070808080808080808BA
+S31A5001411408080808080808080808080808080808080808080897
+S31A5001412908080808080808080808080808080808080808080882
+S31A5001413E0808080808080808080808080808080808080808086D
+S31A5001415308080808080808080808080808080808080808080858
+S31A5001416808080808080808080808080808080808080808080843
+S3145001417D08080808080808080808080808080864
+S31A5001418C00000000FC890050FC890050FC890050FC890050FC77
+S31A500141A1890050FC890050FC890050FC890050FC890050FC8900
+S31A500141B60050FC890050FC890050FC890050FC890050FC890074
+S31A500141CB50FC890050FC890050FC890050FC890050FC8900500F
+S31A500141E0FC890050FC890050FC890050FC890050FC890050FC4E
+S31A500141F5890050FC890050FC890050FC890050FC890050FC89AC
+S31A5001420A0050FC890050FC890050FC890050FC890050FC89001F
+S31A5001421F50FC890050FC890050FC890050FC890050FC890050BA
+S31A50014234FC890050FC890050FC890050FC890050FC890050FCF9
+S31A50014249890050FC890050FC890050FC890050FC890050FC8957
+S31A5001425E0050FC890050FC890050FC890050FC890050FC8900CB
+S31A5001427350FC890050FC890050FC890050000000000000000010
+S31A50014288000000000000000000000000000000000000000000CA
+S31A5001429D000000000000000000000000000000000000000000B5
+S31A500142B2000000000000000000000000000000000000000000A0
+S31A500142C70000000000000000000000000000000000000000008B
+S31A500142DC00000000000000000000000000000000000000000076
+S31A500142F100000000000000000000000000000000000000000061
+S31A500143060000000000000000000000000000000000000000004B
+S31A5001431B00000000000000000000000000000000000000000036
+S31A5001433000000000000000000000000000000000000000000021
+S31A500143450000000000000000000000000000000000000000000C
+S31A5001435A000000000000000000000000000000000000000000F7
+S31A5001436F000000000000000000000000000000000000000000E2
+S31A50014384000000000000000000000000000000000000000000CD
+S31A50014399000000000000000000000000000000000000000000B8
+S31A500143AE000000000000000000000000000000000000000000A3
+S31A500143C30000000000000000000000000000000000000000008E
+S31A500143D800000000000000000000000000000000000000000079
+S31A500143ED00000000000000000000000000000000000000000064
+S31A500144020000000000000000000000000000000000000000004E
+S31A5001441700000000000000000000000000000000000000000039
+S31A5001442C00000000000000000000000000000000000000000024
+S31A500144410000000000000000000000000000000000000000000F
+S31A50014456000000000000000000000A526564426F6F7428746D38
+S31A5001446B2920646562756720656E7669726F6E6D656E74202D73
+S31A50014480206275696C742031323A30383A34362C204A616E2042
+S31A50014495333020323030310A00000065436F7320474442207361
+S31A500144AA74756273205B76696120526564426F6F745D202D2094
+S31A500144BF6275696C74204A616E2033302032303031202F203132
+S31A500144D4323A30383A3436005B2D725D205B2D765D205B2D6822
+S31A500144E9203C686F73743E5D205B2D6D207B54465450207C2008
+S31A500144FE78797A4D4F44454D7D5D205B2D62203C626173655F3B
+S31A50014513616464726573733E5D203C66696C655F6E616D653E81
+S31A50014528000000007C2F2D5C7C2D000000000000283D0050F4A1
+S31A5001453D3C0050003E0050183E00508C3E0050C84000505C4242
+S31A5001455200505C420050F04200508884000000000000AC830002
+S31A500145670080430100F42F0150000000000000000000000000B0
+S31A5001457C0888123456780000200000000000000000000000808F
+S31A500145916A0050D06A0050000000000000000000000000FFFF7C
+S31A500145A6FFFF0000000000000000000000003C780050000000A7
+S31A500145BB0000000000D043010000000000000000000000000080
+S31A500145D000000000FEFFFFFFFEFFFFFF00000000000000000089
+S31A500145E50000000000000000000000000000000000000000006A
+S31A500145FA000000000000000000000000000000000000141E0023
+S31A5001460F00141E000038D0005004D400505CD2005000002110DE
+S31A50014624422063308440A550C660E770088129914AA16BB18C29
+S31A50014639C1ADD1CEE1EFF13112100273325222B5529442F77293
+S31A5001464ED662399318837BB35AA3BDD39CC3FFF3DEE3622443CB
+S31A500146633420040114E664C774A44485546AA54BB528850995DE
+S31A50014678EEE5CFF5ACC58DD55336722611163006D776F66695B0
+S31A5001468D56B4465BB77AA719973887DFF7FEE79DD7BCC7C44811
+S31A500146A2E5588668A7784008611802282338CCC9EDD98EE9AF9B
+S31A500146B7F9488969990AA92BB9F55AD44AB77A966A711A500AB1
+S31A500146CC333A122AFDDBDCCBBFFB9EEB799B588B3BBB1AABA6BF
+S31A500146E16C877CE44CC55C222C033C600C411CAEED8FFDECCD77
+S31A500146F6CDDD2AAD0BBD688D499D977EB66ED55EF44E133E3203
+S31A5001470B2E511E700E9FFFBEEFDDDFFCCF1BBF3AAF599F788F93
+S31A500147208891A981CAB1EBA10CD12DC14EF16FE18010A100C296
+S31A5001473530E3200450254046706760B9839893FBA3DAB33DC31D
+S31A5001474A1CD37FE35EF3B1029012F322D23235421452776256E7
+S31A5001475F72EAB5CBA5A89589856EF54FE52CD50DC5E234C324BB
+S31A50014774A01481046674476424540544DBA7FAB79987B8975F59
+S31A50014789E77EF71DC73CD7D326F2369106B016576676761546EF
+S31A5001479E34564CD96DC90EF92FE9C899E9898AB9ABA944586540
+S31A500147B34806782768C018E1088238A3287DCB5CDB3FEB1EFB3D
+S31A500147C8F98BD89BBBAB9ABB754A545A376A167AF10AD01AB39D
+S31A500147DD2A923A2EFD0FED6CDD4DCDAABD8BADE89DC98D267CD4
+S31A500147F2076C645C454CA23C832CE01CC10C1FEF3EFF5DCF7C4E
+S31A50014807DF9BAFBABFD98FF89F176E367E554E745E932EB23E45
+S31A5001481CD10EF01E000000000000000000000180E80300000FC8
+S31A5001483100000000000580E8030000110000000000000000009A
+S31A500148460000F401000000000000000000000000000000000011
+S31A5001485B000000000000000000000000000000000000000000F1
+S31A500148707826015068260150E0250150E41A005074250150443C
+S31A500148852501503C25015000270050F8240150E0240150C4247E
+S31A5001489A0150D8210050BC2401507824015074240150381900C0
+S31A500148AF502C2401500824015000240150D81400506C2401509D
+S31A500148C43C24015034240150FC170050D8250150A42501507CE7
+S31A500148D92501500C2900501425015000250150C4240150B0236C
+S31A500148EE0050342501501C250150C424015058250050A03A01F1
+S31A5001490350883A01507C3A015014E40050743A01504C3A0150C0
+S31A50014918303A015084E600503020015010200150F01F01501C20
+S31A5001492D070050C0230150AC230150A4230150AC2B0050F82319
+S31A500149420150CC230150C42301506C3100502C3A0150103A0151
+S31A5001495750F839015078E70050F0390150DC390150D039015039
+S31A5001496C9CE50050AC200150A020015050830000BC0E00501CD7
+S31A5001498131015000310150C030015040430050BC3A0150A83A89
+S31A500149960150A039015028E90050C8390150A4390150A039017F
+S31A500149AB50F8E00050F82D0150E42D015000000000010000004F
+S31A500149C00100000000000000102E0150042E0150F82D01500101
+S31A500149D500000004000000742401504C2E0150242E0150F82DF6
+S31A500149EA0150010000000200000000000000A83E0150843E0113
+S31A500149FF5000000000010000000100000001000000C43E0150A6
+S31A50014A14B03E0150A83E0150000000000500000000000000ECCF
+S31A50014A293E0150D03E0150A83E015000000000050000000000F7
+S31A50014A3E0000503E01503C3E015000000000010000000200005F
+S31A50014A530028230000783E01505C3E01500000000001000000B9
+S31A50014A680100000000000000E0370050BC100150FC2F0150BC25
+S31450014A7D3C0050D883000000000000F09200501A
 S7055000004466
--- a/packages/hal/arm/sa11x0/assabet/current/misc/redboot_RAM.cfg
+++ b/packages/hal/arm/sa11x0/assabet/current/misc/redboot_RAM.cfg
@@ -58,7 +58,7 @@ cdl_component CYG_HAL_STARTUP {
     user_value RAM
 };
 
-cdl_option CYGBLD_BUILD_REDBOOT {
+cdl_component CYGBLD_BUILD_REDBOOT {
     user_value 1
 };
 
@@ -66,10 +66,12 @@ cdl_component CYGPKG_REDBOOT_NETWORKING 
     user_value 1
 };
 
-cdl_option CYGSEM_REDBOOT_FLASH_CONFIG {
+cdl_component CYGSEM_REDBOOT_FLASH_CONFIG {
     user_value 1
 };
 
 cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS {
-  inferred_value 1
+    inferred_value 1
 };
+
+
--- a/packages/hal/arm/sa11x0/assabet/current/misc/redboot_ROM.cfg
+++ b/packages/hal/arm/sa11x0/assabet/current/misc/redboot_ROM.cfg
@@ -16,6 +16,7 @@ cdl_configuration eCos {
     package -hardware CYGPKG_HAL_ARM_SA11X0_ASSABET current ;
     package -hardware CYGPKG_IO_SERIAL_ARM_SA11X0 current ;
     package -hardware CYGPKG_DEVS_PCMCIA_ASSABET current ;
+    package -hardware CYGPKG_DEVS_FLASH_ASSABET current ;
     package -template CYGPKG_HAL current ;
     package -template CYGPKG_INFRA current ;
     package -template CYGPKG_REDBOOT current ;
@@ -23,7 +24,6 @@ cdl_configuration eCos {
     package CYGPKG_DEVS_ETH_CF current ;
     package CYGPKG_IO_FLASH current ;
     package CYGPKG_IO_ETH_DRIVERS current ;
-    package CYGPKG_DEVS_FLASH_ASSABET current ;
 };
 
 cdl_option CYGBLD_BUILD_GDB_STUBS {
@@ -62,7 +62,7 @@ cdl_component CYG_HAL_STARTUP {
     user_value ROM
 };
 
-cdl_option CYGBLD_BUILD_REDBOOT {
+cdl_component CYGBLD_BUILD_REDBOOT {
     user_value 1
 };
 
@@ -70,10 +70,8 @@ cdl_component CYGPKG_REDBOOT_NETWORKING 
     user_value 1
 };
 
-cdl_option CYGSEM_REDBOOT_FLASH_CONFIG {
+cdl_component CYGSEM_REDBOOT_FLASH_CONFIG {
     user_value 1
 };
 
-cdl_option CYGSEM_REDBOOT_BSP_SYSCALLS {
-  inferred_value 1
-};
+
--- a/packages/hal/arm/sa11x0/assabet/current/src/lcd_support.c
+++ b/packages/hal/arm/sa11x0/assabet/current/src/lcd_support.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -103,6 +103,26 @@ parse_color(char *cp)
     }
 }
 
+#ifndef CYGPKG_LIBC_STDIO
+static int
+get_int(char **_cp)
+{
+    char *cp = *_cp;
+    char c;
+    int val = 0;
+    
+    while ((c = *cp++) && (c != ' ')) {
+        if ((c >= '0') && (c <= '9')) {
+            val = val * 10 + (c - '0');
+        } else {
+            return -1;
+        }
+    }
+    *_cp = cp;
+    return val;
+}
+#endif
+
 void
 show_xpm(char *xpm[])
 {
@@ -112,7 +132,13 @@ show_xpm(char *xpm[])
     unsigned short colors[256];  // Mapped by character index
 
     cp = xpm[0];
+#ifdef CYGPKG_LIBC_STDIO
     if (sscanf(cp, "%d %d %d", &ncols, &nrows, &nclrs) != 3) {
+#else
+    if (((ncols = get_int(&cp)) < 0) ||
+        ((nrows = get_int(&cp)) < 0) ||
+        ((nclrs = get_int(&cp)) < 0)) {
+#endif
         diag_printf("Can't parse XPM data, sorry\n");
         return;
     }
--- a/packages/hal/arm/sa11x0/brutus/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/brutus/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_arm_sa11x0_brutus.cdl: Respect channel configuration
+	constraints.
+
 2001-01-05  Hugo Tyson  <hmt@redhat.com>
 
 	* include/plf_mmap.h: New file.  Statically defined macros for
--- a/packages/hal/arm/sa11x0/brutus/current/cdl/hal_arm_sa11x0_brutus.cdl
+++ b/packages/hal/arm/sa11x0/brutus/current/cdl/hal_arm_sa11x0_brutus.cdl
@@ -113,6 +113,7 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_BRUTUS
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    1
@@ -124,6 +125,7 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_BRUTUS
  
      cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
          display          "Diagnostic serial port"
+         active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
          flavor data
          legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
          default_value    1
--- a/packages/hal/arm/sa11x0/sa1100mm/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/sa1100mm/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_arm_sa11x0_sa1100mm.cdl: Respect channel configuration
+	constraints.
+
 2001-01-05  Hugo Tyson  <hmt@redhat.com>
 
 	* include/plf_mmap.h: New file.  Statically defined macros for
--- a/packages/hal/arm/sa11x0/sa1100mm/current/cdl/hal_arm_sa11x0_sa1100mm.cdl
+++ b/packages/hal/arm/sa11x0/sa1100mm/current/cdl/hal_arm_sa11x0_sa1100mm.cdl
@@ -113,6 +113,7 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_SA1100
 
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT {
         display      "Default console channel."
+        active_if    CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
         flavor       data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         calculated   1
@@ -120,6 +121,7 @@ cdl_package CYGPKG_HAL_ARM_SA11X0_SA1100
  
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    1
--- a/packages/hal/arm/sa11x0/var/current/ChangeLog
+++ b/packages/hal/arm/sa11x0/var/current/ChangeLog
@@ -1,3 +1,24 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+2001-02-01  Jesper Skov  <jskov@redhat.com>
+
+	* include/hal_var_ints.h: Include registers definitions used in
+	reset macro.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_None
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Moved reset macro to
+	* include/hal_var_ints.h: this file.
+
 2001-01-05  Hugo Tyson  <hmt@redhat.com>
 
 	* include/hal_mm.h: Change bitfields within memmap entry to
--- a/packages/hal/arm/sa11x0/var/current/include/hal_var_ints.h
+++ b/packages/hal/arm/sa11x0/var/current/include/hal_var_ints.h
@@ -50,6 +50,8 @@
 //
 //==========================================================================
 
+#include <cyg/hal/hal_sa11x0.h>         // registers
+
 #define CYGNUM_HAL_INTERRUPT_GPIO0   0
 #define CYGNUM_HAL_INTERRUPT_GPIO1   1
 #define CYGNUM_HAL_INTERRUPT_GPIO2   2
@@ -108,4 +110,25 @@
 // The vector used by the Real time clock
 #define CYGNUM_HAL_INTERRUPT_RTC        CYGNUM_HAL_INTERRUPT_TIMER0
 
+
+
+//----------------------------------------------------------------------------
+// Reset.
+#define HAL_PLATFORM_RESET()                                               \
+    CYG_MACRO_START                                                        \
+    cyg_uint32 ctrl;                                                       \
+                                                                           \
+    /* By disabling interupts we will just hang in the loop below      */  \
+    /* if for some reason the software reset fails.                    */  \
+    HAL_DISABLE_INTERRUPTS(ctrl);                                          \
+                                                                           \
+    /* Software reset. */                                                  \
+    *SA11X0_RESET_SOFTWARE_RESET = SA11X0_INVOKE_SOFTWARE_RESET;           \
+                                                                           \
+    for(;;); /* hang here forever if reset fails */                        \
+    CYG_MACRO_END
+
+// Fallback (never really used)
+#define HAL_PLATFORM_RESET_ENTRY 0x00000000
+
 #endif // CYGONCE_HAL_VAR_INTS_H
--- a/packages/hal/arm/sa11x0/var/current/include/plf_stub.h
+++ b/packages/hal/arm/sa11x0/var/current/include/plf_stub.h
@@ -70,26 +70,6 @@ externC void cyg_hal_plf_comms_init(void
 #define HAL_STUB_PLATFORM_INIT()        CYG_EMPTY_STATEMENT
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-#define HAL_STUB_PLATFORM_RESET()                                          \
-    CYG_MACRO_START                                                        \
-    cyg_uint32 ctrl;                                                       \
-                                                                           \
-    /* By disabling interupts we will just hang in the loop below      */  \
-    /* if for some reason the software reset fails.                    */  \
-    HAL_DISABLE_INTERRUPTS(ctrl);                                          \
-                                                                           \
-    /* Software reset. */                                                  \
-    *SA11X0_RESET_SOFTWARE_RESET = SA11X0_INVOKE_SOFTWARE_RESET;           \
-                                                                           \
-    for(;;); /* hang here forever if reset fails */                        \
-    CYG_MACRO_END
-
-// Fallback (never really used)
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0x00000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/arm/sa11x0/var/current/src/hal_diag.c
+++ b/packages/hal/arm/sa11x0/var/current/src/hal_diag.c
@@ -177,9 +177,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
     return ch;
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static channel_data_t ser_channels[2] = {
     { (volatile struct sa11x0_serial*)SA11X0_UART1_BASE, 1000, CYGNUM_HAL_INTERRUPT_UART1 },
     { (volatile struct sa11x0_serial*)SA11X0_UART3_BASE, 1000, CYGNUM_HAL_INTERRUPT_UART3 }
@@ -365,8 +362,6 @@ cyg_hal_plf_comms_init(void)
 
     cyg_hal_plf_serial_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 
 //=============================================================================
 // Compatibility with older stubs
@@ -391,7 +386,7 @@ cyg_hal_plf_comms_init(void)
 
 #if defined(CYG_HAL_STARTUP_ROM) && !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
 #define HAL_DIAG_USES_HARDWARE
-#elif defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#elif !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 #define HAL_DIAG_USES_HARDWARE
 #elif CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL != CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL
 #define HAL_DIAG_USES_HARDWARE
--- a/packages/hal/common/current/ChangeLog
+++ b/packages/hal/common/current/ChangeLog
@@ -1,3 +1,90 @@
+2001-02-09  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/debugging.cdl: Make CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT and 
+	CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT options have sensible defaults.
+
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal.cdl: Added CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE and
+	CHANNEL_CONFIGURABLE options.
+	* cdl/common.cdl: Added CYGDBG_HAL_DIAG_TO_DEBUG_CHAN option.
+	* src/hal_if.c: Changes to respect new options. Always do platform
+	driver init from CLAIM_COMMS code.
+	* src/hal_stub.c: Leave channel setup to CLAIM_COMMS code.
+
+	* src/hal_if.c: Added null mangler that gets called via the
+	virtual vector console comms entry and just forwards IO to the
+	debug comms entries.  This differs from setting the console
+	channel to the same as the debug channel in that console output
+	will go to the debug channel even if the debug channel is changed.
+
+2001-02-07  Jesper Skov  <jskov@redhat.com>
+
+	* include/hal_if.h: Allow architecture to override COMM and CALL
+	accessor macros.
+
+2001-02-03  Gary Thomas  <gthomas@redhat.com>
+
+	* src/bplist-dynamic.c (__set_breakpoint, __remove_breakpoint): 
+	Fix error introduced below when no breakpoint list defined.
+
+2001-02-02  Mark Salter  <msalter@redhat.com>
+
+	* src/generic-stub.c: __set_breakpoint and __remove_breakpoint now
+	take a length argument.
+
+	* src/bplist-dynamic.c: Support breakpoint length. Use 
+	HAL_BREAKINST_ADDR macro (if defined) to get actual breakpoint based
+	on breakpoint length.
+
+	* include/hal_stub.h: Add len argument to __set_breakpoint and
+	__remove_breakpoint.
+
+2001-02-01  Jesper Skov  <jskov@redhat.com>
+
+	* src/drv_api.c: Make it build with chaining.
+
+	* include/hal_if.h: Introduce macros for legal version range and
+	special hacked version number used by ctrlc magic.
+	* src/hal_if.c (hal_ctrlc_isr_init): Be more careful with how the
+	version number is checked (and trashed) by the ctrlc init code.
+	* src/hal_misc.c (hal_default_isr): Same.
+
+	* src/hal_stub.c: Moved mangling code to hal_if.c
+	* src/hal_if.c: New policies for when and how to initialize the
+	IO channels. Mangler code now set up by diag_init to allow for
+	mangling when no stub is included.
+
+	* include/hal_if.h: Added COMM version in upper 16 bits of version
+	word. Removed CYGPRI_HAL_IMPLEMENTS_IF_SERVICES.
+	* src/hal_misc.c: Use masks when checking vv versions.
+
+	* cdl/hal.cdl: Add new options for selecting which parts of the
+	virtual vector table to initialize.
+	* src/hal_if.c: Matching granularity in initialization code.
+	Extra checking of services before using these.
+	
+	* cdl/debugging.cdl: Require channel initialization when enabling
+	stubs.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/common.cdl: Get rid of CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	options. They are replaced by the CYGSEM_HAL_DIAG_MANGLER option.
+
+2001-01-31  Hugo Tyson  <hmt@redhat.com>
+
+	* include/hal_if.h: Make it possible to build logical ether driver
+	even without virtual vectors present, by defining a dummy
+	HAL_CTRLC_CHECK in that case; other code invokes it if debugging
+	per se is enabled.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_stub.c (__reset): Rename HAL_STUB_PLATFORM_RESETx macros
+	to HAL_PLATFORM_RESETx.
+	* src/hal_if.c (reset): Same.
+
 2001-01-15  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* src/drv_api.c: Initialized isr_disable_counter to 1 so that it
@@ -1456,7 +1543,7 @@ 1998-08-18  Nick Garnett  <nickg@cygnus.
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
--- a/packages/hal/common/current/cdl/common.cdl
+++ b/packages/hal/common/current/cdl/common.cdl
@@ -52,22 +52,6 @@ cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPP
         code can be eliminated."
 }
 
-cdl_interface CYGINT_HAL_DIAG_DISABLE_GDB_PROTOCOL_SUPPORTED {
-    display "HAL allows GDB protocol to be disabled for..."
-    no_define
-}
-
-cdl_option CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL {
-    display       "Disable GDB protocol for diagnostic output"
-    active_if     CYGINT_HAL_DIAG_DISABLE_GDB_PROTOCOL_SUPPORTED
-    default_value 0
-    description "
-        This option forces diagnostic output to not use the GDB
-        protocol.  Most programs will use the GDB protocol for
-        diagnostic I/O because of the environment.  This option
-        allows for an explicit override in these cases."
-}
-
 # NOTE: The requirement for kernel exception support is bogus in that
 # the user can supply a deliver_exception function herself. In that
 # case, however, it is easy to force the kernel option off while leaving
@@ -125,3 +109,30 @@ cdl_option CYGSEM_HAL_STATIC_MMU_TABLES 
        would otherwise be required for these tables."
 }
 
+cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN {
+    display       "Route diagnostic output to debug channel"
+    default_value { (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS \
+                     || CYG_HAL_STARTUP == "RAM") ? 1 : 0}
+    active_if     !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE
+    active_if     { CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx \
+                    || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG }
+    description   "
+        If not inheriting the console setup from the ROM monitor,
+        it is possible to redirect diagnostic output to the debug
+        channel by enabling this option. Depending on the debugger
+        used it may also be necessary to select a mangler for the
+        output to be displayed by the debugger."
+
+    cdl_option CYGSEM_HAL_DIAG_MANGLER {
+        display       "Mangler used on diag output"
+        flavor        data
+        legal_values  {"GDB" "None"}
+        default_value { "GDB" }
+        description   "
+            It is sometimes necessary to mangle (encode) the
+            diag ASCII text output in order for it to show up at the
+            other end. In particular, GDB may silently ignore raw
+            ASCII text."
+    }
+}
+
--- a/packages/hal/common/current/cdl/debugging.cdl
+++ b/packages/hal/common/current/cdl/debugging.cdl
@@ -23,7 +23,7 @@
 #                                                                          
 # The Initial Developer of the Original Code is Red Hat.                   
 # Portions created by Red Hat are                                          
-# Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 # All Rights Reserved.                                                     
 # -------------------------------------------                              
 #                                                                          
@@ -52,13 +52,16 @@ cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_
     active_if     CYGINT_HAL_DEBUG_GDB_STUBS
     default_value 0
     requires      ! CYGSEM_HAL_USE_ROM_MONITOR
+    requires      { !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG \
+                    || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS }
     description   "
         This option causes a set of GDB stubs to be included into the
         system. On some target systems the GDB support will be
         provided by other means, for example by a ROM monitor. On
         other targets, especially when building a ROM-booting system,
         the necessary support has to go into the target library
-        itself."
+        itself. When GDB stubs are include in a configuration, HAL
+        serial drivers must also be included."
 }
 
 cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK {
@@ -73,7 +76,7 @@ cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SU
     display       "Include GDB external break support for stubs"
     active_if     CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
     requires      CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-    default_value 0
+    default_value CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
     description   "
         This option causes the GDB stub to add a serial interrupt handler
         which will listen for GDB break packets. This lets you stop the
@@ -93,7 +96,7 @@ cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SU
     requires      !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
     active_if     { CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS }
     active_if     { CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 }
-    default_value 1
+    default_value { !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS }
     description   "
         This option adds an interrupt handler for the GDB serial line
         which will listen for GDB break packets. This lets you stop the
--- a/packages/hal/common/current/cdl/hal.cdl
+++ b/packages/hal/common/current/cdl/hal.cdl
@@ -23,7 +23,7 @@
 #                                                                          
 # The Initial Developer of the Original Code is Red Hat.                   
 # Portions created by Red Hat are                                          
-# Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 # All Rights Reserved.                                                     
 # -------------------------------------------                              
 #                                                                          
@@ -162,18 +162,171 @@ cdl_package CYGPKG_HAL {
                 defines a calling interface between applications running in
                 RAM and the ROM monitor."
             compile     hal_if.c hal_misc.c
-            
+
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE {
+                display       "Inherit console settings from ROM monitor"
+	        active_if     CYGSEM_HAL_USE_ROM_MONITOR
+                default_value { CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED \
+                                && !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS }
+                description   "
+                    When this option is set, the application will inherit
+	            the console as set up by the ROM monitor. This means
+                    that the application will use whatever channel and
+                    mangling style was used by the ROM monitor when
+                    the application was launched."
+            }
+
+            cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE {
+                display       "Debug channel is configurable"
+                calculated    { CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS }
+                description   "
+                    This option is a configuration hint - it is enabled
+                    when the HAL initialization code will make use
+                    of the debug channel configuration option."
+            }
+
+            cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE {
+                display       "Console channel is configurable"
+                calculated    { !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE \
+                                && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN }
+                description   "
+                    This option is a configuration hint - it is enabled
+                    when the HAL initialization code will make use
+                    of the console channel configuration option."
+            }
+                
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE {
+                display       "Initialize whole of virtual vector table"
+                default_value { CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR || !CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED }
+                requires CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_ICTRL
+                requires CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET
+                requires CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US
+                requires CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE
+                requires CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA
+                requires CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS
+                description   "
+                    This option will cause the whole of the virtual
+                    vector table to be initialized with dummy values on
+                    startup. When this option is enabled, all the
+                    options below must also be enabled - or the
+                    table would be empty when the application
+                    launches.
+
+                    On targets where older ROM monitors without
+                    virtual vector support may still be in use, it is
+                    necessary for RAM applictions to initialize the
+                    table (since all HAL diagnostics and debug IO
+                    happens via the table). The default setting of
+                    this option will see to this, but it is still
+                    possible to override the option when a target with
+                    a newer ROM monitor is used."
+            }
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT {
+                display       "Claim virtual vector table entries by default"
+		active_if     !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE
+                default_value 1
+                description "
+                    By default most virtual vectors will be claimed by
+                    RAM startup configurations, meaning that the RAM
+                    application will provide the services. The
+                    exception is COMMS support (HAL
+                    diagnostics/debugging IO) which is left in the
+                    control of the ROM monitor.
+
+                    The reasoning behind this is to get as much of the
+                    code exercised during regular development so it
+                    is known to be working the few times a new ROM
+                    monitor or a ROM production configuration is used
+                    - COMMS are excluded only by necessity in order to
+                    avoid breaking an existing debugger connections
+                    (there may be ways around this).
+
+                    For production RAM configurations this option can
+                    be switched off, causing the appliction to rely on
+                    the ROM monitor for these services, thus
+                    saving some space.
+
+                    Individual vectors may also be left unclaimed,
+                    controlled by the below options (meaning that the
+                    associated service provided by the ROM monitor
+                    will be used)."
+            }
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_ICTRL {
+                display       "Claim ictrl/exc virtual vectors"
+                default_value { CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE \
+                                || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT }
+                description   "
+                    This option will cause the ictrl/exc virtual
+                    vectors to be claimed. These are pointers to
+                    the HAL interrupt handlers table and the HAL VSR
+                    table."
+            }
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET {
+                display       "Claim reset virtual vectors"
+                default_value { CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE \
+                                || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT }
+                description   "
+                    This option will cause the reset and kill_by_reset
+                    virtual vectors to be claimed."
+            }
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US {
+                display       "Claim delay_us virtual vector"
+                default_value { CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE \
+                                || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT }
+                description   "
+                    This option will cause the delay_us
+                    virtual vector to be claimed."
+            }
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE {
+                display       "Claim cache virtual vectors"
+                default_value { CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE \
+                                || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT }
+                description   "
+                    This option will cause the cache virtual vectors
+                    to be claimed."
+            }
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA {
+                display       "Claim data virtual vectors"
+                default_value { CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE \
+                                || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT }
+                description   "
+                    This option will cause the data virtual vectors
+                    to be claimed. These are (unused at present)
+                    pointers to CPU, board and debug information."
+            }
+
+            cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS {
+                display       "Claim comms virtual vectors"
+                default_value { CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE \
+                                || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS }
+                description   "
+                    This option will cause the communication tables
+                    that are part of the virtual vectors mechanism to
+                    be claimed. Note that doing this may cause an
+                    existing ROM monitor communication connection to
+                    be closed. For this reason, the option is disabled
+                    per default for normal application
+                    configurations."
+            }
+
             cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG {
                 display       "Do diagnostic IO via virtual vector table"
-                default_value { CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED }
+                calculated    1
                 description   "
-                    The virtual vector table provides functions for
-                    diagnostic IO. Using these both reduce the application
-                    size a bit, and allow the ROM monitor to control which
-                    communication intererface to use. Careful when enabling
-                    this option as it may cause output to disappear (if
-                    the ROM monitor does not provide the necessary
-                    services)."
+                    All HAL IO happens via the virtual vector table / comm
+                    tables when those tables are supported by the HAL.
+
+                    If so desired, the low-level IO functions can
+                    still be provided by the RAM application by
+                    enabling the CLAIM_COMMS option."
             }
         }
 
--- a/packages/hal/common/current/include/hal_if.h
+++ b/packages/hal/common/current/include/hal_if.h
@@ -26,7 +26,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -55,6 +55,9 @@
 
 #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
 
+// Architecture/var/platform may override the accessor macros.
+#include <cyg/hal/hal_arch.h>
+
 //--------------------------------------------------------------------------
 #ifndef _BSP_HANDLER_T_DEFINED
 #define _BSP_HANDLER_T_DEFINED
@@ -142,58 +145,62 @@ typedef volatile CYG_ADDRWORD hal_virtua
 // table and structure implementations have been suggested).
 
 typedef void* __comm_if_ch_data_t;
+typedef void (*__comm_if_write_t)(void* __ch_data, const cyg_uint8* __buf,
+                                  cyg_uint32 __len);
+typedef int (*__comm_if_read_t)(void* __ch_data, cyg_uint8* __buf,
+                                cyg_uint32 __len);
+typedef void (*__comm_if_putc_t)(void* __ch_data, cyg_uint8 __ch);
+typedef cyg_uint8 (*__comm_if_getc_t)(void* __ch_data);
+typedef int (*__comm_if_control_t)(void *__ch_data, 
+                                   __comm_control_cmd_t __func, ...);
+typedef int (*__comm_if_dbg_isr_t)(void *__ch_data, 
+                               int* __ctrlc, CYG_ADDRWORD __vector,
+                               CYG_ADDRWORD __data);
+typedef cyg_bool (*__comm_if_getc_timeout_t)(void* __ch_data, cyg_uint8* __ch);
+
+#ifndef CYGACC_COMM_IF_DEFINED
 #define CYGACC_COMM_IF_CH_DATA(_t_) \
  ((__comm_if_ch_data_t)((_t_)[CYGNUM_COMM_IF_CH_DATA]))
 #define CYGACC_COMM_IF_CH_DATA_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_CH_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__comm_if_write_t)(void* __ch_data, const cyg_uint8* __buf,
-                                  cyg_uint32 __len);
 #define CYGACC_COMM_IF_WRITE(_t_, _b_, _l_) \
- ((__comm_if_write_t)(((_t_))[CYGNUM_COMM_IF_WRITE]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
+ ((__comm_if_write_t)((_t_)[CYGNUM_COMM_IF_WRITE]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
 #define CYGACC_COMM_IF_WRITE_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_WRITE]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__comm_if_read_t)(void* __ch_data, cyg_uint8* __buf,
-                                cyg_uint32 __len);
 #define CYGACC_COMM_IF_READ(_t_, _b_, _l_) \
- ((__comm_if_read_t)(((_t_))[CYGNUM_COMM_IF_READ]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
+ ((__comm_if_read_t)((_t_)[CYGNUM_COMM_IF_READ]))(CYGACC_COMM_IF_CH_DATA(_t_), (_b_), (_l_))
 #define CYGACC_COMM_IF_READ_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_READ]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__comm_if_putc_t)(void* __ch_data, cyg_uint8 __ch);
 #define CYGACC_COMM_IF_PUTC(_t_, _c_) \
- ((__comm_if_putc_t)(((_t_))[CYGNUM_COMM_IF_PUTC]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
+ ((__comm_if_putc_t)((_t_)[CYGNUM_COMM_IF_PUTC]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
 #define CYGACC_COMM_IF_PUTC_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_PUTC]=(CYG_ADDRWORD)(_x_)
 
-typedef cyg_uint8 (*__comm_if_getc_t)(void* __ch_data);
 #define CYGACC_COMM_IF_GETC(_t_) \
  ((__comm_if_getc_t)((_t_)[CYGNUM_COMM_IF_GETC]))(CYGACC_COMM_IF_CH_DATA(_t_))
 #define CYGACC_COMM_IF_GETC_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_GETC]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__comm_if_control_t)(void *__ch_data, 
-                                   __comm_control_cmd_t __func, ...);
 #define CYGACC_COMM_IF_CONTROL(_t_, args...) \
- ((__comm_if_control_t)(((_t_))[CYGNUM_COMM_IF_CONTROL]))(CYGACC_COMM_IF_CH_DATA(_t_), args)
+ ((__comm_if_control_t)((_t_)[CYGNUM_COMM_IF_CONTROL]))(CYGACC_COMM_IF_CH_DATA(_t_), args)
 #define CYGACC_COMM_IF_CONTROL_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_CONTROL]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__comm_if_dbg_isr_t)(void *__ch_data, 
-                               int* __ctrlc, CYG_ADDRWORD __vector,
-                               CYG_ADDRWORD __data);
 #define CYGACC_COMM_IF_DBG_ISR(_t_, _c_, _v_, _d_) \
- ((__comm_if_dbg_isr_t)(((_t_))[CYGNUM_COMM_IF_DBG_ISR]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_), (_v_), (_d_))
+ ((__comm_if_dbg_isr_t)((_t_)[CYGNUM_COMM_IF_DBG_ISR]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_), (_v_), (_d_))
 #define CYGACC_COMM_IF_DBG_ISR_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_DBG_ISR]=(CYG_ADDRWORD)(_x_)
 
-typedef cyg_bool (*__comm_if_getc_timeout_t)(void* __ch_data, cyg_uint8* __ch);
 #define CYGACC_COMM_IF_GETC_TIMEOUT(_t_, _c_) \
- ((__comm_if_getc_timeout_t)(((_t_))[CYGNUM_COMM_IF_GETC_TIMEOUT]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
+ ((__comm_if_getc_timeout_t)((_t_)[CYGNUM_COMM_IF_GETC_TIMEOUT]))(CYGACC_COMM_IF_CH_DATA(_t_), (_c_))
 #define CYGACC_COMM_IF_GETC_TIMEOUT_SET(_t_, _x_) \
  (_t_)[CYGNUM_COMM_IF_GETC_TIMEOUT]=(CYG_ADDRWORD)(_x_)
 
+#endif // CYGACC_COMM_IF_DEFINED
+
 //--------------------------------------------------------------------------
 // Main calling interface table. Will be assigned a location by the 
 // linker script. Both ROM and RAM startup applications will know about
@@ -227,10 +234,16 @@ typedef cyg_bool (*__comm_if_getc_timeou
 
 externC volatile CYG_ADDRWORD hal_virtual_vector_table[CYGNUM_CALL_IF_TABLE_SIZE];
 
-// Table version is simply the number of the last active entry in the table
-// (except INSTALL_BPT_FN since it's so high).
-#define CYGNUM_CALL_IF_TABLE_VERSION              CYGNUM_CALL_IF_LAST_ENTRY
-
+// Table version contains version information for both the CALL table
+// itself (the number of the last active entry in the table), and the
+// COMM table (the size of the table).
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL         CYGNUM_CALL_IF_LAST_ENTRY
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL_HACK    (CYGNUM_CALL_IF_TABLE_SIZE+1)
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL_MAX     CYGNUM_CALL_IF_TABLE_SIZE
+#define CYGNUM_CALL_IF_TABLE_VERSION_COMM         CYGNUM_COMM_IF_TABLE_SIZE
+#define CYGNUM_CALL_IF_TABLE_VERSION_CALL_MASK    0x0000ffff
+#define CYGNUM_CALL_IF_TABLE_VERSION_COMM_MASK    0xffff0000
+#define CYGNUM_CALL_IF_TABLE_VERSION_COMM_shift   16
 
 
 // These are special debug/console procs IDs
@@ -251,110 +264,116 @@ externC volatile CYG_ADDRWORD hal_virtua
 // table and structure implementations have been suggested).
 
 typedef int __call_if_version_t;
+typedef void* __call_if_ictrl_table_t;
+typedef void* __call_if_exc_table_t;
+typedef bsp_handler_t *__call_if_dbg_vector_t;
+typedef bsp_handler_t __call_if_kill_vector_t;
+typedef hal_virtual_comm_table_t *__call_if_console_procs_t;
+typedef hal_virtual_comm_table_t *__call_if_debug_procs_t;
+typedef void (*__call_if_flush_dcache_t)(void *__p, int __nbytes);
+typedef void (*__call_if_flush_icache_t)(void *__p, int __nbytes);
+typedef void* __call_if_cpu_data_t;
+typedef void* __call_if_board_data_t;
+typedef int (*__call_if_sysinfo_t)(int __id, void* __ap);
+//typedef int (*__call_if_sysinfo_t)(enum bsp_info_id __id, va_list __ap);
+typedef int (*__call_if_set_debug_comm_t)(int __comm_id);
+typedef int (*__call_if_set_console_comm_t)(int __comm_id);
+typedef int (*__call_if_set_serial_baud_t)(int __comm_id, int __baud);
+typedef void* __call_if_dbg_data_t;
+typedef int (*__call_if_dbg_syscall_t) (enum dbg_syscall_ids id,
+                                        union dbg_thread_syscall_parms  *p );
+typedef void (*__call_if_reset_t)(void);
+typedef int __call_if_console_interrupt_flag_t;
+typedef void (*__call_if_delay_us_t)(cyg_int32 usecs);
+typedef void (*__call_if_install_bpt_fn_t)(void *__epc);
+
+#ifndef CYGACC_CALL_IF_DEFINED
+
 #define CYGACC_CALL_IF_VERSION() \
  ((__call_if_version_t)hal_virtual_vector_table[CYGNUM_CALL_IF_VERSION])
 #define CYGACC_CALL_IF_VERSION_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_VERSION]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_ictrl_table_t;
 #define CYGACC_CALL_IF_ICTRL_TABLE() \
  ((__call_if_ictrl_table_t)hal_virtual_vector_table[CYGNUM_CALL_IF_ICTRL_TABLE])
 #define CYGACC_CALL_IF_ICTRL_TABLE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_ICTRL_TABLE]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_exc_table_t;
 #define CYGACC_CALL_IF_EXC_TABLE() \
  ((__call_if_exc_table_t)hal_virtual_vector_table[CYGNUM_CALL_IF_EXC_TABLE])
 #define CYGACC_CALL_IF_EXC_TABLE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_EXC_TABLE]=(CYG_ADDRWORD)(_x_)
 
-typedef bsp_handler_t *__call_if_dbg_vector_t;
 #define CYGACC_CALL_IF_DBG_VECTOR() \
  ((__call_if_dbg_vector_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_VECTOR])
 #define CYGACC_CALL_IF_DBG_VECTOR_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_VECTOR]=(CYG_ADDRWORD)(_x_)
 
-typedef bsp_handler_t __call_if_kill_vector_t;
 #define CYGACC_CALL_IF_KILL_VECTOR() \
  ((__call_if_kill_vector_t)hal_virtual_vector_table[CYGNUM_CALL_IF_KILL_VECTOR])
 #define CYGACC_CALL_IF_KILL_VECTOR_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_KILL_VECTOR]=(CYG_ADDRWORD)(_x_)
 
-typedef hal_virtual_comm_table_t *__call_if_console_procs_t;
 #define CYGACC_CALL_IF_CONSOLE_PROCS() \
  ((__call_if_console_procs_t)hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_PROCS])
 #define CYGACC_CALL_IF_CONSOLE_PROCS_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_PROCS]=(CYG_ADDRWORD)(_x_)
 
-typedef hal_virtual_comm_table_t *__call_if_debug_procs_t;
 #define CYGACC_CALL_IF_DEBUG_PROCS() \
  ((__call_if_debug_procs_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DEBUG_PROCS])
 #define CYGACC_CALL_IF_DEBUG_PROCS_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DEBUG_PROCS]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_flush_dcache_t)(void *__p, int __nbytes);
 #define CYGACC_CALL_IF_FLUSH_DCACHE(_p_, _n_) \
  ((__call_if_flush_dcache_t)hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_DCACHE])((_p_), (_n_))
 #define CYGACC_CALL_IF_FLUSH_DCACHE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_DCACHE]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_flush_icache_t)(void *__p, int __nbytes);
 #define CYGACC_CALL_IF_FLUSH_ICACHE(_p_, _n_) \
  ((__call_if_flush_icache_t)hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_ICACHE])((_p_), (_n_))
 #define CYGACC_CALL_IF_FLUSH_ICACHE_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_FLUSH_ICACHE]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_cpu_data_t;
 #define CYGACC_CALL_IF_CPU_DATA() \
  ((__call_if_cpu_data_t)hal_virtual_vector_table[CYGNUM_CALL_IF_CPU_DATA])
 #define CYGACC_CALL_IF_CPU_DATA_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_CPU_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_board_data_t;
 #define CYGACC_CALL_IF_BOARD_DATA() \
  ((__call_if_board_data_t)hal_virtual_vector_table[CYGNUM_CALL_IF_BOARD_DATA])
 #define CYGACC_CALL_IF_BOARD_DATA_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_BOARD_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_sysinfo_t)(int __id, void* __ap);
-//typedef int (*__call_if_sysinfo_t)(enum bsp_info_id __id, va_list __ap);
 #define CYGACC_CALL_IF_SYSINFO(_i_, _a_) \
  ((__call_if_sysinfo_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SYSINFO])((_i_), (_a_))
 #define CYGACC_CALL_IF_SYSINFO_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SYSINFO]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_set_debug_comm_t)(int __comm_id);
 #define CYGACC_CALL_IF_SET_DEBUG_COMM(_i_) \
  ((__call_if_set_debug_comm_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SET_DEBUG_COMM])((_i_))
 #define CYGACC_CALL_IF_SET_DEBUG_COMM_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SET_DEBUG_COMM]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_set_console_comm_t)(int __comm_id);
 #define CYGACC_CALL_IF_SET_CONSOLE_COMM(_i_) \
  ((__call_if_set_console_comm_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SET_CONSOLE_COMM])((_i_))
 #define CYGACC_CALL_IF_SET_CONSOLE_COMM_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SET_CONSOLE_COMM]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_set_serial_baud_t)(int __comm_id, int __baud);
 #define CYGACC_CALL_IF_SET_SERIAL_BAUD(_i_, _b_) \
  ((__call_if_set_serial_baud_t)hal_virtual_vector_table[CYGNUM_CALL_IF_SET_SERIAL_BAUD])((_i_), (_b_))
 #define CYGACC_CALL_IF_SET_SERIAL_BAUD_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_SET_SERIAL_BAUD]=(CYG_ADDRWORD)(_x_)
 
-typedef void* __call_if_dbg_data_t;
 #define CYGACC_CALL_IF_DBG_DATA() \
  ((__call_if_dbg_data_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_DATA])
 #define CYGACC_CALL_IF_DBG_DATA_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_DATA]=(CYG_ADDRWORD)(_x_)
 
-typedef int (*__call_if_dbg_syscall_t) (enum dbg_syscall_ids id,
-                                        union dbg_thread_syscall_parms  *p );
 #define CYGACC_CALL_IF_DBG_SYSCALL() \
  ((__call_if_dbg_syscall_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_SYSCALL])
 #define CYGACC_CALL_IF_DBG_SYSCALL_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DBG_SYSCALL]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_reset_t)(void);
 #define CYGACC_CALL_IF_RESET() \
  ((__call_if_reset_t)hal_virtual_vector_table[CYGNUM_CALL_IF_RESET])()
 #define CYGACC_CALL_IF_RESET_SET(_x_) \
@@ -362,24 +381,23 @@ typedef void (*__call_if_reset_t)(void);
 #define CYGACC_CALL_IF_RESET_GET() \
  ((__call_if_reset_t)hal_virtual_vector_table[CYGNUM_CALL_IF_RESET])
 
-typedef int __call_if_console_interrupt_flag_t;
 #define CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG() \
  ((__call_if_console_interrupt_flag_t)hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_INTERRUPT_FLAG])
 #define CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_CONSOLE_INTERRUPT_FLAG]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_delay_us_t)(cyg_int32 usecs);
 #define CYGACC_CALL_IF_DELAY_US(_u_) \
  ((__call_if_delay_us_t)hal_virtual_vector_table[CYGNUM_CALL_IF_DELAY_US])((_u_))
 #define CYGACC_CALL_IF_DELAY_US_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_DELAY_US]=(CYG_ADDRWORD)(_x_)
 
-typedef void (*__call_if_install_bpt_fn_t)(void *__epc);
 #define CYGACC_CALL_IF_INSTALL_BPT_FN(_e_) \
  ((__call_if_install_bpt_fn_t)hal_virtual_vector_table[CYGNUM_CALL_IF_INSTALL_BPT_FN])((_e_))
 #define CYGACC_CALL_IF_INSTALL_BPT_FN_SET(_x_) \
  hal_virtual_vector_table[CYGNUM_CALL_IF_INSTALL_BPT_FN]=(CYG_ADDRWORD)(_x_)
 
+#endif // CYGACC_CALL_IF_DEFINED
+
 //--------------------------------------------------------------------------
 // Diag wrappers.
 externC void hal_if_diag_init(void);
@@ -394,22 +412,20 @@ externC cyg_bool   hal_ctrlc_check(CYG_A
 #define HAL_CTRLC_ISR hal_ctrlc_isr
 #define HAL_CTRLC_CHECK hal_ctrlc_check
 
+#else
+
+#if defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) \
+    || defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT)
+// Then other code might invoke this macro
+#define HAL_CTRLC_CHECK(a1,a2) (0) // Nothing, no CTRLC here
+#endif
+
 #endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
 
 //--------------------------------------------------------------------------
 // Functions provided by the HAL interface.
 externC void hal_if_init(void);
 
-//--------------------------------------------------------------------------
-// Configuration control for the interface services.
-// When this is set, code should initialize the vector table wherever
-// appropriate.
-#if	!defined(CYG_HAL_STARTUP_RAM) ||		\
-	(	defined(CYG_HAL_STARTUP_RAM) &&		\
-		!defined(CYGSEM_HAL_USE_ROM_MONITOR))
-# define CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-#endif
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_HAL_IF_H
 // End of hal_if.h
--- a/packages/hal/common/current/include/hal_stub.h
+++ b/packages/hal/common/current/include/hal_stub.h
@@ -26,7 +26,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -167,10 +167,10 @@ extern void __reset (void);
 
 // Multi-bp support.
 #ifndef __set_breakpoint
-extern int __set_breakpoint (target_register_t addr);
+extern int __set_breakpoint (target_register_t addr, target_register_t len);
 #endif
 #ifndef __remove_breakpoint
-extern int __remove_breakpoint (target_register_t addr);
+extern int __remove_breakpoint (target_register_t addr, target_register_t len);
 #endif
 
 /* Install the standard set of trap handlers for the stub. */
--- a/packages/hal/common/current/src/bplist-dynamic.c
+++ b/packages/hal/common/current/src/bplist-dynamic.c
@@ -24,7 +24,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -66,17 +66,20 @@ struct breakpoint_list {
   char old_contents [HAL_BREAKINST_SIZE];
   struct breakpoint_list *next;
   char in_memory;
+  char length;
 } *breakpoint_list = NULL;
 
+#ifndef HAL_BREAKINST_ADDR
 static HAL_BREAKINST_TYPE break_inst = HAL_BREAKINST;
-static void *_break_inst = &break_inst;
+#define HAL_BREAKINST_ADDR(x) ((void*)&break_inst)
+#endif
 
 static struct breakpoint_list bp_list [CYGNUM_HAL_BREAKPOINT_LIST_SIZE];
 static struct breakpoint_list *free_bp_list = NULL;
 static int curr_bp_num = 0;
 
 int
-__set_breakpoint (target_register_t addr)
+__set_breakpoint (target_register_t addr, target_register_t len)
 {
   struct breakpoint_list **addent = &breakpoint_list;
   struct breakpoint_list *l = breakpoint_list;
@@ -111,12 +114,14 @@ int
   newent->addr = addr;
   newent->in_memory = 0;
   newent->next = l;
+  newent->length = len;
   *addent = newent;
+
   return 0;
 }
 
 int
-__remove_breakpoint (target_register_t addr)
+__remove_breakpoint (target_register_t addr, target_register_t len)
 {
   struct breakpoint_list *l = breakpoint_list;
   struct breakpoint_list *prev = NULL;
@@ -160,12 +165,12 @@ void
 	  int len = sizeof (l->old_contents);
 	  if (__read_mem_safe (&l->old_contents[0], (void*)l->addr, len) == len)
 	    {
-	      if (__write_mem_safe (_break_inst, (void*)l->addr, len) == len)
+	      if (__write_mem_safe (HAL_BREAKINST_ADDR(l->length),
+				    (void*)l->addr, l->length) == l->length)
 		{
 		  l->in_memory = 1;
 		}
 	    }
-
 	}
       l = l->next;
     }
@@ -220,13 +225,13 @@ typedef unsigned long target_register_t;
 #endif
 
 int
-__set_breakpoint (target_register_t addr)
+__set_breakpoint (target_register_t addr, target_register_t len)
 {
   return 1;
 }
 
 int
-__remove_breakpoint (target_register_t addr)
+__remove_breakpoint (target_register_t addr, target_register_t len)
 {
   return 1;
 }
--- a/packages/hal/common/current/src/drv_api.c
+++ b/packages/hal/common/current/src/drv_api.c
@@ -167,9 +167,9 @@ interrupt_end(
 
 cyg_uint32 chain_isr(cyg_vector_t vector, CYG_ADDRWORD data)
 {
+    cyg_interrupt *p = *(cyg_interrupt **)data;
+
     CYG_REPORT_FUNCTION();
- 
-    cyg_interrupt *p = *(cyg_interrupt **)data;
 
     while( p != NULL )
     {
@@ -526,36 +526,39 @@ externC void cyg_drv_interrupt_attach( c
 
     CYG_ASSERT( intr->next == NULL , "cyg_interrupt already on a list");
 
-    cyg_uint32 index;
+    {
+        cyg_uint32 index;
 
-    HAL_TRANSLATE_VECTOR( intr->vector, index );
+        HAL_TRANSLATE_VECTOR( intr->vector, index );
 
-    if( chain_list[index] == NULL )
-    {
-        // First Interrupt on this chain, just assign it and register
-        // the chain_isr with the HAL.
+        if( chain_list[index] == NULL ) 
+        {
+            // First Interrupt on this chain, just assign it and
+            // register the chain_isr with the HAL.
         
-        chain_list[index] = intr;
+            chain_list[index] = intr;
 
-        HAL_INTERRUPT_ATTACH( intr->vector, chain_isr, &chain_list[index], NULL );
-    }
-    else
-    {
-        // There are already interrupts chained, add this one into the
-        // chain in priority order.
+            HAL_INTERRUPT_ATTACH( intr->vector, chain_isr, 
+                                  &chain_list[index], NULL );
+        } 
+        else
+        {
+            // There are already interrupts chained, add this one into
+            // the chain in priority order.
         
-        Cyg_Interrupt **p = &chain_list[index];
+            cyg_interrupt **p = &chain_list[index];
 
-        while( *p != NULL )
-        {
-            cyg_interrupt *n = *p;
-
-            if( n->priority < intr->priority ) break;
+            while( *p != NULL )
+            {
+                cyg_interrupt *n = *p;
+                
+                if( n->priority < intr->priority ) break;
             
-            p = &n->next;
+                p = &n->next;
+            }
+            intr->next = *p;
+            *p = intr;
         }
-        next = *p;
-        *p = intr;
     }
     
 #else
@@ -583,30 +586,33 @@ externC void cyg_drv_interrupt_detach( c
 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN
 
     // Remove the interrupt object from the vector chain.
-    
-    cyg_uint32 index;
-
-    HAL_TRANSLATE_VECTOR( vector, index );
 
-    cyg_interrupt **p = &chain_list[index];
+    {    
+        cyg_uint32 index;
+        cyg_interrupt **p;
 
-    while( *p != NULL )
-    {
-        cyg_interrupt *n = *p;
+        HAL_TRANSLATE_VECTOR( vector, index );
+
+        p = &chain_list[index];
 
-        if( n == intr )
+        while( *p != NULL )
         {
-            *p = intr->next;
-            break;
-        }
+            cyg_interrupt *n = *p;
             
-        p = &n->next;
-    }
+            if( n == intr )
+            {
+                *p = intr->next;
+                break;
+            }
+            
+            p = &n->next;
+        }
 
-    // If this was the last one, detach the vector.
+        // If this was the last one, detach the vector.
     
-    if( chain_list[index] == NULL )
-        HAL_INTERRUPT_DETACH( intr->vector, chain_isr );
+        if( chain_list[index] == NULL )
+            HAL_INTERRUPT_DETACH( intr->vector, chain_isr );
+    }
     
 #else
     
--- a/packages/hal/common/current/src/generic-stub.c
+++ b/packages/hal/common/current/src/generic-stub.c
@@ -1300,9 +1300,9 @@ int
           {
             mode = *(ptr++);
             if (mode == 'C')
-              __remove_breakpoint (addr);
+              __remove_breakpoint (addr,0);
             else
-              __set_breakpoint (addr);
+              __set_breakpoint (addr,0);
             strcpy (remcomOutBuffer, "OK");
           }
         else
@@ -1358,9 +1358,9 @@ int
 		    case 0:
 		      /* sw breakpoint */
 		      if (is_Z)
-			err = __set_breakpoint(addr);
+			err = __set_breakpoint(addr,length);
 		      else
-			err = __remove_breakpoint(addr);
+			err = __remove_breakpoint(addr,length);
 		      if (!err)
 			strcpy (remcomOutBuffer, "OK");
 		      else
--- a/packages/hal/common/current/src/hal_if.c
+++ b/packages/hal/common/current/src/hal_if.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -68,7 +68,10 @@ externC void init_thread_syscall(void * 
 //--------------------------------------------------------------------------
 // Implementations and function wrappers for monitor services
 
-#ifdef CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
+//----------------------------
+// Delay uS
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US
+
 static void
 delay_us(cyg_int32 usecs)
 {
@@ -103,7 +106,7 @@ delay_us(cyg_int32 usecs)
             usec_ticks -= elapsed;
         } while (usec_ticks > 0);
     }
-#else
+#else // CYGPKG_KERNEL
 #ifdef HAL_DELAY_US
     // Use a HAL feature if defined
     HAL_DELAY_US(usecs);
@@ -118,25 +121,28 @@ delay_us(cyg_int32 usecs)
         int i;
         for (i = 0; i < 10; i++);
     }
-#endif
-#endif
+#endif // HAL_DELAY_US
+#endif // CYGPKG_KERNEL
     CYGARC_HAL_RESTORE_GP();
 }
+#endif // CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US
 
+// Reset functions
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET
 static void
 reset(void)
 {
     CYGARC_HAL_SAVE_GP();
     // With luck, the platform defines some magic that will cause a hardware
     // reset.
-    HAL_STUB_PLATFORM_RESET();
+    HAL_PLATFORM_RESET();
 
-#ifdef HAL_STUB_PLATFORM_RESET_ENTRY
+#ifdef HAL_PLATFORM_RESET_ENTRY
     // If that's not the case (above is an empty statement) there may
     // be defined an address we can jump to - and effectively
     // reinitialize the system. Not quite as good as a reset, but it
     // is often enough.
-    goto *HAL_STUB_PLATFORM_RESET_ENTRY;
+    goto *HAL_PLATFORM_RESET_ENTRY;
 
 #else
 #error " no RESET_ENTRY"
@@ -159,18 +165,25 @@ kill_by_reset(int __irq_nr, void* __regs
     CYGARC_HAL_RESTORE_GP();
     return 0;
 }
+#endif
 
+//------------------------------------
+// NOP service
+#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE) || \
+    defined(CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS)
 static int
 nop_service(void)
 {
     // This is the default service. It always returns false (0), and
-    // _does_ not trigger any assertions. Clients must either cope
+    // _does not_ trigger any assertions. Clients must either cope
     // with the service failure or assert.
     return 0;
 }
+#endif
 
 //----------------------------------
 // Comm controls
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS
 
 #ifdef CYGNUM_HAL_VIRTUAL_VECTOR_AUX_CHANNELS
 #define CYGNUM_HAL_VIRTUAL_VECTOR_NUM_CHANNELS \
@@ -288,9 +301,11 @@ set_console_comm(int __comm_id)
     CYGARC_HAL_RESTORE_GP();
     return res;
 }
+#endif
 
 //----------------------------------
 // Cache functions
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE
 
 static void
 flush_icache(void *__p, int __nbytes)
@@ -315,41 +330,284 @@ flush_dcache(void *__p, int __nbytes)
 #endif
     CYGARC_HAL_RESTORE_GP();
 }
-
 #endif
 
 #if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG)
 //-----------------------------------------------------------------------------
+// GDB console output mangler (O-packetizer)
+// COMMS init function at end.
+
+// This gets called via the virtual vector console comms entry and
+// handles O-packetization. The debug comms entries are used for the
+// actual device IO.
+static cyg_uint8
+cyg_hal_diag_mangler_gdb_getc(void* __ch_data)
+{
+    cyg_uint8 __ch;
+    hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+    CYGARC_HAL_SAVE_GP();
+
+    __ch = CYGACC_COMM_IF_GETC(*__chan);
+
+    CYGARC_HAL_RESTORE_GP();
+
+    return __ch;
+}
+
+
+static void
+cyg_hal_diag_mangler_gdb_putc(void* __ch_data, cyg_uint8 c)
+{
+    static char line[100];
+    static int pos = 0;
+    CYGARC_HAL_SAVE_GP();
+
+    // No need to send CRs
+    if( c == '\r' ) return;
+
+    line[pos++] = c;
+
+    if( c == '\n' || pos == sizeof(line) )
+    {
+        CYG_INTERRUPT_STATE old;
+        hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+
+        // Disable interrupts. This prevents GDB trying to interrupt us
+        // while we are in the middle of sending a packet. The serial
+        // receive interrupt will be seen when we re-enable interrupts
+        // later.
+#if defined(CYG_HAL_STARTUP_ROM) \
+    || !defined(CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION)
+        HAL_DISABLE_INTERRUPTS(old);
+#else
+        CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old);
+#endif
+        
+        while(1)
+        {
+            static const char hex[] = "0123456789ABCDEF";
+            cyg_uint8 csum = 0, c1;
+            int i;
+        
+            CYGACC_COMM_IF_PUTC(*__chan, '$');
+            CYGACC_COMM_IF_PUTC(*__chan, 'O');
+            csum += 'O';
+            for( i = 0; i < pos; i++ )
+            {
+                char ch = line[i];
+                char h = hex[(ch>>4)&0xF];
+                char l = hex[ch&0xF];
+                CYGACC_COMM_IF_PUTC(*__chan, h);
+                CYGACC_COMM_IF_PUTC(*__chan, l);
+                csum += h;
+                csum += l;
+            }
+            CYGACC_COMM_IF_PUTC(*__chan, '#');
+            CYGACC_COMM_IF_PUTC(*__chan, hex[(csum>>4)&0xF]);
+            CYGACC_COMM_IF_PUTC(*__chan, hex[csum&0xF]);
+
+        nak:
+            c1 = CYGACC_COMM_IF_GETC(*__chan);
+
+            if( c1 == '+' ) break;
+
+            if( cyg_hal_is_break( &c1 , 1 ) ) {
+                // Caller's responsibility to react on this.
+                CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG_SET(1);
+                break;
+            }
+            if( c1 != '-' ) goto nak;
+        }
+
+        pos = 0;
+        // And re-enable interrupts
+#if defined(CYG_HAL_STARTUP_ROM) \
+    || !defined(CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION)
+        HAL_RESTORE_INTERRUPTS(old);
+#else
+        CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old);
+#endif
+    }
+
+    CYGARC_HAL_RESTORE_GP();
+}
+
+static void
+cyg_hal_diag_mangler_gdb_write(void* __ch_data,
+                               const cyg_uint8* __buf, cyg_uint32 __len)
+{
+    CYGARC_HAL_SAVE_GP();
+
+    while(__len-- > 0)
+        cyg_hal_diag_mangler_gdb_putc(__ch_data, *__buf++);
+
+    CYGARC_HAL_RESTORE_GP();
+}
+
+static void
+cyg_hal_diag_mangler_gdb_read(void* __ch_data, 
+                              cyg_uint8* __buf, cyg_uint32 __len)
+{
+    CYGARC_HAL_SAVE_GP();
+
+    while(__len-- > 0)
+        *__buf++ = cyg_hal_diag_mangler_gdb_getc(__ch_data);
+
+    CYGARC_HAL_RESTORE_GP();
+}
+
+static int
+cyg_hal_diag_mangler_gdb_control(void *__ch_data, 
+                                 __comm_control_cmd_t __func, ...)
+{
+    // Do nothing (yet).
+    return 0;
+}
+
+// This is the COMMS init function. It gets called both by the stubs
+// and diag init code to initialize the COMMS mangler channel table -
+// that's all. The callers have to decide whether to actually use this
+// channel.
+void
+cyg_hal_diag_mangler_gdb_init(void)
+{
+    hal_virtual_comm_table_t* comm;
+    int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
+
+    // Initialize mangler procs
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_MANGLER);
+    comm = CYGACC_CALL_IF_CONSOLE_PROCS();
+    CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_diag_mangler_gdb_write);
+    CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_diag_mangler_gdb_read);
+    CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_diag_mangler_gdb_putc);
+    CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_diag_mangler_gdb_getc);
+    CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_diag_mangler_gdb_control);
+    
+    // Restore the original console channel.
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
+}
+
+//-----------------------------------------------------------------------------
+// Null console output mangler
+// COMMS init function at end.
+
+// This gets called via the virtual vector console comms entry and
+// just forwards IO to the debug comms entries.
+// This differs from setting the console channel to the same as the
+// debug channel in that console output will go to the debug channel
+// even if the debug channel is changed.
+static cyg_uint8
+cyg_hal_diag_mangler_null_getc(void* __ch_data)
+{
+    cyg_uint8 __ch;
+    hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+    CYGARC_HAL_SAVE_GP();
+
+    __ch = CYGACC_COMM_IF_GETC(*__chan);
+
+    CYGARC_HAL_RESTORE_GP();
+
+    return __ch;
+}
+
+
+static void
+cyg_hal_diag_mangler_null_putc(void* __ch_data, cyg_uint8 c)
+{
+    hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+
+    CYGARC_HAL_SAVE_GP();
+
+    CYGACC_COMM_IF_PUTC(*__chan, c);
+
+    CYGARC_HAL_RESTORE_GP();
+}
+
+static void
+cyg_hal_diag_mangler_null_write(void* __ch_data,
+                                const cyg_uint8* __buf, cyg_uint32 __len)
+{
+    CYGARC_HAL_SAVE_GP();
+
+    while(__len-- > 0)
+        cyg_hal_diag_mangler_null_putc(__ch_data, *__buf++);
+
+    CYGARC_HAL_RESTORE_GP();
+}
+
+static void
+cyg_hal_diag_mangler_null_read(void* __ch_data, 
+                               cyg_uint8* __buf, cyg_uint32 __len)
+{
+    CYGARC_HAL_SAVE_GP();
+
+    while(__len-- > 0)
+        *__buf++ = cyg_hal_diag_mangler_null_getc(__ch_data);
+
+    CYGARC_HAL_RESTORE_GP();
+}
+
+static int
+cyg_hal_diag_mangler_null_control(void *__ch_data, 
+                                  __comm_control_cmd_t __func, ...)
+{
+    // Do nothing (yet).
+    return 0;
+}
+
+// This is the COMMS init function. It gets called both by the stubs
+// and diag init code to initialize the COMMS mangler channel table -
+// that's all. The callers have to decide whether to actually use this
+// channel.
+void
+cyg_hal_diag_mangler_null_init(void)
+{
+    hal_virtual_comm_table_t* comm;
+    int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
+
+    // Initialize mangler procs
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_MANGLER);
+    comm = CYGACC_CALL_IF_CONSOLE_PROCS();
+    CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_diag_mangler_null_write);
+    CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_diag_mangler_null_read);
+    CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_diag_mangler_null_putc);
+    CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_diag_mangler_null_getc);
+    CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_diag_mangler_null_control);
+    
+    // Restore the original console channel.
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
+}
+
+//-----------------------------------------------------------------------------
 // Console IO functions that adhere to the virtual vector table semantics in
 // order to ensure proper debug agent mangling when required.
 //
-// The platform HAL must specify the channel used, and provide raw IO
-// routines for that channel. The platform HAL also has the necessary
-// information to determine if the channel is already initialized by
-// a debug agent (either builtin or in ROM).
 externC void cyg_hal_plf_comms_init(void);
+
 void
 hal_if_diag_init(void)
 {
-#ifdef CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-    cyg_hal_plf_comms_init();
+#ifndef CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE
+
+#if defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
+    // Use the mangler channel, which in turn uses the debug channel.
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_MANGLER);
+
+    // Initialize the mangler channel.
+#if defined(CYGSEM_HAL_DIAG_MANGLER_GDB)
+    cyg_hal_diag_mangler_gdb_init();
+#elif defined(CYGSEM_HAL_DIAG_MANGLER_None)
+    cyg_hal_diag_mangler_null_init();
 #endif
 
-#ifdef  CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT
-#define _DEFAULT CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT
-#else
-#define _DEFAULT (CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL+1)
-#endif
-#if CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL != _DEFAULT
-    // Set console channel. This should only be done when the console channel
-    // differs from the debug channel to prevent removing the debug agent's
-    // mangler procs.
-    if (CYGACC_CALL_IF_SET_DEBUG_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT)
-        != CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL)
+#else // CYGDBG_HAL_DIAG_TO_DEBUG_CHAN
 
-        CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL);
-#endif
-#undef _DEFAULT
+    // Use an actual (raw) IO channel
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL);
+
+#endif // CYGDBG_HAL_DIAG_TO_DEBUG_CHAN
+
+#endif // CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE
 }
 
 void 
@@ -361,6 +619,13 @@ hal_if_diag_write_char(char c)
         CYGACC_COMM_IF_PUTC(*__chan, c);
     else {
         __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+
+        // FIXME: What should be done if assertions are not enabled?
+        // This is a bad bad situation - we have no means for diag
+        // output; we want to hit a breakpoint to alert the developer
+        // or something like that.
+        CYG_ASSERT(__chan, "No valid channel set");
+
         CYGACC_COMM_IF_PUTC(*__chan, c);
     }
 
@@ -380,6 +645,13 @@ hal_if_diag_read_char(char *c)
         *c = CYGACC_COMM_IF_GETC(*__chan);
     else {
         __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+
+        // FIXME: What should be done if assertions are not enabled?
+        // This is a bad bad situation - we have no means for diag
+        // output; we want to hit a breakpoint to alert the developer
+        // or something like that.
+        CYG_ASSERT(__chan, "No valid channel set");
+
         *c = CYGACC_COMM_IF_GETC(*__chan);
     }
 }
@@ -403,19 +675,28 @@ hal_ctrlc_isr_init(void)
     hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
 
 #if 1 // Prevents crash on older stubs
-    if (CYGNUM_CALL_IF_TABLE_VERSION != CYGACC_CALL_IF_VERSION())
+    int v_m;
+    // Allow only ctrl-c interrupt enabling when version in table is
+    // below legal max and above the necessary service, and _not_
+    // the value we set it to below.
+    v_m = CYGACC_CALL_IF_VERSION() & CYGNUM_CALL_IF_TABLE_VERSION_CALL_MASK;
+    if (v_m >= CYGNUM_CALL_IF_TABLE_VERSION_CALL_MAX 
+        || v_m < CYGNUM_CALL_IF_SET_DEBUG_COMM
+        || v_m == CYGNUM_CALL_IF_TABLE_VERSION_CALL_HACK)
         return;
 
     // Now trash that value - otherwise downloading an image with
-    // builtin stubs on a board with older stubs may cause all
-    // subsequent runs to (wrongly) fall through to the below code.
-    // If there is a new stub on the board, it will reinitialize the
-    // version field on reset.
-    // Yes, this is a gross hack!
-    CYGACC_CALL_IF_VERSION_SET(CYGNUM_CALL_IF_TABLE_VERSION+1);
+    // builtin stubs on a board with older stubs (which will cause the
+    // version to be set to VERSION_CALL) may cause all subsequent
+    // runs to (wrongly) fall through to the below code.  If there is
+    // a new stub on the board, it will reinitialize the version field
+    // on reset.  Yes, this is a gross hack!
+    CYGACC_CALL_IF_VERSION_SET(CYGNUM_CALL_IF_TABLE_VERSION_CALL_HACK);
 #endif
 
-    CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_IRQ_ENABLE);
+    // We can only enable interrupts on a valid debug channel.
+    if (__chan)
+        CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_IRQ_ENABLE);
 #endif
 }
 
@@ -423,28 +704,32 @@ cyg_uint32
 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data)
 {
     hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
-    int isr_ret, ctrlc = 0;
+    int isr_ret = 0, ctrlc = 0;
 
-    isr_ret = CYGACC_COMM_IF_DBG_ISR(*__chan, &ctrlc, vector, data);
-    if (ctrlc)
-        cyg_hal_user_break( (CYG_ADDRWORD *)hal_saved_interrupt_state );
+    if (__chan) {
+        isr_ret = CYGACC_COMM_IF_DBG_ISR(*__chan, &ctrlc, vector, data);
+        if (ctrlc)
+            cyg_hal_user_break( (CYG_ADDRWORD *)hal_saved_interrupt_state );
+    }
     return isr_ret;
 }
 
 cyg_bool
 hal_ctrlc_check(CYG_ADDRWORD vector, CYG_ADDRWORD data)
 {
-    hal_virtual_comm_table_t* chan = CYGACC_CALL_IF_DEBUG_PROCS();
-    int gdb_vector = -1;
+    hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+    int gdb_vector = vector-1;
     int isr_ret, ctrlc = 0;
 
     // This check only to avoid crash on older stubs in case of unhandled
     // interrupts. It is a bit messy, but required in a transition period.
-    if (CYGNUM_CALL_IF_TABLE_VERSION+1 == CYGACC_CALL_IF_VERSION()) {
-        gdb_vector = CYGACC_COMM_IF_CONTROL(*chan, __COMMCTL_DBG_ISR_VECTOR);
+    if (__chan && 
+        (CYGNUM_CALL_IF_TABLE_VERSION_CALL_HACK == 
+         (CYGACC_CALL_IF_VERSION() & CYGNUM_CALL_IF_TABLE_VERSION_CALL_MASK))){
+        gdb_vector = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_DBG_ISR_VECTOR);
     }
     if (vector == gdb_vector) {
-        isr_ret = CYGACC_COMM_IF_DBG_ISR(*chan, &ctrlc, vector, data);
+        isr_ret = CYGACC_COMM_IF_DBG_ISR(*__chan, &ctrlc, vector, data);
         if (ctrlc)
             cyg_hal_user_break( (CYG_ADDRWORD *)hal_saved_interrupt_state );
         return true;
@@ -461,61 +746,88 @@ hal_ctrlc_check(CYG_ADDRWORD vector, CYG
 void
 hal_if_init(void)
 {
-    // Set up services provided by monitors
-#ifdef CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE
     {
-        int i, j;
+        int i;
+
         // Initialize tables with the NOP service.
         // This should only be done for service routine entries - data
         // pointers should be NULLed.
         for (i = 0; i < CYGNUM_CALL_IF_TABLE_SIZE; i++)
             hal_virtual_vector_table[i] = (CYG_ADDRWORD) &nop_service;
+        
+        // Version number
+        CYGACC_CALL_IF_VERSION_SET(CYGNUM_CALL_IF_TABLE_VERSION_CALL
+                                   |(CYGNUM_CALL_IF_TABLE_VERSION_COMM<<CYGNUM_CALL_IF_TABLE_VERSION_COMM_shift));
+    }
+#endif
 
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_ICTRL
+    // ICTRL and EXC tables - I assume these to be the equivalents of
+    // ISR and VSR tables.
+    CYGACC_CALL_IF_ICTRL_TABLE_SET(hal_interrupt_handlers);
+    CYGACC_CALL_IF_EXC_TABLE_SET(hal_vsr_table);
+#endif
+
+    // Miscellaneous services with wrappers in this file.
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET
+    CYGACC_CALL_IF_RESET_SET(reset);
+    CYGACC_CALL_IF_KILL_VECTOR_SET(kill_by_reset);
+#endif
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US
+    CYGACC_CALL_IF_DELAY_US_SET(delay_us);
+#endif
+
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_CACHE
+    // Cache functions
+    CYGACC_CALL_IF_FLUSH_ICACHE_SET(flush_icache);
+    CYGACC_CALL_IF_FLUSH_DCACHE_SET(flush_dcache);
+#endif
+
+    // Data entries not currently supported in eCos
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA
+    CYGACC_CALL_IF_CPU_DATA_SET(0);
+    CYGACC_CALL_IF_BOARD_DATA_SET(0);
+    CYGACC_CALL_IF_DBG_DATA_SET(0);
+#endif
+
+    // Comm controls
+#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS
+    {
+        int i, j;
+
+        // Clear out tables with safe dummy function.
         for (j = 0; j < CYGNUM_HAL_VIRTUAL_VECTOR_NUM_CHANNELS+1; j++)
             for (i = 0; i < CYGNUM_COMM_IF_TABLE_SIZE; i++)
                 comm_channels[j][i] = (CYG_ADDRWORD) &nop_service;
 
-
-        // Fill in supported services.
-
-        // Version number
-        CYGACC_CALL_IF_VERSION_SET(CYGNUM_CALL_IF_TABLE_VERSION);
-
-        // ICTRL and EXC tables - I assume these to be the equivalents of
-        // ISR and VSR tables.
-        CYGACC_CALL_IF_ICTRL_TABLE_SET(hal_interrupt_handlers);
-        CYGACC_CALL_IF_EXC_TABLE_SET(hal_vsr_table);
-
-        // Miscellaneous services with wrappers in this file.
-        CYGACC_CALL_IF_RESET_SET(reset);
-        CYGACC_CALL_IF_KILL_VECTOR_SET(kill_by_reset);
-        CYGACC_CALL_IF_DELAY_US_SET(delay_us);
-
-        // Comm controls
+        // Set accessor functions
         CYGACC_CALL_IF_SET_DEBUG_COMM_SET(set_debug_comm);
         CYGACC_CALL_IF_SET_CONSOLE_COMM_SET(set_console_comm);
 
-        // Cache functions
-        CYGACC_CALL_IF_FLUSH_ICACHE_SET(flush_icache);
-        CYGACC_CALL_IF_FLUSH_DCACHE_SET(flush_dcache);
-
-        // Clear debug and console procs entries. If platform has been
-        // configured to use a separate console port, it will be set
-        // up later (hal_diag_init). Alternatively (if this is a stub)
-        // it will be initialized with the output mangler
-        // (O-packetizer for GDB) which uses the debug comms.
+        // Initialize console/debug procs. Note that these _must_
+        // be set to empty before the comms init call.
         set_debug_comm(CYGNUM_CALL_IF_SET_COMM_ID_EMPTY);
         set_console_comm(CYGNUM_CALL_IF_SET_COMM_ID_EMPTY);
 
-        // Data entries not currently supported in eCos
-        CYGACC_CALL_IF_CPU_DATA_SET(0);
-        CYGACC_CALL_IF_BOARD_DATA_SET(0);
-        CYGACC_CALL_IF_DBG_DATA_SET(0);
+        // Initialize channels. This used to be done in
+        // hal_diag_init() and the stub initHardware() functions, but
+        // it makes more sense to have here.
+        cyg_hal_plf_comms_init();
+
+        // Always set the debug channel. If stubs are included, it is
+        // necessary. If no stubs are included it does not hurt and is
+        // likely to be required by the hal_if_diag_init code anyway
+        // as it may rely on it if using a mangler.
+        set_debug_comm(CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL);
+        // Set console channel to a safe default. hal_if_diag_init
+        // will override with console channel or mangler if necessary.
+        set_console_comm(CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL);
     }
-#endif
 
     // Reset console interrupt flag.
     CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG_SET(0);
+#endif
 
     // Set up services provided by clients
 #if defined(CYGFUN_HAL_COMMON_KERNEL_SUPPORT)   &&  \
--- a/packages/hal/common/current/src/hal_misc.c
+++ b/packages/hal/common/current/src/hal_misc.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -136,18 +136,20 @@ hal_default_isr(CYG_ADDRWORD vector, CYG
     // This check only to avoid crash on older stubs in case of unhandled
     // interrupts. It is a bit messy, but required in a transition period.
 #ifndef CYGSEM_HAL_ROM_MONITOR
-    if (CYGNUM_CALL_IF_TABLE_VERSION+1 == CYGACC_CALL_IF_VERSION())
+    if (CYGNUM_CALL_IF_TABLE_VERSION_CALL_HACK ==
+        (CYGACC_CALL_IF_VERSION() & CYGNUM_CALL_IF_TABLE_VERSION_CALL_MASK))
 #endif
     {
-        hal_virtual_comm_table_t* comm = CYGACC_CALL_IF_DEBUG_PROCS();
-        gdb_vector = CYGACC_COMM_IF_CONTROL(*comm, __COMMCTL_DBG_ISR_VECTOR);
+        hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
+        if (__chan)
+            gdb_vector = CYGACC_COMM_IF_CONTROL(*__chan, __COMMCTL_DBG_ISR_VECTOR);
     }
     if( vector == gdb_vector )
 #else
     // Old code using hardwired channels. This should go away eventually.
     if( vector == CYGHWR_HAL_GDB_PORT_VECTOR )
 #endif
-#endif        
+#endif
     {
         result = HAL_CTRLC_ISR( vector, data );
         if( 0 != result ) return result;
--- a/packages/hal/common/current/src/hal_stub.c
+++ b/packages/hal/common/current/src/hal_stub.c
@@ -323,136 +323,6 @@ interruptible(int state)
     }
 }
 
-#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
-//-----------------------------------------------------------------------------
-// GDB O-packetizer function.
-
-// This gets called via the virtual vector debug comms entry and
-// handles O-packetization. The debug comms entries are used for the
-// actual device IO.
-
-static cyg_uint8
-cyg_hal_gdb_diag_getc(void* __ch_data)
-{
-    cyg_uint8 __ch;
-    hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
-    CYGARC_HAL_SAVE_GP();
-
-    __ch = CYGACC_COMM_IF_GETC(*__chan);
-
-    CYGARC_HAL_RESTORE_GP();
-
-    return __ch;
-}
-
-
-static void
-cyg_hal_gdb_diag_putc(void* __ch_data, cyg_uint8 c)
-{
-    static char line[100];
-    static int pos = 0;
-    CYGARC_HAL_SAVE_GP();
-
-    // No need to send CRs
-    if( c == '\r' ) return;
-
-    line[pos++] = c;
-
-    if( c == '\n' || pos == sizeof(line) )
-    {
-        CYG_INTERRUPT_STATE old;
-        hal_virtual_comm_table_t* __chan = CYGACC_CALL_IF_DEBUG_PROCS();
-
-        // Disable interrupts. This prevents GDB trying to interrupt us
-        // while we are in the middle of sending a packet. The serial
-        // receive interrupt will be seen when we re-enable interrupts
-        // later.
-#ifdef CYG_HAL_STARTUP_ROM
-        HAL_DISABLE_INTERRUPTS(old);
-#else
-        CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old);
-#endif
-        
-        while(1)
-        {
-            static const char hex[] = "0123456789ABCDEF";
-            cyg_uint8 csum = 0, c1;
-            int i;
-        
-            CYGACC_COMM_IF_PUTC(*__chan, '$');
-            CYGACC_COMM_IF_PUTC(*__chan, 'O');
-            csum += 'O';
-            for( i = 0; i < pos; i++ )
-            {
-                char ch = line[i];
-                char h = hex[(ch>>4)&0xF];
-                char l = hex[ch&0xF];
-                CYGACC_COMM_IF_PUTC(*__chan, h);
-                CYGACC_COMM_IF_PUTC(*__chan, l);
-                csum += h;
-                csum += l;
-            }
-            CYGACC_COMM_IF_PUTC(*__chan, '#');
-            CYGACC_COMM_IF_PUTC(*__chan, hex[(csum>>4)&0xF]);
-            CYGACC_COMM_IF_PUTC(*__chan, hex[csum&0xF]);
-
-        nak:
-            c1 = CYGACC_COMM_IF_GETC(*__chan);
-
-            if( c1 == '+' ) break;
-
-            if( cyg_hal_is_break( &c1 , 1 ) ) {
-                // Caller's responsibility to react on this.
-                CYGACC_CALL_IF_CONSOLE_INTERRUPT_FLAG_SET(1);
-                break;
-            }
-            if( c1 != '-' ) goto nak;
-        }
-
-        pos = 0;
-        // And re-enable interrupts
-#ifdef CYG_HAL_STARTUP_ROM
-        HAL_RESTORE_INTERRUPTS(old);
-#else
-        CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old);
-#endif
-    }
-
-    CYGARC_HAL_RESTORE_GP();
-}
-
-static void
-cyg_hal_gdb_diag_write(void* __ch_data, const cyg_uint8* __buf, 
-                       cyg_uint32 __len)
-{
-    CYGARC_HAL_SAVE_GP();
-
-    while(__len-- > 0)
-        cyg_hal_gdb_diag_putc(__ch_data, *__buf++);
-
-    CYGARC_HAL_RESTORE_GP();
-}
-
-static void
-cyg_hal_gdb_diag_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len)
-{
-    CYGARC_HAL_SAVE_GP();
-
-    while(__len-- > 0)
-        *__buf++ = cyg_hal_gdb_diag_getc(__ch_data);
-
-    CYGARC_HAL_RESTORE_GP();
-}
-
-static int
-cyg_hal_gdb_diag_control(void *__ch_data, __comm_control_cmd_t __func, ...)
-{
-    // Do nothing (yet).
-    return 0;
-}
-#endif
-
-
 //-----------------------------------------------------------------------------
 // eCos stub entry and exit magic.
 
@@ -565,33 +435,6 @@ initHardware (void)
     // Get serial port initialized.
     HAL_STUB_PLATFORM_INIT_SERIAL();
 
-#ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
-    {
-        hal_virtual_comm_table_t* comm;
-        int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
-
-        // Initialize mangler procs
-        CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_MANGLER);
-        comm = CYGACC_CALL_IF_CONSOLE_PROCS();
-        CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_gdb_diag_write);
-        CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_gdb_diag_read);
-        CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_gdb_diag_putc);
-        CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_gdb_diag_getc);
-        CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_gdb_diag_control);
-
-        // Now either restore the previous console channel, or let the
-        // mangler stay in its place. The latter happens if the
-        // console channel was previously unspecified, or if the
-        // previous channel matches the used for GDB communication.
-        if (CYGNUM_CALL_IF_SET_COMM_ID_EMPTY != cur
-            && CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL != cur)
-            CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
-
-        // Set the debug channel.
-        CYGACC_CALL_IF_SET_DEBUG_COMM(CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL);
-    }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
-
 #ifdef HAL_STUB_PLATFORM_INIT
     // If the platform defines any initialization code, call it here.
     HAL_STUB_PLATFORM_INIT();
@@ -614,7 +457,7 @@ void
     if (__rom_reset)
         __rom_reset();
 #else
-    HAL_STUB_PLATFORM_RESET();
+    HAL_PLATFORM_RESET();
 #endif
 }
 
--- a/packages/hal/i386/pc/current/ChangeLog
+++ b/packages/hal/i386/pc/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Reset macros moved
+	* include/plf_intr.h: to this file.
+
 2000-12-05  Hugo Tyson  <hmt@redhat.com>
 
 	* src/plf_misc.c (hal_pc_fpe_dsr): Raise the base stack address by
--- a/packages/hal/i386/pc/current/include/plf_intr.h
+++ b/packages/hal/i386/pc/current/include/plf_intr.h
@@ -54,8 +54,10 @@
 //
 //==========================================================================
 
+//----------------------------------------------------------------------------
+// Reset.
+#define HAL_PLATFORM_RESET()             hal_pc_reset()
+
 //---------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
-
-
--- a/packages/hal/i386/pc/current/include/plf_stub.h
+++ b/packages/hal/i386/pc/current/include/plf_stub.h
@@ -75,10 +75,6 @@ externC void hal_pc_reset(void) ;
 
 #define HAL_STUB_PLATFORM_INIT()        hal_pc_stubs_init()
 
-//----------------------------------------------------------------------------
-// Reset.
-#define HAL_STUB_PLATFORM_RESET()             hal_pc_reset()
-
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
 //-----------------------------------------------------------------------------
--- a/packages/hal/mips/arch/current/ChangeLog
+++ b/packages/hal/mips/arch/current/ChangeLog
@@ -1,90 +1,10 @@
-2001-01-25  Jesper Skov  <jskov@redhat.com>
-
-	* include/arch.inc: Allow hal_intc_decode to be defined by variant
-	or platform.
-
-2000-12-06  Jesper Skov  <jskov@redhat.com>
-
-	* include/hal_intr.h (HAL_DELAY_US): Added.
-	* src/hal_misc.c (hal_delay_us): Added. And fixed to work with an
-	incrementer that ticks at the pipeline clock rate.
-
-2000-12-05  Jonathan Larmour  <jlarmour@redhat.com>
-
-	* include/hal_cache.h: IWAY->_IWAY, DWAY->_DWAY for namespace 
-	cleanliness
-
-2000-12-05  Jesper Skov  <jskov@redhat.com>
-
-	* include/hal_cache.h: Use variant specific method to select cache
-	WAY.
+2001-02-12  Nick Garnett  <nickg@cygnus.co.uk>
 
-2000-10-20  Jesper Skov  <jskov@redhat.com>
-
-	* src/hal_misc.c: Update __mem_fault_handler declaration.
-
-2000-09-15  Jesper Skov  <jskov@redhat.com>
-
-	* include/hal_intr.h (HAL_DEFAULT_ISR): Fix warning.
-	(HAL_DEFAULT_ISR): Undo that change.
-
-2000-09-14  Jesper Skov  <jskov@redhat.com>
-
-	* include/hal_intr.h: Only define _FPE when there's a FPU.
-
-2000-09-13  Jesper Skov  <jskov@redhat.com>
-
-	* include/hal_intr.h (HAL_VSR_SET_TO_ECOS_HANDLER): Fix compiler
-	warning.
-
-	* src/vectors.S: Fully decode TLB related exceptions.
-	* src/hal_misc.c (cyg_hal_exception_handler): Undid below change.
+	* include/mips.inc: Added some extra CP0 register names.
 
-	* src/hal_misc.c (cyg_hal_exception_handler): Base vector
-	calculation on cause register, not the provided vector value.
-
-2000-09-12  Jesper Skov  <jskov@redhat.com>
-
-	* include/hal_intr.h: Added definition for decoded FPU
-	exceptions.
-
-	* src/hal_misc.c (cyg_hal_exception_handler): Decode FPU
-	exceptions.
-
-2000-09-07  Jesper Skov  <jskov@redhat.com>
-
-	* include/basetype.h: Removed change from yesterday.
-
-	* include/hal_intr.h (CYGNUM_HAL_EXCEPTION_FPU): Associated to FPE
-	exceptions.
-
-2000-09-06  Jesper Skov  <jskov@redhat.com>
+2001-02-09  Jesper Skov  <jskov@redhat.com>
 
-	* include/basetype.h: Override the alignment macros for the MIPS
-	architecture. The MIPS compiler only alows a maximum of 4 bytes
-	of alignment where as the default is 8
-
-	* include/hal_cache.h (_HAL_ASM_DCACHE_ALL_WAYS): Force d-cache
-	selection.
-
-2000-09-01  Jonathan Larmour  <jlarmour@redhat.com>
-
-	* include/mips-stub.h: No longer need to define
-	CYGARC_REGSIZE_DIFFERS_FROM_TARGET_REGISTER_T
-	(CYGARC_SIGN_EXTEND_REGISTERS): 
-
-        * include/mips-stub.h: Change vr4300 register sizes to use 32-bit
-        target_register_t, and tell the generic stub to use sign extension.
- 	Ditto for tx49
-	* include/hal_cache.h (_HAL_ASM_SET_MIPS_ISA): Don't use pasting
-	when it doesn't result in a preprocessing token. Just use string
-	concatenation.
-
-2000-07-21  Drew Moseley  <dmoseley@redhat.com>
-
-	* src/vectors.S: Only jump uncached to _start if
-	CYGARC_START_FUNC_UNCACHED is defined.
-
+	* src/vectors.S: Small tweak of comments to work around tools problem
 2000-07-14  Drew Moseley  <dmoseley@redhat.com>
 
 	* src/vectors.S: Added hal_reset_vector_first_code and
--- a/packages/hal/mips/arch/current/include/arch.inc
+++ b/packages/hal/mips/arch/current/include/arch.inc
@@ -54,19 +54,36 @@
 
 ##-----------------------------------------------------------------------------	
 ## Set up the value for the initial status register
-	
+
+
+# Either the variant or platform may define an INITIAL_SR of its
+#own. If not then provide a default value here.
+
 #ifndef INITIAL_SR
 
+# Both the variant and platform HALs have the option to add some bits
+# to the default status register. If they do not choose to do so,
+# supply default zeroes here.
+
+# ifndef INITIAL_SR_VAR
+#  define INITIAL_SR_VAR 0x00000000
+# endif
+# ifndef INITIAL_SR_PLF
+#  define INITIAL_SR_PLF 0x00000000
+# endif
+
 #if defined(CYG_HAL_STARTUP_RAM)
 # if defined(CYGPKG_HAL_MIPS_SIM) || !defined(CYGSEM_HAL_USE_ROM_MONITOR)
-#  define INITIAL_SR	0x1000ff00	/* CP0 usable, Ints enabled, master interrupt disable	*/
+#  define INITIAL_SR_ARCH 	0x1000ff00 /* CP0 usable, Ints enabled, master interrupt disable */
 # else
-#  define INITIAL_SR	0x1040ff00	/* as above + ROM vectors used	*/
+#  define INITIAL_SR_ARCH 	0x1040ff00	/* as above + ROM vectors used	*/
 # endif	
 #elif defined(CYG_HAL_STARTUP_ROM)
-# define INITIAL_SR	0x1040ff00	/* as above + ROM vectors used	*/
+# define INITIAL_SR_ARCH	0x1040ff00	/* as above + ROM vectors used	*/
 #endif
 
+#define INITIAL_SR 	(INITIAL_SR_ARCH|INITIAL_SR_VAR|INITIAL_SR_PLF)
+
 #endif
 
 ##-----------------------------------------------------------------------------
@@ -83,14 +100,17 @@
 ## HAL_SavedRegisters in hal_arch.h. Do not change this without changing the
 ## layout there, or viceversa.	
 
+# Size of registers that change size between 32 and 64 bit implementations
 #ifdef CYGHWR_HAL_MIPS_64BIT
 # define mips_regsize 	8
 #else
 # define mips_regsize 	4
 #endif
 
+# Size of registers that stay the same size in all implementations
 # define mips_regsize32	4
 
+# Size of FPU registers.
 #if defined(CYGHWR_HAL_MIPS_FPU)
 # if defined(CYGHWR_HAL_MIPS_FPU_64BIT)
 #  define mips_fpuregsize 8
@@ -111,18 +131,22 @@
 # define mipsreg_fppad  (mipsreg_fcr31+mips_regsize32)
 # define mipsreg_vector	(mipsreg_fppad+mips_regsize32)
 #else
-# define mipsreg_vector	(mipsreg_lo+mips_regsize32)
+# define mipsreg_vector	(mipsreg_lo+mips_regsize)
 #endif
-#define	mipsreg_pc	(mipsreg_vector+mips_regsize32)
-#define	mipsreg_sr	(mipsreg_pc+mips_regsize32)
-#define	mipsreg_cachectrl (mipsreg_sr+mips_regsize32)
+#define	mipsreg_sr	(mipsreg_vector+mips_regsize32)
+#define	mipsreg_pc	(mipsreg_sr+mips_regsize32)
+#define	mipsreg_cachectrl (mipsreg_pc+mips_regsize)
 #define	mipsreg_cause	(mipsreg_cachectrl+mips_regsize32)
 #define	mipsreg_badvr	(mipsreg_cause+mips_regsize32)
-#define	mipsreg_prid	(mipsreg_badvr+mips_regsize32)
+#define	mipsreg_prid	(mipsreg_badvr+mips_regsize)
 #define	mipsreg_config	(mipsreg_prid+mips_regsize32)
 #define	mipsreg_size	(mipsreg_config+mips_regsize32)
 
-#define mips_exception_decrement	(mipsreg_size*2)
+# The following expression ensures that the decrement is always a
+# multiple of 16 bytes. This is a requirement of the MEABI used in
+# MIPS32/64 targets.
+
+#define mips_exception_decrement	((mipsreg_size*2)&~0xF)
 
 ##-----------------------------------------------------------------------------
 ## Minimal stack frame size uses to call functions from asm.
@@ -155,7 +179,7 @@
 
 	mtc0	zero,cause		# zero cause reg
 	nop
-	la	v0,INITIAL_SR		# initialize status register
+	la	v0,INITIAL_SR 		# initialize status register
 	mtc0	v0,status
 	nop
 	nop
@@ -258,7 +282,7 @@
 	nop
 	nop
 	nop
-	mtc0	\pc,epc				# put PC in EPC
+	mvatc0	\pc,epc				# put PC in EPC
 	nop
 	nop
 	nop
@@ -295,8 +319,11 @@
 
 #ifndef CYGPKG_HAL_MIPS_INTC_DECODE_DEFINED
 	.macro	hal_intc_decode vnum
+	mfc0	v1,status		# get status register (interrupt mask)
+	nop				# delay slot
 	mfc0	v0,cause		# get cause register
 	nop				# delay slot
+	and	v0,v0,v1		# apply interrupt mask
 	srl	v0,v0,10		# shift interrupt bits down
 	andi	v0,v0,0x7f		# isolate 6 interrupt bits
 	la	v1,hal_intc_translation_table
@@ -377,6 +404,30 @@ hal_intc_translation_table:
 	ld	\reg,(mipsreg_regs+29*mips_regsize)(\ptr)
 	.endm
 
+	.macro sva reg,val
+	sd	\reg,\val
+	.endm
+
+	.macro lva reg,val
+	ld	\reg,\val
+	.endm
+
+	.macro mvafc0 gpr,cpr
+	dmfc0	\gpr,\cpr
+	.endm
+
+	.macro mvatc0 gpr,cpr
+	dmtc0	\gpr,\cpr
+	.endm
+
+	.macro lpc reg,ptr
+	ld	\reg,(mipsreg_pc)(\ptr)
+	.endm
+
+	.macro spc reg,ptr
+	sd	\reg,(mipsreg_pc)(\ptr)
+	.endm
+
 #else
 
 	.macro sgpr reg,ptr
@@ -411,9 +462,21 @@ hal_intc_translation_table:
 	lw	\reg,(mipsreg_regs+29*mips_regsize)(\ptr)
 	.endm
 
-#endif
+	.macro sva reg,val
+	sw	\reg,\val
+	.endm
+
+	.macro lva reg,val
+	lw	\reg,\val
+	.endm
 
-# PC is always 32-bit for us
+	.macro mvafc0 gpr,cpr
+	mfc0	\gpr,\cpr
+	.endm
+
+	.macro mvatc0 gpr,cpr
+	mtc0	\gpr,\cpr
+	.endm
 
 	.macro lpc reg,ptr
 	lw	\reg,(mipsreg_pc)(\ptr)
@@ -422,6 +485,7 @@ hal_intc_translation_table:
 	.macro spc reg,ptr
 	sw	\reg,(mipsreg_pc)(\ptr)
 	.endm
+#endif
 
 #------------------------------------------------------------------------------
 # FPU macros.
--- a/packages/hal/mips/arch/current/include/hal_arch.h
+++ b/packages/hal/mips/arch/current/include/hal_arch.h
@@ -54,6 +54,9 @@
 // Processor saved states:
 // The layout of this structure is also defined in "arch.inc", for assembly
 // code. Do not change this without changing that (or vice versa).
+// Notes: This structure is carefully laid out. It is a multiple of 8
+// bytes and the pc and badvr fields are positioned to ensure that
+// they are on 8 byte boundaries. 
 
 #ifdef CYGHWR_HAL_MIPS_64BIT
 # define CYG_HAL_MIPS_REG CYG_WORD64
@@ -81,25 +84,25 @@ typedef struct
     CYG_HAL_MIPS_REG    lo;             /* lo word of mpy/div reg       */
 #ifdef CYGHWR_HAL_MIPS_FPU
     CYG_HAL_FPU_REG     f[32];          /* FPU registers                */
-    CYG_ADDRWORD        fcr31;          /* FPU control/status register  */
-    CYG_ADDRWORD        fppad;          /* Dummy location to make this  */
+    CYG_WORD32          fcr31;          /* FPU control/status register  */
+    CYG_WORD32          fppad;          /* Dummy location to make this  */
                                         /* structure a multiple of 8    */
                                         /* bytes long.                  */
 #endif
     
     // These are only saved for exceptions and interrupts
-    CYG_ADDRWORD        vector;         /* Vector number                */
-    CYG_ADDRWORD        pc;             /* Program Counter              */
-    CYG_ADDRWORD        sr;             /* Status Reg                   */
-    CYG_ADDRWORD        cache;          /* Cache control register       */
+    CYG_WORD32          vector;         /* Vector number                */
+    CYG_WORD32          sr;             /* Status Reg                   */
+    CYG_HAL_MIPS_REG    pc;             /* Program Counter              */
+    CYG_WORD32          cache;          /* Cache control register       */
 
 
     // These are only saved for exceptions, and are not restored
     // when continued.
-    CYG_ADDRWORD        cause;          /* Exception cause register     */
-    CYG_ADDRWORD        badvr;          /* Bad virtual address reg      */
-    CYG_ADDRWORD        prid;           /* Processor Version            */
-    CYG_ADDRWORD        config;         /* Config register              */
+    CYG_WORD32          cause;          /* Exception cause register     */
+    CYG_HAL_MIPS_REG    badvr;          /* Bad virtual address reg      */
+    CYG_WORD32          prid;           /* Processor Version            */
+    CYG_WORD32          config;         /* Config register              */
 } HAL_SavedRegisters;
 
 //--------------------------------------------------------------------------
--- a/packages/hal/mips/arch/current/include/hal_intr.h
+++ b/packages/hal/mips/arch/current/include/hal_intr.h
@@ -498,6 +498,8 @@ CYG_MACRO_END
 
 //--------------------------------------------------------------------------
 // Microsecond delay function provided in hal_misc.c
+externC void hal_delay_us(int us);
+
 #define HAL_DELAY_US(n)          hal_delay_us(n)
 
 //--------------------------------------------------------------------------
--- a/packages/hal/mips/arch/current/include/mips-stub.h
+++ b/packages/hal/mips/arch/current/include/mips-stub.h
@@ -47,6 +47,8 @@
 
 #include <pkgconf/system.h>
 
+#include <cyg/hal/hal_io.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -115,6 +117,10 @@ void __single_step (void);
 /* Clear the single-step state. */
 void __clear_single_step (void);
 
+extern int __is_bsp_syscall(void);
+
+extern int hal_syscall_handler(void);
+    
 /* If the breakpoint we hit is in the breakpoint() instruction, return a
    non-zero value. */
 #ifndef __is_breakpoint_function
--- a/packages/hal/mips/arch/current/include/mips.inc
+++ b/packages/hal/mips/arch/current/include/mips.inc
@@ -139,6 +139,13 @@
 #define	epc		$14	// Exception pc value
 #define prid		$15	// processor ID
 #define config0		$16	// Config register 0
+#define lladdr          $17     // LLAdddr
+#define xcontext        $20     // XContext register
+#define ecc             $26     // Error Checking and Correcting
+#define cache_err       $27     // Cache Error and Status
+#define taglo           $28     // TagLo
+#define taghi           $29     // TagHi
+#define error_epc       $30     // Error exception pc value
 
 
 #------------------------------------------------------------------------------
--- a/packages/hal/mips/arch/current/src/mips-stub.c
+++ b/packages/hal/mips/arch/current/src/mips-stub.c
@@ -46,6 +46,10 @@
 
 #include <pkgconf/hal.h>
 
+#ifdef CYGPKG_REDBOOT
+#include <pkgconf/redboot.h>
+#endif
+
 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
 #include <cyg/hal/hal_stub.h>
@@ -54,6 +58,7 @@
 #include <cyg/hal/mips-regs.h>
 
 #include <cyg/hal/hal_arch.h>
+#include <cyg/hal/hal_intr.h>
 #include <cyg/hal/mips_opcode.h>
 
 typedef unsigned long t_inst;
@@ -171,6 +176,13 @@ int __get_trap_number (void)
   return (get_register (CAUSE) & CAUSE_EXCMASK) >> CAUSE_EXCSHIFT;
 }
 
+#if defined(CYGSEM_REDBOOT_BSP_SYSCALLS)
+int __is_bsp_syscall(void) 
+{
+    return __get_trap_number() == EXC_SYS;
+}
+#endif
+
 /* Set the currently-saved pc register value to PC. This also updates NPC
    as needed. */
 
--- a/packages/hal/mips/arch/current/src/vectors.S
+++ b/packages/hal/mips/arch/current/src/vectors.S
@@ -241,7 +241,7 @@ FUNC_START(__warm_start)
 #	hal_diag_init
 
 	hal_diag_writec '$'
-	mfc0	a0,$30			# get ErrorEPC
+	mvafc0	a0,$30			# get ErrorEPC
 	lar	k0,hal_diag_ai_write_hex8
 	jalr	k0
 	nop
@@ -280,9 +280,9 @@ FUNC_START(__nmi_entry)
 	
 	# Move the ErrorEPC register to the EPC register so that the
 	# default exception handler saves the right PC value.
-	mfc0	k0,$30
+	mvafc0	k0,$30
 	nop; nop; nop;
-	mtc0	k0,epc
+	mvatc0	k0,epc
 	nop; nop; nop;	
 
 #if (INITIAL_SR & 0x00400000) == 0
@@ -302,7 +302,6 @@ FUNC_START(__nmi_entry)
 	
 FUNC_END(__nmi_entry)
 
-	
 ##-----------------------------------------------------------------------------
 ## Default exception VSR.
 ## Saves machine state and calls external handling code.
@@ -374,18 +373,18 @@ FUNC_START(__default_exception_vsr)
 	mfc0	t0,cause
 	mfc0	t1,status
 	mfc0	t2,cachectrl
-	mfc0	t3,badvr
+	mvafc0	t3,badvr
 	mfc0	t4,config
 	mfc0	t5,prid
-	mfc0	t6,epc
+	mvafc0	t6,epc
 	
 	sw	t0,mipsreg_cause(sp)
 	sw	t1,mipsreg_sr(sp)
 	sw	t2,mipsreg_cachectrl(sp)
-	sw	t3,mipsreg_badvr(sp)
+	sva	t3,mipsreg_badvr(sp)
 	sw	t4,mipsreg_config(sp)
 	sw	t5,mipsreg_prid(sp)
-	sw	t6,mipsreg_pc(sp)
+	sva	t6,mipsreg_pc(sp)
 
 	hal_fpu_save sp
 	
@@ -481,11 +480,11 @@ FUNC_START(__default_interrupt_vsr)
 		
 	mfc0	t1,status
 	mfc0	t2,cachectrl
-	mfc0	t3,epc
+	mvafc0	t3,epc
 	
 	sw	t1,mipsreg_sr(sp)
 	sw	t2,mipsreg_cachectrl(sp)
-	sw	t3,mipsreg_pc(sp)
+	sva	t3,mipsreg_pc(sp)
 
 	hal_fpu_save sp
 		
@@ -503,16 +502,16 @@ FUNC_START(__default_interrupt_vsr)
 #endif
 
 	move	s0,sp				# save pointer to saved state
-	
+
 #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK	
 
 	la	a0,__interrupt_stack		# a0 = stack top
 	la	a1,__interrupt_stack_base	# a1 = stack base
 	sub	a3,sp,a1			# a3 = sp - base
-	bltz	a3,1f				# if < 0 - not on istack
+	bltz	a3,1f				# not on istack if < 0 
 	nop					# delay slot
 	sub	t0,a0,sp			# t0 = top - sp
-	bgtz	t0,8f				# if > 0 - already on istack
+	bgtz	t0,8f				# already on istack if > 0 
 	nop					# delay slot
 1:	
 	move	sp,a0				# switch to istack
@@ -684,7 +683,6 @@ restore_state:
 	lgpr	31,sp	# == RA
 	.set	at
 
-
 #if defined(CYGSEM_HAL_USE_ROM_MONITOR_CygMon)
 
         # If we have a Cygmon that wants to listen to network interrupts, then
@@ -713,7 +711,7 @@ restore_state:
         srl	k0,1
     1:
 #endif
-	lw	k0,mipsreg_pc(sp)		# K0 = return PC
+	lva	k0,mipsreg_pc(sp)		# K0 = return PC
 	lw	k1,mipsreg_sr(sp)		# K1 = saved SR
 	lsp	sp,sp				# load SP
 
@@ -777,7 +775,7 @@ FUNC_END(__gccmain)
 ## can handle these without affecting the debugger.
 	
 FUNC_START(__break_vsr_springboard)
-	mfc0	k0,epc
+	mvafc0	k0,epc
 	mfc0	k1,cause
 	bltzl   k1,1f
 	addi    k0,k0,4                 # delay slot (only executed if BD set)
--- a/packages/hal/mips/jmr3904/current/ChangeLog
+++ b/packages/hal/mips/jmr3904/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Reset macros moved
+	* include/plf_intr.h: to this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_mips_tx39_jmr3904_ram.mlt:
--- a/packages/hal/mips/jmr3904/current/include/plf_intr.h
+++ b/packages/hal/mips/jmr3904/current/include/plf_intr.h
@@ -69,6 +69,10 @@ externC cyg_uint32 hal_ctrlc_isr(CYG_ADD
 #endif
 
 
+//----------------------------------------------------------------------------
+// Reset.
+#define HAL_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
+
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/mips/jmr3904/current/include/plf_stub.h
+++ b/packages/hal/mips/jmr3904/current/include/plf_stub.h
@@ -70,12 +70,7 @@ extern void hal_jmr_put_char( int c );
 // Stub initializer.
 #define HAL_STUB_PLATFORM_STUBS_INIT()        CYG_EMPTY_STATEMENT
 
-//----------------------------------------------------------------------------
-// Reset.
-#define HAL_STUB_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
-
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/mips/ref4955/current/ChangeLog
+++ b/packages/hal/mips/ref4955/current/ChangeLog
@@ -1,3 +1,14 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_mips_tx49_ref4955.cdl: Respect channel configuration
+	constraints.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/pc87338.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Reset macros moved
+	* include/plf_intr.h: to this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_mips_tx49_ref4955_ram.mlt:
--- a/packages/hal/mips/ref4955/current/cdl/hal_mips_tx49_ref4955.cdl
+++ b/packages/hal/mips/ref4955/current/cdl/hal_mips_tx49_ref4955.cdl
@@ -107,6 +107,7 @@ cdl_package CYGPKG_HAL_MIPS_TX49_REF4955
 
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
         display          "Debug serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
@@ -118,6 +119,7 @@ cdl_package CYGPKG_HAL_MIPS_TX49_REF4955
 
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
         display          "Diagnostic serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
--- a/packages/hal/mips/ref4955/current/include/plf_intr.h
+++ b/packages/hal/mips/ref4955/current/include/plf_intr.h
@@ -297,6 +297,15 @@
 
 #define CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED
 
+
+//----------------------------------------------------------------------------
+// Reset.
+#define CYGARC_REG_BOARD_RESET 0xb5400000
+
+#define HAL_PLATFORM_RESET() HAL_WRITE_UINT8(CYGARC_REG_BOARD_RESET,0)
+
+#define HAL_PLATFORM_RESET_ENTRY 0xbfc00000
+
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/mips/ref4955/current/include/plf_stub.h
+++ b/packages/hal/mips/ref4955/current/include/plf_stub.h
@@ -70,16 +70,7 @@ externC void cyg_hal_plf_comms_init(void
 extern void hal_plf_stub_init( void );
 #define HAL_STUB_PLATFORM_INIT()              hal_plf_stub_init();
 
-//----------------------------------------------------------------------------
-// Reset.
-#define CYGARC_REG_BOARD_RESET 0xb5400000
-
-#define HAL_STUB_PLATFORM_RESET() HAL_WRITE_UINT8(CYGARC_REG_BOARD_RESET,0)
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xbfc00000
-
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/mips/ref4955/current/src/pc87338.c
+++ b/packages/hal/mips/ref4955/current/src/pc87338.c
@@ -217,9 +217,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
     return ch;
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static const channel_data_t channels[2] = {
     { (cyg_uint8*)CYG_DEVICE_SERIAL_SCC1, 1000, CYGNUM_HAL_INTERRUPT_DEBUG_UART},
     { (cyg_uint8*)CYG_DEVICE_SERIAL_SCC2, 1000, CYGNUM_HAL_INTERRUPT_USER_UART}
@@ -406,7 +403,6 @@ cyg_hal_plf_comms_init(void)
 
     cyg_hal_plf_serial_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 //-----------------------------------------------------------------------------
 // end of pc87338.c
--- a/packages/hal/mips/vrc4373/current/ChangeLog
+++ b/packages/hal/mips/vrc4373/current/ChangeLog
@@ -1,3 +1,17 @@
+2001-02-05  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_io.h: Ignore devices not on bus 0.
+
+2001-01-31  Nick Garnett  <nickg@cygnus.co.uk>
+
+	* src/platform.S: Added *va* (see mips/arch/.../arch.inc) macros
+	when manipulating values that are potentially 64 bits.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Reset macros moved
+	* include/plf_intr.h: to this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_mips_vr4300_vrc4373_ram.mlt:
--- a/packages/hal/mips/vrc4373/current/include/plf_intr.h
+++ b/packages/hal/mips/vrc4373/current/include/plf_intr.h
@@ -280,6 +280,11 @@ externC cyg_uint32 hal_ctrlc_isr(CYG_ADD
 
 #endif
 
+//----------------------------------------------------------------------------
+// Reset.
+
+#define HAL_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
+
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/mips/vrc4373/current/include/plf_io.h
+++ b/packages/hal/mips/vrc4373/current/include/plf_io.h
@@ -205,6 +205,10 @@ CYG_MACRO_END
     }                                                                         \
     CYG_MACRO_END
 
+// Ignore all devices on not on bus 0 since those all seem to map to the
+// Nile II controller itself.
+#define HAL_PCI_IGNORE_DEVICE(__bus, __dev, __fn) \
+    ((__bus) != 0)
 
 //-----------------------------------------------------------------------------
 // end of plf_io.h
--- a/packages/hal/mips/vrc4373/current/include/plf_stub.h
+++ b/packages/hal/mips/vrc4373/current/include/plf_stub.h
@@ -72,13 +72,7 @@ extern void hal_plf_stub_init(void);
 
 #define HAL_STUB_PLATFORM_INIT()              hal_plf_stub_init();
 
-//----------------------------------------------------------------------------
-// Reset.
-
-#define HAL_STUB_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
-
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/mips/vrc4373/current/src/platform.S
+++ b/packages/hal/mips/vrc4373/current/src/platform.S
@@ -141,7 +141,7 @@ hal_bus_error_vsr:
 	# Check for special address
 	
 	la	k1,hal_pci_config_read_load
-	mfc0	k0,epc
+	mvafc0	k0,epc
 	bne	k0,k1,1f
 	nop
 
@@ -157,7 +157,7 @@ hal_bus_error_vsr:
 	nop
 	nop
 	addi	k0,k0,4			# skip offending instruction
-	mtc0	k0,epc			# return to EPC
+	mvatc0	k0,epc			# return to EPC
 	nop				# let it work
 	nop
 	nop
--- a/packages/hal/mn10300/stb/current/ChangeLog
+++ b/packages/hal/mn10300/stb/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Reset macros moved
+	* include/plf_intr.h: to this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_mn10300_am33_stb_ram.mlt:
--- a/packages/hal/mn10300/stb/current/include/plf_intr.h
+++ b/packages/hal/mn10300/stb/current/include/plf_intr.h
@@ -68,6 +68,11 @@ externC cyg_uint32 hal_ctrlc_isr(CYG_ADD
 
 #endif
 
+
+//----------------------------------------------------------------------------
+// Reset.
+#define HAL_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
+
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/mn10300/stb/current/include/plf_stub.h
+++ b/packages/hal/mn10300/stb/current/include/plf_stub.h
@@ -75,12 +75,7 @@ externC void hal_stb_platform_init(void)
 
 #define HAL_STUB_PLATFORM_INIT()                hal_stb_platform_init()
 
-//----------------------------------------------------------------------------
-// Reset.
-#define HAL_STUB_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
-
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/mn10300/stdeval1/current/ChangeLog
+++ b/packages/hal/mn10300/stdeval1/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Reset macros moved
+	* include/plf_intr.h: to this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_mn10300_am31_stdeval1_ram.h:
--- a/packages/hal/mn10300/stdeval1/current/include/plf_intr.h
+++ b/packages/hal/mn10300/stdeval1/current/include/plf_intr.h
@@ -68,6 +68,10 @@ externC cyg_uint32 hal_ctrlc_isr(CYG_ADD
 
 #endif
 
+//----------------------------------------------------------------------------
+// Reset.
+#define HAL_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
+
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/mn10300/stdeval1/current/include/plf_stub.h
+++ b/packages/hal/mn10300/stdeval1/current/include/plf_stub.h
@@ -72,12 +72,7 @@ extern void hal_stdeval1_init_break_irq(
 // Stub initializer.
 #define HAL_STUB_PLATFORM_INIT()              CYG_EMPTY_STATEMENT
 
-//----------------------------------------------------------------------------
-// Reset.
-#define HAL_STUB_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
-
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/powerpc/arch/current/ChangeLog
+++ b/packages/hal/powerpc/arch/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-02-05  Jesper Skov  <jskov@redhat.com>
+
+	* src/ppc_stub.c (__computeSignal): Hack to allow thread debugging
+	on 40x cores.
+
 2001-01-24  Jesper Skov  <jskov@redhat.com>
 
 	* src/powerpc.ld: Added .sdata to .sdata pattern.
--- a/packages/hal/powerpc/arch/current/src/ppc_stub.c
+++ b/packages/hal/powerpc/arch/current/src/ppc_stub.c
@@ -90,6 +90,11 @@ int __computeSignal (unsigned int trap_n
         return SIGTRAP;
       
     case CYGNUM_HAL_VECTOR_PROGRAM:
+#ifdef CYGPKG_HAL_POWERPC_PPC40x
+        // The 40x is b0rken, returning 0 for these bits. Translate to
+        // SIGTRAP to allow thread debugging.
+        return SIGTRAP;
+#else
         // The register PS contains the value of SRR1 at the time of
         // exception entry. Bits 11-15 contain information about the
         // cause of the exception. Bits 16-31 the PS (MSR) state.
@@ -109,6 +114,7 @@ int __computeSignal (unsigned int trap_n
         default:                        /* should never happen! */
             return SIGILL;
         }            
+#endif
 
     case CYGNUM_HAL_VECTOR_RESERVED_A:
     case CYGNUM_HAL_VECTOR_RESERVED_B:
--- a/packages/hal/powerpc/cogent/current/ChangeLog
+++ b/packages/hal/powerpc/cogent/current/ChangeLog
@@ -1,3 +1,9 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* include/plf_stub.h: Moved reset macro to
+	* include/plf_intr.h: this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_powerpc_cogent_ram.h:
--- a/packages/hal/powerpc/cogent/current/include/plf_intr.h
+++ b/packages/hal/powerpc/cogent/current/include/plf_intr.h
@@ -48,6 +48,15 @@
 //
 //==========================================================================
 
+
+//----------------------------------------------------------------------------
+// Reset.
+// The Cogent does not have a watchdog (not one we can easily use for this
+// purpose anyway).
+#define HAL_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
+
+#define HAL_PLATFORM_RESET_ENTRY 0xfff00100
+
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/powerpc/cogent/current/include/plf_stub.h
+++ b/packages/hal/powerpc/cogent/current/include/plf_stub.h
@@ -78,15 +78,6 @@ extern void hal_plf_stub_init( void );
 #define HAL_STUB_PLATFORM_INIT()              hal_plf_stub_init();
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-// The Cogent does not have a watchdog (not one we can easily use for this
-// purpose anyway).
-#define HAL_STUB_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xfff00100
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/powerpc/cogent/current/src/hal_diag.c
+++ b/packages/hal/powerpc/cogent/current/src/hal_diag.c
@@ -55,9 +55,6 @@
 #include <cyg/hal/hal_if.h>             // Calling-if API
 
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static void cyg_hal_plf_serial_init(void);
 static void cyg_hal_plf_lcd_init(void);
 
@@ -74,7 +71,6 @@ cyg_hal_plf_comms_init(void)
     cyg_hal_plf_serial_init();
     cyg_hal_plf_lcd_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 //=============================================================================
 // Serial driver
@@ -261,9 +257,6 @@ cyg_hal_plf_serial_putc(void* __ch_data,
     CYGARC_HAL_RESTORE_GP();
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static const channel_data_t channels[2] = {
     { (cyg_uint8*)CYG_DEV_SERIAL_BASE_A, 1000, CYGNUM_HAL_INTERRUPT_SIU_IRQ1},
     { (cyg_uint8*)CYG_DEV_SERIAL_BASE_B, 1000, CYGNUM_HAL_INTERRUPT_SIU_IRQ1}
@@ -437,8 +430,6 @@ cyg_hal_plf_serial_init(void)
     CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 
 //=============================================================================
 // LCD driver
@@ -446,8 +437,6 @@ cyg_hal_plf_serial_init(void)
 
 // The LCD driver is only used by the new vector code. Cannot be used
 // by the old compatibility cruft.
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
 
 // FEMA 162B 16 character x 2 line LCD
 // base addresses and register offsets *
@@ -659,7 +648,6 @@ cyg_hal_plf_lcd_init(void)
     // Restore original console
     CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 //=============================================================================
 // Compatibility with older stubs
--- a/packages/hal/powerpc/fads/current/ChangeLog
+++ b/packages/hal/powerpc/fads/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Moved reset macro to
+	* include/plf_intr.h: this file.
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_powerpc_fads_ram.mlt:
--- a/packages/hal/powerpc/fads/current/include/plf_intr.h
+++ b/packages/hal/powerpc/fads/current/include/plf_intr.h
@@ -48,7 +48,11 @@
 //
 //==========================================================================
 
-// Empty for now
+//----------------------------------------------------------------------------
+// Reset.
+#define HAL_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
+
+#define HAL_PLATFORM_RESET_ENTRY 0xfff00100
 
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
--- a/packages/hal/powerpc/fads/current/include/plf_stub.h
+++ b/packages/hal/powerpc/fads/current/include/plf_stub.h
@@ -68,13 +68,6 @@
 #define HAL_STUB_PLATFORM_INIT()              CYG_EMPTY_STATEMENT
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-#define HAL_STUB_PLATFORM_RESET()             CYG_EMPTY_STATEMENT
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xfff00100
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/powerpc/mbx/current/ChangeLog
+++ b/packages/hal/powerpc/mbx/current/ChangeLog
@@ -1,3 +1,21 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_powerpc_mbx.cdl: Respect channel configuration
+	constraints.
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_GDB/None
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Moved reset macro to
+	* include/plf_intr.h: this file.
+
 2001-01-19  Gary Thomas  <gthomas@redhat.com>
 
 	* include/hal_diag.h: Remove unwarranted disclaimer [commentary].
--- a/packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl
+++ b/packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl
@@ -113,6 +113,7 @@ cdl_package CYGPKG_HAL_POWERPC_MBX {
 
    cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
        display          "Debug serial port"
+       active_if        CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
        flavor data
        legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
        default_value    0
@@ -124,6 +125,7 @@ cdl_package CYGPKG_HAL_POWERPC_MBX {
 
     cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL {
         display          "Diagnostic serial port"
+        active_if        CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE
         flavor data
         legal_values     0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1
         default_value    0
--- a/packages/hal/powerpc/mbx/current/include/plf_intr.h
+++ b/packages/hal/powerpc/mbx/current/include/plf_intr.h
@@ -58,6 +58,16 @@
 // Defined by the quicc driver
 #include <cyg/hal/quicc/quicc_smc1.h>
 
+
+//----------------------------------------------------------------------------
+// Reset.
+
+// The MBX does not have a watchdog (not one we can easily use for this
+// purpose anyway).
+#define HAL_PLATFORM_RESET() CYG_EMPTY_STATEMENT
+
+#define HAL_PLATFORM_RESET_ENTRY 0xfe000100
+
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/powerpc/mbx/current/include/plf_stub.h
+++ b/packages/hal/powerpc/mbx/current/include/plf_stub.h
@@ -74,16 +74,6 @@ externC void hal_mbx_set_led( int val );
 #endif
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-
-// The MBX does not have a watchdog (not one we can easily use for this
-// purpose anyway).
-#define HAL_STUB_PLATFORM_RESET() CYG_EMPTY_STATEMENT
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xfe000100
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/powerpc/mbx/current/src/hal_diag.c
+++ b/packages/hal/powerpc/mbx/current/src/hal_diag.c
@@ -135,7 +135,7 @@ void hal_diag_init(void)
 
     // init the actual serial port
     cyg_hal_plf_serial_init_channel();
-#ifndef CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+#ifdef CYGSEM_HAL_DIAG_MANGLER_GDB
 #ifndef CYG_HAL_STARTUP_ROM
     // We are talking to GDB; ack the "go" packet!
     cyg_hal_plf_serial_putc(eppc, '+');
@@ -151,7 +151,7 @@ void hal_diag_write_char_serial( char c 
     HAL_RESTORE_INTERRUPTS(__state);
 }
 
-#if defined(CYG_HAL_STARTUP_ROM) || defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#if defined(CYG_HAL_STARTUP_ROM) || !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 void hal_diag_write_char(char c)
 {
 #ifdef CYGDBG_DIAG_BUF
--- a/packages/hal/powerpc/mpc8xx/current/ChangeLog
+++ b/packages/hal/powerpc/mpc8xx/current/ChangeLog
@@ -1,3 +1,9 @@
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_powerpc_mpc8xx.cdl: Get rid of
+	CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL options. They are replaced by
+	the CYGSEM_HAL_DIAG_MANGLER option.
+
 2000-11-04  Gary Thomas  <gthomas@redhat.com>
 
 	* include/var_intr.h: Export symbols used in assembly code.
--- a/packages/hal/powerpc/mpc8xx/current/cdl/hal_powerpc_mpc8xx.cdl
+++ b/packages/hal/powerpc/mpc8xx/current/cdl/hal_powerpc_mpc8xx.cdl
@@ -50,11 +50,6 @@ cdl_package CYGPKG_HAL_POWERPC_MPC8xx {
            for this processor variant. It is also necessary to
            select a specific target platform HAL package."
 
-    # This package allows GDB protocol on diag serial device
-    # to be explicitly controlled, i.e. turned off.
-
-    implements CYGINT_HAL_DIAG_DISABLE_GDB_PROTOCOL_SUPPORTED
-
     cdl_interface CYGINT_HAL_USE_ROM_MONITOR_UNSUPPORTED {
         display       "ROM monitor configuration is unsupported"
         no_define
--- a/packages/hal/powerpc/ppc40x/current/ChangeLog
+++ b/packages/hal/powerpc/ppc40x/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/var_intr.h: Include plf_intr.h
+
 2001-01-18  Gary Thomas  <gthomas@redhat.com>
 
 	* cdl/hal_powerpc_ppc40x.cdl: Move CYGSEM_HAL_USE_ROM_MONITOR to
--- a/packages/hal/powerpc/ppc40x/current/include/var_intr.h
+++ b/packages/hal/powerpc/ppc40x/current/include/var_intr.h
@@ -47,6 +47,7 @@
 //
 //=============================================================================
 
+#include <cyg/hal/plf_intr.h>
 
 // Special handling for additional exceptions
 
--- a/packages/hal/powerpc/quicc/current/ChangeLog
+++ b/packages/hal/powerpc/quicc/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/quicc_smc1.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check. 
+
 2001-01-15  Gary Thomas  <gthomas@redhat.com>
 
 	* src/quicc_smc1.c: Provide for multiple serial input buffers
--- a/packages/hal/powerpc/quicc/current/src/quicc_smc1.c
+++ b/packages/hal/powerpc/quicc/current/src/quicc_smc1.c
@@ -347,9 +347,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
 
 
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static void
 cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, 
                          cyg_uint32 __len)
@@ -511,7 +508,5 @@ cyg_hal_plf_serial_init(void)
     CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 #endif // CYGPKG_HAL_POWERPC_MPC860
 // EOF quicc_smc1.c
--- a/packages/hal/sh/arch/current/ChangeLog
+++ b/packages/hal/sh/arch/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* tests/intr0.c: Moved test header inclusion to proper location.
+
 2001-01-18  Jesper Skov  <jskov@redhat.com>
 
 	Case 105302
--- a/packages/hal/sh/arch/current/tests/intr0.c
+++ b/packages/hal/sh/arch/current/tests/intr0.c
@@ -39,6 +39,8 @@
 
 #include <pkgconf/system.h>
 
+#include <cyg/infra/testcase.h>
+
 #if defined(CYGPKG_KERNEL)
 
 #include <pkgconf/kernel.h>
@@ -49,8 +51,6 @@
 
 #include <cyg/kernel/kapi.h>
 
-#include <cyg/infra/testcase.h>
-
 #include <cyg/hal/hal_intr.h>
 
 // -------------------------------------------------------------------------
--- a/packages/hal/sh/cq7708/current/ChangeLog
+++ b/packages/hal/sh/cq7708/current/ChangeLog
@@ -1,3 +1,13 @@
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Included private parts of serial driver.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Moved reset macro to
+	* include/plf_intr.h: this file.
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+
 2001-01-23  Jesper Skov  <jskov@redhat.com>
 
 	* include/platform.inc: Properly init interrupt VSR.
--- a/packages/hal/sh/cq7708/current/include/plf_intr.h
+++ b/packages/hal/sh/cq7708/current/include/plf_intr.h
@@ -51,9 +51,14 @@
 
 #include <pkgconf/hal.h>
 
-//--------------------------------------------------------------------------
 
-// No platform specific stuff at present.
+//----------------------------------------------------------------------------
+// Reset.
+// Block interrupts and cause an exception. This forces a reset.
+#define HAL_PLATFORM_RESET() \
+    asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL))
+    
+#define HAL_PLATFORM_RESET_ENTRY 0xa0000000
 
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
--- a/packages/hal/sh/cq7708/current/include/plf_stub.h
+++ b/packages/hal/sh/cq7708/current/include/plf_stub.h
@@ -76,15 +76,6 @@ externC void cyg_hal_plf_comms_init(void
 #endif
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-// Block interrupts and cause an exception. This forces a reset.
-#define HAL_STUB_PLATFORM_RESET() \
-    asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL))
-    
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xa0000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/sh/cq7708/current/src/hal_diag.c
+++ b/packages/hal/sh/cq7708/current/src/hal_diag.c
@@ -56,9 +56,6 @@
 
 //-----------------------------------------------------------------------------
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 void
 cyg_hal_plf_comms_init(void)
 {
@@ -72,8 +69,6 @@ cyg_hal_plf_comms_init(void)
     cyg_hal_plf_sci_init(0, 0, CYGNUM_HAL_INTERRUPT_SCI_RXI, SCI_BASE);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 //=============================================================================
 // Led control
 //=============================================================================
@@ -97,6 +92,9 @@ hal_diag_led_off( void )
 
 #ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
 
+#define CYGPRI_HAL_SH_SH3_SCI_PRIVATE
+#include <cyg/hal/sh3_sci.h>            // driver API
+
 static channel_data_t channel = { (cyg_uint8*)SCI_BASE, 0, 0};
 
 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
--- a/packages/hal/sh/cq7750/current/ChangeLog
+++ b/packages/hal/sh/cq7750/current/ChangeLog
@@ -1,3 +1,13 @@
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Included private parts of serial driver.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Moved reset macro to
+	* include/plf_intr.h: this file.
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+
 2001-01-23  Jesper Skov  <jskov@redhat.com>
 
 	* include/platform.inc: Properly init interrupt VSR.
--- a/packages/hal/sh/cq7750/current/include/plf_intr.h
+++ b/packages/hal/sh/cq7750/current/include/plf_intr.h
@@ -51,9 +51,14 @@
 
 #include <pkgconf/hal.h>
 
-//--------------------------------------------------------------------------
 
-// No platform specific stuff at present.
+//----------------------------------------------------------------------------
+// Reset.
+// Block interrupts and cause an exception. This forces a reset.
+#define HAL_PLATFORM_RESET() \
+    asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL))
+    
+#define HAL_PLATFORM_RESET_ENTRY 0xa0000000
 
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
--- a/packages/hal/sh/cq7750/current/include/plf_stub.h
+++ b/packages/hal/sh/cq7750/current/include/plf_stub.h
@@ -76,15 +76,6 @@ externC void cyg_hal_plf_comms_init(void
 #endif
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-// Block interrupts and cause an exception. This forces a reset.
-#define HAL_STUB_PLATFORM_RESET() \
-    asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL))
-    
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xa0000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/sh/cq7750/current/src/hal_diag.c
+++ b/packages/hal/sh/cq7750/current/src/hal_diag.c
@@ -56,8 +56,6 @@
 
 //-----------------------------------------------------------------------------
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
 
 void
 cyg_hal_plf_comms_init(void)
@@ -72,8 +70,6 @@ cyg_hal_plf_comms_init(void)
     cyg_hal_plf_scif_init(0, 0, CYGNUM_HAL_INTERRUPT_SCIF_RXI, SCI_BASE);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 //=============================================================================
 // Led control
 //=============================================================================
@@ -97,6 +93,9 @@ hal_diag_led_off( void )
 
 #ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
 
+#define CYGPRI_HAL_SH_SH4_SCIF_PRIVATE
+#include <cyg/hal/sh4_scif.h>            // driver API
+
 static channel_data_t channel = { (cyg_uint8*)SCI_BASE, 0, 0};
 
 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
--- a/packages/hal/sh/edk7708/current/ChangeLog
+++ b/packages/hal/sh/edk7708/current/ChangeLog
@@ -1,3 +1,13 @@
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Included private parts of serial driver.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* include/plf_stub.h: Moved reset macro to
+	* include/plf_intr.h: this file.
+	* src/hal_diag.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+
 2001-01-23  Jesper Skov  <jskov@redhat.com>
 
 	* include/platform.inc: Properly init interrupt VSR.
--- a/packages/hal/sh/edk7708/current/include/plf_intr.h
+++ b/packages/hal/sh/edk7708/current/include/plf_intr.h
@@ -51,10 +51,14 @@
 
 #include <pkgconf/hal.h>
 
-//--------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// Reset.
+// Block interrupts and cause an exception. This forces a reset.
+#define HAL_PLATFORM_RESET() \
+    asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL))
 
-// No platform specific stuff at present.
-
+#define HAL_PLATFORM_RESET_ENTRY 0xa0000000
+    
 //--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_PLF_INTR_H
 // End of plf_intr.h
--- a/packages/hal/sh/edk7708/current/include/plf_stub.h
+++ b/packages/hal/sh/edk7708/current/include/plf_stub.h
@@ -76,15 +76,6 @@ externC void cyg_hal_plf_comms_init(void
 #endif
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
-
-//----------------------------------------------------------------------------
-// Reset.
-// Block interrupts and cause an exception. This forces a reset.
-#define HAL_STUB_PLATFORM_RESET() \
-    asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL))
-
-#define HAL_STUB_PLATFORM_RESET_ENTRY 0xa0000000
-    
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/sh/edk7708/current/src/hal_diag.c
+++ b/packages/hal/sh/edk7708/current/src/hal_diag.c
@@ -56,8 +56,6 @@
 
 //-----------------------------------------------------------------------------
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
 
 void
 cyg_hal_plf_comms_init(void)
@@ -72,8 +70,6 @@ cyg_hal_plf_comms_init(void)
     cyg_hal_plf_sci_init(0, 0, CYGNUM_HAL_INTERRUPT_SCI_RXI, SCI_BASE);
 }
 
-#endif //  CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 //=============================================================================
 // Led control
 //=============================================================================
@@ -99,6 +95,9 @@ hal_diag_led_off( void )
 
 #ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG
 
+#define CYGPRI_HAL_SH_SH3_SCI_PRIVATE
+#include <cyg/hal/sh3_sci.h>            // driver API
+
 static channel_data_t channel = { (cyg_uint8*)SCI_BASE, 0, 0};
 
 #if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
--- a/packages/hal/sh/sh3/current/ChangeLog
+++ b/packages/hal/sh/sh3/current/ChangeLog
@@ -1,3 +1,33 @@
+2001-02-02  Jesper Skov  <jskov@redhat.com>
+
+	* src/sh3_sci.c: Baud rate is always specified, remove fallback
+	hack. Proper macro renaming.
+	* src/sh3_scif.c: Same.  Proper macro renaming.
+	* cdl/hal_sh_sh3.cdl: Added baud rate options which get default
+	values from platform CDL if it needs to be different from 38400
+	baud.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* include/sh3_scif.h: Moved init_channel function into private
+	part.
+	* include/sh3_sci.h: Same.
+
+2001-01-30  Jesper Skov  <jskov@redhat.com>
+
+	* include/sh3_sci.h: Separate exported API from definitions used
+	in the driver.
+	* include/sh3_scif.h: Same.
+	* src/sh3_sci.c: Request private definitions.
+	* src/sh3_scif.c: Same.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/sh3_sci.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* src/sh3_scif.c: Same.
+
+	* include/var_intr.h: Include platform interrupt header.
+
 2001-01-18  Jesper Skov  <jskov@redhat.com>
 
 	Case 105302
--- a/packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl
+++ b/packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl
@@ -292,6 +292,27 @@ cdl_package CYGPKG_HAL_SH_SH3 {
         }
     }
 
+    cdl_option CYGNUM_HAL_SH_SH3_SCI_BAUD_RATE {
+        display          "SCI serial port default baud rate"
+        flavor data
+        legal_values     { 4800 9600 14400 19200 38400 57600 115200 }
+        default_value    { CYGNUM_HAL_SH_SH3_SCI_BAUD_RATE_DEFAULT ? \
+                           CYGNUM_HAL_SH_SH3_SCI_BAUD_RATE_DEFAULT : 38400 }
+        description      "
+           This controls the default baud rate used for communicating
+           with GDB / displaying diagnostic output."
+    }
+
+    cdl_option CYGNUM_HAL_SH_SH3_SCIF_BAUD_RATE {
+        display          "SCIF serial ports default baud rate"
+        flavor data
+        legal_values     { 4800 9600 14400 19200 38400 57600 115200 }
+        default_value    { CYGNUM_HAL_SH_SH3_SCIF_BAUD_RATE_DEFAULT ? \
+                           CYGNUM_HAL_SH_SH3_SCIF_BAUD_RATE_DEFAULT : 38400 }
+        description      "
+           This controls the default baud rate used for communicating
+           with GDB / displaying diagnostic output."
+    }
 
     cdl_component CYGPKG_HAL_SH_INTERRUPT {
         display          "Interrupt controls"
--- a/packages/hal/sh/sh3/current/include/sh3_sci.h
+++ b/packages/hal/sh/sh3/current/include/sh3_sci.h
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -44,6 +44,17 @@
 #ifdef CYGNUM_HAL_SH_SH3_SCI_PORTS
 
 //--------------------------------------------------------------------------
+// Exported functions
+
+externC cyg_uint8 cyg_hal_plf_sci_getc(void* __ch_data);
+externC void cyg_hal_plf_sci_putc(void* __ch_data, cyg_uint8 c);
+externC void cyg_hal_plf_sci_init(int sci_index, int comm_index, 
+                                  int rcv_vect, cyg_uint8* base);
+
+
+#ifdef CYGPRI_HAL_SH_SH3_SCI_PRIVATE
+
+//--------------------------------------------------------------------------
 // SCI register offsets
 #if (CYGARC_SH_MOD_SCI >= 2)
 # define _REG_SCSPTR             -0x4 // serial port register
@@ -68,13 +79,10 @@ typedef struct {
 #if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG)
 // This one should only be used by old-stub compatibility code!
 externC void cyg_hal_plf_sci_init_channel(const channel_data_t* chan);
+#warning "You should not be using anything but vv diag"
 #endif
 
-externC cyg_uint8 cyg_hal_plf_sci_getc(void* __ch_data);
-externC void cyg_hal_plf_sci_putc(void* __ch_data, cyg_uint8 c);
-externC void cyg_hal_plf_sci_init(int sci_index, int comm_index, 
-                                  int rcv_vect, cyg_uint8* base);
-
+#endif // CYGPRI_HAL_SH_SH3_SCI_PRIVATE
 
 #endif // CYGNUM_HAL_SH_SH3_SCI_PORTS
 //-----------------------------------------------------------------------------
--- a/packages/hal/sh/sh3/current/include/sh3_scif.h
+++ b/packages/hal/sh/sh3/current/include/sh3_scif.h
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -52,6 +52,16 @@
 #ifdef CYGNUM_HAL_SH_SH3_SCIF_PORTS
 
 //--------------------------------------------------------------------------
+// Exported functions
+
+externC cyg_uint8 cyg_hal_plf_scif_getc(void* __ch_data);
+externC void cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c);
+void cyg_hal_plf_scif_init(int scif_index, int comm_index, 
+                           int rcv_vect, cyg_uint8* base);
+
+#ifdef CYGPRI_HAL_SH_SH3_SCIF_PRIVATE
+
+//--------------------------------------------------------------------------
 // SCIF register offsets
 #define _REG_SCSMR  0x00
 #define _REG_SCBRR  0x02
@@ -75,13 +85,10 @@ typedef struct {
 #if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG)
 // This one should only be used by old-stub compatibility code!
 externC void cyg_hal_plf_scif_init_channel(const channel_data_t* chan);
+#warning "You should not be using anything but vv diag"
 #endif
 
-externC cyg_uint8 cyg_hal_plf_scif_getc(void* __ch_data);
-externC void cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c);
-void cyg_hal_plf_scif_init(int scif_index, int comm_index, 
-                           int rcv_vect, cyg_uint8* base);
-
+#endif // CYGPRI_HAL_SH_SH3_SCIF_PRIVATE
 
 #endif // CYGNUM_HAL_SH_SH3_SCIF_PORTS
 //-----------------------------------------------------------------------------
--- a/packages/hal/sh/sh3/current/include/var_intr.h
+++ b/packages/hal/sh/sh3/current/include/var_intr.h
@@ -51,8 +51,11 @@
 //==========================================================================
 
 #include <pkgconf/hal.h>
+
 #include CYGBLD_HAL_CPU_MODULES_H       // INTC module selection
 
+#include <cyg/hal/plf_intr.h>
+
 //----------------------------------------------------------------------------
 // Additional vectors provided by INTC V2
 
--- a/packages/hal/sh/sh3/current/src/sh3_sci.c
+++ b/packages/hal/sh/sh3/current/src/sh3_sci.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -54,14 +54,11 @@
 #include <cyg/hal/hal_if.h>             // Calling-if API
 #include <cyg/hal/sh_regs.h>            // serial register definitions
 
+#define CYGPRI_HAL_SH_SH3_SCI_PRIVATE
 #include <cyg/hal/sh3_sci.h>            // our header
 
 //--------------------------------------------------------------------------
 
-#ifndef CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE
-# define CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE 38400
-#endif
-
 void
 cyg_hal_plf_sci_init_channel(const channel_data_t* chan)
 {
@@ -78,9 +75,9 @@ cyg_hal_plf_sci_init_channel(const chann
     // Set speed to CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE
     HAL_READ_UINT8(base+_REG_SCSMR, tmp);
     tmp &= ~CYGARC_REG_SCSMR_CKSx_MASK;
-    tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE);
+    tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCI_BAUD_RATE);
     HAL_WRITE_UINT8(base+_REG_SCSMR, tmp);
-    HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE));
+    HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCI_BAUD_RATE));
 }
 
 static cyg_bool
@@ -137,8 +134,6 @@ cyg_hal_plf_sci_putc(void* __ch_data, cy
     CYGARC_HAL_RESTORE_GP();
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
 
 static channel_data_t channels[CYGNUM_HAL_SH_SH3_SCI_PORTS];
 
@@ -299,8 +294,6 @@ cyg_hal_plf_sci_init(int sci_index, int 
     CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 #endif // CYGNUM_HAL_SH_SH3_SCI_PORTS
 
 //-----------------------------------------------------------------------------
--- a/packages/hal/sh/sh3/current/src/sh3_scif.c
+++ b/packages/hal/sh/sh3/current/src/sh3_scif.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -60,14 +60,11 @@
 #include <cyg/hal/sh_regs.h>            // serial register definitions
 #include <cyg/hal/sh_stub.h>            // target_register_t
 
+#define CYGPRI_HAL_SH_SH3_SCIF_PRIVATE
 #include <cyg/hal/sh3_scif.h>           // our header
 
 //--------------------------------------------------------------------------
 
-#ifndef CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE
-# define CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE 38400
-#endif
-
 void
 cyg_hal_plf_scif_init_channel(const channel_data_t* chan)
 {
@@ -88,9 +85,9 @@ cyg_hal_plf_scif_init_channel(const chan
     // Set speed to CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE
     HAL_READ_UINT8(base+_REG_SCSMR, tmp);
     tmp &= ~CYGARC_REG_SCSMR2_CKSx_MASK;
-    tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE);
+    tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCIF_BAUD_RATE);
     HAL_WRITE_UINT8(base+_REG_SCSMR, tmp);
-    HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE));
+    HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCIF_BAUD_RATE));
 
     // Let things settle: Here we should should wait the equivalent of
     // one bit interval,
@@ -173,8 +170,6 @@ cyg_hal_plf_scif_putc(void* __ch_data, c
     CYGARC_HAL_RESTORE_GP();
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
 
 static channel_data_t channels[CYGNUM_HAL_SH_SH3_SCIF_PORTS];
 
@@ -336,8 +331,6 @@ cyg_hal_plf_scif_init(int scif_index, in
     CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 #endif // CYGNUM_HAL_SH_SH3_SCIF_PORTS
 
 //-----------------------------------------------------------------------------
--- a/packages/hal/sh/sh4/current/ChangeLog
+++ b/packages/hal/sh/sh4/current/ChangeLog
@@ -1,3 +1,21 @@
+2001-02-02  Jesper Skov  <jskov@redhat.com>
+
+	* cdl/hal_sh_sh4.cdl: Added baud rate option.
+
+	* src/sh4_scif.c (cyg_hal_plf_scif_init_channel): Use specified
+	baud rate.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* include/sh4_scif.h: Separate exported API from definitions used
+	in the driver.
+	* src/sh4_scif.c: Request private definitions.
+
+2001-01-26  Jesper Skov  <jskov@redhat.com>
+
+	* src/sh4_sci.c: Removed CYGSEM_HAL_VIRTUAL_VECTOR_DIAG check.
+	* src/sh4_scif.c: Same.
+
 2001-01-18  Jesper Skov  <jskov@redhat.com>
 
 	Case 105302
--- a/packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl
+++ b/packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl
@@ -146,4 +146,15 @@ cdl_package CYGPKG_HAL_SH_SH4 {
                 speed and the PFC divider setting."
         }
     }
+
+    cdl_option CYGNUM_HAL_SH_SH4_SCIF_BAUD_RATE {
+        display          "SCIF serial ports default baud rate"
+        flavor data
+        legal_values     { 4800 9600 14400 19200 38400 57600 115200 }
+        default_value    { CYGNUM_HAL_SH_SH4_SCIF_BAUD_RATE_DEFAULT ? \
+                           CYGNUM_HAL_SH_SH4_SCIF_BAUD_RATE_DEFAULT : 38400 }
+        description      "
+           This controls the default baud rate used for communicating
+           with GDB / displaying diagnostic output."
+    }
 }
--- a/packages/hal/sh/sh4/current/include/sh4_scif.h
+++ b/packages/hal/sh/sh4/current/include/sh4_scif.h
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -48,6 +48,16 @@
 #ifdef CYGNUM_HAL_SH_SH4_SCIF_PORTS
 
 //--------------------------------------------------------------------------
+// Exported functions
+
+externC cyg_uint8 cyg_hal_plf_scif_getc(void* __ch_data);
+externC void cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c);
+void cyg_hal_plf_scif_init(int scif_index, int comm_index, 
+                           int rcv_vect, cyg_uint8* base);
+
+#ifdef CYGPRI_HAL_SH_SH4_SCIF_PRIVATE
+
+//--------------------------------------------------------------------------
 // SCIF register offsets
 #define _REG_SCSMR  0x00
 #define _REG_SCBRR  0x04
@@ -73,13 +83,10 @@ typedef struct {
 #if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG)
 // This one should only be used by old-stub compatibility code!
 externC void cyg_hal_plf_scif_init_channel(const channel_data_t* chan);
+#warning "You should not be using anything but vv diag"
 #endif
 
-externC cyg_uint8 cyg_hal_plf_scif_getc(void* __ch_data);
-externC void cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c);
-void cyg_hal_plf_scif_init(int scif_index, int comm_index, 
-                           int rcv_vect, cyg_uint8* base);
-
+#endif // CYGPRI_HAL_SH_SH4_SCIF_PRIVATE
 
 #endif // CYGNUM_HAL_SH_SH4_SCIF_PORTS
 //-----------------------------------------------------------------------------
--- a/packages/hal/sh/sh4/current/src/sh4_scif.c
+++ b/packages/hal/sh/sh4/current/src/sh4_scif.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -56,6 +56,7 @@
 #include <cyg/hal/sh_regs.h>            // serial register definitions
 #include <cyg/hal/sh_stub.h>            // target_register_t
 
+#define CYGPRI_HAL_SH_SH4_SCIF_PRIVATE
 #include <cyg/hal/sh4_scif.h>           // our header
 
 //--------------------------------------------------------------------------
@@ -77,15 +78,16 @@ cyg_hal_plf_scif_init_channel(const chan
     // 8-1-no parity.
     HAL_WRITE_UINT16(base+_REG_SCSMR, 0);
 
-    // Set speed to 38400
+    // Set desired baudrate
     HAL_READ_UINT16(base+_REG_SCSMR, tmp);
     tmp &= ~CYGARC_REG_SCSMR2_CKSx_MASK;
-    tmp |= CYGARC_SCBRR_CKSx(38400);
+    tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH4_SCIF_BAUD_RATE);
     HAL_WRITE_UINT16(base+_REG_SCSMR, tmp);
-    HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(38400));
+    HAL_WRITE_UINT8(base+_REG_SCBRR, 
+                    CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH4_SCIF_BAUD_RATE));
 
     // Let things settle: Here we should should wait the equivalent of
-    // one bit interval, i.e. 1/38400 second, but until we have
+    // one bit interval, i.e. 1/<baudrate> second, but until we have
     // something like the Linux delay loop, it's hard to do reliably. So
     // just move on and hope for the best (this is unlikely to cause
     // problems since the CPU has just come out of reset anyway).
@@ -162,8 +164,6 @@ cyg_hal_plf_scif_putc(void* __ch_data, c
     CYGARC_HAL_RESTORE_GP();
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
 
 static channel_data_t channels[CYGNUM_HAL_SH_SH4_SCIF_PORTS];
 
@@ -325,8 +325,6 @@ cyg_hal_plf_scif_init(int scif_index, in
     CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 }
 
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
-
 #endif // CYGNUM_HAL_SH_SH4_SCIF_PORTS
 
 //-----------------------------------------------------------------------------
--- a/packages/hal/v85x/arch/current/ChangeLog
+++ b/packages/hal/v85x/arch/current/ChangeLog
@@ -1,3 +1,11 @@
+2001-01-26  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* include/hal_intr.h: Move HAL_STUB_PLATFORM_RESET and
+	HAL_STUB_PLATFORM_RESET_ENTRY here from platform stub headers.
+	Also rename to HAL_PLATFORM_RESET and HAL_PLATFORM_RESET_ENTRY
+
+	* src/vectors.S (_hal_reset_board): Renamed from hal_plf_reset_board
+
 2001-01-18  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* src/vectors.S: Added underscore to reference to
--- a/packages/hal/v85x/arch/current/include/hal_intr.h
+++ b/packages/hal/v85x/arch/current/include/hal_intr.h
@@ -262,5 +262,14 @@ externC cyg_uint32 hal_clock_read(void);
 #endif
 
 //--------------------------------------------------------------------------
+// Reset.
+
+#ifndef HAL_PLATFORM_RESET
+extern void hal_reset_board(void);
+#define HAL_PLATFORM_RESET()             hal_reset_board()
+#define HAL_PLATFORM_RESET_ENTRY         0x00000000
+#endif
+
+//--------------------------------------------------------------------------
 #endif // ifndef CYGONCE_HAL_HAL_INTR_H
 // End of hal_intr.h
--- a/packages/hal/v85x/arch/current/src/vectors.S
+++ b/packages/hal/v85x/arch/current/src/vectors.S
@@ -466,8 +466,8 @@ call_via_r1:
 //
 // Reset the board
 //
-        .globl  _hal_plf_reset_board
-_hal_plf_reset_board:   
+        .globl  _hal_reset_board
+_hal_reset_board:   
         di                      // Turn off interrupts
         jmp     [r0]            // Restart machine        
 
--- a/packages/hal/v85x/ceb_v850/current/ChangeLog
+++ b/packages/hal/v85x/ceb_v850/current/ChangeLog
@@ -1,3 +1,22 @@
+2001-02-08  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replace CYGSEM_HAL_DIAG_MANGLER_None with
+	CYGDBG_HAL_DIAG_TO_DEBUG_CHAN.
+
+2001-01-31  Jesper Skov  <jskov@redhat.com>
+
+	* src/hal_diag.c: Replaced CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL
+	with CYGSEM_HAL_DIAG_MANGLER_None
+	* cdl/hal_v85x_ceb_v850.cdl: Same.
+	* src/hal_diag.c: Get rid of CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
+	checks.
+
+2001-01-26  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* include/plf_stub.h (HAL_STUB_PLATFORM_RESET): Move to arch HAL
+	hal_intr.h
+	(HAL_STUB_PLATFORM_RESET_ENTRY): Ditto
+
 2000-10-20  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/pkgconf/mlt_v85x_v850_ceb_ram.mlt:
--- a/packages/hal/v85x/ceb_v850/current/cdl/hal_v85x_ceb_v850.cdl
+++ b/packages/hal/v85x/ceb_v850/current/cdl/hal_v85x_ceb_v850.cdl
@@ -54,7 +54,6 @@ cdl_package CYGPKG_HAL_V85X_V850_CEB {
 
     implements    CYGINT_HAL_DEBUG_GDB_STUBS
     implements    CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
-    implements    CYGINT_HAL_DIAG_DISABLE_GDB_PROTOCOL_SUPPORTED
     implements    CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT
     implements    CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED
 
--- a/packages/hal/v85x/ceb_v850/current/include/plf_stub.h
+++ b/packages/hal/v85x/ceb_v850/current/include/plf_stub.h
@@ -70,13 +70,6 @@ extern void hal_plf_stub_init(void);
 
 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
-//----------------------------------------------------------------------------
-// Reset.
-
-extern void hal_plf_reset_board(void);
-#define HAL_STUB_PLATFORM_RESET()             hal_plf_reset_board()
-#define HAL_STUB_PLATFORM_RESET_ENTRY         0x00000000
-
 //-----------------------------------------------------------------------------
 #endif // CYGONCE_HAL_PLF_STUB_H
 // End of plf_stub.h
--- a/packages/hal/v85x/ceb_v850/current/src/hal_diag.c
+++ b/packages/hal/v85x/ceb_v850/current/src/hal_diag.c
@@ -142,9 +142,6 @@ cyg_hal_plf_serial_getc(void* __ch_data)
     return ch;
 }
 
-#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \
-    || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES)
-
 static void
 cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, 
                          cyg_uint32 __len)
@@ -291,7 +288,6 @@ cyg_hal_plf_comms_init(void)
 
     cyg_hal_plf_serial_init();
 }
-#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
 
 //=============================================================================
 // Compatibility with older stubs
@@ -310,7 +306,7 @@ cyg_hal_plf_comms_init(void)
 #if defined(CYG_HAL_STARTUP_ROM) && !defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
 #define HAL_DIAG_USES_HARDWARE
 #else
-#if defined(CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL)
+#if !defined(CYGDBG_HAL_DIAG_TO_DEBUG_CHAN)
 #define HAL_DIAG_USES_HARDWARE
 #endif
 #endif
--- a/packages/io/flash/current/ChangeLog
+++ b/packages/io/flash/current/ChangeLog
@@ -1,3 +1,10 @@
+2001-02-06  Hugo Tyson  <hmt@redhat.com>
+
+	* src/flash.c (flash_erase): Add an additional argument to the
+	call into the driver, being the blocksize (as discovered).  This
+	allows a gross check for actual erase in some drivers.  Those that
+	don't use it, it's harmless - after all, this is an API by trust.
+
 2000-12-06  Jesper Skov  <jskov@redhat.com>
 
 	* src/flash.c (flash_dev_query): Added. Allows reloc/cache magic
--- a/packages/io/flash/current/src/flash.c
+++ b/packages/io/flash/current/src/flash.c
@@ -90,7 +90,6 @@ flash_dev_query(void* data)
     int code_len;
     code_fun *_flash_query;
     int d_cache, i_cache;
-    void* flash_id;
 
     // Query the device driver - copy 'query' code to RAM for execution
     code_len = (unsigned long)&flash_query_end - (unsigned long)&flash_query;
@@ -147,7 +146,7 @@ flash_erase(void *addr, int len, void **
     int stat = 0;
     extern char flash_erase_block[], flash_erase_block_end[];
     int code_len;
-    typedef int code_fun(unsigned short *);
+    typedef int code_fun(unsigned short *, unsigned int);
     code_fun *_flash_erase_block;
     int d_cache, i_cache;
 
@@ -170,7 +169,8 @@ flash_erase(void *addr, int len, void **
 #ifdef RAM_FLASH_DEV_DEBUG
         _flash_erase_block = &flash_erase_block;
 #endif
-        stat = (*_flash_erase_block)(block);
+        // Supply the blocksize for a gross check for erase success
+        stat = (*_flash_erase_block)(block, flash_info.block_size);
         stat = flash_hwr_map_error(stat);
         if (stat) {
             *err_addr = (void *)block;
@@ -351,3 +351,5 @@ flash_errmsg(int err)
         return "Unknown error";
     }
 }
+
+// EOF io/flash/..../flash.c
--- a/packages/io/pci/current/ChangeLog
+++ b/packages/io/pci/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-02-02  Jesper Skov  <jskov@redhat.com>
+
+	* tests/pci2.c (pci_test): Removed bogus check for 1MB IO limit.
+
 2001-01-10  Jesper Skov  <jskov@redhat.com>
 
 	* src/pci.c (cyg_pci_get_device_info): Do correct casting of
--- a/packages/io/pci/current/tests/pci2.c
+++ b/packages/io/pci/current/tests/pci2.c
@@ -128,17 +128,6 @@ pci_test( void )
                    "cyg_pci_allocate_io_priv(256) size failed");
     CYG_TEST_CHECK(0x0100 == io_assigned_addr,
                    "cyg_pci_allocate_io_priv(256) align failed");
-    // Check IO space limit
-    io_base = 0x100000-0x80;
-    dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO | 0xffffff00;
-    CYG_TEST_CHECK(!cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
-                                             &io_assigned_addr),
-                   "cyg_pci_allocate_io_priv overflow");
-    dev_info.base_size[0] = CYG_PCI_CFG_BAR_SPACE_IO | 0xffffff80;
-    CYG_TEST_CHECK(cyg_pci_allocate_io_priv(&dev_info, 0, &io_base,
-                                            &io_assigned_addr),
-                   "cyg_pci_allocate_io_priv overflow (on limit)");
-
 
     // Check allocation and alignment of MEM space
     mem_base = 0x00000000;
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/common/current/ChangeLog
@@ -0,0 +1,38 @@
+2001-01-25  Bart Veer  <bartv@redhat.com>
+
+	* cdl/usb.cdl:
+	Correctly parent below CYGPKG_IO
+
+2000-11-22  Bart Veer  <bartv@redhat.com>
+
+	* include/usb.h: Fix nested #include protection.
+
+2000-11-21  Bart Veer  <bartv@redhat.com>
+
+	* First check-in of eCos USB support.
+
+//===========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//===========================================================================
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/common/current/cdl/usb.cdl
@@ -0,0 +1,54 @@
+# ====================================================================
+#
+#      usb.cdl
+#
+#      USB support
+#
+# ====================================================================
+#####COPYRIGHTBEGIN####
+#                                                                          
+# -------------------------------------------                              
+# The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+#                                                                          
+# 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 Original Code is eCos - Embedded Configurable Operating System,      
+# released September 30, 1998.                                             
+#                                                                          
+# The Initial Developer of the Original Code is Red Hat.                   
+# Portions created by Red Hat are                                          
+# Copyright (C) 2000, 2001 Red Hat, Inc.                             
+# All Rights Reserved.                                                     
+# -------------------------------------------                              
+#                                                                          
+#####COPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      bartv
+# Original data:  bartv
+# Contributors:
+# Date:           2000-10-04
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_IO_USB {
+    display     "USB Support"
+    include_dir "cyg/io/usb"
+    parent      CYGPKG_IO
+
+    cdl_interface CYGHWR_IO_USB_HOST {
+	display     "Availability of USB host-side hardware"
+    }
+    cdl_interface CYGHWR_IO_USB_SLAVE {
+	display     "Availability of USB slave-side hardware"
+    }
+}
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/common/current/include/usb.h
@@ -0,0 +1,240 @@
+#ifndef CYGONCE_USB_H
+# define CYGONCE_USB_H
+//==========================================================================
+//
+//      include/usb.h
+//
+//      Data common to USB host and USB slave
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/
+//
+// 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 Original Code is eCos - Embedded Configurable Operating System,
+// released September 30, 1998.
+//
+// The Initial Developer of the Original Code is Red Hat.
+// Portions created by Red Hat are
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+// All Rights Reserved.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// USB device requests, the setup packet.
+//
+// The structure is defined entirely in terms of bytes, eliminating
+// any confusion about who is supposed to swap what when. This avoids
+// endianness-related portability problems, and eliminates any need
+// to worry about alignment. Also for some requests the value field
+// is split into separate bytes anyway.
+typedef struct usb_devreq {
+    unsigned char       type;
+    unsigned char       request;
+    unsigned char       value_lo;
+    unsigned char       value_hi;
+    unsigned char       index_lo;
+    unsigned char       index_hi;
+    unsigned char       length_lo;
+    unsigned char       length_hi;
+} usb_devreq __attribute__((packed));
+
+// Encoding of the request_type    
+#define USB_DEVREQ_DIRECTION_OUT        0
+#define USB_DEVREQ_DIRECTION_IN         (1 << 7)
+#define USB_DEVREQ_DIRECTION_MASK       (1 << 7)
+
+#define USB_DEVREQ_TYPE_STANDARD        0
+#define USB_DEVREQ_TYPE_CLASS           (0x1 << 5)
+#define USB_DEVREQ_TYPE_VENDOR          (0x2 << 5)
+#define USB_DEVREQ_TYPE_RESERVED        (0x3 << 5)
+#define USB_DEVREQ_TYPE_MASK            (0x3 << 5)
+
+#define USB_DEVREQ_RECIPIENT_DEVICE     0x00
+#define USB_DEVREQ_RECIPIENT_INTERFACE  0x01
+#define USB_DEVREQ_RECIPIENT_ENDPOINT   0x02
+#define USB_DEVREQ_RECIPIENT_OTHER      0x03
+#define USB_DEVREQ_RECIPIENT_MASK       0x1F
+
+// The standard request codes.
+#define USB_DEVREQ_GET_STATUS            0
+#define USB_DEVREQ_CLEAR_FEATURE         1
+#define USB_DEVREQ_SET_FEATURE           3
+#define USB_DEVREQ_SET_ADDRESS           5
+#define USB_DEVREQ_GET_DESCRIPTOR        6
+#define USB_DEVREQ_SET_DESCRIPTOR        7
+#define USB_DEVREQ_GET_CONFIGURATION     8
+#define USB_DEVREQ_SET_CONFIGURATION     9
+#define USB_DEVREQ_GET_INTERFACE        10
+#define USB_DEVREQ_SET_INTERFACE        11
+#define USB_DEVREQ_SYNCH_FRAME          12
+
+// Descriptor types. These are placed in value_hi for the
+// GET_DESCRIPTOR and SET_DESCRIPTOR requests, with an index
+// in value_lo. They also go into the type fields of the
+// various descriptor structures.
+#define USB_DEVREQ_DESCRIPTOR_TYPE_DEVICE               1
+#define USB_DEVREQ_DESCRIPTOR_TYPE_CONFIGURATION        2
+#define USB_DEVREQ_DESCRIPTOR_TYPE_STRING               3
+#define USB_DEVREQ_DESCRIPTOR_TYPE_INTERFACE            4
+#define USB_DEVREQ_DESCRIPTOR_TYPE_ENDPOINT             5
+
+// Feature selectors. These go into value_lo for the CLEAR_FEATURE and
+// SET_FEATURE requests, and in the first response byte for
+// GET_STATUS.
+#define USB_DEVREQ_FEATURE_DEVICE_REMOTE_WAKEUP         1
+#define USB_DEVREQ_FEATURE_ENDPOINT_HALT                0
+
+// Index decoding. When the CLEAR_FEATURE, SET_FEATURE and GET_STATUS
+// requests is applied to an endpoint (as per the recipient field in
+// the type field) index_lo identifies the endpoint.
+#define USB_DEVREQ_INDEX_DIRECTION_OUT                  0
+#define USB_DEVREQ_INDEX_DIRECTION_IN                   (1 << 7)
+#define USB_DEVREQ_INDEX_DIRECTION_MASK                 (1 << 7)
+#define USB_DEVREQ_INDEX_ENDPOINT_MASK                  0x0F
+
+// Descriptors for the GET_DESCRIPTOR and SET_DESCRIPTOR requests.
+typedef struct usb_device_descriptor {
+    unsigned char       length;                 // USB_DEVICE_DESCRIPTOR_LENGTH == 18
+    unsigned char       type;                   // USB_DEVREQ_DESCRIPTOR_TYPE
+    unsigned char       usb_spec_lo;
+    unsigned char       usb_spec_hi;
+    unsigned char       device_class;
+    unsigned char       device_subclass;
+    unsigned char       device_protocol;
+    unsigned char       max_packet_size;
+    unsigned char       vendor_lo;
+    unsigned char       vendor_hi;
+    unsigned char       product_lo;
+    unsigned char       product_hi;
+    unsigned char       device_lo;
+    unsigned char       device_hi;
+    unsigned char       manufacturer_str;
+    unsigned char       product_str;
+    unsigned char       serial_number_str;
+    unsigned char       number_configurations;
+} usb_device_descriptor __attribute__((packed));
+
+#define USB_DEVICE_DESCRIPTOR_LENGTH             18
+#define USB_DEVICE_DESCRIPTOR_TYPE               USB_DEVREQ_DESCRIPTOR_TYPE_DEVICE
+#define USB_DEVICE_DESCRIPTOR_USB11_LO           0x10
+#define USB_DEVICE_DESCRIPTOR_USB11_HI           0x01
+
+#define USB_DEVICE_DESCRIPTOR_CLASS_INTERFACE    0x00    
+#define USB_DEVICE_DESCRIPTOR_CLASS_VENDOR       0x00FF
+#define USB_DEVICE_DESCRIPTOR_SUBCLASS_INTERFACE 0x00
+#define USB_DEVICE_DESCRIPTOR_SUBCLASS_VENDOR    0x00FF
+#define USB_DEVICE_DESCRIPTOR_PROTOCOL_INTERFACE 0x00
+#define USB_DEVICE_DESCRIPTOR_PROTOCOL_VENDOR    0x00FF
+    
+typedef struct usb_configuration_descriptor {
+    unsigned char       length;
+    unsigned char       type;
+    unsigned char       total_length_lo;
+    unsigned char       total_length_hi;
+    unsigned char       number_interfaces;
+    unsigned char       configuration_id;
+    unsigned char       configuration_str;
+    unsigned char       attributes;
+    unsigned char       max_power;
+} usb_configuration_descriptor __attribute__((packed));
+
+#define USB_CONFIGURATION_DESCRIPTOR_LENGTH     9
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       USB_DEVREQ_DESCRIPTOR_TYPE_CONFIGURATION
+#define USB_CONFIGURATION_DESCRIPTOR_ATTR_REQUIRED      (1 << 7)
+#define USB_CONFIGURATION_DESCRIPTOR_ATTR_SELF_POWERED  (1 << 6)
+#define USB_CONFIGURATION_DESCRIPTOR_ATTR_REMOTE_WAKEUP (1 << 5)
+    
+typedef struct usb_interface_descriptor {
+    unsigned char       length;
+    unsigned char       type;
+    unsigned char       interface_id;
+    unsigned char       alternate_setting;
+    unsigned char       number_endpoints;
+    unsigned char       interface_class;
+    unsigned char       interface_subclass;
+    unsigned char       interface_protocol;
+    unsigned char       interface_str;
+} usb_interface_descriptor __attribute__((packed));        
+
+#define USB_INTERFACE_DESCRIPTOR_LENGTH          9
+#define USB_INTERFACE_DESCRIPTOR_TYPE            USB_DEVREQ_DESCRIPTOR_TYPE_INTERFACE
+#define USB_INTERFACE_DESCRIPTOR_CLASS_VENDOR    0x00FF
+#define USB_INTERFACE_DESCRIPTOR_SUBCLASS_VENDOR 0x00FF
+#define USB_INTERFACE_DESCRIPTOR_PROTOCOL_VENDOR 0x00FF
+
+typedef struct usb_endpoint_descriptor {
+    unsigned char       length;
+    unsigned char       type;
+    unsigned char       endpoint;
+    unsigned char       attributes;
+    unsigned char       max_packet_lo;
+    unsigned char       max_packet_hi;
+    unsigned char       interval;
+} usb_endpoint_descriptor;
+
+#define USB_ENDPOINT_DESCRIPTOR_LENGTH           7
+#define USB_ENDPOINT_DESCRIPTOR_TYPE             USB_DEVREQ_DESCRIPTOR_TYPE_ENDPOINT
+#define USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT     0
+#define USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN      (1 << 7)
+#define USB_ENDPOINT_DESCRIPTOR_ATTR_CONTROL     0x00
+#define USB_ENDPOINT_DESCRIPTOR_ATTR_ISOCHRONOUS 0x01
+#define USB_ENDPOINT_DESCRIPTOR_ATTR_BULK        0x02
+#define USB_ENDPOINT_DESCRIPTOR_ATTR_INTERRUPT   0x03
+
+// String descriptors. If these are used at all then string 0
+// must be a table of supported LANGID codes. For a simple device
+// which only supports US English, the following sequence of
+// four bytes should suffice for string 0. In practice string
+// constants tend to be used which makes the use of these
+// #define's difficult.    
+#define USB_STRING_DESCRIPTOR_STRING0_LENGTH    4
+#define USB_STRING_DESCRIPTOR_STRING0_TYPE      USB_DEVREQ_DESCRIPTOR_TYPE_STRING
+#define USB_STRING_DESCRIPTOR_STRING0_LANGID_LO 0x09
+#define USB_STRING_DESCRIPTOR_STRING0_LANGID_HI 0x04
+
+// For subsequent strings the length and data will have to be
+// determined by the application developer or by a suitable tool.
+#define USB_STRING_DESCRIPTOR_TYPE              USB_DEVREQ_DESCRIPTOR_TYPE_STRING    
+
+// Utility macros to calculate the total_length fields in a
+// configuration descriptor.
+#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_LO(interfaces, endpoints) \
+    (USB_CONFIGURATION_DESCRIPTOR_LENGTH +            \
+     (interfaces * USB_INTERFACE_DESCRIPTOR_LENGTH) + \
+     (endpoints  * USB_ENDPOINT_DESCRIPTOR_LENGTH)) % 256
+
+#define USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_HI(interfaces, endpoints) \
+    (USB_CONFIGURATION_DESCRIPTOR_LENGTH +            \
+     (interfaces * USB_INTERFACE_DESCRIPTOR_LENGTH) + \
+     (endpoints  * USB_ENDPOINT_DESCRIPTOR_LENGTH)) / 256
+    
+#ifdef __cplusplus
+} // extern "C" {
+#endif
+
+#endif // CYGONCE_USB_H
+
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/ChangeLog
@@ -0,0 +1,80 @@
+2001-02-02  Bart Veer  <bartv@redhat.com>
+
+	* cdl/usbs_eth.cdl:
+	Add doc property to point at the HTML
+
+	* doc/usbseth.sgml, doc/*.html:
+	Incorporate changes from docs department, regenerate HTML
+
+2001-01-26  Bart Veer  <bartv@redhat.com>
+
+	* src/usbsethdrv.c (usbs_ethdrv_ioctl):
+	Change chipset specification to null, since there is no real
+	hardware involved, plus SNMP cleanup.
+
+2001-01-22  Bart Veer  <bartv@redhat.com>
+
+	* doc/usbseth.sgml, doc/makefile, doc/simple.fig, doc/tcpip.fig:
+	Added documentation.
+
+2000-12-15  Bart Veer  <bartv@redhat.com>
+
+	* src/usbsethdrv.c:
+	Enable poll functions.
+
+2000-11-29  Bart Veer  <bartv@redhat.com>
+
+	* host/ecos_usbeth.c:
+	Remove debugging and fix the MTU
+
+2000-11-28  Bart Veer  <bartv@redhat.com>
+
+	* cdl/usbs_eth.cdl
+	* include/usbs_eth.h
+	* src/usbseth.c
+	* src/usbsethdrv
+	Clean-up, adding missing functionality such as SNMP support,
+	update to current USB API.
+
+2000-11-24  Bart Veer  <bartv@redhat.com>
+
+	* host/ecos_usbeth.c:
+	Ignore runt packets, cope with the confusion between
+	CRC errors and timeouts.
+
+	* include/usbs_eth.h, src/usbseth.c
+	Clean up alignments.
+
+2000-11-22  Bart Veer  <bartv@redhat.com>
+
+	* include/usbs_eth.h: Fix nested #include protection
+
+2000-11-21  Bart Veer  <bartv@redhat.com>
+
+	* First check-in of eCos USB support.
+
+//===========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//===========================================================================
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/cdl/usbs_eth.cdl
@@ -0,0 +1,110 @@
+# ====================================================================
+#
+#      usbs_eth.cdl
+#
+#      USB slave-side ethernet package.
+#
+# ====================================================================
+#####COPYRIGHTBEGIN####
+#                                                                          
+# -------------------------------------------                              
+# The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+#                                                                          
+# 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 Original Code is eCos - Embedded Configurable Operating System,      
+# released September 30, 1998.                                             
+#                                                                          
+# The Initial Developer of the Original Code is Red Hat.                   
+# Portions created by Red Hat are                                          
+# Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
+# All Rights Reserved.                                                     
+# -------------------------------------------                              
+#                                                                          
+#####COPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      bartv
+# Original data:  bartv
+# Contributors:
+# Date:           2000-10-04
+#
+#####DESCRIPTIONEND####
+# ====================================================================
+
+cdl_package CYGPKG_IO_USB_SLAVE_ETH {
+    display     "USB slave ethernet support"
+    include_dir "cyg/io/usb"
+    parent      CYGPKG_IO_USB_SLAVE
+    requires    { CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS >= 1 }
+    requires    { CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS >= 1 }
+    compile     usbseth.c
+    implements  CYGINT_IO_USB_SLAVE_CLIENTS
+    doc         io-usb-slave-eth.html
+    
+    description "
+        The USB slave ethernet package supports the development
+        of USB peripherals which provide an ethernet service to
+        the host machine. Such a peripheral could be a simple
+        USB-ethernet converter, or it could be rather more
+        complicated internally."
+
+    cdl_component CYGPKG_USBS_ETHDRV {
+	display         "Provide a driver for a TCP/IP stack."
+        requires        CYGPKG_IO_ETH_DRIVERS
+	implements      CYGHWR_NET_DRIVERS
+	default_value   CYGPKG_NET
+	compile         -library=libextras.a usbsethdrv.c
+
+	description "
+	    The primary purpose of USB slave ethernet support is to provide
+	    an ethernet service to the USB host. This is very different
+	    from a conventional network driver which provides a service
+            to a TCP/IP stack running inside the peripheral. If this
+	    component is enabled then the USB-ethernet code will implement
+	    an eCos network driver, thus supporting both a host-side TCP/IP
+	    stack and an eCos stack. This raises issues such as enabling
+	    the bridge code in the stack, and the package documentation
+            should be consulted for further information."
+
+	cdl_option CYGFUN_USBS_ETHDRV_STATISTICS {
+	    display       "Maintain traffic statistics"
+	    flavor        bool
+	    default_value CYGPKG_SNMPAGENT
+	    description "
+	        The USB network device driver can maintain some statistics
+                about traffic, for example the number of incoming and
+	        outgoing packets. These statistics are intended mainly
+	        for SNMP agent software."
+	}
+
+	cdl_option CYGDAT_USBS_ETHDRV_NAME {
+	    display       "Name to use for this network device"
+	    flavor        data
+	    default_value { "\"eth0\"" }
+	    description "
+	        The name of this network device for control purposes.
+	    "
+	}
+
+	cdl_option CYGPRI_USBS_ETHDRV_ETH0 {
+	    display       "Enable/disable generic eth0 configury"
+	    flavor        bool
+	    calculated    { "\"eth0\"" == CYGDAT_USBS_ETHDRV_NAME }
+	    implements    CYGHWR_NET_DRIVER_ETH0
+	}
+	cdl_option CYGPRI_USBS_ETHDRV_ETH1 {
+	    display       "Enable/disable generic eth1 configury"
+	    flavor        bool
+	    calculated    { "\"eth1\"" == CYGDAT_USBS_ETHDRV_NAME }
+	    implements    CYGHWR_NET_DRIVER_ETH1
+	}
+    }
+}
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/io-usb-slave-eth.html
@@ -0,0 +1,166 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+eCos Support for Developing USB-ethernet Peripherals</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="NEXT"
+TITLE="Introduction"
+HREF="usbseth-intro.html"></HEAD>
+<BODY
+CLASS="REFERENCE"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+&nbsp;</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbseth-intro.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<DIV
+CLASS="REFERENCE">
+<A
+NAME="IO-USB-SLAVE-ETH">
+</A>
+<DIV
+CLASS="TITLEPAGE">
+<H1
+CLASS="TITLE">
+I. eCos Support for Developing USB-ethernet Peripherals</H1>
+<DIV
+CLASS="TOC">
+<DL>
+<DT>
+<B>
+Table of Contents</B>
+</DT>
+<DT>
+<A
+HREF="usbseth-intro.html">
+Introduction</A>
+ &#8212; eCos support for developing USB ethernet peripherals</DT>
+<DT>
+<A
+HREF="usbseth-init.html">
+Initializing the USB-ethernet Package</A>
+ &#8212; Initializing the USB-ethernet Package</DT>
+<DT>
+<A
+HREF="usbseth-data.html">
+USB-ethernet Data Transfers</A>
+ &#8212; Exchanging ethernet packets with the USB host</DT>
+<DT>
+<A
+HREF="usbseth-control.html">
+USB-ethernet State Handling</A>
+ &#8212; Maintaining the USB-ethernet connection with the host</DT>
+<DT>
+<A
+HREF="usbseth-netdev.html">
+Network Device for the eCos TCP/IP Stack</A>
+ &#8212; USB-ethernet support for the eCos TCP/IP Stack</DT>
+<DT>
+<A
+HREF="usbseth-host.html">
+Example Host-side Device Driver</A>
+ &#8212; Provide host-side support for the eCos USB-ethernet package</DT>
+<DT>
+<A
+HREF="usbseth-protocol.html">
+Communication Protocol</A>
+ &#8212; Protocol used between the host-side device driver and the eCos
+USB-ethernet package </DT>
+</DL>
+</DIV>
+</DIV>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbseth-intro.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Introduction</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/simple.fig
@@ -0,0 +1,23 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 600 600 2400 600 2400 2400 600 2400 600 600
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 2400 1500 4200 1500
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4200 600 6000 600 6000 2400 4200 2400 4200 600
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 6000 1500 6600 1500
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 6600 300 6600 2700
+4 0 0 50 0 0 12 0.0000 4 135 675 3000 1425 USB bus\001
+4 0 0 50 0 0 12 0.0000 4 135 735 1200 1425 USB host\001
+4 0 0 50 0 0 12 0.0000 4 180 1155 4500 1425 USB peripheral\001
+4 0 0 50 0 0 12 0.0000 4 135 945 6150 2925 real network\001
new file mode 100644
index 0000000000000000000000000000000000000000..d844d2ca2fe40509931cc74e0a7506e19cd0fcec
GIT binary patch
literal 70372
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
K*7dC-f$4w3b8nLX
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/tcpip.fig
@@ -0,0 +1,33 @@
+#FIG 3.2
+Portrait
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 600 600 2400 600 2400 2400 600 2400 600 600
+2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
+	 4200 600 6000 600 6000 2400 4200 2400 4200 600
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 6600 300 6600 2700
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 2400 2100 4200 2100
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 1 4
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 1500 1125 1500 1500 4950 1500 4950 1200
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2
+	 6000 2100 6600 2100
+2 1 1 1 0 7 50 0 -1 4.000 0 0 -1 1 1 3
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 5175 1200 5175 1500 6600 1500
+4 0 0 50 0 0 12 0.0000 4 135 945 6150 2925 real network\001
+4 0 0 50 0 0 12 0.0000 4 135 735 1125 2100 USB host\001
+4 0 0 50 0 0 12 0.0000 4 180 1155 4500 2100 USB peripheral\001
+4 0 0 50 0 0 12 0.0000 4 135 675 2925 1950 USB bus\001
+4 0 0 50 0 0 12 0.0000 4 135 540 1200 1050 TCP/IP\001
+4 0 0 50 0 0 12 0.0000 4 135 540 4800 1050 TCP/IP\001
new file mode 100644
index 0000000000000000000000000000000000000000..f38f1ea53531d7e3d2ca6fffdba3d3855f016242
GIT binary patch
literal 70372
zc%1E>eOwg9AIFCWh17(rOsz=7)FShV%<3vEF|x>ffb7WxkyA5~1i7BMQtNz3Gc&;=
z%*+QWv#b=Zg35eE%&f>f0v{3|4@^Z-*!%6?9mhTF?as{3?hg3lukUN`Zg+;=?`Plh
z{my(RcIf@L-;p%a??Z6T3fMnCKR<te|A2siz`(#(ty;Bi-8v{JC^$Iyvdb=O)22<^
zwr$(BYj^qOm$z@<J|rY0G&EGB(OhxG6<1z)<yBW*)uBU&tFOMgW5<r2I(6#Yx$`yG
zTyyQU*Iswsbzxy)*I$2qmo8nx!^69F?HUmg(XCsz8*aFvd-v`=di3bov*(RB-gwhZ
zH$_H9-hA`Ty?XV!<(6A|_wL=NPoKVh`}XVCuYdpkQBhI1-g@hR0RwKk?Y4mf2i|`B
z?RVU9$DMcHsnu%ly6djH@4ow<d+v#jjvh2<(7pHGd*6Nc4IVr=CMIUckRkWqe}8Oj
z>;n%xFm&k92OoU!p@$xdi;H{s;fIF}8}`T}j|?9^e8h+mBS(%LHEL9Re0)Me!lREq
zI(qcz#~yp^@y8#3;)y4oeDcYso_cD`m@!X3{q)$eV-ph-lai9gjT@JooIHN~_>`0s
zolZAl!i0$vCr+9)>6vGqnLK&&v(G*|Wy+M))YPd{r>3Q)J@?#m)22;JPfyRt$e2ET
zdS+&(Uax=t`R8AF;e{7peDS51UV8cEmtT41l~-SVH7hI2U@*M)+H0@B{`!m=GiJ`5
zIcwIeH{N*T%{SjP8jZ7O&z>`9&fK|k=gph<)?07QpFe-Wf(38C{r19z3*UL?okfcl
zz5DLFix)3`@4feyELoDBot=}Dvvldw_uqg2gAYE)&CUJr!w>WF@|G=I_R&WlEnmL;
z<BvaHv0}w1pM0`%<;qp7R;^yWdd-?O`T6;ue){QWpMCcE=bx`#yY`DOzF4<z-Irf}
z`PElntzW<X>#x85=9_Q6{r1}p8#Zj*xUrz1ps=veWHNpC-FM%A|NRd?{7_U>R9syA
z<Bvc7^wUp2|NQf&O`CrC<(JKyH*eXpW$V_h+qP}nzJ2?S9Xm=&N_OttSz21UYuBz{
zfBkj$?%lur_S>F4dw&1@_dovl<Ig|;EGsMf>#x7|?%n(M-+%Ahx6f=gmzS6S^UpsO
z6&010mHYSaKXBl{!Gi}69Xj;yzyBUSe7LHr>d28JM~@yocI?>k<Ht{&IC1jiNsGl&
zU0q#MQ*-LnssH}_@AT=@XU?2Cd-iN?ZSA>p=gyx$UsqRm;lhQB7cbV=*EcjYFbre0
zTD#T-ay|gMGPi~gosu*mC453kYRa^vjFj==<6a1l9hMLtJ8^1yMtbtJNog73H;zxq
zoRpk$cUtO{X-WE<+JIi%k2zlg!3?lATs&7@QIut6E<r=|OVI|ET6Xe+0@q?BpQuZ*
z>h}=eU}QM8*8NCGB^_PmGZ+fm5mZBq^Ow?cTilF*^KzY;p`?e>48QMA<NchWq4n|`
zz{hQ7)NYwx)vGg3>yqRj_-}jjPp;~%muyJK9;eY<_{ZcTlX75>FM~q<p#giGhA977
z>eX|83Jl`>qZIZiB$IyiXurBdu*Ye5@Q*n5=&RIkv}^|BeW-=-50p$|oLaT`j|>Ju
z>~R{B`A4hRe?dv?aT@gS4_WLXC6mg<f2g<#$Ob9?alQu2>*(khAp??snmzX5%A}ot
zRFC$kYw%!?(~z5gC<rS{`F#uEA1v&Fl}Y;JKdNAl(@>g!yu!*J*rTs1&DH8H=7My^
z4c<n}&Ode$QmfC<(JNmv*~mYb*g_)Oqguclrq9CsgO5G1ykQbazbQAo<7pU&J-!lP
zii(g@hWn^Y2z#7O^u<4_aSO44H~P<b`m7NDK+Btm7`dEBj%bg!;le+vy1Lg#%3zOZ
zpBwo{EM7udGT@^<>IJ;HKFh^F7_N?`Msmxf@A!|9WXSx^qlk!j`G*nrOfhazQ8FYO
zZqXiB{!!P}Nr(~5d4#aX+klV%G!r5sdihdV{t*Kh#U#TEd*lsx3&wv`AR-6$K+Bul
zGKnAm!6G6eNiHR2(u04b#!E0YgQ#Q>Jt0c|tDI3Sw*@P2#AVWzf21Y3nmrNmC%J^<
zKhUl&qDB;u6&m(94Jr9AnurLmiJ~$oU;KwG5urqTND>iZ{!6Z~vT{i-M42R+|MIOt
za!+ZNPbSI4e=s#eAw!Bx!tjs48%~C}vciT)!&v^2ZEg?!MAVq%5;&0>`7b2NkZAB=
z57Nky?ED|a!^*_}uO2N^a{dnn5fMsq;mf24|G-K{bcC&dLt<HULKHCeO<#4bAsEE0
zzHn|qum+fz=>egBhTsIz^SELUUFo+*!;ODpY@IG%o0YEvp-G2_4Fnos9DcUCizWhO
zHXLsq?hiEi2v=tmjVp7;hT|2{z-mqzIb`Nuo3jMeROjUfTMNtUf+{&RVH!qt*pKi}
z462bp2V`B{r!lpR>sY~#6?1~u+nj~%YIK5znQl5AQp|n_)L&c``I9^{DZoDrqGs6I
zs>`sspPp;<hRK_Yv?Yw+dDe{$S=P**=jD(Lxn$CTJt7mJxsEYAkJNHUEL>Nomd(r3
zXE(6VE%zidCzqZg<?5~m!LV}U?Xh<UM1lN`7h?}qFkI^!0uoyf>Yx|;y%+ybGC4=s
zXuLhPBhf$y;-5RWV5?1EE(R61Gej~Ll*<eB*@J(i#!Fn!%o;t%l{s{dQ%7qy>otv%
zf%s2!Z<u1Yj^iH`SLZtR$fmU}io^6{pLW{=?1!Q+uCDI&5pt3XRVL$Sr*WOvIc`*L
zs)rvo>5EwWM~*=hWV8o?h-@8ObH#oOd!)p1qqOB7euyKJBJm%rurhD7$GpZLa6Xow
zZv?|<?d=U%qT+P2Xbb@6y{$OvLh6P>GRYVJ5u<}9t6&t{G463q(D*HDv!3nhi3>KJ
zGy$-2eOq7{gVrF))0Ht~QrPh3AF=T~MU!*nFg&9@cK&G*)0JVqjJ%QyBK|`^5s4+a
zBm|qJ#(xwID<g>z5raSeqf%Iz<dkMYGKsPN3!8|fC%KfDNrL$=MyjhzG-Q!UxcpbC
zxAWtvkrc_;aYjN{ab?oUKN8Xy^b?V|O!`c6K`ej|m-33DgNX1Kuw&)FlnyKN7z;WF
z>YPW==k`F$B>DC4Dpo8bpMFEne+}N$YByQQP-Z0;o=g&1|1OLh2uUs}!6qG(BVhpR
zt6|dlM|5rv1`!py9m&%QM$mm51Z2|AKSKT}c8$Co_SWJ5gK3(>$YU^W0iftkZeJ=}
zwM$-Cmv2=^zrklhH0wpb>=S#OEkiAUDBVCNqV%BRa@Qm45@ChL1AB1NZ@l~?VGw1^
zP8s*c5$vBM5fSE;W+V|3;-C1G5ocYGbbm-rSN9Sl2`BP0zSze;6ou%mck++&gQ!OA
zL60lvrn)|6=|MsBO<3)K=(C-F<OnM_VULtol-hF`QTS)VVfJ0#c!b5C_%$OxIY!Xc
zk=002tSJR*0~eq1pXM`N*<#5s9ketZ3DaBf8t?L}rk57~1fb?RT^Z6qn9|(DKd7#r
z7nz`sU(@uIPS~8QjgsK%(#5FpJS58%LdJh+3M-3X&yGWu`KGw0BcUh%o`nTuwmw6}
ze-y2PfvXv^7y|JhbXWIy{!N*DUxtYGP_e2b$7bNhe|$=Y>?^r2h{)u2WNI10R2nz_
zff)S2CAlP}qNKc{h|8oW|H$d;=~WiIpDVVigXdk<#6Ob$_sxQca8_~&#eb-%f&u^7
z@?nqU^c(j2FU5(d344@GzsXep8J&noT^>Uw-Cfj8CXw=AQo_m%&WVT{$TCT){xgH)
z>K@O3Cgz^8a>^uR{73QvcKYWq@_Q)9KVwXo&M)HXeHKOPq0~qcSs_lbb~o$|6M99-
zwgD;z5yiP3*)X{b@9LiF=7~K8qo!{u2}`g*rQh)LU!}R+3WwvFRi(MyJv60P4O_{6
zlv0@9a}WES{^bSf+_P=6m<#rttSCy=Tg-d8bcj}O8DDt1dhANAzCZVr?XlN3-*6oB
zgpBQstaQPhQ485b#|eSXOBAOcudS|F%YG+=%Zsqr%5?lYxFPM5qoujrecqA5UX=av
z$wKy`8?vm0<pnd6xf{-2Ytd2mJUJHgHf}~-9D7mjKG{!Lc1v5(X(Ebb5KVHS%cNra
ze~DErlg|*5w_UmUTAgL}H1Yb+G7O?%=l0M_L=yQ&INBq^8#`8Px98O<UezJYKXTUX
zp`VEKobwA#fTnzMjzohWdp!Cq-v;ogt`03mkmn&&x5tBj=$NhyV~|U73HBMK{<D&j
z;f_7(rQblcDv5SJSI1T(8D&x={)0<I1g138K}2}<pHZtc6E_r-NiY84JYA(7*eO`m
z;o|&`Lx=?sTL2NEB_ufhQGdEJLCGLou23}oLm3faB)KHXq_p~n#EA$x+M^T^@x*^*
ztb(D`6G%)Zk=K6-YLL7uxzvzJr1+2c+@2OkM6Uef3wx-Tt}MxblS$ssBo~0DpNPbg
zT!JT(H~ym>5qV+{saQHj{!5KwL1cGeN03R<^`G&Gh(wZ09+^}m|Anp@#0^ZDBvAjk
zypB+ki^e&OF#IEFN;CaLBv$_!zDhH31D%N6%BohSV$Sez(;(q*%di0|RbgeU*N;of
zeDhC1z^^AOqIJOB@V@59b_=s&KnVzs;O2!eYy4}-yE>ME5beQBzwz)7MUugbJ-{Xm
z#jIiGib~mPZ#!z^0^G~{?6ds)UkIohT9Qi@nY8l{jH}y={|3}lcUc(8$)v3ce3av(
zNKJf-|GKuokY&`x3_1g&d~hNpp8+LrF!i6It27fgpd=%p#^G7%qr3aBXFbAP(9JHB
z4FQ$y7aF;b0&4pBN9c3VWm15D<XXu^#i|Z*!x8P_p8y2q>bBb3tk<#5w&R8awmQ@W
z_M6Fl6jaGMB&gpvU`DWbAr)8+B4<GM8KVF+-I9@K9K+rxhJCu)FL&IiifBD(lu(PY
zKA>h-n1TIwq|AY!lt%ucaq#0?jCip}mS7W9{0GX_w>;Y#0G+vEUw40Ch+~l?Tl3mh
zdz*XS7pT!$b;dz4hsMs-Mu<LuF4&`X`b~QMXLQLRHl<ksBJvggp?_N*;xf6*txA>I
zwweed{=>-S>Zl^bZ@_JwQn2qV-$!06zg_sp;px(oTo97MzEBET#cF3TWkp3~cl~cc
zu%R=E8E?B|30{M!R5ZzubPqg}T(AXz_*`9Jgzxp`7{}9|&$qQqa_dUz@&+f9A}6wM
z3B!(dL)cr#@^%2=7JxbF!0pRb!#0tY4C01|2030f0wa81C-UA}hBJV`24IR#S9T7f
zx{ds$yvV-i*)yB%A0@Uf4%5c~V`426vU^^z(Fg!!_=$i_Vy^$<b#>n({633<qcr^+
z(qjX`!ng>FdBlK&V|!?H5#uj#yHRPaW{uyVLt~j98oecccH&{dJ#!RIzX2Qna2+!z
z%q~8`HcW3ZZneiJz{cd(26pUZ)YZ>5Y#p-_I{M^8GL%@!#VbOBBm7~DjahmCz`C}M
zjkkh|b0amj&R1510pJJzI?K6gzD<>ip<Ug}fL0@vU=znAIWeAtC@TPIHp8R~O{x`Y
zv{add=O2-153j3>j_@^lYttrFw)<l@VmH}XjnmX&J%HfWV)DwQlYbhq$F}2}#ZqsY
zaip=)+-TS8kP{FU+K@i*AbYW#i24B7D81T)DEE)-BYgJ(KGXDYmKf`!(yQ`Jwzql^
zsN_7eU$_5kuR|uM;PkHYwXD%~=_&gWG*^dLBee5m?*yQDo+--|1HjuyD|&;dh|mIC
z=kr0vs8*GuJ7^-Z8|J3PZpzJyD1n^V2ZL5J<iC8ny1)oOXwb}Hoi%$lNQ>=Yh-5!X
ztPL>)Yf9q%j;w5B(CQ+9xo%aPL5t&n#mMa}<{oi#8)K7AzbUx>%V{JPq*s;ZYV{T~
zoWUS{TgYht9%5So@a7+AS#dLdo(9*{uwI@&$F0&#+~AW*`SV{4tgE{ke1M3T{F5k?
zP4OShK@^GqBE54MJ@}`ipTVP)GIOqvKfu~Qphc|eU`Q1JBH-$RMsls!M_W!{T-{yW
zgjRBi6@aFFy0RS3@7-sa_y@z)A;pNdO0#^18~@N1RwlfX3s2tQ>pznoM8QvKR+ETi
z;~%kTPcvE7AvFJ4%C<Zb4O)oESNsPe$whz09^Yt6a(VC%U4tJSF@iY{!UA@b4KSJw
z5fQw6Pz_bnm0=98H;SC;H<9>{3Pj|<9x95^OWXeoi-?G<<Wf#1z4%9Byac^UGjW5c
zOrov-vM{t{+I=^Xs7!kBkF+Vx&7O#O=Jtrjf11g3WtfKH)a{YB0V-WYgw;e5nUpjB
zLzak82GZn+2s!^HS6Eq@Xb()w+zhh&pZeAyvJ2QH$Qz<e5{myo&FyK9L<Gk_BwSrA
zu1p|(jA;lo%+5cut>h|Kt<NYjDKw>7rTmwYhNN<Z(l>y|G}KFSAsLG0zi<sDl3W5Z
zsmA;tS3^1M!82su|GhaRxdaVq{G;gR6sj14^`GfzqG|?*Jp>8>$zv#)<PtDiF8`3J
z(#%@`nvxz08_HaaR{l{m$t7T@#6PrSkJFH+{<GZC9_0)y{-FSSRILB}f9!ENM798Q
zb1=~A_OulKk(A^TFjR~G;2H{Fm9qNJN=JJ{4Q2U<(j=FFK{Wo;a<Io~pzsgfNiKN|
z7yhB6K{6TQGRdFhqBj0R+Q2MVC^!Eo6;_sOPp;;|KcvqHE0c7@f2hMAr=bY{xMGi2
zi7&bh68zHwvBzmZ@DByi9`y`?LQR*3Au_k8rSp%}D$UJ2{v-QVq?GfI>g`aKf9S;?
zry(c*G@B%sfFXf@WWpZ)%CX*tGN9?3e=ce4X;MCC0I0;fa%>^b??<)rT}!qZ8L(5D
zsplWB!m+z@jl7QFc6W(wPSHI1N4Xu?o&3{hkx{F+)rqYriqw?Y$|e?NnPRg2(yH>b
z5x`jA%^!f}oy+s%>-1F}G$10ID~eef2CO>sUPw(vb$<2lh8p~XxC47lHCHDVoVc*+
zn0?C;yVsS2dQ$)ZhB54s^qvRuBBQLKnxxv0-Sg~KF%vt&Z%ZO@b@Kev60pZ<_~sw>
z9yrRxmTwEJbX449osMBG<3{dF+@YKi(_>=>CIGXeJ}Z01)dwsTbc~SU#Xq!T59eYf
z=DMoXj>|hcs>>ER%FO2FXt`|}xcj7w>EAW~Kx*sdSr(nW0xd8ZVP@!g9a3ZiRBDVI
z)Sp4~&!|?*wny9Q#4fq4I83AGO2}4M^akbeera3c0u5R#GrRBU>amNnEG6~Hj}GDL
U&Bpt!{;DmA(C7+V1p@8=07^`5=Kufz
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth-control.html
@@ -0,0 +1,304 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+USB-ethernet State Handling</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="PREVIOUS"
+TITLE="USB-ethernet Data Transfers"
+HREF="usbseth-data.html"><LINK
+REL="NEXT"
+TITLE="Network Device for the eCos TCP/IP Stack"
+HREF="usbseth-netdev.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos Support for Developing USB-ethernet Peripherals</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbseth-data.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbseth-netdev.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBSETH-CONTROL">
+USB-ethernet State Handling</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN163">
+</A>
+<H2>
+Name</H2>
+USB-ethernet State Handling&nbsp;--&nbsp;Maintaining the USB-ethernet connection with the host</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN166">
+</A>
+<H2>
+Synopsis</H2>
+<DIV
+CLASS="FUNCSYNOPSIS">
+<P>
+</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="FUNCSYNOPSISINFO">
+#include &lt;cyg/io/usb/usbs_eth.h&gt;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+usbs_control_return usbs_eth_class_control_handler</CODE>
+(usbs_control_endpoint* ep0, void* callback_data);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_eth_state_change_handler</CODE>
+(usbs_control_endpoint* ep0, void* callback_data, usbs_state_change change, int old_state);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_eth_disable</CODE>
+(usbs_eth* usbseth&#62;);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_eth_enable</CODE>
+(usbs_eth* usbseth&#62;);</CODE>
+</P>
+<P>
+</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN197">
+</A>
+<H2>
+Description</H2>
+<P>
+When the USB-ethernet package is initialized by a call to <A
+HREF="usbseth-init.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+</A>
+ it
+installs <TT
+CLASS="FUNCTION">
+usbs_eth_state_change_handler</TT>
+ to handle
+USB state changes. This allows the package to detect when the
+connection between the host and the peripheral is established or
+broken, resulting in internal calls to
+<TT
+CLASS="FUNCTION">
+usbs_eth_enable</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_eth_disable</TT>
+ respectively. This is
+appropriate if no other code needs to access the USB device. However,
+if there is other code, either other USB-related packages or the
+application itself, that needs to perform I/O over the USB bus, then
+typically the USB-ethernet package should not have exclusive access to
+state change events. Instead, the assumption is that higher-level
+code, typically provided by the application, will install an
+alternative state change handler in the control endpoint data
+structure after the call to <TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+. This
+alternative handler will either chain into
+<TT
+CLASS="FUNCTION">
+usbs_eth_state_change_handler</TT>
+ when appropriate,
+or else it will invoke <TT
+CLASS="FUNCTION">
+usbs_eth_enable</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_eth_disable</TT>
+ directly. For further details of
+state change handlers and control endpoints generally, see the
+documentation for the common USB-slave package.</P>
+<P>
+Similarly, <TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+ will install
+<TT
+CLASS="FUNCTION">
+usbs_eth_class_control_handler</TT>
+ in the control
+endpoint data structure as the appropriate handler for class-specific
+USB control messages. This code will handle the ethernet-specific
+<A
+HREF="usbseth-protocol.html">
+control messages </A>
+, for example
+requests by the host to enable or disable promiscuous mode or to
+obtain the MAC address. If the USB device is not shared with any other
+code then this is both necessary and sufficient. However, if other code
+is involved and if that code also needs to process certain control
+messages, higher-level code should install its own handler and chain
+to the USB-ethernet one when appropriate. It should be noted that the
+request code is encoded in just a single byte, so there is a real
+possibility that exactly the same number will be used by different
+protocols for different requests. Any such problems will have to be
+identified and resolved by application developers, and may involve
+modifying the source code for the USB-ethernet package.</P>
+<P>
+As an alternative to chaining the state change handler, higher-level
+code can instead call <TT
+CLASS="FUNCTION">
+usbs_eth_disable</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_eth_enable</TT>
+ directly. These functions may
+also be called if the USB-ethernet package should become inactive for
+reasons not related directly to events on the USB bus. The main effect
+of <TT
+CLASS="FUNCTION">
+usbs_eth_enable</TT>
+ is to restart receive
+operations and to allow transmits. The main effect of
+<TT
+CLASS="FUNCTION">
+usbs_eth_disable</TT>
+ is to block further transmits:
+any current receive operations need to be aborted at the USB level,
+for example by halting the appropriate endpoint.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbseth-data.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbseth-netdev.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+USB-ethernet Data Transfers</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Network Device for the eCos TCP/IP Stack</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth-data.html
@@ -0,0 +1,369 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+USB-ethernet Data Transfers</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="PREVIOUS"
+TITLE="Initializing the USB-ethernet Package"
+HREF="usbseth-init.html"><LINK
+REL="NEXT"
+TITLE="USB-ethernet State Handling"
+HREF="usbseth-control.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos Support for Developing USB-ethernet Peripherals</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbseth-init.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbseth-control.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBSETH-DATA">
+USB-ethernet Data Transfers</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN94">
+</A>
+<H2>
+Name</H2>
+USB-ethernet Data Transfers&nbsp;--&nbsp;Exchanging ethernet packets with the USB host</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN97">
+</A>
+<H2>
+Synopsis</H2>
+<DIV
+CLASS="FUNCSYNOPSIS">
+<P>
+</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="FUNCSYNOPSISINFO">
+#include &lt;cyg/io/usb/usbs_eth.h&gt;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_eth_start_rx</CODE>
+(usbs_eth* usbseth, unsigned char* buffer, void (*)(usbs_eth*, void*, int) complete_fn, void* complete_data);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_eth_start_tx</CODE>
+(usbs_eth* usbseth, unsigned char* buffer, void (*)(usbs_eth*, void*, int) complete_fn, void* complete_data);</CODE>
+</P>
+<P>
+</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN122">
+</A>
+<H2>
+Description</H2>
+<P>
+The USB-ethernet package provides two main modes of operation. In the
+first mode it provides a <A
+HREF="usbseth-netdev.html">
+network device
+driver</A>
+ for use by a TCP/IP stack running inside the USB
+peripheral. All incoming ethernet packages should be passed up the
+TCP/IP stack, and only the stack will generate outgoing packets. Apart
+from <A
+HREF="usbseth-init.html">
+initialization</A>
+ and possibly
+certain <A
+HREF="usbseth-control.html">
+control operations</A>
+,
+higher-level code will not interact with the USB-ethernet package
+directly.</P>
+<P>
+In the second mode there is no TCP/IP stack running inside the USB
+peripheral. For example, a simple USB-ethernet converter has an
+ethernet chip and a USB port: ethernet packets received by the
+ethernet chip need to be forwarded to the USB host, and ethernet
+packets sent by the USB host need to be sent out of the ethernet chip.
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_rx</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_tx</TT>
+ allow for this lower-level
+access to the USB-ethernet package.</P>
+<P>
+The two modes of operation are mutually exclusive. If the network
+device driver mode is enabled then application code should communicate
+at the TCP/IP level, and not by using the lower-level functions.
+Instead, it is the network device driver that will make use of these
+functions, and it assumes that it has exclusive access. The package
+does not perform any locking.</P>
+<P>
+The transmit and receive functions work in much the same way. The
+first argument identifies the <SPAN
+CLASS="STRUCTNAME">
+usbs_eth</SPAN>
+
+structure that should be used. For the majority of applications this
+will be <TT
+CLASS="LITERAL">
+usbs_eth0</TT>
+. The second argument specifies
+the location of the ethernet packet; outgoing for
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_tx</TT>
+ and incoming for
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_rx</TT>
+. This buffer should correspond
+to the <A
+HREF="usbseth-protocol.html">
+protocol</A>
+:</P>
+<P>
+</P>
+<OL
+TYPE="1">
+<LI>
+<P>
+Outgoing packets can consist of up to 1516 bytes, consisting of a
+two-byte header specific to USB-ethernet followed by a standard
+ethernet frame (a header with 6-byte destination address, 6-byte
+source address and a further two bytes, followed by a payload of
+up to 1500 bytes). The two-byte USB-ethernet header consists simply of
+the size of the ethernet frame, i.e. the size of the rest of the
+packet not including the USB-ethernet header, with the least
+significant byte first.</P>
+</LI>
+<LI>
+<P>
+For incoming packets the supplied buffer should usually be at least
+1516 bytes. There may be special circumstances in which a smaller
+buffer might be safe; for example, if the host-side device driver is
+modified to support only smaller packets. Once the packet has been
+received the buffer will contain a two-byte header specific to
+USB-ethernet, followed by a normal ethernet frame. The header
+gives the size of the ethernet frame, excluding the header, with the
+least significant byte first.</P>
+</LI>
+</OL>
+<P>
+Both <TT
+CLASS="FUNCTION">
+usbs_eth_start_tx</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_rx</TT>
+ are asynchronous: the transfer
+is started and, some time later, a completion function will be invoked.
+The third and fourth arguments to both
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_tx</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_rx</TT>
+ supply the completion function
+and an argument to that function respectively. The completion function
+will be invoked with three arguments: a pointer to the
+<SPAN
+CLASS="STRUCTNAME">
+usbs_eth</SPAN>
+ data structure, usually
+<TT
+CLASS="LITERAL">
+usbs_eth0</TT>
+; the supplied completion data ; and a
+return code field. A negative value indicates that an error occurred,
+for example <TT
+CLASS="LITERAL">
+-EPIPE</TT>
+ if the connection between USB
+host and peripheral has been broken, or <TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+ if
+an endpoint has been halted. A positive value indicates the total size
+of the transfer, which should correspond to the size in the
+USB-ethernet header plus an additional two bytes for the header
+itself.</P>
+<P>
+If the data transfer is succesful then the completion function will
+typically be invoked in DSR context rather than in thread context,
+although this depends on the implementation of the underlying USB
+device driver. Therefore the completion function is restricted in what
+it can do; in particular, it must not make any calls that will or may
+block such as locking a mutex or allocating memory. The kernel
+documentation should be consulted for more details of DSR's and
+interrupt handling generally. Note that if the transfer finishes
+quickly then the completion function may be invoked before
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_rx</TT>
+ or
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_tx</TT>
+ returns. This is especially
+likely to happen if the current thread is descheduled after starting
+the data transfer but before returning from these functions.</P>
+<P>
+For transmit operations, it is possible for
+<TT
+CLASS="FUNCTION">
+usbs_eth_start_tx</TT>
+ to invoke the completion
+function immediately. If there is no current connection between host
+and target then the transmit will fail immediately with
+<TT
+CLASS="LITERAL">
+-EPIPE</TT>
+. In addition the USB-ethernet package will
+check the destination MAC address and make sure that the ethernet
+frame really is intended for the host: either it must be for the
+address specified in the initialization call <A
+HREF="usbseth-init.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+</A>
+, or
+it must be a broadcast packet, or the host must have enabled
+promiscuous mode. </P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbseth-init.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbseth-control.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Initializing the USB-ethernet Package</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+USB-ethernet State Handling</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth-host.html
@@ -0,0 +1,326 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Example Host-side Device Driver</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="PREVIOUS"
+TITLE="Network Device for the eCos TCP/IP Stack"
+HREF="usbseth-netdev.html"><LINK
+REL="NEXT"
+TITLE="Communication Protocol"
+HREF="usbseth-protocol.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos Support for Developing USB-ethernet Peripherals</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbseth-netdev.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbseth-protocol.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBSETH-HOST">
+Example Host-side Device Driver</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN240">
+</A>
+<H2>
+Name</H2>
+Example Host-side Device Driver&nbsp;--&nbsp;Provide host-side support for the eCos USB-ethernet package</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN243">
+</A>
+<H2>
+Description</H2>
+<P>
+The USB-ethernet package is supplied with a single host-side device
+driver. This driver has been developed against the Linux kernel
+2.2.16-22, as shipped with Red Hat 7. The driver is provided as is and
+should not be considered production quality: for example it only
+checks for a bogus vendor id <TT
+CLASS="LITERAL">
+0x4242</TT>
+ rather than an
+official vendor id supplied by the <A
+HREF="http://www.usb.org/"
+TARGET="_top">
+USB Implementers Forum</A>
+. Also, if the
+peripheral involves multiple configurations or multiple interfaces, it
+will fail to detect this. However, the driver can be used for simple
+testing and as the basis of a full device driver. Details of the
+protocol used between host and peripheral can be found in the <A
+HREF="usbseth-protocol.html">
+Communication Protocol</A>
+ section.</P>
+<P>
+The host-side device driver can be found in the <TT
+CLASS="FILENAME">
+host</TT>
+ subdirectory of the USB-ethernet
+package, specifically the file <TT
+CLASS="FILENAME">
+ecos_usbeth.c</TT>
+, and
+comes with a <TT
+CLASS="FILENAME">
+Makefile</TT>
+. Both files may need
+to be modified for specific applications. For example, the vendor id
+table <TT
+CLASS="LITERAL">
+ecos_usbeth_implementations</TT>
+ may need to be
+updated for the specific USB peripheral being built. The
+<TT
+CLASS="FILENAME">
+Makefile</TT>
+ assumes that the Linux kernel sources
+reside in <TT
+CLASS="FILENAME">
+/usr/src/linux</TT>
+, and
+that the kernel has already been configured and built. Assuming this
+is the case, the device driver can be built simply by invoking
+<B
+CLASS="COMMAND">
+make</B>
+ with no additional arguments. This will result
+in a dynamically loadable kernel module,
+<TT
+CLASS="FILENAME">
+ecos_usbeth.o</TT>
+, in the current directory.</P>
+<DIV
+CLASS="NOTE">
+<BLOCKQUOTE
+CLASS="NOTE">
+<P>
+<B>
+Note: </B>
+As normal for Linux kernel builds, the generated files such as
+<TT
+CLASS="FILENAME">
+ecos_usbeth.o</TT>
+ live in the same directory as the
+source tree. This is very different from eCos where the source tree
+(or component repository) is kept separate from any builds. There may
+be problems if the component repository is kept read-only or if it is
+put under source code control. Any such problems can be avoided by
+making a copy of the <TT
+CLASS="FILENAME">
+host</TT>
+
+subdirectory and building that copy.</P>
+</BLOCKQUOTE>
+</DIV>
+<P>
+Loading the kernel module into the current system requires root
+privileges. If the generic USB support is also a loadable module and
+has not been loaded already, this must happen first:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SCREEN">
+# insmod usb-uhci
+Using /lib/modules/2.2.16-22/usb/usb-uhci.o</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+Depending on the host hardware, the <TT
+CLASS="LITERAL">
+uhci</TT>
+ or
+<TT
+CLASS="LITERAL">
+usb-ohci</TT>
+ modules may be more appropriate. Loading
+the generic USB module will typically result in a number of messages
+to the logfile <TT
+CLASS="FILENAME">
+/var/log/messages</TT>
+, giving details
+of the specific host-side hardware that has been detected plus any
+hubs. The next step is to load the USB-ethernet module:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SCREEN">
+# insmod ecos_usbeth.o</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+This should result in a number of additional diagnostics in the
+logfile:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SCREEN">
+Apr 1 18:01:08 grumpy kernel: eCos USB-ethernet device driver
+Apr 1 18:01:08 grumpy kernel: usb.c: registered new driver ecos_usbeth</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+If a suitable USB peripheral is now connected the host will detect
+this, assign an address in the local USB network, obtain enumeration
+data, and find a suitable device driver. Assuming the peripheral and
+device driver agree on the supported vendor ids, the
+<TT
+CLASS="FILENAME">
+ecos_usbeth.o</TT>
+ module will be selected and this
+will be reported in the system log:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SCREEN">
+Apr 1 18:04:12 grumpy kernel: usb.c: USB new device connect, assigned device number 3
+Apr 1 18:04:12 grumpy kernel: eCos-based USB ethernet peripheral active at eth1</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+What can happen next depends very much on the software that is running
+on top of the USB-ethernet package inside the peripheral. For example,
+if there is a TCP/IP stack then it should be possible to bring up a
+network connection between host and peripheral using
+<B
+CLASS="COMMAND">
+ifconfig</B>
+.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbseth-netdev.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbseth-protocol.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Network Device for the eCos TCP/IP Stack</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Communication Protocol</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth-init.html
@@ -0,0 +1,321 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Initializing the USB-ethernet Package</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="PREVIOUS"
+TITLE="Introduction"
+HREF="usbseth-intro.html"><LINK
+REL="NEXT"
+TITLE="USB-ethernet Data Transfers"
+HREF="usbseth-data.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos Support for Developing USB-ethernet Peripherals</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbseth-intro.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbseth-data.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBSETH-INIT">
+Initializing the USB-ethernet Package</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN47">
+</A>
+<H2>
+Name</H2>
+<TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+&nbsp;--&nbsp;Initializing the USB-ethernet Package</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN51">
+</A>
+<H2>
+Synopsis</H2>
+<DIV
+CLASS="FUNCSYNOPSIS">
+<P>
+</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="FUNCSYNOPSISINFO">
+#include &lt;cyg/io/usb/usbs_eth.h&gt;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_eth_init</CODE>
+(usbs_eth* usbeth, usbs_control_endpoint* ep0, usbs_rx_endpoint* ep1, usbs_tx_endpoint* ep2, unsigned char* mac_address);</CODE>
+</P>
+<P>
+</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN67">
+</A>
+<H2>
+Description</H2>
+<P>
+The USB-ethernet package is not tied to any specific hardware. It
+requires certain functionality: there must be USB-slave hardware
+supported by a device driver; there must also be two endpoints for
+bulk transfers between host and peripheral, one for each direction;
+there must also be a control endpoint, although of course that is
+implicit with any USB hardware.</P>
+<P>
+However, USB-slave hardware may well provide more endpoints than the
+minimum required for ethernet support. Some of those endpoints might
+be used by other packages, while other endpoints might be used
+directly by the application, or might not be needed for the peripheral
+being built. There is also the possibility of a USB peripheral that
+supports multiple configurations, with the ethernet support active in
+only some of those configurations. The USB-ethernet package has no
+knowledge about any of this, so it relies on higher-level code to tell
+it which endpoints should be used and other information. This is the
+purpose of the <TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+ function.</P>
+<P>
+The first argument identifies the specific
+<SPAN
+CLASS="STRUCTNAME">
+usbs_eth</SPAN>
+ data structure that is affected. It
+is expected that the vast majority of affected applications will only
+provide a single USB-ethernet device to a single host, and the package
+automatically provides a suitable data structure
+<TT
+CLASS="LITERAL">
+usbs_eth0</TT>
+ to support this. If multiple
+<SPAN
+CLASS="STRUCTNAME">
+usbs_eth</SPAN>
+ structures are needed for some
+reason then these need to be instantiated by other code, and each one
+needs to be initialised by a call to
+<TT
+CLASS="FUNCTION">
+usbs_eth_init()</TT>
+. </P>
+<P>
+The next three arguments identify the endpoints that should be used
+for USB communications: a control endpoint, a receive endpoint for
+ethernet packets coming from the host to the peripheral, and a
+transmit endpoint for ethernet packets going in the other direction.
+Obviously all three endpoints should be provided by the same USB
+hardware. The USB-ethernet package assumes that it has sole access to
+the receive and transmit endpoints, subject to the use of
+<TT
+CLASS="FUNCTION">
+usbs_eth_disable</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_eth_enable</TT>
+ control functions. The package
+also assumes that no other code is interested in USB state changes or
+class control messages: it installs handlers
+<A
+HREF="usbseth-control.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_state_change_handler</TT>
+</A>
+
+and
+<A
+HREF="usbseth-control.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_class_control_handler</TT>
+</A>
+
+in the control endpoint. If any other code does need to handle USB
+state changes or class control messages then replacement handlers
+should be installed after the call to
+<TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+, and those replacements should
+invoke the USB-ethernet ones when appropriate.</P>
+<P>
+The final argument to <TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+ specifies 
+the MAC address (or Ethernet Station Address) that should be provided
+to the host-side device driver. Since the USB-ethernet package does not
+interact directly with a real ethernet device it cannot obtain the MAC
+address from any hardware. Instead, it must be supplied by higher-level
+code. The details depend on the <A
+HREF="usbseth-intro.html#AEN22">
+scenario</A>
+ in which the
+USB-ethernet package is being used.</P>
+<P>
+The call to <TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+ should normally happen
+after the enumeration data has been provided but before the underlying
+USB device driver has been started. If the USB device were to be
+started first then a connection between host and peripheral could be
+established immediately, and the host-side device driver would attempt
+to contact the USB-ethernet package for information such as the MAC
+address. </P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+int
+main(int argc, char** argv)
+{
+    unsigned char host_MAC[6] = { 0x40, 0x5d, 0x90, 0xa9, 0xbc, 0x02 };
+
+    usbs_sa11x0_ep0.enumeration_data    = &amp;usb_enum_data;
+    &#8230;
+    usbs_eth_init(&amp;usbs_eth0, &amp;usbs_sa11x0_ep0, &amp;usbs_sa11x0_ep1, &amp;usbs_sa11x0_ep2, host_MAC);
+    &#8230;
+    usbs_start(&amp;usbs_sa11x0_ep0);
+    &#8230;
+}</PRE>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbseth-intro.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbseth-data.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Introduction</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+USB-ethernet Data Transfers</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth-intro.html
@@ -0,0 +1,306 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Introduction</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="PREVIOUS"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="NEXT"
+TITLE="Initializing the USB-ethernet Package"
+HREF="usbseth-init.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos Support for Developing USB-ethernet Peripherals</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="io-usb-slave-eth.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbseth-init.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBSETH-INTRO">
+Introduction</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN6">
+</A>
+<H2>
+Name</H2>
+Introduction&nbsp;--&nbsp;eCos support for developing USB ethernet peripherals</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN9">
+</A>
+<H2>
+Introduction</H2>
+<P>
+The eCos USB-ethernet package provides additional support for USB
+peripherals that involve some sort of ethernet-style network. This can
+be a traditional ethernet, or it can involve some other networking
+technology that uses ethernet frames as a unit of transfer. It
+provides functions to transfer ethernet frames over the USB bus,
+handles certain control messages from the host, and optionally it can
+provide a network device driver for use by the eCos TCP/IP stack.
+The package comes with an example host-side device driver.</P>
+<P>
+The USB-ethernet package is not tied to any specific hardware. It
+requires the presence of USB hardware and a suitable device driver,
+but not all USB peripherals involve ethernet communications. Hence the
+configuration system cannot load the package automatically for
+specific targets, in the way that a USB device driver or an ethernet
+driver can be loaded automatically. Instead, the package has to be
+added explicitly. When using the command line tools this will involve
+an operation like the following:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SCREEN">
+$ ecosconfig add usbs_eth</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+Typically, this will automatically cause the USB device driver to
+become active. Loading the USB-ethernet package automatically provides
+functionality for <A
+HREF="usbseth-init.html">
+initialization</A>
+,
+<A
+HREF="usbseth-data.html">
+data transfer</A>
+, and the handling of
+<A
+HREF="usbseth-control.html">
+control messages</A>
+ and state
+changes. If the current configuration includes the eCos TCP/IP stack
+then the <A
+HREF="usbseth-netdev.html">
+network device driver</A>
+
+support will be enabled as well by default, allowing the stack to
+exchange ethernet frames over the USB bus.</P>
+<P>
+There is a USB standard for a class of communication devices including
+ethernet. The package does not implement this standard, due to
+limitations in the hardware for which the package was first developed.
+Instead, the package uses its own <A
+HREF="usbseth-protocol.html">
+protocol</A>
+ between USB
+<A
+HREF="usbseth-host.html">
+host device driver</A>
+ and the
+peripheral. </P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN22">
+</A>
+<H2>
+Usage Scenarios</H2>
+<P>
+The USB-ethernet package can be used several different scenarios. In
+a simple scenario, the peripheral serves only to connect the USB host
+to a suitable network:</P>
+<DIV
+CLASS="INFORMALFIGURE">
+<P>
+</P>
+<DIV
+CLASS="MEDIAOBJECT">
+<P>
+<IMG
+SRC="simple.gif">
+</IMG>
+</P>
+</DIV>
+<P>
+</P>
+</DIV>
+<P>
+After initialization, and once the USB connection between host and
+peripheral has been established, higher-level code needs to detect
+packets that are intended for the host, and to forward these. This can
+be achieved by the low-level <TT
+CLASS="FUNCTION">
+usbs_eth_start_tx</TT>
+
+function. Similarly, higher-level code needs to detect packets coming
+from the host, using <TT
+CLASS="FUNCTION">
+usbs_eth_start_rx</TT>
+, and to
+forward these using the real network. As far as the host is concerned
+it is connected directly to the network. In this scenario there is no
+confusion about addresses: there is a single MAC address for the
+host/peripheral combination, corresponding to the connection to the
+real network, and it is this address which should be supplied during
+<A
+HREF="usbseth-init.html">
+initialization</A>
+.</P>
+<P>
+In a more complicated scenario, there is a TCP/IP stack running inside
+the peripheral.</P>
+<DIV
+CLASS="INFORMALFIGURE">
+<P>
+</P>
+<DIV
+CLASS="MEDIAOBJECT">
+<P>
+<IMG
+SRC="tcpip.gif">
+</IMG>
+</P>
+</DIV>
+<P>
+</P>
+</DIV>
+<P>
+This involves the USB-ethernet package providing a service both to the
+host and to the eCos TCP/IP stack. It achieves the latter by acting as
+an eCos network device. Typically, the TCP/IP stack will be configured
+to act as a network bridge. The USB peripheral needs to examine the
+packets arriving over the real network. Some of these packets will be
+intended for the host, while others will be intended for the
+peripheral itself. To distinguish between these two scenarios, two
+distinct MAC addresses are needed: one for the host, and one for the
+peripheral. Similarly, packets sent by the host may have to be
+forwarded via the real network, or they may be intended for the TCP/IP
+stack inside the peripheral. Packets generated inside the peripheral's
+TCP/IP stack may need to be sent via the real network or over the USB
+bus. The network bridge software will have to take care of all these
+possibilities. Unusually for a network bridge, one of the network
+segments being bridged will only ever have one machine attached.</P>
+<P>
+There are other possible usage scenarios. For example, the peripheral
+might not be attached to a real network at all. Instead it could be
+the USB host that acts as a network bridge, allowing a TCP/IP stack
+inside the peripheral to communicate with the outside world. The
+various details will depend on the exact type of peripheral being
+developed. </P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbseth-init.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+eCos Support for Developing USB-ethernet Peripherals</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Initializing the USB-ethernet Package</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth-netdev.html
@@ -0,0 +1,200 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Network Device for the eCos TCP/IP Stack</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="PREVIOUS"
+TITLE="USB-ethernet State Handling"
+HREF="usbseth-control.html"><LINK
+REL="NEXT"
+TITLE="Example Host-side Device Driver"
+HREF="usbseth-host.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos Support for Developing USB-ethernet Peripherals</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbseth-control.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbseth-host.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBSETH-NETDEV">
+Network Device for the eCos TCP/IP Stack</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN221">
+</A>
+<H2>
+Name</H2>
+Network Device&nbsp;--&nbsp;USB-ethernet support for the eCos TCP/IP Stack</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN224">
+</A>
+<H2>
+Description</H2>
+<P>
+If the USB peripheral involves running the eCos TCP/IP stack and that
+stack needs to use USB-ethernet as a transport layer (or as one of the
+transports), then the USB-ethernet package can provide a suitable
+network device driver. It is still necessary for higher-level code to
+perform appropriate initialization by calling <A
+HREF="usbseth-init.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+</A>
+, but
+after that it will be the TCP/IP stack rather than application code
+that transmits or receives ethernet frames.</P>
+<P>
+Not all peripherals involving the USB-ethernet package will require a
+TCP/IP stack. Hence the provision of the network device is controlled
+by a configuration option <TT
+CLASS="LITERAL">
+CYGPKG_USBS_ETHDRV</TT>
+. By
+default this will be enabled if the TCP/IP package
+<TT
+CLASS="LITERAL">
+CYGPKG_NET</TT>
+ is loaded, and disabled otherwise. </P>
+<P>
+There are a number of other configuration options related to the
+network device. <TT
+CLASS="LITERAL">
+CYGFUN_USBS_ETHDRV_STATISTICS</TT>
+
+determines whether or not the package will maintain statistics, mainly
+intended for SNMP: by default this will be enabled if the SNMP support
+package <TT
+CLASS="LITERAL">
+CYGPKG_SNMPAGENT</TT>
+ is loaded, and disabled
+otherwise. The name of the ethernet device is controlled by
+<TT
+CLASS="LITERAL">
+CYGDATA_USBS_ETHDRV_NAME</TT>
+, and has a default value
+of <TT
+CLASS="LITERAL">
+eth0</TT>
+. If there are other network device drivers
+present in the configuration then it is the responsibility of the
+application developer to give each device a unique name.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbseth-control.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbseth-host.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+USB-ethernet State Handling</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Example Host-side Device Driver</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth-protocol.html
@@ -0,0 +1,267 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Communication Protocol</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos Support for Developing USB-ethernet Peripherals"
+HREF="io-usb-slave-eth.html"><LINK
+REL="PREVIOUS"
+TITLE="Example Host-side Device Driver"
+HREF="usbseth-host.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos Support for Developing USB-ethernet Peripherals</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbseth-host.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+&nbsp;</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBSETH-PROTOCOL">
+Communication Protocol</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN279">
+</A>
+<H2>
+Name</H2>
+Communication Protocol&nbsp;--&nbsp;Protocol used between the host-side device driver and the eCos
+USB-ethernet package </DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN282">
+</A>
+<H2>
+Description</H2>
+<P>
+There is a USB standard for the protocol to be used between the host
+and a class of communication devices, including ethernet. However, the
+eCos USB-ethernet package does not implement this protocol: the target
+hardware for which the package was first developed had certain
+limitations, and could not implement the standard. Instead, the package
+implements a simple new protocol.</P>
+<P>
+A USB-ethernet peripheral involves bulk transfers on two endpoints:
+one endpoint will be used for packets from host to peripheral and the
+other will be used for the opposite direction. Transfers in both
+directions are variable length, with a lower limit of 16 bytes and an
+upper limit of 1516 bytes. The first two bytes of each transfer
+constitute a header specific to USB-ethernet. The next 14 bytes form
+the normal header for an ethernet frame: destination MAC address,
+source MAC address, and a protocol field. The remaining data, up to
+1500 bytes, are the payload. The first two bytes give the size of the
+ethernet frame, least significant byte first, with a value between 14
+and 1514.</P>
+<P>
+For example an ARP request from host to peripheral involves an
+ethernet frame of 42 bytes (0x002A), with the usual 14-byte header and
+a 28-byte payload. The destination is the broadcast address
+0xFFFFFFFFFFFF. The source depends on the MAC address specified for
+the host in the call to <A
+HREF="usbseth-init.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+</A>
+, e.g.
+0x405D90A9BC02. The remaining data is as specified by the appropriate
+<A
+HREF="http://www.ietf.org"
+TARGET="_top">
+IETF RFC's</A>
+. The actual bulk
+USB transfer involves the following sequence of 44 bytes:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SCREEN">
+2a 00 ff ff ff ff ff ff 40 5d 90 a9 bc 02 08 06
+00 01 08 00 06 04 00 01 40 5d 90 a9 bc 02 0a 00
+00 01 00 00 00 00 00 00 0a 00 00 02</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+In addition there are two control messages. These will be sent by the
+host to endpoint 0, the control endpoint, and by default they will
+be handled by <A
+HREF="usbseth-control.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_class_control_handler</TT>
+</A>
+. If class-specific
+control messages are intercepted by other code then it is the
+responsibility of that code to invoke the USB-ethernet handler when
+appropriate.</P>
+<P>
+The first control message can be used by the host to obtain a MAC
+address:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+#define ECOS_USBETH_CONTROL_GET_MAC_ADDRESS         0x01</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+The control message's type field should specify IN as the direction.
+The request field should be <TT
+CLASS="LITERAL">
+0x01</TT>
+. The length fields
+should specify a size of 6 bytes. The remaining fields of the control
+message will be ignored by the USB-ethernet package. The response
+consists of the 6-byte MAC address supplied by the initialization call
+<A
+HREF="usbseth-init.html">
+<TT
+CLASS="FUNCTION">
+usbs_eth_init</TT>
+</A>
+.</P>
+<P>
+The second control message can be used by the host to enable or
+disable promiscuous mode.</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+#define ECOS_USBETH_CONTROL_SET_PROMISCUOUS_MODE    0x02</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+This control message involves no further data so the length field
+should be set to 0. The value field should be non-zero to enable
+promiscuous mode, zero to disable it. The request field should be
+<TT
+CLASS="LITERAL">
+0x02</TT>
+. The remaining fields in the control message
+will be ignored. It is the responsibility of the host-side device
+driver to keep track of whether or not promiscuous mode is currently
+enabled. It will be disabled when the peripheral changes to
+Configured state, typically at the point where the host-side device
+driver has been activated.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbseth-host.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave-eth.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+&nbsp;</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Example Host-side Device Driver</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+&nbsp;</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/doc/usbseth.sgml
@@ -0,0 +1,802 @@
+<!DOCTYPE reference  PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
+
+<!-- {{{ Banner                         -->
+
+<!-- =============================================================== -->
+<!--                                                                 -->
+<!--     usbseth.sgml                                                -->
+<!--                                                                 -->
+<!--     USB slave-side ethernet support package.                    -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+<!-- ####COPYRIGHTBEGIN####                                          -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<!-- =============================================================== -->
+<!--                                                                 -->      
+<!-- ####COPYRIGHTEND####                                            -->
+<!-- =============================================================== -->
+<!-- #####DESCRIPTIONBEGIN####                                       -->
+<!--                                                                 -->
+<!-- Author(s):   bartv                                              -->
+<!-- Contact(s):  bartv                                              -->
+<!-- Date:        2001/01/13                                         -->
+<!-- Version:     0.01                                               -->
+<!--                                                                 -->
+<!-- ####DESCRIPTIONEND####                                          -->
+<!-- =============================================================== -->
+
+<!-- }}} -->
+
+<reference id="io-usb-slave-eth">
+  <title>eCos Support for Developing USB-ethernet Peripherals</title>
+
+<!-- {{{ Intro                          -->
+
+<refentry id="usbseth-intro">
+<refmeta>
+<refentrytitle>Introduction</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Introduction</refname>
+<refpurpose>eCos support for developing USB ethernet peripherals</refpurpose>
+</refnamediv>
+
+<refsect1><title>Introduction</title>
+<para>
+The eCos USB-ethernet package provides additional support for USB
+peripherals that involve some sort of ethernet-style network. This can
+be a traditional ethernet, or it can involve some other networking
+technology that uses ethernet frames as a unit of transfer. It
+provides functions to transfer ethernet frames over the USB bus,
+handles certain control messages from the host, and optionally it can
+provide a network device driver for use by the eCos TCP/IP stack.
+The package comes with an example host-side device driver.
+</para>
+<para>
+The USB-ethernet package is not tied to any specific hardware. It
+requires the presence of USB hardware and a suitable device driver,
+but not all USB peripherals involve ethernet communications. Hence the
+configuration system cannot load the package automatically for
+specific targets, in the way that a USB device driver or an ethernet
+driver can be loaded automatically. Instead, the package has to be
+added explicitly. When using the command line tools this will involve
+an operation like the following:
+</para>
+<screen width=72 format=linespecific>
+$ ecosconfig add usbs_eth
+</screen>
+<para>
+Typically, this will automatically cause the USB device driver to
+become active. Loading the USB-ethernet package automatically provides
+functionality for <link linkend="usbseth-init">initialization</link>,
+<link linkend="usbseth-data">data transfer</link>, and the handling of
+<link linkend="usbseth-control">control messages</link> and state
+changes. If the current configuration includes the eCos TCP/IP stack
+then the <link linkend="usbseth-netdev">network device driver</link>
+support will be enabled as well by default, allowing the stack to
+exchange ethernet frames over the USB bus.
+</para>
+<para>
+There is a USB standard for a class of communication devices including
+ethernet. The package does not implement this standard, due to
+limitations in the hardware for which the package was first developed.
+Instead, the package uses its own <link
+linkend="usbseth-protocol">protocol</link> between USB
+<link linkend="usbseth-host">host device driver</link> and the
+peripheral. 
+</para>
+</refsect1>
+
+<refsect1><title id="usbseth-intro-scenarios">Usage Scenarios</title>
+<para>
+The USB-ethernet package can be used several different scenarios. In
+a simple scenario, the peripheral serves only to connect the USB host
+to a suitable network:
+</para>
+<informalfigure PgWide=1>
+<mediaobject>
+<imageobject>
+<imagedata fileref="simple.eps" format="eps" Scalefit=1 Align="Center">
+</imageobject>
+<imageobject>
+<imagedata fileref="simple.gif" format="gif" Align="Center">
+</imageobject>
+</mediaobject>
+</informalfigure>
+<para>
+After initialization, and once the USB connection between host and
+peripheral has been established, higher-level code needs to detect
+packets that are intended for the host, and to forward these. This can
+be achieved by the low-level <function>usbs_eth_start_tx</function>
+function. Similarly, higher-level code needs to detect packets coming
+from the host, using <function>usbs_eth_start_rx</function>, and to
+forward these using the real network. As far as the host is concerned
+it is connected directly to the network. In this scenario there is no
+confusion about addresses: there is a single MAC address for the
+host/peripheral combination, corresponding to the connection to the
+real network, and it is this address which should be supplied during
+<link linkend="usbseth-init">initialization</link>.
+</para>
+<para>
+In a more complicated scenario, there is a TCP/IP stack running inside
+the peripheral.
+</para>
+<informalfigure PgWide=1>
+<mediaobject>
+<imageobject>
+<imagedata fileref="tcpip.eps" format="eps" Scalefit=1 Align="Center">
+</imageobject>
+<imageobject>
+<imagedata fileref="tcpip.gif" format="gif" Align="Center">
+</imageobject>
+</mediaobject>
+</informalfigure>
+<para>
+This involves the USB-ethernet package providing a service both to the
+host and to the eCos TCP/IP stack. It achieves the latter by acting as
+an eCos network device. Typically, the TCP/IP stack will be configured
+to act as a network bridge. The USB peripheral needs to examine the
+packets arriving over the real network. Some of these packets will be
+intended for the host, while others will be intended for the
+peripheral itself. To distinguish between these two scenarios, two
+distinct MAC addresses are needed: one for the host, and one for the
+peripheral. Similarly, packets sent by the host may have to be
+forwarded via the real network, or they may be intended for the TCP/IP
+stack inside the peripheral. Packets generated inside the peripheral's
+TCP/IP stack may need to be sent via the real network or over the USB
+bus. The network bridge software will have to take care of all these
+possibilities. Unusually for a network bridge, one of the network
+segments being bridged will only ever have one machine attached.
+</para>
+<para>
+There are other possible usage scenarios. For example, the peripheral
+might not be attached to a real network at all. Instead it could be
+the USB host that acts as a network bridge, allowing a TCP/IP stack
+inside the peripheral to communicate with the outside world. The
+various details will depend on the exact type of peripheral being
+developed. 
+</para>
+</refsect1>
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Initialization                 -->
+
+<refentry id="usbseth-init">
+<refmeta>
+<refentrytitle>Initializing the USB-ethernet Package</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname><function>usbs_eth_init</function></refname>
+<refpurpose>Initializing the USB-ethernet Package</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<funcsynopsis>
+<funcsynopsisinfo>
+#include &lt;cyg/io/usb/usbs_eth.h&gt;
+</funcsynopsisinfo>	
+<funcprototype>
+<funcdef>void <function>usbs_eth_init</function></funcdef>
+<paramdef>usbs_eth* <parameter>usbeth</parameter></paramdef>
+<paramdef>usbs_control_endpoint* <parameter>ep0</parameter></paramdef>
+<paramdef>usbs_rx_endpoint* <parameter>ep1</parameter></paramdef>
+<paramdef>usbs_tx_endpoint* <parameter>ep2</parameter></paramdef>
+<paramdef>unsigned char* <parameter>mac_address</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para>
+The USB-ethernet package is not tied to any specific hardware. It
+requires certain functionality: there must be USB-slave hardware
+supported by a device driver; there must also be two endpoints for
+bulk transfers between host and peripheral, one for each direction;
+there must also be a control endpoint, although of course that is
+implicit with any USB hardware.
+</para>
+<para>
+However, USB-slave hardware may well provide more endpoints than the
+minimum required for ethernet support. Some of those endpoints might
+be used by other packages, while other endpoints might be used
+directly by the application, or might not be needed for the peripheral
+being built. There is also the possibility of a USB peripheral that
+supports multiple configurations, with the ethernet support active in
+only some of those configurations. The USB-ethernet package has no
+knowledge about any of this, so it relies on higher-level code to tell
+it which endpoints should be used and other information. This is the
+purpose of the <function>usbs_eth_init</function> function.
+</para>
+<para>
+The first argument identifies the specific
+<structname>usbs_eth</structname> data structure that is affected. It
+is expected that the vast majority of affected applications will only
+provide a single USB-ethernet device to a single host, and the package
+automatically provides a suitable data structure
+<literal>usbs_eth0</literal> to support this. If multiple
+<structname>usbs_eth</structname> structures are needed for some
+reason then these need to be instantiated by other code, and each one
+needs to be initialised by a call to
+<function>usbs_eth_init()</function>. 
+</para>
+<para>
+The next three arguments identify the endpoints that should be used
+for USB communications: a control endpoint, a receive endpoint for
+ethernet packets coming from the host to the peripheral, and a
+transmit endpoint for ethernet packets going in the other direction.
+Obviously all three endpoints should be provided by the same USB
+hardware. The USB-ethernet package assumes that it has sole access to
+the receive and transmit endpoints, subject to the use of
+<function>usbs_eth_disable</function> and
+<function>usbs_eth_enable</function> control functions. The package
+also assumes that no other code is interested in USB state changes or
+class control messages: it installs handlers
+<link linkend="usbseth-control"><function>usbs_eth_state_change_handler</function></link>
+and
+<link linkend="usbseth-control"><function>usbs_eth_class_control_handler</function></link>
+in the control endpoint. If any other code does need to handle USB
+state changes or class control messages then replacement handlers
+should be installed after the call to
+<function>usbs_eth_init</function>, and those replacements should
+invoke the USB-ethernet ones when appropriate.
+</para>
+<para>
+The final argument to <function>usbs_eth_init</function> specifies 
+the MAC address (or Ethernet Station Address) that should be provided
+to the host-side device driver. Since the USB-ethernet package does not
+interact directly with a real ethernet device it cannot obtain the MAC
+address from any hardware. Instead, it must be supplied by higher-level
+code. The details depend on the <link
+linkend="usbseth-intro-scenarios">scenario</link> in which the
+USB-ethernet package is being used.
+</para>
+<para>
+The call to <function>usbs_eth_init</function> should normally happen
+after the enumeration data has been provided but before the underlying
+USB device driver has been started. If the USB device were to be
+started first then a connection between host and peripheral could be
+established immediately, and the host-side device driver would attempt
+to contact the USB-ethernet package for information such as the MAC
+address. 
+</para>
+<programlisting width=72>
+int
+main(int argc, char** argv)
+{
+    unsigned char host_MAC[6] = { 0x40, 0x5d, 0x90, 0xa9, 0xbc, 0x02 };
+
+    usbs_sa11x0_ep0.enumeration_data    = &amp;usb_enum_data;
+    &hellip;
+    usbs_eth_init(&amp;usbs_eth0, &amp;usbs_sa11x0_ep0, &amp;usbs_sa11x0_ep1, &amp;usbs_sa11x0_ep2, host_MAC);
+    &hellip;
+    usbs_start(&amp;usbs_sa11x0_ep0);
+    &hellip;
+}
+</programlisting>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Data Transfer                  -->
+
+<refentry id="usbseth-data">
+<refmeta>
+<refentrytitle>USB-ethernet Data Transfers</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>USB-ethernet Data Transfers</refname>
+<refpurpose>Exchanging ethernet packets with the USB host</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<funcsynopsis>
+<funcsynopsisinfo>
+#include &lt;cyg/io/usb/usbs_eth.h&gt;
+</funcsynopsisinfo>	
+
+<funcprototype>
+<funcdef>void <function>usbs_eth_start_rx</function></funcdef>
+<paramdef>usbs_eth* <parameter>usbseth</parameter></paramdef>
+<paramdef>unsigned char* <parameter>buffer</parameter></paramdef>
+<paramdef>void (*)(usbs_eth*, void*, int) <parameter>complete_fn</parameter></paramdef>
+<paramdef>void* <parameter>complete_data</parameter></paramdef>
+</funcprototype>
+
+<funcprototype>
+<funcdef>void <function>usbs_eth_start_tx</function></funcdef>
+<paramdef>usbs_eth* <parameter>usbseth</parameter></paramdef>
+<paramdef>unsigned char* <parameter>buffer</parameter></paramdef>
+<paramdef>void (*)(usbs_eth*, void*, int) <parameter>complete_fn</parameter></paramdef>
+<paramdef>void* <parameter>complete_data</parameter></paramdef>
+</funcprototype>
+
+</funcsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para>
+The USB-ethernet package provides two main modes of operation. In the
+first mode it provides a <link linkend="usbseth-netdev">network device
+driver</link> for use by a TCP/IP stack running inside the USB
+peripheral. All incoming ethernet packages should be passed up the
+TCP/IP stack, and only the stack will generate outgoing packets. Apart
+from <link linkend="usbseth-init">initialization</link> and possibly
+certain <link linkend="usbseth-control">control operations</link>,
+higher-level code will not interact with the USB-ethernet package
+directly.
+</para>
+<para>
+In the second mode there is no TCP/IP stack running inside the USB
+peripheral. For example, a simple USB-ethernet converter has an
+ethernet chip and a USB port: ethernet packets received by the
+ethernet chip need to be forwarded to the USB host, and ethernet
+packets sent by the USB host need to be sent out of the ethernet chip.
+<function>usbs_eth_start_rx</function> and
+<function>usbs_eth_start_tx</function> allow for this lower-level
+access to the USB-ethernet package.
+</para>
+<para>
+The two modes of operation are mutually exclusive. If the network
+device driver mode is enabled then application code should communicate
+at the TCP/IP level, and not by using the lower-level functions.
+Instead, it is the network device driver that will make use of these
+functions, and it assumes that it has exclusive access. The package
+does not perform any locking.
+</para>
+<para>
+The transmit and receive functions work in much the same way. The
+first argument identifies the <structname>usbs_eth</structname>
+structure that should be used. For the majority of applications this
+will be <literal>usbs_eth0</literal>. The second argument specifies
+the location of the ethernet packet; outgoing for
+<function>usbs_eth_start_tx</function> and incoming for
+<function>usbs_eth_start_rx</function>. This buffer should correspond
+to the <link linkend="usbseth-protocol">protocol</link>:
+</para>
+<orderedlist>
+<listitem>
+<para>
+Outgoing packets can consist of up to 1516 bytes, consisting of a
+two-byte header specific to USB-ethernet followed by a standard
+ethernet frame (a header with 6-byte destination address, 6-byte
+source address and a further two bytes, followed by a payload of
+up to 1500 bytes). The two-byte USB-ethernet header consists simply of
+the size of the ethernet frame, i.e. the size of the rest of the
+packet not including the USB-ethernet header, with the least
+significant byte first.
+</para>
+</listitem>
+<listitem>
+<para>
+For incoming packets the supplied buffer should usually be at least
+1516 bytes. There may be special circumstances in which a smaller
+buffer might be safe; for example, if the host-side device driver is
+modified to support only smaller packets. Once the packet has been
+received the buffer will contain a two-byte header specific to
+USB-ethernet, followed by a normal ethernet frame. The header
+gives the size of the ethernet frame, excluding the header, with the
+least significant byte first.
+</para>
+</listitem>
+</orderedlist>
+<para>
+Both <function>usbs_eth_start_tx</function> and
+<function>usbs_eth_start_rx</function> are asynchronous: the transfer
+is started and, some time later, a completion function will be invoked.
+The third and fourth arguments to both
+<function>usbs_eth_start_tx</function> and
+<function>usbs_eth_start_rx</function> supply the completion function
+and an argument to that function respectively. The completion function
+will be invoked with three arguments: a pointer to the
+<structname>usbs_eth</structname> data structure, usually
+<literal>usbs_eth0</literal>; the supplied completion data ; and a
+return code field. A negative value indicates that an error occurred,
+for example <literal>-EPIPE</literal> if the connection between USB
+host and peripheral has been broken, or <literal>-EAGAIN</literal> if
+an endpoint has been halted. A positive value indicates the total size
+of the transfer, which should correspond to the size in the
+USB-ethernet header plus an additional two bytes for the header
+itself.
+</para>
+<para>
+If the data transfer is succesful then the completion function will
+typically be invoked in DSR context rather than in thread context,
+although this depends on the implementation of the underlying USB
+device driver. Therefore the completion function is restricted in what
+it can do; in particular, it must not make any calls that will or may
+block such as locking a mutex or allocating memory. The kernel
+documentation should be consulted for more details of DSR's and
+interrupt handling generally. Note that if the transfer finishes
+quickly then the completion function may be invoked before
+<function>usbs_eth_start_rx</function> or
+<function>usbs_eth_start_tx</function> returns. This is especially
+likely to happen if the current thread is descheduled after starting
+the data transfer but before returning from these functions.
+</para>
+<para>
+For transmit operations, it is possible for
+<function>usbs_eth_start_tx</function> to invoke the completion
+function immediately. If there is no current connection between host
+and target then the transmit will fail immediately with
+<literal>-EPIPE</literal>. In addition the USB-ethernet package will
+check the destination MAC address and make sure that the ethernet
+frame really is intended for the host: either it must be for the
+address specified in the initialization call <link
+linkend="usbseth-init"><function>usbs_eth_init</function></link>, or
+it must be a broadcast packet, or the host must have enabled
+promiscuous mode. 
+</para>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ State and Control Messages     -->
+
+<refentry id="usbseth-control">
+<refmeta>
+<refentrytitle>USB-ethernet State Handling</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>USB-ethernet State Handling</refname>
+<refpurpose>Maintaining the USB-ethernet connection with the host</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<funcsynopsis>
+<funcsynopsisinfo>
+#include &lt;cyg/io/usb/usbs_eth.h&gt;
+</funcsynopsisinfo>	
+
+<funcprototype>
+<funcdef>usbs_control_return <function>usbs_eth_class_control_handler</function></funcdef>
+<paramdef>usbs_control_endpoint* <parameter>ep0</parameter></paramdef>
+<paramdef>void* <parameter>callback_data</parameter></paramdef>
+</funcprototype>
+
+<funcprototype>
+<funcdef>void <function>usbs_eth_state_change_handler</function></funcdef>
+<paramdef>usbs_control_endpoint* <parameter>ep0</parameter></paramdef>
+<paramdef>void* <parameter>callback_data</parameter></paramdef>
+<paramdef>usbs_state_change <parameter>change</parameter></paramdef>
+<paramdef>int <parameter>old_state</parameter></paramdef>
+</funcprototype>
+
+<funcprototype>
+<funcdef>void <function>usbs_eth_disable</function></funcdef>
+<paramdef>usbs_eth* <parameter>usbseth></parameter></paramdef>
+</funcprototype>
+<funcprototype>
+<funcdef>void <function>usbs_eth_enable</function></funcdef>
+<paramdef>usbs_eth* <parameter>usbseth></parameter></paramdef>
+</funcprototype>
+
+</funcsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para>
+When the USB-ethernet package is initialized by a call to <link
+linkend="usbseth-init"><function>usbs_eth_init</function></link> it
+installs <function>usbs_eth_state_change_handler</function> to handle
+USB state changes. This allows the package to detect when the
+connection between the host and the peripheral is established or
+broken, resulting in internal calls to
+<function>usbs_eth_enable</function> and
+<function>usbs_eth_disable</function> respectively. This is
+appropriate if no other code needs to access the USB device. However,
+if there is other code, either other USB-related packages or the
+application itself, that needs to perform I/O over the USB bus, then
+typically the USB-ethernet package should not have exclusive access to
+state change events. Instead, the assumption is that higher-level
+code, typically provided by the application, will install an
+alternative state change handler in the control endpoint data
+structure after the call to <function>usbs_eth_init</function>. This
+alternative handler will either chain into
+<function>usbs_eth_state_change_handler</function> when appropriate,
+or else it will invoke <function>usbs_eth_enable</function> and
+<function>usbs_eth_disable</function> directly. For further details of
+state change handlers and control endpoints generally, see the
+documentation for the common USB-slave package.
+</para>
+<para>
+Similarly, <function>usbs_eth_init</function> will install
+<function>usbs_eth_class_control_handler</function> in the control
+endpoint data structure as the appropriate handler for class-specific
+USB control messages. This code will handle the ethernet-specific
+<link linkend="usbseth-protocol">control messages </link>, for example
+requests by the host to enable or disable promiscuous mode or to
+obtain the MAC address. If the USB device is not shared with any other
+code then this is both necessary and sufficient. However, if other code
+is involved and if that code also needs to process certain control
+messages, higher-level code should install its own handler and chain
+to the USB-ethernet one when appropriate. It should be noted that the
+request code is encoded in just a single byte, so there is a real
+possibility that exactly the same number will be used by different
+protocols for different requests. Any such problems will have to be
+identified and resolved by application developers, and may involve
+modifying the source code for the USB-ethernet package.
+</para>
+<para>
+As an alternative to chaining the state change handler, higher-level
+code can instead call <function>usbs_eth_disable</function> and
+<function>usbs_eth_enable</function> directly. These functions may
+also be called if the USB-ethernet package should become inactive for
+reasons not related directly to events on the USB bus. The main effect
+of <function>usbs_eth_enable</function> is to restart receive
+operations and to allow transmits. The main effect of
+<function>usbs_eth_disable</function> is to block further transmits:
+any current receive operations need to be aborted at the USB level,
+for example by halting the appropriate endpoint.
+</para>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ netdev device                  -->
+
+<refentry id="usbseth-netdev">
+<refmeta>
+<refentrytitle>Network Device for the eCos TCP/IP Stack</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Network Device</refname>
+<refpurpose>USB-ethernet support for the eCos TCP/IP Stack</refpurpose>
+</refnamediv>
+
+<refsect1><title>Description</title>
+<para>
+If the USB peripheral involves running the eCos TCP/IP stack and that
+stack needs to use USB-ethernet as a transport layer (or as one of the
+transports), then the USB-ethernet package can provide a suitable
+network device driver. It is still necessary for higher-level code to
+perform appropriate initialization by calling <link
+linkend="usbseth-init"><function>usbs_eth_init</function></link>, but
+after that it will be the TCP/IP stack rather than application code
+that transmits or receives ethernet frames.
+</para>
+<para>
+Not all peripherals involving the USB-ethernet package will require a
+TCP/IP stack. Hence the provision of the network device is controlled
+by a configuration option <literal>CYGPKG_USBS_ETHDRV</literal>. By
+default this will be enabled if the TCP/IP package
+<literal>CYGPKG_NET</literal> is loaded, and disabled otherwise. 
+</para>
+<para>
+There are a number of other configuration options related to the
+network device. <literal>CYGFUN_USBS_ETHDRV_STATISTICS</literal>
+determines whether or not the package will maintain statistics, mainly
+intended for SNMP: by default this will be enabled if the SNMP support
+package <literal>CYGPKG_SNMPAGENT</literal> is loaded, and disabled
+otherwise. The name of the ethernet device is controlled by
+<literal>CYGDATA_USBS_ETHDRV_NAME</literal>, and has a default value
+of <literal>eth0</literal>. If there are other network device drivers
+present in the configuration then it is the responsibility of the
+application developer to give each device a unique name.
+</para>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ ecos_usbeth                    -->
+
+<refentry id="usbseth-host">
+<refmeta>
+<refentrytitle>Example Host-side Device Driver</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Example Host-side Device Driver</refname>
+<refpurpose>Provide host-side support for the eCos USB-ethernet package</refpurpose>
+</refnamediv>
+
+<refsect1><title>Description</title>
+<para>
+The USB-ethernet package is supplied with a single host-side device
+driver. This driver has been developed against the Linux kernel
+2.2.16-22, as shipped with Red Hat 7. The driver is provided as is and
+should not be considered production quality: for example it only
+checks for a bogus vendor id <literal>0x4242</literal> rather than an
+official vendor id supplied by the <ulink
+url="http://www.usb.org/">USB Implementers Forum</ulink>. Also, if the
+peripheral involves multiple configurations or multiple interfaces, it
+will fail to detect this. However, the driver can be used for simple
+testing and as the basis of a full device driver. Details of the
+protocol used between host and peripheral can be found in the <link
+linkend="usbseth-protocol">Communication Protocol</link> section.
+</para>
+<para>
+The host-side device driver can be found in the <filename
+class="directory">host</filename> subdirectory of the USB-ethernet
+package, specifically the file <filename>ecos_usbeth.c</filename>, and
+comes with a <filename>Makefile</filename>. Both files may need
+to be modified for specific applications. For example, the vendor id
+table <literal>ecos_usbeth_implementations</literal> may need to be
+updated for the specific USB peripheral being built. The
+<filename>Makefile</filename> assumes that the Linux kernel sources
+reside in <filename class="directory">/usr/src/linux</filename>, and
+that the kernel has already been configured and built. Assuming this
+is the case, the device driver can be built simply by invoking
+<command>make</command> with no additional arguments. This will result
+in a dynamically loadable kernel module,
+<filename>ecos_usbeth.o</filename>, in the current directory.
+</para>
+<note>
+<para>
+As normal for Linux kernel builds, the generated files such as
+<filename>ecos_usbeth.o</filename> live in the same directory as the
+source tree. This is very different from eCos where the source tree
+(or component repository) is kept separate from any builds. There may
+be problems if the component repository is kept read-only or if it is
+put under source code control. Any such problems can be avoided by
+making a copy of the <filename class="directory">host</filename>
+subdirectory and building that copy.
+</para>
+</note>
+<para>
+Loading the kernel module into the current system requires root
+privileges. If the generic USB support is also a loadable module and
+has not been loaded already, this must happen first:
+</para>
+<screen width=72 format=linespecific>
+# insmod usb-uhci
+Using /lib/modules/2.2.16-22/usb/usb-uhci.o
+</screen>
+<para>
+Depending on the host hardware, the <literal>uhci</literal> or
+<literal>usb-ohci</literal> modules may be more appropriate. Loading
+the generic USB module will typically result in a number of messages
+to the logfile <filename>/var/log/messages</filename>, giving details
+of the specific host-side hardware that has been detected plus any
+hubs. The next step is to load the USB-ethernet module:
+</para>
+<screen width=72 format=linespecific>
+# insmod ecos_usbeth.o
+</screen>
+<para>
+This should result in a number of additional diagnostics in the
+logfile:
+</para>
+<screen width=72 format=linespecific>
+Apr 1 18:01:08 grumpy kernel: eCos USB-ethernet device driver
+Apr 1 18:01:08 grumpy kernel: usb.c: registered new driver ecos_usbeth
+</screen>
+<para>
+If a suitable USB peripheral is now connected the host will detect
+this, assign an address in the local USB network, obtain enumeration
+data, and find a suitable device driver. Assuming the peripheral and
+device driver agree on the supported vendor ids, the
+<filename>ecos_usbeth.o</filename> module will be selected and this
+will be reported in the system log:
+</para>
+<screen width=86 format=linespecific>
+Apr 1 18:04:12 grumpy kernel: usb.c: USB new device connect, assigned device number 3
+Apr 1 18:04:12 grumpy kernel: eCos-based USB ethernet peripheral active at eth1
+</screen>
+<para>
+What can happen next depends very much on the software that is running
+on top of the USB-ethernet package inside the peripheral. For example,
+if there is a TCP/IP stack then it should be possible to bring up a
+network connection between host and peripheral using
+<command>ifconfig</command>.
+</para>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Protocol                       -->
+
+<refentry id="usbseth-protocol">
+<refmeta>
+<refentrytitle>Communication Protocol</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Communication Protocol</refname>
+<refpurpose>Protocol used between the host-side device driver and the eCos
+USB-ethernet package </refpurpose>
+</refnamediv>
+
+<refsect1><title>Description</title>
+<para>
+There is a USB standard for the protocol to be used between the host
+and a class of communication devices, including ethernet. However, the
+eCos USB-ethernet package does not implement this protocol: the target
+hardware for which the package was first developed had certain
+limitations, and could not implement the standard. Instead, the package
+implements a simple new protocol.
+</para>
+<para>
+A USB-ethernet peripheral involves bulk transfers on two endpoints:
+one endpoint will be used for packets from host to peripheral and the
+other will be used for the opposite direction. Transfers in both
+directions are variable length, with a lower limit of 16 bytes and an
+upper limit of 1516 bytes. The first two bytes of each transfer
+constitute a header specific to USB-ethernet. The next 14 bytes form
+the normal header for an ethernet frame: destination MAC address,
+source MAC address, and a protocol field. The remaining data, up to
+1500 bytes, are the payload. The first two bytes give the size of the
+ethernet frame, least significant byte first, with a value between 14
+and 1514.
+</para>
+<para>
+For example an ARP request from host to peripheral involves an
+ethernet frame of 42 bytes (0x002A), with the usual 14-byte header and
+a 28-byte payload. The destination is the broadcast address
+0xFFFFFFFFFFFF. The source depends on the MAC address specified for
+the host in the call to <link
+linkend="usbseth-init"><function>usbs_eth_init</function></link>, e.g.
+0x405D90A9BC02. The remaining data is as specified by the appropriate
+<ulink url="http://www.ietf.org">IETF RFC's</ulink>. The actual bulk
+USB transfer involves the following sequence of 44 bytes:
+</para>
+<screen width=72 format=linespecific>
+2a 00 ff ff ff ff ff ff 40 5d 90 a9 bc 02 08 06
+00 01 08 00 06 04 00 01 40 5d 90 a9 bc 02 0a 00
+00 01 00 00 00 00 00 00 0a 00 00 02
+</screen>
+<para>
+In addition there are two control messages. These will be sent by the
+host to endpoint 0, the control endpoint, and by default they will
+be handled by <link linkend="usbseth-control"><function>
+usbs_eth_class_control_handler</function></link>. If class-specific
+control messages are intercepted by other code then it is the
+responsibility of that code to invoke the USB-ethernet handler when
+appropriate.
+</para>
+<para>
+The first control message can be used by the host to obtain a MAC
+address:
+</para>
+<programlisting width=72>
+#define ECOS_USBETH_CONTROL_GET_MAC_ADDRESS         0x01
+</programlisting>
+<para>
+The control message's type field should specify IN as the direction.
+The request field should be <literal>0x01</literal>. The length fields
+should specify a size of 6 bytes. The remaining fields of the control
+message will be ignored by the USB-ethernet package. The response
+consists of the 6-byte MAC address supplied by the initialization call
+<link
+linkend="usbseth-init"><function>usbs_eth_init</function></link>.
+</para>
+<para>
+The second control message can be used by the host to enable or
+disable promiscuous mode.
+</para>
+<programlisting width=72>
+#define ECOS_USBETH_CONTROL_SET_PROMISCUOUS_MODE    0x02
+</programlisting>
+<para>
+This control message involves no further data so the length field
+should be set to 0. The value field should be non-zero to enable
+promiscuous mode, zero to disable it. The request field should be
+<literal>0x02</literal>. The remaining fields in the control message
+will be ignored. It is the responsibility of the host-side device
+driver to keep track of whether or not promiscuous mode is currently
+enabled. It will be disabled when the peripheral changes to
+Configured state, typically at the point where the host-side device
+driver has been activated.
+</para>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+
+</reference>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/host/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/host/Makefile
@@ -0,0 +1,95 @@
+#
+# Makefile for the Linux device driver for eCos USB-ethernet
+# devices. This makefile has been cloned from the one in
+# /usr/src/linux-2.2.16/drivers/usb
+#
+
+# This makefile will chain to the Linux makefile if appropriate.
+# The toplevel Linux makefile sets the variable KERNELRELEASE
+ifeq (,$(KERNELRELEASE))
+
+default:
+	make -C /usr/src/linux SUBDIRS=$(shell pwd) modules
+
+modules: default
+
+modules_install:
+	@echo Support for installing this module not yet implemented.
+
+else
+
+# A recursive invocation of this makefile from the Linux one.
+
+# Build this driver as a module.
+CONFIG_USB_ECOS_USBETH	= m
+
+# Subdirs.
+
+SUB_DIRS	:=
+MOD_SUB_DIRS	:= $(SUB_DIRS)
+MOD_IN_SUB_DIRS	:= $(SUB_DIRS)
+ALL_SUB_DIRS	:= $(SUB_DIRS)
+
+# The target object and module list name.
+
+O_TARGET	:=
+M_OBJS		:=
+O_OBJS		:=
+MOD_LIST_NAME	:= ECOS_USBETH_MODULE
+
+# Objects that export symbols.
+
+export-objs		:=
+
+# Multipart objects.
+
+list-multi		:= 
+
+# Optional parts of multipart objects.
+
+# Object file lists.
+
+obj-y	:=
+obj-m	:=
+obj-n	:=
+obj-	:=
+
+# Object files in subdirectories
+
+# Each configuration option enables a list of files.
+
+obj-$(CONFIG_USB_ECOS_USBETH)	+= ecos_usbeth.o
+
+# Extract lists of the multi-part drivers.
+# The 'int-*' lists are the intermediate files used to build the multi's.
+
+multi-y		:= $(filter $(list-multi), $(obj-y))
+multi-m		:= $(filter $(list-multi), $(obj-m))
+int-y		:= $(sort $(foreach m, $(multi-y), $($(basename $(m))-objs)))
+int-m		:= $(sort $(foreach m, $(multi-m), $($(basename $(m))-objs)))
+
+# Files that are both resident and modular: remove from modular.
+
+obj-m		:= $(filter-out $(obj-y), $(obj-m))
+int-m		:= $(filter-out $(int-y), $(int-m))
+
+# Take multi-part drivers out of obj-y and put components in.
+
+obj-y		:= $(filter-out $(list-multi), $(obj-y)) $(int-y)
+
+# Translate to Rules.make lists.
+
+O_OBJS		:= $(sort $(filter-out $(export-objs), $(obj-y)))
+OX_OBJS		:= $(sort $(filter     $(export-objs), $(obj-y)))
+M_OBJS		:= $(sort $(filter-out $(export-objs), $(obj-m)))
+MX_OBJS		:= $(sort $(filter     $(export-objs), $(obj-m)))
+MI_OBJS		:= $(sort $(filter-out $(export-objs), $(int-m)))
+MIX_OBJS	:= $(sort $(filter     $(export-objs), $(int-m)))
+
+# The global Rules.make.
+
+include $(TOPDIR)/Rules.make
+
+# Link rules for multi-part drivers.
+
+endif
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/host/ecos_usbeth.c
@@ -0,0 +1,522 @@
+//==========================================================================
+//
+//      ecos_usbeth.c
+//
+//      Linux device driver for eCos-based USB ethernet peripherals.
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// ----------------------------------------------------------------------------
+// Copyright (C) 2000 Red Hat, Inc.
+//
+// This file is part of the eCos USB support.
+//
+// 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.
+//
+// ----------------------------------------------------------------------------
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####                                             
+//
+// Author(s):           bartv
+// Contributors:        bartv
+// Date:                2000-11-12
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/usb.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+
+#ifdef MODULE
+MODULE_AUTHOR("Bart Veer <bartv@redhat.com>");
+MODULE_DESCRIPTION("USB ethernet driver for eCos-based peripherals");
+#endif
+
+// This array identifies specific implementations of eCos USB-ethernet
+// devices. All implementations should add their vendor and device
+// details.
+
+typedef struct ecos_usbeth_impl {
+    const char* name;
+    __u16       vendor;
+    __u16       id;
+} ecos_usbeth_impl;
+
+const static ecos_usbeth_impl ecos_usbeth_implementations[] = {
+    { "eCos ether",     0x4242, 0x4242 },
+    { (const char*) 0,       0,      0 }
+};
+
+
+// Constants. These have to be kept in sync with the target-side
+// code.
+#define ECOS_USBETH_MAXTU                           1516
+#define ECOS_USBETH_MAX_CONTROL_TU                     8
+#define ECOS_USBETH_CONTROL_GET_MAC_ADDRESS         0x01
+#define ECOS_USBETH_CONTROL_SET_PROMISCUOUS_MODE    0x02
+
+// The main data structure. It keeps track of both the USB
+// and network side of things, and provides buffers for
+// the various operations.
+//
+// NOTE: currently this driver only supports a single
+// plugged-in device. Theoretically multiple eCos-based
+// USB ethernet devices could be plugged in to a single
+// host and each one would require an ecos_usbeth
+// structure.
+typedef struct ecos_usbeth {
+    spinlock_t                  usb_lock;
+    int                         target_promiscuous;
+    struct usb_device*          usb_dev;
+    struct net_device*          net_dev;
+    struct net_device_stats     stats;
+    struct urb                  rx_urb;
+    struct urb                  tx_urb;
+    unsigned char               rx_buffer[ECOS_USBETH_MAXTU];
+    unsigned char               tx_buffer[ECOS_USBETH_MAXTU];
+} ecos_usbeth;
+
+
+// open()
+// Invoked by the TCP/IP stack when the interface is brought up.
+// This just starts a receive operation.
+static int
+ecos_usbeth_open(struct net_device* net)
+{
+    ecos_usbeth* usbeth = (ecos_usbeth*) net->priv;
+    int          res;
+
+    netif_start_queue(net);
+    res = usb_submit_urb(&(usbeth->rx_urb));
+    if (0 != res) {
+        printk("ecos_usbeth: failed to start USB receives, %d\n", res);
+    }
+    MOD_INC_USE_COUNT;
+    return 0;
+}
+
+// close()
+// Invoked by the TCP/IP stack when the interface is taken down.
+// Any active USB operations need to be cancelled. During
+// a disconnect this may get called twice, once for the
+// disconnect and once for the network interface being
+// brought down.
+static int
+ecos_usbeth_close(struct net_device* net)
+{
+    ecos_usbeth* usbeth = (ecos_usbeth*) net->priv;
+
+    if (0 != netif_running(net)) {
+        netif_stop_queue(net);
+        net->start = 0;
+
+        if (-EINPROGRESS == usbeth->rx_urb.status) {
+            usb_unlink_urb(&(usbeth->rx_urb));
+        }
+        if (-EINPROGRESS == usbeth->tx_urb.status) {
+            usb_unlink_urb(&(usbeth->tx_urb));
+        }
+        MOD_DEC_USE_COUNT;
+    }
+    
+    return 0;
+}
+
+// Reception.
+// probe() fills in an rx_urb. When the net device is brought up
+// the urb is activated, and this callback gets run for incoming
+// data.
+static void
+ecos_usbeth_rx_callback(struct urb* urb)
+{
+    ecos_usbeth*        usbeth  = (ecos_usbeth*) urb->context;
+    struct net_device*  net     = usbeth->net_dev;
+    struct sk_buff*     skb;
+    int                 len;
+    int                 res;
+
+    if (0 != urb->status) {
+        // This happens numerous times during a disconnect. Do not
+        // issue a warning, but do clear the status field or things
+        // get confused when resubmitting.
+        //
+        // Some host hardware does not distinguish between CRC errors
+        // (very rare) and timeouts (perfectly normal). Do not
+        // increment the error count if it might have been a timeout.
+        if (USB_ST_CRC != urb->status) {
+            usbeth->stats.rx_errors++;
+        }
+        urb->status = 0;
+    } else if (2 > urb->actual_length) {
+        // With some hardware the target may have to send a bogus
+        // first packet. Just ignore those.
+
+    } else {
+        len = usbeth->rx_buffer[0] + (usbeth->rx_buffer[1] << 8);
+        if (len > (urb->actual_length - 2)) {
+            usbeth->stats.rx_errors++;
+            usbeth->stats.rx_length_errors++;
+            printk("ecos_usbeth: warning, packet size mismatch, got %d bytes, expected %d\n",
+                   urb->actual_length, len);
+        } else {
+            skb = dev_alloc_skb(len + 2);
+            if ((struct sk_buff*)0 == skb) {
+                printk("ecos_usbeth: failed to alloc skb, dropping packet\n");
+                usbeth->stats.rx_dropped++;
+            } else {
+#if 0
+                {
+                    int i;
+                    printk("--------------------------------------------------------------\n");
+                    printk("ecos_usbeth RX: total size %d\n", len);
+                    for (i = 0; (i < len) && (i < 128); i+= 8) {
+                        printk("rx  %x %x %x %x %x %x %x %x\n",
+                               usbeth->rx_buffer[i+0], usbeth->rx_buffer[i+1], usbeth->rx_buffer[i+2], usbeth->rx_buffer[i+3],
+                               usbeth->rx_buffer[i+4], usbeth->rx_buffer[i+5], usbeth->rx_buffer[i+6], usbeth->rx_buffer[i+7]);
+                    }
+                    printk("--------------------------------------------------------------\n");
+                }
+#endif
+                skb->dev        = net;
+                eth_copy_and_sum(skb, &(usbeth->rx_buffer[2]), len, 0);
+                skb_put(skb, len);
+                skb->protocol   = eth_type_trans(skb, net);
+                netif_rx(skb);
+                usbeth->stats.rx_packets++;
+                usbeth->stats.rx_bytes += len;
+            }
+        }
+    }
+
+    if (0 != netif_running(net)) {
+        res = usb_submit_urb(&(usbeth->rx_urb));
+        if (0 != res) {
+            printk("ecos_usbeth: failed to restart USB receives after packet, %d\n", res);
+        }
+    }
+}
+
+// start_tx().
+// Transmit a single packet. The relevant USB protocol requires a
+// 2-byte length field at the start, the incoming buffer has no space
+// for this, and the URB API does not support any form of
+// scatter/gather. Therefore unfortunately the whole packet has to be
+// copied. The callback function is specified when the URB is filled
+// in by probe().
+static void
+ecos_usbeth_tx_callback(struct urb* urb)
+{
+    ecos_usbeth* usbeth = (ecos_usbeth*) urb->context;
+    spin_lock(&usbeth->usb_lock);
+    if (0 != netif_running(usbeth->net_dev)) {
+        netif_wake_queue(usbeth->net_dev);
+    }
+    spin_unlock(&usbeth->usb_lock);
+}
+
+static int
+ecos_usbeth_start_tx(struct sk_buff* skb, struct net_device* net)
+{
+    ecos_usbeth* usbeth = (ecos_usbeth*) net->priv;
+    int          res;
+
+    if ((skb->len + 2) > ECOS_USBETH_MAXTU) {
+        printk("ecos_usbeth: oversized packet of %d bytes\n", skb->len);
+        return 0;
+    }
+
+    if (netif_queue_stopped(net)) {
+        // Another transmission already in progress.
+        // USB bulk operations should complete within 5s.
+        int current_delay = jiffies - net->trans_start;
+        if (current_delay < (5 * HZ)) {
+            return 1;
+        } else {
+            // There has been a timeout. Discard this message.
+            //printk("transmission timed out\n");
+            usbeth->stats.tx_errors++;
+            dev_kfree_skb(skb);
+            return 0;
+        }
+    }
+
+    spin_lock(&usbeth->usb_lock);
+    usbeth->tx_buffer[0]        = skb->len & 0x00FF;
+    usbeth->tx_buffer[1]        = (skb->len >> 8) & 0x00FF;
+    memcpy(&(usbeth->tx_buffer[2]), skb->data, skb->len);
+    usbeth->tx_urb.transfer_buffer_length = skb->len + 2;
+#if 0
+    {
+        int i;
+        printk("--------------------------------------------------------------\n");
+        printk("ecos_usbeth start_tx: len %d\n", skb->len + 2);
+        for (i = 0; (i < (skb->len + 2)) && (i < 128); i+= 8) {
+            printk("tx  %x %x %x %x %x %x %x %x\n",
+                   usbeth->tx_buffer[i], usbeth->tx_buffer[i+1], usbeth->tx_buffer[i+2], usbeth->tx_buffer[i+3],
+                   usbeth->tx_buffer[i+4], usbeth->tx_buffer[i+5], usbeth->tx_buffer[i+6], usbeth->tx_buffer[i+7]);
+        }
+        printk("--------------------------------------------------------------\n");
+    }
+#endif
+    res = usb_submit_urb(&(usbeth->tx_urb));
+    if (0 == res) {
+        netif_stop_queue(net);
+        net->trans_start        = jiffies;
+        usbeth->stats.tx_packets++;
+        usbeth->stats.tx_bytes  += skb->len;
+    } else {        
+        printk("ecos_usbeth: failed to start USB packet transmission, %d\n", res);
+        usbeth->stats.tx_errors++;
+    }
+    
+    spin_unlock(&usbeth->usb_lock);
+    dev_kfree_skb(skb);
+    return 0;
+}
+
+
+// set_rx_mode()
+// Invoked by the network stack to enable/disable promiscuous mode or
+// for multicasting. The latter is not yet supported on the target
+// side. The former involves a USB control message. The main call
+// is not allowed to block.
+static void
+ecos_usbeth_set_rx_mode_callback(struct urb* urb)
+{
+    kfree(urb->setup_packet);
+    usb_free_urb(urb);
+}
+
+static void
+ecos_usbeth_set_rx_mode(struct net_device* net)
+{
+    ecos_usbeth* usbeth         = (ecos_usbeth*) net->priv;
+    __u16        promiscuous    = net->flags & IFF_PROMISC;
+    int          res;
+    
+    if (promiscuous != usbeth->target_promiscuous) {
+        devrequest*     req;
+        urb_t*          urb;
+
+        urb = usb_alloc_urb(0);
+        if ((urb_t*)0 == urb) {
+            return;
+        }
+        req = kmalloc(sizeof(devrequest), GFP_KERNEL);
+        if ((devrequest*)0 == req) {
+            usb_free_urb(urb);
+            return;
+        }
+        req->requesttype        = USB_TYPE_CLASS | USB_RECIP_DEVICE;
+        req->request            = ECOS_USBETH_CONTROL_SET_PROMISCUOUS_MODE;
+        req->value              = cpu_to_le16p(&promiscuous);
+        req->index              = 0;
+        req->length             = 0;
+
+        FILL_CONTROL_URB(urb,
+                         usbeth->usb_dev,
+                         usb_sndctrlpipe(usbeth->usb_dev, 0),
+                         (unsigned char*) req,
+                         (void*) 0,
+                         0,
+                         &ecos_usbeth_set_rx_mode_callback,
+                         (void*) usbeth);
+        res = usb_submit_urb(urb);
+        if (0 != res) {
+            kfree(req);
+            usb_free_urb(urb);
+        } else {
+            usbeth->target_promiscuous = promiscuous;
+        }
+    }
+}
+
+// netdev_stats()
+// Supply the current network statistics. These are held in
+// the stats field of the ecos_usbeth structure
+static struct net_device_stats*
+ecos_usbeth_netdev_stats(struct net_device* net)
+{
+    ecos_usbeth* usbeth = (ecos_usbeth*) net->priv;
+    return &(usbeth->stats);
+}
+
+// ioctl()
+// Currently none of the network ioctl()'s are supported
+static int
+ecos_usbeth_ioctl(struct net_device* net, struct ifreq* request, int command)
+{
+    return -EINVAL;
+}
+
+// probe().
+// This is invoked by the generic USB code when a new device has
+// been detected and its configuration details have been extracted
+// and stored in the usbdev structure. The interface_id specifies
+// a specific USB interface, to cope with multifunction peripherals.
+//
+// FIXME; right now this code only copes with simple enumeration data.
+// OK, to be really honest it just looks for the vendor and device ids
+// in the simple test cases and ignores everything else.
+//
+// On success it should return a non-NULL pointer, which happens to be
+// a newly allocated ecos_usbeth structure. This will get passed to
+// the disconnect function. Filling in the ecos_usbeth structure will,
+// amongst other things, register this as a network device driver.
+// The MAC address is obtained from the peripheral via a control
+// request.
+
+static void*
+ecos_usbeth_probe(struct usb_device* usbdev, unsigned int interface_id)
+{
+    struct net_device*  net;
+    ecos_usbeth*        usbeth;
+    int                 res;
+    unsigned char       MAC[6];
+    unsigned char       dummy[1];
+    
+    if ((usbdev->descriptor.idVendor  != ecos_usbeth_implementations[0].vendor) ||
+        (usbdev->descriptor.idProduct != ecos_usbeth_implementations[0].vendor)) {
+        return (void*) 0;
+    }
+    res = usb_set_configuration(usbdev, usbdev->config[0].bConfigurationValue);
+    if (0 != res) {
+        printk("ecos_usbeth: failed to set configuration, %d\n", res);
+        return (void*) 0;
+    }
+    res = usb_control_msg(usbdev,
+                          usb_rcvctrlpipe(usbdev, 0),
+                          ECOS_USBETH_CONTROL_GET_MAC_ADDRESS,
+                          USB_TYPE_CLASS | USB_RECIP_DEVICE | USB_DIR_IN,
+                          0,
+                          0,
+                          (void*) MAC,
+                          6,
+                          5 * HZ);
+    if (6 != res) {
+        printk("ecos_usbeth: failed to get MAC address, %d\n", res);
+        return (void*) 0;
+    }
+    res = usb_control_msg(usbdev,
+                          usb_sndctrlpipe(usbdev, 0),                           // pipe
+                          ECOS_USBETH_CONTROL_SET_PROMISCUOUS_MODE,             // request
+                          USB_TYPE_CLASS | USB_RECIP_DEVICE,                    // requesttype
+                          0,                                                    // value
+                          0,                                                    // index
+                          (void*) dummy,                                        // data
+                          0,                                                    // size
+                          5 * HZ);                                              // timeout
+    if (0 != res) {
+        printk("ecos_usbeth: failed to disable promiscous mode, %d\n", res);
+    }
+           
+    usbeth = (ecos_usbeth*) kmalloc(sizeof(ecos_usbeth), GFP_KERNEL);
+    if ((ecos_usbeth*)0 == usbeth) {
+        printk("ecos_usbeth: failed to allocate memory for usbeth data structure\n");
+        return (void*) 0;
+    }
+    memset(usbeth, 0, sizeof(ecos_usbeth));
+    
+    net                 = init_etherdev(0, 0);
+    if ((struct net_device*) 0 == net) {
+        kfree(usbeth);
+        printk("ecos_usbeth: failed to allocate memory for net data structure\n");
+        return (void*) 0;
+    }
+
+    usbeth->usb_lock    = SPIN_LOCK_UNLOCKED;
+    usbeth->usb_dev     = usbdev;
+    FILL_BULK_URB(&(usbeth->tx_urb), usbdev, usb_sndbulkpipe(usbdev, 1),
+                  usbeth->tx_buffer, ECOS_USBETH_MAXTU, &ecos_usbeth_tx_callback, (void*) usbeth);
+    FILL_BULK_URB(&(usbeth->rx_urb), usbdev, usb_rcvbulkpipe(usbdev, 2),
+                  usbeth->rx_buffer, ECOS_USBETH_MAXTU, &ecos_usbeth_rx_callback, (void*) usbeth);
+
+    usbeth->net_dev             = net;
+    usbeth->target_promiscuous  = 0;
+    
+    net->priv                   = (void*) usbeth;
+    net->open                   = &ecos_usbeth_open;
+    net->stop                   = &ecos_usbeth_close;
+    net->do_ioctl               = &ecos_usbeth_ioctl;
+    net->hard_start_xmit        = &ecos_usbeth_start_tx;
+    net->set_multicast_list     = &ecos_usbeth_set_rx_mode;
+    net->get_stats              = &ecos_usbeth_netdev_stats;
+    net->mtu                    = 1500; // ECOS_USBETH_MAXTU - 2;
+    memcpy(net->dev_addr, MAC, 6);
+    
+    printk("eCos-based USB ethernet peripheral active at %s\n", net->name);
+    MOD_INC_USE_COUNT;
+    return (void*) usbeth;
+}
+
+// disconnect().
+// Invoked after probe() has recognized a device but that device
+// has gone away. 
+static void
+ecos_usbeth_disconnect(struct usb_device* usbdev, void* data)
+{
+    ecos_usbeth* usbeth = (ecos_usbeth*) data;
+    if (!usbeth) {
+        printk("ecos_usbeth: warning, disconnecting unconnected device\n");
+        return;
+    }
+    if (0 != netif_running(usbeth->net_dev)) {
+        ecos_usbeth_close(usbeth->net_dev);
+    }
+    unregister_netdev(usbeth->net_dev);
+    if (-EINPROGRESS == usbeth->rx_urb.status) {
+        usb_unlink_urb(&(usbeth->rx_urb));
+    }
+    if (-EINPROGRESS == usbeth->tx_urb.status) {
+        usb_unlink_urb(&(usbeth->tx_urb));
+    }
+    kfree(usbeth);
+    MOD_DEC_USE_COUNT;
+}
+
+static struct usb_driver ecos_usbeth_driver = {
+    name:       "ecos_usbeth",
+    probe:      ecos_usbeth_probe,
+    disconnect: ecos_usbeth_disconnect,
+};
+
+// init()
+// Called when the module is loaded. It just registers the device with
+// the generic USB code. Nothing else can really be done until
+// the USB code detects that a device has been attached.
+int __init
+ecos_usbeth_init(void)
+{
+    printk("eCos USB-ethernet device driver\n");
+    return usb_register(&ecos_usbeth_driver);
+}
+
+// exit()
+// Called when the module is unloaded. disconnect() will be
+// invoked if appropriate.
+void __exit
+ecos_usbeth_exit(void)
+{
+    usb_deregister(&ecos_usbeth_driver);
+}
+
+module_init(ecos_usbeth_init);
+module_exit(ecos_usbeth_exit);
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/include/usbs_eth.h
@@ -0,0 +1,375 @@
+#ifndef CYGONCE_USBS_ETH_H
+#define  CYGONCE_USBS_ETH_H_
+//==========================================================================
+//
+//      include/usbs_eth.h
+//
+//      Description of the USB slave-side ethernet support
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/
+//
+// 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 Original Code is eCos - Embedded Configurable Operating System,
+// released September 30, 1998.
+//
+// The Initial Developer of the Original Code is Red Hat.
+// Portions created by Red Hat are
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+// All Rights Reserved.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+// Purpose:
+// Description:  USB slave-side ethernet support
+//
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+//
+// The primary purpose of the USB slave-side ethernet code is to
+// provide an ethernet service for the host. Essentially this means
+// the following:
+//
+// 1) the host can transmit an ethernet frame to the USB peripheral.
+//    This frame is received by the code in this package and then
+//    passed up to higher-level code for processing. Typically the
+//    frame will originate from a TCP/IP stack running inside the
+//    host, and the higher-level code will forward the frame via a
+//    real ethernet chip or some other ethernet-style device.
+//
+// 2) higher-level code will provide ethernet frames to be sent to
+//    the host, usually to a TCP/IP stack running on the host. The
+//    exact source of the ethernet frame is not known.
+//
+// 3) the host may initiate a number of control operations, for
+//    example it may request the MAC address or it may want to
+//    control the filtering mode (e.g. enable promiscuous mode).
+//
+// 4) there are USB control-related operations, for example actions
+//    to be taken when the peripheral is disconnected from the
+//    bus or when the host wants to disable the ethernet interface.
+//
+// It is possible to develop a USB ethernet peripheral that does not
+// involve a TCP/IP stack inside the peripheral, in fact that is the
+// most common implementation. Instead a typical peripheral would
+// involve a USB port, an ethernet port, and a cheap microcontroller
+// just powerful enough to forward packets between the two. The eCos
+// USB code can be used in this way, and the primary external
+// interface provides enough functionality for this to work.
+//
+//                  +---------------+   ethernet
+//   +----+         |               |     |
+//   |    |   USB   |      app      |     |
+//   |host|---------|     /   \     |-----o
+//   |    |         |    /     \    |     |
+//   +----+         | USB-eth   eth |     |
+//                  +---------------+     |
+//                   USB peripheral
+//
+// Note that the USB-ethernet code does not know anything about the
+// real ethernet device or what the application gets up to, it just
+// provides an interface to the app. The above represents just one
+// possible use for a USB-ethernet device.
+//
+// Also worth mentioning: when the host TCP/IP stack requests the MAC
+// address USB-eth would normally respond with the MAC address for the
+// real ethernet device. That way things like host-side DHCP should
+// just work.
+//
+// Alternatively for some applications it is desirable to run a TCP/IP
+// stack inside the peripheral as well as on the host. This makes
+// things a fair bit more complicated, something like this.
+//
+//                  +---------------+
+//                  |      app      |
+//                  |       |       |  ethernet
+//   +----+         |       |       |     |
+//   |    |   USB   |     TCP/IP    |     |
+//   |host|---------|     /   \     |-----o
+//   |    |         |    /     \    |     |
+//   +----+         | USB-eth   eth |     |
+//                  +---------------+     |
+//                   USB peripheral
+//
+// 
+// Usually this will involve enabling the bridge code in the TCP/IP
+// stack, or possibly performing some sort of bridging below the
+// TCP/IP stack. One way of getting things to work is to view the
+// USB connection as a small ethernet segment with just two
+// attached machines, the host and the peripheral. The two will
+// need separate MAC addresses, in addition to the MAC address
+// for the real ethernet device. This way the bridge code
+// sees things the way it expects.    
+//
+// There will still be some subtle differences between a setup like
+// this and a conventional ethernet bridge, mainly because there
+// is a host-side TCP/IP stack which can perform control operations.
+// For example the host stack may request that USB-eth go into
+// promiscuous mode. A conventional ethernet bridge just deals
+// with ethernet segments and does not need to worry about
+// control requests coming in from one of the segments.
+//
+// It is not absolutely essential that there is another network.
+// However without another network this setup would look to the host
+// like an ethernet segment with just two machines attached to it, the
+// host itself and the USB peripheral, yet it still involves all the
+// complexities of ethernet such as broadcast masks and IP subnets.
+// Anything along these lines is likely to prove somewhat confusing,
+// and the USB peripheral should probably act like some other class
+// of USB device instead.
+//
+// One special setup has the host acting as a bridge to another
+// network, rather than the peripheral. This might make sense for
+// mobile peripherals such as PDA's, as a way of connecting the
+// peripheral to an existing LAN without needing a LAN adapter.
+// Enabling bridging in the host may be a complex operation, limiting
+// the applicability of such a setup.
+//
+// This package will only implement the eCos network driver interface
+// if explicitly enabled. The package-specific interface is always
+// provided, although trying to mix and match the two may lead to
+// terrible confusion: once the network driver is active nothing else
+// should use the lower-level USB ethernet code. However application
+// code is responsible for initializing the package, and specifically
+// for providing details of the USB endpoints that should be used.
+//
+// The package assumes that it needs to provide just one
+// instantiation. Conceivably there may be applications where it makes
+// sense for a USB peripheral to supply two separate ethernet devices
+// to the host, but that would be an unusual setup. Also a peripheral
+// might provide two or more USB slave ports to allow multiple hosts
+// to be connected, with a separate USB-ethernet instantiation for
+// each port, but again that would be an unusual setup. Applications
+// which do require more than one instantiation are responsible
+// for doing this inside the application code.
+
+// The public interface depends on configuration options.
+#include <pkgconf/io_usb_slave_eth.h>
+
+// Define the interface in terms of eCos data types.
+#include <cyg/infra/cyg_type.h>
+
+// The generic USB support
+#include <cyg/io/usb/usbs.h>
+
+// Network driver definition, to support cloning of usbs_eth_netdev0
+#ifdef CYGPKG_USBS_ETHDRV
+# include <netdev.h>
+#endif
+    
+// ----------------------------------------------------------------------------
+// Maximum transfer size. This is not specified by io/eth. It can be
+// determined from <netinet/if_ether.h> but the TCP/IP stack may not
+// be loaded so that header file cannot be used.
+//
+// Some (most?) USB implementations have implementation problems. For
+// example the SA11x0 family cannot support transfers that are exact
+// multiples of the 64-byte USB bulk packet size, instead it is
+// necessary to add explicit size information. This can be encoded
+// conveniently at the start of the buffer.
+//
+// So the actual MTU consists of:
+//  1) a 1500 byte payload
+//  2) the usual ethernet header with a six-byte source MAC
+//     address, a six-byte destination MAC address, and a
+//     two-byte protocol or length field, for a total header
+//     size of 14 bytes.
+//  3) an extra two bytes of size info.
+//
+// For a total of 1516 bytes.
+#define CYGNUM_USBS_ETH_MAX_FRAME_SIZE 1514
+#define CYGNUM_USBS_ETH_MAXTU (CYGNUM_USBS_ETH_MAX_FRAME_SIZE + 2)
+    
+// Although the minimum ethernet frame size is 60 bytes, this includes
+// padding which is not needed when transferring over USB. Hence the
+// actual minimum is just the 14 byte ethernet header plus two bytes
+// for the length.
+#define CYGNUM_USBS_ETH_MIN_FRAME_SIZE 14
+#define CYGNUM_USBS_ETH_MINTU (CYGNUM_USBS_ETH_MIN_FRAME_SIZE + 2)
+    
+// ----------------------------------------------------------------------------
+// This data structure serves two purposes. First, it keeps track of
+// the information needed by the low-level USB ethernet code, for
+// example which endpoints should be used for incoming and outgoing
+// packets. Second, if the support for the TCP/IP stack is enabled
+// then there are additional fields to support that (e.g. for keeping
+// track of statistics).
+//
+// Arguably the two uses should be separated into distinct data
+// structures. That would make it possible to instantiate multiple
+// low-level USB-ethernet devices but only have a network driver for
+// one of them. Achieving that flexibility would require some extra
+// indirection, affecting performance and code-size, and it is not
+// clear that that flexibility would ever prove useful. For now having
+// a single data structure seems more appropriate.
+
+typedef struct usbs_eth {
+
+    // What endpoints should be used for communication?
+    usbs_control_endpoint*      control_endpoint;
+    usbs_rx_endpoint*           rx_endpoint;
+    usbs_tx_endpoint*           tx_endpoint;
+    
+    // Is the host ready to receive packets? This state is determined
+    // largely by control packets sent from the host. It can change at
+    // DSR level.
+    volatile cyg_bool   host_up;
+
+    // Has the host-side set promiscuous mode? This is relevant to the
+    // network driver which may need to do filtering based on the MAC
+    // address and host-side promiscuity.
+    volatile cyg_bool   host_promiscuous;
+
+    // The host MAC address. This is the address supplied to the
+    // host's TCP/IP stack and filled in by the init function. There
+    // is no real hardware to extract the address from.
+    unsigned char       host_MAC[6];
+
+    // Needed for callback operations.
+    void                (*tx_callback_fn)(struct usbs_eth*, void*, int);
+    void*               tx_callback_arg;
+
+    void                (*rx_callback_fn)(struct usbs_eth*, void*, int);
+    void*               rx_callback_arg;
+
+    // RX operations just block if the host is not connected, resuming
+    // when a connection is established. This means saving the buffer
+    // pointer so that when the host comes back up the rx operation
+    // proper can start. This is not quite consistent because if the
+    // connection breaks while an RX is in progress there will be a
+    // callback with an error code whereas an RX on a broken
+    // connection just blocks, but this does fit neatly into an
+    // event-driven I/O model.
+    unsigned char*      rx_pending_buf;
+    
+#ifdef CYGPKG_USBS_ETHDRV
+    // Has the TCP/IP stack brought up this interface yet?
+    cyg_bool            ecos_up;
+
+    // Is there an ongoing receive? Cancelling a receive operation
+    // during a stop() may be difficult, and a stop() may be followed
+    // immediately by a restart.
+    cyg_bool            rx_active;
+    
+    // The eCos-side MAC. If the host and the eCos stack are to
+    // communicate then they must be able to address each other, i.e.
+    // they need separate addresses. Again there is no real hardware
+    // to extract the address from so it has to be supplied by higher
+    // level code via e.g. an ioctl().
+    unsigned char       ecos_MAC[6];
+    
+    // SNMP statistics
+# ifdef CYGFUN_USBS_ETHDRV_STATISTICS
+    unsigned int        interrupts;
+    unsigned int        tx_count;
+    unsigned int        rx_count;
+    unsigned int        rx_short_frames;
+    unsigned int        rx_too_long_frames;
+# endif
+    
+    // The need for a receive buffer is unavoidable for now because
+    // the network driver interface does not support pre-allocating an
+    // mbuf and then passing it back to the stack later. Ideally the
+    // rx operation would read a single USB packet, determine the
+    // required mbuf size from the 2-byte header, copy the initial
+    // data, and then read more USB packets. Alternatively, a
+    // 1516 byte mbuf could be pre-allocated and then the whole
+    // transfer could go there, potentially wasting some mbuf space.
+    // None of this is possible at present.
+    unsigned char       rx_buffer[CYGNUM_USBS_ETH_MAXTU];
+    cyg_bool            rx_buffer_full;
+
+    // It should be possible to eliminate the tx buffer once the
+    // USB driver supports refill functions.
+    unsigned char       tx_buffer[CYGNUM_USBS_ETH_MAXTU];
+    cyg_bool            tx_buffer_full;
+    cyg_bool            tx_done;
+    unsigned long       tx_key;
+    
+    // Prevent recursion send()->tx_done()->can_send()/send()
+    cyg_bool            tx_in_send;
+#endif
+    
+} usbs_eth;
+
+// The package automatically instantiates one USB ethernet device.
+extern usbs_eth usbs_eth0;
+
+// ----------------------------------------------------------------------------
+// If the network driver option is enabled then the package also
+// provides a single cyg_netdevtab_entry. This is exported so that
+// application code can clone the entry.
+#ifdef CYGPKG_USBS_ETHDRV
+extern cyg_netdevtab_entry_t usbs_eth_netdev0;    
+#endif    
+    
+// ----------------------------------------------------------------------------
+// A C interface to the low-level USB code.
+    
+// Initialize the USBS-eth support for a particular usbs_eth device.
+// This associates a usbs_eth structure with specific endpoints.
+extern void usbs_eth_init(usbs_eth*, usbs_control_endpoint*, usbs_rx_endpoint*, usbs_tx_endpoint*, unsigned char*);
+    
+// Start an asynchronous transmit of a single buffer of up to
+// CYGNUM_USBS_ETH_MAXTU bytes. This buffer should contain a 2-byte
+// size field, a 14-byte ethernet header, and upto 1500 bytes of
+// payload. When the transmit has completed the callback function (if
+// any) will be invoked with the specified pointer. NOTE: figure out
+// what to do about error reporting
+extern void usbs_eth_start_tx(usbs_eth*, unsigned char*, void (*)(usbs_eth*, void*, int), void*);
+
+// Start an asynchronous receive of an ethernet packet. The supplied
+// buffer should be at least CYGNUM_USBS_ETH_MAXTU bytes. When a
+// complete ethernet frame has been received or when some sort of
+// error occurs the callback function will be invoked. The third
+// argument
+extern void usbs_eth_start_rx(usbs_eth*, unsigned char*, void (*)(usbs_eth*, void*, int), void*);
+
+// The handler for application class control messages. The init call
+// will install this in the control endpoint by default. However the
+// handler is fairly dumb: it assumes that all application control
+// messages are for the ethernet interface and does not bother to
+// check the control message's destination. This is fine for simple
+// USB ethernet devices, but for any kind of multi-function peripheral
+// higher-level code will have to perform multiplexing and invoke this
+// handler only when appropriate.
+extern usbs_control_return usbs_eth_class_control_handler(usbs_control_endpoint*, void*);
+
+// Similarly a handler for state change messages. Installing this
+// means that the ethernet code will have sufficient knowledge about
+// the state of the USB connection for simple ethernet-only
+// peripherals, but not for anything more complicated. In the latter
+// case higher-level code will need to keep track of which
+// configuration, interfaces, etc. are currently active and explicitly
+// enable or disable the ethernet device using the functions below.
+extern void usbs_eth_state_change_handler(usbs_control_endpoint*, void*, usbs_state_change, int);
+extern void usbs_eth_disable(usbs_eth*);
+extern void usbs_eth_enable(usbs_eth*);    
+    
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // CYGONCE_USBS_ETH_H_
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/src/usbseth.c
@@ -0,0 +1,306 @@
+//==========================================================================
+//
+//      usbseth.c
+//
+//      Support for USB-ethernet devices, slave-side.
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_ass.h>
+#include <cyg/infra/cyg_trac.h>
+#include <cyg/infra/diag.h>
+#include <cyg/hal/hal_arch.h>
+#include <cyg/infra/diag.h>
+#include <cyg/hal/drv_api.h>
+
+#include <pkgconf/io_usb_slave_eth.h>
+
+#define __ECOS 1
+#include <cyg/io/usb/usbs_eth.h>
+
+#ifdef CYGPKG_USBS_ETHDRV
+#include <netdev.h>
+#include <eth_drv.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// Static data.
+//
+// usbs_eth0 contains the per-device data, both the low-level data
+// such as which endpoints to use and the network-driver data such as
+// SNMP statistics. If this package is loaded then the assumption
+// is that there should be at least one USB-ethernet device. Additional
+// ones can be instantiated in application code if necessary. A call
+// to usbs_eth_init() is required for initialization.
+usbs_eth usbs_eth0;
+
+// ----------------------------------------------------------------------------
+// Initialization. This should be called explicitly by application code
+// at an appropriate point in the system startup.
+void
+usbs_eth_init(usbs_eth* eth, usbs_control_endpoint* ctrl, usbs_rx_endpoint* rx, usbs_tx_endpoint* tx, unsigned char* mac)
+{
+    eth->control_endpoint       = ctrl;
+    eth->rx_endpoint            = rx;
+    eth->tx_endpoint            = tx;
+    eth->host_up                = false;
+    eth->host_promiscuous       = false;
+    memcpy(eth->host_MAC, mac, 6);
+    eth->rx_pending_buf         = (unsigned char*) 0;
+    
+    // Install default handlers for some messages. Higher level code
+    // may override this.
+    ctrl->state_change_fn       = &usbs_eth_state_change_handler;
+    ctrl->state_change_data     = (void*) eth;
+    ctrl->class_control_fn      = &usbs_eth_class_control_handler;
+    ctrl->class_control_data    = (void*) eth;
+    
+#ifdef CYGPKG_USBS_ETHDRV
+    eth->ecos_up                = false;
+    eth->rx_active              = false;
+# ifdef CYGFUN_USBS_ETHDRV_STATISTICS    
+    eth->interrupts             = 0;
+    eth->tx_count               = 0;
+    eth->rx_count               = 0;
+# endif    
+    eth->rx_buffer_full         = false;
+    eth->tx_in_send             = false;
+    eth->tx_buffer_full         = false;
+    eth->tx_done                = false;
+#endif
+}
+
+
+// ----------------------------------------------------------------------------
+// Generic transmit and receive operations. These can be called
+// explicitly by application code, or implicitly via the eCos ethernet
+// device driver code in usbsethdrv.c. These two modes of operation
+// should not be mixed since the routines do not perform any
+// synchronization themselves, instead they rely on higher level code.
+
+// Packet transmission. The exported function is usbs_eth_start_tx(),
+// which can be invoked from thread context or DSR context. The
+// supplied buffer must already be in a form that can be transmitted
+// directly out of the USB endpoint with no further processing
+// (although it is necessary to extract the size information from the
+// buffer).
+//
+// When the underlying USB transfer has completed the USB code will invoke
+// usbs_eth_tx_callback(), usually in DSR context although possibly in
+// thread context depending on the specific USB implementation. The
+// underlying USB driver may have had to do some padding so the amount
+// transferred may be slightly greater than requested.
+
+static void
+usbs_eth_tx_callback(void* usbs_callback_arg, int size)
+{
+    usbs_eth*   eth = (usbs_eth*) usbs_callback_arg;
+    CYG_ASSERT( (size < 0) || (size >= CYGNUM_USBS_ETH_MINTU), "returned size must be valid.");
+    (*eth->tx_callback_fn)(eth, eth->tx_callback_arg, size);
+}
+
+void
+usbs_eth_start_tx(usbs_eth* eth, unsigned char* buf, void (*callback_fn)(usbs_eth*, void*, int), void* callback_arg)
+{
+    int      size;
+    cyg_bool address_ok = false;
+    static const unsigned char broadcast_mac[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+    
+    size = buf[0] + (buf[1] << 8);
+    CYG_ASSERT( (size < 0) || ((size >= CYGNUM_USBS_ETH_MIN_FRAME_SIZE) && (size <= CYGNUM_USBS_ETH_MAX_FRAME_SIZE)), \
+                "ethernet frame size constraints must be observed");
+
+    if ((0 == memcmp(buf + 2, eth->host_MAC, 6)) ||
+        (0 == memcmp(buf + 2, broadcast_mac, 6))) {
+        address_ok = true;
+    }
+
+    // The following checks involve data that can change as a result
+    // of control operations, so it is necessary to synchronize with
+    // those. The control operations will typically run at DSR level
+    // so a DSR lock has to be used. 
+    
+    cyg_drv_dsr_lock();
+    if (eth->host_up && (address_ok || eth->host_promiscuous)) {
+        
+        eth->tx_callback_fn             = callback_fn;
+        eth->tx_callback_arg            = callback_arg;
+        eth->tx_endpoint->buffer        = buf;
+        eth->tx_endpoint->buffer_size   = size + 2;
+        eth->tx_endpoint->complete_fn   = &usbs_eth_tx_callback;
+        eth->tx_endpoint->complete_data = (void*) eth;
+        (*(eth->tx_endpoint->start_tx_fn))(eth->tx_endpoint);
+        
+    } else {
+        // Packets not intended for the host can be discarded quietly.
+        // A broken connection needs to be reported.
+        (*callback_fn)(eth, callback_arg, eth->host_up ? size : -EPIPE);
+    }
+    cyg_drv_dsr_unlock();
+}
+
+// Packet reception. This simply involves starting a transfer for
+// up to the maximum ethernet frame size. The lower-level USB code
+// will detect the end of the transfer. The exported function is
+// usbs_eth_start_rx(). 
+static void
+usbs_eth_rx_callback(void* usbs_callback_arg, int size)
+{
+    usbs_eth*   eth = (usbs_eth*) usbs_callback_arg;
+
+    CYG_ASSERT( (size <= 0) || ((size >= CYGNUM_USBS_ETH_MINTU) && (size <= CYGNUM_USBS_ETH_MAXTU)), \
+                "ethernet frame size constraints must be observed");
+    
+    (*eth->rx_callback_fn)(eth, eth->rx_callback_arg, size);
+}
+
+void
+usbs_eth_start_rx(usbs_eth* eth, unsigned char* buf, void (*callback_fn)(usbs_eth*, void*, int), void* callback_arg)
+{
+    eth->rx_callback_fn  = callback_fn;
+    eth->rx_callback_arg = callback_arg;
+    
+    cyg_drv_dsr_lock();
+    if (eth->host_up) {
+        eth->rx_endpoint->buffer        = buf;
+        eth->rx_endpoint->buffer_size   = CYGNUM_USBS_ETH_MAXTU;
+        eth->rx_endpoint->complete_fn   = &usbs_eth_rx_callback;
+        eth->rx_endpoint->complete_data = (void*) eth;
+        (*(eth->rx_endpoint->start_rx_fn))(eth->rx_endpoint);
+    } else {
+        CYG_ASSERT( (void*) 0 == eth->rx_pending_buf, "No RX operation should be in progress");
+        eth->rx_pending_buf = buf;
+    }
+    cyg_drv_dsr_unlock();
+}
+ 
+// ----------------------------------------------------------------------------
+// Control operations. The host may send two types of application-specific
+// control messages, one to get the MAC address and one to enable/disable
+// promiscuous mode on the host side. This callback will typically be invoked
+// in DSR context.
+
+// These constants need to be shared somehow with the driver in ../host/,
+// but if some variant of that driver becomes part of the Linux kernel
+// then its sources must be self-contained with no dependencies on
+// eCos sources or headers. Hence a duplicate definition for now.
+#define USBS_ETH_CONTROL_GET_MAC_ADDRESS        0x01
+#define USBS_ETH_CONTROL_SET_PROMISCUOUS_MODE   0x02
+
+usbs_control_return
+usbs_eth_class_control_handler(usbs_control_endpoint* endpoint, void* callback_data)
+{
+    usbs_control_return result = USBS_CONTROL_RETURN_STALL;
+    
+    usbs_eth*   eth    = (usbs_eth*)   callback_data;
+    usb_devreq* devreq = (usb_devreq*) endpoint->control_buffer;
+    int         size   = (devreq->length_hi << 8) + devreq->length_lo;
+
+    CYG_ASSERT(endpoint == eth->control_endpoint, "USB ethernet control messages correctly routed");
+
+    if (USBS_ETH_CONTROL_GET_MAC_ADDRESS == devreq->request) {
+        // This should be an IN operation for at least six bytes.
+        if ((size >= 6) &&
+            (USB_DEVREQ_DIRECTION_IN == (devreq->type & USB_DEVREQ_DIRECTION_MASK))) {
+
+            endpoint->buffer      = eth->host_MAC;
+            endpoint->buffer_size = 6;
+            result = USBS_CONTROL_RETURN_HANDLED;
+        }
+        // Otherwise drop through with a return value of STALL
+        
+    } else if (USBS_ETH_CONTROL_SET_PROMISCUOUS_MODE == devreq->request) {
+        // The length should be 0, no more data is expected by either side.
+        if (0 == size) {
+            // The new promiscuity mode is encoded in value_lo;
+            eth->host_promiscuous = devreq->value_lo;
+            result = USBS_CONTROL_RETURN_HANDLED;
+        }
+    } 
+
+    return result;
+}
+
+// State changes. As far as the ethernet code is concerned, if there
+// is a change to CONFIGURED state then the device has come up,
+// otherwise if there is a change from CONFIGURED state it has gone
+// down. All other state changes are irrelevant.
+void
+usbs_eth_state_change_handler(usbs_control_endpoint* endpoint, void* callback_data, usbs_state_change change, int old_state)
+{
+    usbs_eth* eth       = (usbs_eth*) callback_data;
+    CYG_ASSERT(endpoint == eth->control_endpoint, "USB ethernet state changes correctly routed");
+
+    if (USBS_STATE_CHANGE_CONFIGURED == change) {
+        if (USBS_STATE_CONFIGURED != old_state) {
+            usbs_eth_enable(eth);
+        }
+    } else if ((USBS_STATE_CHANGE_RESUMED == change) && (USBS_STATE_CONFIGURED == (USBS_STATE_MASK & old_state))) {
+        usbs_eth_enable(eth);
+    } else if (eth->host_up) {
+        usbs_eth_disable(eth);
+    }
+}
+
+// Disabling the ethernet device means clearing the host_up flag.
+// This will block future transmits and receives but not any
+// that are currently underway.
+void
+usbs_eth_disable(usbs_eth* eth)
+{
+    eth->host_up = false;
+}
+
+// Enabling the ethernet device means setting the host_up flag and
+// possibly activating a pending rx operation.
+void
+usbs_eth_enable(usbs_eth* eth)
+{
+    if (!eth->host_up) {
+        eth->host_up            = true;
+        eth->host_promiscuous   = false;
+        if ((void*) 0 != eth->rx_pending_buf) {
+            eth->rx_endpoint->buffer            = eth->rx_pending_buf;
+            eth->rx_endpoint->buffer_size       = CYGNUM_USBS_ETH_MAXTU;
+            eth->rx_endpoint->complete_fn       = &usbs_eth_rx_callback;
+            eth->rx_endpoint->complete_data     = (void*) eth;
+            eth->rx_pending_buf = (void*) 0;
+            (*(eth->rx_endpoint->start_rx_fn))(eth->rx_endpoint);
+        }
+    }
+}
+
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/eth/slave/current/src/usbsethdrv.c
@@ -0,0 +1,607 @@
+//==========================================================================
+//
+//      usbethdrv.c
+//
+//      Network device driver for USB-ethernet devices.
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+#include <cyg/infra/cyg_type.h>
+#include <cyg/hal/hal_arch.h>
+#include <cyg/infra/diag.h>
+#include <cyg/hal/drv_api.h>
+
+#define __ECOS 1
+#include <netdev.h>
+#include <eth_drv.h>
+#include <eth_drv_stats.h>
+
+#include <pkgconf/io_usb_slave_eth.h>
+#include <cyg/io/usb/usbs_eth.h>
+
+// ----------------------------------------------------------------------------
+// The network driver data structure.
+ETH_DRV_SC(usbs_eth_sc0,
+           (void*) &usbs_eth0,
+           CYGDAT_USBS_ETHDRV_NAME,
+           usbs_ethdrv_start,
+           usbs_ethdrv_stop,
+           usbs_ethdrv_ioctl,
+           usbs_ethdrv_can_send,
+           usbs_ethdrv_send,
+           usbs_ethdrv_recv,
+           usbs_ethdrv_deliver,
+           usbs_ethdrv_poll,
+           usbs_ethdrv_intvector);
+
+NETDEVTAB_ENTRY(usbs_eth_netdev0,
+                "usbs_eth0",
+                usbs_ethdrv_init,
+                &usbs_eth_sc0);
+
+// ----------------------------------------------------------------------------
+// Statics gathering. The following macro can be used to increment a
+// statistic without having to use a #ifdef for the statistics
+// configuration option everywhere.
+#ifdef CYGFUN_USBS_ETHDRV_STATISTICS
+# define INCR_STAT(a)   \
+     CYG_MACRO_START    \
+     (a) += 1;          \
+     CYG_MACRO_END
+#else
+# define INCR_STAT(a)      CYG_EMPTY_STATEMENT
+#endif
+
+// Various constants related to SNMP statistics. It is not clear
+// what these are all for.
+#ifdef CYGFUN_USBS_ETHDRV_STATISTICS
+# define CYGDAT_USBS_ETHDRV_DESCRIPTION "eCos USB ethernet device"
+#endif
+// ----------------------------------------------------------------------------
+// Utility functions.
+//
+// The TCP/IP stack works in terms of scatter/gather buffers. USB tends to
+// involve DMA operations so it is more convenient to work in terms of
+// 1514 byte flat buffers. Actually, the first two bytes of the buffer
+// are used to hold the ethernet frame size to work around restrictions
+// with certain hardware implementations of USB that may be unable to
+// transfer certain packet sizes.
+
+static bool
+scatter(unsigned char* buf, struct eth_drv_sg* sg, int sg_len)
+{
+    unsigned int size;
+    
+    size = buf[0] | (buf[1] << 8);
+    buf++; buf++;
+
+    CYG_ASSERT((size >= CYGNUM_USBS_ETH_MIN_FRAME_SIZE) && (size <= CYGNUM_USBS_ETH_MAX_FRAME_SIZE),\
+               "ethernet frame size limits must be observed");
+        
+    while ((size > 0) && (sg_len > 0)) {
+        if (size > sg->len) {
+            memcpy((void*) sg->buf, buf, sg->len);
+            buf  += sg->len;
+            size -= sg->len;
+            sg++;
+            sg_len--;
+        } else {
+            memcpy((void*) sg->buf, buf, size);
+            size = 0;
+        }
+    }
+
+    return 0 == size;
+}
+
+static bool
+gather(unsigned char* buf, unsigned int size, struct eth_drv_sg* sg, int sg_len)
+{
+    unsigned int    left = size;
+    unsigned char*  base = buf;
+
+    buf++; buf++;
+    while ((left > 0) && (sg_len > 0)) {
+        if (left > sg->len) {
+            memcpy(buf, (void*) sg->buf, sg->len);
+            buf  += sg->len;
+            left -= sg->len;
+            sg++;
+            sg_len--;
+        } else {
+            memcpy(buf, (void*) sg->buf, left);
+            left = 0;
+        }
+    }
+    size    = size - left;
+    base[0] = size & 0x00FF;
+    base[1] = (size >> 8) & 0x00FF;
+
+    return 0 == left;
+}
+
+    
+// ----------------------------------------------------------------------------
+// usbs_ethdrv_init()
+//
+// This function is called during system initialization to decide
+// whether or not this particular network device is usable. For
+// USB-ethernet this is problematical, the device is only really
+// usable once both sides have come up. The typical sequence
+// of events is something like:
+//
+// 1) the eCos peripheral is powered up. Static constructors are
+//    run resulting in basic initialization.
+//
+// 2) the eCos TCP/IP stack initialization happens. Roughly in
+//    parallel the eCos USB slave side is initialized as well,
+//    i.e. enumeration data is supplied to control endpoints,
+//    endpoints are associated with application classes, and so
+//    on. The relative order of TCP/IP and USB initialization is
+//    not particularly important.
+//
+//    It is the TCP/IP stack's initialization code that will
+//    invoke usbs_eth_init().
+//
+// 3) host-side USB detects that the eCos peripheral has been
+//    connected or powered up. It goes through the enumeration
+//    process and will end up loading a host-side network driver.
+//    This connects to the eCos-side USB ethernet code to
+//    e.g. obtain the MAC address. 
+//
+// 4) when the host-side is ready, the eCos side can be brought up.
+//    The required call is (sc->funs->eth_drv->init)(sc, enaddr)
+//
+// In practice it is easier for now to invoke the init() function
+// immediately. There are not going to be any incoming packets
+// until the host is ready, and can_send() can just return false
+// for the time being.
+//
+// Invoked in: thread context only
+// ----------------------------------------------------------------------------
+
+static bool
+usbs_ethdrv_init(struct cyg_netdevtab_entry* ndp)
+{
+    struct eth_drv_sc*  sc  = (struct eth_drv_sc*)(ndp->device_instance);
+    usbs_eth*           eth = (usbs_eth*)(sc->driver_private);
+
+    (*sc->funs->eth_drv->init)(sc, eth->ecos_MAC);
+    return true;
+}
+
+// ----------------------------------------------------------------------------
+// The receive process that is used to transfer a received ethernet
+// packet into the stack. The calling sequence is somewhat convoluted.
+// It started off as:
+//
+//   1) Ethernet hw ISR invoked by hardware, schedules its own
+//      hw_dsr(), and blocks further interrupts in the ethernet chip
+//   2) hw_dsr() calls generic eth_drv_dsr() from io/eth common package
+//   3) eth_drv_dsr() interacts with the TCP/IP stack and allocates mbufs
+//      (typically, the TCP/IP stack might not be in use)
+//   4) eth_drv_dsr() calls usbs_eth_recv() to transfer the data to mbufs
+//   5) eth_drv_dsr() returns to hw_dsr() which reenables interrupts
+//   6) hw_dsr() completes and everything can proceed.
+//
+// The problem with this is that the whole ethernet packet gets copied
+// inside a DSR, affecting dispatch latency (but not interrupt latency).
+// This is bad. Hence there is an alternative route involving a separate
+// thread in the TCP/IP stack.
+//
+//   1) Ethernet hw ISR runs as before, scheduling hw_dsr()
+//   2) hw_dsr() calls up into eth_drv_dsr()
+//   3) eth_drv_dsr() wakes up a thread inside the TCP/IP stack
+//   4) eth_drv_dsr() returns to hw_dsr(), which performs no further
+//      processing. Ethernet chip interrupts remain disabled.
+//   5) The TCP/IP thread ends up calling hw_deliver(). This should take
+//      care of any pending activity. For every buffered packet there should
+//      be a call to a generic recv() function which then goes back into
+//      the driver-specific recv() function.
+//
+// The advantage is that ethernet packet copying now happens at thread
+// level rather than DSR level so thread priorities can be used to
+// schedule things.
+//
+// USB-ethernet does not interact directly with any hardware, instead
+// it just passes information to lower levels of USB code. The reception
+// process is started by usbs_ethdrv_start() when the TCP/IP stack brings
+// up the interface. 
+//
+// When the USB transfer has completed a callback will be invoked, at
+// DSR level. Assuming the transfer went ok, the callback will invoke
+// eth_drv_dsr() to inform the higher level code. 
+//
+// The deliver function can check the state of the buffer
+// and go through the sc->funs->eth_drv->recv()/recv() sequence
+// to transfer the data into the stack. 
+//
+// usbs_ethdrv_recv() does a scatter from the internal buffer into the
+// mbuf, thus freeing up the buffer. This allows it to start another
+// receive,
+//
+// Synchronisation involves the scheduler lock because the recv
+// callback is invoked inside a DSR.
+
+static void usbs_ethdrv_halted_callback(void*, int);
+
+static void
+usbs_ethdrv_recv_callback(usbs_eth* eth, void* callback_data, int size)
+{
+    cyg_bool resubmit = true;
+    
+    struct eth_drv_sc* sc = (struct eth_drv_sc*) callback_data;
+    CYG_ASSERT( eth == (usbs_eth*)(sc->driver_private), "USB and TCP/IP worlds need to be consistent");
+
+    INCR_STAT(eth->interrupts);
+    if (!eth->ecos_up) {
+        // This message should just be discarded since the eCos TCP/IP
+        // stack is not expecting anything from this interface.
+        // Reception will resume when the interface comes back up.
+        eth->rx_active  = false;
+        resubmit        = false;      
+    } else if (size < 0) {
+        // An error has occurred. The likely possibilities are:
+        // -EPIPE:      connection to the host has been broken
+        // -EAGAIN:     the endpoint is haltedn
+        // -EMSGSIZE:   bogus message from host
+        // -EIO:        other
+
+        if (-EAGAIN == size) {
+            // EAGAIN should be handled by waiting for the endpoint to be reset.
+            resubmit = false;
+            usbs_start_rx_endpoint_wait(eth->rx_endpoint, &usbs_ethdrv_halted_callback, (void*) sc);
+        } else if (-EMSGSIZE == size) {
+            // Do nothing for now
+        } else {
+            // EPIPE should be resubmitted, the usbseth.c will use the
+            // pending rx support. EIO could mean anything.
+        }
+    } else if (0 == size) {
+        // The endpoint is no longer halted. Just do the resubmit at
+        // the end.
+    } else {
+        // A packet has been received. Now do a size sanity check
+        // based on the first two bytes.
+        int real_size = eth->rx_buffer[0] + (eth->rx_buffer[1] << 8);
+        if (real_size < CYGNUM_USBS_ETH_MIN_FRAME_SIZE) {
+            INCR_STAT(eth->rx_short_frames);
+        } else if (real_size > CYGNUM_USBS_ETH_MAX_FRAME_SIZE) {
+            INCR_STAT(eth->rx_too_long_frames);
+        } else {
+            // The packet appears to be valid. Inform higher level
+            // code and mark the buffer as in use.
+            resubmit            = false;
+            eth->rx_buffer_full = true;
+            eth->rx_active      = false;
+            eth_drv_dsr(0, 0, (cyg_addrword_t) sc);
+        }
+    }
+    
+    if (resubmit) {
+        eth->rx_active = true;
+        usbs_eth_start_rx(eth, eth->rx_buffer, &usbs_ethdrv_recv_callback, callback_data);
+    }
+}
+
+// Another callback, used to wait while an endpoint is halted.
+static void
+usbs_ethdrv_halted_callback(void* callback_data, int size)
+{
+    struct eth_drv_sc* sc = (struct eth_drv_sc*) callback_data;
+    usbs_ethdrv_recv_callback((usbs_eth*) sc->driver_private, callback_data, 0);
+}
+
+// Start a receive operation. It is not possible to abort an existing
+// rx operation, so a valid sequence of events is: start, rx ongoing,
+// stop, restart. The rx_active field is used to keep track of whether
+// or not there is still a receive in progress. The receive callback
+// will just discard incoming data if the eCos stack is not currently
+// running.
+static void
+usbs_ethdrv_start_recv(struct eth_drv_sc* sc, usbs_eth* eth)
+{
+    cyg_drv_dsr_lock();
+    if (!eth->rx_active) {
+        eth->rx_active = true;
+        usbs_eth_start_rx(eth, eth->rx_buffer, &usbs_ethdrv_recv_callback, (void*) sc);
+    }
+    cyg_drv_dsr_unlock();
+}
+
+// This is invoked from the delivery thread when a valid buffer
+// has been received. The buffer should be scattered into the
+// supplied list, then another receive should be started.
+
+static void
+usbs_ethdrv_recv(struct eth_drv_sc* sc,
+                 struct eth_drv_sg* sg_list, int sg_len)
+{
+    usbs_eth* eth = (usbs_eth*)(sc->driver_private);
+
+    CYG_ASSERT( eth->rx_buffer_full, "This function should only be called when there is a buffer available");
+    (void) scatter(eth->rx_buffer, sg_list, sg_len);
+    eth->rx_buffer_full = false;
+    eth->rx_active      = true;
+    usbs_eth_start_rx(eth, eth->rx_buffer, &usbs_ethdrv_recv_callback, (void*) sc);
+}
+
+// ----------------------------------------------------------------------------
+// Now for the transmit process.
+//
+// When an application thread writes down a socket the data gets moved
+// into mbufs, and then passed to the appropriate device driver - which
+// may or may not be able to process it immediately. There is also a
+// timeout thread within the TCP/IP to handle retransmits etc.
+//
+// The stack will start by calling usbs_ethdrv_can_send() to determine
+// whether or not the driver can accept the packet. For the purposes
+// of the USB-ethernet driver this is true provided both host
+// and target are up and there is a spare buffer available.
+//
+// If the usbs_eth_can_send() returns true then there will be a call
+// to usbs_ethdrv_send(). This gathers the data into a single
+// buffer. If there is no transmit in progress yet then one is started.
+//
+// At some point the packet will have been transmitted and a callback
+// gets invoked. This needs to call eth_drv_dsr(), waking up the
+// delivery thread. The deliver() function can then check which
+// transmissions have completed and inform the higher level code
+// via sc->funs->eth_drv->tx_done(). The buffer can be re-used at
+// that point.
+
+static void
+usbs_ethdrv_send_callback(usbs_eth* eth, void* callback_data, int size)
+{
+    struct eth_drv_sc* sc = (struct eth_drv_sc*) callback_data;
+    CYG_ASSERT( eth == (usbs_eth*)(sc->driver_private), "USB and TCP/IP worlds need to be consistent");
+
+    INCR_STAT(eth->interrupts);
+
+    // There are a variety of possible error codes. -EAGAIN indicates
+    // that the endpoint is stalled. -EPIPE indicates that the
+    // connection to the host has been lost. These are not really
+    // particularly interesting. Whatever happens the buffer
+    // must be cleared and higher-level code informed so that
+    // the mbufs can be released.
+    if (size > 0) {
+        INCR_STAT(eth->tx_count);
+    }
+    eth->tx_done = true;
+    eth_drv_dsr(0, 0, (cyg_addrword_t) sc);
+}
+
+// Is it possible to send an ethernet frame? This requires
+// an empty buffer, i.e. there should be no existing
+// transmit in progress. It also requires that the host
+// is connected and that the endpoint is not currently halted.
+static int
+usbs_ethdrv_can_send(struct eth_drv_sc* sc)
+{
+    usbs_eth* eth = (usbs_eth*)(sc->driver_private);
+    return eth->host_up && !eth->tx_buffer_full && !eth->tx_endpoint->halted;
+}
+
+// Actually start a packet transmission. This means collecting
+// all the data into a single buffer and then invoking the
+// lower-level code. The latter may discard the packet immediately
+// if the MAC is not appropriate: it would be more efficient to
+// catch that here, especially for large packets, but the check
+// has to happen inside the lower-level code anyway in case
+// that is being invoked directly rather than via the driver.
+//
+// There is a possible recursion problem,
+// send->start_tx->tx_done->can_send->send, which is guarded
+// against using the tx_in_send flag.
+
+static void
+usbs_ethdrv_send(struct eth_drv_sc* sc,
+              struct eth_drv_sg* sgl_list, int sg_len, int total_len,
+              unsigned long key)
+{
+    usbs_eth* eth = (usbs_eth*)(sc->driver_private);
+    
+    CYG_ASSERT( 0 == eth->tx_in_send, "send() should not be invoked recursively");
+    CYG_ASSERT( total_len <= CYGNUM_USBS_ETH_MAX_FRAME_SIZE, "ethernet maximum frame size should be observed");
+    CYG_ASSERT( CYGNUM_USBS_ETH_MIN_FRAME_SIZE <= total_len, "ethernet minimum frame size should be observed");
+
+    eth->tx_in_send = true;
+    CYG_ASSERT( !eth->tx_buffer_full, "the transmit buffer should be empty");
+    gather(eth->tx_buffer, CYGNUM_USBS_ETH_MAX_FRAME_SIZE, sgl_list, sg_len);
+    eth->tx_buffer_full = true;
+    eth->tx_done        = false;
+    eth->tx_key         = key;
+    usbs_eth_start_tx(eth, eth->tx_buffer, &usbs_ethdrv_send_callback, (void*) sc);
+    eth->tx_in_send = false;
+}
+
+// ----------------------------------------------------------------------------
+// Deliver needs to take into account both receive and transmit buffers.
+
+static void
+usbs_ethdrv_deliver(struct eth_drv_sc* sc)
+{
+    usbs_eth* eth = (usbs_eth*)(sc->driver_private);
+
+    if (eth->rx_buffer_full) {
+        int size = eth->rx_buffer[0] + (eth->rx_buffer[1] << 8);
+        (*sc->funs->eth_drv->recv)(sc, size);
+    }
+    if (eth->tx_done) {
+        unsigned long key   = eth->tx_key;
+        eth->tx_buffer_full = false;
+        eth->tx_done        = false;
+        (*sc->funs->eth_drv->tx_done)(sc, key, 1);
+    }
+}
+
+// ----------------------------------------------------------------------------
+// usbs_ethdrv_start()
+//
+// This gets called by the TCP/IP stack later on during
+// initialization, when the stack is ready to send and receive
+// packets. It may get called multiple times while the stack
+// is running, with different flags values.
+//
+// As far as transmits are concerned, nothing needs to be done. If no
+// transmit is in progress then everything is fine anyway. If a
+// transmit is already in progress then it must be allowed to complete
+// via the usual route. Receives should however be restarted, the
+// start function has appropriate safeguards.
+//
+// Invoked in: thread context only
+// ----------------------------------------------------------------------------
+
+static void
+usbs_ethdrv_start(struct eth_drv_sc* sc, unsigned char* enaddr, int flags)
+{
+    usbs_eth* eth = (usbs_eth*)(sc->driver_private);
+    if (!eth->ecos_up) {
+        eth->ecos_up = true;
+        usbs_ethdrv_start_recv(sc, eth);
+    }
+}
+
+// ----------------------------------------------------------------------------
+// usbs_ethdrv_stop()
+//
+// Similarly this gets called by the TCP/IP stack to bring the network
+// interface down. Nothing should happen for any packets currently
+// being transmitted or received, that would cause confusion everywhere.
+// The receive callback checks the ecos_up flag and does the right
+// thing. The TCP/IP stack should not call can_send() after taking
+// the interface down so no new transmits will be initiated.
+//
+// Invoked in: thread context only
+// ----------------------------------------------------------------------------
+
+static void
+usbs_ethdrv_stop(struct eth_drv_sc* sc)
+{
+    usbs_eth* eth = (usbs_eth*)(sc->driver_private);
+    eth->ecos_up = false;
+}
+
+// ----------------------------------------------------------------------------
+// usbs_eth_ioctl()
+//
+// The operations to worry about here are:
+//
+//    SET_MAC_ADDRESS,via the SIOCSIFHWADDR ioctl
+//
+//    GET_IF_STATS and GET_IF_STATS_UD, to report gathered statistics.
+//
+// Invoked in: thread context only
+// ----------------------------------------------------------------------------
+
+static int
+usbs_ethdrv_ioctl(struct eth_drv_sc* sc, unsigned long key, void* data, int data_length)
+{
+    usbs_eth* eth = (usbs_eth*)(sc->driver_private);
+    int       result = EINVAL;
+    
+    switch(key) {
+      case ETH_DRV_SET_MAC_ADDRESS:
+        {
+            if (6 == data_length) {
+                memcpy(eth->ecos_MAC, data, 6);
+                result = 0;
+            }
+        }
+        break;
+#if defined(CYGFUN_USBS_ETHDRV_STATISTICS) && defined(ETH_DRV_GET_IF_STATS_UD)
+      case ETH_DRV_GET_IF_STATS_UD:
+      case ETH_DRV_GET_IF_STATS:
+        {
+            static unsigned char my_chipset[] = { 0, 0 };
+            struct ether_drv_stats *p = (struct ether_drv_stats*) data;
+            int    i;
+            strcpy(p->description, CYGDAT_USBS_ETHDRV_DESCRIPTION);
+            for ( i = 0; i < SNMP_CHIPSET_LEN; i++ ) {
+                if ( 0 == (p->snmp_chipset[i] = my_chipset[i]) ) {
+                    break;
+                }
+            }
+            p->duplex               = 3;        // 3 == duplex
+            p->operational          = (eth->host_up && eth->ecos_up) ? 3 : 2;   // 3 == up, 2 == down
+            p->speed                = 10 * 1000000;
+            p->supports_dot3        = 1;
+            p->rx_too_long_frames   = eth->rx_too_long_frames;
+            p->rx_short_frames      = eth->rx_short_frames;
+            p->interrupts           = eth->interrupts;
+            p->rx_count             = eth->rx_count;
+            p->tx_count             = eth->tx_count;
+            p->tx_queue_len         = 1;
+        }
+        break;
+#endif
+        
+      default:
+        break;
+    }
+
+    return result;
+}
+
+                 
+// ----------------------------------------------------------------------------
+// usbs_ethdrv_poll()
+//
+// On real ethernet hardware this is used by RedBoot once the
+// application has started running, so that the network device can be
+// used for debugging purposes as well as for the application's own
+// needs. The lower-level USB device may supply a poll function as well.
+// ----------------------------------------------------------------------------
+static void
+usbs_ethdrv_poll(struct eth_drv_sc* sc)
+{
+    usbs_eth*   eth = (usbs_eth*)(sc->driver_private);
+    (*eth->control_endpoint->poll_fn)(eth->control_endpoint);
+}
+
+// ----------------------------------------------------------------------------
+// usbs_ethdrv_intvector()
+//
+// See usbs_eth_poll().
+// ----------------------------------------------------------------------------
+
+static int
+usbs_ethdrv_intvector(struct eth_drv_sc* sc)
+{
+    usbs_eth*   eth = (usbs_eth*)(sc->driver_private);
+    return eth->control_endpoint->interrupt_vector;
+}
+
+
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/ChangeLog
@@ -0,0 +1,75 @@
+2001-02-02  Bart Veer  <bartv@redhat.com>
+
+	* cdl/usbs.cdl:
+	Add doc property to point at the HTML
+
+	* doc/usbs.sgml, *.html:
+	Incorporate changes from docs department, regenerate HTML
+
+2001-01-25  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs.c: 
+	* include/usbs.h:
+	Only declare the devtab support functions if the I/O package is
+	present, since that provides required data types.
+
+	* cdl/usbs.cdl:
+	devtab support should be enabled by default iff the I/O package is
+	present. 
+
+2001-01-22  Bart Veer  <bartv@redhat.com>
+
+	* doc/usbs.sgml, doc/makefile:
+	Added documentation
+
+2001-01-16  Bart Veer  <bartv@redhat.com>
+
+	* include/usbs.h:
+	* src/usbs.c:
+	Update the start() and poll() functions to match the documentation.
+
+2000-12-15  Bart Veer  <bartv@redhat.com>
+
+	* src/usbs.c:
+	Fix missing return statements.
+
+2000-11-28  Bart Veer  <bartv@redhat.com>
+
+	* cdl/usbs.cdl
+	* include/usbs.h:
+	* usbs.c
+	Update interface to USB device drivers
+
+2000-11-22  Bart Veer  <bartv@redhat.com>
+
+	* include/usbs.h: Fix nested #include protection
+
+2000-11-21  Bart Veer  <bartv@redhat.com>
+
+	* First check-in of eCos USB support.
+
+//===========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//===========================================================================
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/cdl/usbs.cdl
@@ -0,0 +1,97 @@
+# ====================================================================
+#
+#      usbs.cdl
+#
+#      USB slave-side support
+#
+# ====================================================================
+#####COPYRIGHTBEGIN####
+#                                                                          
+# -------------------------------------------                              
+# The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+#                                                                          
+# 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 Original Code is eCos - Embedded Configurable Operating System,      
+# released September 30, 1998.                                             
+#                                                                          
+# The Initial Developer of the Original Code is Red Hat.                   
+# Portions created by Red Hat are                                          
+# Copyright (C) 2000, 2001 Red Hat, Inc.                             
+# All Rights Reserved.                                                     
+# -------------------------------------------                              
+#                                                                          
+#####COPYRIGHTEND####
+# ====================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):      bartv
+# Original data:  bartv
+# Contributors:
+# Date:           2000-10-04
+#
+#####DESCRIPTIONEND####
+#
+# ====================================================================
+
+cdl_package CYGPKG_IO_USB_SLAVE {
+    display     "USB slave-side support"
+    parent      CYGPKG_IO_USB
+    include_dir "cyg/io/usb"
+    active_if   CYGHWR_IO_USB_SLAVE
+    doc         io-usb-slave.html
+    
+    compile usbs.c
+
+    cdl_interface CYGINT_IO_USB_SLAVE_CLIENTS {
+	display         "Number of clients of USB devices"
+	description "
+	    This counter keeps track of the number of clients of
+	    USB devices, especially application-class packages such
+	    as the USB-ethernet support. It can be used by USB
+	    device drivers for default settings.
+	"
+    }
+
+    cdl_option CYGGLO_IO_USB_SLAVE_APPLICATION {
+	display         "Application code uses USB devices"
+	default_value   0
+	implements      CYGINT_IO_USB_SLAVE_CLIENTS
+	description "
+	    If the USB devices are accessed by application code
+	    rather than by other packages then enabling this
+	    option will cause the USB device drivers to be enabled. 
+	"
+    }
+    
+    cdl_option CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES {
+	display         "Provide devtab entries by default"
+	default_value   CYGPKG_IO
+	requires        CYGPKG_IO
+	description "
+	    The USB slave-side endpoints can typically be accessed in two
+	    different ways. There is support for the traditional way of
+	    doing I/O with open/read/write calls, which involves the
+	    use of devtab entries. It is also possible to use a
+	    USB-specific API, defined largely in terms of asynchronous
+	    operations and callbacks (the read/write implementation uses
+	    these lower-level calls). If neither the application nor
+	    any other USB-related packages require the higher-level
+            read/write calls then it is possible to save some memory
+	    by eliminating the devtab entries.
+	"
+    }
+    
+    cdl_interface CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS {
+	display "Number of available host->slave endpoints"
+    }
+    cdl_interface CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS {
+	display "Number of available slave->host endpoints"
+    }
+}
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/io-usb-slave.html
@@ -0,0 +1,180 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+eCos USB Slave Support</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="NEXT"
+TITLE="Introduction"
+HREF="usbs-intro.html"></HEAD>
+<BODY
+CLASS="REFERENCE"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+&nbsp;</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-intro.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<DIV
+CLASS="REFERENCE">
+<A
+NAME="IO-USB-SLAVE">
+</A>
+<DIV
+CLASS="TITLEPAGE">
+<H1
+CLASS="TITLE">
+I. eCos USB Slave Support</H1>
+<DIV
+CLASS="TOC">
+<DL>
+<DT>
+<B>
+Table of Contents</B>
+</DT>
+<DT>
+<A
+HREF="usbs-intro.html">
+Introduction</A>
+ &#8212; eCos support for USB slave devices</DT>
+<DT>
+<A
+HREF="usbs-enum.html">
+USB Enumeration Data</A>
+ &#8212; The USB enumeration data structures</DT>
+<DT>
+<A
+HREF="usbs-start.html">
+Starting up a USB Device</A>
+ &#8212; Starting up a USB Device</DT>
+<DT>
+<A
+HREF="usbs-devtab.html">
+Devtab Entries</A>
+ &#8212; Data endpoint data structure</DT>
+<DT>
+<A
+HREF="usbs-start-rx.html">
+Receiving Data from the Host</A>
+ &#8212; Receiving Data from the Host</DT>
+<DT>
+<A
+HREF="usbs-start-tx.html">
+Sending Data to the Host</A>
+ &#8212; Sending Data to the Host</DT>
+<DT>
+<A
+HREF="usbs-halt.html">
+Halted Endpoints</A>
+ &#8212; Support for Halting and Halted Endpoints</DT>
+<DT>
+<A
+HREF="usbs-control.html">
+Control Endpoints</A>
+ &#8212; Control endpoint data structure</DT>
+<DT>
+<A
+HREF="usbs-data.html">
+Data Endpoints</A>
+ &#8212; Data endpoint data structures</DT>
+<DT>
+<A
+HREF="usbs-writing.html">
+Writing a USB Device Driver</A>
+ &#8212; USB Device Driver Porting Guide</DT>
+</DL>
+</DIV>
+</DIV>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-intro.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Introduction</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-control.html
@@ -0,0 +1,931 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Control Endpoints</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Halted Endpoints"
+HREF="usbs-halt.html"><LINK
+REL="NEXT"
+TITLE="Data Endpoints"
+HREF="usbs-data.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-halt.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-data.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-CONTROL">
+Control Endpoints</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN489">
+</A>
+<H2>
+Name</H2>
+Control Endpoints&nbsp;--&nbsp;Control endpoint data structure</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN492">
+</A>
+<H2>
+Synopsis</H2>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SYNOPSIS">
+#include &lt;cyg/io/usb/usbs.h&gt;
+
+typedef struct usbs_control_endpoint {
+    *hellip;
+} usbs_control_endpoint;</PRE>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN494">
+</A>
+<H2>
+<TT
+CLASS="LITERAL">
+usbs_control_endpoint</TT>
+ Data Structure</H2>
+<P>
+The device driver for a USB slave device should supply one
+<SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+ data structure per USB
+device. This corresponds to endpoint 0 which will be used for all
+control message interaction between the host and that device. The data
+structure is also used for internal management purposes, for example
+to keep track of the current state. In a typical USB peripheral there
+will only be one such data structure in the entire system, but if
+there are multiple USB slave ports, allowing the peripheral to be
+connected to multiple hosts, then there will be a separate data
+structure for each one. The name or names of the data structures are
+determined by the device drivers. For example, the SA11x0 USB device
+driver package provides <TT
+CLASS="LITERAL">
+usbs_sa11x0_ep0</TT>
+.</P>
+<P>
+The operations on a control endpoint do not fit cleanly into a
+conventional open/read/write I/O model. For example, when the host
+sends a control message to the USB peripheral this may be one of four
+types: standard, class, vendor and reserved. Some or all of the
+standard control messages will be handled automatically by the common
+USB slave package or by the device driver itself. Other standard
+control messages and the other types of control messages may be
+handled by a class-specific package or by application code. Although
+it would be possible to have devtab entries such as
+<TT
+CLASS="LITERAL">
+/dev/usbs_ep0/standard</TT>
+ and
+<TT
+CLASS="LITERAL">
+/dev/usbs_ep0/class</TT>
+, and then support read and
+write operations on these devtab entries, this would add significant
+overhead and code complexity. Instead, all of the fields in the
+control endpoint data structure are public and can be manipulated
+directly by higher level code if and when required. </P>
+<P>
+Control endpoints involve a number of callback functions, with
+higher-level code installing suitable function pointers in the control
+endpoint data structure. For example, if the peripheral involves
+vendor-specific control messages then a suitable handler for these
+messages should be installed. Although the exact details depend on the
+device driver, typically these callback functions will be invoked at
+DSR level rather than thread level. Therefore, only certain eCos
+functions can be invoked; specifically, those functions that are
+guaranteed not to block. If a potentially blocking function such as a
+semaphore wait or a mutex lock operation is invoked from inside the
+callback then the resulting behaviour is undefined, and the system as
+a whole may fail. In addition, if one of the callback functions
+involves significant processing effort then this may adversely affect
+the system's real time characteristics. The eCos kernel documentation
+should be consulted for more details of DSR handling.</P>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN504">
+</A>
+<H3>
+Initialization</H3>
+<P>
+The <SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+ data structure
+contains the following fields related to initialization.</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+typedef struct usbs_control_endpoint {
+    &#8230;
+    const usbs_enumeration_data* enumeration_data;
+    void                         (*start_fn)(usbs_control_endpoint*);
+    &#8230;
+};</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+It is the responsibility of higher-level code, usually the
+application, to define the USB enumeration data. This needs to be
+installed in the control endpoint data structure early on during
+system startup, before the USB device is actually started and any
+interaction with the host is possible. Details of the enumeration data
+are supplied in the section <A
+HREF="usbs-enum.html">
+USB Enumeration
+Data</A>
+. Typically, the enumeration data is constant for a given
+peripheral, although it can be constructed dynamically if necessary.
+However, the enumeration data cannot change while the peripheral is
+connected to a host: the peripheral cannot easily claim to be a
+keyboard one second and a printer the next.</P>
+<P>
+The <TT
+CLASS="STRUCTFIELD">
+<I>
+start_fn</I>
+</TT>
+ member is normally accessed
+via the utility <A
+HREF="usbs-start.html">
+<TT
+CLASS="FUNCTION">
+usbs_start</TT>
+</A>
+ rather
+than directly. It is provided by the device driver and should be
+invoked once the system is fully initialized and interaction with the
+host is possible. A typical implementation would change the USB data
+pins from tristated to active. If the peripheral is already plugged
+into a host then the latter should detect this change and start
+interacting with the peripheral, including requesting the enumeration
+data.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN515">
+</A>
+<H3>
+State</H3>
+<P>
+There are three <SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+ fields
+related to the current state of a USB slave device, plus some state
+constants and an enumeration of the possible state changes:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+typedef struct usbs_control_endpoint {
+    &#8230;
+    int     state;
+    void    (*state_change_fn)(struct usbs_control_endpoint*, void*,
+                               usbs_state_change, int);
+    void*   state_change_data;
+    &#8230;
+};
+
+#define USBS_STATE_DETACHED             0x01
+#define USBS_STATE_ATTACHED             0x02
+#define USBS_STATE_POWERED              0x03
+#define USBS_STATE_DEFAULT              0x04
+#define USBS_STATE_ADDRESSED            0x05
+#define USBS_STATE_CONFIGURED           0x06
+#define USBS_STATE_MASK                 0x7F
+#define USBS_STATE_SUSPENDED            (1 &lt;&lt; 7)
+
+typedef enum {
+    USBS_STATE_CHANGE_DETACHED          = 1,
+    USBS_STATE_CHANGE_ATTACHED          = 2,
+    USBS_STATE_CHANGE_POWERED           = 3,
+    USBS_STATE_CHANGE_RESET             = 4,    
+    USBS_STATE_CHANGE_ADDRESSED         = 5,
+    USBS_STATE_CHANGE_CONFIGURED        = 6,
+    USBS_STATE_CHANGE_DECONFIGURED      = 7,    
+    USBS_STATE_CHANGE_SUSPENDED         = 8,
+    USBS_STATE_CHANGE_RESUMED           = 9
+} usbs_state_change;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+The USB standard defines a number of states for a given USB
+peripheral. The initial state is <I
+CLASS="EMPHASIS">
+detached</I>
+, where
+the peripheral is either not connected to a host at all or, from the
+host's perspective, the peripheral has not started up yet because the
+relevant pins are tristated. The peripheral then moves via
+intermediate <I
+CLASS="EMPHASIS">
+attached</I>
+ and
+<I
+CLASS="EMPHASIS">
+powered</I>
+ states to its default or
+<I
+CLASS="EMPHASIS">
+reset</I>
+ state, at which point the host and
+peripheral can actually start exchanging data. The first message is
+from host to peripheral and provides a unique 7-bit address within the
+local USB network, resulting in a state change to
+<I
+CLASS="EMPHASIS">
+addressed</I>
+. The host then requests enumeration
+data and performs other initialization. If everything succeeds the
+host sends a standard set-configuration control message, after which
+the peripheral is <I
+CLASS="EMPHASIS">
+configured</I>
+ and expected to be
+up and running. Note that some USB device drivers may be unable to
+distinguish between the <I
+CLASS="EMPHASIS">
+detached</I>
+,
+<I
+CLASS="EMPHASIS">
+attached</I>
+ and <I
+CLASS="EMPHASIS">
+powered</I>
+ states
+but generally this is not important to higher-level code.</P>
+<P>
+A USB host should generate at least one token every millisecond. If a
+peripheral fails to detect any USB traffic for a period of time then
+typically this indicates that the host has entered a power-saving
+mode, and the peripheral should do the same if possible. This
+corresponds to the <I
+CLASS="EMPHASIS">
+suspended</I>
+ bit. The actual
+state is a combination of <I
+CLASS="EMPHASIS">
+suspended</I>
+ and the
+previous state, for example <I
+CLASS="EMPHASIS">
+configured</I>
+ and
+<I
+CLASS="EMPHASIS">
+suspended</I>
+ rather than just
+<I
+CLASS="EMPHASIS">
+suspended</I>
+. When the peripheral subsequently
+detects USB traffic it would switch back to the
+<I
+CLASS="EMPHASIS">
+configured</I>
+ state.</P>
+<P>
+The USB device driver and the common USB slave package will maintain
+the current state in the control endpoint's
+<TT
+CLASS="STRUCTFIELD">
+<I>
+state</I>
+</TT>
+ field. There should be no need for
+any other code to change this field, but it can be examined whenever
+appropriate. In addition whenever a state change occurs the generic
+code can invoke a state change callback function. By default, no such
+callback function will be installed. Some class-specific packages such
+as the USB-ethernet package will install a suitable function to keep
+track of whether or not the host-peripheral connection is up, that is
+whether or not ethernet packets can be exchanged. Application code can
+also update this field. If multiple parties want to be informed of
+state changes, for example both a class-specific package and
+application code, then typically the application code will install its
+state change handler after the class-specific package and is
+responsible for chaining into the package's handler.</P>
+<P>
+The state change callback function is invoked with four arguments. The
+first identifies the control endpoint. The second is an arbitrary
+pointer: higher-level code can fill in the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+state_change_data</I>
+</TT>
+ field to set this. The
+third argument specifies the state change that has occurred, and the
+last argument supplies the previous state (the new state is readily
+available from the control endpoint structure).</P>
+<P>
+eCos does not provide any utility functions for updating or examining
+the <TT
+CLASS="STRUCTFIELD">
+<I>
+state_change_fn</I>
+</TT>
+ or
+<TT
+CLASS="STRUCTFIELD">
+<I>
+state_change_data</I>
+</TT>
+ fields. Instead, it is
+expected that the fields in the
+<SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+ data structure will be
+manipulated directly. Any utility functions would do just this, but
+at the cost of increased code and cpu overheads.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN545">
+</A>
+<H3>
+Standard Control Messages</H3>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+typedef struct usbs_control_endpoint {
+    &#8230;
+    unsigned char       control_buffer[8];
+    usbs_control_return (*standard_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               standard_control_data;
+    &#8230;
+} usbs_control_endpoint;
+
+typedef enum {
+    USBS_CONTROL_RETURN_HANDLED = 0,
+    USBS_CONTROL_RETURN_UNKNOWN = 1,
+    USBS_CONTROL_RETURN_STALL   = 2
+} usbs_control_return;
+
+extern usbs_control_return usbs_handle_standard_control(struct usbs_control_endpoint*);</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+When a USB peripheral is connected to the host it must always respond
+to control messages sent to endpoint 0. Control messages always
+consist of an initial eight-byte header, containing fields such as a
+request type. This may be followed by a further data transfer, either
+from host to peripheral or from peripheral to host. The way this is
+handled is described in the <A
+HREF="usbs-control.html#AEN578">
+Buffer Management</A>
+ section below.</P>
+<P>
+The USB device driver will always accept the initial eight-byte
+header, storing it in the <TT
+CLASS="STRUCTFIELD">
+<I>
+control_buffer</I>
+</TT>
+
+field. Then it determines the request type: standard, class, vendor,
+or reserved. The way in which the last three of these are processed is
+described in the section <A
+HREF="usbs-control.html#AEN570">
+Other
+Control Messages</A>
+. Some
+standard control messages will be handled by the device driver itself;
+typically the <I
+CLASS="EMPHASIS">
+set-address</I>
+ request and the
+<I
+CLASS="EMPHASIS">
+get-status</I>
+, <I
+CLASS="EMPHASIS">
+set-feature</I>
+ and
+<I
+CLASS="EMPHASIS">
+clear-feature</I>
+ requests when applied to endpoints.</P>
+<P>
+If a standard control message cannot be handled by the device driver
+itself, the driver checks the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+standard_control_fn</I>
+</TT>
+ field in the control
+endpoint data structure. If higher-level code has installed a suitable
+callback function then this will be invoked with two argument, the
+control endpoint data structure itself and the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+standard_control_data</I>
+</TT>
+ field. The latter
+allows the higher level code to associate arbitrary data with the
+control endpoint. The callback function can return one of three
+values: <I
+CLASS="EMPHASIS">
+HANDLED</I>
+ to indicate that the request has
+been processed; <I
+CLASS="EMPHASIS">
+UNKNOWN</I>
+ if the message should be
+handled by the default code; or <I
+CLASS="EMPHASIS">
+STALL</I>
+ to indicate
+an error condition. If higher level code has not installed a callback
+function or if the callback function has returned
+<I
+CLASS="EMPHASIS">
+UNKNOWN</I>
+ then the device driver will invoke a
+default handler, <TT
+CLASS="FUNCTION">
+usbs_handle_standard_control</TT>
+
+provided by the common USB slave package.</P>
+<P>
+The default handler can cope with all of the standard control messages
+for a simple USB peripheral. However, if the peripheral involves
+multiple configurations, multiple interfaces in a configuration, or
+alternate settings for an interface, then this cannot be handled by
+generic code. For example, a multimedia peripheral may support various
+alternate settings for a given data source with different bandwidth
+requirements, and the host can select a setting that takes into
+account the current load. Clearly higher-level code needs to be aware
+when the host changes the current setting, so that it can adjust the
+rate at which data is fed to or retrieved from the host. Therefore the
+higher-level code needs to install its own standard control callback
+and process appropriate messages, rather than leaving these to the
+default handler.</P>
+<P>
+The default handler will take care of the
+<I
+CLASS="EMPHASIS">
+get-descriptor</I>
+ request used to obtain the
+enumeration data. It has support for string descriptors but ignores
+language encoding issues. If language encoding is important for the
+peripheral then this will have to be handled by an
+application-specific standard control handler.</P>
+<P>
+The header file <TT
+CLASS="FILENAME">
+&lt;cyg/io/usb/usb.h&gt;</TT>
+ defines various
+constants related to control messages, for example the function codes
+corresponding to the standard request types. This header file is
+provided by the common USB package, not by the USB slave package,
+since the information is also relevant to USB hosts.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN570">
+</A>
+<H3>
+Other Control Messages</H3>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+typedef struct usbs_control_endpoint {
+    &#8230;
+    usbs_control_return (*class_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               class_control_data;
+    usbs_control_return (*vendor_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               vendor_control_data;
+    usbs_control_return (*reserved_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               reserved_control_data;
+    &#8230;
+} usbs_control_endpoint;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+Non-standard control messages always have to be processed by
+higher-level code. This could be class-specific packages. For example,
+the USB-ethernet package will handle requests for getting the MAC
+address and for enabling or disabling promiscuous mode. In all cases
+the device driver will store the initial request in the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+control_buffer</I>
+</TT>
+ field, check for an
+appropriate handler, and invoke it with details of the control
+endpoint and any handler-specific data that has been installed
+alongside the handler itself. The handler should return either
+<TT
+CLASS="LITERAL">
+USBS_CONTROL_RETURN_HANDLED</TT>
+ to report success or
+<TT
+CLASS="LITERAL">
+USBS_CONTROL_RETURN_STALL</TT>
+ to report failure. The
+device driver will report this to the host.</P>
+<P>
+If there are multiple parties interested in a particular type of
+control messages, it is the responsibility of application code to
+install an appropriate handler and process the requests appropriately. </P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN578">
+</A>
+<H3>
+Buffer Management</H3>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+typedef struct usbs_control_endpoint {
+    &#8230;
+    unsigned char*      buffer;
+    int                 buffer_size;
+    void                (*fill_buffer_fn)(struct usbs_control_endpoint*);
+    void*               fill_data;
+    int                 fill_index;
+    usbs_control_return (*complete_fn)(struct usbs_control_endpoint*, int);
+    &#8230;
+} usbs_control_endpoint;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+Many USB control messages involve transferring more data than just the
+initial eight-byte header. The header indicates the direction of the
+transfer, OUT for host to peripheral or IN for peripheral to host.
+It also specifies a length field, which is exact for an OUT transfer
+or an upper bound for an IN transfer. Control message handlers can
+manipulate six fields within the control endpoint data structure to
+ensure that the transfer happens correctly.</P>
+<P>
+For an OUT transfer, the handler should examine the length field in
+the header and provide a single buffer for all the data. A
+class-specific protocol would typically impose an upper bound on the
+amount of data, allowing the buffer to be allocated statically.
+The handler should update the <TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_fn</I>
+</TT>
+ fields. When all the data has
+been transferred the completion callback will be invoked, and its
+return value determines the response sent back to the host. The USB
+standard allows for a new control message to be sent before the
+current transfer has completed, effectively cancelling the current
+operation. When this happens the completion function will also be
+invoked. The second argument to the completion function specifies what
+has happened, with a value of 0 indicating success and an error code
+such as <TT
+CLASS="LITERAL">
+-EPIPE</TT>
+ or <TT
+CLASS="LITERAL">
+-EIO</TT>
+
+indicating that the current transfer has been cancelled.</P>
+<P>
+IN transfers are a little bit more complicated. The required
+information, for example the enumeration data, may not be in a single
+contiguous buffer. Instead a mechanism is provided by which the buffer
+can be refilled, thus allowing the transfer to move from one record to
+the next. Essentially, the transfer operates as follows:</P>
+<P>
+</P>
+<OL
+TYPE="1">
+<LI>
+<P>
+When the host requests another chunk of data (typically eight bytes),
+the USB device driver will examine the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ field. If non-zero then
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+ contains at least one more byte of
+data, and then <TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ is decremented.</P>
+</LI>
+<LI>
+<P>
+When <TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ has dropped to 0, the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+fill_buffer_fn</I>
+</TT>
+ field will be examined. If
+non-null it will be invoked to refill the buffer.</P>
+</LI>
+<LI>
+<P>
+The <TT
+CLASS="STRUCTFIELD">
+<I>
+fill_data</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+fill_index</I>
+</TT>
+ fields are not used by the
+device driver. Instead these fields are available to the refill
+function to keep track of the current state of the transfer.</P>
+</LI>
+<LI>
+<P>
+When <TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ is 0 and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+fill_buffer_fn</I>
+</TT>
+ is NULL, no more data is
+available and the transfer has completed.</P>
+</LI>
+<LI>
+<P>
+Optionally a completion function can be installed. This will be
+invoked with 0 if the transfer completes successfully, or with an
+error code if the transfer is cancelled because of another control
+messsage. </P>
+</LI>
+</OL>
+<P>
+If the requested data is contiguous then the only fields that need
+to be manipulated are <TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+, and optionally
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_fn</I>
+</TT>
+. If the requested data is not
+contiguous then the initial control message handler should update
+<TT
+CLASS="STRUCTFIELD">
+<I>
+fill_buffer_fn</I>
+</TT>
+ and some or all of the other
+fields, as required. An example of this is the handling of the
+standard <I
+CLASS="EMPHASIS">
+get-descriptor</I>
+ control message by
+<TT
+CLASS="FUNCTION">
+usbs_handle_standard_control</TT>
+.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN615">
+</A>
+<H3>
+Polling Support</H3>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+typedef struct usbs_control_endpoint {
+    void                (*poll_fn)(struct usbs_control_endpoint*);
+    int                 interrupt_vector;
+    &#8230;
+} usbs_control_endpoint;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+In nearly all circumstances USB I/O should be interrupt-driven.
+However, there are special environments such as RedBoot where polled
+operation may be appropriate. If the device driver can operate in
+polled mode then it will provide a suitable function via the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+poll_fn</I>
+</TT>
+ field, and higher-level code can
+invoke this regularly. This polling function will take care of all
+endpoints associated with the device, not just the control endpoint.
+If the USB hardware involves a single interrupt vector then this will
+be identified in the data structure as well.</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-halt.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-data.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Halted Endpoints</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Data Endpoints</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-data.html
@@ -0,0 +1,374 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Data Endpoints</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Control Endpoints"
+HREF="usbs-control.html"><LINK
+REL="NEXT"
+TITLE="Writing a USB Device Driver"
+HREF="usbs-writing.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-control.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-writing.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-DATA">
+Data Endpoints</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN623">
+</A>
+<H2>
+Name</H2>
+Data Endpoints&nbsp;--&nbsp;Data endpoint data structures</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN626">
+</A>
+<H2>
+Synopsis</H2>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SYNOPSIS">
+#include &lt;cyg/io/usb/usbs.h&gt;
+
+typedef struct usbs_rx_endpoint {
+    void                 (*start_rx_fn)(struct usbs_rx_endpoint*);
+    void                 (*set_halted_fn)(struct usbs_rx_endpoint*, cyg_bool);
+    void                 (*complete_fn)(void*, int);
+    void*                complete_data;
+    unsigned char*       buffer;
+    int                  buffer_size;
+    cyg_bool             halted;
+} usbs_rx_endpoint;
+
+typedef struct usbs_tx_endpoint {
+    void                 (*start_tx_fn)(struct usbs_tx_endpoint*);
+    void                 (*set_halted_fn)(struct usbs_tx_endpoint*, cyg_bool);
+    void                 (*complete_fn)(void*, int);
+    void*                complete_data;
+    const unsigned char* buffer;
+    int                  buffer_size;
+    cyg_bool             halted;
+} usbs_tx_endpoint;</PRE>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN628">
+</A>
+<H2>
+Receive and Transmit Data Structures</H2>
+<P>
+In addition to a single <SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+
+data structure per USB slave device, the USB device driver should also
+provide receive and transmit data structures corresponding to the
+other endpoints. The names of these are determined by the device
+driver. For example, the SA1110 USB device driver package provides
+<TT
+CLASS="LITERAL">
+usbs_sa11x0_ep1</TT>
+ for receives and
+<TT
+CLASS="LITERAL">
+usbs_sa11x0_ep2</TT>
+ for transmits.</P>
+<P>
+Unlike control endpoints, the common USB slave package does provide a
+number of utility routines to manipulate data endpoints. For example
+<A
+HREF="usbs-start-rx.html">
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+</A>
+
+can be used to receive data from the host into a buffer. In addition
+the USB device driver can provide devtab entries such as
+<TT
+CLASS="LITERAL">
+/dev/usbs1r</TT>
+ and <TT
+CLASS="LITERAL">
+/dev/usbs2w</TT>
+, so
+higher-level code can <TT
+CLASS="FUNCTION">
+open</TT>
+ these devices and then
+perform blocking <TT
+CLASS="FUNCTION">
+read</TT>
+ and
+<TT
+CLASS="FUNCTION">
+write</TT>
+ operations.</P>
+<P>
+However, the operation of data endpoints and the various
+endpoint-related functions is relatively straightforward. First
+consider a <SPAN
+CLASS="STRUCTNAME">
+usbs_rx_endpoint</SPAN>
+ structure. The
+device driver will provide the members
+<TT
+CLASS="STRUCTFIELD">
+<I>
+start_rx_fn</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+set_halted_fn</I>
+</TT>
+, and it will maintain the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+halted</I>
+</TT>
+ field. To receive data, higher-level
+code sets the <TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_fn</I>
+</TT>
+ and optionally the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_data</I>
+</TT>
+ fields. Next the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+start_rx_fn</I>
+</TT>
+ member should be called. When
+the transfer has finished the device driver will invoke the completion
+function, using <TT
+CLASS="STRUCTFIELD">
+<I>
+complete_data</I>
+</TT>
+ as the first
+argument and a size field for the second argument. A negative size
+indicates an error of some sort: <TT
+CLASS="LITERAL">
+-EGAIN</TT>
+ indicates
+that the endpoint has been halted, usually at the request of the host;
+<TT
+CLASS="LITERAL">
+-EPIPE</TT>
+ indicates that the connection between the
+host and the peripheral has been broken. Certain device drivers may
+generate other error codes.</P>
+<P>
+If higher-level code needs to halt or unhalt an endpoint then it can
+invoke the <TT
+CLASS="STRUCTFIELD">
+<I>
+set_halted_fn</I>
+</TT>
+ member. When an
+endpoint is halted, invoking <TT
+CLASS="STRUCTFIELD">
+<I>
+start_rx_fn</I>
+</TT>
+
+wit <TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ set to 0 indicates that
+higher-level code wants to block until the endpoint is no longer
+halted; at that point the completion function will be invoked.</P>
+<P>
+USB device drivers are allowed to assume that higher-level protocols
+ensure that host and peripheral agree on the amount of data that will
+be transferred, or at least on an upper bound. Therefore there is no
+need for the device driver to maintain its own buffers, and copy
+operations are avoided. If the host sends more data than expected then
+the resulting behaviour is undefined.</P>
+<P>
+Transmit endpoints work in essentially the same way as receive
+endpoints. Higher-level code should set the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ fields to point at the data to
+be transferred, then call <TT
+CLASS="STRUCTFIELD">
+<I>
+start_tx_fn</I>
+</TT>
+, and
+the device driver will invoked the completion function when the
+transfer has completed.</P>
+<P>
+USB device drivers are not expected to perform any locking. If at any
+time there are two concurrent receive operations for a given endpoint,
+or two concurrent transmit operations, then the resulting behaviour is
+undefined. It is the responsibility of higher-level code to perform
+any synchronisation that may be necessary. In practice, conflicts are
+unlikely because typically a given endpoint will only be accessed
+sequentially by just one part of the overall system.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-control.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-writing.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Control Endpoints</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Writing a USB Device Driver</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-devtab.html
@@ -0,0 +1,477 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Devtab Entries</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Starting up a USB Device"
+HREF="usbs-start.html"><LINK
+REL="NEXT"
+TITLE="Receiving Data from the Host"
+HREF="usbs-start-rx.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-start.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-start-rx.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-DEVTAB">
+Devtab Entries</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN200">
+</A>
+<H2>
+Name</H2>
+Devtab Entries&nbsp;--&nbsp;Data endpoint data structure</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN203">
+</A>
+<H2>
+Synopsis</H2>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SYNOPSIS">
+/dev/usb0c
+/dev/usb1r
+/dev/usb2w</PRE>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN205">
+</A>
+<H2>
+Devtab Entries</H2>
+<P>
+USB device drivers provide two ways of transferring data between host
+and peripheral. The first involves USB-specific functionality such as
+<A
+HREF="usbs-start-rx.html">
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+</A>
+.
+This provides non-blocking I/O: a transfer is started, and some time
+later the device driver will call a supplied completion function. The
+second uses the conventional I/O model: there are entries in the
+device table corresponding to the various endpoints. Standard calls
+such as <TT
+CLASS="FUNCTION">
+open</TT>
+ can then be used to get a suitable
+handle. Actual I/O happens via blocking <TT
+CLASS="FUNCTION">
+read</TT>
+ and
+<TT
+CLASS="FUNCTION">
+write</TT>
+ calls. In practice the blocking operations
+are simply implemented using the underlying non-blocking
+functionality.</P>
+<P>
+Each endpoint will have its own devtab entry. The exact names are
+controlled by the device driver package, but typically the root will
+be <TT
+CLASS="LITERAL">
+/dev/usb</TT>
+. This is followed by one or more
+decimal digits giving the endpoint number, followed by
+<TT
+CLASS="LITERAL">
+c</TT>
+ for a control endpoint, <TT
+CLASS="LITERAL">
+r</TT>
+ for
+a receive endpoint (host to peripheral), and <TT
+CLASS="LITERAL">
+w</TT>
+ for
+a transmit endpoint (peripheral to host). If the target hardware
+involves more than one USB device then different roots should be used,
+for example <TT
+CLASS="LITERAL">
+/dev/usb0c</TT>
+ and
+<TT
+CLASS="LITERAL">
+/dev/usb1_0c</TT>
+. This may require explicit
+manipulation of device driver configuration options by the application
+developer.</P>
+<P>
+At present the devtab entry for a control endpoint does not support
+any I/O operations. </P>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN221">
+</A>
+<H3>
+<TT
+CLASS="FUNCTION">
+write</TT>
+ operations</H3>
+<P>
+<TT
+CLASS="FUNCTION">
+cyg_io_write</TT>
+ and similar functions in
+higher-level packages can be used to perform a transfer from
+peripheral to host. Successive write operations will not be coalesced.
+For example, when doing a 1000 byte write to an endpoint that uses the
+bulk transfer protocol this will involve 15 full-size 64-byte packets
+and a terminating 40-byte packet. USB device drivers are not expected
+to do any locking, and if higher-level code performs multiple
+concurrent write operations on a single endpoint then the resulting
+behaviour is undefined.</P>
+<P>
+A USB <TT
+CLASS="FUNCTION">
+write</TT>
+ operation will never transfer less
+data than specified. It is the responsibility of higher-level code to
+ensure that the amount of data being transferred is acceptable to the
+host-side code. Usually this will be defined by a higher-level
+protocol. If an attempt is made to transfer more data than the host
+expects then the resulting behaviour is undefined.</P>
+<P>
+There are two likely error conditions. <TT
+CLASS="LITERAL">
+EPIPE</TT>
+
+indicates that the connection between host and target has been broken.
+<TT
+CLASS="LITERAL">
+EAGAIN</TT>
+ indicates that the endpoint has been
+stalled, either at the request of the host or by other activity
+inside the peripheral.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN231">
+</A>
+<H3>
+<TT
+CLASS="FUNCTION">
+read</TT>
+ operations</H3>
+<P>
+<TT
+CLASS="FUNCTION">
+cyg_io_read</TT>
+ and similar functions in higher-level
+packages can be used to perform a transfer from host to peripheral.
+This should be a complete transfer: higher-level protocols should
+define an upper bound on the amount of data being transferred, and the
+<TT
+CLASS="FUNCTION">
+read</TT>
+ operation should involve at least this
+amount of data. The return value will indicate the actual transfer
+size, which may be less than requested.</P>
+<P>
+Some device drivers may support partial reads, but USB device drivers
+are not expected to perform any buffering because that involves both
+memory and code overheads. One technique that may work for bulk
+transfers is to exploit the fact that such transfers happen in 64-byte
+packets. It is possible to <TT
+CLASS="FUNCTION">
+read</TT>
+ an initial 64
+bytes, corresponding to the first packet in the transfer. These 64
+bytes can then be examined to determine the total transfer size, and
+the remaining data can be transferred in another
+<TT
+CLASS="FUNCTION">
+read</TT>
+ operation. This technique is not guaranteed
+to work with all USB hardware. Also, if the delay between accepting
+the first packet and the remainder of the transfer is excessive then
+this could cause timeout problems for the host-side software. For
+these reasons the use of partial reads should be avoided.</P>
+<P>
+There are two likely error conditions. <TT
+CLASS="LITERAL">
+EPIPE</TT>
+
+indicates that the connection between host and target has been broken.
+<TT
+CLASS="LITERAL">
+EAGAIN</TT>
+ indicates that the endpoint has been
+stalled, either at the request of the host or by other activity
+inside the peripheral.</P>
+<P>
+USB device drivers are not expected to do any locking. If higher-level
+code performs multiple concurrent read operations on a single endpoint
+then the resulting behaviour is undefined.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN244">
+</A>
+<H3>
+<TT
+CLASS="FUNCTION">
+select</TT>
+ operations</H3>
+<P>
+Typical USB device drivers will not provide any support for
+<TT
+CLASS="FUNCTION">
+select</TT>
+. Consider bulk transfers from the host to
+the peripheral. At the USB device driver level there is no way of
+knowing in advance how large a transfer will be, so it is not feasible
+for the device driver to buffer the entire transfer. It may be
+possible to buffer part of the transfer, for example the first 64-byte
+packet, and copy this into application space at the start of a
+<TT
+CLASS="FUNCTION">
+read</TT>
+, but this adds code and memory overheads.
+Worse, it means that there is an unknown but potentially long delay
+between a peripheral accepting the first packet of a transfer and the
+remaining packets, which could confuse or upset the host-side
+software.</P>
+<P>
+With some USB hardware it may be possible for the device driver to
+detect OUT tokens from the host without actually accepting the data,
+and this would indicate that a  <TT
+CLASS="FUNCTION">
+read</TT>
+ is likely to
+succeed. However, it would not be reliable since the host-side I/O
+operation could time out. A similar mechanism could be used to
+implement <TT
+CLASS="FUNCTION">
+select</TT>
+ for outgoing data, but again
+this would not be reliable.</P>
+<P>
+Some device drivers may provide partial support for
+<TT
+CLASS="FUNCTION">
+select</TT>
+ anyway, possibly under the control of a
+configuration option. The device driver's documentation should be
+consulted for further information. It is also worth noting that the
+USB-specific non-blocking API can often be used as an alternative to
+<TT
+CLASS="FUNCTION">
+select</TT>
+.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN256">
+</A>
+<H3>
+<TT
+CLASS="FUNCTION">
+get_config</TT>
+ and
+<TT
+CLASS="FUNCTION">
+set_config</TT>
+ operations</H3>
+<P>
+There are no <TT
+CLASS="FUNCTION">
+set_config</TT>
+ or
+<TT
+CLASS="FUNCTION">
+get_config</TT>
+ (also known as
+<TT
+CLASS="FUNCTION">
+ioctl</TT>
+) operations defined for USB devices.
+Some device drivers may provide hardware-specific facilities this way. </P>
+<DIV
+CLASS="NOTE">
+<BLOCKQUOTE
+CLASS="NOTE">
+<P>
+<B>
+Note: </B>
+Currently the USB-specific functions related to <A
+HREF="usbs-halt.html">
+halted endpoints</A>
+ cannot be accessed readily
+via devtab entries. This functionality should probably be made
+available via <TT
+CLASS="FUNCTION">
+set_config</TT>
+ and
+<TT
+CLASS="FUNCTION">
+get_config</TT>
+. It may also prove useful to provide
+a <TT
+CLASS="FUNCTION">
+get_config</TT>
+ operation that maps from the
+devtab entries to the underlying endpoint data structures.</P>
+</BLOCKQUOTE>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN270">
+</A>
+<H3>
+Presence</H3>
+<P>
+The devtab entries are optional. If the USB device is accessed
+primarily by class-specific code such as the USB-ethernet package and
+that package uses the USB-specific API directly, the devtab entries
+are redundant. Even if application code does need to access the USB
+device, the non-blocking API may be more convenient than the blocking
+I/O provided via the devtab entries. In these cases the devtab entries
+serve no useful purpose, but they still impose a memory overhead. It
+is possible to suppress the presence of these entries by disabling the
+configuration option
+<TT
+CLASS="LITERAL">
+CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES</TT>
+.</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-start.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-start-rx.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Starting up a USB Device</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Receiving Data from the Host</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-enum.html
@@ -0,0 +1,831 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+USB Enumeration Data</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Introduction"
+HREF="usbs-intro.html"><LINK
+REL="NEXT"
+TITLE="Starting up a USB Device"
+HREF="usbs-start.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-intro.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-start.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-ENUM">
+USB Enumeration Data</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN68">
+</A>
+<H2>
+Name</H2>
+Enumeration Data&nbsp;--&nbsp;The USB enumeration data structures</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN71">
+</A>
+<H2>
+Synopsis</H2>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="SYNOPSIS">
+#include &lt;cyg/io/usb/usb.h&gt;
+#include &lt;cyg/io/usb/usbs.h&gt;
+
+typedef struct usb_device_descriptor {
+    &#8230;
+} usb_device_descriptor __attribute__((packed));
+
+typedef struct usb_configuration_descriptor {
+    &#8230;
+} usb_configuration_descriptor __attribute__((packed));
+
+typedef struct usb_interface_descriptor {
+    &#8230;
+} usb_interface_descriptor __attribute__((packed));        
+
+typedef struct usb_endpoint_descriptor {
+    &#8230;
+} usb_endpoint_descriptor;
+
+typedef struct usbs_enumeration_data {
+    usb_device_descriptor               device;
+    int                                 total_number_interfaces;
+    int                                 total_number_endpoints;
+    int                                 total_number_strings;
+    const usb_configuration_descriptor* configurations;
+    const usb_interface_descriptor*     interfaces;
+    const usb_endpoint_descriptor*      endpoints;
+    const unsigned char**               strings;
+} usbs_enumeration_data;</PRE>
+</TD>
+</TR>
+</TABLE>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN73">
+</A>
+<H2>
+USB Enumeration Data</H2>
+<P>
+When a USB host detects that a peripheral has been plugged in or
+powered up, one of the first steps is to ask the peripheral to
+describe itself by supplying enumeration data. Some of this data
+depends on the class of peripheral. Other fields are vendor-specific.
+There is also a dependency on the hardware, specifically which
+endpoints are available should be used. In general it is not possible
+for generic code to provide this information, so it is the
+responsibility of application code to provide a suitable
+<SPAN
+CLASS="STRUCTNAME">
+usbs_enumeration_data</SPAN>
+ data structure and
+install it in the endpoint 0 data structure during initialization.
+This must happen before the USB device is enabled by a call to
+<TT
+CLASS="FUNCTION">
+usbs_start</TT>
+, for example:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+const usbs_enumeration_data usb_enum_data = {
+    &#8230;
+};
+
+int
+main(int argc, char** argv)
+{
+    usbs_sa11x0_ep0.enumeration_data = &amp;usb_enum_data;
+    &#8230;
+    usbs_start(&amp;usbs_sa11x0_ep0);
+    &#8230;
+}</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+For most applications the enumeration data will be static, although
+the <SPAN
+CLASS="STRUCTNAME">
+usbs_enumeration_data</SPAN>
+ structure can be
+filled in at run-time if necessary. Full details of the enumeration
+data can be found in the Universal Serial Bus specification obtainable
+from the <A
+HREF="http://www.usb.org/"
+TARGET="_top">
+USB Implementers Forum web
+site</A>
+, although the meaning of most fields is fairly obvious.
+The various data structures and utility macros are defined in the
+header files <TT
+CLASS="FILENAME">
+cyg/io/usb/usb.h</TT>
+
+and <TT
+CLASS="FILENAME">
+cyg/io/usb/usbs.h</TT>
+. Note
+that the example code below makes use of the gcc labelled element
+extension.</P>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN84">
+</A>
+<H3>
+<SPAN
+CLASS="STRUCTNAME">
+usb_device_descriptor</SPAN>
+</H3>
+<P>
+The main information about a USB peripheral comes from a single
+<SPAN
+CLASS="STRUCTNAME">
+usb_device_descriptor</SPAN>
+ structure, which is
+embedded in the <SPAN
+CLASS="STRUCTNAME">
+usbs_enumeration_data</SPAN>
+
+structure. A typical example might look like this:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+const usbs_enumeration_data usb_enum_data = {
+    {
+        length:                 USB_DEVICE_DESCRIPTOR_LENGTH,
+        type:                   USB_DEVICE_DESCRIPTOR_TYPE,
+        usb_spec_lo:            USB_DEVICE_DESCRIPTOR_USB11_LO,
+        usb_spec_hi:            USB_DEVICE_DESCRIPTOR_USB11_HI,
+        device_class:           USB_DEVICE_DESCRIPTOR_CLASS_VENDOR,
+        device_subclass:        USB_DEVICE_DESCRIPTOR_SUBCLASS_VENDOR,
+        device_protocol:        USB_DEVICE_DESCRIPTOR_PROTOCOL_VENDOR,
+        max_packet_size:        8,
+        vendor_lo:              0x42,
+        vendor_hi:              0x42,
+        product_lo:             0x42,
+        product_hi:             0x42,
+        device_lo:              0x00,
+        device_hi:              0x01,
+        manufacturer_str:       1,
+        product_str:            2,
+        serial_number_str:      0,
+        number_configurations:  1
+    },
+    &#8230;
+};</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+The length and type fields are specified by the USB standard. The
+<TT
+CLASS="STRUCTFIELD">
+<I>
+usb_spec_lo</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+usb_spec_hi</I>
+</TT>
+ fields identify the particular
+revision of the standard that the peripheral implements, for example
+revision 1.1.</P>
+<P>
+The device class, subclass, and protocol fields are used by generic
+host-side USB software to determine which host-side device driver
+should be loaded to interact with the peripheral. A number of standard
+classes are defined, for example mass-storage devices and
+human-interface devices. If a peripheral implements one of the
+standard classes then a standard existing host-side device driver may
+exist, eliminating the need to write a custom driver. The value
+<TT
+CLASS="LITERAL">
+0xFF</TT>
+ (<TT
+CLASS="LITERAL">
+VENDOR</TT>
+) is reserved for
+peripherals that implement a vendor-specific protocol rather than a
+standard one. Such peripherals will require a custom host-side device
+driver. The value <TT
+CLASS="LITERAL">
+0x00</TT>
+
+(<TT
+CLASS="LITERAL">
+INTERFACE</TT>
+) is reserved and indicates that the
+protocol used by the peripheral is defined at the interface level
+rather than for the peripheral as a whole.</P>
+<P>
+The <TT
+CLASS="STRUCTFIELD">
+<I>
+max_package_size</I>
+</TT>
+ field specifies the
+maximum length of a control message. There is a lower bound of eight
+bytes, and typical hardware will not support anything larger because
+control messages are usually small and not performance-critical.</P>
+<P>
+The <TT
+CLASS="STRUCTFIELD">
+<I>
+vendor_lo</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+vendor_hi</I>
+</TT>
+ fields specify a vendor id, which
+must be obtained from the USB Implementor's Forum. The numbers used in
+the code fragment above are examples only and must not be used in real
+USB peripherals. The product identifier is determined by the vendor,
+and different USB peripherals should use different identifiers. The
+device identifier field should indicate a release number in
+binary-coded decimal.</P>
+<P>
+The above fields are all numerical in nature. A USB peripheral can
+also provide a number of strings as described <A
+HREF="usbs-enum.html#AEN159">
+below</A>
+, for example the name of the
+vendor can be provided. The various <TT
+CLASS="STRUCTFIELD">
+<I>
+_str</I>
+</TT>
+
+fields act as indices into an array of strings, with index 0
+indicating that no string is available. </P>
+<P>
+A typical USB peripheral involves just a single configuration. However
+more complicated peripherals can support multiple configurations. Only
+one configuration will be active at any one time, and the host will
+switch between them as appropriate. If a peripheral does involve
+multiple configurations then typically it will be the responsibility
+of application code to <A
+HREF="usbs-control.html#AEN545">
+handle</A>
+ the standard
+set-configuration control message.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN109">
+</A>
+<H3>
+<SPAN
+CLASS="STRUCTNAME">
+usb_configuration_descriptor</SPAN>
+</H3>
+<P>
+A USB peripheral involves at least one and possible several different
+configurations. The <SPAN
+CLASS="STRUCTNAME">
+usbs_enumeration_data</SPAN>
+
+structure requires a pointer to an array, possibly of length 1, of
+<SPAN
+CLASS="STRUCTNAME">
+usb_configuration_descriptor</SPAN>
+ structures.
+Usually a single structure suffices:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+const usb_configuration_descriptor usb_configuration = {
+    length:             USB_CONFIGURATION_DESCRIPTOR_LENGTH,
+    type:               USB_CONFIGURATION_DESCRIPTOR_TYPE,
+    total_length_lo:    USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_LO(1, 2),
+    total_length_hi:    USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_HI(1, 2),
+    number_interfaces:  1,
+    configuration_id:   1,
+    configuration_str:  0,
+    attributes:         USB_CONFIGURATION_DESCRIPTOR_ATTR_REQUIRED |
+                        USB_CONFIGURATION_DESCRIPTOR_ATTR_SELF_POWERED,
+    max_power:          50
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &#8230;
+    configurations:             &amp;usb_configuration,
+    &#8230;
+};</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+The values for the <TT
+CLASS="STRUCTFIELD">
+<I>
+length</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+type</I>
+</TT>
+ fields are determined by the standard.
+The <TT
+CLASS="STRUCTFIELD">
+<I>
+total_length</I>
+</TT>
+ field depends on the
+number of interfaces and endpoints used by this configuration, and
+convenience macros are provided to calculate this: the first argument
+to the macros specify the number of interfaces, the second the number
+of endpoints. The <TT
+CLASS="STRUCTFIELD">
+<I>
+number_interfaces</I>
+</TT>
+ field
+is self-explanatory. If the peripheral involves multiple
+configurations then each one must have a unique id, and this will be
+used in the set-configuration control message. The id
+<TT
+CLASS="LITERAL">
+0</TT>
+ is reserved, and a set-configuration control
+message that uses this id indicates that the peripheral should be
+inactive. Configurations can have a string description if required.
+The <TT
+CLASS="STRUCTFIELD">
+<I>
+attributes</I>
+</TT>
+ field must have the
+<TT
+CLASS="LITERAL">
+REQUIRED</TT>
+ bit set; the
+<TT
+CLASS="LITERAL">
+SELF_POWERED</TT>
+ bit informs the host that the
+peripheral has its own power supply and will not draw any power over
+the bus, leaving more bus power available to other peripherals; the
+<TT
+CLASS="LITERAL">
+REMOTE_WAKEUP</TT>
+ bit is used if the peripheral can
+interrupt the host when the latter is in power-saving mode. For
+peripherals that are not self-powered, the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+max_power</I>
+</TT>
+ field specifies the power
+requirements in units of 2mA.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN127">
+</A>
+<H3>
+<SPAN
+CLASS="STRUCTNAME">
+usb_interface_descriptor</SPAN>
+</H3>
+<P>
+A USB configuration involves one or more interfaces, typically
+corresponding to different streams of data. For example, one interface
+might involve video data while another interface is for audio.
+Multiple interfaces in a single configuration will be active at the
+same time.</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+const usb_interface_descriptor usb_interface = {
+    length:             USB_INTERFACE_DESCRIPTOR_LENGTH,
+    type:               USB_INTERFACE_DESCRIPTOR_TYPE,
+    interface_id:       0,
+    alternate_setting:  0,
+    number_endpoints:   2,
+    interface_class:    USB_INTERFACE_DESCRIPTOR_CLASS_VENDOR,
+    interface_subclass: USB_INTERFACE_DESCRIPTOR_SUBCLASS_VENDOR,
+    interface_protocol: USB_INTERFACE_DESCRIPTOR_PROTOCOL_VENDOR,
+    interface_str:      0
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &#8230;
+    total_number_interfaces:    1,
+    interfaces:                 &amp;usb_interface,
+    &#8230;
+};</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+Again, the <TT
+CLASS="STRUCTFIELD">
+<I>
+length</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+type</I>
+</TT>
+ fields are specified by the standard.
+Each interface within a configuration requires its own id. However, a
+given interface may have several alternate settings, in other words
+entries in the interfaces array with the same id but different
+<TT
+CLASS="STRUCTFIELD">
+<I>
+alternate_setting</I>
+</TT>
+ fields. For example,
+there might be one setting which requires a bandwidth of 100K/s and
+another setting that only needs 50K/s. The host can use the standard
+set-interface control message to choose the most appropriate setting.
+The handling of this request is the responsibility of higher-level
+code, so the application may have to <A
+HREF="usbs-control.html#AEN545">
+install</A>
+ its own handler.</P>
+<P>
+The number of endpoints used by an interface is specified in the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+number_endpoints</I>
+</TT>
+ field. Exact details of
+which endpoints are used is held in a separate array of endpoint
+descriptors. The class, subclass and protocol fields are used by
+host-side code to determine which host-side device driver should
+handle this specific interface. Usually this is determined on a
+per-peripheral basis in the
+<SPAN
+CLASS="STRUCTNAME">
+usb_device_descriptor</SPAN>
+ structure, but that can
+defer the details to individual interfaces. A per-interface string
+is allowed as well.</P>
+<P>
+For USB peripherals involving multiple configurations, the array of
+<SPAN
+CLASS="STRUCTNAME">
+usb_interface_descriptor</SPAN>
+ structures should
+first contain all the interfaces for the first configuration, then all
+the interfaces for the second configuration, and so on.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN142">
+</A>
+<H3>
+<SPAN
+CLASS="STRUCTNAME">
+usb_endpoint_descriptor</SPAN>
+</H3>
+<P>
+The host also needs information about which endpoint should be used
+for what. This involves an array of endpoint descriptors:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+const usb_endpoint_descriptor usb_endpoints[] = {
+    {
+        length:         USB_ENDPOINT_DESCRIPTOR_LENGTH,
+        type:           USB_ENDPOINT_DESCRIPTOR_TYPE,
+        endpoint:       USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT | 1,
+        attributes:     USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
+        max_packet_lo:  64,
+        max_packet_hi:  0,
+        interval:       0
+    },
+    {
+        length:         USB_ENDPOINT_DESCRIPTOR_LENGTH,
+        type:           USB_ENDPOINT_DESCRIPTOR_TYPE,
+        endpoint:       USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN | 2,
+        attributes:     USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
+        max_packet_lo:  64,
+        max_packet_hi:  0,
+        interval:       0
+    }
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &#8230;
+    total_number_endpoints:     2,
+    endpoints:                  usb_endpoints,
+    &#8230;
+};</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+As usual the values for the <TT
+CLASS="STRUCTFIELD">
+<I>
+length</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+type</I>
+</TT>
+ fields are specified by the standard.
+The <TT
+CLASS="STRUCTFIELD">
+<I>
+endpoint</I>
+</TT>
+ field gives both the endpoint
+number and the direction, so in the above example endpoint 1 is used
+for OUT (host to peripheral) transfers and endpoint 2 is used for IN
+(peripheral to host) transfers. The
+<TT
+CLASS="STRUCTFIELD">
+<I>
+attributes</I>
+</TT>
+ field indicates the USB protocol
+that should be used on this endpoint: <TT
+CLASS="LITERAL">
+CONTROL</TT>
+,
+<TT
+CLASS="LITERAL">
+ISOCHRONOUS</TT>
+, <TT
+CLASS="LITERAL">
+BULK</TT>
+ or
+<TT
+CLASS="LITERAL">
+INTERRUPT</TT>
+. The
+<TT
+CLASS="STRUCTFIELD">
+<I>
+max_packet</I>
+</TT>
+ field specifies the maximum size
+of a single USB packet. For bulk transfers this will typically be 64
+bytes. For isochronous transfers this can be up to 1023 bytes. For
+interrupt transfers it can be up to 64 bytes, although usually a
+smaller value will be used. The <TT
+CLASS="STRUCTFIELD">
+<I>
+interval</I>
+</TT>
+
+field is ignored for control and bulk transfers. For isochronous
+transfers it should be set to 1. For interrupt transfers it can be a
+value between 1 and 255, and indicates the number of milliseconds
+between successive polling operations.</P>
+<P>
+For USB peripherals involving multiple configurations or interfaces
+the array of endpoint descriptors should be organized sequentially:
+first the endpoints corresponding to the first interface of the first
+configuration, then the second interface in that configuration, and so
+on; then all the endpoints for all the interfaces in the second
+configuration; etc.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN159">
+</A>
+<H3>
+Strings</H3>
+<P>
+The enumeration data can contain a number of strings with additional
+information. Unicode encoding is used for the strings, and it is
+possible for a peripheral to supply a given string in multiple
+languages using the appropriate characters. The first two bytes of
+each string give a length and type field. The first string is special;
+after the two bytes header it consists of an array of 2-byte language
+id codes, indicating the supported languages. The language code
+0x0409 corresponds to English (United States). </P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+const unsigned char* usb_strings[] = {
+    "\x04\x03\x09\x04",
+    "\x10\x03R\0e\0d\0 \0H\0a\0t\0"
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &#8230;
+    total_number_strings:       2,
+    strings:                    usb_strings,
+    &#8230;
+};</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+The default handler for standard control messages assumes that the
+peripheral only uses a single language. If this is not the case then
+higher-level code will have to handle the standard get-descriptor
+control messages when a string descriptor is requested.</P>
+</DIV>
+<DIV
+CLASS="REFSECT2">
+<A
+NAME="AEN164">
+</A>
+<H3>
+<SPAN
+CLASS="STRUCTNAME">
+usbs_enumeration_data</SPAN>
+</H3>
+<P>
+The <SPAN
+CLASS="STRUCTNAME">
+usbs_enumeration_data</SPAN>
+ data structure
+collects together all the various descriptors that make up the
+enumeration data. It is the responsibility of application code to
+supply a suitable data structure and install it in the control
+endpoints's <TT
+CLASS="STRUCTFIELD">
+<I>
+enumeration_data</I>
+</TT>
+ field before
+the USB device is started.</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-intro.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-start.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Introduction</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Starting up a USB Device</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-halt.html
@@ -0,0 +1,306 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Halted Endpoints</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Sending Data to the Host"
+HREF="usbs-start-tx.html"><LINK
+REL="NEXT"
+TITLE="Control Endpoints"
+HREF="usbs-control.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-start-tx.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-control.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-HALT">
+Halted Endpoints</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN420">
+</A>
+<H2>
+Name</H2>
+Halted Endpoints&nbsp;--&nbsp;Support for Halting and Halted Endpoints</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN423">
+</A>
+<H2>
+Synopsis</H2>
+<DIV
+CLASS="FUNCSYNOPSIS">
+<P>
+</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="FUNCSYNOPSISINFO">
+#include &lt;cyg/io/usb/usbs.h&gt;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+cyg_bool usbs_rx_endpoint_halted</CODE>
+(usbs_rx_endpoint* ep);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_set_rx_endpoint_halted</CODE>
+(usbs_rx_endpoint* ep, cyg_bool new_state);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_start_rx_endpoint_wait</CODE>
+(usbs_rx_endpoint* ep, void (*)(void*, int) complete_fn, void * complete_data);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+cyg_bool
+usbs_tx_endpoint_halted</CODE>
+(usbs_tx_endpoint* ep);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_set_tx_endpoint_halted</CODE>
+(usbs_tx_endpoint* ep, cyg_bool new_state);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_start_tx_endpoint_wait</CODE>
+(usbs_tx_endpoint* ep, void (*)(void*, int) complete_fn, void * complete_data);</CODE>
+</P>
+<P>
+</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN468">
+</A>
+<H2>
+<TT
+CLASS="FUNCTION">
+Description</TT>
+</H2>
+<P>
+Normal USB traffic involves straightforward handshakes, with either an
+<TT
+CLASS="LITERAL">
+ACK</TT>
+ to indicate that a packet was transferred
+without errors, or a <TT
+CLASS="LITERAL">
+NAK</TT>
+ if an error occurred, or
+if a peripheral is currently unable to process another packet from the
+host, or has no packet to send to the host. There is a third form of
+handshake, a <TT
+CLASS="LITERAL">
+STALL</TT>
+, which indicates that the
+endpoint is currently <I
+CLASS="EMPHASIS">
+halted</I>
+.</P>
+<P>
+When an endpoint is halted it means that the host-side code needs to
+take some sort of recovery action before communication over that
+endpoint can resume. The exact circumstances under which this can
+happen are not defined by the USB specification, but one example would
+be a protocol violation if say the peripheral attempted to transmit
+more data to the host than was permitted by the protocol in use. The
+host can use the standard control messages get-status, set-feature and
+clear-feature to examine and manipulate the halted status of a given
+endpoint. There are USB-specific functions which can be used inside
+the peripheral to achieve the same effect. Once an endpoint has been
+halted the host can then interact with the peripheral using class or
+vendor control messages to perform appropriate recovery, and then the
+halted condition can be cleared.</P>
+<P>
+Halting an endpoint does not constitute a device state change, and
+there is no mechanism by which higher-level code can be informed
+immediately. However, any ongoing receive or transmit operations will
+be aborted with an <TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+ error, and any new
+receives or transmits will fail immediately with the same error.</P>
+<P>
+There are six functions to support halted endpoints, one set for
+receive endpoints and another for transmit endpoints, with both sets
+behaving in essentially the same way. The first,
+<TT
+CLASS="FUNCTION">
+usbs_rx_endpoint_halted</TT>
+, can be used to determine
+whether or not an endpoint is currently halted: it takes a single
+argument that identifies the endpoint of interest. The second
+function, <TT
+CLASS="FUNCTION">
+usbs_set_rx_endpoint_halted</TT>
+, can be
+used to change the halted condition of an endpoint: it takes two
+arguments; one to identify the endpoint and another to specify the new
+state. The last function
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_endpoint_wait</TT>
+ operates in much the
+same way as <TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+: when the
+endpoint is no longer halted the device driver will invoke the
+supplied completion function with a status of 0. The completion
+function has the same signature as that for a transfer operation.
+Often it will be possible to use a single completion function and have
+the foreground code invoke either
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ or
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_endpoint_wait</TT>
+ depending on the
+current state of the endpoint.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-start-tx.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-control.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Sending Data to the Host</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Control Endpoints</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-intro.html
@@ -0,0 +1,470 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Introduction</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="NEXT"
+TITLE="USB Enumeration Data"
+HREF="usbs-enum.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="io-usb-slave.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-enum.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-INTRO">
+Introduction</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN6">
+</A>
+<H2>
+Name</H2>
+Introduction&nbsp;--&nbsp;eCos support for USB slave devices</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN9">
+</A>
+<H2>
+Introduction</H2>
+<P>
+The eCos USB slave support allows developers to produce USB
+peripherals. It consists of a number of different eCos packages:</P>
+<P>
+</P>
+<OL
+TYPE="1">
+<LI>
+<P>
+Device drivers for specific implementations of USB slave hardware, for
+example the on-chip USB Device Controller provided by the Intel SA1110
+processor. A typical USB peripheral will only provide one USB slave
+port and therefore only one such device driver package will be needed.
+Usually the device driver package will be loaded automatically when
+you create an eCos configuration for target hardware that has a USB
+slave device. If you select a target which does have a USB slave
+device but no USB device driver is loaded, this implies that no such
+device driver is currently available.</P>
+</LI>
+<LI>
+<P>
+The common USB slave package. This serves two purposes. It defines the
+API that specific device drivers should implement. It also provides
+various utilities that will be needed by most USB device drivers and
+applications, such as handlers for standard control messages.
+Usually this package will be loaded automatically at the same time as
+the USB device driver.</P>
+</LI>
+<LI>
+<P>
+The common USB package. This merely provides some information common
+to both the host and slave sides of USB, such as details of the
+control protocol. It is also used to place the other USB-related
+packages appropriately in the overall configuration hierarchy. Usually
+this package will be loaded at the same time as the USB device driver.</P>
+</LI>
+<LI>
+<P>
+Class-specific USB support packages. These make it easier to develop
+specific classes of USB peripheral, such as a USB-ethernet device. If
+no suitable package is available for a given class of peripheral then
+the USB device driver can instead be accessed directly from
+application code. Such packages will never be loaded automatically
+since the configuration system has no way of knowing what class of USB
+peripheral is being developed. Instead developers have to add the
+appropriate package or packages explicitly.</P>
+</LI>
+</OL>
+<P>
+These packages only provide support for developing USB peripherals,
+not USB hosts.</P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN22">
+</A>
+<H2>
+USB Concepts</H2>
+<P>
+Information about USB can be obtained from a number of sources
+including the <A
+HREF="http://www.usb.org/"
+TARGET="_top">
+USB Implementers Forum
+web site</A>
+. Only a brief summary is provided here.</P>
+<P>
+A USB network is asymmetrical: it consists of a single host, one or
+more slave devices, and possibly some number of intermediate hubs. The
+host side is significantly more complicated than the slave side.
+Essentially, all operations are initiated by the host. For example, if
+the host needs to receive some data from a particular USB peripheral
+then it will send an IN token to that peripheral; the latter should
+respond with either a NAK or with appropriate data. Similarly, when
+the host wants to transmit data to a peripheral it will send an OUT
+token followed by the data; the peripheral will return a NAK if it is
+currently unable to receive more data or if there was corruption,
+otherwise it will return an ACK. All transfers are check-summed and
+there is a clearly-defined error recovery process. USB peripherals can
+only interact with the host, not with each other.</P>
+<P>
+USB supports four different types of communication: control messages,
+interrupt transfers, isochronous transfers, and bulk transfers.
+Control messages are further subdivided into four categories:
+standard, class, vendor and a reserved category. All USB peripherals
+must respond to certain standard control messages, and usually this
+will be handled by the common USB slave package (for complicated
+peripherals, application support will be needed). Class and vendor
+control messages may be handled by an class-specific USB support
+package, for example the USB-ethernet package will handle control
+messages such as getting the MAC address or enabling/disabling
+promiscuous mode. Alternatively, some or all of these messages will
+have to be handled by application code.</P>
+<P>
+Interrupt transfers are used for devices which need to be polled
+regularly. For example, a USB keyboard might be polled once every
+millisecond. The host will not poll the device more frequently than
+this, so interrupt transfers are best suited to peripherals that
+involve a relatively small amount of data. Isochronous transfers are
+intended for multimedia-related peripherals where typically a large
+amount of video or audio data needs to be exchanged continuously.
+Given appropriate host support a USB peripheral can reserve some of
+the available bandwidth. Isochronous transfers are not reliable; if a
+particular packet is corrupted then it will just be discarded and
+software is expected to recover from this. Bulk transfers are used for
+everything else: after taking care of any pending control, isochronous
+and interrupt transfers the host will use whatever bandwidth remains
+for bulk transfers. Bulk transfers are reliable.</P>
+<P>
+Transfers are organized into USB packets, with the details depending
+on the transfer type. Control messages always involve an initial
+8-byte packet from host to peripheral, optionally followed by some
+additional packets; in theory these additional packets can be up to 64
+bytes, but hardware may limit it to 8 bytes. Interrupt transfers
+involve a single packet of up to 64 bytes. Isochronous transfers
+involve a single packet of up to 1024 bytes. Bulk transfers involve
+multiple packets. There will be some number, possibly zero, of 64-byte
+packets. The transfer is terminated by a single packet of less than 64
+bytes. If the transfer involves an exact multiple of 64 bytes than the
+final packet will be 0 bytes, consisting of just a header and checksum
+which typically will be generated by the hardware. There is no
+pre-defined limit on the size of a bulk transfer. Instead higher-level
+protocols are expected to handle this, so for a USB-ethernet
+peripheral the protocol could impose a limit of 1514 bytes of data
+plus maybe some additional protocol overhead.</P>
+<P>
+Transfers from the host to a peripheral are addressed not just to that
+peripheral but to a specific endpoint within that peripheral.
+Similarly, the host requests incoming data from a specific endpoint
+rather than from the peripheral as a whole. For example, a combined
+keyboard/touchpad device could provide the keyboard events on endpoint
+1 and the mouse events on endpoint 2. A given USB peripheral can have
+up to 16 endpoints for incoming data and another 16 for outgoing data.
+However, given the comparatively high speed of USB I/O this endpoint
+addressing is typically implemented in hardware rather than software,
+and the hardware will only implement a small number of endpoints.
+Endpoint 0 is generally used only for control messages.</P>
+<P>
+In practice, many of these details are irrelevant to application code
+or to class packages. Instead, such higher-level code usually just
+performs blocking <TT
+CLASS="FUNCTION">
+read</TT>
+ and
+<TT
+CLASS="FUNCTION">
+write</TT>
+, or non-blocking USB-specific calls, to
+transfer data between host and target via a specific endpoint. Control
+messages are more complicated but are usually handled by existing
+code.</P>
+<P>
+When a USB peripheral is plugged into the host there is an initial
+enumeration and configuration process. The peripheral provides
+information such as its class of device (audio, video, etc.), a
+vendor id, which endpoints should be used for what kind of data, and
+so on. The host OS uses this information to identify a suitable host
+device driver. This could be a generic driver for a class of
+peripherals, or it could be a vendor-specific driver. Assuming a
+suitable driver is installed the host will then activate the USB
+peripheral and perform additional application-specific initialisation.
+For example for a USB-ethernet device this would involve obtaining an
+ethernet MAC address. Most USB peripherals will be fairly simple, but
+it is possible to build multifunction peripherals with multiple
+configurations, interfaces, and alternate interface settings.</P>
+<P>
+It is not possible for any of the eCos packages to generate all the
+enumeration data automatically. Some of the required information such
+as the vendor id cannot be supplied by generic packages; only by the
+application developer. Class support code such as the USB-ethernet
+package could in theory supply some of the information automatically,
+but there are also hardware dependencies such as which endpoints get
+used for incoming and outgoing ethernet frames. Instead it is the
+responsibility of the application developer to provide all the
+enumeration data and perform some additional initialisation. In
+addition, the common USB slave package can handle all the standard
+control messages for a simple USB peripheral, but for something like a
+multifunction peripheral additional application support is needed.</P>
+<DIV
+CLASS="NOTE">
+<BLOCKQUOTE
+CLASS="NOTE">
+<P>
+<B>
+Note: </B>
+The initial implementation of the eCos USB slave packages involved
+hardware that only supported control and bulk transfers, not
+isochronous or interrupt. There may be future changes to the USB
+code and API to allow for isochronous and interrupt transfers,
+especially the former. Other changes may be required to support
+different USB devices. At present there is no support for USB remote
+wakeups, since again it is not supported by the hardware.</P>
+</BLOCKQUOTE>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN38">
+</A>
+<H2>
+eCos USB I/O Facilities</H2>
+<P>
+For protocols other than control messages, eCos provides two ways of
+performing USB I/O. The first involves device table or devtab entries such
+as <A
+HREF="usbs-devtab.html">
+<TT
+CLASS="LITERAL">
+/dev/usb1r</TT>
+</A>
+,
+with one entry per endpoint per USB device. It is possible to
+<TT
+CLASS="FUNCTION">
+open</TT>
+ these devices and use conventional blocking
+I/O functions such as <TT
+CLASS="FUNCTION">
+read</TT>
+ and
+<TT
+CLASS="FUNCTION">
+write</TT>
+ to exchange data between host and
+peripheral.</P>
+<P>
+There is also a lower-level USB-specific API, consisting of functions
+such as <A
+HREF="usbs-start-rx.html">
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+</A>
+.
+A USB device driver will supply a data structure for each endpoint,
+for example a <A
+HREF="usbs-data.html">
+<SPAN
+CLASS="STRUCTNAME">
+usbs_rx_endpoint</SPAN>
+</A>
+
+structure for every receive endpoint. The first argument to
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ should be a pointer to such
+a data structure. The USB-specific API is non-blocking: the initial
+call merely starts the transfer; some time later, once the transfer
+has completed or has been aborted, the device driver will invoke a
+completion function.</P>
+<P>
+Control messages are different. With four different categories of
+control messages including application and vendor specific ones, the
+conventional
+<TT
+CLASS="FUNCTION">
+open</TT>
+/<TT
+CLASS="FUNCTION">
+read</TT>
+/<TT
+CLASS="FUNCTION">
+write</TT>
+
+model of I/O cannot easily be applied. Instead, a USB device driver
+will supply a <A
+HREF="usbs-control.html">
+<SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+</A>
+
+data structure which can be manipulated appropriately. In practice the
+standard control messages will usually be handled by the common USB
+slave package, and other control messages will be handled by
+class-specific code such as the USB-ethernet package. Typically,
+application code remains responsible for supplying the <A
+HREF="usbs-enum.html">
+enumeration data</A>
+ and for actually <A
+HREF="usbs-start.html">
+starting</A>
+ up the USB device.</P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN60">
+</A>
+<H2>
+Enabling the USB code</H2>
+<P>
+If the target hardware contains a USB slave device then the
+appropriate USB device driver and the common packages will typically
+be loaded into the configuration automatically when that target is
+selected (assuming a suitable device driver exists). However, the
+driver will not necessarily be active. For example a processor might
+have an on-chip USB device, but not all applications using that
+processor will want to use USB functionality. Hence by default the USB
+device is disabled, ensuring that applications do not suffer any
+memory or other penalties for functionality that is not required.</P>
+<P>
+If the application developer explicitly adds a class support package
+such as the USB-ethernet one then this implies that the USB device is
+actually needed, and the device will be enabled automatically.
+However, if no suitable class package is available and the USB device
+will instead be accessed by application code, it is necessary to
+enable the USB device manually. Usually the easiest way to do this is
+to enable the configuration option
+<TT
+CLASS="LITERAL">
+CYGGLO_IO_USB_SLAVE_APPLICATION</TT>
+, and the USB device
+driver and related packages will adjust accordingly. Alternatively,
+the device driver may provide some configuration options to provide
+more fine-grained control.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-enum.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+eCos USB Slave Support</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+USB Enumeration Data</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-start-rx.html
@@ -0,0 +1,438 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Receiving Data from the Host</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Devtab Entries"
+HREF="usbs-devtab.html"><LINK
+REL="NEXT"
+TITLE="Sending Data to the Host"
+HREF="usbs-start-tx.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-devtab.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-start-tx.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-START-RX">
+Receiving Data from the Host</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN277">
+</A>
+<H2>
+Name</H2>
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+&nbsp;--&nbsp;Receiving Data from the Host</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN281">
+</A>
+<H2>
+Synopsis</H2>
+<DIV
+CLASS="FUNCSYNOPSIS">
+<P>
+</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="FUNCSYNOPSISINFO">
+#include &lt;cyg/io/usb/usbs.h&gt;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_start_rx_buffer</CODE>
+(usbs_rx_endpoint* ep, unsigned char* buffer, int length, void (*)(void*,int) complete_fn, void * complete_data);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_start_rx</CODE>
+(usbs_rx_endpoint* ep);</CODE>
+</P>
+<P>
+</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN302">
+</A>
+<H2>
+<TT
+CLASS="FUNCTION">
+Description</TT>
+</H2>
+<P>
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ is a USB-specific function
+to accept a transfer from host to peripheral. It can be used for bulk,
+interrupt or isochronous transfers, but not for control messages.
+Instead those involve manipulating the <A
+HREF="usbs-control.html">
+<SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+</A>
+
+data structure directly. The function takes five arguments:</P>
+<P>
+</P>
+<OL
+TYPE="1">
+<LI>
+<P>
+The first argument identifies the specific endpoint that should be
+used. Different USB devices will support different sets of endpoints
+and the device driver will provide appropriate data structures. The
+device driver's documentation should be consulted for details of which
+endpoints are available.</P>
+</LI>
+<LI>
+<P>
+The <TT
+CLASS="PARAMETER">
+<I>
+buffer</I>
+</TT>
+ and <TT
+CLASS="PARAMETER">
+<I>
+length</I>
+</TT>
+
+arguments control the actual transfer. USB device drivers are not
+expected to perform any buffering or to support partial transfers, so
+the length specified should correspond to the maximum transfer that is
+currently possible and the buffer should be at least this large. For
+isochronous transfers the USB specification imposes an upper bound of
+1023 bytes, and a smaller limit may be set in the <A
+HREF="usbs-enum.html#AEN142">
+enumeration data</A>
+. Interrupt
+transfers are similarly straightforward with an upper bound of 64
+bytes, or less as per the enumeration data. Bulk transfers are more
+complicated because they can involve multiple 64-byte packets plus a
+terminating packet of less than 64 bytes, so there is no predefined
+limit on the transfer size. Instead it is left to higher-level
+protocols to specify an appropriate upper bound.</P>
+<P>
+One technique that may work for bulk transfers is to exploit the fact
+that such transfers happen in 64-byte packets: it may be possible to
+receive an initial 64 bytes, corresponding to the first packet in the
+transfer; these 64 bytes can then be examined to determine the total
+transfer size, and the remaining data can be transferred in another
+receive operation. This technique is not guaranteed to work with all
+USB hardware. Also, if the delay between accepting the first packet and
+the remainder of the transfer is excessive then this could cause
+timeout problems for the host-side software. For these reasons this
+technique should be avoided.</P>
+</LI>
+<LI>
+<P>
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ is non-blocking. It merely
+starts the receive operation, and does not wait for completion. At
+some later point the USB device driver will invoke the completion
+function parameter with two arguments: the completion data defined by
+the last parameter and a result field. A result &gt;=
+<TT
+CLASS="LITERAL">
+0</TT>
+ indicates a successful transfer of that many
+bytes, which may be less than the upper bound imposed by the
+<TT
+CLASS="PARAMETER">
+<I>
+length</I>
+</TT>
+ argument. A result &lt;
+<TT
+CLASS="LITERAL">
+0</TT>
+ indicates an error. The most likely errors are
+<TT
+CLASS="LITERAL">
+-EPIPE</TT>
+ to indicate that the connection between the
+host and the target has been broken, and <TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+
+for when the endpoint has been <A
+HREF="usbs-halt.html">
+halted</A>
+. Specific USB device drivers may
+specify additional error conditions.</P>
+</LI>
+</OL>
+<P>
+The normal sequence of events is that the USB device driver will
+update the appropriate hardware registers. At some point after that
+the host will attempt to send data by transmitting an OUT token
+followed by a data packet, and since a receive operation is now in
+progress the data will be accepted and ACK'd. If there were no receive
+operation then the peripheral would instead generate a NAK. The USB
+hardware will generate an interrupt once the whole packet has been
+received, and the USB device driver will service this interrupt and
+arrange for a DSR to be called. Isochronous and interrupt transfers
+involve just a single packet. However, bulk transfers may involve
+multiple packets so the device driver has to check whether the packet
+was a full 64 bytes or whether it was a terminating packet of less
+than this. When the device driver DSR detects a complete transfer it
+will inform higher-level code by invoking the supplied completion
+function.</P>
+<P>
+This means that the completion function will normally be invoked by a
+DSR and not in thread context - although some USB device drivers may
+have a different implementation. Therefore the completion function is
+restricted in what it can do. In particular it must not make any
+calls that will or may block such as locking a mutex or allocating
+memory. The kernel documentation should be consulted for more details
+of DSR's and interrupt handling generally.</P>
+<P>
+It is possible that the completion function will be invoked before
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ returns. Such an event would
+be unusual because the transfer cannot happen until the next time the
+host tries to send data to this peripheral, but it may happen if for
+example another interrupt happens and a higher priority thread is
+scheduled to run. Also, if the endpoint is currently halted then the
+completion function will be invoked immediately with
+<TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+: typically this will happen in the current
+thread rather than in a separate DSR. The completion function is
+allowed to start another transfer immediately by calling
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ again.</P>
+<P>
+USB device drivers are not expected to perform any locking. It is the
+responsibility of higher-level code to ensure that there is only one
+receive operation for a given endpoint in progress at any one time. If
+there are concurrent calls to
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ then the resulting behaviour
+is undefined. For typical USB applications this does not present any
+problems, because only one piece of code will access a given endpoint
+at any particular time.</P>
+<P>
+The following code fragment illustrates a very simple use of
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+ to implement a blocking
+receive, using a semaphore to synchronise between the foreground
+thread and the DSR. For a simple example like this no completion data
+is needed.</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+static int error_code = 0;
+static cyg_sem_t completion_wait;
+
+static void
+completion_fn(void* data, int result)
+{
+    error_code = result;
+    cyg_semaphore_post(&amp;completion_wait);
+}
+
+int
+blocking_receive(usbs_rx_endpoint* ep, unsigned char* buf, int len)
+{
+    error_code = 0;
+    usbs_start_rx_buffer(ep, buf, len, &amp;completion_fn, NULL);
+    cyg_semaphore_wait(&amp;completion_wait);
+    return error_code;
+}</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+There is also a utility function <TT
+CLASS="FUNCTION">
+usbs_start_rx</TT>
+. This
+can be used by code that wants to manipulate <A
+HREF="usbs-data.html">
+data endpoints</A>
+ directly, specifically the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_fn</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_data</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ fields.
+<TT
+CLASS="FUNCTION">
+usbs_start_tx</TT>
+ just invokes a function
+supplied by the device driver.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-devtab.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-start-tx.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Devtab Entries</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Sending Data to the Host</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-start-tx.html
@@ -0,0 +1,430 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Sending Data to the Host</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Receiving Data from the Host"
+HREF="usbs-start-rx.html"><LINK
+REL="NEXT"
+TITLE="Halted Endpoints"
+HREF="usbs-halt.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-start-rx.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-halt.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-START-TX">
+Sending Data to the Host</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN349">
+</A>
+<H2>
+Name</H2>
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+&nbsp;--&nbsp;Sending Data to the Host</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN353">
+</A>
+<H2>
+Synopsis</H2>
+<DIV
+CLASS="FUNCSYNOPSIS">
+<P>
+</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="FUNCSYNOPSISINFO">
+#include &lt;cyg/io/usb/usbs.h&gt;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_start_tx_buffer</CODE>
+(usbs_tx_endpoint* ep, const unsigned char* buffer, int length, void (*)(void*,int) complete_fn, void * complete_data);</CODE>
+</P>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_start_tx</CODE>
+(usbs_tx_endpoint* ep);</CODE>
+</P>
+<P>
+</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN374">
+</A>
+<H2>
+<TT
+CLASS="FUNCTION">
+Description</TT>
+</H2>
+<P>
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+ is a USB-specific function
+to transfer data from peripheral to host. It can be used for bulk,
+interrupt or isochronous transfers, but not for control messages;
+instead those involve manipulating the <A
+HREF="usbs-control.html">
+<SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+</A>
+
+data structure directly. The function takes five arguments:</P>
+<P>
+</P>
+<OL
+TYPE="1">
+<LI>
+<P>
+The first argument identifies the specific endpoint that should be
+used. Different USB devices will support different sets of endpoints
+and the device driver will provide appropriate data structures. The
+device driver's documentation should be consulted for details of which
+endpoints are available.</P>
+</LI>
+<LI>
+<P>
+The <TT
+CLASS="PARAMETER">
+<I>
+buffer</I>
+</TT>
+ and <TT
+CLASS="PARAMETER">
+<I>
+length</I>
+</TT>
+
+arguments control the actual transfer. USB device drivers are not
+allowed to modify the buffer during the transfer, so the data can
+reside in read-only memory. The transfer will be for all the data
+specified, and it is the responsibility of higher-level code to make
+sure that the host is expecting this amount of data. For isochronous
+transfers the USB specification imposes an upper bound of 1023 bytes,
+but a smaller limit may be set in the <A
+HREF="usbs-enum.html#AEN142">
+enumeration data</A>
+. Interrupt
+transfers have an upper bound of 64 bytes or less, as per the
+enumeration data. Bulk transfers are more complicated because they can
+involve multiple 64-byte packets plus a terminating packet of less
+than 64 bytes, so the basic USB specification does not impose an upper
+limit on the total transfer size. Instead it is left to higher-level
+protocols to specify an appropriate upper bound. If the peripheral
+attempts to send more data than the host is willing to accept then the
+resulting behaviour is undefined and may well depend on the specific
+host operating system being used.</P>
+<P>
+For bulk transfers, the USB device driver or the underlying hardware
+will automatically split the transfer up into the appropriate number
+of full-size 64-byte packets plus a single terminating packet, which
+may be 0 bytes.</P>
+</LI>
+<LI>
+<P>
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+ is non-blocking. It merely
+starts the transmit operation, and does not wait for completion. At
+some later point the USB device driver will invoke the completion
+function parameter with two arguments: the completion data defined by
+the last parameter, and a result field. This result will be either an
+error code &lt; <TT
+CLASS="LITERAL">
+0</TT>
+, or the amount of data
+transferred which should correspond to the
+<TT
+CLASS="PARAMETER">
+<I>
+length</I>
+</TT>
+ argument. The most likely errors are
+<TT
+CLASS="LITERAL">
+-EPIPE</TT>
+ to indicate that the connection between the
+host and the target has been broken, and <TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+
+for when the endpoint has been <A
+HREF="usbs-halt.html">
+halted</A>
+. Specific USB device drivers may
+define additional error conditions.</P>
+</LI>
+</OL>
+<P>
+The normal sequence of events is that the USB device driver will
+update the appropriate hardware registers. At some point after that
+the host will attempt to fetch data by transmitting an IN token. Since
+a transmit operation is now in progress the peripheral can send a
+packet of data, and the host will generate an ACK. At this point the
+USB hardware will generate an interrupt, and the device driver will
+service this interrupt and arrange for a DSR to be called. Isochronous
+and interrupt transfers involve just a single packet. However, bulk
+transfers may involve multiple packets so the device driver has to
+check whether there is more data to send and set things up for the
+next packet. When the device driver DSR detects a complete transfer it
+will inform higher-level code by invoking the supplied completion
+function.</P>
+<P>
+This means that the completion function will normally be invoked by a
+DSR and not in thread context - although some USB device drivers may
+have a different implementation. Therefore the completion function is
+restricted in what it can do, in particular it must not make any
+calls that will or may block such as locking a mutex or allocating
+memory. The kernel documentation should be consulted for more details
+of DSR's and interrupt handling generally.</P>
+<P>
+It is possible that the completion function will be invoked before
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+ returns. Such an event would
+be unusual because the transfer cannot happen until the next time the
+host tries to fetch data from this peripheral, but it may happen if,
+for example, another interrupt happens and a higher priority thread is
+scheduled to run. Also, if the endpoint is currently halted then the
+completion function will be invoked immediately with
+<TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+: typically this will happen in the current
+thread rather than in a separate DSR. The completion function is
+allowed to start another transfer immediately by calling
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+ again.</P>
+<P>
+USB device drivers are not expected to perform any locking. It is the
+responsibility of higher-level code to ensure that there is only one
+transmit operation for a given endpoint in progress at any one time.
+If there are concurrent calls to
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+ then the resulting behaviour
+is undefined. For typical USB applications this does not present any
+problems because only piece of code will access a given endpoint at
+any particular time.</P>
+<P>
+The following code fragment illustrates a very simple use of
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+ to implement a blocking
+transmit, using a semaphore to synchronise between the foreground
+thread and the DSR. For a simple example like this no completion data
+is needed.</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+static int error_code = 0;
+static cyg_sem_t completion_wait;
+
+static void
+completion_fn(void* data, int result)
+{
+    error_code = result;
+    cyg_semaphore_post(&amp;completion_wait);
+}
+
+int
+blocking_transmit(usbs_tx_endpoint* ep, const unsigned char* buf, int len)
+{
+    error_code = 0;
+    usbs_start_tx_buffer(ep, buf, len, &amp;completion_fn, NULL);
+    cyg_semaphore_wait(&amp;completion_wait);
+    return error_code;
+}</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+There is also a utility function <TT
+CLASS="FUNCTION">
+usbs_start</TT>
+. This
+can be used by code that wants to manipulate <A
+HREF="usbs-data.html">
+data endpoints</A>
+ directly, specifically the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_fn</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_data</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+ fields.
+<TT
+CLASS="FUNCTION">
+usbs_start_tx</TT>
+ just calls a function supplied by
+the device driver.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-start-rx.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-halt.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Receiving Data from the Host</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Halted Endpoints</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-start.html
@@ -0,0 +1,258 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Starting up a USB Device</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="USB Enumeration Data"
+HREF="usbs-enum.html"><LINK
+REL="NEXT"
+TITLE="Devtab Entries"
+HREF="usbs-devtab.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-enum.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+<A
+HREF="usbs-devtab.html">
+Next</A>
+</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-START">
+Starting up a USB Device</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN173">
+</A>
+<H2>
+Name</H2>
+<TT
+CLASS="FUNCTION">
+usbs_start</TT>
+&nbsp;--&nbsp;Starting up a USB Device</DIV>
+<DIV
+CLASS="REFSYNOPSISDIV">
+<A
+NAME="AEN177">
+</A>
+<H2>
+Synopsis</H2>
+<DIV
+CLASS="FUNCSYNOPSIS">
+<P>
+</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="FUNCSYNOPSISINFO">
+#include &lt;cyg/io/usb/usbs.h&gt;</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+<CODE>
+<CODE
+CLASS="FUNCDEF">
+void usbs_start</CODE>
+(usbs_control_endpoint* ep0);</CODE>
+</P>
+<P>
+</P>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN185">
+</A>
+<H2>
+Description</H2>
+<P>
+Initializing a USB device requires some support from higher-level
+code, typically the application, in the form of enumeration data.
+Hence it is not possible for the low-level USB driver to activate a
+USB device itself. Instead the higher-level code has to take care of
+this by invoking <TT
+CLASS="FUNCTION">
+usbs_start</TT>
+. This function takes
+a pointer to a USB control endpoint data structure. USB device drivers
+should provide exactly one such data structure for every USB device,
+so the pointer uniquely identifies the device.</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+const usbs_enumeration_data usb_enum_data = {
+    &#8230;
+};
+
+int
+main(int argc, char** argv)
+{
+    usbs_sa11x0_ep0.enumeration_data = &amp;usb_enum_data;
+    &#8230;
+    usbs_start(&amp;usbs_sa11x0_ep0);
+    &#8230;
+}</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+The exact behaviour of <TT
+CLASS="FUNCTION">
+usbs_start</TT>
+ depends on the
+USB hardware and the device driver. A typical implementation would
+change the USB data pins from tristated to active. If the peripheral
+is already plugged into a host then the latter should detect this
+change and start interacting with the peripheral, including requesting
+the enumeration data. Some of this may happen before
+<TT
+CLASS="FUNCTION">
+usbs_start</TT>
+ returns, but given that multiple
+interactions between USB host and peripheral are required it is likely
+that the function will return before the peripheral is fully
+configured. Control endpoints provide a <A
+HREF="usbs-control.html#AEN515">
+mechanism</A>
+ for informing
+higher-level code of USB state changes.
+<TT
+CLASS="FUNCTION">
+usbs_start</TT>
+ will return even if the peripheral is
+not currently connected to a host: it will not block until the
+connection is established.</P>
+<P>
+<TT
+CLASS="FUNCTION">
+usbs_start</TT>
+ should only be called once for a given
+USB device. There are no defined error conditions. Note that the
+function affects the entire USB device and not just the control
+endpoint: there is no need to start any data endpoints as well.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-enum.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+<A
+HREF="usbs-devtab.html">
+Next</A>
+</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+USB Enumeration Data</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+Devtab Entries</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs-writing.html
@@ -0,0 +1,578 @@
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<HTML>
+<HEAD>
+<TITLE>
+Writing a USB Device Driver</TITLE>
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.54"><LINK
+REL="HOME"
+TITLE="eCos USB Slave Support"
+HREF="io-usb-slave.html"><LINK
+REL="PREVIOUS"
+TITLE="Data Endpoints"
+HREF="usbs-data.html"></HEAD>
+<BODY
+CLASS="REFENTRY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF">
+<DIV
+CLASS="NAVHEADER">
+<TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TH
+COLSPAN="3"
+ALIGN="center">
+eCos USB Slave Support</TH>
+</TR>
+<TR>
+<TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom">
+<A
+HREF="usbs-data.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom">
+</TD>
+<TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom">
+&nbsp;</TD>
+</TR>
+</TABLE>
+<HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV>
+<H1>
+<A
+NAME="USBS-WRITING">
+Writing a USB Device Driver</A>
+</H1>
+<DIV
+CLASS="REFNAMEDIV">
+<A
+NAME="AEN668">
+</A>
+<H2>
+Name</H2>
+Writing a USB Device Driver&nbsp;--&nbsp;USB Device Driver Porting Guide</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN671">
+</A>
+<H2>
+Introduction</H2>
+<P>
+Often the best way to write a USB device driver will be to start with
+an existing one and modify it as necessary. The information given here
+is intended primarily as an outline rather than as a complete guide.</P>
+<DIV
+CLASS="NOTE">
+<BLOCKQUOTE
+CLASS="NOTE">
+<P>
+<B>
+Note: </B>
+At the time of writing only one USB device driver has been
+implemented. Hence it is possible, perhaps probable, that some
+portability issues have not yet been addressed. One issue
+involves the different types of transfer, for example the initial
+target hardware had no support for isochronous or interrupt transfers,
+so additional functionality may be needed to switch between transfer
+types. Another issue would be hardware where a given endpoint number,
+say endpoint 1, could be used for either receiving or transmitting
+data, but not both because a single fifo is used. Issues like these
+will have to be resolved as and when additional USB device drivers are
+written.</P>
+</BLOCKQUOTE>
+</DIV>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN676">
+</A>
+<H2>
+The Control Endpoint</H2>
+<P>
+A USB device driver should provide a single <A
+HREF="usbs-control.html">
+<SPAN
+CLASS="STRUCTNAME">
+usbs_control_endpoint</SPAN>
+</A>
+
+data structure for every USB device. Typical peripherals will have
+only one USB port so there will be just one such data structure in the
+entire system, but theoretically it is possible to have multiple USB
+devices. These may all involve the same chip, in which case a single
+device driver should support multiple device instances, or they may
+involve different chips. The name or names of these data structures
+are determined by the device driver, but appropriate care should be
+taken to avoid name clashes. </P>
+<P>
+A USB device cannot be used unless the control endpoint data structure
+exists. However, the presence of USB hardware in the target processor
+or board does not guarantee that the application will necessarily want
+to use that hardware. To avoid unwanted code or data overheads, the
+device driver can provide a configuration option to determine whether
+or not the endpoint 0 data structure is actually provided. A default
+value of <TT
+CLASS="LITERAL">
+CYGINT_IO_USB_SLAVE_CLIENTS</TT>
+ ensures that
+the USB driver will be enabled automatically if higher-level code does
+require USB support, while leaving ultimate control to the user.</P>
+<P>
+The USB device driver is responsible for filling in the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+start_fn</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+poll_fn</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+interrupt_vector</I>
+</TT>
+ fields. Usually this can
+be achieved by static initialization. The driver is also largely
+responsible for maintaining the <TT
+CLASS="STRUCTFIELD">
+<I>
+state</I>
+</TT>
+
+field. The <TT
+CLASS="STRUCTFIELD">
+<I>
+control_buffer</I>
+</TT>
+ array should be
+used to hold the first packet of a control message. The
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+ and other fields related to data
+transfers will be managed <A
+HREF="usbs-control.html#AEN578">
+jointly</A>
+ by higher-level code and
+the device driver. The remaining fields are generally filled in by
+higher-level code, although the driver should initialize them to NULL
+values.</P>
+<P>
+Hardware permitting, the USB device should be inactive until the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+start_fn</I>
+</TT>
+ is invoked, for example by
+tristating the appropriate pins. This prevents the host from
+interacting with the peripheral before all other parts of the system
+have initialized. It is expected that the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+start_fn</I>
+</TT>
+ will only be invoked once, shortly
+after power-up.</P>
+<P>
+Where possible the device driver should detect state changes, such as
+when the connection between host and peripheral is established, and
+<A
+HREF="usbs-control.html#AEN515">
+report</A>
+ these to higher-level
+code via the <TT
+CLASS="STRUCTFIELD">
+<I>
+state_change_fn</I>
+</TT>
+ callback, if
+any. The state change to and from configured state cannot easily be
+handled by the device driver itself, instead higher-level code such as
+the common USB slave package will take care of this.</P>
+<P>
+Once the connection between host and peripheral has been established,
+the peripheral must be ready to accept control messages at all times,
+and must respond to these within certain time constraints. For
+example, the standard set-address control message must be handled
+within 50ms. The USB specification provides more information on these
+constraints. The device driver is responsible for receiving the
+initial packet of a control message. This packet will always be eight
+bytes and should be stored in the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+control_buffer</I>
+</TT>
+ field. Certain standard
+control messages should be detected and handled by the device driver
+itself. The most important is set-address, but usually the get-status,
+set-feature and clear-feature requests when applied to halted
+endpoints should also be handled by the driver. Other standard control
+messages should first be passed on to the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+standard_control_fn</I>
+</TT>
+ callback (if any), and
+finally to the default handler
+<TT
+CLASS="FUNCTION">
+usbs_handle_standard_control</TT>
+ provided by the
+common USB slave package. Class, vendor and reserved control messages
+should always be dispatched to the appropriate callback and there is
+no default handler for these.</P>
+<P>
+Some control messages will involve further data transfer, not just the
+initial packet. The device driver must handle this in accordance with
+the USB specification and the <A
+HREF="usbs-control.html#AEN578">
+buffer management strategy</A>
+. The
+driver is also responsible for keeping track of whether or not the
+control operation has succeeded and generating an ACK or STALL
+handshake. </P>
+<P>
+The polling support is optional and may not be feasible on all
+hardware. It is only used in certain specialised environments such as
+RedBoot. A typical implementation of the polling function would just
+check whether or not an interrupt would have occurred and, if so, call
+the same code that the interrupt handler would.</P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN704">
+</A>
+<H2>
+Data Endpoints</H2>
+<P>
+In addition to the control endpoint data structure, a USB device
+driver should also provide appropriate <A
+HREF="usbs-data.html">
+data
+endpoint</A>
+ data structures. Obviously this is only relevant if
+the USB support generally is desired, that is if the control endpoint is
+provided. In addition, higher-level code may not require all the
+endpoints, so it may be useful to provide configuration options that
+control the presence of each endpoint. For example, the intended
+application might only involve a single transmit endpoint and of
+course control messages, so supporting receive endpoints might waste
+memory.</P>
+<P>
+Conceptually, data endpoints are much simpler than the control
+endpoint. The device driver has to supply two functions, one for
+data transfers and another to control the halted condition. These
+implement the functionality for
+<A
+HREF="usbs-start-rx.html">
+<TT
+CLASS="FUNCTION">
+usbs_start_rx_buffer</TT>
+</A>
+,
+<A
+HREF="usbs-start-tx.html">
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_buffer</TT>
+</A>
+,
+<A
+HREF="usbs-halt.html">
+<TT
+CLASS="FUNCTION">
+usbs_set_rx_endpoint_halted</TT>
+</A>
+ and
+<A
+HREF="usbs-halt.html">
+<TT
+CLASS="FUNCTION">
+usbs_set_tx_endpoint_halted</TT>
+</A>
+.
+The device driver is also responsible for maintaining the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+halted</I>
+</TT>
+ status.</P>
+<P>
+For data transfers, higher-level code will have filled in the
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+buffer_size</I>
+</TT>
+,
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_fn</I>
+</TT>
+ and
+<TT
+CLASS="STRUCTFIELD">
+<I>
+complete_data</I>
+</TT>
+ fields. The transfer function
+should arrange for the transfer to start, allowing the host to send or
+receive packets. Typically this will result in an interrupt at the end
+of the transfer or after each packet. Once the entire transfer has
+been completed, the driver's interrupt handling code should invoke the
+completion function. This can happen either in DSR context or thread
+context, depending on the driver's implementation. There are a number
+of special cases to consider. If the endpoint is halted when the
+transfer is started then the completion function can be invoked
+immediately with <TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+. If the transfer cannot be
+completed because the connection is broken then the completion
+function should be invoked with <TT
+CLASS="LITERAL">
+-EPIPE</TT>
+. If the
+endpoint is stalled during the transfer, either because of a standard
+control message or because higher-level code calls the appropriate
+<TT
+CLASS="STRUCTFIELD">
+<I>
+set_halted_fn</I>
+</TT>
+, then again the completion
+function should be invoked with <TT
+CLASS="LITERAL">
+-EAGAIN</TT>
+. Finally,
+the &#60;<TT
+CLASS="FUNCTION">
+usbs_start_rx_endpoint_wait</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_start_tx_endpoint_wait</TT>
+ functions involve
+calling the device driver's data transfer function with a buffer size
+of 0 bytes.</P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN729">
+</A>
+<H2>
+Devtab Entries</H2>
+<P>
+For some applications or higher-level packages it may be more
+convenient to use traditional open/read/write I/O calls rather than
+the non-blocking USB I/O calls. To support this the device driver can
+provide a devtab entry for each endpoint, for example:</P>
+<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%">
+<TR>
+<TD>
+<PRE
+CLASS="PROGRAMLISTING">
+#ifdef CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY
+
+static CHAR_DEVIO_TABLE(usbs_sa11x0_ep1_devtab_functions,
+                        &amp;cyg_devio_cwrite,
+                        &amp;usbs_devtab_cread,
+                        &amp;cyg_devio_bwrite,
+                        &amp;cyg_devio_bread,
+                        &amp;cyg_devio_select,
+                        &amp;cyg_devio_get_config,
+                        &amp;cyg_devio_set_config);
+
+static CHAR_DEVTAB_ENTRY(usbs_sa11x0_ep1_devtab_entry,
+                         CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "1r",
+                         0,
+                         &amp;usbs_sa11x0_ep1_devtab_functions,
+                         &amp;usbs_sa11x0_devtab_dummy_init,
+                         0,
+                         (void*) &amp;usbs_sa11x0_ep1);
+#endif</PRE>
+</TD>
+</TR>
+</TABLE>
+<P>
+Again care must be taken to avoid name clashes. This can be achieved
+by having a configuration option to control the base name, with a
+default value of e.g. <TT
+CLASS="LITERAL">
+/dev/usbs</TT>
+, and appending an
+endpoint-specific string. This gives the application developer
+sufficient control to eliminate any name clashes. The common USB slave
+package provides functions <TT
+CLASS="FUNCTION">
+usbs_devtab_cwrite</TT>
+ and
+<TT
+CLASS="FUNCTION">
+usbs_devtab_cread</TT>
+, which can be used in the
+function tables for transmit and receive endpoints respectively. The
+private field <TT
+CLASS="STRUCTFIELD">
+<I>
+priv</I>
+</TT>
+ of the devtab entry
+should be a pointer to the underlying endpoint data structure.</P>
+<P>
+Because devtab entries are never accessed directly, only indirectly,
+they would usually be eliminated by the linker. To avoid this the
+devtab entries should normally be defined in a separate source file
+which ends up the special library <TT
+CLASS="FILENAME">
+libextras.a</TT>
+
+rather than in the default library <TT
+CLASS="FILENAME">
+libtarget.a</TT>
+.</P>
+<P>
+Not all applications or higher-level packages will want to use the
+devtab entries and the blocking I/O facilities. It may be appropriate
+for the device driver to provide additional configuration options that
+control whether or not any or all of the devtab entries should be
+provided, to avoid unnecessary memory overheads.</P>
+</DIV>
+<DIV
+CLASS="REFSECT1">
+<A
+NAME="AEN742">
+</A>
+<H2>
+Interrupt Handling</H2>
+<P>
+A typical USB device driver will need to service interrupts for all of
+the endpoints and possibly for additional USB events such as entering
+or leaving suspended mode. Usually these interrupts need not be
+serviced directly by the ISR. Instead, they can be left to a DSR. If
+the peripheral is not able to accept or send another packet just yet,
+the hardware will generate a NAK and the host will just retry a little
+bit later. If high throughput is required then it may be desirable to
+handle the bulk transfer protocol largely at ISR level, that is take
+care of each packet in the ISR and only activate the DSR once the
+whole transfer has completed.</P>
+<P>
+Control messages may involve invoking arbitrary callback functions in
+higher-level code. This should normally happen at DSR level. Doing it
+at ISR level could seriously affect the system's interrupt latency and
+impose unacceptable constraints on what operations can be performed by
+those callbacks. If the device driver requires a thread anyway then it
+may be appropriate to use this thread for invoking the callbacks, but
+usually it is not worthwhile to add a new thread to the system just
+for this; higher-level code is expected to write callbacks that
+function sensibly at DSR level. Much the same applies to the
+completion functions associated with data transfers. These should also
+be invoked at DSR or thread level.</P>
+</DIV>
+<DIV
+CLASS="NAVFOOTER">
+<HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0">
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+<A
+HREF="usbs-data.html">
+Prev</A>
+</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+<A
+HREF="io-usb-slave.html">
+Home</A>
+</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+&nbsp;</TD>
+</TR>
+<TR>
+<TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top">
+Data Endpoints</TD>
+<TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top">
+&nbsp;</TD>
+<TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top">
+&nbsp;</TD>
+</TR>
+</TABLE>
+</DIV>
+</BODY>
+</HTML>
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/doc/usbs.sgml
@@ -0,0 +1,2358 @@
+<!DOCTYPE reference  PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
+
+<!-- {{{ Banner                         -->
+
+<!-- =============================================================== -->
+<!--                                                                 -->
+<!--     usbs.sgml                                                   -->
+<!--                                                                 -->
+<!--     Generic USB-slave documentation.                            -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+<!-- ####COPYRIGHTBEGIN####                                          -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+<!-- Copyright (C) 2001 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->
+<!-- =============================================================== -->
+<!--                                                                 -->      
+<!-- ####COPYRIGHTEND####                                            -->
+<!-- =============================================================== -->
+<!-- #####DESCRIPTIONBEGIN####                                       -->
+<!--                                                                 -->
+<!-- Author(s):   bartv                                              -->
+<!-- Contact(s):  bartv                                              -->
+<!-- Date:        2001/01/03                                         -->
+<!-- Version:     0.01                                               -->
+<!--                                                                 -->
+<!-- ####DESCRIPTIONEND####                                          -->
+<!-- =============================================================== -->
+
+<!-- }}} -->
+
+<reference id="io-usb-slave">
+  <title>eCos USB Slave Support</title>
+
+<!-- {{{ Intro                          -->
+
+<refentry id="usbs-intro">
+<refmeta>
+<refentrytitle>Introduction</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Introduction</refname>
+<refpurpose>eCos support for USB slave devices</refpurpose>
+</refnamediv>
+
+<refsect1><title>Introduction</title>
+<para>
+The eCos USB slave support allows developers to produce USB
+peripherals. It consists of a number of different eCos packages:
+</para>
+<orderedlist>
+
+<listitem>
+<para>
+Device drivers for specific implementations of USB slave hardware, for
+example the on-chip USB Device Controller provided by the Intel SA1110
+processor. A typical USB peripheral will only provide one USB slave
+port and therefore only one such device driver package will be needed.
+Usually the device driver package will be loaded automatically when
+you create an eCos configuration for target hardware that has a USB
+slave device. If you select a target which does have a USB slave
+device but no USB device driver is loaded, this implies that no such
+device driver is currently available.
+</para>
+</listitem>
+
+<listitem>
+<para>
+The common USB slave package. This serves two purposes. It defines the
+API that specific device drivers should implement. It also provides
+various utilities that will be needed by most USB device drivers and
+applications, such as handlers for standard control messages.
+Usually this package will be loaded automatically at the same time as
+the USB device driver.
+</para>
+</listitem>
+
+<listitem>
+<para>
+The common USB package. This merely provides some information common
+to both the host and slave sides of USB, such as details of the
+control protocol. It is also used to place the other USB-related
+packages appropriately in the overall configuration hierarchy. Usually
+this package will be loaded at the same time as the USB device driver.
+</para>
+</listitem>
+
+<listitem>
+<para>
+Class-specific USB support packages. These make it easier to develop
+specific classes of USB peripheral, such as a USB-ethernet device. If
+no suitable package is available for a given class of peripheral then
+the USB device driver can instead be accessed directly from
+application code. Such packages will never be loaded automatically
+since the configuration system has no way of knowing what class of USB
+peripheral is being developed. Instead developers have to add the
+appropriate package or packages explicitly.
+</para>
+</listitem>
+
+</orderedlist>
+
+<para>
+These packages only provide support for developing USB peripherals,
+not USB hosts.
+</para>
+</refsect1>
+
+<refsect1><title>USB Concepts</title>
+<para>
+Information about USB can be obtained from a number of sources
+including the <ulink url="http://www.usb.org/">USB Implementers Forum
+web site</ulink>. Only a brief summary is provided here.
+</para>
+<para>
+A USB network is asymmetrical: it consists of a single host, one or
+more slave devices, and possibly some number of intermediate hubs. The
+host side is significantly more complicated than the slave side.
+Essentially, all operations are initiated by the host. For example, if
+the host needs to receive some data from a particular USB peripheral
+then it will send an IN token to that peripheral; the latter should
+respond with either a NAK or with appropriate data. Similarly, when
+the host wants to transmit data to a peripheral it will send an OUT
+token followed by the data; the peripheral will return a NAK if it is
+currently unable to receive more data or if there was corruption,
+otherwise it will return an ACK. All transfers are check-summed and
+there is a clearly-defined error recovery process. USB peripherals can
+only interact with the host, not with each other.
+</para>
+<para>
+USB supports four different types of communication: control messages,
+interrupt transfers, isochronous transfers, and bulk transfers.
+Control messages are further subdivided into four categories:
+standard, class, vendor and a reserved category. All USB peripherals
+must respond to certain standard control messages, and usually this
+will be handled by the common USB slave package (for complicated
+peripherals, application support will be needed). Class and vendor
+control messages may be handled by an class-specific USB support
+package, for example the USB-ethernet package will handle control
+messages such as getting the MAC address or enabling/disabling
+promiscuous mode. Alternatively, some or all of these messages will
+have to be handled by application code.
+</para>
+<para>
+Interrupt transfers are used for devices which need to be polled
+regularly. For example, a USB keyboard might be polled once every
+millisecond. The host will not poll the device more frequently than
+this, so interrupt transfers are best suited to peripherals that
+involve a relatively small amount of data. Isochronous transfers are
+intended for multimedia-related peripherals where typically a large
+amount of video or audio data needs to be exchanged continuously.
+Given appropriate host support a USB peripheral can reserve some of
+the available bandwidth. Isochronous transfers are not reliable; if a
+particular packet is corrupted then it will just be discarded and
+software is expected to recover from this. Bulk transfers are used for
+everything else: after taking care of any pending control, isochronous
+and interrupt transfers the host will use whatever bandwidth remains
+for bulk transfers. Bulk transfers are reliable.
+</para>
+<para>
+Transfers are organized into USB packets, with the details depending
+on the transfer type. Control messages always involve an initial
+8-byte packet from host to peripheral, optionally followed by some
+additional packets; in theory these additional packets can be up to 64
+bytes, but hardware may limit it to 8 bytes. Interrupt transfers
+involve a single packet of up to 64 bytes. Isochronous transfers
+involve a single packet of up to 1024 bytes. Bulk transfers involve
+multiple packets. There will be some number, possibly zero, of 64-byte
+packets. The transfer is terminated by a single packet of less than 64
+bytes. If the transfer involves an exact multiple of 64 bytes than the
+final packet will be 0 bytes, consisting of just a header and checksum
+which typically will be generated by the hardware. There is no
+pre-defined limit on the size of a bulk transfer. Instead higher-level
+protocols are expected to handle this, so for a USB-ethernet
+peripheral the protocol could impose a limit of 1514 bytes of data
+plus maybe some additional protocol overhead.
+</para>
+<para>
+Transfers from the host to a peripheral are addressed not just to that
+peripheral but to a specific endpoint within that peripheral.
+Similarly, the host requests incoming data from a specific endpoint
+rather than from the peripheral as a whole. For example, a combined
+keyboard/touchpad device could provide the keyboard events on endpoint
+1 and the mouse events on endpoint 2. A given USB peripheral can have
+up to 16 endpoints for incoming data and another 16 for outgoing data.
+However, given the comparatively high speed of USB I/O this endpoint
+addressing is typically implemented in hardware rather than software,
+and the hardware will only implement a small number of endpoints.
+Endpoint 0 is generally used only for control messages.
+</para>
+<para>
+In practice, many of these details are irrelevant to application code
+or to class packages. Instead, such higher-level code usually just
+performs blocking <function>read</function> and
+<function>write</function>, or non-blocking USB-specific calls, to
+transfer data between host and target via a specific endpoint. Control
+messages are more complicated but are usually handled by existing
+code.
+</para>
+<para>
+When a USB peripheral is plugged into the host there is an initial
+enumeration and configuration process. The peripheral provides
+information such as its class of device (audio, video, etc.), a
+vendor id, which endpoints should be used for what kind of data, and
+so on. The host OS uses this information to identify a suitable host
+device driver. This could be a generic driver for a class of
+peripherals, or it could be a vendor-specific driver. Assuming a
+suitable driver is installed the host will then activate the USB
+peripheral and perform additional application-specific initialisation.
+For example for a USB-ethernet device this would involve obtaining an
+ethernet MAC address. Most USB peripherals will be fairly simple, but
+it is possible to build multifunction peripherals with multiple
+configurations, interfaces, and alternate interface settings.
+</para>
+<para>
+It is not possible for any of the eCos packages to generate all the
+enumeration data automatically. Some of the required information such
+as the vendor id cannot be supplied by generic packages; only by the
+application developer. Class support code such as the USB-ethernet
+package could in theory supply some of the information automatically,
+but there are also hardware dependencies such as which endpoints get
+used for incoming and outgoing ethernet frames. Instead it is the
+responsibility of the application developer to provide all the
+enumeration data and perform some additional initialisation. In
+addition, the common USB slave package can handle all the standard
+control messages for a simple USB peripheral, but for something like a
+multifunction peripheral additional application support is needed.
+</para>
+
+<note><para>
+The initial implementation of the eCos USB slave packages involved
+hardware that only supported control and bulk transfers, not
+isochronous or interrupt. There may be future changes to the USB
+code and API to allow for isochronous and interrupt transfers,
+especially the former. Other changes may be required to support
+different USB devices. At present there is no support for USB remote
+wakeups, since again it is not supported by the hardware.
+</para></note>
+
+</refsect1>
+
+<refsect1><title>eCos USB I/O Facilities</title>
+<para>
+For protocols other than control messages, eCos provides two ways of
+performing USB I/O. The first involves device table or devtab entries such
+as <link linkend="usbs-devtab"><literal>/dev/usb1r</literal></link>,
+with one entry per endpoint per USB device. It is possible to
+<function>open</function> these devices and use conventional blocking
+I/O functions such as <function>read</function> and
+<function>write</function> to exchange data between host and
+peripheral.
+</para>
+<para>
+There is also a lower-level USB-specific API, consisting of functions
+such as <link
+linkend="usbs-start-rx"><function>usbs_start_rx_buffer</function></link>.
+A USB device driver will supply a data structure for each endpoint,
+for example a <link
+linkend="usbs-data"><structname>usbs_rx_endpoint</structname></link>
+structure for every receive endpoint. The first argument to
+<function>usbs_start_rx_buffer</function> should be a pointer to such
+a data structure. The USB-specific API is non-blocking: the initial
+call merely starts the transfer; some time later, once the transfer
+has completed or has been aborted, the device driver will invoke a
+completion function.
+</para>
+<para>
+Control messages are different. With four different categories of
+control messages including application and vendor specific ones, the
+conventional
+<function>open</function>/<function>read</function>/<function>write</function>
+model of I/O cannot easily be applied. Instead, a USB device driver
+will supply a <link
+linkend="usbs-control"><structname>usbs_control_endpoint</structname></link>
+data structure which can be manipulated appropriately. In practice the
+standard control messages will usually be handled by the common USB
+slave package, and other control messages will be handled by
+class-specific code such as the USB-ethernet package. Typically,
+application code remains responsible for supplying the <link
+linkend="usbs-enum">enumeration data</link> and for actually <link
+linkend="usbs-start">starting</link> up the USB device.
+</para>
+</refsect1>
+
+<refsect1><title>Enabling the USB code</title>
+<para>
+If the target hardware contains a USB slave device then the
+appropriate USB device driver and the common packages will typically
+be loaded into the configuration automatically when that target is
+selected (assuming a suitable device driver exists). However, the
+driver will not necessarily be active. For example a processor might
+have an on-chip USB device, but not all applications using that
+processor will want to use USB functionality. Hence by default the USB
+device is disabled, ensuring that applications do not suffer any
+memory or other penalties for functionality that is not required.
+</para>
+<para>
+If the application developer explicitly adds a class support package
+such as the USB-ethernet one then this implies that the USB device is
+actually needed, and the device will be enabled automatically.
+However, if no suitable class package is available and the USB device
+will instead be accessed by application code, it is necessary to
+enable the USB device manually. Usually the easiest way to do this is
+to enable the configuration option
+<literal>CYGGLO_IO_USB_SLAVE_APPLICATION</literal>, and the USB device
+driver and related packages will adjust accordingly. Alternatively,
+the device driver may provide some configuration options to provide
+more fine-grained control.
+</para>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Enumeration Data               -->
+
+<refentry id="usbs-enum">
+<refmeta>
+<refentrytitle>USB Enumeration Data</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Enumeration Data</refname>
+<refpurpose>The USB enumeration data structures</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<synopsis>
+#include &lt;cyg/io/usb/usb.h&gt;
+#include &lt;cyg/io/usb/usbs.h&gt;
+
+typedef struct usb_device_descriptor {
+    &hellip;
+} usb_device_descriptor __attribute__((packed));
+
+typedef struct usb_configuration_descriptor {
+    &hellip;
+} usb_configuration_descriptor __attribute__((packed));
+
+typedef struct usb_interface_descriptor {
+    &hellip;
+} usb_interface_descriptor __attribute__((packed));        
+
+typedef struct usb_endpoint_descriptor {
+    &hellip;
+} usb_endpoint_descriptor;
+
+typedef struct usbs_enumeration_data {
+    usb_device_descriptor               device;
+    int                                 total_number_interfaces;
+    int                                 total_number_endpoints;
+    int                                 total_number_strings;
+    const usb_configuration_descriptor* configurations;
+    const usb_interface_descriptor*     interfaces;
+    const usb_endpoint_descriptor*      endpoints;
+    const unsigned char**               strings;
+} usbs_enumeration_data;
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1><title>USB Enumeration Data</title>
+<para>
+When a USB host detects that a peripheral has been plugged in or
+powered up, one of the first steps is to ask the peripheral to
+describe itself by supplying enumeration data. Some of this data
+depends on the class of peripheral. Other fields are vendor-specific.
+There is also a dependency on the hardware, specifically which
+endpoints are available should be used. In general it is not possible
+for generic code to provide this information, so it is the
+responsibility of application code to provide a suitable
+<structname>usbs_enumeration_data</structname> data structure and
+install it in the endpoint 0 data structure during initialization.
+This must happen before the USB device is enabled by a call to
+<function>usbs_start</function>, for example:
+</para>
+<programlisting width=72>
+const usbs_enumeration_data usb_enum_data = {
+    &hellip;
+};
+
+int
+main(int argc, char** argv)
+{
+    usbs_sa11x0_ep0.enumeration_data = &amp;usb_enum_data;
+    &hellip;
+    usbs_start(&amp;usbs_sa11x0_ep0);
+    &hellip;
+}
+</programlisting>
+<para>
+For most applications the enumeration data will be static, although
+the <structname>usbs_enumeration_data</structname> structure can be
+filled in at run-time if necessary. Full details of the enumeration
+data can be found in the Universal Serial Bus specification obtainable
+from the <ulink url="http://www.usb.org/">USB Implementers Forum web
+site</ulink>, although the meaning of most fields is fairly obvious.
+The various data structures and utility macros are defined in the
+header files <filename class="headerfile">cyg/io/usb/usb.h</filename>
+and <filename class="headerfile">cyg/io/usb/usbs.h</filename>. Note
+that the example code below makes use of the gcc labelled element
+extension.
+</para>
+
+<refsect2><title><structname>usb_device_descriptor</structname></title>
+<para>
+The main information about a USB peripheral comes from a single
+<structname>usb_device_descriptor</structname> structure, which is
+embedded in the <structname>usbs_enumeration_data</structname>
+structure. A typical example might look like this:
+</para>
+<programlisting width=72>
+const usbs_enumeration_data usb_enum_data = {
+    {
+        length:                 USB_DEVICE_DESCRIPTOR_LENGTH,
+        type:                   USB_DEVICE_DESCRIPTOR_TYPE,
+        usb_spec_lo:            USB_DEVICE_DESCRIPTOR_USB11_LO,
+        usb_spec_hi:            USB_DEVICE_DESCRIPTOR_USB11_HI,
+        device_class:           USB_DEVICE_DESCRIPTOR_CLASS_VENDOR,
+        device_subclass:        USB_DEVICE_DESCRIPTOR_SUBCLASS_VENDOR,
+        device_protocol:        USB_DEVICE_DESCRIPTOR_PROTOCOL_VENDOR,
+        max_packet_size:        8,
+        vendor_lo:              0x42,
+        vendor_hi:              0x42,
+        product_lo:             0x42,
+        product_hi:             0x42,
+        device_lo:              0x00,
+        device_hi:              0x01,
+        manufacturer_str:       1,
+        product_str:            2,
+        serial_number_str:      0,
+        number_configurations:  1
+    },
+    &hellip;
+};
+</programlisting>
+<para>
+The length and type fields are specified by the USB standard. The
+<structfield>usb_spec_lo</structfield> and
+<structfield>usb_spec_hi</structfield> fields identify the particular
+revision of the standard that the peripheral implements, for example
+revision 1.1.
+</para>
+<para>
+The device class, subclass, and protocol fields are used by generic
+host-side USB software to determine which host-side device driver
+should be loaded to interact with the peripheral. A number of standard
+classes are defined, for example mass-storage devices and
+human-interface devices. If a peripheral implements one of the
+standard classes then a standard existing host-side device driver may
+exist, eliminating the need to write a custom driver. The value
+<literal>0xFF</literal> (<literal>VENDOR</literal>) is reserved for
+peripherals that implement a vendor-specific protocol rather than a
+standard one. Such peripherals will require a custom host-side device
+driver. The value <literal>0x00</literal>
+(<literal>INTERFACE</literal>) is reserved and indicates that the
+protocol used by the peripheral is defined at the interface level
+rather than for the peripheral as a whole.
+</para>
+<para>
+The <structfield>max_package_size</structfield> field specifies the
+maximum length of a control message. There is a lower bound of eight
+bytes, and typical hardware will not support anything larger because
+control messages are usually small and not performance-critical.
+</para>
+<para>
+The <structfield>vendor_lo</structfield> and
+<structfield>vendor_hi</structfield> fields specify a vendor id, which
+must be obtained from the USB Implementor's Forum. The numbers used in
+the code fragment above are examples only and must not be used in real
+USB peripherals. The product identifier is determined by the vendor,
+and different USB peripherals should use different identifiers. The
+device identifier field should indicate a release number in
+binary-coded decimal.
+</para>
+<para>
+The above fields are all numerical in nature. A USB peripheral can
+also provide a number of strings as described <link
+linkend="usbs-enum-strings">below</link>, for example the name of the
+vendor can be provided. The various <structfield>_str</structfield>
+fields act as indices into an array of strings, with index 0
+indicating that no string is available. 
+</para>
+<para>
+A typical USB peripheral involves just a single configuration. However
+more complicated peripherals can support multiple configurations. Only
+one configuration will be active at any one time, and the host will
+switch between them as appropriate. If a peripheral does involve
+multiple configurations then typically it will be the responsibility
+of application code to <link
+linkend="usbs-control-standard">handle</link> the standard
+set-configuration control message.
+</para>
+</refsect2>
+
+<refsect2><title><structname>usb_configuration_descriptor</structname></title>
+<para>
+A USB peripheral involves at least one and possible several different
+configurations. The <structname>usbs_enumeration_data</structname>
+structure requires a pointer to an array, possibly of length 1, of
+<structname>usb_configuration_descriptor</structname> structures.
+Usually a single structure suffices:
+</para>
+<programlisting width=72>
+const usb_configuration_descriptor usb_configuration = {
+    length:             USB_CONFIGURATION_DESCRIPTOR_LENGTH,
+    type:               USB_CONFIGURATION_DESCRIPTOR_TYPE,
+    total_length_lo:    USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_LO(1, 2),
+    total_length_hi:    USB_CONFIGURATION_DESCRIPTOR_TOTAL_LENGTH_HI(1, 2),
+    number_interfaces:  1,
+    configuration_id:   1,
+    configuration_str:  0,
+    attributes:         USB_CONFIGURATION_DESCRIPTOR_ATTR_REQUIRED |
+                        USB_CONFIGURATION_DESCRIPTOR_ATTR_SELF_POWERED,
+    max_power:          50
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &hellip;
+    configurations:             &amp;usb_configuration,
+    &hellip;
+};
+</programlisting>
+<para>
+The values for the <structfield>length</structfield> and
+<structfield>type</structfield> fields are determined by the standard.
+The <structfield>total_length</structfield> field depends on the
+number of interfaces and endpoints used by this configuration, and
+convenience macros are provided to calculate this: the first argument
+to the macros specify the number of interfaces, the second the number
+of endpoints. The <structfield>number_interfaces</structfield> field
+is self-explanatory. If the peripheral involves multiple
+configurations then each one must have a unique id, and this will be
+used in the set-configuration control message. The id
+<literal>0</literal> is reserved, and a set-configuration control
+message that uses this id indicates that the peripheral should be
+inactive. Configurations can have a string description if required.
+The <structfield>attributes</structfield> field must have the
+<literal>REQUIRED</literal> bit set; the
+<literal>SELF_POWERED</literal> bit informs the host that the
+peripheral has its own power supply and will not draw any power over
+the bus, leaving more bus power available to other peripherals; the
+<literal>REMOTE_WAKEUP</literal> bit is used if the peripheral can
+interrupt the host when the latter is in power-saving mode. For
+peripherals that are not self-powered, the
+<structfield>max_power</structfield> field specifies the power
+requirements in units of 2mA.
+</para>
+</refsect2>
+
+<refsect2><title><structname>usb_interface_descriptor</structname></title>
+<para>
+A USB configuration involves one or more interfaces, typically
+corresponding to different streams of data. For example, one interface
+might involve video data while another interface is for audio.
+Multiple interfaces in a single configuration will be active at the
+same time.
+</para>
+<programlisting width=72>
+const usb_interface_descriptor usb_interface = {
+    length:             USB_INTERFACE_DESCRIPTOR_LENGTH,
+    type:               USB_INTERFACE_DESCRIPTOR_TYPE,
+    interface_id:       0,
+    alternate_setting:  0,
+    number_endpoints:   2,
+    interface_class:    USB_INTERFACE_DESCRIPTOR_CLASS_VENDOR,
+    interface_subclass: USB_INTERFACE_DESCRIPTOR_SUBCLASS_VENDOR,
+    interface_protocol: USB_INTERFACE_DESCRIPTOR_PROTOCOL_VENDOR,
+    interface_str:      0
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &hellip;
+    total_number_interfaces:    1,
+    interfaces:                 &amp;usb_interface,
+    &hellip;
+};
+</programlisting>
+<para>
+Again, the <structfield>length</structfield> and
+<structfield>type</structfield> fields are specified by the standard.
+Each interface within a configuration requires its own id. However, a
+given interface may have several alternate settings, in other words
+entries in the interfaces array with the same id but different
+<structfield>alternate_setting</structfield> fields. For example,
+there might be one setting which requires a bandwidth of 100K/s and
+another setting that only needs 50K/s. The host can use the standard
+set-interface control message to choose the most appropriate setting.
+The handling of this request is the responsibility of higher-level
+code, so the application may have to <link
+linkend="usbs-control-standard">install</link> its own handler.
+</para>
+<para>
+The number of endpoints used by an interface is specified in the
+<structfield>number_endpoints</structfield> field. Exact details of
+which endpoints are used is held in a separate array of endpoint
+descriptors. The class, subclass and protocol fields are used by
+host-side code to determine which host-side device driver should
+handle this specific interface. Usually this is determined on a
+per-peripheral basis in the
+<structname>usb_device_descriptor</structname> structure, but that can
+defer the details to individual interfaces. A per-interface string
+is allowed as well.
+</para>
+<para>
+For USB peripherals involving multiple configurations, the array of
+<structname>usb_interface_descriptor</structname> structures should
+first contain all the interfaces for the first configuration, then all
+the interfaces for the second configuration, and so on.
+</para>
+</refsect2>
+
+<refsect2><title id="usbs-enum-endpoint"><structname>usb_endpoint_descriptor</structname></title>
+<para>
+The host also needs information about which endpoint should be used
+for what. This involves an array of endpoint descriptors:
+</para>
+<programlisting width=72>
+const usb_endpoint_descriptor usb_endpoints[] = {
+    {
+        length:         USB_ENDPOINT_DESCRIPTOR_LENGTH,
+        type:           USB_ENDPOINT_DESCRIPTOR_TYPE,
+        endpoint:       USB_ENDPOINT_DESCRIPTOR_ENDPOINT_OUT | 1,
+        attributes:     USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
+        max_packet_lo:  64,
+        max_packet_hi:  0,
+        interval:       0
+    },
+    {
+        length:         USB_ENDPOINT_DESCRIPTOR_LENGTH,
+        type:           USB_ENDPOINT_DESCRIPTOR_TYPE,
+        endpoint:       USB_ENDPOINT_DESCRIPTOR_ENDPOINT_IN | 2,
+        attributes:     USB_ENDPOINT_DESCRIPTOR_ATTR_BULK,
+        max_packet_lo:  64,
+        max_packet_hi:  0,
+        interval:       0
+    }
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &hellip;
+    total_number_endpoints:     2,
+    endpoints:                  usb_endpoints,
+    &hellip;
+};
+</programlisting>
+<para>
+As usual the values for the <structfield>length</structfield> and
+<structfield>type</structfield> fields are specified by the standard.
+The <structfield>endpoint</structfield> field gives both the endpoint
+number and the direction, so in the above example endpoint 1 is used
+for OUT (host to peripheral) transfers and endpoint 2 is used for IN
+(peripheral to host) transfers. The
+<structfield>attributes</structfield> field indicates the USB protocol
+that should be used on this endpoint: <literal>CONTROL</literal>,
+<literal>ISOCHRONOUS</literal>, <literal>BULK</literal> or
+<literal>INTERRUPT</literal>. The
+<structfield>max_packet</structfield> field specifies the maximum size
+of a single USB packet. For bulk transfers this will typically be 64
+bytes. For isochronous transfers this can be up to 1023 bytes. For
+interrupt transfers it can be up to 64 bytes, although usually a
+smaller value will be used. The <structfield>interval</structfield>
+field is ignored for control and bulk transfers. For isochronous
+transfers it should be set to 1. For interrupt transfers it can be a
+value between 1 and 255, and indicates the number of milliseconds
+between successive polling operations.
+</para>
+<para>
+For USB peripherals involving multiple configurations or interfaces
+the array of endpoint descriptors should be organized sequentially:
+first the endpoints corresponding to the first interface of the first
+configuration, then the second interface in that configuration, and so
+on; then all the endpoints for all the interfaces in the second
+configuration; etc.
+</para>
+</refsect2>
+
+<refsect2><title id="usbs-enum-strings">Strings</title>
+<para>
+The enumeration data can contain a number of strings with additional
+information. Unicode encoding is used for the strings, and it is
+possible for a peripheral to supply a given string in multiple
+languages using the appropriate characters. The first two bytes of
+each string give a length and type field. The first string is special;
+after the two bytes header it consists of an array of 2-byte language
+id codes, indicating the supported languages. The language code
+0x0409 corresponds to English (United States). 
+</para>
+<programlisting width=72>
+const unsigned char* usb_strings[] = {
+    "\x04\x03\x09\x04",
+    "\x10\x03R\0e\0d\0 \0H\0a\0t\0"
+};
+
+const usbs_enumeration_data usb_enum_data = {
+    &hellip;
+    total_number_strings:       2,
+    strings:                    usb_strings,
+    &hellip;
+};
+</programlisting>
+<para>
+The default handler for standard control messages assumes that the
+peripheral only uses a single language. If this is not the case then
+higher-level code will have to handle the standard get-descriptor
+control messages when a string descriptor is requested.
+</para>
+</refsect2>
+
+<refsect2><title><structname>usbs_enumeration_data</structname></title>
+<para>
+The <structname>usbs_enumeration_data</structname> data structure
+collects together all the various descriptors that make up the
+enumeration data. It is the responsibility of application code to
+supply a suitable data structure and install it in the control
+endpoints's <structfield>enumeration_data</structfield> field before
+the USB device is started.
+</para>
+</refsect2>
+
+</refsect1>
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ usbs_start()                   -->
+
+<refentry id="usbs-start">
+<refmeta>
+<refentrytitle>Starting up a USB Device</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname><function>usbs_start</function></refname>
+<refpurpose>Starting up a USB Device</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<funcsynopsis>
+<funcsynopsisinfo>
+#include &lt;cyg/io/usb/usbs.h&gt;
+</funcsynopsisinfo>
+<funcprototype>
+<funcdef>void <function>usbs_start</function></funcdef>
+<paramdef>usbs_control_endpoint* <parameter>ep0</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+<para>
+Initializing a USB device requires some support from higher-level
+code, typically the application, in the form of enumeration data.
+Hence it is not possible for the low-level USB driver to activate a
+USB device itself. Instead the higher-level code has to take care of
+this by invoking <function>usbs_start</function>. This function takes
+a pointer to a USB control endpoint data structure. USB device drivers
+should provide exactly one such data structure for every USB device,
+so the pointer uniquely identifies the device.
+</para>
+<programlisting width=72>
+const usbs_enumeration_data usb_enum_data = {
+    &hellip;
+};
+
+int
+main(int argc, char** argv)
+{
+    usbs_sa11x0_ep0.enumeration_data = &amp;usb_enum_data;
+    &hellip;
+    usbs_start(&amp;usbs_sa11x0_ep0);
+    &hellip;
+}
+</programlisting>
+<para>
+The exact behaviour of <function>usbs_start</function> depends on the
+USB hardware and the device driver. A typical implementation would
+change the USB data pins from tristated to active. If the peripheral
+is already plugged into a host then the latter should detect this
+change and start interacting with the peripheral, including requesting
+the enumeration data. Some of this may happen before
+<function>usbs_start</function> returns, but given that multiple
+interactions between USB host and peripheral are required it is likely
+that the function will return before the peripheral is fully
+configured. Control endpoints provide a <link
+linkend="usbs-control-state">mechanism</link> for informing
+higher-level code of USB state changes.
+<function>usbs_start</function> will return even if the peripheral is
+not currently connected to a host: it will not block until the
+connection is established.
+</para>
+<para>
+<function>usbs_start</function> should only be called once for a given
+USB device. There are no defined error conditions. Note that the
+function affects the entire USB device and not just the control
+endpoint: there is no need to start any data endpoints as well.
+</para>
+</refsect1>
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Devtab Entries                 -->
+
+<refentry id="usbs-devtab">
+<refmeta>
+<refentrytitle>Devtab Entries</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Devtab Entries</refname>
+<refpurpose>Data endpoint data structure</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<synopsis>
+/dev/usb0c
+/dev/usb1r
+/dev/usb2w
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Devtab Entries</title>
+<para>
+USB device drivers provide two ways of transferring data between host
+and peripheral. The first involves USB-specific functionality such as
+<link
+linkend="usbs-start-rx"><function>usbs_start_rx_buffer</function></link>.
+This provides non-blocking I/O: a transfer is started, and some time
+later the device driver will call a supplied completion function. The
+second uses the conventional I/O model: there are entries in the
+device table corresponding to the various endpoints. Standard calls
+such as <function>open</function> can then be used to get a suitable
+handle. Actual I/O happens via blocking <function>read</function> and
+<function>write</function> calls. In practice the blocking operations
+are simply implemented using the underlying non-blocking
+functionality.
+</para>
+<para>
+Each endpoint will have its own devtab entry. The exact names are
+controlled by the device driver package, but typically the root will
+be <literal>/dev/usb</literal>. This is followed by one or more
+decimal digits giving the endpoint number, followed by
+<literal>c</literal> for a control endpoint, <literal>r</literal> for
+a receive endpoint (host to peripheral), and <literal>w</literal> for
+a transmit endpoint (peripheral to host). If the target hardware
+involves more than one USB device then different roots should be used,
+for example <literal>/dev/usb0c</literal> and
+<literal>/dev/usb1_0c</literal>. This may require explicit
+manipulation of device driver configuration options by the application
+developer.
+</para>
+<para>
+At present the devtab entry for a control endpoint does not support
+any I/O operations. 
+</para>
+
+<refsect2><title><function>write</function> operations</title>
+<para>
+<function>cyg_io_write</function> and similar functions in
+higher-level packages can be used to perform a transfer from
+peripheral to host. Successive write operations will not be coalesced.
+For example, when doing a 1000 byte write to an endpoint that uses the
+bulk transfer protocol this will involve 15 full-size 64-byte packets
+and a terminating 40-byte packet. USB device drivers are not expected
+to do any locking, and if higher-level code performs multiple
+concurrent write operations on a single endpoint then the resulting
+behaviour is undefined.
+</para>
+<para>
+A USB <function>write</function> operation will never transfer less
+data than specified. It is the responsibility of higher-level code to
+ensure that the amount of data being transferred is acceptable to the
+host-side code. Usually this will be defined by a higher-level
+protocol. If an attempt is made to transfer more data than the host
+expects then the resulting behaviour is undefined.
+</para>
+<para>
+There are two likely error conditions. <literal>EPIPE</literal>
+indicates that the connection between host and target has been broken.
+<literal>EAGAIN</literal> indicates that the endpoint has been
+stalled, either at the request of the host or by other activity
+inside the peripheral.
+</para>
+</refsect2>
+
+<refsect2><title><function>read</function> operations</title>
+<para>
+<function>cyg_io_read</function> and similar functions in higher-level
+packages can be used to perform a transfer from host to peripheral.
+This should be a complete transfer: higher-level protocols should
+define an upper bound on the amount of data being transferred, and the
+<function>read</function> operation should involve at least this
+amount of data. The return value will indicate the actual transfer
+size, which may be less than requested.
+</para>
+<para>
+Some device drivers may support partial reads, but USB device drivers
+are not expected to perform any buffering because that involves both
+memory and code overheads. One technique that may work for bulk
+transfers is to exploit the fact that such transfers happen in 64-byte
+packets. It is possible to <function>read</function> an initial 64
+bytes, corresponding to the first packet in the transfer. These 64
+bytes can then be examined to determine the total transfer size, and
+the remaining data can be transferred in another
+<function>read</function> operation. This technique is not guaranteed
+to work with all USB hardware. Also, if the delay between accepting
+the first packet and the remainder of the transfer is excessive then
+this could cause timeout problems for the host-side software. For
+these reasons the use of partial reads should be avoided.
+</para>
+<para>
+There are two likely error conditions. <literal>EPIPE</literal>
+indicates that the connection between host and target has been broken.
+<literal>EAGAIN</literal> indicates that the endpoint has been
+stalled, either at the request of the host or by other activity
+inside the peripheral.
+</para>
+<para>
+USB device drivers are not expected to do any locking. If higher-level
+code performs multiple concurrent read operations on a single endpoint
+then the resulting behaviour is undefined.
+</para>
+</refsect2>
+
+<refsect2><title><function>select</function> operations</title>
+<para>
+Typical USB device drivers will not provide any support for
+<function>select</function>. Consider bulk transfers from the host to
+the peripheral. At the USB device driver level there is no way of
+knowing in advance how large a transfer will be, so it is not feasible
+for the device driver to buffer the entire transfer. It may be
+possible to buffer part of the transfer, for example the first 64-byte
+packet, and copy this into application space at the start of a
+<function>read</function>, but this adds code and memory overheads.
+Worse, it means that there is an unknown but potentially long delay
+between a peripheral accepting the first packet of a transfer and the
+remaining packets, which could confuse or upset the host-side
+software.
+</para>
+<para>
+With some USB hardware it may be possible for the device driver to
+detect OUT tokens from the host without actually accepting the data,
+and this would indicate that a  <function>read</function> is likely to
+succeed. However, it would not be reliable since the host-side I/O
+operation could time out. A similar mechanism could be used to
+implement <function>select</function> for outgoing data, but again
+this would not be reliable.
+</para>
+<para>
+Some device drivers may provide partial support for
+<function>select</function> anyway, possibly under the control of a
+configuration option. The device driver's documentation should be
+consulted for further information. It is also worth noting that the
+USB-specific non-blocking API can often be used as an alternative to
+<function>select</function>.
+</para>
+</refsect2>
+
+<refsect2><title><function>get_config</function> and
+<function>set_config</function> operations</title>
+<para>
+There are no <function>set_config</function> or
+<function>get_config</function> (also known as
+<function>ioctl</function>) operations defined for USB devices.
+Some device drivers may provide hardware-specific facilities this way. 
+</para>
+<note>
+<para>
+Currently the USB-specific functions related to <link
+linkend="usbs-halt">halted endpoints</link> cannot be accessed readily
+via devtab entries. This functionality should probably be made
+available via <function>set_config</function> and
+<function>get_config</function>. It may also prove useful to provide
+a <function>get_config</function> operation that maps from the
+devtab entries to the underlying endpoint data structures.
+</para>
+</note>
+</refsect2>
+
+<refsect2><title>Presence</title>
+<para>
+The devtab entries are optional. If the USB device is accessed
+primarily by class-specific code such as the USB-ethernet package and
+that package uses the USB-specific API directly, the devtab entries
+are redundant. Even if application code does need to access the USB
+device, the non-blocking API may be more convenient than the blocking
+I/O provided via the devtab entries. In these cases the devtab entries
+serve no useful purpose, but they still impose a memory overhead. It
+is possible to suppress the presence of these entries by disabling the
+configuration option
+<literal>CYGGLO_IO_USB_SLAVE_PROVIDE_DEVTAB_ENTRIES</literal>.
+</para>
+</refsect2>
+</refsect1>
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ usbs_start_rx_buffer()         -->
+
+<refentry id="usbs-start-rx">
+<refmeta>
+<refentrytitle>Receiving Data from the Host</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname><function>usbs_start_rx_buffer</function></refname>
+<refpurpose>Receiving Data from the Host</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<funcsynopsis>
+<funcsynopsisinfo>
+#include &lt;cyg/io/usb/usbs.h&gt;
+</funcsynopsisinfo>
+<funcprototype>
+<funcdef>void <function>usbs_start_rx_buffer</function></funcdef>
+<paramdef>usbs_rx_endpoint* <parameter>ep</parameter></paramdef>
+<paramdef>unsigned char* <parameter>buffer</parameter></paramdef>
+<paramdef>int <parameter>length</parameter></paramdef>
+<paramdef>void (*)(void*,int) <parameter>complete_fn</parameter></paramdef>
+<paramdef>void * <parameter>complete_data</parameter></paramdef>
+</funcprototype>
+
+<funcprototype>
+<funcdef>void <function>usbs_start_rx</function></funcdef>
+<paramdef>usbs_rx_endpoint* <parameter>ep</parameter></paramdef>
+</funcprototype>
+
+</funcsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title><function>Description</function></title>
+<para>
+<function>usbs_start_rx_buffer</function> is a USB-specific function
+to accept a transfer from host to peripheral. It can be used for bulk,
+interrupt or isochronous transfers, but not for control messages.
+Instead those involve manipulating the <link
+linkend="usbs-control"><structname>usbs_control_endpoint</structname></link>
+data structure directly. The function takes five arguments:
+</para>
+<orderedlist>
+<listitem>
+<para>
+The first argument identifies the specific endpoint that should be
+used. Different USB devices will support different sets of endpoints
+and the device driver will provide appropriate data structures. The
+device driver's documentation should be consulted for details of which
+endpoints are available.
+</para>
+</listitem>
+<listitem>
+<para>
+The <parameter>buffer</parameter> and <parameter>length</parameter>
+arguments control the actual transfer. USB device drivers are not
+expected to perform any buffering or to support partial transfers, so
+the length specified should correspond to the maximum transfer that is
+currently possible and the buffer should be at least this large. For
+isochronous transfers the USB specification imposes an upper bound of
+1023 bytes, and a smaller limit may be set in the <link
+linkend="usbs-enum-endpoint">enumeration data</link>. Interrupt
+transfers are similarly straightforward with an upper bound of 64
+bytes, or less as per the enumeration data. Bulk transfers are more
+complicated because they can involve multiple 64-byte packets plus a
+terminating packet of less than 64 bytes, so there is no predefined
+limit on the transfer size. Instead it is left to higher-level
+protocols to specify an appropriate upper bound.
+</para>
+<para>
+One technique that may work for bulk transfers is to exploit the fact
+that such transfers happen in 64-byte packets: it may be possible to
+receive an initial 64 bytes, corresponding to the first packet in the
+transfer; these 64 bytes can then be examined to determine the total
+transfer size, and the remaining data can be transferred in another
+receive operation. This technique is not guaranteed to work with all
+USB hardware. Also, if the delay between accepting the first packet and
+the remainder of the transfer is excessive then this could cause
+timeout problems for the host-side software. For these reasons this
+technique should be avoided.
+</para>
+</listitem>
+<listitem>
+<para>
+<function>usbs_start_rx_buffer</function> is non-blocking. It merely
+starts the receive operation, and does not wait for completion. At
+some later point the USB device driver will invoke the completion
+function parameter with two arguments: the completion data defined by
+the last parameter and a result field. A result &gt;=
+<literal>0</literal> indicates a successful transfer of that many
+bytes, which may be less than the upper bound imposed by the
+<parameter>length</parameter> argument. A result &lt;
+<literal>0</literal> indicates an error. The most likely errors are
+<literal>-EPIPE</literal> to indicate that the connection between the
+host and the target has been broken, and <literal>-EAGAIN</literal>
+for when the endpoint has been <link
+linkend="usbs-halt">halted</link>. Specific USB device drivers may
+specify additional error conditions.
+</para>
+</listitem>
+</orderedlist>
+<para>
+The normal sequence of events is that the USB device driver will
+update the appropriate hardware registers. At some point after that
+the host will attempt to send data by transmitting an OUT token
+followed by a data packet, and since a receive operation is now in
+progress the data will be accepted and ACK'd. If there were no receive
+operation then the peripheral would instead generate a NAK. The USB
+hardware will generate an interrupt once the whole packet has been
+received, and the USB device driver will service this interrupt and
+arrange for a DSR to be called. Isochronous and interrupt transfers
+involve just a single packet. However, bulk transfers may involve
+multiple packets so the device driver has to check whether the packet
+was a full 64 bytes or whether it was a terminating packet of less
+than this. When the device driver DSR detects a complete transfer it
+will inform higher-level code by invoking the supplied completion
+function.
+</para>
+<para>
+This means that the completion function will normally be invoked by a
+DSR and not in thread context - although some USB device drivers may
+have a different implementation. Therefore the completion function is
+restricted in what it can do. In particular it must not make any
+calls that will or may block such as locking a mutex or allocating
+memory. The kernel documentation should be consulted for more details
+of DSR's and interrupt handling generally.
+</para>
+<para>
+It is possible that the completion function will be invoked before
+<function>usbs_start_rx_buffer</function> returns. Such an event would
+be unusual because the transfer cannot happen until the next time the
+host tries to send data to this peripheral, but it may happen if for
+example another interrupt happens and a higher priority thread is
+scheduled to run. Also, if the endpoint is currently halted then the
+completion function will be invoked immediately with
+<literal>-EAGAIN</literal>: typically this will happen in the current
+thread rather than in a separate DSR. The completion function is
+allowed to start another transfer immediately by calling
+<function>usbs_start_rx_buffer</function> again.
+</para>
+<para>
+USB device drivers are not expected to perform any locking. It is the
+responsibility of higher-level code to ensure that there is only one
+receive operation for a given endpoint in progress at any one time. If
+there are concurrent calls to
+<function>usbs_start_rx_buffer</function> then the resulting behaviour
+is undefined. For typical USB applications this does not present any
+problems, because only one piece of code will access a given endpoint
+at any particular time.
+</para>
+<para>
+The following code fragment illustrates a very simple use of
+<function>usbs_start_rx_buffer</function> to implement a blocking
+receive, using a semaphore to synchronise between the foreground
+thread and the DSR. For a simple example like this no completion data
+is needed.
+</para>
+<programlisting width=72>
+static int error_code = 0;
+static cyg_sem_t completion_wait;
+
+static void
+completion_fn(void* data, int result)
+{
+    error_code = result;
+    cyg_semaphore_post(&amp;completion_wait);
+}
+
+int
+blocking_receive(usbs_rx_endpoint* ep, unsigned char* buf, int len)
+{
+    error_code = 0;
+    usbs_start_rx_buffer(ep, buf, len, &amp;completion_fn, NULL);
+    cyg_semaphore_wait(&amp;completion_wait);
+    return error_code;
+}
+</programlisting>
+<para>
+There is also a utility function <function>usbs_start_rx</function>. This
+can be used by code that wants to manipulate <link
+linkend="usbs-data">data endpoints</link> directly, specifically the
+<structfield>complete_fn</structfield>,
+<structfield>complete_data</structfield>,
+<structfield>buffer</structfield> and
+<structfield>buffer_size</structfield> fields.
+<function>usbs_start_tx</function> just invokes a function
+supplied by the device driver.
+</para>
+</refsect1>
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ usbs_start_tx_buffer()         -->
+
+<refentry id="usbs-start-tx">
+<refmeta>
+<refentrytitle>Sending Data to the Host</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname><function>usbs_start_tx_buffer</function></refname>
+<refpurpose>Sending Data to the Host</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<funcsynopsis>
+<funcsynopsisinfo>
+#include &lt;cyg/io/usb/usbs.h&gt;
+</funcsynopsisinfo>
+<funcprototype>
+<funcdef>void <function>usbs_start_tx_buffer</function></funcdef>
+<paramdef>usbs_tx_endpoint* <parameter>ep</parameter></paramdef>
+<paramdef>const unsigned char* <parameter>buffer</parameter></paramdef>
+<paramdef>int <parameter>length</parameter></paramdef>
+<paramdef>void (*)(void*,int) <parameter>complete_fn</parameter></paramdef>
+<paramdef>void * <parameter>complete_data</parameter></paramdef>
+</funcprototype>
+
+<funcprototype>
+<funcdef>void <function>usbs_start_tx</function></funcdef>
+<paramdef>usbs_tx_endpoint* <parameter>ep</parameter></paramdef>
+</funcprototype>
+
+</funcsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title><function>Description</function></title>
+<para>
+<function>usbs_start_tx_buffer</function> is a USB-specific function
+to transfer data from peripheral to host. It can be used for bulk,
+interrupt or isochronous transfers, but not for control messages;
+instead those involve manipulating the <link
+linkend="usbs-control"><structname>usbs_control_endpoint</structname></link>
+data structure directly. The function takes five arguments:
+</para>
+<orderedlist>
+<listitem>
+<para>
+The first argument identifies the specific endpoint that should be
+used. Different USB devices will support different sets of endpoints
+and the device driver will provide appropriate data structures. The
+device driver's documentation should be consulted for details of which
+endpoints are available.
+</para>
+</listitem>
+<listitem>
+<para>
+The <parameter>buffer</parameter> and <parameter>length</parameter>
+arguments control the actual transfer. USB device drivers are not
+allowed to modify the buffer during the transfer, so the data can
+reside in read-only memory. The transfer will be for all the data
+specified, and it is the responsibility of higher-level code to make
+sure that the host is expecting this amount of data. For isochronous
+transfers the USB specification imposes an upper bound of 1023 bytes,
+but a smaller limit may be set in the <link
+linkend="usbs-enum-endpoint">enumeration data</link>. Interrupt
+transfers have an upper bound of 64 bytes or less, as per the
+enumeration data. Bulk transfers are more complicated because they can
+involve multiple 64-byte packets plus a terminating packet of less
+than 64 bytes, so the basic USB specification does not impose an upper
+limit on the total transfer size. Instead it is left to higher-level
+protocols to specify an appropriate upper bound. If the peripheral
+attempts to send more data than the host is willing to accept then the
+resulting behaviour is undefined and may well depend on the specific
+host operating system being used.
+</para>
+<para>
+For bulk transfers, the USB device driver or the underlying hardware
+will automatically split the transfer up into the appropriate number
+of full-size 64-byte packets plus a single terminating packet, which
+may be 0 bytes.
+</para>
+</listitem>
+<listitem>
+<para>
+<function>usbs_start_tx_buffer</function> is non-blocking. It merely
+starts the transmit operation, and does not wait for completion. At
+some later point the USB device driver will invoke the completion
+function parameter with two arguments: the completion data defined by
+the last parameter, and a result field. This result will be either an
+error code &lt; <literal>0</literal>, or the amount of data
+transferred which should correspond to the
+<parameter>length</parameter> argument. The most likely errors are
+<literal>-EPIPE</literal> to indicate that the connection between the
+host and the target has been broken, and <literal>-EAGAIN</literal>
+for when the endpoint has been <link
+linkend="usbs-halt">halted</link>. Specific USB device drivers may
+define additional error conditions.
+</para>
+</listitem>
+</orderedlist>
+<para>
+The normal sequence of events is that the USB device driver will
+update the appropriate hardware registers. At some point after that
+the host will attempt to fetch data by transmitting an IN token. Since
+a transmit operation is now in progress the peripheral can send a
+packet of data, and the host will generate an ACK. At this point the
+USB hardware will generate an interrupt, and the device driver will
+service this interrupt and arrange for a DSR to be called. Isochronous
+and interrupt transfers involve just a single packet. However, bulk
+transfers may involve multiple packets so the device driver has to
+check whether there is more data to send and set things up for the
+next packet. When the device driver DSR detects a complete transfer it
+will inform higher-level code by invoking the supplied completion
+function.
+</para>
+<para>
+This means that the completion function will normally be invoked by a
+DSR and not in thread context - although some USB device drivers may
+have a different implementation. Therefore the completion function is
+restricted in what it can do, in particular it must not make any
+calls that will or may block such as locking a mutex or allocating
+memory. The kernel documentation should be consulted for more details
+of DSR's and interrupt handling generally.
+</para>
+<para>
+It is possible that the completion function will be invoked before
+<function>usbs_start_tx_buffer</function> returns. Such an event would
+be unusual because the transfer cannot happen until the next time the
+host tries to fetch data from this peripheral, but it may happen if,
+for example, another interrupt happens and a higher priority thread is
+scheduled to run. Also, if the endpoint is currently halted then the
+completion function will be invoked immediately with
+<literal>-EAGAIN</literal>: typically this will happen in the current
+thread rather than in a separate DSR. The completion function is
+allowed to start another transfer immediately by calling
+<function>usbs_start_tx_buffer</function> again.
+</para>
+<para>
+USB device drivers are not expected to perform any locking. It is the
+responsibility of higher-level code to ensure that there is only one
+transmit operation for a given endpoint in progress at any one time.
+If there are concurrent calls to
+<function>usbs_start_tx_buffer</function> then the resulting behaviour
+is undefined. For typical USB applications this does not present any
+problems because only piece of code will access a given endpoint at
+any particular time.
+</para>
+<para>
+The following code fragment illustrates a very simple use of
+<function>usbs_start_tx_buffer</function> to implement a blocking
+transmit, using a semaphore to synchronise between the foreground
+thread and the DSR. For a simple example like this no completion data
+is needed.
+</para>
+<programlisting width=72>
+static int error_code = 0;
+static cyg_sem_t completion_wait;
+
+static void
+completion_fn(void* data, int result)
+{
+    error_code = result;
+    cyg_semaphore_post(&amp;completion_wait);
+}
+
+int
+blocking_transmit(usbs_tx_endpoint* ep, const unsigned char* buf, int len)
+{
+    error_code = 0;
+    usbs_start_tx_buffer(ep, buf, len, &amp;completion_fn, NULL);
+    cyg_semaphore_wait(&amp;completion_wait);
+    return error_code;
+}
+</programlisting>
+<para>
+There is also a utility function <function>usbs_start</function>. This
+can be used by code that wants to manipulate <link
+linkend="usbs-data">data endpoints</link> directly, specifically the
+<structfield>complete_fn</structfield>,
+<structfield>complete_data</structfield>,
+<structfield>buffer</structfield> and
+<structfield>buffer_size</structfield> fields.
+<function>usbs_start_tx</function> just calls a function supplied by
+the device driver.
+</para>
+</refsect1>
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Halted endpoints               -->
+
+<refentry id="usbs-halt">
+<refmeta>
+<refentrytitle>Halted Endpoints</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Halted Endpoints</refname>
+<refpurpose>Support for Halting and Halted Endpoints</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<funcsynopsis>
+
+<funcsynopsisinfo>
+#include &lt;cyg/io/usb/usbs.h&gt;
+</funcsynopsisinfo>
+
+<funcprototype>
+<funcdef>cyg_bool <function>usbs_rx_endpoint_halted</function></funcdef>
+<paramdef>usbs_rx_endpoint* <parameter>ep</parameter></paramdef>
+</funcprototype>
+<funcprototype>
+<funcdef>void <function>usbs_set_rx_endpoint_halted</function></funcdef>
+<paramdef>usbs_rx_endpoint* <parameter>ep</parameter></paramdef>
+<paramdef>cyg_bool <parameter>new_state</parameter></paramdef>
+</funcprototype>
+<funcprototype>
+<funcdef>void <function>usbs_start_rx_endpoint_wait</function></funcdef>
+<paramdef>usbs_rx_endpoint* <parameter>ep</parameter></paramdef>
+<paramdef>void (*)(void*, int) <parameter>complete_fn</parameter></paramdef>
+<paramdef>void * <parameter>complete_data</parameter></paramdef>
+</funcprototype>
+
+<funcprototype>
+<funcdef>cyg_bool
+<function>usbs_tx_endpoint_halted</function></funcdef>
+<paramdef>usbs_tx_endpoint* <parameter>ep</parameter></paramdef>
+</funcprototype>
+<funcprototype>
+<funcdef>void <function>usbs_set_tx_endpoint_halted</function></funcdef>
+<paramdef>usbs_tx_endpoint* <parameter>ep</parameter></paramdef>
+<paramdef>cyg_bool <parameter>new_state</parameter></paramdef>
+</funcprototype>
+<funcprototype>
+<funcdef>void <function>usbs_start_tx_endpoint_wait</function></funcdef>
+<paramdef>usbs_tx_endpoint* <parameter>ep</parameter></paramdef>
+<paramdef>void (*)(void*, int) <parameter>complete_fn</parameter></paramdef>
+<paramdef>void * <parameter>complete_data</parameter></paramdef>
+</funcprototype>
+
+</funcsynopsis>
+</refsynopsisdiv>
+
+<refsect1><title><function>Description</function></title>
+<para>
+Normal USB traffic involves straightforward handshakes, with either an
+<literal>ACK</literal> to indicate that a packet was transferred
+without errors, or a <literal>NAK</literal> if an error occurred, or
+if a peripheral is currently unable to process another packet from the
+host, or has no packet to send to the host. There is a third form of
+handshake, a <literal>STALL</literal>, which indicates that the
+endpoint is currently <emphasis>halted</emphasis>.
+</para>
+<para>
+When an endpoint is halted it means that the host-side code needs to
+take some sort of recovery action before communication over that
+endpoint can resume. The exact circumstances under which this can
+happen are not defined by the USB specification, but one example would
+be a protocol violation if say the peripheral attempted to transmit
+more data to the host than was permitted by the protocol in use. The
+host can use the standard control messages get-status, set-feature and
+clear-feature to examine and manipulate the halted status of a given
+endpoint. There are USB-specific functions which can be used inside
+the peripheral to achieve the same effect. Once an endpoint has been
+halted the host can then interact with the peripheral using class or
+vendor control messages to perform appropriate recovery, and then the
+halted condition can be cleared.
+</para>
+<para>
+Halting an endpoint does not constitute a device state change, and
+there is no mechanism by which higher-level code can be informed
+immediately. However, any ongoing receive or transmit operations will
+be aborted with an <literal>-EAGAIN</literal> error, and any new
+receives or transmits will fail immediately with the same error.
+</para>
+<para>
+There are six functions to support halted endpoints, one set for
+receive endpoints and another for transmit endpoints, with both sets
+behaving in essentially the same way. The first,
+<function>usbs_rx_endpoint_halted</function>, can be used to determine
+whether or not an endpoint is currently halted: it takes a single
+argument that identifies the endpoint of interest. The second
+function, <function>usbs_set_rx_endpoint_halted</function>, can be
+used to change the halted condition of an endpoint: it takes two
+arguments; one to identify the endpoint and another to specify the new
+state. The last function
+<function>usbs_start_rx_endpoint_wait</function> operates in much the
+same way as <function>usbs_start_rx_buffer</function>: when the
+endpoint is no longer halted the device driver will invoke the
+supplied completion function with a status of 0. The completion
+function has the same signature as that for a transfer operation.
+Often it will be possible to use a single completion function and have
+the foreground code invoke either
+<function>usbs_start_rx_buffer</function> or
+<function>usbs_start_rx_endpoint_wait</function> depending on the
+current state of the endpoint.
+</para>
+</refsect1>
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Control Endpoint               -->
+
+<refentry id="usbs-control">
+<refmeta>
+<refentrytitle>Control Endpoints</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Control Endpoints</refname>
+<refpurpose>Control endpoint data structure</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<synopsis>
+#include &lt;cyg/io/usb/usbs.h&gt;
+
+typedef struct usbs_control_endpoint {
+    *hellip;
+} usbs_control_endpoint;
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1><title><literal>usbs_control_endpoint</literal> Data Structure</title>
+<para>
+The device driver for a USB slave device should supply one
+<structname>usbs_control_endpoint</structname> data structure per USB
+device. This corresponds to endpoint 0 which will be used for all
+control message interaction between the host and that device. The data
+structure is also used for internal management purposes, for example
+to keep track of the current state. In a typical USB peripheral there
+will only be one such data structure in the entire system, but if
+there are multiple USB slave ports, allowing the peripheral to be
+connected to multiple hosts, then there will be a separate data
+structure for each one. The name or names of the data structures are
+determined by the device drivers. For example, the SA11x0 USB device
+driver package provides <literal>usbs_sa11x0_ep0</literal>.
+</para>
+<para>
+The operations on a control endpoint do not fit cleanly into a
+conventional open/read/write I/O model. For example, when the host
+sends a control message to the USB peripheral this may be one of four
+types: standard, class, vendor and reserved. Some or all of the
+standard control messages will be handled automatically by the common
+USB slave package or by the device driver itself. Other standard
+control messages and the other types of control messages may be
+handled by a class-specific package or by application code. Although
+it would be possible to have devtab entries such as
+<literal>/dev/usbs_ep0/standard</literal> and
+<literal>/dev/usbs_ep0/class</literal>, and then support read and
+write operations on these devtab entries, this would add significant
+overhead and code complexity. Instead, all of the fields in the
+control endpoint data structure are public and can be manipulated
+directly by higher level code if and when required. 
+</para>
+<para>
+Control endpoints involve a number of callback functions, with
+higher-level code installing suitable function pointers in the control
+endpoint data structure. For example, if the peripheral involves
+vendor-specific control messages then a suitable handler for these
+messages should be installed. Although the exact details depend on the
+device driver, typically these callback functions will be invoked at
+DSR level rather than thread level. Therefore, only certain eCos
+functions can be invoked; specifically, those functions that are
+guaranteed not to block. If a potentially blocking function such as a
+semaphore wait or a mutex lock operation is invoked from inside the
+callback then the resulting behaviour is undefined, and the system as
+a whole may fail. In addition, if one of the callback functions
+involves significant processing effort then this may adversely affect
+the system's real time characteristics. The eCos kernel documentation
+should be consulted for more details of DSR handling.
+</para>
+
+<refsect2><title>Initialization</title>
+<para>
+The <structname>usbs_control_endpoint</structname> data structure
+contains the following fields related to initialization.
+</para>
+<programlisting width=72>
+typedef struct usbs_control_endpoint {
+    &hellip;
+    const usbs_enumeration_data* enumeration_data;
+    void                         (*start_fn)(usbs_control_endpoint*);
+    &hellip;
+};
+</programlisting>
+<para>
+It is the responsibility of higher-level code, usually the
+application, to define the USB enumeration data. This needs to be
+installed in the control endpoint data structure early on during
+system startup, before the USB device is actually started and any
+interaction with the host is possible. Details of the enumeration data
+are supplied in the section <link linkend="usbs-enum">USB Enumeration
+Data</link>. Typically, the enumeration data is constant for a given
+peripheral, although it can be constructed dynamically if necessary.
+However, the enumeration data cannot change while the peripheral is
+connected to a host: the peripheral cannot easily claim to be a
+keyboard one second and a printer the next.
+</para>
+<para>
+The <structfield>start_fn</structfield> member is normally accessed
+via the utility <link
+linkend="usbs-start"><function>usbs_start</function></link> rather
+than directly. It is provided by the device driver and should be
+invoked once the system is fully initialized and interaction with the
+host is possible. A typical implementation would change the USB data
+pins from tristated to active. If the peripheral is already plugged
+into a host then the latter should detect this change and start
+interacting with the peripheral, including requesting the enumeration
+data.
+</para>
+</refsect2>
+
+<refsect2><title id="usbs-control-state">State</title>
+<para>
+There are three <structname>usbs_control_endpoint</structname> fields
+related to the current state of a USB slave device, plus some state
+constants and an enumeration of the possible state changes:
+</para>
+<programlisting width=72>
+typedef struct usbs_control_endpoint {
+    &hellip;
+    int     state;
+    void    (*state_change_fn)(struct usbs_control_endpoint*, void*,
+                               usbs_state_change, int);
+    void*   state_change_data;
+    &hellip;
+};
+
+#define USBS_STATE_DETACHED             0x01
+#define USBS_STATE_ATTACHED             0x02
+#define USBS_STATE_POWERED              0x03
+#define USBS_STATE_DEFAULT              0x04
+#define USBS_STATE_ADDRESSED            0x05
+#define USBS_STATE_CONFIGURED           0x06
+#define USBS_STATE_MASK                 0x7F
+#define USBS_STATE_SUSPENDED            (1 &lt;&lt; 7)
+
+typedef enum {
+    USBS_STATE_CHANGE_DETACHED          = 1,
+    USBS_STATE_CHANGE_ATTACHED          = 2,
+    USBS_STATE_CHANGE_POWERED           = 3,
+    USBS_STATE_CHANGE_RESET             = 4,    
+    USBS_STATE_CHANGE_ADDRESSED         = 5,
+    USBS_STATE_CHANGE_CONFIGURED        = 6,
+    USBS_STATE_CHANGE_DECONFIGURED      = 7,    
+    USBS_STATE_CHANGE_SUSPENDED         = 8,
+    USBS_STATE_CHANGE_RESUMED           = 9
+} usbs_state_change;
+</programlisting>
+<para>
+The USB standard defines a number of states for a given USB
+peripheral. The initial state is <emphasis>detached</emphasis>, where
+the peripheral is either not connected to a host at all or, from the
+host's perspective, the peripheral has not started up yet because the
+relevant pins are tristated. The peripheral then moves via
+intermediate <emphasis>attached</emphasis> and
+<emphasis>powered</emphasis> states to its default or
+<emphasis>reset</emphasis> state, at which point the host and
+peripheral can actually start exchanging data. The first message is
+from host to peripheral and provides a unique 7-bit address within the
+local USB network, resulting in a state change to
+<emphasis>addressed</emphasis>. The host then requests enumeration
+data and performs other initialization. If everything succeeds the
+host sends a standard set-configuration control message, after which
+the peripheral is <emphasis>configured</emphasis> and expected to be
+up and running. Note that some USB device drivers may be unable to
+distinguish between the <emphasis>detached</emphasis>,
+<emphasis>attached</emphasis> and <emphasis>powered</emphasis> states
+but generally this is not important to higher-level code.
+</para>
+<para>
+A USB host should generate at least one token every millisecond. If a
+peripheral fails to detect any USB traffic for a period of time then
+typically this indicates that the host has entered a power-saving
+mode, and the peripheral should do the same if possible. This
+corresponds to the <emphasis>suspended</emphasis> bit. The actual
+state is a combination of <emphasis>suspended</emphasis> and the
+previous state, for example <emphasis>configured</emphasis> and
+<emphasis>suspended</emphasis> rather than just
+<emphasis>suspended</emphasis>. When the peripheral subsequently
+detects USB traffic it would switch back to the
+<emphasis>configured</emphasis> state.
+</para>
+<para>
+The USB device driver and the common USB slave package will maintain
+the current state in the control endpoint's
+<structfield>state</structfield> field. There should be no need for
+any other code to change this field, but it can be examined whenever
+appropriate. In addition whenever a state change occurs the generic
+code can invoke a state change callback function. By default, no such
+callback function will be installed. Some class-specific packages such
+as the USB-ethernet package will install a suitable function to keep
+track of whether or not the host-peripheral connection is up, that is
+whether or not ethernet packets can be exchanged. Application code can
+also update this field. If multiple parties want to be informed of
+state changes, for example both a class-specific package and
+application code, then typically the application code will install its
+state change handler after the class-specific package and is
+responsible for chaining into the package's handler.
+</para>
+<para>
+The state change callback function is invoked with four arguments. The
+first identifies the control endpoint. The second is an arbitrary
+pointer: higher-level code can fill in the
+<structfield>state_change_data</structfield> field to set this. The
+third argument specifies the state change that has occurred, and the
+last argument supplies the previous state (the new state is readily
+available from the control endpoint structure).
+</para>
+<para>
+eCos does not provide any utility functions for updating or examining
+the <structfield>state_change_fn</structfield> or
+<structfield>state_change_data</structfield> fields. Instead, it is
+expected that the fields in the
+<structname>usbs_control_endpoint</structname> data structure will be
+manipulated directly. Any utility functions would do just this, but
+at the cost of increased code and cpu overheads.
+</para>
+</refsect2>
+
+<refsect2><title id="usbs-control-standard">Standard Control Messages</title>
+<programlisting width=88>
+typedef struct usbs_control_endpoint {
+    &hellip;
+    unsigned char       control_buffer[8];
+    usbs_control_return (*standard_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               standard_control_data;
+    &hellip;
+} usbs_control_endpoint;
+
+typedef enum {
+    USBS_CONTROL_RETURN_HANDLED = 0,
+    USBS_CONTROL_RETURN_UNKNOWN = 1,
+    USBS_CONTROL_RETURN_STALL   = 2
+} usbs_control_return;
+
+extern usbs_control_return usbs_handle_standard_control(struct usbs_control_endpoint*);
+</programlisting>
+<para>
+When a USB peripheral is connected to the host it must always respond
+to control messages sent to endpoint 0. Control messages always
+consist of an initial eight-byte header, containing fields such as a
+request type. This may be followed by a further data transfer, either
+from host to peripheral or from peripheral to host. The way this is
+handled is described in the <link
+linkend="usbs-control-buffer">Buffer Management</link> section below.
+</para>
+<para>
+The USB device driver will always accept the initial eight-byte
+header, storing it in the <structfield>control_buffer</structfield>
+field. Then it determines the request type: standard, class, vendor,
+or reserved. The way in which the last three of these are processed is
+described in the section <link linkend="usbs-control-other">Other
+Control Messages</link>. Some
+standard control messages will be handled by the device driver itself;
+typically the <emphasis>set-address</emphasis> request and the
+<emphasis>get-status</emphasis>, <emphasis>set-feature</emphasis> and
+<emphasis>clear-feature</emphasis> requests when applied to endpoints.
+</para>
+<para>
+If a standard control message cannot be handled by the device driver
+itself, the driver checks the
+<structfield>standard_control_fn</structfield> field in the control
+endpoint data structure. If higher-level code has installed a suitable
+callback function then this will be invoked with two argument, the
+control endpoint data structure itself and the
+<structfield>standard_control_data</structfield> field. The latter
+allows the higher level code to associate arbitrary data with the
+control endpoint. The callback function can return one of three
+values: <emphasis>HANDLED</emphasis> to indicate that the request has
+been processed; <emphasis>UNKNOWN</emphasis> if the message should be
+handled by the default code; or <emphasis>STALL</emphasis> to indicate
+an error condition. If higher level code has not installed a callback
+function or if the callback function has returned
+<emphasis>UNKNOWN</emphasis> then the device driver will invoke a
+default handler, <function>usbs_handle_standard_control</function>
+provided by the common USB slave package.
+</para>
+<para>
+The default handler can cope with all of the standard control messages
+for a simple USB peripheral. However, if the peripheral involves
+multiple configurations, multiple interfaces in a configuration, or
+alternate settings for an interface, then this cannot be handled by
+generic code. For example, a multimedia peripheral may support various
+alternate settings for a given data source with different bandwidth
+requirements, and the host can select a setting that takes into
+account the current load. Clearly higher-level code needs to be aware
+when the host changes the current setting, so that it can adjust the
+rate at which data is fed to or retrieved from the host. Therefore the
+higher-level code needs to install its own standard control callback
+and process appropriate messages, rather than leaving these to the
+default handler.
+</para>
+<para>
+The default handler will take care of the
+<emphasis>get-descriptor</emphasis> request used to obtain the
+enumeration data. It has support for string descriptors but ignores
+language encoding issues. If language encoding is important for the
+peripheral then this will have to be handled by an
+application-specific standard control handler.
+</para>
+<para>
+The header file <filename
+class="headerfile">&lt;cyg/io/usb/usb.h&gt;</filename> defines various
+constants related to control messages, for example the function codes
+corresponding to the standard request types. This header file is
+provided by the common USB package, not by the USB slave package,
+since the information is also relevant to USB hosts.
+</para>
+</refsect2>
+
+<refsect2><title id="usbs-control-other">Other Control Messages</title>
+<programlisting width=88>
+typedef struct usbs_control_endpoint {
+    &hellip;
+    usbs_control_return (*class_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               class_control_data;
+    usbs_control_return (*vendor_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               vendor_control_data;
+    usbs_control_return (*reserved_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               reserved_control_data;
+    &hellip;
+} usbs_control_endpoint;
+</programlisting>
+<para>
+Non-standard control messages always have to be processed by
+higher-level code. This could be class-specific packages. For example,
+the USB-ethernet package will handle requests for getting the MAC
+address and for enabling or disabling promiscuous mode. In all cases
+the device driver will store the initial request in the
+<structfield>control_buffer</structfield> field, check for an
+appropriate handler, and invoke it with details of the control
+endpoint and any handler-specific data that has been installed
+alongside the handler itself. The handler should return either
+<literal>USBS_CONTROL_RETURN_HANDLED</literal> to report success or
+<literal>USBS_CONTROL_RETURN_STALL</literal> to report failure. The
+device driver will report this to the host.
+</para>
+<para>
+If there are multiple parties interested in a particular type of
+control messages, it is the responsibility of application code to
+install an appropriate handler and process the requests appropriately. 
+</para>
+</refsect2>
+
+<refsect2><title id="usbs-control-buffer">Buffer Management</title>
+<programlisting width=76>
+typedef struct usbs_control_endpoint {
+    &hellip;
+    unsigned char*      buffer;
+    int                 buffer_size;
+    void                (*fill_buffer_fn)(struct usbs_control_endpoint*);
+    void*               fill_data;
+    int                 fill_index;
+    usbs_control_return (*complete_fn)(struct usbs_control_endpoint*, int);
+    &hellip;
+} usbs_control_endpoint;
+</programlisting>
+<para>
+Many USB control messages involve transferring more data than just the
+initial eight-byte header. The header indicates the direction of the
+transfer, OUT for host to peripheral or IN for peripheral to host.
+It also specifies a length field, which is exact for an OUT transfer
+or an upper bound for an IN transfer. Control message handlers can
+manipulate six fields within the control endpoint data structure to
+ensure that the transfer happens correctly.
+</para>
+<para>
+For an OUT transfer, the handler should examine the length field in
+the header and provide a single buffer for all the data. A
+class-specific protocol would typically impose an upper bound on the
+amount of data, allowing the buffer to be allocated statically.
+The handler should update the <structfield>buffer</structfield> and
+<structfield>complete_fn</structfield> fields. When all the data has
+been transferred the completion callback will be invoked, and its
+return value determines the response sent back to the host. The USB
+standard allows for a new control message to be sent before the
+current transfer has completed, effectively cancelling the current
+operation. When this happens the completion function will also be
+invoked. The second argument to the completion function specifies what
+has happened, with a value of 0 indicating success and an error code
+such as <literal>-EPIPE</literal> or <literal>-EIO</literal>
+indicating that the current transfer has been cancelled.
+</para>
+<para>
+IN transfers are a little bit more complicated. The required
+information, for example the enumeration data, may not be in a single
+contiguous buffer. Instead a mechanism is provided by which the buffer
+can be refilled, thus allowing the transfer to move from one record to
+the next. Essentially, the transfer operates as follows:
+</para>
+<orderedlist>
+<listitem>
+<para>
+When the host requests another chunk of data (typically eight bytes),
+the USB device driver will examine the
+<structfield>buffer_size</structfield> field. If non-zero then
+<structfield>buffer</structfield> contains at least one more byte of
+data, and then <structfield>buffer_size</structfield> is decremented.
+</para>
+</listitem>
+<listitem>
+<para>
+When <structfield>buffer_size</structfield> has dropped to 0, the
+<structfield>fill_buffer_fn</structfield> field will be examined. If
+non-null it will be invoked to refill the buffer.
+</para>
+</listitem>
+<listitem>
+<para>
+The <structfield>fill_data</structfield> and
+<structfield>fill_index</structfield> fields are not used by the
+device driver. Instead these fields are available to the refill
+function to keep track of the current state of the transfer.
+</para>
+</listitem>
+<listitem>
+<para>
+When <structfield>buffer_size</structfield> is 0 and
+<structfield>fill_buffer_fn</structfield> is NULL, no more data is
+available and the transfer has completed.
+</para>
+</listitem>
+<listitem>
+<para>
+Optionally a completion function can be installed. This will be
+invoked with 0 if the transfer completes successfully, or with an
+error code if the transfer is cancelled because of another control
+messsage. 
+</para>
+</listitem>
+</orderedlist>
+<para>
+If the requested data is contiguous then the only fields that need
+to be manipulated are <structfield>buffer</structfield> and
+<structfield>buffer_size</structfield>, and optionally
+<structfield>complete_fn</structfield>. If the requested data is not
+contiguous then the initial control message handler should update
+<structfield>fill_buffer_fn</structfield> and some or all of the other
+fields, as required. An example of this is the handling of the
+standard <emphasis>get-descriptor</emphasis> control message by
+<function>usbs_handle_standard_control</function>.
+</para>
+</refsect2>
+
+<refsect2><title>Polling Support</title>
+<programlisting width=72>
+typedef struct usbs_control_endpoint {
+    void                (*poll_fn)(struct usbs_control_endpoint*);
+    int                 interrupt_vector;
+    &hellip;
+} usbs_control_endpoint;
+</programlisting>
+<para>
+In nearly all circumstances USB I/O should be interrupt-driven.
+However, there are special environments such as RedBoot where polled
+operation may be appropriate. If the device driver can operate in
+polled mode then it will provide a suitable function via the
+<structfield>poll_fn</structfield> field, and higher-level code can
+invoke this regularly. This polling function will take care of all
+endpoints associated with the device, not just the control endpoint.
+If the USB hardware involves a single interrupt vector then this will
+be identified in the data structure as well.
+</para>
+</refsect2>
+
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Data Endpoints                 -->
+
+<refentry id="usbs-data">
+<refmeta>
+<refentrytitle>Data Endpoints</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Data Endpoints</refname>
+<refpurpose>Data endpoint data structures</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<synopsis>
+#include &lt;cyg/io/usb/usbs.h&gt;
+
+typedef struct usbs_rx_endpoint {
+    void                 (*start_rx_fn)(struct usbs_rx_endpoint*);
+    void                 (*set_halted_fn)(struct usbs_rx_endpoint*, cyg_bool);
+    void                 (*complete_fn)(void*, int);
+    void*                complete_data;
+    unsigned char*       buffer;
+    int                  buffer_size;
+    cyg_bool             halted;
+} usbs_rx_endpoint;
+
+typedef struct usbs_tx_endpoint {
+    void                 (*start_tx_fn)(struct usbs_tx_endpoint*);
+    void                 (*set_halted_fn)(struct usbs_tx_endpoint*, cyg_bool);
+    void                 (*complete_fn)(void*, int);
+    void*                complete_data;
+    const unsigned char* buffer;
+    int                  buffer_size;
+    cyg_bool             halted;
+} usbs_tx_endpoint;
+</synopsis>
+</refsynopsisdiv>
+
+<refsect1><title>Receive and Transmit Data Structures</title>
+<para>
+In addition to a single <structname>usbs_control_endpoint</structname>
+data structure per USB slave device, the USB device driver should also
+provide receive and transmit data structures corresponding to the
+other endpoints. The names of these are determined by the device
+driver. For example, the SA1110 USB device driver package provides
+<literal>usbs_sa11x0_ep1</literal> for receives and
+<literal>usbs_sa11x0_ep2</literal> for transmits.
+</para>
+<para>
+Unlike control endpoints, the common USB slave package does provide a
+number of utility routines to manipulate data endpoints. For example
+<link
+linkend="usbs-start-rx"><function>usbs_start_rx_buffer</function></link>
+can be used to receive data from the host into a buffer. In addition
+the USB device driver can provide devtab entries such as
+<literal>/dev/usbs1r</literal> and <literal>/dev/usbs2w</literal>, so
+higher-level code can <function>open</function> these devices and then
+perform blocking <function>read</function> and
+<function>write</function> operations.
+</para>
+<para>
+However, the operation of data endpoints and the various
+endpoint-related functions is relatively straightforward. First
+consider a <structname>usbs_rx_endpoint</structname> structure. The
+device driver will provide the members
+<structfield>start_rx_fn</structfield> and
+<structfield>set_halted_fn</structfield>, and it will maintain the
+<structfield>halted</structfield> field. To receive data, higher-level
+code sets the <structfield>buffer</structfield>,
+<structfield>buffer_size</structfield>,
+<structfield>complete_fn</structfield> and optionally the
+<structfield>complete_data</structfield> fields. Next the
+<structfield>start_rx_fn</structfield> member should be called. When
+the transfer has finished the device driver will invoke the completion
+function, using <structfield>complete_data</structfield> as the first
+argument and a size field for the second argument. A negative size
+indicates an error of some sort: <literal>-EGAIN</literal> indicates
+that the endpoint has been halted, usually at the request of the host;
+<literal>-EPIPE</literal> indicates that the connection between the
+host and the peripheral has been broken. Certain device drivers may
+generate other error codes.
+</para>
+<para>
+If higher-level code needs to halt or unhalt an endpoint then it can
+invoke the <structfield>set_halted_fn</structfield> member. When an
+endpoint is halted, invoking <structfield>start_rx_fn</structfield>
+wit <structfield>buffer_size</structfield> set to 0 indicates that
+higher-level code wants to block until the endpoint is no longer
+halted; at that point the completion function will be invoked.
+</para>
+<para>
+USB device drivers are allowed to assume that higher-level protocols
+ensure that host and peripheral agree on the amount of data that will
+be transferred, or at least on an upper bound. Therefore there is no
+need for the device driver to maintain its own buffers, and copy
+operations are avoided. If the host sends more data than expected then
+the resulting behaviour is undefined.
+</para>
+<para>
+Transmit endpoints work in essentially the same way as receive
+endpoints. Higher-level code should set the
+<structfield>buffer</structfield> and
+<structfield>buffer_size</structfield> fields to point at the data to
+be transferred, then call <structfield>start_tx_fn</structfield>, and
+the device driver will invoked the completion function when the
+transfer has completed.
+</para>
+<para>
+USB device drivers are not expected to perform any locking. If at any
+time there are two concurrent receive operations for a given endpoint,
+or two concurrent transmit operations, then the resulting behaviour is
+undefined. It is the responsibility of higher-level code to perform
+any synchronisation that may be necessary. In practice, conflicts are
+unlikely because typically a given endpoint will only be accessed
+sequentially by just one part of the overall system.
+</para>
+
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+<!-- {{{ Writing a USB Device Driver    -->
+
+<refentry id="usbs-writing">
+<refmeta>
+<refentrytitle>Writing a USB Device Driver</refentrytitle>
+</refmeta>
+<refnamediv>
+<refname>Writing a USB Device Driver</refname>
+<refpurpose>USB Device Driver Porting Guide</refpurpose>
+</refnamediv>
+
+<refsect1><title>Introduction</title>
+<para>
+Often the best way to write a USB device driver will be to start with
+an existing one and modify it as necessary. The information given here
+is intended primarily as an outline rather than as a complete guide.
+</para>
+<note>
+<para>
+At the time of writing only one USB device driver has been
+implemented. Hence it is possible, perhaps probable, that some
+portability issues have not yet been addressed. One issue
+involves the different types of transfer, for example the initial
+target hardware had no support for isochronous or interrupt transfers,
+so additional functionality may be needed to switch between transfer
+types. Another issue would be hardware where a given endpoint number,
+say endpoint 1, could be used for either receiving or transmitting
+data, but not both because a single fifo is used. Issues like these
+will have to be resolved as and when additional USB device drivers are
+written.
+</para>
+</note>
+</refsect1>
+
+<refsect1><title>The Control Endpoint</title>
+<para>
+A USB device driver should provide a single <link
+linkend="usbs-control"><structname>usbs_control_endpoint</structname></link>
+data structure for every USB device. Typical peripherals will have
+only one USB port so there will be just one such data structure in the
+entire system, but theoretically it is possible to have multiple USB
+devices. These may all involve the same chip, in which case a single
+device driver should support multiple device instances, or they may
+involve different chips. The name or names of these data structures
+are determined by the device driver, but appropriate care should be
+taken to avoid name clashes. 
+</para>
+<para>
+A USB device cannot be used unless the control endpoint data structure
+exists. However, the presence of USB hardware in the target processor
+or board does not guarantee that the application will necessarily want
+to use that hardware. To avoid unwanted code or data overheads, the
+device driver can provide a configuration option to determine whether
+or not the endpoint 0 data structure is actually provided. A default
+value of <literal>CYGINT_IO_USB_SLAVE_CLIENTS</literal> ensures that
+the USB driver will be enabled automatically if higher-level code does
+require USB support, while leaving ultimate control to the user.
+</para>
+<para>
+The USB device driver is responsible for filling in the
+<structfield>start_fn</structfield>,
+<structfield>poll_fn</structfield> and
+<structfield>interrupt_vector</structfield> fields. Usually this can
+be achieved by static initialization. The driver is also largely
+responsible for maintaining the <structfield>state</structfield>
+field. The <structfield>control_buffer</structfield> array should be
+used to hold the first packet of a control message. The
+<structfield>buffer</structfield> and other fields related to data
+transfers will be managed <link
+linkend="usbs-control-buffer">jointly</link> by higher-level code and
+the device driver. The remaining fields are generally filled in by
+higher-level code, although the driver should initialize them to NULL
+values.
+</para>
+<para>
+Hardware permitting, the USB device should be inactive until the
+<structfield>start_fn</structfield> is invoked, for example by
+tristating the appropriate pins. This prevents the host from
+interacting with the peripheral before all other parts of the system
+have initialized. It is expected that the
+<structfield>start_fn</structfield> will only be invoked once, shortly
+after power-up.
+</para>
+<para>
+Where possible the device driver should detect state changes, such as
+when the connection between host and peripheral is established, and
+<link linkend="usbs-control-state">report</link> these to higher-level
+code via the <structfield>state_change_fn</structfield> callback, if
+any. The state change to and from configured state cannot easily be
+handled by the device driver itself, instead higher-level code such as
+the common USB slave package will take care of this.
+</para>
+<para>
+Once the connection between host and peripheral has been established,
+the peripheral must be ready to accept control messages at all times,
+and must respond to these within certain time constraints. For
+example, the standard set-address control message must be handled
+within 50ms. The USB specification provides more information on these
+constraints. The device driver is responsible for receiving the
+initial packet of a control message. This packet will always be eight
+bytes and should be stored in the
+<structfield>control_buffer</structfield> field. Certain standard
+control messages should be detected and handled by the device driver
+itself. The most important is set-address, but usually the get-status,
+set-feature and clear-feature requests when applied to halted
+endpoints should also be handled by the driver. Other standard control
+messages should first be passed on to the
+<structfield>standard_control_fn</structfield> callback (if any), and
+finally to the default handler
+<function>usbs_handle_standard_control</function> provided by the
+common USB slave package. Class, vendor and reserved control messages
+should always be dispatched to the appropriate callback and there is
+no default handler for these.
+</para>
+<para>
+Some control messages will involve further data transfer, not just the
+initial packet. The device driver must handle this in accordance with
+the USB specification and the <link
+linkend="usbs-control-buffer">buffer management strategy</link>. The
+driver is also responsible for keeping track of whether or not the
+control operation has succeeded and generating an ACK or STALL
+handshake. 
+</para>
+<para>
+The polling support is optional and may not be feasible on all
+hardware. It is only used in certain specialised environments such as
+RedBoot. A typical implementation of the polling function would just
+check whether or not an interrupt would have occurred and, if so, call
+the same code that the interrupt handler would.
+</para>
+</refsect1>
+
+<refsect1><title>Data Endpoints</title>
+<para>
+In addition to the control endpoint data structure, a USB device
+driver should also provide appropriate <link linkend="usbs-data">data
+endpoint</link> data structures. Obviously this is only relevant if
+the USB support generally is desired, that is if the control endpoint is
+provided. In addition, higher-level code may not require all the
+endpoints, so it may be useful to provide configuration options that
+control the presence of each endpoint. For example, the intended
+application might only involve a single transmit endpoint and of
+course control messages, so supporting receive endpoints might waste
+memory.
+</para>
+<para>
+Conceptually, data endpoints are much simpler than the control
+endpoint. The device driver has to supply two functions, one for
+data transfers and another to control the halted condition. These
+implement the functionality for
+<link linkend="usbs-start-rx"><function>usbs_start_rx_buffer</function></link>,
+<link linkend="usbs-start-tx"><function>usbs_start_tx_buffer</function></link>,
+<link linkend="usbs-halt"><function>usbs_set_rx_endpoint_halted</function></link> and
+<link linkend="usbs-halt"><function>usbs_set_tx_endpoint_halted</function></link>.
+The device driver is also responsible for maintaining the
+<structfield>halted</structfield> status.
+</para>
+<para>
+For data transfers, higher-level code will have filled in the
+<structfield>buffer</structfield>,
+<structfield>buffer_size</structfield>,
+<structfield>complete_fn</structfield> and
+<structfield>complete_data</structfield> fields. The transfer function
+should arrange for the transfer to start, allowing the host to send or
+receive packets. Typically this will result in an interrupt at the end
+of the transfer or after each packet. Once the entire transfer has
+been completed, the driver's interrupt handling code should invoke the
+completion function. This can happen either in DSR context or thread
+context, depending on the driver's implementation. There are a number
+of special cases to consider. If the endpoint is halted when the
+transfer is started then the completion function can be invoked
+immediately with <literal>-EAGAIN</literal>. If the transfer cannot be
+completed because the connection is broken then the completion
+function should be invoked with <literal>-EPIPE</literal>. If the
+endpoint is stalled during the transfer, either because of a standard
+control message or because higher-level code calls the appropriate
+<structfield>set_halted_fn</structfield>, then again the completion
+function should be invoked with <literal>-EAGAIN</literal>. Finally,
+the <<function>usbs_start_rx_endpoint_wait</function> and
+<function>usbs_start_tx_endpoint_wait</function> functions involve
+calling the device driver's data transfer function with a buffer size
+of 0 bytes.
+</para>
+</refsect1>
+
+<refsect1><title>Devtab Entries</title>
+<para>
+For some applications or higher-level packages it may be more
+convenient to use traditional open/read/write I/O calls rather than
+the non-blocking USB I/O calls. To support this the device driver can
+provide a devtab entry for each endpoint, for example:
+</para>
+<programlisting width=72>
+#ifdef CYGVAR_DEVS_USB_SA11X0_EP1_DEVTAB_ENTRY
+
+static CHAR_DEVIO_TABLE(usbs_sa11x0_ep1_devtab_functions,
+                        &amp;cyg_devio_cwrite,
+                        &amp;usbs_devtab_cread,
+                        &amp;cyg_devio_bwrite,
+                        &amp;cyg_devio_bread,
+                        &amp;cyg_devio_select,
+                        &amp;cyg_devio_get_config,
+                        &amp;cyg_devio_set_config);
+
+static CHAR_DEVTAB_ENTRY(usbs_sa11x0_ep1_devtab_entry,
+                         CYGDAT_DEVS_USB_SA11X0_DEVTAB_BASENAME "1r",
+                         0,
+                         &amp;usbs_sa11x0_ep1_devtab_functions,
+                         &amp;usbs_sa11x0_devtab_dummy_init,
+                         0,
+                         (void*) &amp;usbs_sa11x0_ep1);
+#endif
+</programlisting>
+<para>
+Again care must be taken to avoid name clashes. This can be achieved
+by having a configuration option to control the base name, with a
+default value of e.g. <literal>/dev/usbs</literal>, and appending an
+endpoint-specific string. This gives the application developer
+sufficient control to eliminate any name clashes. The common USB slave
+package provides functions <function>usbs_devtab_cwrite</function> and
+<function>usbs_devtab_cread</function>, which can be used in the
+function tables for transmit and receive endpoints respectively. The
+private field <structfield>priv</structfield> of the devtab entry
+should be a pointer to the underlying endpoint data structure.
+</para>
+<para>
+Because devtab entries are never accessed directly, only indirectly,
+they would usually be eliminated by the linker. To avoid this the
+devtab entries should normally be defined in a separate source file
+which ends up the special library <filename>libextras.a</filename>
+rather than in the default library <filename>libtarget.a</filename>.
+</para>
+<para>
+Not all applications or higher-level packages will want to use the
+devtab entries and the blocking I/O facilities. It may be appropriate
+for the device driver to provide additional configuration options that
+control whether or not any or all of the devtab entries should be
+provided, to avoid unnecessary memory overheads.
+</para>
+</refsect1>
+
+<refsect1><title>Interrupt Handling</title>
+<para>
+A typical USB device driver will need to service interrupts for all of
+the endpoints and possibly for additional USB events such as entering
+or leaving suspended mode. Usually these interrupts need not be
+serviced directly by the ISR. Instead, they can be left to a DSR. If
+the peripheral is not able to accept or send another packet just yet,
+the hardware will generate a NAK and the host will just retry a little
+bit later. If high throughput is required then it may be desirable to
+handle the bulk transfer protocol largely at ISR level, that is take
+care of each packet in the ISR and only activate the DSR once the
+whole transfer has completed.
+</para>
+<para>
+Control messages may involve invoking arbitrary callback functions in
+higher-level code. This should normally happen at DSR level. Doing it
+at ISR level could seriously affect the system's interrupt latency and
+impose unacceptable constraints on what operations can be performed by
+those callbacks. If the device driver requires a thread anyway then it
+may be appropriate to use this thread for invoking the callbacks, but
+usually it is not worthwhile to add a new thread to the system just
+for this; higher-level code is expected to write callbacks that
+function sensibly at DSR level. Much the same applies to the
+completion functions associated with data transfers. These should also
+be invoked at DSR or thread level.
+</para>
+</refsect1>
+
+</refentry>
+
+<!-- }}} -->
+
+</reference>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/include/usbs.h
@@ -0,0 +1,353 @@
+#ifndef CYGONCE_USBS_H
+# define CYGONCE_USBS_H
+//==========================================================================
+//
+//      include/usbs.h
+//
+//      The generic USB slave-side support
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/
+//
+// 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 Original Code is eCos - Embedded Configurable Operating System,
+// released September 30, 1998.
+//
+// The Initial Developer of the Original Code is Red Hat.
+// Portions created by Red Hat are
+// Copyright (C) 2000, 2001 Red Hat, Inc.
+// All Rights Reserved.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+// Purpose:
+// Description:  USB slave-side support
+//
+//
+//####DESCRIPTIONEND####
+//==========================================================================
+
+# include <pkgconf/system.h>
+# include <cyg/infra/cyg_type.h>
+# include <cyg/io/usb/usb.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+// The USB slave-side eCos support involves a number of different
+// components:
+//
+// 1) a hardware-specific package to drive a specific chip implementation.
+//    This provides access to the endpoints. All the hardware-specific
+//    packages implement a common interface.
+//
+// 2) a common package (this one). This defines the interface implemented
+//    by the hardware-specific packages. It also provides support for
+//    the various generic control messages, using information provided
+//    by higher-level code and invoking callbacks as appropriate.
+//
+// 3) some number of support packages for particular types of
+//    application, for example ethernet or mass-storage.
+//
+// Typically there will only be one USB slave device, although the design
+// does allow for multiple devices. Each device should provide a
+// usbs_control_endpoint structure and zero or more usbs_data_endpoint
+// structures. Each usbs_data_endpoint structure supports uni-directional
+// transfers on a single endpoint. If an endpoint can support multiple
+// types of transfer then there will be some control operation to switch
+// between bulk, interrupt and isochronous.
+//
+// Access to the USB endpoints can go either via usbs_ calls which
+// take a usbs_endpoint structure, or via open/read/write calls. The
+// latter is more likely to be used in application code since it
+// involves a familiar interface. The former is more appropriate for
+// eCos packages layered on top of the USB code. The difference is
+// synchronous vs. asynchronous: the open/read/write model involves
+// blocking operations, implying a need for extra threads; the usbs_
+// calls involve start operations and a completion callback. In
+// practice the read and write calls are implemented using the
+// lower-level code.
+
+// Enumeration data. This requires information about the hardware,
+// specifically what endpoints are available and what they get used
+// for. It also requires information about the application class
+// packages that are in the configuration, and quite possibly about
+// things in application space. Some of the enumeration info such as
+// the vendor id is inherently application-specific. Hence there is no
+// way of generating part or all of the the enumeration information
+// automatically, instead it is up to application code to supply this.
+//
+// The intention is that application provides all the data via const
+// static objects, allowing the data to live in ROM. Alternatively the
+// data structures can go into the .data section as normal, allowing
+// them to be edited at run-time.
+//
+// There can be only one device descriptor, so that is part of the
+// main enumeration data structure. There can be an unknown number of
+// configurations so application code has to initialize an array of
+// these. Ditto for interfaces and endpoints. The first x interfaces
+// in the array correspond to the first configuration, the next y
+// interfaces to the second configuration, etc. The endpoints array
+// works in the same way.
+//
+// In the initial implementation multiple languages are not supported
+// so a simple array of strings suffices. The first entry of these
+// is still special in that it should define a single supported
+// LANGID. All strings should be encoded as per the USB standard:
+// a length field, a type code of USB_STRING_DESCRIPTOR_TYPE,
+// and data in unicode format. In future multiple language support
+// may be supported via configury with the default case remaining
+// a single language, thus avoiding incompatibility problems.
+    
+typedef struct usbs_enumeration_data {
+    usb_device_descriptor               device;
+    int                                 total_number_interfaces;
+    int                                 total_number_endpoints;
+    int                                 total_number_strings;
+    const usb_configuration_descriptor* configurations;
+    const usb_interface_descriptor*     interfaces;
+    const usb_endpoint_descriptor*      endpoints;
+    const unsigned char**               strings;
+} usbs_enumeration_data;
+    
+// The current state of a USB device. This involves a bit to mark
+// whether or not the device has been suspended, plus a state machine.
+// On some hardware it may not be possible to distinguish between the
+// detached, attached and powered states. If so then the initial state
+// will be POWERED.
+
+#define USBS_STATE_DETACHED             0x01
+#define USBS_STATE_ATTACHED             0x02
+#define USBS_STATE_POWERED              0x03
+#define USBS_STATE_DEFAULT              0x04
+#define USBS_STATE_ADDRESSED            0x05
+#define USBS_STATE_CONFIGURED           0x06
+#define USBS_STATE_MASK                 0x7F
+#define USBS_STATE_SUSPENDED            (1 << 7)
+
+// State changes. Application code or higher-level packages should
+// install an appropriate state change function which will get
+// invoked with details of the state change.
+typedef enum {
+    USBS_STATE_CHANGE_DETACHED          = 1,
+    USBS_STATE_CHANGE_ATTACHED          = 2,
+    USBS_STATE_CHANGE_POWERED           = 3,
+    USBS_STATE_CHANGE_RESET             = 4,    
+    USBS_STATE_CHANGE_ADDRESSED         = 5,
+    USBS_STATE_CHANGE_CONFIGURED        = 6,
+    USBS_STATE_CHANGE_DECONFIGURED      = 7,    
+    USBS_STATE_CHANGE_SUSPENDED         = 8,
+    USBS_STATE_CHANGE_RESUMED           = 9
+} usbs_state_change;
+
+typedef enum {
+    USBS_CONTROL_RETURN_HANDLED = 0,
+    USBS_CONTROL_RETURN_UNKNOWN = 1,
+    USBS_CONTROL_RETURN_STALL   = 2
+} usbs_control_return;
+
+typedef struct usbs_control_endpoint {
+    // The state is maintained by the USB code and should not be
+    // modified by anything higher up.
+    int                 state;
+
+    // The enumeration data should be supplied by higher level code,
+    // usually the application. Often this data will be constant.
+    const usbs_enumeration_data* enumeration_data;
+    
+    // This function pointer is supplied by the USB device driver.
+    // Application code should invoke it directly or via the
+    // usbs_start() function when the system is ready. Typically it
+    // will cause the USB lines to switch from tristate to active,
+    // and the USB host/hub should detect this.
+    void                (*start_fn)(struct usbs_control_endpoint*);
+
+    // This function is used for polled operation when interrupts
+    // are disabled. This can happen in some debugging contexts.
+    // Higher-level code may also need to know about the interrupt
+    // number(s) used.
+    void                (*poll_fn)(struct usbs_control_endpoint*);
+    int                 interrupt_vector;
+    
+    // When a new control message arrives it will be in this buffer
+    // where the appropriate callback functions can examine it. The
+    // USB code will not modify the buffer unless a new control
+    // message arrives. The control_buffer can also be re-used
+    // by handlers to maintain some state information, e.g.
+    // for coping with complicated IN requests, but this is only
+    // allowed if they actually handle the request.
+    unsigned char       control_buffer[8];
+
+    // This callback will be invoked by the USB code following a
+    // change in USB state, e.g. to SUSPENDED mode. Higher-level code
+    // should install a suitable function. There is some callback data
+    // as well. This gets passed explicitly to the callback function,
+    // in addition to the control endpoint structure. The reason is
+    // that the actual state change callback may be some sort of
+    // multiplexer inside a multifunction peripheral, and this
+    // multiplexer wants to invoke device-specific state change
+    // functions. However in simple devices those device-specific
+    // state change functions could be invoked directly.
+    void                (*state_change_fn)(struct usbs_control_endpoint*, void*, usbs_state_change, int /* old state */);
+    void*               state_change_data;
+    // When a standard control message arrives, the device driver will
+    // detect some requests such as SET_ADDRESS and handle it
+    // internally. Otherwise if higher-level code has installed a
+    // callback then that will be invoked. If the callback returns
+    // UNKNOWN then the default handler usbs_handle_standard_control()
+    // is used to process the request. 
+    usbs_control_return (*standard_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               standard_control_data;
+    
+    // These three callbacks are used for other types of control
+    // messages. The generic USB code has no way of knowing what
+    // such control messages are about.
+    usbs_control_return (*class_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               class_control_data;
+    usbs_control_return (*vendor_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               vendor_control_data;
+    usbs_control_return (*reserved_control_fn)(struct usbs_control_endpoint*, void*);
+    void*               reserved_control_data;
+
+    // If a control operation involves transferring more data than
+    // just the initial eight-byte packet, the following fields are
+    // used to keep track of the current operation. The original
+    // control request indicates the direction of the transfer (IN or
+    // OUT) and a length field. For OUT this length is exact, for IN
+    // it is an upper bound. The transfer operates mostly as per the
+    // bulk protocol, but if the length requested is an exact multiple
+    // of the control fifo size (typically eight bytes) then there
+    // is no need for an empty packet at the end.
+    //
+    // For an OUT operation the control message handler should supply
+    // a suitable buffer via the "buffer" field below. The only other
+    // field of interest is the complete_fn which must be provided and
+    // will be invoked once all the data has arrived. Alternatively
+    // the OUT operation may get aborted if a new control message
+    // arrives. The second argument is an error code -EPIPE or -EIO,
+    // or zero to indicate success. The return code is used by the
+    // device driver during the status phase.
+    //
+    // IN is more complicated and the defined interface makes it
+    // possible to gather data from multiple locations, eliminating
+    // the need for copying into large buffers in some circumstances.
+    // Basically when an IN request arrives the device driver will
+    // look at the buffer and buffer_size fields, extracting data from
+    // there if possible. If the current buffer has been exhausted
+    // then the the refill function will be invoked, and this can
+    // reset the buffer and size fields to point somewhere else. 
+    // This continues until such time that there is no longer
+    // a refill function and the current buffer is empty. The
+    // refill function can use the refill_data and refill_index
+    // to keep track of the current state. The control_buffer
+    // fields are available as well. At the end of the transfer,
+    // if a completion function has been supplied then it will
+    // be invoked. The return code will be ignored.
+    unsigned char*      buffer;
+    int                 buffer_size;
+    void                (*fill_buffer_fn)(struct usbs_control_endpoint*);
+    void*               fill_data;
+    int                 fill_index;
+    usbs_control_return (*complete_fn)(struct usbs_control_endpoint*, int);
+} usbs_control_endpoint;
+
+// Data endpoints are a little bit simpler, but not much. From the
+// perspective of a device driver things a single buffer is most
+// convenient, but that is quite likely to require a max-size buffer
+// at a higher level and an additional copy operation. Supplying
+// a vector of buffers is a bit more general, but in a layered
+// system it may be desirable to prepend to this vector...
+// A combination of a current buffer and a refill/empty function
+// offers flexibility, at the cost of additional function calls
+// from inside the device driver.
+//
+// FIXME: implement support for fill/empty functions.
+//
+// Some USB devices may prefer buffers of particular alignment,
+// e.g. for DMA purposes. This is hard to reconcile with the
+// current interface. However pushing such alignment restrictions
+// etc. up into the higher levels is difficult, e.g. it does
+// not map at all onto a conventional read/write interface.
+// The device driver will just have to do the best it can.
+//
+// The completion function will be invoked at the end of the transfer.
+// The second argument indicates per-transfer completion data. The
+// third argument indicates the total amount received, or an error
+// code: typically -EPIPE to indicate a broken conenction; -EAGAIN to
+// indicate a stall condition; -EMSGSIZE if the host is sending more
+// data than the target is expecting; or -EIO to indicate some other
+// error. Individual device drivers should avoid generating other
+// errors.
+typedef struct usbs_rx_endpoint {
+    void                (*start_rx_fn)(struct usbs_rx_endpoint*);
+    void                (*set_halted_fn)(struct usbs_rx_endpoint*, cyg_bool);
+    void                (*complete_fn)(void*, int);
+    void*               complete_data;
+    unsigned char*      buffer;
+    int                 buffer_size;
+    cyg_bool            halted;
+} usbs_rx_endpoint;
+
+typedef struct usbs_tx_endpoint {
+    void                (*start_tx_fn)(struct usbs_tx_endpoint*);
+    void                (*set_halted_fn)(struct usbs_tx_endpoint*, cyg_bool);
+    void                (*complete_fn)(void*, int);
+    void*               complete_data;
+    const unsigned char*buffer;
+    int                 buffer_size;
+    cyg_bool            halted;
+} usbs_tx_endpoint;
+
+// Functions called by device drivers.
+extern usbs_control_return usbs_handle_standard_control(struct usbs_control_endpoint*);
+    
+// Utility functions. These just invoke the corresponding function
+// pointers in the endpoint structures. It is assumed that the
+// necessary fields in the endpoint structures will have been
+// filled in already.
+extern void     usbs_start(usbs_control_endpoint*);
+extern void     usbs_start_rx(usbs_rx_endpoint*);
+extern void     usbs_start_tx(usbs_tx_endpoint*);
+extern void     usbs_start_rx_buffer(usbs_rx_endpoint*, unsigned char*, int, void (*)(void*, int), void*);
+extern void     usbs_start_tx_buffer(usbs_tx_endpoint*, const unsigned char*, int, void (*)(void*, int), void*);
+extern cyg_bool usbs_rx_endpoint_halted(usbs_rx_endpoint*);
+extern cyg_bool usbs_tx_endpoint_halted(usbs_tx_endpoint*);
+extern void     usbs_set_rx_endpoint_halted(usbs_rx_endpoint*, cyg_bool);
+extern void     usbs_set_tx_endpoint_halted(usbs_tx_endpoint*, cyg_bool);
+extern void     usbs_start_rx_endpoint_wait(usbs_rx_endpoint*, void (*)(void*, int), void*);
+extern void     usbs_start_tx_endpoint_wait(usbs_tx_endpoint*, void (*)(void*, int), void*);
+    
+// Functions that can go into devtab entries. These should not be
+// called directly, they are intended only for use by USB device
+// drivers.
+#if defined(CYGPKG_IO) && defined(CYGPKG_ERROR)
+#include <cyg/io/io.h>
+extern Cyg_ErrNo usbs_devtab_cwrite(cyg_io_handle_t, const void*, cyg_uint32*);
+extern Cyg_ErrNo usbs_devtab_cread(cyg_io_handle_t, const void*, cyg_uint32*);
+extern Cyg_ErrNo usbs_devtab_get_config(cyg_io_handle_t, cyg_uint32, void*, cyg_uint32*);
+extern Cyg_ErrNo usbs_devtab_set_config(cyg_io_handle_t, cyg_uint32, const void*, cyg_uint32*);
+#endif
+
+#ifdef __cplusplus
+} // extern "C" {
+#endif
+
+#endif // CYGONCE_USBS_H
+
new file mode 100644
--- /dev/null
+++ b/packages/io/usb/slave/current/src/usbs.c
@@ -0,0 +1,703 @@
+//==========================================================================
+//
+//      usbs.c
+//
+//      Generic USB slave-side support
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    bartv
+// Contributors: bartv
+// Date:         2000-10-04
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <pkgconf/system.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/cyg_ass.h>
+#include <cyg/infra/cyg_trac.h>
+#include <cyg/infra/diag.h>
+#include <cyg/io/usb/usbs.h>
+#include <cyg/hal/drv_api.h>
+
+// ----------------------------------------------------------------------------
+// Devtab entry support. This code can be compiled with no overheads as
+// long as the necessary support package is in place.
+#ifdef CYGPKG_IO
+# include <cyg/io/io.h>
+# include <cyg/io/devtab.h>
+// ----------------------------------------------------------------------------
+// read()/write() functions applied to USB endpoints. These just
+// indirect via the usbs_endpoint structures and wait for the
+// callback to happen.
+
+typedef struct usbs_callback_data {
+    bool                completed;
+    int                 result;
+    cyg_drv_mutex_t     lock;
+    cyg_drv_cond_t      signal;
+} usbs_callback_data;
+
+static void
+usbs_devtab_callback(void* arg, int result)
+{
+    usbs_callback_data* callback_data = (usbs_callback_data*) arg;
+    callback_data->result       = result;
+    callback_data->completed    = true;
+    cyg_drv_cond_signal(&(callback_data->signal));
+}
+    
+Cyg_ErrNo
+usbs_devtab_cwrite(cyg_io_handle_t handle, const void* buf, cyg_uint32* size)
+{
+    usbs_callback_data  wait;
+    cyg_devtab_entry_t* devtab_entry;
+    usbs_tx_endpoint*   endpoint;
+    int                 result = ENOERR;
+    
+    CYG_REPORT_FUNCTION();
+    
+    wait.completed      = 0;
+    cyg_drv_mutex_init(&wait.lock);
+    cyg_drv_cond_init(&wait.signal, &wait.lock);
+
+    devtab_entry      = (cyg_devtab_entry_t*) handle;
+    CYG_CHECK_DATA_PTR( devtab_entry, "A valid endpoint must be supplied");
+    endpoint          = (usbs_tx_endpoint*) devtab_entry->priv;
+    
+    CYG_CHECK_DATA_PTR( endpoint, "The handle must correspond to a USB endpoint");
+    CYG_CHECK_FUNC_PTR( endpoint->start_tx_fn, "The endpoint must have a start_tx function");
+
+    endpoint->buffer            = (unsigned char*) buf;
+    endpoint->buffer_size       = (int) *size;
+    endpoint->complete_fn       = &usbs_devtab_callback;
+    endpoint->complete_data     = (void*) &wait;
+    (*endpoint->start_tx_fn)(endpoint);
+    
+    cyg_drv_mutex_lock(&wait.lock);
+    while (!wait.completed) {
+        cyg_drv_cond_wait(&wait.signal);
+    }
+    cyg_drv_mutex_unlock(&wait.lock);
+    if (wait.result < 0) {
+        result = wait.result;
+    } else {
+        *size = wait.result;
+    }
+    
+    cyg_drv_cond_destroy(&wait.signal);
+    cyg_drv_mutex_destroy(&wait.lock);
+
+    CYG_REPORT_RETURN();
+    return result;
+}
+
+Cyg_ErrNo
+usbs_devtab_cread(cyg_io_handle_t handle, const void* buf, cyg_uint32* size)
+{
+    usbs_callback_data  wait;
+    cyg_devtab_entry_t* devtab_entry;
+    usbs_rx_endpoint*   endpoint;
+    int                 result = ENOERR;
+    
+    CYG_REPORT_FUNCTION();
+    
+    wait.completed      = 0;
+    cyg_drv_mutex_init(&wait.lock);
+    cyg_drv_cond_init(&wait.signal, &wait.lock);
+
+    devtab_entry      = (cyg_devtab_entry_t*) handle;
+    CYG_CHECK_DATA_PTR( devtab_entry, "A valid endpoint must be supplied");
+    endpoint          = (usbs_rx_endpoint*) devtab_entry->priv;
+    
+    CYG_CHECK_DATA_PTR( endpoint, "The handle must correspond to a USB endpoint");
+    CYG_CHECK_FUNC_PTR( endpoint->start_rx_fn, "The endpoint must have a start_rx function");
+
+    endpoint->buffer            = (unsigned char*) buf;
+    endpoint->buffer_size       = (int) *size;
+    endpoint->complete_fn       = &usbs_devtab_callback;
+    endpoint->complete_data     = (void*) &wait;
+    (*endpoint->start_rx_fn)(endpoint);
+    cyg_drv_mutex_lock(&wait.lock);
+    while (!wait.completed) {
+        cyg_drv_cond_wait(&wait.signal);
+    }
+    cyg_drv_mutex_unlock(&wait.lock);
+    if (wait.result < 0) {
+        result = wait.result;
+    } else {
+        *size = wait.result;
+    }
+    
+    cyg_drv_cond_destroy(&wait.signal);
+    cyg_drv_mutex_destroy(&wait.lock);
+
+    CYG_REPORT_RETURN();
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+// More devtab functions, this time related to ioctl() style operations.
+Cyg_ErrNo
+usbs_devtab_get_config(cyg_io_handle_t handle, cyg_uint32 code, void* buf, cyg_uint32* size)
+{
+    return -EINVAL;
+}
+
+Cyg_ErrNo
+usbs_devtab_set_config(cyg_io_handle_t handle, cyg_uint32 code, const void* buf, cyg_uint32* size)
+{
+    return -EINVAL;
+}
+
+#endif  //  CYGPKG_IO
+
+// ----------------------------------------------------------------------------
+// USB-specific functions that are useful for applications/packages which
+// do not want to use the devtab interface. These may get called in DSR
+// context.
+
+void
+usbs_start_rx(usbs_rx_endpoint* endpoint)
+{
+    CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+    CYG_CHECK_FUNC_PTR( endpoint->start_rx_fn, "The USB endpoint must support receive operations");
+    (*endpoint->start_rx_fn)(endpoint);
+}
+
+void
+usbs_start_rx_buffer(usbs_rx_endpoint* endpoint,
+                     unsigned char* buf, int size,
+                     void (*callback_fn)(void *, int), void* callback_arg)
+{
+    CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+    CYG_CHECK_FUNC_PTR( endpoint->start_rx_fn, "The USB endpoint must support receive operations");
+
+    endpoint->buffer            = buf;
+    endpoint->buffer_size       = size;
+    endpoint->complete_fn       = callback_fn;
+    endpoint->complete_data     = callback_arg;
+    (*endpoint->start_rx_fn)(endpoint);
+}
+
+void
+usbs_start_tx(usbs_tx_endpoint* endpoint)
+{
+    CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+    CYG_CHECK_FUNC_PTR( endpoint->start_tx_fn, "The USB endpoint must support receive operations");
+    (*endpoint->start_tx_fn)(endpoint);
+}
+
+void
+usbs_start_tx_buffer(usbs_tx_endpoint* endpoint,
+                     const unsigned char* buf, int size,
+                     void (*callback_fn)(void*, int), void *callback_arg)
+{
+    CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+    CYG_CHECK_FUNC_PTR( endpoint->start_tx_fn, "The USB endpoint must support receive operations");
+
+    endpoint->buffer            = buf;
+    endpoint->buffer_size       = size;
+    endpoint->complete_fn       = callback_fn;
+    endpoint->complete_data     = callback_arg;
+    (*endpoint->start_tx_fn)(endpoint);
+}
+
+void
+usbs_start(usbs_control_endpoint* endpoint)
+{
+    CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+    CYG_CHECK_FUNC_PTR( endpoint->start_fn, "The USB endpoint should have a start function");
+
+    (*endpoint->start_fn)(endpoint);
+}
+
+cyg_bool
+usbs_rx_endpoint_halted(usbs_rx_endpoint* endpoint)
+{
+   CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+   return endpoint->halted;
+}
+
+cyg_bool
+usbs_tx_endpoint_halted(usbs_tx_endpoint* endpoint)
+{
+   CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+   return endpoint->halted;
+}
+
+void
+usbs_set_rx_endpoint_halted(usbs_rx_endpoint* endpoint, cyg_bool halted)
+{
+    CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+    CYG_CHECK_FUNC_PTR( endpoint->set_halted_fn, "The USB endpoint should have a set-halted function");
+    (*endpoint->set_halted_fn)(endpoint, halted);
+}
+
+void
+usbs_set_tx_endpoint_halted(usbs_tx_endpoint* endpoint, cyg_bool halted)
+{
+    CYG_CHECK_DATA_PTR( endpoint, "A valid USB endpoint must be supplied");
+    CYG_CHECK_FUNC_PTR( endpoint->set_halted_fn, "The USB endpoint should have a set-halted function");
+    (*endpoint->set_halted_fn)(endpoint, halted);
+}
+
+void
+usbs_start_rx_endpoint_wait(usbs_rx_endpoint* endpoint, void (*callback_fn)(void*, int), void* callback_data)
+{
+    endpoint->buffer            = (unsigned char*) 0;
+    endpoint->buffer_size       = 0;
+    endpoint->complete_fn       = callback_fn;
+    endpoint->complete_data     = callback_data;
+    (*endpoint->start_rx_fn)(endpoint);
+}
+
+void
+usbs_start_tx_endpoint_wait(usbs_tx_endpoint* endpoint, void (*callback_fn)(void*, int), void* callback_data)
+{
+    endpoint->buffer            = (unsigned char*) 0;
+    endpoint->buffer_size       = 0;
+    endpoint->complete_fn       = callback_fn;
+    endpoint->complete_data     = callback_data;
+    (*endpoint->start_tx_fn)(endpoint);
+}
+
+
+// ----------------------------------------------------------------------------
+// Handling of standard control messages. This will be invoked by
+// a USB device driver, usually at DSR level, to process any control
+// messages that cannot be handled by the hardware itself and that
+// have also not been handled by the application-specific handler
+// (if any).
+//
+// Because this function can run at DSR level performance is important.
+//
+// The various standard control messages are affected as follows:
+//
+// clear-feature: nothing can be done here about device requests to
+// disable remote-wakeup or about endpoint halt requests. It appears
+// to be legal to clear no features on an interface.
+//
+// get-configuration: if the device is not configured a single byte 0
+// should be returned. Otherwise this code assumes only one configuration
+// is supported and its id can be extracted from the enumeration data.
+// For more complicated devices get-configuration has to be handled
+// at a higher-level.
+//
+// get-descriptor: this is the big one. It is used to obtain
+// the enumeration data. An auxiliary refill function is needed.
+//
+// get-interface: this can be used to identify the current variant
+// for a given interface within a configuration. For simple devices
+// there will be only interface, 0. For anything more complicated
+// higher level code will have to take care of the request.
+//
+// get-status. Much the same as clear-feature.
+//
+// set-address. Must be handled at the device driver level.
+//
+// set-configuration: a value of 0 is used to deconfigure the device,
+// which can be handled here. Otherwise this code assumes that only
+// a single configuration is supported and enables that. For anything
+// more complicated higher-level code has to handle this request.
+//
+// set-descriptor: used to update the enumeration data. This is not
+// supported here, although higher-level code can choose to do so.
+//
+// set-feature. See clear-feature and get-status.
+//
+// set-interface. Variant interfaces are not supported by the
+// base code so this request has to be handled at a higher level.
+//
+// synch-frame. This is only relevant for isochronous transfers
+// which are not yet supported, and anyway it is not clear what
+// could be done about these requests here.
+
+// This refill function handles GET_DESCRIPTOR requests for a
+// configuration. For details of the control_buffer usage see
+// the relevant code in the main callback.
+static void
+usbs_configuration_descriptor_refill(usbs_control_endpoint* endpoint)
+{
+    usb_devreq* req                 = (usb_devreq*) endpoint->control_buffer;
+    int         length              = (req->length_hi << 8) | req->length_lo;
+    int         sent                = (req->index_hi << 8)  | req->index_lo;
+    int         current_interface   = req->type;
+    int         last_interface      = req->request;
+    int         current_endpoint    = req->value_lo;
+    int         last_endpoint       = req->value_hi;
+    cyg_bool    done                = false;
+
+    if (current_endpoint == last_endpoint) {
+        // The next transfer should be a single interface - unless we have already finished.
+        if (current_interface == last_interface) {
+            done = true;
+        } else {
+            endpoint->buffer            = (unsigned char*) &(endpoint->enumeration_data->interfaces[current_interface]);
+            if (USB_INTERFACE_DESCRIPTOR_LENGTH >= (length - sent)) {
+                endpoint->buffer_size = length - sent;
+                done = true;
+            } else {
+                endpoint->buffer_size   = USB_INTERFACE_DESCRIPTOR_LENGTH;
+                sent                   += USB_INTERFACE_DESCRIPTOR_LENGTH;
+                // Note that an interface with zero endpoints is ok. We'll just move
+                // to the next interface in the next call.
+                last_endpoint           = current_endpoint +
+                    endpoint->enumeration_data->interfaces[current_interface].number_endpoints;
+                current_interface++;
+            }
+        }
+    } else {
+        // The next transfer should be a single endpoint. The
+        // endpoints are actually contiguous array elements
+        // but may not be packed, so they have to be transferred
+        // one at a time.
+        endpoint->buffer     = (unsigned char*) &(endpoint->enumeration_data->endpoints[current_endpoint]);
+        if ((sent + USB_ENDPOINT_DESCRIPTOR_LENGTH) >= length) {
+            endpoint->buffer_size = length - sent;
+            done = true;
+        } else {
+            endpoint->buffer_size = USB_ENDPOINT_DESCRIPTOR_LENGTH;
+            current_endpoint ++;
+        }
+    }
+
+    if (done) {
+        endpoint->fill_buffer_fn = (void (*)(usbs_control_endpoint*)) 0;
+    } else {
+        req->type       = (unsigned char) current_interface;
+        req->value_lo   = (unsigned char) current_endpoint;
+        req->value_hi   = (unsigned char) last_endpoint;
+        req->index_hi   = (unsigned char) (sent >> 8);
+        req->index_lo   = (unsigned char) (sent & 0x00FF);
+    }
+}
+
+usbs_control_return
+usbs_handle_standard_control(usbs_control_endpoint* endpoint)
+{
+    usbs_control_return result = USBS_CONTROL_RETURN_UNKNOWN;
+    usb_devreq*         req    = (usb_devreq*) endpoint->control_buffer;
+    int                 length;
+    int                 direction;
+    int                 recipient;
+
+    length      = (req->length_hi << 8) | req->length_lo;
+    direction   = req->type & USB_DEVREQ_DIRECTION_MASK;
+    recipient   = req->type & USB_DEVREQ_RECIPIENT_MASK;
+
+    if (USB_DEVREQ_CLEAR_FEATURE == req->request) {
+        
+        if (USB_DEVREQ_RECIPIENT_INTERFACE == recipient) {
+            // The host should expect no data back, the device must
+            // be configured, and there are no defined features to clear.
+            if ((0 == length) &&
+                (USBS_STATE_CONFIGURED == (endpoint->state & USBS_STATE_MASK)) &&
+                (0 == req->value_lo)) {
+
+                int interface_id = req->index_lo;
+                CYG_ASSERT( 1 == endpoint->enumeration_data->total_number_interfaces, \
+                            "Higher level code should have handled this request");
+
+                if (interface_id == endpoint->enumeration_data->interfaces[0].interface_id) {                
+                    result = USBS_CONTROL_RETURN_HANDLED;
+                } else {
+                    result = USBS_CONTROL_RETURN_STALL;
+                }
+                
+            } else {
+                result = USBS_CONTROL_RETURN_STALL;
+            }
+        }
+        
+    } else if (USB_DEVREQ_GET_CONFIGURATION == req->request) {
+
+        // Return a single byte 0 if the device is not currently
+        // configured. Otherwise assume a single configuration
+        // in the enumeration data and return its id.
+        if ((1 == length) && (USB_DEVREQ_DIRECTION_IN == direction)) {
+            
+            if (USBS_STATE_CONFIGURED == (endpoint->state & USBS_STATE_MASK)) {
+                CYG_ASSERT( 1 == endpoint->enumeration_data->device.number_configurations, \
+                            "Higher level code should have handled this request");
+                endpoint->control_buffer[0] = endpoint->enumeration_data->configurations[0].configuration_id;
+            } else {
+                endpoint->control_buffer[0] = 0;
+            }
+            endpoint->buffer            = endpoint->control_buffer;
+            endpoint->buffer_size       = 1;
+            endpoint->fill_buffer_fn    = (void (*)(usbs_control_endpoint*)) 0;
+            endpoint->complete_fn       = (usbs_control_return (*)(usbs_control_endpoint*, cyg_bool)) 0;
+            result = USBS_CONTROL_RETURN_HANDLED;
+            
+        } else {
+            result = USBS_CONTROL_RETURN_STALL;
+        }
+            
+    } else if (USB_DEVREQ_GET_DESCRIPTOR == req->request) {
+
+        // The descriptor type is in value_hi. The descriptor index
+        // is in value_lo.
+        // The hsot must expect at least one byte of data.
+        if ((0 == length) || (USB_DEVREQ_DIRECTION_IN != direction)) {
+            
+            result = USBS_CONTROL_RETURN_STALL;
+            
+        } else if (USB_DEVREQ_DESCRIPTOR_TYPE_DEVICE == req->value_hi) {
+
+            // The device descriptor is easy, it is a single field in the
+            // enumeration data.
+            endpoint->buffer            = (unsigned char*) &(endpoint->enumeration_data->device);
+            endpoint->fill_buffer_fn    = (void (*)(usbs_control_endpoint*)) 0;
+            endpoint->complete_fn       = (usbs_control_return (*)(usbs_control_endpoint*, cyg_bool)) 0;
+            if (length < USB_DEVICE_DESCRIPTOR_LENGTH) {
+                endpoint->buffer_size = length;
+            } else {
+                endpoint->buffer_size = USB_DEVICE_DESCRIPTOR_LENGTH;
+            }
+            result = USBS_CONTROL_RETURN_HANDLED;
+            
+        } else if (USB_DEVREQ_DESCRIPTOR_TYPE_CONFIGURATION == req->value_hi) {
+
+            // This is where things get messy. We need to supply the
+            // specified configuration data, followed by some number of
+            // interfaces and endpoints. Plus there are length limits
+            // to consider. First check that the specified index is valid.
+            if (req->value_lo >= endpoint->enumeration_data->device.number_configurations) {
+                result = USBS_CONTROL_RETURN_STALL;
+            } else {
+                // No such luck. OK, supplying the initial block is easy.
+                endpoint->buffer        = (unsigned char*) &(endpoint->enumeration_data->configurations[req->value_lo]);
+                endpoint->complete_fn   = (usbs_control_return (*)(usbs_control_endpoint*, cyg_bool)) 0;
+
+                // How much data was actually requested. If only the
+                // configuration itself is of interest then there is
+                // no need to worry about the rest.
+                if (length <= USB_CONFIGURATION_DESCRIPTOR_LENGTH) {
+                    endpoint->buffer_size       = length;
+                    endpoint->fill_buffer_fn    = (void (*)(usbs_control_endpoint*)) 0;
+                } else {
+                    int i, j;
+                    int start_interface;
+                    int start_endpoint;
+                    endpoint->buffer_size       = USB_CONFIGURATION_DESCRIPTOR_LENGTH;
+                    endpoint->fill_buffer_fn    = &usbs_configuration_descriptor_refill;
+
+                    // The descriptor refill_fn needs to know what next to transfer.
+                    // The desired interfaces and endpoints will be contiguous so
+                    // we need to keep track of the following:
+                    // 1) the current interface index being transferred.
+                    // 2) the last interface that should be transferred.
+                    // 3) the current endpoint index that should be transferred.
+                    // 4) the last endpoint index. This marks interface/endpoint transitions.
+                    // 5) how much has been transferred to date.
+                    // This information can be held in the control_buffer,
+                    // with the length field being preserved.
+                    start_interface = 0;
+                    start_endpoint  = 0;
+                    // For all configurations up to the desired one.
+                    for (i = 0; i < req->value_lo; i++) {
+                        int config_interfaces = endpoint->enumeration_data->configurations[i].number_interfaces;
+
+                        // For all interfaces in this configuration.
+                        for (j = 0; j < config_interfaces; j++) {
+                            // Add the number of endpoints in this interface to the current count.
+                            CYG_ASSERT( (j + start_interface) < endpoint->enumeration_data->total_number_interfaces, \
+                                        "Valid interface count in enumeration data");
+                            start_endpoint += endpoint->enumeration_data->interfaces[j + start_interface].number_endpoints;
+                        }
+                        // And update the index for the starting interface.
+                        start_interface += config_interfaces;
+                    }
+                    CYG_ASSERT( start_interface < endpoint->enumeration_data->total_number_interfaces, \
+                                "Valid interface count in enumeration data");
+                    CYG_ASSERT( start_endpoint < endpoint->enumeration_data->total_number_endpoints, \
+                                "Valid endpoint count in enumeration data");
+
+                    req->type           = (unsigned char) start_interface;
+                    req->request        = (unsigned char) (start_interface +
+                                                           endpoint->enumeration_data->configurations[req->value_lo].number_interfaces
+                                                           );
+                    req->value_lo       = (unsigned char) start_endpoint;
+                    req->value_hi       = (unsigned char) start_endpoint;
+                    req->index_lo       = USB_CONFIGURATION_DESCRIPTOR_LENGTH;
+                    req->index_hi       = 0;
+                }
+                result = USBS_CONTROL_RETURN_HANDLED;
+            }
+            
+            
+        } else if (USB_DEVREQ_DESCRIPTOR_TYPE_STRING == req->value_hi) {
+
+            // As long as the index is valid, the rest is easy since
+            // the strings are just held in a simple array.
+            // NOTE: if multiple languages have to be supported
+            // then things get more difficult.
+            if (req->value_lo >= endpoint->enumeration_data->total_number_strings) {
+                result = USBS_CONTROL_RETURN_STALL;
+            } else {
+                endpoint->buffer                = (unsigned char*) endpoint->enumeration_data->strings[req->value_lo];
+                endpoint->fill_buffer_fn        = (void (*)(usbs_control_endpoint*)) 0;
+                endpoint->complete_fn           = (usbs_control_return (*)(usbs_control_endpoint*, cyg_bool)) 0;
+
+                if (length < endpoint->buffer[0]) {
+                    endpoint->buffer_size = length;
+                } else {
+                    endpoint->buffer_size = endpoint->buffer[0];
+                }
+                result = USBS_CONTROL_RETURN_HANDLED;
+            }
+            
+        } else {
+            result = USBS_CONTROL_RETURN_STALL;
+        }
+        
+    } else if (USB_DEVREQ_GET_INTERFACE == req->request) {
+
+        if ((1 != length) ||
+            (USB_DEVREQ_DIRECTION_IN != direction) ||
+            (USBS_STATE_CONFIGURED != (endpoint->state & USBS_STATE_MASK))) {
+            
+            result = USBS_CONTROL_RETURN_STALL;
+            
+        } else {
+            int interface_id;
+            
+            CYG_ASSERT( (1 == endpoint->enumeration_data->device.number_configurations) && \
+                        (1 == endpoint->enumeration_data->total_number_interfaces),       \
+                        "Higher level code should have handled this request");
+
+            interface_id = (req->index_hi << 8) | req->index_lo;
+            if (interface_id != endpoint->enumeration_data->interfaces[0].interface_id) {
+                result = USBS_CONTROL_RETURN_STALL;
+            } else {
+                endpoint->control_buffer[0] = endpoint->enumeration_data->interfaces[0].alternate_setting;
+                endpoint->buffer            = endpoint->control_buffer;
+                endpoint->buffer_size       = 1;
+                endpoint->fill_buffer_fn    = (void (*)(usbs_control_endpoint*)) 0;
+                endpoint->complete_fn       = (usbs_control_return (*)(usbs_control_endpoint*, cyg_bool)) 0;
+                result = USBS_CONTROL_RETURN_HANDLED;
+            }
+        }
+        
+    } else if (USB_DEVREQ_GET_STATUS == req->request) {
+
+        if (USB_DEVREQ_RECIPIENT_INTERFACE == recipient) {
+            // The host should expect two bytes back, the device must
+            // be configured, the interface number must be valid.
+            // The host should expect no data back, the device must
+            // be configured, and there are no defined features to clear.
+            if ((2 == length) &&
+                (USB_DEVREQ_DIRECTION_IN == direction) &&
+                (USBS_STATE_CONFIGURED == (endpoint->state & USBS_STATE_MASK))) {
+
+                int interface_id = req->index_lo;
+                CYG_ASSERT( 1 == endpoint->enumeration_data->total_number_interfaces, \
+                            "Higher level code should have handled this request");
+
+                if (interface_id == endpoint->enumeration_data->interfaces[0].interface_id) {
+                    
+                    // The request is legit, but there are no defined features for an interface...
+                    endpoint->control_buffer[0] = 0;
+                    endpoint->control_buffer[1] = 0;
+                    endpoint->buffer            = endpoint->control_buffer;
+                    endpoint->buffer_size       = 2;
+                    endpoint->fill_buffer_fn    = (void (*)(usbs_control_endpoint*)) 0;
+                    endpoint->complete_fn       = (usbs_control_return (*)(usbs_control_endpoint*, cyg_bool)) 0;
+                    result = USBS_CONTROL_RETURN_HANDLED;
+                    
+                } else {
+                    result = USBS_CONTROL_RETURN_STALL;
+                }
+            } else {
+                result = USBS_CONTROL_RETURN_STALL;
+            }
+        }
+        
+    } else if (USB_DEVREQ_SET_CONFIGURATION == req->request) {
+
+        // Changing to configuration 0 means a state change from
+        // configured to addressed. Changing to anything else means a
+        // state change to configured. Both involve invoking the
+        // state change callback. If there are multiple configurations
+        // to choose from then this request has to be handled at
+        // a higher level. 
+        int old_state = endpoint->state;
+        if (0 == req->value_lo) {
+            endpoint->state = USBS_STATE_ADDRESSED;
+            if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != endpoint->state_change_fn) {
+                (*endpoint->state_change_fn)(endpoint, endpoint->state_change_data,
+                                             USBS_STATE_CHANGE_DECONFIGURED, old_state);
+            }
+            result = USBS_CONTROL_RETURN_HANDLED;
+                
+        } else {
+            CYG_ASSERT(1 == endpoint->enumeration_data->device.number_configurations, \
+                       "Higher level code should have handled this request");
+            if (req->value_lo == endpoint->enumeration_data->configurations[0].configuration_id) {
+                endpoint->state = USBS_STATE_CONFIGURED;
+                if ((void (*)(usbs_control_endpoint*, void*, usbs_state_change, int))0 != endpoint->state_change_fn) {
+                    (*endpoint->state_change_fn)(endpoint, endpoint->state_change_data,
+                                                 USBS_STATE_CHANGE_CONFIGURED, old_state);
+                }
+                result = USBS_CONTROL_RETURN_HANDLED;
+            } else {
+                result = USBS_CONTROL_RETURN_STALL;
+            }
+        }
+        
+    } else if (USB_DEVREQ_SET_FEATURE == req->request) {
+        
+        if (USB_DEVREQ_RECIPIENT_INTERFACE == recipient) {
+            // The host should expect no data back, the device must
+            // be configured, and there are no defined features to clear.
+            if ((0 == length) &&
+                (USBS_STATE_CONFIGURED == (endpoint->state & USBS_STATE_MASK)) &&
+                (0 == req->value_lo)) {
+
+                int interface_id = req->index_lo;
+                CYG_ASSERT( 1 == endpoint->enumeration_data->total_number_interfaces, \
+                            "Higher level code should have handled this request");
+
+                if (interface_id == endpoint->enumeration_data->interfaces[0].interface_id) {                
+                    result = USBS_CONTROL_RETURN_HANDLED;
+                } else {
+                    result = USBS_CONTROL_RETURN_STALL;
+                }
+                
+            } else {
+                result = USBS_CONTROL_RETURN_STALL;
+            }
+        }
+        
+    }
+    
+    return result;
+}
--- a/packages/isoinfra/current/ChangeLog
+++ b/packages/isoinfra/current/ChangeLog
@@ -1,3 +1,19 @@
+2001-02-11  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/isoinfra.cdl: Add CYGPKG_ISO_UNISTD to deal with unistd.h
+	Include POSIX timer operations underneath it.
+
+	* include/unistd.h: Add support for conditional inclusion of
+	POSIX timer operations.
+
+2001-02-01  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/isoinfra.cdl: Add CYGINT_ISO_STDIO_POSIX_FDFUNCS and
+	CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER primarily for fileno()
+	and fdopen()
+	* include/stdio.h: Use above to provide default protos for fileno
+	and fdopen.
+
 2000-12-15  Nick Garnett  <nickg@cygnus.co.uk>
 
 	* include/dlfcn.h: 
--- a/packages/isoinfra/current/cdl/isoinfra.cdl
+++ b/packages/isoinfra/current/cdl/isoinfra.cdl
@@ -266,6 +266,18 @@ cdl_package CYGPKG_ISOINFRA {
             default_value 0
         }
 
+        cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS {
+            display       "POSIX fd-related function implementations"
+            flavor        booldata
+            requires      { 1 >=  CYGINT_ISO_STDIO_POSIX_FDFUNCS }
+        }
+    
+        cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER {
+            display       "POSIX fd-related function implementation header"
+            flavor        booldata
+            default_value 0
+        }
+
     }
 
 # ====================================================================
@@ -1018,6 +1030,26 @@ cdl_package CYGPKG_ISOINFRA {
     }
     
 # ====================================================================
+
+    cdl_component CYGPKG_ISO_UNISTD {
+        display       "UNIX standard functions"
+        flavor        none
+        no_define
+
+        cdl_interface CYGINT_ISO_POSIX_TIMER_OPS {
+            display       "POSIX timer operations implementations"
+            flavor        booldata
+            requires      { 1 >= CYGINT_ISO_POSIX_TIMER_OPS }
+        }
+    
+        cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER {
+            display       "POSIX timer operations implementation header"
+            flavor        booldata
+            default_value 0
+        }
+    }
+
+# ====================================================================
     
         cdl_component CYGPKG_ISOINFRA_OPTIONS {
         display "Build options"
--- a/packages/isoinfra/current/include/stdio.h
+++ b/packages/isoinfra/current/include/stdio.h
@@ -114,6 +114,27 @@
 # endif
 #endif
 
+#ifdef CYGINT_ISO_STDIO_POSIX_FDFUNCS
+# ifdef CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER
+#  include CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER
+# else
+
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+
+extern int
+fileno( FILE *__stream );
+
+extern FILE *
+fdopen( int __fildes, const char *__type );
+
+#  ifdef __cplusplus
+} // extern "C"
+#  endif
+# endif
+#endif
+
 #endif /* CYGONCE_ISO_STDIO_H multiple inclusion protection */
 
 /* EOF stdio.h */
--- a/packages/isoinfra/current/include/unistd.h
+++ b/packages/isoinfra/current/include/unistd.h
@@ -51,6 +51,7 @@
 
 #include <pkgconf/isoinfra.h>          /* Configuration header */
 
+
 /* INCLUDES */
 
 #include <sys/types.h>
@@ -62,6 +63,39 @@
 #define __need_size_t
 #include <stddef.h>
 
+
+#ifdef CYGINT_ISO_POSIX_TIMER_OPS
+# ifdef CYGBLD_ISO_POSIX_TIMER_OPS_HEADER
+#  include CYGBLD_ISO_POSIX_TIMER_OPS_HEADER
+# else
+
+#  ifdef __cplusplus
+extern "C" {
+#  endif
+
+extern unsigned int
+alarm( unsigned int __seconds );
+
+extern int 
+pause( void );
+
+unsigned int
+sleep( unsigned int __seconds );
+
+#  ifdef __cplusplus
+}   /* extern "C" */
+#  endif
+
+# endif
+#endif
+
+
+/* ------------------------------------------------------------------- */
+
+/* FIXME: The below was copied in verbatim by Nick, but needs to be grouped
+   by functionality and linked with interfaces as with everything else
+*/
+
 /* CONSTANTS */
 
 /* Configuration constants */
--- a/packages/kernel/current/ChangeLog
+++ b/packages/kernel/current/ChangeLog
@@ -1,3 +1,39 @@
+2001-02-11  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* tests/stress_threads.c: CYGINT_ISO_STDIO_FORMATTED_IO needs a
+	#ifdef not an #if.
+	* tests/dhrystone.c: Ditto.
+
+2001-02-04  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* tests/kill.cxx: Increase delay for all targets, just in case some
+	are slow.
+
+2001-01-30  Hugo Tyson  <hmt@redhat.com>
+
+	* src/common/clock.cxx (rem_alarm): Must clear the enabled flag;
+	this disappeared in the changes to using clists of 2001-01-09.
+	Symptom was that an alarm, once disabled, could never be
+	re-attached to its counter because it claimed it already was.
+	Plus asserts with multiple disables - "bad counter object".
+
+2001-01-30  Hugo Tyson  <hmt@redhat.com>
+
+	* src/common/thread.cxx (reinitialize): Following change of
+	2000-12-05, if CYGFUN_KERNEL_THREADS_STACK_CHECKING, this was
+	using the stack_base/stack_size variables directly to reinitialize
+	the stack area.  This was wrong, and leaked store off the top and
+	bottom of the stacks because the "buffer zone" was carved off
+	repeatedly.  Fix is to use the published APIs which compensate.
+
+2001-01-26  Nick Garnett  <nickg@cygnus.co.uk>
+
+	* include/mlqueue.hxx: 
+	* src/sched/mlqueue.cxx:
+	Restored Cyg_ThreadQueue_Implementation::remove() since it must
+	clear the thread's queue pointer, which the base clist class
+	remove() does not.
+
 2001-01-24  Jesper Skov  <jskov@redhat.com>
 
 	* src/sched/mlqueue.cxx (highpri): Fix trace call.
--- a/packages/kernel/current/include/mlqueue.hxx
+++ b/packages/kernel/current/include/mlqueue.hxx
@@ -121,6 +121,9 @@ protected:
                                         // remove first thread on queue    
     Cyg_Thread          *dequeue();
 
+                                        // Remove thread from queue
+    void                remove(Cyg_Thread *thread);
+
 };
 
 // thread queue used exclusively by the scheduler, with simpler enqueueing
--- a/packages/kernel/current/src/common/clock.cxx
+++ b/packages/kernel/current/src/common/clock.cxx
@@ -407,6 +407,8 @@ void Cyg_Counter::rem_alarm( Cyg_Alarm *
 
     alarm_list_ptr->remove( alarm );
     
+    alarm->enabled = false;
+
     Cyg_Scheduler::unlock();            
 }
 
--- a/packages/kernel/current/src/common/thread.cxx
+++ b/packages/kernel/current/src/common/thread.cxx
@@ -256,7 +256,7 @@ Cyg_Thread::reinitialize()
     new(this) Cyg_Thread( pri,
                           entry_point, entry_data,
                           name_arg,
-                          stack_base, stack_size );
+                          get_stack_base(), get_stack_size() );
     // the constructor re-registers the thread with the scheduler.
 
     CYG_ASSERTCLASS( this, "Thread corrupted by reinitialize");    
--- a/packages/kernel/current/src/sched/mlqueue.cxx
+++ b/packages/kernel/current/src/sched/mlqueue.cxx
@@ -548,6 +548,21 @@ Cyg_ThreadQueue_Implementation::dequeue(
 
 // -------------------------------------------------------------------------
 
+void
+Cyg_ThreadQueue_Implementation::remove( Cyg_Thread *thread )
+{
+    CYG_REPORT_FUNCTION();
+    CYG_REPORT_FUNCARG1("thread=%08x", thread);
+
+    thread->queue = NULL;
+
+    Cyg_CList_T<Cyg_Thread>::remove( thread );
+
+    CYG_REPORT_RETURN();
+}
+
+// -------------------------------------------------------------------------
+
 Cyg_Thread *
 Cyg_ThreadQueue_Implementation::highpri(void)
 {
--- a/packages/kernel/current/tests/dhrystone.c
+++ b/packages/kernel/current/tests/dhrystone.c
@@ -40,7 +40,7 @@
 # include <pkgconf/isoinfra.h>
 
 # if !defined(CYGFUN_KERNEL_API_C) \
-    || CYGINT_ISO_STDIO_FORMATTED_IO == 0 \
+    || defined(CYGINT_ISO_STDIO_FORMATTED_IO) \
     || CYGINT_ISO_MALLOC == 0 \
     || CYGINT_ISO_STRING_STRFUNCS == 0
 
--- a/packages/kernel/current/tests/kcache1.c
+++ b/packages/kernel/current/tests/kcache1.c
@@ -332,6 +332,7 @@ static void entry0( cyg_addrword_t data 
 
     cyg_test_is_simulator = 1;
 #endif    
+
 #ifdef HAL_ICACHE_INVALIDATE_ALL
     HAL_DISABLE_INTERRUPTS(oldints);
     HAL_DCACHE_PURGE_ALL();
--- a/packages/kernel/current/tests/kill.cxx
+++ b/packages/kernel/current/tests/kill.cxx
@@ -56,18 +56,11 @@
 
 #include "testaux.hxx"
 
-#ifdef CYGPKG_HAL_I386_LINUX
-// On the synthetic target the delay needs to be a bit bigger to avoid
+// In general, this delay has to be long enough to account for slow targets
+// and potential problems on e.g. the linux synthetic target to avoid
 // potential problems due to timing inaccuracy and scheduling of Linux
-// tasks.
+// tasks. It is decreased further below for simulators.
 int delay_ticks = 5;
-#else
-// if we delayed for just one tick, there's a good chance the clock may
-// roll over immediately, giving a negligible practical delay. So always use
-// a value greater than 1
-int delay_ticks = 2;
-#endif
-
 
 
 static Cyg_Binary_Semaphore s0, s1;
@@ -158,6 +151,9 @@ void release_main(void)
 {
     CYG_TEST_INIT();
 
+    if (cyg_test_is_simulator)
+        delay_ticks = 2;
+
     new_thread( entry0, 0);
     new_thread( entry1, 1);
     new_thread( entry2, 2);
--- a/packages/kernel/current/tests/stress_threads.c
+++ b/packages/kernel/current/tests/stress_threads.c
@@ -62,7 +62,7 @@
 
 #include <cyg/kernel/kapi.h>
 
-#if CYGINT_ISO_STDIO_FORMATTED_IO
+#ifdef CYGINT_ISO_STDIO_FORMATTED_IO
 
 #include <stdio.h>
 #include <stdlib.h>
--- a/packages/language/c/libc/stdio/current/ChangeLog
+++ b/packages/language/c/libc/stdio/current/ChangeLog
@@ -1,3 +1,8 @@
+2001-02-01  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* cdl/stdio.cdl (CYGPKG_LIBC_STDIO_OPEN): Implements
+	CYGINT_ISO_STDIO_POSIX_FDFUNCS ( fileno() and fdopen() ).
+
 2000-11-01  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/stdio.h: Make FILE array type larger to be more resistant
--- a/packages/language/c/libc/stdio/current/cdl/stdio.cdl
+++ b/packages/language/c/libc/stdio/current/cdl/stdio.cdl
@@ -251,6 +251,7 @@ cdl_package CYGPKG_LIBC_STDIO {
     cdl_option CYGPKG_LIBC_STDIO_OPEN {
         display       "Dynamic opening/closing of files"
         requires      CYGINT_ISO_MALLOC
+        implements    CYGINT_ISO_STDIO_POSIX_FDFUNCS
         default_value { 0 != CYGINT_ISO_MALLOC }
         description   "
             fopen() and fclose() use dynamic memory
--- a/packages/pkgconf/fixhtml.tcl
+++ b/packages/pkgconf/fixhtml.tcl
@@ -55,6 +55,19 @@
 
 set year [clock format [clock seconds] -format "%Y"]
 
+set copyright_banner \
+"<!-- Copyright (C) $year Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/)                            -->
+<!-- Distribution of substantively modified versions of this         -->
+<!-- document is prohibited without the explicit permission of the   -->
+<!-- copyright holder.                                               -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission obtained from the copyright holder                   -->"
+
 # The generated files all have a .htm suffix rather than a .html
 # suffix. For now this is preserved, to avoid having to change all the
 # anchors. It might be better to rename all the files to .html in
@@ -77,7 +90,7 @@ foreach file $files {
 	    regsub -all "\n>" $data ">\n" data
 	    
 	    # Add a copyright banner
-	    set data [concat "<!-- Copyright (C) $year Red Hat, Inc. -->\n" $data]
+	    set data "[set copyright_banner]\n[set data]"
 
 	    # Take care of some character entities that Netscape does not understand
 	    regsub -all "&mgr;"    $data "\\&#03BC;" data
--- a/packages/redboot/current/ChangeLog
+++ b/packages/redboot/current/ChangeLog
@@ -1,3 +1,83 @@
+2001-02-12  Jesper Skov  <jskov@redhat.com>
+
+	* src/main.c: Use CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL instead
+	of CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL.
+
+2001-02-11  Gary Thomas  <gthomas@redhat.com>
+
+	* src/net/ping.c (do_ping): Accomodate new MS_TICKS scheme.
+
+2001-02-09  Grant Edwards  <grante@visi.com>
+
+	* include/net/net.h (MS_TICKS_DELAY): New macro, different from
+	MS_TICKS() so that MS_TICKS() gets the current tick count, and
+	MS_TICKS_DELAY is used in a delay loop to actually do a delay.
+
+	* src/ticks.c (get_ms_ticks): New function imlementing rework of
+	MS_TICKS
+
+	* src/net/net_io.c (net_io_getc): Use MS_TICKS_DELAY() instead of
+	CYGACC_CALL_IF_DELAY_US() directly
+	(net_io_getc_timeout): Likewise
+
+	* src/net/udp.c (__udp_recvfrom): MS_TICKS -> MS_TICKS_DELAY
+	* src/net/bootp.c (__bootp_find_local_ip): Likewise
+
+2001-02-09  Jonathan Larmour  <jlarmour@redhat.com>
+2001-02-09  Grant Edwards  <grante@visi.com>
+
+	* src/net/net_io.c (net_io_getc_nonblock): Silence compiler warning
+
+2001-01-31  Gary Thomas  <gthomas@redhat.com>
+
+	* include/redboot.h: 
+	* cdl/redboot.cdl: 
+	* src/flash.c: Use new CRC functions.
+
+	* src/crc.c: New file - supports 16 and 32 bit CRC functions.
+
+2001-01-31  Grant Edwards <grante@visi.com>
+
+	* src/net/net_io.c (net_io_test): Use new idle function to
+	poll for incoming network connections.  Removes #if requirements
+	from the main CLI loop.
+
+	* src/main.c (cyg_start): 
+	* include/redboot.h (RedBoot_idle): Add new tables to support
+	user defined functions to be called when idle (during command input).
+
+2001-01-31  Gary Thomas  <gthomas@redhat.com>
+
+	* include/redboot.h: 
+	* src/main.c (cyg_start): 
+	* src/net/net_io.c (net_io_getc_nonblock): Forgo TELNET escape
+	processing if GDB is active (requires 8-bit clean connection).
+
+2001-01-31  Nick Garnett  <nickg@cygnus.co.uk>
+
+	* src/syscall.c (__do_syscall):
+	Added SYS_meminfo syscall.
+
+	* src/net/net_io.c (net_io_getc_nonblock):
+	Telnet escape processing temporarily disabled because it does not
+	work.
+
+2001-01-31  Grant Edwards <grante@visi.com>
+
+	* include/net/net.h: 
+	* src/net/enet.c (__eth_install_listener, __eth_remove_listener): 
+	New functions - allow user registerable callout to handle 
+	non-standard ethernet packets.
+
+2001-01-30  Gary Thomas  <gthomas@redhat.com>
+
+	* src/main.c (do_reset): HAL macro name changed.
+
+	* src/net/ping.c (do_ping): Remove warning.
+
+	* src/main.c (do_help): Only display help for selected topic
+	if provided.
+
 2001-01-24  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/main.c (cyg_start): Rework last change to use more generic
@@ -11,7 +91,8 @@ 2001-01-24  Hugo Tyson  <hmt@redhat.com>
 
 2001-01-22  Gary Thomas  <gthomas@redhat.com>
 
-	* src/net/inet_addr.c (inet_aton): Fix byte order on big endian systems.
+	* src/net/inet_addr.c (inet_aton): Fix byte order on big endian 
+	systems.
 
 	* src/net/icmp.c (__icmp_install_listener): 
 	(__icmp_remove_listener): New functions.
@@ -352,7 +433,7 @@ 2000-09-11  Jonathan Larmour  <jlarmour@
 2000-09-07 Andrew Lunn  <andrew.lunn@ascom.ch>
 
 	* src/load.c, include/redboot.h: renamed the getc functions to
- 	redboot_getc and made them globel so custom boot loaders can use
+ 	redboot_getc and made them global so custom boot loaders can use
  	them.
 
 2000-09-06  Gary Thomas  <gthomas@redhat.com>
--- a/packages/redboot/current/cdl/redboot.cdl
+++ b/packages/redboot/current/cdl/redboot.cdl
@@ -74,7 +74,7 @@ cdl_package CYGPKG_REDBOOT {
                      stripping before being converted to a binary image.
                      This is handled by a rule in the target CDL."
 
-        compile main.c
+        compile main.c crc.c
 	compile printf.c misc_funs.c io.c parse.c ticks.c xyzModem.c syscall.c
         compile -library=libextras.a load.c 
 
@@ -149,6 +149,18 @@ cdl_package CYGPKG_REDBOOT {
           rather than from RedBoot's stack."
     }
 
+    cdl_option CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT {
+        display       "Command processing idle timeout (ms)"
+        flavor        data
+        default_value 10
+        description   "
+          This option controls the timeout period before the
+          command processing is considered 'idle'.  Making this
+          number smaller will cause idle processing to take place
+          more often, etc.  The default value of 10ms is a reasonable
+          tradeoff between responsiveness and overhead."
+    }
+
     cdl_component CYGPKG_REDBOOT_FLASH {
         display       "Allow RedBoot to support FLASH programming"
         flavor        bool
@@ -180,7 +192,7 @@ cdl_package CYGPKG_REDBOOT {
               relative to the start of FLASH."
         }
 
-        cdl_option CYGSEM_REDBOOT_FLASH_CONFIG {
+        cdl_component CYGSEM_REDBOOT_FLASH_CONFIG {
             display       "Keep RedBoot configuration data in FLASH"
             flavor        bool
             default_value 1
@@ -188,6 +200,24 @@ cdl_package CYGPKG_REDBOOT {
               When this option is enabled, RedBoot will keep configuration
               data in a separate block of FLASH memory.  This data will
               include such items as the node IP address or startup scripts."
+
+            cdl_option CYGNUM_REDBOOT_FLASH_CONFIG_SIZE {
+                display       "Length of configuration data in FLASH"
+                flavor        data
+                default_value 1024
+                description "
+                  This option is used to control the amount of memory and FLASH
+                  to be used for configuration options (persistent storage)."
+            }
+
+            cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE {
+                display       "Length of configuration script(s) in FLASH"
+                flavor        data
+                default_value 512
+                description "
+                  This option is used to control the amount of memory and FLASH
+                  to be used for configuration options (persistent storage)."
+            }
         }
 
         cdl_option CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL {
--- a/packages/redboot/current/include/flash_config.h
+++ b/packages/redboot/current/include/flash_config.h
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -46,8 +46,10 @@
 #ifndef _FLASH_CONFIG_H_
 #define _FLASH_CONFIG_H_
 
-#define MAX_SCRIPT_LENGTH 512
+#define MAX_SCRIPT_LENGTH CYGNUM_REDBOOT_FLASH_SCRIPT_SIZE
+#define MAX_CONFIG_DATA   CYGNUM_REDBOOT_FLASH_CONFIG_SIZE
 
+#define CONFIG_EMPTY   0
 #define CONFIG_BOOL    1
 #define CONFIG_INT     2
 #define CONFIG_STRING  3
@@ -63,14 +65,22 @@ struct config_option {
     char *enable;
     bool  enable_sense;
     int   type;
+    unsigned long dflt;
 } CYG_HAL_TABLE_TYPE;
 
 #define ALWAYS_ENABLED (char *)0
 
-#define RedBoot_config_option(_t_,_n_,_e_,_ie_,_type_)                                  \
-struct config_option _config_option_##_n_                                               \
-CYG_HAL_TABLE_QUALIFIED_ENTRY(RedBoot_config_options,_n_) = {#_n_,_t_,_e_,_ie_,_type_};
+#define RedBoot_config_option(_t_,_n_,_e_,_ie_,_type_,_dflt_)        \
+struct config_option _config_option_##_n_                               \
+CYG_HAL_TABLE_QUALIFIED_ENTRY(RedBoot_config_options,_n_) =             \
+   {#_n_,_t_,_e_,_ie_,_type_,(unsigned long)_dflt_};
 
-void flash_get_config(char *key, void *val, int type);
+// Cause the in-memory configuration data to be written to flash
+void flash_write_config(void);
+// Fetch a data item from flash storage, returns 'false' if not found
+bool flash_get_config(char *key, void *val, int type);
+// Add a new data item to configuration data base.  Returns 'false'
+// if no space is available.
+bool flash_add_config(struct config_option *opt);
 
 #endif // _FLASH_CONFIG_H_
--- a/packages/redboot/current/include/net/net.h
+++ b/packages/redboot/current/include/net/net.h
@@ -53,7 +53,9 @@
 extern bool net_debug;
 
 extern unsigned long do_ms_tick(void);
-#define MS_TICKS() do_ms_tick()
+extern unsigned long get_ms_ticks(void);
+#define MS_TICKS() get_ms_ticks()
+#define MS_TICKS_DELAY() do_ms_tick()
 
 /* #define NET_SUPPORT_RARP  1 */
 #define NET_SUPPORT_ICMP 1
@@ -280,7 +282,7 @@ typedef struct _pktbuf {
 
 
 /* protocol handler */
-typedef void (*pkt_handler_t)(pktbuf_t *pkt);
+typedef void (*pkt_handler_t)(pktbuf_t *pkt, eth_header_t *eth_hdr);
 
 /* ICMP fielder */
 typedef void (*icmp_handler_t)(pktbuf_t *pkt, ip_route_t *src_route);
@@ -377,17 +379,13 @@ extern void __pktbuf_dump(void);
  * Install handlers for ethernet packets.
  * Returns old handler.
  */
-extern pkt_handler_t __eth_install_handler(int eth_type,
-					   pkt_handler_t handler);
-/*
- * Set tcp port number for debugging. If not called, a default
- * will be selected.
- */
-extern void _bsp_net_set_debug_port(int portnum);
+extern pkt_handler_t __eth_install_listener(int eth_type,
+                                            pkt_handler_t handler);
+extern void __eth_remove_listener(int eth_type);
 
 /*
- * Non-blocking poll of ethernet link. Processes at most
- * one packet.
+ * Non-blocking poll of ethernet link. Processes all pending
+ * input packets.
  */
 extern void __enet_poll(void);
 
--- a/packages/redboot/current/include/redboot.h
+++ b/packages/redboot/current/include/redboot.h
@@ -71,12 +71,12 @@ EXTERN int argc;
 EXTERN char *argv[MAX_ARGV];
 EXTERN unsigned char *ram_start, *ram_end;
 EXTERN unsigned long *entry_address;
-EXTERN bool config_ok;
 
 #ifdef CYGPKG_REDBOOT_ANY_CONSOLE
 EXTERN bool console_selected;
 #endif
 EXTERN bool console_echo;
+EXTERN bool gdb_active;
 
 #ifdef CYGPKG_REDBOOT_NETWORKING
 EXTERN bool have_net, use_bootp;
@@ -120,6 +120,10 @@ int  gets(char *line, int len, int timeo
 int  start_console(void);
 void end_console(int old_console);
 
+// CRC support
+unsigned short crc16(unsigned char *buf, int len);
+unsigned long  crc32(unsigned char *buf, int len);
+
 // CLI support functions
 bool parse_num(char *s, unsigned long *val, char **es, char *delim);
 bool parse_bool(char *s, bool *val);
@@ -155,7 +159,19 @@ struct init_tab_entry {
 struct init_tab_entry _init_tab_##_p_##_f_ CYG_HAL_TABLE_QUALIFIED_ENTRY(RedBoot_inits,_f_) = { _f_ }; 
 #define RedBoot_init(_f_,_p_) _RedBoot_init(_f_,_p_)
 
-
+// Main loop [idle] call-back functions
+#define RedBoot_IDLE_FIRST          0000
+#define RedBoot_IDLE_BEFORE_NETIO   3000
+#define RedBoot_IDLE_NETIO          5000
+#define RedBoot_IDLE_AFTER_NETIO    7000
+#define RedBoot_IDLE_LAST           9999
+struct idle_tab_entry {
+    void_fun_ptr fun;
+} CYG_HAL_TABLE_TYPE;
+#define _RedBoot_idle(_f_,_p_)                                          \
+struct idle_tab_entry _idle_tab_##_p_##_f_ CYG_HAL_TABLE_QUALIFIED_ENTRY(RedBoot_idle,_f_) = { _f_ }; 
+#define RedBoot_idle(_f_,_p_) _RedBoot_idle(_f_,_p_)
+ 
 // Option processing support
 
 struct option_info {
new file mode 100644
--- /dev/null
+++ b/packages/redboot/current/src/crc.c
@@ -0,0 +1,175 @@
+//==========================================================================
+//
+//      crc.c
+//
+//      RedBoot CRC-16 calculations
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos 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.redhat.com/                                                   
+//                                                                          
+// 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 Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    gthomas
+// Contributors: gthomas
+// Date:         2001-01-31
+// Purpose:      
+// Description:  
+//              
+// This code is part of RedBoot (tm).
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <redboot.h>
+
+// Table of CRC constants - implements x^16+x^12+x^5+1
+static unsigned short crc16_tab[] = {
+    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 
+    0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 
+    0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 
+    0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 
+    0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 
+    0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 
+    0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 
+    0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 
+    0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 
+    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 
+    0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 
+    0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 
+    0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 
+    0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 
+    0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 
+    0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 
+    0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 
+    0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 
+    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 
+    0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 
+    0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 
+    0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 
+    0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 
+    0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 
+    0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 
+    0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 
+    0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 
+    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 
+    0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 
+    0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 
+    0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 
+    0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, 
+};
+
+unsigned short
+crc16(unsigned char *buf, int len)
+{
+    int i;
+    unsigned short cksum;
+
+    cksum = 0;
+    for (i = 0;  i < len;  i++) {
+        cksum = crc16_tab[((cksum>>8) ^ *buf++) & 0xFF] ^ (cksum << 8);
+    }
+    return cksum;
+}
+
+  /* ====================================================================== */
+  /*  COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or       */
+  /*  code or tables extracted from it, as desired without restriction.     */
+  /*                                                                        */
+  /*  First, the polynomial itself and its table of feedback terms.  The    */
+  /*  polynomial is                                                         */
+  /*  X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0   */
+  /*                                                                        */
+  /* ====================================================================== */
+
+static unsigned long crc32_tab[] = {
+      0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
+      0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
+      0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
+      0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
+      0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
+      0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
+      0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
+      0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
+      0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
+      0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
+      0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
+      0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
+      0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
+      0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
+      0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
+      0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
+      0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
+      0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
+      0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
+      0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
+      0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
+      0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
+      0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
+      0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
+      0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
+      0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
+      0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
+      0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
+      0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
+      0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
+      0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
+      0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
+      0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
+      0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
+      0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
+      0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
+      0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
+      0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
+      0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
+      0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
+      0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
+      0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
+      0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
+      0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
+      0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
+      0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
+      0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
+      0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
+      0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
+      0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
+      0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
+      0x2d02ef8dL
+   };
+
+/* Return a 32-bit CRC of the contents of the buffer. */
+
+unsigned long 
+crc32(unsigned char *s, int len)
+{
+  int i;
+  unsigned long crc32val;
+  
+  crc32val = 0;
+  for (i = 0;  i < len;  i++) {
+      crc32val = crc32_tab[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8);
+  }
+  return crc32val;
+}
--- a/packages/redboot/current/src/flash.c
+++ b/packages/redboot/current/src/flash.c
@@ -131,20 +131,6 @@ static void *flash_start, *flash_end;
 static int block_size, blocks;
 static void *fis_work_block;
 
-// Simple XOR style checksum
-static unsigned long
-_cksum(unsigned long *buf, int len)
-{
-    unsigned long cksum = 0;
-
-    // Round 'len' up to multiple of longwords
-    len = (len + (sizeof(unsigned long)-1)) / sizeof(unsigned long);   
-    while (len-- > 0) {
-        cksum ^= *buf++;
-    }
-    return cksum;
-}
-
 struct fis_image_desc *
 fis_lookup(char *name)
 {
@@ -532,7 +518,7 @@ fis_create(int argc, char *argv[])
     img->entry_point = entry_addr_set ? entry_addr : (unsigned long)entry_address;  // Hope it's been set
     img->size = length;
     img->data_length = img_size;
-    img->file_cksum = _cksum((unsigned long *)flash_addr, img_size);
+    img->file_cksum = crc32((unsigned char *)flash_addr, img_size);
 #ifdef CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL
     // Insure [quietly] that the directory is unlocked before trying to update
     flash_unlock((void *)fis_addr, block_size, (void **)&err_addr);
@@ -762,7 +748,7 @@ fis_load(int argc, char *argv[])
     }
     memcpy((void *)mem_addr, (void *)img->flash_base, img->size);
     entry_address = (unsigned long *)img->entry_point;
-    cksum = _cksum((unsigned long *)mem_addr, img->data_length);
+    cksum = crc32((unsigned char *)mem_addr, img->data_length);
     if (show_cksum) {
         printf("Checksum: 0x%08lx\n", cksum);
     }
@@ -820,11 +806,13 @@ do_fis(int argc, char *argv[])
 // Configuration data, saved in FLASH, used to set/update RedBoot
 // normal "configuration" data items.
 static struct _config {
+    unsigned long len;
     unsigned long key1;
-    unsigned char config_data[1024-(3*4)];
+    unsigned char config_data[MAX_CONFIG_DATA-(4*4)];
     unsigned long key2;
     unsigned long cksum;
 } config;
+static bool config_ok;
 
 #define CONFIG_KEY1    0x0BADFACE
 #define CONFIG_KEY2    0xDEADDEAD
@@ -844,12 +832,14 @@ static struct _config {
 RedBoot_config_option("Run script at boot",
                       boot_script,
                       ALWAYS_ENABLED, true,
-                      CONFIG_BOOL
+                      CONFIG_BOOL,
+                      false
     );
 RedBoot_config_option("Boot script",
                       boot_script_data,
                       "boot_script", true,
-                      CONFIG_SCRIPT
+                      CONFIG_SCRIPT,
+                      ""
     );
 // Some preprocessor magic for building the [constant] prompt string
 #define __cat(s1,c2,s3) s1 ## #c2 ## s3
@@ -859,7 +849,8 @@ RedBoot_config_option(_cat("Boot script 
                            "ms resolution)"),
                       boot_script_timeout,
                       "boot_script", true,
-                      CONFIG_INT
+                      CONFIG_INT,
+                      0
     );
 #undef __cat
 #undef _cat
@@ -869,36 +860,65 @@ CYG_HAL_TABLE_END( __CONFIG_options_TAB_
 
 extern struct config_option __CONFIG_options_TAB__[], __CONFIG_options_TAB_END__[];
 
+// 
+// Layout of config data
+// Each data item is variable length, with the name, type and dependencies
+// encoded into the object.
+//  offset   contents
+//       0   data type
+//       1   length of name (N)
+//       2   enable sense
+//       3   length of enable key (M)
+//       4   key name
+//     N+4   enable key
+//   M+N+4   data value
+//
+
+#define CONFIG_OBJECT_TYPE(dp)          (dp)[0]
+#define CONFIG_OBJECT_KEYLEN(dp)        (dp)[1]
+#define CONFIG_OBJECT_ENABLE_SENSE(dp)  (dp)[2]
+#define CONFIG_OBJECT_ENABLE_KEYLEN(dp) (dp)[3]
+#define CONFIG_OBJECT_KEY(dp)           ((dp)+4)
+#define CONFIG_OBJECT_ENABLE_KEY(dp)    ((dp)+4+CONFIG_OBJECT_KEYLEN(dp))
+#define CONFIG_OBJECT_VALUE(dp)         ((dp)+4+CONFIG_OBJECT_KEYLEN(dp)+CONFIG_OBJECT_ENABLE_KEYLEN(dp))
+
 static int
-get_config(struct config_option *opt, int offset, bool list_only)
+get_config(unsigned char *dp, char *title, bool list_only)
 {
     char line[256], *sp, *lp;
     int ret;
-    bool hold_bool_val, enable;
-    unsigned long hold_int_val;
+    bool hold_bool_val, new_bool_val, enable;
+    unsigned long hold_int_val, new_int_val;
 #ifdef CYGPKG_REDBOOT_NETWORKING
-    in_addr_t hold_ip_val;
+    in_addr_t hold_ip_val, new_ip_val;
     enet_addr_t hold_esa_val;
     int esa_ptr;
     char *esp;
 #endif
     void *val_ptr;
+    int type;
 
-    if (opt->enable) {
-        flash_get_config(opt->enable, &enable, CONFIG_BOOL);
-        if ((opt->enable_sense && !enable) ||
-            (!opt->enable_sense && enable)) {
+    if (CONFIG_OBJECT_ENABLE_KEYLEN(dp)) {
+        flash_get_config(CONFIG_OBJECT_ENABLE_KEY(dp), &enable, CONFIG_BOOL);
+        if (((bool)CONFIG_OBJECT_ENABLE_SENSE(dp) && !enable) ||
+            (!(bool)CONFIG_OBJECT_ENABLE_SENSE(dp) && enable)) {
             return CONFIG_OK;  // Disabled field
         }
     }
-    val_ptr = (void *)((unsigned char *)&config + offset);
-    printf("%s: ", opt->title);
-    switch (opt->type) {
+    val_ptr = (void *)CONFIG_OBJECT_VALUE(dp);
+    if (title != (char *)NULL) {
+        printf("%s: ", title);
+    } else {
+        printf("%s: ", CONFIG_OBJECT_KEY(dp));
+    }
+    switch (type = CONFIG_OBJECT_TYPE(dp)) {
     case CONFIG_BOOL:
-        printf("%s ", *(bool *)val_ptr ? "true" : "false");
+        memcpy(&hold_bool_val, val_ptr, sizeof(bool));
+        printf("%s ", hold_bool_val ? "true" : "false");
         break;
     case CONFIG_INT:
-        printf("%d ", *(int *)val_ptr);
+        memcpy(&hold_int_val, val_ptr, sizeof(unsigned long));
+        printf("%ld ", hold_int_val);
         break;
 #ifdef CYGPKG_REDBOOT_NETWORKING
     case CONFIG_IP:
@@ -931,31 +951,33 @@ get_config(struct config_option *opt, in
         printf("\n");
         return CONFIG_OK;
     }
-    if (opt->type != CONFIG_SCRIPT) {
+    if (type != CONFIG_SCRIPT) {
         ret = gets(line, sizeof(line), 0);    
         if (ret < 0) return CONFIG_ABORT;
         if (strlen(line) == 0) return CONFIG_OK;  // Just a CR - leave value untouched
         if (line[0] == '.') return CONFIG_DONE;
         if (line[0] == '^') return CONFIG_BACK;
     }
-    switch (opt->type) {
+    switch (type) {
     case CONFIG_BOOL:
-        hold_bool_val = *(bool *)val_ptr;
-        if (!parse_bool(line, (bool *)val_ptr)) {
+        memcpy(&hold_bool_val, val_ptr, sizeof(bool));
+        if (!parse_bool(line, &new_bool_val)) {
             return CONFIG_BAD;
         }
-        if (hold_bool_val != *(bool *)val_ptr) {
+        if (hold_bool_val != new_bool_val) {
+            memcpy(val_ptr, &new_bool_val, sizeof(bool));
             return CONFIG_CHANGED;
         } else {
             return CONFIG_OK;
         }
         break;
     case CONFIG_INT:
-        hold_int_val = *(unsigned long *)val_ptr;
-        if (!parse_num(line, (unsigned long *)val_ptr, 0, 0)) {
+        memcpy(&hold_int_val, val_ptr, sizeof(unsigned long));
+        if (!parse_num(line, &new_int_val, 0, 0)) {
             return CONFIG_BAD;
         }
-        if (hold_int_val != *(unsigned long *)val_ptr) {
+        if (hold_int_val != new_int_val) {
+            memcpy(val_ptr, &new_int_val, sizeof(unsigned long));
             return CONFIG_CHANGED;
         } else {
             return CONFIG_OK;
@@ -963,11 +985,12 @@ get_config(struct config_option *opt, in
         break;
 #ifdef CYGPKG_REDBOOT_NETWORKING
     case CONFIG_IP:
-        hold_ip_val.s_addr = ((in_addr_t *)val_ptr)->s_addr;
-        if (!inet_aton(line, (in_addr_t *)val_ptr)) {
+        memcpy(&hold_ip_val.s_addr, &((in_addr_t *)val_ptr)->s_addr, sizeof(in_addr_t));
+        if (!inet_aton(line, &new_ip_val)) {
             return CONFIG_BAD;
         }
-        if (hold_ip_val.s_addr != ((in_addr_t *)val_ptr)->s_addr) {
+        if (hold_ip_val.s_addr != new_ip_val.s_addr) {
+            memcpy(val_ptr, &new_ip_val, sizeof(in_addr_t));
             return CONFIG_CHANGED;
         } else {
             return CONFIG_OK;
@@ -1014,28 +1037,6 @@ get_config(struct config_option *opt, in
 // Manage configuration information with the FLASH
 //
 
-// Calculate a simple checksum.  This is used to validate configuration
-// data.  Since it is used for sensitive information, it makes sense to
-// be somewhat careful when accepting it.  Also, the [strange] addition
-// of shifted data helps make this work even if the data layout changes
-// over time.
-
-static unsigned long
-_fconfig_cksum(unsigned long *buf, int len)
-{
-    unsigned long cksum = 0;
-    int shift = 0;
-
-    // Round 'len' up to multiple of longwords
-    len = (len + (sizeof(unsigned long)-1)) / sizeof(unsigned long);   
-    while (len-- > 0) {
-        cksum ^= (*buf | (*buf << shift));
-        buf++;
-        if (++shift == 16) shift = 0;
-    }
-    return cksum;
-}
-
 static int
 config_length(int type)
 {
@@ -1062,16 +1063,15 @@ config_length(int type)
 void
 do_flash_config(int argc, char *argv[])
 {
-    int stat, ret;
-    void *cfg_base, *err_addr;
     bool need_update = false;
-    struct config_option *optbeg = __CONFIG_options_TAB__;
     struct config_option *optend = __CONFIG_options_TAB_END__;
     struct config_option *opt = __CONFIG_options_TAB__;
     struct _config hold_config;
-    int offset = sizeof(unsigned long);
     struct option_info opts[1];
     bool list_only;
+    unsigned char *dp;
+    int len, ret;
+    char *title;
 
     if (!do_flash_init()) return;
     memcpy(&hold_config, &config, sizeof(config));
@@ -1084,8 +1084,24 @@ do_flash_config(int argc, char *argv[])
         return;
     }
 
-    while (opt != optend) {
-        ret = get_config(opt, offset, list_only);
+    dp = &config.config_data[0];
+    while (dp < &config.config_data[sizeof(config.config_data)]) {
+        if (CONFIG_OBJECT_TYPE(dp) == CONFIG_EMPTY) {
+            break;
+        }
+        len = 4 + CONFIG_OBJECT_KEYLEN(dp) + CONFIG_OBJECT_ENABLE_KEYLEN(dp) + 
+            config_length(CONFIG_OBJECT_TYPE(dp));
+        // Provide a title for well known [i.e. builtin] objects
+        title = (char *)NULL;
+        opt = __CONFIG_options_TAB__;
+        while (opt != optend) {
+            if (strcmp(opt->key, CONFIG_OBJECT_KEY(dp)) == 0) {
+                title = opt->title;
+                break;
+            }
+            opt++;
+        }
+        ret = get_config(dp, title, list_only);
         switch (ret) {
         case CONFIG_DONE:
             goto done;
@@ -1095,11 +1111,10 @@ do_flash_config(int argc, char *argv[])
         case CONFIG_CHANGED:
             need_update = true;
         case CONFIG_OK:
-            offset += config_length(opt->type);
-            opt++;
+            dp += len;
             break;
         case CONFIG_BACK:
-            if (opt != optbeg) opt--;
+            dp = &config.config_data[0];
             continue;
         case CONFIG_BAD:
             // Nothing - make him do it again
@@ -1109,8 +1124,22 @@ do_flash_config(int argc, char *argv[])
 
  done:
     if (!need_update) return;
-    config.key1 = CONFIG_KEY1;  config.key2 = CONFIG_KEY2;
-    config.cksum = _fconfig_cksum((unsigned long *)&config, sizeof(config)-sizeof(config.cksum));
+    flash_write_config();
+}
+
+//
+// Write the in-memory copy of the configuration data to the flash device.
+//
+void
+flash_write_config(void)
+{
+    int stat;
+    void *cfg_base, *err_addr;
+
+    config.len = sizeof(config);
+    config.key1 = CONFIG_KEY1;  
+    config.key2 = CONFIG_KEY2;
+    config.cksum = crc32((unsigned char *)&config, sizeof(config)-sizeof(config.cksum));
     cfg_base = (void *)((unsigned long)flash_end - (2*block_size));
     if (verify_action("Update RedBoot non-volatile configuration")) {
 #ifdef CYGSEM_REDBOOT_FLASH_LOCK_SPECIAL
@@ -1133,26 +1162,32 @@ do_flash_config(int argc, char *argv[])
     }
 }
 
-void
+//
+// Retrieve a data object from the data base (in memory copy)
+//
+bool
 flash_get_config(char *key, void *val, int type)
 {
-    struct config_option *optend = __CONFIG_options_TAB_END__;
-    struct config_option *opt = __CONFIG_options_TAB__;
-    int offset = sizeof(unsigned long);  // Offset past starting 'key'
+    unsigned char *dp;
     void *val_ptr;
+    int len;
 
-    if (!do_flash_init()) return;
+    if (!config_ok) return false;
 
-    while (opt != optend) {
-        val_ptr = (void *)((unsigned char *)&config + offset);
-        if (strcmp(opt->key, key) == 0) {
-            if (opt->type == type) {
-                switch (opt->type) {
+    dp = &config.config_data[0];
+    while (dp < &config.config_data[sizeof(config.config_data)]) {
+        len = 4 + CONFIG_OBJECT_KEYLEN(dp) + CONFIG_OBJECT_ENABLE_KEYLEN(dp) +
+            config_length(CONFIG_OBJECT_TYPE(dp));
+        val_ptr = (void *)CONFIG_OBJECT_VALUE(dp);
+        if (strcmp(key, CONFIG_OBJECT_KEY(dp)) == 0) {
+            if (CONFIG_OBJECT_TYPE(dp) == type) {
+                switch (type) {
+                    // Note: the data may be unaligned in the configuration data
                 case CONFIG_BOOL:
-                    *(bool *)val = *(bool *)val_ptr;
+                    memcpy(val, val_ptr, sizeof(bool));
                     break;
                 case CONFIG_INT:
-                    *(unsigned long *)val = *(unsigned long *)val_ptr;
+                    memcpy(val, val_ptr, sizeof(unsigned long));
                     break;
 #ifdef CYGPKG_REDBOOT_NETWORKING
                 case CONFIG_IP:
@@ -1172,13 +1207,102 @@ flash_get_config(char *key, void *val, i
             } else {
                 printf("Request for config value '%s' - wrong type\n", key);
             }
+            return true;
+        }
+        dp += len;
+    }
+    printf("Can't find config data for '%s'\n", key);
+    return false;
+}
+
+//
+// Add a new option to the database
+//
+bool
+flash_add_config(struct config_option *opt)
+{
+    unsigned char *dp, *kp;
+    int len, elen, size;
+
+    dp = &config.config_data[0];
+    size = 0;
+    while (size < sizeof(config.config_data)) {
+        if (CONFIG_OBJECT_TYPE(dp) == CONFIG_EMPTY) {
+            kp = opt->key;
+            len = strlen(kp) + 1;
+            size += len + 2 + 2 + config_length(opt->type);
+            if (opt->enable) {
+                elen = strlen(opt->enable) + 1;
+                size += elen;
+            } else {
+                elen = 0;
+            }
+            if (size > sizeof(config.config_data)) {
+                break;
+            }
+            CONFIG_OBJECT_TYPE(dp) = opt->type; 
+            CONFIG_OBJECT_KEYLEN(dp) = len;
+            CONFIG_OBJECT_ENABLE_SENSE(dp) = opt->enable_sense;
+            CONFIG_OBJECT_ENABLE_KEYLEN(dp) = elen;
+            dp = CONFIG_OBJECT_KEY(dp);
+            while (*kp) *dp++ += *kp++;
+            *dp++ = '\0';    
+            if (elen) {
+                kp = opt->enable;
+                while (*kp) *dp++ += *kp++;
+                *dp++ = '\0';    
+            }
+            switch (opt->type) {
+                // Note: the data may be unaligned in the configuration data
+            case CONFIG_BOOL:
+                memcpy(dp, (void *)&opt->dflt, sizeof(bool));
+                break;
+            case CONFIG_INT:
+                memcpy(dp, (void *)&opt->dflt, sizeof(unsigned long));
+                break;
+#ifdef CYGPKG_REDBOOT_NETWORKING
+            case CONFIG_IP:
+                memcpy(dp, (void *)&opt->dflt, sizeof(in_addr_t));
+                break;
+            case CONFIG_ESA:
+                memcpy(dp, (void *)&opt->dflt, sizeof(enet_addr_t));
+                break;
+#endif
+            case CONFIG_STRING:
+            case CONFIG_SCRIPT:
+                break;
+            }
+            dp += config_length(opt->type);
+            return true;
+        } else {
+            len = 4 + CONFIG_OBJECT_KEYLEN(dp) + CONFIG_OBJECT_ENABLE_KEYLEN(dp) +
+                config_length(CONFIG_OBJECT_TYPE(dp));
+            dp += len;
+            size += len;
+        }
+    }
+    printf("No space to add '%s'\n", opt->key);
+    return false;
+}
+
+//
+// Reset/initialize configuration data - used only when starting from scratch
+//
+static void
+config_init(void)
+{
+    // Well known option strings
+    struct config_option *optend = __CONFIG_options_TAB_END__;
+    struct config_option *opt = __CONFIG_options_TAB__;
+
+    memset(&config, 0, sizeof(config));
+    while (opt != optend) {
+        if (!flash_add_config(opt)) {
             return;
         }
-        offset += config_length(opt->type);
         opt++;
     }
-
-    printf("Can't find config value '%s'\n", key);
+    config_ok = true;
 }
 
 //
@@ -1197,10 +1321,10 @@ load_flash_config(void)
     if (!do_flash_init()) return;
     cfg_base = (void *)((unsigned long)flash_end - (2*block_size));
     memcpy(&config, cfg_base, sizeof(config));
-    if ((_fconfig_cksum((unsigned long *)&config, sizeof(config)-sizeof(config.cksum)) != config.cksum) ||
+    if ((crc32((unsigned char *)&config, sizeof(config)-sizeof(config.cksum)) != config.cksum) ||
         (config.key1 != CONFIG_KEY1)|| (config.key2 != CONFIG_KEY2)) {
         printf("FLASH configuration checksum error or invalid key\n");
-        memset(&config, 0, sizeof(config));
+        config_init();
         return;
     }
     flash_get_config("boot_script", &use_boot_script, CONFIG_BOOL);
--- a/packages/redboot/current/src/main.c
+++ b/packages/redboot/current/src/main.c
@@ -71,7 +71,7 @@ RedBoot_cmd("version",
     );
 RedBoot_cmd("help", 
             "Help about help?", 
-            "<topic>",
+            "[<topic>]",
             do_help 
     );
 RedBoot_cmd("go", 
@@ -89,7 +89,7 @@ RedBoot_cmd("cache",
             "[ON | OFF]",
             do_caches 
     );
-#ifdef HAL_STUB_PLATFORM_RESET
+#ifdef HAL_PLATFORM_RESET
 RedBoot_cmd("reset", 
             "Reset the system", 
             "",
@@ -101,10 +101,15 @@ RedBoot_cmd("reset",
 CYG_HAL_TABLE_BEGIN( __RedBoot_INIT_TAB__, RedBoot_inits );
 CYG_HAL_TABLE_END( __RedBoot_INIT_TAB_END__, RedBoot_inits );
 extern struct init_tab_entry __RedBoot_INIT_TAB__[], __RedBoot_INIT_TAB_END__;
+
 CYG_HAL_TABLE_BEGIN( __RedBoot_CMD_TAB__, RedBoot_commands );
 CYG_HAL_TABLE_END( __RedBoot_CMD_TAB_END__, RedBoot_commands );
 extern struct cmd __RedBoot_CMD_TAB__[], __RedBoot_CMD_TAB_END__;
 
+CYG_HAL_TABLE_BEGIN( __RedBoot_IDLE_TAB__, RedBoot_idle );
+CYG_HAL_TABLE_END( __RedBoot_IDLE_TAB_END__, RedBoot_idle );
+extern struct idle_tab_entry __RedBoot_IDLE_TAB__[], __RedBoot_IDLE_TAB_END__;
+
 #ifdef HAL_ARCH_PROGRAM_NEW_STACK
 extern void HAL_ARCH_PROGRAM_NEW_STACK(void *fun);
 #endif
@@ -133,8 +138,9 @@ cyg_start(void)
     struct cmd *cmd;
     int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
     struct init_tab_entry *init_entry;
+    struct idle_tab_entry *idle_entry;
 
-    CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL);
+    CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL);
 #ifdef CYGPKG_REDBOOT_ANY_CONSOLE
     console_selected = false;
 #endif
@@ -154,8 +160,6 @@ cyg_start(void)
 
     do_version(0,0);
 
-    config_ok = false;
-
     for (init_entry = __RedBoot_INIT_TAB__; init_entry != &__RedBoot_INIT_TAB_END__;  init_entry++) {
         (*init_entry->fun)();
     }
@@ -168,21 +172,19 @@ cyg_start(void)
         printf("== Executing boot script in %d.%03d seconds - enter ^C to abort\n", 
                script_timeout_ms/1000, script_timeout_ms%1000);
         script = (unsigned char *)0;
-        while (script_timeout_ms >= 10) {
-            res = gets(line, sizeof(line), 10);
+        while (script_timeout_ms >= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) {
+            res = gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT);
             if (res == _GETS_OK) {
                 printf("== Executing boot script in %d.%03d seconds - enter ^C to abort\n", 
                        script_timeout_ms/1000, script_timeout_ms%1000);
                 continue;  // Ignore anything but ^C
             }
             if (res != _GETS_TIMEOUT) break;
-#ifdef CYGPKG_REDBOOT_NETWORKING
-            if (have_net) {
-                // Check for incoming TCP debug connection
-                net_io_test();
+            for (idle_entry = __RedBoot_IDLE_TAB__; 
+                 idle_entry != &__RedBoot_IDLE_TAB_END__;  idle_entry++) {
+                (*idle_entry->fun)();
             }
-#endif
-            script_timeout_ms -= 10;
+            script_timeout_ms -= CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT;
         }
         if (res == _GETS_CTRLC) {
             script = (unsigned char *)0;  // Disable script
@@ -197,18 +199,17 @@ cyg_start(void)
             printf("RedBoot> ");
             prompt = false;
         }
-        res = gets(line, sizeof(line), 250);
+        res = gets(line, sizeof(line), CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT);
         if (res == _GETS_TIMEOUT) {
             // No input arrived
-#ifdef CYGPKG_REDBOOT_NETWORKING
-            if (have_net) {
-                // Check for incoming TCP debug connection
-                net_io_test();
+            for (idle_entry = __RedBoot_IDLE_TAB__; 
+                 idle_entry != &__RedBoot_IDLE_TAB_END__;  idle_entry++) {
+                (*idle_entry->fun)();
             }
-#endif
         } else {
             if (res == _GETS_GDB) {
                 // Special case of '$' - need to start GDB protocol
+                gdb_active = true;
                 CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 #ifdef HAL_ARCH_PROGRAM_NEW_STACK
                 HAL_ARCH_PROGRAM_NEW_STACK(breakpoint);
@@ -233,6 +234,7 @@ void
 do_caches(int argc, char *argv[])
 {
     unsigned long oldints;
+
     if (argc == 2) {
         if (strcmpci(argv[1], "on") == 0) {
             HAL_DISABLE_INTERRUPTS(oldints);
@@ -261,10 +263,26 @@ void
 do_help(int argc, char *argv[])
 {
     struct cmd *cmd;
+    char *which = (char *)0;
+    bool show;
+    int len = 0;
 
+    if (!scan_opts(argc, argv, 1, 0, 0, (void **)&which, OPTION_ARG_TYPE_STR, "<topic>")) {
+        printf("Invalid argument\n");
+        return;
+    }
+    if (which) {
+        len = strlen(which);
+    }
     cmd = __RedBoot_CMD_TAB__;
     while (cmd != &__RedBoot_CMD_TAB_END__) {
-        printf("%s\n   %s %s\n", cmd->help, cmd->str, cmd->usage);
+        show = true;
+        if (which && (strncmpci(which, cmd->str, len) != 0)) {
+            show = false;
+        }
+        if (show) {
+            printf("%s\n   %s %s\n", cmd->help, cmd->str, cmd->usage);
+        }
         cmd++;
     }
     return;
@@ -337,7 +355,7 @@ do_go(int argc, char *argv[])
 #endif
 }
 
-#ifdef HAL_STUB_PLATFORM_RESET
+#ifdef HAL_PLATFORM_RESET
 void
 do_reset(int argc, char *argv[])
 {
@@ -345,7 +363,7 @@ do_reset(int argc, char *argv[])
     CYGACC_CALL_IF_DELAY_US(2*100000);
     printf("\n");
     CYGACC_CALL_IF_DELAY_US(50000);
-    HAL_STUB_PLATFORM_RESET();
+    HAL_PLATFORM_RESET();
     printf("!! oops, RESET not working on this platform\n");
 }
 #endif
--- a/packages/redboot/current/src/net/arp.c
+++ b/packages/redboot/current/src/net/arp.c
@@ -151,7 +151,7 @@ int
         __enet_send(pkt, &bcast_addr, ETH_TYPE_ARP);
 
         retry_start = MS_TICKS();
-	while ((MS_TICKS() - retry_start) < 250) {
+	while ((MS_TICKS_DELAY() - retry_start) < 250) {
 	    __enet_poll();
 	    if (!arp_req.waiting) {
 		__pktbuf_free(pkt);
--- a/packages/redboot/current/src/net/bootp.c
+++ b/packages/redboot/current/src/net/bootp.c
@@ -131,7 +131,7 @@ int
 		__udp_remove_listener(IPPORT_BOOTPC);
 		return 0;
 	    }
-	} while ((MS_TICKS() - start) < RETRY_TIME);
+	} while ((MS_TICKS_DELAY() - start) < RETRY_TIME);
     }
 
     /* timed out */
--- a/packages/redboot/current/src/net/enet.c
+++ b/packages/redboot/current/src/net/enet.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -59,6 +59,55 @@ static int num_received = 0;
 static int num_transmitted = 0;
 #endif
 
+//
+// Support for user handlers of additional ethernet packets (nonIP)
+//
+
+#define NUM_EXTRA_HANDLERS 4
+static struct {
+    int type;
+    pkt_handler_t handler;
+} eth_handlers[NUM_EXTRA_HANDLERS];
+
+pkt_handler_t 
+__eth_install_listener(int eth_type, pkt_handler_t handler)
+{
+    int i, empty;
+    pkt_handler_t old;
+
+    empty = -1;
+    for (i = 0;  i < NUM_EXTRA_HANDLERS;  i++) {
+        if (eth_handlers[i].type == eth_type) {
+            // Replace existing handler
+            old = eth_handlers[i].handler;
+            eth_handlers[i].handler = handler;
+            return old;
+        }
+        if (eth_handlers[i].type == 0) {
+            empty = i;
+        }
+    }
+    if (empty >= 0) {
+        // Found a free slot
+        eth_handlers[empty].type = eth_type;
+        eth_handlers[empty].handler = handler;
+    }
+    printf("** Warning: can't install listener for ethernet type 0x%02x\n", eth_type);
+    return (pkt_handler_t)0;
+}
+
+void 
+__eth_remove_listener(int eth_type)
+{
+    int i;
+    
+    for (i = 0;  i < NUM_EXTRA_HANDLERS;  i++) {
+        if (eth_handlers[i].type == eth_type) {
+            eth_handlers[i].type = 0;
+        }
+    }    
+}
+
 /*
  * Non-blocking poll of ethernet link. Process packets until no more
  * are available.
@@ -68,6 +117,7 @@ void
 {
     pktbuf_t *pkt;
     eth_header_t eth_hdr;
+    int i, type;
 
     while (true) {
         /*
@@ -86,7 +136,7 @@ void
 #if ENET_STATS
             ++num_received;
 #endif
-            switch (ntohs(eth_hdr.type)) {
+            switch (type = ntohs(eth_hdr.type)) {
 
             case ETH_TYPE_IP:
 #if ENET_STATS
@@ -115,6 +165,11 @@ void
 #endif
 
             default:
+                for (i = 0;  i < NUM_EXTRA_HANDLERS;  i++) {
+                    if (eth_handlers[i].type == type) {
+                        (eth_handlers[i].handler)(pkt, &eth_hdr);
+                    }
+                }
                 __pktbuf_free(pkt);
                 break;
             }
@@ -146,7 +201,6 @@ void
 #endif
 }
 
-
 #ifdef __LITTLE_ENDIAN__
 
 unsigned long  
--- a/packages/redboot/current/src/net/net_io.c
+++ b/packages/redboot/current/src/net/net_io.c
@@ -23,7 +23,7 @@
 //                                                                          
 // The Initial Developer of the Original Code is Red Hat.                   
 // Portions created by Red Hat are                                          
-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
 // All Rights Reserved.                                                     
 // -------------------------------------------                              
 //                                                                          
@@ -57,12 +57,14 @@
 RedBoot_config_option("GDB connection port",
                       gdb_port,
                       ALWAYS_ENABLED, true,
-                      CONFIG_INT
+                      CONFIG_INT,
+                      CYGNUM_REDBOOT_NETWORKING_TCP_PORT
     );
 RedBoot_config_option("Network debug at boot time", 
                       net_debug, 
                       ALWAYS_ENABLED, true,
-                      CONFIG_BOOL
+                      CONFIG_BOOL,
+                      false
     );
 // Note: the following options are related.  If 'bootp' is false, then
 // the other values are used in the configuration.  Because of the way
@@ -74,17 +76,20 @@ RedBoot_config_option("Network debug at 
 RedBoot_config_option("Use BOOTP for network configuration",
                       bootp, 
                       ALWAYS_ENABLED, true,
-                      CONFIG_BOOL
+                      CONFIG_BOOL,
+                      true
     );
 RedBoot_config_option("Local IP address",
                       bootp_my_ip,
                       "bootp", false,
-                      CONFIG_IP
+                      CONFIG_IP,
+                      0
     );
 RedBoot_config_option("Default server IP address",
                       bootp_server_ip,
                       "bootp", false,
-                      CONFIG_IP
+                      CONFIG_IP,
+                      0
     );
 #endif
 
@@ -160,32 +165,39 @@ static cyg_bool
 static cyg_bool
 net_io_getc_nonblock(void* __ch_data, cyg_uint8* ch)
 {
-    if (_net_io_getc_nonblock(__ch_data, ch)) {
-        if (*ch == TELNET_IAC) {
-            cyg_uint8 esc;
-            // Telnet escape - need to read/handle more
-            while (!_net_io_getc_nonblock(__ch_data, &esc)) ;
-            if (esc == TELNET_IP) {
-                // Special case for ^C == Interrupt Process
-                *ch = 0x03;  
-                // Just in case the other end needs synchronizing
-                net_io_putc(__ch_data, TELNET_IAC);
-                net_io_putc(__ch_data, TELNET_WONT);
-                net_io_putc(__ch_data, TELNET_TM);
-                net_io_flush();
-                return true;
-            }
-            if (esc == TELNET_DO) {
-                // Telnet DO option
-                while (!_net_io_getc_nonblock(__ch_data, &esc)) ;                
-                // Respond with WONT option
-                net_io_putc(__ch_data, TELNET_IAC);
-                net_io_putc(__ch_data, TELNET_WONT);
-                net_io_putc(__ch_data, esc);
-                return false;  // Ignore this whole thing!
-            }
-        }
-    } else {
+    cyg_uint8 esc;
+
+    if (!_net_io_getc_nonblock(__ch_data, ch))
+        return false;
+
+    if (gdb_active || *ch != TELNET_IAC)
+        return true;
+
+    // Telnet escape - need to read/handle more
+    while (!_net_io_getc_nonblock(__ch_data, &esc)) ;
+
+    switch (esc) {
+    case TELNET_IAC:
+        // The other special case - escaped escape
+        return true;
+    case TELNET_IP:
+        // Special case for ^C == Interrupt Process
+        *ch = 0x03;  
+        // Just in case the other end needs synchronizing
+        net_io_putc(__ch_data, TELNET_IAC);
+        net_io_putc(__ch_data, TELNET_WONT);
+        net_io_putc(__ch_data, TELNET_TM);
+        net_io_flush();
+        return true;
+    case TELNET_DO:
+        // Telnet DO option
+        while (!_net_io_getc_nonblock(__ch_data, &esc)) ;                
+        // Respond with WONT option
+        net_io_putc(__ch_data, TELNET_IAC);
+        net_io_putc(__ch_data, TELNET_WONT);
+        net_io_putc(__ch_data, esc);
+        return false;  // Ignore this whole thing!
+    default:
         return false;
     }
 }
@@ -194,16 +206,16 @@ static cyg_uint8
 net_io_getc(void* __ch_data)
 {
     cyg_uint8 ch;
-    int idle_timeout = 100;  // 10ms
+    int idle_timeout = 10;  // 10ms
 
     CYGARC_HAL_SAVE_GP();
     while (true) {
         if (net_io_getc_nonblock(__ch_data, &ch)) break;
         if (--idle_timeout == 0) {
             net_io_flush();
-            idle_timeout = 100;
+            idle_timeout = 10;
         } else {
-            CYGACC_CALL_IF_DELAY_US(100);
+            MS_TICKS_DELAY();
         }
     }
     CYGARC_HAL_RESTORE_GP();
@@ -314,13 +326,13 @@ net_io_getc_timeout(void* __ch_data, cyg
     CYGARC_HAL_SAVE_GP();
 
     net_io_flush();  // Make sure any output has been sent
-    delay_count = _timeout * 10; // delay in .1 ms steps
+    delay_count = _timeout;
 
     for(;;) {
         res = net_io_getc_nonblock(__ch_data, ch);
         if (res || 0 == delay_count--)
             break;
-        CYGACC_CALL_IF_DELAY_US(100);
+        MS_TICKS_DELAY();
     }
 
     CYGARC_HAL_RESTORE_GP();
@@ -457,6 +469,7 @@ net_io_init(void)
         CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
 
         init = 1;
+        gdb_active = false;
     }
     __tcp_listen(&tcp_sock, gdb_port);
     state = tcp_sock.state; 
@@ -465,9 +478,11 @@ net_io_init(void)
 #endif
 }
 
+// Check for incoming TCP debug connection
 void
 net_io_test(void)
 {
+    if (!have_net) return;
     __tcp_poll();
     if (state != tcp_sock.state) {
         // Something has changed
@@ -484,6 +499,11 @@ net_io_test(void)
     state = tcp_sock.state;
 }
 
+// This schedules the 'net_io_test()' function to be run by RedBoot's
+// main command loop when idle (i.e. when no input arrives after some
+// period of time).
+RedBoot_idle(net_io_test, RedBoot_IDLE_NETIO);
+
 //
 // Network initialization
 //
@@ -502,20 +522,18 @@ net_init(void)
 {
     cyg_netdevtab_entry_t *t;
 
-    if (!config_ok) {
-        // Set defaults as appropriate
-        use_bootp = true;
-        net_debug = false;
-        gdb_port = CYGNUM_REDBOOT_NETWORKING_TCP_PORT;
+    // Set defaults as appropriate
+    use_bootp = true;
+    net_debug = false;
+    gdb_port = CYGNUM_REDBOOT_NETWORKING_TCP_PORT;
 #ifdef CYGSEM_REDBOOT_FLASH_CONFIG
-    } else {
-        flash_get_config("net_debug", &net_debug, CONFIG_BOOL);
-        flash_get_config("gdb_port", &gdb_port, CONFIG_INT);
-        flash_get_config("bootp", &use_bootp, CONFIG_BOOL);
-        flash_get_config("bootp_my_ip", &__local_ip_addr, CONFIG_IP);
-        flash_get_config("bootp_server_ip", &my_bootp_info.bp_siaddr, CONFIG_IP);
+    // Fetch values from saved config data, if available
+    flash_get_config("net_debug", &net_debug, CONFIG_BOOL);
+    flash_get_config("gdb_port", &gdb_port, CONFIG_INT);
+    flash_get_config("bootp", &use_bootp, CONFIG_BOOL);
+    flash_get_config("bootp_my_ip", &__local_ip_addr, CONFIG_IP);
+    flash_get_config("bootp_server_ip", &my_bootp_info.bp_siaddr, CONFIG_IP);
 #endif
-    }
     have_net = false;
     // Make sure the recv buffers are set up
     eth_drv_buffers_init();
--- a/packages/redboot/current/src/net/ping.c
+++ b/packages/redboot/current/src/net/ping.c
@@ -182,13 +182,13 @@ do_ping(int argc, char *argv[])
         start_time = MS_TICKS();
         timer = start_time + timeout;
         icmp_received = false;
-        while (!icmp_received && (MS_TICKS() < timer)) {
+        while (!icmp_received && (MS_TICKS_DELAY() < timer)) {
             __enet_poll();
         } 
         end_time = MS_TICKS();
 
         timer = MS_TICKS() + rate;
-        while (MS_TICKS() < timer) {
+        while (MS_TICKS_DELAY() < timer) {
             __enet_poll();
         } 
 
@@ -198,7 +198,7 @@ do_ping(int argc, char *argv[])
         if (icmp_received) {
             received++;
             if (verbose) {
-                printf("icmp - seq: %d, time: %d (ticks)\n",
+                printf("icmp - seq: %ld, time: %ld (ticks)\n",
                        ntohs(hold_hdr.seqnum), end_time-start_time);
             }
         }
--- a/packages/redboot/current/src/net/udp.c
+++ b/packages/redboot/current/src/net/udp.c
@@ -239,7 +239,7 @@ int
     total_ms = (timo->tv_sec * 1000) + (timo->tv_usec / 1000);
     start = MS_TICKS();
     res = -1;
-    while ((MS_TICKS() - start) < total_ms) {
+    while ((MS_TICKS_DELAY() - start) < total_ms) {
         __enet_poll();  // Handle the hardware
         if (!recvfrom_buf) {
             // Data have arrived
--- a/packages/redboot/current/src/syscall.c
+++ b/packages/redboot/current/src/syscall.c
@@ -72,10 +72,10 @@
 #define SYS_time 	18
 
 #define SYS_interrupt   1000
+#define SYS_meminfo     1001
 
 #define __GET_SHARED  0xbaad
 
-
 /*
  * Clients of this BSP will need to have access to BSP functions and
  * data structures. Because, the client and the BSP may not be linked
@@ -230,11 +230,11 @@ sys_utime(unsigned long *p)
 //  module, 1 otherwise. This allows applications to
 //  extend the syscall handler by using exception chaining.
 //
-int
-__do_syscall(int func,			// syscall function number
-	     long arg1, long arg2,	// up to four args.
-	     long arg3, long arg4,
-	     int *retval)		// syscall return value
+CYG_ADDRWORD
+__do_syscall(CYG_ADDRWORD func,			// syscall function number
+	     CYG_ADDRWORD arg1, CYG_ADDRWORD arg2,	// up to four args.
+	     CYG_ADDRWORD arg3, CYG_ADDRWORD arg4,
+	     CYG_ADDRWORD *retval)		// syscall return value
 {
     int err = 0;
 
@@ -264,6 +264,12 @@ int
 	err = sys_utime((unsigned long *)arg1);
 	break;
 
+      case SYS_meminfo:
+        err = 1;
+        *(unsigned long *)arg1 = (unsigned long)(ram_end-ram_start);
+        *(unsigned long *)arg2 = (unsigned long)ram_end;
+        break;
+        
       case __GET_SHARED:
 	*(__shared_t **)arg1 = &__shared_data;
 	break;
--- a/packages/redboot/current/src/ticks.c
+++ b/packages/redboot/current/src/ticks.c
@@ -45,10 +45,17 @@
 
 #include "redboot.h"
 
+static unsigned long ticks = 0;
+
 unsigned long
 do_ms_tick(void)
 {
-    static unsigned long ticks = 0;
     CYGACC_CALL_IF_DELAY_US(1000);   // Wait for 1ms
     return ++ticks;
 }
+
+unsigned long
+get_ms_ticks(void)
+{
+    return ticks;
+}
--- a/packages/redboot/current/src/xyzModem.c
+++ b/packages/redboot/current/src/xyzModem.c
@@ -71,42 +71,6 @@ static struct {
 #define xyzModem_MAX_RETRIES             20
 #define xyzModem_MAX_RETRIES_WITH_CRC    10
 
-// Table of CRC constants - implements x^16+x^12+x^5+1
-static unsigned short crc16[] = {
-    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 
-    0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 
-    0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 
-    0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 
-    0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 
-    0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 
-    0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 
-    0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 
-    0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 
-    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 
-    0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 
-    0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 
-    0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 
-    0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 
-    0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 
-    0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 
-    0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 
-    0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 
-    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 
-    0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 
-    0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 
-    0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 
-    0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 
-    0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 
-    0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 
-    0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 
-    0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 
-    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 
-    0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 
-    0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 
-    0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 
-    0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, 
-};
-
 #ifdef DEBUG
 #ifndef USE_SPRINTF
 //
@@ -292,10 +256,7 @@ xyzModem_get_hdr(void)
     }
     // Verify checksum/CRC
     if (xyz.crc_mode) {
-        cksum = 0;
-        for (i = 0;  i < xyz.len;  i++) {
-            cksum = crc16[((cksum>>8) ^ xyz.pkt[i]) & 0xFF] ^ (cksum << 8);
-        }
+        cksum = crc16(xyz.pkt, xyz.len);
         if (cksum != ((xyz.crc1 << 8) | xyz.crc2)) {
             ZM_DEBUG(zm_dprintf("CRC error - recvd: %02x%02x, computed: %x\n", 
                                 xyz.crc1, xyz.crc2, cksum & 0xFFFF));
--- a/packages/services/memalloc/common/current/ChangeLog
+++ b/packages/services/memalloc/common/current/ChangeLog
@@ -1,3 +1,7 @@
+2001-02-01  Jonathan Larmour  <jlarmour@redhat.com>
+
+	* tests/malloc4.cxx: Use semaphores to sync startup order.
+
 2000-11-28  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/heapgen.tcl: Don't use cygpath -s for now as not all cygwins
--- a/packages/services/memalloc/common/current/tests/malloc4.cxx
+++ b/packages/services/memalloc/common/current/tests/malloc4.cxx
@@ -40,6 +40,8 @@
 //
 //####DESCRIPTIONEND####
 
+// #define DEBUGTEST
+
 // INCLUDES
 
 #include <pkgconf/system.h>
@@ -54,6 +56,7 @@
 # include <cyg/kernel/thread.inl>
 # include <cyg/kernel/sched.hxx>
 # include <cyg/kernel/sched.inl>
+# include <cyg/kernel/sema.hxx>
 #endif
 #include <cyg/infra/testcase.h>
 
@@ -93,7 +96,8 @@ cyg_start()
 
 #include <cyg/infra/diag.h>
 
-volatile int gonow = 0;
+Cyg_Counting_Semaphore startsema;
+
 volatile int stopnow = 0;
 
 struct ptr {
@@ -168,8 +172,7 @@ thrmalloc( CYG_ADDRWORD data )
     void *mem;
     unsigned int seed;
 
-    while (!gonow)
-        Cyg_Thread::self()->delay(1);
+    startsema.wait();
         
     while (!stopnow) {
         r = myrand( NUM_PTRS-1, &seed );
@@ -192,7 +195,9 @@ thrmalloc( CYG_ADDRWORD data )
         ptrs[i].p = (char *)mem;
         ptrs[i].size = r;
         if ( NULL != mem ) {
-//            diag_printf("malloc=%08x size=%d\n", mem, r);
+#ifdef DEBUGTEST
+            diag_printf("malloc=%08x size=%d\n", mem, r);
+#endif
             fill_with_data( &ptrs[i] );
         }
         ptrs[i].busy = 0;        
@@ -207,8 +212,7 @@ thrcalloc( CYG_ADDRWORD data )
     void *mem;
     unsigned int seed;
 
-    while (!gonow)
-        Cyg_Thread::self()->delay(1);
+    startsema.wait();
         
     while (!stopnow) {
         r = myrand( NUM_PTRS-1, &seed );
@@ -231,7 +235,9 @@ thrcalloc( CYG_ADDRWORD data )
         ptrs[i].p = (char *)mem;
         ptrs[i].size = r;
         if ( NULL != mem ) {
-//            diag_printf("calloc=%08x size=%d\n", mem, r);
+#ifdef DEBUGTEST
+            diag_printf("calloc=%08x size=%d\n", mem, r);
+#endif
             check_zeroes( &ptrs[i] );
             fill_with_data( &ptrs[i] );
         }
@@ -247,8 +253,7 @@ thrrealloc( CYG_ADDRWORD data )
     void *mem;
     unsigned int seed;
 
-    while (!gonow)
-        Cyg_Thread::self()->delay(1);
+    startsema.wait();
         
     while (!stopnow) {
         r = myrand( NUM_PTRS-1, &seed );
@@ -270,7 +275,9 @@ thrrealloc( CYG_ADDRWORD data )
         r = myrand(memsize, &seed);
         mem = realloc( (void *)ptrs[i].p, r );
         if ( NULL != mem ) {
-//            diag_printf("realloc=%08x oldsize=%d newsize=%d\n", mem, ptrs[i].size, r);
+#ifdef DEBUGTEST
+            diag_printf("realloc=%08x oldsize=%d newsize=%d\n", mem, ptrs[i].size, r);
+#endif
             ptrs[i].size = r;
             ptrs[i].p = (char *)mem;
             fill_with_data( &ptrs[i] );
@@ -292,7 +299,9 @@ thrfree( CYG_ADDRWORD data )
     memsize = (unsigned long) minfo.maxfree;
     diag_printf("INFO:<Iteration 0, arenasize=%d, space free=%d, maxfree=%d>\n",
                 minfo.arena, minfo.fordblks, minfo.maxfree );
-    gonow++;
+
+    // wake the three threads above.
+    startsema.post(); startsema.post(); startsema.post();
         
     Cyg_Thread::self()->delay(1);
 
@@ -343,7 +352,9 @@ thrfree( CYG_ADDRWORD data )
         ptrs[i].busy = 1;
         Cyg_Scheduler::unlock();
         check_data( &ptrs[i] );
-//        diag_printf("about to free %08x\n", ptrs[i].p);
+#ifdef DEBUGTEST
+        diag_printf("about to free %08x\n", ptrs[i].p);
+#endif
         free( (void *)ptrs[i].p );
         ptrs[i].p = NULL;
         ptrs[i].busy = 0;