[Zrouter-src-freebsd] ZRouter.org: push to FreeBSD HEAD tree
zrouter-src-freebsd at zrouter.org
zrouter-src-freebsd at zrouter.org
Fri Aug 10 12:34:52 UTC 2012
details: http://zrouter.org/hg/FreeBSD/head//rev/2d798fd21d78
changeset: 520:2d798fd21d78
user: Aleksandr Rybalko <ray at ddteam.net>
date: Fri Aug 10 14:19:25 2012 +0300
description:
FreeBSD HEAD @svn 239172r.
diffstat:
head/Makefile.inc1 =
| 5 +-
head/UPDATING =
| 7 +-
head/bin/sh/jobs.c =
| 85 +-
head/bin/sh/trap.c =
| 10 +-
head/bin/sh/trap.h =
| 3 +-
head/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c =
| 4 +-
head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 =
| 45 +-
head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c =
| 435 +-
head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c =
| 3 +-
head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h =
| 3 +-
head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c =
| 25 +
head/cddl/lib/libzfs/Makefile =
| 6 +-
head/contrib/compiler-rt/LICENSE.TXT =
| 3 +-
head/contrib/compiler-rt/lib/absvti2.c =
| 4 +-
head/contrib/compiler-rt/lib/adddf3.c =
| 4 +-
head/contrib/compiler-rt/lib/addsf3.c =
| 4 +-
head/contrib/compiler-rt/lib/addvti3.c =
| 4 +-
head/contrib/compiler-rt/lib/arm/aeabi_idivmod.S =
| 27 +
head/contrib/compiler-rt/lib/arm/aeabi_ldivmod.S =
| 30 +
head/contrib/compiler-rt/lib/arm/aeabi_memcmp.S =
| 19 +
head/contrib/compiler-rt/lib/arm/aeabi_memcpy.S =
| 19 +
head/contrib/compiler-rt/lib/arm/aeabi_memmove.S =
| 19 +
head/contrib/compiler-rt/lib/arm/aeabi_memset.S =
| 32 +
head/contrib/compiler-rt/lib/arm/aeabi_uidivmod.S =
| 28 +
head/contrib/compiler-rt/lib/arm/aeabi_uldivmod.S =
| 30 +
head/contrib/compiler-rt/lib/ashldi3.c =
| 2 +-
head/contrib/compiler-rt/lib/ashlti3.c =
| 4 +-
head/contrib/compiler-rt/lib/ashrdi3.c =
| 2 +-
head/contrib/compiler-rt/lib/ashrti3.c =
| 4 +-
head/contrib/compiler-rt/lib/assembly.h =
| 3 +
head/contrib/compiler-rt/lib/atomic.c =
| 315 +
head/contrib/compiler-rt/lib/clzti2.c =
| 4 +-
head/contrib/compiler-rt/lib/cmpti2.c =
| 4 +-
head/contrib/compiler-rt/lib/ctzti2.c =
| 4 +-
head/contrib/compiler-rt/lib/divdf3.c =
| 2 +-
head/contrib/compiler-rt/lib/divmoddi4.c =
| 2 -
head/contrib/compiler-rt/lib/divsf3.c =
| 2 +-
head/contrib/compiler-rt/lib/divsi3.c =
| 10 +-
head/contrib/compiler-rt/lib/divti3.c =
| 4 +-
head/contrib/compiler-rt/lib/extendsfdf2.c =
| 2 +-
head/contrib/compiler-rt/lib/ffsti2.c =
| 4 +-
head/contrib/compiler-rt/lib/fixdfdi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixdfsi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixdfti.c =
| 4 +-
head/contrib/compiler-rt/lib/fixsfdi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixsfsi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixsfti.c =
| 4 +-
head/contrib/compiler-rt/lib/fixunsdfdi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixunsdfsi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixunsdfti.c =
| 4 +-
head/contrib/compiler-rt/lib/fixunssfdi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixunssfsi.c =
| 2 +-
head/contrib/compiler-rt/lib/fixunssfti.c =
| 4 +-
head/contrib/compiler-rt/lib/fixunsxfti.c =
| 4 +-
head/contrib/compiler-rt/lib/fixxfti.c =
| 4 +-
head/contrib/compiler-rt/lib/floatdidf.c =
| 2 +-
head/contrib/compiler-rt/lib/floatdisf.c =
| 2 +-
head/contrib/compiler-rt/lib/floatsidf.c =
| 2 +-
head/contrib/compiler-rt/lib/floatsisf.c =
| 2 +-
head/contrib/compiler-rt/lib/floattidf.c =
| 4 +-
head/contrib/compiler-rt/lib/floattisf.c =
| 4 +-
head/contrib/compiler-rt/lib/floattixf.c =
| 4 +-
head/contrib/compiler-rt/lib/floatundidf.c =
| 2 +-
head/contrib/compiler-rt/lib/floatundisf.c =
| 2 +-
head/contrib/compiler-rt/lib/floatunsidf.c =
| 2 +-
head/contrib/compiler-rt/lib/floatunsisf.c =
| 2 +-
head/contrib/compiler-rt/lib/floatuntidf.c =
| 4 +-
head/contrib/compiler-rt/lib/floatuntisf.c =
| 4 +-
head/contrib/compiler-rt/lib/floatuntixf.c =
| 4 +-
head/contrib/compiler-rt/lib/fp_lib.h =
| 2 +-
head/contrib/compiler-rt/lib/int_endianness.h =
| 9 +-
head/contrib/compiler-rt/lib/int_util.c =
| 13 +
head/contrib/compiler-rt/lib/int_util.h =
| 7 +-
head/contrib/compiler-rt/lib/lshrdi3.c =
| 2 +-
head/contrib/compiler-rt/lib/lshrti3.c =
| 4 +-
head/contrib/compiler-rt/lib/modti3.c =
| 4 +-
head/contrib/compiler-rt/lib/muldf3.c =
| 4 +-
head/contrib/compiler-rt/lib/muldi3.c =
| 2 +-
head/contrib/compiler-rt/lib/muloti4.c =
| 4 +-
head/contrib/compiler-rt/lib/mulsf3.c =
| 4 +-
head/contrib/compiler-rt/lib/multi3.c =
| 4 +-
head/contrib/compiler-rt/lib/mulvti3.c =
| 4 +-
head/contrib/compiler-rt/lib/negdf2.c =
| 2 +-
head/contrib/compiler-rt/lib/negsf2.c =
| 2 +-
head/contrib/compiler-rt/lib/negti2.c =
| 4 +-
head/contrib/compiler-rt/lib/negvti2.c =
| 4 +-
head/contrib/compiler-rt/lib/parityti2.c =
| 4 +-
head/contrib/compiler-rt/lib/popcountti2.c =
| 4 +-
head/contrib/compiler-rt/lib/powitf2.c =
| 4 +-
head/contrib/compiler-rt/lib/subdf3.c =
| 2 +-
head/contrib/compiler-rt/lib/subsf3.c =
| 2 +-
head/contrib/compiler-rt/lib/subvti3.c =
| 4 +-
head/contrib/compiler-rt/lib/truncdfsf2.c =
| 2 +-
head/contrib/compiler-rt/lib/ucmpti2.c =
| 4 +-
head/contrib/compiler-rt/lib/udivmoddi4.c =
| 2 -
head/contrib/compiler-rt/lib/udivmodti4.c =
| 4 +-
head/contrib/compiler-rt/lib/udivsi3.c =
| 3 +-
head/contrib/compiler-rt/lib/udivti3.c =
| 4 +-
head/contrib/compiler-rt/lib/umodti3.c =
| 4 +-
head/contrib/groff/tmac/doc-common =
| 3 -
head/contrib/groff/tmac/doc-syms =
| 3 +-
head/contrib/groff/tmac/doc.tmac =
| 2 +-
head/contrib/groff/tmac/groff_mdoc.man =
| 2 -
head/contrib/libarchive/FREEBSD-Xlist =
| 4 +-
head/contrib/libarchive/FREEBSD-upgrade =
| 8 +-
head/contrib/libarchive/NEWS =
| 18 +-
head/contrib/libarchive/README =
| 13 +-
head/contrib/libarchive/cpio/bsdcpio.1 =
| 4 +-
head/contrib/libarchive/cpio/cmdline.c =
| 3 +-
head/contrib/libarchive/cpio/cpio.c =
| 38 +-
head/contrib/libarchive/cpio/cpio.h =
| 6 +-
head/contrib/libarchive/cpio/test/main.c =
| 323 +-
head/contrib/libarchive/cpio/test/test.h =
| 14 +-
head/contrib/libarchive/cpio/test/test_pathmatch.c =
| 243 -
head/contrib/libarchive/libarchive/archive.h =
| 156 +-
head/contrib/libarchive/libarchive/archive_acl.c =
| 65 +-
head/contrib/libarchive/libarchive/archive_check_magic.c =
| 3 +-
head/contrib/libarchive/libarchive/archive_endian.h =
| 10 +-
head/contrib/libarchive/libarchive/archive_entry.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_entry.c =
| 80 +-
head/contrib/libarchive/libarchive/archive_entry.h =
| 63 +-
head/contrib/libarchive/libarchive/archive_entry_acl.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_entry_link_resolver.c =
| 4 +-
head/contrib/libarchive/libarchive/archive_entry_linkify.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_entry_paths.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_entry_perms.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_entry_stat.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_entry_stat.c =
| 10 +-
head/contrib/libarchive/libarchive/archive_entry_time.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_getdate.c =
| 1037 +
head/contrib/libarchive/libarchive/archive_match.c =
| 1836 +
head/contrib/libarchive/libarchive/archive_pathmatch.c =
| 459 +
head/contrib/libarchive/libarchive/archive_pathmatch.h =
| 52 +
head/contrib/libarchive/libarchive/archive_ppmd7.c =
| 5 +-
head/contrib/libarchive/libarchive/archive_private.h =
| 3 +-
head/contrib/libarchive/libarchive/archive_read.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_read.c =
| 13 +-
head/contrib/libarchive/libarchive/archive_read_data.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_read_disk.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c =
| 419 +-
head/contrib/libarchive/libarchive/archive_read_disk_posix.c =
| 503 +-
head/contrib/libarchive/libarchive/archive_read_disk_private.h =
| 25 +-
head/contrib/libarchive/libarchive/archive_read_extract.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_read_filter.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_read_format.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_read_free.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_read_header.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_read_new.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_read_open.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_read_open_fd.c =
| 6 +-
head/contrib/libarchive/libarchive/archive_read_open_filename.c =
| 14 +-
head/contrib/libarchive/libarchive/archive_read_private.h =
| 6 +-
head/contrib/libarchive/libarchive/archive_read_set_options.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c =
| 2 +-
head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c =
| 142 +-
head/contrib/libarchive/libarchive/archive_read_support_format_cab.c =
| 210 +-
head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c =
| 57 +-
head/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c =
| 38 +-
head/contrib/libarchive/libarchive/archive_read_support_format_lha.c =
| 12 +-
head/contrib/libarchive/libarchive/archive_read_support_format_mtree.c =
| 15 +-
head/contrib/libarchive/libarchive/archive_read_support_format_rar.c =
| 68 +-
head/contrib/libarchive/libarchive/archive_read_support_format_tar.c =
| 156 +-
head/contrib/libarchive/libarchive/archive_read_support_format_xar.c =
| 19 +-
head/contrib/libarchive/libarchive/archive_read_support_format_zip.c =
| 160 +-
head/contrib/libarchive/libarchive/archive_string.c =
| 760 +-
head/contrib/libarchive/libarchive/archive_string.h =
| 12 +-
head/contrib/libarchive/libarchive/archive_string_composition.h =
| 945 +-
head/contrib/libarchive/libarchive/archive_string_sprintf.c =
| 16 +-
head/contrib/libarchive/libarchive/archive_util.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_util.c =
| 7 +-
head/contrib/libarchive/libarchive/archive_write.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_write.c =
| 6 +-
head/contrib/libarchive/libarchive/archive_write_add_filter.c =
| 66 +
head/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c =
| 14 +-
head/contrib/libarchive/libarchive/archive_write_add_filter_compress.c =
| 20 +-
head/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c =
| 36 +-
head/contrib/libarchive/libarchive/archive_write_add_filter_program.c =
| 106 +-
head/contrib/libarchive/libarchive/archive_write_add_filter_xz.c =
| 12 +-
head/contrib/libarchive/libarchive/archive_write_blocksize.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_data.3 =
| 8 +-
head/contrib/libarchive/libarchive/archive_write_disk.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_write_disk_acl.c =
| 249 +
head/contrib/libarchive/libarchive/archive_write_disk_posix.c =
| 161 +-
head/contrib/libarchive/libarchive/archive_write_disk_private.h =
| 7 +-
head/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.=
c | 30 +-
head/contrib/libarchive/libarchive/archive_write_filter.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_finish_entry.3 =
| 6 +-
head/contrib/libarchive/libarchive/archive_write_format.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_free.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_header.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_new.3 =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_open.3 =
| 8 +-
head/contrib/libarchive/libarchive/archive_write_open_filename.c =
| 169 +-
head/contrib/libarchive/libarchive/archive_write_private.h =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_set_format_7zip.c =
| 57 +-
head/contrib/libarchive/libarchive/archive_write_set_format_ar.c =
| 4 +-
head/contrib/libarchive/libarchive/archive_write_set_format_cpio.c =
| 13 +-
head/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c =
| 9 +-
head/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c =
| 6 +-
head/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c =
| 151 +-
head/contrib/libarchive/libarchive/archive_write_set_format_mtree.c =
| 10 +-
head/contrib/libarchive/libarchive/archive_write_set_format_pax.c =
| 11 +-
head/contrib/libarchive/libarchive/archive_write_set_format_ustar.c =
| 6 +-
head/contrib/libarchive/libarchive/archive_write_set_format_xar.c =
| 17 +-
head/contrib/libarchive/libarchive/archive_write_set_format_zip.c =
| 340 +-
head/contrib/libarchive/libarchive/archive_write_set_options.3 =
| 8 +-
head/contrib/libarchive/libarchive/cpio.5 =
| 4 +-
head/contrib/libarchive/libarchive/libarchive-formats.5 =
| 106 +-
head/contrib/libarchive/libarchive/libarchive.3 =
| 69 +-
head/contrib/libarchive/libarchive/libarchive_changes.3 =
| 2 +-
head/contrib/libarchive/libarchive/libarchive_internals.3 =
| 6 +-
head/contrib/libarchive/libarchive/tar.5 =
| 4 +-
head/contrib/libarchive/libarchive/test/main.c =
| 323 +-
head/contrib/libarchive/libarchive/test/read_open_memory.c =
| 4 +-
head/contrib/libarchive/libarchive/test/test.h =
| 18 +-
head/contrib/libarchive/libarchive/test/test_acl_freebsd_nfs4.c =
| 1094 +
head/contrib/libarchive/libarchive/test/test_acl_freebsd_posix1e.c =
| 520 +
head/contrib/libarchive/libarchive/test/test_archive_getdate.c =
| 81 +
head/contrib/libarchive/libarchive/test/test_archive_match_owner.c =
| 289 +
head/contrib/libarchive/libarchive/test/test_archive_match_path.c =
| 450 +
head/contrib/libarchive/libarchive/test/test_archive_match_time.c =
| 1358 +
head/contrib/libarchive/libarchive/test/test_archive_pathmatch.c =
| 244 +
head/contrib/libarchive/libarchive/test/test_archive_string_conversion.c =
| 487 +-
head/contrib/libarchive/libarchive/test/test_compat_zip.c =
| 16 +-
head/contrib/libarchive/libarchive/test/test_read_disk_directory_traversal=
s.c | 527 +-
head/contrib/libarchive/libarchive/test/test_read_format_7zip.c =
| 18 +-
head/contrib/libarchive/libarchive/test/test_read_format_cab.c =
| 116 +-
head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_bzip2_r=
pm.c | 2 +-
head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gzip_rp=
m.c | 2 +-
head/contrib/libarchive/libarchive/test/test_read_format_rar.c =
| 25 +-
head/contrib/libarchive/libarchive/test/test_read_format_rar_unicode.rar.u=
u | 5 +-
head/contrib/libarchive/libarchive/test/test_read_format_tar_filename.c =
| 2 +-
head/contrib/libarchive/libarchive/test/test_read_pax_truncated.c =
| 6 +-
head/contrib/libarchive/libarchive/test/test_read_position.c =
| 4 +-
head/contrib/libarchive/libarchive/test/test_sparse_basic.c =
| 28 +-
head/contrib/libarchive/libarchive/test/test_write_format_zip.c =
| 4 +-
head/contrib/libarchive/libarchive_fe/err.c =
| 4 +-
head/contrib/libarchive/libarchive_fe/err.h =
| 14 +-
head/contrib/libarchive/libarchive_fe/matching.c =
| 281 -
head/contrib/libarchive/libarchive_fe/matching.h =
| 46 -
head/contrib/libarchive/libarchive_fe/pathmatch.c =
| 255 -
head/contrib/libarchive/libarchive_fe/pathmatch.h =
| 42 -
head/contrib/libarchive/tar/bsdtar.1 =
| 4 +-
head/contrib/libarchive/tar/bsdtar.c =
| 87 +-
head/contrib/libarchive/tar/bsdtar.h =
| 17 +-
head/contrib/libarchive/tar/getdate.c =
| 1037 -
head/contrib/libarchive/tar/read.c =
| 82 +-
head/contrib/libarchive/tar/test/main.c =
| 323 +-
head/contrib/libarchive/tar/test/test.h =
| 14 +-
head/contrib/libarchive/tar/test/test_basic.c =
| 8 +-
head/contrib/libarchive/tar/test/test_format_newc.c =
| 64 +
head/contrib/libarchive/tar/test/test_getdate.c =
| 80 -
head/contrib/libarchive/tar/test/test_option_nodump.c =
| 68 +
head/contrib/libarchive/tar/tree.c =
| 848 -
head/contrib/libarchive/tar/tree.h =
| 141 -
head/contrib/libarchive/tar/write.c =
| 656 +-
head/contrib/llvm/tools/clang/lib/Driver/Tools.cpp =
| 12 +-
head/contrib/opie/libopie/hash.c =
| 11 +-
head/contrib/opie/libopie/hashlen.c =
| 11 +-
head/etc/devd/usb.conf =
| 286 +-
head/games/fortune/datfiles/fortunes =
| 11 +-
head/gnu/usr.bin/groff/tmac/mdoc.local =
| 4 +-
head/include/gssapi/gssapi.h =
| 20 +-
head/lib/libarchive/Makefile =
| 7 +-
head/lib/libarchive/config_freebsd.h =
| 6 +-
head/lib/libarchive/test/Makefile =
| 10 +-
head/lib/libc/gen/fts.c =
| 5 +-
head/lib/libc/gen/ftw.c =
| 5 +-
head/lib/libc/gen/nftw.c =
| 18 +-
head/lib/libc/locale/Makefile.inc =
| 7 +-
head/lib/libc/locale/isgraph.3 =
| 22 +-
head/lib/libc/locale/islower.3 =
| 21 +-
head/lib/libc/locale/ispunct.3 =
| 22 +-
head/lib/libc/locale/isspace.3 =
| 22 +-
head/lib/libc/locale/nl_langinfo.3 =
| 18 +-
head/lib/libedit/el.c =
| 26 +-
head/lib/libedit/histedit.h =
| 9 +-
head/lib/libedit/term.c =
| 4 +-
head/lib/libpam/modules/pam_krb5/pam_krb5.c =
| 21 +-
head/lib/libpam/modules/pam_unix/pam_unix.c =
| 6 +-
head/lib/msun/ld128/s_expl.c =
| 16 +-
head/lib/msun/ld80/s_expl.c =
| 30 +-
head/lib/msun/src/s_cbrtl.c =
| 28 +-
head/libexec/rtld-elf/arm/rtld_start.S =
| 8 +-
head/libexec/rtld-elf/map_object.c =
| 6 +-
head/rescue/rescue/Makefile =
| 4 +-
head/sbin/camcontrol/camcontrol.c =
| 4 +-
head/sbin/fsck_ffs/suj.c =
| 4 +-
head/sbin/geom/class/multipath/geom_multipath.c =
| 28 +-
head/sbin/geom/class/multipath/gmultipath.8 =
| 11 +-
head/sbin/geom/class/sched/gsched.8 =
| 16 +-
head/sbin/geom/class/virstor/gvirstor.8 =
| 11 +-
head/sbin/ggate/shared/ggate.h =
| 6 +-
head/sbin/ipfw/dummynet.c =
| 16 +-
head/sbin/ipfw/ipfw2.c =
| 10 +-
head/sbin/ipfw/nat.c =
| 4 +-
head/sbin/md5/Makefile =
| 8 +-
head/sbin/md5/md5.1 =
| 20 +-
head/sbin/md5/md5.c =
| 24 +-
head/sbin/shutdown/shutdown.c =
| 8 +-
head/share/examples/kld/dyn_sysctl/dyn_sysctl.c =
| 8 +-
head/share/man/man4/Makefile =
| 3 +-
head/share/man/man4/ahci.4 =
| 19 +-
head/share/man/man4/hptiop.4 =
| 54 +-
head/share/man/man4/netmap.4 =
| 48 +-
head/share/man/man4/polling.4 =
| 3 +-
head/share/man/man4/umodem.4 =
| 6 +-
head/share/man/man4/uplcom.4 =
| 6 +-
head/share/man/man4/uslcom.4 =
| 142 +-
head/share/man/man4/vale.4 =
| 131 +
head/share/man/man5/rc.conf.5 =
| 4 +-
head/share/misc/bsd-family-tree =
| 6 +-
head/share/misc/committers-ports.dot =
| 5 +-
head/sys/amd64/amd64/elf_machdep.c =
| 3 +-
head/sys/amd64/amd64/fpu.c =
| 4 +-
head/sys/amd64/amd64/initcpu.c =
| 10 +-
head/sys/amd64/amd64/pmap.c =
| 97 +-
head/sys/amd64/include/cpufunc.h =
| 9 +-
head/sys/arm/arm/bcopyinout.S =
| 5 +-
head/sys/arm/arm/bcopyinout_xscale.S =
| 4 +-
head/sys/arm/arm/exception.S =
| 5 +-
head/sys/arm/arm/pmap.c =
| 4 +-
head/sys/arm/at91/at91_machdep.c =
| 34 +-
head/sys/arm/at91/at91_pio_sam9g45.h =
| 272 +
head/sys/arm/at91/at91_pmc.c =
| 69 +-
head/sys/arm/at91/at91_pmcreg.h =
| 20 +-
head/sys/arm/at91/at91_spi.c =
| 20 +-
head/sys/arm/at91/at91sam9g45.c =
| 177 +
head/sys/arm/at91/at91sam9g45reg.h =
| 294 +
head/sys/arm/at91/at91sam9x25.c =
| 201 -
head/sys/arm/at91/at91sam9x25reg.h =
| 316 -
head/sys/arm/at91/at91sam9x5.c =
| 201 +
head/sys/arm/at91/at91sam9x5reg.h =
| 315 +
head/sys/arm/at91/board_sam9260ek.c =
| 82 +-
head/sys/arm/at91/board_sn9g45.c =
| 55 +
head/sys/arm/at91/files.at91 =
| 13 +-
head/sys/arm/at91/if_ate.c =
| 28 +-
head/sys/arm/at91/std.at91sam9g45 =
| 14 +
head/sys/arm/at91/std.atmel =
| 5 +-
head/sys/arm/at91/std.sam9x25ek =
| 4 +-
head/sys/arm/at91/std.sn9g45 =
| 12 +
head/sys/arm/at91/uart_bus_at91usart.c =
| 8 +-
head/sys/arm/conf/ATMEL =
| 14 +-
head/sys/arm/conf/ETHERNUT5 =
| 6 +-
head/sys/arm/conf/ETHERNUT5.hints =
| 4 +-
head/sys/arm/conf/HL201 =
| 4 +-
head/sys/arm/conf/KB920X =
| 8 +-
head/sys/arm/conf/QILA9G20 =
| 3 +-
head/sys/arm/conf/SAM9260EK =
| 56 +-
head/sys/arm/conf/SAM9260EK.hints =
| 71 +-
head/sys/arm/conf/SAM9G20EK =
| 3 +-
head/sys/arm/conf/SAM9X25EK =
| 5 +-
head/sys/arm/conf/SN9G45 =
| 129 +
head/sys/arm/mv/common.c =
| 17 +-
head/sys/arm/mv/gpio.c =
| 5 +-
head/sys/arm/mv/ic.c =
| 6 +-
head/sys/arm/mv/kirkwood/kirkwood.c =
| 4 +-
head/sys/arm/mv/mv_sata.c =
| 3 +-
head/sys/arm/mv/mvreg.h =
| 3 +-
head/sys/boot/common/Makefile.inc =
| 16 +-
head/sys/boot/common/disk.c =
| 918 +-
head/sys/boot/common/disk.h =
| 20 +-
head/sys/boot/common/part.c =
| 839 +
head/sys/boot/common/part.h =
| 82 +
head/sys/boot/ficl/Makefile =
| 4 +-
head/sys/boot/i386/libi386/Makefile =
| 6 +-
head/sys/boot/i386/libi386/biosdisk.c =
| 1223 +-
head/sys/boot/i386/libi386/devicename.c =
| 87 +-
head/sys/boot/i386/libi386/libi386.h =
| 3 +-
head/sys/boot/i386/loader/Makefile =
| 5 +-
head/sys/boot/i386/loader/main.c =
| 20 +-
head/sys/boot/i386/pmbr/pmbr.s =
| 45 +-
head/sys/boot/pc98/boot2/boot2.c =
| 13 +-
head/sys/boot/pc98/btx/btxldr/btxldr.S =
| 6 +-
head/sys/boot/pc98/btx/lib/btxcsu.S =
| 6 +-
head/sys/boot/pc98/cdboot/cdboot.S =
| 6 +-
head/sys/boot/pc98/libpc98/Makefile =
| 5 +-
head/sys/boot/sparc64/loader/main.c =
| 54 +-
head/sys/boot/userboot/test/test.c =
| 30 +-
head/sys/boot/userboot/userboot.h =
| 8 +-
head/sys/boot/userboot/userboot/Makefile =
| 3 +-
head/sys/boot/userboot/userboot/bootinfo32.c =
| 4 +-
head/sys/boot/userboot/userboot/copy.c =
| 3 +-
head/sys/boot/userboot/userboot/devicename.c =
| 82 +-
head/sys/boot/userboot/userboot/main.c =
| 6 +-
head/sys/boot/userboot/userboot/userboot_disk.c =
| 85 +-
head/sys/boot/zfs/Makefile =
| 4 +-
head/sys/boot/zfs/zfs.c =
| 107 +-
head/sys/cam/ata/ata_all.h =
| 3 +-
head/sys/cam/ata/ata_xpt.c =
| 14 +-
head/sys/cam/cam_ccb.h =
| 3 +-
head/sys/cam/cam_periph.c =
| 9 +-
head/sys/cam/cam_xpt.c =
| 3 +-
head/sys/cam/ctl/scsi_ctl.c =
| 130 +-
head/sys/cam/scsi/scsi_cd.c =
| 132 +-
head/sys/cam/scsi/scsi_da.c =
| 135 +-
head/sys/cam/scsi/scsi_enc.c =
| 4 +-
head/sys/cam/scsi/scsi_enc_safte.c =
| 4 +-
head/sys/cam/scsi/scsi_enc_ses.c =
| 4 +-
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c =
| 21 +-
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h =
| 2 +-
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c =
| 9 +-
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c =
| 1 +
head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h =
| 1 +
head/sys/conf/NOTES =
| 4 +-
head/sys/conf/files =
| 13 +-
head/sys/conf/files.powerpc =
| 3 +-
head/sys/conf/kern.post.mk =
| 6 +-
head/sys/dev/acpica/acpi_cpu.c =
| 34 +-
head/sys/dev/agp/agp.c =
| 3 +-
head/sys/dev/agp/agp_i810.c =
| 3 +-
head/sys/dev/ahci/ahci.c =
| 138 +-
head/sys/dev/ahci/ahci.h =
| 22 +-
head/sys/dev/ahci/ahciem.c =
| 600 +
head/sys/dev/aic7xxx/aic79xx_osm.c =
| 3 +-
head/sys/dev/aic7xxx/aic_osm_lib.c =
| 5 +-
head/sys/dev/ath/ah_osdep.h =
| 8 +-
head/sys/dev/ath/ath_hal/ah.c =
| 5 +-
head/sys/dev/ath/ath_hal/ah.h =
| 21 +-
head/sys/dev/ath/ath_hal/ah_desc.h =
| 25 +-
head/sys/dev/ath/ath_hal/ah_devid.h =
| 11 +-
head/sys/dev/ath/ath_hal/ah_internal.h =
| 3 +-
head/sys/dev/ath/ath_hal/ar5210/ar5210.h =
| 5 +-
head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c =
| 3 +-
head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c =
| 8 +-
head/sys/dev/ath/ath_hal/ar5211/ar5211.h =
| 5 +-
head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c =
| 3 +-
head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c =
| 8 +-
head/sys/dev/ath/ath_hal/ar5212/ar5212.h =
| 5 +-
head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c =
| 3 +-
head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c =
| 8 +-
head/sys/dev/ath/ath_hal/ar5416/ar5416.h =
| 10 +-
head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c =
| 3 +-
head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c =
| 20 +-
head/sys/dev/ath/ath_rate/sample/sample.c =
| 14 +-
head/sys/dev/ath/if_ath.c =
| 183 +-
head/sys/dev/ath/if_ath_beacon.c =
| 15 +-
head/sys/dev/ath/if_ath_misc.h =
| 11 +-
head/sys/dev/ath/if_ath_rx.c =
| 6 +-
head/sys/dev/ath/if_ath_rx_edma.c =
| 6 +-
head/sys/dev/ath/if_ath_tx.c =
| 249 +-
head/sys/dev/ath/if_ath_tx.h =
| 12 +-
head/sys/dev/ath/if_ath_tx_edma.c =
| 157 +-
head/sys/dev/ath/if_ath_tx_ht.c =
| 28 +-
head/sys/dev/ath/if_athioctl.h =
| 3 +-
head/sys/dev/ath/if_athvar.h =
| 39 +-
head/sys/dev/bce/if_bce.c =
| 4 +-
head/sys/dev/cesa/cesa.c =
| 3 +-
head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c =
| 4 +-
head/sys/dev/cxgbe/firmware/t4fw_interface.h =
| 4 +-
head/sys/dev/e1000/if_igb.c =
| 57 +-
head/sys/dev/e1000/if_lem.c =
| 106 +-
head/sys/dev/esp/ncr53c9x.c =
| 62 +-
head/sys/dev/hptiop/hptiop.c =
| 14 +-
head/sys/dev/ipmi/ipmi.c =
| 9 +-
head/sys/dev/ipmi/ipmivars.h =
| 3 +-
head/sys/dev/isp/isp.c =
| 571 +-
head/sys/dev/isp/isp_freebsd.c =
| 1873 +-
head/sys/dev/isp/isp_freebsd.h =
| 173 +-
head/sys/dev/isp/isp_library.c =
| 399 +-
head/sys/dev/isp/isp_library.h =
| 10 +-
head/sys/dev/isp/isp_pci.c =
| 100 +-
head/sys/dev/isp/isp_sbus.c =
| 98 +-
head/sys/dev/isp/isp_stds.h =
| 80 +-
head/sys/dev/isp/isp_target.c =
| 97 +-
head/sys/dev/isp/isp_target.h =
| 3 +-
head/sys/dev/isp/ispmbox.h =
| 114 +-
head/sys/dev/isp/ispvar.h =
| 48 +-
head/sys/dev/ispfw/asm_2300.h =
| 12615 +++++----
head/sys/dev/md/md.c =
| 29 +-
head/sys/dev/mge/if_mge.c =
| 6 +-
head/sys/dev/mii/e1000phy.c =
| 9 +-
head/sys/dev/mlx/mlxvar.h =
| 4 +-
head/sys/dev/mps/mps.c =
| 61 +-
head/sys/dev/mps/mps_sas.c =
| 5 +-
head/sys/dev/mps/mps_table.c =
| 14 +-
head/sys/dev/mps/mps_user.c =
| 32 +-
head/sys/dev/mps/mpsvar.h =
| 10 +-
head/sys/dev/mvs/mvs_soc.c =
| 3 +-
head/sys/dev/netmap/if_em_netmap.h =
| 4 +-
head/sys/dev/netmap/if_igb_netmap.h =
| 4 +-
head/sys/dev/netmap/ixgbe_netmap.h =
| 4 +-
head/sys/dev/netmap/netmap.c =
| 915 +-
head/sys/dev/netmap/netmap_kern.h =
| 94 +-
head/sys/dev/netmap/netmap_mem2.c =
| 13 +-
head/sys/dev/pccbb/pccbb_pci.c =
| 7 +-
head/sys/dev/pci/pci_pci.c =
| 9 +-
head/sys/dev/puc/puc_cfg.h =
| 4 +-
head/sys/dev/puc/pucdata.c =
| 52 +-
head/sys/dev/sdhci/sdhci.c =
| 4 +-
head/sys/dev/spibus/spi.h =
| 5 +-
head/sys/dev/spibus/spibus.c =
| 5 +-
head/sys/dev/usb/controller/at91dci_atmelarm.c =
| 6 +-
head/sys/dev/usb/controller/ohci_atmelarm.c =
| 3 +-
head/sys/dev/usb/serial/uftdi.c =
| 604 +-
head/sys/dev/usb/serial/uftdi_reg.h =
| 3 +-
head/sys/dev/usb/serial/uslcom.c =
| 76 +-
head/sys/dev/usb/usbdevs =
| 727 +-
head/sys/dev/wtap/if_wtap.c =
| 10 +-
head/sys/fs/fifofs/fifo_vnops.c =
| 33 +-
head/sys/fs/nfs/nfs_commonport.c =
| 3 +-
head/sys/fs/nfsclient/nfs_clbio.c =
| 35 +-
head/sys/fs/nwfs/nwfs_io.c =
| 35 +-
head/sys/fs/smbfs/smbfs_io.c =
| 35 +-
head/sys/fs/tmpfs/tmpfs_subr.c =
| 3 +-
head/sys/fs/tmpfs/tmpfs_vnops.c =
| 3 +-
head/sys/geom/gate/g_gate.c =
| 156 +-
head/sys/geom/geom.h =
| 8 +-
head/sys/geom/geom_dev.c =
| 22 +-
head/sys/geom/geom_disk.c =
| 28 +-
head/sys/geom/geom_disk.h =
| 4 +-
head/sys/geom/geom_event.c =
| 8 +-
head/sys/geom/geom_io.c =
| 10 +-
head/sys/geom/geom_slice.c =
| 3 +-
head/sys/geom/geom_subr.c =
| 97 +-
head/sys/geom/geom_vfs.c =
| 2 +-
head/sys/geom/multipath/g_multipath.c =
| 76 +-
head/sys/geom/part/g_part.c =
| 3 +-
head/sys/geom/virstor/g_virstor.c =
| 8 +-
head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c =
| 6 +-
head/sys/i386/i386/machdep.c =
| 4 +-
head/sys/i386/i386/pmap.c =
| 8 +-
head/sys/i386/i386/trap.c =
| 20 +-
head/sys/i386/i386/vm86.c =
| 8 +-
head/sys/i386/i386/vm_machdep.c =
| 6 +-
head/sys/i386/include/cpufunc.h =
| 9 +-
head/sys/i386/include/pcpu.h =
| 24 +-
head/sys/i386/isa/npx.c =
| 33 +-
head/sys/i386/linux/linux_proto.h =
| 6 +-
head/sys/i386/linux/linux_syscall.h =
| 4 +-
head/sys/i386/linux/linux_syscalls.c =
| 4 +-
head/sys/i386/linux/linux_sysent.c =
| 4 +-
head/sys/i386/linux/linux_systrace_args.c =
| 6 +-
head/sys/i386/linux/syscalls.master =
| 4 +-
head/sys/i386/xen/pmap.c =
| 4 +-
head/sys/ia64/ia64/pmap.c =
| 3 +-
head/sys/kern/kern_clocksource.c =
| 85 +-
head/sys/kern/kern_descrip.c =
| 10 +-
head/sys/kern/kern_intr.c =
| 54 +-
head/sys/kern/kern_ktr.c =
| 6 +-
head/sys/kern/kern_proc.c =
| 3 +-
head/sys/kern/sched_4bsd.c =
| 81 +-
head/sys/kern/sched_ule.c =
| 15 +-
head/sys/kern/subr_uio.c =
| 4 +-
head/sys/kern/sys_pipe.c =
| 10 +-
head/sys/kern/sys_process.c =
| 3 +-
head/sys/kern/uipc_syscalls.c =
| 3 +-
head/sys/kern/vfs_syscalls.c =
| 46 +-
head/sys/kern/vfs_vnops.c =
| 62 +-
head/sys/mips/include/pmap.h =
| 4 +-
head/sys/mips/mips/pmap.c =
| 121 +-
head/sys/mips/mips/trap.c =
| 4 +-
head/sys/modules/ahci/Makefile =
| 4 +-
head/sys/modules/cam/Makefile =
| 3 +-
head/sys/net/bpf_zerocopy.c =
| 3 +-
head/sys/net/flowtable.c =
| 6 +-
head/sys/net/if_llatbl.c =
| 80 +-
head/sys/net/if_llatbl.h =
| 40 +-
head/sys/net/if_loop.c =
| 30 +-
head/sys/net/if_var.h =
| 4 +-
head/sys/net80211/ieee80211.h =
| 4 +-
head/sys/net80211/ieee80211_hwmp.c =
| 25 +-
head/sys/netgraph/ng_ether.c =
| 4 +-
head/sys/netgraph/ng_pptpgre.c =
| 4 +-
head/sys/netinet/if_ether.c =
| 128 +-
head/sys/netinet/in.c =
| 103 +-
head/sys/netinet/in_cksum.c =
| 4 +-
head/sys/netinet/ip_dummynet.h =
| 6 +-
head/sys/netinet/ipfw/dummynet.txt =
| 4 +-
head/sys/netinet/ipfw/ip_dn_io.c =
| 39 +-
head/sys/netinet/ipfw/ip_dummynet.c =
| 9 +-
head/sys/netinet/ipfw/ip_fw2.c =
| 4 +-
head/sys/netinet/ipfw/ip_fw_dynamic.c =
| 20 +-
head/sys/netinet/ipfw/ip_fw_log.c =
| 8 +-
head/sys/netinet/sctp_bsd_addr.c =
| 30 +-
head/sys/netinet/sctp_input.c =
| 4 +-
head/sys/netinet/sctp_pcb.c =
| 11 +-
head/sys/netinet/sctp_uio.h =
| 6 +-
head/sys/netinet/tcp_timer.c =
| 49 +-
head/sys/netinet6/in6.c =
| 105 +-
head/sys/netinet6/ip6_ipsec.c =
| 10 +-
head/sys/netinet6/ip6_output.c =
| 23 +-
head/sys/nfsclient/nfs_bio.c =
| 35 +-
head/sys/ofed/include/linux/gfp.h =
| 1 +
head/sys/powerpc/conf/GENERIC =
| 3 +-
head/sys/powerpc/conf/GENERIC64 =
| 3 +-
head/sys/powerpc/powermac/nvbl.c =
| 197 +
head/sys/powerpc/powerpc/busdma_machdep.c =
| 43 +-
head/sys/sparc64/include/pmap.h =
| 10 +-
head/sys/sparc64/sparc64/pmap.c =
| 10 +-
head/sys/sys/bus.h =
| 4 +-
head/sys/sys/fcntl.h =
| 5 +-
head/sys/sys/pipe.h =
| 6 +-
head/sys/sys/refcount.h =
| 4 +-
head/sys/ufs/ffs/ffs_vnops.c =
| 3 +-
head/sys/vm/device_pager.c =
| 3 +-
head/sys/vm/sg_pager.c =
| 3 +-
head/sys/vm/vm_page.c =
| 92 +-
head/sys/vm/vm_page.h =
| 90 +-
head/sys/vm/vm_pageout.c =
| 79 +-
head/sys/vm/vnode_pager.c =
| 36 +-
head/sys/x86/x86/busdma_machdep.c =
| 45 +-
head/sys/x86/x86/local_apic.c =
| 45 +-
head/sys/x86/x86/tsc.c =
| 107 +-
head/tools/regression/lib/libc/gen/Makefile =
| 4 +-
head/tools/regression/lib/libc/gen/test-ftw.c =
| 141 +
head/tools/tools/ath/ath_prom_read/Makefile =
| 3 +-
head/tools/tools/ath/athaggrstats/Makefile =
| 3 +-
head/tools/tools/ath/athratestats/main.c =
| 148 +-
head/tools/tools/ath/athstats/Makefile =
| 3 +-
head/tools/tools/ath/common/ah_osdep.h =
| 3 +-
head/tools/tools/bootparttest/Makefile =
| 19 +
head/tools/tools/bootparttest/bootparttest.c =
| 172 +
head/tools/tools/bootparttest/malloc.c =
| 44 +
head/tools/tools/netmap/pkt-gen.c =
| 15 +-
head/usr.bin/calendar/calendars/calendar.freebsd =
| 3 +-
head/usr.bin/cpio/Makefile =
| 6 +-
head/usr.bin/cpio/test/Makefile =
| 13 +-
head/usr.bin/du/du.c =
| 4 +-
head/usr.bin/find/extern.h =
| 6 +-
head/usr.bin/find/find.1 =
| 12 +-
head/usr.bin/find/find.c =
| 10 +-
head/usr.bin/find/function.c =
| 21 +-
head/usr.bin/find/main.c =
| 3 +-
head/usr.bin/find/option.c =
| 6 +-
head/usr.bin/make/var.c =
| 4 +-
head/usr.bin/script/script.1 =
| 28 +-
head/usr.bin/script/script.c =
| 220 +-
head/usr.bin/tar/Makefile =
| 10 +-
head/usr.bin/tar/test/Makefile =
| 10 +-
head/usr.sbin/ctladm/ctladm.c =
| 4 +-
head/usr.sbin/portsnap/portsnap/portsnap.8 =
| 10 +-
head/usr.sbin/portsnap/portsnap/portsnap.sh =
| 22 +-
633 files changed, 35095 insertions(+), 18673 deletions(-)
diffs (78903 lines):
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/Makefile.inc1
--- a/head/Makefile.inc1 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/Makefile.inc1 Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
#
-# $FreeBSD: head/Makefile.inc1 238051 2012-07-03 06:41:00Z obrien $
+# $FreeBSD: head/Makefile.inc1 238926 2012-07-30 23:14:24Z mm $
#
# Make command line options:
# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
@@ -1277,7 +1277,7 @@
lib/ncurses/ncurses lib/ncurses/ncursesw \
lib/libopie lib/libpam ${_lib_libthr} \
lib/libradius lib/libsbuf lib/libtacplus \
- ${_cddl_lib_libumem} \
+ ${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \
lib/libutil ${_lib_libypclnt} lib/libz lib/msun \
${_secure_lib_libcrypto} ${_secure_lib_libssh} \
${_secure_lib_libssl}
@@ -1301,6 +1301,7 @@
=20
.if ${MK_CDDL} !=3D "no"
_cddl_lib_libumem=3D cddl/lib/libumem
+_cddl_lib_libnvpair=3D cddl/lib/libnvpair
_cddl_lib=3D cddl/lib
.endif
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/UPDATING
--- a/head/UPDATING Mon Jul 30 11:44:18 2012 +0300
+++ b/head/UPDATING Fri Aug 10 14:19:25 2012 +0300
@@ -24,6 +24,11 @@
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
=20
+20120727:
+ The sparc64 ZFS loader has been changed to no longer try to auto-
+ detect ZFS providers based on diskN aliases but now requires these
+ to be explicitly listed in the OFW boot-device environment variable.=20
+
20120712:
The OpenSSL has been upgraded to 1.0.1c. Any binaries requiring
libcrypto.so.6 or libssl.so.6 must be recompiled. Also, there are
@@ -1615,4 +1620,4 @@
Contact Warner Losh if you have any questions about your use of
this document.
=20
-$FreeBSD: head/UPDATING 238405 2012-07-12 19:30:53Z jkim $
+$FreeBSD: head/UPDATING 238851 2012-07-27 18:23:11Z marius $
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/bin/sh/jobs.c
--- a/head/bin/sh/jobs.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/bin/sh/jobs.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
#endif
#endif /* not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/bin/sh/jobs.c 238470 2012-07-15 10:49:16Z jilles =
$");
+__FBSDID("$FreeBSD: head/bin/sh/jobs.c 238888 2012-07-29 18:04:38Z jilles =
$");
=20
#include <sys/ioctl.h>
#include <sys/param.h>
@@ -87,6 +87,10 @@
volatile sig_atomic_t breakwaitcmd =3D 0; /* should wait be terminated? */
static int ttyfd =3D -1;
=20
+/* mode flags for dowait */
+#define DOWAIT_BLOCK 0x1 /* wait until a child exits */
+#define DOWAIT_SIG 0x2 /* if DOWAIT_BLOCK, abort on signals */
+
#if JOBS
static void restartjob(struct job *);
#endif
@@ -94,7 +98,6 @@
static struct job *getjob(char *);
pid_t getjobpgrp(char *);
static pid_t dowait(int, struct job *);
-static pid_t waitproc(int, int *);
static void checkzombies(void);
static void cmdtxt(union node *);
static void cmdputs(const char *);
@@ -519,7 +522,7 @@
break;
}
}
- } while (dowait(1, (struct job *)NULL) !=3D -1);
+ } while (dowait(DOWAIT_BLOCK | DOWAIT_SIG, (struct job *)NULL) !=3D -1);
in_waitcmd--;
=20
return 0;
@@ -966,7 +969,7 @@
INTOFF;
TRACE(("waitforjob(%%%td) called\n", jp - jobtab + 1));
while (jp->state =3D=3D 0)
- if (dowait(1, jp) =3D=3D -1)
+ if (dowait(DOWAIT_BLOCK | (Tflag ? DOWAIT_SIG : 0), jp) =3D=3D -1)
dotrap();
#if JOBS
if (jp->jobctl) {
@@ -1004,14 +1007,20 @@
}
=20
=20
+static void
+dummy_handler(int sig)
+{
+}
=20
/*
* Wait for a process to terminate.
*/
=20
static pid_t
-dowait(int block, struct job *job)
+dowait(int mode, struct job *job)
{
+ struct sigaction sa, osa;
+ sigset_t mask, omask;
pid_t pid;
int status;
struct procstat *sp;
@@ -1021,15 +1030,49 @@
int stopped;
int sig;
int coredump;
+ int wflags;
+ int restore_sigchld;
=20
TRACE(("dowait(%d) called\n", block));
+ restore_sigchld =3D 0;
+ if ((mode & DOWAIT_SIG) !=3D 0) {
+ sigfillset(&mask);
+ sigprocmask(SIG_BLOCK, &mask, &omask);
+ INTOFF;
+ if (!issigchldtrapped()) {
+ restore_sigchld =3D 1;
+ sa.sa_handler =3D dummy_handler;
+ sa.sa_flags =3D 0;
+ sigemptyset(&sa.sa_mask);
+ sigaction(SIGCHLD, &sa, &osa);
+ }
+ }
do {
- pid =3D waitproc(block, &status);
+#if JOBS
+ if (iflag)
+ wflags =3D WUNTRACED | WCONTINUED;
+ else
+#endif
+ wflags =3D 0;
+ if ((mode & (DOWAIT_BLOCK | DOWAIT_SIG)) !=3D DOWAIT_BLOCK)
+ wflags |=3D WNOHANG;
+ pid =3D wait3(&status, wflags, (struct rusage *)NULL);
TRACE(("wait returns %d, status=3D%d\n", (int)pid, status));
- } while ((pid =3D=3D -1 && errno =3D=3D EINTR && breakwaitcmd =3D=3D 0) ||
- (pid > 0 && WIFSTOPPED(status) && !iflag));
+ if (pid =3D=3D 0 && (mode & DOWAIT_SIG) !=3D 0) {
+ sigsuspend(&omask);
+ pid =3D -1;
+ if (int_pending())
+ break;
+ }
+ } while (pid =3D=3D -1 && errno =3D=3D EINTR && breakwaitcmd =3D=3D 0);
if (pid =3D=3D -1 && errno =3D=3D ECHILD && job !=3D NULL)
job->state =3D JOBDONE;
+ if ((mode & DOWAIT_SIG) !=3D 0) {
+ if (restore_sigchld)
+ sigaction(SIGCHLD, &osa, NULL);
+ sigprocmask(SIG_SETMASK, &omask, NULL);
+ INTON;
+ }
if (breakwaitcmd !=3D 0) {
breakwaitcmd =3D 0;
if (pid <=3D 0)
@@ -1050,7 +1093,11 @@
TRACE(("Changing status of proc %d from 0x%x to 0x%x\n",
(int)pid, sp->status,
status));
- sp->status =3D status;
+ if (WIFCONTINUED(status)) {
+ sp->status =3D -1;
+ jp->state =3D 0;
+ } else
+ sp->status =3D status;
thisjob =3D jp;
}
if (sp->status =3D=3D -1)
@@ -1108,26 +1155,6 @@
=20
=20
/*
- * Do a wait system call. If job control is compiled in, we accept
- * stopped processes. If block is zero, we return a value of zero
- * rather than blocking.
- */
-static pid_t
-waitproc(int block, int *status)
-{
- int flags;
-
-#if JOBS
- flags =3D WUNTRACED;
-#else
- flags =3D 0;
-#endif
- if (block =3D=3D 0)
- flags |=3D WNOHANG;
- return wait3(status, flags, (struct rusage *)NULL);
-}
-
-/*
* return 1 if there are stopped jobs, otherwise 0
*/
int job_warning =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/bin/sh/trap.c
--- a/head/bin/sh/trap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/bin/sh/trap.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
#endif
#endif /* not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/bin/sh/trap.c 238477 2012-07-15 11:18:52Z jilles =
$");
+__FBSDID("$FreeBSD: head/bin/sh/trap.c 238888 2012-07-29 18:04:38Z jilles =
$");
=20
#include <signal.h>
#include <unistd.h>
@@ -368,6 +368,14 @@
}
=20
=20
+int
+issigchldtrapped(void)
+{
+
+ return (trap[SIGCHLD] !=3D NULL && *trap[SIGCHLD] !=3D '\0');
+}
+
+
/*
* Signal handler.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/bin/sh/trap.h
--- a/head/bin/sh/trap.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/bin/sh/trap.h Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)trap.h 8.3 (Berkeley) 6/5/95
- * $FreeBSD: head/bin/sh/trap.h 223060 2011-06-13 21:03:27Z jilles $
+ * $FreeBSD: head/bin/sh/trap.h 238888 2012-07-29 18:04:38Z jilles $
*/
=20
extern int pendingsigs;
@@ -41,6 +41,7 @@
int have_traps(void);
void setsignal(int);
void ignoresig(int);
+int issigchldtrapped(void);
void onsig(int);
void dotrap(void);
void setinteractive(int);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/cmd/dtra=
ce/dtrace.c
--- a/head/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c Mon Jul 30 11:44:18=
2012 +0300
+++ b/head/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c Fri Aug 10 14:19:25=
2012 +0300
@@ -70,8 +70,6 @@
#define E_ERROR 1
#define E_USAGE 2
=20
-#define IMPATIENT_LIMIT 2
-
static const char DTRACE_OPTSTR[] =3D
"3:6:aAb:Bc:CD:ef:FGhHi:I:lL:m:n:o:p:P:qs:SU:vVwx:X:Z";
=20
@@ -1204,7 +1202,7 @@
if (!g_intr)
g_newline =3D 1;
=20
- if (g_intr++ > IMPATIENT_LIMIT)
+ if (g_intr++)
g_impatient =3D 1;
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/cmd/zpoo=
l/zpool.8
--- a/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 Fri Aug 10 14:19:25 2=
012 +0300
@@ -22,7 +22,7 @@
.\" Copyright (c) 2011, Justin T. Gibbs <gibbs at FreeBSD.org>
.\" Copyright (c) 2012 by Delphix. All Rights Reserved.
.\"
-.\" $FreeBSD: head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 236960 2012-=
06-12 14:40:19Z mm $
+.\" $FreeBSD: head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 238926 2012-=
07-30 23:14:24Z mm $
.\"
.Dd November 28, 2011
.Dt ZPOOL 8
@@ -1636,21 +1636,22 @@
.Op Fl v
.Xc
.Pp
-Displays all pools formatted using a different
+Displays pools which do not have all supported features enabled and pools
+formatted using a legacy
.Tn ZFS
-pool on-disk version. Older versions can continue to be used, but some
-features may not be available. These pools can be upgraded using
-.Qq Nm Cm upgrade Fl a .
-Pools that are formatted with a more recent version are also displayed,
-although these pools will be inaccessible on the system.
+version number.
+These pools can continue to be used, but some features may not be availabl=
e.
+Use
+.Nm Cm upgrade Fl a
+to enable all features on all pools.
.Bl -tag -width indent
.It Fl v
-Displays
+Displays legacy
.Tn ZFS
-pool versions supported by the current software. The current
-.Tn ZFS
-pool version and all previous supported versions are displayed, along
-with an explanation of the features provided with each version.
+versions supported by the current software.
+See
+.Xr zpool-features.5
+for a description of feature flags features supported by the current softw=
are.
.El
.It Xo
.Nm
@@ -1659,18 +1660,22 @@
.Fl a | Ar pool ...
.Xc
.Pp
-Upgrades the given pool to the latest on-disk pool version. Once this is d=
one,
-the pool will no longer be accessible on systems running older versions of=
the
-software.
+Enables all supported features on the given pool.
+Once this is done, the pool will no longer be accessible on systems that do
+not support feature flags.
+See
+.Xr zpool-features.5
+for details on compatability with system sthat support feature flags, but =
do
+not support all features enabled on the pool.
.Bl -tag -width indent
.It Fl a
-Upgrades all pools.
+Enables all supported features on all pools.
.It Fl V Ar version
-Upgrade to the specified version. If the
+Upgrade to the specified legacy version. If the
.Fl V
-flag is not specified, the pool is upgraded to the most recent version. Th=
is
-option can only be used to increase the version number, and only up to the=
most
-recent version supported by this software.
+flag is specified, no features will be enabled on the pool.
+This option can only be used to increase version number up to the last
+supported legacy version number.
.El
.El
.Sh EXAMPLES
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/cmd/zpoo=
l/zpool_main.c
--- a/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Jul 30 11:44=
:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Fri Aug 10 14:19=
:25 2012 +0300
@@ -389,6 +389,18 @@
}
}
=20
+static boolean_t
+prop_list_contains_feature(nvlist_t *proplist)
+{
+ nvpair_t *nvp;
+ for (nvp =3D nvlist_next_nvpair(proplist, NULL); NULL !=3D nvp;
+ nvp =3D nvlist_next_nvpair(proplist, nvp)) {
+ if (zpool_prop_feature(nvpair_name(nvp)))
+ return (B_TRUE);
+ }
+ return (B_FALSE);
+}
+
/*
* Add a property pair (name, string-value) into a property nvlist.
*/
@@ -412,12 +424,30 @@
proplist =3D *props;
=20
if (poolprop) {
+ const char *vname =3D zpool_prop_to_name(ZPOOL_PROP_VERSION);
+
if ((prop =3D zpool_name_to_prop(propname)) =3D=3D ZPROP_INVAL &&
!zpool_prop_feature(propname)) {
(void) fprintf(stderr, gettext("property '%s' is "
"not a valid pool property\n"), propname);
return (2);
}
+
+ /*
+ * feature@ properties and version should not be specified
+ * at the same time.
+ */
+ if ((prop =3D=3D ZPROP_INVAL && zpool_prop_feature(propname) &&
+ nvlist_exists(proplist, vname)) ||
+ (prop =3D=3D ZPOOL_PROP_VERSION &&
+ prop_list_contains_feature(proplist))) {
+ (void) fprintf(stderr, gettext("'feature@' and "
+ "'version' properties cannot be specified "
+ "together\n"));
+ return (2);
+ }
+
+
if (zpool_prop_feature(propname))
normnm =3D propname;
else
@@ -1583,8 +1613,8 @@
break;
=20
case ZPOOL_STATUS_VERSION_OLDER:
- (void) printf(gettext(" status: The pool is formatted using an "
- "older on-disk version.\n"));
+ (void) printf(gettext(" status: The pool is formatted using a "
+ "legacy on-disk version.\n"));
break;
=20
case ZPOOL_STATUS_VERSION_NEWER:
@@ -1592,6 +1622,11 @@
"incompatible version.\n"));
break;
=20
+ case ZPOOL_STATUS_FEAT_DISABLED:
+ (void) printf(gettext(" status: Some supported features are "
+ "not enabled on the pool.\n"));
+ break;
+
case ZPOOL_STATUS_UNSUP_FEAT_READ:
(void) printf(gettext("status: The pool uses the following "
"feature(s) not supported on this sytem:\n"));
@@ -1638,19 +1673,21 @@
* Print out an action according to the overall state of the pool.
*/
if (vs->vs_state =3D=3D VDEV_STATE_HEALTHY) {
- if (reason =3D=3D ZPOOL_STATUS_VERSION_OLDER)
+ if (reason =3D=3D ZPOOL_STATUS_VERSION_OLDER ||
+ reason =3D=3D ZPOOL_STATUS_FEAT_DISABLED) {
(void) printf(gettext(" action: The pool can be "
"imported using its name or numeric identifier, "
"though\n\tsome features will not be available "
"without an explicit 'zpool upgrade'.\n"));
- else if (reason =3D=3D ZPOOL_STATUS_HOSTID_MISMATCH)
+ } else if (reason =3D=3D ZPOOL_STATUS_HOSTID_MISMATCH) {
(void) printf(gettext(" action: The pool can be "
"imported using its name or numeric "
"identifier and\n\tthe '-f' flag.\n"));
- else
+ } else {
(void) printf(gettext(" action: The pool can be "
"imported using its name or numeric "
"identifier.\n"));
+ }
} else if (vs->vs_state =3D=3D VDEV_STATE_DEGRADED) {
(void) printf(gettext(" action: The pool can be imported "
"despite missing or damaged devices. The\n\tfault "
@@ -4108,12 +4145,13 @@
break;
=20
case ZPOOL_STATUS_VERSION_OLDER:
- (void) printf(gettext("status: The pool is formatted using an "
- "older on-disk format. The pool can\n\tstill be used, but "
- "some features are unavailable.\n"));
+ (void) printf(gettext("status: The pool is formatted using a "
+ "legacy on-disk format. The pool can\n\tstill be used, "
+ "but some features are unavailable.\n"));
(void) printf(gettext("action: Upgrade the pool using 'zpool "
"upgrade'. Once this is done, the\n\tpool will no longer "
- "be accessible on older software versions.\n"));
+ "be accessible on software that does not support feature\n"
+ "\tflags.\n"));
break;
=20
case ZPOOL_STATUS_VERSION_NEWER:
@@ -4125,6 +4163,16 @@
"backup.\n"));
break;
=20
+ case ZPOOL_STATUS_FEAT_DISABLED:
+ (void) printf(gettext("status: Some supported features are not "
+ "enabled on the pool. The pool can\n\tstill be used, but "
+ "some features are unavailable.\n"));
+ (void) printf(gettext("action: Enable all features using "
+ "'zpool upgrade'. Once this is done,\n\tthe pool may no "
+ "longer be accessible by software that does not support\n\t"
+ "the features. See zpool-features(5) for details.\n"));
+ break;
+
case ZPOOL_STATUS_UNSUP_FEAT_READ:
(void) printf(gettext("status: The pool cannot be accessed on "
"this system because it uses the\n\tfollowing feature(s) "
@@ -4354,15 +4402,14 @@
}
=20
typedef struct upgrade_cbdata {
- int cb_all;
int cb_first;
- int cb_newer;
char cb_poolname[ZPOOL_MAXNAMELEN];
int cb_argc;
uint64_t cb_version;
char **cb_argv;
} upgrade_cbdata_t;
=20
+#ifdef __FreeBSD__
static int
is_root_pool(zpool_handle_t *zhp)
{
@@ -4388,56 +4435,161 @@
return (poolname !=3D NULL && strcmp(poolname, zpool_get_name(zhp)) =3D=
=3D 0);
}
=20
+static void
+root_pool_upgrade_check(zpool_handle_t *zhp, char *poolname, int size) {
+
+ if (poolname[0] =3D=3D '\0' && is_root_pool(zhp))
+ (void) strlcpy(poolname, zpool_get_name(zhp), size);
+}
+#endif /* FreeBSD */
+
+static int
+upgrade_version(zpool_handle_t *zhp, uint64_t version)
+{
+ int ret;
+ nvlist_t *config;
+ uint64_t oldversion;
+
+ config =3D zpool_get_config(zhp, NULL);
+ verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
+ &oldversion) =3D=3D 0);
+
+ assert(SPA_VERSION_IS_SUPPORTED(oldversion));
+ assert(oldversion < version);
+
+ ret =3D zpool_upgrade(zhp, version);
+ if (ret !=3D 0)
+ return (ret);
+
+ if (version >=3D SPA_VERSION_FEATURES) {
+ (void) printf(gettext("Successfully upgraded "
+ "'%s' from version %llu to feature flags.\n"),
+ zpool_get_name(zhp), oldversion);
+ } else {
+ (void) printf(gettext("Successfully upgraded "
+ "'%s' from version %llu to version %llu.\n"),
+ zpool_get_name(zhp), oldversion, version);
+ }
+
+ return (0);
+}
+
+static int
+upgrade_enable_all(zpool_handle_t *zhp, int *countp)
+{
+ int i, ret, count;
+ boolean_t firstff =3D B_TRUE;
+ nvlist_t *enabled =3D zpool_get_features(zhp);
+
+ count =3D 0;
+ for (i =3D 0; i < SPA_FEATURES; i++) {
+ const char *fname =3D spa_feature_table[i].fi_uname;
+ const char *fguid =3D spa_feature_table[i].fi_guid;
+ if (!nvlist_exists(enabled, fguid)) {
+ char *propname;
+ verify(-1 !=3D asprintf(&propname, "feature@%s", fname));
+ ret =3D zpool_set_prop(zhp, propname,
+ ZFS_FEATURE_ENABLED);
+ if (ret !=3D 0) {
+ free(propname);
+ return (ret);
+ }
+ count++;
+
+ if (firstff) {
+ (void) printf(gettext("Enabled the "
+ "following features on '%s':\n"),
+ zpool_get_name(zhp));
+ firstff =3D B_FALSE;
+ }
+ (void) printf(gettext(" %s\n"), fname);
+ free(propname);
+ }
+ }
+
+ if (countp !=3D NULL)
+ *countp =3D count;
+ return (0);
+}
+
static int
upgrade_cb(zpool_handle_t *zhp, void *arg)
{
upgrade_cbdata_t *cbp =3D arg;
nvlist_t *config;
uint64_t version;
- int ret =3D 0;
+ boolean_t printnl =3D B_FALSE;
+ int ret;
=20
config =3D zpool_get_config(zhp, NULL);
verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
&version) =3D=3D 0);
=20
- if (!cbp->cb_newer && SPA_VERSION_IS_SUPPORTED(version) &&
- version !=3D SPA_VERSION) {
- if (!cbp->cb_all) {
- if (cbp->cb_first) {
- (void) printf(gettext("The following pools are "
- "out of date, and can be upgraded. After "
- "being\nupgraded, these pools will no "
- "longer be accessible by older software "
- "versions.\n\n"));
- (void) printf(gettext("VER POOL\n"));
- (void) printf(gettext("--- ------------\n"));
- cbp->cb_first =3D B_FALSE;
- }
-
- (void) printf("%2llu %s\n", (u_longlong_t)version,
- zpool_get_name(zhp));
- } else {
+ assert(SPA_VERSION_IS_SUPPORTED(version));
+
+ if (version < cbp->cb_version) {
+ cbp->cb_first =3D B_FALSE;
+ ret =3D upgrade_version(zhp, cbp->cb_version);
+ if (ret !=3D 0)
+ return (ret);
+#ifdef __FreeBSD__
+ root_pool_upgrade_check(zhp, cbp->cb_poolname,
+ sizeof(cbp->cb_poolname));
+#endif /* ___FreeBSD__ */
+ printnl =3D B_TRUE;
+
+#ifdef illumos
+ /*
+ * If they did "zpool upgrade -a", then we could
+ * be doing ioctls to different pools. We need
+ * to log this history once to each pool, and bypass
+ * the normal history logging that happens in main().
+ */
+ (void) zpool_log_history(g_zfs, history_str);
+ log_history =3D B_FALSE;
+#endif
+ }
+
+ if (cbp->cb_version >=3D SPA_VERSION_FEATURES) {
+ int count;
+ ret =3D upgrade_enable_all(zhp, &count);
+ if (ret !=3D 0)
+ return (ret);
+
+ if (count > 0) {
cbp->cb_first =3D B_FALSE;
- ret =3D zpool_upgrade(zhp, cbp->cb_version);
- if (!ret) {
- (void) printf(gettext("Successfully upgraded "
- "'%s'\n\n"), zpool_get_name(zhp));
- if (cbp->cb_poolname[0] =3D=3D '\0' &&
- is_root_pool(zhp)) {
- (void) strlcpy(cbp->cb_poolname,
- zpool_get_name(zhp),
- sizeof(cbp->cb_poolname));
- }
- }
+ printnl =3D B_TRUE;
}
- } else if (cbp->cb_newer && !SPA_VERSION_IS_SUPPORTED(version)) {
- assert(!cbp->cb_all);
-
+ }
+
+ if (printnl) {
+ (void) printf(gettext("\n"));
+ }
+
+ return (0);
+}
+
+static int
+upgrade_list_older_cb(zpool_handle_t *zhp, void *arg)
+{
+ upgrade_cbdata_t *cbp =3D arg;
+ nvlist_t *config;
+ uint64_t version;
+
+ config =3D zpool_get_config(zhp, NULL);
+ verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
+ &version) =3D=3D 0);
+
+ assert(SPA_VERSION_IS_SUPPORTED(version));
+
+ if (version < SPA_VERSION_FEATURES) {
if (cbp->cb_first) {
(void) printf(gettext("The following pools are "
- "formatted using an unsupported software version "
- "and\ncannot be accessed on the current "
- "system.\n\n"));
+ "formatted with legacy version numbers and can\n"
+ "be upgraded to use feature flags. After "
+ "being upgraded, these pools\nwill no "
+ "longer be accessible by software that does not "
+ "support feature\nflags.\n\n"));
(void) printf(gettext("VER POOL\n"));
(void) printf(gettext("--- ------------\n"));
cbp->cb_first =3D B_FALSE;
@@ -4447,14 +4599,65 @@
zpool_get_name(zhp));
}
=20
- zpool_close(zhp);
- return (ret);
+ return (0);
+}
+
+static int
+upgrade_list_disabled_cb(zpool_handle_t *zhp, void *arg)
+{
+ upgrade_cbdata_t *cbp =3D arg;
+ nvlist_t *config;
+ uint64_t version;
+
+ config =3D zpool_get_config(zhp, NULL);
+ verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
+ &version) =3D=3D 0);
+
+ if (version >=3D SPA_VERSION_FEATURES) {
+ int i;
+ boolean_t poolfirst =3D B_TRUE;
+ nvlist_t *enabled =3D zpool_get_features(zhp);
+
+ for (i =3D 0; i < SPA_FEATURES; i++) {
+ const char *fguid =3D spa_feature_table[i].fi_guid;
+ const char *fname =3D spa_feature_table[i].fi_uname;
+ if (!nvlist_exists(enabled, fguid)) {
+ if (cbp->cb_first) {
+ (void) printf(gettext("\nSome "
+ "supported features are not "
+ "enabled on the following pools. "
+ "Once a\nfeature is enabled the "
+ "pool may become incompatible with "
+ "software\nthat does not support "
+ "the feature. See "
+ "zpool-features(5) for "
+ "details.\n\n"));
+ (void) printf(gettext("POOL "
+ "FEATURE\n"));
+ (void) printf(gettext("------"
+ "---------\n"));
+ cbp->cb_first =3D B_FALSE;
+ }
+
+ if (poolfirst) {
+ (void) printf(gettext("%s\n"),
+ zpool_get_name(zhp));
+ poolfirst =3D B_FALSE;
+ }
+
+ (void) printf(gettext(" %s\n"), fname);
+ }
+ }
+ }
+
+ return (0);
}
=20
/* ARGSUSED */
static int
upgrade_one(zpool_handle_t *zhp, void *data)
{
+ boolean_t printnl =3D B_FALSE;
upgrade_cbdata_t *cbp =3D data;
uint64_t cur_version;
int ret;
@@ -4469,30 +4672,53 @@
cur_version =3D zpool_get_prop_int(zhp, ZPOOL_PROP_VERSION, NULL);
if (cur_version > cbp->cb_version) {
(void) printf(gettext("Pool '%s' is already formatted "
- "using more current version '%llu'.\n"),
+ "using more current version '%llu'.\n\n"),
zpool_get_name(zhp), cur_version);
return (0);
}
- if (cur_version =3D=3D cbp->cb_version) {
+
+ if (cbp->cb_version !=3D SPA_VERSION && cur_version =3D=3D cbp->cb_versio=
n) {
(void) printf(gettext("Pool '%s' is already formatted "
- "using the current version.\n"), zpool_get_name(zhp));
+ "using version %llu.\n\n"), zpool_get_name(zhp),
+ cbp->cb_version);
return (0);
}
=20
- ret =3D zpool_upgrade(zhp, cbp->cb_version);
-
- if (!ret) {
- (void) printf(gettext("Successfully upgraded '%s' "
- "from version %llu to version %llu\n\n"),
- zpool_get_name(zhp), (u_longlong_t)cur_version,
- (u_longlong_t)cbp->cb_version);
- if (cbp->cb_poolname[0] =3D=3D '\0' && is_root_pool(zhp)) {
- (void) strlcpy(cbp->cb_poolname, zpool_get_name(zhp),
+ if (cur_version !=3D cbp->cb_version) {
+ printnl =3D B_TRUE;
+ ret =3D upgrade_version(zhp, cbp->cb_version);
+ if (ret !=3D 0)
+ return (ret);
+#ifdef __FreeBSD__
+ root_pool_upgrade_check(zhp, cbp->cb_poolname,
+ sizeof(cbp->cb_poolname));
+#endif /* ___FreeBSD__ */
+ }
+
+ if (cbp->cb_version >=3D SPA_VERSION_FEATURES) {
+ int count =3D 0;
+ ret =3D upgrade_enable_all(zhp, &count);
+ if (ret !=3D 0)
+ return (ret);
+
+ if (count !=3D 0) {
+ printnl =3D B_TRUE;
+#ifdef __FreeBSD__
+ root_pool_upgrade_check(zhp, cbp->cb_poolname,
sizeof(cbp->cb_poolname));
+#endif /* __FreeBSD __*/
+ } else if (cur_version =3D=3D SPA_VERSION) {
+ (void) printf(gettext("Pool '%s' already has all "
+ "supported features enabled.\n"),
+ zpool_get_name(zhp));
}
}
=20
- return (ret !=3D 0);
+ if (printnl) {
+ (void) printf(gettext("\n"));
+ }
+
+ return (0);
}
=20
/*
@@ -4511,6 +4737,7 @@
upgrade_cbdata_t cb =3D { 0 };
int ret =3D 0;
boolean_t showversions =3D B_FALSE;
+ boolean_t upgradeall =3D B_FALSE;
char *end;
=20
=20
@@ -4518,7 +4745,7 @@
while ((c =3D getopt(argc, argv, ":avV:")) !=3D -1) {
switch (c) {
case 'a':
- cb.cb_all =3D B_TRUE;
+ upgradeall =3D B_TRUE;
break;
case 'v':
showversions =3D B_TRUE;
@@ -4551,19 +4778,19 @@
=20
if (cb.cb_version =3D=3D 0) {
cb.cb_version =3D SPA_VERSION;
- } else if (!cb.cb_all && argc =3D=3D 0) {
+ } else if (!upgradeall && argc =3D=3D 0) {
(void) fprintf(stderr, gettext("-V option is "
"incompatible with other arguments\n"));
usage(B_FALSE);
}
=20
if (showversions) {
- if (cb.cb_all || argc !=3D 0) {
+ if (upgradeall || argc !=3D 0) {
(void) fprintf(stderr, gettext("-v option is "
"incompatible with other arguments\n"));
usage(B_FALSE);
}
- } else if (cb.cb_all) {
+ } else if (upgradeall) {
if (argc !=3D 0) {
(void) fprintf(stderr, gettext("-a option should not "
"be used along with a pool name\n"));
@@ -4573,9 +4800,25 @@
=20
(void) printf(gettext("This system supports ZFS pool feature "
"flags.\n\n"));
- cb.cb_first =3D B_TRUE;
if (showversions) {
- (void) printf(gettext("The following versions are "
+ int i;
+
+ (void) printf(gettext("The following features are "
+ "supported:\n\n"));
+ (void) printf(gettext("FEAT DESCRIPTION\n"));
+ (void) printf("----------------------------------------------"
+ "---------------\n");
+ for (i =3D 0; i < SPA_FEATURES; i++) {
+ zfeature_info_t *fi =3D &spa_feature_table[i];
+ const char *ro =3D fi->fi_can_readonly ?
+ " (read-only compatible)" : "";
+
+ (void) printf("%-37s%s\n", fi->fi_uname, ro);
+ (void) printf(" %s\n", fi->fi_desc);
+ }
+ (void) printf("\n");
+
+ (void) printf(gettext("The following legacy versions are also "
"supported:\n\n"));
(void) printf(gettext("VER DESCRIPTION\n"));
(void) printf("--- -----------------------------------------"
@@ -4618,32 +4861,44 @@
(void) printf(gettext("\nFor more information on a particular "
"version, including supported releases,\n"));
(void) printf(gettext("see the ZFS Administration Guide.\n\n"));
- } else if (argc =3D=3D 0) {
- int notfound;
-
+ } else if (argc =3D=3D 0 && upgradeall) {
+ cb.cb_first =3D B_TRUE;
ret =3D zpool_iter(g_zfs, upgrade_cb, &cb);
- notfound =3D cb.cb_first;
-
- if (!cb.cb_all && ret =3D=3D 0) {
- if (!cb.cb_first)
- (void) printf("\n");
- cb.cb_first =3D B_TRUE;
- cb.cb_newer =3D B_TRUE;
- ret =3D zpool_iter(g_zfs, upgrade_cb, &cb);
- if (!cb.cb_first) {
- notfound =3D B_FALSE;
- (void) printf("\n");
+ if (ret =3D=3D 0 && cb.cb_first) {
+ if (cb.cb_version =3D=3D SPA_VERSION) {
+ (void) printf(gettext("All pools are already "
+ "formatted using feature flags.\n\n"));
+ (void) printf(gettext("Every feature flags "
+ "pool already has all supported features "
+ "enabled.\n"));
+ } else {
+ (void) printf(gettext("All pools are already "
+ "formatted with version %llu or higher.\n"),
+ cb.cb_version);
}
}
-
- if (ret =3D=3D 0) {
- if (notfound)
- (void) printf(gettext("All pools are formatted "
- "using this version.\n"));
- else if (!cb.cb_all)
- (void) printf(gettext("Use 'zpool upgrade -v' "
- "for a list of available versions and "
- "their associated\nfeatures.\n"));
+ } else if (argc =3D=3D 0) {
+ cb.cb_first =3D B_TRUE;
+ ret =3D zpool_iter(g_zfs, upgrade_list_older_cb, &cb);
+ assert(ret =3D=3D 0);
+
+ if (cb.cb_first) {
+ (void) printf(gettext("All pools are formatted "
+ "using feature flags.\n\n"));
+ } else {
+ (void) printf(gettext("\nUse 'zpool upgrade -v' "
+ "for a list of available legacy versions.\n"));
+ }
+
+ cb.cb_first =3D B_TRUE;
+ ret =3D zpool_iter(g_zfs, upgrade_list_disabled_cb, &cb);
+ assert(ret =3D=3D 0);
+
+ if (cb.cb_first) {
+ (void) printf(gettext("Every feature flags pool has "
+ "all supported features enabled.\n"));
+ } else {
+ (void) printf(gettext("\n"));
}
} else {
ret =3D for_each_pool(argc, argv, B_FALSE, NULL,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/lib/libd=
trace/common/dt_proc.c
--- a/head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c Fri Aug =
10 14:19:25 2012 +0300
@@ -942,7 +942,8 @@
(int)dpr->dpr_pid, strerror(err));
}
=20
- (void) pthread_mutex_unlock(&dpr->dpr_lock);
+ if (err =3D=3D 0)
+ (void) pthread_mutex_unlock(&dpr->dpr_lock);
(void) pthread_attr_destroy(&a);
=20
return (err);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/lib/libz=
fs/common/libzfs.h
--- a/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Fri Aug 10 1=
4:19:25 2012 +0300
@@ -316,7 +316,8 @@
* requiring administrative attention. There is no corresponding
* message ID.
*/
- ZPOOL_STATUS_VERSION_OLDER, /* older on-disk version */
+ ZPOOL_STATUS_VERSION_OLDER, /* older legacy on-disk version */
+ ZPOOL_STATUS_FEAT_DISABLED, /* supported features are disabled */
ZPOOL_STATUS_RESILVERING, /* device being resilvered */
ZPOOL_STATUS_OFFLINE_DEV, /* device online */
ZPOOL_STATUS_REMOVED_DEV, /* removed device */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/lib/libz=
fs/common/libzfs_status.c
--- a/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c Fri A=
ug 10 14:19:25 2012 +0300
@@ -44,6 +44,7 @@
#include <string.h>
#include <unistd.h>
#include "libzfs_impl.h"
+#include "zfeature_common.h"
=20
/*
* Message ID table. This must be kept in sync with the ZPOOL_STATUS_* de=
fines
@@ -319,6 +320,30 @@
if (SPA_VERSION_IS_SUPPORTED(version) && version !=3D SPA_VERSION)
return (ZPOOL_STATUS_VERSION_OLDER);
=20
+ /*
+ * Usable pool with disabled features
+ */
+ if (version >=3D SPA_VERSION_FEATURES) {
+ int i;
+ nvlist_t *feat;
+
+ if (isimport) {
+ feat =3D fnvlist_lookup_nvlist(config,
+ ZPOOL_CONFIG_LOAD_INFO);
+ feat =3D fnvlist_lookup_nvlist(feat,
+ ZPOOL_CONFIG_ENABLED_FEAT);
+ } else {
+ feat =3D fnvlist_lookup_nvlist(config,
+ ZPOOL_CONFIG_FEATURE_STATS);
+ }
+
+ for (i =3D 0; i < SPA_FEATURES; i++) {
+ zfeature_info_t *fi =3D &spa_feature_table[i];
+ if (!nvlist_exists(feat, fi->fi_guid))
+ return (ZPOOL_STATUS_FEAT_DISABLED);
+ }
+ }
+
return (ZPOOL_STATUS_OK);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/lib/libzfs/Makefile
--- a/head/cddl/lib/libzfs/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/cddl/lib/libzfs/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/cddl/lib/libzfs/Makefile 236884 2012-06-11 11:35:22Z mm $
+# $FreeBSD: head/cddl/lib/libzfs/Makefile 238926 2012-07-30 23:14:24Z mm $
=20
.PATH: ${.CURDIR}/../../../cddl/compat/opensolaris/misc
.PATH: ${.CURDIR}/../../../sys/cddl/contrib/opensolaris/common/zfs
@@ -6,8 +6,8 @@
.PATH: ${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libzfs/common
=20
LIB=3D zfs
-DPADD=3D ${LIBMD} ${LIBPTHREAD} ${LIBUMEM} ${LIBUTIL} ${LIBM}
-LDADD=3D -lmd -lpthread -lumem -lutil -lm
+DPADD=3D ${LIBMD} ${LIBPTHREAD} ${LIBUMEM} ${LIBUTIL} ${LIBM} ${LIBNVPAIR}
+LDADD=3D -lmd -lpthread -lumem -lutil -lm -lnvpair
=20
SRCS=3D deviceid.c \
fsshare.c \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/LICENSE.TXT
--- a/head/contrib/compiler-rt/LICENSE.TXT Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/LICENSE.TXT Fri Aug 10 14:19:25 2012 +0300
@@ -94,5 +94,4 @@
=20
Program Directory
------- ---------
-sysinfo lib/asan/sysinfo
-mach_override lib/asan/mach_override
+mach_override lib/interception/mach_override
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/absvti2.c
--- a/head/contrib/compiler-rt/lib/absvti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/absvti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: absolute value */
=20
/* Effects: aborts if abs(x) < 0 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/adddf3.c
--- a/head/contrib/compiler-rt/lib/adddf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/adddf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
#define DOUBLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(dadd, adddf3);
+ARM_EABI_FNALIAS(dadd, adddf3)
=20
COMPILER_RT_ABI fp_t
__adddf3(fp_t a, fp_t b) {
@@ -85,7 +85,7 @@
=20
// Shift the significand of b by the difference in exponents, with a s=
ticky
// bottom bit to get rounding correct.
- const int align =3D aExponent - bExponent;
+ const unsigned int align =3D aExponent - bExponent;
if (align) {
if (align < typeWidth) {
const bool sticky =3D bSignificand << (typeWidth - align);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/addsf3.c
--- a/head/contrib/compiler-rt/lib/addsf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/addsf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
#define SINGLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fadd, addsf3);
+ARM_EABI_FNALIAS(fadd, addsf3)
=20
fp_t __addsf3(fp_t a, fp_t b) {
=20
@@ -84,7 +84,7 @@
=20
// Shift the significand of b by the difference in exponents, with a s=
ticky
// bottom bit to get rounding correct.
- const int align =3D aExponent - bExponent;
+ const unsigned int align =3D aExponent - bExponent;
if (align) {
if (align < typeWidth) {
const bool sticky =3D bSignificand << (typeWidth - align);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/addvti3.c
--- a/head/contrib/compiler-rt/lib/addvti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/addvti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: a + b */
=20
/* Effects: aborts if a + b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_idivmod.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_idivmod.S Fri Aug 10 14:19:25 =
2012 +0300
@@ -0,0 +1,27 @@
+//=3D=3D=3D-- aeabi_idivmod.S - EABI idivmod implementation --------------=
-------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { int quot, int rem} __aeabi_idivmod(int numerator, int denomina=
tor) {
+// int rem, quot;
+// quot =3D __divmodsi4(numerator, denominator, &rem);
+// return {quot, rem};
+// }
+
+ .syntax unified
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_idivmod)
+ push { lr }
+ sub sp, sp, #4
+ mov r2, sp
+ bl SYMBOL_NAME(__divmodsi4)
+ ldr r1, [sp]
+ add sp, sp, #4
+ pop { pc }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_ldivmod.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_ldivmod.S Fri Aug 10 14:19:25 =
2012 +0300
@@ -0,0 +1,30 @@
+//=3D=3D=3D-- aeabi_ldivmod.S - EABI ldivmod implementation --------------=
-------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { int64_t quot, int64_t rem}
+// __aeabi_ldivmod(int64_t numerator, int64_t denominator) {
+// int64_t rem, quot;
+// quot =3D __divmoddi4(numerator, denominator, &rem);
+// return {quot, rem};
+// }
+
+ .syntax unified
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_ldivmod)
+ push {r11, lr}
+ sub sp, sp, #16
+ add r12, sp, #8
+ str r12, [sp]
+ bl SYMBOL_NAME(__divmoddi4)
+ ldr r2, [sp, #8]
+ ldr r3, [sp, #12]
+ add sp, sp, #16
+ pop {r11, pc}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memcmp.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memcmp.S Fri Aug 10 14:19:25 2=
012 +0300
@@ -0,0 +1,19 @@
+//=3D=3D=3D-- aeabi_memcmp.S - EABI memcmp implementation ----------------=
-------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// void __aeabi_memcmp(void *dest, void *src, size_t n) { memcmp(dest, sr=
c, n); }
+
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memcmp)
+ b memcmp
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp4, __aeabi_memcmp)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp8, __aeabi_memcmp)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memcpy.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memcpy.S Fri Aug 10 14:19:25 2=
012 +0300
@@ -0,0 +1,19 @@
+//=3D=3D=3D-- aeabi_memcpy.S - EABI memcpy implementation ----------------=
-------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// void __aeabi_memcpy(void *dest, void *src, size_t n) { memcpy(dest, sr=
c, n); }
+
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memcpy)
+ b memcpy
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy4, __aeabi_memcpy)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy8, __aeabi_memcpy)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memmove.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memmove.S Fri Aug 10 14:19:25 =
2012 +0300
@@ -0,0 +1,19 @@
+//=3D=3D=3D-- aeabi_memmove.S - EABI memmove implementation --------------=
------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// void __aeabi_memmove(void *dest, void *src, size_t n) { memmove(dest, =
src, n); }
+
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memmove)
+ b memmove
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove4, __aeabi_memmove)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove8, __aeabi_memmove)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memset.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memset.S Fri Aug 10 14:19:25 2=
012 +0300
@@ -0,0 +1,32 @@
+//=3D=3D=3D-- aeabi_memset.S - EABI memset implementation ----------------=
-------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// void __aeabi_memset(void *dest, size_t n, int c) { memset(dest, c, n);=
}
+// void __aeabi_memclr(void *dest, size_t n) { __aeabi_memset(dest, n, 0)=
; }
+
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memset)
+ mov r3, r1
+ mov r1, r2
+ mov r2, r3
+ b memset
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset4, __aeabi_memset)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset8, __aeabi_memset)
+ =20
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memclr)
+ mov r2, r1
+ mov r1, #0
+ b memset
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr4, __aeabi_memclr)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr8, __aeabi_memclr)
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_uidivmod.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_uidivmod.S Fri Aug 10 14:19:25=
2012 +0300
@@ -0,0 +1,28 @@
+//=3D=3D=3D-- aeabi_uidivmod.S - EABI uidivmod implementation ------------=
-------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { unsigned quot, unsigned rem}
+// __aeabi_uidivmod(unsigned numerator, unsigned denominator) {
+// unsigned rem, quot;
+// quot =3D __udivmodsi4(numerator, denominator, &rem);
+// return {quot, rem};
+// }
+
+ .syntax unified
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_uidivmod)
+ push { lr }
+ sub sp, sp, #4
+ mov r2, sp
+ bl SYMBOL_NAME(__udivmodsi4)
+ ldr r1, [sp]
+ add sp, sp, #4
+ pop { pc }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_uldivmod.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_uldivmod.S Fri Aug 10 14:19:25=
2012 +0300
@@ -0,0 +1,30 @@
+//=3D=3D=3D-- aeabi_uldivmod.S - EABI uldivmod implementation ------------=
-------=3D=3D=3D//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { uint64_t quot, uint64_t rem}
+// __aeabi_uldivmod(uint64_t numerator, uint64_t denominator) {
+// uint64_t rem, quot;
+// quot =3D __udivmoddi4(numerator, denominator, &rem);
+// return {quot, rem};
+// }
+
+ .syntax unified
+ .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_uldivmod)
+ push {r11, lr}
+ sub sp, sp, #16
+ add r12, sp, #8
+ str r12, [sp]
+ bl SYMBOL_NAME(__udivmoddi4)
+ ldr r2, [sp, #8]
+ ldr r3, [sp, #12]
+ add sp, sp, #16
+ pop {r11, pc}
\ No newline at end of file
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashldi3.c
--- a/head/contrib/compiler-rt/lib/ashldi3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashldi3.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
/* Precondition: 0 <=3D b < bits_in_dword */
=20
-ARM_EABI_FNALIAS(llsl, ashldi3);
+ARM_EABI_FNALIAS(llsl, ashldi3)
=20
COMPILER_RT_ABI di_int
__ashldi3(di_int a, si_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashlti3.c
--- a/head/contrib/compiler-rt/lib/ashlti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashlti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: a << b */
=20
/* Precondition: 0 <=3D b < bits_in_tword */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashrdi3.c
--- a/head/contrib/compiler-rt/lib/ashrdi3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashrdi3.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
/* Precondition: 0 <=3D b < bits_in_dword */
=20
-ARM_EABI_FNALIAS(lasr, ashrdi3);
+ARM_EABI_FNALIAS(lasr, ashrdi3)
=20
COMPILER_RT_ABI di_int
__ashrdi3(di_int a, si_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashrti3.c
--- a/head/contrib/compiler-rt/lib/ashrti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashrti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: arithmetic a >> b */
=20
/* Precondition: 0 <=3D b < bits_in_tword */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/assembly.h
--- a/head/contrib/compiler-rt/lib/assembly.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/assembly.h Fri Aug 10 14:19:25 2012 +0300
@@ -25,9 +25,11 @@
#if defined(__APPLE__)
#define HIDDEN_DIRECTIVE .private_extern
#define LOCAL_LABEL(name) L_##name
+#define FILE_LEVEL_DIRECTIVE .subsections_via_symbols
#else
#define HIDDEN_DIRECTIVE .hidden
#define LOCAL_LABEL(name) .L_##name
+#define FILE_LEVEL_DIRECTIVE =20
#endif
=20
#define GLUE2(a, b) a ## b
@@ -42,6 +44,7 @@
#endif
=20
#define DEFINE_COMPILERRT_FUNCTION(name) \
+ FILE_LEVEL_DIRECTIVE SEPARATOR \
.globl SYMBOL_NAME(name) SEPARATOR \
DECLARE_SYMBOL_VISIBILITY(name) \
SYMBOL_NAME(name):
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/atomic.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/atomic.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,315 @@
+/*=3D=3D=3D-- atomic.c - Implement support functions for atomic operations=
.------=3D=3D=3D
+ *
+ * The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois=
Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ *=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D
+ *
+ * atomic.c defines a set of functions for performing atomic accesses on
+ * arbitrary-sized memory locations. This design uses locks that should
+ * be fast in the uncontended case, for two reasons:
+ *=20
+ * 1) This code must work with C programs that do not link to anything
+ * (including pthreads) and so it should not depend on any pthread
+ * functions.
+ * 2) Atomic operations, rather than explicit mutexes, are most commonly =
used
+ * on code where contended operations are rate.
+ *=20
+ * To avoid needing a per-object lock, this code allocates an array of
+ * locks and hashes the object pointers to find the one that it should us=
e.
+ * For operations that must be atomic on two locations, the lower lock is
+ * always acquired first, to avoid deadlock.
+ *
+ *=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D
+ */
+
+#include <stdint.h>
+#include <string.h>
+
+// Clang objects if you redefine a builtin. This little hack allows us to
+// define a function with the same name as an intrinsic.
+#pragma redefine_extname __atomic_load_c __atomic_load
+#pragma redefine_extname __atomic_store_c __atomic_store
+#pragma redefine_extname __atomic_exchange_c __atomic_exchange
+#pragma redefine_extname __atomic_compare_exchange_c __atomic_compare_exch=
ange
+
+/// Number of locks. This allocates one page on 32-bit platforms, two on
+/// 64-bit. This can be specified externally if a different trade between
+/// memory usage and contention probability is required for a given platfo=
rm.
+#ifndef SPINLOCK_COUNT
+#define SPINLOCK_COUNT (1<<10)
+#endif
+static const long SPINLOCK_MASK =3D SPINLOCK_COUNT - 1;
+
+//////////////////////////////////////////////////////////////////////////=
//////
+// Platform-specific lock implementation. Falls back to spinlocks if none=
is
+// defined. Each platform should define the Lock type, and corresponding
+// lock() and unlock() functions.
+//////////////////////////////////////////////////////////////////////////=
//////
+#ifdef __FreeBSD__
+#include <errno.h>
+#include <sys/types.h>
+#include <machine/atomic.h>
+#include <sys/umtx.h>
+typedef struct _usem Lock;
+inline static void unlock(Lock *l) {
+ __c11_atomic_store((_Atomic(uint32_t)*)&l->_count, 1, __ATOMIC_RELEASE);
+ __c11_atomic_thread_fence(__ATOMIC_SEQ_CST);
+ if (l->_has_waiters)
+ _umtx_op(l, UMTX_OP_SEM_WAKE, 1, 0, 0);
+}
+inline static void lock(Lock *l) {
+ uint32_t old =3D 1;
+ while (!__c11_atomic_compare_exchange_weak((_Atomic(uint32_t)*)&l->_coun=
t, &old,
+ 0, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) {
+ _umtx_op(l, UMTX_OP_SEM_WAIT, 0, 0, 0);
+ old =3D 1;
+ }
+}
+/// locks for atomic operations
+static Lock locks[SPINLOCK_COUNT] =3D { [0 ... SPINLOCK_COUNT-1] =3D {0,1=
,0} };
+#else
+typedef _Atomic(uintptr_t) Lock;
+/// Unlock a lock. This is a release operation.
+inline static void unlock(Lock *l) {
+ __c11_atomic_store(l, 0, __ATOMIC_RELEASE);
+}
+/// Locks a lock. In the current implementation, this is potentially
+/// unbounded in the contended case.
+inline static void lock(Lock *l) {
+ uintptr_t old =3D 0;
+ while (!__c11_atomic_compare_exchange_weak(l, &old, 1, __ATOMIC_ACQUIRE,
+ __ATOMIC_RELAXED))
+ old =3D 0;
+}
+/// locks for atomic operations
+static Lock locks[SPINLOCK_COUNT];
+#endif
+
+
+/// Returns a lock to use for a given pointer. =20
+static inline Lock *lock_for_pointer(void *ptr) {
+ intptr_t hash =3D (intptr_t)ptr;
+ // Disregard the lowest 4 bits. We want all values that may be part of =
the
+ // same memory operation to hash to the same value and therefore use the=
same
+ // lock. =20
+ hash >>=3D 4;
+ // Use the next bits as the basis for the hash
+ intptr_t low =3D hash & SPINLOCK_MASK;
+ // Now use the high(er) set of bits to perturb the hash, so that we don't
+ // get collisions from atomic fields in a single object
+ hash >>=3D 16;
+ hash ^=3D low;
+ // Return a pointer to the word to use
+ return locks + (hash & SPINLOCK_MASK);
+}
+
+/// Macros for determining whether a size is lock free. Clang can not yet
+/// codegen __atomic_is_lock_free(16), so for now we assume 16-byte values=
are
+/// not lock free.
+#define IS_LOCK_FREE_1 __c11_atomic_is_lock_free(1)
+#define IS_LOCK_FREE_2 __c11_atomic_is_lock_free(2)
+#define IS_LOCK_FREE_4 __c11_atomic_is_lock_free(4)
+#define IS_LOCK_FREE_8 __c11_atomic_is_lock_free(8)
+#define IS_LOCK_FREE_16 0
+
+/// Macro that calls the compiler-generated lock-free versions of functions
+/// when they exist.
+#define LOCK_FREE_CASES() \
+ do {\
+ switch (size) {\
+ case 2:\
+ if (IS_LOCK_FREE_2) {\
+ LOCK_FREE_ACTION(uint16_t);\
+ }\
+ case 4:\
+ if (IS_LOCK_FREE_4) {\
+ LOCK_FREE_ACTION(uint32_t);\
+ }\
+ case 8:\
+ if (IS_LOCK_FREE_8) {\
+ LOCK_FREE_ACTION(uint64_t);\
+ }\
+ case 16:\
+ if (IS_LOCK_FREE_16) {\
+ /* FIXME: __uint128_t isn't available on 32 bit platforms.
+ LOCK_FREE_ACTION(__uint128_t);*/\
+ }\
+ }\
+ } while (0)
+
+
+/// An atomic load operation. This is atomic with respect to the source
+/// pointer only.
+void __atomic_load_c(int size, void *src, void *dest, int model) {
+#define LOCK_FREE_ACTION(type) \
+ *((type*)dest) =3D __c11_atomic_load((_Atomic(type)*)src, model);\
+ return;
+ LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+ Lock *l =3D lock_for_pointer(src);
+ lock(l);
+ memcpy(dest, src, size);
+ unlock(l);
+}
+
+/// An atomic store operation. This is atomic with respect to the destina=
tion
+/// pointer only.
+void __atomic_store_c(int size, void *dest, void *src, int model) {
+#define LOCK_FREE_ACTION(type) \
+ __c11_atomic_store((_Atomic(type)*)dest, *(type*)dest, model);\
+ return;
+ LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+ Lock *l =3D lock_for_pointer(dest);
+ lock(l);
+ memcpy(dest, src, size);
+ unlock(l);
+}
+
+/// Atomic compare and exchange operation. If the value at *ptr is identi=
cal
+/// to the value at *expected, then this copies value at *desired to *ptr.=
If
+/// they are not, then this stores the current value from *ptr in *expect=
ed.
+///
+/// This function returns 1 if the exchange takes place or 0 if it fails.=20
+int __atomic_compare_exchange_c(int size, void *ptr, void *expected,
+ void *desired, int success, int failure) {
+#define LOCK_FREE_ACTION(type) \
+ return __c11_atomic_compare_exchange_strong((_Atomic(type)*)ptr, (type*)=
expected,\
+ *(type*)desired, success, failure)
+ LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+ Lock *l =3D lock_for_pointer(ptr);
+ lock(l);
+ if (memcmp(ptr, expected, size) =3D=3D 0) {
+ memcpy(ptr, desired, size);
+ unlock(l);
+ return 1;
+ }
+ memcpy(expected, ptr, size);
+ unlock(l);
+ return 0;
+}
+
+/// Performs an atomic exchange operation between two pointers. This is a=
tomic
+/// with respect to the target address.
+void __atomic_exchange_c(int size, void *ptr, void *val, void *old, int mo=
del) {
+#define LOCK_FREE_ACTION(type) \
+ *(type*)old =3D __c11_atomic_exchange((_Atomic(type)*)ptr, *(type*)val=
,\
+ model);\
+ return;
+ LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+ Lock *l =3D lock_for_pointer(ptr);
+ lock(l);
+ memcpy(old, ptr, size);
+ memcpy(ptr, val, size);
+ unlock(l);
+}
+
+//////////////////////////////////////////////////////////////////////////=
//////
+// Where the size is known at compile time, the compiler may emit calls to
+// specialised versions of the above functions.
+//////////////////////////////////////////////////////////////////////////=
//////
+#define OPTIMISED_CASES\
+ OPTIMISED_CASE(1, IS_LOCK_FREE_1, uint8_t)\
+ OPTIMISED_CASE(2, IS_LOCK_FREE_2, uint16_t)\
+ OPTIMISED_CASE(4, IS_LOCK_FREE_4, uint32_t)\
+ OPTIMISED_CASE(8, IS_LOCK_FREE_8, uint64_t)\
+ /* FIXME: __uint128_t isn't available on 32 bit platforms.
+ OPTIMISED_CASE(16, IS_LOCK_FREE_16, __uint128_t)*/\
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+type __atomic_load_##n(type *src, int model) {\
+ if (lockfree)\
+ return __c11_atomic_load((_Atomic(type)*)src, model);\
+ Lock *l =3D lock_for_pointer(src);\
+ lock(l);\
+ type val =3D *src;\
+ unlock(l);\
+ return val;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+void __atomic_store_##n(type *dest, type val, int model) {\
+ if (lockfree) {\
+ __c11_atomic_store((_Atomic(type)*)dest, val, model);\
+ return;\
+ }\
+ Lock *l =3D lock_for_pointer(dest);\
+ lock(l);\
+ *dest =3D val;\
+ unlock(l);\
+ return;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+type __atomic_exchange_##n(type *dest, type val, int model) {\
+ if (lockfree)\
+ return __c11_atomic_exchange((_Atomic(type)*)dest, val, model);\
+ Lock *l =3D lock_for_pointer(dest);\
+ lock(l);\
+ type tmp =3D *dest;\
+ *dest =3D val;\
+ unlock(l);\
+ return tmp;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+int __atomic_compare_exchange_##n(type *ptr, type *expected, type desired,\
+ int success, int failure) {\
+ if (lockfree)\
+ return __c11_atomic_compare_exchange_strong((_Atomic(type)*)ptr, expec=
ted, desired,\
+ success, failure);\
+ Lock *l =3D lock_for_pointer(ptr);\
+ lock(l);\
+ if (*ptr =3D=3D *expected) {\
+ *ptr =3D desired;\
+ unlock(l);\
+ return 1;\
+ }\
+ *expected =3D *ptr;\
+ unlock(l);\
+ return 0;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+//////////////////////////////////////////////////////////////////////////=
//////
+// Atomic read-modify-write operations for integers of various sizes.
+//////////////////////////////////////////////////////////////////////////=
//////
+#define ATOMIC_RMW(n, lockfree, type, opname, op) \
+type __atomic_fetch_##opname##_##n(type *ptr, type val, int model) {\
+ if (lockfree) \
+ return __c11_atomic_fetch_##opname((_Atomic(type)*)ptr, val, model);\
+ Lock *l =3D lock_for_pointer(ptr);\
+ lock(l);\
+ type tmp =3D *ptr;\
+ *ptr =3D tmp op val;\
+ unlock(l);\
+ return tmp;\
+}
+
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, ad=
d, +)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, su=
b, -)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, an=
d, &)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, or=
, |)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, xo=
r, ^)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/clzti2.c
--- a/head/contrib/compiler-rt/lib/clzti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/clzti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: the number of leading 0-bits */
=20
/* Precondition: a !=3D 0 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/cmpti2.c
--- a/head/contrib/compiler-rt/lib/cmpti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/cmpti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: if (a < b) returns 0
* if (a =3D=3D b) returns 1
* if (a > b) returns 2
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ctzti2.c
--- a/head/contrib/compiler-rt/lib/ctzti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ctzti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: the number of trailing 0-bits */
=20
/* Precondition: a !=3D 0 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divdf3.c
--- a/head/contrib/compiler-rt/lib/divdf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divdf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -19,7 +19,7 @@
#define DOUBLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(ddiv, divdf3);
+ARM_EABI_FNALIAS(ddiv, divdf3)
=20
fp_t __divdf3(fp_t a, fp_t b) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divmoddi4=
.c
--- a/head/contrib/compiler-rt/lib/divmoddi4.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/divmoddi4.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -16,8 +16,6 @@
=20
extern COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b);
=20
-ARM_EABI_FNALIAS(ldivmod, divmoddi4);
-
/* Returns: a / b, *rem =3D a % b */
=20
COMPILER_RT_ABI di_int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divsf3.c
--- a/head/contrib/compiler-rt/lib/divsf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divsf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -19,7 +19,7 @@
#define SINGLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fdiv, divsf3);
+ARM_EABI_FNALIAS(fdiv, divsf3)
=20
fp_t __divsf3(fp_t a, fp_t b) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divsi3.c
--- a/head/contrib/compiler-rt/lib/divsi3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divsi3.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
/* Returns: a / b */
=20
-ARM_EABI_FNALIAS(idiv, divsi3);
+ARM_EABI_FNALIAS(idiv, divsi3)
=20
COMPILER_RT_ABI si_int
__divsi3(si_int a, si_int b)
@@ -29,5 +29,11 @@
a =3D (a ^ s_a) - s_a; /* negate if s_a =3D=3D=
-1 */
b =3D (b ^ s_b) - s_b; /* negate if s_b =3D=3D=
-1 */
s_a ^=3D s_b; /* sign of quotient */
- return (__udivsi3(a, b) ^ s_a) - s_a; /* negate if s_a =3D=3D -=
1 */
+ /*
+ * On CPUs without unsigned hardware division support,
+ * this calls __udivsi3 (notice the cast to su_int).
+ * On CPUs with unsigned hardware division support,
+ * this uses the unsigned division instruction.
+ */
+ return ((su_int)a/(su_int)b ^ s_a) - s_a; /* negate if s_a =3D=3D -=
1 */
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divti3.c
--- a/head/contrib/compiler-rt/lib/divti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
/* Returns: a / b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/extendsfd=
f2.c
--- a/head/contrib/compiler-rt/lib/extendsfdf2.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/extendsfdf2.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -66,7 +66,7 @@
=20
// End helper routines. Conversion implementation follows.
=20
-ARM_EABI_FNALIAS(f2d, extendsfdf2);
+ARM_EABI_FNALIAS(f2d, extendsfdf2)
=20
dst_t __extendsfdf2(src_t a) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ffsti2.c
--- a/head/contrib/compiler-rt/lib/ffsti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ffsti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: the index of the least significant 1-bit in a, or
* the value zero if a is zero. The least significant bit is index one.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixdfdi.c
--- a/head/contrib/compiler-rt/lib/fixdfdi.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixdfdi.c Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
=20
/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2lz, fixdfdi);
+ARM_EABI_FNALIAS(d2lz, fixdfdi)
=20
di_int
__fixdfdi(double a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixdfsi.c
--- a/head/contrib/compiler-rt/lib/fixdfsi.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixdfsi.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(d2iz, fixdfsi);
+ARM_EABI_FNALIAS(d2iz, fixdfsi)
=20
int __fixdfsi(fp_t a) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixdfti.c
--- a/head/contrib/compiler-rt/lib/fixdfti.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixdfti.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a signed long long, rounding toward zero. */
=20
/* Assumption: double is a IEEE 64 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixsfdi.c
--- a/head/contrib/compiler-rt/lib/fixsfdi.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixsfdi.c Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
=20
/* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2lz, fixsfdi);
+ARM_EABI_FNALIAS(d2lz, fixsfdi)
=20
COMPILER_RT_ABI di_int
__fixsfdi(float a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixsfsi.c
--- a/head/contrib/compiler-rt/lib/fixsfsi.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixsfsi.c Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
#define SINGLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(f2iz, fixsfsi);
+ARM_EABI_FNALIAS(f2iz, fixsfsi)
=20
COMPILER_RT_ABI int
__fixsfsi(fp_t a) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixsfti.c
--- a/head/contrib/compiler-rt/lib/fixsfti.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixsfti.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a signed long long, rounding toward zero. */
=20
/* Assumption: float is a IEEE 32 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsdfd=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsdfdi.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsdfdi.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -26,7 +26,7 @@
=20
/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2ulz, fixunsdfdi);
+ARM_EABI_FNALIAS(d2ulz, fixunsdfdi)
=20
COMPILER_RT_ABI du_int
__fixunsdfdi(double a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsdfs=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsdfsi.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsdfsi.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -26,7 +26,7 @@
=20
/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2uiz, fixunsdfsi);
+ARM_EABI_FNALIAS(d2uiz, fixunsdfsi)
=20
COMPILER_RT_ABI su_int
__fixunsdfsi(double a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsdft=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsdfti.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsdfti.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a unsigned long long, rounding toward zero.
* Negative values all become zero.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunssfd=
i.c
--- a/head/contrib/compiler-rt/lib/fixunssfdi.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunssfdi.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -25,7 +25,7 @@
=20
/* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
=20
-ARM_EABI_FNALIAS(f2ulz, fixunssfdi);
+ARM_EABI_FNALIAS(f2ulz, fixunssfdi)
=20
COMPILER_RT_ABI du_int
__fixunssfdi(float a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunssfs=
i.c
--- a/head/contrib/compiler-rt/lib/fixunssfsi.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunssfsi.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -26,7 +26,7 @@
=20
/* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
=20
-ARM_EABI_FNALIAS(f2uiz, fixunssfsi);
+ARM_EABI_FNALIAS(f2uiz, fixunssfsi)
=20
COMPILER_RT_ABI su_int
__fixunssfsi(float a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunssft=
i.c
--- a/head/contrib/compiler-rt/lib/fixunssfti.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunssfti.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a unsigned long long, rounding toward zero.
* Negative values all become zero.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsxft=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsxfti.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsxfti.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a unsigned long long, rounding toward zero.
* Negative values all become zero.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixxfti.c
--- a/head/contrib/compiler-rt/lib/fixxfti.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixxfti.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a signed long long, rounding toward zero. */
=20
/* Assumption: long double is an intel 80 bit floating point type padded w=
ith 6 bytes
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatdidf=
.c
--- a/head/contrib/compiler-rt/lib/floatdidf.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatdidf.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,7 +22,7 @@
=20
/* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
mmmm mmmm */
=20
-ARM_EABI_FNALIAS(l2d, floatdidf);
+ARM_EABI_FNALIAS(l2d, floatdidf)
=20
#ifndef __SOFT_FP__
/* Support for systems that have hardware floating-point; we'll set the in=
exact flag
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatdisf=
.c
--- a/head/contrib/compiler-rt/lib/floatdisf.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatdisf.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,7 +22,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(l2f, floatdisf);
+ARM_EABI_FNALIAS(l2f, floatdisf)
=20
COMPILER_RT_ABI float
__floatdisf(di_int a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatsidf=
.c
--- a/head/contrib/compiler-rt/lib/floatsidf.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatsidf.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -18,7 +18,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(i2d, floatsidf);
+ARM_EABI_FNALIAS(i2d, floatsidf)
=20
fp_t __floatsidf(int a) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatsisf=
.c
--- a/head/contrib/compiler-rt/lib/floatsisf.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatsisf.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -18,7 +18,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(i2f, floatsisf);
+ARM_EABI_FNALIAS(i2f, floatsisf)
=20
fp_t __floatsisf(int a) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floattidf=
.c
--- a/head/contrib/compiler-rt/lib/floattidf.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floattidf.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/=20
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a double, rounding toward even.*/
=20
/* Assumption: double is a IEEE 64 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floattisf=
.c
--- a/head/contrib/compiler-rt/lib/floattisf.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floattisf.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a float, rounding toward even. */
=20
/* Assumption: float is a IEEE 32 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floattixf=
.c
--- a/head/contrib/compiler-rt/lib/floattixf.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floattixf.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a long double, rounding toward even. */
=20
/* Assumption: long double is a IEEE 80 bit floating point type padded to =
128 bits
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatundi=
df.c
--- a/head/contrib/compiler-rt/lib/floatundidf.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatundidf.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -22,7 +22,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ul2d, floatundidf);
+ARM_EABI_FNALIAS(ul2d, floatundidf)
=20
#ifndef __SOFT_FP__
/* Support for systems that have hardware floating-point; we'll set the in=
exact flag
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatundi=
sf.c
--- a/head/contrib/compiler-rt/lib/floatundisf.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatundisf.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -22,7 +22,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ul2f, floatundisf);
+ARM_EABI_FNALIAS(ul2f, floatundisf)
=20
COMPILER_RT_ABI float
__floatundisf(du_int a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunsi=
df.c
--- a/head/contrib/compiler-rt/lib/floatunsidf.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatunsidf.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -18,7 +18,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ui2d, floatunsidf);
+ARM_EABI_FNALIAS(ui2d, floatunsidf)
=20
fp_t __floatunsidf(unsigned int a) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunsi=
sf.c
--- a/head/contrib/compiler-rt/lib/floatunsisf.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatunsisf.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -18,7 +18,7 @@
=20
#include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ui2f, floatunsisf);
+ARM_EABI_FNALIAS(ui2f, floatunsisf)
=20
fp_t __floatunsisf(unsigned int a) {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunti=
df.c
--- a/head/contrib/compiler-rt/lib/floatuntidf.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatuntidf.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a double, rounding toward even. */
=20
/* Assumption: double is a IEEE 64 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunti=
sf.c
--- a/head/contrib/compiler-rt/lib/floatuntisf.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatuntisf.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a float, rounding toward even. */
=20
/* Assumption: float is a IEEE 32 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunti=
xf.c
--- a/head/contrib/compiler-rt/lib/floatuntixf.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatuntixf.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: convert a to a long double, rounding toward even. */
=20
/* Assumption: long double is a IEEE 80 bit floating point type padded to =
128 bits
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fp_lib.h
--- a/head/contrib/compiler-rt/lib/fp_lib.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fp_lib.h Fri Aug 10 14:19:25 2012 +0300
@@ -124,7 +124,7 @@
*lo =3D *lo << count;
}
=20
-static inline void wideRightShiftWithSticky(rep_t *hi, rep_t *lo, int coun=
t) {
+static inline void wideRightShiftWithSticky(rep_t *hi, rep_t *lo, unsigned=
int count) {
if (count < typeWidth) {
const bool sticky =3D *lo << (typeWidth - count);
*lo =3D *hi << (typeWidth - count) | *lo >> count | sticky;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/int_endia=
nness.h
--- a/head/contrib/compiler-rt/lib/int_endianness.h Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/contrib/compiler-rt/lib/int_endianness.h Fri Aug 10 14:19:25 201=
2 +0300
@@ -31,7 +31,7 @@
=20
/* .. */
=20
-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ||=
defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ||=
defined(__DragonFly__) || defined(__minix)
#include <sys/endian.h>
=20
#if _BYTE_ORDER =3D=3D _BIG_ENDIAN
@@ -80,6 +80,13 @@
=20
#endif /* GNU/Linux */
=20
+#if defined(_WIN32)
+
+#define _YUGA_LITTLE_ENDIAN 1
+#define _YUGA_BIG_ENDIAN 0
+
+#endif /* Windows */
+
/* . */
=20
#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/int_util.c
--- a/head/contrib/compiler-rt/lib/int_util.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/int_util.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,6 +29,19 @@
panic("%s:%d: abort in %s", file, line, function);
}
=20
+#elif __APPLE__ && !__STATIC__
+
+/* from libSystem.dylib */
+extern void __assert_rtn(const char *func, const char *file,=20
+ int line, const char * message) __attribute__((noretu=
rn));
+
+__attribute__((weak))
+__attribute__((visibility("hidden")))
+void compilerrt_abort_impl(const char *file, int line, const char *functio=
n) {
+ __assert_rtn(function, file, line, "libcompiler_rt abort");
+}
+
+
#else
=20
/* Get the system definition of abort() */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/int_util.h
--- a/head/contrib/compiler-rt/lib/int_util.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/int_util.h Fri Aug 10 14:19:25 2012 +0300
@@ -22,11 +22,8 @@
/** \brief Trigger a program abort (or panic for kernel code). */
#define compilerrt_abort() compilerrt_abort_impl(__FILE__, __LINE__, \
__FUNCTION__)
+
void compilerrt_abort_impl(const char *file, int line,
- const char *function)
-#ifndef KERNEL_USE
- __attribute__((weak))
-#endif
- __attribute__((noreturn)) __attribute__((visibility("hidden")));
+ const char *function) __attribute__((noreturn));
=20
#endif /* INT_UTIL_H */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/lshrdi3.c
--- a/head/contrib/compiler-rt/lib/lshrdi3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/lshrdi3.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
/* Precondition: 0 <=3D b < bits_in_dword */
=20
-ARM_EABI_FNALIAS(llsr, lshrdi3);
+ARM_EABI_FNALIAS(llsr, lshrdi3)
=20
COMPILER_RT_ABI di_int
__lshrdi3(di_int a, si_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/lshrti3.c
--- a/head/contrib/compiler-rt/lib/lshrti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/lshrti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: logical a >> b */
=20
/* Precondition: 0 <=3D b < bits_in_tword */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/modti3.c
--- a/head/contrib/compiler-rt/lib/modti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/modti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
/*Returns: a % b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/muldf3.c
--- a/head/contrib/compiler-rt/lib/muldf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/muldf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
#define DOUBLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(dmul, muldf3);
+ARM_EABI_FNALIAS(dmul, muldf3)
=20
COMPILER_RT_ABI fp_t
__muldf3(fp_t a, fp_t b) {
@@ -96,7 +96,7 @@
// a zero of the appropriate sign. Mathematically there is no nee=
d to
// handle this case separately, but we make it a special case to
// simplify the shift logic.
- const int shift =3D 1 - productExponent;
+ const unsigned int shift =3D 1U - (unsigned int)productExponent;
if (shift >=3D typeWidth) return fromRep(productSign);
=20
// Otherwise, shift the significand of the result so that the round
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/muldi3.c
--- a/head/contrib/compiler-rt/lib/muldi3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/muldi3.c Fri Aug 10 14:19:25 2012 +0300
@@ -40,7 +40,7 @@
=20
/* Returns: a * b */
=20
-ARM_EABI_FNALIAS(lmul, muldi3);
+ARM_EABI_FNALIAS(lmul, muldi3)
=20
COMPILER_RT_ABI di_int
__muldi3(di_int a, di_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/muloti4.c
--- a/head/contrib/compiler-rt/lib/muloti4.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/muloti4.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: a * b */
=20
/* Effects: sets *overflow to 1 if a * b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/mulsf3.c
--- a/head/contrib/compiler-rt/lib/mulsf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/mulsf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
#define SINGLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fmul, mulsf3);
+ARM_EABI_FNALIAS(fmul, mulsf3)
=20
COMPILER_RT_ABI fp_t
__mulsf3(fp_t a, fp_t b) {
@@ -92,7 +92,7 @@
if (productExponent <=3D 0) {
// Result is denormal before rounding, the exponent is zero and we
// need to shift the significand.
- wideRightShiftWithSticky(&productHi, &productLo, 1 - productExpone=
nt);
+ wideRightShiftWithSticky(&productHi, &productLo, 1U - (unsigned)pr=
oductExponent);
}
=20
else {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/multi3.c
--- a/head/contrib/compiler-rt/lib/multi3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/multi3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: a * b */
=20
static
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/mulvti3.c
--- a/head/contrib/compiler-rt/lib/mulvti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/mulvti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: a * b */
=20
/* Effects: aborts if a * b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negdf2.c
--- a/head/contrib/compiler-rt/lib/negdf2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negdf2.c Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
#define DOUBLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(dneg, negdf2);
+ARM_EABI_FNALIAS(dneg, negdf2)
=20
fp_t __negdf2(fp_t a) {
return fromRep(toRep(a) ^ signBit);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negsf2.c
--- a/head/contrib/compiler-rt/lib/negsf2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negsf2.c Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
#define SINGLE_PRECISION
#include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fneg, negsf2);
+ARM_EABI_FNALIAS(fneg, negsf2)
=20
COMPILER_RT_ABI fp_t
__negsf2(fp_t a) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negti2.c
--- a/head/contrib/compiler-rt/lib/negti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: -a */
=20
ti_int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negvti2.c
--- a/head/contrib/compiler-rt/lib/negvti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negvti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
*=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: -a */
=20
/* Effects: aborts if -a overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/parityti2=
.c
--- a/head/contrib/compiler-rt/lib/parityti2.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/parityti2.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/=20
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: 1 if number of bits is odd else returns 0 */
=20
si_int __paritydi2(di_int a);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/popcountt=
i2.c
--- a/head/contrib/compiler-rt/lib/popcountti2.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/popcountti2.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: count of 1 bits */
=20
si_int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/powitf2.c
--- a/head/contrib/compiler-rt/lib/powitf2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/powitf2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if _ARCH_PPC
=20
-#include "int_lib.h"
-
/* Returns: a ^ b */
=20
long double
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/subdf3.c
--- a/head/contrib/compiler-rt/lib/subdf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/subdf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
fp_t COMPILER_RT_ABI __adddf3(fp_t a, fp_t b);
=20
=20
-ARM_EABI_FNALIAS(dsub, subdf3);
+ARM_EABI_FNALIAS(dsub, subdf3)
=20
// Subtraction; flip the sign bit of b and add.
COMPILER_RT_ABI fp_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/subsf3.c
--- a/head/contrib/compiler-rt/lib/subsf3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/subsf3.c Fri Aug 10 14:19:25 2012 +0300
@@ -17,7 +17,7 @@
=20
fp_t COMPILER_RT_ABI __addsf3(fp_t a, fp_t b);
=20
-ARM_EABI_FNALIAS(fsub, subsf3);
+ARM_EABI_FNALIAS(fsub, subsf3)
=20
// Subtraction; flip the sign bit of b and add.
COMPILER_RT_ABI fp_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/subvti3.c
--- a/head/contrib/compiler-rt/lib/subvti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/subvti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: a - b */
=20
/* Effects: aborts if a - b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/truncdfsf=
2.c
--- a/head/contrib/compiler-rt/lib/truncdfsf2.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/truncdfsf2.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -64,7 +64,7 @@
=20
// End helper routines. Conversion implementation follows.
=20
-ARM_EABI_FNALIAS(d2f, truncdfsf2);
+ARM_EABI_FNALIAS(d2f, truncdfsf2)
=20
COMPILER_RT_ABI dst_t
__truncdfsf2(src_t a) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ucmpti2.c
--- a/head/contrib/compiler-rt/lib/ucmpti2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ucmpti2.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Returns: if (a < b) returns 0
* if (a =3D=3D b) returns 1
* if (a > b) returns 2
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivmoddi=
4.c
--- a/head/contrib/compiler-rt/lib/udivmoddi4.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/udivmoddi4.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -20,8 +20,6 @@
=20
/* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
=20
-ARM_EABI_FNALIAS(uldivmod, udivmoddi4);
-
COMPILER_RT_ABI du_int
__udivmoddi4(du_int a, du_int b, du_int* rem)
{
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivmodti=
4.c
--- a/head/contrib/compiler-rt/lib/udivmodti4.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/udivmodti4.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/=20
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
/* Effects: if rem !=3D 0, *rem =3D a % b=20
* Returns: a / b=20
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivsi3.c
--- a/head/contrib/compiler-rt/lib/udivsi3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/udivsi3.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,8 +18,9 @@
=20
/* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
=20
-ARM_EABI_FNALIAS(uidiv, udivsi3);
+ARM_EABI_FNALIAS(uidiv, udivsi3)
=20
+/* This function should not call __divsi3! */
COMPILER_RT_ABI su_int
__udivsi3(su_int n, su_int d)
{
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivti3.c
--- a/head/contrib/compiler-rt/lib/udivti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/udivti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
/* Returns: a / b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/umodti3.c
--- a/head/contrib/compiler-rt/lib/umodti3.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/umodti3.c Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
* =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
*/
=20
+#include "int_lib.h"
+
#if __x86_64
=20
-#include "int_lib.h"
-
tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
/* Returns: a % b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/doc-common
--- a/head/contrib/groff/tmac/doc-common Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/doc-common Fri Aug 10 14:19:25 2012 +0300
@@ -574,10 +574,7 @@
.ds doc-operating-system-FreeBSD-8.0 8.0
.ds doc-operating-system-FreeBSD-8.1 8.1
.ds doc-operating-system-FreeBSD-8.2 8.2
-.ds doc-operating-system-FreeBSD-8.3 8.3
.ds doc-operating-system-FreeBSD-9.0 9.0
-.ds doc-operating-system-FreeBSD-9.1 9.1
-.ds doc-operating-system-FreeBSD-10.0 10.0
.
.ds doc-operating-system-Darwin-8.0.0 8.0.0
.ds doc-operating-system-Darwin-8.1.0 8.1.0
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/doc-syms
--- a/head/contrib/groff/tmac/doc-syms Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/doc-syms Fri Aug 10 14:19:25 2012 +0300
@@ -661,7 +661,7 @@
.as doc-str-St--susv3 " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-st=
r-St]\*[Rq])
.ds doc-str-St--svid4 System\~V Interface Definition, Fourth Edit=
ion
.as doc-str-St--svid4 " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str=
-St]\^4\*[Rq])
-.ds doc-str-St--xbd5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Sy=
stem Interface Definitions Issue\~5
+.ds doc-str-St--xbd5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Ba=
se Definitions Issue\~5
.as doc-str-St--xbd5 " (\*[Lq]\*[doc-Tn-font-size]XBD\*[doc-str-=
St]\^5\*[Rq])
.ds doc-str-St--xcu5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] Co=
mmands and Utilities Issue\~5
.as doc-str-St--xcu5 " (\*[Lq]\*[doc-Tn-font-size]XCU\*[doc-str-=
St]\^5\*[Rq])
@@ -814,7 +814,6 @@
.ds doc-str-Lb-librt \*[Px] \*[doc-str-Lb]Real-time Library (librt, =
\-lrt)
.ds doc-str-Lb-libsdp Bluetooth Service Discovery Protocol User Libra=
ry (libsdp, \-lsdp)
.ds doc-str-Lb-libssp Buffer Overflow Protection Library (libssp, \-l=
ssp)
-.ds doc-str-Lb-libstdthreads C11 Threads Library (libstdthreads, \-lstdthr=
eads)
.ds doc-str-Lb-libSystem System Library (libSystem, \-lSystem)
.ds doc-str-Lb-libtermcap Termcap Access Library (libtermcap, \-ltermcap)
.ds doc-str-Lb-libterminfo Terminal Information Library (libterminfo, \-lt=
erminfo)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/doc.tmac
--- a/head/contrib/groff/tmac/doc.tmac Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/doc.tmac Fri Aug 10 14:19:25 2012 +0300
@@ -438,7 +438,7 @@
. \" last argument
. if (\n[doc-reg-dfr1] =3D=3D 4) \
. nop \|\-\c
-. nop \f[]\s[0]\c
+. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
. doc-print-and-reset
. \}
. el \{\
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/groff_mdoc.man
--- a/head/contrib/groff/tmac/groff_mdoc.man Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/groff_mdoc.man Fri Aug 10 14:19:25 2012 +0300
@@ -1797,8 +1797,6 @@
.Lb libsdp
.It Li libssp
.Lb libssp
-.It Li libstdthreads
-.Lb libstdthreads
.It Li libSystem
.Lb libSystem
.It Li libtermcap
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/FREEBSD-Xlist
--- a/head/contrib/libarchive/FREEBSD-Xlist Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/FREEBSD-Xlist Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,6 @@
-$FreeBSD: head/contrib/libarchive/FREEBSD-Xlist 232153 2012-02-25 10:58:02=
Z mm $
+.git
+.gitattributes
+.gitignore
CMakeLists.txt
CTestConfig.cmake
INSTALL
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/FREEBSD-upgrade
--- a/head/contrib/libarchive/FREEBSD-upgrade Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/FREEBSD-upgrade Fri Aug 10 14:19:25 2012 +0300
@@ -1,10 +1,10 @@
-$FreeBSD: head/contrib/libarchive/FREEBSD-upgrade 228835 2011-12-23 08:50:=
26Z mm $
+$FreeBSD: head/contrib/libarchive/FREEBSD-upgrade 238827 2012-07-27 08:28:=
44Z mm $
=20
libarchive
=20
-The source code is pulled with svn:
+The source code is pulled with git:
=20
- svn checkout http://libarchive.googlecode.com/svn/release/2.8
+ git clone -b release git://github.com/libarchive/libarchive.git
=20
For the contrib directory files and directories were pruned by:
=09
@@ -21,4 +21,4 @@
branch (aka HEAD). Never make local changes on the vendor branch.
=20
mm at FreeBSD.org
-21-December-2011
+27-July-2012
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/NEWS
--- a/head/contrib/libarchive/NEWS Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/NEWS Fri Aug 10 14:19:25 2012 +0300
@@ -1,14 +1,10 @@
-Jan 10, 2012: Issue 223: Skip atime tests if atime not supported
-Jan 09, 2012: Issue 222: Errors saving sparse files to pax archives
-Jan 09, 2012: Issue 221: allow archive_*_free(NULL)
-Dec 31, 2011: Issue 212: configure script on Solaris
-Dec 30, 2011: Issue 218: empty contents extracting Zip files with bsdcpio
-Dec 30, 2011: Issue 217: fix compile warning
-Dec 30, 2011: Issue 216: truncated filenames in listings
-Dec 28, 2011: Issue 210: memory leak on Windows
-Dec 28, 2011: Issue 206: fix hardlink tests on Windows 2000
-Dec 27, 2011: Issue 208: Don't hang when using external compression
- program on Windows
+Mar 27, 2012: libarchive 3.0.4 released
+
+Feb 05, 2012: libarchive development now hosted at GitHub.
+ http://libarchive.github.com/
+Feb 05, 2012: libarchive's issue tracker remains at Google Code.
+ http://code.google.com/p/libarchive/issues/list
+Feb 05, 2012: libarchive's mailing lists remain at Google Groups.
=20
Dec 24, 2011: libarchive 3.0.2 released
Dec 23, 2011: Various fixes merged from FreeBSD
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/README
--- a/head/contrib/libarchive/README Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/README Fri Aug 10 14:19:25 2012 +0300
@@ -1,9 +1,14 @@
README for libarchive bundle.
=20
Questions? Issues?
- * http://libarchive.googlecode.com/ is the home for ongoing
- libarchive development, including issue tracker, additional
- documentation, and links to the libarchive mailing lists.
+ * http://libarchive.github.com/ is the home for ongoing
+ libarchive development, including documentation, and
+ links to the libarchive mailing lists.
+ * To report an issue, use the issue tracker at
+ http://code.google.com/p/libarchive/issues/list
+ * To submit an enhancement to libarchive, please submit
+ a pull request via GitHub.
+ https://github.com/libarchive/libarchive/pulls
=20
This distribution bundle includes the following components:
* libarchive: a library for reading and writing streaming archives
@@ -66,6 +71,7 @@
* ZIP archives (with uncompressed or "deflate" compressed entries)
* GNU and BSD 'ar' archives
* 'mtree' format
+ * 7-Zip archives
* Microsoft CAB format
* LHA and LZH archives
* RAR archives
@@ -92,6 +98,7 @@
* GNU and BSD 'ar' archives
* 'mtree' format
* ISO9660 format
+ * 7-Zip archives
* XAR archives
=20
When creating archives, the result can be filtered with any of the followi=
ng:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/bsdcpio.1
--- a/head/contrib/libarchive/cpio/bsdcpio.1 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/bsdcpio.1 Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/cpio/bsdcpio.1 232153 2012-02-25 10:=
58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/cpio/bsdcpio.1 238856 2012-07-28 06:=
38:44Z mm $
.\"
-.Dd December 21, 2007
+.Dd December 24, 2011
.Dt CPIO 1
.Os
.Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/cmdline.c
--- a/head/contrib/libarchive/cpio/cmdline.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/cmdline.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
=20
=20
#include "cpio_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cmdline.c 232153 2012-02-=
25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cmdline.c 238856 2012-07-=
28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -346,6 +346,7 @@
snprintf(errbuff, sizeof(errbuff),
"Couldn't lookup user ``%s''", user);
errbuff[sizeof(errbuff) - 1] =3D '\0';
+ free(user);
return (errbuff);
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/cpio.c
--- a/head/contrib/libarchive/cpio/cpio.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/cpio.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
=20
=20
#include "cpio_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cpio.c 232153 2012-02-25 =
10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cpio.c 238856 2012-07-28 =
06:38:44Z mm $");
=20
#include <sys/types.h>
#include <archive.h>
@@ -82,7 +82,6 @@
#include "cpio.h"
#include "err.h"
#include "line_reader.h"
-#include "matching.h"
=20
/* Fixed size of uname/gname caches. */
#define name_cache_size 101
@@ -190,6 +189,10 @@
cpio->bytes_per_block =3D 512;
cpio->filename =3D NULL;
=20
+ cpio->matching =3D archive_match_new();
+ if (cpio->matching =3D=3D NULL)
+ lafe_errc(1, 0, "Out of memory");
+
while ((opt =3D cpio_getopt(cpio)) !=3D -1) {
switch (opt) {
case '0': /* GNU convention: --null, -0 */
@@ -216,14 +219,20 @@
cpio->extract_flags &=3D ~ARCHIVE_EXTRACT_NO_AUTODIR;
break;
case 'E': /* NetBSD/OpenBSD */
- lafe_include_from_file(&cpio->matching,
- cpio->argument, cpio->option_null);
+ if (archive_match_include_pattern_from_file(
+ cpio->matching, cpio->argument,
+ cpio->option_null) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(cpio->matching));
break;
case 'F': /* NetBSD/OpenBSD/GNU cpio */
cpio->filename =3D cpio->argument;
break;
case 'f': /* POSIX 1997 */
- lafe_exclude(&cpio->matching, cpio->argument);
+ if (archive_match_exclude_pattern(cpio->matching,
+ cpio->argument) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(cpio->matching));
break;
case 'H': /* GNU cpio (also --format) */
cpio->format =3D cpio->argument;
@@ -369,9 +378,6 @@
/* -v overrides -V */
if (cpio->dot && cpio->verbose)
cpio->dot =3D 0;
- /* -v overrides -V */
- if (cpio->dot && cpio->verbose)
- cpio->dot =3D 0;
/* TODO: Flag other nonsensical combinations. */
=20
switch (cpio->mode) {
@@ -385,7 +391,10 @@
break;
case 'i':
while (*cpio->argv !=3D NULL) {
- lafe_include(&cpio->matching, *cpio->argv);
+ if (archive_match_include_pattern(cpio->matching,
+ *cpio->argv) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(cpio->matching));
--cpio->argc;
++cpio->argv;
}
@@ -405,6 +414,7 @@
"Must specify at least one of -i, -o, or -p");
}
=20
+ archive_match_free(cpio->matching);
free_cache(cpio->gname_cache);
free_cache(cpio->uname_cache);
return (cpio->return_value);
@@ -909,7 +919,7 @@
lafe_errc(1, archive_errno(a),
"%s", archive_error_string(a));
}
- if (lafe_excluded(cpio->matching, archive_entry_pathname(entry)))
+ if (archive_match_path_excluded(cpio->matching, entry))
continue;
if (cpio->option_rename) {
destpath =3D cpio_rename(archive_entry_pathname(entry));
@@ -1011,7 +1021,7 @@
lafe_errc(1, archive_errno(a),
"%s", archive_error_string(a));
}
- if (lafe_excluded(cpio->matching, archive_entry_pathname(entry)))
+ if (archive_match_path_excluded(cpio->matching, entry))
continue;
if (cpio->verbose)
list_item_verbose(cpio, entry);
@@ -1306,7 +1316,8 @@
if (pwent =3D=3D NULL) {
*name =3D NULL;
if (errno !=3D 0 && errno !=3D ENOENT)
- lafe_warnc(errno, "getpwuid(%d) failed", id);
+ lafe_warnc(errno, "getpwuid(%s) failed",
+ cpio_i64toa((int64_t)id));
return (errno);
}
=20
@@ -1333,7 +1344,8 @@
if (grent =3D=3D NULL) {
*name =3D NULL;
if (errno !=3D 0)
- lafe_warnc(errno, "getgrgid(%d) failed", id);
+ lafe_warnc(errno, "getgrgid(%s) failed",
+ cpio_i64toa((int64_t)id));
return (errno);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/cpio.h
--- a/head/contrib/libarchive/cpio/cpio.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/cpio.h Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/cpio/cpio.h 232153 2012-02-25 10:58:0=
2Z mm $
+ * $FreeBSD: head/contrib/libarchive/cpio/cpio.h 238856 2012-07-28 06:38:4=
4Z mm $
*/
=20
#ifndef CPIO_H_INCLUDED
@@ -31,8 +31,6 @@
#include "cpio_platform.h"
#include <stdio.h>
=20
-#include "matching.h"
-
/*
* The internal state for the "cpio" program.
*
@@ -88,7 +86,7 @@
struct name_cache *gname_cache;
=20
/* Work data. */
- struct lafe_matching *matching;
+ struct archive *matching;
char *buff;
size_t buff_size;
};
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/test/main=
.c
--- a/head/contrib/libarchive/cpio/test/main.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/libarchive/cpio/test/main.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -24,6 +24,9 @@
*/
=20
#include "test.h"
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
@@ -31,6 +34,16 @@
#ifdef HAVE_ICONV_H
#include <iconv.h>
#endif
+/*
+ * Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
+ * As the include guards don't agree, the order of include is important.
+ */
+#ifdef HAVE_LINUX_EXT2_FS_H
+#include <linux/ext2_fs.h> /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h> /* Linux file flags, broken on Cygwin */
+#endif
#include <limits.h>
#include <locale.h>
#ifdef HAVE_SIGNAL_H
@@ -46,7 +59,7 @@
* TODO: Move this into a separate configuration header, have all test
* suites share one copy of this file.
*/
-__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/test/main.c 232153 2012-0=
2-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/test/main.c 238856 2012-0=
7-28 06:38:44Z mm $");
#define KNOWNREF "test_option_f.cpio.uu"
#define ENVBASE "BSDCPIO" /* Prefix for environment variables. */
#define PROGRAM "bsdcpio" /* Name of program being tested. */
@@ -116,7 +129,14 @@
#endif
=20
#if defined(_WIN32) && !defined(__CYGWIN__)
-void *GetFunctionKernel32(const char *name)
+static void *GetFunctionKernel32(const char *);
+static int my_CreateSymbolicLinkA(const char *, const char *, int);
+static int my_CreateHardLinkA(const char *, const char *);
+static int my_GetFileInformationByName(const char *,
+ BY_HANDLE_FILE_INFORMATION *);
+
+static void *
+GetFunctionKernel32(const char *name)
{
static HINSTANCE lib;
static int set;
@@ -155,7 +175,7 @@
return f =3D=3D NULL ? 0 : (*f)(linkname, target, NULL);
}
=20
-int
+static int
my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *=
bhfi)
{
HANDLE h;
@@ -1507,7 +1527,7 @@
/* Create a file with the specified contents and report any failures. */
int
assertion_make_file(const char *file, int line,
- const char *path, int mode, const char *contents)
+ const char *path, int mode, int csize, const void *contents)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
/* TODO: Rework this to set file mode as well. */
@@ -1521,8 +1541,13 @@
return (0);
}
if (contents !=3D NULL) {
- if (strlen(contents)
- !=3D fwrite(contents, 1, strlen(contents), f)) {
+ size_t wsize;
+
+ if (csize < 0)
+ wsize =3D strlen(contents);
+ else
+ wsize =3D (size_t)csize;
+ if (wsize !=3D fwrite(contents, 1, wsize, f)) {
fclose(f);
failure_start(file, line,
"Could not write file %s", path);
@@ -1542,10 +1567,16 @@
return (0);
}
if (contents !=3D NULL) {
- if ((ssize_t)strlen(contents)
- !=3D write(fd, contents, strlen(contents))) {
+ ssize_t wsize;
+
+ if (csize < 0)
+ wsize =3D (ssize_t)strlen(contents);
+ else
+ wsize =3D (ssize_t)csize;
+ if (wsize !=3D write(fd, contents, wsize)) {
close(fd);
- failure_start(file, line, "Could not write to %s", path);
+ failure_start(file, line,
+ "Could not write to %s", path);
failure_finish(NULL);
return (0);
}
@@ -1716,6 +1747,52 @@
#endif /* defined(_WIN32) && !defined(__CYGWIN__) */
}
=20
+/* Set nodump, report failures. */
+int
+assertion_nodump(const char *file, int line, const char *pathname)
+{
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+ int r;
+
+ assertion_count(file, line);
+ r =3D chflags(pathname, UF_NODUMP);
+ if (r < 0) {
+ failure_start(file, line, "Can't set nodump %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+ && defined(EXT2_NODUMP_FL)
+ int fd, r, flags;
+
+ assertion_count(file, line);
+ fd =3D open(pathname, O_RDONLY | O_NONBLOCK);
+ if (fd < 0) {
+ failure_start(file, line, "Can't open %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0) {
+ failure_start(file, line, "Can't get flags %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ flags |=3D EXT2_NODUMP_FL;
+ r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+ if (r < 0) {
+ failure_start(file, line, "Can't set nodump %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ close(fd);
+#else
+ (void)pathname; /* UNUSED */
+ assertion_count(file, line);
+#endif
+ return (1);
+}
+
/*
*
* UTILITIES for use by tests.
@@ -1744,7 +1821,7 @@
return (value);
=20
++tested;
- assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, "a");
+ assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, 1, "a");
/* Note: Cygwin has its own symlink() emulation that does not
* use the Win32 CreateSymbolicLink() function. */
#if defined(_WIN32) && !defined(__CYGWIN__)
@@ -1794,6 +1871,70 @@
}
=20
/*
+ * Can this filesystem handle nodump flags.
+ */
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+
+int
+canNodump(void)
+{
+ const char *path =3D "cannodumptest";
+ struct stat sb;
+
+ assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+ if (chflags(path, UF_NODUMP) < 0)
+ return (0);
+ if (stat(path, &sb) < 0)
+ return (0);
+ if (sb.st_flags & UF_NODUMP)
+ return (1);
+ return (0);
+}
+
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+ && defined(EXT2_NODUMP_FL)
+
+int
+canNodump(void)
+{
+ const char *path =3D "cannodumptest";
+ int fd, r, flags;
+
+ assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+ fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ return (0);
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ flags |=3D EXT2_NODUMP_FL;
+ r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ close(fd);
+ fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ return (0);
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ close(fd);
+ if (flags & EXT2_NODUMP_FL)
+ return (1);
+ return (0);
+}
+
+#else
+
+int
+canNodump()
+{
+ return (0);
+}
+
+#endif
+
+/*
* Sleep as needed; useful for verifying disk timestamp changes by
* ensuring that the wall-clock time has actually changed before we
* go back to re-read something from disk.
@@ -2236,17 +2377,77 @@
return strdup(buff);
}
=20
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+ int start, end;
+ int idx =3D 0;
+
+ if (test =3D=3D NULL) {
+ /* Default: Run all tests. */
+ for (;idx < limit; idx++)
+ test_set[idx] =3D idx;
+ return (limit);
+ }
+ if (*test >=3D '0' && *test <=3D '9') {
+ const char *vp =3D test;
+ start =3D 0;
+ while (*vp >=3D '0' && *vp <=3D '9') {
+ start *=3D 10;
+ start +=3D *vp - '0';
+ ++vp;
+ }
+ if (*vp =3D=3D '\0') {
+ end =3D start;
+ } else if (*vp =3D=3D '-') {
+ ++vp;
+ if (*vp =3D=3D '\0') {
+ end =3D limit - 1;
+ } else {
+ end =3D 0;
+ while (*vp >=3D '0' && *vp <=3D '9') {
+ end *=3D 10;
+ end +=3D *vp - '0';
+ ++vp;
+ }
+ }
+ } else
+ return (-1);
+ if (start < 0 || end >=3D limit || start > end)
+ return (-1);
+ while (start <=3D end)
+ test_set[idx++] =3D start++;
+ } else {
+ size_t len =3D strlen(test);
+ for (start =3D 0; start < limit; ++start) {
+ const char *name =3D tests[start].name;
+ const char *p;
+
+ while ((p =3D strchr(name, test[0])) !=3D NULL) {
+ if (strncmp(p, test, len) =3D=3D 0) {
+ test_set[idx++] =3D start;
+ break;
+ } else
+ name =3D p + 1;
+ }
+
+ }
+ }
+ return ((idx =3D=3D 0)?-1:idx);
+}
+
int
main(int argc, char **argv)
{
static const int limit =3D sizeof(tests) / sizeof(tests[0]);
- int i =3D 0, j =3D 0, start, end, tests_run =3D 0, tests_failed =3D 0, op=
tion;
+ int test_set[sizeof(tests) / sizeof(tests[0])];
+ int i =3D 0, j =3D 0, tests_run =3D 0, tests_failed =3D 0, option;
time_t now;
char *refdir_alloc =3D NULL;
const char *progname;
char **saved_argv;
const char *tmp, *option_arg, *p;
- char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL;
+ char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL, *vlevel =3D NULL;
char tmpdir_timestamp[256];
=20
(void)argc; /* UNUSED */
@@ -2332,6 +2533,19 @@
if (getenv(ENVBASE "_DEBUG") !=3D NULL)
dump_on_failure =3D 1;
=20
+ /* Allow -v to be controlled through the environment. */
+ if (getenv("_VERBOSITY_LEVEL") !=3D NULL)
+ {
+ vlevel =3D getenv("_VERBOSITY_LEVEL");
+ verbosity =3D atoi(vlevel);
+ if (verbosity < VERBOSITY_SUMMARY_ONLY || verbosity > VERBOSITY_FULL)
+ {
+ /* Unsupported verbosity levels are silently ignored */
+ vlevel =3D NULL;
+ verbosity =3D VERBOSITY_PASSFAIL;
+ }
+ }
+
/* Get the directory holding test files from environment. */
refdir =3D getenv(ENVBASE "_TEST_FILES");
=20
@@ -2379,7 +2593,8 @@
#endif
break;
case 'q':
- verbosity--;
+ if (!vlevel)
+ verbosity--;
break;
case 'r':
refdir =3D option_arg;
@@ -2388,7 +2603,8 @@
until_failure++;
break;
case 'v':
- verbosity++;
+ if (!vlevel)
+ verbosity++;
break;
default:
fprintf(stderr, "Unrecognized option '%c'\n",
@@ -2501,78 +2717,27 @@
saved_argv =3D argv;
do {
argv =3D saved_argv;
- if (*argv =3D=3D NULL) {
- /* Default: Run all tests. */
- for (i =3D 0; i < limit; i++) {
+ do {
+ int test_num;
+
+ test_num =3D get_test_set(test_set, limit, *argv);
+ if (test_num < 0) {
+ printf("*** INVALID Test %s\n", *argv);
+ free(refdir_alloc);
+ usage(progname);
+ return (1);
+ }
+ for (i =3D 0; i < test_num; i++) {
tests_run++;
- if (test_run(i, tmpdir)) {
+ if (test_run(test_set[i], tmpdir)) {
tests_failed++;
if (until_failure)
goto finish;
}
}
- } else {
- while (*(argv) !=3D NULL) {
- if (**argv >=3D '0' && **argv <=3D '9') {
- char *vp =3D *argv;
- start =3D 0;
- while (*vp >=3D '0' && *vp <=3D '9') {
- start *=3D 10;
- start +=3D *vp - '0';
- ++vp;
- }
- if (*vp =3D=3D '\0') {
- end =3D start;
- } else if (*vp =3D=3D '-') {
- ++vp;
- if (*vp =3D=3D '\0') {
- end =3D limit - 1;
- } else {
- end =3D 0;
- while (*vp >=3D '0' && *vp <=3D '9') {
- end *=3D 10;
- end +=3D *vp - '0';
- ++vp;
- }
- }
- } else {
- printf("*** INVALID Test %s\n", *argv);
- free(refdir_alloc);
- usage(progname);
- return (1);
- }
- if (start < 0 || end >=3D limit || start > end) {
- printf("*** INVALID Test %s\n", *argv);
- free(refdir_alloc);
- usage(progname);
- return (1);
- }
- } else {
- for (start =3D 0; start < limit; ++start) {
- if (strcmp(*argv, tests[start].name) =3D=3D 0)
- break;
- }
- end =3D start;
- if (start >=3D limit) {
- printf("*** INVALID Test ``%s''\n",
- *argv);
- free(refdir_alloc);
- usage(progname);
- /* usage() never returns */
- }
- }
- while (start <=3D end) {
- tests_run++;
- if (test_run(start, tmpdir)) {
- tests_failed++;
- if (until_failure)
- goto finish;
- }
- ++start;
- }
+ if (*argv !=3D NULL)
argv++;
- }
- }
+ } while (*argv !=3D NULL);
} while (until_failure);
=20
finish:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/test/test=
.h
--- a/head/contrib/libarchive/cpio/test/test.h Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/libarchive/cpio/test/test.h Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/cpio/test/test.h 232153 2012-02-25 10=
:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/cpio/test/test.h 238856 2012-07-28 06=
:38:44Z mm $
*/
=20
/* Every test program should #include "test.h" as the first thing. */
@@ -194,11 +194,15 @@
#define assertMakeDir(dirname, mode) \
assertion_make_dir(__FILE__, __LINE__, dirname, mode)
#define assertMakeFile(path, mode, contents) \
- assertion_make_file(__FILE__, __LINE__, path, mode, contents)
+ assertion_make_file(__FILE__, __LINE__, path, mode, -1, contents)
+#define assertMakeBinFile(path, mode, csize, contents) \
+ assertion_make_file(__FILE__, __LINE__, path, mode, csize, contents)
#define assertMakeHardlink(newfile, oldfile) \
assertion_make_hardlink(__FILE__, __LINE__, newfile, oldfile)
#define assertMakeSymlink(newfile, linkto) \
assertion_make_symlink(__FILE__, __LINE__, newfile, linkto)
+#define assertNodump(path) \
+ assertion_nodump(__FILE__, __LINE__, path)
#define assertUmask(mask) \
assertion_umask(__FILE__, __LINE__, mask)
#define assertUtimes(pathname, atime, atime_nsec, mtime, mtime_nsec) \
@@ -241,9 +245,10 @@
int assertion_is_reg(const char *, int, const char *, int);
int assertion_is_symlink(const char *, int, const char *, const char *);
int assertion_make_dir(const char *, int, const char *, int);
-int assertion_make_file(const char *, int, const char *, int, const char *=
);
+int assertion_make_file(const char *, int, const char *, int, int, const v=
oid *);
int assertion_make_hardlink(const char *, int, const char *newpath, const =
char *);
int assertion_make_symlink(const char *, int, const char *newpath, const c=
har *);
+int assertion_nodump(const char *, int, const char *);
int assertion_non_empty_file(const char *, int, const char *);
int assertion_text_file_contents(const char *, int, const char *buff, cons=
t char *f);
int assertion_umask(const char *, int, int);
@@ -267,6 +272,9 @@
/* Return true if this platform can run the "gunzip" program. */
int canGunzip(void);
=20
+/* Return true if this filesystem can handle nodump flags. */
+int canNodump(void);
+
/* Return true if the file has large i-node number(>0xffffffff). */
int is_LargeInode(const char *);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/test/test=
_pathmatch.c
--- a/head/contrib/libarchive/cpio/test/test_pathmatch.c Mon Jul 30 11:44:1=
8 2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,243 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/test/test_pathmatch.c 228=
763 2011-12-21 11:13:29Z mm $");
-
-#include "pathmatch.h"
-
-/*
- * Verify that the pattern matcher implements the wildcard logic specified
- * in SUSv2 for the cpio command. This is essentially the
- * shell glob syntax:
- * * - matches any sequence of chars, including '/'
- * ? - matches any single char, including '/'
- * [...] - matches any of a set of chars, '-' specifies a range,
- * initial '!' is undefined
- *
- * The specification in SUSv2 is a bit incomplete, I assume the following:
- * Trailing '-' in [...] is not special.
- *
- * TODO: Figure out if there's a good way to extend this to handle
- * Windows paths that use '\' as a path separator. <sigh>
- */
-
-DEFINE_TEST(test_pathmatch)
-{
- assertEqualInt(1, lafe_pathmatch("a/b/c", "a/b/c", 0));
- assertEqualInt(0, lafe_pathmatch("a/b/", "a/b/c", 0));
- assertEqualInt(0, lafe_pathmatch("a/b", "a/b/c", 0));
- assertEqualInt(0, lafe_pathmatch("a/b/c", "a/b/", 0));
- assertEqualInt(0, lafe_pathmatch("a/b/c", "a/b", 0));
-
- /* Empty pattern only matches empty string. */
- assertEqualInt(1, lafe_pathmatch("","", 0));
- assertEqualInt(0, lafe_pathmatch("","a", 0));
- assertEqualInt(1, lafe_pathmatch("*","", 0));
- assertEqualInt(1, lafe_pathmatch("*","a", 0));
- assertEqualInt(1, lafe_pathmatch("*","abcd", 0));
- /* SUSv2: * matches / */
- assertEqualInt(1, lafe_pathmatch("*","abcd/efgh/ijkl", 0));
- assertEqualInt(1, lafe_pathmatch("abcd*efgh/ijkl","abcd/efgh/ijkl", 0));
- assertEqualInt(1, lafe_pathmatch("abcd***efgh/ijkl","abcd/efgh/ijkl", 0));
- assertEqualInt(1, lafe_pathmatch("abcd***/efgh/ijkl","abcd/efgh/ijkl", 0)=
);
- assertEqualInt(0, lafe_pathmatch("?", "", 0));
- assertEqualInt(0, lafe_pathmatch("?", "\0", 0));
- assertEqualInt(1, lafe_pathmatch("?", "a", 0));
- assertEqualInt(0, lafe_pathmatch("?", "ab", 0));
- assertEqualInt(1, lafe_pathmatch("?", ".", 0));
- assertEqualInt(1, lafe_pathmatch("?", "?", 0));
- assertEqualInt(1, lafe_pathmatch("a", "a", 0));
- assertEqualInt(0, lafe_pathmatch("a", "ab", 0));
- assertEqualInt(0, lafe_pathmatch("a", "ab", 0));
- assertEqualInt(1, lafe_pathmatch("a?c", "abc", 0));
- /* SUSv2: ? matches / */
- assertEqualInt(1, lafe_pathmatch("a?c", "a/c", 0));
- assertEqualInt(1, lafe_pathmatch("a?*c*", "a/c", 0));
- assertEqualInt(1, lafe_pathmatch("*a*", "a/c", 0));
- assertEqualInt(1, lafe_pathmatch("*a*", "/a/c", 0));
- assertEqualInt(1, lafe_pathmatch("*a*", "defaaaaaaa", 0));
- assertEqualInt(0, lafe_pathmatch("a*", "defghi", 0));
- assertEqualInt(0, lafe_pathmatch("*a*", "defghi", 0));
-
- /* Character classes */
- assertEqualInt(1, lafe_pathmatch("abc[def", "abc[def", 0));
- assertEqualInt(0, lafe_pathmatch("abc[def]", "abc[def", 0));
- assertEqualInt(0, lafe_pathmatch("abc[def", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[def]", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[def]", "abce", 0));
- assertEqualInt(1, lafe_pathmatch("abc[def]", "abcf", 0));
- assertEqualInt(0, lafe_pathmatch("abc[def]", "abcg", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d*f]", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d*f]", "abc*", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d*f]", "abcdefghi", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d*", "abcdefghi", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d*", "abc[defghi", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-f]", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-f]", "abce", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-f]", "abcf", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d-f]", "abcg", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abca", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abce", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abcf", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abcg", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abch", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abci", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abcj", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abck", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abcl", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abc-", 0));
-
- /* [] matches nothing, [!] is the same as ? */
- assertEqualInt(0, lafe_pathmatch("abc[]efg", "abcdefg", 0));
- assertEqualInt(0, lafe_pathmatch("abc[]efg", "abcqefg", 0));
- assertEqualInt(0, lafe_pathmatch("abc[]efg", "abcefg", 0));
- assertEqualInt(1, lafe_pathmatch("abc[!]efg", "abcdefg", 0));
- assertEqualInt(1, lafe_pathmatch("abc[!]efg", "abcqefg", 0));
- assertEqualInt(0, lafe_pathmatch("abc[!]efg", "abcefg", 0));
-
- /* I assume: Trailing '-' is non-special. */
- assertEqualInt(0, lafe_pathmatch("abc[d-fh-]", "abcl", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-]", "abch", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-]", "abc-", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-fh-]", "abc-", 0));
-
- /* ']' can be backslash-quoted within a character class. */
- assertEqualInt(1, lafe_pathmatch("abc[\\]]", "abc]", 0));
- assertEqualInt(1, lafe_pathmatch("abc[\\]d]", "abc]", 0));
- assertEqualInt(1, lafe_pathmatch("abc[\\]d]", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d\\]]", "abc]", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d\\]]", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d]e]", "abcde]", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d\\]e]", "abc]", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d\\]e]", "abcd]e", 0));
- assertEqualInt(0, lafe_pathmatch("abc[d]e]", "abc]", 0));
-
- /* backslash-quoted chars can appear as either end of a range. */
- assertEqualInt(1, lafe_pathmatch("abc[\\d-f]gh", "abcegh", 0));
- assertEqualInt(0, lafe_pathmatch("abc[\\d-f]gh", "abcggh", 0));
- assertEqualInt(0, lafe_pathmatch("abc[\\d-f]gh", "abc\\gh", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d-\\f]gh", "abcegh", 0));
- assertEqualInt(1, lafe_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
- assertEqualInt(1, lafe_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
- /* backslash-quoted '-' isn't special. */
- assertEqualInt(0, lafe_pathmatch("abc[d\\-f]gh", "abcegh", 0));
- assertEqualInt(1, lafe_pathmatch("abc[d\\-f]gh", "abc-gh", 0));
-
- /* Leading '!' negates a character class. */
- assertEqualInt(0, lafe_pathmatch("abc[!d]", "abcd", 0));
- assertEqualInt(1, lafe_pathmatch("abc[!d]", "abce", 0));
- assertEqualInt(1, lafe_pathmatch("abc[!d]", "abcc", 0));
- assertEqualInt(0, lafe_pathmatch("abc[!d-z]", "abcq", 0));
- assertEqualInt(1, lafe_pathmatch("abc[!d-gi-z]", "abch", 0));
- assertEqualInt(1, lafe_pathmatch("abc[!fgijkl]", "abch", 0));
- assertEqualInt(0, lafe_pathmatch("abc[!fghijkl]", "abch", 0));
-
- /* Backslash quotes next character. */
- assertEqualInt(0, lafe_pathmatch("abc\\[def]", "abc\\d", 0));
- assertEqualInt(1, lafe_pathmatch("abc\\[def]", "abc[def]", 0));
- assertEqualInt(0, lafe_pathmatch("abc\\\\[def]", "abc[def]", 0));
- assertEqualInt(0, lafe_pathmatch("abc\\\\[def]", "abc\\[def]", 0));
- assertEqualInt(1, lafe_pathmatch("abc\\\\[def]", "abc\\d", 0));
- assertEqualInt(1, lafe_pathmatch("abcd\\", "abcd\\", 0));
- assertEqualInt(0, lafe_pathmatch("abcd\\", "abcd\\[", 0));
- assertEqualInt(0, lafe_pathmatch("abcd\\", "abcde", 0));
- assertEqualInt(0, lafe_pathmatch("abcd\\[", "abcd\\", 0));
-
- /*
- * Because '.' and '/' have special meanings, we can
- * identify many equivalent paths even if they're expressed
- * differently. (But quoting a character with '\\' suppresses
- * special meanings!)
- */
- assertEqualInt(0, lafe_pathmatch("a/b/", "a/bc", 0));
- assertEqualInt(1, lafe_pathmatch("a/./b", "a/b", 0));
- assertEqualInt(0, lafe_pathmatch("a\\/./b", "a/b", 0));
- assertEqualInt(0, lafe_pathmatch("a/\\./b", "a/b", 0));
- assertEqualInt(0, lafe_pathmatch("a/.\\/b", "a/b", 0));
- assertEqualInt(0, lafe_pathmatch("a\\/\\.\\/b", "a/b", 0));
- assertEqualInt(1, lafe_pathmatch("./abc/./def/", "abc/def/", 0));
- assertEqualInt(1, lafe_pathmatch("abc/def", "./././abc/./def", 0));
- assertEqualInt(1, lafe_pathmatch("abc/def/././//", "./././abc/./def/", 0)=
);
- assertEqualInt(1, lafe_pathmatch(".////abc/.//def", "./././abc/./def", 0)=
);
- assertEqualInt(1, lafe_pathmatch("./abc?def/", "abc/def/", 0));
- failure("\"?./\" is not the same as \"/./\"");
- assertEqualInt(0, lafe_pathmatch("./abc?./def/", "abc/def/", 0));
- failure("Trailing '/' should match no trailing '/'");
- assertEqualInt(1, lafe_pathmatch("./abc/./def/", "abc/def", 0));
- failure("Trailing '/./' is still the same directory.");
- assertEqualInt(1, lafe_pathmatch("./abc/./def/./", "abc/def", 0));
- failure("Trailing '/.' is still the same directory.");
- assertEqualInt(1, lafe_pathmatch("./abc/./def/.", "abc/def", 0));
- assertEqualInt(1, lafe_pathmatch("./abc/./def", "abc/def/", 0));
- failure("Trailing '/./' is still the same directory.");
- assertEqualInt(1, lafe_pathmatch("./abc/./def", "abc/def/./", 0));
- failure("Trailing '/.' is still the same directory.");
- assertEqualInt(1, lafe_pathmatch("./abc*/./def", "abc/def/.", 0));
-
- /* Matches not anchored at beginning. */
- assertEqualInt(0,
- lafe_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
- assertEqualInt(1,
- lafe_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_START));
- assertEqualInt(0,
- lafe_pathmatch("^bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
- assertEqualInt(1,
- lafe_pathmatch("b/c/d", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
- assertEqualInt(0,
- lafe_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
- assertEqualInt(0,
- lafe_pathmatch("^b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
-
- /* Matches not anchored at end. */
- assertEqualInt(0,
- lafe_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("abcd", "abcd/", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("abcd", "abcd/.", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(0,
- lafe_pathmatch("abc", "abcd", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("a/b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(0,
- lafe_pathmatch("a/b/c$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("a/b/c$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("a/b/c$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("a/b/c/", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(0,
- lafe_pathmatch("a/b/c/$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("a/b/c/$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(1,
- lafe_pathmatch("a/b/c/$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
- assertEqualInt(0,
- lafe_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive.h
--- a/head/contrib/libarchive/libarchive/archive.h Mon Jul 30 11:44:18 2012=
+0300
+++ b/head/contrib/libarchive/libarchive/archive.h Fri Aug 10 14:19:25 2012=
+0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive.h 232153 2012-02-2=
5 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive.h 238856 2012-07-2=
8 06:38:44Z mm $
*/
=20
#ifndef ARCHIVE_H_INCLUDED
@@ -56,23 +56,14 @@
# else
# define __LA_SSIZE_T long
# endif
-# if defined(__BORLANDC__)
-# define __LA_UID_T uid_t
-# define __LA_GID_T gid_t
-# else
-# define __LA_UID_T short
-# define __LA_GID_T short
-# endif
#else
-# include <unistd.h> /* ssize_t, uid_t, and gid_t */
+# include <unistd.h> /* ssize_t */
# if defined(_SCO_DS)
# define __LA_INT64_T long long
# else
# define __LA_INT64_T int64_t
# endif
# define __LA_SSIZE_T ssize_t
-# define __LA_UID_T uid_t
-# define __LA_GID_T gid_t
#endif
=20
/*
@@ -127,13 +118,13 @@
* assert that ARCHIVE_VERSION_NUMBER >=3D 2012108.
*/
/* Note: Compiler will complain if this does not match archive_entry.h! */
-#define ARCHIVE_VERSION_NUMBER 3000003
+#define ARCHIVE_VERSION_NUMBER 3000004
__LA_DECL int archive_version_number(void);
=20
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_STRING "libarchive 3.0.3"
+#define ARCHIVE_VERSION_STRING "libarchive 3.0.4"
__LA_DECL const char * archive_version_string(void);
=20
/* Declare our basic types. */
@@ -567,6 +558,8 @@
__LA_DECL int archive_write_set_compression_xz(struct archive *);
#endif
=20
+/* A convenience function to set the filter based on the code. */
+__LA_DECL int archive_write_add_filter(struct archive *, int filter_code);
__LA_DECL int archive_write_add_filter_bzip2(struct archive *);
__LA_DECL int archive_write_add_filter_compress(struct archive *);
__LA_DECL int archive_write_add_filter_gzip(struct archive *);
@@ -758,11 +751,42 @@
* traversal.
*/
__LA_DECL int archive_read_disk_descend(struct archive *);
+__LA_DECL int archive_read_disk_can_descend(struct archive *);
__LA_DECL int archive_read_disk_current_filesystem(struct archive *);
__LA_DECL int archive_read_disk_current_filesystem_is_synthetic(struct arc=
hive *);
__LA_DECL int archive_read_disk_current_filesystem_is_remote(struct archiv=
e *);
/* Request that the access time of the entry visited by travesal be restor=
ed. */
__LA_DECL int archive_read_disk_set_atime_restored(struct archive *);
+/*
+ * Set behavior. The "flags" argument selects optional behavior.
+ */
+/* Request that the access time of the entry visited by travesal be restor=
ed.
+ * This is the same as archive_read_disk_set_atime_restored. */
+#define ARCHIVE_READDISK_RESTORE_ATIME (0x0001)
+/* Default: Do not skip an entry which has nodump flags. */
+#define ARCHIVE_READDISK_HONOR_NODUMP (0x0002)
+/* Default: Skip a mac resource fork file whose prefix is "._" because of
+ * using copyfile. */
+#define ARCHIVE_READDISK_MAC_COPYFILE (0x0004)
+/* Default: Do not traverse mount points. */
+#define ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS (0x0008)
+
+__LA_DECL int archive_read_disk_set_behavior(struct archive *,
+ int flags);
+
+/*
+ * Set archive_match object that will be used in archive_read_disk to
+ * know whether an entry should be skipped. The callback function
+ * _excluded_func will be invoked when an entry is skipped by the result
+ * of archive_match.
+ */
+__LA_DECL int archive_read_disk_set_matching(struct archive *,
+ struct archive *_matching, void (*_excluded_func)
+ (struct archive *, void *, struct archive_entry *),
+ void *_client_data);
+__LA_DECL int archive_read_disk_set_metadata_filter_callback(struct archiv=
e *,
+ int (*_metadata_filter_func)(struct archive *, void *,
+ struct archive_entry *), void *_client_data);
=20
/*
* Accessor functions to read/set various information in
@@ -802,14 +826,116 @@
struct archive *src);
__LA_DECL int archive_file_count(struct archive *);
=20
+/*
+ * ARCHIVE_MATCH API
+ */
+__LA_DECL struct archive *archive_match_new(void);
+__LA_DECL int archive_match_free(struct archive *);
+
+/*
+ * Test if archive_entry is excluded.
+ * This is a convenience function. This is the same as calling all
+ * archive_match_path_excluded, archive_match_time_excluded
+ * and archive_match_owner_excluded.
+ */
+__LA_DECL int archive_match_excluded(struct archive *,
+ struct archive_entry *);
+
+/*
+ * Test if pathname is excluded. The conditions are set by following funct=
ions.
+ */
+__LA_DECL int archive_match_path_excluded(struct archive *,
+ struct archive_entry *);
+/* Add exclusion pathname pattern. */
+__LA_DECL int archive_match_exclude_pattern(struct archive *, const char *=
);
+__LA_DECL int archive_match_exclude_pattern_w(struct archive *,
+ const wchar_t *);
+/* Add exclusion pathname pattern from file. */
+__LA_DECL int archive_match_exclude_pattern_from_file(struct archive *,
+ const char *, int _nullSeparator);
+__LA_DECL int archive_match_exclude_pattern_from_file_w(struct archive *,
+ const wchar_t *, int _nullSeparator);
+/* Add inclusion pathname pattern. */
+__LA_DECL int archive_match_include_pattern(struct archive *, const char *=
);
+__LA_DECL int archive_match_include_pattern_w(struct archive *,
+ const wchar_t *);
+/* Add inclusion pathname pattern from file. */
+__LA_DECL int archive_match_include_pattern_from_file(struct archive *,
+ const char *, int _nullSeparator);
+__LA_DECL int archive_match_include_pattern_from_file_w(struct archive *,
+ const wchar_t *, int _nullSeparator);
+/*
+ * How to get statistic information for inclusion patterns.
+ */
+/* Return the amount number of unmatched inclusion patterns. */
+__LA_DECL int archive_match_path_unmatched_inclusions(struct archive *);
+/* Return the pattern of unmatched inclusion with ARCHIVE_OK.
+ * Return ARCHIVE_EOF if there is no inclusion pattern. */
+__LA_DECL int archive_match_path_unmatched_inclusions_next(
+ struct archive *, const char **);
+__LA_DECL int archive_match_path_unmatched_inclusions_next_w(
+ struct archive *, const wchar_t **);
+
+/*
+ * Test if a file is excluded by its time stamp.
+ * The conditions are set by following functions.
+ */
+__LA_DECL int archive_match_time_excluded(struct archive *,
+ struct archive_entry *);
+
+/*
+ * Flags to tell a matching type of time stamps. These are used for
+ * following functinos.
+ */
+/* Time flag: mtime to be tested. */
+#define ARCHIVE_MATCH_MTIME (0x0100)
+/* Time flag: ctime to be tested. */
+#define ARCHIVE_MATCH_CTIME (0x0200)
+/* Comparison flag: Match the time if it is newer than. */
+#define ARCHIVE_MATCH_NEWER (0x0001)
+/* Comparison flag: Match the time if it is older than. */
+#define ARCHIVE_MATCH_OLDER (0x0002)
+/* Comparison flag: Match the time if it is equal to. */
+#define ARCHIVE_MATCH_EQUAL (0x0010)
+/* Set inclusion time. */
+__LA_DECL int archive_match_include_time(struct archive *, int _flag,
+ time_t _sec, long _nsec);
+/* Set inclusion time by a date string. */
+__LA_DECL int archive_match_include_date(struct archive *, int _flag,
+ const char *_datestr);
+__LA_DECL int archive_match_include_date_w(struct archive *, int _flag,
+ const wchar_t *_datestr);
+/* Set inclusion time by a particluar file. */
+__LA_DECL int archive_match_include_file_time(struct archive *,
+ int _flag, const char *_pathname);
+__LA_DECL int archive_match_include_file_time_w(struct archive *,
+ int _flag, const wchar_t *_pathname);
+/* Add exclusion entry. */
+__LA_DECL int archive_match_exclude_entry(struct archive *,
+ int _flag, struct archive_entry *);
+
+/*
+ * Test if a file is excluded by its uid ,gid, uname or gname.
+ * The conditions are set by following functions.
+ */
+__LA_DECL int archive_match_owner_excluded(struct archive *,
+ struct archive_entry *);
+/* Add inclusion uid, gid, uname and gname. */
+__LA_DECL int archive_match_include_uid(struct archive *, __LA_INT64_T);
+__LA_DECL int archive_match_include_gid(struct archive *, __LA_INT64_T);
+__LA_DECL int archive_match_include_uname(struct archive *, const char *);
+__LA_DECL int archive_match_include_uname_w(struct archive *,
+ const wchar_t *);
+__LA_DECL int archive_match_include_gname(struct archive *, const char *);
+__LA_DECL int archive_match_include_gname_w(struct archive *,
+ const wchar_t *);
+
#ifdef __cplusplus
}
#endif
=20
/* These are meaningless outside of this header. */
#undef __LA_DECL
-#undef __LA_GID_T
-#undef __LA_UID_T
=20
/* These need to remain defined because they're used in the
* callback type definitions. XXX Fix this. This is ugly. XXX */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_acl.c
--- a/head/contrib/libarchive/libarchive/archive_acl.c Mon Jul 30 11:44:18 =
2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_acl.c Fri Aug 10 14:19:25 =
2012 +0300
@@ -422,8 +422,11 @@
*permset =3D acl->acl_p->permset;
*tag =3D acl->acl_p->tag;
*id =3D acl->acl_p->id;
- if (archive_mstring_get_mbs(a, &acl->acl_p->name, name) !=3D 0)
+ if (archive_mstring_get_mbs(a, &acl->acl_p->name, name) !=3D 0) {
+ if (errno =3D=3D ENOMEM)
+ return (ARCHIVE_FATAL);
*name =3D NULL;
+ }
acl->acl_p =3D acl->acl_p->next;
return (ARCHIVE_OK);
}
@@ -441,7 +444,7 @@
const wchar_t *prefix;
wchar_t separator;
struct archive_acl_entry *ap;
- int id;
+ int id, r;
wchar_t *wp;
=20
if (acl->acl_text_w !=3D NULL) {
@@ -461,9 +464,11 @@
length +=3D 8; /* "default:" */
length +=3D 5; /* tag name */
length +=3D 1; /* colon */
- if (archive_mstring_get_wcs(a, &ap->name, &wname) =3D=3D 0 &&
- wname !=3D NULL)
+ r =3D archive_mstring_get_wcs(a, &ap->name, &wname);
+ if (r =3D=3D 0 && wname !=3D NULL)
length +=3D wcslen(wname);
+ else if (r < 0 && errno =3D=3D ENOMEM)
+ return (NULL);
else
length +=3D sizeof(uid_t) * 3 + 1;
length ++; /* colon */
@@ -487,7 +492,7 @@
/* Now, allocate the string and actually populate it. */
wp =3D acl->acl_text_w =3D (wchar_t *)malloc(length * sizeof(wchar_t));
if (wp =3D=3D NULL)
- __archive_errx(1, "No memory to generate the text version of the ACL");
+ return (NULL);
count =3D 0;
if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0) {
append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
@@ -502,16 +507,19 @@
=20
ap =3D acl->acl_head;
while (ap !=3D NULL) {
- if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0 &&
- archive_mstring_get_wcs(a, &ap->name, &wname) =3D=3D 0) {
- *wp++ =3D separator;
- if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
- id =3D ap->id;
- else
- id =3D -1;
- append_entry_w(&wp, NULL, ap->tag, wname,
- ap->permset, id);
- count++;
+ if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0) {
+ r =3D archive_mstring_get_wcs(a, &ap->name, &wname);
+ if (r =3D=3D 0) {
+ *wp++ =3D separator;
+ if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
+ id =3D ap->id;
+ else
+ id =3D -1;
+ append_entry_w(&wp, NULL, ap->tag, wname,
+ ap->permset, id);
+ count++;
+ } else if (r < 0 && errno =3D=3D ENOMEM)
+ return (NULL);
}
ap =3D ap->next;
}
@@ -526,17 +534,20 @@
ap =3D acl->acl_head;
count =3D 0;
while (ap !=3D NULL) {
- if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) !=3D 0 &&
- archive_mstring_get_wcs(a, &ap->name, &wname) =3D=3D 0) {
- if (count > 0)
- *wp++ =3D separator;
- if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
- id =3D ap->id;
- else
- id =3D -1;
- append_entry_w(&wp, prefix, ap->tag,
- wname, ap->permset, id);
- count ++;
+ if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) !=3D 0) {
+ r =3D archive_mstring_get_wcs(a, &ap->name, &wname);
+ if (r =3D=3D 0) {
+ if (count > 0)
+ *wp++ =3D separator;
+ if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
+ id =3D ap->id;
+ else
+ id =3D -1;
+ append_entry_w(&wp, prefix, ap->tag,
+ wname, ap->permset, id);
+ count ++;
+ } else if (r < 0 && errno =3D=3D ENOMEM)
+ return (NULL);
}
ap =3D ap->next;
}
@@ -675,7 +686,7 @@
/* Now, allocate the string and actually populate it. */
p =3D acl->acl_text =3D (char *)malloc(length);
if (p =3D=3D NULL)
- __archive_errx(1, "No memory to generate the text version of the ACL");
+ return (-1);
count =3D 0;
if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0) {
append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_check_magic.c
--- a/head/contrib/libarchive/libarchive/archive_check_magic.c Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_check_magic.c Fri Aug 10 1=
4:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_check_magic=
.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_check_magic=
.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -94,6 +94,7 @@
case ARCHIVE_READ_MAGIC: return ("archive_read");
case ARCHIVE_WRITE_DISK_MAGIC: return ("archive_write_disk");
case ARCHIVE_READ_DISK_MAGIC: return ("archive_read_disk");
+ case ARCHIVE_MATCH_MAGIC: return ("archive_match");
default: return NULL;
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_endian.h
--- a/head/contrib/libarchive/libarchive/archive_endian.h Mon Jul 30 11:44:=
18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_endian.h Fri Aug 10 14:19:=
25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_endian.h 228763 20=
11-12-21 11:13:29Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_endian.h 238856 20=
12-07-28 06:38:44Z mm $
*
* Borrowed from FreeBSD's <sys/endian.h>
*/
@@ -126,8 +126,8 @@
{
unsigned char *p =3D (unsigned char *)pp;
=20
- archive_be32enc(p, u >> 32);
- archive_be32enc(p + 4, u & 0xffffffff);
+ archive_be32enc(p, (uint32_t)(u >> 32));
+ archive_be32enc(p + 4, (uint32_t)(u & 0xffffffff));
}
=20
static inline void
@@ -155,8 +155,8 @@
{
unsigned char *p =3D (unsigned char *)pp;
=20
- archive_le32enc(p, u & 0xffffffff);
- archive_le32enc(p + 4, u >> 32);
+ archive_le32enc(p, (uint32_t)(u & 0xffffffff));
+ archive_le32enc(p + 4, (uint32_t)(u >> 32));
}
=20
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry.3
--- a/head/contrib/libarchive/libarchive/archive_entry.3 Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry.3 Fri Aug 10 14:19:2=
5 2012 +0300
@@ -23,9 +23,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_entry.3 232153 20=
12-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_entry.3 238856 20=
12-07-28 06:38:44Z mm $
.\"
-.Dd Feburary 22, 2010
+.Dd Feburary 2, 2012
.Dt ARCHIVE_ENTRY 3
.Os
.Sh NAME
@@ -34,6 +34,8 @@
.Nm archive_entry_free ,
.Nm archive_entry_new ,
.Nd functions for managing archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive_entry.h
.Ft "struct archive_entry *"
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry.c
--- a/head/contrib/libarchive/libarchive/archive_entry.c Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry.c Fri Aug 10 14:19:2=
5 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry.c 232=
153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry.c 238=
856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -375,8 +375,11 @@
char *p;
=20
if (archive_mstring_get_mbs(entry->archive,
- &entry->ae_fflags_text, &f) =3D=3D 0 && f !=3D NULL)
- return (f);
+ &entry->ae_fflags_text, &f) =3D=3D 0) {
+ if (f !=3D NULL)
+ return (f);
+ } else if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
=20
if (entry->ae_fflags_set =3D=3D 0 && entry->ae_fflags_clear =3D=3D 0)
return (NULL);
@@ -390,6 +393,8 @@
if (archive_mstring_get_mbs(entry->archive,
&entry->ae_fflags_text, &f) =3D=3D 0)
return (f);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -405,6 +410,8 @@
const char *p;
if (archive_mstring_get_mbs(entry->archive, &entry->ae_gname, &p) =3D=3D =
0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -414,6 +421,8 @@
const wchar_t *p;
if (archive_mstring_get_wcs(entry->archive, &entry->ae_gname, &p) =3D=3D =
0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -428,9 +437,13 @@
archive_entry_hardlink(struct archive_entry *entry)
{
const char *p;
- if ((entry->ae_set & AE_SET_HARDLINK) && archive_mstring_get_mbs(
+ if ((entry->ae_set & AE_SET_HARDLINK) =3D=3D 0)
+ return (NULL);
+ if (archive_mstring_get_mbs(
entry->archive, &entry->ae_hardlink, &p) =3D=3D 0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -438,9 +451,13 @@
archive_entry_hardlink_w(struct archive_entry *entry)
{
const wchar_t *p;
- if ((entry->ae_set & AE_SET_HARDLINK) && archive_mstring_get_wcs(
+ if ((entry->ae_set & AE_SET_HARDLINK) =3D=3D 0)
+ return (NULL);
+ if (archive_mstring_get_wcs(
entry->archive, &entry->ae_hardlink, &p) =3D=3D 0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -511,6 +528,8 @@
if (archive_mstring_get_mbs(
entry->archive, &entry->ae_pathname, &p) =3D=3D 0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -521,6 +540,8 @@
if (archive_mstring_get_wcs(
entry->archive, &entry->ae_pathname, &p) =3D=3D 0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -584,6 +605,8 @@
if (archive_mstring_get_mbs(
entry->archive, &entry->ae_sourcepath, &p) =3D=3D 0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -601,9 +624,13 @@
archive_entry_symlink(struct archive_entry *entry)
{
const char *p;
- if ((entry->ae_set & AE_SET_SYMLINK) && archive_mstring_get_mbs(
+ if ((entry->ae_set & AE_SET_SYMLINK) =3D=3D 0)
+ return (NULL);
+ if (archive_mstring_get_mbs(
entry->archive, &entry->ae_symlink, &p) =3D=3D 0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -611,9 +638,13 @@
archive_entry_symlink_w(struct archive_entry *entry)
{
const wchar_t *p;
- if ((entry->ae_set & AE_SET_SYMLINK) && archive_mstring_get_wcs(
+ if ((entry->ae_set & AE_SET_SYMLINK) =3D=3D 0)
+ return (NULL);
+ if (archive_mstring_get_wcs(
entry->archive, &entry->ae_symlink, &p) =3D=3D 0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -641,6 +672,8 @@
const char *p;
if (archive_mstring_get_mbs(entry->archive, &entry->ae_uname, &p) =3D=3D =
0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -650,6 +683,8 @@
const wchar_t *p;
if (archive_mstring_get_wcs(entry->archive, &entry->ae_uname, &p) =3D=3D =
0)
return (p);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
}
=20
@@ -730,6 +765,8 @@
if (archive_mstring_update_utf8(entry->archive,
&entry->ae_gname, name) =3D=3D 0)
return (1);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (0);
}
=20
@@ -796,6 +833,8 @@
if (archive_mstring_update_utf8(entry->archive,
&entry->ae_hardlink, target) =3D=3D 0)
return (1);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (0);
}
=20
@@ -932,7 +971,11 @@
else
r =3D archive_mstring_update_utf8(entry->archive,
&entry->ae_hardlink, target);
- return ((r =3D=3D 0)? 1: 0);
+ if (r =3D=3D 0)
+ return (1);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
+ return (0);
}
=20
int
@@ -1005,6 +1048,8 @@
if (archive_mstring_update_utf8(entry->archive,
&entry->ae_pathname, name) =3D=3D 0)
return (1);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (0);
}
=20
@@ -1115,6 +1160,8 @@
if (archive_mstring_update_utf8(entry->archive,
&entry->ae_symlink, linkname) =3D=3D 0)
return (1);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (0);
}
=20
@@ -1164,6 +1211,8 @@
if (archive_mstring_update_utf8(entry->archive,
&entry->ae_uname, name) =3D=3D 0)
return (1);
+ if (errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
return (0);
}
=20
@@ -1269,7 +1318,12 @@
archive_entry_acl_next(struct archive_entry *entry, int want_type, int *ty=
pe,
int *permset, int *tag, int *id, const char **name)
{
- return archive_acl_next(entry->archive, &entry->acl, want_type, type, per=
mset, tag, id, name);
+ int r;
+ r =3D archive_acl_next(entry->archive, &entry->acl, want_type, type,
+ permset, tag, id, name);
+ if (r =3D=3D ARCHIVE_FATAL && errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
+ return (r);
}
=20
/*
@@ -1279,7 +1333,11 @@
const wchar_t *
archive_entry_acl_text_w(struct archive_entry *entry, int flags)
{
- return archive_acl_text_w(entry->archive, &entry->acl, flags);
+ const wchar_t *r;
+ r =3D archive_acl_text_w(entry->archive, &entry->acl, flags);
+ if (r =3D=3D NULL && errno =3D=3D ENOMEM)
+ __archive_errx(1, "No memory");
+ return (r);
}
=20
const char *
@@ -1288,7 +1346,7 @@
const char *p;
if (archive_acl_text_l(&entry->acl, flags, &p, NULL, NULL) !=3D 0
&& errno =3D=3D ENOMEM)
- return (NULL);
+ __archive_errx(1, "No memory");
return (p);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry.h
--- a/head/contrib/libarchive/libarchive/archive_entry.h Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry.h Fri Aug 10 14:19:2=
5 2012 +0300
@@ -22,14 +22,14 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_entry.h 232153 201=
2-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_entry.h 238856 201=
2-07-28 06:38:44Z mm $
*/
=20
#ifndef ARCHIVE_ENTRY_H_INCLUDED
#define ARCHIVE_ENTRY_H_INCLUDED
=20
/* Note: Compiler will complain if this does not match archive.h! */
-#define ARCHIVE_VERSION_NUMBER 3000003
+#define ARCHIVE_VERSION_NUMBER 3000004
=20
/*
* Note: archive_entry.h is for use outside of libarchive; the
@@ -47,21 +47,9 @@
#include <windows.h>
#endif
=20
-/* Get appropriate definitions of standard POSIX-style types. */
-/* These should match the types used in 'struct stat' */
+/* Get a suitable 64-bit integer type. */
#if defined(_WIN32) && !defined(__CYGWIN__)
-#define __LA_INT64_T __int64
-# if defined(__BORLANDC__)
-# define __LA_UID_T uid_t /* Remove in libarchive 3.2 */
-# define __LA_GID_T gid_t /* Remove in libarchive 3.2 */
-# define __LA_DEV_T dev_t
-# define __LA_MODE_T mode_t
-# else
-# define __LA_UID_T short /* Remove in libarchive 3.2 */
-# define __LA_GID_T short /* Remove in libarchive 3.2 */
-# define __LA_DEV_T unsigned int
-# define __LA_MODE_T unsigned short
-# endif
+# define __LA_INT64_T __int64
#else
#include <unistd.h>
# if defined(_SCO_DS)
@@ -69,19 +57,19 @@
# else
# define __LA_INT64_T int64_t
# endif
-# define __LA_UID_T uid_t /* Remove in libarchive 3.2 */
-# define __LA_GID_T gid_t /* Remove in libarchive 3.2 */
-# define __LA_DEV_T dev_t
+#endif
+
+/* Get a suitable definition for mode_t */
+#if ARCHIVE_VERSION_NUMBER >=3D 3999000
+/* Switch to plain 'int' for libarchive 4.0. It's less broken than 'mode_=
t' */
+# define __LA_MODE_T int
+#elif defined(_WIN32) && !defined(__CYGWIN__) && !defined(__BORLANDC__)
+# define __LA_MODE_T unsigned short
+#else
# define __LA_MODE_T mode_t
#endif
=20
/*
- * Remove this for libarchive 3.2, since ino_t is no longer used.
- */
-#define __LA_INO_T ino_t
-
-
-/*
* On Windows, define LIBARCHIVE_STATIC if you're building or using a
* .lib. The default here assumes you're building a DLL. Only
* libarchive source should ever define __LIBARCHIVE_BUILD.
@@ -149,14 +137,18 @@
* portable values to platform-native values when entries are read from
* or written to disk.
*/
-#define AE_IFMT 0170000
-#define AE_IFREG 0100000
-#define AE_IFLNK 0120000
-#define AE_IFSOCK 0140000
-#define AE_IFCHR 0020000
-#define AE_IFBLK 0060000
-#define AE_IFDIR 0040000
-#define AE_IFIFO 0010000
+/*
+ * In libarchive 4.0, we can drop the casts here.
+ * They're needed to work around Borland C's broken mode_t.
+ */
+#define AE_IFMT ((__LA_MODE_T)0170000)
+#define AE_IFREG ((__LA_MODE_T)0100000)
+#define AE_IFLNK ((__LA_MODE_T)0120000)
+#define AE_IFSOCK ((__LA_MODE_T)0140000)
+#define AE_IFCHR ((__LA_MODE_T)0020000)
+#define AE_IFBLK ((__LA_MODE_T)0060000)
+#define AE_IFDIR ((__LA_MODE_T)0040000)
+#define AE_IFIFO ((__LA_MODE_T)0010000)
=20
/*
* Basic object manipulation
@@ -321,7 +313,10 @@
* manipulate archives on systems different than the ones they were
* created on.
*
- * TODO: On Linux, provide both stat32 and stat64 versions of these functi=
ons.
+ * TODO: On Linux and other LFS systems, provide both stat32 and
+ * stat64 versions of these functions and all of the macro glue so
+ * that archive_entry_stat is magically defined to
+ * archive_entry_stat32 or archive_entry_stat64 as appropriate.
*/
__LA_DECL const struct stat *archive_entry_stat(struct archive_entry *);
__LA_DECL void archive_entry_copy_stat(struct archive_entry *, const struc=
t stat *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_acl.3
--- a/head/contrib/libarchive/libarchive/archive_entry_acl.3 Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_acl.3 Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd February 21, 2010
+.Dd February 2, 2012
.Dt ARCHIVE_ENTRY_ACL 3
.Os
.Sh NAME
@@ -35,6 +35,8 @@
.Nm archive_entry_acl_reset ,
.Nm archive_entry_acl_text_w
.Nd functions for manipulating Access Control Lists in archive entry descr=
iptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive_entry.h
.Ft void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_link_resolver.c
--- a/head/contrib/libarchive/libarchive/archive_entry_link_resolver.c Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_link_resolver.c Fri =
Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_link_=
resolver.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_link_=
resolver.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -362,7 +362,7 @@
if (res->number_entries > res->number_buckets * 2)
grow_hash(res);
=20
- hash =3D archive_entry_dev(entry) ^ archive_entry_ino64(entry);
+ hash =3D (size_t)(archive_entry_dev(entry) ^ archive_entry_ino64(entry));
bucket =3D hash & (res->number_buckets - 1);
=20
/* If we could allocate the entry, record it. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_linkify.3
--- a/head/contrib/libarchive/libarchive/archive_entry_linkify.3 Mon Jul 30=
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_linkify.3 Fri Aug 10=
14:19:25 2012 +0300
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd February 20, 2010
+.Dd February 2, 2012
.Dt ARCHIVE_ENTRY_LINKIFY 3
.Os
.Sh NAME
@@ -33,7 +33,7 @@
.Nm archive_entry_linkify
.Nd hardlink resolver functions
.Sh LIBRARY
-.Lb libarchive
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive_entry.h
.Ft struct archive_entry_linkresolver *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_paths.3
--- a/head/contrib/libarchive/libarchive/archive_entry_paths.3 Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_paths.3 Fri Aug 10 1=
4:19:25 2012 +0300
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd February 22, 2010
+.Dd February 2, 2012
.Dt ARCHIVE_ENTRY_PATHS 3
.Os
.Sh NAME
@@ -51,6 +51,8 @@
.Nm archive_entry_copy_symlink_w ,
.Nm archve_entry_update_symlink_utf8
.Nd functions for manipulating path names in archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive_entry.h
.Ft const char *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_perms.3
--- a/head/contrib/libarchive/libarchive/archive_entry_perms.3 Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_perms.3 Fri Aug 10 1=
4:19:25 2012 +0300
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd February 22, 2010
+.Dd February 2, 2012
.Dt ARCHIVE_ENTRY_PERMS 3
.Os
.Sh NAME
@@ -52,6 +52,8 @@
.Nm archive_entry_copy_fflags_text ,
.Nm archive_entry_copy_fflags_text_w
.Nd functions for manipulating ownership and permissions in archive entry =
descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive_entry.h
.Ft gid_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_stat.3
--- a/head/contrib/libarchive/libarchive/archive_entry_stat.3 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_stat.3 Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,8 +22,8 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd May 12, 2008
-.Dt ARCHIVE_ENTRY 3
+.Dd February 2, 2012
+.Dt ARCHIVE_ENTRY_STAT 3
.Os
.Sh NAME
.Nm archive_entry_stat ,
@@ -56,6 +56,8 @@
.Nm archive_entry_rdevminor ,
.Nm archive_entry_set_rdevminor ,
.Nd accessor functions for manipulating archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive_entry.h
.Ft const struct stat *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_stat.c
--- a/head/contrib/libarchive/libarchive/archive_entry_stat.c Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_stat.c Fri Aug 10 14=
:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_stat.=
c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_stat.=
c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -70,12 +70,12 @@
st->st_ctime =3D archive_entry_ctime(entry);
st->st_mtime =3D archive_entry_mtime(entry);
st->st_dev =3D archive_entry_dev(entry);
- st->st_gid =3D archive_entry_gid(entry);
- st->st_uid =3D archive_entry_uid(entry);
- st->st_ino =3D archive_entry_ino64(entry);
+ st->st_gid =3D (gid_t)archive_entry_gid(entry);
+ st->st_uid =3D (uid_t)archive_entry_uid(entry);
+ st->st_ino =3D (ino_t)archive_entry_ino64(entry);
st->st_nlink =3D archive_entry_nlink(entry);
st->st_rdev =3D archive_entry_rdev(entry);
- st->st_size =3D archive_entry_size(entry);
+ st->st_size =3D (off_t)archive_entry_size(entry);
st->st_mode =3D archive_entry_mode(entry);
=20
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_time.3
--- a/head/contrib/libarchive/libarchive/archive_entry_time.3 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_time.3 Fri Aug 10 14=
:19:25 2012 +0300
@@ -23,9 +23,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: src/lib/libarchive/archive_entry.3,v 1.18 2008/05/26 17:00:2=
2 kientzle Exp $
+.\" $FreeBSD$
.\"
-.Dd February 21, 2010
+.Dd February 2, 2012
.Dt ARCHIVE_ENTRY_TIME 3
.Os
.Sh NAME
@@ -50,6 +50,8 @@
.Nm archive_entry_set_mtime ,
.Nm archive_entry_unset_mtime ,
.Nd functions for manipulating times in archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive_entry.h
.Ft time_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_getdate.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_getdate.c Fri Aug 10 14:19=
:25 2012 +0300
@@ -0,0 +1,1037 @@
+/*
+ * This code is in the public domain and has no copyright.
+ *
+ * This is a plain C recursive-descent translation of an old
+ * public-domain YACC grammar that has been used for parsing dates in
+ * very many open-source projects.
+ *
+ * Since the original authors were generous enough to donate their
+ * work to the public domain, I feel compelled to match their
+ * generosity.
+ *
+ * Tim Kientzle, February 2009.
+ */
+
+/*
+ * Header comment from original getdate.y:
+ */
+
+/*
+** Originally written by Steven M. Bellovin <smb at research.att.com> while
+** at the University of North Carolina at Chapel Hill. Later tweaked by
+** a couple of people on Usenet. Completely overhauled by Rich $alz
+** <rsalz at bbn.com> and Jim Berets <jberets at bbn.com> in August, 1990;
+**
+** This grammar has 10 shift/reduce conflicts.
+**
+** This code is in the public domain and has no copyright.
+*/
+
+#ifdef __FreeBSD__
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+/* This file defines a single public function. */
+time_t __archive_get_date(time_t now, char *);
+
+/* Basic time units. */
+#define EPOCH 1970
+#define MINUTE (60L)
+#define HOUR (60L * MINUTE)
+#define DAY (24L * HOUR)
+
+/* Daylight-savings mode: on, off, or not yet known. */
+enum DSTMODE { DSTon, DSToff, DSTmaybe };
+/* Meridian: am or pm. */
+enum { tAM, tPM };
+/* Token types returned by nexttoken() */
+enum { tAGO =3D 260, tDAY, tDAYZONE, tAMPM, tMONTH, tMONTH_UNIT, tSEC_UNIT,
+ tUNUMBER, tZONE, tDST };
+struct token { int token; time_t value; };
+
+/*
+ * Parser state.
+ */
+struct gdstate {
+ struct token *tokenp; /* Pointer to next token. */
+ /* HaveXxxx counts how many of this kind of phrase we've seen;
+ * it's a fatal error to have more than one time, zone, day,
+ * or date phrase. */
+ int HaveYear;
+ int HaveMonth;
+ int HaveDay;
+ int HaveWeekDay; /* Day of week */
+ int HaveTime; /* Hour/minute/second */
+ int HaveZone; /* timezone and/or DST info */
+ int HaveRel; /* time offset; we can have more than one */
+ /* Absolute time values. */
+ time_t Timezone; /* Seconds offset from GMT */
+ time_t Day;
+ time_t Hour;
+ time_t Minutes;
+ time_t Month;
+ time_t Seconds;
+ time_t Year;
+ /* DST selection */
+ enum DSTMODE DSTmode;
+ /* Day of week accounting, e.g., "3rd Tuesday" */
+ time_t DayOrdinal; /* "3" in "3rd Tuesday" */
+ time_t DayNumber; /* "Tuesday" in "3rd Tuesday" */
+ /* Relative time values: hour/day/week offsets are measured in
+ * seconds, month/year are counted in months. */
+ time_t RelMonth;
+ time_t RelSeconds;
+};
+
+/*
+ * A series of functions that recognize certain common time phrases.
+ * Each function returns 1 if it managed to make sense of some of the
+ * tokens, zero otherwise.
+ */
+
+/*
+ * hour:minute or hour:minute:second with optional AM, PM, or numeric
+ * timezone offset
+ */
+static int
+timephrase(struct gdstate *gds)
+{
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D ':'
+ && gds->tokenp[2].token =3D=3D tUNUMBER
+ && gds->tokenp[3].token =3D=3D ':'
+ && gds->tokenp[4].token =3D=3D tUNUMBER) {
+ /* "12:14:18" or "22:08:07" */
+ ++gds->HaveTime;
+ gds->Hour =3D gds->tokenp[0].value;
+ gds->Minutes =3D gds->tokenp[2].value;
+ gds->Seconds =3D gds->tokenp[4].value;
+ gds->tokenp +=3D 5;
+ }
+ else if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D ':'
+ && gds->tokenp[2].token =3D=3D tUNUMBER) {
+ /* "12:14" or "22:08" */
+ ++gds->HaveTime;
+ gds->Hour =3D gds->tokenp[0].value;
+ gds->Minutes =3D gds->tokenp[2].value;
+ gds->Seconds =3D 0;
+ gds->tokenp +=3D 3;
+ }
+ else if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D tAMPM) {
+ /* "7" is a time if it's followed by "am" or "pm" */
+ ++gds->HaveTime;
+ gds->Hour =3D gds->tokenp[0].value;
+ gds->Minutes =3D gds->Seconds =3D 0;
+ /* We'll handle the AM/PM below. */
+ gds->tokenp +=3D 1;
+ } else {
+ /* We can't handle this. */
+ return 0;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tAMPM) {
+ /* "7:12pm", "12:20:13am" */
+ if (gds->Hour =3D=3D 12)
+ gds->Hour =3D 0;
+ if (gds->tokenp[0].value =3D=3D tPM)
+ gds->Hour +=3D 12;
+ gds->tokenp +=3D 1;
+ }
+ if (gds->tokenp[0].token =3D=3D '+'
+ && gds->tokenp[1].token =3D=3D tUNUMBER) {
+ /* "7:14+0700" */
+ gds->HaveZone++;
+ gds->DSTmode =3D DSToff;
+ gds->Timezone =3D - ((gds->tokenp[1].value / 100) * HOUR
+ + (gds->tokenp[1].value % 100) * MINUTE);
+ gds->tokenp +=3D 2;
+ }
+ if (gds->tokenp[0].token =3D=3D '-'
+ && gds->tokenp[1].token =3D=3D tUNUMBER) {
+ /* "19:14:12-0530" */
+ gds->HaveZone++;
+ gds->DSTmode =3D DSToff;
+ gds->Timezone =3D + ((gds->tokenp[1].value / 100) * HOUR
+ + (gds->tokenp[1].value % 100) * MINUTE);
+ gds->tokenp +=3D 2;
+ }
+ return 1;
+}
+
+/*
+ * Timezone name, possibly including DST.
+ */
+static int
+zonephrase(struct gdstate *gds)
+{
+ if (gds->tokenp[0].token =3D=3D tZONE
+ && gds->tokenp[1].token =3D=3D tDST) {
+ gds->HaveZone++;
+ gds->Timezone =3D gds->tokenp[0].value;
+ gds->DSTmode =3D DSTon;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tZONE) {
+ gds->HaveZone++;
+ gds->Timezone =3D gds->tokenp[0].value;
+ gds->DSTmode =3D DSToff;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tDAYZONE) {
+ gds->HaveZone++;
+ gds->Timezone =3D gds->tokenp[0].value;
+ gds->DSTmode =3D DSTon;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Year/month/day in various combinations.
+ */
+static int
+datephrase(struct gdstate *gds)
+{
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D '/'
+ && gds->tokenp[2].token =3D=3D tUNUMBER
+ && gds->tokenp[3].token =3D=3D '/'
+ && gds->tokenp[4].token =3D=3D tUNUMBER) {
+ gds->HaveYear++;
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ if (gds->tokenp[0].value >=3D 13) {
+ /* First number is big: 2004/01/29, 99/02/17 */
+ gds->Year =3D gds->tokenp[0].value;
+ gds->Month =3D gds->tokenp[2].value;
+ gds->Day =3D gds->tokenp[4].value;
+ } else if ((gds->tokenp[4].value >=3D 13)
+ || (gds->tokenp[2].value >=3D 13)) {
+ /* Last number is big: 01/07/98 */
+ /* Middle number is big: 01/29/04 */
+ gds->Month =3D gds->tokenp[0].value;
+ gds->Day =3D gds->tokenp[2].value;
+ gds->Year =3D gds->tokenp[4].value;
+ } else {
+ /* No significant clues: 02/03/04 */
+ gds->Month =3D gds->tokenp[0].value;
+ gds->Day =3D gds->tokenp[2].value;
+ gds->Year =3D gds->tokenp[4].value;
+ }
+ gds->tokenp +=3D 5;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D '/'
+ && gds->tokenp[2].token =3D=3D tUNUMBER) {
+ /* "1/15" */
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ gds->Month =3D gds->tokenp[0].value;
+ gds->Day =3D gds->tokenp[2].value;
+ gds->tokenp +=3D 3;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D '-'
+ && gds->tokenp[2].token =3D=3D tUNUMBER
+ && gds->tokenp[3].token =3D=3D '-'
+ && gds->tokenp[4].token =3D=3D tUNUMBER) {
+ /* ISO 8601 format. yyyy-mm-dd. */
+ gds->HaveYear++;
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ gds->Year =3D gds->tokenp[0].value;
+ gds->Month =3D gds->tokenp[2].value;
+ gds->Day =3D gds->tokenp[4].value;
+ gds->tokenp +=3D 5;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D '-'
+ && gds->tokenp[2].token =3D=3D tMONTH
+ && gds->tokenp[3].token =3D=3D '-'
+ && gds->tokenp[4].token =3D=3D tUNUMBER) {
+ gds->HaveYear++;
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ if (gds->tokenp[0].value > 31) {
+ /* e.g. 1992-Jun-17 */
+ gds->Year =3D gds->tokenp[0].value;
+ gds->Month =3D gds->tokenp[2].value;
+ gds->Day =3D gds->tokenp[4].value;
+ } else {
+ /* e.g. 17-JUN-1992. */
+ gds->Day =3D gds->tokenp[0].value;
+ gds->Month =3D gds->tokenp[2].value;
+ gds->Year =3D gds->tokenp[4].value;
+ }
+ gds->tokenp +=3D 5;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tMONTH
+ && gds->tokenp[1].token =3D=3D tUNUMBER
+ && gds->tokenp[2].token =3D=3D ','
+ && gds->tokenp[3].token =3D=3D tUNUMBER) {
+ /* "June 17, 2001" */
+ gds->HaveYear++;
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ gds->Month =3D gds->tokenp[0].value;
+ gds->Day =3D gds->tokenp[1].value;
+ gds->Year =3D gds->tokenp[3].value;
+ gds->tokenp +=3D 4;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tMONTH
+ && gds->tokenp[1].token =3D=3D tUNUMBER) {
+ /* "May 3" */
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ gds->Month =3D gds->tokenp[0].value;
+ gds->Day =3D gds->tokenp[1].value;
+ gds->tokenp +=3D 2;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D tMONTH
+ && gds->tokenp[2].token =3D=3D tUNUMBER) {
+ /* "12 Sept 1997" */
+ gds->HaveYear++;
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ gds->Day =3D gds->tokenp[0].value;
+ gds->Month =3D gds->tokenp[1].value;
+ gds->Year =3D gds->tokenp[2].value;
+ gds->tokenp +=3D 3;
+ return 1;
+ }
+
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D tMONTH) {
+ /* "12 Sept" */
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ gds->Day =3D gds->tokenp[0].value;
+ gds->Month =3D gds->tokenp[1].value;
+ gds->tokenp +=3D 2;
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
+ * Relative time phrase: "tomorrow", "yesterday", "+1 hour", etc.
+ */
+static int
+relunitphrase(struct gdstate *gds)
+{
+ if (gds->tokenp[0].token =3D=3D '-'
+ && gds->tokenp[1].token =3D=3D tUNUMBER
+ && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
+ /* "-3 hours" */
+ gds->HaveRel++;
+ gds->RelSeconds -=3D gds->tokenp[1].value * gds->tokenp[2].value;
+ gds->tokenp +=3D 3;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D '+'
+ && gds->tokenp[1].token =3D=3D tUNUMBER
+ && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
+ /* "+1 minute" */
+ gds->HaveRel++;
+ gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
+ gds->tokenp +=3D 3;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D tSEC_UNIT) {
+ /* "1 day" */
+ gds->HaveRel++;
+ gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
+ gds->tokenp +=3D 3;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D '-'
+ && gds->tokenp[1].token =3D=3D tUNUMBER
+ && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
+ /* "-3 months" */
+ gds->HaveRel++;
+ gds->RelMonth -=3D gds->tokenp[1].value * gds->tokenp[2].value;
+ gds->tokenp +=3D 3;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D '+'
+ && gds->tokenp[1].token =3D=3D tUNUMBER
+ && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
+ /* "+5 years" */
+ gds->HaveRel++;
+ gds->RelMonth +=3D gds->tokenp[1].value * gds->tokenp[2].value;
+ gds->tokenp +=3D 3;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D tMONTH_UNIT) {
+ /* "2 years" */
+ gds->HaveRel++;
+ gds->RelMonth +=3D gds->tokenp[0].value * gds->tokenp[1].value;
+ gds->tokenp +=3D 2;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D tSEC_UNIT) {
+ /* "now", "tomorrow" */
+ gds->HaveRel++;
+ gds->RelSeconds +=3D gds->tokenp[0].value;
+ ++gds->tokenp;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D tMONTH_UNIT) {
+ /* "month" */
+ gds->HaveRel++;
+ gds->RelMonth +=3D gds->tokenp[0].value;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Day of the week specification.
+ */
+static int
+dayphrase(struct gdstate *gds)
+{
+ if (gds->tokenp[0].token =3D=3D tDAY) {
+ /* "tues", "wednesday," */
+ gds->HaveWeekDay++;
+ gds->DayOrdinal =3D 1;
+ gds->DayNumber =3D gds->tokenp[0].value;
+ gds->tokenp +=3D 1;
+ if (gds->tokenp[0].token =3D=3D ',')
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+ if (gds->tokenp[0].token =3D=3D tUNUMBER
+ && gds->tokenp[1].token =3D=3D tDAY) {
+ /* "second tues" "3 wed" */
+ gds->HaveWeekDay++;
+ gds->DayOrdinal =3D gds->tokenp[0].value;
+ gds->DayNumber =3D gds->tokenp[1].value;
+ gds->tokenp +=3D 2;
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Try to match a phrase using one of the above functions.
+ * This layer also deals with a couple of generic issues.
+ */
+static int
+phrase(struct gdstate *gds)
+{
+ if (timephrase(gds))
+ return 1;
+ if (zonephrase(gds))
+ return 1;
+ if (datephrase(gds))
+ return 1;
+ if (dayphrase(gds))
+ return 1;
+ if (relunitphrase(gds)) {
+ if (gds->tokenp[0].token =3D=3D tAGO) {
+ gds->RelSeconds =3D -gds->RelSeconds;
+ gds->RelMonth =3D -gds->RelMonth;
+ gds->tokenp +=3D 1;
+ }
+ return 1;
+ }
+
+ /* Bare numbers sometimes have meaning. */
+ if (gds->tokenp[0].token =3D=3D tUNUMBER) {
+ if (gds->HaveTime && !gds->HaveYear && !gds->HaveRel) {
+ gds->HaveYear++;
+ gds->Year =3D gds->tokenp[0].value;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+
+ if(gds->tokenp[0].value > 10000) {
+ /* "20040301" */
+ gds->HaveYear++;
+ gds->HaveMonth++;
+ gds->HaveDay++;
+ gds->Day=3D (gds->tokenp[0].value)%100;
+ gds->Month=3D (gds->tokenp[0].value/100)%100;
+ gds->Year =3D gds->tokenp[0].value/10000;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+
+ if (gds->tokenp[0].value < 24) {
+ gds->HaveTime++;
+ gds->Hour =3D gds->tokenp[0].value;
+ gds->Minutes =3D 0;
+ gds->Seconds =3D 0;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+
+ if ((gds->tokenp[0].value / 100 < 24)
+ && (gds->tokenp[0].value % 100 < 60)) {
+ /* "513" is same as "5:13" */
+ gds->Hour =3D gds->tokenp[0].value / 100;
+ gds->Minutes =3D gds->tokenp[0].value % 100;
+ gds->Seconds =3D 0;
+ gds->tokenp +=3D 1;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * A dictionary of time words.
+ */
+static struct LEXICON {
+ size_t abbrev;
+ const char *name;
+ int type;
+ time_t value;
+} const TimeWords[] =3D {
+ /* am/pm */
+ { 0, "am", tAMPM, tAM },
+ { 0, "pm", tAMPM, tPM },
+
+ /* Month names. */
+ { 3, "january", tMONTH, 1 },
+ { 3, "february", tMONTH, 2 },
+ { 3, "march", tMONTH, 3 },
+ { 3, "april", tMONTH, 4 },
+ { 3, "may", tMONTH, 5 },
+ { 3, "june", tMONTH, 6 },
+ { 3, "july", tMONTH, 7 },
+ { 3, "august", tMONTH, 8 },
+ { 3, "september", tMONTH, 9 },
+ { 3, "october", tMONTH, 10 },
+ { 3, "november", tMONTH, 11 },
+ { 3, "december", tMONTH, 12 },
+
+ /* Days of the week. */
+ { 2, "sunday", tDAY, 0 },
+ { 3, "monday", tDAY, 1 },
+ { 2, "tuesday", tDAY, 2 },
+ { 3, "wednesday", tDAY, 3 },
+ { 2, "thursday", tDAY, 4 },
+ { 2, "friday", tDAY, 5 },
+ { 2, "saturday", tDAY, 6 },
+
+ /* Timezones: Offsets are in seconds. */
+ { 0, "gmt", tZONE, 0*HOUR }, /* Greenwich Mean */
+ { 0, "ut", tZONE, 0*HOUR }, /* Universal (Coordinated) */
+ { 0, "utc", tZONE, 0*HOUR },
+ { 0, "wet", tZONE, 0*HOUR }, /* Western European */
+ { 0, "bst", tDAYZONE, 0*HOUR }, /* British Summer */
+ { 0, "wat", tZONE, 1*HOUR }, /* West Africa */
+ { 0, "at", tZONE, 2*HOUR }, /* Azores */
+ /* { 0, "bst", tZONE, 3*HOUR }, */ /* Brazil Standard: Conflict */
+ /* { 0, "gst", tZONE, 3*HOUR }, */ /* Greenland Standard: Conflict*/
+ { 0, "nft", tZONE, 3*HOUR+30*MINUTE }, /* Newfoundland */
+ { 0, "nst", tZONE, 3*HOUR+30*MINUTE }, /* Newfoundland Standard */
+ { 0, "ndt", tDAYZONE, 3*HOUR+30*MINUTE }, /* Newfoundland Daylight */
+ { 0, "ast", tZONE, 4*HOUR }, /* Atlantic Standard */
+ { 0, "adt", tDAYZONE, 4*HOUR }, /* Atlantic Daylight */
+ { 0, "est", tZONE, 5*HOUR }, /* Eastern Standard */
+ { 0, "edt", tDAYZONE, 5*HOUR }, /* Eastern Daylight */
+ { 0, "cst", tZONE, 6*HOUR }, /* Central Standard */
+ { 0, "cdt", tDAYZONE, 6*HOUR }, /* Central Daylight */
+ { 0, "mst", tZONE, 7*HOUR }, /* Mountain Standard */
+ { 0, "mdt", tDAYZONE, 7*HOUR }, /* Mountain Daylight */
+ { 0, "pst", tZONE, 8*HOUR }, /* Pacific Standard */
+ { 0, "pdt", tDAYZONE, 8*HOUR }, /* Pacific Daylight */
+ { 0, "yst", tZONE, 9*HOUR }, /* Yukon Standard */
+ { 0, "ydt", tDAYZONE, 9*HOUR }, /* Yukon Daylight */
+ { 0, "hst", tZONE, 10*HOUR }, /* Hawaii Standard */
+ { 0, "hdt", tDAYZONE, 10*HOUR }, /* Hawaii Daylight */
+ { 0, "cat", tZONE, 10*HOUR }, /* Central Alaska */
+ { 0, "ahst", tZONE, 10*HOUR }, /* Alaska-Hawaii Standard */
+ { 0, "nt", tZONE, 11*HOUR }, /* Nome */
+ { 0, "idlw", tZONE, 12*HOUR }, /* Intl Date Line West */
+ { 0, "cet", tZONE, -1*HOUR }, /* Central European */
+ { 0, "met", tZONE, -1*HOUR }, /* Middle European */
+ { 0, "mewt", tZONE, -1*HOUR }, /* Middle European Winter */
+ { 0, "mest", tDAYZONE, -1*HOUR }, /* Middle European Summer */
+ { 0, "swt", tZONE, -1*HOUR }, /* Swedish Winter */
+ { 0, "sst", tDAYZONE, -1*HOUR }, /* Swedish Summer */
+ { 0, "fwt", tZONE, -1*HOUR }, /* French Winter */
+ { 0, "fst", tDAYZONE, -1*HOUR }, /* French Summer */
+ { 0, "eet", tZONE, -2*HOUR }, /* Eastern Eur, USSR Zone 1 */
+ { 0, "bt", tZONE, -3*HOUR }, /* Baghdad, USSR Zone 2 */
+ { 0, "it", tZONE, -3*HOUR-30*MINUTE },/* Iran */
+ { 0, "zp4", tZONE, -4*HOUR }, /* USSR Zone 3 */
+ { 0, "zp5", tZONE, -5*HOUR }, /* USSR Zone 4 */
+ { 0, "ist", tZONE, -5*HOUR-30*MINUTE },/* Indian Standard */
+ { 0, "zp6", tZONE, -6*HOUR }, /* USSR Zone 5 */
+ /* { 0, "nst", tZONE, -6.5*HOUR }, */ /* North Sumatra: Conflict */
+ /* { 0, "sst", tZONE, -7*HOUR }, */ /* So Sumatra, USSR 6: Conflict */
+ { 0, "wast", tZONE, -7*HOUR }, /* West Australian Standard */
+ { 0, "wadt", tDAYZONE, -7*HOUR }, /* West Australian Daylight */
+ { 0, "jt", tZONE, -7*HOUR-30*MINUTE },/* Java (3pm in Cronusland!)*/
+ { 0, "cct", tZONE, -8*HOUR }, /* China Coast, USSR Zone 7 */
+ { 0, "jst", tZONE, -9*HOUR }, /* Japan Std, USSR Zone 8 */
+ { 0, "cast", tZONE, -9*HOUR-30*MINUTE },/* Ctrl Australian Std */
+ { 0, "cadt", tDAYZONE, -9*HOUR-30*MINUTE },/* Ctrl Australian Daylt */
+ { 0, "east", tZONE, -10*HOUR }, /* Eastern Australian Std */
+ { 0, "eadt", tDAYZONE, -10*HOUR }, /* Eastern Australian Daylt */
+ { 0, "gst", tZONE, -10*HOUR }, /* Guam Std, USSR Zone 9 */
+ { 0, "nzt", tZONE, -12*HOUR }, /* New Zealand */
+ { 0, "nzst", tZONE, -12*HOUR }, /* New Zealand Standard */
+ { 0, "nzdt", tDAYZONE, -12*HOUR }, /* New Zealand Daylight */
+ { 0, "idle", tZONE, -12*HOUR }, /* Intl Date Line East */
+
+ { 0, "dst", tDST, 0 },
+
+ /* Time units. */
+ { 4, "years", tMONTH_UNIT, 12 },
+ { 5, "months", tMONTH_UNIT, 1 },
+ { 9, "fortnights", tSEC_UNIT, 14 * DAY },
+ { 4, "weeks", tSEC_UNIT, 7 * DAY },
+ { 3, "days", tSEC_UNIT, DAY },
+ { 4, "hours", tSEC_UNIT, HOUR },
+ { 3, "minutes", tSEC_UNIT, MINUTE },
+ { 3, "seconds", tSEC_UNIT, 1 },
+
+ /* Relative-time words. */
+ { 0, "tomorrow", tSEC_UNIT, DAY },
+ { 0, "yesterday", tSEC_UNIT, -DAY },
+ { 0, "today", tSEC_UNIT, 0 },
+ { 0, "now", tSEC_UNIT, 0 },
+ { 0, "last", tUNUMBER, -1 },
+ { 0, "this", tSEC_UNIT, 0 },
+ { 0, "next", tUNUMBER, 2 },
+ { 0, "first", tUNUMBER, 1 },
+ { 0, "1st", tUNUMBER, 1 },
+/* { 0, "second", tUNUMBER, 2 }, */
+ { 0, "2nd", tUNUMBER, 2 },
+ { 0, "third", tUNUMBER, 3 },
+ { 0, "3rd", tUNUMBER, 3 },
+ { 0, "fourth", tUNUMBER, 4 },
+ { 0, "4th", tUNUMBER, 4 },
+ { 0, "fifth", tUNUMBER, 5 },
+ { 0, "5th", tUNUMBER, 5 },
+ { 0, "sixth", tUNUMBER, 6 },
+ { 0, "seventh", tUNUMBER, 7 },
+ { 0, "eighth", tUNUMBER, 8 },
+ { 0, "ninth", tUNUMBER, 9 },
+ { 0, "tenth", tUNUMBER, 10 },
+ { 0, "eleventh", tUNUMBER, 11 },
+ { 0, "twelfth", tUNUMBER, 12 },
+ { 0, "ago", tAGO, 1 },
+
+ /* Military timezones. */
+ { 0, "a", tZONE, 1*HOUR },
+ { 0, "b", tZONE, 2*HOUR },
+ { 0, "c", tZONE, 3*HOUR },
+ { 0, "d", tZONE, 4*HOUR },
+ { 0, "e", tZONE, 5*HOUR },
+ { 0, "f", tZONE, 6*HOUR },
+ { 0, "g", tZONE, 7*HOUR },
+ { 0, "h", tZONE, 8*HOUR },
+ { 0, "i", tZONE, 9*HOUR },
+ { 0, "k", tZONE, 10*HOUR },
+ { 0, "l", tZONE, 11*HOUR },
+ { 0, "m", tZONE, 12*HOUR },
+ { 0, "n", tZONE, -1*HOUR },
+ { 0, "o", tZONE, -2*HOUR },
+ { 0, "p", tZONE, -3*HOUR },
+ { 0, "q", tZONE, -4*HOUR },
+ { 0, "r", tZONE, -5*HOUR },
+ { 0, "s", tZONE, -6*HOUR },
+ { 0, "t", tZONE, -7*HOUR },
+ { 0, "u", tZONE, -8*HOUR },
+ { 0, "v", tZONE, -9*HOUR },
+ { 0, "w", tZONE, -10*HOUR },
+ { 0, "x", tZONE, -11*HOUR },
+ { 0, "y", tZONE, -12*HOUR },
+ { 0, "z", tZONE, 0*HOUR },
+
+ /* End of table. */
+ { 0, NULL, 0, 0 }
+};
+
+/*
+ * Year is either:
+ * =3D A number from 0 to 99, which means a year from 1970 to 2069, or
+ * =3D The actual year (>=3D100).
+ */
+static time_t
+Convert(time_t Month, time_t Day, time_t Year,
+ time_t Hours, time_t Minutes, time_t Seconds,
+ time_t Timezone, enum DSTMODE DSTmode)
+{
+ static int DaysInMonth[12] =3D {
+ 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+ };
+ time_t Julian;
+ int i;
+
+ if (Year < 69)
+ Year +=3D 2000;
+ else if (Year < 100)
+ Year +=3D 1900;
+ DaysInMonth[1] =3D Year % 4 =3D=3D 0 && (Year % 100 !=3D 0 || Year % 400 =
=3D=3D 0)
+ ? 29 : 28;
+ /* Checking for 2038 bogusly assumes that time_t is 32 bits. But
+ I'm too lazy to try to check for time_t overflow in another way. */
+ if (Year < EPOCH || Year > 2038
+ || Month < 1 || Month > 12
+ /* Lint fluff: "conversion from long may lose accuracy" */
+ || Day < 1 || Day > DaysInMonth[(int)--Month]
+ || Hours < 0 || Hours > 23
+ || Minutes < 0 || Minutes > 59
+ || Seconds < 0 || Seconds > 59)
+ return -1;
+
+ Julian =3D Day - 1;
+ for (i =3D 0; i < Month; i++)
+ Julian +=3D DaysInMonth[i];
+ for (i =3D EPOCH; i < Year; i++)
+ Julian +=3D 365 + (i % 4 =3D=3D 0);
+ Julian *=3D DAY;
+ Julian +=3D Timezone;
+ Julian +=3D Hours * HOUR + Minutes * MINUTE + Seconds;
+ if (DSTmode =3D=3D DSTon
+ || (DSTmode =3D=3D DSTmaybe && localtime(&Julian)->tm_isdst))
+ Julian -=3D HOUR;
+ return Julian;
+}
+
+
+static time_t
+DSTcorrect(time_t Start, time_t Future)
+{
+ time_t StartDay;
+ time_t FutureDay;
+
+ StartDay =3D (localtime(&Start)->tm_hour + 1) % 24;
+ FutureDay =3D (localtime(&Future)->tm_hour + 1) % 24;
+ return (Future - Start) + (StartDay - FutureDay) * HOUR;
+}
+
+
+static time_t
+RelativeDate(time_t Start, time_t zone, int dstmode,
+ time_t DayOrdinal, time_t DayNumber)
+{
+ struct tm *tm;
+ time_t t, now;
+
+ t =3D Start - zone;
+ tm =3D gmtime(&t);
+ now =3D Start;
+ now +=3D DAY * ((DayNumber - tm->tm_wday + 7) % 7);
+ now +=3D 7 * DAY * (DayOrdinal <=3D 0 ? DayOrdinal : DayOrdinal - 1);
+ if (dstmode =3D=3D DSTmaybe)
+ return DSTcorrect(Start, now);
+ return now - Start;
+}
+
+
+static time_t
+RelativeMonth(time_t Start, time_t Timezone, time_t RelMonth)
+{
+ struct tm *tm;
+ time_t Month;
+ time_t Year;
+
+ if (RelMonth =3D=3D 0)
+ return 0;
+ tm =3D localtime(&Start);
+ Month =3D 12 * (tm->tm_year + 1900) + tm->tm_mon + RelMonth;
+ Year =3D Month / 12;
+ Month =3D Month % 12 + 1;
+ return DSTcorrect(Start,
+ Convert(Month, (time_t)tm->tm_mday, Year,
+ (time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec,
+ Timezone, DSTmaybe));
+}
+
+/*
+ * Tokenizer.
+ */
+static int
+nexttoken(char **in, time_t *value)
+{
+ char c;
+ char buff[64];
+
+ for ( ; ; ) {
+ while (isspace((unsigned char)**in))
+ ++*in;
+
+ /* Skip parenthesized comments. */
+ if (**in =3D=3D '(') {
+ int Count =3D 0;
+ do {
+ c =3D *(*in)++;
+ if (c =3D=3D '\0')
+ return c;
+ if (c =3D=3D '(')
+ Count++;
+ else if (c =3D=3D ')')
+ Count--;
+ } while (Count > 0);
+ continue;
+ }
+
+ /* Try the next token in the word table first. */
+ /* This allows us to match "2nd", for example. */
+ {
+ char *src =3D *in;
+ const struct LEXICON *tp;
+ unsigned i =3D 0;
+
+ /* Force to lowercase and strip '.' characters. */
+ while (*src !=3D '\0'
+ && (isalnum((unsigned char)*src) || *src =3D=3D '.')
+ && i < sizeof(buff)-1) {
+ if (*src !=3D '.') {
+ if (isupper((unsigned char)*src))
+ buff[i++] =3D tolower((unsigned char)*src);
+ else
+ buff[i++] =3D *src;
+ }
+ src++;
+ }
+ buff[i] =3D '\0';
+
+ /*
+ * Find the first match. If the word can be
+ * abbreviated, make sure we match at least
+ * the minimum abbreviation.
+ */
+ for (tp =3D TimeWords; tp->name; tp++) {
+ size_t abbrev =3D tp->abbrev;
+ if (abbrev =3D=3D 0)
+ abbrev =3D strlen(tp->name);
+ if (strlen(buff) >=3D abbrev
+ && strncmp(tp->name, buff, strlen(buff))
+ =3D=3D 0) {
+ /* Skip over token. */
+ *in =3D src;
+ /* Return the match. */
+ *value =3D tp->value;
+ return tp->type;
+ }
+ }
+ }
+
+ /*
+ * Not in the word table, maybe it's a number. Note:
+ * Because '-' and '+' have other special meanings, I
+ * don't deal with signed numbers here.
+ */
+ if (isdigit((unsigned char)(c =3D **in))) {
+ for (*value =3D 0; isdigit((unsigned char)(c =3D *(*in)++)); )
+ *value =3D 10 * *value + c - '0';
+ (*in)--;
+ return (tUNUMBER);
+ }
+
+ return *(*in)++;
+ }
+}
+
+#define TM_YEAR_ORIGIN 1900
+
+/* Yield A - B, measured in seconds. */
+static long
+difftm (struct tm *a, struct tm *b)
+{
+ int ay =3D a->tm_year + (TM_YEAR_ORIGIN - 1);
+ int by =3D b->tm_year + (TM_YEAR_ORIGIN - 1);
+ int days =3D (
+ /* difference in day of year */
+ a->tm_yday - b->tm_yday
+ /* + intervening leap days */
+ + ((ay >> 2) - (by >> 2))
+ - (ay/100 - by/100)
+ + ((ay/100 >> 2) - (by/100 >> 2))
+ /* + difference in years * 365 */
+ + (long)(ay-by) * 365
+ );
+ return (days * DAY + (a->tm_hour - b->tm_hour) * HOUR
+ + (a->tm_min - b->tm_min) * MINUTE
+ + (a->tm_sec - b->tm_sec));
+}
+
+/*
+ *
+ * The public function.
+ *
+ * TODO: tokens[] array should be dynamically sized.
+ */
+time_t
+__archive_get_date(time_t now, char *p)
+{
+ struct token tokens[256];
+ struct gdstate _gds;
+ struct token *lasttoken;
+ struct gdstate *gds;
+ struct tm local, *tm;
+ struct tm gmt, *gmt_ptr;
+ time_t Start;
+ time_t tod;
+ long tzone;
+
+ /* Clear out the parsed token array. */
+ memset(tokens, 0, sizeof(tokens));
+ /* Initialize the parser state. */
+ memset(&_gds, 0, sizeof(_gds));
+ gds =3D &_gds;
+
+ /* Look up the current time. */
+ memset(&local, 0, sizeof(local));
+ tm =3D localtime (&now);
+ if (tm =3D=3D NULL)
+ return -1;
+ local =3D *tm;
+
+ /* Look up UTC if we can and use that to determine the current
+ * timezone offset. */
+ memset(&gmt, 0, sizeof(gmt));
+ gmt_ptr =3D gmtime (&now);
+ if (gmt_ptr !=3D NULL) {
+ /* Copy, in case localtime and gmtime use the same buffer. */
+ gmt =3D *gmt_ptr;
+ }
+ if (gmt_ptr !=3D NULL)
+ tzone =3D difftm (&gmt, &local);
+ else
+ /* This system doesn't understand timezones; fake it. */
+ tzone =3D 0;
+ if(local.tm_isdst)
+ tzone +=3D HOUR;
+
+ /* Tokenize the input string. */
+ lasttoken =3D tokens;
+ while ((lasttoken->token =3D nexttoken(&p, &lasttoken->value)) !=3D 0) {
+ ++lasttoken;
+ if (lasttoken > tokens + 255)
+ return -1;
+ }
+ gds->tokenp =3D tokens;
+
+ /* Match phrases until we run out of input tokens. */
+ while (gds->tokenp < lasttoken) {
+ if (!phrase(gds))
+ return -1;
+ }
+
+ /* Use current local timezone if none was specified. */
+ if (!gds->HaveZone) {
+ gds->Timezone =3D tzone;
+ gds->DSTmode =3D DSTmaybe;
+ }
+
+ /* If a timezone was specified, use that for generating the default
+ * time components instead of the local timezone. */
+ if (gds->HaveZone && gmt_ptr !=3D NULL) {
+ now -=3D gds->Timezone;
+ gmt_ptr =3D gmtime (&now);
+ if (gmt_ptr !=3D NULL)
+ local =3D *gmt_ptr;
+ now +=3D gds->Timezone;
+ }
+
+ if (!gds->HaveYear)
+ gds->Year =3D local.tm_year + 1900;
+ if (!gds->HaveMonth)
+ gds->Month =3D local.tm_mon + 1;
+ if (!gds->HaveDay)
+ gds->Day =3D local.tm_mday;
+ /* Note: No default for hour/min/sec; a specifier that just
+ * gives date always refers to 00:00 on that date. */
+
+ /* If we saw more than one time, timezone, weekday, year, month,
+ * or day, then give up. */
+ if (gds->HaveTime > 1 || gds->HaveZone > 1 || gds->HaveWeekDay > 1
+ || gds->HaveYear > 1 || gds->HaveMonth > 1 || gds->HaveDay > 1)
+ return -1;
+
+ /* Compute an absolute time based on whatever absolute information
+ * we collected. */
+ if (gds->HaveYear || gds->HaveMonth || gds->HaveDay
+ || gds->HaveTime || gds->HaveWeekDay) {
+ Start =3D Convert(gds->Month, gds->Day, gds->Year,
+ gds->Hour, gds->Minutes, gds->Seconds,
+ gds->Timezone, gds->DSTmode);
+ if (Start < 0)
+ return -1;
+ } else {
+ Start =3D now;
+ if (!gds->HaveRel)
+ Start -=3D local.tm_hour * HOUR + local.tm_min * MINUTE
+ + local.tm_sec;
+ }
+
+ /* Add the relative offset. */
+ Start +=3D gds->RelSeconds;
+ Start +=3D RelativeMonth(Start, gds->Timezone, gds->RelMonth);
+
+ /* Adjust for day-of-week offsets. */
+ if (gds->HaveWeekDay
+ && !(gds->HaveYear || gds->HaveMonth || gds->HaveDay)) {
+ tod =3D RelativeDate(Start, gds->Timezone,
+ gds->DSTmode, gds->DayOrdinal, gds->DayNumber);
+ Start +=3D tod;
+ }
+
+ /* -1 is an error indicator, so return 0 instead of -1 if
+ * that's the actual time. */
+ return Start =3D=3D -1 ? 0 : Start;
+}
+
+
+#if defined(TEST)
+
+/* ARGSUSED */
+int
+main(int argc, char **argv)
+{
+ time_t d;
+
+ while (*++argv !=3D NULL) {
+ (void)printf("Input: %s\n", *argv);
+ d =3D get_date(*argv);
+ if (d =3D=3D -1)
+ (void)printf("Bad format - couldn't convert.\n");
+ else
+ (void)printf("Output: %s\n", ctime(&d));
+ }
+ exit(0);
+ /* NOTREACHED */
+}
+#endif /* defined(TEST) */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_match.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_match.c Fri Aug 10 14:19:2=
5 2012 +0300
@@ -0,0 +1,1836 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2012 Michihiro NAKAJIMA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "archive_platform.h"
+__FBSDID("$FreeBSD$");
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "archive.h"
+#include "archive_private.h"
+#include "archive_entry.h"
+#include "archive_pathmatch.h"
+#include "archive_rb.h"
+#include "archive_string.h"
+
+struct match {
+ struct match *next;
+ int matches;
+ struct archive_mstring pattern;
+};
+
+struct match_list {
+ struct match *first;
+ struct match **last;
+ int count;
+ int unmatched_count;
+ struct match *unmatched_next;
+ int unmatched_eof;
+};
+
+struct match_file {
+ struct archive_rb_node node;
+ struct match_file *next;
+ struct archive_mstring pathname;
+ int flag;
+ time_t mtime_sec;
+ long mtime_nsec;
+ time_t ctime_sec;
+ long ctime_nsec;
+};
+
+struct entry_list {
+ struct match_file *first;
+ struct match_file **last;
+ int count;
+};
+
+struct id_array {
+ size_t size;/* Allocated size */
+ size_t count;
+ int64_t *ids;
+};
+
+#define PATTERN_IS_SET 1
+#define TIME_IS_SET 2
+#define ID_IS_SET 4
+
+struct archive_match {
+ struct archive archive;
+
+ /* exclusion/inclusion set flag. */
+ int setflag;
+
+ /*
+ * Matching filename patterns.
+ */
+ struct match_list exclusions;
+ struct match_list inclusions;
+
+ /*
+ * Matching time stamps.
+ */
+ time_t now;
+ int newer_mtime_filter;
+ time_t newer_mtime_sec;
+ long newer_mtime_nsec;
+ int newer_ctime_filter;
+ time_t newer_ctime_sec;
+ long newer_ctime_nsec;
+ int older_mtime_filter;
+ time_t older_mtime_sec;
+ long older_mtime_nsec;
+ int older_ctime_filter;
+ time_t older_ctime_sec;
+ long older_ctime_nsec;
+ /*
+ * Matching time stamps with its filename.
+ */
+ struct archive_rb_tree exclusion_tree;
+ struct entry_list exclusion_entry_list;
+
+ /*
+ * Matching file owners.
+ */
+ struct id_array inclusion_uids;
+ struct id_array inclusion_gids;
+ struct match_list inclusion_unames;
+ struct match_list inclusion_gnames;
+};
+
+static int add_pattern_from_file(struct archive_match *,
+ struct match_list *, int, const void *, int);
+static int add_entry(struct archive_match *, int,
+ struct archive_entry *);
+static int add_owner_id(struct archive_match *, struct id_array *,
+ int64_t);
+static int add_owner_name(struct archive_match *, struct match_list *,
+ int, const void *);
+static int add_pattern_mbs(struct archive_match *, struct match_list *,
+ const char *);
+static int add_pattern_wcs(struct archive_match *, struct match_list *,
+ const wchar_t *);
+static int cmp_key_mbs(const struct archive_rb_node *, const void *);
+static int cmp_key_wcs(const struct archive_rb_node *, const void *);
+static int cmp_node_mbs(const struct archive_rb_node *,
+ const struct archive_rb_node *);
+static int cmp_node_wcs(const struct archive_rb_node *,
+ const struct archive_rb_node *);
+static void entry_list_add(struct entry_list *, struct match_file *);
+static void entry_list_free(struct entry_list *);
+static void entry_list_init(struct entry_list *);
+static int error_nomem(struct archive_match *);
+static void match_list_add(struct match_list *, struct match *);
+static void match_list_free(struct match_list *);
+static void match_list_init(struct match_list *);
+static int match_list_unmatched_inclusions_next(struct archive_match *,
+ struct match_list *, int, const void **);
+static int match_owner_id(struct id_array *, int64_t);
+#if !defined(_WIN32) || defined(__CYGWIN__)
+static int match_owner_name_mbs(struct archive_match *,
+ struct match_list *, const char *);
+#else
+static int match_owner_name_wcs(struct archive_match *,
+ struct match_list *, const wchar_t *);
+#endif
+static int match_path_exclusion(struct archive_match *,
+ struct match *, int, const void *);
+static int match_path_inclusion(struct archive_match *,
+ struct match *, int, const void *);
+static int owner_excluded(struct archive_match *,
+ struct archive_entry *);
+static int path_excluded(struct archive_match *, int, const void *);
+static int set_timefilter(struct archive_match *, int, time_t, long,
+ time_t, long);
+static int set_timefilter_pathname_mbs(struct archive_match *,
+ int, const char *);
+static int set_timefilter_pathname_wcs(struct archive_match *,
+ int, const wchar_t *);
+static int set_timefilter_date(struct archive_match *, int, const char *);
+static int set_timefilter_date_w(struct archive_match *, int,
+ const wchar_t *);
+static int time_excluded(struct archive_match *,
+ struct archive_entry *);
+static int validate_time_flag(struct archive *, int, const char *);
+
+time_t __archive_get_date(time_t now, const char *);
+#define get_date __archive_get_date
+
+static const struct archive_rb_tree_ops rb_ops_mbs =3D {
+ cmp_node_mbs, cmp_key_mbs
+};
+
+static const struct archive_rb_tree_ops rb_ops_wcs =3D {
+ cmp_node_wcs, cmp_key_wcs
+};
+
+/*
+ * The matching logic here needs to be re-thought. I started out to
+ * try to mimic gtar's matching logic, but it's not entirely
+ * consistent. In particular 'tar -t' and 'tar -x' interpret patterns
+ * on the command line as anchored, but --exclude doesn't.
+ */
+
+static int
+error_nomem(struct archive_match *a)
+{
+ archive_set_error(&(a->archive), ENOMEM, "No memory");
+ a->archive.state =3D ARCHIVE_STATE_FATAL;
+ return (ARCHIVE_FATAL);
+}
+
+/*
+ * Create an ARCHIVE_MATCH object.
+ */
+struct archive *
+archive_match_new(void)
+{
+ struct archive_match *a;
+
+ a =3D (struct archive_match *)calloc(1, sizeof(*a));
+ if (a =3D=3D NULL)
+ return (NULL);
+ a->archive.magic =3D ARCHIVE_MATCH_MAGIC;
+ a->archive.state =3D ARCHIVE_STATE_NEW;
+ match_list_init(&(a->inclusions));
+ match_list_init(&(a->exclusions));
+ __archive_rb_tree_init(&(a->exclusion_tree), &rb_ops_mbs);
+ entry_list_init(&(a->exclusion_entry_list));
+ match_list_init(&(a->inclusion_unames));
+ match_list_init(&(a->inclusion_gnames));
+ time(&a->now);
+ return (&(a->archive));
+}
+
+/*
+ * Free an ARCHIVE_MATCH object.
+ */
+int
+archive_match_free(struct archive *_a)
+{
+ struct archive_match *a;
+
+ if (_a =3D=3D NULL)
+ return (ARCHIVE_OK);
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_ANY | ARCHIVE_STATE_FATAL, "archive_match_free");
+ a =3D (struct archive_match *)_a;
+ match_list_free(&(a->inclusions));
+ match_list_free(&(a->exclusions));
+ entry_list_free(&(a->exclusion_entry_list));
+ free(a->inclusion_uids.ids);
+ free(a->inclusion_gids.ids);
+ match_list_free(&(a->inclusion_unames));
+ match_list_free(&(a->inclusion_gnames));
+ free(a);
+ return (ARCHIVE_OK);
+}
+
+/*
+ * Convenience function to perform all exclusion tests.
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_excluded(struct archive *_a, struct archive_entry *entry)
+{
+ struct archive_match *a;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_excluded_ae");
+
+ a =3D (struct archive_match *)_a;
+ if (entry =3D=3D NULL) {
+ archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+ return (ARCHIVE_FAILED);
+ }
+
+ r =3D 0;
+ if (a->setflag & PATTERN_IS_SET) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ r =3D path_excluded(a, 0, archive_entry_pathname_w(entry));
+#else
+ r =3D path_excluded(a, 1, archive_entry_pathname(entry));
+#endif
+ if (r !=3D 0)
+ return (r);
+ }
+
+ if (a->setflag & TIME_IS_SET) {
+ r =3D time_excluded(a, entry);
+ if (r !=3D 0)
+ return (r);
+ }
+
+ if (a->setflag & ID_IS_SET)
+ r =3D owner_excluded(a, entry);
+ return (r);
+}
+
+/*
+ * Utility functions to manage exclusion/inclusion patterns
+ */
+
+int
+archive_match_exclude_pattern(struct archive *_a, const char *pattern)
+{
+ struct archive_match *a;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_exclude_pattern");
+ a =3D (struct archive_match *)_a;
+
+ if (pattern =3D=3D NULL || *pattern =3D=3D '\0') {
+ archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+ return (ARCHIVE_FAILED);
+ }
+ if ((r =3D add_pattern_mbs(a, &(a->exclusions), pattern)) !=3D ARCHIVE_OK)
+ return (r);
+ return (ARCHIVE_OK);
+}
+
+int
+archive_match_exclude_pattern_w(struct archive *_a, const wchar_t *pattern)
+{
+ struct archive_match *a;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_exclude_pattern_w");
+ a =3D (struct archive_match *)_a;
+
+ if (pattern =3D=3D NULL || *pattern =3D=3D L'\0') {
+ archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+ return (ARCHIVE_FAILED);
+ }
+ if ((r =3D add_pattern_wcs(a, &(a->exclusions), pattern)) !=3D ARCHIVE_OK)
+ return (r);
+ return (ARCHIVE_OK);
+}
+
+int
+archive_match_exclude_pattern_from_file(struct archive *_a,
+ const char *pathname, int nullSeparator)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_exclude_pattern_from_file");
+ a =3D (struct archive_match *)_a;
+
+ return add_pattern_from_file(a, &(a->exclusions), 1, pathname,
+ nullSeparator);
+}
+
+int
+archive_match_exclude_pattern_from_file_w(struct archive *_a,
+ const wchar_t *pathname, int nullSeparator)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_exclude_pattern_from_file_w");
+ a =3D (struct archive_match *)_a;
+
+ return add_pattern_from_file(a, &(a->exclusions), 0, pathname,
+ nullSeparator);
+}
+
+int
+archive_match_include_pattern(struct archive *_a, const char *pattern)
+{
+ struct archive_match *a;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_pattern");
+ a =3D (struct archive_match *)_a;
+
+ if (pattern =3D=3D NULL || *pattern =3D=3D '\0') {
+ archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+ return (ARCHIVE_FAILED);
+ }
+ if ((r =3D add_pattern_mbs(a, &(a->inclusions), pattern)) !=3D ARCHIVE_OK)
+ return (r);
+ return (ARCHIVE_OK);
+}
+
+int
+archive_match_include_pattern_w(struct archive *_a, const wchar_t *pattern)
+{
+ struct archive_match *a;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_pattern_w");
+ a =3D (struct archive_match *)_a;
+
+ if (pattern =3D=3D NULL || *pattern =3D=3D L'\0') {
+ archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+ return (ARCHIVE_FAILED);
+ }
+ if ((r =3D add_pattern_wcs(a, &(a->inclusions), pattern)) !=3D ARCHIVE_OK)
+ return (r);
+ return (ARCHIVE_OK);
+}
+
+int
+archive_match_include_pattern_from_file(struct archive *_a,
+ const char *pathname, int nullSeparator)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_pattern_from_file");
+ a =3D (struct archive_match *)_a;
+
+ return add_pattern_from_file(a, &(a->inclusions), 1, pathname,
+ nullSeparator);
+}
+
+int
+archive_match_include_pattern_from_file_w(struct archive *_a,
+ const wchar_t *pathname, int nullSeparator)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_pattern_from_file_w");
+ a =3D (struct archive_match *)_a;
+
+ return add_pattern_from_file(a, &(a->inclusions), 0, pathname,
+ nullSeparator);
+}
+
+/*
+ * Test functions for pathname patterns.
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_path_excluded(struct archive *_a,
+ struct archive_entry *entry)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_path_excluded");
+
+ a =3D (struct archive_match *)_a;
+ if (entry =3D=3D NULL) {
+ archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+ return (ARCHIVE_FAILED);
+ }
+
+ /* If we don't have exclusion/inclusion pattern set at all,
+ * the entry is always not excluded. */
+ if ((a->setflag & PATTERN_IS_SET) =3D=3D 0)
+ return (0);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ return (path_excluded(a, 0, archive_entry_pathname_w(entry)));
+#else
+ return (path_excluded(a, 1, archive_entry_pathname(entry)));
+#endif
+}
+
+/*
+ * Utilty functions to get statistic information for inclusion patterns.
+ */
+int
+archive_match_path_unmatched_inclusions(struct archive *_a)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_unmatched_inclusions");
+ a =3D (struct archive_match *)_a;
+
+ return (a->inclusions.unmatched_count);
+}
+
+int
+archive_match_path_unmatched_inclusions_next(struct archive *_a,
+ const char **_p)
+{
+ struct archive_match *a;
+ const void *v;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_unmatched_inclusions_next");
+ a =3D (struct archive_match *)_a;
+
+ r =3D match_list_unmatched_inclusions_next(a, &(a->inclusions), 1, &v);
+ *_p =3D (const char *)v;
+ return (r);
+}
+
+int
+archive_match_path_unmatched_inclusions_next_w(struct archive *_a,
+ const wchar_t **_p)
+{
+ struct archive_match *a;
+ const void *v;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_unmatched_inclusions_next_w");
+ a =3D (struct archive_match *)_a;
+
+ r =3D match_list_unmatched_inclusions_next(a, &(a->inclusions), 0, &v);
+ *_p =3D (const wchar_t *)v;
+ return (r);
+}
+
+/*
+ * Add inclusion/exclusion patterns.
+ */
+static int
+add_pattern_mbs(struct archive_match *a, struct match_list *list,
+ const char *pattern)
+{
+ struct match *match;
+ size_t len;
+
+ match =3D calloc(1, sizeof(*match));
+ if (match =3D=3D NULL)
+ return (error_nomem(a));
+ /* Both "foo/" and "foo" should match "foo/bar". */
+ len =3D strlen(pattern);
+ if (len && pattern[len - 1] =3D=3D '/')
+ --len;
+ archive_mstring_copy_mbs_len(&(match->pattern), pattern, len);
+ match_list_add(list, match);
+ a->setflag |=3D PATTERN_IS_SET;
+ return (ARCHIVE_OK);
+}
+
+static int
+add_pattern_wcs(struct archive_match *a, struct match_list *list,
+ const wchar_t *pattern)
+{
+ struct match *match;
+ size_t len;
+
+ match =3D calloc(1, sizeof(*match));
+ if (match =3D=3D NULL)
+ return (error_nomem(a));
+ /* Both "foo/" and "foo" should match "foo/bar". */
+ len =3D wcslen(pattern);
+ if (len && pattern[len - 1] =3D=3D L'/')
+ --len;
+ archive_mstring_copy_wcs_len(&(match->pattern), pattern, len);
+ match_list_add(list, match);
+ a->setflag |=3D PATTERN_IS_SET;
+ return (ARCHIVE_OK);
+}
+
+static int
+add_pattern_from_file(struct archive_match *a, struct match_list *mlist,
+ int mbs, const void *pathname, int nullSeparator)
+{
+ struct archive *ar;
+ struct archive_entry *ae;
+ struct archive_string as;
+ const void *buff;
+ size_t size;
+ int64_t offset;
+ int r;
+
+ ar =3D archive_read_new();=20
+ if (ar =3D=3D NULL) {
+ archive_set_error(&(a->archive), ENOMEM, "No memory");
+ return (ARCHIVE_FATAL);
+ }
+ r =3D archive_read_support_format_raw(ar);
+ if (r !=3D ARCHIVE_OK) {
+ archive_copy_error(&(a->archive), ar);
+ archive_read_free(ar);
+ return (r);
+ }
+ if (mbs)
+ r =3D archive_read_open_filename(ar, pathname, 512*20);
+ else
+ r =3D archive_read_open_filename_w(ar, pathname, 512*20);
+ if (r !=3D ARCHIVE_OK) {
+ archive_copy_error(&(a->archive), ar);
+ archive_read_free(ar);
+ return (r);
+ }
+ r =3D archive_read_next_header(ar, &ae);
+ if (r !=3D ARCHIVE_OK) {
+ archive_copy_error(&(a->archive), ar);
+ archive_read_free(ar);
+ return (r);
+ }
+
+ archive_string_init(&as);
+
+ while ((r =3D archive_read_data_block(ar, &buff, &size, &offset))
+ =3D=3D ARCHIVE_OK) {
+ const char *b =3D (const char *)buff;
+
+ while (size) {
+ const char *s =3D (const char *)b;
+ size_t length =3D 0;
+ int found_separator =3D 0;
+
+ while (length < size) {
+ if (nullSeparator) {
+ if (*b =3D=3D '\0') {
+ found_separator =3D 1;
+ break;
+ }
+ } else {
+ if (*b =3D=3D 0x0d || *b =3D=3D 0x0a) {
+ found_separator =3D 1;
+ break;
+ }
+ }
+ b++;
+ length++;
+ }
+ if (!found_separator) {
+ archive_strncat(&as, s, length);
+ /* Read next data block. */
+ break;
+ }
+ b++;
+ size -=3D length + 1;
+ archive_strncat(&as, s, length);
+
+ /* If the line is not empty, add the pattern. */
+ if (archive_strlen(&as) > 0) {
+ /* Add pattern. */
+ r =3D add_pattern_mbs(a, mlist, as.s);
+ if (r !=3D ARCHIVE_OK) {
+ archive_read_free(ar);
+ archive_string_free(&as);
+ return (r);
+ }
+ archive_string_empty(&as);
+ }
+ }
+ }
+
+ /* If something error happend, report it immediately. */=20
+ if (r < ARCHIVE_OK) {
+ archive_copy_error(&(a->archive), ar);
+ archive_read_free(ar);
+ archive_string_free(&as);
+ return (r);
+ }
+
+ /* If the line is not empty, add the pattern. */
+ if (r =3D=3D ARCHIVE_EOF && archive_strlen(&as) > 0) {
+ /* Add pattern. */
+ r =3D add_pattern_mbs(a, mlist, as.s);
+ if (r !=3D ARCHIVE_OK) {
+ archive_read_free(ar);
+ archive_string_free(&as);
+ return (r);
+ }
+ }
+ archive_read_free(ar);
+ archive_string_free(&as);
+ return (ARCHIVE_OK);
+}
+
+/*
+ * Test if pathname is excluded by inclusion/exclusion patterns.
+ */
+static int
+path_excluded(struct archive_match *a, int mbs, const void *pathname)
+{
+ struct match *match;
+ struct match *matched;
+ int r;
+
+ if (a =3D=3D NULL)
+ return (0);
+
+ /* Mark off any unmatched inclusions. */
+ /* In particular, if a filename does appear in the archive and
+ * is explicitly included and excluded, then we don't report
+ * it as missing even though we don't extract it.
+ */
+ matched =3D NULL;
+ for (match =3D a->inclusions.first; match !=3D NULL;
+ match =3D match->next){
+ if (match->matches =3D=3D 0 &&
+ (r =3D match_path_inclusion(a, match, mbs, pathname)) !=3D 0) {
+ if (r < 0)
+ return (r);
+ a->inclusions.unmatched_count--;
+ match->matches++;
+ matched =3D match;
+ }
+ }
+
+ /* Exclusions take priority */
+ for (match =3D a->exclusions.first; match !=3D NULL;
+ match =3D match->next){
+ r =3D match_path_exclusion(a, match, mbs, pathname);
+ if (r)
+ return (r);
+ }
+
+ /* It's not excluded and we found an inclusion above, so it's
+ * included. */
+ if (matched !=3D NULL)
+ return (0);
+
+
+ /* We didn't find an unmatched inclusion, check the remaining ones. */
+ for (match =3D a->inclusions.first; match !=3D NULL;
+ match =3D match->next){
+ /* We looked at previously-unmatched inclusions already. */
+ if (match->matches > 0 &&
+ (r =3D match_path_inclusion(a, match, mbs, pathname)) !=3D 0) {
+ if (r < 0)
+ return (r);
+ match->matches++;
+ return (0);
+ }
+ }
+
+ /* If there were inclusions, default is to exclude. */
+ if (a->inclusions.first !=3D NULL)
+ return (1);
+
+ /* No explicit inclusions, default is to match. */
+ return (0);
+}
+
+/*
+ * This is a little odd, but it matches the default behavior of
+ * gtar. In particular, 'a*b' will match 'foo/a1111/222b/bar'
+ *
+ */
+static int
+match_path_exclusion(struct archive_match *a, struct match *m,
+ int mbs, const void *pn)
+{
+ int flag =3D PATHMATCH_NO_ANCHOR_START | PATHMATCH_NO_ANCHOR_END;
+ int r;
+
+ if (mbs) {
+ const char *p;
+ r =3D archive_mstring_get_mbs(&(a->archive), &(m->pattern), &p);
+ if (r =3D=3D 0)
+ return (archive_pathmatch(p, (const char *)pn, flag));
+ } else {
+ const wchar_t *p;
+ r =3D archive_mstring_get_wcs(&(a->archive), &(m->pattern), &p);
+ if (r =3D=3D 0)
+ return (archive_pathmatch_w(p, (const wchar_t *)pn,
+ flag));
+ }
+ if (errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ return (0);
+}
+
+/*
+ * Again, mimic gtar: inclusions are always anchored (have to match
+ * the beginning of the path) even though exclusions are not anchored.
+ */
+static int
+match_path_inclusion(struct archive_match *a, struct match *m,
+ int mbs, const void *pn)
+{
+ int flag =3D PATHMATCH_NO_ANCHOR_END;
+ int r;
+
+ if (mbs) {
+ const char *p;
+ r =3D archive_mstring_get_mbs(&(a->archive), &(m->pattern), &p);
+ if (r =3D=3D 0)
+ return (archive_pathmatch(p, (const char *)pn, flag));
+ } else {
+ const wchar_t *p;
+ r =3D archive_mstring_get_wcs(&(a->archive), &(m->pattern), &p);
+ if (r =3D=3D 0)
+ return (archive_pathmatch_w(p, (const wchar_t *)pn,
+ flag));
+ }
+ if (errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ return (0);
+}
+
+static void
+match_list_init(struct match_list *list)
+{
+ list->first =3D NULL;
+ list->last =3D &(list->first);
+ list->count =3D 0;
+}
+
+static void
+match_list_free(struct match_list *list)
+{
+ struct match *p, *q;
+
+ for (p =3D list->first; p !=3D NULL; ) {
+ q =3D p;
+ p =3D p->next;
+ archive_mstring_clean(&(q->pattern));
+ free(q);
+ }
+}
+
+static void
+match_list_add(struct match_list *list, struct match *m)
+{
+ *list->last =3D m;
+ list->last =3D &(m->next);
+ list->count++;
+ list->unmatched_count++;
+}
+
+static int
+match_list_unmatched_inclusions_next(struct archive_match *a,
+ struct match_list *list, int mbs, const void **vp)
+{
+ struct match *m;
+
+ *vp =3D NULL;
+ if (list->unmatched_eof) {
+ list->unmatched_eof =3D 0;
+ return (ARCHIVE_EOF);
+ }
+ if (list->unmatched_next =3D=3D NULL) {
+ if (list->unmatched_count =3D=3D 0)
+ return (ARCHIVE_EOF);
+ list->unmatched_next =3D list->first;
+ }
+
+ for (m =3D list->unmatched_next; m !=3D NULL; m =3D m->next) {
+ int r;
+
+ if (m->matches)
+ continue;
+ if (mbs) {
+ const char *p;
+ r =3D archive_mstring_get_mbs(&(a->archive),
+ &(m->pattern), &p);
+ if (r < 0 && errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ if (p =3D=3D NULL)
+ p =3D "";
+ *vp =3D p;
+ } else {
+ const wchar_t *p;
+ r =3D archive_mstring_get_wcs(&(a->archive),
+ &(m->pattern), &p);
+ if (r < 0 && errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ if (p =3D=3D NULL)
+ p =3D L"";
+ *vp =3D p;
+ }
+ list->unmatched_next =3D m->next;
+ if (list->unmatched_next =3D=3D NULL)
+ /* To return EOF next time. */
+ list->unmatched_eof =3D 1;
+ return (ARCHIVE_OK);
+ }
+ list->unmatched_next =3D NULL;
+ return (ARCHIVE_EOF);
+}
+
+/*
+ * Utility functions to manage inclusion timestamps.
+ */
+int
+archive_match_include_time(struct archive *_a, int flag, time_t sec,
+ long nsec)
+{
+ int r;
+
+ r =3D validate_time_flag(_a, flag, "archive_match_include_time");
+ if (r !=3D ARCHIVE_OK)
+ return (r);
+ return set_timefilter((struct archive_match *)_a, flag,
+ sec, nsec, sec, nsec);
+}
+
+int
+archive_match_include_date(struct archive *_a, int flag,
+ const char *datestr)
+{
+ int r;
+
+ r =3D validate_time_flag(_a, flag, "archive_match_include_date");
+ if (r !=3D ARCHIVE_OK)
+ return (r);
+ return set_timefilter_date((struct archive_match *)_a, flag, datestr);
+}
+
+int
+archive_match_include_date_w(struct archive *_a, int flag,
+ const wchar_t *datestr)
+{
+ int r;
+
+ r =3D validate_time_flag(_a, flag, "archive_match_include_date_w");
+ if (r !=3D ARCHIVE_OK)
+ return (r);
+
+ return set_timefilter_date_w((struct archive_match *)_a, flag, datestr);
+}
+
+int
+archive_match_include_file_time(struct archive *_a, int flag,
+ const char *pathname)
+{
+ int r;
+
+ r =3D validate_time_flag(_a, flag, "archive_match_include_file_time");
+ if (r !=3D ARCHIVE_OK)
+ return (r);
+ return set_timefilter_pathname_mbs((struct archive_match *)_a,
+ flag, pathname);
+}
+
+int
+archive_match_include_file_time_w(struct archive *_a, int flag,
+ const wchar_t *pathname)
+{
+ int r;
+
+ r =3D validate_time_flag(_a, flag, "archive_match_include_file_time_w");
+ if (r !=3D ARCHIVE_OK)
+ return (r);
+ return set_timefilter_pathname_wcs((struct archive_match *)_a,
+ flag, pathname);
+}
+
+int
+archive_match_exclude_entry(struct archive *_a, int flag,
+ struct archive_entry *entry)
+{
+ struct archive_match *a;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_time_include_entry");
+ a =3D (struct archive_match *)_a;
+
+ if (entry =3D=3D NULL) {
+ archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+ return (ARCHIVE_FAILED);
+ }
+ r =3D validate_time_flag(_a, flag, "archive_match_exclude_entry");
+ if (r !=3D ARCHIVE_OK)
+ return (r);
+ return (add_entry(a, flag, entry));
+}
+
+/*
+ * Test function for time stamps.
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_time_excluded(struct archive *_a,
+ struct archive_entry *entry)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_time_excluded_ae");
+
+ a =3D (struct archive_match *)_a;
+ if (entry =3D=3D NULL) {
+ archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+ return (ARCHIVE_FAILED);
+ }
+
+ /* If we don't have inclusion time set at all, the entry is always
+ * not excluded. */
+ if ((a->setflag & TIME_IS_SET) =3D=3D 0)
+ return (0);
+ return (time_excluded(a, entry));
+}
+
+static int
+validate_time_flag(struct archive *_a, int flag, const char *_fn)
+{
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, _fn);
+
+ /* Check a type of time. */
+ if (flag &
+ ((~(ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME)) & 0xff00)) {
+ archive_set_error(_a, EINVAL, "Invalid time flag");
+ return (ARCHIVE_FAILED);
+ }
+ if ((flag & (ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME)) =3D=3D 0) {
+ archive_set_error(_a, EINVAL, "No time flag");
+ return (ARCHIVE_FAILED);
+ }
+
+ /* Check a type of comparison. */
+ if (flag &
+ ((~(ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_OLDER
+ | ARCHIVE_MATCH_EQUAL)) & 0x00ff)) {
+ archive_set_error(_a, EINVAL, "Invalid comparison flag");
+ return (ARCHIVE_FAILED);
+ }
+ if ((flag & (ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_OLDER
+ | ARCHIVE_MATCH_EQUAL)) =3D=3D 0) {
+ archive_set_error(_a, EINVAL, "No comparison flag");
+ return (ARCHIVE_FAILED);
+ }
+
+ return (ARCHIVE_OK);
+}
+
+#define JUST_EQUAL(t) (((t) & (ARCHIVE_MATCH_EQUAL |\
+ ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_OLDER)) =3D=3D ARCHIVE_MATCH_EQUAL)
+static int
+set_timefilter(struct archive_match *a, int timetype,
+ time_t mtime_sec, long mtime_nsec, time_t ctime_sec, long ctime_nsec)
+{
+ if (timetype & ARCHIVE_MATCH_MTIME) {
+ if ((timetype & ARCHIVE_MATCH_NEWER) || JUST_EQUAL(timetype)) {
+ a->newer_mtime_filter =3D timetype;
+ a->newer_mtime_sec =3D mtime_sec;
+ a->newer_mtime_nsec =3D mtime_nsec;
+ a->setflag |=3D TIME_IS_SET;
+ }
+ if ((timetype & ARCHIVE_MATCH_OLDER) || JUST_EQUAL(timetype)) {
+ a->older_mtime_filter =3D timetype;
+ a->older_mtime_sec =3D mtime_sec;
+ a->older_mtime_nsec =3D mtime_nsec;
+ a->setflag |=3D TIME_IS_SET;
+ }
+ }
+ if (timetype & ARCHIVE_MATCH_CTIME) {
+ if ((timetype & ARCHIVE_MATCH_NEWER) || JUST_EQUAL(timetype)) {
+ a->newer_ctime_filter =3D timetype;
+ a->newer_ctime_sec =3D ctime_sec;
+ a->newer_ctime_nsec =3D ctime_nsec;
+ a->setflag |=3D TIME_IS_SET;
+ }
+ if ((timetype & ARCHIVE_MATCH_OLDER) || JUST_EQUAL(timetype)) {
+ a->older_ctime_filter =3D timetype;
+ a->older_ctime_sec =3D ctime_sec;
+ a->older_ctime_nsec =3D ctime_nsec;
+ a->setflag |=3D TIME_IS_SET;
+ }
+ }
+ return (ARCHIVE_OK);
+}
+
+static int
+set_timefilter_date(struct archive_match *a, int timetype, const char *dat=
estr)
+{
+ time_t t;
+
+ if (datestr =3D=3D NULL || *datestr =3D=3D '\0') {
+ archive_set_error(&(a->archive), EINVAL, "date is empty");
+ return (ARCHIVE_FAILED);
+ }
+ t =3D get_date(a->now, datestr);
+ if (t =3D=3D (time_t)-1) {
+ archive_set_error(&(a->archive), EINVAL, "invalid date string");
+ return (ARCHIVE_FAILED);
+ }
+ return set_timefilter(a, timetype, t, 0, t, 0);
+}
+
+static int
+set_timefilter_date_w(struct archive_match *a, int timetype,
+ const wchar_t *datestr)
+{
+ struct archive_string as;
+ time_t t;
+
+ if (datestr =3D=3D NULL || *datestr =3D=3D L'\0') {
+ archive_set_error(&(a->archive), EINVAL, "date is empty");
+ return (ARCHIVE_FAILED);
+ }
+
+ archive_string_init(&as);
+ if (archive_string_append_from_wcs(&as, datestr, wcslen(datestr)) < 0) {
+ archive_string_free(&as);
+ if (errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ archive_set_error(&(a->archive), -1,
+ "Failed to convert WCS to MBS");
+ return (ARCHIVE_FAILED);
+ }
+ t =3D get_date(a->now, as.s);
+ archive_string_free(&as);
+ if (t =3D=3D (time_t)-1) {
+ archive_set_error(&(a->archive), EINVAL, "invalid date string");
+ return (ARCHIVE_FAILED);
+ }
+ return set_timefilter(a, timetype, t, 0, t, 0);
+}
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define EPOC_TIME ARCHIVE_LITERAL_ULL(116444736000000000)
+static int
+set_timefilter_find_data(struct archive_match *a, int timetype,
+ DWORD ftLastWriteTime_dwHighDateTime, DWORD ftLastWriteTime_dwLowDateT=
ime,
+ DWORD ftCreationTime_dwHighDateTime, DWORD ftCreationTime_dwLowDateTim=
e)
+{
+ ULARGE_INTEGER utc;
+ time_t ctime_sec, mtime_sec;
+ long ctime_ns, mtime_ns;
+
+ utc.HighPart =3D ftCreationTime_dwHighDateTime;
+ utc.LowPart =3D ftCreationTime_dwLowDateTime;
+ if (utc.QuadPart >=3D EPOC_TIME) {
+ utc.QuadPart -=3D EPOC_TIME;
+ ctime_sec =3D (time_t)(utc.QuadPart / 10000000);
+ ctime_ns =3D (long)(utc.QuadPart % 10000000) * 100;
+ } else {
+ ctime_sec =3D 0;
+ ctime_ns =3D 0;
+ }
+ utc.HighPart =3D ftLastWriteTime_dwHighDateTime;
+ utc.LowPart =3D ftLastWriteTime_dwLowDateTime;
+ if (utc.QuadPart >=3D EPOC_TIME) {
+ utc.QuadPart -=3D EPOC_TIME;
+ mtime_sec =3D (time_t)(utc.QuadPart / 10000000);
+ mtime_ns =3D (long)(utc.QuadPart % 10000000) * 100;
+ } else {
+ mtime_sec =3D 0;
+ mtime_ns =3D 0;
+ }
+ return set_timefilter(a, timetype,
+ mtime_sec, mtime_ns, ctime_sec, ctime_ns);
+}
+
+static int
+set_timefilter_pathname_mbs(struct archive_match *a, int timetype,
+ const char *path)
+{
+ /* NOTE: stat() on Windows cannot handle nano seconds. */
+ HANDLE h;
+ WIN32_FIND_DATA d;
+
+ if (path =3D=3D NULL || *path =3D=3D '\0') {
+ archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+ return (ARCHIVE_FAILED);
+ }
+ h =3D FindFirstFileA(path, &d);
+ if (h =3D=3D INVALID_HANDLE_VALUE) {
+ la_dosmaperr(GetLastError());
+ archive_set_error(&(a->archive), errno,
+ "Failed to FindFirstFileA");
+ return (ARCHIVE_FAILED);
+ }
+ FindClose(h);
+ return set_timefilter_find_data(a, timetype,
+ d.ftLastWriteTime.dwHighDateTime, d.ftLastWriteTime.dwLowDateTime,
+ d.ftCreationTime.dwHighDateTime, d.ftCreationTime.dwLowDateTime);
+}
+
+static int
+set_timefilter_pathname_wcs(struct archive_match *a, int timetype,
+ const wchar_t *path)
+{
+ HANDLE h;
+ WIN32_FIND_DATAW d;
+
+ if (path =3D=3D NULL || *path =3D=3D L'\0') {
+ archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+ return (ARCHIVE_FAILED);
+ }
+ h =3D FindFirstFileW(path, &d);
+ if (h =3D=3D INVALID_HANDLE_VALUE) {
+ la_dosmaperr(GetLastError());
+ archive_set_error(&(a->archive), errno,
+ "Failed to FindFirstFile");
+ return (ARCHIVE_FAILED);
+ }
+ FindClose(h);
+ return set_timefilter_find_data(a, timetype,
+ d.ftLastWriteTime.dwHighDateTime, d.ftLastWriteTime.dwLowDateTime,
+ d.ftCreationTime.dwHighDateTime, d.ftCreationTime.dwLowDateTime);
+}
+
+#else /* _WIN32 && !__CYGWIN__ */
+
+static int
+set_timefilter_stat(struct archive_match *a, int timetype, struct stat *st)
+{
+ struct archive_entry *ae;
+ time_t ctime_sec, mtime_sec;
+ long ctime_ns, mtime_ns;
+
+ ae =3D archive_entry_new();
+ if (ae =3D=3D NULL)
+ return (error_nomem(a));
+ archive_entry_copy_stat(ae, st);
+ ctime_sec =3D archive_entry_ctime(ae);
+ ctime_ns =3D archive_entry_ctime_nsec(ae);
+ mtime_sec =3D archive_entry_mtime(ae);
+ mtime_ns =3D archive_entry_mtime_nsec(ae);
+ archive_entry_free(ae);
+ return set_timefilter(a, timetype, mtime_sec, mtime_ns,
+ ctime_sec, ctime_ns);
+}
+
+static int
+set_timefilter_pathname_mbs(struct archive_match *a, int timetype,
+ const char *path)
+{
+ struct stat st;
+
+ if (path =3D=3D NULL || *path =3D=3D '\0') {
+ archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+ return (ARCHIVE_FAILED);
+ }
+ if (stat(path, &st) !=3D 0) {
+ archive_set_error(&(a->archive), errno, "Failed to stat()");
+ return (ARCHIVE_FAILED);
+ }
+ return (set_timefilter_stat(a, timetype, &st));
+}
+
+static int
+set_timefilter_pathname_wcs(struct archive_match *a, int timetype,
+ const wchar_t *path)
+{
+ struct archive_string as;
+ int r;
+
+ if (path =3D=3D NULL || *path =3D=3D L'\0') {
+ archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+ return (ARCHIVE_FAILED);
+ }
+
+ /* Convert WCS filename to MBS filename. */
+ archive_string_init(&as);
+ if (archive_string_append_from_wcs(&as, path, wcslen(path)) < 0) {
+ archive_string_free(&as);
+ if (errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ archive_set_error(&(a->archive), -1,
+ "Failed to convert WCS to MBS");
+ return (ARCHIVE_FAILED);
+ }
+
+ r =3D set_timefilter_pathname_mbs(a, timetype, as.s);
+ archive_string_free(&as);
+
+ return (r);
+}
+#endif /* _WIN32 && !__CYGWIN__ */
+
+/*
+ * Call back funtions for archive_rb.
+ */
+static int
+cmp_node_mbs(const struct archive_rb_node *n1,
+ const struct archive_rb_node *n2)
+{
+ struct match_file *f1 =3D (struct match_file *)(uintptr_t)n1;
+ struct match_file *f2 =3D (struct match_file *)(uintptr_t)n2;
+ const char *p1, *p2;
+
+ archive_mstring_get_mbs(NULL, &(f1->pathname), &p1);
+ archive_mstring_get_mbs(NULL, &(f2->pathname), &p2);
+ if (p1 =3D=3D NULL)
+ return (1);
+ if (p2 =3D=3D NULL)
+ return (-1);
+ return (strcmp(p1, p2));
+}
+ =20
+static int
+cmp_key_mbs(const struct archive_rb_node *n, const void *key)
+{
+ struct match_file *f =3D (struct match_file *)(uintptr_t)n;
+ const char *p;
+
+ archive_mstring_get_mbs(NULL, &(f->pathname), &p);
+ if (p =3D=3D NULL)
+ return (-1);
+ return (strcmp(p, (const char *)key));
+}
+
+static int
+cmp_node_wcs(const struct archive_rb_node *n1,
+ const struct archive_rb_node *n2)
+{
+ struct match_file *f1 =3D (struct match_file *)(uintptr_t)n1;
+ struct match_file *f2 =3D (struct match_file *)(uintptr_t)n2;
+ const wchar_t *p1, *p2;
+
+ archive_mstring_get_wcs(NULL, &(f1->pathname), &p1);
+ archive_mstring_get_wcs(NULL, &(f2->pathname), &p2);
+ if (p1 =3D=3D NULL)
+ return (1);
+ if (p2 =3D=3D NULL)
+ return (-1);
+ return (wcscmp(p1, p2));
+}
+ =20
+static int
+cmp_key_wcs(const struct archive_rb_node *n, const void *key)
+{
+ struct match_file *f =3D (struct match_file *)(uintptr_t)n;
+ const wchar_t *p;
+
+ archive_mstring_get_wcs(NULL, &(f->pathname), &p);
+ if (p =3D=3D NULL)
+ return (-1);
+ return (wcscmp(p, (const wchar_t *)key));
+}
+
+static void
+entry_list_init(struct entry_list *list)
+{
+ list->first =3D NULL;
+ list->last =3D &(list->first);
+ list->count =3D 0;
+}
+
+static void
+entry_list_free(struct entry_list *list)
+{
+ struct match_file *p, *q;
+
+ for (p =3D list->first; p !=3D NULL; ) {
+ q =3D p;
+ p =3D p->next;
+ archive_mstring_clean(&(q->pathname));
+ free(q);
+ }
+}
+
+static void
+entry_list_add(struct entry_list *list, struct match_file *file)
+{
+ *list->last =3D file;
+ list->last =3D &(file->next);
+ list->count++;
+}
+
+static int
+add_entry(struct archive_match *a, int flag,
+ struct archive_entry *entry)
+{
+ struct match_file *f;
+ const void *pathname;
+ int r;
+
+ f =3D calloc(1, sizeof(*f));
+ if (f =3D=3D NULL)
+ return (error_nomem(a));
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ pathname =3D archive_entry_pathname_w(entry);
+ if (pathname =3D=3D NULL) {
+ free(f);
+ archive_set_error(&(a->archive), EINVAL, "pathname is NULL");
+ return (ARCHIVE_FAILED);
+ }
+ archive_mstring_copy_wcs(&(f->pathname), pathname);
+ a->exclusion_tree.rbt_ops =3D &rb_ops_wcs;
+#else
+ pathname =3D archive_entry_pathname(entry);
+ if (pathname =3D=3D NULL) {
+ free(f);
+ archive_set_error(&(a->archive), EINVAL, "pathname is NULL");
+ return (ARCHIVE_FAILED);
+ }
+ archive_mstring_copy_mbs(&(f->pathname), pathname);
+ a->exclusion_tree.rbt_ops =3D &rb_ops_mbs;
+#endif
+ f->flag =3D flag;
+ f->mtime_sec =3D archive_entry_mtime(entry);
+ f->mtime_nsec =3D archive_entry_mtime_nsec(entry);
+ f->ctime_sec =3D archive_entry_ctime(entry);
+ f->ctime_nsec =3D archive_entry_ctime_nsec(entry);
+ r =3D __archive_rb_tree_insert_node(&(a->exclusion_tree), &(f->node));
+ if (!r) {
+ struct match_file *f2;
+
+ /* Get the duplicated file. */
+ f2 =3D (struct match_file *)__archive_rb_tree_find_node(
+ &(a->exclusion_tree), pathname);
+
+ /*
+ * We always overwrite comparison condision.
+ * If you do not want to overwrite it, you should not
+ * call archive_match_exclude_entry(). We cannot know
+ * what behavior you really expect since overwriting
+ * condition might be different with the flag.
+ */
+ if (f2 !=3D NULL) {
+ f2->flag =3D f->flag;
+ f2->mtime_sec =3D f->mtime_sec;
+ f2->mtime_nsec =3D f->mtime_nsec;
+ f2->ctime_sec =3D f->ctime_sec;
+ f2->ctime_nsec =3D f->ctime_nsec;
+ }
+ /* Release the duplicated file. */
+ archive_mstring_clean(&(f->pathname));
+ free(f);
+ return (ARCHIVE_OK);
+ }
+ entry_list_add(&(a->exclusion_entry_list), f);
+ a->setflag |=3D TIME_IS_SET;
+ return (ARCHIVE_OK);
+}
+
+/*
+ * Test if entry is excluded by its timestamp.
+ */
+static int
+time_excluded(struct archive_match *a, struct archive_entry *entry)
+{
+ struct match_file *f;
+ const void *pathname;
+ time_t sec;
+ long nsec;
+
+ /*
+ * If this file/dir is excluded by a time comparison, skip it.
+ */
+ if (a->newer_ctime_filter) {
+ /* If ctime is not set, use mtime instead. */
+ if (archive_entry_ctime_is_set(entry))
+ sec =3D archive_entry_ctime(entry);
+ else
+ sec =3D archive_entry_mtime(entry);
+ if (sec < a->newer_ctime_sec)
+ return (1); /* Too old, skip it. */
+ if (sec =3D=3D a->newer_ctime_sec) {
+ if (archive_entry_ctime_is_set(entry))
+ nsec =3D archive_entry_ctime_nsec(entry);
+ else
+ nsec =3D archive_entry_mtime_nsec(entry);
+ if (nsec < a->newer_ctime_nsec)
+ return (1); /* Too old, skip it. */
+ if (nsec =3D=3D a->newer_ctime_nsec &&
+ (a->newer_ctime_filter & ARCHIVE_MATCH_EQUAL)
+ =3D=3D 0)
+ return (1); /* Equal, skip it. */
+ }
+ }
+ if (a->older_ctime_filter) {
+ /* If ctime is not set, use mtime instead. */
+ if (archive_entry_ctime_is_set(entry))
+ sec =3D archive_entry_ctime(entry);
+ else
+ sec =3D archive_entry_mtime(entry);
+ if (sec > a->older_ctime_sec)
+ return (1); /* Too new, skip it. */
+ if (sec =3D=3D a->older_ctime_sec) {
+ if (archive_entry_ctime_is_set(entry))
+ nsec =3D archive_entry_ctime_nsec(entry);
+ else
+ nsec =3D archive_entry_mtime_nsec(entry);
+ if (nsec > a->older_ctime_nsec)
+ return (1); /* Too new, skip it. */
+ if (nsec =3D=3D a->older_ctime_nsec &&
+ (a->older_ctime_filter & ARCHIVE_MATCH_EQUAL)
+ =3D=3D 0)
+ return (1); /* Eeual, skip it. */
+ }
+ }
+ if (a->newer_mtime_filter) {
+ sec =3D archive_entry_mtime(entry);
+ if (sec < a->newer_mtime_sec)
+ return (1); /* Too old, skip it. */
+ if (sec =3D=3D a->newer_mtime_sec) {
+ nsec =3D archive_entry_mtime_nsec(entry);
+ if (nsec < a->newer_mtime_nsec)
+ return (1); /* Too old, skip it. */
+ if (nsec =3D=3D a->newer_mtime_nsec &&
+ (a->newer_mtime_filter & ARCHIVE_MATCH_EQUAL)
+ =3D=3D 0)
+ return (1); /* Equal, skip it. */
+ }
+ }
+ if (a->older_mtime_filter) {
+ sec =3D archive_entry_mtime(entry);
+ if (sec > a->older_mtime_sec)
+ return (1); /* Too new, skip it. */
+ nsec =3D archive_entry_mtime_nsec(entry);
+ if (sec =3D=3D a->older_mtime_sec) {
+ if (nsec > a->older_mtime_nsec)
+ return (1); /* Too new, skip it. */
+ if (nsec =3D=3D a->older_mtime_nsec &&
+ (a->older_mtime_filter & ARCHIVE_MATCH_EQUAL)
+ =3D=3D 0)
+ return (1); /* Equal, skip it. */
+ }
+ }
+
+ /* If there is no excluson list, include the file. */
+ if (a->exclusion_entry_list.count =3D=3D 0)
+ return (0);
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ pathname =3D archive_entry_pathname_w(entry);
+ a->exclusion_tree.rbt_ops =3D &rb_ops_wcs;
+#else
+ pathname =3D archive_entry_pathname(entry);
+ a->exclusion_tree.rbt_ops =3D &rb_ops_mbs;
+#endif
+ if (pathname =3D=3D NULL)
+ return (0);
+
+ f =3D (struct match_file *)__archive_rb_tree_find_node(
+ &(a->exclusion_tree), pathname);
+ /* If the file wasn't rejected, include it. */
+ if (f =3D=3D NULL)
+ return (0);
+
+ if (f->flag & ARCHIVE_MATCH_CTIME) {
+ sec =3D archive_entry_ctime(entry);
+ if (f->ctime_sec > sec) {
+ if (f->flag & ARCHIVE_MATCH_OLDER)
+ return (1);
+ } else if (f->ctime_sec < sec) {
+ if (f->flag & ARCHIVE_MATCH_NEWER)
+ return (1);
+ } else {
+ nsec =3D archive_entry_ctime_nsec(entry);
+ if (f->ctime_nsec > nsec) {
+ if (f->flag & ARCHIVE_MATCH_OLDER)
+ return (1);
+ } else if (f->ctime_nsec < nsec) {
+ if (f->flag & ARCHIVE_MATCH_NEWER)
+ return (1);
+ } else if (f->flag & ARCHIVE_MATCH_EQUAL)
+ return (1);
+ }
+ }
+ if (f->flag & ARCHIVE_MATCH_MTIME) {
+ sec =3D archive_entry_mtime(entry);
+ if (f->mtime_sec > sec) {
+ if (f->flag & ARCHIVE_MATCH_OLDER)
+ return (1);
+ } else if (f->mtime_sec < sec) {
+ if (f->flag & ARCHIVE_MATCH_NEWER)
+ return (1);
+ } else {
+ nsec =3D archive_entry_mtime_nsec(entry);
+ if (f->mtime_nsec > nsec) {
+ if (f->flag & ARCHIVE_MATCH_OLDER)
+ return (1);
+ } else if (f->mtime_nsec < nsec) {
+ if (f->flag & ARCHIVE_MATCH_NEWER)
+ return (1);
+ } else if (f->flag & ARCHIVE_MATCH_EQUAL)
+ return (1);
+ }
+ }
+ return (0);
+}
+
+/*
+ * Utility functions to manage inclusion owners
+ */
+
+int
+archive_match_include_uid(struct archive *_a, int64_t uid)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_uid");
+ a =3D (struct archive_match *)_a;
+ return (add_owner_id(a, &(a->inclusion_uids), uid));
+}
+
+int
+archive_match_include_gid(struct archive *_a, int64_t gid)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_gid");
+ a =3D (struct archive_match *)_a;
+ return (add_owner_id(a, &(a->inclusion_gids), gid));
+}
+
+int
+archive_match_include_uname(struct archive *_a, const char *uname)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_uname");
+ a =3D (struct archive_match *)_a;
+ return (add_owner_name(a, &(a->inclusion_unames), 1, uname));
+}
+
+int
+archive_match_include_uname_w(struct archive *_a, const wchar_t *uname)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_uname_w");
+ a =3D (struct archive_match *)_a;
+ return (add_owner_name(a, &(a->inclusion_unames), 0, uname));
+}
+
+int
+archive_match_include_gname(struct archive *_a, const char *gname)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_gname");
+ a =3D (struct archive_match *)_a;
+ return (add_owner_name(a, &(a->inclusion_gnames), 1, gname));
+}
+
+int
+archive_match_include_gname_w(struct archive *_a, const wchar_t *gname)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_include_gname_w");
+ a =3D (struct archive_match *)_a;
+ return (add_owner_name(a, &(a->inclusion_gnames), 0, gname));
+}
+
+/*
+ * Test function for owner(uid, gid, uname, gname).
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_owner_excluded(struct archive *_a,
+ struct archive_entry *entry)
+{
+ struct archive_match *a;
+
+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+ ARCHIVE_STATE_NEW, "archive_match_id_excluded_ae");
+
+ a =3D (struct archive_match *)_a;
+ if (entry =3D=3D NULL) {
+ archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+ return (ARCHIVE_FAILED);
+ }
+
+ /* If we don't have inclusion id set at all, the entry is always
+ * not excluded. */
+ if ((a->setflag & ID_IS_SET) =3D=3D 0)
+ return (0);
+ return (owner_excluded(a, entry));
+}
+
+static int
+add_owner_id(struct archive_match *a, struct id_array *ids, int64_t id)
+{
+ unsigned i;
+
+ if (ids->count + 1 >=3D ids->size) {
+ if (ids->size =3D=3D 0)
+ ids->size =3D 8;
+ else
+ ids->size *=3D 2;
+ ids->ids =3D realloc(ids->ids, sizeof(*ids->ids) * ids->size);
+ if (ids->ids =3D=3D NULL)
+ return (error_nomem(a));
+ }
+
+ /* Find an insert point. */
+ for (i =3D 0; i < ids->count; i++) {
+ if (ids->ids[i] >=3D id)
+ break;
+ }
+
+ /* Add oowner id. */
+ if (i =3D=3D ids->count)
+ ids->ids[ids->count++] =3D id;
+ else if (ids->ids[i] !=3D id) {
+ memmove(&(ids->ids[i+1]), &(ids->ids[i]),
+ (ids->count - i) * sizeof(ids->ids[0]));
+ ids->ids[i] =3D id;
+ ids->count++;
+ }
+ a->setflag |=3D ID_IS_SET;
+ return (ARCHIVE_OK);
+}
+
+static int
+match_owner_id(struct id_array *ids, int64_t id)
+{
+ unsigned b, m, t;
+
+ t =3D 0;
+ b =3D ids->count;
+ while (t < b) {
+ m =3D (t + b)>>1;
+ if (ids->ids[m] =3D=3D id)
+ return (1);
+ if (ids->ids[m] < id)
+ t =3D m + 1;
+ else
+ b =3D m;
+ }
+ return (0);
+}
+
+static int
+add_owner_name(struct archive_match *a, struct match_list *list,
+ int mbs, const void *name)
+{
+ struct match *match;
+
+ match =3D calloc(1, sizeof(*match));
+ if (match =3D=3D NULL)
+ return (error_nomem(a));
+ if (mbs)
+ archive_mstring_copy_mbs(&(match->pattern), name);
+ else
+ archive_mstring_copy_wcs(&(match->pattern), name);
+ match_list_add(list, match);
+ a->setflag |=3D ID_IS_SET;
+ return (ARCHIVE_OK);
+}
+
+#if !defined(_WIN32) || defined(__CYGWIN__)
+static int
+match_owner_name_mbs(struct archive_match *a, struct match_list *list,
+ const char *name)
+{
+ struct match *m;
+ const char *p;
+
+ if (name =3D=3D NULL || *name =3D=3D '\0')
+ return (0);
+ for (m =3D list->first; m; m =3D m->next) {
+ if (archive_mstring_get_mbs(&(a->archive), &(m->pattern), &p)
+ < 0 && errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ if (p !=3D NULL && strcmp(p, name) =3D=3D 0) {
+ m->matches++;
+ return (1);
+ }
+ }
+ return (0);
+}
+#else
+static int
+match_owner_name_wcs(struct archive_match *a, struct match_list *list,
+ const wchar_t *name)
+{
+ struct match *m;
+ const wchar_t *p;
+
+ if (name =3D=3D NULL || *name =3D=3D L'\0')
+ return (0);
+ for (m =3D list->first; m; m =3D m->next) {
+ if (archive_mstring_get_wcs(&(a->archive), &(m->pattern), &p)
+ < 0 && errno =3D=3D ENOMEM)
+ return (error_nomem(a));
+ if (p !=3D NULL && wcscmp(p, name) =3D=3D 0) {
+ m->matches++;
+ return (1);
+ }
+ }
+ return (0);
+}
+#endif
+
+/*
+ * Test if entry is excluded by uid, gid, uname or gname.
+ */
+static int
+owner_excluded(struct archive_match *a, struct archive_entry *entry)
+{
+ int r;
+
+ if (a->inclusion_uids.count) {
+ if (!match_owner_id(&(a->inclusion_uids),
+ archive_entry_uid(entry)))
+ return (1);
+ }
+
+ if (a->inclusion_gids.count) {
+ if (!match_owner_id(&(a->inclusion_gids),
+ archive_entry_gid(entry)))
+ return (1);
+ }
+
+ if (a->inclusion_unames.count) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ r =3D match_owner_name_wcs(a, &(a->inclusion_unames),
+ archive_entry_uname_w(entry));
+#else
+ r =3D match_owner_name_mbs(a, &(a->inclusion_unames),
+ archive_entry_uname(entry));
+#endif
+ if (!r)
+ return (1);
+ else if (r < 0)
+ return (r);
+ }
+
+ if (a->inclusion_gnames.count) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ r =3D match_owner_name_wcs(a, &(a->inclusion_gnames),
+ archive_entry_gname_w(entry));
+#else
+ r =3D match_owner_name_mbs(a, &(a->inclusion_gnames),
+ archive_entry_gname(entry));
+#endif
+ if (!r)
+ return (1);
+ else if (r < 0)
+ return (r);
+ }
+ return (0);
+}
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_pathmatch.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_pathmatch.c Fri Aug 10 14:=
19:25 2012 +0300
@@ -0,0 +1,459 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer
+ * in this position and unchanged.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "archive_platform.h"
+__FBSDID("$FreeBSD$");
+
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
+#include "archive_pathmatch.h"
+
+/*
+ * Check whether a character 'c' is matched by a list specification [...]:
+ * * Leading '!' or '^' negates the class.
+ * * <char>-<char> is a range of characters
+ * * \<char> removes any special meaning for <char>
+ *
+ * Some interesting boundary cases:
+ * a-d-e is one range (a-d) followed by two single characters - and e.
+ * \a-\d is same as a-d
+ * a\-d is three single characters: a, d, -
+ * Trailing - is not special (so [a-] is two characters a and -).
+ * Initial - is not special ([a-] is same as [-a] is same as [\\-a])
+ * This function never sees a trailing \.
+ * [] always fails
+ * [!] always succeeds
+ */
+static int
+pm_list(const char *start, const char *end, const char c, int flags)
+{
+ const char *p =3D start;
+ char rangeStart =3D '\0', nextRangeStart;
+ int match =3D 1, nomatch =3D 0;
+
+ /* This will be used soon... */
+ (void)flags; /* UNUSED */
+
+ /* If this is a negated class, return success for nomatch. */
+ if ((*p =3D=3D '!' || *p =3D=3D '^') && p < end) {
+ match =3D 0;
+ nomatch =3D 1;
+ ++p;
+ }
+
+ while (p < end) {
+ nextRangeStart =3D '\0';
+ switch (*p) {
+ case '-':
+ /* Trailing or initial '-' is not special. */
+ if ((rangeStart =3D=3D '\0') || (p =3D=3D end - 1)) {
+ if (*p =3D=3D c)
+ return (match);
+ } else {
+ char rangeEnd =3D *++p;
+ if (rangeEnd =3D=3D '\\')
+ rangeEnd =3D *++p;
+ if ((rangeStart <=3D c) && (c <=3D rangeEnd))
+ return (match);
+ }
+ break;
+ case '\\':
+ ++p;
+ /* Fall through */
+ default:
+ if (*p =3D=3D c)
+ return (match);
+ nextRangeStart =3D *p; /* Possible start of range. */
+ }
+ rangeStart =3D nextRangeStart;
+ ++p;
+ }
+ return (nomatch);
+}
+
+static int
+pm_list_w(const wchar_t *start, const wchar_t *end, const wchar_t c, int f=
lags)
+{
+ const wchar_t *p =3D start;
+ wchar_t rangeStart =3D L'\0', nextRangeStart;
+ int match =3D 1, nomatch =3D 0;
+
+ /* This will be used soon... */
+ (void)flags; /* UNUSED */
+
+ /* If this is a negated class, return success for nomatch. */
+ if ((*p =3D=3D L'!' || *p =3D=3D L'^') && p < end) {
+ match =3D 0;
+ nomatch =3D 1;
+ ++p;
+ }
+
+ while (p < end) {
+ nextRangeStart =3D L'\0';
+ switch (*p) {
+ case L'-':
+ /* Trailing or initial '-' is not special. */
+ if ((rangeStart =3D=3D L'\0') || (p =3D=3D end - 1)) {
+ if (*p =3D=3D c)
+ return (match);
+ } else {
+ wchar_t rangeEnd =3D *++p;
+ if (rangeEnd =3D=3D L'\\')
+ rangeEnd =3D *++p;
+ if ((rangeStart <=3D c) && (c <=3D rangeEnd))
+ return (match);
+ }
+ break;
+ case L'\\':
+ ++p;
+ /* Fall through */
+ default:
+ if (*p =3D=3D c)
+ return (match);
+ nextRangeStart =3D *p; /* Possible start of range. */
+ }
+ rangeStart =3D nextRangeStart;
+ ++p;
+ }
+ return (nomatch);
+}
+
+/*
+ * If s is pointing to "./", ".//", "./././" or the like, skip it.
+ */
+static const char *
+pm_slashskip(const char *s) {
+ while ((*s =3D=3D '/')
+ || (s[0] =3D=3D '.' && s[1] =3D=3D '/')
+ || (s[0] =3D=3D '.' && s[1] =3D=3D '\0'))
+ ++s;
+ return (s);
+}
+
+static const wchar_t *
+pm_slashskip_w(const wchar_t *s) {
+ while ((*s =3D=3D L'/')
+ || (s[0] =3D=3D L'.' && s[1] =3D=3D L'/')
+ || (s[0] =3D=3D L'.' && s[1] =3D=3D L'\0'))
+ ++s;
+ return (s);
+}
+
+static int
+pm(const char *p, const char *s, int flags)
+{
+ const char *end;
+
+ /*
+ * Ignore leading './', './/', '././', etc.
+ */
+ if (s[0] =3D=3D '.' && s[1] =3D=3D '/')
+ s =3D pm_slashskip(s + 1);
+ if (p[0] =3D=3D '.' && p[1] =3D=3D '/')
+ p =3D pm_slashskip(p + 1);
+
+ for (;;) {
+ switch (*p) {
+ case '\0':
+ if (s[0] =3D=3D '/') {
+ if (flags & PATHMATCH_NO_ANCHOR_END)
+ return (1);
+ /* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+ s =3D pm_slashskip(s);
+ }
+ return (*s =3D=3D '\0');
+ case '?':
+ /* ? always succeeds, unless we hit end of 's' */
+ if (*s =3D=3D '\0')
+ return (0);
+ break;
+ case '*':
+ /* "*" =3D=3D "**" =3D=3D "***" ... */
+ while (*p =3D=3D '*')
+ ++p;
+ /* Trailing '*' always succeeds. */
+ if (*p =3D=3D '\0')
+ return (1);
+ while (*s) {
+ if (archive_pathmatch(p, s, flags))
+ return (1);
+ ++s;
+ }
+ return (0);
+ case '[':
+ /*
+ * Find the end of the [...] character class,
+ * ignoring \] that might occur within the class.
+ */
+ end =3D p + 1;
+ while (*end !=3D '\0' && *end !=3D ']') {
+ if (*end =3D=3D '\\' && end[1] !=3D '\0')
+ ++end;
+ ++end;
+ }
+ if (*end =3D=3D ']') {
+ /* We found [...], try to match it. */
+ if (!pm_list(p + 1, end, *s, flags))
+ return (0);
+ p =3D end; /* Jump to trailing ']' char. */
+ break;
+ } else
+ /* No final ']', so just match '['. */
+ if (*p !=3D *s)
+ return (0);
+ break;
+ case '\\':
+ /* Trailing '\\' matches itself. */
+ if (p[1] =3D=3D '\0') {
+ if (*s !=3D '\\')
+ return (0);
+ } else {
+ ++p;
+ if (*p !=3D *s)
+ return (0);
+ }
+ break;
+ case '/':
+ if (*s !=3D '/' && *s !=3D '\0')
+ return (0);
+ /* Note: pattern "/\./" won't match "/";
+ * pm_slashskip() correctly stops at backslash. */
+ p =3D pm_slashskip(p);
+ s =3D pm_slashskip(s);
+ if (*p =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END))
+ return (1);
+ --p; /* Counteract the increment below. */
+ --s;
+ break;
+ case '$':
+ /* '$' is special only at end of pattern and only
+ * if PATHMATCH_NO_ANCHOR_END is specified. */
+ if (p[1] =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END)){
+ /* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+ return (*pm_slashskip(s) =3D=3D '\0');
+ }
+ /* Otherwise, '$' is not special. */
+ /* FALL THROUGH */
+ default:
+ if (*p !=3D *s)
+ return (0);
+ break;
+ }
+ ++p;
+ ++s;
+ }
+}
+
+static int
+pm_w(const wchar_t *p, const wchar_t *s, int flags)
+{
+ const wchar_t *end;
+
+ /*
+ * Ignore leading './', './/', '././', etc.
+ */
+ if (s[0] =3D=3D L'.' && s[1] =3D=3D L'/')
+ s =3D pm_slashskip_w(s + 1);
+ if (p[0] =3D=3D L'.' && p[1] =3D=3D L'/')
+ p =3D pm_slashskip_w(p + 1);
+
+ for (;;) {
+ switch (*p) {
+ case L'\0':
+ if (s[0] =3D=3D L'/') {
+ if (flags & PATHMATCH_NO_ANCHOR_END)
+ return (1);
+ /* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+ s =3D pm_slashskip_w(s);
+ }
+ return (*s =3D=3D L'\0');
+ case L'?':
+ /* ? always succeeds, unless we hit end of 's' */
+ if (*s =3D=3D L'\0')
+ return (0);
+ break;
+ case L'*':
+ /* "*" =3D=3D "**" =3D=3D "***" ... */
+ while (*p =3D=3D L'*')
+ ++p;
+ /* Trailing '*' always succeeds. */
+ if (*p =3D=3D L'\0')
+ return (1);
+ while (*s) {
+ if (archive_pathmatch_w(p, s, flags))
+ return (1);
+ ++s;
+ }
+ return (0);
+ case L'[':
+ /*
+ * Find the end of the [...] character class,
+ * ignoring \] that might occur within the class.
+ */
+ end =3D p + 1;
+ while (*end !=3D L'\0' && *end !=3D L']') {
+ if (*end =3D=3D L'\\' && end[1] !=3D L'\0')
+ ++end;
+ ++end;
+ }
+ if (*end =3D=3D L']') {
+ /* We found [...], try to match it. */
+ if (!pm_list_w(p + 1, end, *s, flags))
+ return (0);
+ p =3D end; /* Jump to trailing ']' char. */
+ break;
+ } else
+ /* No final ']', so just match '['. */
+ if (*p !=3D *s)
+ return (0);
+ break;
+ case L'\\':
+ /* Trailing '\\' matches itself. */
+ if (p[1] =3D=3D L'\0') {
+ if (*s !=3D L'\\')
+ return (0);
+ } else {
+ ++p;
+ if (*p !=3D *s)
+ return (0);
+ }
+ break;
+ case L'/':
+ if (*s !=3D L'/' && *s !=3D L'\0')
+ return (0);
+ /* Note: pattern "/\./" won't match "/";
+ * pm_slashskip() correctly stops at backslash. */
+ p =3D pm_slashskip_w(p);
+ s =3D pm_slashskip_w(s);
+ if (*p =3D=3D L'\0' && (flags & PATHMATCH_NO_ANCHOR_END))
+ return (1);
+ --p; /* Counteract the increment below. */
+ --s;
+ break;
+ case L'$':
+ /* '$' is special only at end of pattern and only
+ * if PATHMATCH_NO_ANCHOR_END is specified. */
+ if (p[1] =3D=3D L'\0' && (flags & PATHMATCH_NO_ANCHOR_END)){
+ /* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+ return (*pm_slashskip_w(s) =3D=3D L'\0');
+ }
+ /* Otherwise, '$' is not special. */
+ /* FALL THROUGH */
+ default:
+ if (*p !=3D *s)
+ return (0);
+ break;
+ }
+ ++p;
+ ++s;
+ }
+}
+
+/* Main entry point. */
+int
+__archive_pathmatch(const char *p, const char *s, int flags)
+{
+ /* Empty pattern only matches the empty string. */
+ if (p =3D=3D NULL || *p =3D=3D '\0')
+ return (s =3D=3D NULL || *s =3D=3D '\0');
+
+ /* Leading '^' anchors the start of the pattern. */
+ if (*p =3D=3D '^') {
+ ++p;
+ flags &=3D ~PATHMATCH_NO_ANCHOR_START;
+ }
+
+ if (*p =3D=3D '/' && *s !=3D '/')
+ return (0);
+
+ /* Certain patterns and file names anchor implicitly. */
+ if (*p =3D=3D '*' || *p =3D=3D '/' || *p =3D=3D '/') {
+ while (*p =3D=3D '/')
+ ++p;
+ while (*s =3D=3D '/')
+ ++s;
+ return (pm(p, s, flags));
+ }
+
+ /* If start is unanchored, try to match start of each path element. */
+ if (flags & PATHMATCH_NO_ANCHOR_START) {
+ for ( ; s !=3D NULL; s =3D strchr(s, '/')) {
+ if (*s =3D=3D '/')
+ s++;
+ if (pm(p, s, flags))
+ return (1);
+ }
+ return (0);
+ }
+
+ /* Default: Match from beginning. */
+ return (pm(p, s, flags));
+}
+
+int
+__archive_pathmatch_w(const wchar_t *p, const wchar_t *s, int flags)
+{
+ /* Empty pattern only matches the empty string. */
+ if (p =3D=3D NULL || *p =3D=3D L'\0')
+ return (s =3D=3D NULL || *s =3D=3D L'\0');
+
+ /* Leading '^' anchors the start of the pattern. */
+ if (*p =3D=3D L'^') {
+ ++p;
+ flags &=3D ~PATHMATCH_NO_ANCHOR_START;
+ }
+
+ if (*p =3D=3D L'/' && *s !=3D L'/')
+ return (0);
+
+ /* Certain patterns and file names anchor implicitly. */
+ if (*p =3D=3D L'*' || *p =3D=3D L'/' || *p =3D=3D L'/') {
+ while (*p =3D=3D L'/')
+ ++p;
+ while (*s =3D=3D L'/')
+ ++s;
+ return (pm_w(p, s, flags));
+ }
+
+ /* If start is unanchored, try to match start of each path element. */
+ if (flags & PATHMATCH_NO_ANCHOR_START) {
+ for ( ; s !=3D NULL; s =3D wcschr(s, L'/')) {
+ if (*s =3D=3D L'/')
+ s++;
+ if (pm_w(p, s, flags))
+ return (1);
+ }
+ return (0);
+ }
+
+ /* Default: Match from beginning. */
+ return (pm_w(p, s, flags));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_pathmatch.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_pathmatch.h Fri Aug 10 14:=
19:25 2012 +0300
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer
+ * in this position and unchanged.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef __LIBARCHIVE_BUILD
+#ifndef __LIBARCHIVE_TEST
+#error This header is only to be used internally to libarchive.
+#endif
+#endif
+
+#ifndef ARCHIVE_PATHMATCH_H
+#define ARCHIVE_PATHMATCH_H
+
+/* Don't anchor at beginning unless the pattern starts with "^" */
+#define PATHMATCH_NO_ANCHOR_START 1
+/* Don't anchor at end unless the pattern ends with "$" */
+#define PATHMATCH_NO_ANCHOR_END 2
+
+/* Note that "^" and "$" are not special unless you set the corresponding
+ * flag above. */
+
+int __archive_pathmatch(const char *p, const char *s, int flags);
+int __archive_pathmatch_w(const wchar_t *p, const wchar_t *s, int flags);
+
+#define archive_pathmatch(p, s, f) __archive_pathmatch(p, s, f)
+#define archive_pathmatch_w(p, s, f) __archive_pathmatch_w(p, s, f)
+
+#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_ppmd7.c
--- a/head/contrib/libarchive/libarchive/archive_ppmd7.c Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_ppmd7.c Fri Aug 10 14:19:2=
5 2012 +0300
@@ -415,7 +415,7 @@
upState.Freq =3D (Byte)(1 + ((2 * cf <=3D s0) ? (5 * cf > s0) : ((2 * =
cf + 3 * s0 - 1) / (2 * s0))));
}
=20
- do
+ while (numPs !=3D 0)
{
/* Create Child */
CTX_PTR c1; /* =3D AllocContext(p); */
@@ -435,7 +435,6 @@
SetSuccessor(ps[--numPs], REF(c1));
c =3D c1;
}
- while (numPs !=3D 0);
=20
return c;
}
@@ -778,7 +777,7 @@
if(p->Range >=3D p->Bottom)
break;
else
- p->Range =3D -p->Low & (p->Bottom - 1);
+ p->Range =3D ((uint32_t)(-(int32_t)p->Low)) & (p->Bottom - 1);
}
p->Code =3D (p->Code << 8) | p->Stream->Read((void *)p->Stream);
p->Range <<=3D 8;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_private.h
--- a/head/contrib/libarchive/libarchive/archive_private.h Mon Jul 30 11:44=
:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_private.h Fri Aug 10 14:19=
:25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_private.h 232153 2=
012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_private.h 238856 2=
012-07-28 06:38:44Z mm $
*/
=20
#ifndef __LIBARCHIVE_BUILD
@@ -50,6 +50,7 @@
#define ARCHIVE_READ_MAGIC (0xdeb0c5U)
#define ARCHIVE_WRITE_DISK_MAGIC (0xc001b0c5U)
#define ARCHIVE_READ_DISK_MAGIC (0xbadb0c5U)
+#define ARCHIVE_MATCH_MAGIC (0xcad11c9U)
=20
#define ARCHIVE_STATE_NEW 1U
#define ARCHIVE_STATE_HEADER 2U
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read.3
--- a/head/contrib/libarchive/libarchive/archive_read.3 Mon Jul 30 11:44:18=
2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read.3 Fri Aug 10 14:19:25=
2012 +0300
@@ -22,14 +22,16 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read.3 232153 201=
2-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read.3 238856 201=
2-07-28 06:38:44Z mm $
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ 3
.Os
.Sh NAME
.Nm archive_read
.Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Sh DESCRIPTION
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read.c
--- a/head/contrib/libarchive/libarchive/archive_read.c Mon Jul 30 11:44:18=
2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read.c Fri Aug 10 14:19:25=
2012 +0300
@@ -32,7 +32,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read.c 2321=
53 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read.c 2388=
56 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -201,7 +201,6 @@
request -=3D get;
total +=3D get;
}
- return total;
} else if (self->archive->client.seeker !=3D NULL
&& request > 64 * 1024) {
/* If the client provided a seeker but not a skipper,
@@ -638,8 +637,8 @@
len =3D s;
} else if (a->read_data_output_offset <
a->read_data_offset) {
- len =3D a->read_data_offset -
- a->read_data_output_offset;
+ len =3D (size_t)(a->read_data_offset -
+ a->read_data_output_offset);
} else
len =3D 0;
=20
@@ -1231,7 +1230,7 @@
=20
/* Use up the copy buffer first. */
if (filter->avail > 0) {
- min =3D minimum(request, (int64_t)filter->avail);
+ min =3D (size_t)minimum(request, (int64_t)filter->avail);
filter->next +=3D min;
filter->avail -=3D min;
request -=3D min;
@@ -1241,7 +1240,7 @@
=20
/* Then use up the client buffer. */
if (filter->client_avail > 0) {
- min =3D minimum(request, (int64_t)filter->client_avail);
+ min =3D (size_t)minimum(request, (int64_t)filter->client_avail);
filter->client_next +=3D min;
filter->client_avail -=3D min;
request -=3D min;
@@ -1283,7 +1282,7 @@
if (bytes_read >=3D request) {
filter->client_next =3D
((const char *)filter->client_buff) + request;
- filter->client_avail =3D bytes_read - request;
+ filter->client_avail =3D (size_t)(bytes_read - request);
filter->client_total =3D bytes_read;
total_bytes_skipped +=3D request;
filter->position +=3D request;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_data.3
--- a/head/contrib/libarchive/libarchive/archive_read_data.3 Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_data.3 Fri Aug 10 14:=
19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 22, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_DATA 3
.Os
.Sh NAME
@@ -33,6 +33,8 @@
.Nm archive_read_data_skip ,
.Nm archive_read_data_into_fd
.Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft ssize_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk.3
--- a/head/contrib/libarchive/libarchive/archive_read_disk.3 Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk.3 Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk.3 23215=
3 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk.3 23885=
6 2012-07-28 06:38:44Z mm $
.\"
-.Dd March 10, 2009
+.Dd February 2, 2012
.Dt ARCHIVE_READ_DISK 3
.Os
.Sh NAME
@@ -42,6 +42,8 @@
.Nm archive_read_finish ,
.Nm archive_read_free
.Nd functions for reading objects from disk
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk_entry_from_file.c
--- a/head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.=
c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.=
c Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 2003-2009 Tim Kientzle
- * Copyright (c) 2010 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_e=
ntry_from_file.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_e=
ntry_from_file.c 238909 2012-07-30 14:47:35Z mm $");
=20
/* This is the tree-walking code for POSIX systems. */
#if !defined(_WIN32) || defined(__CYGWIN__)
@@ -73,6 +73,9 @@
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
+#ifdef HAVE_LINUX_TYPES_H
+#include <linux/types.h>
+#endif
#ifdef HAVE_LINUX_FIEMAP_H
#include <linux/fiemap.h>
#endif
@@ -111,14 +114,14 @@
#define ACL_GET_PERM acl_get_perm_np
#endif
=20
-static int setup_acls_posix1e(struct archive_read_disk *,
- struct archive_entry *, int fd);
+static int setup_acls(struct archive_read_disk *,
+ struct archive_entry *, int *fd);
static int setup_mac_metadata(struct archive_read_disk *,
- struct archive_entry *, int fd);
+ struct archive_entry *, int *fd);
static int setup_xattrs(struct archive_read_disk *,
- struct archive_entry *, int fd);
+ struct archive_entry *, int *fd);
static int setup_sparse(struct archive_read_disk *,
- struct archive_entry *, int fd);
+ struct archive_entry *, int *fd);
=20
int
archive_read_disk_entry_from_file(struct archive *_a,
@@ -187,8 +190,13 @@
* this is an extra step, it has a nice side-effect: We get an
* open file descriptor which we can use in the subsequent lookups. */
if ((S_ISREG(st->st_mode) || S_ISDIR(st->st_mode))) {
- if (fd < 0)
- fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (fd < 0) {
+ if (a->tree !=3D NULL)
+ fd =3D a->open_on_current_dir(a->tree, path,
+ O_RDONLY | O_NONBLOCK);
+ else
+ fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ }
if (fd >=3D 0) {
unsigned long stflags;
r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &stflags);
@@ -210,13 +218,21 @@
"Couldn't read link data");
return (ARCHIVE_FAILED);
}
+ if (a->tree !=3D NULL) {
#ifdef HAVE_READLINKAT
- if (a->entry_wd_fd >=3D 0)
- lnklen =3D readlinkat(a->entry_wd_fd, path,
- linkbuffer, linkbuffer_len);
- else
+ lnklen =3D readlinkat(a->tree_current_dir_fd(a->tree),
+ path, linkbuffer, linkbuffer_len);
+#else
+ if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+ archive_set_error(&a->archive, errno,
+ "Couldn't read link data");
+ free(linkbuffer);
+ return (ARCHIVE_FAILED);
+ }
+ lnklen =3D readlink(path, linkbuffer, linkbuffer_len);
#endif /* HAVE_READLINKAT */
- lnklen =3D readlink(path, linkbuffer, linkbuffer_len);
+ } else
+ lnklen =3D readlink(path, linkbuffer, linkbuffer_len);
if (lnklen < 0) {
archive_set_error(&a->archive, errno,
"Couldn't read link data");
@@ -229,14 +245,16 @@
}
#endif /* HAVE_READLINK || HAVE_READLINKAT */
=20
- r =3D setup_acls_posix1e(a, entry, fd);
- r1 =3D setup_xattrs(a, entry, fd);
+ r =3D setup_acls(a, entry, &fd);
+ r1 =3D setup_xattrs(a, entry, &fd);
if (r1 < r)
r =3D r1;
- r1 =3D setup_mac_metadata(a, entry, fd);
- if (r1 < r)
- r =3D r1;
- r1 =3D setup_sparse(a, entry, fd);
+ if (a->enable_copyfile) {
+ r1 =3D setup_mac_metadata(a, entry, &fd);
+ if (r1 < r)
+ r =3D r1;
+ }
+ r1 =3D setup_sparse(a, entry, &fd);
if (r1 < r)
r =3D r1;
=20
@@ -262,7 +280,7 @@
*/
static int
setup_mac_metadata(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
int tempfd =3D -1;
int copyfile_flags =3D COPYFILE_NOFOLLOW | COPYFILE_ACL | COPYFILE_XATTR;
@@ -272,6 +290,7 @@
int have_attrs;
const char *name, *tempdir, *tempfile =3D NULL;
=20
+ (void)fd; /* UNUSED */
name =3D archive_entry_sourcepath(entry);
if (name =3D=3D NULL)
name =3D archive_entry_pathname(entry);
@@ -281,6 +300,14 @@
return (ARCHIVE_WARN);
}
=20
+ if (a->tree !=3D NULL) {
+ if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+ archive_set_error(&a->archive, errno,
+ "Couldn't change dir");
+ return (ARCHIVE_FAILED);
+ }
+ }
+
/* Short-circuit if there's nothing to do. */
have_attrs =3D copyfile(name, NULL, 0, copyfile_flags | COPYFILE_CHECK);
if (have_attrs =3D=3D -1) {
@@ -351,7 +378,7 @@
*/
static int
setup_mac_metadata(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
(void)a; /* UNUSED */
(void)entry; /* UNUSED */
@@ -362,15 +389,16 @@
=20
=20
#ifdef HAVE_POSIX_ACL
-static void setup_acl_posix1e(struct archive_read_disk *a,
+static int translate_acl(struct archive_read_disk *a,
struct archive_entry *entry, acl_t acl, int archive_entry_acl_type);
=20
static int
-setup_acls_posix1e(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+setup_acls(struct archive_read_disk *a,
+ struct archive_entry *entry, int *fd)
{
const char *accpath;
acl_t acl;
+ int r;
=20
accpath =3D archive_entry_sourcepath(entry);
if (accpath =3D=3D NULL)
@@ -378,9 +406,38 @@
=20
archive_entry_acl_clear(entry);
=20
+ /* Try NFS4 ACL first. */
+ if (*fd >=3D 0)
+ acl =3D acl_get_fd(*fd);
+#if HAVE_ACL_GET_LINK_NP
+ else if (!a->follow_symlinks)
+ acl =3D acl_get_link_np(accpath, ACL_TYPE_NFS4);
+#else
+ else if ((!a->follow_symlinks)
+ && (archive_entry_filetype(entry) =3D=3D AE_IFLNK))
+ /* We can't get the ACL of a symlink, so we assume it can't
+ have one. */
+ acl =3D NULL;
+#endif
+ else
+ acl =3D acl_get_file(accpath, ACL_TYPE_NFS4);
+#if HAVE_ACL_IS_TRIVIAL_NP
+ /* Ignore "trivial" ACLs that just mirror the file mode. */
+ acl_is_trivial_np(acl, &r);
+ if (r) {
+ acl_free(acl);
+ acl =3D NULL;
+ }
+#endif
+ if (acl !=3D NULL) {
+ translate_acl(a, entry, acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4);
+ acl_free(acl);
+ return (ARCHIVE_OK);
+ }
+
/* Retrieve access ACL from file. */
- if (fd >=3D 0)
- acl =3D acl_get_fd(fd);
+ if (*fd >=3D 0)
+ acl =3D acl_get_fd(*fd);
#if HAVE_ACL_GET_LINK_NP
else if (!a->follow_symlinks)
acl =3D acl_get_link_np(accpath, ACL_TYPE_ACCESS);
@@ -394,7 +451,7 @@
else
acl =3D acl_get_file(accpath, ACL_TYPE_ACCESS);
if (acl !=3D NULL) {
- setup_acl_posix1e(a, entry, acl,
+ translate_acl(a, entry, acl,
ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
acl_free(acl);
}
@@ -403,7 +460,7 @@
if (S_ISDIR(archive_entry_mode(entry))) {
acl =3D acl_get_file(accpath, ACL_TYPE_DEFAULT);
if (acl !=3D NULL) {
- setup_acl_posix1e(a, entry, acl,
+ translate_acl(a, entry, acl,
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT);
acl_free(acl);
}
@@ -412,68 +469,181 @@
}
=20
/*
- * Translate POSIX.1e ACL into libarchive internal structure.
+ * Translate system ACL into libarchive internal structure.
*/
-static void
-setup_acl_posix1e(struct archive_read_disk *a,
- struct archive_entry *entry, acl_t acl, int archive_entry_acl_type)
+
+static struct {
+ int archive_perm;
+ int platform_perm;
+} acl_perm_map[] =3D {
+ {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
+ {ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
+ {ARCHIVE_ENTRY_ACL_READ, ACL_READ},
+ {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
+ {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
+ {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
+ {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
+ {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
+ {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
+ {ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
+ {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
+};
+
+static struct {
+ int archive_inherit;
+ int platform_inherit;
+} acl_inherit_map[] =3D {
+ {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INH=
ERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
+};
+
+static int
+translate_acl(struct archive_read_disk *a,
+ struct archive_entry *entry, acl_t acl, int default_entry_acl_type)
{
acl_tag_t acl_tag;
+ acl_entry_type_t acl_type;
+ acl_flagset_t acl_flagset;
acl_entry_t acl_entry;
acl_permset_t acl_permset;
+ int brand, i, r, entry_acl_type;
int s, ae_id, ae_tag, ae_perm;
const char *ae_name;
=20
+
+ // FreeBSD "brands" ACLs as POSIX.1e or NFSv4
+ // Make sure the "brand" on this ACL is consistent
+ // with the default_entry_acl_type bits provided.
+ acl_get_brand_np(acl, &brand);
+ switch (brand) {
+ case ACL_BRAND_POSIX:
+ switch (default_entry_acl_type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+ case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+ entry_acl_type =3D default_entry_acl_type;
+ break;
+ default:
+ // XXX set warning message?
+ return ARCHIVE_FAILED;
+ }
+ break;
+ case ACL_BRAND_NFS4:
+ if (default_entry_acl_type & ~ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+ // XXX set warning message?
+ return ARCHIVE_FAILED;
+ }
+ break;
+ default:
+ // XXX set warning message?
+ return ARCHIVE_FAILED;
+ break;
+ }
+
+
s =3D acl_get_entry(acl, ACL_FIRST_ENTRY, &acl_entry);
while (s =3D=3D 1) {
ae_id =3D -1;
ae_name =3D NULL;
+ ae_perm =3D 0;
=20
acl_get_tag_type(acl_entry, &acl_tag);
- if (acl_tag =3D=3D ACL_USER) {
+ switch (acl_tag) {
+ case ACL_USER:
ae_id =3D (int)*(uid_t *)acl_get_qualifier(acl_entry);
ae_name =3D archive_read_disk_uname(&a->archive, ae_id);
ae_tag =3D ARCHIVE_ENTRY_ACL_USER;
- } else if (acl_tag =3D=3D ACL_GROUP) {
+ break;
+ case ACL_GROUP:
ae_id =3D (int)*(gid_t *)acl_get_qualifier(acl_entry);
ae_name =3D archive_read_disk_gname(&a->archive, ae_id);
ae_tag =3D ARCHIVE_ENTRY_ACL_GROUP;
- } else if (acl_tag =3D=3D ACL_MASK) {
+ break;
+ case ACL_MASK:
ae_tag =3D ARCHIVE_ENTRY_ACL_MASK;
- } else if (acl_tag =3D=3D ACL_USER_OBJ) {
+ break;
+ case ACL_USER_OBJ:
ae_tag =3D ARCHIVE_ENTRY_ACL_USER_OBJ;
- } else if (acl_tag =3D=3D ACL_GROUP_OBJ) {
+ break;
+ case ACL_GROUP_OBJ:
ae_tag =3D ARCHIVE_ENTRY_ACL_GROUP_OBJ;
- } else if (acl_tag =3D=3D ACL_OTHER) {
+ break;
+ case ACL_OTHER:
ae_tag =3D ARCHIVE_ENTRY_ACL_OTHER;
- } else {
+ break;
+ case ACL_EVERYONE:
+ ae_tag =3D ARCHIVE_ENTRY_ACL_EVERYONE;
+ break;
+ default:
/* Skip types that libarchive can't support. */
+ s =3D acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
continue;
}
=20
+ // XXX acl type maps to allow/deny/audit/YYYY bits
+ // XXX acl_get_entry_type_np on FreeBSD returns EINVAL for
+ // non-NFSv4 ACLs
+ entry_acl_type =3D default_entry_acl_type;
+ r =3D acl_get_entry_type_np(acl_entry, &acl_type);
+ if (r =3D=3D 0) {
+ switch (acl_type) {
+ case ACL_ENTRY_TYPE_ALLOW:
+ entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_ALLOW;
+ break;
+ case ACL_ENTRY_TYPE_DENY:
+ entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_DENY;
+ break;
+ case ACL_ENTRY_TYPE_AUDIT:
+ entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_AUDIT;
+ break;
+ case ACL_ENTRY_TYPE_ALARM:
+ entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_ALARM;
+ break;
+ }
+ }
+
+ /*
+ * Libarchive stores "flag" (NFSv4 inheritance bits)
+ * in the ae_perm bitmap.
+ */
+ acl_get_flagset_np(acl_entry, &acl_flagset);
+ for (i =3D 0; i < (int)(sizeof(acl_inherit_map) / sizeof(a=
cl_inherit_map[0])); ++i) {
+ if (acl_get_flag_np(acl_flagset,
+ acl_inherit_map[i].platform_inherit))
+ ae_perm |=3D acl_inherit_map[i].archive_inherit;
+
+ }
+
acl_get_permset(acl_entry, &acl_permset);
- ae_perm =3D 0;
- /*
- * acl_get_perm() is spelled differently on different
- * platforms; see above.
- */
- if (ACL_GET_PERM(acl_permset, ACL_EXECUTE))
- ae_perm |=3D ARCHIVE_ENTRY_ACL_EXECUTE;
- if (ACL_GET_PERM(acl_permset, ACL_READ))
- ae_perm |=3D ARCHIVE_ENTRY_ACL_READ;
- if (ACL_GET_PERM(acl_permset, ACL_WRITE))
- ae_perm |=3D ARCHIVE_ENTRY_ACL_WRITE;
+ for (i =3D 0; i < (int)(sizeof(acl_perm_map) / sizeof(acl_=
perm_map[0])); ++i) {
+ /*
+ * acl_get_perm() is spelled differently on different
+ * platforms; see above.
+ */
+ if (ACL_GET_PERM(acl_permset, acl_perm_map[i].platform_perm))
+ ae_perm |=3D acl_perm_map[i].archive_perm;
+ }
=20
- archive_entry_acl_add_entry(entry,
- archive_entry_acl_type, ae_perm, ae_tag,
- ae_id, ae_name);
+ archive_entry_acl_add_entry(entry, entry_acl_type,
+ ae_perm, ae_tag,
+ ae_id, ae_name);
=20
s =3D acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
}
+ return (ARCHIVE_OK);
}
#else
static int
-setup_acls_posix1e(struct archive_read_disk *a,
+setup_acls(struct archive_read_disk *a,
struct archive_entry *entry, int fd)
{
(void)a; /* UNUSED */
@@ -568,7 +738,7 @@
=20
static int
setup_xattrs(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
char *list, *p;
const char *path;
@@ -578,16 +748,30 @@
if (path =3D=3D NULL)
path =3D archive_entry_pathname(entry);
=20
+ if (*fd < 0 && a->tree !=3D NULL) {
+ if (a->follow_symlinks ||
+ archive_entry_filetype(entry) !=3D AE_IFLNK)
+ *fd =3D a->open_on_current_dir(a->tree, path,
+ O_RDONLY | O_NONBLOCK);
+ if (*fd < 0) {
+ if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+ archive_set_error(&a->archive, errno,
+ "Couldn't access %s", path);
+ return (ARCHIVE_FAILED);
+ }
+ }
+ }
+
#if HAVE_FLISTXATTR
- if (fd >=3D 0)
- list_size =3D flistxattr(fd, NULL, 0);
+ if (*fd >=3D 0)
+ list_size =3D flistxattr(*fd, NULL, 0);
else if (!a->follow_symlinks)
list_size =3D llistxattr(path, NULL, 0);
else
list_size =3D listxattr(path, NULL, 0);
#elif HAVE_FLISTEA
- if (fd >=3D 0)
- list_size =3D flistea(fd, NULL, 0);
+ if (*fd >=3D 0)
+ list_size =3D flistea(*fd, NULL, 0);
else if (!a->follow_symlinks)
list_size =3D llistea(path, NULL, 0);
else
@@ -611,15 +795,15 @@
}
=20
#if HAVE_FLISTXATTR
- if (fd >=3D 0)
- list_size =3D flistxattr(fd, list, list_size);
+ if (*fd >=3D 0)
+ list_size =3D flistxattr(*fd, list, list_size);
else if (!a->follow_symlinks)
list_size =3D llistxattr(path, list, list_size);
else
list_size =3D listxattr(path, list, list_size);
#elif HAVE_FLISTEA
- if (fd >=3D 0)
- list_size =3D flistea(fd, list, list_size);
+ if (*fd >=3D 0)
+ list_size =3D flistea(*fd, list, list_size);
else if (!a->follow_symlinks)
list_size =3D llistea(path, list, list_size);
else
@@ -637,7 +821,7 @@
if (strncmp(p, "system.", 7) =3D=3D 0 ||
strncmp(p, "xfsroot.", 8) =3D=3D 0)
continue;
- setup_xattr(a, entry, p, fd);
+ setup_xattr(a, entry, p, *fd);
}
=20
free(list);
@@ -698,6 +882,7 @@
size =3D extattr_get_file(accpath, namespace, name, value, size);
=20
if (size =3D=3D -1) {
+ free(value);
archive_set_error(&a->archive, errno,
"Couldn't read extended attribute");
return (ARCHIVE_WARN);
@@ -711,7 +896,7 @@
=20
static int
setup_xattrs(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
char buff[512];
char *list, *p;
@@ -723,8 +908,22 @@
if (path =3D=3D NULL)
path =3D archive_entry_pathname(entry);
=20
- if (fd >=3D 0)
- list_size =3D extattr_list_fd(fd, namespace, NULL, 0);
+ if (*fd < 0 && a->tree !=3D NULL) {
+ if (a->follow_symlinks ||
+ archive_entry_filetype(entry) !=3D AE_IFLNK)
+ *fd =3D a->open_on_current_dir(a->tree, path,
+ O_RDONLY | O_NONBLOCK);
+ if (*fd < 0) {
+ if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+ archive_set_error(&a->archive, errno,
+ "Couldn't access %s", path);
+ return (ARCHIVE_FAILED);
+ }
+ }
+ }
+
+ if (*fd >=3D 0)
+ list_size =3D extattr_list_fd(*fd, namespace, NULL, 0);
else if (!a->follow_symlinks)
list_size =3D extattr_list_link(path, namespace, NULL, 0);
else
@@ -746,8 +945,8 @@
return (ARCHIVE_FATAL);
}
=20
- if (fd >=3D 0)
- list_size =3D extattr_list_fd(fd, namespace, list, list_size);
+ if (*fd >=3D 0)
+ list_size =3D extattr_list_fd(*fd, namespace, list, list_size);
else if (!a->follow_symlinks)
list_size =3D extattr_list_link(path, namespace, list, list_size);
else
@@ -769,7 +968,7 @@
name =3D buff + strlen(buff);
memcpy(name, p + 1, len);
name[len] =3D '\0';
- setup_xattr(a, entry, namespace, name, buff, fd);
+ setup_xattr(a, entry, namespace, name, buff, *fd);
p +=3D 1 + len;
}
=20
@@ -784,7 +983,7 @@
*/
static int
setup_xattrs(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
(void)a; /* UNUSED */
(void)entry; /* UNUSED */
@@ -813,14 +1012,13 @@
=20
static int
setup_sparse(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
char buff[4096];
struct fiemap *fm;
struct fiemap_extent *fe;
int64_t size;
int count, do_fiemap;
- int initial_fd =3D fd;
int exit_sts =3D ARCHIVE_OK;
=20
if (archive_entry_filetype(entry) !=3D AE_IFREG
@@ -828,14 +1026,18 @@
|| archive_entry_hardlink(entry) !=3D NULL)
return (ARCHIVE_OK);
=20
- if (fd < 0) {
+ if (*fd < 0) {
const char *path;
=20
path =3D archive_entry_sourcepath(entry);
if (path =3D=3D NULL)
path =3D archive_entry_pathname(entry);
- fd =3D open(path, O_RDONLY | O_NONBLOCK);
- if (fd < 0) {
+ if (a->tree !=3D NULL)
+ *fd =3D a->open_on_current_dir(a->tree, path,
+ O_RDONLY | O_NONBLOCK);
+ else
+ *fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (*fd < 0) {
archive_set_error(&a->archive, errno,
"Can't open `%s'", path);
return (ARCHIVE_FAILED);
@@ -853,18 +1055,11 @@
for (;;) {
int i, r;
=20
- r =3D ioctl(fd, FS_IOC_FIEMAP, fm);=20
+ r =3D ioctl(*fd, FS_IOC_FIEMAP, fm);=20
if (r < 0) {
- /* When errno is ENOTTY, it is better we should
- * return ARCHIVE_OK because an earlier version
- *(<2.6.28) cannot perfom FS_IOC_FIEMAP.
- * We should also check if errno is EOPNOTSUPP,
- * it means "Operation not supported". */
- if (errno !=3D ENOTTY && errno !=3D EOPNOTSUPP) {
- archive_set_error(&a->archive, errno,
- "FIEMAP failed");
- exit_sts =3D ARCHIVE_FAILED;
- }
+ /* When something error happens, it is better we
+ * should return ARCHIVE_OK because an earlier
+ * version(<2.6.28) cannot perfom FS_IOC_FIEMAP. */
goto exit_setup_sparse;
}
if (fm->fm_mapped_extents =3D=3D 0)
@@ -896,8 +1091,6 @@
break;
}
exit_setup_sparse:
- if (initial_fd !=3D fd)
- close(fd);
return (exit_sts);
}
=20
@@ -909,10 +1102,9 @@
=20
static int
setup_sparse(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
int64_t size;
- int initial_fd =3D fd;
off_t initial_off; /* FreeBSD/Solaris only, so off_t okay here */
off_t off_s, off_e; /* FreeBSD/Solaris only, so off_t okay here */
int exit_sts =3D ARCHIVE_OK;
@@ -923,22 +1115,38 @@
return (ARCHIVE_OK);
=20
/* Does filesystem support the reporting of hole ? */
- if (fd >=3D 0) {
- if (fpathconf(fd, _PC_MIN_HOLE_SIZE) <=3D 0)
+ if (*fd < 0 && a->tree !=3D NULL) {
+ const char *path;
+
+ path =3D archive_entry_sourcepath(entry);
+ if (path =3D=3D NULL)
+ path =3D archive_entry_pathname(entry);
+ *fd =3D a->open_on_current_dir(a->tree, path,
+ O_RDONLY | O_NONBLOCK);
+ if (*fd < 0) {
+ archive_set_error(&a->archive, errno,
+ "Can't open `%s'", path);
+ return (ARCHIVE_FAILED);
+ }
+ }
+
+ if (*fd >=3D 0) {
+ if (fpathconf(*fd, _PC_MIN_HOLE_SIZE) <=3D 0)
return (ARCHIVE_OK);
- initial_off =3D lseek(fd, 0, SEEK_CUR);
+ initial_off =3D lseek(*fd, 0, SEEK_CUR);
if (initial_off !=3D 0)
- lseek(fd, 0, SEEK_SET);
+ lseek(*fd, 0, SEEK_SET);
} else {
const char *path;
=20
path =3D archive_entry_sourcepath(entry);
if (path =3D=3D NULL)
path =3D archive_entry_pathname(entry);
+ =09
if (pathconf(path, _PC_MIN_HOLE_SIZE) <=3D 0)
return (ARCHIVE_OK);
- fd =3D open(path, O_RDONLY | O_NONBLOCK);
- if (fd < 0) {
+ *fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (*fd < 0) {
archive_set_error(&a->archive, errno,
"Can't open `%s'", path);
return (ARCHIVE_FAILED);
@@ -949,7 +1157,7 @@
off_s =3D 0;
size =3D archive_entry_size(entry);
while (off_s < size) {
- off_s =3D lseek(fd, off_s, SEEK_DATA);
+ off_s =3D lseek(*fd, off_s, SEEK_DATA);
if (off_s =3D=3D (off_t)-1) {
if (errno =3D=3D ENXIO)
break;/* no more hole */
@@ -958,10 +1166,10 @@
exit_sts =3D ARCHIVE_FAILED;
goto exit_setup_sparse;
}
- off_e =3D lseek(fd, off_s, SEEK_HOLE);
- if (off_s =3D=3D (off_t)-1) {
+ off_e =3D lseek(*fd, off_s, SEEK_HOLE);
+ if (off_e =3D=3D (off_t)-1) {
if (errno =3D=3D ENXIO) {
- off_e =3D lseek(fd, 0, SEEK_END);
+ off_e =3D lseek(*fd, 0, SEEK_END);
if (off_e !=3D (off_t)-1)
break;/* no more data */
}
@@ -977,10 +1185,7 @@
off_s =3D off_e;
}
exit_setup_sparse:
- if (initial_fd !=3D fd)
- close(fd);
- else
- lseek(fd, initial_off, SEEK_SET);
+ lseek(*fd, initial_off, SEEK_SET);
return (exit_sts);
}
=20
@@ -991,7 +1196,7 @@
*/
static int
setup_sparse(struct archive_read_disk *a,
- struct archive_entry *entry, int fd)
+ struct archive_entry *entry, int *fd)
{
(void)a; /* UNUSED */
(void)entry; /* UNUSED */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk_posix.c
--- a/head/contrib/libarchive/libarchive/archive_read_disk_posix.c Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk_posix.c Fri Aug =
10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 2003-2009 Tim Kientzle
- * Copyright (c) 2010,2011 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -52,6 +52,19 @@
#ifdef HAVE_LINUX_MAGIC_H
#include <linux/magic.h>
#endif
+#ifdef HAVE_LINUX_FS_H
+#include <linux/fs.h>
+#endif
+/*
+ * Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
+ * As the include guards don't agree, the order of include is important.
+ */
+#ifdef HAVE_LINUX_EXT2_FS_H
+#include <linux/ext2_fs.h> /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h> /* Linux file flags, broken on Cygwin */
+#endif
#ifdef HAVE_DIRECT_H
#include <direct.h>
#endif
@@ -76,6 +89,9 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
=20
#include "archive.h"
#include "archive_string.h"
@@ -222,6 +238,7 @@
char symlink_mode;
struct filesystem *current_filesystem;
struct filesystem *filesystem_table;
+ int initial_filesystem_id;
int current_filesystem_id;
int max_filesystem_id;
int allocated_filesytem;
@@ -240,6 +257,7 @@
#define onWorkingDir 64 /* We are on the working dir where we are
* reading directory entry at this time. */
#define needsRestoreTimes 128
+#define onInitialDir 256 /* We are on the initial dir. */
=20
static int
tree_dir_next_posix(struct tree *t);
@@ -342,6 +360,7 @@
static int setup_sparse(struct archive_read_disk *, struct archive_entry *=
);
static int close_and_restore_time(int fd, struct tree *,
struct restore_time *);
+static int open_on_current_dir(struct tree *, const char *, int);
=20
=20
static struct archive_vtable *
@@ -430,16 +449,19 @@
{
struct archive_read_disk *a;
=20
- a =3D (struct archive_read_disk *)malloc(sizeof(*a));
+ a =3D (struct archive_read_disk *)calloc(1, sizeof(*a));
if (a =3D=3D NULL)
return (NULL);
- memset(a, 0, sizeof(*a));
a->archive.magic =3D ARCHIVE_READ_DISK_MAGIC;
a->archive.state =3D ARCHIVE_STATE_NEW;
a->archive.vtable =3D archive_read_disk_vtable();
a->lookup_uname =3D trivial_lookup_uname;
a->lookup_gname =3D trivial_lookup_gname;
- a->entry_wd_fd =3D -1;
+ a->enable_copyfile =3D 1;
+ a->traverse_mount_points =3D 1;
+ a->open_on_current_dir =3D open_on_current_dir;
+ a->tree_current_dir_fd =3D tree_current_dir_fd;
+ a->tree_enter_working_dir =3D tree_enter_working_dir;
return (&a->archive);
}
=20
@@ -555,6 +577,37 @@
#endif
}
=20
+int
+archive_read_disk_set_behavior(struct archive *_a, int flags)
+{
+ struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+ int r =3D ARCHIVE_OK;
+
+ archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+ ARCHIVE_STATE_ANY, "archive_read_disk_honor_nodump");
+
+ if (flags & ARCHIVE_READDISK_RESTORE_ATIME)
+ r =3D archive_read_disk_set_atime_restored(_a);
+ else {
+ a->restore_time =3D 0;
+ if (a->tree !=3D NULL)
+ a->tree->flags &=3D ~needsRestoreTimes;
+ }
+ if (flags & ARCHIVE_READDISK_HONOR_NODUMP)
+ a->honor_nodump =3D 1;
+ else
+ a->honor_nodump =3D 0;
+ if (flags & ARCHIVE_READDISK_MAC_COPYFILE)
+ a->enable_copyfile =3D 1;
+ else
+ a->enable_copyfile =3D 0;
+ if (flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS)
+ a->traverse_mount_points =3D 0;
+ else
+ a->traverse_mount_points =3D 1;
+ return (r);
+}
+
/*
* Trivial implementations of gname/uname lookup functions.
* These are normally overridden by the client, but these stub
@@ -685,13 +738,8 @@
flags |=3D O_NOATIME;
do {
#endif
-#ifdef HAVE_OPENAT
- t->entry_fd =3D openat(tree_current_dir_fd(t),
+ t->entry_fd =3D open_on_current_dir(t,
tree_current_access_path(t), flags);
-#else
- tree_enter_working_dir(t);
- t->entry_fd =3D open(tree_current_access_path(t), flags);
-#endif
#if defined(O_NOATIME)
/*
* When we did open the file with O_NOATIME flag,
@@ -802,29 +850,17 @@
}
=20
static int
-_archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
+next_entry(struct archive_read_disk *a, struct tree *t,
+ struct archive_entry *entry)
{
- struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
- struct tree *t;
const struct stat *st; /* info to use for this entry */
const struct stat *lst;/* lstat() information */
- int descend, fd =3D -1, r;
+ const char *name;
+ int descend, r;
=20
- archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
- ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
- "archive_read_next_header2");
-
- t =3D a->tree;
- if (t->entry_fd >=3D 0) {
- close_and_restore_time(t->entry_fd, t, &t->restore_time);
- t->entry_fd =3D -1;
- }
-#if !(defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPEN=
DIR))
- /* Restore working directory. */
- tree_enter_working_dir(t);
-#endif
st =3D NULL;
lst =3D NULL;
+ t->descend =3D 0;
do {
switch (tree_next(t)) {
case TREE_ERROR_FATAL:
@@ -859,6 +895,38 @@
}=09
} while (lst =3D=3D NULL);
=20
+#ifdef __APPLE__
+ if (a->enable_copyfile) {
+ /* If we're using copyfile(), ignore "._XXX" files. */
+ const char *bname =3D strrchr(tree_current_path(t), '/');
+ if (bname =3D=3D NULL)
+ bname =3D tree_current_path(t);
+ else
+ ++bname;
+ if (bname[0] =3D=3D '.' && bname[1] =3D=3D '_')
+ return (ARCHIVE_RETRY);
+ }
+#endif
+
+ archive_entry_copy_pathname(entry, tree_current_path(t));
+ /*
+ * Perform path matching.
+ */
+ if (a->matching) {
+ r =3D archive_match_path_excluded(a->matching, entry);
+ if (r < 0) {
+ archive_set_error(&(a->archive), errno,
+ "Faild : %s", archive_error_string(a->matching));
+ return (r);
+ }
+ if (r) {
+ if (a->excluded_cb_func)
+ a->excluded_cb_func(&(a->archive),
+ a->excluded_cb_data, entry);
+ return (ARCHIVE_RETRY);
+ }
+ }
+
/*
* Distinguish 'L'/'P'/'H' symlink following.
*/
@@ -897,13 +965,44 @@
tree_enter_initial_dir(t);
return (ARCHIVE_FATAL);
}
+ if (t->initial_filesystem_id =3D=3D -1)
+ t->initial_filesystem_id =3D t->current_filesystem_id;
+ if (!a->traverse_mount_points) {
+ if (t->initial_filesystem_id !=3D t->current_filesystem_id)
+ return (ARCHIVE_RETRY);
+ }
t->descend =3D descend;
=20
- archive_entry_set_pathname(entry, tree_current_path(t));
- archive_entry_copy_sourcepath(entry, tree_current_access_path(t));
+ /*
+ * Honor nodump flag.
+ * If the file is marked with nodump flag, do not return this entry.
+ */
+ if (a->honor_nodump) {
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+ if (st->st_flags & UF_NODUMP)
+ return (ARCHIVE_RETRY);
+#elif defined(EXT2_IOC_GETFLAGS) && defined(EXT2_NODUMP_FL) &&\
+ defined(HAVE_WORKING_EXT2_IOC_GETFLAGS)
+ if (S_ISREG(st->st_mode) || S_ISDIR(st->st_mode)) {
+ unsigned long stflags;
+
+ t->entry_fd =3D open_on_current_dir(t,
+ tree_current_access_path(t), O_RDONLY | O_NONBLOCK);
+ if (t->entry_fd >=3D 0) {
+ r =3D ioctl(t->entry_fd, EXT2_IOC_GETFLAGS,
+ &stflags);
+ if (r =3D=3D 0 && (stflags & EXT2_NODUMP_FL) !=3D 0)
+ return (ARCHIVE_RETRY);
+ }
+ }
+#endif
+ }
+
archive_entry_copy_stat(entry, st);
=20
- /* Save the times to be restored. */
+ /* Save the times to be restored. This must be in before
+ * calling archive_read_disk_descend() or any chance of it,
+ * especially, invokng a callback. */
t->restore_time.mtime =3D archive_entry_mtime(entry);
t->restore_time.mtime_nsec =3D archive_entry_mtime_nsec(entry);
t->restore_time.atime =3D archive_entry_atime(entry);
@@ -911,39 +1010,102 @@
t->restore_time.filetype =3D archive_entry_filetype(entry);
t->restore_time.noatime =3D t->current_filesystem->noatime;
=20
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
/*
- * Open the current file to freely gather its metadata anywhere in
- * working directory.
- * Note: A symbolic link file cannot be opened with O_NOFOLLOW.
+ * Perform time matching.
*/
- if (a->follow_symlinks || archive_entry_filetype(entry) !=3D AE_IFLNK)
- fd =3D openat(tree_current_dir_fd(t), tree_current_access_path(t),
- O_RDONLY | O_NONBLOCK);
- /* Restore working directory if openat() operation failed or
- * the file is a symbolic link. */
- if (fd < 0)
- tree_enter_working_dir(t);
+ if (a->matching) {
+ r =3D archive_match_time_excluded(a->matching, entry);
+ if (r < 0) {
+ archive_set_error(&(a->archive), errno,
+ "Faild : %s", archive_error_string(a->matching));
+ return (r);
+ }
+ if (r) {
+ if (a->excluded_cb_func)
+ a->excluded_cb_func(&(a->archive),
+ a->excluded_cb_data, entry);
+ return (ARCHIVE_RETRY);
+ }
+ }
=20
- /* The current direcotry fd is needed at
- * archive_read_disk_entry_from_file() function to read link data
- * with readlinkat(). */
- a->entry_wd_fd =3D tree_current_dir_fd(t);
-#endif
+ /* Lookup uname/gname */
+ name =3D archive_read_disk_uname(&(a->archive), archive_entry_uid(entry));
+ if (name !=3D NULL)
+ archive_entry_copy_uname(entry, name);
+ name =3D archive_read_disk_gname(&(a->archive), archive_entry_gid(entry));
+ if (name !=3D NULL)
+ archive_entry_copy_gname(entry, name);
+
+ /*
+ * Perform owner matching.
+ */
+ if (a->matching) {
+ r =3D archive_match_owner_excluded(a->matching, entry);
+ if (r < 0) {
+ archive_set_error(&(a->archive), errno,
+ "Faild : %s", archive_error_string(a->matching));
+ return (r);
+ }
+ if (r) {
+ if (a->excluded_cb_func)
+ a->excluded_cb_func(&(a->archive),
+ a->excluded_cb_data, entry);
+ return (ARCHIVE_RETRY);
+ }
+ }
+
+ /*
+ * Invoke a meta data filter callback.
+ */
+ if (a->metadata_filter_func) {
+ if (!a->metadata_filter_func(&(a->archive),
+ a->metadata_filter_data, entry))
+ return (ARCHIVE_RETRY);
+ }
=20
/*
* Populate the archive_entry with metadata from the disk.
*/
- r =3D archive_read_disk_entry_from_file(&(a->archive), entry, fd, st);
+ archive_entry_copy_sourcepath(entry, tree_current_access_path(t));
+ r =3D archive_read_disk_entry_from_file(&(a->archive), entry,
+ t->entry_fd, st);
=20
- /* Close the file descriptor used for reding the current file
- * metadata at archive_read_disk_entry_from_file(). */
- if (fd >=3D 0)
- close(fd);
+ return (r);
+}
+
+static int
+_archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
+{
+ struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+ struct tree *t;
+ int r;
+
+ archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+ ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
+ "archive_read_next_header2");
+
+ t =3D a->tree;
+ if (t->entry_fd >=3D 0) {
+ close_and_restore_time(t->entry_fd, t, &t->restore_time);
+ t->entry_fd =3D -1;
+ }
+
+ for (;;) {
+ r =3D next_entry(a, t, entry);
+ if (t->entry_fd >=3D 0) {
+ close(t->entry_fd);
+ t->entry_fd =3D -1;
+ }
+
+ if (r =3D=3D ARCHIVE_RETRY) {
+ archive_entry_clear(entry);
+ continue;
+ }
+ break;
+ }
=20
/* Return to the initial directory. */
tree_enter_initial_dir(t);
- archive_entry_copy_sourcepath(entry, tree_current_path(t));
=20
/*
* EOF and FATAL are persistent at this layer. By
@@ -956,6 +1118,8 @@
break;
case ARCHIVE_OK:
case ARCHIVE_WARN:
+ /* Overwrite the sourcepath based on the initial directory. */
+ archive_entry_copy_sourcepath(entry, tree_current_path(t));
t->entry_total =3D 0;
if (archive_entry_filetype(entry) =3D=3D AE_IFREG) {
t->nlink =3D archive_entry_nlink(entry);
@@ -1018,6 +1182,48 @@
return (ARCHIVE_OK);
}
=20
+int
+archive_read_disk_set_matching(struct archive *_a, struct archive *_ma,
+ void (*_excluded_func)(struct archive *, void *, struct archive_entry =
*),
+ void *_client_data)
+{
+ struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+ archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+ ARCHIVE_STATE_ANY, "archive_read_disk_set_matching");
+ a->matching =3D _ma;
+ a->excluded_cb_func =3D _excluded_func;
+ a->excluded_cb_data =3D _client_data;
+ return (ARCHIVE_OK);
+}
+
+int
+archive_read_disk_set_metadata_filter_callback(struct archive *_a,
+ int (*_metadata_filter_func)(struct archive *, void *,
+ struct archive_entry *), void *_client_data)
+{
+ struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+
+ archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC, ARCHIVE_STATE_ANY,
+ "archive_read_disk_set_metadata_filter_callback");
+
+ a->metadata_filter_func =3D _metadata_filter_func;
+ a->metadata_filter_data =3D _client_data;
+ return (ARCHIVE_OK);
+}
+
+int
+archive_read_disk_can_descend(struct archive *_a)
+{
+ struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+ struct tree *t =3D a->tree;
+
+ archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+ ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
+ "archive_read_disk_can_descend");
+
+ return (t->visit_type =3D=3D TREE_REGULAR && t->descend);
+}
+
/*
* Called by the client to mark the directory just returned from
* tree_next() as needing to be visited.
@@ -1028,14 +1234,12 @@
struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
struct tree *t =3D a->tree;
=20
- archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC, ARCHIVE_STATE_DATA,
+ archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+ ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
"archive_read_disk_descend");
=20
- if (t->visit_type !=3D TREE_REGULAR || !t->descend) {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Ignored the request descending the current object");
- return (ARCHIVE_WARN);
- }
+ if (t->visit_type !=3D TREE_REGULAR || !t->descend)
+ return (ARCHIVE_OK);
=20
if (tree_current_is_physical_dir(t)) {
tree_push(t, t->basename, t->current_filesystem_id,
@@ -1079,8 +1283,12 @@
archive_string_init(&path);
if (archive_string_append_from_wcs(&path, pathname,
wcslen(pathname)) !=3D 0) {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Can't convert a path to a char string");
+ if (errno =3D=3D ENOMEM)
+ archive_set_error(&a->archive, ENOMEM,
+ "Can't allocate memory");
+ else
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Can't convert a path to a char string");
a->archive.state =3D ARCHIVE_STATE_FATAL;
ret =3D ARCHIVE_FATAL;
} else
@@ -1268,7 +1476,7 @@
t->current_filesystem->synthetic =3D -1;
t->current_filesystem->remote =3D -1;
if (tree_current_is_symblic_link_target(t)) {
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
+#if defined(HAVE_OPENAT)
/*
* Get file system statistics on any directory
* where current is.
@@ -1285,6 +1493,10 @@
xr =3D get_xfer_size(t, fd, NULL);
close(fd);
#else
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
r =3D statfs(tree_current_access_path(t), &sfs);
if (r =3D=3D 0)
xr =3D get_xfer_size(t, -1, tree_current_access_path(t));
@@ -1334,9 +1546,13 @@
t->current_filesystem->name_max =3D sfs.f_namemax;
#else
/* Mac OS X does not have f_namemax in struct statfs. */
- if (tree_current_is_symblic_link_target(t))
+ if (tree_current_is_symblic_link_target(t)) {
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
nm =3D pathconf(tree_current_access_path(t), _PC_NAME_MAX);
- else
+ } else
nm =3D fpathconf(tree_current_dir_fd(t), _PC_NAME_MAX);
if (nm =3D=3D -1)
t->current_filesystem->name_max =3D NAME_MAX;
@@ -1360,6 +1576,10 @@
int r, xr =3D 0;
=20
t->current_filesystem->synthetic =3D -1;
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
if (tree_current_is_symblic_link_target(t)) {
r =3D statvfs(tree_current_access_path(t), &sfs);
if (r =3D=3D 0)
@@ -1384,17 +1604,24 @@
* for pathconf() function. */
t->current_filesystem->xfer_align =3D sfs.f_frsize;
t->current_filesystem->max_xfer_size =3D -1;
+#if defined(HAVE_STRUCT_STATVFS_F_IOSIZE)
t->current_filesystem->min_xfer_size =3D sfs.f_iosize;
t->current_filesystem->incr_xfer_size =3D sfs.f_iosize;
+#else
+ t->current_filesystem->min_xfer_size =3D sfs.f_bsize;
+ t->current_filesystem->incr_xfer_size =3D sfs.f_bsize;
+#endif
}
if (sfs.f_flag & ST_LOCAL)
t->current_filesystem->remote =3D 0;
else
t->current_filesystem->remote =3D 1;
=20
+#if defined(ST_NOATIME)
if (sfs.f_flag & ST_NOATIME)
t->current_filesystem->noatime =3D 1;
else
+#endif
t->current_filesystem->noatime =3D 0;
=20
/* Set maximum filename length. */
@@ -1427,7 +1654,7 @@
int r, vr =3D 0, xr =3D 0;
=20
if (tree_current_is_symblic_link_target(t)) {
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
+#if defined(HAVE_OPENAT)
/*
* Get file system statistics on any directory
* where current is.
@@ -1445,6 +1672,10 @@
xr =3D get_xfer_size(t, fd, NULL);
close(fd);
#else
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
vr =3D statvfs(tree_current_access_path(t), &svfs);
r =3D statfs(tree_current_access_path(t), &sfs);
if (r =3D=3D 0)
@@ -1456,9 +1687,11 @@
r =3D fstatfs(tree_current_dir_fd(t), &sfs);
if (r =3D=3D 0)
xr =3D get_xfer_size(t, tree_current_dir_fd(t), NULL);
-#elif defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPEN=
DIR)
-#error "Unexpected case. Please tell us about this error."
#else
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
vr =3D statvfs(".", &svfs);
r =3D statfs(".", &sfs);
if (r =3D=3D 0)
@@ -1529,7 +1762,7 @@
t->current_filesystem->synthetic =3D -1;/* Not supported */
t->current_filesystem->remote =3D -1;/* Not supported */
if (tree_current_is_symblic_link_target(t)) {
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
+#if defined(HAVE_OPENAT)
/*
* Get file system statistics on any directory
* where current is.
@@ -1546,6 +1779,10 @@
xr =3D get_xfer_size(t, fd, NULL);
close(fd);
#else
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
r =3D statvfs(tree_current_access_path(t), &sfs);
if (r =3D=3D 0)
xr =3D get_xfer_size(t, -1, tree_current_access_path(t));
@@ -1555,9 +1792,11 @@
r =3D fstatvfs(tree_current_dir_fd(t), &sfs);
if (r =3D=3D 0)
xr =3D get_xfer_size(t, tree_current_dir_fd(t), NULL);
-#elif defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPEN=
DIR)
-#error "Unexpected case. Please tell us about this error."
#else
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
r =3D statvfs(".", &sfs);
if (r =3D=3D 0)
xr =3D get_xfer_size(t, -1, ".");
@@ -1615,9 +1854,13 @@
#if defined(HAVE_READDIR_R)
/* Set maximum filename length. */
# if defined(_PC_NAME_MAX)
- if (tree_current_is_symblic_link_target(t))
+ if (tree_current_is_symblic_link_target(t)) {
+ if (tree_enter_working_dir(t) !=3D 0) {
+ archive_set_error(&a->archive, errno, "fchdir failed");
+ return (ARCHIVE_FAILED);
+ }
nm =3D pathconf(tree_current_access_path(t), _PC_NAME_MAX);
- else
+ } else
nm =3D fpathconf(tree_current_dir_fd(t), _PC_NAME_MAX);
if (nm =3D=3D -1)
# endif /* _PC_NAME_MAX */
@@ -1697,6 +1940,18 @@
return (0);
}
=20
+static int
+open_on_current_dir(struct tree *t, const char *path, int flags)
+{
+#ifdef HAVE_OPENAT
+ return (openat(tree_current_dir_fd(t), path, flags));
+#else
+ if (tree_enter_working_dir(t) !=3D 0)
+ return (-1);
+ return (open(path, flags));
+#endif
+}
+
/*
* Add a directory path to the current stack.
*/
@@ -1778,6 +2033,7 @@
tree_reopen(struct tree *t, const char *path, int restore_time)
{
t->flags =3D (restore_time)?needsRestoreTimes:0;
+ t->flags |=3D onInitialDir;
t->visit_type =3D 0;
t->tree_errno =3D 0;
t->dirname_length =3D 0;
@@ -1790,6 +2046,7 @@
t->entry_fd =3D -1;
t->entry_eof =3D 0;
t->entry_remaining_bytes =3D 0;
+ t->initial_filesystem_id =3D -1;
=20
/* First item is set up a lot like a symlink traversal. */
tree_push(t, path, 0, 0, 0, NULL);
@@ -1803,12 +2060,14 @@
static int
tree_descent(struct tree *t)
{
- int r =3D 0;
+ int flag, new_fd, r =3D 0;
=20
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
- int new_fd;
t->dirname_length =3D archive_strlen(&t->path);
- new_fd =3D openat(t->working_dir_fd, t->stack->name.s, O_RDONLY);
+ flag =3D O_RDONLY;
+#if defined(O_DIRECTORY)
+ flag |=3D O_DIRECTORY;
+#endif
+ new_fd =3D open_on_current_dir(t, t->stack->name.s, flag);
if (new_fd < 0) {
t->tree_errno =3D errno;
r =3D TREE_ERROR_DIR;
@@ -1822,30 +2081,10 @@
t->maxOpenCount =3D t->openCount;
} else
close(t->working_dir_fd);
+ /* Renew the current working directory. */
t->working_dir_fd =3D new_fd;
+ t->flags &=3D ~onWorkingDir;
}
-#else
- /* If it is a link, set up fd for the ascent. */
- if (t->stack->flags & isDirLink)
- t->stack->symlink_parent_fd =3D t->working_dir_fd;
- else {
- close(t->working_dir_fd);
- t->openCount--;
- }
- t->working_dir_fd =3D -1;
- t->dirname_length =3D archive_strlen(&t->path);
- if (chdir(t->stack->name.s) !=3D 0)
- {
- t->tree_errno =3D errno;
- r =3D TREE_ERROR_DIR;
- } else {
- t->depth++;
- t->working_dir_fd =3D open(".", O_RDONLY);
- t->openCount++;
- if (t->openCount > t->maxOpenCount)
- t->maxOpenCount =3D t->openCount;
- }
-#endif
return (r);
}
=20
@@ -1856,37 +2095,21 @@
tree_ascend(struct tree *t)
{
struct tree_entry *te;
- int r =3D 0, prev_dir_fd;
+ int new_fd, r =3D 0, prev_dir_fd;
=20
te =3D t->stack;
prev_dir_fd =3D t->working_dir_fd;
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
if (te->flags & isDirLink)
- t->working_dir_fd =3D te->symlink_parent_fd;
- else {
- int new_fd =3D openat(t->working_dir_fd, "..", O_RDONLY);
- if (new_fd < 0) {
- t->tree_errno =3D errno;
- r =3D TREE_ERROR_FATAL;
- } else
- t->working_dir_fd =3D new_fd;
- }
-#else
- if (te->flags & isDirLink) {
- if (fchdir(te->symlink_parent_fd) !=3D 0) {
- t->tree_errno =3D errno;
- r =3D TREE_ERROR_FATAL;
- } else
- t->working_dir_fd =3D te->symlink_parent_fd;
+ new_fd =3D te->symlink_parent_fd;
+ else
+ new_fd =3D open_on_current_dir(t, "..", O_RDONLY);
+ if (new_fd < 0) {
+ t->tree_errno =3D errno;
+ r =3D TREE_ERROR_FATAL;
} else {
- if (chdir("..") !=3D 0) {
- t->tree_errno =3D errno;
- r =3D TREE_ERROR_FATAL;
- } else
- t->working_dir_fd =3D open(".", O_RDONLY);
- }
-#endif
- if (r =3D=3D 0) {
+ /* Renew the current working directory. */
+ t->working_dir_fd =3D new_fd;
+ t->flags &=3D ~onWorkingDir;
/* Current directory has been changed, we should
* close an fd of previous working directory. */
close_and_restore_time(prev_dir_fd, t, &te->restore_time);
@@ -1907,10 +2130,12 @@
{
int r =3D 0;
=20
- if (t->flags & onWorkingDir) {
+ if ((t->flags & onInitialDir) =3D=3D 0) {
r =3D fchdir(t->initial_dir_fd);
- if (r =3D=3D 0)
+ if (r =3D=3D 0) {
t->flags &=3D ~onWorkingDir;
+ t->flags |=3D onInitialDir;
+ }
}
return (r);
}
@@ -1930,8 +2155,10 @@
*/
if (t->depth > 0 && (t->flags & onWorkingDir) =3D=3D 0) {
r =3D fchdir(t->working_dir_fd);
- if (r =3D=3D 0)
+ if (r =3D=3D 0) {
+ t->flags &=3D ~onInitialDir;
t->flags |=3D onWorkingDir;
+ }
}
return (r);
}
@@ -2040,7 +2267,8 @@
#if defined(HAVE_FDOPENDIR)
if ((t->d =3D fdopendir(dup(t->working_dir_fd))) =3D=3D NULL) {
#else
- if ((t->d =3D opendir(".")) =3D=3D NULL) {
+ if (tree_enter_working_dir(t) !=3D 0 ||
+ (t->d =3D opendir(".")) =3D=3D NULL) {
#endif
r =3D tree_ascend(t); /* Undo "chdir" */
tree_pop(t);
@@ -2111,6 +2339,8 @@
if (fstatat(tree_current_dir_fd(t),
tree_current_access_path(t), &t->st, 0) !=3D 0)
#else
+ if (tree_enter_working_dir(t) !=3D 0)
+ return NULL;
if (stat(tree_current_access_path(t), &t->st) !=3D 0)
#endif
return NULL;
@@ -2131,6 +2361,8 @@
tree_current_access_path(t), &t->lst,
AT_SYMLINK_NOFOLLOW) !=3D 0)
#else
+ if (tree_enter_working_dir(t) !=3D 0)
+ return NULL;
if (lstat(tree_current_access_path(t), &t->lst) !=3D 0)
#endif
return NULL;
@@ -2152,7 +2384,10 @@
*/
if (t->flags & hasLstat) {
/* If lstat() says it's a dir, it must be a dir. */
- if (S_ISDIR(tree_current_lstat(t)->st_mode))
+ st =3D tree_current_lstat(t);
+ if (st =3D=3D NULL)
+ return 0;
+ if (S_ISDIR(st->st_mode))
return 1;
/* Not a dir; might be a link to a dir. */
/* If it's not a link, then it's not a link to a dir. */
@@ -2186,9 +2421,13 @@
* If stat() says it isn't a dir, then it's not a dir.
* If stat() data is cached, this check is free, so do it first.
*/
- if ((t->flags & hasStat)
- && (!S_ISDIR(tree_current_stat(t)->st_mode)))
- return 0;
+ if (t->flags & hasStat) {
+ st =3D tree_current_stat(t);
+ if (st =3D=3D NULL)
+ return (0);
+ if (!S_ISDIR(st->st_mode))
+ return (0);
+ }
=20
/*
* Either stat() said it was a dir (in which case, we have
@@ -2232,7 +2471,7 @@
=20
lst =3D tree_current_lstat(t);
st =3D tree_current_stat(t);
- return (st !=3D NULL &&
+ return (st !=3D NULL && lst !=3D NULL &&
(int64_t)st->st_dev =3D=3D t->current_filesystem->dev &&
st->st_dev !=3D lst->st_dev);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk_private.h
--- a/head/contrib/libarchive/libarchive/archive_read_disk_private.h Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk_private.h Fri Au=
g 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_private.=
h 232153 2012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_private.=
h 238856 2012-07-28 06:38:44Z mm $
*/
=20
#ifndef __LIBARCHIVE_BUILD
@@ -34,6 +34,7 @@
#define ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED
=20
struct tree;
+struct archive_entry;
=20
struct archive_read_disk {
struct archive archive;
@@ -55,10 +56,18 @@
=20
/* Directory traversals. */
struct tree *tree;
+ int (*open_on_current_dir)(struct tree*, const char *, int);
+ int (*tree_current_dir_fd)(struct tree*);
+ int (*tree_enter_working_dir)(struct tree*);
=20
/* Set 1 if users request to restore atime . */
int restore_time;
- int entry_wd_fd;
+ /* Set 1 if users request to honor nodump flag . */
+ int honor_nodump;
+ /* Set 1 if users request to enable mac copyfile. */
+ int enable_copyfile;
+ /* Set 1 if users request to traverse mount points. */
+ int traverse_mount_points;
=20
const char * (*lookup_gname)(void *private, int64_t gid);
void (*cleanup_gname)(void *private);
@@ -66,6 +75,18 @@
const char * (*lookup_uname)(void *private, int64_t uid);
void (*cleanup_uname)(void *private);
void *lookup_uname_data;
+
+ int (*metadata_filter_func)(struct archive *, void *,
+ struct archive_entry *);
+ void *metadata_filter_data;
+
+ /* ARCHIVE_MATCH object. */
+ struct archive *matching;
+ /* Callback function, this will be invoked when ARCHIVE_MATCH
+ * archive_match_*_excluded_ae return true. */
+ void (*excluded_cb_func)(struct archive *, void *,
+ struct archive_entry *);
+ void *excluded_cb_data;
};
=20
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_extract.3
--- a/head/contrib/libarchive/libarchive/archive_read_extract.3 Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_extract.3 Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 22, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_EXTRACT 3
.Os
.Sh NAME
@@ -32,6 +32,8 @@
.Nm archive_read_extract2 ,
.Nm archive_read_extract_set_progress_callback
.Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_filter.3
--- a/head/contrib/libarchive/libarchive/archive_read_filter.3 Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_filter.3 Fri Aug 10 1=
4:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 19, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_FILTER 3
.Os
.Sh NAME
@@ -39,6 +39,8 @@
.Nm archive_read_support_filter_program_signature
.Nd functions for reading streaming archives
.\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_format.3
--- a/head/contrib/libarchive/libarchive/archive_read_format.3 Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_format.3 Fri Aug 10 1=
4:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd March 19, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_FORMAT 3
.Os
.Sh NAME
@@ -45,6 +45,8 @@
.Nm archive_read_support_format_zip
.Nd functions for reading streaming archives
.\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_free.3
--- a/head/contrib/libarchive/libarchive/archive_read_free.3 Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_free.3 Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd March 20, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_FREE 3
.Os
.Sh NAME
@@ -32,6 +32,8 @@
.Nm archive_read_finish ,
.Nm archive_read_free
.Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_header.3
--- a/head/contrib/libarchive/libarchive/archive_read_header.3 Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_header.3 Fri Aug 10 1=
4:19:25 2012 +0300
@@ -24,13 +24,15 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 22, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_HEADER 3
.Os
.Sh NAME
.Nm archive_read_next_header ,
.Nm archive_read_next_header2
.Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_new.3
--- a/head/contrib/libarchive/libarchive/archive_read_new.3 Mon Jul 30 11:4=
4:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_new.3 Fri Aug 10 14:1=
9:25 2012 +0300
@@ -22,14 +22,16 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd March 20, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_NEW 3
.Os
.Sh NAME
.Nm archive_read_new
.Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_open.3
--- a/head/contrib/libarchive/libarchive/archive_read_open.3 Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_open.3 Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd March 19, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_READ_OPEN 3
.Os
.Sh NAME
@@ -35,6 +35,8 @@
.Nm archive_read_open_filename ,
.Nm archive_read_open_memory ,
.Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_open_fd.c
--- a/head/contrib/libarchive/libarchive/archive_read_open_fd.c Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_open_fd.c Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
d.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
d.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -129,8 +129,8 @@
file_skip(struct archive *a, void *client_data, int64_t request)
{
struct read_fd_data *mine =3D (struct read_fd_data *)client_data;
- off_t skip =3D (off_t)request;
- off_t old_offset, new_offset;
+ int64_t skip =3D request;
+ int64_t old_offset, new_offset;
int skip_bits =3D sizeof(skip) * 8 - 1; /* off_t is a signed type. */
=20
if (!mine->use_lseek)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_open_filename.c
--- a/head/contrib/libarchive/libarchive/archive_read_open_filename.c Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_open_filename.c Fri A=
ug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
ilename.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
ilename.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
@@ -130,9 +130,13 @@
archive_string_init(&fn);
if (archive_string_append_from_wcs(&fn, wfilename,
wcslen(wfilename)) !=3D 0) {
- archive_set_error(a, EINVAL,
- "Failed to convert a wide-character filename to"
- " a multi-byte filename");
+ if (errno =3D=3D ENOMEM)
+ archive_set_error(a, errno,
+ "Can't allocate memory");
+ else
+ archive_set_error(a, EINVAL,
+ "Failed to convert a wide-character"
+ " filename to a multi-byte filename");
archive_string_free(&fn);
return (ARCHIVE_FATAL);
}
@@ -450,7 +454,7 @@
file_seek(struct archive *a, void *client_data, int64_t request, int whenc=
e)
{
struct read_file_data *mine =3D (struct read_file_data *)client_data;
- off_t r;
+ int64_t r;
=20
/* We use off_t here because lseek() is declared that way. */
/* See above for notes about when off_t is less than 64 bits. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_private.h
--- a/head/contrib/libarchive/libarchive/archive_read_private.h Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_private.h Fri Aug 10 =
14:19:25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_private.h 232=
153 2012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_private.h 238=
856 2012-07-28 06:38:44Z mm $
*/
=20
#ifndef __LIBARCHIVE_BUILD
@@ -134,8 +134,8 @@
=20
/* Dev/ino of the archive being read/written. */
int skip_file_set;
- dev_t skip_file_dev;
- ino_t skip_file_ino;
+ int64_t skip_file_dev;
+ int64_t skip_file_ino;
=20
/*
* Used by archive_read_data() to track blocks and copy
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_set_options.3
--- a/head/contrib/libarchive/libarchive/archive_read_set_options.3 Mon Jul=
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_set_options.3 Fri Aug=
10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 13, 2009
+.Dd February 2, 2012
.Dt ARCHIVE_READ_OPTIONS 3
.Os
.Sh NAME
@@ -34,6 +34,8 @@
.Nm archive_read_set_options
.Nd functions controlling options for reading archives
.\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.Ft int
.Fo archive_read_set_filter_option
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_filter_rpm.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -188,7 +188,7 @@
if (rpm->total_in + avail_in < RPM_LEAD_SIZE)
used +=3D avail_in;
else {
- n =3D RPM_LEAD_SIZE - rpm->total_in;
+ n =3D (size_t)(RPM_LEAD_SIZE - rpm->total_in);
used +=3D n;
b +=3D n;
rpm->state =3D ST_HEADER;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_7zip.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c=
Fri Aug 10 14:19:25 2012 +0300
@@ -580,7 +580,7 @@
free_Header(&header);
if (r !=3D ARCHIVE_OK)
return (r);
- zip->entries_remaining =3D zip->numFiles;
+ zip->entries_remaining =3D (size_t)zip->numFiles;
zip->entry =3D zip->entries;
} else {
++zip->entry;
@@ -653,19 +653,24 @@
*/
while (zip->entry_bytes_remaining > 0) {
const void *buff;
+ unsigned char *mem;
size_t size;
int64_t offset;
=20
r =3D archive_read_format_7zip_read_data(a, &buff,
&size, &offset);
- if (r < ARCHIVE_WARN)
+ if (r < ARCHIVE_WARN) {
+ free(symname);
return (r);
- symname =3D realloc(symname, symsize + size + 1);
- if (symname =3D=3D NULL) {
+ }
+ mem =3D realloc(symname, symsize + size + 1);
+ if (mem =3D=3D NULL) {
+ free(symname);
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for Symname");
return (ARCHIVE_FATAL);
}
+ symname =3D mem;
memcpy(symname+symsize, buff, size);
symsize +=3D size;
}
@@ -715,7 +720,8 @@
return (ARCHIVE_EOF);
}
=20
- bytes =3D read_stream(a, buff, zip->entry_bytes_remaining, 0);
+ bytes =3D read_stream(a, buff,
+ (size_t)zip->entry_bytes_remaining, 0);
if (bytes < 0)
return ((int)bytes);
if (bytes =3D=3D 0) {
@@ -773,7 +779,7 @@
* If the length is at the beginning, we can skip the
* compressed data much more quickly.
*/
- bytes_skipped =3D skip_stream(a, zip->entry_bytes_remaining);
+ bytes_skipped =3D skip_stream(a, (size_t)zip->entry_bytes_remaining);
if (bytes_skipped < 0)
return (ARCHIVE_FATAL);
zip->entry_bytes_remaining =3D 0;
@@ -1053,7 +1059,7 @@
ff =3D &filters[fi];
#endif
r =3D lzma_properties_decode(&filters[fi], NULL,
- coder1->properties, coder1->propertiesSize);
+ coder1->properties, (size_t)coder1->propertiesSize);
if (r !=3D LZMA_OK) {
set_error(a, r);
return (ARCHIVE_FAILED);
@@ -1441,8 +1447,8 @@
} while (zip->ppstream.avail_out &&
(zip->ppstream.avail_in || flush_bytes));
=20
- t_avail_in =3D zip->ppstream.avail_in;
- t_avail_out =3D zip->ppstream.avail_out;
+ t_avail_in =3D (size_t)zip->ppstream.avail_in;
+ t_avail_out =3D (size_t)zip->ppstream.avail_out;
break;
}
default:
@@ -1505,6 +1511,10 @@
{
int r =3D ARCHIVE_OK;
=20
+#if !defined(HAVE_ZLIB_H) &&\
+ !(defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR))
+ (void)a;/* UNUSED */
+#endif
#ifdef HAVE_LZMA_H
if (zip->lzstream_valid)
lzma_end(&(zip->lzstream));
@@ -1671,8 +1681,8 @@
return (0);
if (*p !=3D kSize)
return (-1);
- pi->sizes =3D calloc(pi->numPackStreams, sizeof(uint64_t));
- pi->positions =3D calloc(pi->numPackStreams, sizeof(uint64_t));
+ pi->sizes =3D calloc((size_t)pi->numPackStreams, sizeof(uint64_t));
+ pi->positions =3D calloc((size_t)pi->numPackStreams, sizeof(uint64_t));
if (pi->sizes =3D=3D NULL || pi->positions =3D=3D NULL)
return (-1);
=20
@@ -1689,9 +1699,9 @@
if (*p =3D=3D kEnd) {
/* PackStreamDigests[num] are not present. */
pi->digest.defineds =3D
- calloc(pi->numPackStreams, sizeof(*pi->digest.defineds));
+ calloc((size_t)pi->numPackStreams, sizeof(*pi->digest.defineds));
pi->digest.digests =3D
- calloc(pi->numPackStreams, sizeof(*pi->digest.digests));
+ calloc((size_t)pi->numPackStreams, sizeof(*pi->digest.digests));
if (pi->digest.defineds =3D=3D NULL || pi->digest.digests =3D=3D NULL)
return (-1);
return (0);
@@ -1700,7 +1710,7 @@
if (*p !=3D kSize)
return (-1);
=20
- if (read_Digests(a, &(pi->digest), pi->numPackStreams) < 0)
+ if (read_Digests(a, &(pi->digest), (size_t)pi->numPackStreams) < 0)
return (-1);
=20
/*
@@ -1749,7 +1759,7 @@
/* Too many coders. */
return (-1);
=20
- f->coders =3D calloc(f->numCoders, sizeof(*f->coders));
+ f->coders =3D calloc((size_t)f->numCoders, sizeof(*f->coders));
if (f->coders =3D=3D NULL)
return (-1);
for (i =3D 0; i< f->numCoders; i++) {
@@ -1801,14 +1811,14 @@
a, &(f->coders[i].propertiesSize)) < 0)
return (-1);
if ((p =3D header_bytes(
- a, f->coders[i].propertiesSize)) =3D=3D NULL)
+ a, (size_t)f->coders[i].propertiesSize)) =3D=3D NULL)
return (-1);
f->coders[i].properties =3D
- malloc(f->coders[i].propertiesSize);
+ malloc((size_t)f->coders[i].propertiesSize);
if (f->coders[i].properties =3D=3D NULL)
return (-1);
memcpy(f->coders[i].properties, p,
- f->coders[i].propertiesSize);
+ (size_t)f->coders[i].propertiesSize);
}
=20
numInStreamsTotal +=3D f->coders[i].numInStreams;
@@ -1822,9 +1832,13 @@
f->numBindPairs =3D numOutStreamsTotal - 1;
if (zip->header_bytes_remaining < f->numBindPairs)
return (-1);
- f->bindPairs =3D calloc(f->numBindPairs, sizeof(*f->bindPairs));
- if (f->bindPairs =3D=3D NULL)
- return (-1);
+ if (f->numBindPairs > 0) {
+ f->bindPairs =3D
+ calloc((size_t)f->numBindPairs, sizeof(*f->bindPairs));
+ if (f->bindPairs =3D=3D NULL)
+ return (-1);
+ } else
+ f->bindPairs =3D NULL;
for (i =3D 0; i < f->numBindPairs; i++) {
if (parse_7zip_uint64(a, &(f->bindPairs[i].inIndex)) < 0)
return (-1);
@@ -1838,7 +1852,7 @@
=20
f->numPackedStreams =3D numInStreamsTotal - f->numBindPairs;
f->packedStreams =3D
- calloc(f->numPackedStreams, sizeof(*f->packedStreams));
+ calloc((size_t)f->numPackedStreams, sizeof(*f->packedStreams));
if (f->packedStreams =3D=3D NULL)
return (-1);
if (f->numPackedStreams =3D=3D 1) {
@@ -1910,7 +1924,8 @@
goto failed;
switch (*p) {
case 0:
- ci->folders =3D calloc(ci->numFolders, sizeof(*ci->folders));
+ ci->folders =3D
+ calloc((size_t)ci->numFolders, sizeof(*ci->folders));
if (ci->folders =3D=3D NULL)
return (-1);
for (i =3D 0; i < ci->numFolders; i++) {
@@ -1936,7 +1951,7 @@
unsigned j;
=20
folder->unPackSize =3D
- calloc(folder->numOutStreams, sizeof(*folder->unPackSize));
+ calloc((size_t)folder->numOutStreams, sizeof(*folder->unPackSize));
if (folder->unPackSize =3D=3D NULL)
goto failed;
for (j =3D 0; j < folder->numOutStreams; j++) {
@@ -1954,7 +1969,7 @@
return (0);
if (*p !=3D kCRC)
goto failed;
- if (read_Digests(a, &digest, ci->numFolders) < 0)
+ if (read_Digests(a, &digest, (size_t)ci->numFolders) < 0)
goto failed;
for (i =3D 0; i < ci->numFolders; i++) {
ci->folders[i].digest_defined =3D digest.defineds[i];
@@ -1978,8 +1993,8 @@
static uint64_t
folder_uncompressed_size(struct _7z_folder *f)
{
- int n =3D f->numOutStreams;
- unsigned pairs =3D f->numBindPairs;
+ int n =3D (int)f->numOutStreams;
+ unsigned pairs =3D (unsigned)f->numBindPairs;
=20
while (--n >=3D 0) {
unsigned i;
@@ -2028,7 +2043,7 @@
return (-1);
if (1000000 < f[i].numUnpackStreams)
return (-1);
- unpack_streams +=3D f[i].numUnpackStreams;
+ unpack_streams +=3D (size_t)f[i].numUnpackStreams;
}
if ((p =3D header_bytes(a, 1)) =3D=3D NULL)
return (-1);
@@ -2082,7 +2097,7 @@
numDigests =3D 0;
for (i =3D 0; i < numFolders; i++) {
if (f[i].numUnpackStreams !=3D 1 || !f[i].digest_defined)
- numDigests +=3D f[i].numUnpackStreams;
+ numDigests +=3D (uint32_t)f[i].numUnpackStreams;
}
=20
if (type =3D=3D kCRC) {
@@ -2180,7 +2195,7 @@
f =3D si->ci.folders;
for (i =3D 0; i < si->ci.numFolders; i++) {
f[i].packIndex =3D packIndex;
- packIndex +=3D f[i].numPackedStreams;
+ packIndex +=3D (uint32_t)f[i].numPackedStreams;
if (packIndex > si->pi.numPackStreams)
return (-1);
}
@@ -2190,7 +2205,7 @@
=20
if (*p =3D=3D kSubStreamsInfo) {
if (read_SubStreamsInfo(a, &(si->ss),
- si->ci.folders, si->ci.numFolders) < 0)
+ si->ci.folders, (size_t)si->ci.numFolders) < 0)
return (-1);
if ((p =3D header_bytes(a, 1)) =3D=3D NULL)
return (-1);
@@ -2278,7 +2293,7 @@
if (1000000 < zip->numFiles)
return (-1);
=20
- zip->entries =3D calloc(zip->numFiles, sizeof(*zip->entries));
+ zip->entries =3D calloc((size_t)zip->numFiles, sizeof(*zip->entries));
if (zip->entries =3D=3D NULL)
return (-1);
entries =3D zip->entries;
@@ -2303,12 +2318,12 @@
=20
switch (type) {
case kEmptyStream:
- h->emptyStreamBools =3D calloc(zip->numFiles,
+ h->emptyStreamBools =3D calloc((size_t)zip->numFiles,
sizeof(*h->emptyStreamBools));
if (h->emptyStreamBools =3D=3D NULL)
return (-1);
if (read_Bools(
- a, h->emptyStreamBools, zip->numFiles) < 0)
+ a, h->emptyStreamBools, (size_t)zip->numFiles) < 0)
return (-1);
empty_streams =3D 0;
for (i =3D 0; i < zip->numFiles; i++) {
@@ -2317,6 +2332,12 @@
}
break;
case kEmptyFile:
+ if (empty_streams <=3D 0) {
+ /* Unexcepted sequence. Skip this. */
+ if (header_bytes(a, ll) =3D=3D NULL)
+ return (-1);
+ break;
+ }
h->emptyFileBools =3D calloc(empty_streams,
sizeof(*h->emptyFileBools));
if (h->emptyFileBools =3D=3D NULL)
@@ -2325,6 +2346,12 @@
return (-1);
break;
case kAnti:
+ if (empty_streams <=3D 0) {
+ /* Unexcepted sequence. Skip this. */
+ if (header_bytes(a, ll) =3D=3D NULL)
+ return (-1);
+ break;
+ }
h->antiBools =3D calloc(empty_streams,
sizeof(*h->antiBools));
if (h->antiBools =3D=3D NULL)
@@ -2403,15 +2430,15 @@
if ((p =3D header_bytes(a, 2)) =3D=3D NULL)
return (-1);
allAreDefined =3D *p;
- h->attrBools =3D calloc(zip->numFiles,
+ h->attrBools =3D calloc((size_t)zip->numFiles,
sizeof(*h->attrBools));
if (h->attrBools =3D=3D NULL)
return (-1);
if (allAreDefined)
- memset(h->attrBools, 1, zip->numFiles);
+ memset(h->attrBools, 1, (size_t)zip->numFiles);
else {
if (read_Bools(a, h->attrBools,
- zip->numFiles) < 0)
+ (size_t)zip->numFiles) < 0)
return (-1);
}
for (i =3D 0; i < zip->numFiles; i++) {
@@ -2445,7 +2472,7 @@
if ((size_t)sindex >=3D si->ss.unpack_streams)
return (-1);
if (entries[i].mode =3D=3D 0)
- entries[i].mode =3D AE_IFREG | 0777;
+ entries[i].mode =3D AE_IFREG | 0666;
if (si->ss.digestsDefined[sindex])
entries[i].flg |=3D CRC32_IS_SET;
entries[i].ssIndex =3D sindex;
@@ -2465,7 +2492,7 @@
if (dir)
entries[i].mode =3D AE_IFDIR | 0777;
else
- entries[i].mode =3D AE_IFREG | 0777;
+ entries[i].mode =3D AE_IFREG | 0666;
} else if (dir &&
(entries[i].mode & AE_IFMT) !=3D AE_IFDIR) {
entries[i].mode &=3D ~AE_IFMT;
@@ -2541,7 +2568,7 @@
int allAreDefined;
unsigned i;
=20
- timeBools =3D calloc(zip->numFiles, sizeof(*timeBools));
+ timeBools =3D calloc((size_t)zip->numFiles, sizeof(*timeBools));
if (timeBools =3D=3D NULL)
return (-1);
=20
@@ -2550,9 +2577,9 @@
goto failed;
allAreDefined =3D *p;
if (allAreDefined)
- memset(timeBools, 1, zip->numFiles);
+ memset(timeBools, 1, (size_t)zip->numFiles);
else {
- if (read_Bools(a, timeBools, zip->numFiles) < 0)
+ if (read_Bools(a, timeBools, (size_t)zip->numFiles) < 0)
goto failed;
}
=20
@@ -2563,7 +2590,7 @@
if (parse_7zip_uint64(a, &(h->dataIndex)) < 0)
goto failed;
if (1000000 < h->dataIndex)
- return (-1);
+ goto failed;
}
=20
for (i =3D 0; i < zip->numFiles; i++) {
@@ -2897,10 +2924,10 @@
return (ARCHIVE_FATAL);
}
if (bytes_avail > (ssize_t)zip->pack_stream_inbytes_remaining)
- bytes_avail =3D zip->pack_stream_inbytes_remaining;
+ bytes_avail =3D (ssize_t)zip->pack_stream_inbytes_remaining;
zip->pack_stream_inbytes_remaining -=3D bytes_avail;
if (bytes_avail > (ssize_t)zip->folder_outbytes_remaining)
- bytes_avail =3D zip->folder_outbytes_remaining;
+ bytes_avail =3D (ssize_t)zip->folder_outbytes_remaining;
zip->folder_outbytes_remaining -=3D bytes_avail;
zip->uncompressed_buffer_bytes_remaining =3D bytes_avail;
return (ARCHIVE_OK);
@@ -2965,7 +2992,7 @@
size_t bytes_in, bytes_out;
const void *buff_in;
unsigned char *buff_out;
- int eof;
+ int end_of_data;
=20
/*
* Note: '1' here is a performance optimization.
@@ -2987,23 +3014,23 @@
- zip->uncompressed_buffer_bytes_remaining;
bytes_in =3D bytes_avail;
if (bytes_in > zip->pack_stream_inbytes_remaining)
- bytes_in =3D zip->pack_stream_inbytes_remaining;
+ bytes_in =3D (size_t)zip->pack_stream_inbytes_remaining;
/* Drive decompression. */
r =3D decompress(a, zip, buff_out, &bytes_out,
buff_in, &bytes_in);
switch (r) {
case ARCHIVE_OK:
- eof =3D 0;
+ end_of_data =3D 0;
break;
case ARCHIVE_EOF:
- eof =3D 1;
+ end_of_data =3D 1;
break;
default:
return (ARCHIVE_FATAL);
}
zip->pack_stream_inbytes_remaining -=3D bytes_in;
if (bytes_out > zip->folder_outbytes_remaining)
- bytes_out =3D zip->folder_outbytes_remaining;
+ bytes_out =3D (size_t)zip->folder_outbytes_remaining;
zip->folder_outbytes_remaining -=3D bytes_out;
zip->uncompressed_buffer_bytes_remaining +=3D bytes_out;
zip->pack_stream_bytes_unconsumed =3D bytes_in;
@@ -3021,7 +3048,7 @@
if (zip->pack_stream_inbytes_remaining =3D=3D 0 &&
zip->folder_outbytes_remaining =3D=3D 0)
break;
- if (eof || (bytes_in =3D=3D 0 && bytes_out =3D=3D 0)) {
+ if (end_of_data || (bytes_in =3D=3D 0 && bytes_out =3D=3D 0)) {
archive_set_error(&(a->archive),
ARCHIVE_ERRNO_MISC, "Damaged 7-Zip archive");
return (ARCHIVE_FATAL);
@@ -3160,7 +3187,8 @@
return (ARCHIVE_FATAL);
}
}
- skipped =3D get_uncompressed_data(a, buff, skip_bytes, 0);
+ skipped =3D get_uncompressed_data(
+ a, buff, (size_t)skip_bytes, 0);
if (skipped < 0)
return (skipped);
skip_bytes -=3D skipped;
@@ -3292,13 +3320,13 @@
}
coder2 =3D &(fc[3]);
zip->main_stream_bytes_remaining =3D
- folder->unPackSize[2];
+ (size_t)folder->unPackSize[2];
} else if (coder2 !=3D NULL && coder2->codec =3D=3D _7Z_X86_BCJ2 &&
zip->pack_stream_remaining =3D=3D 4 &&
folder->numInStreams =3D=3D 5 && folder->numOutStreams =3D=3D 2) {
/* Source type 0 made by 7z */
zip->main_stream_bytes_remaining =3D
- folder->unPackSize[0];
+ (size_t)folder->unPackSize[0];
} else {
/* We got an unexpected form. */
archive_set_error(&(a->archive),
@@ -3311,7 +3339,7 @@
if ((r =3D seek_pack(a)) < 0)
return (r);
zip->pack_stream_bytes_unconsumed =3D
- zip->pack_stream_inbytes_remaining;
+ (size_t)zip->pack_stream_inbytes_remaining;
read_consume(a);
=20
/* Read following three sub streams. */
@@ -3333,7 +3361,7 @@
=20
/* Allocate memory for the decorded data of a sub
* stream. */
- b[i] =3D malloc(zip->folder_outbytes_remaining);
+ b[i] =3D malloc((size_t)zip->folder_outbytes_remaining);
if (b[i] =3D=3D NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for 7-Zip decompression");
@@ -3428,7 +3456,7 @@
"Truncated 7-Zip file body");
return (ARCHIVE_FATAL);
}
- bytes -=3D skipped_bytes;
+ bytes -=3D (size_t)skipped_bytes;
if (zip->pack_stream_bytes_unconsumed)
read_consume(a);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_cab.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_cab.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_cab.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -292,6 +292,8 @@
char end_of_archive;
char end_of_entry;
char end_of_entry_cleanup;
+ char read_data_invoked;
+ int64_t bytes_skipped;
=20
unsigned char *uncompressed_buffer;
size_t uncompressed_buffer_size;
@@ -798,7 +800,7 @@
file->offset =3D archive_le32dec(p + CFFILE_uoffFolderStart);
file->folder =3D archive_le16dec(p + CFFILE_iFolder);
file->mtime =3D cab_dos_time(p + CFFILE_date_time);
- file->attr =3D archive_le16dec(p + CFFILE_attribs);
+ file->attr =3D (uint8_t)archive_le16dec(p + CFFILE_attribs);
__archive_read_consume(a, 16);
=20
cab->cab_offset +=3D 16;
@@ -988,7 +990,7 @@
if (file->attr & ATTR_RDONLY)
archive_entry_set_mode(entry, AE_IFREG | 0555);
else
- archive_entry_set_mode(entry, AE_IFREG | 0777);
+ archive_entry_set_mode(entry, AE_IFREG | 0666);
archive_entry_set_mtime(entry, file->mtime, 0);
=20
cab->entry_bytes_remaining =3D file->uncompressed_size;
@@ -1026,9 +1028,22 @@
default:
break;
}
+ if (cab->read_data_invoked =3D=3D 0) {
+ if (cab->bytes_skipped) {
+ if (cab->entry_cfdata =3D=3D NULL) {
+ r =3D cab_next_cfdata(a);
+ if (r < 0)
+ return (r);
+ }
+ if (cab_consume_cfdata(a, cab->bytes_skipped) < 0)
+ return (ARCHIVE_FATAL);
+ cab->bytes_skipped =3D 0;
+ }
+ cab->read_data_invoked =3D 1;
+ }
if (cab->entry_unconsumed) {
/* Consume as much as the compressor actually used. */
- r =3D cab_consume_cfdata(a, cab->entry_unconsumed);
+ r =3D (int)cab_consume_cfdata(a, cab->entry_unconsumed);
cab->entry_unconsumed =3D 0;
if (r < 0)
return (r);
@@ -1358,46 +1373,25 @@
struct cab *cab =3D (struct cab *)(a->format->data);
struct cfdata *cfdata;
const void *d;
- int64_t skipped_bytes;
=20
cfdata =3D cab->entry_cfdata;
=20
- if (cfdata->uncompressed_avail =3D=3D 0 &&
- cfdata->read_offset > 0) {
- /* we've already skipped some bytes before really read. */
- skipped_bytes =3D cfdata->read_offset;
- cfdata->read_offset =3D 0;
- cfdata->uncompressed_bytes_remaining +=3D skipped_bytes;
- } else
- skipped_bytes =3D 0;
- do {
- /*
- * Note: '1' here is a performance optimization.
- * Recall that the decompression layer returns a count of
- * available bytes; asking for more than that forces the
- * decompressor to combine reads by copying data.
- */
- d =3D __archive_read_ahead(a, 1, avail);
- if (*avail <=3D 0) {
- *avail =3D truncated_error(a);
- return (NULL);
- }
- if (*avail > cfdata->uncompressed_bytes_remaining)
- *avail =3D cfdata->uncompressed_bytes_remaining;
- cfdata->uncompressed_avail =3D cfdata->uncompressed_size;
- cfdata->unconsumed =3D *avail;
- cfdata->sum_ptr =3D d;
- if (skipped_bytes > 0) {
- skipped_bytes =3D
- cab_minimum_consume_cfdata(a, skipped_bytes);
- if (skipped_bytes < 0) {
- *avail =3D ARCHIVE_FATAL;
- return (NULL);
- }
- continue;
- }
- } while (0);
-
+ /*
+ * Note: '1' here is a performance optimization.
+ * Recall that the decompression layer returns a count of
+ * available bytes; asking for more than that forces the
+ * decompressor to combine reads by copying data.
+ */
+ d =3D __archive_read_ahead(a, 1, avail);
+ if (*avail <=3D 0) {
+ *avail =3D truncated_error(a);
+ return (NULL);
+ }
+ if (*avail > cfdata->uncompressed_bytes_remaining)
+ *avail =3D cfdata->uncompressed_bytes_remaining;
+ cfdata->uncompressed_avail =3D cfdata->uncompressed_size;
+ cfdata->unconsumed =3D *avail;
+ cfdata->sum_ptr =3D d;
return (d);
}
=20
@@ -1543,7 +1537,7 @@
return (NULL);
}
}
- uavail =3D cab->stream.total_out;
+ uavail =3D (uint16_t)cab->stream.total_out;
=20
if (uavail < cfdata->uncompressed_size) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1721,7 +1715,7 @@
}
}
=20
- uavail =3D cab->xstrm.total_out;
+ uavail =3D (uint16_t)cab->xstrm.total_out;
/*
* Make sure a read pointer advances to next CFDATA.
*/
@@ -1793,9 +1787,8 @@
rbytes -=3D cbytes;
=20
if (cfdata->uncompressed_avail =3D=3D 0 &&
- (cab->entry_cffolder->comptype =3D=3D COMPTYPE_NONE ||
- cab->entry_cffile->folder =3D=3D iFoldCONTINUED_PREV_AND_NEXT ||
- cab->entry_cffile->folder =3D=3D iFoldCONTINUED_FROM_PREV)) {
+ (cab->entry_cffile->folder =3D=3D iFoldCONTINUED_PREV_AND_NEXT ||
+ cab->entry_cffile->folder =3D=3D iFoldCONTINUED_FROM_PREV)) {
/* We have not read any data yet. */
if (cbytes =3D=3D cfdata->uncompressed_bytes_remaining) {
/* Skip whole current CFDATA. */
@@ -1821,8 +1814,8 @@
}
continue;
}
- cfdata->read_offset +=3D cbytes;
- cfdata->uncompressed_bytes_remaining -=3D cbytes;
+ cfdata->read_offset +=3D (uint16_t)cbytes;
+ cfdata->uncompressed_bytes_remaining -=3D (uint16_t)cbytes;
break;
} else if (cbytes =3D=3D 0) {
err =3D cab_next_cfdata(a);
@@ -1846,7 +1839,7 @@
if (avail <=3D 0)
return (ARCHIVE_FATAL);
if (avail > cbytes)
- avail =3D cbytes;
+ avail =3D (ssize_t)cbytes;
if (cab_minimum_consume_cfdata(a, avail) < 0)
return (ARCHIVE_FATAL);
cbytes -=3D avail;
@@ -1875,8 +1868,8 @@
else
cbytes =3D cfdata->unconsumed;
rbytes -=3D cbytes;=20
- cfdata->read_offset +=3D cbytes;
- cfdata->uncompressed_bytes_remaining -=3D cbytes;
+ cfdata->read_offset +=3D (uint16_t)cbytes;
+ cfdata->uncompressed_bytes_remaining -=3D (uint16_t)cbytes;
cfdata->unconsumed -=3D cbytes;
} else {
cbytes =3D cfdata->uncompressed_avail - cfdata->read_offset;
@@ -1884,8 +1877,8 @@
if (consumed_bytes < cbytes)
cbytes =3D consumed_bytes;
rbytes -=3D cbytes;
- cfdata->read_offset +=3D cbytes;
- cfdata->uncompressed_bytes_remaining -=3D cbytes;
+ cfdata->read_offset +=3D (uint16_t)cbytes;
+ cfdata->uncompressed_bytes_remaining -=3D (uint16_t)cbytes;
}
=20
if (cfdata->unconsumed) {
@@ -1896,12 +1889,12 @@
}
if (cbytes) {
/* Compute the sum. */
- cab_checksum_update(a, cbytes);
+ cab_checksum_update(a, (size_t)cbytes);
=20
/* Consume as much as the compressor actually used. */
__archive_read_consume(a, cbytes);
cab->cab_offset +=3D cbytes;
- cfdata->compressed_bytes_remaining -=3D cbytes;
+ cfdata->compressed_bytes_remaining -=3D (uint16_t)cbytes;
if (cfdata->compressed_bytes_remaining =3D=3D 0) {
err =3D cab_checksum_finish(a);
if (err < 0)
@@ -1945,7 +1938,7 @@
return (bytes_avail);
}
if (bytes_avail > cab->entry_bytes_remaining)
- bytes_avail =3D cab->entry_bytes_remaining;
+ bytes_avail =3D (ssize_t)cab->entry_bytes_remaining;
=20
*size =3D bytes_avail;
*offset =3D cab->entry_offset;
@@ -1954,6 +1947,11 @@
if (cab->entry_bytes_remaining =3D=3D 0)
cab->end_of_entry =3D 1;
cab->entry_unconsumed =3D bytes_avail;
+ if (cab->entry_cffolder->comptype =3D=3D COMPTYPE_NONE) {
+ /* Don't consume more than current entry used. */
+ if (cab->entry_cfdata->unconsumed > cab->entry_unconsumed)
+ cab->entry_cfdata->unconsumed =3D cab->entry_unconsumed;
+ }
return (ARCHIVE_OK);
}
=20
@@ -1969,9 +1967,17 @@
if (cab->end_of_archive)
return (ARCHIVE_EOF);
=20
+ if (!cab->read_data_invoked) {
+ cab->bytes_skipped +=3D cab->entry_bytes_remaining;
+ cab->entry_bytes_remaining =3D 0;
+ /* This entry is finished and done. */
+ cab->end_of_entry_cleanup =3D cab->end_of_entry =3D 1;
+ return (ARCHIVE_OK);
+ }
+
if (cab->entry_unconsumed) {
/* Consume as much as the compressor actually used. */
- r =3D cab_consume_cfdata(a, cab->entry_unconsumed);
+ r =3D (int)cab_consume_cfdata(a, cab->entry_unconsumed);
cab->entry_unconsumed =3D 0;
if (r < 0)
return (r);
@@ -1993,6 +1999,11 @@
if (bytes_skipped < 0)
return (ARCHIVE_FATAL);
=20
+ /* If the compression type is none(uncompressed), we've already
+ * consumed data as much as the current entry size. */
+ if (cab->entry_cffolder->comptype =3D=3D COMPTYPE_NONE)
+ cab->entry_cfdata->unconsumed =3D 0;
+
/* This entry is finished and done. */
cab->end_of_entry_cleanup =3D cab->end_of_entry =3D 1;
return (ARCHIVE_OK);
@@ -2227,7 +2238,9 @@
=20
/* Notify how many bits we consumed. */
#define lzx_br_consume(br, n) ((br)->cache_avail -=3D (n))
-#define lzx_br_consume_unalined_bits(br) ((br)->cache_avail &=3D ~0x0f)
+#define lzx_br_consume_unaligned_bits(br) ((br)->cache_avail &=3D ~0x0f)
+
+#define lzx_br_is_unaligned(br) ((br)->cache_avail & 0x0f)
=20
static const uint32_t cache_masks[] =3D {
0x00000000, 0x00000001, 0x00000003, 0x00000007,
@@ -2354,24 +2367,25 @@
#define ST_RD_TRANSLATION_SIZE 1
#define ST_RD_BLOCK_TYPE 2
#define ST_RD_BLOCK_SIZE 3
-#define ST_RD_R0 4
-#define ST_RD_R1 5
-#define ST_RD_R2 6
-#define ST_COPY_UNCOMP1 7
-#define ST_COPY_UNCOMP2 8
-#define ST_RD_ALIGNED_OFFSET 9
-#define ST_RD_VERBATIM 10
-#define ST_RD_PRE_MAIN_TREE_256 11
-#define ST_MAIN_TREE_256 12
-#define ST_RD_PRE_MAIN_TREE_REM 13
-#define ST_MAIN_TREE_REM 14
-#define ST_RD_PRE_LENGTH_TREE 15
-#define ST_LENGTH_TREE 16
-#define ST_MAIN 17
-#define ST_LENGTH 18
-#define ST_OFFSET 19
-#define ST_REAL_POS 20
-#define ST_COPY 21
+#define ST_RD_ALIGNMENT 4
+#define ST_RD_R0 5
+#define ST_RD_R1 6
+#define ST_RD_R2 7
+#define ST_COPY_UNCOMP1 8
+#define ST_COPY_UNCOMP2 9
+#define ST_RD_ALIGNED_OFFSET 10
+#define ST_RD_VERBATIM 11
+#define ST_RD_PRE_MAIN_TREE_256 12
+#define ST_MAIN_TREE_256 13
+#define ST_RD_PRE_MAIN_TREE_REM 14
+#define ST_MAIN_TREE_REM 15
+#define ST_RD_PRE_LENGTH_TREE 16
+#define ST_LENGTH_TREE 17
+#define ST_MAIN 18
+#define ST_LENGTH 19
+#define ST_OFFSET 20
+#define ST_REAL_POS 21
+#define ST_COPY 22
=20
static int
lzx_decode(struct lzx_stream *strm, int last)
@@ -2475,15 +2489,25 @@
ds->state =3D ST_RD_ALIGNED_OFFSET;
break;
}
+ /* FALL THROUGH */
+ case ST_RD_ALIGNMENT:
/*
* Handle an Uncompressed Block.
*/
/* Skip padding to align following field on
* 16-bit boundary. */
- if (br->cache_avail =3D=3D 32 || br->cache_avail =3D=3D 16)
- lzx_br_consume(br, 16);
- else
- lzx_br_consume_unalined_bits(br);
+ if (lzx_br_is_unaligned(br))
+ lzx_br_consume_unaligned_bits(br);
+ else {
+ if (lzx_br_read_ahead(strm, br, 16))
+ lzx_br_consume(br, 16);
+ else {
+ ds->state =3D ST_RD_ALIGNMENT;
+ if (last)
+ goto failed;
+ return (ARCHIVE_OK);
+ }
+ }
/* Preparation to read repeated offsets R0,R1 and R2. */
ds->rbytes_avail =3D 0;
ds->state =3D ST_RD_R0;
@@ -2508,8 +2532,7 @@
lzx_br_consume(br, 16);
archive_le16enc(ds->rbytes, u16);
ds->rbytes_avail =3D 2;
- } else
- ds->rbytes_avail =3D 0;
+ }
if (ds->rbytes_avail < 4 && ds->br.have_odd) {
ds->rbytes[ds->rbytes_avail++] =3D
ds->br.odd;
@@ -2525,6 +2548,7 @@
*strm->next_in++;
strm->avail_in--;
}
+ ds->rbytes_avail =3D 0;
if (ds->state =3D=3D ST_RD_R0) {
ds->r0 =3D archive_le32dec(ds->rbytes);
if (ds->r0 < 0)
@@ -2549,8 +2573,7 @@
* Copy bytes form next_in to next_out directly.
*/
while (ds->block_bytes_avail) {
- unsigned char *d;
- int l,ll;
+ int l;
=20
if (strm->avail_out <=3D 0)
/* Output buffer is empty. */
@@ -2568,17 +2591,16 @@
l =3D (int)strm->avail_out;
if (l > strm->avail_in)
l =3D (int)strm->avail_in;
- ll =3D l;
- d =3D &(ds->w_buff[ds->w_pos]);
- while (--l >=3D 0) {
- *strm->next_out++ =3D *strm->next_in;
- *d++ =3D *strm->next_in++;
- }
- strm->avail_out -=3D ll;
- strm->total_out +=3D ll;
- strm->avail_in -=3D ll;
- ds->w_pos =3D (ds->w_pos + ll) & ds->w_mask;
- ds->block_bytes_avail -=3D ll;
+ memcpy(strm->next_out, strm->next_in, l);
+ memcpy(&(ds->w_buff[ds->w_pos]),
+ strm->next_in, l);
+ strm->next_in +=3D l;
+ strm->avail_in -=3D l;
+ strm->next_out +=3D l;
+ strm->avail_out -=3D l;
+ strm->total_out +=3D l;
+ ds->w_pos =3D (ds->w_pos + l) & ds->w_mask;
+ ds->block_bytes_avail -=3D l;
}
/* FALL THROUGH */
case ST_COPY_UNCOMP2:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_cpio.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c=
Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_cpio.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_cpio.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -398,11 +398,12 @@
=20
/* If this is a symlink, read the link contents. */
if (archive_entry_filetype(entry) =3D=3D AE_IFLNK) {
- h =3D __archive_read_ahead(a, cpio->entry_bytes_remaining, NULL);
+ h =3D __archive_read_ahead(a,
+ (size_t)cpio->entry_bytes_remaining, NULL);
if (h =3D=3D NULL)
return (ARCHIVE_FATAL);
if (archive_entry_copy_symlink_l(entry, (const char *)h,
- cpio->entry_bytes_remaining, sconv) !=3D 0) {
+ (size_t)cpio->entry_bytes_remaining, sconv) !=3D 0) {
if (errno =3D=3D ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for Linkname");
@@ -458,7 +459,7 @@
if (bytes_read <=3D 0)
return (ARCHIVE_FATAL);
if (bytes_read > cpio->entry_bytes_remaining)
- bytes_read =3D cpio->entry_bytes_remaining;
+ bytes_read =3D (ssize_t)cpio->entry_bytes_remaining;
*size =3D bytes_read;
cpio->entry_bytes_unconsumed =3D bytes_read;
*offset =3D cpio->entry_offset;
@@ -603,17 +604,23 @@
/* TODO: Abort here? */
}
=20
- archive_entry_set_devmajor(entry, atol16(header + newc_devmajor_offset, n=
ewc_devmajor_size));
- archive_entry_set_devminor(entry, atol16(header + newc_devminor_offset, n=
ewc_devminor_size));
+ archive_entry_set_devmajor(entry,
+ (dev_t)atol16(header + newc_devmajor_offset, newc_devmajor_size));
+ archive_entry_set_devminor(entry,=20
+ (dev_t)atol16(header + newc_devminor_offset, newc_devminor_size));
archive_entry_set_ino(entry, atol16(header + newc_ino_offset, newc_ino_si=
ze));
- archive_entry_set_mode(entry, atol16(header + newc_mode_offset, newc_mode=
_size));
+ archive_entry_set_mode(entry,=20
+ (mode_t)atol16(header + newc_mode_offset, newc_mode_size));
archive_entry_set_uid(entry, atol16(header + newc_uid_offset, newc_uid_si=
ze));
archive_entry_set_gid(entry, atol16(header + newc_gid_offset, newc_gid_si=
ze));
- archive_entry_set_nlink(entry, atol16(header + newc_nlink_offset, newc_nl=
ink_size));
- archive_entry_set_rdevmajor(entry, atol16(header + newc_rdevmajor_offset,=
newc_rdevmajor_size));
- archive_entry_set_rdevminor(entry, atol16(header + newc_rdevminor_offset,=
newc_rdevminor_size));
+ archive_entry_set_nlink(entry,
+ (unsigned int)atol16(header + newc_nlink_offset, newc_nlink_size));
+ archive_entry_set_rdevmajor(entry,
+ (dev_t)atol16(header + newc_rdevmajor_offset, newc_rdevmajor_size));
+ archive_entry_set_rdevminor(entry,
+ (dev_t)atol16(header + newc_rdevminor_offset, newc_rdevminor_size));
archive_entry_set_mtime(entry, atol16(header + newc_mtime_offset, newc_mt=
ime_size), 0);
- *namelength =3D atol16(header + newc_namesize_offset, newc_namesize_size);
+ *namelength =3D (size_t)atol16(header + newc_namesize_offset, newc_namesi=
ze_size);
/* Pad name to 2 more than a multiple of 4. */
*name_pad =3D (2 - *namelength) & 3;
=20
@@ -767,15 +774,19 @@
/* Parse out octal fields. */
header =3D (const char *)h;
=20
- archive_entry_set_dev(entry, atol8(header + odc_dev_offset, odc_dev_size)=
);
+ archive_entry_set_dev(entry,=20
+ (dev_t)atol8(header + odc_dev_offset, odc_dev_size));
archive_entry_set_ino(entry, atol8(header + odc_ino_offset, odc_ino_size)=
);
- archive_entry_set_mode(entry, atol8(header + odc_mode_offset, odc_mode_si=
ze));
+ archive_entry_set_mode(entry,=20
+ (mode_t)atol8(header + odc_mode_offset, odc_mode_size));
archive_entry_set_uid(entry, atol8(header + odc_uid_offset, odc_uid_size)=
);
archive_entry_set_gid(entry, atol8(header + odc_gid_offset, odc_gid_size)=
);
- archive_entry_set_nlink(entry, atol8(header + odc_nlink_offset, odc_nlink=
_size));
- archive_entry_set_rdev(entry, atol8(header + odc_rdev_offset, odc_rdev_si=
ze));
+ archive_entry_set_nlink(entry,=20
+ (unsigned int)atol8(header + odc_nlink_offset, odc_nlink_size));
+ archive_entry_set_rdev(entry,
+ (dev_t)atol8(header + odc_rdev_offset, odc_rdev_size));
archive_entry_set_mtime(entry, atol8(header + odc_mtime_offset, odc_mtime=
_size), 0);
- *namelength =3D atol8(header + odc_namesize_offset, odc_namesize_size);
+ *namelength =3D (size_t)atol8(header + odc_namesize_offset, odc_namesize_=
size);
*name_pad =3D 0; /* No padding of filename. */
=20
/*
@@ -816,15 +827,19 @@
/* Parse out octal fields. */
header =3D (const char *)h;
=20
- archive_entry_set_dev(entry, atol16(header + afiol_dev_offset, afiol_dev_=
size));
+ archive_entry_set_dev(entry,=20
+ (dev_t)atol16(header + afiol_dev_offset, afiol_dev_size));
archive_entry_set_ino(entry, atol16(header + afiol_ino_offset, afiol_ino_=
size));
- archive_entry_set_mode(entry, atol8(header + afiol_mode_offset, afiol_mod=
e_size));
+ archive_entry_set_mode(entry,
+ (mode_t)atol8(header + afiol_mode_offset, afiol_mode_size));
archive_entry_set_uid(entry, atol16(header + afiol_uid_offset, afiol_uid_=
size));
archive_entry_set_gid(entry, atol16(header + afiol_gid_offset, afiol_gid_=
size));
- archive_entry_set_nlink(entry, atol16(header + afiol_nlink_offset, afiol_=
nlink_size));
- archive_entry_set_rdev(entry, atol16(header + afiol_rdev_offset, afiol_rd=
ev_size));
+ archive_entry_set_nlink(entry,
+ (unsigned int)atol16(header + afiol_nlink_offset, afiol_nlink_size));
+ archive_entry_set_rdev(entry,
+ (dev_t)atol16(header + afiol_rdev_offset, afiol_rdev_size));
archive_entry_set_mtime(entry, atol16(header + afiol_mtime_offset, afiol_=
mtime_size), 0);
- *namelength =3D atol16(header + afiol_namesize_offset, afiol_namesize_siz=
e);
+ *namelength =3D (size_t)atol16(header + afiol_namesize_offset, afiol_name=
size_size);
*name_pad =3D 0; /* No padding of filename. */
=20
cpio->entry_bytes_remaining =3D
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_iso9660.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_iso966=
0.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_iso966=
0.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_iso9660.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_iso9660.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -975,8 +975,8 @@
iso9660->current_position =3D parent->offset;
}
=20
- step =3D ((parent->size + iso9660->logical_block_size -1) /
- iso9660->logical_block_size) * iso9660->logical_block_size;
+ step =3D (size_t)(((parent->size + iso9660->logical_block_size -1) /
+ iso9660->logical_block_size) * iso9660->logical_block_size);
b =3D __archive_read_ahead(a, step, NULL);
if (b =3D=3D NULL) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1397,7 +1397,7 @@
return (ARCHIVE_FATAL);
}
if (bytes_read > iso9660->entry_bytes_remaining)
- bytes_read =3D iso9660->entry_bytes_remaining;
+ bytes_read =3D (ssize_t)iso9660->entry_bytes_remaining;
avail =3D bytes_read;
uncompressed_size =3D 0;
=20
@@ -1405,9 +1405,9 @@
size_t ceil, xsize;
=20
/* Allocate block pointers buffer. */
- ceil =3D (zisofs->pz_uncompressed_size +
- (1LL << zisofs->pz_log2_bs) - 1)
- >> zisofs->pz_log2_bs;
+ ceil =3D (size_t)((zisofs->pz_uncompressed_size +
+ (((int64_t)1) << zisofs->pz_log2_bs) - 1)
+ >> zisofs->pz_log2_bs);
xsize =3D (ceil + 1) * 4;
if (zisofs->block_pointers_alloc < xsize) {
size_t alloc;
@@ -1671,7 +1671,7 @@
if (*buff =3D=3D NULL)
return (ARCHIVE_FATAL);
if (bytes_read > iso9660->entry_bytes_remaining)
- bytes_read =3D iso9660->entry_bytes_remaining;
+ bytes_read =3D (ssize_t)iso9660->entry_bytes_remaining;
*size =3D bytes_read;
*offset =3D iso9660->entry_sparse_offset;
iso9660->entry_sparse_offset +=3D bytes_read;
@@ -2277,7 +2277,7 @@
archive_set_error(&a->archive, ENOMEM, "Out of memory");
return (ARCHIVE_FATAL);
}
- p =3D malloc(new_size * sizeof(p[0]));
+ p =3D calloc(new_size, sizeof(p[0]));
if (p =3D=3D NULL) {
archive_set_error(&a->archive, ENOMEM, "Out of memory");
return (ARCHIVE_FATAL);
@@ -2527,9 +2527,6 @@
=20
if (!file->symlink_continues || file->symlink.length < 1)
archive_string_empty(&file->symlink);
- else if (!file->symlink_continues &&
- file->symlink.s[file->symlink.length - 1] !=3D '/')
- separator =3D "/";
file->symlink_continues =3D 0;
=20
/*
@@ -3099,6 +3096,8 @@
{
struct tm tm;
int offset;
+ time_t t;
+
memset(&tm, 0, sizeof(tm));
tm.tm_year =3D v[0];
tm.tm_mon =3D v[1] - 1;
@@ -3112,7 +3111,10 @@
tm.tm_hour -=3D offset / 4;
tm.tm_min -=3D (offset % 4) * 15;
}
- return (time_from_tm(&tm));
+ t =3D time_from_tm(&tm);
+ if (t =3D=3D (time_t)-1)
+ return ((time_t)0);
+ return (t);
}
=20
static time_t
@@ -3120,6 +3122,8 @@
{
struct tm tm;
int offset;
+ time_t t;
+
memset(&tm, 0, sizeof(tm));
tm.tm_year =3D (v[0] - '0') * 1000 + (v[1] - '0') * 100
+ (v[2] - '0') * 10 + (v[3] - '0')
@@ -3135,7 +3139,10 @@
tm.tm_hour -=3D offset / 4;
tm.tm_min -=3D (offset % 4) * 15;
}
- return (time_from_tm(&tm));
+ t =3D time_from_tm(&tm);
+ if (t =3D=3D (time_t)-1)
+ return ((time_t)0);
+ return (t);
}
=20
static time_t
@@ -3149,7 +3156,8 @@
#else
/* Else use direct calculation using POSIX assumptions. */
/* First, fix up tm_yday based on the year/month/day. */
- mktime(t);
+ if (mktime(t) =3D=3D (time_t)-1)
+ return ((time_t)-1);
/* Then we can compute timegm() from first principles. */
return (t->tm_sec + t->tm_min * 60 + t->tm_hour * 3600
+ t->tm_yday * 86400 + (t->tm_year - 70) * 31536000
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_lha.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_lha.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_lha.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -951,7 +951,7 @@
=20
/* Read extended headers */
err2 =3D lha_read_file_extended_header(a, lha, NULL, 2,
- lha->compsize + 2, &extdsize);
+ (size_t)(lha->compsize + 2), &extdsize);
if (err2 < ARCHIVE_WARN)
return (err2);
if (err2 < err)
@@ -1446,7 +1446,7 @@
return (ARCHIVE_FATAL);
}
if (bytes_avail > lha->entry_bytes_remaining)
- bytes_avail =3D lha->entry_bytes_remaining;
+ bytes_avail =3D (ssize_t)lha->entry_bytes_remaining;
lha->entry_crc_calculated =3D
lha_crc16(lha->entry_crc_calculated, *buff, bytes_avail);
*size =3D bytes_avail;
@@ -1529,7 +1529,7 @@
return (ARCHIVE_FATAL);
}
if (bytes_avail > lha->entry_bytes_remaining)
- bytes_avail =3D lha->entry_bytes_remaining;
+ bytes_avail =3D (ssize_t)lha->entry_bytes_remaining;
=20
lha->strm.avail_in =3D bytes_avail;
lha->strm.total_in =3D 0;
@@ -1575,7 +1575,7 @@
archive_read_format_lha_read_data_skip(struct archive_read *a)
{
struct lha *lha;
- off_t bytes_skipped;
+ int64_t bytes_skipped;
=20
lha =3D (struct lha *)(a->format->data);
=20
@@ -2016,7 +2016,7 @@
if (ds->w_pos - ds->copy_pos <=3D strm->avail_out)
copy_bytes =3D ds->w_pos - ds->copy_pos;
else
- copy_bytes =3D strm->avail_out;
+ copy_bytes =3D (size_t)strm->avail_out;
memcpy(strm->next_out,
ds->w_buff + ds->copy_pos, copy_bytes);
ds->copy_pos +=3D copy_bytes;
@@ -2024,7 +2024,7 @@
if (ds->w_remaining <=3D strm->avail_out)
copy_bytes =3D ds->w_remaining;
else
- copy_bytes =3D strm->avail_out;
+ copy_bytes =3D (size_t)strm->avail_out;
memcpy(strm->next_out,
ds->w_buff + ds->w_size - ds->w_remaining, copy_bytes);
ds->w_remaining -=3D copy_bytes;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_mtree.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_mtree.=
c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_mtree.=
c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_mtree.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_mtree.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -1183,7 +1183,7 @@
=20
comma1 =3D strchr(val, ',');
if (comma1 =3D=3D NULL) {
- archive_entry_set_dev(entry, mtree_atol10(&val));
+ archive_entry_set_dev(entry, (dev_t)mtree_atol10(&val));
return (ARCHIVE_OK);
}
++comma1;
@@ -1194,8 +1194,8 @@
return (ARCHIVE_WARN);
}
++comma2;
- archive_entry_set_rdevmajor(entry, mtree_atol(&comma1));
- archive_entry_set_rdevminor(entry, mtree_atol(&comma2));
+ archive_entry_set_rdevmajor(entry, (dev_t)mtree_atol(&comma1));
+ archive_entry_set_rdevminor(entry, (dev_t)mtree_atol(&comma2));
return (ARCHIVE_OK);
}
=20
@@ -1280,7 +1280,7 @@
if (val[0] >=3D '0' && val[0] <=3D '9') {
*parsed_kws |=3D MTREE_HAS_PERM;
archive_entry_set_perm(entry,
- mtree_atol8(&val));
+ (mode_t)mtree_atol8(&val));
} else {
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
@@ -1292,7 +1292,8 @@
case 'n':
if (strcmp(key, "nlink") =3D=3D 0) {
*parsed_kws |=3D MTREE_HAS_NLINK;
- archive_entry_set_nlink(entry, mtree_atol10(&val));
+ archive_entry_set_nlink(entry,
+ (unsigned int)mtree_atol10(&val));
break;
}
case 'r':
@@ -1434,7 +1435,7 @@
*buff =3D mtree->buff;
*offset =3D mtree->offset;
if ((int64_t)mtree->buffsize > mtree->cur_size - mtree->offset)
- bytes_to_read =3D mtree->cur_size - mtree->offset;
+ bytes_to_read =3D (size_t)(mtree->cur_size - mtree->offset);
else
bytes_to_read =3D mtree->buffsize;
bytes_read =3D read(mtree->fd, mtree->buff, bytes_to_read);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_rar.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_rar.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_rar.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -453,7 +453,7 @@
if (br->next_in =3D=3D NULL)
return (0);
if (br->avail_in > rar->bytes_remaining)
- br->avail_in =3D rar->bytes_remaining;
+ br->avail_in =3D (ssize_t)rar->bytes_remaining;
if (br->avail_in =3D=3D 0)
return (0);
}
@@ -481,7 +481,7 @@
return (ARCHIVE_FATAL);
}
if (br->avail_in > rar->bytes_remaining)
- br->avail_in =3D rar->bytes_remaining;
+ br->avail_in =3D (ssize_t)rar->bytes_remaining;
if (br->cache_avail =3D=3D 0)
(void)rar_br_fillup(a, br);
}
@@ -522,7 +522,7 @@
static inline int
lzss_offset_for_position(struct lzss *lzss, int64_t pos)
{
- return pos & lzss->mask;
+ return (int)(pos & lzss->mask);
}
=20
static inline unsigned char *
@@ -1084,11 +1084,11 @@
return (ARCHIVE_FATAL);
}
=20
- if ((h =3D __archive_read_ahead(a, header_size - 7, NULL)) =3D=3D NULL)
+ if ((h =3D __archive_read_ahead(a, (size_t)header_size - 7, NULL)) =3D=
=3D NULL)
return (ARCHIVE_FATAL);
=20
/* File Header CRC check. */
- crc32_val =3D crc32(crc32_val, h, header_size - 7);
+ crc32_val =3D crc32(crc32_val, h, (unsigned)(header_size - 7));
if ((crc32_val & 0xffff) !=3D archive_le16dec(rar_header.crc)) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Header CRC error");
@@ -1131,9 +1131,6 @@
rar->unp_size =3D archive_le32dec(file_header.unp_size);
}
=20
- /* TODO: Need to use CRC check for these kind of cases.
- * For now, check if sizes are not < 0.
- */
if (rar->packed_size < 0 || rar->unp_size < 0)
{
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -1148,7 +1145,7 @@
size_t distance =3D p - (const char *)h;
header_size +=3D rar->packed_size;
/* Make sure we have the extended data. */
- if ((h =3D __archive_read_ahead(a, header_size - 7, NULL)) =3D=3D NULL)
+ if ((h =3D __archive_read_ahead(a, (size_t)header_size - 7, NULL)) =3D=
=3D NULL)
return (ARCHIVE_FATAL);
p =3D h;
endp =3D p + header_size - 7;
@@ -1161,13 +1158,17 @@
"Invalid filename size");
return (ARCHIVE_FATAL);
}
- if (rar->filename_allocated < filename_size+2) {
- rar->filename =3D realloc(rar->filename, filename_size+2);
- if (rar->filename =3D=3D NULL) {
+ if (rar->filename_allocated < filename_size * 2 + 2) {
+ char *newptr;
+ size_t newsize =3D filename_size * 2 + 2;
+ newptr =3D realloc(rar->filename, newsize);
+ if (newptr =3D=3D NULL) {
archive_set_error(&a->archive, ENOMEM,
"Couldn't allocate memory.");
return (ARCHIVE_FATAL);
}
+ rar->filename =3D newptr;
+ rar->filename_allocated =3D newsize;
}
filename =3D rar->filename;
memcpy(filename, p, filename_size);
@@ -1176,15 +1177,17 @@
{
if (filename_size !=3D strlen(filename))
{
- unsigned char highbyte, flagbits, flagbyte, length, offset;
+ unsigned char highbyte, flagbits, flagbyte, offset;
+ unsigned fn_end;
=20
end =3D filename_size;
+ fn_end =3D filename_size * 2;
filename_size =3D 0;
offset =3D strlen(filename) + 1;
highbyte =3D *(p + offset++);
flagbits =3D 0;
flagbyte =3D 0;
- while (offset < end && filename_size < end)
+ while (offset < end && filename_size < fn_end)
{
if (!flagbits)
{
@@ -1210,19 +1213,26 @@
break;
case 3:
{
- length =3D *(p + offset++);
- while (length)
- {
- if (filename_size >=3D end)
- break;
- filename[filename_size++] =3D *(p + offset);
+ char extra, high;
+ uint8_t length =3D *(p + offset++);
+
+ if (length & 0x80) {
+ extra =3D *(p + offset++);
+ high =3D (char)highbyte;
+ } else
+ extra =3D high =3D 0;
+ length =3D (length & 0x7f) + 2;
+ while (length && filename_size < fn_end) {
+ unsigned cp =3D filename_size >> 1;
+ filename[filename_size++] =3D high;
+ filename[filename_size++] =3D p[cp] + extra;
length--;
}
}
break;
}
}
- if (filename_size >=3D end) {
+ if (filename_size > fn_end) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Invalid filename");
return (ARCHIVE_FATAL);
@@ -1322,7 +1332,8 @@
=20
rar->bytes_remaining =3D rar->packed_size;
rar->bytes_uncopied =3D rar->bytes_unconsumed =3D 0;
- rar->lzss.position =3D rar->dictionary_size =3D rar->offset =3D 0;
+ rar->lzss.position =3D rar->offset =3D 0;
+ rar->dictionary_size =3D 0;
rar->offset_outgoing =3D 0;
rar->br.cache_avail =3D 0;
rar->br.avail_in =3D 0;
@@ -1477,11 +1488,12 @@
int ret =3D (ARCHIVE_OK);
=20
rar =3D (struct rar *)(a->format->data);
- if ((h =3D __archive_read_ahead(a, rar->packed_size, NULL)) =3D=3D NULL)
+ if ((h =3D __archive_read_ahead(a, (size_t)rar->packed_size, NULL)) =3D=
=3D NULL)
return (ARCHIVE_FATAL);
p =3D h;
=20
- if (archive_entry_copy_symlink_l(entry, p, rar->packed_size, sconv))
+ if (archive_entry_copy_symlink_l(entry,
+ p, (size_t)rar->packed_size, sconv))
{
if (errno =3D=3D ENOMEM)
{
@@ -1528,7 +1540,7 @@
return (ARCHIVE_FATAL);
}
if (bytes_avail > rar->bytes_remaining)
- bytes_avail =3D rar->bytes_remaining;
+ bytes_avail =3D (ssize_t)rar->bytes_remaining;
=20
*size =3D bytes_avail;
*offset =3D rar->offset;
@@ -1587,7 +1599,7 @@
if (rar->bytes_uncopied > (rar->unp_buffer_size - rar->unp_offset))
bs =3D rar->unp_buffer_size - rar->unp_offset;
else
- bs =3D rar->bytes_uncopied;
+ bs =3D (size_t)rar->bytes_uncopied;
ret =3D copy_from_lzss_window(a, buff, rar->offset, bs);
if (ret !=3D ARCHIVE_OK)
return (ret);
@@ -1715,7 +1727,7 @@
if (rar->bytes_uncopied > (rar->unp_buffer_size - rar->unp_offset))
bs =3D rar->unp_buffer_size - rar->unp_offset;
else
- bs =3D rar->bytes_uncopied;
+ bs =3D (size_t)rar->bytes_uncopied;
ret =3D copy_from_lzss_window(a, buff, rar->offset, bs);
if (ret !=3D ARCHIVE_OK)
return (ret);
@@ -1978,7 +1990,7 @@
if (rar->unp_size >=3D DICTIONARY_MAX_SIZE)
rar->dictionary_size =3D DICTIONARY_MAX_SIZE;
else
- rar->dictionary_size =3D rar_fls(rar->unp_size) << 1;
+ rar->dictionary_size =3D rar_fls((unsigned int)rar->unp_size) << 1;
rar->lzss.window =3D (unsigned char *)realloc(rar->lzss.window,
rar->dictionary_size);
if (rar->lzss.window =3D=3D NULL) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_tar.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_tar.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_tar.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_tar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_tar.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -527,56 +527,57 @@
=20
tar =3D (struct tar *)(a->format->data);
=20
-skip_hole:
- /* Remove exhausted entries from sparse list. */
- while (tar->sparse_list !=3D NULL &&
- tar->sparse_list->remaining =3D=3D 0) {
- p =3D tar->sparse_list;
- tar->sparse_list =3D p->next;
- free(p);
+ for (;;) {
+ /* Remove exhausted entries from sparse list. */
+ while (tar->sparse_list !=3D NULL &&
+ tar->sparse_list->remaining =3D=3D 0) {
+ p =3D tar->sparse_list;
+ tar->sparse_list =3D p->next;
+ free(p);
+ }
+
+ if (tar->entry_bytes_unconsumed) {
+ __archive_read_consume(a, tar->entry_bytes_unconsumed);
+ tar->entry_bytes_unconsumed =3D 0;
+ }
+
+ /* If we're at end of file, return EOF. */
+ if (tar->sparse_list =3D=3D NULL ||
+ tar->entry_bytes_remaining =3D=3D 0) {
+ if (__archive_read_consume(a, tar->entry_padding) < 0)
+ return (ARCHIVE_FATAL);
+ tar->entry_padding =3D 0;
+ *buff =3D NULL;
+ *size =3D 0;
+ *offset =3D tar->realsize;
+ return (ARCHIVE_EOF);
+ }
+
+ *buff =3D __archive_read_ahead(a, 1, &bytes_read);
+ if (bytes_read < 0)
+ return (ARCHIVE_FATAL);
+ if (*buff =3D=3D NULL) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Truncated tar archive");
+ return (ARCHIVE_FATAL);
+ }
+ if (bytes_read > tar->entry_bytes_remaining)
+ bytes_read =3D (ssize_t)tar->entry_bytes_remaining;
+ /* Don't read more than is available in the
+ * current sparse block. */
+ if (tar->sparse_list->remaining < bytes_read)
+ bytes_read =3D (ssize_t)tar->sparse_list->remaining;
+ *size =3D bytes_read;
+ *offset =3D tar->sparse_list->offset;
+ tar->sparse_list->remaining -=3D bytes_read;
+ tar->sparse_list->offset +=3D bytes_read;
+ tar->entry_bytes_remaining -=3D bytes_read;
+ tar->entry_bytes_unconsumed =3D bytes_read;
+
+ if (!tar->sparse_list->hole)
+ return (ARCHIVE_OK);
+ /* Current is hole data and skip this. */
}
-
- if (tar->entry_bytes_unconsumed) {
- __archive_read_consume(a, tar->entry_bytes_unconsumed);
- tar->entry_bytes_unconsumed =3D 0;
- }
-
- /* If we're at end of file, return EOF. */
- if (tar->sparse_list =3D=3D NULL || tar->entry_bytes_remaining =3D=3D 0) {
- if (__archive_read_consume(a, tar->entry_padding) < 0)
- return (ARCHIVE_FATAL);
- tar->entry_padding =3D 0;
- *buff =3D NULL;
- *size =3D 0;
- *offset =3D tar->realsize;
- return (ARCHIVE_EOF);
- }
-
- *buff =3D __archive_read_ahead(a, 1, &bytes_read);
- if (bytes_read < 0)
- return (ARCHIVE_FATAL);
- if (*buff =3D=3D NULL) {
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Truncated tar archive");
- return (ARCHIVE_FATAL);
- }
- if (bytes_read > tar->entry_bytes_remaining)
- bytes_read =3D tar->entry_bytes_remaining;
- /* Don't read more than is available in the
- * current sparse block. */
- if (tar->sparse_list->remaining < bytes_read)
- bytes_read =3D tar->sparse_list->remaining;
- *size =3D bytes_read;
- *offset =3D tar->sparse_list->offset;
- tar->sparse_list->remaining -=3D bytes_read;
- tar->sparse_list->offset +=3D bytes_read;
- tar->entry_bytes_remaining -=3D bytes_read;
- tar->entry_bytes_unconsumed =3D bytes_read;
-
- if (tar->sparse_list->hole)
- goto skip_hole;
-
- return (ARCHIVE_OK);
}
=20
static int
@@ -786,7 +787,7 @@
* Test the checksum. Note that POSIX specifies _unsigned_
* bytes for this calculation.
*/
- sum =3D tar_atol(header->checksum, sizeof(header->checksum));
+ sum =3D (int)tar_atol(header->checksum, sizeof(header->checksum));
check =3D 0;
for (i =3D 0; i < 148; i++)
check +=3D (unsigned char)bytes[i];
@@ -847,7 +848,7 @@
* more to make sure that we don't overrun acl_text later.
*/
header =3D (const struct archive_entry_header_ustar *)h;
- size =3D tar_atol(header->size, sizeof(header->size));
+ size =3D (size_t)tar_atol(header->size, sizeof(header->size));
err =3D read_body_to_string(a, tar, &(tar->acl_text), h, unconsumed);
if (err !=3D ARCHIVE_OK)
return (err);
@@ -1021,7 +1022,7 @@
}
=20
/* Fail if we can't make our buffer big enough. */
- if (archive_string_ensure(as, size+1) =3D=3D NULL) {
+ if (archive_string_ensure(as, (size_t)size+1) =3D=3D NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory");
return (ARCHIVE_FATAL);
@@ -1030,15 +1031,15 @@
tar_flush_unconsumed(a, unconsumed);
=20
/* Read the body into the string. */
- *unconsumed =3D (size + 511) & ~ 511;
+ *unconsumed =3D (size_t)((size + 511) & ~ 511);
src =3D __archive_read_ahead(a, *unconsumed, NULL);
if (src =3D=3D NULL) {
*unconsumed =3D 0;
return (ARCHIVE_FATAL);
}
- memcpy(as->s, src, size);
+ memcpy(as->s, src, (size_t)size);
as->s[size] =3D '\0';
- as->length =3D size;
+ as->length =3D (size_t)size;
return (ARCHIVE_OK);
}
=20
@@ -1068,7 +1069,8 @@
archive_string_empty(&(tar->entry_linkpath));
=20
/* Parse out the numeric fields (all are octal) */
- archive_entry_set_mode(entry, tar_atol(header->mode, sizeof(header->mode)=
));
+ archive_entry_set_mode(entry,
+ (mode_t)tar_atol(header->mode, sizeof(header->mode)));
archive_entry_set_uid(entry, tar_atol(header->uid, sizeof(header->uid)));
archive_entry_set_gid(entry, tar_atol(header->gid, sizeof(header->gid)));
tar->entry_bytes_remaining =3D tar_atol(header->size, sizeof(header->size=
));
@@ -1310,13 +1312,13 @@
* Q: Is the above idea really possible? Even
* when there are GNU or pax extension entries?
*/
- data =3D __archive_read_ahead(a, size, NULL);
+ data =3D __archive_read_ahead(a, (size_t)size, NULL);
if (data =3D=3D NULL) {
*unconsumed =3D 0;
return (ARCHIVE_FATAL);
}
- archive_entry_copy_mac_metadata(entry, data, size);
- *unconsumed =3D (size + 511) & ~ 511;
+ archive_entry_copy_mac_metadata(entry, data, (size_t)size);
+ *unconsumed =3D (size_t)((size + 511) & ~ 511);
tar_flush_unconsumed(a, unconsumed);
return (tar_read_header(a, tar, entry, unconsumed));
}
@@ -1424,9 +1426,9 @@
=20
/* Parse out device numbers only for char and block specials. */
if (header->typeflag[0] =3D=3D '3' || header->typeflag[0] =3D=3D '4') {
- archive_entry_set_rdevmajor(entry,
+ archive_entry_set_rdevmajor(entry, (dev_t)
tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
- archive_entry_set_rdevminor(entry,
+ archive_entry_set_rdevminor(entry, (dev_t)
tar_atol(header->rdevminor, sizeof(header->rdevminor)));
}
=20
@@ -1663,6 +1665,11 @@
long n;
int err =3D ARCHIVE_OK, r;
=20
+#ifndef __FreeBSD__
+ if (value =3D=3D NULL)
+ value =3D ""; /* Disable compiler warning; do not pass
+ * NULL pointer to strlen(). */
+#endif
switch (key[0]) {
case 'G':
/* GNU "0.0" sparse pax format. */
@@ -1709,11 +1716,11 @@
=20
/* GNU "1.0" sparse pax format */
if (strcmp(key, "GNU.sparse.major") =3D=3D 0) {
- tar->sparse_gnu_major =3D tar_atol10(value, strlen(value));
+ tar->sparse_gnu_major =3D (int)tar_atol10(value, strlen(value));
tar->sparse_gnu_pending =3D 1;
}
if (strcmp(key, "GNU.sparse.minor") =3D=3D 0) {
- tar->sparse_gnu_minor =3D tar_atol10(value, strlen(value));
+ tar->sparse_gnu_minor =3D (int)tar_atol10(value, strlen(value));
tar->sparse_gnu_pending =3D 1;
}
if (strcmp(key, "GNU.sparse.name") =3D=3D 0) {
@@ -1796,20 +1803,20 @@
}
} else if (strcmp(key, "SCHILY.devmajor") =3D=3D 0) {
archive_entry_set_rdevmajor(entry,
- tar_atol10(value, strlen(value)));
+ (dev_t)tar_atol10(value, strlen(value)));
} else if (strcmp(key, "SCHILY.devminor") =3D=3D 0) {
archive_entry_set_rdevminor(entry,
- tar_atol10(value, strlen(value)));
+ (dev_t)tar_atol10(value, strlen(value)));
} else if (strcmp(key, "SCHILY.fflags") =3D=3D 0) {
archive_entry_copy_fflags_text(entry, value);
} else if (strcmp(key, "SCHILY.dev") =3D=3D 0) {
archive_entry_set_dev(entry,
- tar_atol10(value, strlen(value)));
+ (dev_t)tar_atol10(value, strlen(value)));
} else if (strcmp(key, "SCHILY.ino") =3D=3D 0) {
archive_entry_set_ino(entry,
tar_atol10(value, strlen(value)));
} else if (strcmp(key, "SCHILY.nlink") =3D=3D 0) {
- archive_entry_set_nlink(entry,
+ archive_entry_set_nlink(entry, (unsigned)
tar_atol10(value, strlen(value)));
} else if (strcmp(key, "SCHILY.realsize") =3D=3D 0) {
tar->realsize =3D tar_atol10(value, strlen(value));
@@ -2018,9 +2025,9 @@
=20
/* Parse out device numbers only for char and block specials */
if (header->typeflag[0] =3D=3D '3' || header->typeflag[0] =3D=3D '4') {
- archive_entry_set_rdevmajor(entry,
+ archive_entry_set_rdevmajor(entry, (dev_t)
tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
- archive_entry_set_rdevminor(entry,
+ archive_entry_set_rdevminor(entry, (dev_t)
tar_atol(header->rdevminor, sizeof(header->rdevminor)));
} else
archive_entry_set_rdev(entry, 0);
@@ -2255,7 +2262,8 @@
* don't require this, but they should.
*/
do {
- bytes_read =3D readline(a, tar, &p, tar_min(*remaining, 100), unconsumed=
);
+ bytes_read =3D readline(a, tar, &p,
+ (ssize_t)tar_min(*remaining, 100), unconsumed);
if (bytes_read <=3D 0)
return (ARCHIVE_FATAL);
*remaining -=3D bytes_read;
@@ -2296,7 +2304,7 @@
remaining =3D tar->entry_bytes_remaining;
=20
/* Parse entries. */
- entries =3D gnu_sparse_10_atol(a, tar, &remaining, unconsumed);
+ entries =3D (int)gnu_sparse_10_atol(a, tar, &remaining, unconsumed);
if (entries < 0)
return (ARCHIVE_FATAL);
/* Parse the individual entries. */
@@ -2314,11 +2322,11 @@
}
/* Skip rest of block... */
tar_flush_unconsumed(a, unconsumed);
- bytes_read =3D tar->entry_bytes_remaining - remaining;
+ bytes_read =3D (ssize_t)(tar->entry_bytes_remaining - remaining);
to_skip =3D 0x1ff & -bytes_read;
if (to_skip !=3D __archive_read_consume(a, to_skip))
return (ARCHIVE_FATAL);
- return (bytes_read + to_skip);
+ return ((ssize_t)(bytes_read + to_skip));
}
=20
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_xar.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_xar.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_xar.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_xar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_xar.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -183,9 +183,9 @@
time_t mtime;
time_t atime;
struct archive_string uname;
- uid_t uid;
+ int64_t uid;
struct archive_string gname;
- gid_t gid;
+ int64_t gid;
mode_t mode;
dev_t dev;
dev_t devmajor;
@@ -602,7 +602,8 @@
r =3D move_reading_point(a, xar->toc_chksum_offset);
if (r !=3D ARCHIVE_OK)
return (r);
- b =3D __archive_read_ahead(a, xar->toc_chksum_size, &bytes);
+ b =3D __archive_read_ahead(a,
+ (size_t)xar->toc_chksum_size, &bytes);
if (bytes < 0)
return ((int)bytes);
if ((uint64_t)bytes < xar->toc_chksum_size) {
@@ -611,7 +612,8 @@
"Truncated archive file");
return (ARCHIVE_FATAL);
}
- r =3D checksum_final(a, b, xar->toc_chksum_size, NULL, 0);
+ r =3D checksum_final(a, b,
+ (size_t)xar->toc_chksum_size, NULL, 0);
__archive_read_consume(a, xar->toc_chksum_size);
xar->offset +=3D xar->toc_chksum_size;
if (r !=3D ARCHIVE_OK)
@@ -2065,7 +2067,7 @@
xar->file->hdnext =3D xar->hdlink_orgs;
xar->hdlink_orgs =3D xar->file;
} else {
- xar->file->link =3D atol10(attr->value,
+ xar->file->link =3D (unsigned)atol10(attr->value,
strlen(attr->value));
if (xar->file->link > 0)
if (add_link(a, xar, xar->file) !=3D ARCHIVE_OK) {
@@ -2761,7 +2763,7 @@
xar->file->has |=3D HAS_MODE;
xar->file->mode =3D
(xar->file->mode & AE_IFMT) |
- (atol8(s, len) & ~AE_IFMT);
+ ((mode_t)(atol8(s, len)) & ~AE_IFMT);
break;
case FILE_GROUP:
xar->file->has |=3D HAS_GID;
@@ -3076,12 +3078,15 @@
attr->name =3D strdup(
(const char *)xmlTextReaderConstLocalName(reader));
if (attr->name =3D=3D NULL) {
+ free(attr);
archive_set_error(&a->archive, ENOMEM, "Out of memory");
return (ARCHIVE_FATAL);
}
attr->value =3D strdup(
(const char *)xmlTextReaderConstValue(reader));
if (attr->value =3D=3D NULL) {
+ free(attr->name);
+ free(attr);
archive_set_error(&a->archive, ENOMEM, "Out of memory");
return (ARCHIVE_FATAL);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_zip.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_zip.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_zip.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_zip.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_zip.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -38,17 +38,19 @@
#endif
=20
#include "archive.h"
+#include "archive_endian.h"
#include "archive_entry.h"
#include "archive_entry_locale.h"
#include "archive_private.h"
+#include "archive_rb.h"
#include "archive_read_private.h"
-#include "archive_endian.h"
=20
#ifndef HAVE_ZLIB_H
#include "archive_crc32.h"
#endif
=20
struct zip_entry {
+ struct archive_rb_node node;
int64_t local_header_offset;
int64_t compressed_size;
int64_t uncompressed_size;
@@ -71,11 +73,13 @@
size_t central_directory_size;
size_t central_directory_entries;
char have_central_directory;
+ int64_t offset;
=20
/* List of entries (seekable Zip only) */
size_t entries_remaining;
struct zip_entry *zip_entries;
struct zip_entry *entry;
+ struct archive_rb_tree tree;
=20
size_t unconsumed;
=20
@@ -275,13 +279,37 @@
}
=20
static int
+cmp_node(const struct archive_rb_node *n1, const struct archive_rb_node *n=
2)
+{
+ const struct zip_entry *e1 =3D (const struct zip_entry *)n1;
+ const struct zip_entry *e2 =3D (const struct zip_entry *)n2;
+
+ return ((int)(e2->local_header_offset - e1->local_header_offset));
+}
+
+static int
+cmp_key(const struct archive_rb_node *n, const void *key)
+{
+ /* This function won't be called */
+ (void)n; /* UNUSED */
+ (void)key; /* UNUSED */
+ return 1;
+}
+
+static int
slurp_central_directory(struct archive_read *a, struct zip *zip)
{
unsigned i;
+ static const struct archive_rb_tree_ops rb_ops =3D {
+ &cmp_node, &cmp_key
+ };
=20
__archive_read_seek(a, zip->central_directory_offset, SEEK_SET);
+ zip->offset =3D zip->central_directory_offset;
+ __archive_rb_tree_init(&zip->tree, &rb_ops);
=20
- zip->zip_entries =3D calloc(zip->central_directory_entries, sizeof(struct=
zip_entry));
+ zip->zip_entries =3D calloc(zip->central_directory_entries,
+ sizeof(struct zip_entry));
for (i =3D 0; i < zip->central_directory_entries; ++i) {
struct zip_entry *zip_entry =3D &zip->zip_entries[i];
size_t filename_length, extra_length, comment_length;
@@ -300,7 +328,7 @@
zip_entry->system =3D p[5];
/* version_required =3D archive_le16dec(p + 6); */
zip_entry->flags =3D archive_le16dec(p + 8);
- zip_entry->compression =3D archive_le16dec(p + 10);
+ zip_entry->compression =3D (char)archive_le16dec(p + 10);
zip_entry->mtime =3D zip_time(p + 12);
zip_entry->crc32 =3D archive_le32dec(p + 16);
zip_entry->compressed_size =3D archive_le32dec(p + 20);
@@ -320,6 +348,8 @@
if (zip_entry->system =3D=3D 3) {
zip_entry->mode =3D external_attributes >> 16;
}
+ /* Register an entry to RB tree to sort it by file offset. */
+ __archive_rb_tree_insert_node(&zip->tree, &zip_entry->node);
=20
/* We don't read the filename until we get to the
local file header. Reading it here would speed up
@@ -333,11 +363,19 @@
46 + filename_length + extra_length + comment_length);
}
=20
- /* TODO: Sort zip entries by file offset so that we
- can optimize get_next_header() to use skip instead of
- seek. */
+ return ARCHIVE_OK;
+}
=20
- return ARCHIVE_OK;
+static int64_t
+zip_read_consume(struct archive_read *a, int64_t bytes)
+{
+ struct zip *zip =3D (struct zip *)a->format->data;
+ int64_t skip;
+
+ skip =3D __archive_read_consume(a, bytes);
+ if (skip > 0)
+ zip->offset +=3D skip;
+ return (skip);
}
=20
static int
@@ -345,7 +383,7 @@
struct archive_entry *entry)
{
struct zip *zip =3D (struct zip *)a->format->data;
- int r;
+ int r, ret =3D ARCHIVE_OK;
=20
a->archive.archive_format =3D ARCHIVE_FORMAT_ZIP;
if (a->archive.archive_format_name =3D=3D NULL)
@@ -356,26 +394,33 @@
zip->entries_remaining =3D zip->central_directory_entries;
if (r !=3D ARCHIVE_OK)
return r;
- zip->entry =3D zip->zip_entries;
- } else {
- ++zip->entry;
+ /* Get first entry whose local header offset is lower than
+ * other entries in the archive file. */
+ zip->entry =3D
+ (struct zip_entry *)ARCHIVE_RB_TREE_MIN(&zip->tree);
+ } else if (zip->entry !=3D NULL) {
+ /* Get next entry in local header offset order. */
+ zip->entry =3D (struct zip_entry *)__archive_rb_tree_iterate(
+ &zip->tree, &zip->entry->node, ARCHIVE_RB_DIR_RIGHT);
}
=20
- if (zip->entries_remaining <=3D 0)
+ if (zip->entries_remaining <=3D 0 || zip->entry =3D=3D NULL)
return ARCHIVE_EOF;
--zip->entries_remaining;
=20
- /* TODO: If entries are sorted by offset within the file, we
- should be able to skip here instead of seeking. Skipping is
- typically faster (easier for I/O layer to optimize). */
- __archive_read_seek(a, zip->entry->local_header_offset, SEEK_SET);
+ if (zip->offset !=3D zip->entry->local_header_offset) {
+ __archive_read_seek(a, zip->entry->local_header_offset,
+ SEEK_SET);
+ zip->offset =3D zip->entry->local_header_offset;
+ }
zip->unconsumed =3D 0;
r =3D zip_read_local_file_header(a, entry, zip);
if (r !=3D ARCHIVE_OK)
return r;
if ((zip->entry->mode & AE_IFMT) =3D=3D AE_IFLNK) {
const void *p;
- size_t linkname_length =3D archive_entry_size(entry);
+ struct archive_string_conv *sconv;
+ size_t linkname_length =3D (size_t)archive_entry_size(entry);
=20
archive_entry_set_size(entry, 0);
p =3D __archive_read_ahead(a, linkname_length, NULL);
@@ -385,17 +430,40 @@
return ARCHIVE_FATAL;
}
=20
+ sconv =3D zip->sconv;
+ if (sconv =3D=3D NULL && (zip->entry->flags & ZIP_UTF8_NAME))
+ sconv =3D zip->sconv_utf8;
+ if (sconv =3D=3D NULL)
+ sconv =3D zip->sconv_default;
if (archive_entry_copy_symlink_l(entry, p, linkname_length,
- NULL) !=3D 0) {
- /* NOTE: If the last argument is NULL, this will
- * fail only by memeory allocation failure. */
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for Symlink");
- return (ARCHIVE_FATAL);
+ sconv) !=3D 0) {
+ if (errno !=3D ENOMEM && sconv =3D=3D zip->sconv_utf8 &&
+ (zip->entry->flags & ZIP_UTF8_NAME))
+ archive_entry_copy_symlink_l(entry, p,
+ linkname_length, NULL);
+ if (errno =3D=3D ENOMEM) {
+ archive_set_error(&a->archive, ENOMEM,
+ "Can't allocate memory for Symlink");
+ return (ARCHIVE_FATAL);
+ }
+ /*
+ * Since there is no character-set regulation for
+ * symlink name, do not report the conversion error
+ * in an automatic conversion.
+ */
+ if (sconv !=3D zip->sconv_utf8 ||
+ (zip->entry->flags & ZIP_UTF8_NAME) =3D=3D 0) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Symlink cannot be converted "
+ "from %s to current locale.",
+ archive_string_conversion_charset_name(
+ sconv));
+ ret =3D ARCHIVE_WARN;
+ }
}
- /* TODO: handle character-set issues? */
}
- return ARCHIVE_OK;
+ return (ret);
}
=20
static int
@@ -489,7 +557,7 @@
memset(zip->entry, 0, sizeof(struct zip_entry));
=20
/* Search ahead for the next local file header. */
- __archive_read_consume(a, zip->unconsumed);
+ zip_read_consume(a, zip->unconsumed);
zip->unconsumed =3D 0;
for (;;) {
int64_t skipped =3D 0;
@@ -509,7 +577,7 @@
=20
if (p[2] =3D=3D '\003' && p[3] =3D=3D '\004') {
/* Regular file entry. */
- __archive_read_consume(a, skipped);
+ zip_read_consume(a, skipped);
return zip_read_local_file_header(a, entry, zip);
}
=20
@@ -520,7 +588,7 @@
++p;
++skipped;
}
- __archive_read_consume(a, skipped);
+ zip_read_consume(a, skipped);
}
}
=20
@@ -569,7 +637,7 @@
version =3D p[4];
zip_entry->system =3D p[5];
zip_entry->flags =3D archive_le16dec(p + 6);
- zip_entry->compression =3D archive_le16dec(p + 8);
+ zip_entry->compression =3D (char)archive_le16dec(p + 8);
zip_entry->mtime =3D zip_time(p + 10);
local_crc32 =3D archive_le32dec(p + 14);
compressed_size =3D archive_le32dec(p + 18);
@@ -577,7 +645,7 @@
filename_length =3D archive_le16dec(p + 26);
extra_length =3D archive_le16dec(p + 28);
=20
- __archive_read_consume(a, 30);
+ zip_read_consume(a, 30);
=20
if (zip->have_central_directory) {
/* If we read the central dir entry, we must have size information
@@ -647,7 +715,7 @@
archive_string_conversion_charset_name(sconv));
ret =3D ARCHIVE_WARN;
}
- __archive_read_consume(a, filename_length);
+ zip_read_consume(a, filename_length);
=20
if (zip_entry->mode =3D=3D 0) {
/* Especially in streaming mode, we can end up
@@ -659,14 +727,14 @@
if (len > 0 && wp[len - 1] =3D=3D L'/')
zip_entry->mode =3D AE_IFDIR | 0777;
else
- zip_entry->mode =3D AE_IFREG | 0777;
+ zip_entry->mode =3D AE_IFREG | 0666;
} else {
cp =3D archive_entry_pathname(entry);
len =3D (cp !=3D NULL)?strlen(cp):0;
if (len > 0 && cp[len - 1] =3D=3D '/')
zip_entry->mode =3D AE_IFDIR | 0777;
else
- zip_entry->mode =3D AE_IFREG | 0777;
+ zip_entry->mode =3D AE_IFREG | 0666;
}
}
=20
@@ -677,7 +745,7 @@
return (ARCHIVE_FATAL);
}
process_extra(h, extra_length, zip_entry);
- __archive_read_consume(a, extra_length);
+ zip_read_consume(a, extra_length);
=20
/* Populate some additional entry fields: */
archive_entry_set_mode(entry, zip_entry->mode);
@@ -774,7 +842,7 @@
return (ARCHIVE_FAILED);
}
=20
- __archive_read_consume(a, zip->unconsumed);
+ zip_read_consume(a, zip->unconsumed);
zip->unconsumed =3D 0;
=20
switch(zip->entry->compression) {
@@ -926,7 +994,7 @@
return (ARCHIVE_FATAL);
}
if (bytes_avail > zip->entry_bytes_remaining)
- bytes_avail =3D zip->entry_bytes_remaining;
+ bytes_avail =3D (ssize_t)zip->entry_bytes_remaining;
}
*size =3D bytes_avail;
zip->entry_bytes_remaining -=3D bytes_avail;
@@ -990,7 +1058,7 @@
compressed_buff =3D __archive_read_ahead(a, 1, &bytes_avail);
if (0 =3D=3D (zip->entry->flags & ZIP_LENGTH_AT_END)
&& bytes_avail > zip->entry_bytes_remaining) {
- bytes_avail =3D zip->entry_bytes_remaining;
+ bytes_avail =3D (ssize_t)zip->entry_bytes_remaining;
}
if (bytes_avail <=3D 0) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -1030,7 +1098,7 @@
=20
/* Consume as much as the compressor actually used. */
bytes_avail =3D zip->stream.total_in;
- __archive_read_consume(a, bytes_avail);
+ zip_read_consume(a, bytes_avail);
zip->entry_bytes_remaining -=3D bytes_avail;
zip->entry_compressed_bytes_read +=3D bytes_avail;
=20
@@ -1070,14 +1138,11 @@
/* If we've already read to end of data, we're done. */
if (zip->end_of_entry)
return (ARCHIVE_OK);
- /* If we're seeking, we're done. */
- if (zip->have_central_directory)
- return (ARCHIVE_OK);
=20
/* So we know we're streaming... */
if (0 =3D=3D (zip->entry->flags & ZIP_LENGTH_AT_END)) {
/* We know the compressed length, so we can just skip. */
- int64_t bytes_skipped =3D __archive_read_consume(a,
+ int64_t bytes_skipped =3D zip_read_consume(a,
zip->entry_bytes_remaining + zip->unconsumed);
if (bytes_skipped < 0)
return (ARCHIVE_FATAL);
@@ -1100,11 +1165,11 @@
if (r !=3D ARCHIVE_OK)
return (r);
}
- break;
+ return ARCHIVE_OK;
#endif
default: /* Uncompressed or unknown. */
/* Scan for a PK\007\010 signature. */
- __archive_read_consume(a, zip->unconsumed);
+ zip_read_consume(a, zip->unconsumed);
zip->unconsumed =3D 0;
for (;;) {
const char *p, *buff;
@@ -1122,14 +1187,13 @@
else if (p[3] =3D=3D '\007') { p +=3D 1; }
else if (p[3] =3D=3D '\010' && p[2] =3D=3D '\007'
&& p[1] =3D=3D 'K' && p[0] =3D=3D 'P') {
- __archive_read_consume(a, p - buff + 16);
+ zip_read_consume(a, p - buff + 16);
return ARCHIVE_OK;
} else { p +=3D 4; }
}
- __archive_read_consume(a, p - buff);
+ zip_read_consume(a, p - buff);
}
}
- return ARCHIVE_OK;
}
=20
static int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string.c
--- a/head/contrib/libarchive/libarchive/archive_string.c Mon Jul 30 11:44:=
18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string.c Fri Aug 10 14:19:=
25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string.c 23=
2153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string.c 23=
8856 2012-07-28 06:38:44Z mm $");
=20
/*
* Basic resizable string support, to simplify manipulating arbitrary-sized
@@ -61,9 +61,6 @@
#include <windows.h>
#include <locale.h>
#endif
-#if defined(__APPLE__)
-#include <CoreServices/CoreServices.h>
-#endif
=20
#include "archive_endian.h"
#include "archive_private.h"
@@ -115,11 +112,6 @@
#endif
/* A temporary buffer for normalization. */
struct archive_string utftmp;
-#if defined(__APPLE__)
- UnicodeToTextInfo uniInfo;
- struct archive_string utf16nfc;
- struct archive_string utf16nfd;
-#endif
int (*converter[2])(struct archive_string *, const void *, size_t,
struct archive_string_conv *);
int nconverter;
@@ -164,29 +156,29 @@
static int is_big_endian(void);
static int strncat_in_codepage(struct archive_string *, const void *,
size_t, struct archive_string_conv *);
-static int win_strncat_from_utf16be(struct archive_string *, const void *,=
size_t,
- struct archive_string_conv *);
-static int win_strncat_from_utf16le(struct archive_string *, const void *,=
size_t,
- struct archive_string_conv *);
-static int win_strncat_to_utf16be(struct archive_string *, const void *, s=
ize_t,
- struct archive_string_conv *);
-static int win_strncat_to_utf16le(struct archive_string *, const void *, s=
ize_t,
- struct archive_string_conv *);
+static int win_strncat_from_utf16be(struct archive_string *, const void *,
+ size_t, struct archive_string_conv *);
+static int win_strncat_from_utf16le(struct archive_string *, const void *,
+ size_t, struct archive_string_conv *);
+static int win_strncat_to_utf16be(struct archive_string *, const void *,
+ size_t, struct archive_string_conv *);
+static int win_strncat_to_utf16le(struct archive_string *, const void *,
+ size_t, struct archive_string_conv *);
#endif
-static int best_effort_strncat_from_utf16be(struct archive_string *, const=
void *,
- size_t, struct archive_string_conv *);
-static int best_effort_strncat_from_utf16le(struct archive_string *, const=
void *,
- size_t, struct archive_string_conv *);
-static int best_effort_strncat_to_utf16be(struct archive_string *, const v=
oid *,
- size_t, struct archive_string_conv *);
-static int best_effort_strncat_to_utf16le(struct archive_string *, const v=
oid *,
- size_t, struct archive_string_conv *);
+static int best_effort_strncat_from_utf16be(struct archive_string *,
+ const void *, size_t, struct archive_string_conv *);
+static int best_effort_strncat_from_utf16le(struct archive_string *,
+ const void *, size_t, struct archive_string_conv *);
+static int best_effort_strncat_to_utf16be(struct archive_string *,
+ const void *, size_t, struct archive_string_conv *);
+static int best_effort_strncat_to_utf16le(struct archive_string *,
+ const void *, size_t, struct archive_string_conv *);
#if defined(HAVE_ICONV)
static int iconv_strncat_in_locale(struct archive_string *, const void *,
size_t, struct archive_string_conv *);
#endif
-static int best_effort_strncat_in_locale(struct archive_string *, const vo=
id *,
- size_t, struct archive_string_conv *);
+static int best_effort_strncat_in_locale(struct archive_string *,
+ const void *, size_t, struct archive_string_conv *);
static int _utf8_to_unicode(uint32_t *, const char *, size_t);
static int utf8_to_unicode(uint32_t *, const char *, size_t);
static inline uint32_t combine_surrogate_pair(uint32_t, uint32_t);
@@ -201,10 +193,8 @@
size_t, struct archive_string_conv *);
static int archive_string_normalize_C(struct archive_string *, const void =
*,
size_t, struct archive_string_conv *);
-#if defined(__APPLE__)
static int archive_string_normalize_D(struct archive_string *, const void =
*,
size_t, struct archive_string_conv *);
-#endif
static int archive_string_append_unicode(struct archive_string *,
const void *, size_t, struct archive_string_conv *);
=20
@@ -238,7 +228,8 @@
}
=20
void
-archive_wstring_concat(struct archive_wstring *dest, struct archive_wstrin=
g *src)
+archive_wstring_concat(struct archive_wstring *dest,
+ struct archive_wstring *src)
{
if (archive_wstring_append(dest, src->s, src->length) =3D=3D NULL)
__archive_errx(1, "Out of memory");
@@ -443,10 +434,7 @@
archive_wstring_append_from_mbs(struct archive_wstring *dest,
const char *p, size_t len)
{
- int r =3D archive_wstring_append_from_mbs_in_codepage(dest, p, len, NULL);
- if (r !=3D 0 && errno =3D=3D ENOMEM)
- __archive_errx(1, "No memory");
- return (r);
+ return archive_wstring_append_from_mbs_in_codepage(dest, p, len, NULL);
}
=20
static int
@@ -479,7 +467,8 @@
*ws++ =3D (wchar_t)*mp++;
count++;
}
- } else if (sc !=3D NULL && (sc->flag & SCONV_NORMALIZATION_C)) {
+ } else if (sc !=3D NULL &&
+ (sc->flag & (SCONV_NORMALIZATION_C | SCONV_NORMALIZATION_D))) {
/*
* Normalize UTF-8 and UTF-16BE and convert it directly
* to UTF-16 as wchar_t.
@@ -495,18 +484,23 @@
if (sc->flag & SCONV_FROM_UTF16) {
/*
* UTF-16BE/LE NFD =3D=3D=3D> UTF-16 NFC
+ * UTF-16BE/LE NFC =3D=3D=3D> UTF-16 NFD
*/
count =3D utf16nbytes(s, length);
} else {
/*
* UTF-8 NFD =3D=3D=3D> UTF-16 NFC
+ * UTF-8 NFC =3D=3D=3D> UTF-16 NFD
*/
count =3D mbsnbytes(s, length);
}
u16.s =3D (char *)dest->s;
u16.length =3D dest->length << 1;;
u16.buffer_length =3D dest->buffer_length;
- ret =3D archive_string_normalize_C(&u16, s, count, sc);
+ if (sc->flag & SCONV_NORMALIZATION_C)
+ ret =3D archive_string_normalize_C(&u16, s, count, sc);
+ else
+ ret =3D archive_string_normalize_D(&u16, s, count, sc);
dest->s =3D (wchar_t *)u16.s;
dest->length =3D u16.length >> 1;
dest->buffer_length =3D u16.buffer_length;
@@ -519,7 +513,7 @@
if (NULL =3D=3D archive_wstring_ensure(dest,
dest->length + count + 1))
return (-1);
- wmemcpy(dest->s + dest->length, (wchar_t *)s, count);
+ wmemcpy(dest->s + dest->length, (const wchar_t *)s, count);
if ((sc->flag & SCONV_FROM_UTF16BE) && !is_big_endian()) {
uint16_t *u16 =3D (uint16_t *)(dest->s + dest->length);
int b;
@@ -537,6 +531,7 @@
}
} else {
DWORD mbflag;
+ size_t buffsize;
=20
if (sc =3D=3D NULL)
mbflag =3D 0;
@@ -548,48 +543,31 @@
} else
mbflag =3D MB_PRECOMPOSED;
=20
- if (length =3D=3D 0) {
- /*
- * We do not need to convert any characters but make
- * sure `dest' has a valid buffer(no NULL pointer).
- */
- if (NULL =3D=3D archive_wstring_ensure(dest,
- dest->length + 1))
+ buffsize =3D dest->length + length + 1;
+ do {
+ /* Allocate memory for WCS. */
+ if (NULL =3D=3D archive_wstring_ensure(dest, buffsize))
return (-1);
- dest->s[dest->length] =3D L'\0';
- return (0);
- }
-
- /*
- * Count how many bytes are needed for WCS.
- */
- count =3D MultiByteToWideChar(from_cp,
- mbflag, s, length, NULL, 0);
- if (count =3D=3D 0) {
- if (dest->s =3D=3D NULL) {
- if (NULL =3D=3D archive_wstring_ensure(dest,
- dest->length + 1))
- return (-1);
+ /* Convert MBS to WCS. */
+ count =3D MultiByteToWideChar(from_cp,
+ mbflag, s, length, dest->s + dest->length,
+ (dest->buffer_length >> 1) -1);
+ if (count =3D=3D 0 &&
+ GetLastError() =3D=3D ERROR_INSUFFICIENT_BUFFER) {
+ /* Expand the WCS buffer. */
+ buffsize =3D dest->buffer_length << 1;
+ continue;
}
- dest->s[dest->length] =3D L'\0';
- return (-1);
- }
- /* Allocate memory for WCS. */
- if (NULL =3D=3D archive_wstring_ensure(dest,
- dest->length + count + 1))
- return (-1);
- /* Convert MBS to WCS. */
- count =3D MultiByteToWideChar(from_cp,
- mbflag, s, length, dest->s + dest->length, count);
- if (count =3D=3D 0)
- ret =3D -1;
+ if (count =3D=3D 0 && length !=3D 0)
+ ret =3D -1;
+ } while (0);
}
dest->length +=3D count;
dest->s[dest->length] =3D L'\0';
return (ret);
}
=20
-#elif defined(HAVE_MBSNRTOWCS)
+#else
=20
/*
* Convert MBS to WCS.
@@ -600,42 +578,7 @@
const char *p, size_t len)
{
size_t r;
- /*
- * No single byte will be more than one wide character,
- * so this length estimate will always be big enough.
- */
- size_t wcs_length =3D len;
- size_t mbs_length =3D len;
- const char *mbs =3D p;
- wchar_t *wcs;
- mbstate_t shift_state;
-
- memset(&shift_state, 0, sizeof(shift_state));
- if (NULL =3D=3D archive_wstring_ensure(dest, dest->length + wcs_length + =
1))
- __archive_errx(1,
- "No memory for archive_wstring_append_from_mbs()");
- wcs =3D dest->s + dest->length;
- r =3D mbsnrtowcs(wcs, &mbs, mbs_length, wcs_length, &shift_state);
- if (r !=3D (size_t)-1) {
- dest->length +=3D r;
- dest->s[dest->length] =3D L'\0';
- return (0);
- }
- dest->s[dest->length] =3D L'\0';
- return (-1);
-}
-
-#else
-
-/*
- * Convert MBS to WCS.
- * Note: returns -1 if conversion fails.
- */
-int
-archive_wstring_append_from_mbs(struct archive_wstring *dest,
- const char *p, size_t len)
-{
- size_t r;
+ int ret_val =3D 0;
/*
* No single byte will be more than one wide character,
* so this length estimate will always be big enough.
@@ -650,23 +593,36 @@
memset(&shift_state, 0, sizeof(shift_state));
#endif
if (NULL =3D=3D archive_wstring_ensure(dest, dest->length + wcs_length + =
1))
- __archive_errx(1,
- "No memory for archive_wstring_append_from_mbs()");
+ return (-1);
wcs =3D dest->s + dest->length;
/*
* We cannot use mbsrtowcs/mbstowcs here because those may convert
* extra MBS when strlen(p) > len and one wide character consis of
* multi bytes.
*/
- while (wcs_length > 0 && *mbs && mbs_length > 0) {
+ while (*mbs && mbs_length > 0) {
+ if (wcs_length =3D=3D 0) {
+ dest->length =3D wcs - dest->s;
+ dest->s[dest->length] =3D L'\0';
+ wcs_length =3D mbs_length;
+ if (NULL =3D=3D archive_wstring_ensure(dest,
+ dest->length + wcs_length + 1))
+ return (-1);
+ wcs =3D dest->s + dest->length;
+ }
#if HAVE_MBRTOWC
r =3D mbrtowc(wcs, mbs, wcs_length, &shift_state);
#else
r =3D mbtowc(wcs, mbs, wcs_length);
#endif
if (r =3D=3D (size_t)-1 || r =3D=3D (size_t)-2) {
- dest->s[dest->length] =3D L'\0';
- return (-1);
+ ret_val =3D -1;
+ if (errno =3D=3D EILSEQ) {
+ ++mbs;
+ --mbs_length;
+ continue;
+ } else
+ break;
}
if (r =3D=3D 0 || r > mbs_length)
break;
@@ -677,7 +633,7 @@
}
dest->length =3D wcs - dest->s;
dest->s[dest->length] =3D L'\0';
- return (0);
+ return (ret_val);
}
=20
#endif
@@ -697,10 +653,7 @@
archive_string_append_from_wcs(struct archive_string *as,
const wchar_t *w, size_t len)
{
- int r =3D archive_string_append_from_wcs_in_codepage(as, w, len, NULL);
- if (r !=3D 0 && errno =3D=3D ENOMEM)
- __archive_errx(1, "No memory");
- return (r);
+ return archive_string_append_from_wcs_in_codepage(as, w, len, NULL);
}
=20
static int
@@ -792,73 +745,6 @@
return (defchar_used?-1:ret);
}
=20
-#elif defined(HAVE_WCSNRTOMBS)
-
-/*
- * Translates a wide character string into current locale character set
- * and appends to the archive_string. Note: returns -1 if conversion
- * fails.
- */
-int
-archive_string_append_from_wcs(struct archive_string *as,
- const wchar_t *w, size_t len)
-{
- mbstate_t shift_state;
- size_t r, ndest, nwc;
- char *dest;
- const wchar_t *wp, *wpp;
- int ret_val =3D 0;
-
- wp =3D w;
- nwc =3D len;
- ndest =3D len * 2;
- /* Initialize the shift state. */
- memset(&shift_state, 0, sizeof(shift_state));
- while (nwc > 0) {
- /* Allocate buffer for MBS. */
- if (archive_string_ensure(as, as->length + ndest + 1) =3D=3D NULL)
- __archive_errx(1, "Out of memory");
-
- dest =3D as->s + as->length;
- wpp =3D wp;
- r =3D wcsnrtombs(dest, &wp, nwc,
- as->buffer_length - as->length -1,
- &shift_state);
- if (r =3D=3D (size_t)-1) {
- if (errno =3D=3D EILSEQ) {
- /* Retry conversion just for safe WCS. */
- size_t xwc =3D wp - wpp;
- wp =3D wpp;
- r =3D wcsnrtombs(dest, &wp, xwc,
- as->buffer_length - as->length -1,
- &shift_state);
- if (r =3D=3D (size_t)-1)
- /* This would not happen. */
- return (-1);
- as->length +=3D r;
- nwc -=3D wp - wpp;
- /* Skip an illegal wide char. */
- as->s[as->length++] =3D '?';
- wp++;
- nwc--;
- ret_val =3D -1;
- continue;
- } else {
- ret_val =3D -1;
- break;
- }
- }
- as->length +=3D r;
- if (wp =3D=3D NULL || (wp - wpp) >=3D (int64_t)nwc)
- break;
- /* Get a remaining WCS lenth. */
- nwc -=3D wp - wpp;
- }
- /* All wide characters are translated to MBS. */
- as->s[as->length] =3D '\0';
- return (ret_val);
-}
-
#elif defined(HAVE_WCTOMB) || defined(HAVE_WCRTOMB)
=20
/*
@@ -893,7 +779,7 @@
* as->s is still NULL.
*/
if (archive_string_ensure(as, as->length + len + 1) =3D=3D NULL)
- __archive_errx(1, "Out of memory");
+ return (-1);
=20
p =3D as->s + as->length;
end =3D as->s + as->buffer_length - MB_CUR_MAX -1;
@@ -904,7 +790,7 @@
/* Re-allocate buffer for MBS. */
if (archive_string_ensure(as,
as->length + len * 2 + 1) =3D=3D NULL)
- __archive_errx(1, "Out of memory");
+ return (-1);
p =3D as->s + as->length;
end =3D as->s + as->buffer_length - MB_CUR_MAX -1;
}
@@ -946,6 +832,7 @@
(void)as;/* UNUSED */
(void)w;/* UNUSED */
(void)len;/* UNUSED */
+ errno =3D ENOSYS;
return (-1);
}
=20
@@ -987,27 +874,6 @@
*psc =3D sc;
}
=20
-#if defined(__APPLE__)
-
-static int
-createUniInfo(struct archive_string_conv *sconv)
-{
- UnicodeMapping map;
- OSStatus err;
-
- map.unicodeEncoding =3D CreateTextEncoding(kTextEncodingUnicodeDefault,
- kUnicodeNoSubset, kUnicode16BitFormat);
- map.otherEncoding =3D CreateTextEncoding(kTextEncodingUnicodeDefault,
- kUnicodeHFSPlusDecompVariant, kUnicode16BitFormat);
- map.mappingVersion =3D kUnicodeUseLatestMapping;
-
- sconv->uniInfo =3D NULL;
- err =3D CreateUnicodeToTextInfo(&map, &(sconv->uniInfo));
- return ((err =3D=3D noErr)? 0: -1);
-}
-
-#endif /* __APPLE__ */
-
static void
add_converter(struct archive_string_conv *sc, int (*converter)
(struct archive_string *, const void *, size_t,
@@ -1066,9 +932,11 @@
=20
if (sc->flag & SCONV_BEST_EFFORT) {
if (sc->flag & SCONV_TO_UTF16BE)
- add_converter(sc, best_effort_strncat_to_utf16be);
+ add_converter(sc,
+ best_effort_strncat_to_utf16be);
else
- add_converter(sc, best_effort_strncat_to_utf16le);
+ add_converter(sc,
+ best_effort_strncat_to_utf16le);
} else
/* Make sure we have no converter. */
sc->nconverter =3D 0;
@@ -1082,12 +950,9 @@
/*
* At least we should normalize a UTF-16BE string.
*/
-#if defined(__APPLE__)
if (sc->flag & SCONV_NORMALIZATION_D)
add_converter(sc,archive_string_normalize_D);
- else
-#endif
- if (sc->flag & SCONV_NORMALIZATION_C)
+ else if (sc->flag & SCONV_NORMALIZATION_C)
add_converter(sc, archive_string_normalize_C);
=20
if (sc->flag & SCONV_TO_UTF8) {
@@ -1135,12 +1000,9 @@
/*
* At least we should normalize a UTF-8 string.
*/
-#if defined(__APPLE__)
if (sc->flag & SCONV_NORMALIZATION_D)
add_converter(sc,archive_string_normalize_D);
- else
-#endif
- if (sc->flag & SCONV_NORMALIZATION_C)
+ else if (sc->flag & SCONV_NORMALIZATION_C)
add_converter(sc, archive_string_normalize_C);
=20
/*
@@ -1174,6 +1036,16 @@
#if HAVE_ICONV
if (sc->cd !=3D (iconv_t)-1) {
add_converter(sc, iconv_strncat_in_locale);
+ /*
+ * iconv generally does not support UTF-8-MAC and so
+ * we have to the output of iconv from NFC to NFD if
+ * need.
+ */
+ if ((sc->flag & SCONV_FROM_CHARSET) &&
+ (sc->flag & SCONV_TO_UTF8)) {
+ if (sc->flag & SCONV_NORMALIZATION_D)
+ add_converter(sc, archive_string_normalize_D);
+ }
return;
}
#endif
@@ -1253,10 +1125,6 @@
return (NULL);
}
archive_string_init(&sc->utftmp);
-#if defined(__APPLE__)
- archive_string_init(&sc->utf16nfc);
- archive_string_init(&sc->utf16nfd);
-#endif
=20
if (flag & SCONV_TO_CHARSET) {
/*
@@ -1335,13 +1203,35 @@
if ((flag & SCONV_FROM_CHARSET) &&
(flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8))) {
#if defined(__APPLE__)
- if (flag & SCONV_TO_UTF8) {
- if (createUniInfo(sc) =3D=3D 0)
- flag |=3D SCONV_NORMALIZATION_D;
- } else
+ if (flag & SCONV_TO_UTF8)
+ flag |=3D SCONV_NORMALIZATION_D;
+ else
#endif
flag |=3D SCONV_NORMALIZATION_C;
}
+#if defined(__APPLE__)
+ /*
+ * In case writing an archive file, make sure that a filename
+ * going to be passed to iconv is a Unicode NFC string since
+ * a filename in HFS Plus filesystem is a Unicode NFD one and
+ * iconv cannot handle it with "UTF-8" charset. It is simpler
+ * than a use of "UTF-8-MAC" charset.
+ */
+ if ((flag & SCONV_TO_CHARSET) &&
+ (flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8)) &&
+ !(flag & (SCONV_TO_UTF16 | SCONV_TO_UTF8)))
+ flag |=3D SCONV_NORMALIZATION_C;
+ /*
+ * In case reading an archive file. make sure that a filename
+ * will be passed to users is a Unicode NFD string in order to
+ * correctly compare the filename with other one which comes
+ * from HFS Plus filesystem.
+ */
+ if ((flag & SCONV_FROM_CHARSET) &&
+ !(flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8)) &&
+ (flag & SCONV_TO_UTF8))
+ flag |=3D SCONV_NORMALIZATION_D;
+#endif
=20
#if defined(HAVE_ICONV)
sc->cd_w =3D (iconv_t)-1;
@@ -1353,46 +1243,6 @@
(flag & SCONV_WIN_CP)) {
/* This case we won't use iconv. */
sc->cd =3D (iconv_t)-1;
-#if defined(__APPLE__)
- } else if ((flag & SCONV_FROM_CHARSET) && (flag & SCONV_TO_UTF8)) {
- /*
- * In case reading an archive file.
- * Translate non-Unicode filenames in an archive file to
- * UTF-8-MAC filenames.
- */
- sc->cd =3D iconv_open("UTF-8-MAC", fc);
- if (sc->cd =3D=3D (iconv_t)-1) {
- if ((sc->flag & SCONV_BEST_EFFORT) &&
- strcmp(fc, "CP932") =3D=3D 0) {
- sc->cd =3D iconv_open("UTF-8-MAC", "SJIS");
- if (sc->cd =3D=3D (iconv_t)-1) {
- sc->cd =3D iconv_open(tc, fc);
- if (sc->cd =3D=3D (iconv_t)-1)
- sc->cd =3D iconv_open(tc, "SJIS");
- }
- } else
- sc->cd =3D iconv_open(tc, fc);
- }
- } else if ((flag & SCONV_TO_CHARSET) && (flag & SCONV_FROM_UTF8)) {
- /*
- * In case writing an archive file.
- * Translate UTF-8-MAC filenames in HFS Plus to non-Unicode
- * filenames.
- */
- sc->cd =3D iconv_open(tc, "UTF-8-MAC");
- if (sc->cd =3D=3D (iconv_t)-1) {
- if ((sc->flag & SCONV_BEST_EFFORT) &&
- strcmp(tc, "CP932") =3D=3D 0) {
- sc->cd =3D iconv_open("SJIS", "UTF-8-MAC");
- if (sc->cd =3D=3D (iconv_t)-1) {
- sc->cd =3D iconv_open(tc, fc);
- if (sc->cd =3D=3D (iconv_t)-1)
- sc->cd =3D iconv_open("SJIS", fc);
- }
- } else
- sc->cd =3D iconv_open(tc, fc);
- }
-#endif
} else {
sc->cd =3D iconv_open(tc, fc);
if (sc->cd =3D=3D (iconv_t)-1 && (sc->flag & SCONV_BEST_EFFORT)) {
@@ -1428,7 +1278,7 @@
sc->flag =3D flag;
=20
/*
- * Setup converters.
+ * Set up converters.
*/
setup_converter(sc);
=20
@@ -1450,12 +1300,6 @@
if (sc->cd_w !=3D (iconv_t)-1)
iconv_close(sc->cd_w);
#endif
-#if defined(__APPLE__)
- archive_string_free(&sc->utf16nfc);
- archive_string_free(&sc->utf16nfd);
- if (sc->uniInfo !=3D NULL)
- DisposeUnicodeToTextInfo(&(sc->uniInfo));
-#endif
free(sc);
}
=20
@@ -1995,11 +1839,37 @@
#else
if ((sc->flag & SCONV_UTF8_LIBARCHIVE_2) =3D=3D 0) {
sc->flag |=3D SCONV_UTF8_LIBARCHIVE_2;
- /* Re-setup string converters. */
+ /* Set up string converters. */
setup_converter(sc);
}
#endif
break;
+ case SCONV_SET_OPT_NORMALIZATION_C:
+ if ((sc->flag & SCONV_NORMALIZATION_C) =3D=3D 0) {
+ sc->flag |=3D SCONV_NORMALIZATION_C;
+ sc->flag &=3D ~SCONV_NORMALIZATION_D;
+ /* Set up string converters. */
+ setup_converter(sc);
+ }
+ break;
+ case SCONV_SET_OPT_NORMALIZATION_D:
+#if defined(HAVE_ICONV)
+ /*
+ * If iconv will take the string, do not change the
+ * setting of the normalization.
+ */
+ if (!(sc->flag & SCONV_WIN_CP) &&
+ (sc->flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8)) &&
+ !(sc->flag & (SCONV_TO_UTF16 | SCONV_TO_UTF8)))
+ break;
+#endif
+ if ((sc->flag & SCONV_NORMALIZATION_D) =3D=3D 0) {
+ sc->flag |=3D SCONV_NORMALIZATION_D;
+ sc->flag &=3D ~SCONV_NORMALIZATION_C;
+ /* Set up string converters. */
+ setup_converter(sc);
+ }
+ break;
default:
break;
}
@@ -2009,8 +1879,8 @@
*
* Copy one archive_string to another in locale conversion.
*
- * archive_strncpy_in_locale();
- * archive_strcpy_in_locale();
+ * archive_strncat_l();
+ * archive_strncpy_l();
*
*/
=20
@@ -2056,15 +1926,15 @@
}
=20
int
-archive_strncpy_in_locale(struct archive_string *as, const void *_p, size_=
t n,
+archive_strncpy_l(struct archive_string *as, const void *_p, size_t n,
struct archive_string_conv *sc)
{
as->length =3D 0;
- return (archive_strncat_in_locale(as, _p, n, sc));
+ return (archive_strncat_l(as, _p, n, sc));
}
=20
int
-archive_strncat_in_locale(struct archive_string *as, const void *_p, size_=
t n,
+archive_strncat_l(struct archive_string *as, const void *_p, size_t n,
struct archive_string_conv *sc)
{
const void *s;
@@ -2291,7 +2161,6 @@
const char *p =3D (const char *)_p;
size_t r;
=20
- (void)sc; /* UNUSED */
#if HAVE_MBRTOWC
mbstate_t shift_state;
=20
@@ -2315,6 +2184,7 @@
p +=3D r;
n -=3D r;
}
+ (void)sc; /* UNUSED */
return (0); /* All Okey. */
}
=20
@@ -2773,8 +2643,8 @@
* If any surrogate pair are found, it would be canonicalized.
*/
static int
-strncat_from_utf8_to_utf8(struct archive_string *as, const void *_p, size_=
t len,
- struct archive_string_conv *sc)
+strncat_from_utf8_to_utf8(struct archive_string *as, const void *_p,
+ size_t len, struct archive_string_conv *sc)
{
const char *s;
char *p, *endp;
@@ -3320,7 +3190,50 @@
return (ret);
}
=20
-#if defined(__APPLE__)
+static int
+get_nfd(uint32_t *cp1, uint32_t *cp2, uint32_t uc)
+{
+ int t, b;
+
+ /*
+ * These are not converted to NFD on Mac OS.
+ */
+ if ((uc >=3D 0x2000 && uc <=3D 0x2FFF) ||
+ (uc >=3D 0xF900 && uc <=3D 0xFAFF) ||
+ (uc >=3D 0x2F800 && uc <=3D 0x2FAFF))
+ return (0);
+ /*
+ * Those code points are not converted to NFD on Mac OS.
+ * I do not know the reason because it is undocumented.
+ * NFC NFD
+ * 1109A =3D=3D> 11099 110BA
+ * 1109C =3D=3D> 1109B 110BA
+ * 110AB =3D=3D> 110A5 110BA
+ */
+ if (uc =3D=3D 0x1109A || uc =3D=3D 0x1109C || uc =3D=3D 0x110AB)
+ return (0);
+
+ t =3D 0;
+ b =3D sizeof(u_decomposition_table)/sizeof(u_decomposition_table[0]) -1;
+ while (b >=3D t) {
+ int m =3D (t + b) / 2;
+ if (u_decomposition_table[m].nfc < uc)
+ t =3D m + 1;
+ else if (u_decomposition_table[m].nfc > uc)
+ b =3D m - 1;
+ else {
+ *cp1 =3D u_decomposition_table[m].cp1;
+ *cp2 =3D u_decomposition_table[m].cp2;
+ return (1);
+ }
+ }
+ return (0);
+}
+
+#define REPLACE_UC_WITH(cp) do { \
+ uc =3D cp; \
+ ucptr =3D NULL; \
+} while (0)
=20
/*
* Normalize UTF-8 characters to Form D and copy the result.
@@ -3329,110 +3242,170 @@
archive_string_normalize_D(struct archive_string *as, const void *_p,
size_t len, struct archive_string_conv *sc)
{
- const UniChar *inp;
- char *outp;
- size_t newsize;
- ByteCount inCount, outCount;
- ByteCount inAvail, outAvail;
- OSStatus err;
- int ret, saved_flag;
-
- /*
- * Convert the current string to UTF-16LE for normalization.
- * The character-set of the current string must be UTF-16BE or
- * UTF-8.
- */
- archive_string_empty(&(sc->utf16nfc));
- saved_flag =3D sc->flag;/* save a flag. */
- sc->flag &=3D ~(SCONV_TO_UTF16BE | SCONV_TO_UTF8);
- sc->flag |=3D SCONV_TO_UTF16LE;
- ret =3D archive_string_append_unicode(&(sc->utf16nfc), _p, len, sc);
- sc->flag =3D saved_flag;/* restore the saved flag */
- if (archive_strlen(&(sc->utf16nfc)) =3D=3D 0) {
- if (archive_string_ensure(as, as->length + 1) =3D=3D NULL)
- return (-1);
- return (ret);
- }
-
- /*
- * Normalize an NFC string to be an NFD(HFS Plus version).
- */
- newsize =3D sc->utf16nfc.length + 2;
- if (archive_string_ensure(&(sc->utf16nfd), newsize) =3D=3D NULL)
- return (-1);
-
- inp =3D (UniChar *)sc->utf16nfc.s;
- inAvail =3D archive_strlen(&(sc->utf16nfc));
- sc->utf16nfd.length =3D 0;
- outp =3D sc->utf16nfd.s;
- outAvail =3D sc->utf16nfd.buffer_length -2;
-
- do {
- /* Reinitialize all state information. */
- if (ResetUnicodeToTextInfo(sc->uniInfo) !=3D noErr)
- goto return_no_changed_data;
-
- inCount =3D outCount =3D 0;
- err =3D ConvertFromUnicodeToText(sc->uniInfo,
- inAvail, inp,
- kUnicodeDefaultDirectionMask, 0, NULL, NULL, NULL,
- outAvail, &inCount, &outCount, outp);
-
- if (err =3D=3D noErr) {
- sc->utf16nfd.length =3D outCount;
- sc->utf16nfd.s[sc->utf16nfd.length] =3D 0;
- sc->utf16nfd.s[sc->utf16nfd.length+1] =3D 0;
- } else if (err =3D=3D kTECOutputBufferFullStatus) {
- newsize =3D inAvail - inCount;
- if (newsize > inAvail)
- newsize =3D inAvail;
- newsize +=3D sc->utf16nfd.buffer_length + 2;
- if (archive_string_ensure(&(sc->utf16nfd), newsize)
- =3D=3D NULL)
- return (-1);
- outp =3D sc->utf16nfd.s;
- outAvail =3D sc->utf16nfd.buffer_length -2;
- } else
- goto return_no_changed_data;
- } while (err =3D=3D kTECOutputBufferFullStatus);
-
- /*
- * If there is a next-step conversion, we should convert
- * a UTF-16LE(NFD) string back to the original Unicode type.
- */
- saved_flag =3D sc->flag;/* save a flag. */
- if (!(sc->flag &
- (SCONV_TO_UTF16BE | SCONV_TO_UTF16LE | SCONV_TO_UTF8))) {
+ const char *s =3D (const char *)_p;
+ char *p, *endp;
+ uint32_t uc, uc2;
+ size_t w;
+ int always_replace, n, n2, ret =3D 0, spair, ts, tm;
+ int (*parse)(uint32_t *, const char *, size_t);
+ size_t (*unparse)(char *, size_t, uint32_t);
+
+ always_replace =3D 1;
+ ts =3D 1;/* text size. */
+ if (sc->flag & SCONV_TO_UTF16BE) {
+ unparse =3D unicode_to_utf16be;
+ ts =3D 2;
+ if (sc->flag & SCONV_FROM_UTF16BE)
+ always_replace =3D 0;
+ } else if (sc->flag & SCONV_TO_UTF16LE) {
+ unparse =3D unicode_to_utf16le;
+ ts =3D 2;
+ if (sc->flag & SCONV_FROM_UTF16LE)
+ always_replace =3D 0;
+ } else if (sc->flag & SCONV_TO_UTF8) {
+ unparse =3D unicode_to_utf8;
+ if (sc->flag & SCONV_FROM_UTF8)
+ always_replace =3D 0;
+ } else {
/*
* This case is going to be converted to another
* character-set through iconv.
*/
- if (sc->flag & SCONV_FROM_UTF16BE)
- sc->flag |=3D SCONV_TO_UTF16BE;
- else if (sc->flag & SCONV_FROM_UTF16LE)
- sc->flag |=3D SCONV_TO_UTF16LE;
+ always_replace =3D 0;
+ if (sc->flag & SCONV_FROM_UTF16BE) {
+ unparse =3D unicode_to_utf16be;
+ ts =3D 2;
+ } else if (sc->flag & SCONV_FROM_UTF16LE) {
+ unparse =3D unicode_to_utf16le;
+ ts =3D 2;
+ } else {
+ unparse =3D unicode_to_utf8;
+ }
+ }
+
+ if (sc->flag & SCONV_FROM_UTF16BE) {
+ parse =3D utf16be_to_unicode;
+ tm =3D 1;
+ spair =3D 4;/* surrogate pair size in UTF-16. */
+ } else if (sc->flag & SCONV_FROM_UTF16LE) {
+ parse =3D utf16le_to_unicode;
+ tm =3D 1;
+ spair =3D 4;/* surrogate pair size in UTF-16. */
+ } else {
+ parse =3D cesu8_to_unicode;
+ tm =3D ts;
+ spair =3D 6;/* surrogate pair size in UTF-8. */
+ }
+
+ if (archive_string_ensure(as, as->length + len * tm + ts) =3D=3D NULL)
+ return (-1);
+
+ p =3D as->s + as->length;
+ endp =3D as->s + as->buffer_length - ts;
+ while ((n =3D parse(&uc, s, len)) !=3D 0) {
+ const char *ucptr;
+ uint32_t cp1, cp2;
+ int SIndex;
+ struct {
+ uint32_t uc;
+ int ccc;
+ } fdc[FDC_MAX];
+ int fdi, fdj;
+ int ccc;
+
+check_first_code:
+ if (n < 0) {
+ /* Use a replaced unicode character. */
+ UNPARSE(p, endp, uc);
+ s +=3D n*-1;
+ len -=3D n*-1;
+ ret =3D -1;
+ continue;
+ } else if (n =3D=3D spair || always_replace)
+ /* uc is converted from a surrogate pair.
+ * this should be treated as a changed code. */
+ ucptr =3D NULL;
else
- sc->flag |=3D SCONV_TO_UTF8;
+ ucptr =3D s;
+ s +=3D n;
+ len -=3D n;
+
+ /* Hangul Decomposition. */
+ if ((SIndex =3D uc - HC_SBASE) >=3D 0 && SIndex < HC_SCOUNT) {
+ int L =3D HC_LBASE + SIndex / HC_NCOUNT;
+ int V =3D HC_VBASE + (SIndex % HC_NCOUNT) / HC_TCOUNT;
+ int T =3D HC_TBASE + SIndex % HC_TCOUNT;
+
+ REPLACE_UC_WITH(L);
+ WRITE_UC();
+ REPLACE_UC_WITH(V);
+ WRITE_UC();
+ if (T !=3D HC_TBASE) {
+ REPLACE_UC_WITH(T);
+ WRITE_UC();
+ }
+ continue;
+ }
+ if (IS_DECOMPOSABLE_BLOCK(uc) && CCC(uc) !=3D 0) {
+ WRITE_UC();
+ continue;
+ }
+
+ fdi =3D 0;
+ while (get_nfd(&cp1, &cp2, uc) && fdi < FDC_MAX) {
+ int k;
+
+ for (k =3D fdi; k > 0; k--)
+ fdc[k] =3D fdc[k-1];
+ fdc[0].ccc =3D CCC(cp2);
+ fdc[0].uc =3D cp2;
+ fdi++;
+ REPLACE_UC_WITH(cp1);
+ }
+
+ /* Read following code points. */
+ while ((n2 =3D parse(&uc2, s, len)) > 0 &&
+ (ccc =3D CCC(uc2)) !=3D 0 && fdi < FDC_MAX) {
+ int j, k;
+
+ s +=3D n2;
+ len -=3D n2;
+ for (j =3D 0; j < fdi; j++) {
+ if (fdc[j].ccc > ccc)
+ break;
+ }
+ if (j < fdi) {
+ for (k =3D fdi; k > j; k--)
+ fdc[k] =3D fdc[k-1];
+ fdc[j].ccc =3D ccc;
+ fdc[j].uc =3D uc2;
+ } else {
+ fdc[fdi].ccc =3D ccc;
+ fdc[fdi].uc =3D uc2;
+ }
+ fdi++;
+ }
+
+ WRITE_UC();
+ for (fdj =3D 0; fdj < fdi; fdj++) {
+ REPLACE_UC_WITH(fdc[fdj].uc);
+ WRITE_UC();
+ }
+
+ if (n2 =3D=3D 0)
+ break;
+ REPLACE_UC_WITH(uc2);
+ n =3D n2;
+ ucptr =3D s;
+ goto check_first_code;
}
- sc->flag &=3D ~(SCONV_FROM_UTF16BE | SCONV_FROM_UTF8);
- sc->flag |=3D SCONV_FROM_UTF16LE;
- if (archive_string_append_unicode(as, sc->utf16nfd.s,
- sc->utf16nfd.length, sc) !=3D 0)
- ret =3D -1;
- sc->flag =3D saved_flag;/* restore the saved flag */
+ as->length =3D p - as->s;
+ as->s[as->length] =3D '\0';
+ if (ts =3D=3D 2)
+ as->s[as->length+1] =3D '\0';
return (ret);
-
-return_no_changed_data:
- /*
- * Something conversion error happened, so we return a no normalized
- * string with an error.
- */
- (void)archive_string_append_unicode(as, _p, len, sc);
- return (-1);
}
=20
-#endif /* __APPLE__ */
-
/*
* libarchive 2.x made incorrect UTF-8 strings in the wrong assumption
* that WCS is Unicode. It is true for several platforms but some are fals=
e.
@@ -3629,15 +3602,15 @@
}
=20
static int
-win_strncat_from_utf16be(struct archive_string *as, const void *_p, size_t=
bytes,
- struct archive_string_conv *sc)
+win_strncat_from_utf16be(struct archive_string *as, const void *_p,
+ size_t bytes, struct archive_string_conv *sc)
{
return (win_strncat_from_utf16(as, _p, bytes, sc, 1));
}
=20
static int
-win_strncat_from_utf16le(struct archive_string *as, const void *_p, size_t=
bytes,
- struct archive_string_conv *sc)
+win_strncat_from_utf16le(struct archive_string *as, const void *_p,
+ size_t bytes, struct archive_string_conv *sc)
{
return (win_strncat_from_utf16(as, _p, bytes, sc, 0));
}
@@ -3655,8 +3628,8 @@
* Return -1 if conversion failes.
*/
static int
-win_strncat_to_utf16(struct archive_string *as16, const void *_p, size_t l=
ength,
- struct archive_string_conv *sc, int bigendian)
+win_strncat_to_utf16(struct archive_string *as16, const void *_p,
+ size_t length, struct archive_string_conv *sc, int bigendian)
{
const char *s =3D (const char *)_p;
char *u16;
@@ -3732,15 +3705,15 @@
}
=20
static int
-win_strncat_to_utf16be(struct archive_string *as16, const void *_p, size_t=
length,
- struct archive_string_conv *sc)
+win_strncat_to_utf16be(struct archive_string *as16, const void *_p,
+ size_t length, struct archive_string_conv *sc)
{
return (win_strncat_to_utf16(as16, _p, length, sc, 1));
}
=20
static int
-win_strncat_to_utf16le(struct archive_string *as16, const void *_p, size_t=
length,
- struct archive_string_conv *sc)
+win_strncat_to_utf16le(struct archive_string *as16, const void *_p,
+ size_t length, struct archive_string_conv *sc)
{
return (win_strncat_to_utf16(as16, _p, length, sc, 0));
}
@@ -3914,7 +3887,7 @@
sc =3D archive_string_conversion_to_charset(a, "UTF-8", 1);
if (sc =3D=3D NULL)
return (-1);/* Couldn't allocate memory for sc. */
- r =3D archive_strncpy_in_locale(&(aes->aes_mbs), aes->aes_mbs.s,
+ r =3D archive_strncpy_l(&(aes->aes_mbs), aes->aes_mbs.s,
aes->aes_mbs.length, sc);
if (a =3D=3D NULL)
free_sconv_object(sc);
@@ -4043,7 +4016,7 @@
*length =3D aes->aes_mbs.length;
return (0);
}
- ret =3D archive_strncpy_in_locale(&(aes->aes_mbs_in_locale),
+ ret =3D archive_strncpy_l(&(aes->aes_mbs_in_locale),
aes->aes_mbs.s, aes->aes_mbs.length, sc);
*p =3D aes->aes_mbs_in_locale.s;
if (length !=3D NULL)
@@ -4084,7 +4057,8 @@
int
archive_mstring_copy_wcs(struct archive_mstring *aes, const wchar_t *wcs)
{
- return archive_mstring_copy_wcs_len(aes, wcs, wcs =3D=3D NULL ? 0 : wcsle=
n(wcs));
+ return archive_mstring_copy_wcs_len(aes, wcs,
+ wcs =3D=3D NULL ? 0 : wcslen(wcs));
}
=20
int
@@ -4143,7 +4117,7 @@
* Translate multi-bytes from some character-set to UTF-8.
*/=20
sc->cd =3D sc->cd_w;
- r =3D archive_strncpy_in_locale(&(aes->aes_utf8), mbs, len, sc);
+ r =3D archive_strncpy_l(&(aes->aes_utf8), mbs, len, sc);
sc->cd =3D cd;
if (r !=3D 0) {
aes->aes_set =3D 0;
@@ -4175,7 +4149,7 @@
aes->aes_set =3D 0;
}
#else
- r =3D archive_strncpy_in_locale(&(aes->aes_mbs), mbs, len, sc);
+ r =3D archive_strncpy_l(&(aes->aes_mbs), mbs, len, sc);
if (r =3D=3D 0)
aes->aes_set =3D AES_SET_MBS; /* Only MBS form is set now. */
else
@@ -4219,7 +4193,7 @@
sc =3D archive_string_conversion_from_charset(a, "UTF-8", 1);
if (sc =3D=3D NULL)
return (-1);/* Couldn't allocate memory for sc. */
- r =3D archive_strcpy_in_locale(&(aes->aes_mbs), utf8, sc);
+ r =3D archive_strcpy_l(&(aes->aes_mbs), utf8, sc);
if (a =3D=3D NULL)
free_sconv_object(sc);
if (r !=3D 0)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string.h
--- a/head/contrib/libarchive/libarchive/archive_string.h Mon Jul 30 11:44:=
18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string.h Fri Aug 10 14:19:=
25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_string.h 232153 20=
12-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_string.h 238856 20=
12-07-28 06:38:44Z mm $
*
*/
=20
@@ -110,18 +110,20 @@
void
archive_string_conversion_set_opt(struct archive_string_conv *, int);
#define SCONV_SET_OPT_UTF8_LIBARCHIVE2X 1
+#define SCONV_SET_OPT_NORMALIZATION_C 2
+#define SCONV_SET_OPT_NORMALIZATION_D 4
=20
=20
/* Copy one archive_string to another in locale conversion.
* Return -1 if conversion failes. */
int
-archive_strncpy_in_locale(struct archive_string *, const void *, size_t,
+archive_strncpy_l(struct archive_string *, const void *, size_t,
struct archive_string_conv *);
=20
/* Copy one archive_string to another in locale conversion.
* Return -1 if conversion failes. */
int
-archive_strncat_in_locale(struct archive_string *, const void *, size_t,
+archive_strncat_l(struct archive_string *, const void *, size_t,
struct archive_string_conv *);
=20
=20
@@ -162,8 +164,8 @@
archive_strncpy((as), (p), ((p) =3D=3D NULL ? 0 : strlen(p)))
#define archive_wstrcpy(as,p) \
archive_wstrncpy((as), (p), ((p) =3D=3D NULL ? 0 : wcslen(p)))
-#define archive_strcpy_in_locale(as,p,lo) \
- archive_strncpy_in_locale((as), (p), ((p) =3D=3D NULL ? 0 : strlen(p)), (=
lo))
+#define archive_strcpy_l(as,p,lo) \
+ archive_strncpy_l((as), (p), ((p) =3D=3D NULL ? 0 : strlen(p)), (lo))
=20
/* Copy a C string to an archive_string with limit, resizing as necessary.=
*/
#define archive_strncpy(as,p,l) \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string_composition.h
--- a/head/contrib/libarchive/libarchive/archive_string_composition.h Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string_composition.h Fri A=
ug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2011 libarchive Project
+ * Copyright (c) 2011-2012 libarchive Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,7 +29,7 @@
/*
* ATTENTION!
* This file is generated by build/utils/gen_archive_string_composition_h=
.sh
- * from http://unicode.org/Public/UNIDATA/UnicodeData.txt
+ * from http://unicode.org/Public/6.0.0/ucd/UnicodeData.txt
*
* See also http://unicode.org/report/tr15/
*/
@@ -1348,4 +1348,945 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,37,38,};
=20
+struct unicode_decomposition_table {
+ uint32_t nfc;
+ uint32_t cp1;
+ uint32_t cp2;
+};
+
+static const struct unicode_decomposition_table u_decomposition_table[] =
=3D {
+ { 0x000C0 , 0x00041 , 0x00300 },
+ { 0x000C1 , 0x00041 , 0x00301 },
+ { 0x000C2 , 0x00041 , 0x00302 },
+ { 0x000C3 , 0x00041 , 0x00303 },
+ { 0x000C4 , 0x00041 , 0x00308 },
+ { 0x000C5 , 0x00041 , 0x0030A },
+ { 0x000C7 , 0x00043 , 0x00327 },
+ { 0x000C8 , 0x00045 , 0x00300 },
+ { 0x000C9 , 0x00045 , 0x00301 },
+ { 0x000CA , 0x00045 , 0x00302 },
+ { 0x000CB , 0x00045 , 0x00308 },
+ { 0x000CC , 0x00049 , 0x00300 },
+ { 0x000CD , 0x00049 , 0x00301 },
+ { 0x000CE , 0x00049 , 0x00302 },
+ { 0x000CF , 0x00049 , 0x00308 },
+ { 0x000D1 , 0x0004E , 0x00303 },
+ { 0x000D2 , 0x0004F , 0x00300 },
+ { 0x000D3 , 0x0004F , 0x00301 },
+ { 0x000D4 , 0x0004F , 0x00302 },
+ { 0x000D5 , 0x0004F , 0x00303 },
+ { 0x000D6 , 0x0004F , 0x00308 },
+ { 0x000D9 , 0x00055 , 0x00300 },
+ { 0x000DA , 0x00055 , 0x00301 },
+ { 0x000DB , 0x00055 , 0x00302 },
+ { 0x000DC , 0x00055 , 0x00308 },
+ { 0x000DD , 0x00059 , 0x00301 },
+ { 0x000E0 , 0x00061 , 0x00300 },
+ { 0x000E1 , 0x00061 , 0x00301 },
+ { 0x000E2 , 0x00061 , 0x00302 },
+ { 0x000E3 , 0x00061 , 0x00303 },
+ { 0x000E4 , 0x00061 , 0x00308 },
+ { 0x000E5 , 0x00061 , 0x0030A },
+ { 0x000E7 , 0x00063 , 0x00327 },
+ { 0x000E8 , 0x00065 , 0x00300 },
+ { 0x000E9 , 0x00065 , 0x00301 },
+ { 0x000EA , 0x00065 , 0x00302 },
+ { 0x000EB , 0x00065 , 0x00308 },
+ { 0x000EC , 0x00069 , 0x00300 },
+ { 0x000ED , 0x00069 , 0x00301 },
+ { 0x000EE , 0x00069 , 0x00302 },
+ { 0x000EF , 0x00069 , 0x00308 },
+ { 0x000F1 , 0x0006E , 0x00303 },
+ { 0x000F2 , 0x0006F , 0x00300 },
+ { 0x000F3 , 0x0006F , 0x00301 },
+ { 0x000F4 , 0x0006F , 0x00302 },
+ { 0x000F5 , 0x0006F , 0x00303 },
+ { 0x000F6 , 0x0006F , 0x00308 },
+ { 0x000F9 , 0x00075 , 0x00300 },
+ { 0x000FA , 0x00075 , 0x00301 },
+ { 0x000FB , 0x00075 , 0x00302 },
+ { 0x000FC , 0x00075 , 0x00308 },
+ { 0x000FD , 0x00079 , 0x00301 },
+ { 0x000FF , 0x00079 , 0x00308 },
+ { 0x00100 , 0x00041 , 0x00304 },
+ { 0x00101 , 0x00061 , 0x00304 },
+ { 0x00102 , 0x00041 , 0x00306 },
+ { 0x00103 , 0x00061 , 0x00306 },
+ { 0x00104 , 0x00041 , 0x00328 },
+ { 0x00105 , 0x00061 , 0x00328 },
+ { 0x00106 , 0x00043 , 0x00301 },
+ { 0x00107 , 0x00063 , 0x00301 },
+ { 0x00108 , 0x00043 , 0x00302 },
+ { 0x00109 , 0x00063 , 0x00302 },
+ { 0x0010A , 0x00043 , 0x00307 },
+ { 0x0010B , 0x00063 , 0x00307 },
+ { 0x0010C , 0x00043 , 0x0030C },
+ { 0x0010D , 0x00063 , 0x0030C },
+ { 0x0010E , 0x00044 , 0x0030C },
+ { 0x0010F , 0x00064 , 0x0030C },
+ { 0x00112 , 0x00045 , 0x00304 },
+ { 0x00113 , 0x00065 , 0x00304 },
+ { 0x00114 , 0x00045 , 0x00306 },
+ { 0x00115 , 0x00065 , 0x00306 },
+ { 0x00116 , 0x00045 , 0x00307 },
+ { 0x00117 , 0x00065 , 0x00307 },
+ { 0x00118 , 0x00045 , 0x00328 },
+ { 0x00119 , 0x00065 , 0x00328 },
+ { 0x0011A , 0x00045 , 0x0030C },
+ { 0x0011B , 0x00065 , 0x0030C },
+ { 0x0011C , 0x00047 , 0x00302 },
+ { 0x0011D , 0x00067 , 0x00302 },
+ { 0x0011E , 0x00047 , 0x00306 },
+ { 0x0011F , 0x00067 , 0x00306 },
+ { 0x00120 , 0x00047 , 0x00307 },
+ { 0x00121 , 0x00067 , 0x00307 },
+ { 0x00122 , 0x00047 , 0x00327 },
+ { 0x00123 , 0x00067 , 0x00327 },
+ { 0x00124 , 0x00048 , 0x00302 },
+ { 0x00125 , 0x00068 , 0x00302 },
+ { 0x00128 , 0x00049 , 0x00303 },
+ { 0x00129 , 0x00069 , 0x00303 },
+ { 0x0012A , 0x00049 , 0x00304 },
+ { 0x0012B , 0x00069 , 0x00304 },
+ { 0x0012C , 0x00049 , 0x00306 },
+ { 0x0012D , 0x00069 , 0x00306 },
+ { 0x0012E , 0x00049 , 0x00328 },
+ { 0x0012F , 0x00069 , 0x00328 },
+ { 0x00130 , 0x00049 , 0x00307 },
+ { 0x00134 , 0x0004A , 0x00302 },
+ { 0x00135 , 0x0006A , 0x00302 },
+ { 0x00136 , 0x0004B , 0x00327 },
+ { 0x00137 , 0x0006B , 0x00327 },
+ { 0x00139 , 0x0004C , 0x00301 },
+ { 0x0013A , 0x0006C , 0x00301 },
+ { 0x0013B , 0x0004C , 0x00327 },
+ { 0x0013C , 0x0006C , 0x00327 },
+ { 0x0013D , 0x0004C , 0x0030C },
+ { 0x0013E , 0x0006C , 0x0030C },
+ { 0x00143 , 0x0004E , 0x00301 },
+ { 0x00144 , 0x0006E , 0x00301 },
+ { 0x00145 , 0x0004E , 0x00327 },
+ { 0x00146 , 0x0006E , 0x00327 },
+ { 0x00147 , 0x0004E , 0x0030C },
+ { 0x00148 , 0x0006E , 0x0030C },
+ { 0x0014C , 0x0004F , 0x00304 },
+ { 0x0014D , 0x0006F , 0x00304 },
+ { 0x0014E , 0x0004F , 0x00306 },
+ { 0x0014F , 0x0006F , 0x00306 },
+ { 0x00150 , 0x0004F , 0x0030B },
+ { 0x00151 , 0x0006F , 0x0030B },
+ { 0x00154 , 0x00052 , 0x00301 },
+ { 0x00155 , 0x00072 , 0x00301 },
+ { 0x00156 , 0x00052 , 0x00327 },
+ { 0x00157 , 0x00072 , 0x00327 },
+ { 0x00158 , 0x00052 , 0x0030C },
+ { 0x00159 , 0x00072 , 0x0030C },
+ { 0x0015A , 0x00053 , 0x00301 },
+ { 0x0015B , 0x00073 , 0x00301 },
+ { 0x0015C , 0x00053 , 0x00302 },
+ { 0x0015D , 0x00073 , 0x00302 },
+ { 0x0015E , 0x00053 , 0x00327 },
+ { 0x0015F , 0x00073 , 0x00327 },
+ { 0x00160 , 0x00053 , 0x0030C },
+ { 0x00161 , 0x00073 , 0x0030C },
+ { 0x00162 , 0x00054 , 0x00327 },
+ { 0x00163 , 0x00074 , 0x00327 },
+ { 0x00164 , 0x00054 , 0x0030C },
+ { 0x00165 , 0x00074 , 0x0030C },
+ { 0x00168 , 0x00055 , 0x00303 },
+ { 0x00169 , 0x00075 , 0x00303 },
+ { 0x0016A , 0x00055 , 0x00304 },
+ { 0x0016B , 0x00075 , 0x00304 },
+ { 0x0016C , 0x00055 , 0x00306 },
+ { 0x0016D , 0x00075 , 0x00306 },
+ { 0x0016E , 0x00055 , 0x0030A },
+ { 0x0016F , 0x00075 , 0x0030A },
+ { 0x00170 , 0x00055 , 0x0030B },
+ { 0x00171 , 0x00075 , 0x0030B },
+ { 0x00172 , 0x00055 , 0x00328 },
+ { 0x00173 , 0x00075 , 0x00328 },
+ { 0x00174 , 0x00057 , 0x00302 },
+ { 0x00175 , 0x00077 , 0x00302 },
+ { 0x00176 , 0x00059 , 0x00302 },
+ { 0x00177 , 0x00079 , 0x00302 },
+ { 0x00178 , 0x00059 , 0x00308 },
+ { 0x00179 , 0x0005A , 0x00301 },
+ { 0x0017A , 0x0007A , 0x00301 },
+ { 0x0017B , 0x0005A , 0x00307 },
+ { 0x0017C , 0x0007A , 0x00307 },
+ { 0x0017D , 0x0005A , 0x0030C },
+ { 0x0017E , 0x0007A , 0x0030C },
+ { 0x001A0 , 0x0004F , 0x0031B },
+ { 0x001A1 , 0x0006F , 0x0031B },
+ { 0x001AF , 0x00055 , 0x0031B },
+ { 0x001B0 , 0x00075 , 0x0031B },
+ { 0x001CD , 0x00041 , 0x0030C },
+ { 0x001CE , 0x00061 , 0x0030C },
+ { 0x001CF , 0x00049 , 0x0030C },
+ { 0x001D0 , 0x00069 , 0x0030C },
+ { 0x001D1 , 0x0004F , 0x0030C },
+ { 0x001D2 , 0x0006F , 0x0030C },
+ { 0x001D3 , 0x00055 , 0x0030C },
+ { 0x001D4 , 0x00075 , 0x0030C },
+ { 0x001D5 , 0x000DC , 0x00304 },
+ { 0x001D6 , 0x000FC , 0x00304 },
+ { 0x001D7 , 0x000DC , 0x00301 },
+ { 0x001D8 , 0x000FC , 0x00301 },
+ { 0x001D9 , 0x000DC , 0x0030C },
+ { 0x001DA , 0x000FC , 0x0030C },
+ { 0x001DB , 0x000DC , 0x00300 },
+ { 0x001DC , 0x000FC , 0x00300 },
+ { 0x001DE , 0x000C4 , 0x00304 },
+ { 0x001DF , 0x000E4 , 0x00304 },
+ { 0x001E0 , 0x00226 , 0x00304 },
+ { 0x001E1 , 0x00227 , 0x00304 },
+ { 0x001E2 , 0x000C6 , 0x00304 },
+ { 0x001E3 , 0x000E6 , 0x00304 },
+ { 0x001E6 , 0x00047 , 0x0030C },
+ { 0x001E7 , 0x00067 , 0x0030C },
+ { 0x001E8 , 0x0004B , 0x0030C },
+ { 0x001E9 , 0x0006B , 0x0030C },
+ { 0x001EA , 0x0004F , 0x00328 },
+ { 0x001EB , 0x0006F , 0x00328 },
+ { 0x001EC , 0x001EA , 0x00304 },
+ { 0x001ED , 0x001EB , 0x00304 },
+ { 0x001EE , 0x001B7 , 0x0030C },
+ { 0x001EF , 0x00292 , 0x0030C },
+ { 0x001F0 , 0x0006A , 0x0030C },
+ { 0x001F4 , 0x00047 , 0x00301 },
+ { 0x001F5 , 0x00067 , 0x00301 },
+ { 0x001F8 , 0x0004E , 0x00300 },
+ { 0x001F9 , 0x0006E , 0x00300 },
+ { 0x001FA , 0x000C5 , 0x00301 },
+ { 0x001FB , 0x000E5 , 0x00301 },
+ { 0x001FC , 0x000C6 , 0x00301 },
+ { 0x001FD , 0x000E6 , 0x00301 },
+ { 0x001FE , 0x000D8 , 0x00301 },
+ { 0x001FF , 0x000F8 , 0x00301 },
+ { 0x00200 , 0x00041 , 0x0030F },
+ { 0x00201 , 0x00061 , 0x0030F },
+ { 0x00202 , 0x00041 , 0x00311 },
+ { 0x00203 , 0x00061 , 0x00311 },
+ { 0x00204 , 0x00045 , 0x0030F },
+ { 0x00205 , 0x00065 , 0x0030F },
+ { 0x00206 , 0x00045 , 0x00311 },
+ { 0x00207 , 0x00065 , 0x00311 },
+ { 0x00208 , 0x00049 , 0x0030F },
+ { 0x00209 , 0x00069 , 0x0030F },
+ { 0x0020A , 0x00049 , 0x00311 },
+ { 0x0020B , 0x00069 , 0x00311 },
+ { 0x0020C , 0x0004F , 0x0030F },
+ { 0x0020D , 0x0006F , 0x0030F },
+ { 0x0020E , 0x0004F , 0x00311 },
+ { 0x0020F , 0x0006F , 0x00311 },
+ { 0x00210 , 0x00052 , 0x0030F },
+ { 0x00211 , 0x00072 , 0x0030F },
+ { 0x00212 , 0x00052 , 0x00311 },
+ { 0x00213 , 0x00072 , 0x00311 },
+ { 0x00214 , 0x00055 , 0x0030F },
+ { 0x00215 , 0x00075 , 0x0030F },
+ { 0x00216 , 0x00055 , 0x00311 },
+ { 0x00217 , 0x00075 , 0x00311 },
+ { 0x00218 , 0x00053 , 0x00326 },
+ { 0x00219 , 0x00073 , 0x00326 },
+ { 0x0021A , 0x00054 , 0x00326 },
+ { 0x0021B , 0x00074 , 0x00326 },
+ { 0x0021E , 0x00048 , 0x0030C },
+ { 0x0021F , 0x00068 , 0x0030C },
+ { 0x00226 , 0x00041 , 0x00307 },
+ { 0x00227 , 0x00061 , 0x00307 },
+ { 0x00228 , 0x00045 , 0x00327 },
+ { 0x00229 , 0x00065 , 0x00327 },
+ { 0x0022A , 0x000D6 , 0x00304 },
+ { 0x0022B , 0x000F6 , 0x00304 },
+ { 0x0022C , 0x000D5 , 0x00304 },
+ { 0x0022D , 0x000F5 , 0x00304 },
+ { 0x0022E , 0x0004F , 0x00307 },
+ { 0x0022F , 0x0006F , 0x00307 },
+ { 0x00230 , 0x0022E , 0x00304 },
+ { 0x00231 , 0x0022F , 0x00304 },
+ { 0x00232 , 0x00059 , 0x00304 },
+ { 0x00233 , 0x00079 , 0x00304 },
+ { 0x00385 , 0x000A8 , 0x00301 },
+ { 0x00386 , 0x00391 , 0x00301 },
+ { 0x00388 , 0x00395 , 0x00301 },
+ { 0x00389 , 0x00397 , 0x00301 },
+ { 0x0038A , 0x00399 , 0x00301 },
+ { 0x0038C , 0x0039F , 0x00301 },
+ { 0x0038E , 0x003A5 , 0x00301 },
+ { 0x0038F , 0x003A9 , 0x00301 },
+ { 0x00390 , 0x003CA , 0x00301 },
+ { 0x003AA , 0x00399 , 0x00308 },
+ { 0x003AB , 0x003A5 , 0x00308 },
+ { 0x003AC , 0x003B1 , 0x00301 },
+ { 0x003AD , 0x003B5 , 0x00301 },
+ { 0x003AE , 0x003B7 , 0x00301 },
+ { 0x003AF , 0x003B9 , 0x00301 },
+ { 0x003B0 , 0x003CB , 0x00301 },
+ { 0x003CA , 0x003B9 , 0x00308 },
+ { 0x003CB , 0x003C5 , 0x00308 },
+ { 0x003CC , 0x003BF , 0x00301 },
+ { 0x003CD , 0x003C5 , 0x00301 },
+ { 0x003CE , 0x003C9 , 0x00301 },
+ { 0x003D3 , 0x003D2 , 0x00301 },
+ { 0x003D4 , 0x003D2 , 0x00308 },
+ { 0x00400 , 0x00415 , 0x00300 },
+ { 0x00401 , 0x00415 , 0x00308 },
+ { 0x00403 , 0x00413 , 0x00301 },
+ { 0x00407 , 0x00406 , 0x00308 },
+ { 0x0040C , 0x0041A , 0x00301 },
+ { 0x0040D , 0x00418 , 0x00300 },
+ { 0x0040E , 0x00423 , 0x00306 },
+ { 0x00419 , 0x00418 , 0x00306 },
+ { 0x00439 , 0x00438 , 0x00306 },
+ { 0x00450 , 0x00435 , 0x00300 },
+ { 0x00451 , 0x00435 , 0x00308 },
+ { 0x00453 , 0x00433 , 0x00301 },
+ { 0x00457 , 0x00456 , 0x00308 },
+ { 0x0045C , 0x0043A , 0x00301 },
+ { 0x0045D , 0x00438 , 0x00300 },
+ { 0x0045E , 0x00443 , 0x00306 },
+ { 0x00476 , 0x00474 , 0x0030F },
+ { 0x00477 , 0x00475 , 0x0030F },
+ { 0x004C1 , 0x00416 , 0x00306 },
+ { 0x004C2 , 0x00436 , 0x00306 },
+ { 0x004D0 , 0x00410 , 0x00306 },
+ { 0x004D1 , 0x00430 , 0x00306 },
+ { 0x004D2 , 0x00410 , 0x00308 },
+ { 0x004D3 , 0x00430 , 0x00308 },
+ { 0x004D6 , 0x00415 , 0x00306 },
+ { 0x004D7 , 0x00435 , 0x00306 },
+ { 0x004DA , 0x004D8 , 0x00308 },
+ { 0x004DB , 0x004D9 , 0x00308 },
+ { 0x004DC , 0x00416 , 0x00308 },
+ { 0x004DD , 0x00436 , 0x00308 },
+ { 0x004DE , 0x00417 , 0x00308 },
+ { 0x004DF , 0x00437 , 0x00308 },
+ { 0x004E2 , 0x00418 , 0x00304 },
+ { 0x004E3 , 0x00438 , 0x00304 },
+ { 0x004E4 , 0x00418 , 0x00308 },
+ { 0x004E5 , 0x00438 , 0x00308 },
+ { 0x004E6 , 0x0041E , 0x00308 },
+ { 0x004E7 , 0x0043E , 0x00308 },
+ { 0x004EA , 0x004E8 , 0x00308 },
+ { 0x004EB , 0x004E9 , 0x00308 },
+ { 0x004EC , 0x0042D , 0x00308 },
+ { 0x004ED , 0x0044D , 0x00308 },
+ { 0x004EE , 0x00423 , 0x00304 },
+ { 0x004EF , 0x00443 , 0x00304 },
+ { 0x004F0 , 0x00423 , 0x00308 },
+ { 0x004F1 , 0x00443 , 0x00308 },
+ { 0x004F2 , 0x00423 , 0x0030B },
+ { 0x004F3 , 0x00443 , 0x0030B },
+ { 0x004F4 , 0x00427 , 0x00308 },
+ { 0x004F5 , 0x00447 , 0x00308 },
+ { 0x004F8 , 0x0042B , 0x00308 },
+ { 0x004F9 , 0x0044B , 0x00308 },
+ { 0x00622 , 0x00627 , 0x00653 },
+ { 0x00623 , 0x00627 , 0x00654 },
+ { 0x00624 , 0x00648 , 0x00654 },
+ { 0x00625 , 0x00627 , 0x00655 },
+ { 0x00626 , 0x0064A , 0x00654 },
+ { 0x006C0 , 0x006D5 , 0x00654 },
+ { 0x006C2 , 0x006C1 , 0x00654 },
+ { 0x006D3 , 0x006D2 , 0x00654 },
+ { 0x00929 , 0x00928 , 0x0093C },
+ { 0x00931 , 0x00930 , 0x0093C },
+ { 0x00934 , 0x00933 , 0x0093C },
+ { 0x009CB , 0x009C7 , 0x009BE },
+ { 0x009CC , 0x009C7 , 0x009D7 },
+ { 0x00B48 , 0x00B47 , 0x00B56 },
+ { 0x00B4B , 0x00B47 , 0x00B3E },
+ { 0x00B4C , 0x00B47 , 0x00B57 },
+ { 0x00B94 , 0x00B92 , 0x00BD7 },
+ { 0x00BCA , 0x00BC6 , 0x00BBE },
+ { 0x00BCB , 0x00BC7 , 0x00BBE },
+ { 0x00BCC , 0x00BC6 , 0x00BD7 },
+ { 0x00C48 , 0x00C46 , 0x00C56 },
+ { 0x00CC0 , 0x00CBF , 0x00CD5 },
+ { 0x00CC7 , 0x00CC6 , 0x00CD5 },
+ { 0x00CC8 , 0x00CC6 , 0x00CD6 },
+ { 0x00CCA , 0x00CC6 , 0x00CC2 },
+ { 0x00CCB , 0x00CCA , 0x00CD5 },
+ { 0x00D4A , 0x00D46 , 0x00D3E },
+ { 0x00D4B , 0x00D47 , 0x00D3E },
+ { 0x00D4C , 0x00D46 , 0x00D57 },
+ { 0x00DDA , 0x00DD9 , 0x00DCA },
+ { 0x00DDC , 0x00DD9 , 0x00DCF },
+ { 0x00DDD , 0x00DDC , 0x00DCA },
+ { 0x00DDE , 0x00DD9 , 0x00DDF },
+ { 0x01026 , 0x01025 , 0x0102E },
+ { 0x01B06 , 0x01B05 , 0x01B35 },
+ { 0x01B08 , 0x01B07 , 0x01B35 },
+ { 0x01B0A , 0x01B09 , 0x01B35 },
+ { 0x01B0C , 0x01B0B , 0x01B35 },
+ { 0x01B0E , 0x01B0D , 0x01B35 },
+ { 0x01B12 , 0x01B11 , 0x01B35 },
+ { 0x01B3B , 0x01B3A , 0x01B35 },
+ { 0x01B3D , 0x01B3C , 0x01B35 },
+ { 0x01B40 , 0x01B3E , 0x01B35 },
+ { 0x01B41 , 0x01B3F , 0x01B35 },
+ { 0x01B43 , 0x01B42 , 0x01B35 },
+ { 0x01E00 , 0x00041 , 0x00325 },
+ { 0x01E01 , 0x00061 , 0x00325 },
+ { 0x01E02 , 0x00042 , 0x00307 },
+ { 0x01E03 , 0x00062 , 0x00307 },
+ { 0x01E04 , 0x00042 , 0x00323 },
+ { 0x01E05 , 0x00062 , 0x00323 },
+ { 0x01E06 , 0x00042 , 0x00331 },
+ { 0x01E07 , 0x00062 , 0x00331 },
+ { 0x01E08 , 0x000C7 , 0x00301 },
+ { 0x01E09 , 0x000E7 , 0x00301 },
+ { 0x01E0A , 0x00044 , 0x00307 },
+ { 0x01E0B , 0x00064 , 0x00307 },
+ { 0x01E0C , 0x00044 , 0x00323 },
+ { 0x01E0D , 0x00064 , 0x00323 },
+ { 0x01E0E , 0x00044 , 0x00331 },
+ { 0x01E0F , 0x00064 , 0x00331 },
+ { 0x01E10 , 0x00044 , 0x00327 },
+ { 0x01E11 , 0x00064 , 0x00327 },
+ { 0x01E12 , 0x00044 , 0x0032D },
+ { 0x01E13 , 0x00064 , 0x0032D },
+ { 0x01E14 , 0x00112 , 0x00300 },
+ { 0x01E15 , 0x00113 , 0x00300 },
+ { 0x01E16 , 0x00112 , 0x00301 },
+ { 0x01E17 , 0x00113 , 0x00301 },
+ { 0x01E18 , 0x00045 , 0x0032D },
+ { 0x01E19 , 0x00065 , 0x0032D },
+ { 0x01E1A , 0x00045 , 0x00330 },
+ { 0x01E1B , 0x00065 , 0x00330 },
+ { 0x01E1C , 0x00228 , 0x00306 },
+ { 0x01E1D , 0x00229 , 0x00306 },
+ { 0x01E1E , 0x00046 , 0x00307 },
+ { 0x01E1F , 0x00066 , 0x00307 },
+ { 0x01E20 , 0x00047 , 0x00304 },
+ { 0x01E21 , 0x00067 , 0x00304 },
+ { 0x01E22 , 0x00048 , 0x00307 },
+ { 0x01E23 , 0x00068 , 0x00307 },
+ { 0x01E24 , 0x00048 , 0x00323 },
+ { 0x01E25 , 0x00068 , 0x00323 },
+ { 0x01E26 , 0x00048 , 0x00308 },
+ { 0x01E27 , 0x00068 , 0x00308 },
+ { 0x01E28 , 0x00048 , 0x00327 },
+ { 0x01E29 , 0x00068 , 0x00327 },
+ { 0x01E2A , 0x00048 , 0x0032E },
+ { 0x01E2B , 0x00068 , 0x0032E },
+ { 0x01E2C , 0x00049 , 0x00330 },
+ { 0x01E2D , 0x00069 , 0x00330 },
+ { 0x01E2E , 0x000CF , 0x00301 },
+ { 0x01E2F , 0x000EF , 0x00301 },
+ { 0x01E30 , 0x0004B , 0x00301 },
+ { 0x01E31 , 0x0006B , 0x00301 },
+ { 0x01E32 , 0x0004B , 0x00323 },
+ { 0x01E33 , 0x0006B , 0x00323 },
+ { 0x01E34 , 0x0004B , 0x00331 },
+ { 0x01E35 , 0x0006B , 0x00331 },
+ { 0x01E36 , 0x0004C , 0x00323 },
+ { 0x01E37 , 0x0006C , 0x00323 },
+ { 0x01E38 , 0x01E36 , 0x00304 },
+ { 0x01E39 , 0x01E37 , 0x00304 },
+ { 0x01E3A , 0x0004C , 0x00331 },
+ { 0x01E3B , 0x0006C , 0x00331 },
+ { 0x01E3C , 0x0004C , 0x0032D },
+ { 0x01E3D , 0x0006C , 0x0032D },
+ { 0x01E3E , 0x0004D , 0x00301 },
+ { 0x01E3F , 0x0006D , 0x00301 },
+ { 0x01E40 , 0x0004D , 0x00307 },
+ { 0x01E41 , 0x0006D , 0x00307 },
+ { 0x01E42 , 0x0004D , 0x00323 },
+ { 0x01E43 , 0x0006D , 0x00323 },
+ { 0x01E44 , 0x0004E , 0x00307 },
+ { 0x01E45 , 0x0006E , 0x00307 },
+ { 0x01E46 , 0x0004E , 0x00323 },
+ { 0x01E47 , 0x0006E , 0x00323 },
+ { 0x01E48 , 0x0004E , 0x00331 },
+ { 0x01E49 , 0x0006E , 0x00331 },
+ { 0x01E4A , 0x0004E , 0x0032D },
+ { 0x01E4B , 0x0006E , 0x0032D },
+ { 0x01E4C , 0x000D5 , 0x00301 },
+ { 0x01E4D , 0x000F5 , 0x00301 },
+ { 0x01E4E , 0x000D5 , 0x00308 },
+ { 0x01E4F , 0x000F5 , 0x00308 },
+ { 0x01E50 , 0x0014C , 0x00300 },
+ { 0x01E51 , 0x0014D , 0x00300 },
+ { 0x01E52 , 0x0014C , 0x00301 },
+ { 0x01E53 , 0x0014D , 0x00301 },
+ { 0x01E54 , 0x00050 , 0x00301 },
+ { 0x01E55 , 0x00070 , 0x00301 },
+ { 0x01E56 , 0x00050 , 0x00307 },
+ { 0x01E57 , 0x00070 , 0x00307 },
+ { 0x01E58 , 0x00052 , 0x00307 },
+ { 0x01E59 , 0x00072 , 0x00307 },
+ { 0x01E5A , 0x00052 , 0x00323 },
+ { 0x01E5B , 0x00072 , 0x00323 },
+ { 0x01E5C , 0x01E5A , 0x00304 },
+ { 0x01E5D , 0x01E5B , 0x00304 },
+ { 0x01E5E , 0x00052 , 0x00331 },
+ { 0x01E5F , 0x00072 , 0x00331 },
+ { 0x01E60 , 0x00053 , 0x00307 },
+ { 0x01E61 , 0x00073 , 0x00307 },
+ { 0x01E62 , 0x00053 , 0x00323 },
+ { 0x01E63 , 0x00073 , 0x00323 },
+ { 0x01E64 , 0x0015A , 0x00307 },
+ { 0x01E65 , 0x0015B , 0x00307 },
+ { 0x01E66 , 0x00160 , 0x00307 },
+ { 0x01E67 , 0x00161 , 0x00307 },
+ { 0x01E68 , 0x01E62 , 0x00307 },
+ { 0x01E69 , 0x01E63 , 0x00307 },
+ { 0x01E6A , 0x00054 , 0x00307 },
+ { 0x01E6B , 0x00074 , 0x00307 },
+ { 0x01E6C , 0x00054 , 0x00323 },
+ { 0x01E6D , 0x00074 , 0x00323 },
+ { 0x01E6E , 0x00054 , 0x00331 },
+ { 0x01E6F , 0x00074 , 0x00331 },
+ { 0x01E70 , 0x00054 , 0x0032D },
+ { 0x01E71 , 0x00074 , 0x0032D },
+ { 0x01E72 , 0x00055 , 0x00324 },
+ { 0x01E73 , 0x00075 , 0x00324 },
+ { 0x01E74 , 0x00055 , 0x00330 },
+ { 0x01E75 , 0x00075 , 0x00330 },
+ { 0x01E76 , 0x00055 , 0x0032D },
+ { 0x01E77 , 0x00075 , 0x0032D },
+ { 0x01E78 , 0x00168 , 0x00301 },
+ { 0x01E79 , 0x00169 , 0x00301 },
+ { 0x01E7A , 0x0016A , 0x00308 },
+ { 0x01E7B , 0x0016B , 0x00308 },
+ { 0x01E7C , 0x00056 , 0x00303 },
+ { 0x01E7D , 0x00076 , 0x00303 },
+ { 0x01E7E , 0x00056 , 0x00323 },
+ { 0x01E7F , 0x00076 , 0x00323 },
+ { 0x01E80 , 0x00057 , 0x00300 },
+ { 0x01E81 , 0x00077 , 0x00300 },
+ { 0x01E82 , 0x00057 , 0x00301 },
+ { 0x01E83 , 0x00077 , 0x00301 },
+ { 0x01E84 , 0x00057 , 0x00308 },
+ { 0x01E85 , 0x00077 , 0x00308 },
+ { 0x01E86 , 0x00057 , 0x00307 },
+ { 0x01E87 , 0x00077 , 0x00307 },
+ { 0x01E88 , 0x00057 , 0x00323 },
+ { 0x01E89 , 0x00077 , 0x00323 },
+ { 0x01E8A , 0x00058 , 0x00307 },
+ { 0x01E8B , 0x00078 , 0x00307 },
+ { 0x01E8C , 0x00058 , 0x00308 },
+ { 0x01E8D , 0x00078 , 0x00308 },
+ { 0x01E8E , 0x00059 , 0x00307 },
+ { 0x01E8F , 0x00079 , 0x00307 },
+ { 0x01E90 , 0x0005A , 0x00302 },
+ { 0x01E91 , 0x0007A , 0x00302 },
+ { 0x01E92 , 0x0005A , 0x00323 },
+ { 0x01E93 , 0x0007A , 0x00323 },
+ { 0x01E94 , 0x0005A , 0x00331 },
+ { 0x01E95 , 0x0007A , 0x00331 },
+ { 0x01E96 , 0x00068 , 0x00331 },
+ { 0x01E97 , 0x00074 , 0x00308 },
+ { 0x01E98 , 0x00077 , 0x0030A },
+ { 0x01E99 , 0x00079 , 0x0030A },
+ { 0x01E9B , 0x0017F , 0x00307 },
+ { 0x01EA0 , 0x00041 , 0x00323 },
+ { 0x01EA1 , 0x00061 , 0x00323 },
+ { 0x01EA2 , 0x00041 , 0x00309 },
+ { 0x01EA3 , 0x00061 , 0x00309 },
+ { 0x01EA4 , 0x000C2 , 0x00301 },
+ { 0x01EA5 , 0x000E2 , 0x00301 },
+ { 0x01EA6 , 0x000C2 , 0x00300 },
+ { 0x01EA7 , 0x000E2 , 0x00300 },
+ { 0x01EA8 , 0x000C2 , 0x00309 },
+ { 0x01EA9 , 0x000E2 , 0x00309 },
+ { 0x01EAA , 0x000C2 , 0x00303 },
+ { 0x01EAB , 0x000E2 , 0x00303 },
+ { 0x01EAC , 0x01EA0 , 0x00302 },
+ { 0x01EAD , 0x01EA1 , 0x00302 },
+ { 0x01EAE , 0x00102 , 0x00301 },
+ { 0x01EAF , 0x00103 , 0x00301 },
+ { 0x01EB0 , 0x00102 , 0x00300 },
+ { 0x01EB1 , 0x00103 , 0x00300 },
+ { 0x01EB2 , 0x00102 , 0x00309 },
+ { 0x01EB3 , 0x00103 , 0x00309 },
+ { 0x01EB4 , 0x00102 , 0x00303 },
+ { 0x01EB5 , 0x00103 , 0x00303 },
+ { 0x01EB6 , 0x01EA0 , 0x00306 },
+ { 0x01EB7 , 0x01EA1 , 0x00306 },
+ { 0x01EB8 , 0x00045 , 0x00323 },
+ { 0x01EB9 , 0x00065 , 0x00323 },
+ { 0x01EBA , 0x00045 , 0x00309 },
+ { 0x01EBB , 0x00065 , 0x00309 },
+ { 0x01EBC , 0x00045 , 0x00303 },
+ { 0x01EBD , 0x00065 , 0x00303 },
+ { 0x01EBE , 0x000CA , 0x00301 },
+ { 0x01EBF , 0x000EA , 0x00301 },
+ { 0x01EC0 , 0x000CA , 0x00300 },
+ { 0x01EC1 , 0x000EA , 0x00300 },
+ { 0x01EC2 , 0x000CA , 0x00309 },
+ { 0x01EC3 , 0x000EA , 0x00309 },
+ { 0x01EC4 , 0x000CA , 0x00303 },
+ { 0x01EC5 , 0x000EA , 0x00303 },
+ { 0x01EC6 , 0x01EB8 , 0x00302 },
+ { 0x01EC7 , 0x01EB9 , 0x00302 },
+ { 0x01EC8 , 0x00049 , 0x00309 },
+ { 0x01EC9 , 0x00069 , 0x00309 },
+ { 0x01ECA , 0x00049 , 0x00323 },
+ { 0x01ECB , 0x00069 , 0x00323 },
+ { 0x01ECC , 0x0004F , 0x00323 },
+ { 0x01ECD , 0x0006F , 0x00323 },
+ { 0x01ECE , 0x0004F , 0x00309 },
+ { 0x01ECF , 0x0006F , 0x00309 },
+ { 0x01ED0 , 0x000D4 , 0x00301 },
+ { 0x01ED1 , 0x000F4 , 0x00301 },
+ { 0x01ED2 , 0x000D4 , 0x00300 },
+ { 0x01ED3 , 0x000F4 , 0x00300 },
+ { 0x01ED4 , 0x000D4 , 0x00309 },
+ { 0x01ED5 , 0x000F4 , 0x00309 },
+ { 0x01ED6 , 0x000D4 , 0x00303 },
+ { 0x01ED7 , 0x000F4 , 0x00303 },
+ { 0x01ED8 , 0x01ECC , 0x00302 },
+ { 0x01ED9 , 0x01ECD , 0x00302 },
+ { 0x01EDA , 0x001A0 , 0x00301 },
+ { 0x01EDB , 0x001A1 , 0x00301 },
+ { 0x01EDC , 0x001A0 , 0x00300 },
+ { 0x01EDD , 0x001A1 , 0x00300 },
+ { 0x01EDE , 0x001A0 , 0x00309 },
+ { 0x01EDF , 0x001A1 , 0x00309 },
+ { 0x01EE0 , 0x001A0 , 0x00303 },
+ { 0x01EE1 , 0x001A1 , 0x00303 },
+ { 0x01EE2 , 0x001A0 , 0x00323 },
+ { 0x01EE3 , 0x001A1 , 0x00323 },
+ { 0x01EE4 , 0x00055 , 0x00323 },
+ { 0x01EE5 , 0x00075 , 0x00323 },
+ { 0x01EE6 , 0x00055 , 0x00309 },
+ { 0x01EE7 , 0x00075 , 0x00309 },
+ { 0x01EE8 , 0x001AF , 0x00301 },
+ { 0x01EE9 , 0x001B0 , 0x00301 },
+ { 0x01EEA , 0x001AF , 0x00300 },
+ { 0x01EEB , 0x001B0 , 0x00300 },
+ { 0x01EEC , 0x001AF , 0x00309 },
+ { 0x01EED , 0x001B0 , 0x00309 },
+ { 0x01EEE , 0x001AF , 0x00303 },
+ { 0x01EEF , 0x001B0 , 0x00303 },
+ { 0x01EF0 , 0x001AF , 0x00323 },
+ { 0x01EF1 , 0x001B0 , 0x00323 },
+ { 0x01EF2 , 0x00059 , 0x00300 },
+ { 0x01EF3 , 0x00079 , 0x00300 },
+ { 0x01EF4 , 0x00059 , 0x00323 },
+ { 0x01EF5 , 0x00079 , 0x00323 },
+ { 0x01EF6 , 0x00059 , 0x00309 },
+ { 0x01EF7 , 0x00079 , 0x00309 },
+ { 0x01EF8 , 0x00059 , 0x00303 },
+ { 0x01EF9 , 0x00079 , 0x00303 },
+ { 0x01F00 , 0x003B1 , 0x00313 },
+ { 0x01F01 , 0x003B1 , 0x00314 },
+ { 0x01F02 , 0x01F00 , 0x00300 },
+ { 0x01F03 , 0x01F01 , 0x00300 },
+ { 0x01F04 , 0x01F00 , 0x00301 },
+ { 0x01F05 , 0x01F01 , 0x00301 },
+ { 0x01F06 , 0x01F00 , 0x00342 },
+ { 0x01F07 , 0x01F01 , 0x00342 },
+ { 0x01F08 , 0x00391 , 0x00313 },
+ { 0x01F09 , 0x00391 , 0x00314 },
+ { 0x01F0A , 0x01F08 , 0x00300 },
+ { 0x01F0B , 0x01F09 , 0x00300 },
+ { 0x01F0C , 0x01F08 , 0x00301 },
+ { 0x01F0D , 0x01F09 , 0x00301 },
+ { 0x01F0E , 0x01F08 , 0x00342 },
+ { 0x01F0F , 0x01F09 , 0x00342 },
+ { 0x01F10 , 0x003B5 , 0x00313 },
+ { 0x01F11 , 0x003B5 , 0x00314 },
+ { 0x01F12 , 0x01F10 , 0x00300 },
+ { 0x01F13 , 0x01F11 , 0x00300 },
+ { 0x01F14 , 0x01F10 , 0x00301 },
+ { 0x01F15 , 0x01F11 , 0x00301 },
+ { 0x01F18 , 0x00395 , 0x00313 },
+ { 0x01F19 , 0x00395 , 0x00314 },
+ { 0x01F1A , 0x01F18 , 0x00300 },
+ { 0x01F1B , 0x01F19 , 0x00300 },
+ { 0x01F1C , 0x01F18 , 0x00301 },
+ { 0x01F1D , 0x01F19 , 0x00301 },
+ { 0x01F20 , 0x003B7 , 0x00313 },
+ { 0x01F21 , 0x003B7 , 0x00314 },
+ { 0x01F22 , 0x01F20 , 0x00300 },
+ { 0x01F23 , 0x01F21 , 0x00300 },
+ { 0x01F24 , 0x01F20 , 0x00301 },
+ { 0x01F25 , 0x01F21 , 0x00301 },
+ { 0x01F26 , 0x01F20 , 0x00342 },
+ { 0x01F27 , 0x01F21 , 0x00342 },
+ { 0x01F28 , 0x00397 , 0x00313 },
+ { 0x01F29 , 0x00397 , 0x00314 },
+ { 0x01F2A , 0x01F28 , 0x00300 },
+ { 0x01F2B , 0x01F29 , 0x00300 },
+ { 0x01F2C , 0x01F28 , 0x00301 },
+ { 0x01F2D , 0x01F29 , 0x00301 },
+ { 0x01F2E , 0x01F28 , 0x00342 },
+ { 0x01F2F , 0x01F29 , 0x00342 },
+ { 0x01F30 , 0x003B9 , 0x00313 },
+ { 0x01F31 , 0x003B9 , 0x00314 },
+ { 0x01F32 , 0x01F30 , 0x00300 },
+ { 0x01F33 , 0x01F31 , 0x00300 },
+ { 0x01F34 , 0x01F30 , 0x00301 },
+ { 0x01F35 , 0x01F31 , 0x00301 },
+ { 0x01F36 , 0x01F30 , 0x00342 },
+ { 0x01F37 , 0x01F31 , 0x00342 },
+ { 0x01F38 , 0x00399 , 0x00313 },
+ { 0x01F39 , 0x00399 , 0x00314 },
+ { 0x01F3A , 0x01F38 , 0x00300 },
+ { 0x01F3B , 0x01F39 , 0x00300 },
+ { 0x01F3C , 0x01F38 , 0x00301 },
+ { 0x01F3D , 0x01F39 , 0x00301 },
+ { 0x01F3E , 0x01F38 , 0x00342 },
+ { 0x01F3F , 0x01F39 , 0x00342 },
+ { 0x01F40 , 0x003BF , 0x00313 },
+ { 0x01F41 , 0x003BF , 0x00314 },
+ { 0x01F42 , 0x01F40 , 0x00300 },
+ { 0x01F43 , 0x01F41 , 0x00300 },
+ { 0x01F44 , 0x01F40 , 0x00301 },
+ { 0x01F45 , 0x01F41 , 0x00301 },
+ { 0x01F48 , 0x0039F , 0x00313 },
+ { 0x01F49 , 0x0039F , 0x00314 },
+ { 0x01F4A , 0x01F48 , 0x00300 },
+ { 0x01F4B , 0x01F49 , 0x00300 },
+ { 0x01F4C , 0x01F48 , 0x00301 },
+ { 0x01F4D , 0x01F49 , 0x00301 },
+ { 0x01F50 , 0x003C5 , 0x00313 },
+ { 0x01F51 , 0x003C5 , 0x00314 },
+ { 0x01F52 , 0x01F50 , 0x00300 },
+ { 0x01F53 , 0x01F51 , 0x00300 },
+ { 0x01F54 , 0x01F50 , 0x00301 },
+ { 0x01F55 , 0x01F51 , 0x00301 },
+ { 0x01F56 , 0x01F50 , 0x00342 },
+ { 0x01F57 , 0x01F51 , 0x00342 },
+ { 0x01F59 , 0x003A5 , 0x00314 },
+ { 0x01F5B , 0x01F59 , 0x00300 },
+ { 0x01F5D , 0x01F59 , 0x00301 },
+ { 0x01F5F , 0x01F59 , 0x00342 },
+ { 0x01F60 , 0x003C9 , 0x00313 },
+ { 0x01F61 , 0x003C9 , 0x00314 },
+ { 0x01F62 , 0x01F60 , 0x00300 },
+ { 0x01F63 , 0x01F61 , 0x00300 },
+ { 0x01F64 , 0x01F60 , 0x00301 },
+ { 0x01F65 , 0x01F61 , 0x00301 },
+ { 0x01F66 , 0x01F60 , 0x00342 },
+ { 0x01F67 , 0x01F61 , 0x00342 },
+ { 0x01F68 , 0x003A9 , 0x00313 },
+ { 0x01F69 , 0x003A9 , 0x00314 },
+ { 0x01F6A , 0x01F68 , 0x00300 },
+ { 0x01F6B , 0x01F69 , 0x00300 },
+ { 0x01F6C , 0x01F68 , 0x00301 },
+ { 0x01F6D , 0x01F69 , 0x00301 },
+ { 0x01F6E , 0x01F68 , 0x00342 },
+ { 0x01F6F , 0x01F69 , 0x00342 },
+ { 0x01F70 , 0x003B1 , 0x00300 },
+ { 0x01F72 , 0x003B5 , 0x00300 },
+ { 0x01F74 , 0x003B7 , 0x00300 },
+ { 0x01F76 , 0x003B9 , 0x00300 },
+ { 0x01F78 , 0x003BF , 0x00300 },
+ { 0x01F7A , 0x003C5 , 0x00300 },
+ { 0x01F7C , 0x003C9 , 0x00300 },
+ { 0x01F80 , 0x01F00 , 0x00345 },
+ { 0x01F81 , 0x01F01 , 0x00345 },
+ { 0x01F82 , 0x01F02 , 0x00345 },
+ { 0x01F83 , 0x01F03 , 0x00345 },
+ { 0x01F84 , 0x01F04 , 0x00345 },
+ { 0x01F85 , 0x01F05 , 0x00345 },
+ { 0x01F86 , 0x01F06 , 0x00345 },
+ { 0x01F87 , 0x01F07 , 0x00345 },
+ { 0x01F88 , 0x01F08 , 0x00345 },
+ { 0x01F89 , 0x01F09 , 0x00345 },
+ { 0x01F8A , 0x01F0A , 0x00345 },
+ { 0x01F8B , 0x01F0B , 0x00345 },
+ { 0x01F8C , 0x01F0C , 0x00345 },
+ { 0x01F8D , 0x01F0D , 0x00345 },
+ { 0x01F8E , 0x01F0E , 0x00345 },
+ { 0x01F8F , 0x01F0F , 0x00345 },
+ { 0x01F90 , 0x01F20 , 0x00345 },
+ { 0x01F91 , 0x01F21 , 0x00345 },
+ { 0x01F92 , 0x01F22 , 0x00345 },
+ { 0x01F93 , 0x01F23 , 0x00345 },
+ { 0x01F94 , 0x01F24 , 0x00345 },
+ { 0x01F95 , 0x01F25 , 0x00345 },
+ { 0x01F96 , 0x01F26 , 0x00345 },
+ { 0x01F97 , 0x01F27 , 0x00345 },
+ { 0x01F98 , 0x01F28 , 0x00345 },
+ { 0x01F99 , 0x01F29 , 0x00345 },
+ { 0x01F9A , 0x01F2A , 0x00345 },
+ { 0x01F9B , 0x01F2B , 0x00345 },
+ { 0x01F9C , 0x01F2C , 0x00345 },
+ { 0x01F9D , 0x01F2D , 0x00345 },
+ { 0x01F9E , 0x01F2E , 0x00345 },
+ { 0x01F9F , 0x01F2F , 0x00345 },
+ { 0x01FA0 , 0x01F60 , 0x00345 },
+ { 0x01FA1 , 0x01F61 , 0x00345 },
+ { 0x01FA2 , 0x01F62 , 0x00345 },
+ { 0x01FA3 , 0x01F63 , 0x00345 },
+ { 0x01FA4 , 0x01F64 , 0x00345 },
+ { 0x01FA5 , 0x01F65 , 0x00345 },
+ { 0x01FA6 , 0x01F66 , 0x00345 },
+ { 0x01FA7 , 0x01F67 , 0x00345 },
+ { 0x01FA8 , 0x01F68 , 0x00345 },
+ { 0x01FA9 , 0x01F69 , 0x00345 },
+ { 0x01FAA , 0x01F6A , 0x00345 },
+ { 0x01FAB , 0x01F6B , 0x00345 },
+ { 0x01FAC , 0x01F6C , 0x00345 },
+ { 0x01FAD , 0x01F6D , 0x00345 },
+ { 0x01FAE , 0x01F6E , 0x00345 },
+ { 0x01FAF , 0x01F6F , 0x00345 },
+ { 0x01FB0 , 0x003B1 , 0x00306 },
+ { 0x01FB1 , 0x003B1 , 0x00304 },
+ { 0x01FB2 , 0x01F70 , 0x00345 },
+ { 0x01FB3 , 0x003B1 , 0x00345 },
+ { 0x01FB4 , 0x003AC , 0x00345 },
+ { 0x01FB6 , 0x003B1 , 0x00342 },
+ { 0x01FB7 , 0x01FB6 , 0x00345 },
+ { 0x01FB8 , 0x00391 , 0x00306 },
+ { 0x01FB9 , 0x00391 , 0x00304 },
+ { 0x01FBA , 0x00391 , 0x00300 },
+ { 0x01FBC , 0x00391 , 0x00345 },
+ { 0x01FC1 , 0x000A8 , 0x00342 },
+ { 0x01FC2 , 0x01F74 , 0x00345 },
+ { 0x01FC3 , 0x003B7 , 0x00345 },
+ { 0x01FC4 , 0x003AE , 0x00345 },
+ { 0x01FC6 , 0x003B7 , 0x00342 },
+ { 0x01FC7 , 0x01FC6 , 0x00345 },
+ { 0x01FC8 , 0x00395 , 0x00300 },
+ { 0x01FCA , 0x00397 , 0x00300 },
+ { 0x01FCC , 0x00397 , 0x00345 },
+ { 0x01FCD , 0x01FBF , 0x00300 },
+ { 0x01FCE , 0x01FBF , 0x00301 },
+ { 0x01FCF , 0x01FBF , 0x00342 },
+ { 0x01FD0 , 0x003B9 , 0x00306 },
+ { 0x01FD1 , 0x003B9 , 0x00304 },
+ { 0x01FD2 , 0x003CA , 0x00300 },
+ { 0x01FD6 , 0x003B9 , 0x00342 },
+ { 0x01FD7 , 0x003CA , 0x00342 },
+ { 0x01FD8 , 0x00399 , 0x00306 },
+ { 0x01FD9 , 0x00399 , 0x00304 },
+ { 0x01FDA , 0x00399 , 0x00300 },
+ { 0x01FDD , 0x01FFE , 0x00300 },
+ { 0x01FDE , 0x01FFE , 0x00301 },
+ { 0x01FDF , 0x01FFE , 0x00342 },
+ { 0x01FE0 , 0x003C5 , 0x00306 },
+ { 0x01FE1 , 0x003C5 , 0x00304 },
+ { 0x01FE2 , 0x003CB , 0x00300 },
+ { 0x01FE4 , 0x003C1 , 0x00313 },
+ { 0x01FE5 , 0x003C1 , 0x00314 },
+ { 0x01FE6 , 0x003C5 , 0x00342 },
+ { 0x01FE7 , 0x003CB , 0x00342 },
+ { 0x01FE8 , 0x003A5 , 0x00306 },
+ { 0x01FE9 , 0x003A5 , 0x00304 },
+ { 0x01FEA , 0x003A5 , 0x00300 },
+ { 0x01FEC , 0x003A1 , 0x00314 },
+ { 0x01FED , 0x000A8 , 0x00300 },
+ { 0x01FF2 , 0x01F7C , 0x00345 },
+ { 0x01FF3 , 0x003C9 , 0x00345 },
+ { 0x01FF4 , 0x003CE , 0x00345 },
+ { 0x01FF6 , 0x003C9 , 0x00342 },
+ { 0x01FF7 , 0x01FF6 , 0x00345 },
+ { 0x01FF8 , 0x0039F , 0x00300 },
+ { 0x01FFA , 0x003A9 , 0x00300 },
+ { 0x01FFC , 0x003A9 , 0x00345 },
+ { 0x0219A , 0x02190 , 0x00338 },
+ { 0x0219B , 0x02192 , 0x00338 },
+ { 0x021AE , 0x02194 , 0x00338 },
+ { 0x021CD , 0x021D0 , 0x00338 },
+ { 0x021CE , 0x021D4 , 0x00338 },
+ { 0x021CF , 0x021D2 , 0x00338 },
+ { 0x02204 , 0x02203 , 0x00338 },
+ { 0x02209 , 0x02208 , 0x00338 },
+ { 0x0220C , 0x0220B , 0x00338 },
+ { 0x02224 , 0x02223 , 0x00338 },
+ { 0x02226 , 0x02225 , 0x00338 },
+ { 0x02241 , 0x0223C , 0x00338 },
+ { 0x02244 , 0x02243 , 0x00338 },
+ { 0x02247 , 0x02245 , 0x00338 },
+ { 0x02249 , 0x02248 , 0x00338 },
+ { 0x02260 , 0x0003D , 0x00338 },
+ { 0x02262 , 0x02261 , 0x00338 },
+ { 0x0226D , 0x0224D , 0x00338 },
+ { 0x0226E , 0x0003C , 0x00338 },
+ { 0x0226F , 0x0003E , 0x00338 },
+ { 0x02270 , 0x02264 , 0x00338 },
+ { 0x02271 , 0x02265 , 0x00338 },
+ { 0x02274 , 0x02272 , 0x00338 },
+ { 0x02275 , 0x02273 , 0x00338 },
+ { 0x02278 , 0x02276 , 0x00338 },
+ { 0x02279 , 0x02277 , 0x00338 },
+ { 0x02280 , 0x0227A , 0x00338 },
+ { 0x02281 , 0x0227B , 0x00338 },
+ { 0x02284 , 0x02282 , 0x00338 },
+ { 0x02285 , 0x02283 , 0x00338 },
+ { 0x02288 , 0x02286 , 0x00338 },
+ { 0x02289 , 0x02287 , 0x00338 },
+ { 0x022AC , 0x022A2 , 0x00338 },
+ { 0x022AD , 0x022A8 , 0x00338 },
+ { 0x022AE , 0x022A9 , 0x00338 },
+ { 0x022AF , 0x022AB , 0x00338 },
+ { 0x022E0 , 0x0227C , 0x00338 },
+ { 0x022E1 , 0x0227D , 0x00338 },
+ { 0x022E2 , 0x02291 , 0x00338 },
+ { 0x022E3 , 0x02292 , 0x00338 },
+ { 0x022EA , 0x022B2 , 0x00338 },
+ { 0x022EB , 0x022B3 , 0x00338 },
+ { 0x022EC , 0x022B4 , 0x00338 },
+ { 0x022ED , 0x022B5 , 0x00338 },
+ { 0x0304C , 0x0304B , 0x03099 },
+ { 0x0304E , 0x0304D , 0x03099 },
+ { 0x03050 , 0x0304F , 0x03099 },
+ { 0x03052 , 0x03051 , 0x03099 },
+ { 0x03054 , 0x03053 , 0x03099 },
+ { 0x03056 , 0x03055 , 0x03099 },
+ { 0x03058 , 0x03057 , 0x03099 },
+ { 0x0305A , 0x03059 , 0x03099 },
+ { 0x0305C , 0x0305B , 0x03099 },
+ { 0x0305E , 0x0305D , 0x03099 },
+ { 0x03060 , 0x0305F , 0x03099 },
+ { 0x03062 , 0x03061 , 0x03099 },
+ { 0x03065 , 0x03064 , 0x03099 },
+ { 0x03067 , 0x03066 , 0x03099 },
+ { 0x03069 , 0x03068 , 0x03099 },
+ { 0x03070 , 0x0306F , 0x03099 },
+ { 0x03071 , 0x0306F , 0x0309A },
+ { 0x03073 , 0x03072 , 0x03099 },
+ { 0x03074 , 0x03072 , 0x0309A },
+ { 0x03076 , 0x03075 , 0x03099 },
+ { 0x03077 , 0x03075 , 0x0309A },
+ { 0x03079 , 0x03078 , 0x03099 },
+ { 0x0307A , 0x03078 , 0x0309A },
+ { 0x0307C , 0x0307B , 0x03099 },
+ { 0x0307D , 0x0307B , 0x0309A },
+ { 0x03094 , 0x03046 , 0x03099 },
+ { 0x0309E , 0x0309D , 0x03099 },
+ { 0x030AC , 0x030AB , 0x03099 },
+ { 0x030AE , 0x030AD , 0x03099 },
+ { 0x030B0 , 0x030AF , 0x03099 },
+ { 0x030B2 , 0x030B1 , 0x03099 },
+ { 0x030B4 , 0x030B3 , 0x03099 },
+ { 0x030B6 , 0x030B5 , 0x03099 },
+ { 0x030B8 , 0x030B7 , 0x03099 },
+ { 0x030BA , 0x030B9 , 0x03099 },
+ { 0x030BC , 0x030BB , 0x03099 },
+ { 0x030BE , 0x030BD , 0x03099 },
+ { 0x030C0 , 0x030BF , 0x03099 },
+ { 0x030C2 , 0x030C1 , 0x03099 },
+ { 0x030C5 , 0x030C4 , 0x03099 },
+ { 0x030C7 , 0x030C6 , 0x03099 },
+ { 0x030C9 , 0x030C8 , 0x03099 },
+ { 0x030D0 , 0x030CF , 0x03099 },
+ { 0x030D1 , 0x030CF , 0x0309A },
+ { 0x030D3 , 0x030D2 , 0x03099 },
+ { 0x030D4 , 0x030D2 , 0x0309A },
+ { 0x030D6 , 0x030D5 , 0x03099 },
+ { 0x030D7 , 0x030D5 , 0x0309A },
+ { 0x030D9 , 0x030D8 , 0x03099 },
+ { 0x030DA , 0x030D8 , 0x0309A },
+ { 0x030DC , 0x030DB , 0x03099 },
+ { 0x030DD , 0x030DB , 0x0309A },
+ { 0x030F4 , 0x030A6 , 0x03099 },
+ { 0x030F7 , 0x030EF , 0x03099 },
+ { 0x030F8 , 0x030F0 , 0x03099 },
+ { 0x030F9 , 0x030F1 , 0x03099 },
+ { 0x030FA , 0x030F2 , 0x03099 },
+ { 0x030FE , 0x030FD , 0x03099 },
+ { 0x1109A , 0x11099 , 0x110BA },
+ { 0x1109C , 0x1109B , 0x110BA },
+ { 0x110AB , 0x110A5 , 0x110BA },
+};
+
#endif /* ARCHIVE_STRING_COMPOSITION_H_INCLUDED */
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string_sprintf.c
--- a/head/contrib/libarchive/libarchive/archive_string_sprintf.c Mon Jul 3=
0 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string_sprintf.c Fri Aug 1=
0 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string_spri=
ntf.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string_spri=
ntf.c 238856 2012-07-28 06:38:44Z mm $");
=20
/*
* The use of printf()-family functions can be troublesome
@@ -38,7 +38,9 @@
* here. This is only used to format error messages, so doesn't
* require any floating-point support or field-width handling.
*/
-
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
#include <stdio.h>
=20
#include "archive_string.h"
@@ -129,7 +131,7 @@
break;
case 'c':
s =3D va_arg(ap, int);
- archive_strappend_char(as, s);
+ archive_strappend_char(as, (char)s);
break;
case 'd':
switch(long_flag) {
@@ -146,7 +148,9 @@
pw =3D va_arg(ap, wchar_t *);
if (pw =3D=3D NULL)
pw =3D L"(null)";
- archive_string_append_from_wcs(as, pw, wcslen(pw));
+ if (archive_string_append_from_wcs(as, pw,
+ wcslen(pw)) !=3D 0 && errno =3D=3D ENOMEM)
+ __archive_errx(1, "Out of memory");
break;
default:
p2 =3D va_arg(ap, char *);
@@ -160,7 +164,9 @@
pw =3D va_arg(ap, wchar_t *);
if (pw =3D=3D NULL)
pw =3D L"(null)";
- archive_string_append_from_wcs(as, pw, wcslen(pw));
+ if (archive_string_append_from_wcs(as, pw,
+ wcslen(pw)) !=3D 0 && errno =3D=3D ENOMEM)
+ __archive_errx(1, "Out of memory");
break;
case 'o': case 'u': case 'x': case 'X':
/* Common handling for unsigned integer formats. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_util.3
--- a/head/contrib/libarchive/libarchive/archive_util.3 Mon Jul 30 11:44:18=
2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_util.3 Fri Aug 10 14:19:25=
2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_util.3 232153 201=
2-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_util.3 238856 201=
2-07-28 06:38:44Z mm $
.\"
-.Dd January 8, 2005
+.Dd February 2, 2012
.Dt ARCHIVE_UTIL 3
.Os
.Sh NAME
@@ -43,6 +43,8 @@
.Nm archive_position ,
.Nm archive_set_error
.Nd libarchive utility functions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_util.c
--- a/head/contrib/libarchive/libarchive/archive_util.c Mon Jul 30 11:44:18=
2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_util.c Fri Aug 10 14:19:25=
2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_util.c 2321=
53 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_util.c 2388=
56 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -243,8 +243,9 @@
archive_wstrcpy(&temp_name, tmp);
free(tmp);
} else {
- archive_wstring_append_from_mbs(&temp_name, tmpdir,
- strlen(tmpdir));
+ if (archive_wstring_append_from_mbs(&temp_name, tmpdir,
+ strlen(tmpdir)) < 0)
+ goto exit_tmpfile;
if (temp_name.s[temp_name.length-1] !=3D L'/')
archive_wstrappend_wchar(&temp_name, L'/');
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write.3
--- a/head/contrib/libarchive/libarchive/archive_write.3 Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write.3 Fri Aug 10 14:19:2=
5 2012 +0300
@@ -22,14 +22,16 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write.3 232153 20=
12-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write.3 238856 20=
12-07-28 06:38:44Z mm $
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE 3
.Os
.Sh NAME
.Nm archive_write
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Sh DESCRIPTION
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write.c
--- a/head/contrib/libarchive/libarchive/archive_write.c Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write.c Fri Aug 10 14:19:2=
5 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write.c 232=
153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write.c 238=
856 2012-07-28 06:38:44Z mm $");
=20
/*
* This file contains the "essential" portions of the write API, that
@@ -380,7 +380,7 @@
}
}
=20
- while ((size_t)remaining > state->buffer_size) {
+ while ((size_t)remaining >=3D state->buffer_size) {
/* Write out full blocks directly to client. */
bytes_written =3D (a->client_writer)(&a->archive,
a->client_data, buff, state->buffer_size);
@@ -623,7 +623,7 @@
if (a->skip_file_set &&
archive_entry_dev_is_set(entry) &&
archive_entry_ino_is_set(entry) &&
- archive_entry_dev(entry) =3D=3D a->skip_file_dev &&
+ archive_entry_dev(entry) =3D=3D (dev_t)a->skip_file_dev &&
archive_entry_ino64(entry) =3D=3D a->skip_file_ino) {
archive_set_error(&a->archive, 0,
"Can't add archive to itself");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter.c Fri Aug=
10 14:19:25 2012 +0300
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 2012 Ondrej Holy
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "archive_platform.h"
+__FBSDID("$FreeBSD$");
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#include "archive.h"
+#include "archive_private.h"
+
+/* A table that maps filter codes to functions. */
+static
+struct { int code; int (*setter)(struct archive *); } codes[] =3D
+{
+ { ARCHIVE_FILTER_NONE, archive_write_add_filter_none },
+ { ARCHIVE_FILTER_GZIP, archive_write_add_filter_gzip },
+ { ARCHIVE_FILTER_BZIP2, archive_write_add_filter_bzip2 },
+ { ARCHIVE_FILTER_COMPRESS, archive_write_add_filter_compress },
+ { ARCHIVE_FILTER_LZMA, archive_write_add_filter_lzma },
+ { ARCHIVE_FILTER_XZ, archive_write_add_filter_xz },
+ { ARCHIVE_FILTER_LZIP, archive_write_add_filter_lzip },
+ { -1, NULL }
+};
+
+int
+archive_write_add_filter(struct archive *a, int code)
+{
+ int i;
+
+ for (i =3D 0; codes[i].code !=3D -1; i++) {
+ if (code =3D=3D codes[i].code)
+ return ((codes[i].setter)(a));
+ }
+
+ archive_set_error(a, EINVAL, "No such filter");
+ return (ARCHIVE_FATAL);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_bzip2.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c M=
on Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c F=
ri Aug 10 14:19:25 2012 +0300
@@ -133,10 +133,18 @@
if (ret !=3D 0)
return (ret);
=20
- /* TODO: Find a better way to size this. (Maybe look at the */
- /* block size expected by the following filter?) */
if (data->compressed =3D=3D NULL) {
- data->compressed_buffer_size =3D 65536;
+ size_t bs =3D 65536, bpb;
+ if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+ /* Buffer size should be a multiple number of the of bytes
+ * per block for performance. */
+ bpb =3D archive_write_get_bytes_per_block(f->archive);
+ if (bpb > bs)
+ bs =3D bpb;
+ else if (bpb !=3D 0)
+ bs -=3D bs % bpb;
+ }
+ data->compressed_buffer_size =3D bs;
data->compressed
=3D (char *)malloc(data->compressed_buffer_size);
if (data->compressed =3D=3D NULL) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_compress.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_compress.=
c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_compress.=
c Fri Aug 10 14:19:25 2012 +0300
@@ -148,6 +148,7 @@
{
int ret;
struct private_data *state;
+ size_t bs =3D 65536, bpb;
=20
f->code =3D ARCHIVE_COMPRESSION_COMPRESS;
f->name =3D "compress";
@@ -163,7 +164,16 @@
return (ARCHIVE_FATAL);
}
=20
- state->compressed_buffer_size =3D 65536;
+ if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+ /* Buffer size should be a multiple number of the of bytes
+ * per block for performance. */
+ bpb =3D archive_write_get_bytes_per_block(f->archive);
+ if (bpb > bs)
+ bs =3D bpb;
+ else if (bpb !=3D 0)
+ bs -=3D bs % bpb;
+ }
+ state->compressed_buffer_size =3D bs;
state->compressed =3D malloc(state->compressed_buffer_size);
=20
if (state->compressed =3D=3D NULL) {
@@ -386,12 +396,12 @@
=20
state->checkpoint =3D state->in_count + CHECK_GAP;
=20
- if (state->in_count <=3D 0x007fffff)
- ratio =3D state->in_count * 256 / state->out_count;
- else if ((ratio =3D state->out_count / 256) =3D=3D 0)
+ if (state->in_count <=3D 0x007fffff && state->out_count !=3D 0)
+ ratio =3D (int)(state->in_count * 256 / state->out_count);
+ else if ((ratio =3D (int)(state->out_count / 256)) =3D=3D 0)
ratio =3D 0x7fffffff;
else
- ratio =3D state->in_count / ratio;
+ ratio =3D (int)(state->in_count / ratio);
=20
if (ratio > state->compress_ratio)
state->compress_ratio =3D ratio;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_gzip.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c Fr=
i Aug 10 14:19:25 2012 +0300
@@ -135,7 +135,17 @@
return (ret);
=20
if (data->compressed =3D=3D NULL) {
- data->compressed_buffer_size =3D 65536;
+ size_t bs =3D 65536, bpb;
+ if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+ /* Buffer size should be a multiple number of the of bytes
+ * per block for performance. */
+ bpb =3D archive_write_get_bytes_per_block(f->archive);
+ if (bpb > bs)
+ bs =3D bpb;
+ else if (bpb !=3D 0)
+ bs -=3D bs % bpb;
+ }
+ data->compressed_buffer_size =3D bs;
data->compressed
=3D (unsigned char *)malloc(data->compressed_buffer_size);
if (data->compressed =3D=3D NULL) {
@@ -155,10 +165,10 @@
data->compressed[1] =3D 0x8b;
data->compressed[2] =3D 0x08; /* "Deflate" compression */
data->compressed[3] =3D 0; /* No options */
- data->compressed[4] =3D (t)&0xff; /* Timestamp */
- data->compressed[5] =3D (t>>8)&0xff;
- data->compressed[6] =3D (t>>16)&0xff;
- data->compressed[7] =3D (t>>24)&0xff;
+ data->compressed[4] =3D (uint8_t)(t)&0xff; /* Timestamp */
+ data->compressed[5] =3D (uint8_t)(t>>8)&0xff;
+ data->compressed[6] =3D (uint8_t)(t>>16)&0xff;
+ data->compressed[7] =3D (uint8_t)(t>>24)&0xff;
data->compressed[8] =3D 0; /* No deflate options */
data->compressed[9] =3D 3; /* OS=3DUnix */
data->stream.next_out +=3D 10;
@@ -270,14 +280,14 @@
}
if (ret =3D=3D ARCHIVE_OK) {
/* Build and write out 8-byte trailer. */
- trailer[0] =3D (data->crc)&0xff;
- trailer[1] =3D (data->crc >> 8)&0xff;
- trailer[2] =3D (data->crc >> 16)&0xff;
- trailer[3] =3D (data->crc >> 24)&0xff;
- trailer[4] =3D (data->total_in)&0xff;
- trailer[5] =3D (data->total_in >> 8)&0xff;
- trailer[6] =3D (data->total_in >> 16)&0xff;
- trailer[7] =3D (data->total_in >> 24)&0xff;
+ trailer[0] =3D (uint8_t)(data->crc)&0xff;
+ trailer[1] =3D (uint8_t)(data->crc >> 8)&0xff;
+ trailer[2] =3D (uint8_t)(data->crc >> 16)&0xff;
+ trailer[3] =3D (uint8_t)(data->crc >> 24)&0xff;
+ trailer[4] =3D (uint8_t)(data->total_in)&0xff;
+ trailer[5] =3D (uint8_t)(data->total_in >> 8)&0xff;
+ trailer[6] =3D (uint8_t)(data->total_in >> 16)&0xff;
+ trailer[7] =3D (uint8_t)(data->total_in >> 24)&0xff;
ret =3D __archive_write_filter(f->next_filter, trailer, 8);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_program.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_program.c=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_program.c=
Fri Aug 10 14:19:25 2012 +0300
@@ -171,60 +171,62 @@
if (buf_len =3D=3D 0)
return (-1);
=20
-restart_write:
- do {
- ret =3D write(data->child_stdin, buf, buf_len);
- } while (ret =3D=3D -1 && errno =3D=3D EINTR);
+ for (;;) {
+ do {
+ ret =3D write(data->child_stdin, buf, buf_len);
+ } while (ret =3D=3D -1 && errno =3D=3D EINTR);
=20
- if (ret > 0)
- return (ret);
- if (ret =3D=3D 0) {
- close(data->child_stdin);
- data->child_stdin =3D -1;
- fcntl(data->child_stdout, F_SETFL, 0);
- return (0);
+ if (ret > 0)
+ return (ret);
+ if (ret =3D=3D 0) {
+ close(data->child_stdin);
+ data->child_stdin =3D -1;
+ fcntl(data->child_stdout, F_SETFL, 0);
+ return (0);
+ }
+ if (ret =3D=3D -1 && errno !=3D EAGAIN)
+ return (-1);
+
+ if (data->child_stdout =3D=3D -1) {
+ fcntl(data->child_stdin, F_SETFL, 0);
+ __archive_check_child(data->child_stdin,
+ data->child_stdout);
+ continue;
+ }
+
+ do {
+ ret =3D read(data->child_stdout,
+ data->child_buf + data->child_buf_avail,
+ data->child_buf_len - data->child_buf_avail);
+ } while (ret =3D=3D -1 && errno =3D=3D EINTR);
+
+ if (ret =3D=3D 0 || (ret =3D=3D -1 && errno =3D=3D EPIPE)) {
+ close(data->child_stdout);
+ data->child_stdout =3D -1;
+ fcntl(data->child_stdin, F_SETFL, 0);
+ continue;
+ }
+ if (ret =3D=3D -1 && errno =3D=3D EAGAIN) {
+ __archive_check_child(data->child_stdin,
+ data->child_stdout);
+ continue;
+ }
+ if (ret =3D=3D -1)
+ return (-1);
+
+ data->child_buf_avail +=3D ret;
+
+ ret =3D __archive_write_filter(f->next_filter,
+ data->child_buf, data->child_buf_avail);
+ if (ret <=3D 0)
+ return (-1);
+
+ if ((size_t)ret < data->child_buf_avail) {
+ memmove(data->child_buf, data->child_buf + ret,
+ data->child_buf_avail - ret);
+ }
+ data->child_buf_avail -=3D ret;
}
- if (ret =3D=3D -1 && errno !=3D EAGAIN)
- return (-1);
-
- if (data->child_stdout =3D=3D -1) {
- fcntl(data->child_stdin, F_SETFL, 0);
- __archive_check_child(data->child_stdin, data->child_stdout);
- goto restart_write;
- }
-
- do {
- ret =3D read(data->child_stdout,
- data->child_buf + data->child_buf_avail,
- data->child_buf_len - data->child_buf_avail);
- } while (ret =3D=3D -1 && errno =3D=3D EINTR);
-
- if (ret =3D=3D 0 || (ret =3D=3D -1 && errno =3D=3D EPIPE)) {
- close(data->child_stdout);
- data->child_stdout =3D -1;
- fcntl(data->child_stdin, F_SETFL, 0);
- goto restart_write;
- }
- if (ret =3D=3D -1 && errno =3D=3D EAGAIN) {
- __archive_check_child(data->child_stdin, data->child_stdout);
- goto restart_write;
- }
- if (ret =3D=3D -1)
- return (-1);
-
- data->child_buf_avail +=3D ret;
-
- ret =3D __archive_write_filter(f->next_filter,
- data->child_buf, data->child_buf_avail);
- if (ret <=3D 0)
- return (-1);
-
- if ((size_t)ret < data->child_buf_avail) {
- memmove(data->child_buf, data->child_buf + ret,
- data->child_buf_avail - ret);
- }
- data->child_buf_avail -=3D ret;
- goto restart_write;
}
=20
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_xz.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_xz.c Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_xz.c Fri =
Aug 10 14:19:25 2012 +0300
@@ -298,7 +298,17 @@
return (ret);
=20
if (data->compressed =3D=3D NULL) {
- data->compressed_buffer_size =3D 65536;
+ size_t bs =3D 65536, bpb;
+ if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+ /* Buffer size should be a multiple number of the of bytes
+ * per block for performance. */
+ bpb =3D archive_write_get_bytes_per_block(f->archive);
+ if (bpb > bs)
+ bs =3D bpb;
+ else if (bpb !=3D 0)
+ bs -=3D bs % bpb;
+ }
+ data->compressed_buffer_size =3D bs;
data->compressed
=3D (unsigned char *)malloc(data->compressed_buffer_size);
if (data->compressed =3D=3D NULL) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_blocksize.3
--- a/head/contrib/libarchive/libarchive/archive_write_blocksize.3 Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_blocksize.3 Fri Aug =
10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_BLOCKSIZE 3
.Os
.Sh NAME
@@ -33,6 +33,8 @@
.Nm archive_write_get_bytes_in_last_block ,
.Nm archive_write_set_bytes_in_last_block
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_data.3
--- a/head/contrib/libarchive/libarchive/archive_write_data.3 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_data.3 Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,14 +22,16 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd March 23, 2011
-.Dt ARCHIVE_WRITE 3
+.Dd February 2, 2012
+.Dt ARCHIVE_WRITE_DATA 3
.Os
.Sh NAME
.Nm archive_write_data
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft ssize_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk.3
--- a/head/contrib/libarchive/libarchive/archive_write_disk.3 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk.3 Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk.3 2321=
53 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk.3 2388=
56 2012-07-28 06:38:44Z mm $
.\"
-.Dd August 5, 2008
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_DISK 3
.Os
.Sh NAME
@@ -42,6 +42,8 @@
.Nm archive_write_finish
.Nm archive_write_free
.Nd functions for creating objects on disk
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_acl.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_acl.c Fri Aug 1=
0 14:19:25 2012 +0300
@@ -0,0 +1,249 @@
+/*-
+ * Copyright (c) 2003-2010 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer
+ * in this position and unchanged.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "archive_platform.h"
+__FBSDID("$FreeBSD: head/lib/libarchive/archive_write_disk.c 201159 2009-1=
2-29 05:35:40Z kientzle $");
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_ACL_H
+#define _ACL_PRIVATE /* For debugging */
+#include <sys/acl.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#include "archive.h"
+#include "archive_entry.h"
+#include "archive_acl_private.h"
+#include "archive_write_disk_private.h"
+
+#ifndef HAVE_POSIX_ACL
+/* Default empty function body to satisfy mainline code. */
+int
+archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
+ struct archive_acl *abstract_acl)
+{
+ (void)a; /* UNUSED */
+ (void)fd; /* UNUSED */
+ (void)name; /* UNUSED */
+ (void)abstract_acl; /* UNUSED */
+ return (ARCHIVE_OK);
+}
+
+#else
+
+static int set_acl(struct archive *, int fd, const char *,
+ struct archive_acl *,
+ acl_type_t, int archive_entry_acl_type, const char *tn);
+
+/*
+ * XXX TODO: What about ACL types other than ACCESS and DEFAULT?
+ */
+int
+archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
+ struct archive_acl *abstract_acl)
+{
+ int ret;
+
+ if (archive_acl_count(abstract_acl, ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) > 0) {
+ ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, "access");
+ if (ret !=3D ARCHIVE_OK)
+ return (ret);
+ ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_DEFAULT,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, "default");
+ return (ret);
+ } else if (archive_acl_count(abstract_acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4) >=
0) {
+ ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_NFS4,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, "nfs4");
+ return (ret);
+ } else
+ return ARCHIVE_OK;
+}
+
+static struct {
+ int archive_perm;
+ int platform_perm;
+} acl_perm_map[] =3D {
+ {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
+ {ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
+ {ARCHIVE_ENTRY_ACL_READ, ACL_READ},
+ {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
+ {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
+ {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
+ {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
+ {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
+ {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
+ {ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
+ {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
+};
+
+static struct {
+ int archive_inherit;
+ int platform_inherit;
+} acl_inherit_map[] =3D {
+ {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INH=
ERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
+};
+
+static int
+set_acl(struct archive *a, int fd, const char *name,
+ struct archive_acl *abstract_acl,
+ acl_type_t acl_type, int ae_requested_type, const char *tname)
+{
+ acl_t acl;
+ acl_entry_t acl_entry;
+ acl_permset_t acl_permset;
+ acl_flagset_t acl_flagset;
+ int ret;
+ int ae_type, ae_permset, ae_tag, ae_id;
+ uid_t ae_uid;
+ gid_t ae_gid;
+ const char *ae_name;
+ int entries;
+ int i;
+
+ ret =3D ARCHIVE_OK;
+ entries =3D archive_acl_reset(abstract_acl, ae_requested_type);
+ if (entries =3D=3D 0)
+ return (ARCHIVE_OK);
+ acl =3D acl_init(entries);
+ while (archive_acl_next(a, abstract_acl, ae_requested_type, &ae_type,
+ &ae_permset, &ae_tag, &ae_id, &ae_name) =3D=3D ARCHIVE_OK) {
+ acl_create_entry(&acl, &acl_entry);
+
+ switch (ae_tag) {
+ case ARCHIVE_ENTRY_ACL_USER:
+ acl_set_tag_type(acl_entry, ACL_USER);
+ ae_uid =3D archive_write_disk_uid(a, ae_name, ae_id);
+ acl_set_qualifier(acl_entry, &ae_uid);
+ break;
+ case ARCHIVE_ENTRY_ACL_GROUP:
+ acl_set_tag_type(acl_entry, ACL_GROUP);
+ ae_gid =3D archive_write_disk_gid(a, ae_name, ae_id);
+ acl_set_qualifier(acl_entry, &ae_gid);
+ break;
+ case ARCHIVE_ENTRY_ACL_USER_OBJ:
+ acl_set_tag_type(acl_entry, ACL_USER_OBJ);
+ break;
+ case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
+ acl_set_tag_type(acl_entry, ACL_GROUP_OBJ);
+ break;
+ case ARCHIVE_ENTRY_ACL_MASK:
+ acl_set_tag_type(acl_entry, ACL_MASK);
+ break;
+ case ARCHIVE_ENTRY_ACL_OTHER:
+ acl_set_tag_type(acl_entry, ACL_OTHER);
+ break;
+ case ARCHIVE_ENTRY_ACL_EVERYONE:
+ acl_set_tag_type(acl_entry, ACL_EVERYONE);
+ break;
+ default:
+ /* XXX */
+ break;
+ }
+
+ switch (ae_type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
+ acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_ALLOW);
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_DENY:
+ acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_DENY);
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_AUDIT:
+ acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_AUDIT);
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_ALARM:
+ acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_ALARM);
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+ case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+ // These don't translate directly into the system ACL.
+ break;
+ default:
+ // XXX error handling here.
+ break;
+ }
+
+ acl_get_permset(acl_entry, &acl_permset);
+ acl_clear_perms(acl_permset);
+
+ for (i =3D 0; i < (int)(sizeof(acl_perm_map) / sizeof(acl_perm_map[0]));=
++i) {
+ if (ae_permset & acl_perm_map[i].archive_perm)
+ acl_add_perm(acl_permset,
+ acl_perm_map[i].platform_perm);
+ }
+
+ acl_get_flagset_np(acl_entry, &acl_flagset);
+ acl_clear_flags_np(acl_flagset);
+ for (i =3D 0; i < (int)(sizeof(acl_inherit_map) / sizeof(acl_inherit_map=
[0])); ++i) {
+ if (ae_permset & acl_inherit_map[i].archive_inherit)
+ acl_add_flag_np(acl_flagset,
+ acl_inherit_map[i].platform_inherit);
+ }
+ }
+
+ /* Try restoring the ACL through 'fd' if we can. */
+#if HAVE_ACL_SET_FD
+ if (fd >=3D 0 && acl_type =3D=3D ACL_TYPE_ACCESS && acl_set_fd(fd, acl) =
=3D=3D 0)
+ ret =3D ARCHIVE_OK;
+ else
+#else
+#if HAVE_ACL_SET_FD_NP
+ if (fd >=3D 0 && acl_set_fd_np(fd, acl, acl_type) =3D=3D 0)
+ ret =3D ARCHIVE_OK;
+ else
+#endif
+#endif
+#if HAVE_ACL_SET_LINK_NP
+ if (acl_set_link_np(name, acl_type, acl) !=3D 0) {
+ archive_set_error(a, errno, "Failed to set %s acl", tname);
+ ret =3D ARCHIVE_WARN;
+ }
+#else
+ /* TODO: Skip this if 'name' is a symlink. */
+ if (acl_set_file(name, acl_type, acl) !=3D 0) {
+ archive_set_error(a, errno, "Failed to set %s acl", tname);
+ ret =3D ARCHIVE_WARN;
+ }
+#endif
+ acl_free(acl);
+ return (ret);
+}
+#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_posix.c
--- a/head/contrib/libarchive/libarchive/archive_write_disk_posix.c Mon Jul=
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_posix.c Fri Aug=
10 14:19:25 2012 +0300
@@ -32,9 +32,6 @@
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
-#ifdef HAVE_SYS_ACL_H
-#include <sys/acl.h>
-#endif
#ifdef HAVE_SYS_EXTATTR_H
#include <sys/extattr.h>
#endif
@@ -129,6 +126,7 @@
#include "archive_string.h"
#include "archive_entry.h"
#include "archive_private.h"
+#include "archive_write_disk_private.h"
=20
#ifndef O_BINARY
#define O_BINARY 0
@@ -188,8 +186,8 @@
struct fixup_entry *current_fixup;
int64_t user_uid;
int skip_file_set;
- dev_t skip_file_dev;
- ino_t skip_file_ino;
+ int64_t skip_file_dev;
+ int64_t skip_file_ino;
time_t start_time;
=20
int64_t (*lookup_gid)(void *private, const char *gname, int64_t gid);
@@ -267,11 +265,6 @@
static int create_parent_dir(struct archive_write_disk *, char *);
static int older(struct stat *, struct archive_entry *);
static int restore_entry(struct archive_write_disk *);
-#ifdef HAVE_POSIX_ACL
-static int set_acl(struct archive_write_disk *, int fd, const char *, stru=
ct archive_acl *,
- acl_type_t, int archive_entry_acl_type, const char *tn);
-#endif
-static int set_acls(struct archive_write_disk *, int fd, const char *, str=
uct archive_acl *);
static int set_mac_metadata(struct archive_write_disk *, const char *,
const void *, size_t);
static int set_xattrs(struct archive_write_disk *);
@@ -570,6 +563,7 @@
=20
if (a->deferred & TODO_ACLS) {
fe =3D current_fixup(a, archive_entry_pathname(entry));
+ fe->fixup |=3D TODO_ACLS;
archive_acl_copy(&fe->acl, archive_entry_acl(entry));
}
=20
@@ -878,7 +872,7 @@
* ACLs that prevent attribute changes (including time).
*/
if (a->todo & TODO_ACLS) {
- int r2 =3D set_acls(a, a->fd,
+ int r2 =3D archive_write_disk_set_acls(&a->archive, a->fd,
archive_entry_pathname(a->entry),
archive_entry_acl(a->entry));
if (r2 < ret) ret =3D r2;
@@ -950,12 +944,12 @@
int64_t
archive_write_disk_uid(struct archive *_a, const char *name, int64_t id)
{
- struct archive_write_disk *a =3D (struct archive_write_disk *)_a;
- archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
- ARCHIVE_STATE_ANY, "archive_write_disk_uid");
- if (a->lookup_uid)
- return (a->lookup_uid)(a->lookup_uid_data, name, id);
- return (id);
+ struct archive_write_disk *a =3D (struct archive_write_disk *)_a;
+ archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
+ ARCHIVE_STATE_ANY, "archive_write_disk_uid");
+ if (a->lookup_uid)
+ return (a->lookup_uid)(a->lookup_uid_data, name, id);
+ return (id);
}
=20
/*
@@ -1143,9 +1137,10 @@
=20
/* If it's our archive, we're done. */
if (a->skip_file_set &&
- a->st.st_dev =3D=3D a->skip_file_dev &&
- a->st.st_ino =3D=3D a->skip_file_ino) {
- archive_set_error(&a->archive, 0, "Refusing to overwrite archive");
+ a->st.st_dev =3D=3D (dev_t)a->skip_file_dev &&
+ a->st.st_ino =3D=3D (ino_t)a->skip_file_ino) {
+ archive_set_error(&a->archive, 0,
+ "Refusing to overwrite archive");
return (ARCHIVE_FAILED);
}
=20
@@ -1163,7 +1158,7 @@
/* A dir is in the way of a non-dir, rmdir it. */
if (rmdir(a->name) !=3D 0) {
archive_set_error(&a->archive, errno,
- "Can't remove already-existing dir");
+ "Can't replace existing directory with non-directory");
return (ARCHIVE_FAILED);
}
/* Try again. */
@@ -1380,7 +1375,8 @@
if (p->fixup & TODO_MODE_BASE)
chmod(p->name, p->mode);
if (p->fixup & TODO_ACLS)
- set_acls(a, -1, p->name, &p->acl);
+ archive_write_disk_set_acls(&a->archive,
+ -1, p->name, &p->acl);
if (p->fixup & TODO_FFLAGS)
set_fflags_platform(a, -1, p->name,
p->mode, p->fflags_set, 0);
@@ -2529,7 +2525,7 @@
}
written =3D write(fd, metadata, metadata_size);
close(fd);
- if (written !=3D metadata_size
+ if ((size_t)written !=3D metadata_size
|| copyfile(tmp.s, pathname, 0,
COPYFILE_UNPACK | COPYFILE_NOFOLLOW
| COPYFILE_ACL | COPYFILE_XATTR)) {
@@ -2542,125 +2538,6 @@
}
#endif
=20
-#ifndef HAVE_POSIX_ACL
-/* Default empty function body to satisfy mainline code. */
-static int
-set_acls(struct archive_write_disk *a, int fd, const char *name,
- struct archive_acl *aacl)
-{
- (void)a; /* UNUSED */
- (void)fd; /* UNUSED */
- (void)name; /* UNUSED */
- (void)aacl; /* UNUSED */
- return (ARCHIVE_OK);
-}
-
-#else
-
-/*
- * XXX TODO: What about ACL types other than ACCESS and DEFAULT?
- */
-static int
-set_acls(struct archive_write_disk *a, int fd, const char *name,
- struct archive_acl *abstract_acl)
-{
- int ret;
-
- ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_ACCESS,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS, "access");
- if (ret !=3D ARCHIVE_OK)
- return (ret);
- ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_DEFAULT,
- ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, "default");
- return (ret);
-}
-
-
-static int
-set_acl(struct archive_write_disk *a, int fd, const char *name,
- struct archive_acl *abstract_acl,
- acl_type_t acl_type, int ae_requested_type, const char *tname)
-{
- acl_t acl;
- acl_entry_t acl_entry;
- acl_permset_t acl_permset;
- int ret;
- int ae_type, ae_permset, ae_tag, ae_id;
- uid_t ae_uid;
- gid_t ae_gid;
- const char *ae_name;
- int entries;
-
- ret =3D ARCHIVE_OK;
- entries =3D archive_acl_reset(abstract_acl, ae_requested_type);
- if (entries =3D=3D 0)
- return (ARCHIVE_OK);
- acl =3D acl_init(entries);
- while (archive_acl_next(&a->archive, abstract_acl,
- ae_requested_type, &ae_type, &ae_permset, &ae_tag, &ae_id,
- &ae_name) =3D=3D ARCHIVE_OK) {
- acl_create_entry(&acl, &acl_entry);
-
- switch (ae_tag) {
- case ARCHIVE_ENTRY_ACL_USER:
- acl_set_tag_type(acl_entry, ACL_USER);
- ae_uid =3D archive_write_disk_uid(&a->archive,
- ae_name, ae_id);
- acl_set_qualifier(acl_entry, &ae_uid);
- break;
- case ARCHIVE_ENTRY_ACL_GROUP:
- acl_set_tag_type(acl_entry, ACL_GROUP);
- ae_gid =3D archive_write_disk_gid(&a->archive,
- ae_name, ae_id);
- acl_set_qualifier(acl_entry, &ae_gid);
- break;
- case ARCHIVE_ENTRY_ACL_USER_OBJ:
- acl_set_tag_type(acl_entry, ACL_USER_OBJ);
- break;
- case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
- acl_set_tag_type(acl_entry, ACL_GROUP_OBJ);
- break;
- case ARCHIVE_ENTRY_ACL_MASK:
- acl_set_tag_type(acl_entry, ACL_MASK);
- break;
- case ARCHIVE_ENTRY_ACL_OTHER:
- acl_set_tag_type(acl_entry, ACL_OTHER);
- break;
- default:
- /* XXX */
- break;
- }
-
- acl_get_permset(acl_entry, &acl_permset);
- acl_clear_perms(acl_permset);
- if (ae_permset & ARCHIVE_ENTRY_ACL_EXECUTE)
- acl_add_perm(acl_permset, ACL_EXECUTE);
- if (ae_permset & ARCHIVE_ENTRY_ACL_WRITE)
- acl_add_perm(acl_permset, ACL_WRITE);
- if (ae_permset & ARCHIVE_ENTRY_ACL_READ)
- acl_add_perm(acl_permset, ACL_READ);
- }
-
- /* Try restoring the ACL through 'fd' if we can. */
-#if HAVE_ACL_SET_FD
- if (fd >=3D 0 && acl_type =3D=3D ACL_TYPE_ACCESS && acl_set_fd(fd, acl) =
=3D=3D 0)
- ret =3D ARCHIVE_OK;
- else
-#else
-#if HAVE_ACL_SET_FD_NP
- if (fd >=3D 0 && acl_set_fd_np(fd, acl, acl_type) =3D=3D 0)
- ret =3D ARCHIVE_OK;
- else
-#endif
-#endif
- if (acl_set_file(name, acl_type, acl) !=3D 0) {
- archive_set_error(&a->archive, errno, "Failed to set %s acl", tname);
- ret =3D ARCHIVE_WARN;
- }
- acl_free(acl);
- return (ret);
-}
-#endif
=20
#if HAVE_LSETXATTR || HAVE_LSETEA
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_private.h
--- a/head/contrib/libarchive/libarchive/archive_write_disk_private.h Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_private.h Fri A=
ug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_private=
.h 228763 2011-12-21 11:13:29Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_private=
.h 238909 2012-07-30 14:47:35Z mm $
*/
=20
#ifndef __LIBARCHIVE_BUILD
@@ -33,6 +33,11 @@
#ifndef ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED
#define ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED
=20
+#include "archive_acl_private.h"
+
struct archive_write_disk;
=20
+int
+archive_write_disk_set_acls(struct archive *, int /* fd */, const char * /=
* pathname */, struct archive_acl *);
+
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_set_standard_lookup.c
--- a/head/contrib/libarchive/libarchive/archive_write_disk_set_standard_lo=
okup.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_set_standard_lo=
okup.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_=
set_standard_lookup.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_=
set_standard_lookup.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -122,6 +122,7 @@
char _buffer[128];
size_t bufsize =3D 128;
char *buffer =3D _buffer;
+ char *allocated =3D NULL;
struct group grent, *result;
int r;
=20
@@ -133,16 +134,15 @@
if (r !=3D ERANGE)
break;
bufsize *=3D 2;
- if (buffer !=3D _buffer)
- free(buffer);
- buffer =3D malloc(bufsize);
- if (buffer =3D=3D NULL)
+ free(allocated);
+ allocated =3D malloc(bufsize);
+ if (allocated =3D=3D NULL)
break;
+ buffer =3D allocated;
}
if (result !=3D NULL)
gid =3D result->gr_gid;
- if (buffer !=3D _buffer)
- free(buffer);
+ free(allocated);
}
# else /* HAVE_GETGRNAM_R */
{
@@ -158,7 +158,7 @@
#else
#error No way to perform gid lookups on this platform
#endif
- b->id =3D gid;
+ b->id =3D (gid_t)gid;
=20
return (gid);
}
@@ -192,6 +192,7 @@
char _buffer[128];
size_t bufsize =3D 128;
char *buffer =3D _buffer;
+ char *allocated =3D NULL;
struct passwd pwent, *result;
int r;
=20
@@ -203,16 +204,15 @@
if (r !=3D ERANGE)
break;
bufsize *=3D 2;
- if (buffer !=3D _buffer)
- free(buffer);
- buffer =3D malloc(bufsize);
- if (buffer =3D=3D NULL)
+ free(allocated);
+ allocated =3D malloc(bufsize);
+ if (allocated =3D=3D NULL)
break;
+ buffer =3D allocated;
}
if (result !=3D NULL)
uid =3D result->pw_uid;
- if (buffer !=3D _buffer)
- free(buffer);
+ free(allocated);
}
# else /* HAVE_GETPWNAM_R */
{
@@ -228,7 +228,7 @@
#else
#error No way to look up uids on this platform
#endif
- b->id =3D uid;
+ b->id =3D (uid_t)uid;
=20
return (uid);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_filter.3
--- a/head/contrib/libarchive/libarchive/archive_write_filter.3 Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_filter.3 Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_FILTER 3
.Os
.Sh NAME
@@ -36,6 +36,8 @@
.Nm archive_write_add_filter_none ,
.Nm archive_write_add_filter_program ,
.Nm archive_write_add_filter_xz
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_finish_entry.3
--- a/head/contrib/libarchive/libarchive/archive_write_finish_entry.3 Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_finish_entry.3 Fri A=
ug 10 14:19:25 2012 +0300
@@ -22,14 +22,16 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_FINISH_ENTRY 3
.Os
.Sh NAME
.Nm archive_write_finish_entry
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_format.3
--- a/head/contrib/libarchive/libarchive/archive_write_format.3 Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_format.3 Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_FORMAT 3
.Os
.Sh NAME
@@ -35,6 +35,8 @@
.Nm archive_write_set_format_shar_dump ,
.Nm archive_write_set_format_ustar
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_free.3
--- a/head/contrib/libarchive/libarchive/archive_write_free.3 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_free.3 Fri Aug 10 14=
:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_FREE 3
.Os
.Sh NAME
@@ -32,6 +32,8 @@
.Nm archive_write_finish ,
.Nm archive_write_free
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_header.3
--- a/head/contrib/libarchive/libarchive/archive_write_header.3 Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_header.3 Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,12 +24,14 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_HEADER 3
.Os
.Sh NAME
.Nm archive_write_header
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_new.3
--- a/head/contrib/libarchive/libarchive/archive_write_new.3 Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_new.3 Fri Aug 10 14:=
19:25 2012 +0300
@@ -24,12 +24,14 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 23, 2011
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_NEW 3
.Os
.Sh NAME
.Nm archive_write_new
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_open.3
--- a/head/contrib/libarchive/libarchive/archive_write_open.3 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_open.3 Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,10 +22,10 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd March 23, 2011
-.Dt ARCHIVE_WRITE 3
+.Dd February 2, 2012
+.Dt ARCHIVE_WRITE_OPEN 3
.Os
.Sh NAME
.Nm archive_write_open ,
@@ -34,6 +34,8 @@
.Nm archive_write_open_filename ,
.Nm archive_write_open_memory
.Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.In archive.h
.Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_open_filename.c
--- a/head/contrib/libarchive/libarchive/archive_write_open_filename.c Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_open_filename.c Fri =
Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_open_=
filename.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_open_=
filename.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
@@ -54,16 +54,13 @@
=20
struct write_file_data {
int fd;
- char mbs_filename;
- union {
- char m[1];
- wchar_t w[1];
- } filename; /* Must be last! */
+ struct archive_mstring filename;
};
=20
static int file_close(struct archive *, void *);
static int file_open(struct archive *, void *);
static ssize_t file_write(struct archive *, void *, const void *buff, size=
_t);
+static int open_filename(struct archive *, int, const void *);
=20
int
archive_write_open_file(struct archive *a, const char *filename)
@@ -74,76 +71,69 @@
int
archive_write_open_filename(struct archive *a, const char *filename)
{
- struct write_file_data *mine;
=20
if (filename =3D=3D NULL || filename[0] =3D=3D '\0')
return (archive_write_open_fd(a, 1));
=20
- mine =3D (struct write_file_data *)malloc(sizeof(*mine) + strlen(filename=
));
- if (mine =3D=3D NULL) {
- archive_set_error(a, ENOMEM, "No memory");
- return (ARCHIVE_FATAL);
- }
- strcpy(mine->filename.m, filename);
- mine->mbs_filename =3D 1;
- mine->fd =3D -1;
- return (archive_write_open(a, mine,
- file_open, file_write, file_close));
+ return (open_filename(a, 1, filename));
}
=20
int
archive_write_open_filename_w(struct archive *a, const wchar_t *filename)
{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- struct write_file_data *mine;
=20
if (filename =3D=3D NULL || filename[0] =3D=3D L'\0')
return (archive_write_open_fd(a, 1));
=20
- mine =3D malloc(sizeof(*mine) + wcslen(filename) * sizeof(wchar_t));
+ return (open_filename(a, 0, filename));
+}
+
+static int
+open_filename(struct archive *a, int mbs_fn, const void *filename)
+{
+ struct write_file_data *mine;
+ int r;
+
+ mine =3D (struct write_file_data *)calloc(1, sizeof(*mine));
if (mine =3D=3D NULL) {
archive_set_error(a, ENOMEM, "No memory");
return (ARCHIVE_FATAL);
}
- wcscpy(mine->filename.w, filename);
- mine->mbs_filename =3D 0;
+ if (mbs_fn)
+ r =3D archive_mstring_copy_mbs(&mine->filename, filename);
+ else
+ r =3D archive_mstring_copy_wcs(&mine->filename, filename);
+ if (r < 0) {
+ if (errno =3D=3D ENOMEM) {
+ archive_set_error(a, ENOMEM, "No memory");
+ return (ARCHIVE_FATAL);
+ }
+ if (mbs_fn)
+ archive_set_error(a, ARCHIVE_ERRNO_MISC,
+ "Can't convert '%s' to WCS",
+ (const char *)filename);
+ else
+ archive_set_error(a, ARCHIVE_ERRNO_MISC,
+ "Can't convert '%S' to MBS",
+ (const wchar_t *)filename);
+ return (ARCHIVE_FAILED);
+ }
mine->fd =3D -1;
return (archive_write_open(a, mine,
file_open, file_write, file_close));
-#else
- /*
- * POSIX system does not support a wchar_t interface for
- * open() system call, so we have to translate a wchar_t
- * filename to multi-byte one and use it.
- */
- struct archive_string fn;
- int r;
-
- if (filename =3D=3D NULL || filename[0] =3D=3D L'\0')
- return (archive_write_open_fd(a, 1));
-
- archive_string_init(&fn);
- if (archive_string_append_from_wcs(&fn, filename,
- wcslen(filename)) !=3D 0) {
- archive_set_error(a, EINVAL,
- "Failed to convert a wide-character filename to"
- " a multi-byte filename");
- archive_string_free(&fn);
- return (ARCHIVE_FATAL);
- }
- r =3D archive_write_open_filename(a, fn.s);
- archive_string_free(&fn);
- return (r);
-#endif
}
=20
-
static int
file_open(struct archive *a, void *client_data)
{
int flags;
struct write_file_data *mine;
struct stat st;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ wchar_t *fullpath;
+#endif
+ const wchar_t *wcs;
+ const char *mbs;
=20
mine =3D (struct write_file_data *)client_data;
flags =3D O_WRONLY | O_CREAT | O_TRUNC | O_BINARY;
@@ -151,46 +141,51 @@
/*
* Open the file.
*/
- if (mine->mbs_filename) {
- mine->fd =3D open(mine->filename.m, flags, 0666);
- if (mine->fd < 0) {
- archive_set_error(a, errno, "Failed to open '%s'",
- mine->filename.m);
- return (ARCHIVE_FATAL);
+ mbs =3D NULL; wcs =3D NULL;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ if (archive_mstring_get_wcs(a, &mine->filename, &wcs) !=3D 0) {
+ if (errno =3D=3D ENOMEM)
+ archive_set_error(a, errno, "No memory");
+ else {
+ archive_mstring_get_mbs(a, &mine->filename, &mbs);
+ archive_set_error(a, errno,
+ "Can't convert '%s' to WCS", mbs);
}
+ return (ARCHIVE_FATAL);
+ }
+ fullpath =3D __la_win_permissive_name_w(wcs);
+ if (fullpath !=3D NULL) {
+ mine->fd =3D _wopen(fullpath, flags, 0666);
+ free(fullpath);
+ } else
+ mine->fd =3D _wopen(wcs, flags, 0666);
+#else
+ if (archive_mstring_get_mbs(a, &mine->filename, &mbs) !=3D 0) {
+ if (errno =3D=3D ENOMEM)
+ archive_set_error(a, errno, "No memory");
+ else {
+ archive_mstring_get_wcs(a, &mine->filename, &wcs);
+ archive_set_error(a, errno,
+ "Can't convert '%S' to MBS", wcs);
+ }
+ return (ARCHIVE_FATAL);
+ }
+ mine->fd =3D open(mbs, flags, 0666);
+#endif
+ if (mine->fd < 0) {
+ if (mbs !=3D NULL)
+ archive_set_error(a, errno, "Failed to open '%s'", mbs);
+ else
+ archive_set_error(a, errno, "Failed to open '%S'", wcs);
+ return (ARCHIVE_FATAL);
+ }
=20
- if (fstat(mine->fd, &st) !=3D 0) {
- archive_set_error(a, errno, "Couldn't stat '%s'",
- mine->filename.m);
- return (ARCHIVE_FATAL);
- }
- } else {
-#if defined(_WIN32) && !defined(__CYGWIN__)
- mine->fd =3D _wopen(mine->filename.w, flags, 0666);
- if (mine->fd < 0 && errno =3D=3D ENOENT) {
- wchar_t *fullpath;
- fullpath =3D __la_win_permissive_name_w(mine->filename.w);
- if (fullpath !=3D NULL) {
- mine->fd =3D _wopen(fullpath, flags, 0666);
- free(fullpath);
- }
- }
- if (mine->fd < 0) {
- archive_set_error(a, errno, "Failed to open '%S'",
- mine->filename.w);
- return (ARCHIVE_FATAL);
- }
-
- if (fstat(mine->fd, &st) !=3D 0) {
- archive_set_error(a, errno, "Couldn't stat '%S'",
- mine->filename.w);
- return (ARCHIVE_FATAL);
- }
-#else
- archive_set_error(a, ARCHIVE_ERRNO_MISC,
- "Unexpedted operation in archive_write_open_filename");
+ if (fstat(mine->fd, &st) !=3D 0) {
+ if (mbs !=3D NULL)
+ archive_set_error(a, errno, "Couldn't stat '%s'", mbs);
+ else
+ archive_set_error(a, errno, "Couldn't stat '%S'", wcs);
return (ARCHIVE_FATAL);
-#endif
}
=20
/*
@@ -218,7 +213,8 @@
}
=20
static ssize_t
-file_write(struct archive *a, void *client_data, const void *buff, size_t =
length)
+file_write(struct archive *a, void *client_data, const void *buff,
+ size_t length)
{
struct write_file_data *mine;
ssize_t bytesWritten;
@@ -243,6 +239,7 @@
=20
(void)a; /* UNUSED */
close(mine->fd);
+ archive_mstring_clean(&mine->filename);
free(mine);
return (ARCHIVE_OK);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_private.h
--- a/head/contrib/libarchive/libarchive/archive_write_private.h Mon Jul 30=
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_private.h Fri Aug 10=
14:19:25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_private.h 23=
2153 2012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_private.h 23=
8856 2012-07-28 06:38:44Z mm $
*/
=20
#ifndef __LIBARCHIVE_BUILD
@@ -72,7 +72,7 @@
=20
/* Dev/ino of the archive being written. */
int skip_file_set;
- dev_t skip_file_dev;
+ int64_t skip_file_dev;
int64_t skip_file_ino;
=20
/* Utility: Pointer to a block of nulls. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_7zip.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_7zip.c Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_7zip.c Fr=
i Aug 10 14:19:25 2012 +0300
@@ -199,7 +199,7 @@
/*
* Compressed data buffer.
*/
- unsigned char wbuff[1024 * 64];
+ unsigned char wbuff[512 * 20 * 6];
size_t wbuff_remaining;
=20
/*
@@ -498,7 +498,7 @@
if (archive_entry_filetype(entry) =3D=3D AE_IFLNK) {
ssize_t bytes;
const void *p =3D (const void *)archive_entry_symlink(entry);
- bytes =3D compress_out(a, p, file->size, ARCHIVE_Z_RUN);
+ bytes =3D compress_out(a, p, (size_t)file->size, ARCHIVE_Z_RUN);
if (bytes < 0)
return ((int)bytes);
zip->entry_crc32 =3D crc32(zip->entry_crc32, p, bytes);
@@ -580,11 +580,11 @@
} while (zip->stream.avail_in);
if (run =3D=3D ARCHIVE_Z_FINISH) {
uint64_t bytes =3D sizeof(zip->wbuff) - zip->stream.avail_out;
- if (write_to_temp(a, zip->wbuff, bytes) !=3D ARCHIVE_OK)
+ if (write_to_temp(a, zip->wbuff, (size_t)bytes) !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
if ((zip->crc32flg & ENCODED_CRC32) && bytes)
zip->encoded_crc32 =3D crc32(zip->encoded_crc32,
- zip->wbuff, bytes);
+ zip->wbuff, (unsigned)bytes);
}
=20
return (s);
@@ -599,7 +599,7 @@
zip =3D (struct _7zip *)a->format_data;
=20
if (s > zip->entry_bytes_remaining)
- s =3D zip->entry_bytes_remaining;
+ s =3D (size_t)zip->entry_bytes_remaining;
if (s =3D=3D 0 || zip->cur_file =3D=3D NULL)
return (0);
bytes =3D compress_out(a, buff, s, ARCHIVE_Z_RUN);
@@ -622,7 +622,7 @@
return (ARCHIVE_OK);
=20
while (zip->entry_bytes_remaining > 0) {
- s =3D zip->entry_bytes_remaining;
+ s =3D (size_t)zip->entry_bytes_remaining;
if (s > a->null_length)
s =3D a->null_length;
r =3D _7z_write_data(a, a->nulls, s);
@@ -1151,7 +1151,7 @@
struct _7zip *zip =3D (struct _7zip *)a->format_data;
struct file *file;
int r;
- uint8_t mask, byte;
+ uint8_t b, mask;
=20
/*
* Make Time Bools.
@@ -1188,23 +1188,23 @@
if (r < 0)
return (r);
=20
- byte =3D 0;
+ b =3D 0;
mask =3D 0x80;
file =3D zip->file_list.first;
for (;file !=3D NULL; file =3D file->next) {
if (file->flg & flg)
- byte |=3D mask;
+ b |=3D mask;
mask >>=3D 1;
if (mask =3D=3D 0) {
- r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+ r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
if (r < 0)
return (r);
mask =3D 0x80;
- byte =3D 0;
+ b =3D 0;
}
}
if (mask !=3D 0x80) {
- r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+ r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
if (r < 0)
return (r);
}
@@ -1240,7 +1240,7 @@
struct _7zip *zip =3D (struct _7zip *)a->format_data;
struct file *file;
int r;
- uint8_t mask, byte;
+ uint8_t b, mask;
=20
/*
* Make FilesInfo.
@@ -1288,23 +1288,23 @@
if (r < 0)
return (r);
=20
- byte =3D 0;
+ b =3D 0;
mask =3D 0x80;
file =3D zip->file_list.first;
for (;file !=3D NULL; file =3D file->next) {
if (file->size =3D=3D 0)
- byte |=3D mask;
+ b |=3D mask;
mask >>=3D 1;
if (mask =3D=3D 0) {
- r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+ r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
if (r < 0)
return (r);
mask =3D 0x80;
- byte =3D 0;
+ b =3D 0;
}
}
if (mask !=3D 0x80) {
- r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+ r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
if (r < 0)
return (r);
}
@@ -1321,25 +1321,25 @@
if (r < 0)
return (r);
=20
- byte =3D 0;
+ b =3D 0;
mask =3D 0x80;
file =3D zip->file_list.first;
for (;file !=3D NULL; file =3D file->next) {
if (file->size)
continue;
if (!file->dir)
- byte |=3D mask;
+ b |=3D mask;
mask >>=3D 1;
if (mask =3D=3D 0) {
- r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+ r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
if (r < 0)
return (r);
mask =3D 0x80;
- byte =3D 0;
+ b =3D 0;
}
}
if (mask !=3D 0x80) {
- r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+ r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
if (r < 0)
return (r);
}
@@ -1492,6 +1492,7 @@
=20
if (0 > archive_entry_pathname_l(entry, &u16, &u16len, zip->sconv)) {
if (errno =3D=3D ENOMEM) {
+ free(file);
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for UTF-16LE");
return (ARCHIVE_FATAL);
@@ -1503,6 +1504,7 @@
}
file->utf16name =3D malloc(u16len + 2);
if (file->utf16name =3D=3D NULL) {
+ free(file);
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for Name");
return (ARCHIVE_FATAL);
@@ -1676,10 +1678,10 @@
* a non-const pointer. */
strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
strm->avail_in =3D lastrm->avail_in;
- strm->total_in =3D lastrm->total_in;
+ strm->total_in =3D (uLong)lastrm->total_in;
strm->next_out =3D lastrm->next_out;
strm->avail_out =3D lastrm->avail_out;
- strm->total_out =3D lastrm->total_out;
+ strm->total_out =3D (uLong)lastrm->total_out;
if (deflateInit2(strm, level, Z_DEFLATED,
(withheader)?15:-15,
8, Z_DEFAULT_STRATEGY) !=3D Z_OK) {
@@ -1709,10 +1711,10 @@
* a non-const pointer. */
strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
strm->avail_in =3D lastrm->avail_in;
- strm->total_in =3D lastrm->total_in;
+ strm->total_in =3D (uLong)lastrm->total_in;
strm->next_out =3D lastrm->next_out;
strm->avail_out =3D lastrm->avail_out;
- strm->total_out =3D lastrm->total_out;
+ strm->total_out =3D (uLong)lastrm->total_out;
r =3D deflate(strm,
(action =3D=3D ARCHIVE_Z_FINISH)? Z_FINISH: Z_NO_FLUSH);
lastrm->next_in =3D strm->next_in;
@@ -1914,6 +1916,7 @@
if (level > 6)
level =3D 6;
if (lzma_lzma_preset(&lzma_opt, level)) {
+ free(strm);
lastrm->real_stream =3D NULL;
archive_set_error(a, ENOMEM,
"Internal error initializing compression library");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_ar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_ar.c Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_ar.c Fri =
Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ar.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -366,7 +366,7 @@
=20
ar =3D (struct ar_w *)a->format_data;
if (s > ar->entry_bytes_remaining)
- s =3D ar->entry_bytes_remaining;
+ s =3D (size_t)ar->entry_bytes_remaining;
=20
if (ar->is_strtab > 0) {
if (ar->has_strtab > 0) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_cpio.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_cpio.c Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_cpio.c Fr=
i Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -189,7 +189,7 @@
=20
/* Don't store a mapping if we don't need to. */
if (archive_entry_nlink(entry) < 2) {
- return ++cpio->ino_next;
+ return (int)(++cpio->ino_next);
}
=20
/* Look up old ino; if we have it, this is a hardlink
@@ -200,7 +200,7 @@
}
=20
/* Assign a new index number. */
- ino_new =3D ++cpio->ino_next;
+ ino_new =3D (int)(++cpio->ino_next);
=20
/* Ensure space for the new mapping. */
if (cpio->ino_list_size <=3D cpio->ino_list_next) {
@@ -421,7 +421,7 @@
=20
cpio =3D (struct cpio *)a->format_data;
if (s > cpio->entry_bytes_remaining)
- s =3D cpio->entry_bytes_remaining;
+ s =3D (size_t)cpio->entry_bytes_remaining;
=20
ret =3D __archive_write_output(a, buff, s);
cpio->entry_bytes_remaining -=3D s;
@@ -457,7 +457,7 @@
if (s =3D=3D 0)
return (v);
v =3D format_octal_recursive(v, p+1, s-1);
- *p =3D '0' + (v & 7);
+ *p =3D '0' + ((char)v & 7);
return (v >> 3);
}
=20
@@ -495,5 +495,6 @@
struct cpio *cpio;
=20
cpio =3D (struct cpio *)a->format_data;
- return (__archive_write_nulls(a, cpio->entry_bytes_remaining));
+ return (__archive_write_nulls(a,
+ (size_t)cpio->entry_bytes_remaining));
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_cpio_newc.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc=
.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc=
.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio_newc.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio_newc.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -350,7 +350,7 @@
}
=20
cpio->entry_bytes_remaining =3D archive_entry_size(entry);
- cpio->padding =3D PAD4(cpio->entry_bytes_remaining);
+ cpio->padding =3D (int)PAD4(cpio->entry_bytes_remaining);
=20
/* Write the symlink now. */
if (p !=3D NULL && *p !=3D '\0') {
@@ -380,7 +380,7 @@
=20
cpio =3D (struct cpio *)a->format_data;
if (s > cpio->entry_bytes_remaining)
- s =3D cpio->entry_bytes_remaining;
+ s =3D (size_t)cpio->entry_bytes_remaining;
=20
ret =3D __archive_write_output(a, buff, s);
cpio->entry_bytes_remaining -=3D s;
@@ -453,5 +453,6 @@
struct cpio *cpio;
=20
cpio =3D (struct cpio *)a->format_data;
- return (__archive_write_nulls(a, cpio->entry_bytes_remaining + cpio->padd=
ing));
+ return (__archive_write_nulls(a,
+ (size_t)cpio->entry_bytes_remaining + cpio->padding));
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_gnutar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c =
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c =
Fri Aug 10 14:19:25 2012 +0300
@@ -247,8 +247,8 @@
int ret;
=20
gnutar =3D (struct gnutar *)a->format_data;
- ret =3D __archive_write_nulls(a,
- gnutar->entry_bytes_remaining + gnutar->entry_padding);
+ ret =3D __archive_write_nulls(a, (size_t)
+ (gnutar->entry_bytes_remaining + gnutar->entry_padding));
gnutar->entry_bytes_remaining =3D gnutar->entry_padding =3D 0;
return (ret);
}
@@ -261,7 +261,7 @@
=20
gnutar =3D (struct gnutar *)a->format_data;
if (s > gnutar->entry_bytes_remaining)
- s =3D gnutar->entry_bytes_remaining;
+ s =3D (size_t)gnutar->entry_bytes_remaining;
ret =3D __archive_write_output(a, buff, s);
gnutar->entry_bytes_remaining -=3D s;
if (ret !=3D ARCHIVE_OK)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_iso9660.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c=
Fri Aug 10 14:19:25 2012 +0300
@@ -1698,7 +1698,7 @@
size_t ns;
int ret;
=20
- ns =3D csize % LOGICAL_BLOCK_SIZE;
+ ns =3D (size_t)(csize % LOGICAL_BLOCK_SIZE);
if (ns !=3D 0)
ret =3D write_null(a, LOGICAL_BLOCK_SIZE - ns);
else
@@ -1725,8 +1725,8 @@
struct content *con;
size_t ts;
=20
- ts =3D MULTI_EXTENT_SIZE - LOGICAL_BLOCK_SIZE -
- iso9660->cur_file->cur_content->size;
+ ts =3D (size_t)(MULTI_EXTENT_SIZE - LOGICAL_BLOCK_SIZE -
+ iso9660->cur_file->cur_content->size);
=20
if (iso9660->zisofs.detect_magic)
zisofs_detect_magic(a, buff, ts);
@@ -1746,9 +1746,9 @@
return (ARCHIVE_FATAL);
=20
/* Compute the logical block number. */
- iso9660->cur_file->cur_content->blocks =3D
- (iso9660->cur_file->cur_content->size
- + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
+ iso9660->cur_file->cur_content->blocks =3D (int)
+ ((iso9660->cur_file->cur_content->size
+ + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS);
=20
/*
* Make next extent.
@@ -1796,7 +1796,7 @@
if (archive_entry_filetype(iso9660->cur_file->entry) !=3D AE_IFREG)
return (0);
if (s > iso9660->bytes_remaining)
- s =3D iso9660->bytes_remaining;
+ s =3D (size_t)iso9660->bytes_remaining;
if (s =3D=3D 0)
return (0);
=20
@@ -1838,9 +1838,9 @@
return (ARCHIVE_FATAL);
=20
/* Compute the logical block number. */
- iso9660->cur_file->cur_content->blocks =3D
- (iso9660->cur_file->cur_content->size
- + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
+ iso9660->cur_file->cur_content->blocks =3D (int)
+ ((iso9660->cur_file->cur_content->size
+ + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS);
=20
/* Add the current file to data file list. */
isofile_add_data_file(iso9660, iso9660->cur_file);
@@ -2244,7 +2244,7 @@
onepad =3D 0;
if (vdc =3D=3D VDC_UCS2) {
struct iso9660 *iso9660 =3D a->format_data;
- if (archive_strncpy_in_locale(&iso9660->utf16be, s, strlen(s),
+ if (archive_strncpy_l(&iso9660->utf16be, s, strlen(s),
iso9660->sconv_to_utf16be) !=3D 0 && errno =3D=3D ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for UTF-16BE");
@@ -2547,7 +2547,7 @@
set_digit(p+10, 2, tm.tm_min);
set_digit(p+12, 2, tm.tm_sec);
set_digit(p+14, 2, 0);
- set_num_712(p+16, get_gmoffset(&tm)/(60*15));
+ set_num_712(p+16, (char)(get_gmoffset(&tm)/(60*15)));
}
=20
static void
@@ -2569,7 +2569,7 @@
set_num_711(p+3, tm.tm_hour);
set_num_711(p+4, tm.tm_min);
set_num_711(p+5, tm.tm_sec);
- set_num_712(p+6, get_gmoffset(&tm)/(60*15));
+ set_num_712(p+6, (char)(get_gmoffset(&tm)/(60*15)));
}
=20
=20
@@ -2941,8 +2941,8 @@
bp =3D extra_next_record(&ctl, length);
if (bp !=3D NULL) {
mode_t mode;
- uid_t uid;
- gid_t gid;
+ int64_t uid;
+ int64_t gid;
=20
mode =3D archive_entry_mode(file->entry);
uid =3D archive_entry_uid(file->entry);
@@ -2975,8 +2975,8 @@
/* file links (stat.st_nlink) */
set_num_733(bp+13,
archive_entry_nlink(file->entry));
- set_num_733(bp+21, uid);
- set_num_733(bp+29, gid);
+ set_num_733(bp+21, (uint32_t)uid);
+ set_num_733(bp+29, (uint32_t)gid);
/* File Serial Number */
if (pxent->dir)
set_num_733(bp+37, pxent->dir_location);
@@ -3357,8 +3357,8 @@
bp[3] =3D length;
bp[4] =3D 1; /* version */
dev =3D (uint64_t)archive_entry_rdev(file->entry);
- set_num_733(bp + 5, dev >> 32);
- set_num_733(bp + 13, dev & 0xFFFFFFFF);
+ set_num_733(bp + 5, (uint32_t)(dev >> 32));
+ set_num_733(bp + 13, (uint32_t)(dev & 0xFFFFFFFF));
bp +=3D length;
}
extra_tell_used_size(&ctl, length);
@@ -3492,7 +3492,7 @@
set_num_733(bp+11,
xisoent->dir_block * LOGICAL_BLOCK_SIZE);
else
- set_num_733(bp+11, file->cur_content->size);
+ set_num_733(bp+11, (uint32_t)file->cur_content->size);
/* Recording Date and Time */
/* NOTE:
* If a file type is symbolic link, you are seeing this
@@ -3669,7 +3669,7 @@
iso9660->wbuff_tail =3D iso9660->wbuff_offset + used;
if (iso9660->wbuff_offset < iso9660->wbuff_written) {
if (used > 0 &&
- write_to_temp(a, iso9660->wbuff, used) !=3D ARCHIVE_OK)
+ write_to_temp(a, iso9660->wbuff, (size_t)used) !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
iso9660->wbuff_offset =3D iso9660->wbuff_written;
lseek(iso9660->temp_fd, iso9660->wbuff_offset, SEEK_SET);
@@ -3688,12 +3688,12 @@
iso9660->wbuff_offset =3D off;
iso9660->wbuff_remaining =3D sizeof(iso9660->wbuff);
} else if (off <=3D iso9660->wbuff_tail) {
- iso9660->wbuff_remaining =3D
- sizeof(iso9660->wbuff) - (off - iso9660->wbuff_offset);
+ iso9660->wbuff_remaining =3D (size_t)
+ (sizeof(iso9660->wbuff) - (off - iso9660->wbuff_offset));
} else {
ext_bytes =3D off - iso9660->wbuff_tail;
- iso9660->wbuff_remaining =3D sizeof(iso9660->wbuff)
- - (iso9660->wbuff_tail - iso9660->wbuff_offset);
+ iso9660->wbuff_remaining =3D (size_t)(sizeof(iso9660->wbuff)
+ - (iso9660->wbuff_tail - iso9660->wbuff_offset));
while (ext_bytes >=3D (int64_t)iso9660->wbuff_remaining) {
if (write_null(a, (size_t)iso9660->wbuff_remaining)
!=3D ARCHIVE_OK)
@@ -4814,13 +4814,19 @@
struct archive_wstring ws;
=20
if (wp !=3D NULL) {
+ int r;
archive_string_init(&ws);
archive_wstrcpy(&ws, wp);
cleanup_backslash_2(ws.s);
archive_string_empty(&(file->parentdir));
- archive_string_append_from_wcs(&(file->parentdir),
+ r =3D archive_string_append_from_wcs(&(file->parentdir),
ws.s, ws.length);
archive_wstring_free(&ws);
+ if (r < 0 && errno =3D=3D ENOMEM) {
+ archive_set_error(&a->archive, ENOMEM,
+ "Can't allocate memory");
+ return (ARCHIVE_FATAL);
+ }
}
}
#endif
@@ -4923,14 +4929,20 @@
struct archive_wstring ws;
=20
if (wp !=3D NULL) {
+ int r;
archive_string_init(&ws);
archive_wstrcpy(&ws, wp);
cleanup_backslash_2(ws.s);
archive_string_empty(&(file->symlink));
- archive_string_append_from_wcs(
+ r =3D archive_string_append_from_wcs(
&(file->symlink),
ws.s, ws.length);
archive_wstring_free(&ws);
+ if (r < 0 && errno =3D=3D ENOMEM) {
+ archive_set_error(&a->archive, ENOMEM,
+ "Can't allocate memory");
+ return (ARCHIVE_FATAL);
+ }
}
}
#endif
@@ -5426,8 +5438,8 @@
iso9660->total_file_block =3D 0;
if ((isoent =3D iso9660->el_torito.catalog) !=3D NULL) {
isoent->file->content.location =3D location;
- block =3D (archive_entry_size(isoent->file->entry) +
- LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
+ block =3D (int)((archive_entry_size(isoent->file->entry) +
+ LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS);
location +=3D block;
iso9660->total_file_block +=3D block;
}
@@ -5435,7 +5447,7 @@
isoent->file->content.location =3D location;
size =3D fd_boot_image_size(iso9660->el_torito.media_type);
if (size =3D=3D 0)
- size =3D archive_entry_size(isoent->file->entry);
+ size =3D (size_t)archive_entry_size(isoent->file->entry);
block =3D (size + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
location +=3D block;
iso9660->total_file_block +=3D block;
@@ -6262,9 +6274,14 @@
* Get a length of MBS of a full-pathname.
*/
if ((int)np->file->basename_utf16.length > ffmax) {
- archive_strncpy_in_locale(&iso9660->mbs,
+ if (archive_strncpy_l(&iso9660->mbs,
(const char *)np->identifier, l,
- iso9660->sconv_from_utf16be);
+ iso9660->sconv_from_utf16be) !=3D 0 &&
+ errno =3D=3D ENOMEM) {
+ archive_set_error(&a->archive, errno,
+ "No memory");
+ return (ARCHIVE_FATAL);
+ }
np->mb_len =3D iso9660->mbs.length;
if (np->mb_len !=3D (int)np->file->basename.length)
weight =3D np->mb_len;
@@ -6364,7 +6381,7 @@
if (0x20 !=3D *s2++)
return (0x20
- *(const unsigned char *)(s2 - 1));
- } else if (p1->ext_len < p2->ext_len) {
+ } else if (p1->ext_len > p2->ext_len) {
s1 +=3D l;
l =3D p1->ext_len - p2->ext_len;
while (l--)
@@ -6452,7 +6469,7 @@
while (l--)
if (0 !=3D *s2++)
return (- *(const unsigned char *)(s2 - 1));
- } else if (p1->ext_len < p2->ext_len) {
+ } else if (p1->ext_len > p2->ext_len) {
s1 +=3D l;
l =3D p1->ext_len - p2->ext_len;
while (l--)
@@ -6622,7 +6639,7 @@
*/
static int
isoent_rr_move_dir(struct archive_write *a, struct isoent **rr_moved,
- struct isoent *isoent, struct isoent **newent)
+ struct isoent *curent, struct isoent **newent)
{
struct iso9660 *iso9660 =3D a->format_data;
struct isoent *rrmoved, *mvent, *np;
@@ -6648,40 +6665,40 @@
*rr_moved =3D rrmoved;
}
/*
- * Make a clone of isoent which is going to be relocated
+ * Make a clone of curent which is going to be relocated
* to rr_moved.
*/
- mvent =3D isoent_clone(isoent);
+ mvent =3D isoent_clone(curent);
if (mvent =3D=3D NULL) {
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory");
return (ARCHIVE_FATAL);
}
/* linking.. and use for creating "CL", "PL" and "RE" */
- mvent->rr_parent =3D isoent->parent;
- isoent->rr_child =3D mvent;
+ mvent->rr_parent =3D curent->parent;
+ curent->rr_child =3D mvent;
/*
- * Move subdirectories from the isoent to mvent
+ * Move subdirectories from the curent to mvent
*/
- if (isoent->children.first !=3D NULL) {
- *mvent->children.last =3D isoent->children.first;
- mvent->children.last =3D isoent->children.last;
+ if (curent->children.first !=3D NULL) {
+ *mvent->children.last =3D curent->children.first;
+ mvent->children.last =3D curent->children.last;
}
for (np =3D mvent->children.first; np !=3D NULL; np =3D np->chnext)
np->parent =3D mvent;
- mvent->children.cnt =3D isoent->children.cnt;
- isoent->children.cnt =3D 0;
- isoent->children.first =3D NULL;
- isoent->children.last =3D &isoent->children.first;
-
- if (isoent->subdirs.first !=3D NULL) {
- *mvent->subdirs.last =3D isoent->subdirs.first;
- mvent->subdirs.last =3D isoent->subdirs.last;
- }
- mvent->subdirs.cnt =3D isoent->subdirs.cnt;
- isoent->subdirs.cnt =3D 0;
- isoent->subdirs.first =3D NULL;
- isoent->subdirs.last =3D &isoent->subdirs.first;
+ mvent->children.cnt =3D curent->children.cnt;
+ curent->children.cnt =3D 0;
+ curent->children.first =3D NULL;
+ curent->children.last =3D &curent->children.first;
+
+ if (curent->subdirs.first !=3D NULL) {
+ *mvent->subdirs.last =3D curent->subdirs.first;
+ mvent->subdirs.last =3D curent->subdirs.last;
+ }
+ mvent->subdirs.cnt =3D curent->subdirs.cnt;
+ curent->subdirs.cnt =3D 0;
+ curent->subdirs.first =3D NULL;
+ curent->subdirs.last =3D &curent->subdirs.first;
=20
/*
* The mvent becomes a child of the rr_moved entry.
@@ -6694,7 +6711,7 @@
* has to set the flag as a file.
* See also RRIP 4.1.5.1 Description of the "CL" System Use Entry.
*/
- isoent->dir =3D 0;
+ curent->dir =3D 0;
=20
*newent =3D mvent;
=20
@@ -7408,7 +7425,8 @@
/* Mark file->zisofs to create RRIP 'ZF' Use Entry. */
file->zisofs.header_size =3D ZF_HEADER_SIZE >> 2;
file->zisofs.log2_bs =3D ZF_LOG2_BS;
- file->zisofs.uncompressed_size =3D archive_entry_size(file->entry);
+ file->zisofs.uncompressed_size =3D
+ (uint32_t)archive_entry_size(file->entry);
=20
/* Calculate a size of Block Pointers of zisofs. */
ceil =3D (file->zisofs.uncompressed_size + ZF_BLOCK_SIZE -1)
@@ -7436,13 +7454,14 @@
* file.
*/
tsize =3D ZF_HEADER_SIZE + bpsize;
- if (write_null(a, tsize) !=3D ARCHIVE_OK)
+ if (write_null(a, (size_t)tsize) !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
=20
/*
* Initialize some variables to make zisofs.
*/
- archive_le32enc(&(iso9660->zisofs.block_pointers[0]), tsize);
+ archive_le32enc(&(iso9660->zisofs.block_pointers[0]),
+ (uint32_t)tsize);
iso9660->zisofs.remaining =3D file->zisofs.uncompressed_size;
iso9660->zisofs.making =3D 1;
iso9660->zisofs.allzero =3D 1;
@@ -7471,7 +7490,7 @@
=20
entry_size =3D archive_entry_size(file->entry);
if ((int64_t)sizeof(iso9660->zisofs.magic_buffer) > entry_size)
- magic_max =3D entry_size;
+ magic_max =3D (int)entry_size;
else
magic_max =3D sizeof(iso9660->zisofs.magic_buffer);
=20
@@ -7647,7 +7666,7 @@
iso9660->zisofs.block_pointers_idx ++;
archive_le32enc(&(iso9660->zisofs.block_pointers[
iso9660->zisofs.block_pointers_idx]),
- iso9660->zisofs.total_size);
+ (uint32_t)iso9660->zisofs.total_size);
r =3D zisofs_init_zstream(a);
if (r !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
@@ -7776,9 +7795,9 @@
size_t ceil, xsize;
=20
/* Allocate block pointers buffer. */
- ceil =3D (zisofs->pz_uncompressed_size +
- (1LL << zisofs->pz_log2_bs) - 1)
- >> zisofs->pz_log2_bs;
+ ceil =3D (size_t)((zisofs->pz_uncompressed_size +
+ (((int64_t)1) << zisofs->pz_log2_bs) - 1)
+ >> zisofs->pz_log2_bs);
xsize =3D (ceil + 1) * 4;
if (zisofs->block_pointers =3D=3D NULL) {
size_t alloc =3D ((xsize >> 10) + 1) << 10;
@@ -7999,7 +8018,7 @@
fd =3D iso9660->temp_fd;
new_offset =3D wb_offset(a);
read_offset =3D file->content.offset_of_temp;
- remaining =3D file->content.size;
+ remaining =3D (size_t)file->content.size;
if (remaining > 1024 * 32)
rbuff_size =3D 1024 * 32;
else
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_mtree.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_mtree.c M=
on Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_mtree.c F=
ri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_mtree.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_mtree.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -389,13 +389,13 @@
else if (*p =3D=3D '/')
al =3D p - path;
}
- if (l =3D=3D -1)
+ if (l =3D=3D (size_t)-1)
goto alen;
size =3D p - path;
rp =3D p =3D path;
while (*p !=3D '\0') {
l =3D mbtowc(&wc, p, size);
- if (l =3D=3D -1)
+ if (l =3D=3D (size_t)-1)
goto alen;
if (l =3D=3D 1 && (wc =3D=3D L'/' || wc =3D=3D L'\\'))
rp =3D p;
@@ -404,7 +404,7 @@
}
return (rp - path + 1);
alen:
- if (al =3D=3D -1)
+ if (al =3D=3D (size_t)-1)
return (0);
return (al + 1);
}
@@ -1079,7 +1079,7 @@
struct mtree_writer *mtree=3D a->format_data;
=20
if (n > mtree->entry_bytes_remaining)
- n =3D mtree->entry_bytes_remaining;
+ n =3D (size_t)mtree->entry_bytes_remaining;
mtree->entry_bytes_remaining -=3D n;
=20
/* We don't need to compute a regular file sum */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_pax.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_pax.c Mon=
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_pax.c Fri=
Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_pax.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_pax.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -334,8 +334,7 @@
url_encoded_name =3D url_encode(name);
if (url_encoded_name !=3D NULL) {
/* Convert narrow-character to UTF-8. */
- r =3D archive_strcpy_in_locale(
- &(pax->l_url_encoded_name),
+ r =3D archive_strcpy_l(&(pax->l_url_encoded_name),
url_encoded_name, pax->sconv_utf8);
free(url_encoded_name); /* Done with this. */
if (r =3D=3D 0)
@@ -1324,7 +1323,7 @@
return (ARCHIVE_FATAL);
}
/* Pad out the end of the entry. */
- r =3D __archive_write_nulls(a, pax->entry_padding);
+ r =3D __archive_write_nulls(a, (size_t)pax->entry_padding);
if (r !=3D ARCHIVE_OK) {
/* If a write fails, we're pretty much toast. */
return (ARCHIVE_FATAL);
@@ -1666,7 +1665,7 @@
pax->sparse_list =3D sb;
}
}
- ret =3D __archive_write_nulls(a, remaining + pax->entry_padding);
+ ret =3D __archive_write_nulls(a, (size_t)(remaining + pax->entry_padding)=
);
pax->entry_bytes_remaining =3D pax->entry_padding =3D 0;
return (ret);
}
@@ -1713,7 +1712,7 @@
p =3D ((const unsigned char *)buff) + total;
ws =3D s - total;
if (ws > pax->sparse_list->remaining)
- ws =3D pax->sparse_list->remaining;
+ ws =3D (size_t)pax->sparse_list->remaining;
=20
if (pax->sparse_list->is_hole) {
/* Current block is hole thus we do not write
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_ustar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_ustar.c M=
on Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_ustar.c F=
ri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ustar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ustar.c 238856 2012-07-28 06:38:44Z mm $");
=20
=20
#ifdef HAVE_ERRNO_H
@@ -742,7 +742,7 @@
=20
ustar =3D (struct ustar *)a->format_data;
ret =3D __archive_write_nulls(a,
- ustar->entry_bytes_remaining + ustar->entry_padding);
+ (size_t)(ustar->entry_bytes_remaining + ustar->entry_padding));
ustar->entry_bytes_remaining =3D ustar->entry_padding =3D 0;
return (ret);
}
@@ -755,7 +755,7 @@
=20
ustar =3D (struct ustar *)a->format_data;
if (s > ustar->entry_bytes_remaining)
- s =3D ustar->entry_bytes_remaining;
+ s =3D (size_t)ustar->entry_bytes_remaining;
ret =3D __archive_write_output(a, buff, s);
ustar->entry_bytes_remaining -=3D s;
if (ret !=3D ARCHIVE_OK)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_xar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_xar.c Mon=
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_xar.c Fri=
Aug 10 14:19:25 2012 +0300
@@ -46,10 +46,6 @@
#include <zlib.h>
#endif
=20
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
#include "archive.h"
#include "archive_crypto_private.h"
#include "archive_endian.h"
@@ -660,7 +656,7 @@
xar =3D (struct xar *)a->format_data;
=20
if (s > xar->bytes_remaining)
- s =3D xar->bytes_remaining;
+ s =3D (size_t)xar->bytes_remaining;
if (s =3D=3D 0 || xar->cur_file =3D=3D NULL)
return (0);
if (xar->cur_file->data.compression =3D=3D NONE) {
@@ -741,7 +737,7 @@
return (ARCHIVE_OK);
=20
while (xar->bytes_remaining > 0) {
- s =3D xar->bytes_remaining;
+ s =3D (size_t)xar->bytes_remaining;
if (s > a->null_length)
s =3D a->null_length;
w =3D xar_write_data(a, a->nulls, s);
@@ -2600,10 +2596,10 @@
* a non-const pointer. */
strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
strm->avail_in =3D lastrm->avail_in;
- strm->total_in =3D lastrm->total_in;
+ strm->total_in =3D (uLong)lastrm->total_in;
strm->next_out =3D lastrm->next_out;
strm->avail_out =3D lastrm->avail_out;
- strm->total_out =3D lastrm->total_out;
+ strm->total_out =3D (uLong)lastrm->total_out;
if (deflateInit2(strm, level, Z_DEFLATED,
(withheader)?15:-15,
8, Z_DEFAULT_STRATEGY) !=3D Z_OK) {
@@ -2633,10 +2629,10 @@
* a non-const pointer. */
strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
strm->avail_in =3D lastrm->avail_in;
- strm->total_in =3D lastrm->total_in;
+ strm->total_in =3D (uLong)lastrm->total_in;
strm->next_out =3D lastrm->next_out;
strm->avail_out =3D lastrm->avail_out;
- strm->total_out =3D lastrm->total_out;
+ strm->total_out =3D (uLong)lastrm->total_out;
r =3D deflate(strm,
(action =3D=3D ARCHIVE_Z_FINISH)? Z_FINISH: Z_NO_FLUSH);
lastrm->next_in =3D strm->next_in;
@@ -2872,6 +2868,7 @@
if (level > 6)
level =3D 6;
if (lzma_lzma_preset(&lzma_opt, level)) {
+ free(strm);
lastrm->real_stream =3D NULL;
archive_set_error(a, ENOMEM,
"Internal error initializing compression library");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_zip.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_zip.c Mon=
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_zip.c Fri=
Aug 10 14:19:25 2012 +0300
@@ -48,7 +48,7 @@
*/
=20
#include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_zip.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_zip.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_ERRNO_H
#include <errno.h>
@@ -109,69 +109,75 @@
static size_t path_length(struct archive_entry *);
static int write_path(struct archive_entry *, struct archive_write *);
=20
-struct zip_local_file_header {
- char signature[4];
- char version[2];
- char flags[2];
- char compression[2];
- char timedate[4];
- char crc32[4];
- char compressed_size[4];
- char uncompressed_size[4];
- char filename_length[2];
- char extra_length[2];
-};
+#define LOCAL_FILE_HEADER_SIGNATURE 0
+#define LOCAL_FILE_HEADER_VERSION 4
+#define LOCAL_FILE_HEADER_FLAGS 6
+#define LOCAL_FILE_HEADER_COMPRESSION 8
+#define LOCAL_FILE_HEADER_TIMEDATE 10
+#define LOCAL_FILE_HEADER_CRC32 14
+#define LOCAL_FILE_HEADER_COMPRESSED_SIZE 18
+#define LOCAL_FILE_HEADER_UNCOMPRESSED_SIZE 22
+#define LOCAL_FILE_HEADER_FILENAME_LENGTH 26
+#define LOCAL_FILE_HEADER_EXTRA_LENGTH 28
+#define SIZE_LOCAL_FILE_HEADER 30
=20
-struct zip_file_header {
- char signature[4];
- char version_by[2];
- char version_extract[2];
- char flags[2];
- char compression[2];
- char timedate[4];
- char crc32[4];
- char compressed_size[4];
- char uncompressed_size[4];
- char filename_length[2];
- char extra_length[2];
- char comment_length[2];
- char disk_number[2];
- char attributes_internal[2];
- char attributes_external[4];
- char offset[4];
-};
+#define FILE_HEADER_SIGNATURE 0
+#define FILE_HEADER_VERSION_BY 4
+#define FILE_HEADER_VERSION_EXTRACT 6
+#define FILE_HEADER_FLAGS 8
+#define FILE_HEADER_COMPRESSION 10
+#define FILE_HEADER_TIMEDATE 12
+#define FILE_HEADER_CRC32 16
+#define FILE_HEADER_COMPRESSED_SIZE 20
+#define FILE_HEADER_UNCOMPRESSED_SIZE 24
+#define FILE_HEADER_FILENAME_LENGTH 28
+#define FILE_HEADER_EXTRA_LENGTH 30
+#define FILE_HEADER_COMMENT_LENGTH 32
+#define FILE_HEADER_DISK_NUMBER 34
+#define FILE_HEADER_ATTRIBUTES_INTERNAL 36
+#define FILE_HEADER_ATTRIBUTES_EXTERNAL 38
+#define FILE_HEADER_OFFSET 42
+#define SIZE_FILE_HEADER 46
=20
-struct zip_data_descriptor {
- char signature[4]; /* Not mandatory, but recommended by specification. */
- char crc32[4];
- char compressed_size[4];
- char uncompressed_size[4];
-};
+ /* Not mandatory, but recommended by specification. */
+#define DATA_DESCRIPTOR_SIGNATURE 0
+#define DATA_DESCRIPTOR_CRC32 4
+#define DATA_DESCRIPTOR_COMPRESSED_SIZE 8
+#define DATA_DESCRIPTOR_UNCOMPRESSED_SIZE 12
+#define SIZE_DATA_DESCRIPTOR 16
=20
-struct zip_extra_data_local {
- char time_id[2];
- char time_size[2];
- char time_flag[1];
- char mtime[4];
- char atime[4];
- char ctime[4];
- char unix_id[2];
- char unix_size[2];
- char unix_version;
- char unix_uid_size;
- char unix_uid[4];
- char unix_gid_size;
- char unix_gid[4];
-};
+#define EXTRA_DATA_LOCAL_TIME_ID 0
+#define EXTRA_DATA_LOCAL_TIME_SIZE 2
+#define EXTRA_DATA_LOCAL_TIME_FLAG 4
+#define EXTRA_DATA_LOCAL_MTIME 5
+#define EXTRA_DATA_LOCAL_ATIME 9
+#define EXTRA_DATA_LOCAL_CTIME 13
+#define EXTRA_DATA_LOCAL_UNIX_ID 17
+#define EXTRA_DATA_LOCAL_UNIX_SIZE 19
+#define EXTRA_DATA_LOCAL_UNIX_VERSION 21
+#define EXTRA_DATA_LOCAL_UNIX_UID_SIZE 22
+#define EXTRA_DATA_LOCAL_UNIX_UID 23
+#define EXTRA_DATA_LOCAL_UNIX_GID_SIZE 27
+#define EXTRA_DATA_LOCAL_UNIX_GID 28
+#define SIZE_EXTRA_DATA_LOCAL 32
=20
-struct zip_extra_data_central {
- char time_id[2];
- char time_size[2];
- char time_flag[1];
- char mtime[4];
- char unix_id[2];
- char unix_size[2];
-};
+#define EXTRA_DATA_CENTRAL_TIME_ID 0
+#define EXTRA_DATA_CENTRAL_TIME_SIZE 2
+#define EXTRA_DATA_CENTRAL_TIME_FLAG 4
+#define EXTRA_DATA_CENTRAL_MTIME 5
+#define EXTRA_DATA_CENTRAL_UNIX_ID 9
+#define EXTRA_DATA_CENTRAL_UNIX_SIZE 11
+#define SIZE_EXTRA_DATA_CENTRAL 13
+
+#define CENTRAL_DIRECTORY_END_SIGNATURE 0
+#define CENTRAL_DIRECTORY_END_DISK 4
+#define CENTRAL_DIRECTORY_END_START_DISK 6
+#define CENTRAL_DIRECTORY_END_ENTRIES_DISK 8
+#define CENTRAL_DIRECTORY_END_ENTRIES 10
+#define CENTRAL_DIRECTORY_END_SIZE 12
+#define CENTRAL_DIRECTORY_END_OFFSET 16
+#define CENTRAL_DIRECTORY_END_COMMENT_LENGTH 20
+#define SIZE_CENTRAL_DIRECTORY_END 22
=20
struct zip_file_header_link {
struct zip_file_header_link *next;
@@ -184,7 +190,7 @@
};
=20
struct zip {
- struct zip_data_descriptor data_descriptor;
+ uint8_t data_descriptor[SIZE_DATA_DESCRIPTOR];
struct zip_file_header_link *central_directory;
struct zip_file_header_link *central_directory_end;
int64_t offset;
@@ -203,17 +209,6 @@
#endif
};
=20
-struct zip_central_directory_end {
- char signature[4];
- char disk[2];
- char start_disk[2];
- char entries_disk[2];
- char entries[2];
- char size[4];
- char offset[4];
- char comment_length[2];
-};
-
static int
archive_write_zip_options(struct archive_write *a, const char *key,
const char *val)
@@ -291,6 +286,7 @@
zip->len_buf =3D 65536;
zip->buf =3D malloc(zip->len_buf);
if (zip->buf =3D=3D NULL) {
+ free(zip);
archive_set_error(&a->archive, ENOMEM,
"Can't allocate compression buffer");
return (ARCHIVE_FATAL);
@@ -310,7 +306,7 @@
a->archive.archive_format =3D ARCHIVE_FORMAT_ZIP;
a->archive.archive_format_name =3D "ZIP";
=20
- archive_le32enc(&zip->data_descriptor.signature,
+ archive_le32enc(&zip->data_descriptor[DATA_DESCRIPTOR_SIGNATURE],
ZIP_SIGNATURE_DATA_DESCRIPTOR);
=20
return (ARCHIVE_OK);
@@ -332,9 +328,9 @@
archive_write_zip_header(struct archive_write *a, struct archive_entry *en=
try)
{
struct zip *zip;
- struct zip_local_file_header h;
- struct zip_extra_data_local e;
- struct zip_data_descriptor *d;
+ uint8_t h[SIZE_LOCAL_FILE_HEADER];
+ uint8_t e[SIZE_EXTRA_DATA_LOCAL];
+ uint8_t *d;
struct zip_file_header_link *l;
struct archive_string_conv *sconv;
int ret, ret2 =3D ARCHIVE_OK;
@@ -374,7 +370,7 @@
#endif
}
}
- d =3D &zip->data_descriptor;
+ d =3D zip->data_descriptor;
size =3D archive_entry_size(entry);
zip->remaining_data_bytes =3D size;
=20
@@ -411,21 +407,47 @@
=20
if (archive_entry_pathname_l(entry, &p, &len, sconv) !=3D 0) {
if (errno =3D=3D ENOMEM) {
+ archive_entry_free(l->entry);
+ free(l);
archive_set_error(&a->archive, ENOMEM,
"Can't allocate memory for Pathname");
return (ARCHIVE_FATAL);
}
archive_set_error(&a->archive,
ARCHIVE_ERRNO_FILE_FORMAT,
- "Can't translate pathname '%s' to %s",
+ "Can't translate Pathname '%s' to %s",
archive_entry_pathname(entry),
archive_string_conversion_charset_name(sconv));
ret2 =3D ARCHIVE_WARN;
}
if (len > 0)
archive_entry_set_pathname(l->entry, p);
+
+ /*
+ * Although there is no character-set regulation for Symlink,
+ * it is suitable to convert a character-set of Symlinke to
+ * what those of the Pathname has been converted to.
+ */
+ if (type =3D=3D AE_IFLNK) {
+ if (archive_entry_symlink_l(entry, &p, &len, sconv)) {
+ if (errno =3D=3D ENOMEM) {
+ archive_entry_free(l->entry);
+ free(l);
+ archive_set_error(&a->archive, ENOMEM,
+ "Can't allocate memory "
+ " for Symlink");
+ return (ARCHIVE_FATAL);
+ }
+ /*
+ * Even if the strng conversion failed,
+ * we should not report the error since
+ * thre is no regulation for.
+ */
+ } else if (len > 0)
+ archive_entry_set_symlink(l->entry, p);
+ }
}
- /* If all character of a filename is ASCII, Reset UTF-8 Name flag. */
+ /* If all characters in a filename are ASCII, Reset UTF-8 Name flag. */
if ((l->flags & ZIP_FLAGS_UTF8_NAME) !=3D 0 &&
is_all_ascii(archive_entry_pathname(l->entry)))
l->flags &=3D ~ZIP_FLAGS_UTF8_NAME;
@@ -458,13 +480,16 @@
* directory. */
l->offset =3D zip->written_bytes;
=20
- memset(&h, 0, sizeof(h));
- archive_le32enc(&h.signature, ZIP_SIGNATURE_LOCAL_FILE_HEADER);
- archive_le16enc(&h.version, ZIP_VERSION_EXTRACT);
- archive_le16enc(&h.flags, l->flags);
- archive_le16enc(&h.compression, l->compression);
- archive_le32enc(&h.timedate, dos_time(archive_entry_mtime(entry)));
- archive_le16enc(&h.filename_length, (uint16_t)path_length(l->entry));
+ memset(h, 0, sizeof(h));
+ archive_le32enc(&h[LOCAL_FILE_HEADER_SIGNATURE],
+ ZIP_SIGNATURE_LOCAL_FILE_HEADER);
+ archive_le16enc(&h[LOCAL_FILE_HEADER_VERSION], ZIP_VERSION_EXTRACT);
+ archive_le16enc(&h[LOCAL_FILE_HEADER_FLAGS], l->flags);
+ archive_le16enc(&h[LOCAL_FILE_HEADER_COMPRESSION], l->compression);
+ archive_le32enc(&h[LOCAL_FILE_HEADER_TIMEDATE],
+ dos_time(archive_entry_mtime(entry)));
+ archive_le16enc(&h[LOCAL_FILE_HEADER_FILENAME_LENGTH],
+ (uint16_t)path_length(l->entry));
=20
switch (l->compression) {
case COMPRESSION_STORE:
@@ -472,12 +497,15 @@
* specification says to set to zero when using data
* descriptors. Otherwise the end of the data for an
* entry is rather difficult to find. */
- archive_le32enc(&h.compressed_size, size);
- archive_le32enc(&h.uncompressed_size, size);
+ archive_le32enc(&h[LOCAL_FILE_HEADER_COMPRESSED_SIZE],
+ (uint32_t)size);
+ archive_le32enc(&h[LOCAL_FILE_HEADER_UNCOMPRESSED_SIZE],
+ (uint32_t)size);
break;
#ifdef HAVE_ZLIB_H
case COMPRESSION_DEFLATE:
- archive_le32enc(&h.uncompressed_size, size);
+ archive_le32enc(&h[LOCAL_FILE_HEADER_UNCOMPRESSED_SIZE],
+ (uint32_t)size);
=20
zip->stream.zalloc =3D Z_NULL;
zip->stream.zfree =3D Z_NULL;
@@ -495,28 +523,33 @@
}
=20
/* Formatting extra data. */
- archive_le16enc(&h.extra_length, sizeof(e));
- archive_le16enc(&e.time_id, ZIP_SIGNATURE_EXTRA_TIMESTAMP);
- archive_le16enc(&e.time_size, sizeof(e.time_flag) +
- sizeof(e.mtime) + sizeof(e.atime) + sizeof(e.ctime));
- e.time_flag[0] =3D 0x07;
- archive_le32enc(&e.mtime, archive_entry_mtime(entry));
- archive_le32enc(&e.atime, archive_entry_atime(entry));
- archive_le32enc(&e.ctime, archive_entry_ctime(entry));
+ archive_le16enc(&h[LOCAL_FILE_HEADER_EXTRA_LENGTH], sizeof(e));
+ archive_le16enc(&e[EXTRA_DATA_LOCAL_TIME_ID],
+ ZIP_SIGNATURE_EXTRA_TIMESTAMP);
+ archive_le16enc(&e[EXTRA_DATA_LOCAL_TIME_SIZE], 1 + 4 * 3);
+ e[EXTRA_DATA_LOCAL_TIME_FLAG] =3D 0x07;
+ archive_le32enc(&e[EXTRA_DATA_LOCAL_MTIME],
+ (uint32_t)archive_entry_mtime(entry));
+ archive_le32enc(&e[EXTRA_DATA_LOCAL_ATIME],
+ (uint32_t)archive_entry_atime(entry));
+ archive_le32enc(&e[EXTRA_DATA_LOCAL_CTIME],
+ (uint32_t)archive_entry_ctime(entry));
=20
- archive_le16enc(&e.unix_id, ZIP_SIGNATURE_EXTRA_NEW_UNIX);
- archive_le16enc(&e.unix_size, sizeof(e.unix_version) +
- sizeof(e.unix_uid_size) + sizeof(e.unix_uid) +
- sizeof(e.unix_gid_size) + sizeof(e.unix_gid));
- e.unix_version =3D 1;
- e.unix_uid_size =3D 4;
- archive_le32enc(&e.unix_uid, archive_entry_uid(entry));
- e.unix_gid_size =3D 4;
- archive_le32enc(&e.unix_gid, archive_entry_gid(entry));
+ archive_le16enc(&e[EXTRA_DATA_LOCAL_UNIX_ID],
+ ZIP_SIGNATURE_EXTRA_NEW_UNIX);
+ archive_le16enc(&e[EXTRA_DATA_LOCAL_UNIX_SIZE], 1 + (1 + 4) * 2);
+ e[EXTRA_DATA_LOCAL_UNIX_VERSION] =3D 1;
+ e[EXTRA_DATA_LOCAL_UNIX_UID_SIZE] =3D 4;
+ archive_le32enc(&e[EXTRA_DATA_LOCAL_UNIX_UID],
+ (uint32_t)archive_entry_uid(entry));
+ e[EXTRA_DATA_LOCAL_UNIX_GID_SIZE] =3D 4;
+ archive_le32enc(&e[EXTRA_DATA_LOCAL_UNIX_GID],
+ (uint32_t)archive_entry_gid(entry));
=20
- archive_le32enc(&d->uncompressed_size, size);
+ archive_le32enc(&d[DATA_DESCRIPTOR_UNCOMPRESSED_SIZE],
+ (uint32_t)size);
=20
- ret =3D __archive_write_output(a, &h, sizeof(h));
+ ret =3D __archive_write_output(a, h, sizeof(h));
if (ret !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
zip->written_bytes +=3D sizeof(h);
@@ -526,7 +559,7 @@
return (ARCHIVE_FATAL);
zip->written_bytes +=3D ret;
=20
- ret =3D __archive_write_output(a, &e, sizeof(e));
+ ret =3D __archive_write_output(a, e, sizeof(e));
if (ret !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
zip->written_bytes +=3D sizeof(e);
@@ -535,11 +568,11 @@
const unsigned char *p;
=20
p =3D (const unsigned char *)archive_entry_symlink(l->entry);
- ret =3D __archive_write_output(a, p, size);
+ ret =3D __archive_write_output(a, p, (size_t)size);
if (ret !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
zip->written_bytes +=3D size;
- l->crc32 =3D crc32(l->crc32, p, size);
+ l->crc32 =3D crc32(l->crc32, p, (unsigned)size);
}
=20
if (ret2 !=3D ARCHIVE_OK)
@@ -606,7 +639,7 @@
/* Write the data descripter after file data has been written. */
int ret;
struct zip *zip =3D a->format_data;
- struct zip_data_descriptor *d =3D &zip->data_descriptor;
+ uint8_t *d =3D zip->data_descriptor;
struct zip_file_header_link *l =3D zip->central_directory_end;
#if HAVE_ZLIB_H
size_t reminder;
@@ -637,12 +670,13 @@
#endif
}
=20
- archive_le32enc(&d->crc32, l->crc32);
- archive_le32enc(&d->compressed_size, l->compressed_size);
- ret =3D __archive_write_output(a, d, sizeof(*d));
+ archive_le32enc(&d[DATA_DESCRIPTOR_CRC32], l->crc32);
+ archive_le32enc(&d[DATA_DESCRIPTOR_COMPRESSED_SIZE],
+ (uint32_t)l->compressed_size);
+ ret =3D __archive_write_output(a, d, SIZE_DATA_DESCRIPTOR);
if (ret !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
- zip->written_bytes +=3D sizeof(*d);
+ zip->written_bytes +=3D SIZE_DATA_DESCRIPTOR;
return (ARCHIVE_OK);
}
=20
@@ -651,9 +685,9 @@
{
struct zip *zip;
struct zip_file_header_link *l;
- struct zip_file_header h;
- struct zip_central_directory_end end;
- struct zip_extra_data_central e;
+ uint8_t h[SIZE_FILE_HEADER];
+ uint8_t end[SIZE_CENTRAL_DIRECTORY_END];
+ uint8_t e[SIZE_EXTRA_DATA_CENTRAL];
int64_t offset_start, offset_end;
int entries;
int ret;
@@ -670,10 +704,10 @@
* - disk_number
* - attributes_internal
*/
- memset(&h, 0, sizeof(h));
- archive_le32enc(&h.signature, ZIP_SIGNATURE_FILE_HEADER);
- archive_le16enc(&h.version_by, ZIP_VERSION_BY);
- archive_le16enc(&h.version_extract, ZIP_VERSION_EXTRACT);
+ memset(h, 0, sizeof(h));
+ archive_le32enc(&h[FILE_HEADER_SIGNATURE], ZIP_SIGNATURE_FILE_HEADER);
+ archive_le16enc(&h[FILE_HEADER_VERSION_BY], ZIP_VERSION_BY);
+ archive_le16enc(&h[FILE_HEADER_VERSION_EXTRACT], ZIP_VERSION_EXTRACT);
=20
entries =3D 0;
offset_start =3D zip->written_bytes;
@@ -681,31 +715,34 @@
/* Formatting individual header fields per entry and
* writing each entry. */
while (l !=3D NULL) {
- archive_le16enc(&h.flags, l->flags);
- archive_le16enc(&h.compression, l->compression);
- archive_le32enc(&h.timedate,
+ archive_le16enc(&h[FILE_HEADER_FLAGS], l->flags);
+ archive_le16enc(&h[FILE_HEADER_COMPRESSION], l->compression);
+ archive_le32enc(&h[FILE_HEADER_TIMEDATE],
dos_time(archive_entry_mtime(l->entry)));
- archive_le32enc(&h.crc32, l->crc32);
- archive_le32enc(&h.compressed_size, l->compressed_size);
- archive_le32enc(&h.uncompressed_size,
- archive_entry_size(l->entry));
- archive_le16enc(&h.filename_length,
+ archive_le32enc(&h[FILE_HEADER_CRC32], l->crc32);
+ archive_le32enc(&h[FILE_HEADER_COMPRESSED_SIZE],
+ (uint32_t)l->compressed_size);
+ archive_le32enc(&h[FILE_HEADER_UNCOMPRESSED_SIZE],
+ (uint32_t)archive_entry_size(l->entry));
+ archive_le16enc(&h[FILE_HEADER_FILENAME_LENGTH],
(uint16_t)path_length(l->entry));
- archive_le16enc(&h.extra_length, sizeof(e));
- archive_le16enc(&h.attributes_external[2],
+ archive_le16enc(&h[FILE_HEADER_EXTRA_LENGTH], sizeof(e));
+ archive_le16enc(&h[FILE_HEADER_ATTRIBUTES_EXTERNAL+2],
archive_entry_mode(l->entry));
- archive_le32enc(&h.offset, l->offset);
+ archive_le32enc(&h[FILE_HEADER_OFFSET], (uint32_t)l->offset);
=20
/* Formatting extra data. */
- archive_le16enc(&e.time_id, ZIP_SIGNATURE_EXTRA_TIMESTAMP);
- archive_le16enc(&e.time_size,
- sizeof(e.mtime) + sizeof(e.time_flag));
- e.time_flag[0] =3D 0x07;
- archive_le32enc(&e.mtime, archive_entry_mtime(l->entry));
- archive_le16enc(&e.unix_id, ZIP_SIGNATURE_EXTRA_NEW_UNIX);
- archive_le16enc(&e.unix_size, 0x0000);
+ archive_le16enc(&e[EXTRA_DATA_CENTRAL_TIME_ID],
+ ZIP_SIGNATURE_EXTRA_TIMESTAMP);
+ archive_le16enc(&e[EXTRA_DATA_CENTRAL_TIME_SIZE], 1 + 4);
+ e[EXTRA_DATA_CENTRAL_TIME_FLAG] =3D 0x07;
+ archive_le32enc(&e[EXTRA_DATA_CENTRAL_MTIME],
+ (uint32_t)archive_entry_mtime(l->entry));
+ archive_le16enc(&e[EXTRA_DATA_CENTRAL_UNIX_ID],
+ ZIP_SIGNATURE_EXTRA_NEW_UNIX);
+ archive_le16enc(&e[EXTRA_DATA_CENTRAL_UNIX_SIZE], 0x0000);
=20
- ret =3D __archive_write_output(a, &h, sizeof(h));
+ ret =3D __archive_write_output(a, h, sizeof(h));
if (ret !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
zip->written_bytes +=3D sizeof(h);
@@ -715,7 +752,7 @@
return (ARCHIVE_FATAL);
zip->written_bytes +=3D ret;
=20
- ret =3D __archive_write_output(a, &e, sizeof(e));
+ ret =3D __archive_write_output(a, e, sizeof(e));
if (ret !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
zip->written_bytes +=3D sizeof(e);
@@ -726,15 +763,18 @@
offset_end =3D zip->written_bytes;
=20
/* Formatting end of central directory. */
- memset(&end, 0, sizeof(end));
- archive_le32enc(&end.signature, ZIP_SIGNATURE_CENTRAL_DIRECTORY_END);
- archive_le16enc(&end.entries_disk, entries);
- archive_le16enc(&end.entries, entries);
- archive_le32enc(&end.size, offset_end - offset_start);
- archive_le32enc(&end.offset, offset_start);
+ memset(end, 0, sizeof(end));
+ archive_le32enc(&end[CENTRAL_DIRECTORY_END_SIGNATURE],
+ ZIP_SIGNATURE_CENTRAL_DIRECTORY_END);
+ archive_le16enc(&end[CENTRAL_DIRECTORY_END_ENTRIES_DISK], entries);
+ archive_le16enc(&end[CENTRAL_DIRECTORY_END_ENTRIES], entries);
+ archive_le32enc(&end[CENTRAL_DIRECTORY_END_SIZE],
+ (uint32_t)(offset_end - offset_start));
+ archive_le32enc(&end[CENTRAL_DIRECTORY_END_OFFSET],
+ (uint32_t)offset_start);
=20
/* Writing end of central directory. */
- ret =3D __archive_write_output(a, &end, sizeof(end));
+ ret =3D __archive_write_output(a, end, sizeof(end));
if (ret !=3D ARCHIVE_OK)
return (ARCHIVE_FATAL);
zip->written_bytes +=3D sizeof(end);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_options.3
--- a/head/contrib/libarchive/libarchive/archive_write_set_options.3 Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_options.3 Fri Au=
g 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
.\"
-.Dd Feb 27, 2010
+.Dd February 2, 2012
.Dt ARCHIVE_WRITE_OPTIONS 3
.Os
.Sh NAME
@@ -33,8 +33,8 @@
.Nm archive_write_set_option ,
.Nm archive_write_set_options
.Nd functions controlling options for reading archives
-.Sh SYNOPSIS
-.\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
.Sh SYNOPSIS
.Ft int
.Fo archive_write_set_filter_option
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/cpi=
o.5
--- a/head/contrib/libarchive/libarchive/cpio.5 Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/libarchive/libarchive/cpio.5 Fri Aug 10 14:19:25 2012 +0=
300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/cpio.5 228773 2011-12-21 =
15:18:52Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/cpio.5 238856 2012-07-28 =
06:38:44Z mm $
.\"
-.Dd October 5, 2007
+.Dd December 23, 2011
.Dt CPIO 5
.Os
.Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive-formats.5
--- a/head/contrib/libarchive/libarchive/libarchive-formats.5 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive-formats.5 Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive-formats.5 2321=
53 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive-formats.5 2388=
56 2012-07-28 06:38:44Z mm $
.\"
-.Dd December 27, 2009
+.Dd March 18, 2012
.Dt LIBARCHIVE-FORMATS 5
.Os
.Sh NAME
@@ -51,11 +51,11 @@
The
.Xr libarchive 3
library can read most tar archives.
-However, it only writes POSIX-standard
+It can write POSIX-standard
.Dq ustar
and
.Dq pax interchange
-formats.
+formats and a subset of the legacy GNU tar format.
.Pp
All tar formats store each entry in one or more 512-byte records.
The first record is used for file metadata, including filename,
@@ -70,13 +70,18 @@
.It Cm gnutar
The
.Xr libarchive 3
-library can read GNU-format tar archives.
+library can read most GNU-format tar archives.
It currently supports the most popular GNU extensions, including
modern long filename and linkname support, as well as atime and ctime data.
The libarchive library does not support multi-volume
archives, nor the old GNU long filename format.
It can read GNU sparse file entries, including the new POSIX-based
-formats, but cannot write GNU sparse file entries.
+formats.
+.Pp
+The
+.Xr libarchive 3
+library can write GNU tar format, including long filename
+and linkname support, as well as atime and ctime data.
.It Cm pax
The
.Xr libarchive 3
@@ -98,6 +103,14 @@
The libarchive library can read most of the SCHILY keys
and most of the GNU keys introduced by GNU tar.
It silently ignores any keywords that it does not understand.
+.Pp
+The pax interchange format converts filenames to Unicode
+and stores them using the UTF-8 encoding.
+Prior to libarchive 3.0, libarchive erroneously assumed
+that the system wide-character routines natively supported
+Unicode.
+This caused it to mis-handle non-ASCII filenames on systems
+that did not satisfy this assumption.
.It Cm restricted pax
The libarchive library can also write pax archives in which it
attempts to suppress the extended attributes entry whenever
@@ -135,6 +148,8 @@
Archive entries are limited to 8 gigabytes in size.
.El
Note that the pax interchange format has none of these restrictions.
+The ustar format is old and widely supported.
+It is recommended when compatibility is the primary concern.
.El
.Pp
The libarchive library also reads a variety of commonly-used extensions to
@@ -268,19 +283,68 @@
used and the Rockridge extensions will be ignored.
In particular, this can create problems with hardlinks and symlinks,
which are supported by Rockridge but not by Joliet.
+.Pp
+Libarchive reads ISO9660 images using a streaming strategy.
+This allows it to read compressed images directly
+(decompressing on the fly) and allows it to read images
+directly from network sockets, pipes, and other non-seekable
+data sources.
+This strategy works well for optimized ISO9660 images created
+by many popular programs.
+Such programs collect all directory information at the beginning
+of the ISO9660 image so it can be read from a physical disk
+with a minimum of seeking.
+However, not all ISO9660 images can be read in this fashion.
+.Pp
+Libarchive can also write ISO9660 images.
+Such images are fully optimized with the directory information
+preceding all file data.
+This is done by storing all file data to a temporary file
+while collecting directory information in memory.
+When the image is finished, libarchive writes out the
+directory structure followed by the file data.
+The location used for the temporary file can be changed
+by the usual environment variables.
.Ss Zip format
Libarchive can read and write zip format archives that have
uncompressed entries and entries compressed with the
.Dq deflate
algorithm.
-Older zip compression algorithms are not supported.
-It can extract jar archives, archives that use Zip64 extensions and many
+Other zip compression algorithms are not supported.
+It can extract jar archives, archives that use Zip64 extensions and
self-extracting zip archives.
-Libarchive reads Zip archives as they are being streamed,
-which allows it to read archives of arbitrary size.
-It currently does not use the central directory; this
-limits libarchive's ability to support some self-extracting
-archives and ones that have been modified in certain ways.
+Libarchive can use either of two different strategies for
+reading Zip archives:
+a streaming strategy which is fast and can handle extremely
+large archives, and a seeking strategy which can correctly
+process self-extracting Zip archives and archives with
+deleted members or other in-place modifications.
+.Pp
+The streaming reader processes Zip archives as they are read.
+It can read archives of arbitrary size from tape or
+network sockets, and can decode Zip archives that have
+been separately compressed or encoded.
+However, self-extracting Zip archives and archives with
+certain types of modifications cannot be correctly
+handled.
+Such archives require that the reader first process the
+Central Directory, which is ordinarily located
+at the end of a Zip archive and is thus inaccessible
+to the streaming reader.
+If the program using libarchive has enabled seek support, then
+libarchive will use this to processes the central directory first.
+.Pp
+In particular, the seeking reader must be used to
+correctly handle self-extracting archives.
+Such archives consist of a program followed by a regular
+Zip archive.
+The streaming reader cannot parse the initial program
+portion, but the seeking reader starts by reading the
+Central Directory from the end of the archive.
+Similarly, Zip archives that have been modified in-place
+can have deleted entries or other garbage data that
+can only be accurately detected by first reading the
+Central Directory.
.Ss Archive (library) file format
The Unix archive format (commonly created by the
.Xr ar 1
@@ -342,12 +406,18 @@
If it cannot locate and open the file on disk, libarchive
will return an error for any attempt to read the entry
body.
+.Ss LHA
+XXX Information about libarchive's LHA support XXX
+.Ss CAB
+XXX Information about libarchive's CAB support XXX
+.Ss XAR
+XXX Information about libarchive's XAR support XXX
.Ss RAR
-libarchive has limited support to read files in RAR format. Currently,
-libarchive can read single RAR files in RARv3 format which have been either
-created uncompressed, or compressed using any of the compression methods
-supported by the RARv3 format. libarchive can also extract RAR files which=
have
-been created as self-extracting RAR files.
+Libarchive has limited support for reading RAR format archives.
+Currently, libarchive can read RARv3 format archives
+which have been either created uncompressed, or compressed using
+any of the compression methods supported by the RARv3 format.
+Libarchive can also read self-extracting RAR archives.
.Sh SEE ALSO
.Xr ar 1 ,
.Xr cpio 1 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive.3
--- a/head/contrib/libarchive/libarchive/libarchive.3 Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive.3 Fri Aug 10 14:19:25 2=
012 +0300
@@ -22,16 +22,14 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive.3 232153 2012-=
02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive.3 238856 2012-=
07-28 06:38:44Z mm $
.\"
-.Dd February 6, 2010
+.Dd March 18, 2012
.Dt LIBARCHIVE 3
.Os
.Sh NAME
.Nm libarchive
.Nd functions for reading and writing streaming archives
-.Sh LIBRARY
-.Lb libarchive
.Sh OVERVIEW
The
.Nm
@@ -66,15 +64,33 @@
.It
ISO9660 CD images (including RockRidge and Joliet extensions),
.It
-Zip archives.
+Zip archives,
+.It
+ar archives (including GNU/SysV and BSD extensions),
+.It
+Microsoft CAB archives,
+.It
+LHA archives,
+.It
+mtree file tree descriptions,
+.It
+RAR archives,
+.It
+XAR archives.
.El
The library automatically detects archives compressed with
.Xr gzip 1 ,
.Xr bzip2 1 ,
.Xr xz 1 ,
+.Xr lzip 1 ,
or
.Xr compress 1
and decompresses them transparently.
+It can similarly detect and decode archives processed with
+.Xr uuencode 1
+or which have an
+.Xr rpm 1
+header.
.Pp
When writing an archive, you can specify the compression
to be used and the format to use.
@@ -93,7 +109,17 @@
.It
Zip archive,
.It
-two different variants of shar archives.
+two different variants of shar archives,
+.It
+ISO9660 CD images,
+.It
+7-Zip archives,
+.It
+ar archives,
+.It
+mtree file tree descriptions,
+.It
+XAR archives.
.El
Pax interchange format is an extension of the tar archive format that
eliminates essentially all of the limitations of historic tar formats
@@ -145,9 +171,21 @@
.Sh READING ENTRIES FROM DISK
The
.Xr archive_read_disk 3
-provides some support for populating
+supports for populating
.Xr archive_entry 3
objects from information in the filesystem.
+This includes the information accessible from the
+.Xr stat 2
+system call as well as ACLs, extended attributes,
+and other metadata.
+The
+.Xr archive_read_disk 3
+API also supports iterating over directory trees,
+which allows directories of files to be read using
+an API compatible with
+the
+.Xr archive_read 3
+API.
.Sh DESCRIPTION
Detailed descriptions of each function are provided by the
corresponding manual pages.
@@ -227,7 +265,7 @@
.An -nosplit
The
.Nm libarchive
-library was written by
+library was originally written by
.An Tim Kientzle Aq kientzle at acm.org .
.Sh BUGS
Some archive formats support information that is not supported by
@@ -244,13 +282,8 @@
For example, cpio formats do not support nanosecond timestamps;
old tar formats do not support large device numbers.
.Pp
-The
-.Xr archive_read_disk 3
-API should support iterating over filesystems;
-that would make it possible to share code among
-disk-to-archive, archive-to-archive, archive-to-disk,
-and disk-to-disk operations.
-Currently, it only supports reading the
-information for a single file.
-(Which is still quite useful, as it hides a lot
-of system-specific details.)
+The ISO9660 reader cannot yet read all ISO9660 images;
+it should learn how to seek.
+.Pp
+The AR writer requires the client program to use
+two passes, unlike all other libarchive writers.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive_changes.3
--- a/head/contrib/libarchive/libarchive/libarchive_changes.3 Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive_changes.3 Fri Aug 10 14=
:19:25 2012 +0300
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 27, 2011
+.Dd December 23, 2011
.Dt LIBARCHIVE_CHANGES 3
.Os
.Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive_internals.3
--- a/head/contrib/libarchive/libarchive/libarchive_internals.3 Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive_internals.3 Fri Aug 10 =
14:19:25 2012 +0300
@@ -22,10 +22,10 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive_internals.3 23=
2153 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive_internals.3 23=
8856 2012-07-28 06:38:44Z mm $
.\"
-.Dd April 16, 2007
-.Dt LIBARCHIVE 3
+.Dd January 26, 2011
+.Dt LIBARCHIVE_INTERNALS 3
.Os
.Sh NAME
.Nm libarchive_internals
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tar=
.5
--- a/head/contrib/libarchive/libarchive/tar.5 Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/libarchive/libarchive/tar.5 Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/tar.5 232153 2012-02-25 1=
0:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/tar.5 238856 2012-07-28 0=
6:38:44Z mm $
.\"
-.Dd December 27, 2009
+.Dd December 23, 2011
.Dt TAR 5
.Os
.Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/main.c
--- a/head/contrib/libarchive/libarchive/test/main.c Mon Jul 30 11:44:18 20=
12 +0300
+++ b/head/contrib/libarchive/libarchive/test/main.c Fri Aug 10 14:19:25 20=
12 +0300
@@ -24,6 +24,9 @@
*/
=20
#include "test.h"
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
@@ -31,6 +34,16 @@
#ifdef HAVE_ICONV_H
#include <iconv.h>
#endif
+/*
+ * Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
+ * As the include guards don't agree, the order of include is important.
+ */
+#ifdef HAVE_LINUX_EXT2_FS_H
+#include <linux/ext2_fs.h> /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h> /* Linux file flags, broken on Cygwin */
+#endif
#include <limits.h>
#include <locale.h>
#ifdef HAVE_SIGNAL_H
@@ -46,7 +59,7 @@
* TODO: Move this into a separate configuration header, have all test
* suites share one copy of this file.
*/
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/main.c 232153 =
2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/main.c 238856 =
2012-07-28 06:38:44Z mm $");
#define KNOWNREF "test_compat_gtar_1.tar.uu"
#define ENVBASE "LIBARCHIVE" /* Prefix for environment variables. */
#undef PROGRAM /* Testing a library, not a program. */
@@ -114,7 +127,14 @@
#endif
=20
#if defined(_WIN32) && !defined(__CYGWIN__)
-void *GetFunctionKernel32(const char *name)
+static void *GetFunctionKernel32(const char *);
+static int my_CreateSymbolicLinkA(const char *, const char *, int);
+static int my_CreateHardLinkA(const char *, const char *);
+static int my_GetFileInformationByName(const char *,
+ BY_HANDLE_FILE_INFORMATION *);
+
+static void *
+GetFunctionKernel32(const char *name)
{
static HINSTANCE lib;
static int set;
@@ -153,7 +173,7 @@
return f =3D=3D NULL ? 0 : (*f)(linkname, target, NULL);
}
=20
-int
+static int
my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *=
bhfi)
{
HANDLE h;
@@ -1505,7 +1525,7 @@
/* Create a file with the specified contents and report any failures. */
int
assertion_make_file(const char *file, int line,
- const char *path, int mode, const char *contents)
+ const char *path, int mode, int csize, const void *contents)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
/* TODO: Rework this to set file mode as well. */
@@ -1519,8 +1539,13 @@
return (0);
}
if (contents !=3D NULL) {
- if (strlen(contents)
- !=3D fwrite(contents, 1, strlen(contents), f)) {
+ size_t wsize;
+
+ if (csize < 0)
+ wsize =3D strlen(contents);
+ else
+ wsize =3D (size_t)csize;
+ if (wsize !=3D fwrite(contents, 1, wsize, f)) {
fclose(f);
failure_start(file, line,
"Could not write file %s", path);
@@ -1540,10 +1565,16 @@
return (0);
}
if (contents !=3D NULL) {
- if ((ssize_t)strlen(contents)
- !=3D write(fd, contents, strlen(contents))) {
+ ssize_t wsize;
+
+ if (csize < 0)
+ wsize =3D (ssize_t)strlen(contents);
+ else
+ wsize =3D (ssize_t)csize;
+ if (wsize !=3D write(fd, contents, wsize)) {
close(fd);
- failure_start(file, line, "Could not write to %s", path);
+ failure_start(file, line,
+ "Could not write to %s", path);
failure_finish(NULL);
return (0);
}
@@ -1714,6 +1745,52 @@
#endif /* defined(_WIN32) && !defined(__CYGWIN__) */
}
=20
+/* Set nodump, report failures. */
+int
+assertion_nodump(const char *file, int line, const char *pathname)
+{
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+ int r;
+
+ assertion_count(file, line);
+ r =3D chflags(pathname, UF_NODUMP);
+ if (r < 0) {
+ failure_start(file, line, "Can't set nodump %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+ && defined(EXT2_NODUMP_FL)
+ int fd, r, flags;
+
+ assertion_count(file, line);
+ fd =3D open(pathname, O_RDONLY | O_NONBLOCK);
+ if (fd < 0) {
+ failure_start(file, line, "Can't open %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0) {
+ failure_start(file, line, "Can't get flags %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ flags |=3D EXT2_NODUMP_FL;
+ r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+ if (r < 0) {
+ failure_start(file, line, "Can't set nodump %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ close(fd);
+#else
+ (void)pathname; /* UNUSED */
+ assertion_count(file, line);
+#endif
+ return (1);
+}
+
/*
*
* UTILITIES for use by tests.
@@ -1742,7 +1819,7 @@
return (value);
=20
++tested;
- assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, "a");
+ assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, 1, "a");
/* Note: Cygwin has its own symlink() emulation that does not
* use the Win32 CreateSymbolicLink() function. */
#if defined(_WIN32) && !defined(__CYGWIN__)
@@ -1792,6 +1869,70 @@
}
=20
/*
+ * Can this filesystem handle nodump flags.
+ */
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+
+int
+canNodump(void)
+{
+ const char *path =3D "cannodumptest";
+ struct stat sb;
+
+ assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+ if (chflags(path, UF_NODUMP) < 0)
+ return (0);
+ if (stat(path, &sb) < 0)
+ return (0);
+ if (sb.st_flags & UF_NODUMP)
+ return (1);
+ return (0);
+}
+
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+ && defined(EXT2_NODUMP_FL)
+
+int
+canNodump(void)
+{
+ const char *path =3D "cannodumptest";
+ int fd, r, flags;
+
+ assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+ fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ return (0);
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ flags |=3D EXT2_NODUMP_FL;
+ r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ close(fd);
+ fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ return (0);
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ close(fd);
+ if (flags & EXT2_NODUMP_FL)
+ return (1);
+ return (0);
+}
+
+#else
+
+int
+canNodump()
+{
+ return (0);
+}
+
+#endif
+
+/*
* Sleep as needed; useful for verifying disk timestamp changes by
* ensuring that the wall-clock time has actually changed before we
* go back to re-read something from disk.
@@ -2234,17 +2375,77 @@
return strdup(buff);
}
=20
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+ int start, end;
+ int idx =3D 0;
+
+ if (test =3D=3D NULL) {
+ /* Default: Run all tests. */
+ for (;idx < limit; idx++)
+ test_set[idx] =3D idx;
+ return (limit);
+ }
+ if (*test >=3D '0' && *test <=3D '9') {
+ const char *vp =3D test;
+ start =3D 0;
+ while (*vp >=3D '0' && *vp <=3D '9') {
+ start *=3D 10;
+ start +=3D *vp - '0';
+ ++vp;
+ }
+ if (*vp =3D=3D '\0') {
+ end =3D start;
+ } else if (*vp =3D=3D '-') {
+ ++vp;
+ if (*vp =3D=3D '\0') {
+ end =3D limit - 1;
+ } else {
+ end =3D 0;
+ while (*vp >=3D '0' && *vp <=3D '9') {
+ end *=3D 10;
+ end +=3D *vp - '0';
+ ++vp;
+ }
+ }
+ } else
+ return (-1);
+ if (start < 0 || end >=3D limit || start > end)
+ return (-1);
+ while (start <=3D end)
+ test_set[idx++] =3D start++;
+ } else {
+ size_t len =3D strlen(test);
+ for (start =3D 0; start < limit; ++start) {
+ const char *name =3D tests[start].name;
+ const char *p;
+
+ while ((p =3D strchr(name, test[0])) !=3D NULL) {
+ if (strncmp(p, test, len) =3D=3D 0) {
+ test_set[idx++] =3D start;
+ break;
+ } else
+ name =3D p + 1;
+ }
+
+ }
+ }
+ return ((idx =3D=3D 0)?-1:idx);
+}
+
int
main(int argc, char **argv)
{
static const int limit =3D sizeof(tests) / sizeof(tests[0]);
- int i =3D 0, j =3D 0, start, end, tests_run =3D 0, tests_failed =3D 0, op=
tion;
+ int test_set[sizeof(tests) / sizeof(tests[0])];
+ int i =3D 0, j =3D 0, tests_run =3D 0, tests_failed =3D 0, option;
time_t now;
char *refdir_alloc =3D NULL;
const char *progname;
char **saved_argv;
const char *tmp, *option_arg, *p;
- char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL;
+ char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL, *vlevel =3D NULL;
char tmpdir_timestamp[256];
=20
(void)argc; /* UNUSED */
@@ -2330,6 +2531,19 @@
if (getenv(ENVBASE "_DEBUG") !=3D NULL)
dump_on_failure =3D 1;
=20
+ /* Allow -v to be controlled through the environment. */
+ if (getenv("_VERBOSITY_LEVEL") !=3D NULL)
+ {
+ vlevel =3D getenv("_VERBOSITY_LEVEL");
+ verbosity =3D atoi(vlevel);
+ if (verbosity < VERBOSITY_SUMMARY_ONLY || verbosity > VERBOSITY_FULL)
+ {
+ /* Unsupported verbosity levels are silently ignored */
+ vlevel =3D NULL;
+ verbosity =3D VERBOSITY_PASSFAIL;
+ }
+ }
+
/* Get the directory holding test files from environment. */
refdir =3D getenv(ENVBASE "_TEST_FILES");
=20
@@ -2377,7 +2591,8 @@
#endif
break;
case 'q':
- verbosity--;
+ if (!vlevel)
+ verbosity--;
break;
case 'r':
refdir =3D option_arg;
@@ -2386,7 +2601,8 @@
until_failure++;
break;
case 'v':
- verbosity++;
+ if (!vlevel)
+ verbosity++;
break;
default:
fprintf(stderr, "Unrecognized option '%c'\n",
@@ -2499,78 +2715,27 @@
saved_argv =3D argv;
do {
argv =3D saved_argv;
- if (*argv =3D=3D NULL) {
- /* Default: Run all tests. */
- for (i =3D 0; i < limit; i++) {
+ do {
+ int test_num;
+
+ test_num =3D get_test_set(test_set, limit, *argv);
+ if (test_num < 0) {
+ printf("*** INVALID Test %s\n", *argv);
+ free(refdir_alloc);
+ usage(progname);
+ return (1);
+ }
+ for (i =3D 0; i < test_num; i++) {
tests_run++;
- if (test_run(i, tmpdir)) {
+ if (test_run(test_set[i], tmpdir)) {
tests_failed++;
if (until_failure)
goto finish;
}
}
- } else {
- while (*(argv) !=3D NULL) {
- if (**argv >=3D '0' && **argv <=3D '9') {
- char *vp =3D *argv;
- start =3D 0;
- while (*vp >=3D '0' && *vp <=3D '9') {
- start *=3D 10;
- start +=3D *vp - '0';
- ++vp;
- }
- if (*vp =3D=3D '\0') {
- end =3D start;
- } else if (*vp =3D=3D '-') {
- ++vp;
- if (*vp =3D=3D '\0') {
- end =3D limit - 1;
- } else {
- end =3D 0;
- while (*vp >=3D '0' && *vp <=3D '9') {
- end *=3D 10;
- end +=3D *vp - '0';
- ++vp;
- }
- }
- } else {
- printf("*** INVALID Test %s\n", *argv);
- free(refdir_alloc);
- usage(progname);
- return (1);
- }
- if (start < 0 || end >=3D limit || start > end) {
- printf("*** INVALID Test %s\n", *argv);
- free(refdir_alloc);
- usage(progname);
- return (1);
- }
- } else {
- for (start =3D 0; start < limit; ++start) {
- if (strcmp(*argv, tests[start].name) =3D=3D 0)
- break;
- }
- end =3D start;
- if (start >=3D limit) {
- printf("*** INVALID Test ``%s''\n",
- *argv);
- free(refdir_alloc);
- usage(progname);
- /* usage() never returns */
- }
- }
- while (start <=3D end) {
- tests_run++;
- if (test_run(start, tmpdir)) {
- tests_failed++;
- if (until_failure)
- goto finish;
- }
- ++start;
- }
+ if (*argv !=3D NULL)
argv++;
- }
- }
+ } while (*argv !=3D NULL);
} while (until_failure);
=20
finish:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/read_open_memory.c
--- a/head/contrib/libarchive/libarchive/test/read_open_memory.c Mon Jul 30=
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/read_open_memory.c Fri Aug 10=
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/read_open_memo=
ry.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/read_open_memo=
ry.c 238856 2012-07-28 06:38:44Z mm $");
=20
#include <errno.h>
#include <stdlib.h>
@@ -68,7 +68,7 @@
* that internals work correctly with just the minimal entry points.
*/
int
-read_open_memory2(struct archive *a, void *buff, size_t size, size_t read_=
size)
+read_open_memory_minimal(struct archive *a, void *buff, size_t size, size_=
t read_size)
{
return read_open_memory_internal(a, buff, size, read_size, 1);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test.h
--- a/head/contrib/libarchive/libarchive/test/test.h Mon Jul 30 11:44:18 20=
12 +0300
+++ b/head/contrib/libarchive/libarchive/test/test.h Fri Aug 10 14:19:25 20=
12 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive/test/test.h 232153 2012-02=
-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/test/test.h 238856 2012-07=
-28 06:38:44Z mm $
*/
=20
/* Every test program should #include "test.h" as the first thing. */
@@ -194,11 +194,15 @@
#define assertMakeDir(dirname, mode) \
assertion_make_dir(__FILE__, __LINE__, dirname, mode)
#define assertMakeFile(path, mode, contents) \
- assertion_make_file(__FILE__, __LINE__, path, mode, contents)
+ assertion_make_file(__FILE__, __LINE__, path, mode, -1, contents)
+#define assertMakeBinFile(path, mode, csize, contents) \
+ assertion_make_file(__FILE__, __LINE__, path, mode, csize, contents)
#define assertMakeHardlink(newfile, oldfile) \
assertion_make_hardlink(__FILE__, __LINE__, newfile, oldfile)
#define assertMakeSymlink(newfile, linkto) \
assertion_make_symlink(__FILE__, __LINE__, newfile, linkto)
+#define assertNodump(path) \
+ assertion_nodump(__FILE__, __LINE__, path)
#define assertUmask(mask) \
assertion_umask(__FILE__, __LINE__, mask)
#define assertUtimes(pathname, atime, atime_nsec, mtime, mtime_nsec) \
@@ -241,9 +245,10 @@
int assertion_is_reg(const char *, int, const char *, int);
int assertion_is_symlink(const char *, int, const char *, const char *);
int assertion_make_dir(const char *, int, const char *, int);
-int assertion_make_file(const char *, int, const char *, int, const char *=
);
+int assertion_make_file(const char *, int, const char *, int, int, const v=
oid *);
int assertion_make_hardlink(const char *, int, const char *newpath, const =
char *);
int assertion_make_symlink(const char *, int, const char *newpath, const c=
har *);
+int assertion_nodump(const char *, int, const char *);
int assertion_non_empty_file(const char *, int, const char *);
int assertion_text_file_contents(const char *, int, const char *buff, cons=
t char *f);
int assertion_umask(const char *, int, int);
@@ -267,6 +272,9 @@
/* Return true if this platform can run the "gunzip" program. */
int canGunzip(void);
=20
+/* Return true if this filesystem can handle nodump flags. */
+int canNodump(void);
+
/* Return true if the file has large i-node number(>0xffffffff). */
int is_LargeInode(const char *);
=20
@@ -289,8 +297,8 @@
=20
/* Special customized read-from-memory interface. */
int read_open_memory(struct archive *, void *, size_t, size_t);
-/* "2" version exercises a slightly different set of libarchive APIs. */
-int read_open_memory2(struct archive *, void *, size_t, size_t);
+/* _minimal version exercises a slightly different set of libarchive APIs.=
*/
+int read_open_memory_minimal(struct archive *, void *, size_t, size_t);
/* _seek version produces a seekable file. */
int read_open_memory_seek(struct archive *, void *, size_t, size_t);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_acl_freebsd_nfs4.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_acl_freebsd_nfs4.c Fri A=
ug 10 14:19:25 2012 +0300
@@ -0,0 +1,1094 @@
+/*-
+ * Copyright (c) 2003-2010 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+#if defined(__FreeBSD__) && __FreeBSD__ >=3D 8
+#define _ACL_PRIVATE
+#include <sys/acl.h>
+
+struct myacl_t {
+ int type;
+ int permset;
+ int tag;
+ int qual; /* GID or UID of user/group, depending on tag. */
+ const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls_reg[] =3D {
+ /* For this test, we need the file owner to be able to read and write the=
ACL. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_READ_ACL | ARCHIVE_ENTR=
Y_ACL_WRITE_ACL | ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | ARCHIVE_ENTRY_ACL_RE=
AD_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+ /* An entry for each type. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 108, "user108" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 109, "user109" },
+
+ /* An entry for each permission. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 112, "user112" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_DATA,
+ ARCHIVE_ENTRY_ACL_USER, 113, "user113" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_DATA,
+ ARCHIVE_ENTRY_ACL_USER, 115, "user115" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_APPEND_DATA,
+ ARCHIVE_ENTRY_ACL_USER, 117, "user117" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 119, "user119" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 120, "user120" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 122, "user122" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 123, "user123" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+ ARCHIVE_ENTRY_ACL_USER, 124, "user124" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 125, "user125" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 126, "user126" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_USER, 127, "user127" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER, 128, "user128" },
+
+ /* One entry for each qualifier. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 135, "user135" },
+// { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+// ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_GROUP, 136, "group136" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+
+static struct myacl_t acls_dir[] =3D {
+ /* For this test, we need to be able to read and write the ACL. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+ /* An entry for each type. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 101, "user101" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 102, "user102" },
+
+ /* An entry for each permission. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 201, "user201" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_FILE,
+ ARCHIVE_ENTRY_ACL_USER, 202, "user202" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 203, "user203" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 204, "user204" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 205, "user205" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE_CHILD,
+ ARCHIVE_ENTRY_ACL_USER, 206, "user206" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 207, "user207" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 208, "user208" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+ ARCHIVE_ENTRY_ACL_USER, 209, "user209" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 210, "user210" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 211, "user211" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_USER, 212, "user212" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER, 213, "user213" },
+
+ /* One entry with each inheritance value. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT,
+ ARCHIVE_ENTRY_ACL_USER, 301, "user301" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
+ ARCHIVE_ENTRY_ACL_USER, 302, "user302" },
+#if 0
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHE=
RIT,
+ ARCHIVE_ENTRY_ACL_USER, 303, "user303" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY,
+ ARCHIVE_ENTRY_ACL_USER, 304, "user304" },
+#endif
+
+#if 0
+ /* FreeBSD does not support audit entries. */
+ { ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS,
+ ARCHIVE_ENTRY_ACL_USER, 401, "user401" },
+ { ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS,
+ ARCHIVE_ENTRY_ACL_USER, 402, "user402" },
+#endif
+
+ /* One entry for each qualifier. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 501, "user501" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_GROUP, 502, "group502" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls, int start, int en=
d)
+{
+ int i;
+
+ archive_entry_acl_clear(ae);
+ if (start > 0) {
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_add_entry(ae,
+ acls[0].type, acls[0].permset, acls[0].tag,
+ acls[0].qual, acls[0].name));
+ }
+ for (i =3D start; i < end; i++) {
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_add_entry(ae,
+ acls[i].type, acls[i].permset, acls[i].tag,
+ acls[i].qual, acls[i].name));
+ }
+}
+
+static int
+acl_permset_to_bitmap(acl_permset_t opaque_ps)
+{
+ static struct { int machine; int portable; } perms[] =3D {
+ {ACL_EXECUTE, ARCHIVE_ENTRY_ACL_EXECUTE},
+ {ACL_WRITE, ARCHIVE_ENTRY_ACL_WRITE},
+ {ACL_READ, ARCHIVE_ENTRY_ACL_READ},
+ {ACL_READ_DATA, ARCHIVE_ENTRY_ACL_READ_DATA},
+ {ACL_LIST_DIRECTORY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY},
+ {ACL_WRITE_DATA, ARCHIVE_ENTRY_ACL_WRITE_DATA},
+ {ACL_ADD_FILE, ARCHIVE_ENTRY_ACL_ADD_FILE},
+ {ACL_APPEND_DATA, ARCHIVE_ENTRY_ACL_APPEND_DATA},
+ {ACL_ADD_SUBDIRECTORY, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY},
+ {ACL_READ_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS},
+ {ACL_WRITE_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS},
+ {ACL_DELETE_CHILD, ARCHIVE_ENTRY_ACL_DELETE_CHILD},
+ {ACL_READ_ATTRIBUTES, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES},
+ {ACL_WRITE_ATTRIBUTES, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES},
+ {ACL_DELETE, ARCHIVE_ENTRY_ACL_DELETE},
+ {ACL_READ_ACL, ARCHIVE_ENTRY_ACL_READ_ACL},
+ {ACL_WRITE_ACL, ARCHIVE_ENTRY_ACL_WRITE_ACL},
+ {ACL_WRITE_OWNER, ARCHIVE_ENTRY_ACL_WRITE_OWNER},
+ {ACL_SYNCHRONIZE, ARCHIVE_ENTRY_ACL_SYNCHRONIZE}
+ };
+ int i, permset =3D 0;
+
+ for (i =3D 0; i < (int)(sizeof(perms)/sizeof(perms[0])); ++i)
+ if (acl_get_perm_np(opaque_ps, perms[i].machine))
+ permset |=3D perms[i].portable;
+ return permset;
+}
+
+static int
+acl_flagset_to_bitmap(acl_flagset_t opaque_fs)
+{
+ static struct { int machine; int portable; } flags[] =3D {
+ {ACL_ENTRY_FILE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT},
+ {ACL_ENTRY_DIRECTORY_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT},
+ {ACL_ENTRY_NO_PROPAGATE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_IN=
HERIT},
+ {ACL_ENTRY_INHERIT_ONLY, ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY},
+ };
+ int i, flagset =3D 0;
+
+ for (i =3D 0; i < (int)(sizeof(flags)/sizeof(flags[0])); ++i)
+ if (acl_get_flag_np(opaque_fs, flags[i].machine))
+ flagset |=3D flags[i].portable;
+ return flagset;
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+ gid_t g, *gp;
+ uid_t u, *up;
+ acl_tag_t tag_type;
+ acl_permset_t opaque_ps;
+ acl_flagset_t opaque_fs;
+ int perms;
+
+ acl_get_tag_type(aclent, &tag_type);
+
+ /* translate the silly opaque permset to a bitmap */
+ acl_get_permset(aclent, &opaque_ps);
+ acl_get_flagset_np(aclent, &opaque_fs);
+ perms =3D acl_permset_to_bitmap(opaque_ps) | acl_flagset_to_bitmap(opaque=
_fs);
+ if (perms !=3D myacl->permset)
+ return (0);
+
+ switch (tag_type) {
+ case ACL_USER_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+ break;
+ case ACL_USER:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+ return (0);
+ up =3D acl_get_qualifier(aclent);
+ u =3D *up;
+ acl_free(up);
+ if ((uid_t)myacl->qual !=3D u)
+ return (0);
+ break;
+ case ACL_GROUP_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+ break;
+ case ACL_GROUP:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+ return (0);
+ gp =3D acl_get_qualifier(aclent);
+ g =3D *gp;
+ acl_free(gp);
+ if ((gid_t)myacl->qual !=3D g)
+ return (0);
+ break;
+ case ACL_MASK:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+ break;
+ case ACL_EVERYONE:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_EVERYONE) return (0);
+ break;
+ }
+ return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls, const char *filename, int =
start, int end)
+{
+ int *marker;
+ int entry_id =3D ACL_FIRST_ENTRY;
+ int matched;
+ int i, n;
+ acl_entry_t acl_entry;
+
+ n =3D end - start;
+ marker =3D malloc(sizeof(marker[0]) * (n + 1));
+ for (i =3D 0; i < n; i++)
+ marker[i] =3D i + start;
+ /* Always include the first ACE. */
+ if (start > 0) {
+ marker[n] =3D 0;
+ ++n;
+ }
+
+ /*
+ * Iterate over acls in system acl object, try to match each
+ * one with an item in the myacls array.
+ */
+ while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+ /* After the first time... */
+ entry_id =3D ACL_NEXT_ENTRY;
+
+ /* Search for a matching entry (tag and qualifier) */
+ for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+ if (acl_match(acl_entry, &myacls[marker[i]])) {
+ /* We found a match; remove it. */
+ marker[i] =3D marker[n - 1];
+ n--;
+ matched =3D 1;
+ }
+ }
+
+ failure("ACL entry on file %s that shouldn't be there", filename);
+ assert(matched =3D=3D 1);
+ }
+
+ /* Dump entries in the myacls array that weren't in the system acl. */
+ for (i =3D 0; i < n; ++i) {
+ failure(" ACL entry %d missing from %s: "
+ "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+ marker[i], filename,
+ myacls[marker[i]].type, myacls[marker[i]].permset,
+ myacls[marker[i]].tag, myacls[marker[i]].qual,
+ myacls[marker[i]].name);
+ assert(0); /* Record this as a failure. */
+ }
+ free(marker);
+}
+
+static void
+compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const=
char *filename, int start, int end)
+{
+ int *marker;
+ int matched;
+ int i, n;
+ int type, permset, tag, qual;
+ const char *name;
+
+ /* Count ACL entries in myacls array and allocate an indirect array. */
+ n =3D end - start;
+ marker =3D malloc(sizeof(marker[0]) * (n + 1));
+ for (i =3D 0; i < n; i++)
+ marker[i] =3D i + start;
+ /* Always include the first ACE. */
+ if (start > 0) {
+ marker[n] =3D 0;
+ ++n;
+ }
+
+ /*
+ * Iterate over acls in entry, try to match each
+ * one with an item in the myacls array.
+ */
+ assertEqualInt(n, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4=
));
+ while (ARCHIVE_OK =3D=3D archive_entry_acl_next(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, &type, &permset, &tag, &qual, &name)) {
+
+ /* Search for a matching entry (tag and qualifier) */
+ for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+ if (tag =3D=3D myacls[marker[i]].tag
+ && qual =3D=3D myacls[marker[i]].qual
+ && permset =3D=3D myacls[marker[i]].permset
+ && type =3D=3D myacls[marker[i]].type) {
+ /* We found a match; remove it. */
+ marker[i] =3D marker[n - 1];
+ n--;
+ matched =3D 1;
+ }
+ }
+
+ failure("ACL entry on file that shouldn't be there: "
+ "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d",
+ type,permset,tag,qual);
+ assert(matched =3D=3D 1);
+ }
+
+ /* Dump entries in the myacls array that weren't in the system acl. */
+ for (i =3D 0; i < n; ++i) {
+ failure(" ACL entry %d missing from %s: "
+ "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+ marker[i], filename,
+ myacls[marker[i]].type, myacls[marker[i]].permset,
+ myacls[marker[i]].tag, myacls[marker[i]].qual,
+ myacls[marker[i]].name);
+ assert(0); /* Record this as a failure. */
+ }
+ free(marker);
+}
+#endif
+
+/*
+ * Verify ACL restore-to-disk. This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_nfs4)
+{
+#if !defined(__FreeBSD__)
+ skipping("FreeBSD-specific NFS4 ACL restore test");
+#elif __FreeBSD__ < 8
+ skipping("NFS4 ACLs supported only on FreeBSD 8.0 and later");
+#else
+ char buff[64];
+ struct stat st;
+ struct archive *a;
+ struct archive_entry *ae;
+ int i, n;
+ acl_t acl;
+
+ /*
+ * First, do a quick manual set/read of ACL data to
+ * verify that the local filesystem does support ACLs.
+ * If it doesn't, we'll simply skip the remaining tests.
+ */
+ acl =3D acl_from_text("owner@:rwxp::allow,group@:rwp:f:allow");
+ assert((void *)acl !=3D NULL);
+ /* Create a test dir and try to set an ACL on it. */
+ if (!assertMakeDir("pretest", 0755)) {
+ acl_free(acl);
+ return;
+ }
+
+ n =3D acl_set_file("pretest", ACL_TYPE_NFS4, acl);
+ acl_free(acl);
+ if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+ skipping("NFS4 ACL tests require that NFS4 ACLs"
+ " be enabled on the filesystem");
+ return;
+ }
+ if (n !=3D 0 && errno =3D=3D EINVAL) {
+ skipping("This filesystem does not support NFS4 ACLs");
+ return;
+ }
+ failure("acl_set_file(): errno =3D %d (%s)",
+ errno, strerror(errno));
+ assertEqualInt(0, n);
+
+ /* Create a write-to-disk object. */
+ assert(NULL !=3D (a =3D archive_write_disk_new()));
+ archive_write_disk_set_options(a,
+ ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+ /* Populate an archive entry with some metadata, including ACL info */
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "testall");
+ archive_entry_set_filetype(ae, AE_IFREG);
+ archive_entry_set_perm(ae, 0654);
+ archive_entry_set_mtime(ae, 123456, 7890);
+ archive_entry_set_size(ae, 0);
+ set_acls(ae, acls_reg, 0, (int)(sizeof(acls_reg)/sizeof(acls_reg[0])));
+
+ /* Write the entry to disk, including ACLs. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+ /* Likewise for a dir. */
+ archive_entry_set_pathname(ae, "dirall");
+ archive_entry_set_filetype(ae, AE_IFDIR);
+ archive_entry_set_perm(ae, 0654);
+ archive_entry_set_mtime(ae, 123456, 7890);
+ set_acls(ae, acls_dir, 0, (int)(sizeof(acls_dir)/sizeof(acls_dir[0])));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+ for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+ sprintf(buff, "dir%d", i);
+ archive_entry_set_pathname(ae, buff);
+ archive_entry_set_filetype(ae, AE_IFDIR);
+ archive_entry_set_perm(ae, 0654);
+ archive_entry_set_mtime(ae, 123456 + i, 7891 + i);
+ set_acls(ae, acls_dir, i, i + 1);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ }
+
+ archive_entry_free(ae);
+
+ /* Close the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Verify the data on disk. */
+ assertEqualInt(0, stat("testall", &st));
+ assertEqualInt(st.st_mtime, 123456);
+ acl =3D acl_get_file("testall", ACL_TYPE_NFS4);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/sizeof(a=
cls_reg[0])));
+ acl_free(acl);
+
+ /* Verify single-permission dirs on disk. */
+ for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+ sprintf(buff, "dir%d", i);
+ assertEqualInt(0, stat(buff, &st));
+ assertEqualInt(st.st_mtime, 123456 + i);
+ acl =3D acl_get_file(buff, ACL_TYPE_NFS4);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls_dir, buff, i, i + 1);
+ acl_free(acl);
+ }
+
+ /* Verify "dirall" on disk. */
+ assertEqualInt(0, stat("dirall", &st));
+ assertEqualInt(st.st_mtime, 123456);
+ acl =3D acl_get_file("dirall", ACL_TYPE_NFS4);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls_dir, "dirall", 0, (int)(sizeof(acls_dir)/sizeof(a=
cls_dir[0])));
+ acl_free(acl);
+
+ /* Read and compare ACL via archive_read_disk */
+ a =3D archive_read_disk_new();
+ assert(a !=3D NULL);
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "testall");
+ assertEqualInt(ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ compare_entry_acls(ae, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/siz=
eof(acls_reg[0])));
+ archive_entry_free(ae);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+ /* Read and compare ACL via archive_read_disk */
+ a =3D archive_read_disk_new();
+ assert(a !=3D NULL);
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "dirall");
+ assertEqualInt(ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ compare_entry_acls(ae, acls_dir, "dirall", 0, (int)(sizeof(acls_dir)/siz=
eof(acls_dir[0])));
+ archive_entry_free(ae);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
+}
+/*-
+ * Copyright (c) 2003-2010 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+#if defined(__FreeBSD__) && __FreeBSD__ >=3D 8
+#define _ACL_PRIVATE
+#include <sys/acl.h>
+
+struct myacl_t {
+ int type;
+ int permset;
+ int tag;
+ int qual; /* GID or UID of user/group, depending on tag. */
+ const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls_reg[] =3D {
+ /* For this test, we need the file owner to be able to read and write the=
ACL. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_READ_ACL | ARCHIVE_ENTR=
Y_ACL_WRITE_ACL | ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | ARCHIVE_ENTRY_ACL_RE=
AD_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+ /* An entry for each type. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 108, "user108" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 109, "user109" },
+
+ /* An entry for each permission. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 112, "user112" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_DATA,
+ ARCHIVE_ENTRY_ACL_USER, 113, "user113" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_DATA,
+ ARCHIVE_ENTRY_ACL_USER, 115, "user115" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_APPEND_DATA,
+ ARCHIVE_ENTRY_ACL_USER, 117, "user117" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 119, "user119" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 120, "user120" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 122, "user122" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 123, "user123" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+ ARCHIVE_ENTRY_ACL_USER, 124, "user124" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 125, "user125" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 126, "user126" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_USER, 127, "user127" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER, 128, "user128" },
+
+ /* One entry for each qualifier. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 135, "user135" },
+// { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+// ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_GROUP, 136, "group136" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+
+static struct myacl_t acls_dir[] =3D {
+ /* For this test, we need to be able to read and write the ACL. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+ /* An entry for each type. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 101, "user101" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 102, "user102" },
+
+ /* An entry for each permission. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 201, "user201" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_FILE,
+ ARCHIVE_ENTRY_ACL_USER, 202, "user202" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 203, "user203" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 204, "user204" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+ ARCHIVE_ENTRY_ACL_USER, 205, "user205" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE_CHILD,
+ ARCHIVE_ENTRY_ACL_USER, 206, "user206" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 207, "user207" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+ ARCHIVE_ENTRY_ACL_USER, 208, "user208" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+ ARCHIVE_ENTRY_ACL_USER, 209, "user209" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 210, "user210" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+ ARCHIVE_ENTRY_ACL_USER, 211, "user211" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_USER, 212, "user212" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER, 213, "user213" },
+
+ /* One entry with each inheritance value. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT,
+ ARCHIVE_ENTRY_ACL_USER, 301, "user301" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
+ ARCHIVE_ENTRY_ACL_USER, 302, "user302" },
+#if 0
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHE=
RIT,
+ ARCHIVE_ENTRY_ACL_USER, 303, "user303" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY,
+ ARCHIVE_ENTRY_ACL_USER, 304, "user304" },
+#endif
+
+#if 0
+ /* FreeBSD does not support audit entries. */
+ { ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS,
+ ARCHIVE_ENTRY_ACL_USER, 401, "user401" },
+ { ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS,
+ ARCHIVE_ENTRY_ACL_USER, 402, "user402" },
+#endif
+
+ /* One entry for each qualifier. */
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_USER, 501, "user501" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_GROUP, 502, "group502" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+ ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls, int start, int en=
d)
+{
+ int i;
+
+ archive_entry_acl_clear(ae);
+ if (start > 0) {
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_add_entry(ae,
+ acls[0].type, acls[0].permset, acls[0].tag,
+ acls[0].qual, acls[0].name));
+ }
+ for (i =3D start; i < end; i++) {
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_add_entry(ae,
+ acls[i].type, acls[i].permset, acls[i].tag,
+ acls[i].qual, acls[i].name));
+ }
+}
+
+static int
+acl_permset_to_bitmap(acl_permset_t opaque_ps)
+{
+ static struct { int machine; int portable; } perms[] =3D {
+ {ACL_EXECUTE, ARCHIVE_ENTRY_ACL_EXECUTE},
+ {ACL_WRITE, ARCHIVE_ENTRY_ACL_WRITE},
+ {ACL_READ, ARCHIVE_ENTRY_ACL_READ},
+ {ACL_READ_DATA, ARCHIVE_ENTRY_ACL_READ_DATA},
+ {ACL_LIST_DIRECTORY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY},
+ {ACL_WRITE_DATA, ARCHIVE_ENTRY_ACL_WRITE_DATA},
+ {ACL_ADD_FILE, ARCHIVE_ENTRY_ACL_ADD_FILE},
+ {ACL_APPEND_DATA, ARCHIVE_ENTRY_ACL_APPEND_DATA},
+ {ACL_ADD_SUBDIRECTORY, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY},
+ {ACL_READ_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS},
+ {ACL_WRITE_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS},
+ {ACL_DELETE_CHILD, ARCHIVE_ENTRY_ACL_DELETE_CHILD},
+ {ACL_READ_ATTRIBUTES, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES},
+ {ACL_WRITE_ATTRIBUTES, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES},
+ {ACL_DELETE, ARCHIVE_ENTRY_ACL_DELETE},
+ {ACL_READ_ACL, ARCHIVE_ENTRY_ACL_READ_ACL},
+ {ACL_WRITE_ACL, ARCHIVE_ENTRY_ACL_WRITE_ACL},
+ {ACL_WRITE_OWNER, ARCHIVE_ENTRY_ACL_WRITE_OWNER},
+ {ACL_SYNCHRONIZE, ARCHIVE_ENTRY_ACL_SYNCHRONIZE}
+ };
+ int i, permset =3D 0;
+
+ for (i =3D 0; i < (int)(sizeof(perms)/sizeof(perms[0])); ++i)
+ if (acl_get_perm_np(opaque_ps, perms[i].machine))
+ permset |=3D perms[i].portable;
+ return permset;
+}
+
+static int
+acl_flagset_to_bitmap(acl_flagset_t opaque_fs)
+{
+ static struct { int machine; int portable; } flags[] =3D {
+ {ACL_ENTRY_FILE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT},
+ {ACL_ENTRY_DIRECTORY_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT},
+ {ACL_ENTRY_NO_PROPAGATE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_IN=
HERIT},
+ {ACL_ENTRY_INHERIT_ONLY, ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY},
+ };
+ int i, flagset =3D 0;
+
+ for (i =3D 0; i < (int)(sizeof(flags)/sizeof(flags[0])); ++i)
+ if (acl_get_flag_np(opaque_fs, flags[i].machine))
+ flagset |=3D flags[i].portable;
+ return flagset;
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+ gid_t g, *gp;
+ uid_t u, *up;
+ acl_tag_t tag_type;
+ acl_permset_t opaque_ps;
+ acl_flagset_t opaque_fs;
+ int perms;
+
+ acl_get_tag_type(aclent, &tag_type);
+
+ /* translate the silly opaque permset to a bitmap */
+ acl_get_permset(aclent, &opaque_ps);
+ acl_get_flagset_np(aclent, &opaque_fs);
+ perms =3D acl_permset_to_bitmap(opaque_ps) | acl_flagset_to_bitmap(opaque=
_fs);
+ if (perms !=3D myacl->permset)
+ return (0);
+
+ switch (tag_type) {
+ case ACL_USER_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+ break;
+ case ACL_USER:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+ return (0);
+ up =3D acl_get_qualifier(aclent);
+ u =3D *up;
+ acl_free(up);
+ if ((uid_t)myacl->qual !=3D u)
+ return (0);
+ break;
+ case ACL_GROUP_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+ break;
+ case ACL_GROUP:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+ return (0);
+ gp =3D acl_get_qualifier(aclent);
+ g =3D *gp;
+ acl_free(gp);
+ if ((gid_t)myacl->qual !=3D g)
+ return (0);
+ break;
+ case ACL_MASK:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+ break;
+ case ACL_EVERYONE:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_EVERYONE) return (0);
+ break;
+ }
+ return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls, const char *filename, int =
start, int end)
+{
+ int *marker;
+ int entry_id =3D ACL_FIRST_ENTRY;
+ int matched;
+ int i, n;
+ acl_entry_t acl_entry;
+
+ n =3D end - start;
+ marker =3D malloc(sizeof(marker[0]) * (n + 1));
+ for (i =3D 0; i < n; i++)
+ marker[i] =3D i + start;
+ /* Always include the first ACE. */
+ if (start > 0) {
+ marker[n] =3D 0;
+ ++n;
+ }
+
+ /*
+ * Iterate over acls in system acl object, try to match each
+ * one with an item in the myacls array.
+ */
+ while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+ /* After the first time... */
+ entry_id =3D ACL_NEXT_ENTRY;
+
+ /* Search for a matching entry (tag and qualifier) */
+ for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+ if (acl_match(acl_entry, &myacls[marker[i]])) {
+ /* We found a match; remove it. */
+ marker[i] =3D marker[n - 1];
+ n--;
+ matched =3D 1;
+ }
+ }
+
+ failure("ACL entry on file %s that shouldn't be there", filename);
+ assert(matched =3D=3D 1);
+ }
+
+ /* Dump entries in the myacls array that weren't in the system acl. */
+ for (i =3D 0; i < n; ++i) {
+ failure(" ACL entry %d missing from %s: "
+ "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+ marker[i], filename,
+ myacls[marker[i]].type, myacls[marker[i]].permset,
+ myacls[marker[i]].tag, myacls[marker[i]].qual,
+ myacls[marker[i]].name);
+ assert(0); /* Record this as a failure. */
+ }
+ free(marker);
+}
+
+static void
+compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const=
char *filename, int start, int end)
+{
+ int *marker;
+ int matched;
+ int i, n;
+ int type, permset, tag, qual;
+ const char *name;
+
+ /* Count ACL entries in myacls array and allocate an indirect array. */
+ n =3D end - start;
+ marker =3D malloc(sizeof(marker[0]) * (n + 1));
+ for (i =3D 0; i < n; i++)
+ marker[i] =3D i + start;
+ /* Always include the first ACE. */
+ if (start > 0) {
+ marker[n] =3D 0;
+ ++n;
+ }
+
+ /*
+ * Iterate over acls in entry, try to match each
+ * one with an item in the myacls array.
+ */
+ assertEqualInt(n, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4=
));
+ while (ARCHIVE_OK =3D=3D archive_entry_acl_next(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, &type, &permset, &tag, &qual, &name)) {
+
+ /* Search for a matching entry (tag and qualifier) */
+ for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+ if (tag =3D=3D myacls[marker[i]].tag
+ && qual =3D=3D myacls[marker[i]].qual
+ && permset =3D=3D myacls[marker[i]].permset
+ && type =3D=3D myacls[marker[i]].type) {
+ /* We found a match; remove it. */
+ marker[i] =3D marker[n - 1];
+ n--;
+ matched =3D 1;
+ }
+ }
+
+ failure("ACL entry on file that shouldn't be there: "
+ "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d",
+ type,permset,tag,qual);
+ assert(matched =3D=3D 1);
+ }
+
+ /* Dump entries in the myacls array that weren't in the system acl. */
+ for (i =3D 0; i < n; ++i) {
+ failure(" ACL entry %d missing from %s: "
+ "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+ marker[i], filename,
+ myacls[marker[i]].type, myacls[marker[i]].permset,
+ myacls[marker[i]].tag, myacls[marker[i]].qual,
+ myacls[marker[i]].name);
+ assert(0); /* Record this as a failure. */
+ }
+ free(marker);
+}
+#endif
+
+/*
+ * Verify ACL restore-to-disk. This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_nfs4)
+{
+#if !defined(__FreeBSD__)
+ skipping("FreeBSD-specific NFS4 ACL restore test");
+#elif __FreeBSD__ < 8
+ skipping("NFS4 ACLs supported only on FreeBSD 8.0 and later");
+#else
+ char buff[64];
+ struct stat st;
+ struct archive *a;
+ struct archive_entry *ae;
+ int i, n;
+ acl_t acl;
+
+ /*
+ * First, do a quick manual set/read of ACL data to
+ * verify that the local filesystem does support ACLs.
+ * If it doesn't, we'll simply skip the remaining tests.
+ */
+ acl =3D acl_from_text("owner@:rwxp::allow,group@:rwp:f:allow");
+ assert((void *)acl !=3D NULL);
+ /* Create a test dir and try to set an ACL on it. */
+ if (!assertMakeDir("pretest", 0755)) {
+ acl_free(acl);
+ return;
+ }
+
+ n =3D acl_set_file("pretest", ACL_TYPE_NFS4, acl);
+ acl_free(acl);
+ if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+ skipping("NFS4 ACL tests require that NFS4 ACLs"
+ " be enabled on the filesystem");
+ return;
+ }
+ if (n !=3D 0 && errno =3D=3D EINVAL) {
+ skipping("This filesystem does not support NFS4 ACLs");
+ return;
+ }
+ failure("acl_set_file(): errno =3D %d (%s)",
+ errno, strerror(errno));
+ assertEqualInt(0, n);
+
+ /* Create a write-to-disk object. */
+ assert(NULL !=3D (a =3D archive_write_disk_new()));
+ archive_write_disk_set_options(a,
+ ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+ /* Populate an archive entry with some metadata, including ACL info */
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "testall");
+ archive_entry_set_filetype(ae, AE_IFREG);
+ archive_entry_set_perm(ae, 0654);
+ archive_entry_set_mtime(ae, 123456, 7890);
+ archive_entry_set_size(ae, 0);
+ set_acls(ae, acls_reg, 0, (int)(sizeof(acls_reg)/sizeof(acls_reg[0])));
+
+ /* Write the entry to disk, including ACLs. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+ /* Likewise for a dir. */
+ archive_entry_set_pathname(ae, "dirall");
+ archive_entry_set_filetype(ae, AE_IFDIR);
+ archive_entry_set_perm(ae, 0654);
+ archive_entry_set_mtime(ae, 123456, 7890);
+ set_acls(ae, acls_dir, 0, (int)(sizeof(acls_dir)/sizeof(acls_dir[0])));
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+ for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+ sprintf(buff, "dir%d", i);
+ archive_entry_set_pathname(ae, buff);
+ archive_entry_set_filetype(ae, AE_IFDIR);
+ archive_entry_set_perm(ae, 0654);
+ archive_entry_set_mtime(ae, 123456 + i, 7891 + i);
+ set_acls(ae, acls_dir, i, i + 1);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ }
+
+ archive_entry_free(ae);
+
+ /* Close the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Verify the data on disk. */
+ assertEqualInt(0, stat("testall", &st));
+ assertEqualInt(st.st_mtime, 123456);
+ acl =3D acl_get_file("testall", ACL_TYPE_NFS4);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/sizeof(a=
cls_reg[0])));
+ acl_free(acl);
+
+ /* Verify single-permission dirs on disk. */
+ for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+ sprintf(buff, "dir%d", i);
+ assertEqualInt(0, stat(buff, &st));
+ assertEqualInt(st.st_mtime, 123456 + i);
+ acl =3D acl_get_file(buff, ACL_TYPE_NFS4);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls_dir, buff, i, i + 1);
+ acl_free(acl);
+ }
+
+ /* Verify "dirall" on disk. */
+ assertEqualInt(0, stat("dirall", &st));
+ assertEqualInt(st.st_mtime, 123456);
+ acl =3D acl_get_file("dirall", ACL_TYPE_NFS4);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls_dir, "dirall", 0, (int)(sizeof(acls_dir)/sizeof(a=
cls_dir[0])));
+ acl_free(acl);
+
+ /* Read and compare ACL via archive_read_disk */
+ a =3D archive_read_disk_new();
+ assert(a !=3D NULL);
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "testall");
+ assertEqualInt(ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ compare_entry_acls(ae, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/siz=
eof(acls_reg[0])));
+ archive_entry_free(ae);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+ /* Read and compare ACL via archive_read_disk */
+ a =3D archive_read_disk_new();
+ assert(a !=3D NULL);
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "dirall");
+ assertEqualInt(ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ compare_entry_acls(ae, acls_dir, "dirall", 0, (int)(sizeof(acls_dir)/siz=
eof(acls_dir[0])));
+ archive_entry_free(ae);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_acl_freebsd_posix1e.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_acl_freebsd_posix1e.c Fr=
i Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,520 @@
+/*-
+ * Copyright (c) 2003-2008 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD: head/lib/libarchive/test/test_acl_freebsd.c 189427 200=
9-03-06 04:21:23Z kientzle $");
+
+#if defined(__FreeBSD__) && __FreeBSD__ > 4
+#include <sys/acl.h>
+
+struct myacl_t {
+ int type; /* Type of ACL: "access" or "default" */
+ int permset; /* Permissions for this class of users. */
+ int tag; /* Owner, User, Owning group, group, other, etc. */
+ int qual; /* GID or UID of user/group, depending on tag. */
+ const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls2[] =3D {
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTR=
Y_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
+ ARCHIVE_ENTRY_ACL_USER, 78, "user78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_EX=
ECUTE,
+ ARCHIVE_ENTRY_ACL_MASK, -1, "" },
+ { 0, 0, 0, 0, NULL }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls)
+{
+ int i;
+
+ archive_entry_acl_clear(ae);
+ for (i =3D 0; acls[i].name !=3D NULL; i++) {
+ archive_entry_acl_add_entry(ae,
+ acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual,
+ acls[i].name);
+ }
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+ gid_t g, *gp;
+ uid_t u, *up;
+ acl_tag_t tag_type;
+ acl_permset_t opaque_ps;
+ int permset =3D 0;
+
+ acl_get_tag_type(aclent, &tag_type);
+
+ /* translate the silly opaque permset to a bitmap */
+ acl_get_permset(aclent, &opaque_ps);
+ if (acl_get_perm_np(opaque_ps, ACL_EXECUTE))
+ permset |=3D ARCHIVE_ENTRY_ACL_EXECUTE;
+ if (acl_get_perm_np(opaque_ps, ACL_WRITE))
+ permset |=3D ARCHIVE_ENTRY_ACL_WRITE;
+ if (acl_get_perm_np(opaque_ps, ACL_READ))
+ permset |=3D ARCHIVE_ENTRY_ACL_READ;
+
+ if (permset !=3D myacl->permset)
+ return (0);
+
+ switch (tag_type) {
+ case ACL_USER_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+ break;
+ case ACL_USER:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+ return (0);
+ up =3D acl_get_qualifier(aclent);
+ u =3D *up;
+ acl_free(up);
+ if ((uid_t)myacl->qual !=3D u)
+ return (0);
+ break;
+ case ACL_GROUP_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+ break;
+ case ACL_GROUP:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+ return (0);
+ gp =3D acl_get_qualifier(aclent);
+ g =3D *gp;
+ acl_free(gp);
+ if ((gid_t)myacl->qual !=3D g)
+ return (0);
+ break;
+ case ACL_MASK:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+ break;
+ case ACL_OTHER:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_OTHER) return (0);
+ break;
+ }
+ return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls)
+{
+ int *marker;
+ int entry_id =3D ACL_FIRST_ENTRY;
+ int matched;
+ int i, n;
+ acl_entry_t acl_entry;
+
+ /* Count ACL entries in myacls array and allocate an indirect array. */
+ for (n =3D 0; myacls[n].name !=3D NULL; ++n)
+ continue;
+ marker =3D malloc(sizeof(marker[0]) * n);
+ for (i =3D 0; i < n; i++)
+ marker[i] =3D i;
+
+ /*
+ * Iterate over acls in system acl object, try to match each
+ * one with an item in the myacls array.
+ */
+ while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+ /* After the first time... */
+ entry_id =3D ACL_NEXT_ENTRY;
+
+ /* Search for a matching entry (tag and qualifier) */
+ for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+ if (acl_match(acl_entry, &myacls[marker[i]])) {
+ /* We found a match; remove it. */
+ marker[i] =3D marker[n - 1];
+ n--;
+ matched =3D 1;
+ }
+ }
+
+ /* TODO: Print out more details in this case. */
+ failure("ACL entry on file that shouldn't be there");
+ assert(matched =3D=3D 1);
+ }
+
+ /* Dump entries in the myacls array that weren't in the system acl. */
+ for (i =3D 0; i < n; ++i) {
+ failure(" ACL entry missing from file: "
+ "type=3D%d,permset=3D%d,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+ myacls[marker[i]].type, myacls[marker[i]].permset,
+ myacls[marker[i]].tag, myacls[marker[i]].qual,
+ myacls[marker[i]].name);
+ assert(0); /* Record this as a failure. */
+ }
+ free(marker);
+}
+
+#endif
+
+
+/*
+ * Verify ACL restore-to-disk. This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_posix1e)
+{
+#if !defined(__FreeBSD__)
+ skipping("FreeBSD-specific ACL restore test");
+#elif __FreeBSD__ < 5
+ skipping("ACL restore supported only on FreeBSD 5.0 and later");
+#else
+ struct stat st;
+ struct archive *a;
+ struct archive_entry *ae;
+ int n, fd;
+ acl_t acl;
+
+ /*
+ * First, do a quick manual set/read of ACL data to
+ * verify that the local filesystem does support ACLs.
+ * If it doesn't, we'll simply skip the remaining tests.
+ */
+ acl =3D acl_from_text("u::rwx,u:1:rw,g::rwx,g:15:rx,o::rwx,m::rwx");
+ assert((void *)acl !=3D NULL);
+ /* Create a test file and try to set an ACL on it. */
+ fd =3D open("pretest", O_WRONLY | O_CREAT | O_EXCL, 0777);
+ failure("Could not create test file?!");
+ if (!assert(fd >=3D 0)) {
+ acl_free(acl);
+ return;
+ }
+
+ n =3D acl_set_fd(fd, acl);
+ acl_free(acl);
+ if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+ close(fd);
+ skipping("ACL tests require that ACL support be enabled on the filesyste=
m");
+ return;
+ }
+ if (n !=3D 0 && errno =3D=3D EINVAL) {
+ close(fd);
+ skipping("This filesystem does not support POSIX.1e ACLs");
+ return;
+ }
+ failure("acl_set_fd(): errno =3D %d (%s)",
+ errno, strerror(errno));
+ assertEqualInt(0, n);
+ close(fd);
+
+ /* Create a write-to-disk object. */
+ assert(NULL !=3D (a =3D archive_write_disk_new()));
+ archive_write_disk_set_options(a,
+ ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+ /* Populate an archive entry with some metadata, including ACL info */
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "test0");
+ archive_entry_set_mtime(ae, 123456, 7890);
+ archive_entry_set_size(ae, 0);
+ set_acls(ae, acls2);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+
+ /* Close the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Verify the data on disk. */
+ assertEqualInt(0, stat("test0", &st));
+ assertEqualInt(st.st_mtime, 123456);
+ acl =3D acl_get_file("test0", ACL_TYPE_ACCESS);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls2);
+ acl_free(acl);
+#endif
+}
+/*-
+ * Copyright (c) 2003-2008 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD: head/lib/libarchive/test/test_acl_freebsd.c 189427 200=
9-03-06 04:21:23Z kientzle $");
+
+#if defined(__FreeBSD__) && __FreeBSD__ > 4
+#include <sys/acl.h>
+
+struct myacl_t {
+ int type; /* Type of ACL: "access" or "default" */
+ int permset; /* Permissions for this class of users. */
+ int tag; /* Owner, User, Owning group, group, other, etc. */
+ int qual; /* GID or UID of user/group, depending on tag. */
+ const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls2[] =3D {
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTR=
Y_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
+ ARCHIVE_ENTRY_ACL_USER, 78, "user78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_EX=
ECUTE,
+ ARCHIVE_ENTRY_ACL_MASK, -1, "" },
+ { 0, 0, 0, 0, NULL }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls)
+{
+ int i;
+
+ archive_entry_acl_clear(ae);
+ for (i =3D 0; acls[i].name !=3D NULL; i++) {
+ archive_entry_acl_add_entry(ae,
+ acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual,
+ acls[i].name);
+ }
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+ gid_t g, *gp;
+ uid_t u, *up;
+ acl_tag_t tag_type;
+ acl_permset_t opaque_ps;
+ int permset =3D 0;
+
+ acl_get_tag_type(aclent, &tag_type);
+
+ /* translate the silly opaque permset to a bitmap */
+ acl_get_permset(aclent, &opaque_ps);
+ if (acl_get_perm_np(opaque_ps, ACL_EXECUTE))
+ permset |=3D ARCHIVE_ENTRY_ACL_EXECUTE;
+ if (acl_get_perm_np(opaque_ps, ACL_WRITE))
+ permset |=3D ARCHIVE_ENTRY_ACL_WRITE;
+ if (acl_get_perm_np(opaque_ps, ACL_READ))
+ permset |=3D ARCHIVE_ENTRY_ACL_READ;
+
+ if (permset !=3D myacl->permset)
+ return (0);
+
+ switch (tag_type) {
+ case ACL_USER_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+ break;
+ case ACL_USER:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+ return (0);
+ up =3D acl_get_qualifier(aclent);
+ u =3D *up;
+ acl_free(up);
+ if ((uid_t)myacl->qual !=3D u)
+ return (0);
+ break;
+ case ACL_GROUP_OBJ:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+ break;
+ case ACL_GROUP:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+ return (0);
+ gp =3D acl_get_qualifier(aclent);
+ g =3D *gp;
+ acl_free(gp);
+ if ((gid_t)myacl->qual !=3D g)
+ return (0);
+ break;
+ case ACL_MASK:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+ break;
+ case ACL_OTHER:
+ if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_OTHER) return (0);
+ break;
+ }
+ return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls)
+{
+ int *marker;
+ int entry_id =3D ACL_FIRST_ENTRY;
+ int matched;
+ int i, n;
+ acl_entry_t acl_entry;
+
+ /* Count ACL entries in myacls array and allocate an indirect array. */
+ for (n =3D 0; myacls[n].name !=3D NULL; ++n)
+ continue;
+ marker =3D malloc(sizeof(marker[0]) * n);
+ for (i =3D 0; i < n; i++)
+ marker[i] =3D i;
+
+ /*
+ * Iterate over acls in system acl object, try to match each
+ * one with an item in the myacls array.
+ */
+ while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+ /* After the first time... */
+ entry_id =3D ACL_NEXT_ENTRY;
+
+ /* Search for a matching entry (tag and qualifier) */
+ for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+ if (acl_match(acl_entry, &myacls[marker[i]])) {
+ /* We found a match; remove it. */
+ marker[i] =3D marker[n - 1];
+ n--;
+ matched =3D 1;
+ }
+ }
+
+ /* TODO: Print out more details in this case. */
+ failure("ACL entry on file that shouldn't be there");
+ assert(matched =3D=3D 1);
+ }
+
+ /* Dump entries in the myacls array that weren't in the system acl. */
+ for (i =3D 0; i < n; ++i) {
+ failure(" ACL entry missing from file: "
+ "type=3D%d,permset=3D%d,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+ myacls[marker[i]].type, myacls[marker[i]].permset,
+ myacls[marker[i]].tag, myacls[marker[i]].qual,
+ myacls[marker[i]].name);
+ assert(0); /* Record this as a failure. */
+ }
+ free(marker);
+}
+
+#endif
+
+
+/*
+ * Verify ACL restore-to-disk. This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_posix1e)
+{
+#if !defined(__FreeBSD__)
+ skipping("FreeBSD-specific ACL restore test");
+#elif __FreeBSD__ < 5
+ skipping("ACL restore supported only on FreeBSD 5.0 and later");
+#else
+ struct stat st;
+ struct archive *a;
+ struct archive_entry *ae;
+ int n, fd;
+ acl_t acl;
+
+ /*
+ * First, do a quick manual set/read of ACL data to
+ * verify that the local filesystem does support ACLs.
+ * If it doesn't, we'll simply skip the remaining tests.
+ */
+ acl =3D acl_from_text("u::rwx,u:1:rw,g::rwx,g:15:rx,o::rwx,m::rwx");
+ assert((void *)acl !=3D NULL);
+ /* Create a test file and try to set an ACL on it. */
+ fd =3D open("pretest", O_WRONLY | O_CREAT | O_EXCL, 0777);
+ failure("Could not create test file?!");
+ if (!assert(fd >=3D 0)) {
+ acl_free(acl);
+ return;
+ }
+
+ n =3D acl_set_fd(fd, acl);
+ acl_free(acl);
+ if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+ close(fd);
+ skipping("ACL tests require that ACL support be enabled on the filesyste=
m");
+ return;
+ }
+ if (n !=3D 0 && errno =3D=3D EINVAL) {
+ close(fd);
+ skipping("This filesystem does not support POSIX.1e ACLs");
+ return;
+ }
+ failure("acl_set_fd(): errno =3D %d (%s)",
+ errno, strerror(errno));
+ assertEqualInt(0, n);
+ close(fd);
+
+ /* Create a write-to-disk object. */
+ assert(NULL !=3D (a =3D archive_write_disk_new()));
+ archive_write_disk_set_options(a,
+ ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+ /* Populate an archive entry with some metadata, including ACL info */
+ ae =3D archive_entry_new();
+ assert(ae !=3D NULL);
+ archive_entry_set_pathname(ae, "test0");
+ archive_entry_set_mtime(ae, 123456, 7890);
+ archive_entry_set_size(ae, 0);
+ set_acls(ae, acls2);
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+ archive_entry_free(ae);
+
+ /* Close the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Verify the data on disk. */
+ assertEqualInt(0, stat("test0", &st));
+ assertEqualInt(st.st_mtime, 123456);
+ acl =3D acl_get_file("test0", ACL_TYPE_ACCESS);
+ assert(acl !=3D (acl_t)NULL);
+ compare_acls(acl, acls2);
+ acl_free(acl);
+#endif
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_getdate.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_getdate.c Fri Au=
g 10 14:19:25 2012 +0300
@@ -0,0 +1,81 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+#include <time.h>
+
+/*
+ * Verify that the getdate() function works.
+ */
+
+time_t __archive_get_date(time_t, const char *);
+#define get_date __archive_get_date
+
+DEFINE_TEST(test_archive_getdate)
+{
+ time_t now =3D time(NULL);
+
+ assertEqualInt(get_date(now, "Jan 1, 1970 UTC"), 0);
+ assertEqualInt(get_date(now, "7:12:18-0530 4 May 1983"), 420900138);
+ assertEqualInt(get_date(now, "2004/01/29 513 mest"), 1075345980);
+ assertEqualInt(get_date(now, "99/02/17 7pm utc"), 919278000);
+ assertEqualInt(get_date(now, "02/17/99 7:11am est"), 919253460);
+ /* It's important that we handle ctime() format. */
+ assertEqualInt(get_date(now, "Sun Feb 22 17:38:26 PST 2009"),
+ 1235353106);
+ /* Basic relative offsets. */
+ /* If we use the actual current time as the reference, then
+ * these tests break around DST changes, so it's actually
+ * important to use a specific reference time here. */
+ assertEqualInt(get_date(0, "tomorrow"), 24 * 60 * 60);
+ assertEqualInt(get_date(0, "yesterday"), - 24 * 60 * 60);
+ assertEqualInt(get_date(0, "now + 1 hour"), 60 * 60);
+ assertEqualInt(get_date(0, "now + 1 hour + 1 minute"), 60 * 60 + 60);
+ /* Repeat the above for a different start time. */
+ now =3D 1231113600; /* Jan 5, 2009 00:00 UTC */
+ assertEqualInt(get_date(0, "Jan 5, 2009 00:00 UTC"), now);
+ assertEqualInt(get_date(now, "tomorrow"), now + 24 * 60 * 60);
+ assertEqualInt(get_date(now, "yesterday"), now - 24 * 60 * 60);
+ assertEqualInt(get_date(now, "now + 1 hour"), now + 60 * 60);
+ assertEqualInt(get_date(now, "now + 1 hour + 1 minute"),
+ now + 60 * 60 + 60);
+ assertEqualInt(get_date(now, "tomorrow 5:16am UTC"),
+ now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
+ assertEqualInt(get_date(now, "UTC 5:16am tomorrow"),
+ now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
+
+ /* Jan 5, 2009 was a Monday. */
+ assertEqualInt(get_date(now, "monday UTC"), now);
+ assertEqualInt(get_date(now, "sunday UTC"), now + 6 * 24 * 60 * 60);
+ assertEqualInt(get_date(now, "tuesday UTC"), now + 24 * 60 * 60);
+ /* "next tuesday" is one week after "tuesday" */
+ assertEqualInt(get_date(now, "UTC next tuesday"),
+ now + 8 * 24 * 60 * 60);
+ /* "last tuesday" is one week before "tuesday" */
+ assertEqualInt(get_date(now, "last tuesday UTC"),
+ now - 6 * 24 * 60 * 60);
+ /* TODO: Lots more tests here. */
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_match_owner.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_match_owner.c Fr=
i Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,289 @@
+/*-
+ * Copyright (c) 2012 Michihiro NAKAJIMA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+static void
+test_uid(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_uid(m, 1000));
+ assertEqualIntA(m, 0, archive_match_include_uid(m, 1002));
+
+ archive_entry_set_uid(ae, 0);
+ failure("uid 0 should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_uid(ae, 1000);
+ failure("uid 1000 should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_uid(ae, 1001);
+ failure("uid 1001 should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_uid(ae, 1002);
+ failure("uid 1002 should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_uid(ae, 1003);
+ failure("uid 1003 should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_gid(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_gid(m, 1000));
+ assertEqualIntA(m, 0, archive_match_include_gid(m, 1002));
+
+ archive_entry_set_gid(ae, 0);
+ failure("uid 0 should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_gid(ae, 1000);
+ failure("uid 1000 should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_gid(ae, 1001);
+ failure("uid 1001 should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_gid(ae, 1002);
+ failure("uid 1002 should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_gid(ae, 1003);
+ failure("uid 1003 should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_uname_mbs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_uname(m, "foo"));
+ assertEqualIntA(m, 0, archive_match_include_uname(m, "bar"));
+
+ archive_entry_copy_uname(ae, "unknown");
+ failure("User 'unknown' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_uname(ae, "foo");
+ failure("User 'foo' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_uname(ae, "foo1");
+ failure("User 'foo1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_uname(ae, "bar");
+ failure("User 'bar' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_uname(ae, "bar1");
+ failure("User 'bar1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_uname_wcs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_uname_w(m, L"foo"));
+ assertEqualIntA(m, 0, archive_match_include_uname_w(m, L"bar"));
+
+ archive_entry_copy_uname_w(ae, L"unknown");
+ failure("User 'unknown' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_uname_w(ae, L"foo");
+ failure("User 'foo' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_uname_w(ae, L"foo1");
+ failure("User 'foo1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_uname_w(ae, L"bar");
+ failure("User 'bar' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_uname_w(ae, L"bar1");
+ failure("User 'bar1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_gname_mbs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_gname(m, "foo"));
+ assertEqualIntA(m, 0, archive_match_include_gname(m, "bar"));
+
+ archive_entry_copy_gname(ae, "unknown");
+ failure("Group 'unknown' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_gname(ae, "foo");
+ failure("Group 'foo' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_gname(ae, "foo1");
+ failure("Group 'foo1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_gname(ae, "bar");
+ failure("Group 'bar' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_gname(ae, "bar1");
+ failure("Group 'bar1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_gname_wcs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_gname_w(m, L"foo"));
+ assertEqualIntA(m, 0, archive_match_include_gname_w(m, L"bar"));
+
+ archive_entry_copy_gname_w(ae, L"unknown");
+ failure("Group 'unknown' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_gname_w(ae, L"foo");
+ failure("Group 'foo' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_gname_w(ae, L"foo1");
+ failure("Group 'foo1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_copy_gname_w(ae, L"bar");
+ failure("Group 'bar' should not be excluded");
+ assertEqualInt(0, archive_match_owner_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_copy_gname_w(ae, L"bar1");
+ failure("Group 'bar1' should be excluded");
+ assertEqualInt(1, archive_match_owner_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+DEFINE_TEST(test_archive_match_owner)
+{
+ test_uid();
+ test_gid();
+ test_uname_mbs();
+ test_uname_wcs();
+ test_gname_mbs();
+ test_gname_wcs();
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_match_path.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_match_path.c Fri=
Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,450 @@
+/*-
+ * Copyright (c) 2012 Michihiro NAKAJIMA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+static void
+test_exclusion_mbs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ /* Test for pattern "^aa*" */
+ assertEqualIntA(m, 0, archive_match_exclude_pattern(m, "^aa*"));
+
+ /* Test with 'aa1234', which should be excluded. */
+ archive_entry_copy_pathname(ae, "aa1234");
+ failure("'aa1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"aa1234");
+ failure("'aa1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Test with 'a1234', which should not be excluded. */
+ archive_entry_copy_pathname(ae, "a1234");
+ failure("'a1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"a1234");
+ failure("'a1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_exclusion_wcs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ /* Test for pattern "^aa*" */
+ assertEqualIntA(m, 0, archive_match_exclude_pattern_w(m, L"^aa*"));
+
+ /* Test with 'aa1234', which should be excluded. */
+ archive_entry_copy_pathname(ae, "aa1234");
+ failure("'aa1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"aa1234");
+ failure("'aa1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Test with 'a1234', which should not be excluded. */
+ archive_entry_copy_pathname(ae, "a1234");
+ failure("'a1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"a1234");
+ failure("'a1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+exclusion_from_file(struct archive *m)
+{
+ struct archive_entry *ae;
+
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ /* Test with 'first', which should not be excluded. */
+ archive_entry_copy_pathname(ae, "first");
+ failure("'first' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"first");
+ failure("'first' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Test with 'second', which should be excluded. */
+ archive_entry_copy_pathname(ae, "second");
+ failure("'second' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"second");
+ failure("'second' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Test with 'third', which should not be excluded. */
+ archive_entry_copy_pathname(ae, "third");
+ failure("'third' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"third");
+ failure("'third' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Test with 'four', which should be excluded. */
+ archive_entry_copy_pathname(ae, "four");
+ failure("'four' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"four");
+ failure("'four' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+}
+
+static void
+test_exclusion_from_file_mbs(void)
+{
+ struct archive *m;
+
+ /* Test1: read exclusion patterns from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ assertEqualIntA(m, 0,
+ archive_match_exclude_pattern_from_file(m, "exclusion", 0));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+
+ /* Test2: read exclusion patterns in a null separator from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ /* Test for pattern reading from file */
+ assertEqualIntA(m, 0,
+ archive_match_exclude_pattern_from_file(m, "exclusion_null", 1));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+}
+
+static void
+test_exclusion_from_file_wcs(void)
+{
+ struct archive *m;
+
+ /* Test1: read exclusion patterns from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ assertEqualIntA(m, 0,
+ archive_match_exclude_pattern_from_file_w(m, L"exclusion", 0));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+
+ /* Test2: read exclusion patterns in a null separator from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ /* Test for pattern reading from file */
+ assertEqualIntA(m, 0,
+ archive_match_exclude_pattern_from_file_w(m, L"exclusion_null", 1));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+}
+
+static void
+test_inclusion_mbs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+ const char *mp;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ /* Test for pattern "^aa*" */
+ assertEqualIntA(m, 0, archive_match_include_pattern(m, "^aa*"));
+
+ /* Test with 'aa1234', which should not be excluded. */
+ archive_entry_copy_pathname(ae, "aa1234");
+ failure("'aa1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"aa1234");
+ failure("'aa1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Test with 'a1234', which should be excluded. */
+ archive_entry_copy_pathname(ae, "a1234");
+ failure("'a1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"a1234");
+ failure("'a1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify unmatched_inclusions. */
+ assertEqualInt(0, archive_match_path_unmatched_inclusions(m));
+ assertEqualIntA(m, ARCHIVE_EOF,
+ archive_match_path_unmatched_inclusions_next(m, &mp));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_inclusion_wcs(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+ const char *mp;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ /* Test for pattern "^aa*" */
+ assertEqualIntA(m, 0, archive_match_include_pattern_w(m, L"^aa*"));
+
+ /* Test with 'aa1234', which should not be excluded. */
+ archive_entry_copy_pathname(ae, "aa1234");
+ failure("'aa1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"aa1234");
+ failure("'aa1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Test with 'a1234', which should be excluded. */
+ archive_entry_copy_pathname(ae, "a1234");
+ failure("'a1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"a1234");
+ failure("'a1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify unmatched_inclusions. */
+ assertEqualInt(0, archive_match_path_unmatched_inclusions(m));
+ assertEqualIntA(m, ARCHIVE_EOF,
+ archive_match_path_unmatched_inclusions_next(m, &mp));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_inclusion_from_file_mbs(void)
+{
+ struct archive *m;
+
+ /* Test1: read inclusion patterns from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ assertEqualIntA(m, 0,
+ archive_match_include_pattern_from_file(m, "inclusion", 0));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+
+ /* Test2: read inclusion patterns in a null separator from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ assertEqualIntA(m, 0,
+ archive_match_include_pattern_from_file(m, "inclusion_null", 1));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+}
+
+static void
+test_inclusion_from_file_wcs(void)
+{
+ struct archive *m;
+
+ /* Test1: read inclusion patterns from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ /* Test for pattern reading from file */
+ assertEqualIntA(m, 0,
+ archive_match_include_pattern_from_file_w(m, L"inclusion", 0));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+
+ /* Test2: read inclusion patterns in a null separator from file */
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ /* Test for pattern reading from file */
+ assertEqualIntA(m, 0,
+ archive_match_include_pattern_from_file_w(m, L"inclusion_null", 1));
+ exclusion_from_file(m);
+ /* Clean up. */
+ archive_match_free(m);
+}
+
+static void
+test_exclusion_and_inclusion(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+ const char *mp;
+ const wchar_t *wp;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_exclude_pattern(m, "^aaa*"));
+ assertEqualIntA(m, 0, archive_match_include_pattern_w(m, L"^aa*"));
+ assertEqualIntA(m, 0, archive_match_include_pattern(m, "^a1*"));
+
+ /* Test with 'aa1234', which should not be excluded. */
+ archive_entry_copy_pathname(ae, "aa1234");
+ failure("'aa1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"aa1234");
+ failure("'aa1234' should not be excluded");
+ assertEqualInt(0, archive_match_path_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Test with 'aaa1234', which should be excluded. */
+ archive_entry_copy_pathname(ae, "aaa1234");
+ failure("'aaa1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname_w(ae, L"aaa1234");
+ failure("'aaa1234' should be excluded");
+ assertEqualInt(1, archive_match_path_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify unmatched_inclusions. */
+ assertEqualInt(1, archive_match_path_unmatched_inclusions(m));
+ /* Verify unmatched inclusion patterns. */
+ assertEqualIntA(m, ARCHIVE_OK,
+ archive_match_path_unmatched_inclusions_next(m, &mp));
+ assertEqualString("^a1*", mp);
+ assertEqualIntA(m, ARCHIVE_EOF,
+ archive_match_path_unmatched_inclusions_next(m, &mp));
+ /* Verify unmatched inclusion patterns again in Wide-Char. */
+ assertEqualIntA(m, ARCHIVE_OK,
+ archive_match_path_unmatched_inclusions_next_w(m, &wp));
+ assertEqualWString(L"^a1*", wp);
+ assertEqualIntA(m, ARCHIVE_EOF,
+ archive_match_path_unmatched_inclusions_next_w(m, &wp));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+DEFINE_TEST(test_archive_match_path)
+{
+ /* Make exclusion sample files which contain exclusion patterns. */
+ assertMakeFile("exclusion", 0666, "second\nfour\n");
+ assertMakeBinFile("exclusion_null", 0666, 12, "second\0four\0");
+ /* Make inclusion sample files which contain inclusion patterns. */
+ assertMakeFile("inclusion", 0666, "first\nthird\n");
+ assertMakeBinFile("inclusion_null", 0666, 12, "first\0third\0");
+
+ test_exclusion_mbs();
+ test_exclusion_wcs();
+ test_exclusion_from_file_mbs();
+ test_exclusion_from_file_wcs();
+ test_inclusion_mbs();
+ test_inclusion_wcs();
+ test_inclusion_from_file_mbs();
+ test_inclusion_from_file_wcs();
+ test_exclusion_and_inclusion();
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_match_time.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_match_time.c Fri=
Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,1358 @@
+/*-
+ * Copyright (c) 2012 Michihiro NAKAJIMA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+time_t __archive_get_date(time_t, const char *);
+
+static void
+test_newer_time(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_time(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_NEWER, 7880, 0));
+
+ archive_entry_copy_pathname(ae, "file1");
+ archive_entry_set_mtime(ae, 7880, 0);
+ archive_entry_set_ctime(ae, 7880, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7879, 999);
+ archive_entry_set_ctime(ae, 7879, 999);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, 7881, 0);
+ archive_entry_set_ctime(ae, 7881, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, 7880, 1);
+ archive_entry_set_ctime(ae, 7880, 0);
+ failure("Its mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, 7880, 0);
+ archive_entry_set_ctime(ae, 7880, 1);
+ failure("Its ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_newer_time_str(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+ time_t now, t;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ time(&now);
+
+ assertEqualIntA(m, 0, archive_match_include_date(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_NEWER, "1980/2/1 0:0:0 UTC"));
+
+ /* Test1: Allow newer time. */
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 1);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Its mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 1);
+ failure("Its ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+
+ /* Test2: Allow equal or newer time. */
+ assertEqualIntA(m, 0, archive_match_include_date(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_EQUAL,
+ "1980/2/1 0:0:0 UTC"));
+
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_newer_time_str_w(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+ time_t now, t;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ time(&now);
+
+ assertEqualIntA(m, 0, archive_match_include_date_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_NEWER, L"1980/2/1 0:0:0 UTC"));
+
+ /* Test1: Allow newer time. */
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 1);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Its mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 1);
+ failure("Its ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+
+ /* Test2: Allow equal or newer time. */
+ assertEqualIntA(m, 0, archive_match_include_date_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_EQUAL,
+ L"1980/2/1 0:0:0 UTC"));
+
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_newer_mtime_than_file_mbs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: newer mtime than a file specified in MBS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, "mid_mtime"));
+
+ /* Verify 'old_mtime' file. */
+ archive_entry_copy_pathname(ae, "old_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_mtime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_newer_ctime_than_file_mbs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: newer ctime than a file specified in MBS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, "mid_ctime"));
+
+ /* Verify 'old_ctime' file. */
+ archive_entry_copy_pathname(ae, "old_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_newer_mtime_than_file_wcs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: newer mtime than a file specified in WCS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, L"mid_mtime"));
+
+ /* Verify 'old_mtime' file. */
+ archive_entry_copy_pathname(ae, "old_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_mtime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_newer_ctime_than_file_wcs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: newer ctime than a file specified in WCS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, L"mid_ctime"));
+
+ /* Verify 'old_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "old_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_older_time(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ assertEqualIntA(m, 0, archive_match_include_time(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_OLDER, 7880, 0));
+
+ archive_entry_copy_pathname(ae, "file1");
+ archive_entry_set_mtime(ae, 7880, 0);
+ archive_entry_set_ctime(ae, 7880, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7879, 999);
+ archive_entry_set_ctime(ae, 7879, 999);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, 7881, 0);
+ archive_entry_set_ctime(ae, 7881, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, 7880, 1);
+ archive_entry_set_ctime(ae, 7879, 0);
+ failure("Its mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ archive_entry_set_mtime(ae, 7879, 0);
+ archive_entry_set_ctime(ae, 7880, 1);
+ failure("Its ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_older_time_str(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+ time_t now, t;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ time(&now);
+
+ /* Test1: Allow newer time. */
+ assertEqualIntA(m, 0, archive_match_include_date(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_OLDER, "1980/2/1 0:0:0 UTC"));
+
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Its mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Its ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Test2: Allow equal or newer time. */
+ assertEqualIntA(m, 0, archive_match_include_date(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_OLDER | ARCHIVE_MATCH_EQUAL,
+ "1980/2/1 0:0:0 UTC"));
+
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_older_time_str_w(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+ time_t now, t;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ time(&now);
+
+ /* Test1: Allow newer time. */
+ assertEqualIntA(m, 0, archive_match_include_date_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_OLDER, L"1980/2/1 0:0:0 UTC"));
+
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Its mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Its ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Test2: Allow equal or newer time. */
+ assertEqualIntA(m, 0, archive_match_include_date_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+ ARCHIVE_MATCH_OLDER | ARCHIVE_MATCH_EQUAL,
+ L"1980/2/1 0:0:0 UTC"));
+
+ archive_entry_copy_pathname(ae, "file1");
+ t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+ archive_entry_set_mtime(ae, t, 0);
+ archive_entry_set_ctime(ae, t, 0);
+ failure("Both Its mtime and ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_older_mtime_than_file_mbs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: older mtime than a file specified in MBS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, "mid_mtime"));
+
+ /* Verify 'old_mtime' file. */
+ archive_entry_copy_pathname(ae, "old_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_mtime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_older_ctime_than_file_mbs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: older ctime than a file specified in MBS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, "mid_ctime"));
+
+ /* Verify 'old_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "old_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_older_mtime_than_file_wcs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: older mtime than a file specified in WCS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, L"mid_mtime"));
+
+ /* Verify 'old_mtime' file. */
+ archive_entry_copy_pathname(ae, "old_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_mtime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_older_ctime_than_file_wcs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: older ctime than a file specified in WCS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, L"mid_ctime"));
+
+ /* Verify 'old_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "old_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'new_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_mtime_between_files_mbs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: mtime between file specified in MBS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, "old_mtime"));
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, "new_mtime"));
+
+ /* Verify 'old_mtime' file. */
+ archive_entry_copy_pathname(ae, "old_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_mtime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'new_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_mtime_between_files_wcs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: mtime between file specified in WCS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, L"old_mtime"));
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, L"new_mtime"));
+
+ /* Verify 'old_mtime' file. */
+ archive_entry_copy_pathname(ae, "old_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_mtime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'new_mtime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_mtime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_mtime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_ctime_between_files_mbs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: ctime between files specified in MBS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, "old_ctime"));
+ assertEqualIntA(m, 0, archive_match_include_file_time(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, "new_ctime"));
+
+ /* Verify 'old_ctime' file. */
+ archive_entry_copy_pathname(ae, "old_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'new_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+test_ctime_between_files_wcs(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+ if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_match_free(m);
+ archive_entry_free(ae);
+ return;
+ }
+
+ /*
+ * Test: ctime between files specified in WCS file name.
+ */
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, L"old_ctime"));
+ assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, L"new_ctime"));
+
+ /* Verify 'old_ctime' file. */
+ archive_entry_copy_pathname(ae, "old_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("old_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Verify 'mid_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "mid_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("mid_ctime should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ /* Verify 'new_ctime' file. */
+ archive_entry_clear(ae);
+ archive_entry_copy_pathname(ae, "new_ctime");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ failure("new_ctime should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /* Clean up. */
+ archive_read_free(a);
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+static void
+excluded(struct archive *m)
+{
+ struct archive_entry *ae;
+
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL))
+ return;
+
+ archive_entry_copy_pathname(ae, "file1");
+ archive_entry_set_mtime(ae, 7879, 999);
+ failure("It should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 0);
+ failure("It should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 1);
+ failure("It should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ archive_entry_copy_pathname(ae, "file2");
+ archive_entry_set_mtime(ae, 7879, 999);
+ failure("It should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 0);
+ failure("It should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 1);
+ failure("It should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+ archive_entry_copy_pathname(ae, "file3");
+ archive_entry_set_mtime(ae, 7879, 999);
+ failure("It should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 0);
+ failure("It should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 1);
+ failure("It should be excluded");
+ assertEqualInt(1, archive_match_time_excluded(m, ae));
+ assertEqualInt(1, archive_match_excluded(m, ae));
+
+ /*
+ * "file4" is not registered, that sort of a file should not be
+ * excluded with any mtime.
+ */
+ archive_entry_copy_pathname(ae, "file4");
+ archive_entry_set_mtime(ae, 7879, 999);
+ failure("It should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 0);
+ failure("It should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+ archive_entry_set_mtime(ae, 7880, 1);
+ failure("It should not be excluded");
+ assertEqualInt(0, archive_match_time_excluded(m, ae));
+ assertEqualInt(0, archive_match_excluded(m, ae));
+
+
+ /* Clean up. */
+ archive_entry_free(ae);
+}
+
+static void
+test_pathname_newer_mtime(void)
+{
+ struct archive_entry *ae;
+ struct archive *m;
+
+ if (!assert((m =3D archive_match_new()) !=3D NULL))
+ return;
+ if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+ archive_match_free(m);
+ return;
+ }
+
+ archive_entry_copy_pathname(ae, "file1");
+ archive_entry_set_mtime(ae, 7880, 0);
+ assertEqualIntA(m, 0, archive_match_exclude_entry(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+ ARCHIVE_MATCH_EQUAL, ae));
+ archive_entry_copy_pathname(ae, "file2");
+ archive_entry_set_mtime(ae, 1, 0);
+ assertEqualIntA(m, 0, archive_match_exclude_entry(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+ ARCHIVE_MATCH_EQUAL, ae));
+ archive_entry_copy_pathname(ae, "file3");
+ archive_entry_set_mtime(ae, 99999, 0);
+ assertEqualIntA(m, 0, archive_match_exclude_entry(m,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+ ARCHIVE_MATCH_EQUAL, ae));
+
+ excluded(m);
+
+ /* Clean up. */
+ archive_entry_free(ae);
+ archive_match_free(m);
+}
+
+DEFINE_TEST(test_archive_match_time)
+{
+ struct stat st;
+
+ /* Test: matching newer times. */
+ test_newer_time();
+ test_newer_time_str();
+ test_newer_time_str_w();
+ /* Test: matching older times. */
+ test_older_time();
+ test_older_time_str();
+ test_older_time_str_w();
+
+ /*
+ * Create sample files for tests matching mtime.
+ * ctimes of those files may be all the same or the ctime of
+ * new_mtime may be older than old_mtime.
+ */
+ assertMakeFile("new_mtime", 0666, "new");
+ assertUtimes("new_mtime", 10002, 0, 10002, 0);
+ assertMakeFile("mid_mtime", 0666, "mid");
+ assertUtimes("mid_mtime", 10001, 0, 10001, 0);
+ assertMakeFile("old_mtime", 0666, "old");
+ assertUtimes("old_mtime", 10000, 0, 10000, 0);
+
+ /*
+ * Create sample files for tests matching ctime.
+ * the mtime of mid_ctime is older than old_ctime and also the mtime
+ * of new_ctime is older than both mid_ctime and old_ctime.
+ */
+ assertMakeFile("old_ctime", 0666, "old");
+ assertUtimes("old_ctime", 10002, 0, 10002, 0);
+ assertEqualInt(0, stat("old_ctime", &st));
+ sleepUntilAfter(st.st_ctime);
+ assertMakeFile("mid_ctime", 0666, "mid");
+ assertUtimes("mid_ctime", 10001, 0, 10001, 0);
+ assertEqualInt(0, stat("mid_ctime", &st));
+ sleepUntilAfter(st.st_ctime);
+ assertMakeFile("new_ctime", 0666, "new");
+ assertUtimes("new_ctime", 10000, 0, 10000, 0);
+
+ /*
+ * Test: matching mtime which indicated by files on the disk.
+ */
+ test_newer_mtime_than_file_mbs();
+ test_newer_mtime_than_file_wcs();
+ test_older_mtime_than_file_mbs();
+ test_older_mtime_than_file_wcs();
+ test_mtime_between_files_mbs();
+ test_mtime_between_files_wcs();
+
+ /*
+ * Test: matching ctime which indicated by files on the disk.
+ */
+ test_newer_ctime_than_file_mbs();
+ test_newer_ctime_than_file_wcs();
+ test_older_ctime_than_file_mbs();
+ test_older_ctime_than_file_wcs();
+ test_ctime_between_files_mbs();
+ test_ctime_between_files_wcs();
+
+ /* Test: matching both pathname and mtime. */
+ test_pathname_newer_mtime();
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_pathmatch.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_pathmatch.c Fri =
Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,244 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+#define __LIBARCHIVE_TEST
+#include "archive_pathmatch.h"
+
+/*
+ * Verify that the pattern matcher implements the wildcard logic specified
+ * in SUSv2 for the cpio command. This is essentially the
+ * shell glob syntax:
+ * * - matches any sequence of chars, including '/'
+ * ? - matches any single char, including '/'
+ * [...] - matches any of a set of chars, '-' specifies a range,
+ * initial '!' is undefined
+ *
+ * The specification in SUSv2 is a bit incomplete, I assume the following:
+ * Trailing '-' in [...] is not special.
+ *
+ * TODO: Figure out if there's a good way to extend this to handle
+ * Windows paths that use '\' as a path separator. <sigh>
+ */
+
+DEFINE_TEST(test_archive_pathmatch)
+{
+ assertEqualInt(1, archive_pathmatch("a/b/c", "a/b/c", 0));
+ assertEqualInt(0, archive_pathmatch("a/b/", "a/b/c", 0));
+ assertEqualInt(0, archive_pathmatch("a/b", "a/b/c", 0));
+ assertEqualInt(0, archive_pathmatch("a/b/c", "a/b/", 0));
+ assertEqualInt(0, archive_pathmatch("a/b/c", "a/b", 0));
+
+ /* Empty pattern only matches empty string. */
+ assertEqualInt(1, archive_pathmatch("","", 0));
+ assertEqualInt(0, archive_pathmatch("","a", 0));
+ assertEqualInt(1, archive_pathmatch("*","", 0));
+ assertEqualInt(1, archive_pathmatch("*","a", 0));
+ assertEqualInt(1, archive_pathmatch("*","abcd", 0));
+ /* SUSv2: * matches / */
+ assertEqualInt(1, archive_pathmatch("*","abcd/efgh/ijkl", 0));
+ assertEqualInt(1, archive_pathmatch("abcd*efgh/ijkl","abcd/efgh/ijkl", 0)=
);
+ assertEqualInt(1, archive_pathmatch("abcd***efgh/ijkl","abcd/efgh/ijkl", =
0));
+ assertEqualInt(1, archive_pathmatch("abcd***/efgh/ijkl","abcd/efgh/ijkl",=
0));
+ assertEqualInt(0, archive_pathmatch("?", "", 0));
+ assertEqualInt(0, archive_pathmatch("?", "\0", 0));
+ assertEqualInt(1, archive_pathmatch("?", "a", 0));
+ assertEqualInt(0, archive_pathmatch("?", "ab", 0));
+ assertEqualInt(1, archive_pathmatch("?", ".", 0));
+ assertEqualInt(1, archive_pathmatch("?", "?", 0));
+ assertEqualInt(1, archive_pathmatch("a", "a", 0));
+ assertEqualInt(0, archive_pathmatch("a", "ab", 0));
+ assertEqualInt(0, archive_pathmatch("a", "ab", 0));
+ assertEqualInt(1, archive_pathmatch("a?c", "abc", 0));
+ /* SUSv2: ? matches / */
+ assertEqualInt(1, archive_pathmatch("a?c", "a/c", 0));
+ assertEqualInt(1, archive_pathmatch("a?*c*", "a/c", 0));
+ assertEqualInt(1, archive_pathmatch("*a*", "a/c", 0));
+ assertEqualInt(1, archive_pathmatch("*a*", "/a/c", 0));
+ assertEqualInt(1, archive_pathmatch("*a*", "defaaaaaaa", 0));
+ assertEqualInt(0, archive_pathmatch("a*", "defghi", 0));
+ assertEqualInt(0, archive_pathmatch("*a*", "defghi", 0));
+
+ /* Character classes */
+ assertEqualInt(1, archive_pathmatch("abc[def", "abc[def", 0));
+ assertEqualInt(0, archive_pathmatch("abc[def]", "abc[def", 0));
+ assertEqualInt(0, archive_pathmatch("abc[def", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[def]", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[def]", "abce", 0));
+ assertEqualInt(1, archive_pathmatch("abc[def]", "abcf", 0));
+ assertEqualInt(0, archive_pathmatch("abc[def]", "abcg", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d*f]", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d*f]", "abc*", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d*f]", "abcdefghi", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d*", "abcdefghi", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d*", "abc[defghi", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-f]", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-f]", "abce", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-f]", "abcf", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d-f]", "abcg", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abca", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abce", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abcf", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abcg", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abch", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abci", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abcj", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abck", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abcl", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abc-", 0));
+
+ /* [] matches nothing, [!] is the same as ? */
+ assertEqualInt(0, archive_pathmatch("abc[]efg", "abcdefg", 0));
+ assertEqualInt(0, archive_pathmatch("abc[]efg", "abcqefg", 0));
+ assertEqualInt(0, archive_pathmatch("abc[]efg", "abcefg", 0));
+ assertEqualInt(1, archive_pathmatch("abc[!]efg", "abcdefg", 0));
+ assertEqualInt(1, archive_pathmatch("abc[!]efg", "abcqefg", 0));
+ assertEqualInt(0, archive_pathmatch("abc[!]efg", "abcefg", 0));
+
+ /* I assume: Trailing '-' is non-special. */
+ assertEqualInt(0, archive_pathmatch("abc[d-fh-]", "abcl", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-]", "abch", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-]", "abc-", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-fh-]", "abc-", 0));
+
+ /* ']' can be backslash-quoted within a character class. */
+ assertEqualInt(1, archive_pathmatch("abc[\\]]", "abc]", 0));
+ assertEqualInt(1, archive_pathmatch("abc[\\]d]", "abc]", 0));
+ assertEqualInt(1, archive_pathmatch("abc[\\]d]", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d\\]]", "abc]", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d\\]]", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d]e]", "abcde]", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d\\]e]", "abc]", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d\\]e]", "abcd]e", 0));
+ assertEqualInt(0, archive_pathmatch("abc[d]e]", "abc]", 0));
+
+ /* backslash-quoted chars can appear as either end of a range. */
+ assertEqualInt(1, archive_pathmatch("abc[\\d-f]gh", "abcegh", 0));
+ assertEqualInt(0, archive_pathmatch("abc[\\d-f]gh", "abcggh", 0));
+ assertEqualInt(0, archive_pathmatch("abc[\\d-f]gh", "abc\\gh", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d-\\f]gh", "abcegh", 0));
+ assertEqualInt(1, archive_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
+ assertEqualInt(1, archive_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
+ /* backslash-quoted '-' isn't special. */
+ assertEqualInt(0, archive_pathmatch("abc[d\\-f]gh", "abcegh", 0));
+ assertEqualInt(1, archive_pathmatch("abc[d\\-f]gh", "abc-gh", 0));
+
+ /* Leading '!' negates a character class. */
+ assertEqualInt(0, archive_pathmatch("abc[!d]", "abcd", 0));
+ assertEqualInt(1, archive_pathmatch("abc[!d]", "abce", 0));
+ assertEqualInt(1, archive_pathmatch("abc[!d]", "abcc", 0));
+ assertEqualInt(0, archive_pathmatch("abc[!d-z]", "abcq", 0));
+ assertEqualInt(1, archive_pathmatch("abc[!d-gi-z]", "abch", 0));
+ assertEqualInt(1, archive_pathmatch("abc[!fgijkl]", "abch", 0));
+ assertEqualInt(0, archive_pathmatch("abc[!fghijkl]", "abch", 0));
+
+ /* Backslash quotes next character. */
+ assertEqualInt(0, archive_pathmatch("abc\\[def]", "abc\\d", 0));
+ assertEqualInt(1, archive_pathmatch("abc\\[def]", "abc[def]", 0));
+ assertEqualInt(0, archive_pathmatch("abc\\\\[def]", "abc[def]", 0));
+ assertEqualInt(0, archive_pathmatch("abc\\\\[def]", "abc\\[def]", 0));
+ assertEqualInt(1, archive_pathmatch("abc\\\\[def]", "abc\\d", 0));
+ assertEqualInt(1, archive_pathmatch("abcd\\", "abcd\\", 0));
+ assertEqualInt(0, archive_pathmatch("abcd\\", "abcd\\[", 0));
+ assertEqualInt(0, archive_pathmatch("abcd\\", "abcde", 0));
+ assertEqualInt(0, archive_pathmatch("abcd\\[", "abcd\\", 0));
+
+ /*
+ * Because '.' and '/' have special meanings, we can
+ * identify many equivalent paths even if they're expressed
+ * differently. (But quoting a character with '\\' suppresses
+ * special meanings!)
+ */
+ assertEqualInt(0, archive_pathmatch("a/b/", "a/bc", 0));
+ assertEqualInt(1, archive_pathmatch("a/./b", "a/b", 0));
+ assertEqualInt(0, archive_pathmatch("a\\/./b", "a/b", 0));
+ assertEqualInt(0, archive_pathmatch("a/\\./b", "a/b", 0));
+ assertEqualInt(0, archive_pathmatch("a/.\\/b", "a/b", 0));
+ assertEqualInt(0, archive_pathmatch("a\\/\\.\\/b", "a/b", 0));
+ assertEqualInt(1, archive_pathmatch("./abc/./def/", "abc/def/", 0));
+ assertEqualInt(1, archive_pathmatch("abc/def", "./././abc/./def", 0));
+ assertEqualInt(1, archive_pathmatch("abc/def/././//", "./././abc/./def/",=
0));
+ assertEqualInt(1, archive_pathmatch(".////abc/.//def", "./././abc/./def",=
0));
+ assertEqualInt(1, archive_pathmatch("./abc?def/", "abc/def/", 0));
+ failure("\"?./\" is not the same as \"/./\"");
+ assertEqualInt(0, archive_pathmatch("./abc?./def/", "abc/def/", 0));
+ failure("Trailing '/' should match no trailing '/'");
+ assertEqualInt(1, archive_pathmatch("./abc/./def/", "abc/def", 0));
+ failure("Trailing '/./' is still the same directory.");
+ assertEqualInt(1, archive_pathmatch("./abc/./def/./", "abc/def", 0));
+ failure("Trailing '/.' is still the same directory.");
+ assertEqualInt(1, archive_pathmatch("./abc/./def/.", "abc/def", 0));
+ assertEqualInt(1, archive_pathmatch("./abc/./def", "abc/def/", 0));
+ failure("Trailing '/./' is still the same directory.");
+ assertEqualInt(1, archive_pathmatch("./abc/./def", "abc/def/./", 0));
+ failure("Trailing '/.' is still the same directory.");
+ assertEqualInt(1, archive_pathmatch("./abc*/./def", "abc/def/.", 0));
+
+ /* Matches not anchored at beginning. */
+ assertEqualInt(0,
+ archive_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
+ assertEqualInt(1,
+ archive_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_START));
+ assertEqualInt(0,
+ archive_pathmatch("^bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
+ assertEqualInt(1,
+ archive_pathmatch("b/c/d", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
+ assertEqualInt(0,
+ archive_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
+ assertEqualInt(0,
+ archive_pathmatch("^b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
+
+ /* Matches not anchored at end. */
+ assertEqualInt(0,
+ archive_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("abcd", "abcd/", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("abcd", "abcd/.", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(0,
+ archive_pathmatch("abc", "abcd", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("a/b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(0,
+ archive_pathmatch("a/b/c$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("a/b/c$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("a/b/c$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("a/b/c/", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(0,
+ archive_pathmatch("a/b/c/$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("a/b/c/$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(1,
+ archive_pathmatch("a/b/c/$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
+ assertEqualInt(0,
+ archive_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_string_conversion.c
--- a/head/contrib/libarchive/libarchive/test/test_archive_string_conversio=
n.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_archive_string_conversio=
n.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2011 Michihiro NAKAJIMA
+ * Copyright (c) 2011-2012 Michihiro NAKAJIMA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,7 +34,7 @@
Execute the following to rebuild the data for this program:
tail -n +36 test_archive_string_conversion.c | /bin/sh
#
-# This requires http://unicode.org/Public/UNIDATA/NormalizationTest.txt
+# This requires http://unicode.org/Public/6.0.0/ucd/NormalizationTest.txt
#
if=3D"NormalizationTest.txt"
if [ ! -f ${if} ]; then
@@ -158,7 +158,7 @@
*/
static int
scan_unicode_pattern(char *out, wchar_t *wout, char *u16be, char *u16le,
- const char *pattern, int exclude_mac_nfd)
+ const char *pattern, int mac_nfd)
{
unsigned uc =3D 0;
const char *p =3D pattern;
@@ -166,6 +166,7 @@
wchar_t *owp =3D wout;
char *op16be =3D u16be;
char *op16le =3D u16le;
+ int ret =3D 0;
=20
for (;;) {
if (*p >=3D '0' && *p <=3D '9')
@@ -173,14 +174,31 @@
else if (*p >=3D 'A' && *p <=3D 'F')
uc =3D (uc << 4) + (*p - 'A' + 0x0a);
else {
- if (exclude_mac_nfd) {
+ if (mac_nfd && op =3D=3D out) {
/*
* These are not converted to NFD on Mac OS.
+ * U+2000 - U+2FFF
+ * U+F900 - U+FAFF
+ * U+2F800 - U+2FAFF
*/
- if ((uc >=3D 0x2000 && uc <=3D 0x2FFF) ||
- (uc >=3D 0xF900 && uc <=3D 0xFAFF) ||
- (uc >=3D 0x2F800 && uc <=3D 0x2FAFF))
- return (-1);
+ switch (uc) {
+ case 0x2194: case 0x219A: case 0x219B:
+ case 0x21AE: case 0x21CD: case 0x21CE:
+ case 0x21CF: case 0x2204: case 0x2209:
+ case 0x220C: case 0x2224: case 0x2226:
+ case 0x2241: case 0x2244: case 0x2247:
+ case 0x2249: case 0x2260: case 0x2262:
+ case 0x226D: case 0x226E: case 0x226F:
+ case 0x2270: case 0x2271: case 0x2274:
+ case 0x2275: case 0x2276: case 0x2278:
+ case 0x2279: case 0x227A: case 0x227B:
+ case 0x2280: case 0x2281: case 0x2284:
+ case 0x2285: case 0x2288: case 0x2289:
+ case 0x22AC: case 0x22AD: case 0x22AE:
+ case 0x22AF: case 0x22E0: case 0x22E1:
+ case 0x22E2: case 0x22E3: case 0x22EA:
+ case 0x22EB: case 0x22EC: case 0x22ED:
+ =09
/*
* Those code points are not converted to
* NFD on Mac OS. I do not know the reason
@@ -190,9 +208,10 @@
* 1109C =3D=3D> 1109B 110BA
* 110AB =3D=3D> 110A5 110BA
*/
- if (uc =3D=3D 0x1109A || uc =3D=3D 0x1109C ||
- uc =3D=3D 0x110AB)
- return (-1);
+ case 0x1109A: case 0x1109C: case 0x110AB:
+ ret =3D 1;
+ break;
+ }
}
op16be +=3D unicode_to_utf16be(op16be, uc);
op16le +=3D unicode_to_utf16le(op16le, uc);
@@ -211,7 +230,7 @@
}
p++;
}
- return (0);
+ return (ret);
}
=20
static int
@@ -230,27 +249,26 @@
* On other platforms, the characters to be Form C.
*/
static void
-test_archive_string_normalization(void)
+test_archive_string_normalization_nfc(const char *testdata)
{
struct archive *a, *a2;
- struct archive_entry *ae;
struct archive_string utf8;
struct archive_mstring mstr;
struct archive_string_conv *f_sconv8, *t_sconv8;
struct archive_string_conv *f_sconv16be, *f_sconv16le;
FILE *fp;
char buff[512];
- static const char reffile[] =3D "test_archive_string_conversion.txt.Z";
- ssize_t size;
int line =3D 0;
int locale_is_utf8, wc_is_unicode;
+ int sconv_opt =3D SCONV_SET_OPT_NORMALIZATION_C;
=20
locale_is_utf8 =3D (NULL !=3D setlocale(LC_ALL, "en_US.UTF-8"));
wc_is_unicode =3D is_wc_unicode();
/* If it doesn't exist, just warn and return. */
if (!locale_is_utf8 && !wc_is_unicode) {
- skipping("invalid encoding tests require a suitable locale;"
- " en_US.UTF-8 not available on this system");
+ skipping("A test of string normalization for NFC requires "
+ "a suitable locale; en_US.UTF-8 not available on this "
+ "system");
return;
}
=20
@@ -258,27 +276,9 @@
memset(&mstr, 0, sizeof(mstr));
=20
/*
- * Extract a test pattern file.
- */
- extract_reference_file(reffile);
- assert((a =3D archive_read_new()) !=3D NULL);
- assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
- assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
- assertEqualIntA(a, ARCHIVE_OK,
- archive_read_open_filename(a, reffile, 512));
-
- assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assert((fp =3D fopen("testdata.txt", "w")) !=3D NULL);
- while ((size =3D archive_read_data(a, buff, 512)) > 0)
- fwrite(buff, 1, size, fp);
- fclose(fp);
-
- /* Open a test pattern file. */
- assert((fp =3D fopen("testdata.txt", "r")) !=3D NULL);
-
- /*
* Create string conversion objects.
*/
+ assert((a =3D archive_read_new()) !=3D NULL);
assertA(NULL !=3D (f_sconv8 =3D
archive_string_conversion_from_charset(a, "UTF-8", 0)));
assertA(NULL !=3D (f_sconv16be =3D
@@ -289,13 +289,18 @@
assertA(NULL !=3D (t_sconv8 =3D
archive_string_conversion_to_charset(a2, "UTF-8", 0)));
if (f_sconv8 =3D=3D NULL || f_sconv16be =3D=3D NULL || f_sconv16le =3D=3D=
NULL ||
- t_sconv8 =3D=3D NULL || fp =3D=3D NULL) {
+ t_sconv8 =3D=3D NULL) {
/* We cannot continue this test. */
- if (fp !=3D NULL)
- fclose(fp);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
return;
}
+ archive_string_conversion_set_opt(f_sconv8, sconv_opt);
+ archive_string_conversion_set_opt(f_sconv16be, sconv_opt);
+ archive_string_conversion_set_opt(f_sconv16le, sconv_opt);
+ archive_string_conversion_set_opt(t_sconv8, sconv_opt);
+
+ /* Open a test pattern file. */
+ assert((fp =3D fopen(testdata, "r")) !=3D NULL);
=20
/*
* Read test data.
@@ -311,6 +316,9 @@
char utf16le_nfc[80], utf16le_nfd[80];
wchar_t wc_nfc[40], wc_nfd[40];
char *e, *p;
+ const wchar_t *wp;
+ const char *mp;
+ size_t mplen;
=20
line++;
if (buff[0] =3D=3D '#')
@@ -332,74 +340,22 @@
nfd[sizeof(nfd)-1] =3D '\0';
=20
/*
- * Convert an NFC pattern to UTF-8 bytes.
+ * Get an NFC patterns.
*/
-#if defined(__APPLE__)
- if (scan_unicode_pattern(utf8_nfc, wc_nfc, utf16be_nfc, utf16le_nfc,
- nfc, 1) !=3D 0)
- continue;
-#else
scan_unicode_pattern(utf8_nfc, wc_nfc, utf16be_nfc, utf16le_nfc,
nfc, 0);
-#endif
=20
/*
- * Convert an NFD pattern to UTF-8 bytes.
+ * Get an NFD patterns.
*/
scan_unicode_pattern(utf8_nfd, wc_nfd, utf16be_nfd, utf16le_nfd,
nfd, 0);
=20
if (locale_is_utf8) {
-#if defined(__APPLE__)
- /*
- * Normalize an NFC string for import.
- */
- assertEqualInt(0, archive_strcpy_in_locale(
- &utf8, utf8_nfc, f_sconv8));
- failure("NFC(%s) should be converted to NFD(%s):%d",
- nfc, nfd, line);
- assertEqualUTF8String(utf8_nfd, utf8.s);
-
/*
* Normalize an NFD string for import.
*/
- assertEqualInt(0, archive_strcpy_in_locale(
- &utf8, utf8_nfd, f_sconv8));
- failure("NFD(%s) should not be any changed:%d",
- nfd, line);
- assertEqualUTF8String(utf8_nfd, utf8.s);
-
- /*
- * Copy an NFD string for export.
- */
- assertEqualInt(0, archive_strcpy_in_locale(
- &utf8, utf8_nfd, t_sconv8));
- failure("NFD(%s) should not be any changed:%d",
- nfd, line);
- assertEqualUTF8String(utf8_nfd, utf8.s);
-
- /*
- * Normalize an NFC string in UTF-16BE for import.
- */
- assertEqualInt(0, archive_strncpy_in_locale(
- &utf8, utf16be_nfc, 100000, f_sconv16be));
- failure("NFC(%s) should be converted to NFD(%s):%d",
- nfc, nfd, line);
- assertEqualUTF8String(utf8_nfd, utf8.s);
-
- /*
- * Normalize an NFC string in UTF-16LE for import.
- */
- assertEqualInt(0, archive_strncpy_in_locale(
- &utf8, utf16le_nfc, 100000, f_sconv16le));
- failure("NFC(%s) should be converted to NFD(%s):%d",
- nfc, nfd, line);
- assertEqualUTF8String(utf8_nfd, utf8.s);
-#else
- /*
- * Normalize an NFD string for import.
- */
- assertEqualInt(0, archive_strcpy_in_locale(
+ assertEqualInt(0, archive_strcpy_l(
&utf8, utf8_nfd, f_sconv8));
failure("NFD(%s) should be converted to NFC(%s):%d",
nfd, nfc, line);
@@ -408,7 +364,7 @@
/*
* Normalize an NFC string for import.
*/
- assertEqualInt(0, archive_strcpy_in_locale(
+ assertEqualInt(0, archive_strcpy_l(
&utf8, utf8_nfc, f_sconv8));
failure("NFC(%s) should not be any changed:%d",
nfc, line);
@@ -417,7 +373,7 @@
/*
* Copy an NFC string for export.
*/
- assertEqualInt(0, archive_strcpy_in_locale(
+ assertEqualInt(0, archive_strcpy_l(
&utf8, utf8_nfc, t_sconv8));
failure("NFC(%s) should not be any changed:%d",
nfc, line);
@@ -426,7 +382,7 @@
/*
* Normalize an NFD string in UTF-16BE for import.
*/
- assertEqualInt(0, archive_strncpy_in_locale(
+ assertEqualInt(0, archive_strncpy_l(
&utf8, utf16be_nfd, 100000, f_sconv16be));
failure("NFD(%s) should be converted to NFC(%s):%d",
nfd, nfc, line);
@@ -435,12 +391,11 @@
/*
* Normalize an NFD string in UTF-16LE for import.
*/
- assertEqualInt(0, archive_strncpy_in_locale(
+ assertEqualInt(0, archive_strncpy_l(
&utf8, utf16le_nfd, 100000, f_sconv16le));
failure("NFD(%s) should be converted to NFC(%s):%d",
nfd, nfc, line);
assertEqualUTF8String(utf8_nfc, utf8.s);
-#endif
}
=20
/*
@@ -451,55 +406,6 @@
* locale UTF-8.
*/
if (locale_is_utf8 || wc_is_unicode) {
- const wchar_t *wp;
- const char *mp;
- size_t mplen;
-
-#if defined(__APPLE__)
- /*
- * Normalize an NFD string in UTF-8 for import.
- */
- assertEqualInt(0, archive_mstring_copy_mbs_len_l(
- &mstr, utf8_nfc, 100000, f_sconv8));
- assertEqualInt(0,
- archive_mstring_get_wcs(a, &mstr, &wp));
- failure("UTF-8 NFC(%s) should be converted "
- "to WCS NFD(%s):%d", nfc, nfd, line);
- assertEqualWString(wc_nfd, wp);
-
- /*
- * Normalize an NFD string in UTF-16BE for import.
- */
- assertEqualInt(0, archive_mstring_copy_mbs_len_l(
- &mstr, utf16be_nfc, 100000, f_sconv16be));
- assertEqualInt(0,
- archive_mstring_get_wcs(a, &mstr, &wp));
- failure("UTF-16BE NFC(%s) should be converted "
- "to WCS NFD(%s):%d", nfc, nfd, line);
- assertEqualWString(wc_nfd, wp);
-
- /*
- * Normalize an NFD string in UTF-16LE for import.
- */
- assertEqualInt(0, archive_mstring_copy_mbs_len_l(
- &mstr, utf16le_nfc, 100000, f_sconv16le));
- assertEqualInt(0,
- archive_mstring_get_wcs(a, &mstr, &wp));
- failure("UTF-16LE NFC(%s) should be converted "
- "to WCS NFD(%s):%d", nfc, nfd, line);
- assertEqualWString(wc_nfd, wp);
-
- /*
- * Copy an NFD wide-string for export.
- */
- assertEqualInt(0, archive_mstring_copy_wcs(
- &mstr, wc_nfd));
- assertEqualInt(0, archive_mstring_get_mbs_l(
- &mstr, &mp, &mplen, t_sconv8));
- failure("WCS NFD(%s) should be UTF-8 NFD:%d"
- ,nfd, line);
- assertEqualUTF8String(utf8_nfd, mp);
-#else
/*
* Normalize an NFD string in UTF-8 for import.
*/
@@ -536,14 +442,263 @@
/*
* Copy an NFC wide-string for export.
*/
- assertEqualInt(0, archive_mstring_copy_wcs(
- &mstr, wc_nfc));
+ assertEqualInt(0,
+ archive_mstring_copy_wcs(&mstr, wc_nfc));
assertEqualInt(0, archive_mstring_get_mbs_l(
&mstr, &mp, &mplen, t_sconv8));
failure("WCS NFC(%s) should be UTF-8 NFC:%d"
,nfc, line);
assertEqualUTF8String(utf8_nfc, mp);
-#endif
+ }
+ }
+
+ archive_string_free(&utf8);
+ archive_mstring_clean(&mstr);
+ fclose(fp);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a2));
+}
+
+static void
+test_archive_string_normalization_mac_nfd(const char *testdata)
+{
+ struct archive *a, *a2;
+ struct archive_string utf8;
+ struct archive_mstring mstr;
+ struct archive_string_conv *f_sconv8, *t_sconv8;
+ struct archive_string_conv *f_sconv16be, *f_sconv16le;
+ FILE *fp;
+ char buff[512];
+ int line =3D 0;
+ int locale_is_utf8, wc_is_unicode;
+ int sconv_opt =3D SCONV_SET_OPT_NORMALIZATION_D;
+
+ locale_is_utf8 =3D (NULL !=3D setlocale(LC_ALL, "en_US.UTF-8"));
+ wc_is_unicode =3D is_wc_unicode();
+ /* If it doesn't exist, just warn and return. */
+ if (!locale_is_utf8 && !wc_is_unicode) {
+ skipping("A test of string normalization for NFD requires "
+ "a suitable locale; en_US.UTF-8 not available on this "
+ "system");
+ return;
+ }
+
+ archive_string_init(&utf8);
+ memset(&mstr, 0, sizeof(mstr));
+
+ /*
+ * Create string conversion objects.
+ */
+ assert((a =3D archive_read_new()) !=3D NULL);
+ assertA(NULL !=3D (f_sconv8 =3D
+ archive_string_conversion_from_charset(a, "UTF-8", 0)));
+ assertA(NULL !=3D (f_sconv16be =3D
+ archive_string_conversion_from_charset(a, "UTF-16BE", 0)));
+ assertA(NULL !=3D (f_sconv16le =3D
+ archive_string_conversion_from_charset(a, "UTF-16LE", 0)));
+ assert((a2 =3D archive_write_new()) !=3D NULL);
+ assertA(NULL !=3D (t_sconv8 =3D
+ archive_string_conversion_to_charset(a2, "UTF-8", 0)));
+ if (f_sconv8 =3D=3D NULL || f_sconv16be =3D=3D NULL || f_sconv16le =3D=3D=
NULL ||
+ t_sconv8 =3D=3D NULL) {
+ /* We cannot continue this test. */
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
+ archive_string_conversion_set_opt(f_sconv8, sconv_opt);
+ archive_string_conversion_set_opt(f_sconv16be, sconv_opt);
+ archive_string_conversion_set_opt(f_sconv16le, sconv_opt);
+ archive_string_conversion_set_opt(t_sconv8, sconv_opt);
+
+ /* Open a test pattern file. */
+ assert((fp =3D fopen(testdata, "r")) !=3D NULL);
+
+ /*
+ * Read test data.
+ * Test data format:
+ * <NFC Unicode pattern> ';' <NFD Unicode pattern> '\n'
+ * Unicode pattern format:
+ * [0-9A-F]{4,5}([ ][0-9A-F]{4,5}){0,}
+ */
+ while (fgets(buff, sizeof(buff), fp) !=3D NULL) {
+ char nfc[80], nfd[80];
+ char utf8_nfc[80], utf8_nfd[80];
+ char utf16be_nfc[80], utf16be_nfd[80];
+ char utf16le_nfc[80], utf16le_nfd[80];
+ wchar_t wc_nfc[40], wc_nfd[40];
+ char *e, *p;
+ const wchar_t *wp;
+ const char *mp;
+ size_t mplen;
+ int should_be_nfc;
+
+ line++;
+ if (buff[0] =3D=3D '#')
+ continue;
+ p =3D strchr(buff, ';');
+ if (p =3D=3D NULL)
+ continue;
+ *p++ =3D '\0';
+ /* Copy an NFC pattern */
+ strncpy(nfc, buff, sizeof(nfc)-1);
+ nfc[sizeof(nfc)-1] =3D '\0';
+ e =3D p;
+ p =3D strchr(p, '\n');
+ if (p =3D=3D NULL)
+ continue;
+ *p =3D '\0';
+ /* Copy an NFD pattern */
+ strncpy(nfd, e, sizeof(nfd)-1);
+ nfd[sizeof(nfd)-1] =3D '\0';
+
+ /*
+ * Get an NFC patterns.
+ */
+ should_be_nfc =3D scan_unicode_pattern(utf8_nfc, wc_nfc,
+ utf16be_nfc, utf16le_nfc, nfc, 1);
+
+ /*
+ * Get an NFD patterns.
+ */
+ scan_unicode_pattern(utf8_nfd, wc_nfd, utf16be_nfd, utf16le_nfd,
+ nfd, 0);
+
+ if (locale_is_utf8) {
+ /*
+ * Normalize an NFC string for import.
+ */
+ assertEqualInt(0, archive_strcpy_l(
+ &utf8, utf8_nfc, f_sconv8));
+ if (should_be_nfc) {
+ failure("NFC(%s) should not be converted to"
+ " NFD(%s):%d", nfc, nfd, line);
+ assertEqualUTF8String(utf8_nfc, utf8.s);
+ } else {
+ failure("NFC(%s) should be converted to"
+ " NFD(%s):%d", nfc, nfd, line);
+ assertEqualUTF8String(utf8_nfd, utf8.s);
+ }
+
+ /*
+ * Normalize an NFD string for import.
+ */
+ assertEqualInt(0, archive_strcpy_l(
+ &utf8, utf8_nfd, f_sconv8));
+ failure("NFD(%s) should not be any changed:%d",
+ nfd, line);
+ assertEqualUTF8String(utf8_nfd, utf8.s);
+
+ /*
+ * Copy an NFD string for export.
+ */
+ assertEqualInt(0, archive_strcpy_l(
+ &utf8, utf8_nfd, t_sconv8));
+ failure("NFD(%s) should not be any changed:%d",
+ nfd, line);
+ assertEqualUTF8String(utf8_nfd, utf8.s);
+
+ /*
+ * Normalize an NFC string in UTF-16BE for import.
+ */
+ assertEqualInt(0, archive_strncpy_l(
+ &utf8, utf16be_nfc, 100000, f_sconv16be));
+ if (should_be_nfc) {
+ failure("NFC(%s) should not be converted to"
+ " NFD(%s):%d", nfc, nfd, line);
+ assertEqualUTF8String(utf8_nfc, utf8.s);
+ } else {
+ failure("NFC(%s) should be converted to"
+ " NFD(%s):%d", nfc, nfd, line);
+ assertEqualUTF8String(utf8_nfd, utf8.s);
+ }
+
+ /*
+ * Normalize an NFC string in UTF-16LE for import.
+ */
+ assertEqualInt(0, archive_strncpy_l(
+ &utf8, utf16le_nfc, 100000, f_sconv16le));
+ if (should_be_nfc) {
+ failure("NFC(%s) should not be converted to"
+ " NFD(%s):%d", nfc, nfd, line);
+ assertEqualUTF8String(utf8_nfc, utf8.s);
+ } else {
+ failure("NFC(%s) should be converted to"
+ " NFD(%s):%d", nfc, nfd, line);
+ assertEqualUTF8String(utf8_nfd, utf8.s);
+ }
+ }
+
+ /*
+ * Test for archive_mstring interface.
+ * In specific, Windows platform UTF-16BE is directly
+ * converted to/from wide-character to avoid the effect of
+ * current locale since windows platform cannot make
+ * locale UTF-8.
+ */
+ if (locale_is_utf8 || wc_is_unicode) {
+ /*
+ * Normalize an NFD string in UTF-8 for import.
+ */
+ assertEqualInt(0, archive_mstring_copy_mbs_len_l(
+ &mstr, utf8_nfc, 100000, f_sconv8));
+ assertEqualInt(0,
+ archive_mstring_get_wcs(a, &mstr, &wp));
+ if (should_be_nfc) {
+ failure("UTF-8 NFC(%s) should not be converted "
+ "to WCS NFD(%s):%d", nfc, nfd, line);
+ assertEqualWString(wc_nfc, wp);
+ } else {
+ failure("UTF-8 NFC(%s) should be converted "
+ "to WCS NFD(%s):%d", nfc, nfd, line);
+ assertEqualWString(wc_nfd, wp);
+ }
+
+ /*
+ * Normalize an NFD string in UTF-16BE for import.
+ */
+ assertEqualInt(0, archive_mstring_copy_mbs_len_l(
+ &mstr, utf16be_nfc, 100000, f_sconv16be));
+ assertEqualInt(0,
+ archive_mstring_get_wcs(a, &mstr, &wp));
+ if (should_be_nfc) {
+ failure("UTF-16BE NFC(%s) should not be "
+ "converted to WCS NFD(%s):%d",
+ nfc, nfd, line);
+ assertEqualWString(wc_nfc, wp);
+ } else {
+ failure("UTF-16BE NFC(%s) should be converted "
+ "to WCS NFD(%s):%d", nfc, nfd, line);
+ assertEqualWString(wc_nfd, wp);
+ }
+
+ /*
+ * Normalize an NFD string in UTF-16LE for import.
+ */
+ assertEqualInt(0, archive_mstring_copy_mbs_len_l(
+ &mstr, utf16le_nfc, 100000, f_sconv16le));
+ assertEqualInt(0,
+ archive_mstring_get_wcs(a, &mstr, &wp));
+ if (should_be_nfc) {
+ failure("UTF-16LE NFC(%s) should not be "
+ "converted to WCS NFD(%s):%d",
+ nfc, nfd, line);
+ assertEqualWString(wc_nfc, wp);
+ } else {
+ failure("UTF-16LE NFC(%s) should be converted "
+ "to WCS NFD(%s):%d", nfc, nfd, line);
+ assertEqualWString(wc_nfd, wp);
+ }
+
+ /*
+ * Copy an NFD wide-string for export.
+ */
+ assertEqualInt(0, archive_mstring_copy_wcs(
+ &mstr, wc_nfd));
+ assertEqualInt(0, archive_mstring_get_mbs_l(
+ &mstr, &mp, &mplen, t_sconv8));
+ failure("WCS NFD(%s) should be UTF-8 NFD:%d"
+ ,nfd, line);
+ assertEqualUTF8String(utf8_nfd, mp);
}
}
=20
@@ -624,6 +779,32 @@
=20
DEFINE_TEST(test_archive_string_conversion)
{
- test_archive_string_normalization();
+ static const char reffile[] =3D "test_archive_string_conversion.txt.Z";
+ static const char testdata[] =3D "testdata.txt";
+ struct archive *a;
+ struct archive_entry *ae;
+ char buff[512];
+ ssize_t size;
+ FILE *fp;
+
+ /*
+ * Extract a test pattern file.
+ */
+ extract_reference_file(reffile);
+ assert((a =3D archive_read_new()) !=3D NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, reffile, 512));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assert((fp =3D fopen(testdata, "w")) !=3D NULL);
+ while ((size =3D archive_read_data(a, buff, 512)) > 0)
+ fwrite(buff, 1, size, fp);
+ fclose(fp);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+ test_archive_string_normalization_nfc(testdata);
+ test_archive_string_normalization_mac_nfd(testdata);
test_archive_string_canonicalization();
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_compat_zip.c
--- a/head/contrib/libarchive/libarchive/test/test_compat_zip.c Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_compat_zip.c Fri Aug 10 =
14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_compat_zi=
p.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_compat_zi=
p.c 238856 2012-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_LIBZ
static const int libz_enabled =3D 1;
@@ -238,19 +238,19 @@
assertEqualString("Metadata/Job_PT.xml", archive_entry_pathname(ae));
assertEqualInt(3559, archive_entry_size(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
- assertEqualInt(0777, archive_entry_perm(ae));
+ assertEqualInt(0666, archive_entry_perm(ae));
=20
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("Metadata/MXDC_Empty_PT.xml", archive_entry_pathname(ae=
));
assertEqualInt(456, archive_entry_size(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
- assertEqualInt(0777, archive_entry_perm(ae));
+ assertEqualInt(0666, archive_entry_perm(ae));
=20
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("Documents/1/Metadata/Page1_Thumbnail.JPG", archive_ent=
ry_pathname(ae));
assertEqualInt(1495, archive_entry_size(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
- assertEqualInt(0777, archive_entry_perm(ae));
+ assertEqualInt(0666, archive_entry_perm(ae));
/* TODO: Read some of the file data and verify it.
The code to read uncompressed Zip entries with "file at end" semantics
is tricky and should be verified more carefully. */
@@ -298,21 +298,21 @@
assertEqualInt(0, archive_entry_size(ae));
assert(!archive_entry_size_is_set(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
- assertEqualInt(0777, archive_entry_perm(ae));
+ assertEqualInt(0666, archive_entry_perm(ae));
=20
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("Metadata/MXDC_Empty_PT.xml", archive_entry_pathname(ae=
));
assertEqualInt(0, archive_entry_size(ae));
assert(!archive_entry_size_is_set(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
- assertEqualInt(0777, archive_entry_perm(ae));
+ assertEqualInt(0666, archive_entry_perm(ae));
=20
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("Documents/1/Metadata/Page1_Thumbnail.JPG", archive_ent=
ry_pathname(ae));
assertEqualInt(0, archive_entry_size(ae));
assert(!archive_entry_size_is_set(ae));
assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
- assertEqualInt(0777, archive_entry_perm(ae));
+ assertEqualInt(0666, archive_entry_perm(ae));
=20
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("Documents/1/Pages/_rels/1.fpage.rels", archive_entry_p=
athname(ae));
@@ -420,7 +420,7 @@
for (i =3D 1; i < 1000; ++i) {
assert((a =3D archive_read_new()) !=3D NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
- assertEqualIntA(a, ARCHIVE_OK, read_open_memory2(a, p, s, i));
+ assertEqualIntA(a, ARCHIVE_OK, read_open_memory_minimal(a, p, s, i));
=20
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_data_skip(a));
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_disk_directory_traversals.c
--- a/head/contrib/libarchive/libarchive/test/test_read_disk_directory_trav=
ersals.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_disk_directory_trav=
ersals.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2010 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -66,6 +66,9 @@
size_t size;
int64_t offset;
int file_count;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ wchar_t *wcwd, *wp, *fullpath;
+#endif
=20
assertMakeDir("dir1", 0755);
assertMakeFile("dir1/file1", 0644, "0123456789");
@@ -89,6 +92,7 @@
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
if (strcmp(archive_entry_pathname(ae), "dir1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/file1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -102,6 +106,7 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/file2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -115,9 +120,11 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 11);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub1/file1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -131,9 +138,11 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub2/file1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -147,6 +156,7 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub2/file2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -160,15 +170,19 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub2/sub1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub2/sub2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub2/sub3") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (strcmp(archive_entry_pathname(ae),
"dir1/sub2/sub3/file") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -182,6 +196,7 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 3);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
}
if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
/* Descend into the current object */
@@ -205,6 +220,7 @@
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
if (wcscmp(archive_entry_pathname_w(ae), L"dir1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/file1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -218,6 +234,7 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/file2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -231,9 +248,11 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 11);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub1/file1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -247,9 +266,11 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub2/file1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -263,6 +284,7 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub2/file2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -276,15 +298,19 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 10);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub2/sub1") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub2/sub2") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub2/sub3") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ assertEqualInt(1, archive_read_disk_can_descend(a));
} else if (wcscmp(archive_entry_pathname_w(ae),
L"dir1/sub2/sub3/file") =3D=3D 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -298,6 +324,7 @@
archive_read_data_block(a, &p, &size, &offset));
assertEqualInt((int)size, 0);
assertEqualInt((int)offset, 3);
+ assertEqualInt(0, archive_read_disk_can_descend(a));
}
if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
/* Descend into the current object */
@@ -318,6 +345,7 @@
=20
/* dir1/file1 */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(0, archive_read_disk_can_descend(a));
assertEqualString(archive_entry_pathname(ae), "dir1/file1");
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
assertEqualInt(archive_entry_size(ae), 10);
@@ -342,6 +370,7 @@
=20
/* dir1/file1 */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(0, archive_read_disk_can_descend(a));
assertEqualString(archive_entry_pathname(ae), "dir1/file1");
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
assertEqualInt(archive_entry_size(ae), 10);
@@ -353,6 +382,7 @@
=20
/* dir1/sub1 */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(1, archive_read_disk_can_descend(a));
assertEqualString(archive_entry_pathname(ae), "dir1/sub1");
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
=20
@@ -361,6 +391,7 @@
=20
/* dir1/sub1/file1 */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(0, archive_read_disk_can_descend(a));
assertEqualString(archive_entry_pathname(ae), "dir1/sub1/file1");
assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
assertEqualInt(archive_entry_size(ae), 10);
@@ -375,6 +406,96 @@
=20
/* Close the disk object. */
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+ /*
+ * Test for a full-path beginning with "//?/"
+ */
+ wcwd =3D _wgetcwd(NULL, 0);
+ fullpath =3D malloc(sizeof(wchar_t) * (wcslen(wcwd) + 32));
+ wcscpy(fullpath, L"//?/");
+ wcscat(fullpath, wcwd);
+ wcscat(fullpath, L"/dir1/file1");
+ free(wcwd);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open_w(a, fullpath));
+ while ((wcwd =3D wcschr(fullpath, L'\\')) !=3D NULL)
+ *wcwd =3D L'/';
+
+ /* dir1/file1 */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(0, archive_read_disk_can_descend(a));
+ assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 10);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 10);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "0123456789", 10);
+
+ /* There is no entry. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ /* Close the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ free(fullpath);
+
+ /*
+ * Test for wild card '*' or '?' with "//?/" prefix.
+ */
+ wcwd =3D _wgetcwd(NULL, 0);
+ fullpath =3D malloc(sizeof(wchar_t) * (wcslen(wcwd) + 32));
+ wcscpy(fullpath, L"//?/");
+ wcscat(fullpath, wcwd);
+ wcscat(fullpath, L"/dir1/*1");
+ free(wcwd);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open_w(a, fullpath));
+ while ((wcwd =3D wcschr(fullpath, L'\\')) !=3D NULL)
+ *wcwd =3D L'/';
+
+ /* dir1/file1 */
+ wp =3D wcsrchr(fullpath, L'/');
+ wcscpy(wp+1, L"file1");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(0, archive_read_disk_can_descend(a));
+ assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 10);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 10);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "0123456789", 10);
+
+ /* dir1/sub1 */
+ wcscpy(wp+1, L"sub1");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(1, archive_read_disk_can_descend(a));
+ assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+ assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+
+ /* Descend into the current object */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_descend(a));
+
+ /* dir1/sub1/file1 */
+ wcscpy(wp+1, L"sub1/file1");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ assertEqualInt(0, archive_read_disk_can_descend(a));
+ assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 10);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 10);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "0123456789", 10);
+
+ /* There is no entry. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ /* Close the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ free(fullpath);
+
#endif
=20
/*
@@ -969,11 +1090,13 @@
failure("There must be no entry");
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
=20
- failure("Atime must not be restored");
+ failure("Atime should be restored");
assertFileAtimeRecent("at");
+ failure("Atime should be restored");
assertFileAtimeRecent("at/f1");
+ failure("Atime should be restored");
assertFileAtimeRecent("at/f2");
- failure("The atime of a empty file must not be changed");
+ failure("The atime of a empty file should not be changed");
assertFileAtime("at/fe", 886611, 0);
=20
/* Close the disk object. */
@@ -1033,13 +1156,403 @@
failure("There must be no entry");
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
=20
- failure("Atime must be restored");
+ failure("Atime should be restored");
assertFileAtime("at", 886622, 0);
+ failure("Atime should be restored");
assertFileAtime("at/f1", 886600, 0);
+ failure("Atime should be restored");
assertFileAtime("at/f2", 886611, 0);
- failure("The atime of a empty file must not be changed");
+ failure("The atime of a empty file should not be changed");
assertFileAtime("at/fe", 886611, 0);
=20
+ /* Close the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+ /*
+ * Test3: Traversals with archive_read_disk_set_atime_restored() but
+ * no data read as a listing.
+ */
+ assertUtimes("at/f1", 886600, 0, 886600, 0);
+ assertUtimes("at/f2", 886611, 0, 886611, 0);
+ assertUtimes("at/fe", 886611, 0, 886611, 0);
+ assertUtimes("at", 886622, 0, 886622, 0);
+ file_count =3D 4;
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_atime_restored(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "at"));
+
+ failure("Directory traversals should work as well");
+ while (file_count--) {
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ if (strcmp(archive_entry_pathname(ae), "at") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ } else if (strcmp(archive_entry_pathname(ae), "at/f1") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 10);
+ } else if (strcmp(archive_entry_pathname(ae), "at/f2") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 11);
+ } else if (strcmp(archive_entry_pathname(ae), "at/fe") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 0);
+ }
+ if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
+ /* Descend into the current object */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_descend(a));
+ }
+ }
+ /* There is no entry. */
+ failure("There must be no entry");
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ failure("Atime should be restored");
+ assertFileAtime("at", 886622, 0);
+ failure("Atime should be restored");
+ assertFileAtime("at/f1", 886600, 0);
+ failure("Atime should be restored");
+ assertFileAtime("at/f2", 886611, 0);
+ failure("The atime of a empty file should not be changed");
+ assertFileAtime("at/fe", 886611, 0);
+
+ if (!canNodump()) {
+ /* Destroy the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ archive_entry_free(ae);
+ skipping("Can't test atime with nodump on this filesystem");
+ return;
+ }
+
+ /* Close the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+ /*
+ * Test4: Traversals with archive_read_disk_set_atime_restored() and
+ * archive_read_disk_honor_nodump().
+ */
+ assertNodump("at/f1");
+ assertNodump("at/f2");
+ assertUtimes("at/f1", 886600, 0, 886600, 0);
+ assertUtimes("at/f2", 886611, 0, 886611, 0);
+ assertUtimes("at/fe", 886611, 0, 886611, 0);
+ assertUtimes("at", 886622, 0, 886622, 0);
+ file_count =3D 2;
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+ ARCHIVE_READDISK_RESTORE_ATIME | ARCHIVE_READDISK_HONOR_NODUMP));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "at"));
+
+ failure("Directory traversals should work as well");
+ while (file_count--) {
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ if (strcmp(archive_entry_pathname(ae), "at") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ } else if (strcmp(archive_entry_pathname(ae), "at/fe") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 0);
+ }
+ if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
+ /* Descend into the current object */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_descend(a));
+ }
+ }
+ /* There is no entry. */
+ failure("There must be no entry");
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ failure("Atime should be restored");
+ assertFileAtime("at", 886622, 0);
+ failure("Atime should be restored");
+ assertFileAtime("at/f1", 886600, 0);
+ failure("Atime should be restored");
+ assertFileAtime("at/f2", 886611, 0);
+ failure("The atime of a empty file should not be changed");
+ assertFileAtime("at/fe", 886611, 0);
+
+ /* Destroy the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ archive_entry_free(ae);
+}
+
+static int
+metadata_filter(struct archive *a, void *data, struct archive_entry *ae)
+{
+ (void)data; /* UNUSED */
+
+ failure("CTime should be set");
+ assertEqualInt(8, archive_entry_ctime_is_set(ae));
+ failure("MTime should be set");
+ assertEqualInt(16, archive_entry_mtime_is_set(ae));
+
+ if (archive_entry_mtime(ae) < 886611)
+ return (0);
+ if (archive_read_disk_can_descend(a)) {
+ /* Descend into the current object */
+ failure("archive_read_disk_can_descend should work"
+ " in metadata filter");
+ assertEqualIntA(a, 1, archive_read_disk_can_descend(a));
+ failure("archive_read_disk_descend should work"
+ " in metadata filter");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_descend(a));
+ }
+ return (1);
+}
+
+static void
+test_callbacks(void)
+{
+ struct archive *a;
+ struct archive *m;
+ struct archive_entry *ae;
+ const void *p;
+ size_t size;
+ int64_t offset;
+ int file_count;
+
+ assertMakeDir("cb", 0755);
+ assertMakeFile("cb/f1", 0644, "0123456789");
+ assertMakeFile("cb/f2", 0644, "hello world");
+ assertMakeFile("cb/fe", 0644, NULL);
+ assertUtimes("cb/f1", 886600, 0, 886600, 0);
+ assertUtimes("cb/f2", 886611, 0, 886611, 0);
+ assertUtimes("cb/fe", 886611, 0, 886611, 0);
+ assertUtimes("cb", 886622, 0, 886622, 0);
+
+ assert((ae =3D archive_entry_new()) !=3D NULL);
+ if (assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+ archive_entry_free(ae);
+ return;
+ }
+ if (assert((m =3D archive_match_new()) !=3D NULL)) {
+ archive_entry_free(ae);
+ archive_read_free(a);
+ return;
+ }
+
+ /*
+ * Test1: Traversals with a name filter.
+ */
+ file_count =3D 3;
+ assertEqualIntA(m, ARCHIVE_OK,
+ archive_match_exclude_pattern(m, "cb/f2"));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_set_matching(a, m, NULL, NULL));
+ failure("Directory traversals should work as well");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "cb"));
+ while (file_count--) {
+ archive_entry_clear(ae);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ failure("File 'cb/f2' should be exclueded");
+ assert(strcmp(archive_entry_pathname(ae), "cb/f2") !=3D 0);
+ if (strcmp(archive_entry_pathname(ae), "cb") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ } else if (strcmp(archive_entry_pathname(ae), "cb/f1") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 10);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 10);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "0123456789", 10);
+ assertEqualInt(ARCHIVE_EOF,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 0);
+ assertEqualInt((int)offset, 10);
+ } else if (strcmp(archive_entry_pathname(ae), "cb/fe") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 0);
+ }
+ if (archive_read_disk_can_descend(a)) {
+ /* Descend into the current object */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_descend(a));
+ }
+ }
+ /* There is no entry. */
+ failure("There should be no entry");
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ /* Close the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+ /*
+ * Test2: Traversals with a metadata filter.
+ */
+ assertUtimes("cb/f1", 886600, 0, 886600, 0);
+ assertUtimes("cb/f2", 886611, 0, 886611, 0);
+ assertUtimes("cb/fe", 886611, 0, 886611, 0);
+ assertUtimes("cb", 886622, 0, 886622, 0);
+ file_count =3D 3;
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_set_metadata_filter_callback(a, metadata_filter,
+ NULL));
+ failure("Directory traversals should work as well");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "cb"));
+
+ while (file_count--) {
+ archive_entry_clear(ae);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ failure("File 'cb/f1' should be exclueded");
+ assert(strcmp(archive_entry_pathname(ae), "cb/f1") !=3D 0);
+ if (strcmp(archive_entry_pathname(ae), "cb") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ } else if (strcmp(archive_entry_pathname(ae), "cb/f2") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 11);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 11);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "hello world", 11);
+ assertEqualInt(ARCHIVE_EOF,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 0);
+ assertEqualInt((int)offset, 11);
+ } else if (strcmp(archive_entry_pathname(ae), "cb/fe") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 0);
+ }
+ }
+ /* There is no entry. */
+ failure("There should be no entry");
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ /* Destroy the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ assertEqualInt(ARCHIVE_OK, archive_match_free(m));
+ archive_entry_free(ae);
+}
+
+static void
+test_nodump(void)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ const void *p;
+ size_t size;
+ int64_t offset;
+ int file_count;
+
+ if (!canNodump()) {
+ skipping("Can't test nodump on this filesystem");
+ return;
+ }
+
+ assertMakeDir("nd", 0755);
+ assertMakeFile("nd/f1", 0644, "0123456789");
+ assertMakeFile("nd/f2", 0644, "hello world");
+ assertMakeFile("nd/fe", 0644, NULL);
+ assertNodump("nd/f2");
+ assertUtimes("nd/f1", 886600, 0, 886600, 0);
+ assertUtimes("nd/f2", 886611, 0, 886611, 0);
+ assertUtimes("nd/fe", 886611, 0, 886611, 0);
+ assertUtimes("nd", 886622, 0, 886622, 0);
+
+ assert((ae =3D archive_entry_new()) !=3D NULL);
+ assert((a =3D archive_read_disk_new()) !=3D NULL);
+
+ /*
+ * Test1: Traversals without archive_read_disk_honor_nodump().
+ */
+ failure("Directory traversals should work as well");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "nd"));
+
+ file_count =3D 4;
+ while (file_count--) {
+ archive_entry_clear(ae);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ if (strcmp(archive_entry_pathname(ae), "nd") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ } else if (strcmp(archive_entry_pathname(ae), "nd/f1") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 10);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 10);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "0123456789", 10);
+ assertEqualInt(ARCHIVE_EOF,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 0);
+ assertEqualInt((int)offset, 10);
+ } else if (strcmp(archive_entry_pathname(ae), "nd/f2") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 11);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 11);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "hello world", 11);
+ assertEqualInt(ARCHIVE_EOF,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 0);
+ assertEqualInt((int)offset, 11);
+ } else if (strcmp(archive_entry_pathname(ae), "nd/fe") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 0);
+ }
+ if (archive_read_disk_can_descend(a)) {
+ /* Descend into the current object */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_descend(a));
+ }
+ }
+ /* There is no entry. */
+ failure("There should be no entry");
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ /* Close the disk object. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+ /*
+ * Test2: Traversals with archive_read_disk_honor_nodump().
+ */
+ assertUtimes("nd/f1", 886600, 0, 886600, 0);
+ assertUtimes("nd/f2", 886611, 0, 886611, 0);
+ assertUtimes("nd/fe", 886611, 0, 886611, 0);
+ assertUtimes("nd", 886622, 0, 886622, 0);
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+ ARCHIVE_READDISK_RESTORE_ATIME | ARCHIVE_READDISK_HONOR_NODUMP));
+ failure("Directory traversals should work as well");
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "nd"));
+
+ file_count =3D 3;
+ while (file_count--) {
+ archive_entry_clear(ae);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+ failure("File 'nd/f2' should be exclueded");
+ assert(strcmp(archive_entry_pathname(ae), "nd/f2") !=3D 0);
+ if (strcmp(archive_entry_pathname(ae), "nd") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+ } else if (strcmp(archive_entry_pathname(ae), "nd/f1") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 10);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 10);
+ assertEqualInt((int)offset, 0);
+ assertEqualMem(p, "0123456789", 10);
+ assertEqualInt(ARCHIVE_EOF,
+ archive_read_data_block(a, &p, &size, &offset));
+ assertEqualInt((int)size, 0);
+ assertEqualInt((int)offset, 10);
+ } else if (strcmp(archive_entry_pathname(ae), "nd/fe") =3D=3D 0) {
+ assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+ assertEqualInt(archive_entry_size(ae), 0);
+ }
+ if (archive_read_disk_can_descend(a)) {
+ /* Descend into the current object */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_descend(a));
+ }
+ }
+ /* There is no entry. */
+ failure("There should be no entry");
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+ failure("Atime should be restored");
+ assertFileAtime("nd/f2", 886611, 0);
+
/* Destroy the disk object. */
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
archive_entry_free(ae);
@@ -1057,4 +1570,8 @@
test_symlink_logical_loop();
/* Test to restore atime. */
test_restore_atime();
+ /* Test callbacks. */
+ test_callbacks();
+ /* Test nodump. */
+ test_nodump();
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_7zip.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_7zip.c Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_7zip.c Fri A=
ug 10 14:19:25 2012 +0300
@@ -26,8 +26,8 @@
__FBSDID("$FreeBSD");
=20
/*
- * Extract a non-encorded file.
- * The header of the 7z archive files is not encdoed.
+ * Extract a non-encoded file.
+ * The header of the 7z archive files is not encoded.
*/
static void
test_copy()
@@ -46,7 +46,7 @@
=20
/* Verify regular file1. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
assertEqualString("file1", archive_entry_pathname(ae));
assertEqualInt(86401, archive_entry_mtime(ae));
assertEqualInt(60, archive_entry_size(ae));
@@ -139,7 +139,7 @@
=20
/*
* Extract an encoded file.
- * The header of the 7z archive files is not encdoed.
+ * The header of the 7z archive files is not encoded.
*/
static void
test_plain_header(const char *refname)
@@ -180,7 +180,7 @@
=20
/*
* Extract multi files.
- * The header of the 7z archive files is encdoed with LZMA.
+ * The header of the 7z archive files is encoded with LZMA.
*/
static void
test_extract_all_files(const char *refname)
@@ -255,7 +255,7 @@
=20
/*
* Extract last file.
- * The header of the 7z archive files is encdoed with LZMA.
+ * The header of the 7z archive files is encoded with LZMA.
*/
static void
test_extract_last_file(const char *refname)
@@ -323,7 +323,7 @@
}
=20
/*
- * Extract a mixed archive file which has both LZMA and LZMA2 encoded fil=
es.
+ * Extract a mixed archive file which has both LZMA and LZMA2 encoded file=
s.
* LZMA: file1, file2, file3, file4
* LZMA2: zfile1, zfile2, zfile3, zfile4
*/
@@ -510,7 +510,7 @@
=20
/* Verify regular x86exe. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0555), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0444), archive_entry_mode(ae) & ~0111);
assertEqualString("x86exe", archive_entry_pathname(ae));
assertEqualInt(172802, archive_entry_mtime(ae));
assertEqualInt(27328, archive_entry_size(ae));
@@ -565,7 +565,7 @@
=20
/* Verify regular file1. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
assertEqualString("ppmd_test.txt", archive_entry_pathname(ae));
assertEqualInt(1322464589, archive_entry_mtime(ae));
assertEqualInt(102400, archive_entry_size(ae));
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_cab.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_cab.c Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_cab.c Fri Au=
g 10 14:19:25 2012 +0300
@@ -199,7 +199,7 @@
=20
/* Verify regular empty. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
assertEqualString("empty", archive_entry_pathname(ae));
assertEqualInt(0, archive_entry_uid(ae));
assertEqualInt(0, archive_entry_gid(ae));
@@ -211,7 +211,7 @@
* file to check if we properly handle multiple CFDATA.
*/
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
assertEqualString("zero", archive_entry_pathname(ae));
assertEqualInt(0, archive_entry_uid(ae));
assertEqualInt(0, archive_entry_gid(ae));
@@ -232,7 +232,7 @@
=20
/* Verify regular file1. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
assertEqualString("dir1/file1", archive_entry_pathname(ae));
assertEqualInt(0, archive_entry_uid(ae));
assertEqualInt(0, archive_entry_gid(ae));
@@ -242,7 +242,7 @@
=20
/* Verify regular file2. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
- assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
assertEqualString("dir2/file2", archive_entry_pathname(ae));
assertEqualInt(0, archive_entry_uid(ae));
assertEqualInt(0, archive_entry_gid(ae));
@@ -269,13 +269,121 @@
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
=20
+/*
+ * Skip beginning files and Read the last file.
+ */
+static void
+verify2(const char *refname, enum comp_type comp)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ char buff[128];
+ char zero[128];
+
+ memset(zero, 0, sizeof(zero));
+ extract_reference_file(refname);
+ assert((a =3D archive_read_new()) !=3D NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, refname, 10240));
+
+ /* Verify regular empty. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ if (comp !=3D STORE) {
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ }
+ /* Verify regular file1. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+
+ /* Verify regular file2. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+ assertEqualString("dir2/file2", archive_entry_pathname(ae));
+ assertEqualInt(0, archive_entry_uid(ae));
+ assertEqualInt(0, archive_entry_gid(ae));
+ assertEqualInt(file2_size, archive_entry_size(ae));
+ assertEqualInt(file2_size, archive_read_data(a, buff, file2_size));
+ assertEqualMem(buff, file2, file2_size);
+
+ /* End of archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ if (comp !=3D STORE) {
+ assertEqualInt(4, archive_file_count(a));
+ } else {
+ assertEqualInt(3, archive_file_count(a));
+ }
+
+ /* Verify archive format. */
+ assertEqualIntA(a, ARCHIVE_COMPRESSION_NONE, archive_compression(a));
+ assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+/*
+ * Skip all file like 'bsdtar tvf foo.cab'.
+ */
+static void
+verify3(const char *refname, enum comp_type comp)
+{
+ struct archive_entry *ae;
+ struct archive *a;
+ char zero[128];
+
+ memset(zero, 0, sizeof(zero));
+ extract_reference_file(refname);
+ assert((a =3D archive_read_new()) !=3D NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, refname, 10240));
+
+ /* Verify regular empty. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ if (comp !=3D STORE) {
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ }
+ /* Verify regular file1. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+
+ /* Verify regular file2. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+
+ /* End of archive. */
+ assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+ if (comp !=3D STORE) {
+ assertEqualInt(4, archive_file_count(a));
+ } else {
+ assertEqualInt(3, archive_file_count(a));
+ }
+
+ /* Verify archive format. */
+ assertEqualIntA(a, ARCHIVE_COMPRESSION_NONE, archive_compression(a));
+ assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
DEFINE_TEST(test_read_format_cab)
{
/* Verify Cabinet file in no compression. */
verify("test_read_format_cab_1.cab", STORE);
+ verify2("test_read_format_cab_1.cab", STORE);
+ verify3("test_read_format_cab_1.cab", STORE);
/* Verify Cabinet file in MSZIP. */
verify("test_read_format_cab_2.cab", MSZIP);
+ verify2("test_read_format_cab_2.cab", MSZIP);
+ verify3("test_read_format_cab_2.cab", MSZIP);
/* Verify Cabinet file in LZX. */
verify("test_read_format_cab_3.cab", LZX);
+ verify2("test_read_format_cab_3.cab", LZX);
+ verify3("test_read_format_cab_3.cab", LZX);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_cpio_svr4_bzip2_rpm.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_bz=
ip2_rpm.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_bz=
ip2_rpm.c Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
Version: 1.0.0
Release: 1
License: BSD
-URL: http://code.google.com/p/libarchive
+URL: http://libarchive.github.com/
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-root
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_cpio_svr4_gzip_rpm.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gz=
ip_rpm.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gz=
ip_rpm.c Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
Version: 1.0.0
Release: 1
License: BSD
-URL: http://code.google.com/p/libarchive
+URL: http://libarchive.github.com/
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-root
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_rar.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_rar.c Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_rar.c Fri Au=
g 10 14:19:25 2012 +0300
@@ -1,6 +1,7 @@
/*-
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2011 Andres Mejia
+ * Copyright (c) 2011-2012 Michihiro NAKAJIMA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -278,9 +279,19 @@
assertEqualInt(41453, archive_entry_mode(ae));
assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
=20
+ /* Sixth header */
+ assertA(0 =3D=3D archive_read_next_header(a, &ae));
+ assertEqualUTF8String(
+ "abcdefghijklmnopqrs\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88.txt",
+ archive_entry_pathname(ae));
+ assertA((int)archive_entry_mtime(ae));
+ assertEqualInt(16, archive_entry_size(ae));
+ assertEqualInt(33204, archive_entry_mode(ae));
+ assertEqualIntA(a, 16, archive_read_data(a, buff, sizeof(buff)));
+
/* Test EOF */
assertA(1 =3D=3D archive_read_next_header(a, &ae));
- assertEqualInt(5, archive_file_count(a));
+ assertEqualInt(6, archive_file_count(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
@@ -364,9 +375,19 @@
assertEqualInt(41453, archive_entry_mode(ae));
assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
=20
+ /* Sixth header */
+ assertA(0 =3D=3D archive_read_next_header(a, &ae));
+ assertEqualUTF8String(
+ "abcdefghijklmnopqrs\x83\x65\x83\x58\x83\x67.txt",
+ archive_entry_pathname(ae));
+ assertA((int)archive_entry_mtime(ae));
+ assertEqualInt(16, archive_entry_size(ae));
+ assertEqualInt(33204, archive_entry_mode(ae));
+ assertEqualIntA(a, 16, archive_read_data(a, buff, sizeof(buff)));
+
/* Test EOF */
assertA(1 =3D=3D archive_read_next_header(a, &ae));
- assertEqualInt(5, archive_file_count(a));
+ assertEqualInt(6, archive_file_count(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_rar_unicode.rar.uu
--- a/head/contrib/libarchive/libarchive/test/test_read_format_rar_unicode.=
rar.uu Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_rar_unicode.=
rar.uu Fri Aug 10 14:19:25 2012 +0300
@@ -11,7 +11,8 @@
M=3D."2,P````````````(`````#VGA/A0P#@`0````E5R"OH+F`(AH:&`PB#``
M\.H)?ED.=3D"""2``V````-@````,E at OM=3D6%0+/Q0P*`#MH0``Z*&HXX&@XX*(
M7..#E>."H>."I..#JP"(:&A@,(@P7*K5,*$PI##K,.:\HN6ME^F5M^.!A..#
-ME>."H>."I..#J^60C6QO;F<M9FEL96YA;64M:6XMYKRBY:V7+G1X=3D,0]>P!`
-"!P``
+ME>."H>."I..#J^60C6QO;F<M9FEL96YA;64M:6XMYKRBY:V7+G1X=3D)MJ=3D""`
+M0``/````$`````,%T+85W81G0!TS(`"T at 0``86)C9&5F9VAI:FML;6YO<'%R
+D<^.#AN."N>.#B"YT>'0`D/\0?^2Y_">#,#TN'-+$/7L`0`<`
`
end
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_tar_filename.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_tar_filename=
.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_tar_filename=
.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
* - the filename of second file is stored in UTF-8.
*
* Whenever hdrcharset option is specified, we will correctly read the
- * filename of sencod file, which is stored in UTF-8 by default.
+ * filename of second file, which is stored in UTF-8 by default.
*/
=20
static void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_pax_truncated.c
--- a/head/contrib/libarchive/libarchive/test/test_read_pax_truncated.c Mon=
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_pax_truncated.c Fri=
Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_pax_=
truncated.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_pax_=
truncated.c 238856 2012-07-28 06:38:44Z mm $");
=20
DEFINE_TEST(test_read_pax_truncated)
{
@@ -71,10 +71,10 @@
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
/* If it's truncated very early, the file type detection should fail. */
if (i < 512) {
- assertEqualIntA(a, ARCHIVE_FATAL, read_open_memory2(a, buff, i, 13));
+ assertEqualIntA(a, ARCHIVE_FATAL, read_open_memory_minimal(a, buff, i, =
13));
goto wrap_up;
} else {
- assertEqualIntA(a, ARCHIVE_OK, read_open_memory2(a, buff, i, 13));
+ assertEqualIntA(a, ARCHIVE_OK, read_open_memory_minimal(a, buff, i, 13)=
);
}
=20
/* If it's truncated in a header, the header read should fail. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_position.c
--- a/head/contrib/libarchive/libarchive/test/test_read_position.c Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_position.c Fri Aug =
10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_posi=
tion.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_posi=
tion.c 238856 2012-07-28 06:38:44Z mm $");
=20
static unsigned char nulls[1000];
static unsigned char tmp[1000];
@@ -105,7 +105,7 @@
/* Read the archive back without a skip function. */
assert(NULL !=3D (a =3D archive_read_new()));
assertA(0 =3D=3D archive_read_support_format_tar(a));
- assertA(0 =3D=3D read_open_memory2(a, buff, sizeof(buff), 512));
+ assertA(0 =3D=3D read_open_memory_minimal(a, buff, sizeof(buff), 512));
verify_read_positions(a);
archive_read_free(a);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_sparse_basic.c
--- a/head/contrib/libarchive/libarchive/test/test_sparse_basic.c Mon Jul 3=
0 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_sparse_basic.c Fri Aug 1=
0 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2010 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,6 @@
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
-#ifdef HAVE_SYS_UTSNAME_H
-#include <sys/utsname.h>
-#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
@@ -169,31 +166,12 @@
{ HOLE, 1024 }, { DATA, 10240 },
{ END, 0 }
};
- struct utsname ut;
- char *p, *e;
- long d;
int fd, r;
struct fiemap *fm;
char buff[1024];
const char *testfile =3D "can_sparse";
=20
(void)path; /* UNUSED */
- memset(&ut, 0, sizeof(ut));
- assertEqualInt(uname(&ut), 0);
- p =3D ut.release;
- d =3D strtol(p, &e, 10);
- if (d < 2 || *e !=3D '.')
- return (0);
- if (d =3D=3D 2) {
- p =3D e + 1;
- d =3D strtol(p, &e, 10);
- if (d < 6 || *e !=3D '.')
- return (0);
- p =3D e + 1;
- d =3D strtol(p, NULL, 10);
- if (d < 28)
- return (0);
- }
create_sparse_file(testfile, sparse_file);
fd =3D open(testfile, O_RDWR);
if (fd < 0)
@@ -205,11 +183,9 @@
fm->fm_extent_count =3D (sizeof(buff) - sizeof(*fm))/
sizeof(struct fiemap_extent);
r =3D ioctl(fd, FS_IOC_FIEMAP, fm);
- if (r < 0 && (errno =3D=3D ENOTTY || errno =3D=3D EOPNOTSUPP))
- return (0);/* Not supported. */
close(fd);
unlink(testfile);
- return (1);
+ return (r >=3D 0);
}
=20
#else
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_write_format_zip.c
--- a/head/contrib/libarchive/libarchive/test/test_write_format_zip.c Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_write_format_zip.c Fri A=
ug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_write_for=
mat_zip.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_write_for=
mat_zip.c 238856 2012-07-28 06:38:44Z mm $");
=20
static void
verify_contents(struct archive *a, int expect_details)
@@ -91,7 +91,7 @@
assertEqualInt(0, archive_entry_size(ae));
assertEqualString("file1", archive_entry_symlink(ae));
} else {
- assertEqualInt(AE_IFREG | 0777, archive_entry_mode(ae));
+ assertEqualInt(AE_IFREG | 0666, archive_entry_mode(ae));
assertEqualInt(0, archive_entry_size(ae));
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
err.c
--- a/head/contrib/libarchive/libarchive_fe/err.c Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/contrib/libarchive/libarchive_fe/err.c Fri Aug 10 14:19:25 2012 =
+0300
@@ -25,7 +25,7 @@
*/
=20
#include "lafe_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/err.c 228763 201=
1-12-21 11:13:29Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/err.c 238856 201=
2-07-28 06:38:44Z mm $");
=20
#ifdef HAVE_STDARG_H
#include <stdarg.h>
@@ -40,6 +40,8 @@
=20
#include "err.h"
=20
+static void lafe_vwarnc(int, const char *, va_list) __LA_PRINTFLIKE(2, 0);
+
const char *lafe_progname;
=20
static void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
err.h
--- a/head/contrib/libarchive/libarchive_fe/err.h Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/contrib/libarchive/libarchive_fe/err.h Fri Aug 10 14:19:25 2012 =
+0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/libarchive_fe/err.h 228774 2011-12-21=
15:20:17Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive_fe/err.h 238856 2012-07-28=
06:38:44Z mm $
*/
=20
#ifndef LAFE_ERR_H
@@ -35,9 +35,17 @@
#define __LA_DEAD
#endif
=20
+#if defined(__GNUC__) && (__GNUC__ > 2 || \
+ (__GNUC__ =3D=3D 2 && __GNUC_MINOR__ >=3D 7))
+#define __LA_PRINTFLIKE(f,a) __attribute__((__format__(__printf__, f, a)))
+#else
+#define __LA_PRINTFLIKE(f,a)
+#endif
+
extern const char *lafe_progname;
=20
-void lafe_warnc(int code, const char *fmt, ...);
-void lafe_errc(int eval, int code, const char *fmt, ...) __LA_DEAD;
+void lafe_warnc(int code, const char *fmt, ...) __LA_PRINTFLIKE(2, 3);
+void lafe_errc(int eval, int code, const char *fmt, ...) __LA_DEAD
+ __LA_PRINTFLIKE(3, 4);
=20
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
matching.c
--- a/head/contrib/libarchive/libarchive_fe/matching.c Mon Jul 30 11:44:18 =
2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "lafe_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/matching.c 23215=
3 2012-02-25 10:58:02Z mm $");
-
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "err.h"
-#include "line_reader.h"
-#include "matching.h"
-#include "pathmatch.h"
-
-struct match {
- struct match *next;
- int matches;
- char pattern[1];
-};
-
-struct lafe_matching {
- struct match *exclusions;
- int exclusions_count;
- struct match *inclusions;
- int inclusions_count;
- int inclusions_unmatched_count;
-};
-
-static void add_pattern(struct match **list, const char *pattern);
-static void initialize_matching(struct lafe_matching **);
-static int match_exclusion(struct match *, const char *pathname);
-static int match_inclusion(struct match *, const char *pathname);
-
-/*
- * The matching logic here needs to be re-thought. I started out to
- * try to mimic gtar's matching logic, but it's not entirely
- * consistent. In particular 'tar -t' and 'tar -x' interpret patterns
- * on the command line as anchored, but --exclude doesn't.
- */
-
-/*
- * Utility functions to manage exclusion/inclusion patterns
- */
-
-int
-lafe_exclude(struct lafe_matching **matching, const char *pattern)
-{
-
- if (*matching =3D=3D NULL)
- initialize_matching(matching);
- add_pattern(&((*matching)->exclusions), pattern);
- (*matching)->exclusions_count++;
- return (0);
-}
-
-int
-lafe_exclude_from_file(struct lafe_matching **matching, const char *pathna=
me)
-{
- struct lafe_line_reader *lr;
- const char *p;
- int ret =3D 0;
-
- lr =3D lafe_line_reader(pathname, 0);
- while ((p =3D lafe_line_reader_next(lr)) !=3D NULL) {
- if (lafe_exclude(matching, p) !=3D 0)
- ret =3D -1;
- }
- lafe_line_reader_free(lr);
- return (ret);
-}
-
-int
-lafe_include(struct lafe_matching **matching, const char *pattern)
-{
-
- if (*matching =3D=3D NULL)
- initialize_matching(matching);
- add_pattern(&((*matching)->inclusions), pattern);
- (*matching)->inclusions_count++;
- (*matching)->inclusions_unmatched_count++;
- return (0);
-}
-
-int
-lafe_include_from_file(struct lafe_matching **matching, const char *pathna=
me,
- int nullSeparator)
-{
- struct lafe_line_reader *lr;
- const char *p;
- int ret =3D 0;
-
- lr =3D lafe_line_reader(pathname, nullSeparator);
- while ((p =3D lafe_line_reader_next(lr)) !=3D NULL) {
- if (lafe_include(matching, p) !=3D 0)
- ret =3D -1;
- }
- lafe_line_reader_free(lr);
- return (ret);
-}
-
-static void
-add_pattern(struct match **list, const char *pattern)
-{
- struct match *match;
- size_t len;
-
- len =3D strlen(pattern);
- match =3D malloc(sizeof(*match) + len + 1);
- if (match =3D=3D NULL)
- lafe_errc(1, errno, "Out of memory");
- strcpy(match->pattern, pattern);
- /* Both "foo/" and "foo" should match "foo/bar". */
- if (len && match->pattern[len - 1] =3D=3D '/')
- match->pattern[len - 1] =3D '\0';
- match->next =3D *list;
- *list =3D match;
- match->matches =3D 0;
-}
-
-
-int
-lafe_excluded(struct lafe_matching *matching, const char *pathname)
-{
- struct match *match;
- struct match *matched;
-
- if (matching =3D=3D NULL)
- return (0);
-
- /* Mark off any unmatched inclusions. */
- /* In particular, if a filename does appear in the archive and
- * is explicitly included and excluded, then we don't report
- * it as missing even though we don't extract it.
- */
- matched =3D NULL;
- for (match =3D matching->inclusions; match !=3D NULL; match =3D match->ne=
xt){
- if (match->matches =3D=3D 0
- && match_inclusion(match, pathname)) {
- matching->inclusions_unmatched_count--;
- match->matches++;
- matched =3D match;
- }
- }
-
- /* Exclusions take priority */
- for (match =3D matching->exclusions; match !=3D NULL; match =3D match->ne=
xt){
- if (match_exclusion(match, pathname))
- return (1);
- }
-
- /* It's not excluded and we found an inclusion above, so it's included. */
- if (matched !=3D NULL)
- return (0);
-
-
- /* We didn't find an unmatched inclusion, check the remaining ones. */
- for (match =3D matching->inclusions; match !=3D NULL; match =3D match->ne=
xt){
- /* We looked at previously-unmatched inclusions already. */
- if (match->matches > 0
- && match_inclusion(match, pathname)) {
- match->matches++;
- return (0);
- }
- }
-
- /* If there were inclusions, default is to exclude. */
- if (matching->inclusions !=3D NULL)
- return (1);
-
- /* No explicit inclusions, default is to match. */
- return (0);
-}
-
-/*
- * This is a little odd, but it matches the default behavior of
- * gtar. In particular, 'a*b' will match 'foo/a1111/222b/bar'
- *
- */
-static int
-match_exclusion(struct match *match, const char *pathname)
-{
- return (lafe_pathmatch(match->pattern,
- pathname,
- PATHMATCH_NO_ANCHOR_START | PATHMATCH_NO_ANCHOR_END));
-}
-
-/*
- * Again, mimic gtar: inclusions are always anchored (have to match
- * the beginning of the path) even though exclusions are not anchored.
- */
-static int
-match_inclusion(struct match *match, const char *pathname)
-{
- return (lafe_pathmatch(match->pattern, pathname, PATHMATCH_NO_ANCHOR_END)=
);
-}
-
-void
-lafe_cleanup_exclusions(struct lafe_matching **matching)
-{
- struct match *p, *q;
-
- if (*matching =3D=3D NULL)
- return;
-
- for (p =3D (*matching)->inclusions; p !=3D NULL; ) {
- q =3D p;
- p =3D p->next;
- free(q);
- }
-
- for (p =3D (*matching)->exclusions; p !=3D NULL; ) {
- q =3D p;
- p =3D p->next;
- free(q);
- }
-
- free(*matching);
- *matching =3D NULL;
-}
-
-static void
-initialize_matching(struct lafe_matching **matching)
-{
- *matching =3D calloc(sizeof(**matching), 1);
- if (*matching =3D=3D NULL)
- lafe_errc(1, errno, "No memory");
-}
-
-int
-lafe_unmatched_inclusions(struct lafe_matching *matching)
-{
-
- if (matching =3D=3D NULL)
- return (0);
- return (matching->inclusions_unmatched_count);
-}
-
-int
-lafe_unmatched_inclusions_warn(struct lafe_matching *matching, const char =
*msg)
-{
- struct match *p;
-
- if (matching =3D=3D NULL)
- return (0);
-
- for (p =3D matching->inclusions; p !=3D NULL; p =3D p->next) {
- if (p->matches =3D=3D 0)
- lafe_warnc(0, "%s: %s", p->pattern, msg);
- }
-
- return (matching->inclusions_unmatched_count);
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
matching.h
--- a/head/contrib/libarchive/libarchive_fe/matching.h Mon Jul 30 11:44:18 =
2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: head/contrib/libarchive/libarchive_fe/matching.h 228763 2011-=
12-21 11:13:29Z mm $
- */
-
-#ifndef MATCHING_H
-#define MATCHING_H
-
-struct lafe_matching;
-
-int lafe_exclude(struct lafe_matching **matching, const char *pattern);
-int lafe_exclude_from_file(struct lafe_matching **matching,
- const char *pathname);
-int lafe_include(struct lafe_matching **matching, const char *pattern);
-int lafe_include_from_file(struct lafe_matching **matching,
- const char *pathname, int nullSeparator);
-
-int lafe_excluded(struct lafe_matching *, const char *pathname);
-void lafe_cleanup_exclusions(struct lafe_matching **);
-int lafe_unmatched_inclusions(struct lafe_matching *);
-int lafe_unmatched_inclusions_warn(struct lafe_matching *, const char *msg=
);
-
-#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
pathmatch.c
--- a/head/contrib/libarchive/libarchive_fe/pathmatch.c Mon Jul 30 11:44:18=
2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,255 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "lafe_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/pathmatch.c 2321=
53 2012-02-25 10:58:02Z mm $");
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "pathmatch.h"
-
-/*
- * Check whether a character 'c' is matched by a list specification [...]:
- * * Leading '!' or '^' negates the class.
- * * <char>-<char> is a range of characters
- * * \<char> removes any special meaning for <char>
- *
- * Some interesting boundary cases:
- * a-d-e is one range (a-d) followed by two single characters - and e.
- * \a-\d is same as a-d
- * a\-d is three single characters: a, d, -
- * Trailing - is not special (so [a-] is two characters a and -).
- * Initial - is not special ([a-] is same as [-a] is same as [\\-a])
- * This function never sees a trailing \.
- * [] always fails
- * [!] always succeeds
- */
-static int
-pm_list(const char *start, const char *end, const char c, int flags)
-{
- const char *p =3D start;
- char rangeStart =3D '\0', nextRangeStart;
- int match =3D 1, nomatch =3D 0;
-
- /* This will be used soon... */
- (void)flags; /* UNUSED */
-
- /* If this is a negated class, return success for nomatch. */
- if ((*p =3D=3D '!' || *p =3D=3D '^') && p < end) {
- match =3D 0;
- nomatch =3D 1;
- ++p;
- }
-
- while (p < end) {
- nextRangeStart =3D '\0';
- switch (*p) {
- case '-':
- /* Trailing or initial '-' is not special. */
- if ((rangeStart =3D=3D '\0') || (p =3D=3D end - 1)) {
- if (*p =3D=3D c)
- return (match);
- } else {
- char rangeEnd =3D *++p;
- if (rangeEnd =3D=3D '\\')
- rangeEnd =3D *++p;
- if ((rangeStart <=3D c) && (c <=3D rangeEnd))
- return (match);
- }
- break;
- case '\\':
- ++p;
- /* Fall through */
- default:
- if (*p =3D=3D c)
- return (match);
- nextRangeStart =3D *p; /* Possible start of range. */
- }
- rangeStart =3D nextRangeStart;
- ++p;
- }
- return (nomatch);
-}
-
-/*
- * If s is pointing to "./", ".//", "./././" or the like, skip it.
- */
-static const char *
-pm_slashskip(const char *s) {
- while ((*s =3D=3D '/')
- || (s[0] =3D=3D '.' && s[1] =3D=3D '/')
- || (s[0] =3D=3D '.' && s[1] =3D=3D '\0'))
- ++s;
- return (s);
-}
-
-static int
-pm(const char *p, const char *s, int flags)
-{
- const char *end;
-
- /*
- * Ignore leading './', './/', '././', etc.
- */
- if (s[0] =3D=3D '.' && s[1] =3D=3D '/')
- s =3D pm_slashskip(s + 1);
- if (p[0] =3D=3D '.' && p[1] =3D=3D '/')
- p =3D pm_slashskip(p + 1);
-
- for (;;) {
- switch (*p) {
- case '\0':
- if (s[0] =3D=3D '/') {
- if (flags & PATHMATCH_NO_ANCHOR_END)
- return (1);
- /* "dir" =3D=3D "dir/" =3D=3D "dir/." */
- s =3D pm_slashskip(s);
- }
- return (*s =3D=3D '\0');
- case '?':
- /* ? always succeeds, unless we hit end of 's' */
- if (*s =3D=3D '\0')
- return (0);
- break;
- case '*':
- /* "*" =3D=3D "**" =3D=3D "***" ... */
- while (*p =3D=3D '*')
- ++p;
- /* Trailing '*' always succeeds. */
- if (*p =3D=3D '\0')
- return (1);
- while (*s) {
- if (lafe_pathmatch(p, s, flags))
- return (1);
- ++s;
- }
- return (0);
- case '[':
- /*
- * Find the end of the [...] character class,
- * ignoring \] that might occur within the class.
- */
- end =3D p + 1;
- while (*end !=3D '\0' && *end !=3D ']') {
- if (*end =3D=3D '\\' && end[1] !=3D '\0')
- ++end;
- ++end;
- }
- if (*end =3D=3D ']') {
- /* We found [...], try to match it. */
- if (!pm_list(p + 1, end, *s, flags))
- return (0);
- p =3D end; /* Jump to trailing ']' char. */
- break;
- } else
- /* No final ']', so just match '['. */
- if (*p !=3D *s)
- return (0);
- break;
- case '\\':
- /* Trailing '\\' matches itself. */
- if (p[1] =3D=3D '\0') {
- if (*s !=3D '\\')
- return (0);
- } else {
- ++p;
- if (*p !=3D *s)
- return (0);
- }
- break;
- case '/':
- if (*s !=3D '/' && *s !=3D '\0')
- return (0);
- /* Note: pattern "/\./" won't match "/";
- * pm_slashskip() correctly stops at backslash. */
- p =3D pm_slashskip(p);
- s =3D pm_slashskip(s);
- if (*p =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END))
- return (1);
- --p; /* Counteract the increment below. */
- --s;
- break;
- case '$':
- /* '$' is special only at end of pattern and only
- * if PATHMATCH_NO_ANCHOR_END is specified. */
- if (p[1] =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END)){
- /* "dir" =3D=3D "dir/" =3D=3D "dir/." */
- return (*pm_slashskip(s) =3D=3D '\0');
- }
- /* Otherwise, '$' is not special. */
- /* FALL THROUGH */
- default:
- if (*p !=3D *s)
- return (0);
- break;
- }
- ++p;
- ++s;
- }
-}
-
-/* Main entry point. */
-int
-lafe_pathmatch(const char *p, const char *s, int flags)
-{
- /* Empty pattern only matches the empty string. */
- if (p =3D=3D NULL || *p =3D=3D '\0')
- return (s =3D=3D NULL || *s =3D=3D '\0');
-
- /* Leading '^' anchors the start of the pattern. */
- if (*p =3D=3D '^') {
- ++p;
- flags &=3D ~PATHMATCH_NO_ANCHOR_START;
- }
-
- if (*p =3D=3D '/' && *s !=3D '/')
- return (0);
-
- /* Certain patterns and file names anchor implicitly. */
- if (*p =3D=3D '*' || *p =3D=3D '/' || *p =3D=3D '/') {
- while (*p =3D=3D '/')
- ++p;
- while (*s =3D=3D '/')
- ++s;
- return (pm(p, s, flags));
- }
-
- /* If start is unanchored, try to match start of each path element. */
- if (flags & PATHMATCH_NO_ANCHOR_START) {
- for ( ; s !=3D NULL; s =3D strchr(s, '/')) {
- if (*s =3D=3D '/')
- s++;
- if (pm(p, s, flags))
- return (1);
- }
- return (0);
- }
-
- /* Default: Match from beginning. */
- return (pm(p, s, flags));
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
pathmatch.h
--- a/head/contrib/libarchive/libarchive_fe/pathmatch.h Mon Jul 30 11:44:18=
2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
- * in this position and unchanged.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: head/contrib/libarchive/libarchive_fe/pathmatch.h 228763 2011=
-12-21 11:13:29Z mm $
- */
-
-#ifndef LAFE_PATHMATCH_H
-#define LAFE_PATHMATCH_H
-
-/* Don't anchor at beginning unless the pattern starts with "^" */
-#define PATHMATCH_NO_ANCHOR_START 1
-/* Don't anchor at end unless the pattern ends with "$" */
-#define PATHMATCH_NO_ANCHOR_END 2
-
-/* Note that "^" and "$" are not special unless you set the corresponding
- * flag above. */
-
-int lafe_pathmatch(const char *p, const char *s, int flags);
-
-#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/bsdtar.1
--- a/head/contrib/libarchive/tar/bsdtar.1 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/bsdtar.1 Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/contrib/libarchive/tar/bsdtar.1 232153 2012-02-25 10:58=
:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/tar/bsdtar.1 238856 2012-07-28 06:38=
:44Z mm $
.\"
-.Dd Oct 12, 2009
+.Dd December 24, 2011
.Dt TAR 1
.Os
.Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/bsdtar.c
--- a/head/contrib/libarchive/tar/bsdtar.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/bsdtar.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/bsdtar.c 232153 2012-02-25=
10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/bsdtar.c 238856 2012-07-28=
06:38:44Z mm $");
=20
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
@@ -118,9 +118,6 @@
}
#endif
=20
-/* External function to parse a date/time string */
-time_t get_date(time_t, const char *);
-
static void long_help(void);
static void only_mode(struct bsdtar *, const char *opt,
const char *valid);
@@ -140,7 +137,6 @@
char option_o;
char possible_help_request;
char buff[16];
- time_t now;
=20
/*
* Use a pointer for consistency, but stack-allocated storage
@@ -192,8 +188,6 @@
lafe_progname =3D *argv;
}
=20
- time(&now);
-
#if HAVE_SETLOCALE
if (setlocale(LC_ALL, "") =3D=3D NULL)
lafe_warnc(0, "Failed to set default locale");
@@ -241,11 +235,14 @@
* Enable Mac OS "copyfile()" extension by default.
* This has no effect on other platforms.
*/
- bsdtar->enable_copyfile =3D 1;
+ bsdtar->readdisk_flags |=3D ARCHIVE_READDISK_MAC_COPYFILE;
#ifdef COPYFILE_DISABLE_VAR
if (getenv(COPYFILE_DISABLE_VAR))
- bsdtar->enable_copyfile =3D 0;
+ bsdtar->readdisk_flags &=3D ~ARCHIVE_READDISK_MAC_COPYFILE;
#endif
+ bsdtar->matching =3D archive_match_new();
+ if (bsdtar->matching =3D=3D NULL)
+ lafe_errc(1, errno, "Out of memory");
=20
bsdtar->argv =3D argv;
bsdtar->argc =3D argc;
@@ -287,10 +284,11 @@
bsdtar->option_chroot =3D 1;
break;
case OPTION_DISABLE_COPYFILE: /* Mac OS X */
- bsdtar->enable_copyfile =3D 0;
+ bsdtar->readdisk_flags &=3D ~ARCHIVE_READDISK_MAC_COPYFILE;
break;
case OPTION_EXCLUDE: /* GNU tar */
- if (lafe_exclude(&bsdtar->matching, bsdtar->argument))
+ if (archive_match_exclude_pattern(
+ bsdtar->matching, bsdtar->argument) !=3D ARCHIVE_OK)
lafe_errc(1, 0,
"Couldn't exclude %s\n", bsdtar->argument);
break;
@@ -341,7 +339,8 @@
* no one else needs this to filter entries
* when transforming archives.
*/
- if (lafe_include(&bsdtar->matching, bsdtar->argument))
+ if (archive_match_include_pattern(bsdtar->matching,
+ bsdtar->argument) !=3D ARCHIVE_OK)
lafe_errc(1, 0,
"Failed to add %s to inclusion list",
bsdtar->argument);
@@ -395,39 +394,35 @@
* TODO: Add corresponding "older" options to reverse these.
*/
case OPTION_NEWER_CTIME: /* GNU tar */
- bsdtar->newer_ctime_filter =3D 1;
- bsdtar->newer_ctime_sec =3D get_date(now, bsdtar->argument);
+ if (archive_match_include_date(bsdtar->matching,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER,
+ bsdtar->argument) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(bsdtar->matching));
break;
case OPTION_NEWER_CTIME_THAN:
- {
- struct stat st;
- if (stat(bsdtar->argument, &st) !=3D 0)
- lafe_errc(1, 0,
- "Can't open file %s", bsdtar->argument);
- bsdtar->newer_ctime_filter =3D 1;
- bsdtar->newer_ctime_sec =3D st.st_ctime;
- bsdtar->newer_ctime_nsec =3D
- ARCHIVE_STAT_CTIME_NANOS(&st);
- }
+ if (archive_match_include_file_time(bsdtar->matching,
+ ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER,
+ bsdtar->argument) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(bsdtar->matching));
break;
case OPTION_NEWER_MTIME: /* GNU tar */
- bsdtar->newer_mtime_filter =3D 1;
- bsdtar->newer_mtime_sec =3D get_date(now, bsdtar->argument);
+ if (archive_match_include_date(bsdtar->matching,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER,
+ bsdtar->argument) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(bsdtar->matching));
break;
case OPTION_NEWER_MTIME_THAN:
- {
- struct stat st;
- if (stat(bsdtar->argument, &st) !=3D 0)
- lafe_errc(1, 0,
- "Can't open file %s", bsdtar->argument);
- bsdtar->newer_mtime_filter =3D 1;
- bsdtar->newer_mtime_sec =3D st.st_mtime;
- bsdtar->newer_mtime_nsec =3D
- ARCHIVE_STAT_MTIME_NANOS(&st);
- }
+ if (archive_match_include_file_time(bsdtar->matching,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER,
+ bsdtar->argument) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(bsdtar->matching));
break;
case OPTION_NODUMP: /* star */
- bsdtar->option_honor_nodump =3D 1;
+ bsdtar->readdisk_flags |=3D ARCHIVE_READDISK_HONOR_NODUMP;
break;
case OPTION_NO_SAME_OWNER: /* GNU tar */
bsdtar->extract_flags &=3D ~ARCHIVE_EXTRACT_OWNER;
@@ -454,7 +449,8 @@
option_o =3D 1; /* Record it and resolve it later. */
break;
case OPTION_ONE_FILE_SYSTEM: /* GNU tar */
- bsdtar->option_dont_traverse_mounts =3D 1;
+ bsdtar->readdisk_flags |=3D
+ ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS;
break;
case OPTION_OPTIONS:
bsdtar->option_options =3D bsdtar->argument;
@@ -559,10 +555,11 @@
bsdtar->option_interactive =3D 1;
break;
case 'X': /* GNU tar */
- if (lafe_exclude_from_file(&bsdtar->matching, bsdtar->argument))
- lafe_errc(1, 0,
- "failed to process exclusions from file %s",
- bsdtar->argument);
+ if (archive_match_exclude_pattern_from_file(
+ bsdtar->matching, bsdtar->argument, 0)
+ !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(bsdtar->matching));
break;
case 'x': /* SUSv2 */
set_mode(bsdtar, opt);
@@ -612,11 +609,11 @@
"Must specify one of -c, -r, -t, -u, -x");
=20
/* Check boolean options only permitted in certain modes. */
- if (bsdtar->option_dont_traverse_mounts)
+ if (bsdtar->readdisk_flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS)
only_mode(bsdtar, "--one-file-system", "cru");
if (bsdtar->option_fast_read)
only_mode(bsdtar, "--fast-read", "xt");
- if (bsdtar->option_honor_nodump)
+ if (bsdtar->readdisk_flags & ARCHIVE_READDISK_HONOR_NODUMP)
only_mode(bsdtar, "--nodump", "cru");
if (option_o > 0) {
switch (bsdtar->mode) {
@@ -684,7 +681,7 @@
break;
}
=20
- lafe_cleanup_exclusions(&bsdtar->matching);
+ archive_match_free(bsdtar->matching);
#if HAVE_REGEX_H
cleanup_substitution(bsdtar);
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/bsdtar.h
--- a/head/contrib/libarchive/tar/bsdtar.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/bsdtar.h Fri Aug 10 14:19:25 2012 +0300
@@ -22,14 +22,12 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/tar/bsdtar.h 232153 2012-02-25 10:58:=
02Z mm $
+ * $FreeBSD: head/contrib/libarchive/tar/bsdtar.h 238856 2012-07-28 06:38:=
44Z mm $
*/
=20
#include "bsdtar_platform.h"
#include <stdio.h>
=20
-#include "matching.h"
-
#define DEFAULT_BYTES_PER_BLOCK (20*512)
=20
/*
@@ -46,16 +44,11 @@
const char *create_format; /* -F format */
char *pending_chdir; /* -C dir */
const char *names_from_file; /* -T file */
- int newer_ctime_filter; /* --newer/--newer-than */
- time_t newer_ctime_sec; /* --newer/--newer-than */
- long newer_ctime_nsec; /* --newer/--newer-than */
- int newer_mtime_filter; /* --newer-mtime/--newer-mtime-than */
- time_t newer_mtime_sec; /* --newer-mtime */
- long newer_mtime_nsec; /* --newer-mtime-than */
int bytes_per_block; /* -b block_size */
int bytes_in_last_block; /* See -b handling. */
int verbose; /* -v */
int extract_flags; /* Flags for extract operation */
+ int readdisk_flags; /* Flags for read disk operation */
int strip_components; /* Remove this many leading dirs */
int gid; /* --gid */
const char *gname; /* --gname */
@@ -67,10 +60,8 @@
const char *compress_program;
char option_absolute_paths; /* -P */
char option_chroot; /* --chroot */
- char option_dont_traverse_mounts; /* --one-file-system */
char option_fast_read; /* --fast-read */
const char *option_options; /* --options */
- char option_honor_nodump; /* --nodump */
char option_interactive; /* -w */
char option_no_owner; /* -o */
char option_no_subdirs; /* -n */
@@ -81,7 +72,6 @@
char option_unlink_first; /* -U */
char option_warn_links; /* --check-links */
char day_first; /* show day before month in -tv output */
- char enable_copyfile; /* For Mac OS */
=20
/* Option parser state */
int getopt_state;
@@ -111,7 +101,8 @@
struct name_cache *gname_cache; /* for write.c */
char *buff; /* for write.c */
size_t buff_size; /* for write.c */
- struct lafe_matching *matching; /* for matching.c */
+ int first_fs; /* for write.c */
+ struct archive *matching; /* for matching.c */
struct security *security; /* for read.c */
struct name_cache *uname_cache; /* for write.c */
struct siginfo_data *siginfo; /* for siginfo.c */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/getdate.c
--- a/head/contrib/libarchive/tar/getdate.c Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1037 +0,0 @@
-/*
- * This code is in the public domain and has no copyright.
- *
- * This is a plain C recursive-descent translation of an old
- * public-domain YACC grammar that has been used for parsing dates in
- * very many open-source projects.
- *
- * Since the original authors were generous enough to donate their
- * work to the public domain, I feel compelled to match their
- * generosity.
- *
- * Tim Kientzle, February 2009.
- */
-
-/*
- * Header comment from original getdate.y:
- */
-
-/*
-** Originally written by Steven M. Bellovin <smb at research.att.com> while
-** at the University of North Carolina at Chapel Hill. Later tweaked by
-** a couple of people on Usenet. Completely overhauled by Rich $alz
-** <rsalz at bbn.com> and Jim Berets <jberets at bbn.com> in August, 1990;
-**
-** This grammar has 10 shift/reduce conflicts.
-**
-** This code is in the public domain and has no copyright.
-*/
-
-#ifdef __FreeBSD__
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/getdate.c 232153 2012-02-2=
5 10:58:02Z mm $");
-#endif
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-/* This file defines a single public function. */
-time_t get_date(time_t now, char *);
-
-/* Basic time units. */
-#define EPOCH 1970
-#define MINUTE (60L)
-#define HOUR (60L * MINUTE)
-#define DAY (24L * HOUR)
-
-/* Daylight-savings mode: on, off, or not yet known. */
-enum DSTMODE { DSTon, DSToff, DSTmaybe };
-/* Meridian: am or pm. */
-enum { tAM, tPM };
-/* Token types returned by nexttoken() */
-enum { tAGO =3D 260, tDAY, tDAYZONE, tAMPM, tMONTH, tMONTH_UNIT, tSEC_UNIT,
- tUNUMBER, tZONE, tDST };
-struct token { int token; time_t value; };
-
-/*
- * Parser state.
- */
-struct gdstate {
- struct token *tokenp; /* Pointer to next token. */
- /* HaveXxxx counts how many of this kind of phrase we've seen;
- * it's a fatal error to have more than one time, zone, day,
- * or date phrase. */
- int HaveYear;
- int HaveMonth;
- int HaveDay;
- int HaveWeekDay; /* Day of week */
- int HaveTime; /* Hour/minute/second */
- int HaveZone; /* timezone and/or DST info */
- int HaveRel; /* time offset; we can have more than one */
- /* Absolute time values. */
- time_t Timezone; /* Seconds offset from GMT */
- time_t Day;
- time_t Hour;
- time_t Minutes;
- time_t Month;
- time_t Seconds;
- time_t Year;
- /* DST selection */
- enum DSTMODE DSTmode;
- /* Day of week accounting, e.g., "3rd Tuesday" */
- time_t DayOrdinal; /* "3" in "3rd Tuesday" */
- time_t DayNumber; /* "Tuesday" in "3rd Tuesday" */
- /* Relative time values: hour/day/week offsets are measured in
- * seconds, month/year are counted in months. */
- time_t RelMonth;
- time_t RelSeconds;
-};
-
-/*
- * A series of functions that recognize certain common time phrases.
- * Each function returns 1 if it managed to make sense of some of the
- * tokens, zero otherwise.
- */
-
-/*
- * hour:minute or hour:minute:second with optional AM, PM, or numeric
- * timezone offset
- */
-static int
-timephrase(struct gdstate *gds)
-{
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D ':'
- && gds->tokenp[2].token =3D=3D tUNUMBER
- && gds->tokenp[3].token =3D=3D ':'
- && gds->tokenp[4].token =3D=3D tUNUMBER) {
- /* "12:14:18" or "22:08:07" */
- ++gds->HaveTime;
- gds->Hour =3D gds->tokenp[0].value;
- gds->Minutes =3D gds->tokenp[2].value;
- gds->Seconds =3D gds->tokenp[4].value;
- gds->tokenp +=3D 5;
- }
- else if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D ':'
- && gds->tokenp[2].token =3D=3D tUNUMBER) {
- /* "12:14" or "22:08" */
- ++gds->HaveTime;
- gds->Hour =3D gds->tokenp[0].value;
- gds->Minutes =3D gds->tokenp[2].value;
- gds->Seconds =3D 0;
- gds->tokenp +=3D 3;
- }
- else if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D tAMPM) {
- /* "7" is a time if it's followed by "am" or "pm" */
- ++gds->HaveTime;
- gds->Hour =3D gds->tokenp[0].value;
- gds->Minutes =3D gds->Seconds =3D 0;
- /* We'll handle the AM/PM below. */
- gds->tokenp +=3D 1;
- } else {
- /* We can't handle this. */
- return 0;
- }
-
- if (gds->tokenp[0].token =3D=3D tAMPM) {
- /* "7:12pm", "12:20:13am" */
- if (gds->Hour =3D=3D 12)
- gds->Hour =3D 0;
- if (gds->tokenp[0].value =3D=3D tPM)
- gds->Hour +=3D 12;
- gds->tokenp +=3D 1;
- }
- if (gds->tokenp[0].token =3D=3D '+'
- && gds->tokenp[1].token =3D=3D tUNUMBER) {
- /* "7:14+0700" */
- gds->HaveZone++;
- gds->DSTmode =3D DSToff;
- gds->Timezone =3D - ((gds->tokenp[1].value / 100) * HOUR
- + (gds->tokenp[1].value % 100) * MINUTE);
- gds->tokenp +=3D 2;
- }
- if (gds->tokenp[0].token =3D=3D '-'
- && gds->tokenp[1].token =3D=3D tUNUMBER) {
- /* "19:14:12-0530" */
- gds->HaveZone++;
- gds->DSTmode =3D DSToff;
- gds->Timezone =3D + ((gds->tokenp[1].value / 100) * HOUR
- + (gds->tokenp[1].value % 100) * MINUTE);
- gds->tokenp +=3D 2;
- }
- return 1;
-}
-
-/*
- * Timezone name, possibly including DST.
- */
-static int
-zonephrase(struct gdstate *gds)
-{
- if (gds->tokenp[0].token =3D=3D tZONE
- && gds->tokenp[1].token =3D=3D tDST) {
- gds->HaveZone++;
- gds->Timezone =3D gds->tokenp[0].value;
- gds->DSTmode =3D DSTon;
- gds->tokenp +=3D 1;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tZONE) {
- gds->HaveZone++;
- gds->Timezone =3D gds->tokenp[0].value;
- gds->DSTmode =3D DSToff;
- gds->tokenp +=3D 1;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tDAYZONE) {
- gds->HaveZone++;
- gds->Timezone =3D gds->tokenp[0].value;
- gds->DSTmode =3D DSTon;
- gds->tokenp +=3D 1;
- return 1;
- }
- return 0;
-}
-
-/*
- * Year/month/day in various combinations.
- */
-static int
-datephrase(struct gdstate *gds)
-{
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D '/'
- && gds->tokenp[2].token =3D=3D tUNUMBER
- && gds->tokenp[3].token =3D=3D '/'
- && gds->tokenp[4].token =3D=3D tUNUMBER) {
- gds->HaveYear++;
- gds->HaveMonth++;
- gds->HaveDay++;
- if (gds->tokenp[0].value >=3D 13) {
- /* First number is big: 2004/01/29, 99/02/17 */
- gds->Year =3D gds->tokenp[0].value;
- gds->Month =3D gds->tokenp[2].value;
- gds->Day =3D gds->tokenp[4].value;
- } else if ((gds->tokenp[4].value >=3D 13)
- || (gds->tokenp[2].value >=3D 13)) {
- /* Last number is big: 01/07/98 */
- /* Middle number is big: 01/29/04 */
- gds->Month =3D gds->tokenp[0].value;
- gds->Day =3D gds->tokenp[2].value;
- gds->Year =3D gds->tokenp[4].value;
- } else {
- /* No significant clues: 02/03/04 */
- gds->Month =3D gds->tokenp[0].value;
- gds->Day =3D gds->tokenp[2].value;
- gds->Year =3D gds->tokenp[4].value;
- }
- gds->tokenp +=3D 5;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D '/'
- && gds->tokenp[2].token =3D=3D tUNUMBER) {
- /* "1/15" */
- gds->HaveMonth++;
- gds->HaveDay++;
- gds->Month =3D gds->tokenp[0].value;
- gds->Day =3D gds->tokenp[2].value;
- gds->tokenp +=3D 3;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D '-'
- && gds->tokenp[2].token =3D=3D tUNUMBER
- && gds->tokenp[3].token =3D=3D '-'
- && gds->tokenp[4].token =3D=3D tUNUMBER) {
- /* ISO 8601 format. yyyy-mm-dd. */
- gds->HaveYear++;
- gds->HaveMonth++;
- gds->HaveDay++;
- gds->Year =3D gds->tokenp[0].value;
- gds->Month =3D gds->tokenp[2].value;
- gds->Day =3D gds->tokenp[4].value;
- gds->tokenp +=3D 5;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D '-'
- && gds->tokenp[2].token =3D=3D tMONTH
- && gds->tokenp[3].token =3D=3D '-'
- && gds->tokenp[4].token =3D=3D tUNUMBER) {
- gds->HaveYear++;
- gds->HaveMonth++;
- gds->HaveDay++;
- if (gds->tokenp[0].value > 31) {
- /* e.g. 1992-Jun-17 */
- gds->Year =3D gds->tokenp[0].value;
- gds->Month =3D gds->tokenp[2].value;
- gds->Day =3D gds->tokenp[4].value;
- } else {
- /* e.g. 17-JUN-1992. */
- gds->Day =3D gds->tokenp[0].value;
- gds->Month =3D gds->tokenp[2].value;
- gds->Year =3D gds->tokenp[4].value;
- }
- gds->tokenp +=3D 5;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tMONTH
- && gds->tokenp[1].token =3D=3D tUNUMBER
- && gds->tokenp[2].token =3D=3D ','
- && gds->tokenp[3].token =3D=3D tUNUMBER) {
- /* "June 17, 2001" */
- gds->HaveYear++;
- gds->HaveMonth++;
- gds->HaveDay++;
- gds->Month =3D gds->tokenp[0].value;
- gds->Day =3D gds->tokenp[1].value;
- gds->Year =3D gds->tokenp[3].value;
- gds->tokenp +=3D 4;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tMONTH
- && gds->tokenp[1].token =3D=3D tUNUMBER) {
- /* "May 3" */
- gds->HaveMonth++;
- gds->HaveDay++;
- gds->Month =3D gds->tokenp[0].value;
- gds->Day =3D gds->tokenp[1].value;
- gds->tokenp +=3D 2;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D tMONTH
- && gds->tokenp[2].token =3D=3D tUNUMBER) {
- /* "12 Sept 1997" */
- gds->HaveYear++;
- gds->HaveMonth++;
- gds->HaveDay++;
- gds->Day =3D gds->tokenp[0].value;
- gds->Month =3D gds->tokenp[1].value;
- gds->Year =3D gds->tokenp[2].value;
- gds->tokenp +=3D 3;
- return 1;
- }
-
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D tMONTH) {
- /* "12 Sept" */
- gds->HaveMonth++;
- gds->HaveDay++;
- gds->Day =3D gds->tokenp[0].value;
- gds->Month =3D gds->tokenp[1].value;
- gds->tokenp +=3D 2;
- return 1;
- }
-
- return 0;
-}
-
-/*
- * Relative time phrase: "tomorrow", "yesterday", "+1 hour", etc.
- */
-static int
-relunitphrase(struct gdstate *gds)
-{
- if (gds->tokenp[0].token =3D=3D '-'
- && gds->tokenp[1].token =3D=3D tUNUMBER
- && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
- /* "-3 hours" */
- gds->HaveRel++;
- gds->RelSeconds -=3D gds->tokenp[1].value * gds->tokenp[2].value;
- gds->tokenp +=3D 3;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D '+'
- && gds->tokenp[1].token =3D=3D tUNUMBER
- && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
- /* "+1 minute" */
- gds->HaveRel++;
- gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
- gds->tokenp +=3D 3;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D tSEC_UNIT) {
- /* "1 day" */
- gds->HaveRel++;
- gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
- gds->tokenp +=3D 3;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D '-'
- && gds->tokenp[1].token =3D=3D tUNUMBER
- && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
- /* "-3 months" */
- gds->HaveRel++;
- gds->RelMonth -=3D gds->tokenp[1].value * gds->tokenp[2].value;
- gds->tokenp +=3D 3;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D '+'
- && gds->tokenp[1].token =3D=3D tUNUMBER
- && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
- /* "+5 years" */
- gds->HaveRel++;
- gds->RelMonth +=3D gds->tokenp[1].value * gds->tokenp[2].value;
- gds->tokenp +=3D 3;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D tMONTH_UNIT) {
- /* "2 years" */
- gds->HaveRel++;
- gds->RelMonth +=3D gds->tokenp[0].value * gds->tokenp[1].value;
- gds->tokenp +=3D 2;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D tSEC_UNIT) {
- /* "now", "tomorrow" */
- gds->HaveRel++;
- gds->RelSeconds +=3D gds->tokenp[0].value;
- ++gds->tokenp;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D tMONTH_UNIT) {
- /* "month" */
- gds->HaveRel++;
- gds->RelMonth +=3D gds->tokenp[0].value;
- gds->tokenp +=3D 1;
- return 1;
- }
- return 0;
-}
-
-/*
- * Day of the week specification.
- */
-static int
-dayphrase(struct gdstate *gds)
-{
- if (gds->tokenp[0].token =3D=3D tDAY) {
- /* "tues", "wednesday," */
- gds->HaveWeekDay++;
- gds->DayOrdinal =3D 1;
- gds->DayNumber =3D gds->tokenp[0].value;
- gds->tokenp +=3D 1;
- if (gds->tokenp[0].token =3D=3D ',')
- gds->tokenp +=3D 1;
- return 1;
- }
- if (gds->tokenp[0].token =3D=3D tUNUMBER
- && gds->tokenp[1].token =3D=3D tDAY) {
- /* "second tues" "3 wed" */
- gds->HaveWeekDay++;
- gds->DayOrdinal =3D gds->tokenp[0].value;
- gds->DayNumber =3D gds->tokenp[1].value;
- gds->tokenp +=3D 2;
- return 1;
- }
- return 0;
-}
-
-/*
- * Try to match a phrase using one of the above functions.
- * This layer also deals with a couple of generic issues.
- */
-static int
-phrase(struct gdstate *gds)
-{
- if (timephrase(gds))
- return 1;
- if (zonephrase(gds))
- return 1;
- if (datephrase(gds))
- return 1;
- if (dayphrase(gds))
- return 1;
- if (relunitphrase(gds)) {
- if (gds->tokenp[0].token =3D=3D tAGO) {
- gds->RelSeconds =3D -gds->RelSeconds;
- gds->RelMonth =3D -gds->RelMonth;
- gds->tokenp +=3D 1;
- }
- return 1;
- }
-
- /* Bare numbers sometimes have meaning. */
- if (gds->tokenp[0].token =3D=3D tUNUMBER) {
- if (gds->HaveTime && !gds->HaveYear && !gds->HaveRel) {
- gds->HaveYear++;
- gds->Year =3D gds->tokenp[0].value;
- gds->tokenp +=3D 1;
- return 1;
- }
-
- if(gds->tokenp[0].value > 10000) {
- /* "20040301" */
- gds->HaveYear++;
- gds->HaveMonth++;
- gds->HaveDay++;
- gds->Day=3D (gds->tokenp[0].value)%100;
- gds->Month=3D (gds->tokenp[0].value/100)%100;
- gds->Year =3D gds->tokenp[0].value/10000;
- gds->tokenp +=3D 1;
- return 1;
- }
-
- if (gds->tokenp[0].value < 24) {
- gds->HaveTime++;
- gds->Hour =3D gds->tokenp[0].value;
- gds->Minutes =3D 0;
- gds->Seconds =3D 0;
- gds->tokenp +=3D 1;
- return 1;
- }
-
- if ((gds->tokenp[0].value / 100 < 24)
- && (gds->tokenp[0].value % 100 < 60)) {
- /* "513" is same as "5:13" */
- gds->Hour =3D gds->tokenp[0].value / 100;
- gds->Minutes =3D gds->tokenp[0].value % 100;
- gds->Seconds =3D 0;
- gds->tokenp +=3D 1;
- return 1;
- }
- }
-
- return 0;
-}
-
-/*
- * A dictionary of time words.
- */
-static struct LEXICON {
- size_t abbrev;
- const char *name;
- int type;
- time_t value;
-} const TimeWords[] =3D {
- /* am/pm */
- { 0, "am", tAMPM, tAM },
- { 0, "pm", tAMPM, tPM },
-
- /* Month names. */
- { 3, "january", tMONTH, 1 },
- { 3, "february", tMONTH, 2 },
- { 3, "march", tMONTH, 3 },
- { 3, "april", tMONTH, 4 },
- { 3, "may", tMONTH, 5 },
- { 3, "june", tMONTH, 6 },
- { 3, "july", tMONTH, 7 },
- { 3, "august", tMONTH, 8 },
- { 3, "september", tMONTH, 9 },
- { 3, "october", tMONTH, 10 },
- { 3, "november", tMONTH, 11 },
- { 3, "december", tMONTH, 12 },
-
- /* Days of the week. */
- { 2, "sunday", tDAY, 0 },
- { 3, "monday", tDAY, 1 },
- { 2, "tuesday", tDAY, 2 },
- { 3, "wednesday", tDAY, 3 },
- { 2, "thursday", tDAY, 4 },
- { 2, "friday", tDAY, 5 },
- { 2, "saturday", tDAY, 6 },
-
- /* Timezones: Offsets are in seconds. */
- { 0, "gmt", tZONE, 0*HOUR }, /* Greenwich Mean */
- { 0, "ut", tZONE, 0*HOUR }, /* Universal (Coordinated) */
- { 0, "utc", tZONE, 0*HOUR },
- { 0, "wet", tZONE, 0*HOUR }, /* Western European */
- { 0, "bst", tDAYZONE, 0*HOUR }, /* British Summer */
- { 0, "wat", tZONE, 1*HOUR }, /* West Africa */
- { 0, "at", tZONE, 2*HOUR }, /* Azores */
- /* { 0, "bst", tZONE, 3*HOUR }, */ /* Brazil Standard: Conflict */
- /* { 0, "gst", tZONE, 3*HOUR }, */ /* Greenland Standard: Conflict*/
- { 0, "nft", tZONE, 3*HOUR+30*MINUTE }, /* Newfoundland */
- { 0, "nst", tZONE, 3*HOUR+30*MINUTE }, /* Newfoundland Standard */
- { 0, "ndt", tDAYZONE, 3*HOUR+30*MINUTE }, /* Newfoundland Daylight */
- { 0, "ast", tZONE, 4*HOUR }, /* Atlantic Standard */
- { 0, "adt", tDAYZONE, 4*HOUR }, /* Atlantic Daylight */
- { 0, "est", tZONE, 5*HOUR }, /* Eastern Standard */
- { 0, "edt", tDAYZONE, 5*HOUR }, /* Eastern Daylight */
- { 0, "cst", tZONE, 6*HOUR }, /* Central Standard */
- { 0, "cdt", tDAYZONE, 6*HOUR }, /* Central Daylight */
- { 0, "mst", tZONE, 7*HOUR }, /* Mountain Standard */
- { 0, "mdt", tDAYZONE, 7*HOUR }, /* Mountain Daylight */
- { 0, "pst", tZONE, 8*HOUR }, /* Pacific Standard */
- { 0, "pdt", tDAYZONE, 8*HOUR }, /* Pacific Daylight */
- { 0, "yst", tZONE, 9*HOUR }, /* Yukon Standard */
- { 0, "ydt", tDAYZONE, 9*HOUR }, /* Yukon Daylight */
- { 0, "hst", tZONE, 10*HOUR }, /* Hawaii Standard */
- { 0, "hdt", tDAYZONE, 10*HOUR }, /* Hawaii Daylight */
- { 0, "cat", tZONE, 10*HOUR }, /* Central Alaska */
- { 0, "ahst", tZONE, 10*HOUR }, /* Alaska-Hawaii Standard */
- { 0, "nt", tZONE, 11*HOUR }, /* Nome */
- { 0, "idlw", tZONE, 12*HOUR }, /* Intl Date Line West */
- { 0, "cet", tZONE, -1*HOUR }, /* Central European */
- { 0, "met", tZONE, -1*HOUR }, /* Middle European */
- { 0, "mewt", tZONE, -1*HOUR }, /* Middle European Winter */
- { 0, "mest", tDAYZONE, -1*HOUR }, /* Middle European Summer */
- { 0, "swt", tZONE, -1*HOUR }, /* Swedish Winter */
- { 0, "sst", tDAYZONE, -1*HOUR }, /* Swedish Summer */
- { 0, "fwt", tZONE, -1*HOUR }, /* French Winter */
- { 0, "fst", tDAYZONE, -1*HOUR }, /* French Summer */
- { 0, "eet", tZONE, -2*HOUR }, /* Eastern Eur, USSR Zone 1 */
- { 0, "bt", tZONE, -3*HOUR }, /* Baghdad, USSR Zone 2 */
- { 0, "it", tZONE, -3*HOUR-30*MINUTE },/* Iran */
- { 0, "zp4", tZONE, -4*HOUR }, /* USSR Zone 3 */
- { 0, "zp5", tZONE, -5*HOUR }, /* USSR Zone 4 */
- { 0, "ist", tZONE, -5*HOUR-30*MINUTE },/* Indian Standard */
- { 0, "zp6", tZONE, -6*HOUR }, /* USSR Zone 5 */
- /* { 0, "nst", tZONE, -6.5*HOUR }, */ /* North Sumatra: Conflict */
- /* { 0, "sst", tZONE, -7*HOUR }, */ /* So Sumatra, USSR 6: Conflict */
- { 0, "wast", tZONE, -7*HOUR }, /* West Australian Standard */
- { 0, "wadt", tDAYZONE, -7*HOUR }, /* West Australian Daylight */
- { 0, "jt", tZONE, -7*HOUR-30*MINUTE },/* Java (3pm in Cronusland!)*/
- { 0, "cct", tZONE, -8*HOUR }, /* China Coast, USSR Zone 7 */
- { 0, "jst", tZONE, -9*HOUR }, /* Japan Std, USSR Zone 8 */
- { 0, "cast", tZONE, -9*HOUR-30*MINUTE },/* Ctrl Australian Std */
- { 0, "cadt", tDAYZONE, -9*HOUR-30*MINUTE },/* Ctrl Australian Daylt */
- { 0, "east", tZONE, -10*HOUR }, /* Eastern Australian Std */
- { 0, "eadt", tDAYZONE, -10*HOUR }, /* Eastern Australian Daylt */
- { 0, "gst", tZONE, -10*HOUR }, /* Guam Std, USSR Zone 9 */
- { 0, "nzt", tZONE, -12*HOUR }, /* New Zealand */
- { 0, "nzst", tZONE, -12*HOUR }, /* New Zealand Standard */
- { 0, "nzdt", tDAYZONE, -12*HOUR }, /* New Zealand Daylight */
- { 0, "idle", tZONE, -12*HOUR }, /* Intl Date Line East */
-
- { 0, "dst", tDST, 0 },
-
- /* Time units. */
- { 4, "years", tMONTH_UNIT, 12 },
- { 5, "months", tMONTH_UNIT, 1 },
- { 9, "fortnights", tSEC_UNIT, 14 * DAY },
- { 4, "weeks", tSEC_UNIT, 7 * DAY },
- { 3, "days", tSEC_UNIT, DAY },
- { 4, "hours", tSEC_UNIT, HOUR },
- { 3, "minutes", tSEC_UNIT, MINUTE },
- { 3, "seconds", tSEC_UNIT, 1 },
-
- /* Relative-time words. */
- { 0, "tomorrow", tSEC_UNIT, DAY },
- { 0, "yesterday", tSEC_UNIT, -DAY },
- { 0, "today", tSEC_UNIT, 0 },
- { 0, "now", tSEC_UNIT, 0 },
- { 0, "last", tUNUMBER, -1 },
- { 0, "this", tSEC_UNIT, 0 },
- { 0, "next", tUNUMBER, 2 },
- { 0, "first", tUNUMBER, 1 },
- { 0, "1st", tUNUMBER, 1 },
-/* { 0, "second", tUNUMBER, 2 }, */
- { 0, "2nd", tUNUMBER, 2 },
- { 0, "third", tUNUMBER, 3 },
- { 0, "3rd", tUNUMBER, 3 },
- { 0, "fourth", tUNUMBER, 4 },
- { 0, "4th", tUNUMBER, 4 },
- { 0, "fifth", tUNUMBER, 5 },
- { 0, "5th", tUNUMBER, 5 },
- { 0, "sixth", tUNUMBER, 6 },
- { 0, "seventh", tUNUMBER, 7 },
- { 0, "eighth", tUNUMBER, 8 },
- { 0, "ninth", tUNUMBER, 9 },
- { 0, "tenth", tUNUMBER, 10 },
- { 0, "eleventh", tUNUMBER, 11 },
- { 0, "twelfth", tUNUMBER, 12 },
- { 0, "ago", tAGO, 1 },
-
- /* Military timezones. */
- { 0, "a", tZONE, 1*HOUR },
- { 0, "b", tZONE, 2*HOUR },
- { 0, "c", tZONE, 3*HOUR },
- { 0, "d", tZONE, 4*HOUR },
- { 0, "e", tZONE, 5*HOUR },
- { 0, "f", tZONE, 6*HOUR },
- { 0, "g", tZONE, 7*HOUR },
- { 0, "h", tZONE, 8*HOUR },
- { 0, "i", tZONE, 9*HOUR },
- { 0, "k", tZONE, 10*HOUR },
- { 0, "l", tZONE, 11*HOUR },
- { 0, "m", tZONE, 12*HOUR },
- { 0, "n", tZONE, -1*HOUR },
- { 0, "o", tZONE, -2*HOUR },
- { 0, "p", tZONE, -3*HOUR },
- { 0, "q", tZONE, -4*HOUR },
- { 0, "r", tZONE, -5*HOUR },
- { 0, "s", tZONE, -6*HOUR },
- { 0, "t", tZONE, -7*HOUR },
- { 0, "u", tZONE, -8*HOUR },
- { 0, "v", tZONE, -9*HOUR },
- { 0, "w", tZONE, -10*HOUR },
- { 0, "x", tZONE, -11*HOUR },
- { 0, "y", tZONE, -12*HOUR },
- { 0, "z", tZONE, 0*HOUR },
-
- /* End of table. */
- { 0, NULL, 0, 0 }
-};
-
-/*
- * Year is either:
- * =3D A number from 0 to 99, which means a year from 1970 to 2069, or
- * =3D The actual year (>=3D100).
- */
-static time_t
-Convert(time_t Month, time_t Day, time_t Year,
- time_t Hours, time_t Minutes, time_t Seconds,
- time_t Timezone, enum DSTMODE DSTmode)
-{
- static int DaysInMonth[12] =3D {
- 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
- };
- time_t Julian;
- int i;
-
- if (Year < 69)
- Year +=3D 2000;
- else if (Year < 100)
- Year +=3D 1900;
- DaysInMonth[1] =3D Year % 4 =3D=3D 0 && (Year % 100 !=3D 0 || Year % 400 =
=3D=3D 0)
- ? 29 : 28;
- /* Checking for 2038 bogusly assumes that time_t is 32 bits. But
- I'm too lazy to try to check for time_t overflow in another way. */
- if (Year < EPOCH || Year > 2038
- || Month < 1 || Month > 12
- /* Lint fluff: "conversion from long may lose accuracy" */
- || Day < 1 || Day > DaysInMonth[(int)--Month]
- || Hours < 0 || Hours > 23
- || Minutes < 0 || Minutes > 59
- || Seconds < 0 || Seconds > 59)
- return -1;
-
- Julian =3D Day - 1;
- for (i =3D 0; i < Month; i++)
- Julian +=3D DaysInMonth[i];
- for (i =3D EPOCH; i < Year; i++)
- Julian +=3D 365 + (i % 4 =3D=3D 0);
- Julian *=3D DAY;
- Julian +=3D Timezone;
- Julian +=3D Hours * HOUR + Minutes * MINUTE + Seconds;
- if (DSTmode =3D=3D DSTon
- || (DSTmode =3D=3D DSTmaybe && localtime(&Julian)->tm_isdst))
- Julian -=3D HOUR;
- return Julian;
-}
-
-
-static time_t
-DSTcorrect(time_t Start, time_t Future)
-{
- time_t StartDay;
- time_t FutureDay;
-
- StartDay =3D (localtime(&Start)->tm_hour + 1) % 24;
- FutureDay =3D (localtime(&Future)->tm_hour + 1) % 24;
- return (Future - Start) + (StartDay - FutureDay) * HOUR;
-}
-
-
-static time_t
-RelativeDate(time_t Start, time_t zone, int dstmode,
- time_t DayOrdinal, time_t DayNumber)
-{
- struct tm *tm;
- time_t t, now;
-
- t =3D Start - zone;
- tm =3D gmtime(&t);
- now =3D Start;
- now +=3D DAY * ((DayNumber - tm->tm_wday + 7) % 7);
- now +=3D 7 * DAY * (DayOrdinal <=3D 0 ? DayOrdinal : DayOrdinal - 1);
- if (dstmode =3D=3D DSTmaybe)
- return DSTcorrect(Start, now);
- return now - Start;
-}
-
-
-static time_t
-RelativeMonth(time_t Start, time_t Timezone, time_t RelMonth)
-{
- struct tm *tm;
- time_t Month;
- time_t Year;
-
- if (RelMonth =3D=3D 0)
- return 0;
- tm =3D localtime(&Start);
- Month =3D 12 * (tm->tm_year + 1900) + tm->tm_mon + RelMonth;
- Year =3D Month / 12;
- Month =3D Month % 12 + 1;
- return DSTcorrect(Start,
- Convert(Month, (time_t)tm->tm_mday, Year,
- (time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec,
- Timezone, DSTmaybe));
-}
-
-/*
- * Tokenizer.
- */
-static int
-nexttoken(char **in, time_t *value)
-{
- char c;
- char buff[64];
-
- for ( ; ; ) {
- while (isspace((unsigned char)**in))
- ++*in;
-
- /* Skip parenthesized comments. */
- if (**in =3D=3D '(') {
- int Count =3D 0;
- do {
- c =3D *(*in)++;
- if (c =3D=3D '\0')
- return c;
- if (c =3D=3D '(')
- Count++;
- else if (c =3D=3D ')')
- Count--;
- } while (Count > 0);
- continue;
- }
-
- /* Try the next token in the word table first. */
- /* This allows us to match "2nd", for example. */
- {
- char *src =3D *in;
- const struct LEXICON *tp;
- unsigned i =3D 0;
-
- /* Force to lowercase and strip '.' characters. */
- while (*src !=3D '\0'
- && (isalnum((unsigned char)*src) || *src =3D=3D '.')
- && i < sizeof(buff)-1) {
- if (*src !=3D '.') {
- if (isupper((unsigned char)*src))
- buff[i++] =3D tolower((unsigned char)*src);
- else
- buff[i++] =3D *src;
- }
- src++;
- }
- buff[i] =3D '\0';
-
- /*
- * Find the first match. If the word can be
- * abbreviated, make sure we match at least
- * the minimum abbreviation.
- */
- for (tp =3D TimeWords; tp->name; tp++) {
- size_t abbrev =3D tp->abbrev;
- if (abbrev =3D=3D 0)
- abbrev =3D strlen(tp->name);
- if (strlen(buff) >=3D abbrev
- && strncmp(tp->name, buff, strlen(buff))
- =3D=3D 0) {
- /* Skip over token. */
- *in =3D src;
- /* Return the match. */
- *value =3D tp->value;
- return tp->type;
- }
- }
- }
-
- /*
- * Not in the word table, maybe it's a number. Note:
- * Because '-' and '+' have other special meanings, I
- * don't deal with signed numbers here.
- */
- if (isdigit((unsigned char)(c =3D **in))) {
- for (*value =3D 0; isdigit((unsigned char)(c =3D *(*in)++)); )
- *value =3D 10 * *value + c - '0';
- (*in)--;
- return (tUNUMBER);
- }
-
- return *(*in)++;
- }
-}
-
-#define TM_YEAR_ORIGIN 1900
-
-/* Yield A - B, measured in seconds. */
-static long
-difftm (struct tm *a, struct tm *b)
-{
- int ay =3D a->tm_year + (TM_YEAR_ORIGIN - 1);
- int by =3D b->tm_year + (TM_YEAR_ORIGIN - 1);
- int days =3D (
- /* difference in day of year */
- a->tm_yday - b->tm_yday
- /* + intervening leap days */
- + ((ay >> 2) - (by >> 2))
- - (ay/100 - by/100)
- + ((ay/100 >> 2) - (by/100 >> 2))
- /* + difference in years * 365 */
- + (long)(ay-by) * 365
- );
- return (days * DAY + (a->tm_hour - b->tm_hour) * HOUR
- + (a->tm_min - b->tm_min) * MINUTE
- + (a->tm_sec - b->tm_sec));
-}
-
-/*
- *
- * The public function.
- *
- * TODO: tokens[] array should be dynamically sized.
- */
-time_t
-get_date(time_t now, char *p)
-{
- struct token tokens[256];
- struct gdstate _gds;
- struct token *lasttoken;
- struct gdstate *gds;
- struct tm local, *tm;
- struct tm gmt, *gmt_ptr;
- time_t Start;
- time_t tod;
- long tzone;
-
- /* Clear out the parsed token array. */
- memset(tokens, 0, sizeof(tokens));
- /* Initialize the parser state. */
- memset(&_gds, 0, sizeof(_gds));
- gds =3D &_gds;
-
- /* Look up the current time. */
- memset(&local, 0, sizeof(local));
- tm =3D localtime (&now);
- if (tm =3D=3D NULL)
- return -1;
- local =3D *tm;
-
- /* Look up UTC if we can and use that to determine the current
- * timezone offset. */
- memset(&gmt, 0, sizeof(gmt));
- gmt_ptr =3D gmtime (&now);
- if (gmt_ptr !=3D NULL) {
- /* Copy, in case localtime and gmtime use the same buffer. */
- gmt =3D *gmt_ptr;
- }
- if (gmt_ptr !=3D NULL)
- tzone =3D difftm (&gmt, &local);
- else
- /* This system doesn't understand timezones; fake it. */
- tzone =3D 0;
- if(local.tm_isdst)
- tzone +=3D HOUR;
-
- /* Tokenize the input string. */
- lasttoken =3D tokens;
- while ((lasttoken->token =3D nexttoken(&p, &lasttoken->value)) !=3D 0) {
- ++lasttoken;
- if (lasttoken > tokens + 255)
- return -1;
- }
- gds->tokenp =3D tokens;
-
- /* Match phrases until we run out of input tokens. */
- while (gds->tokenp < lasttoken) {
- if (!phrase(gds))
- return -1;
- }
-
- /* Use current local timezone if none was specified. */
- if (!gds->HaveZone) {
- gds->Timezone =3D tzone;
- gds->DSTmode =3D DSTmaybe;
- }
-
- /* If a timezone was specified, use that for generating the default
- * time components instead of the local timezone. */
- if (gds->HaveZone && gmt_ptr !=3D NULL) {
- now -=3D gds->Timezone;
- gmt_ptr =3D gmtime (&now);
- if (gmt_ptr !=3D NULL)
- local =3D *gmt_ptr;
- now +=3D gds->Timezone;
- }
-
- if (!gds->HaveYear)
- gds->Year =3D local.tm_year + 1900;
- if (!gds->HaveMonth)
- gds->Month =3D local.tm_mon + 1;
- if (!gds->HaveDay)
- gds->Day =3D local.tm_mday;
- /* Note: No default for hour/min/sec; a specifier that just
- * gives date always refers to 00:00 on that date. */
-
- /* If we saw more than one time, timezone, weekday, year, month,
- * or day, then give up. */
- if (gds->HaveTime > 1 || gds->HaveZone > 1 || gds->HaveWeekDay > 1
- || gds->HaveYear > 1 || gds->HaveMonth > 1 || gds->HaveDay > 1)
- return -1;
-
- /* Compute an absolute time based on whatever absolute information
- * we collected. */
- if (gds->HaveYear || gds->HaveMonth || gds->HaveDay
- || gds->HaveTime || gds->HaveWeekDay) {
- Start =3D Convert(gds->Month, gds->Day, gds->Year,
- gds->Hour, gds->Minutes, gds->Seconds,
- gds->Timezone, gds->DSTmode);
- if (Start < 0)
- return -1;
- } else {
- Start =3D now;
- if (!gds->HaveRel)
- Start -=3D local.tm_hour * HOUR + local.tm_min * MINUTE
- + local.tm_sec;
- }
-
- /* Add the relative offset. */
- Start +=3D gds->RelSeconds;
- Start +=3D RelativeMonth(Start, gds->Timezone, gds->RelMonth);
-
- /* Adjust for day-of-week offsets. */
- if (gds->HaveWeekDay
- && !(gds->HaveYear || gds->HaveMonth || gds->HaveDay)) {
- tod =3D RelativeDate(Start, gds->Timezone,
- gds->DSTmode, gds->DayOrdinal, gds->DayNumber);
- Start +=3D tod;
- }
-
- /* -1 is an error indicator, so return 0 instead of -1 if
- * that's the actual time. */
- return Start =3D=3D -1 ? 0 : Start;
-}
-
-
-#if defined(TEST)
-
-/* ARGSUSED */
-int
-main(int argc, char **argv)
-{
- time_t d;
-
- while (*++argv !=3D NULL) {
- (void)printf("Input: %s\n", *argv);
- d =3D get_date(*argv);
- if (d =3D=3D -1)
- (void)printf("Bad format - couldn't convert.\n");
- else
- (void)printf("Output: %s\n", ctime(&d));
- }
- exit(0);
- /* NOTREACHED */
-}
-#endif /* defined(TEST) */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/read.c
--- a/head/contrib/libarchive/tar/read.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/read.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/read.c 232153 2012-02-25 1=
0:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/read.c 238856 2012-07-28 0=
6:38:44Z mm $");
=20
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -77,12 +77,15 @@
static void list_item_verbose(struct bsdtar *, FILE *,
struct archive_entry *);
static void read_archive(struct bsdtar *bsdtar, char mode, struct archive =
*);
+static int unmatched_inclusions_warn(struct archive *matching, const char =
*);
+
=20
void
tar_mode_t(struct bsdtar *bsdtar)
{
read_archive(bsdtar, 't', NULL);
- if (lafe_unmatched_inclusions_warn(bsdtar->matching, "Not found in archiv=
e") !=3D 0)
+ if (unmatched_inclusions_warn(bsdtar->matching,
+ "Not found in archive") !=3D 0)
bsdtar->return_value =3D 1;
}
=20
@@ -100,7 +103,8 @@
=20
read_archive(bsdtar, 'x', writer);
=20
- if (lafe_unmatched_inclusions_warn(bsdtar->matching, "Not found in archiv=
e") !=3D 0)
+ if (unmatched_inclusions_warn(bsdtar->matching,
+ "Not found in archive") !=3D 0)
bsdtar->return_value =3D 1;
archive_write_free(writer);
}
@@ -152,17 +156,21 @@
struct archive *a;
struct archive_entry *entry;
int r;
- time_t sec;
- long nsec;
=20
while (*bsdtar->argv) {
- lafe_include(&bsdtar->matching, *bsdtar->argv);
+ if (archive_match_include_pattern(bsdtar->matching,
+ *bsdtar->argv) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error inclusion pattern: %s",
+ archive_error_string(bsdtar->matching));
bsdtar->argv++;
}
=20
if (bsdtar->names_from_file !=3D NULL)
- lafe_include_from_file(&bsdtar->matching,
- bsdtar->names_from_file, bsdtar->option_null);
+ if (archive_match_include_pattern_from_file(
+ bsdtar->matching, bsdtar->names_from_file,
+ bsdtar->option_null) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error inclusion pattern: %s",
+ archive_error_string(bsdtar->matching));
=20
a =3D archive_read_new();
if (bsdtar->compress_program !=3D NULL)
@@ -199,7 +207,7 @@
for (;;) {
/* Support --fast-read option */
if (bsdtar->option_fast_read &&
- lafe_unmatched_inclusions(bsdtar->matching) =3D=3D 0)
+ archive_match_path_unmatched_inclusions(bsdtar->matching) =3D=3D 0)
break;
=20
r =3D archive_read_next_header(a, &entry);
@@ -232,42 +240,6 @@
archive_entry_set_gname(entry, bsdtar->gname);
=20
/*
- * Exclude entries that are too old.
- */
- if (bsdtar->newer_ctime_filter) {
- /* Use ctime if format provides, else mtime. */
- if (archive_entry_ctime_is_set(entry)) {
- sec =3D archive_entry_ctime(entry);
- nsec =3D archive_entry_ctime_nsec(entry);
- } else if (archive_entry_mtime_is_set(entry)) {
- sec =3D archive_entry_mtime(entry);
- nsec =3D archive_entry_mtime_nsec(entry);
- } else {
- sec =3D 0;
- nsec =3D 0;
- }
- if (sec < bsdtar->newer_ctime_sec)
- continue; /* Too old, skip it. */
- if (sec =3D=3D bsdtar->newer_ctime_sec
- && nsec <=3D bsdtar->newer_ctime_nsec)
- continue; /* Too old, skip it. */
- }
- if (bsdtar->newer_mtime_filter) {
- if (archive_entry_mtime_is_set(entry)) {
- sec =3D archive_entry_mtime(entry);
- nsec =3D archive_entry_mtime_nsec(entry);
- } else {
- sec =3D 0;
- nsec =3D 0;
- }
- if (sec < bsdtar->newer_mtime_sec)
- continue; /* Too old, skip it. */
- if (sec =3D=3D bsdtar->newer_mtime_sec
- && nsec <=3D bsdtar->newer_mtime_nsec)
- continue; /* Too old, skip it. */
- }
-
- /*
* Note that pattern exclusions are checked before
* pathname rewrites are handled. This gives more
* control over exclusions, since rewrites always lose
@@ -276,7 +248,7 @@
* rewrite, there would be no way to exclude foo1/bar
* while allowing foo2/bar.)
*/
- if (lafe_excluded(bsdtar->matching, archive_entry_pathname(entry)))
+ if (archive_match_excluded(bsdtar->matching, entry))
continue; /* Excluded by a pattern test. */
=20
if (mode =3D=3D 't') {
@@ -471,3 +443,21 @@
else if (archive_entry_symlink(entry)) /* Symbolic link */
safe_fprintf(out, " -> %s", archive_entry_symlink(entry));
}
+
+static int
+unmatched_inclusions_warn(struct archive *matching, const char *msg)
+{
+ const char *p;
+ int r;
+
+ if (matching =3D=3D NULL)
+ return (0);
+
+ while ((r =3D archive_match_path_unmatched_inclusions_next(
+ matching, &p)) =3D=3D ARCHIVE_OK)
+ lafe_warnc(0, "%s: %s", p, msg);
+ if (r =3D=3D ARCHIVE_FATAL)
+ lafe_errc(1, errno, "Out of memory");
+
+ return (archive_match_path_unmatched_inclusions(matching));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/main.c
--- a/head/contrib/libarchive/tar/test/main.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/test/main.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,6 +24,9 @@
*/
=20
#include "test.h"
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
@@ -31,6 +34,16 @@
#ifdef HAVE_ICONV_H
#include <iconv.h>
#endif
+/*
+ * Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
+ * As the include guards don't agree, the order of include is important.
+ */
+#ifdef HAVE_LINUX_EXT2_FS_H
+#include <linux/ext2_fs.h> /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h> /* Linux file flags, broken on Cygwin */
+#endif
#include <limits.h>
#include <locale.h>
#ifdef HAVE_SIGNAL_H
@@ -46,7 +59,7 @@
* TODO: Move this into a separate configuration header, have all test
* suites share one copy of this file.
*/
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/main.c 232153 2012-02=
-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/main.c 238856 2012-07=
-28 06:38:44Z mm $");
#define KNOWNREF "test_patterns_2.tar.uu"
#define ENVBASE "BSDTAR" /* Prefix for environment variables. */
#define PROGRAM "bsdtar" /* Name of program being tested. */
@@ -116,7 +129,14 @@
#endif
=20
#if defined(_WIN32) && !defined(__CYGWIN__)
-void *GetFunctionKernel32(const char *name)
+static void *GetFunctionKernel32(const char *);
+static int my_CreateSymbolicLinkA(const char *, const char *, int);
+static int my_CreateHardLinkA(const char *, const char *);
+static int my_GetFileInformationByName(const char *,
+ BY_HANDLE_FILE_INFORMATION *);
+
+static void *
+GetFunctionKernel32(const char *name)
{
static HINSTANCE lib;
static int set;
@@ -155,7 +175,7 @@
return f =3D=3D NULL ? 0 : (*f)(linkname, target, NULL);
}
=20
-int
+static int
my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *=
bhfi)
{
HANDLE h;
@@ -1507,7 +1527,7 @@
/* Create a file with the specified contents and report any failures. */
int
assertion_make_file(const char *file, int line,
- const char *path, int mode, const char *contents)
+ const char *path, int mode, int csize, const void *contents)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
/* TODO: Rework this to set file mode as well. */
@@ -1521,8 +1541,13 @@
return (0);
}
if (contents !=3D NULL) {
- if (strlen(contents)
- !=3D fwrite(contents, 1, strlen(contents), f)) {
+ size_t wsize;
+
+ if (csize < 0)
+ wsize =3D strlen(contents);
+ else
+ wsize =3D (size_t)csize;
+ if (wsize !=3D fwrite(contents, 1, wsize, f)) {
fclose(f);
failure_start(file, line,
"Could not write file %s", path);
@@ -1542,10 +1567,16 @@
return (0);
}
if (contents !=3D NULL) {
- if ((ssize_t)strlen(contents)
- !=3D write(fd, contents, strlen(contents))) {
+ ssize_t wsize;
+
+ if (csize < 0)
+ wsize =3D (ssize_t)strlen(contents);
+ else
+ wsize =3D (ssize_t)csize;
+ if (wsize !=3D write(fd, contents, wsize)) {
close(fd);
- failure_start(file, line, "Could not write to %s", path);
+ failure_start(file, line,
+ "Could not write to %s", path);
failure_finish(NULL);
return (0);
}
@@ -1716,6 +1747,52 @@
#endif /* defined(_WIN32) && !defined(__CYGWIN__) */
}
=20
+/* Set nodump, report failures. */
+int
+assertion_nodump(const char *file, int line, const char *pathname)
+{
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+ int r;
+
+ assertion_count(file, line);
+ r =3D chflags(pathname, UF_NODUMP);
+ if (r < 0) {
+ failure_start(file, line, "Can't set nodump %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+ && defined(EXT2_NODUMP_FL)
+ int fd, r, flags;
+
+ assertion_count(file, line);
+ fd =3D open(pathname, O_RDONLY | O_NONBLOCK);
+ if (fd < 0) {
+ failure_start(file, line, "Can't open %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0) {
+ failure_start(file, line, "Can't get flags %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ flags |=3D EXT2_NODUMP_FL;
+ r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+ if (r < 0) {
+ failure_start(file, line, "Can't set nodump %s\n", pathname);
+ failure_finish(NULL);
+ return (0);
+ }
+ close(fd);
+#else
+ (void)pathname; /* UNUSED */
+ assertion_count(file, line);
+#endif
+ return (1);
+}
+
/*
*
* UTILITIES for use by tests.
@@ -1744,7 +1821,7 @@
return (value);
=20
++tested;
- assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, "a");
+ assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, 1, "a");
/* Note: Cygwin has its own symlink() emulation that does not
* use the Win32 CreateSymbolicLink() function. */
#if defined(_WIN32) && !defined(__CYGWIN__)
@@ -1794,6 +1871,70 @@
}
=20
/*
+ * Can this filesystem handle nodump flags.
+ */
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+
+int
+canNodump(void)
+{
+ const char *path =3D "cannodumptest";
+ struct stat sb;
+
+ assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+ if (chflags(path, UF_NODUMP) < 0)
+ return (0);
+ if (stat(path, &sb) < 0)
+ return (0);
+ if (sb.st_flags & UF_NODUMP)
+ return (1);
+ return (0);
+}
+
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+ && defined(EXT2_NODUMP_FL)
+
+int
+canNodump(void)
+{
+ const char *path =3D "cannodumptest";
+ int fd, r, flags;
+
+ assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+ fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ return (0);
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ flags |=3D EXT2_NODUMP_FL;
+ r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ close(fd);
+ fd =3D open(path, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ return (0);
+ r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+ if (r < 0)
+ return (0);
+ close(fd);
+ if (flags & EXT2_NODUMP_FL)
+ return (1);
+ return (0);
+}
+
+#else
+
+int
+canNodump()
+{
+ return (0);
+}
+
+#endif
+
+/*
* Sleep as needed; useful for verifying disk timestamp changes by
* ensuring that the wall-clock time has actually changed before we
* go back to re-read something from disk.
@@ -2236,17 +2377,77 @@
return strdup(buff);
}
=20
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+ int start, end;
+ int idx =3D 0;
+
+ if (test =3D=3D NULL) {
+ /* Default: Run all tests. */
+ for (;idx < limit; idx++)
+ test_set[idx] =3D idx;
+ return (limit);
+ }
+ if (*test >=3D '0' && *test <=3D '9') {
+ const char *vp =3D test;
+ start =3D 0;
+ while (*vp >=3D '0' && *vp <=3D '9') {
+ start *=3D 10;
+ start +=3D *vp - '0';
+ ++vp;
+ }
+ if (*vp =3D=3D '\0') {
+ end =3D start;
+ } else if (*vp =3D=3D '-') {
+ ++vp;
+ if (*vp =3D=3D '\0') {
+ end =3D limit - 1;
+ } else {
+ end =3D 0;
+ while (*vp >=3D '0' && *vp <=3D '9') {
+ end *=3D 10;
+ end +=3D *vp - '0';
+ ++vp;
+ }
+ }
+ } else
+ return (-1);
+ if (start < 0 || end >=3D limit || start > end)
+ return (-1);
+ while (start <=3D end)
+ test_set[idx++] =3D start++;
+ } else {
+ size_t len =3D strlen(test);
+ for (start =3D 0; start < limit; ++start) {
+ const char *name =3D tests[start].name;
+ const char *p;
+
+ while ((p =3D strchr(name, test[0])) !=3D NULL) {
+ if (strncmp(p, test, len) =3D=3D 0) {
+ test_set[idx++] =3D start;
+ break;
+ } else
+ name =3D p + 1;
+ }
+
+ }
+ }
+ return ((idx =3D=3D 0)?-1:idx);
+}
+
int
main(int argc, char **argv)
{
static const int limit =3D sizeof(tests) / sizeof(tests[0]);
- int i =3D 0, j =3D 0, start, end, tests_run =3D 0, tests_failed =3D 0, op=
tion;
+ int test_set[sizeof(tests) / sizeof(tests[0])];
+ int i =3D 0, j =3D 0, tests_run =3D 0, tests_failed =3D 0, option;
time_t now;
char *refdir_alloc =3D NULL;
const char *progname;
char **saved_argv;
const char *tmp, *option_arg, *p;
- char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL;
+ char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL, *vlevel =3D NULL;
char tmpdir_timestamp[256];
=20
(void)argc; /* UNUSED */
@@ -2332,6 +2533,19 @@
if (getenv(ENVBASE "_DEBUG") !=3D NULL)
dump_on_failure =3D 1;
=20
+ /* Allow -v to be controlled through the environment. */
+ if (getenv("_VERBOSITY_LEVEL") !=3D NULL)
+ {
+ vlevel =3D getenv("_VERBOSITY_LEVEL");
+ verbosity =3D atoi(vlevel);
+ if (verbosity < VERBOSITY_SUMMARY_ONLY || verbosity > VERBOSITY_FULL)
+ {
+ /* Unsupported verbosity levels are silently ignored */
+ vlevel =3D NULL;
+ verbosity =3D VERBOSITY_PASSFAIL;
+ }
+ }
+
/* Get the directory holding test files from environment. */
refdir =3D getenv(ENVBASE "_TEST_FILES");
=20
@@ -2379,7 +2593,8 @@
#endif
break;
case 'q':
- verbosity--;
+ if (!vlevel)
+ verbosity--;
break;
case 'r':
refdir =3D option_arg;
@@ -2388,7 +2603,8 @@
until_failure++;
break;
case 'v':
- verbosity++;
+ if (!vlevel)
+ verbosity++;
break;
default:
fprintf(stderr, "Unrecognized option '%c'\n",
@@ -2501,78 +2717,27 @@
saved_argv =3D argv;
do {
argv =3D saved_argv;
- if (*argv =3D=3D NULL) {
- /* Default: Run all tests. */
- for (i =3D 0; i < limit; i++) {
+ do {
+ int test_num;
+
+ test_num =3D get_test_set(test_set, limit, *argv);
+ if (test_num < 0) {
+ printf("*** INVALID Test %s\n", *argv);
+ free(refdir_alloc);
+ usage(progname);
+ return (1);
+ }
+ for (i =3D 0; i < test_num; i++) {
tests_run++;
- if (test_run(i, tmpdir)) {
+ if (test_run(test_set[i], tmpdir)) {
tests_failed++;
if (until_failure)
goto finish;
}
}
- } else {
- while (*(argv) !=3D NULL) {
- if (**argv >=3D '0' && **argv <=3D '9') {
- char *vp =3D *argv;
- start =3D 0;
- while (*vp >=3D '0' && *vp <=3D '9') {
- start *=3D 10;
- start +=3D *vp - '0';
- ++vp;
- }
- if (*vp =3D=3D '\0') {
- end =3D start;
- } else if (*vp =3D=3D '-') {
- ++vp;
- if (*vp =3D=3D '\0') {
- end =3D limit - 1;
- } else {
- end =3D 0;
- while (*vp >=3D '0' && *vp <=3D '9') {
- end *=3D 10;
- end +=3D *vp - '0';
- ++vp;
- }
- }
- } else {
- printf("*** INVALID Test %s\n", *argv);
- free(refdir_alloc);
- usage(progname);
- return (1);
- }
- if (start < 0 || end >=3D limit || start > end) {
- printf("*** INVALID Test %s\n", *argv);
- free(refdir_alloc);
- usage(progname);
- return (1);
- }
- } else {
- for (start =3D 0; start < limit; ++start) {
- if (strcmp(*argv, tests[start].name) =3D=3D 0)
- break;
- }
- end =3D start;
- if (start >=3D limit) {
- printf("*** INVALID Test ``%s''\n",
- *argv);
- free(refdir_alloc);
- usage(progname);
- /* usage() never returns */
- }
- }
- while (start <=3D end) {
- tests_run++;
- if (test_run(start, tmpdir)) {
- tests_failed++;
- if (until_failure)
- goto finish;
- }
- ++start;
- }
+ if (*argv !=3D NULL)
argv++;
- }
- }
+ } while (*argv !=3D NULL);
} while (until_failure);
=20
finish:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test.h
--- a/head/contrib/libarchive/tar/test/test.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/test/test.h Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/contrib/libarchive/tar/test/test.h 232153 2012-02-25 10:=
58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/tar/test/test.h 238856 2012-07-28 06:=
38:44Z mm $
*/
=20
/* Every test program should #include "test.h" as the first thing. */
@@ -196,11 +196,15 @@
#define assertMakeDir(dirname, mode) \
assertion_make_dir(__FILE__, __LINE__, dirname, mode)
#define assertMakeFile(path, mode, contents) \
- assertion_make_file(__FILE__, __LINE__, path, mode, contents)
+ assertion_make_file(__FILE__, __LINE__, path, mode, -1, contents)
+#define assertMakeBinFile(path, mode, csize, contents) \
+ assertion_make_file(__FILE__, __LINE__, path, mode, csize, contents)
#define assertMakeHardlink(newfile, oldfile) \
assertion_make_hardlink(__FILE__, __LINE__, newfile, oldfile)
#define assertMakeSymlink(newfile, linkto) \
assertion_make_symlink(__FILE__, __LINE__, newfile, linkto)
+#define assertNodump(path) \
+ assertion_nodump(__FILE__, __LINE__, path)
#define assertUmask(mask) \
assertion_umask(__FILE__, __LINE__, mask)
#define assertUtimes(pathname, atime, atime_nsec, mtime, mtime_nsec) \
@@ -243,9 +247,10 @@
int assertion_is_reg(const char *, int, const char *, int);
int assertion_is_symlink(const char *, int, const char *, const char *);
int assertion_make_dir(const char *, int, const char *, int);
-int assertion_make_file(const char *, int, const char *, int, const char *=
);
+int assertion_make_file(const char *, int, const char *, int, int, const v=
oid *);
int assertion_make_hardlink(const char *, int, const char *newpath, const =
char *);
int assertion_make_symlink(const char *, int, const char *newpath, const c=
har *);
+int assertion_nodump(const char *, int, const char *);
int assertion_non_empty_file(const char *, int, const char *);
int assertion_text_file_contents(const char *, int, const char *buff, cons=
t char *f);
int assertion_umask(const char *, int, int);
@@ -269,6 +274,9 @@
/* Return true if this platform can run the "gunzip" program. */
int canGunzip(void);
=20
+/* Return true if this filesystem can handle nodump flags. */
+int canNodump(void);
+
/* Return true if the file has large i-node number(>0xffffffff). */
int is_LargeInode(const char *);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
basic.c
--- a/head/contrib/libarchive/tar/test/test_basic.c Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/contrib/libarchive/tar/test/test_basic.c Fri Aug 10 14:19:25 201=
2 +0300
@@ -23,7 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/test_basic.c 232153 2=
012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/test_basic.c 238909 2=
012-07-30 14:47:35Z mm $");
=20
static const char *
make_files(void)
@@ -58,14 +58,19 @@
assertChdir(target);
=20
/* Regular file with 2 links. */
+ failure("%s", target);
assertIsReg("file", -1);
+ failure("%s", target);
assertFileSize("file", 10);
+ failure("%s", target);
assertFileContents("123456789", 10, "file");
failure("%s", target);
assertFileNLinks("file", 2);
=20
/* Another name for the same file. */
+ failure("%s", target);
assertIsReg("linkfile", -1);
+ failure("%s", target);
assertFileSize("linkfile", 10);
assertFileContents("123456789", 10, "linkfile");
assertFileNLinks("linkfile", 2);
@@ -76,6 +81,7 @@
assertIsSymlink("symlink", "file");
=20
/* dir */
+ failure("%s", target);
assertIsDir("dir", 0775);
assertChdir("..");
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
format_newc.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/tar/test/test_format_newc.c Fri Aug 10 14:19:=
25 2012 +0300
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (c) 2012 Michihiro NAKAJIMA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+DEFINE_TEST(test_format_newc)
+{
+
+ assertMakeFile("file1", 0644, "file1");
+ assertMakeFile("file2", 0644, "file2");
+ assertMakeHardlink("file3", "file1");
+
+ /* Test 1: Create an archive file with a newc format. */
+ assertEqualInt(0,
+ systemf("%s -cf test1.cpio --format newc file1 file2 file3",
+ testprog));
+ assertMakeDir("test1", 0755);
+ assertChdir("test1");
+ assertEqualInt(0,
+ systemf("%s -xf ../test1.cpio >test.out 2>test.err", testprog));
+ assertFileContents("file1", 5, "file1");
+ assertFileContents("file2", 5, "file2");
+ assertFileContents("file1", 5, "file3");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+
+ /* Test 2: Exclude one of hardlinked files. */
+ assertEqualInt(0,
+ systemf("%s -cf test2.cpio --format newc file1 file2",
+ testprog));
+ assertMakeDir("test2", 0755);
+ assertChdir("test2");
+ assertEqualInt(0,
+ systemf("%s -xf ../test2.cpio >test.out 2>test.err", testprog));
+ assertFileContents("file1", 5, "file1");
+ assertFileContents("file2", 5, "file2");
+ assertFileNotExists("file3");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
getdate.c
--- a/head/contrib/libarchive/tar/test/test_getdate.c Mon Jul 30 11:44:18 2=
012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/test_getdate.c 228763=
2011-12-21 11:13:29Z mm $");
-
-#include <time.h>
-
-/*
- * Verify that the getdate() function works.
- */
-
-time_t get_date(time_t, const char *);
-
-DEFINE_TEST(test_getdate)
-{
- time_t now =3D time(NULL);
-
- assertEqualInt(get_date(now, "Jan 1, 1970 UTC"), 0);
- assertEqualInt(get_date(now, "7:12:18-0530 4 May 1983"), 420900138);
- assertEqualInt(get_date(now, "2004/01/29 513 mest"), 1075345980);
- assertEqualInt(get_date(now, "99/02/17 7pm utc"), 919278000);
- assertEqualInt(get_date(now, "02/17/99 7:11am est"), 919253460);
- /* It's important that we handle ctime() format. */
- assertEqualInt(get_date(now, "Sun Feb 22 17:38:26 PST 2009"),
- 1235353106);
- /* Basic relative offsets. */
- /* If we use the actual current time as the reference, then
- * these tests break around DST changes, so it's actually
- * important to use a specific reference time here. */
- assertEqualInt(get_date(0, "tomorrow"), 24 * 60 * 60);
- assertEqualInt(get_date(0, "yesterday"), - 24 * 60 * 60);
- assertEqualInt(get_date(0, "now + 1 hour"), 60 * 60);
- assertEqualInt(get_date(0, "now + 1 hour + 1 minute"), 60 * 60 + 60);
- /* Repeat the above for a different start time. */
- now =3D 1231113600; /* Jan 5, 2009 00:00 UTC */
- assertEqualInt(get_date(0, "Jan 5, 2009 00:00 UTC"), now);
- assertEqualInt(get_date(now, "tomorrow"), now + 24 * 60 * 60);
- assertEqualInt(get_date(now, "yesterday"), now - 24 * 60 * 60);
- assertEqualInt(get_date(now, "now + 1 hour"), now + 60 * 60);
- assertEqualInt(get_date(now, "now + 1 hour + 1 minute"),
- now + 60 * 60 + 60);
- assertEqualInt(get_date(now, "tomorrow 5:16am UTC"),
- now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
- assertEqualInt(get_date(now, "UTC 5:16am tomorrow"),
- now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
-
- /* Jan 5, 2009 was a Monday. */
- assertEqualInt(get_date(now, "monday UTC"), now);
- assertEqualInt(get_date(now, "sunday UTC"), now + 6 * 24 * 60 * 60);
- assertEqualInt(get_date(now, "tuesday UTC"), now + 24 * 60 * 60);
- /* "next tuesday" is one week after "tuesday" */
- assertEqualInt(get_date(now, "UTC next tuesday"),
- now + 8 * 24 * 60 * 60);
- /* "last tuesday" is one week before "tuesday" */
- assertEqualInt(get_date(now, "last tuesday UTC"),
- now - 6 * 24 * 60 * 60);
- /* TODO: Lots more tests here. */
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
option_nodump.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/tar/test/test_option_nodump.c Fri Aug 10 14:1=
9:25 2012 +0300
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2012 Michihiro NAKAJIMA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+DEFINE_TEST(test_option_nodump)
+{
+
+ if (!canNodump()) {
+ skipping("Can't test nodump on this filesystem");
+ return;
+ }
+
+ assertMakeFile("file1", 0644, "file1");
+ assertMakeFile("file2", 0644, "file2");
+ assertMakeFile("file3", 0644, "file3");
+ assertNodump("file2");
+
+ /* Test 1: Without --nodump */
+ assertEqualInt(0, systemf("%s -cf test1.tar file1 file2 file3",
+ testprog));
+ assertMakeDir("test1", 0755);
+ assertChdir("test1");
+ assertEqualInt(0,
+ systemf("%s -xf ../test1.tar >test.out 2>test.err", testprog));
+ assertFileContents("file1", 5, "file1");
+ assertFileContents("file2", 5, "file2");
+ assertFileContents("file3", 5, "file3");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+
+ /* Test 2: With --nodump */
+ assertEqualInt(0, systemf("%s -cf test2.tar --nodump file1 file2 file3",
+ testprog));
+ assertMakeDir("test2", 0755);
+ assertChdir("test2");
+ assertEqualInt(0,
+ systemf("%s -xf ../test2.tar >test.out 2>test.err", testprog));
+ assertFileContents("file1", 5, "file1");
+ assertFileNotExists("file2");
+ assertFileContents("file3", 5, "file3");
+ assertEmptyFile("test.out");
+ assertEmptyFile("test.err");
+ assertChdir("..");
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/tree.c
--- a/head/contrib/libarchive/tar/tree.c Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,848 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*-
- * This is a new directory-walking system that addresses a number
- * of problems I've had with fts(3). In particular, it has no
- * pathname-length limits (other than the size of 'int'), handles
- * deep logical traversals, uses considerably less memory, and has
- * an opaque interface (easier to modify in the future).
- *
- * Internally, it keeps a single list of "tree_entry" items that
- * represent filesystem objects that require further attention.
- * Non-directories are not kept in memory: they are pulled from
- * readdir(), returned to the client, then freed as soon as possible.
- * Any directory entry to be traversed gets pushed onto the stack.
- *
- * There is surprisingly little information that needs to be kept for
- * each item on the stack. Just the name, depth (represented here as the
- * string length of the parent directory's pathname), and some markers
- * indicating how to get back to the parent (via chdir("..") for a
- * regular dir or via fchdir(2) for a symlink).
- */
-#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/tree.c 232153 2012-02-25 1=
0:58:02Z mm $");
-
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_DIRECT_H
-#include <direct.h>
-#endif
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if defined(HAVE_WINDOWS_H) && !defined(__CYGWIN__)
-#include <windows.h>
-#endif
-
-#include "tree.h"
-
-/*
- * TODO:
- * 1) Loop checking.
- * 3) Arbitrary logical traversals by closing/reopening intermediate fd=
s.
- */
-
-struct tree_entry {
- int depth;
- struct tree_entry *next;
- struct tree_entry *parent;
- char *name;
- size_t dirname_length;
- dev_t dev;
- ino_t ino;
- int flags;
- /* How to return back to the parent of a symlink. */
-#ifdef HAVE_FCHDIR
- int symlink_parent_fd;
-#elif defined(_WIN32) && !defined(__CYGWIN__)
- char *symlink_parent_path;
-#else
-#error fchdir function required.
-#endif
-};
-
-/* Definitions for tree_entry.flags bitmap. */
-#define isDir 1 /* This entry is a regular directory. */
-#define isDirLink 2 /* This entry is a symbolic link to a directory. */
-#define needsFirstVisit 4 /* This is an initial entry. */
-#define needsDescent 8 /* This entry needs to be previsited. */
-#define needsOpen 16 /* This is a directory that needs to be opened. */
-#define needsAscent 32 /* This entry needs to be postvisited. */
-
-/*
- * On Windows, "first visit" is handled as a pattern to be handed to
- * _findfirst(). This is consistent with Windows conventions that
- * file patterns are handled within the application. On Posix,
- * "first visit" is just returned to the client.
- */
-
-/*
- * Local data for this package.
- */
-struct tree {
- struct tree_entry *stack;
- struct tree_entry *current;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- HANDLE d;
- BY_HANDLE_FILE_INFORMATION fileInfo;
-#define INVALID_DIR_HANDLE INVALID_HANDLE_VALUE
- WIN32_FIND_DATA _findData;
- WIN32_FIND_DATA *findData;
-#else
- DIR *d;
-#define INVALID_DIR_HANDLE NULL
- struct dirent *de;
-#endif
- int flags;
- int visit_type;
- int tree_errno; /* Error code from last failed operation. */
-
- /* Dynamically-sized buffer for holding path */
- char *buff;
- size_t buff_length;
-
- const char *basename; /* Last path element */
- size_t dirname_length; /* Leading dir length */
- size_t path_length; /* Total path length */
-
- int depth;
- int openCount;
- int maxOpenCount;
-
- struct stat lst;
- struct stat st;
-};
-
-/* Definitions for tree.flags bitmap. */
-#define hasStat 16 /* The st entry is valid. */
-#define hasLstat 32 /* The lst entry is valid. */
-#define hasFileInfo 64 /* The Windows fileInfo entry is valid. */
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-static int
-tree_dir_next_windows(struct tree *t, const char *pattern);
-#else
-static int
-tree_dir_next_posix(struct tree *t);
-#endif
-
-#ifdef HAVE_DIRENT_D_NAMLEN
-/* BSD extension; avoids need for a strlen() call. */
-#define D_NAMELEN(dp) (dp)->d_namlen
-#else
-#define D_NAMELEN(dp) (strlen((dp)->d_name))
-#endif
-
-#include <stdio.h>
-void
-tree_dump(struct tree *t, FILE *out)
-{
- char buff[300];
- struct tree_entry *te;
-
- fprintf(out, "\tdepth: %d\n", t->depth);
- fprintf(out, "\tbuff: %s\n", t->buff);
- fprintf(out, "\tpwd: %s\n", getcwd(buff, sizeof(buff)));
- fprintf(out, "\tbasename: %s\n", t->basename);
- fprintf(out, "\tstack:\n");
- for (te =3D t->stack; te !=3D NULL; te =3D te->next) {
- fprintf(out, "\t\t%s%d:\"%s\" %s%s%s%s%s%s\n",
- t->current =3D=3D te ? "*" : " ",
- te->depth,
- te->name,
- te->flags & needsFirstVisit ? "V" : "",
- te->flags & needsDescent ? "D" : "",
- te->flags & needsOpen ? "O" : "",
- te->flags & needsAscent ? "A" : "",
- te->flags & isDirLink ? "L" : "",
- (t->current =3D=3D te && t->d) ? "+" : ""
- );
- }
-}
-
-/*
- * Add a directory path to the current stack.
- */
-static void
-tree_push(struct tree *t, const char *path)
-{
- struct tree_entry *te;
-
- te =3D malloc(sizeof(*te));
- memset(te, 0, sizeof(*te));
- te->next =3D t->stack;
- te->parent =3D t->current;
- if (te->parent)
- te->depth =3D te->parent->depth + 1;
- t->stack =3D te;
-#ifdef HAVE_FCHDIR
- te->symlink_parent_fd =3D -1;
- te->name =3D strdup(path);
-#elif defined(_WIN32) && !defined(__CYGWIN__)
- te->symlink_parent_path =3D NULL;
- te->name =3D strdup(path);
-#endif
- te->flags =3D needsDescent | needsOpen | needsAscent;
- te->dirname_length =3D t->dirname_length;
-}
-
-/*
- * Append a name to the current dir path.
- */
-static void
-tree_append(struct tree *t, const char *name, size_t name_length)
-{
- char *p;
- size_t size_needed;
-
- if (t->buff !=3D NULL)
- t->buff[t->dirname_length] =3D '\0';
- /* Strip trailing '/' from name, unless entire name is "/". */
- while (name_length > 1 && name[name_length - 1] =3D=3D '/')
- name_length--;
-
- /* Resize pathname buffer as needed. */
- size_needed =3D name_length + 1 + t->dirname_length;
- if (t->buff_length < size_needed) {
- if (t->buff_length < 1024)
- t->buff_length =3D 1024;
- while (t->buff_length < size_needed)
- t->buff_length *=3D 2;
- t->buff =3D realloc(t->buff, t->buff_length);
- }
- if (t->buff =3D=3D NULL)
- abort();
- p =3D t->buff + t->dirname_length;
- t->path_length =3D t->dirname_length + name_length;
- /* Add a separating '/' if it's needed. */
- if (t->dirname_length > 0 && p[-1] !=3D '/') {
- *p++ =3D '/';
- t->path_length ++;
- }
-#if HAVE_STRNCPY_S
- strncpy_s(p, t->buff_length - (p - t->buff), name, name_length);
-#else
- strncpy(p, name, name_length);
-#endif
- p[name_length] =3D '\0';
- t->basename =3D p;
-}
-
-/*
- * Open a directory tree for traversal.
- */
-struct tree *
-tree_open(const char *path)
-{
-#ifdef HAVE_FCHDIR
- struct tree *t;
-
- t =3D malloc(sizeof(*t));
- memset(t, 0, sizeof(*t));
- /* First item is set up a lot like a symlink traversal. */
- tree_push(t, path);
- t->stack->flags =3D needsFirstVisit | isDirLink | needsAscent;
- t->stack->symlink_parent_fd =3D open(".", O_RDONLY);
- t->openCount++;
- t->d =3D INVALID_DIR_HANDLE;
- return (t);
-#elif defined(_WIN32) && !defined(__CYGWIN__)
- struct tree *t;
- char *cwd =3D _getcwd(NULL, 0);
- char *pathname, *p, *base;
- wchar_t *wcs, *wp;
- size_t l, wlen;
-
- /* Take care of '\' character in multi-byte character-set.
- * Some multi-byte character-set have been using '\' character
- * for a part of its character code. */
- l =3D MultiByteToWideChar(CP_OEMCP, 0, path, strlen(path), NULL, 0);
- if (l =3D=3D 0)
- abort();
- wcs =3D malloc(sizeof(*wcs) * (l+1));
- if (wcs =3D=3D NULL)
- abort();
- l =3D MultiByteToWideChar(CP_OEMCP, 0, path, strlen(path), wcs, l);
- wcs[l] =3D L'\0';
- wlen =3D l;
- for (wp =3D wcs; *wp !=3D L'\0'; ++wp) {
- if (*wp =3D=3D L'\\')
- *wp =3D L'/';
- }
- l =3D WideCharToMultiByte(CP_OEMCP, 0, wcs, wlen, NULL, 0, NULL, NULL);
- if (l =3D=3D 0)
- abort();
- pathname =3D malloc(l+1);
- if (pathname =3D=3D NULL)
- abort();
- l =3D WideCharToMultiByte(CP_OEMCP, 0, wcs, wlen, pathname, l, NULL, NULL=
);
- pathname[l] =3D '\0';
- free(wcs);
- base =3D pathname;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- /* ASCII version APIs do not accept the path which begin with
- * "//?/" prefix. */
- if (strncmp(base, "//?/", 4) =3D=3D 0)
- base +=3D 4;
-#endif
-
- t =3D malloc(sizeof(*t));
- memset(t, 0, sizeof(*t));
- /* First item is set up a lot like a symlink traversal. */
- /* printf("Looking for wildcard in %s\n", path); */
- /* TODO: wildcard detection here screws up on \\?\c:\ UNC names */
- if (strchr(base, '*') || strchr(base, '?')) {
- /* It has a wildcard in it... */
- /* Separate the last element. */
- p =3D strrchr(base, '/');
- if (p !=3D NULL) {
- *p =3D '\0';
- chdir(base);
- tree_append(t, base, p - base);
- t->dirname_length =3D t->path_length;
- base =3D p + 1;
- }
- }
- tree_push(t, base);
- free(pathname);
- t->stack->flags =3D needsFirstVisit | isDirLink | needsAscent;
- t->stack->symlink_parent_path =3D cwd;
- t->d =3D INVALID_DIR_HANDLE;
- return (t);
-#endif
-}
-
-/*
- * We've finished a directory; ascend back to the parent.
- */
-static int
-tree_ascend(struct tree *t)
-{
- struct tree_entry *te;
- int r =3D 0;
-
- te =3D t->stack;
- t->depth--;
- if (te->flags & isDirLink) {
-#ifdef HAVE_FCHDIR
- if (fchdir(te->symlink_parent_fd) !=3D 0) {
- t->tree_errno =3D errno;
- r =3D TREE_ERROR_FATAL;
- }
- close(te->symlink_parent_fd);
-#elif defined(_WIN32) && !defined(__CYGWIN__)
- if (SetCurrentDirectory(te->symlink_parent_path) =3D=3D 0) {
- t->tree_errno =3D errno;
- r =3D TREE_ERROR_FATAL;
- }
- free(te->symlink_parent_path);
- te->symlink_parent_path =3D NULL;
-#endif
- t->openCount--;
- } else {
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (SetCurrentDirectory("..") =3D=3D 0) {
-#else
- if (chdir("..") !=3D 0) {
-#endif
- t->tree_errno =3D errno;
- r =3D TREE_ERROR_FATAL;
- }
- }
- return (r);
-}
-
-/*
- * Pop the working stack.
- */
-static void
-tree_pop(struct tree *t)
-{
- struct tree_entry *te;
-
- if (t->buff)
- t->buff[t->dirname_length] =3D '\0';
- if (t->stack =3D=3D t->current && t->current !=3D NULL)
- t->current =3D t->current->parent;
- te =3D t->stack;
- t->stack =3D te->next;
- t->dirname_length =3D te->dirname_length;
- if (t->buff) {
- t->basename =3D t->buff + t->dirname_length;
- while (t->basename[0] =3D=3D '/')
- t->basename++;
- }
- free(te->name);
- free(te);
-}
-
-/*
- * Get the next item in the tree traversal.
- */
-int
-tree_next(struct tree *t)
-{
- int r;
-
- /* If we're called again after a fatal error, that's an API
- * violation. Just crash now. */
- if (t->visit_type =3D=3D TREE_ERROR_FATAL) {
- fprintf(stderr, "Unable to continue traversing"
- " directory hierarchy after a fatal error.");
- abort();
- }
-
- while (t->stack !=3D NULL) {
- /* If there's an open dir, get the next entry from there. */
- if (t->d !=3D INVALID_DIR_HANDLE) {
-#if defined(_WIN32) && !defined(__CYGWIN__)
- r =3D tree_dir_next_windows(t, NULL);
-#else
- r =3D tree_dir_next_posix(t);
-#endif
- if (r =3D=3D 0)
- continue;
- return (r);
- }
-
- if (t->stack->flags & needsFirstVisit) {
-#if defined(_WIN32) && !defined(__CYGWIN__)
- char *d =3D t->stack->name;
- t->stack->flags &=3D ~needsFirstVisit;
- if (strchr(d, '*') || strchr(d, '?')) {
- r =3D tree_dir_next_windows(t, d);
- if (r =3D=3D 0)
- continue;
- return (r);
- }
- /* Not a pattern, handle it as-is... */
-#endif
- /* Top stack item needs a regular visit. */
- t->current =3D t->stack;
- tree_append(t, t->stack->name, strlen(t->stack->name));
- /* t->dirname_length =3D t->path_length; */
- /* tree_pop(t); */
- t->stack->flags &=3D ~needsFirstVisit;
- return (t->visit_type =3D TREE_REGULAR);
- } else if (t->stack->flags & needsDescent) {
- /* Top stack item is dir to descend into. */
- t->current =3D t->stack;
- tree_append(t, t->stack->name, strlen(t->stack->name));
- t->stack->flags &=3D ~needsDescent;
- /* If it is a link, set up fd for the ascent. */
- if (t->stack->flags & isDirLink) {
-#ifdef HAVE_FCHDIR
- t->stack->symlink_parent_fd =3D open(".", O_RDONLY);
- t->openCount++;
- if (t->openCount > t->maxOpenCount)
- t->maxOpenCount =3D t->openCount;
-#elif defined(_WIN32) && !defined(__CYGWIN__)
- t->stack->symlink_parent_path =3D _getcwd(NULL, 0);
-#endif
- }
- t->dirname_length =3D t->path_length;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (t->path_length =3D=3D 259 || !SetCurrentDirectory(t->stack->name) !=
=3D 0)
-#else
- if (chdir(t->stack->name) !=3D 0)
-#endif
- {
- /* chdir() failed; return error */
- tree_pop(t);
- t->tree_errno =3D errno;
- return (t->visit_type =3D TREE_ERROR_DIR);
- }
- t->depth++;
- return (t->visit_type =3D TREE_POSTDESCENT);
- } else if (t->stack->flags & needsOpen) {
- t->stack->flags &=3D ~needsOpen;
-#if defined(_WIN32) && !defined(__CYGWIN__)
- r =3D tree_dir_next_windows(t, "*");
-#else
- r =3D tree_dir_next_posix(t);
-#endif
- if (r =3D=3D 0)
- continue;
- return (r);
- } else if (t->stack->flags & needsAscent) {
- /* Top stack item is dir and we're done with it. */
- r =3D tree_ascend(t);
- tree_pop(t);
- t->visit_type =3D r !=3D 0 ? r : TREE_POSTASCENT;
- return (t->visit_type);
- } else {
- /* Top item on stack is dead. */
- tree_pop(t);
- t->flags &=3D ~hasLstat;
- t->flags &=3D ~hasStat;
- }
- }
- return (t->visit_type =3D 0);
-}
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-static int
-tree_dir_next_windows(struct tree *t, const char *pattern)
-{
- const char *name;
- size_t namelen;
- int r;
-
- for (;;) {
- if (pattern !=3D NULL) {
- t->d =3D FindFirstFile(pattern, &t->_findData);
- if (t->d =3D=3D INVALID_DIR_HANDLE) {
- r =3D tree_ascend(t); /* Undo "chdir" */
- tree_pop(t);
- t->tree_errno =3D errno;
- t->visit_type =3D r !=3D 0 ? r : TREE_ERROR_DIR;
- return (t->visit_type);
- }
- t->findData =3D &t->_findData;
- pattern =3D NULL;
- } else if (!FindNextFile(t->d, &t->_findData)) {
- FindClose(t->d);
- t->d =3D INVALID_DIR_HANDLE;
- t->findData =3D NULL;
- return (0);
- }
- name =3D t->findData->cFileName;
- namelen =3D strlen(name);
- t->flags &=3D ~hasLstat;
- t->flags &=3D ~hasStat;
- if (name[0] =3D=3D '.' && name[1] =3D=3D '\0')
- continue;
- if (name[0] =3D=3D '.' && name[1] =3D=3D '.' && name[2] =3D=3D '\0')
- continue;
- tree_append(t, name, namelen);
- return (t->visit_type =3D TREE_REGULAR);
- }
-}
-#else
-static int
-tree_dir_next_posix(struct tree *t)
-{
- int r;
- const char *name;
- size_t namelen;
-
- if (t->d =3D=3D NULL) {
- if ((t->d =3D opendir(".")) =3D=3D NULL) {
- r =3D tree_ascend(t); /* Undo "chdir" */
- tree_pop(t);
- t->tree_errno =3D errno;
- t->visit_type =3D r !=3D 0 ? r : TREE_ERROR_DIR;
- return (t->visit_type);
- }
- }
- for (;;) {
- t->de =3D readdir(t->d);
- if (t->de =3D=3D NULL) {
- closedir(t->d);
- t->d =3D INVALID_DIR_HANDLE;
- return (0);
- }
- name =3D t->de->d_name;
- namelen =3D D_NAMELEN(t->de);
- t->flags &=3D ~hasLstat;
- t->flags &=3D ~hasStat;
- if (name[0] =3D=3D '.' && name[1] =3D=3D '\0')
- continue;
- if (name[0] =3D=3D '.' && name[1] =3D=3D '.' && name[2] =3D=3D '\0')
- continue;
- tree_append(t, name, namelen);
- return (t->visit_type =3D TREE_REGULAR);
- }
-}
-#endif
-
-/*
- * Return error code.
- */
-int
-tree_errno(struct tree *t)
-{
- return (t->tree_errno);
-}
-
-/*
- * Called by the client to mark the directory just returned from
- * tree_next() as needing to be visited.
- */
-void
-tree_descend(struct tree *t)
-{
- if (t->visit_type !=3D TREE_REGULAR)
- return;
-
- if (tree_current_is_physical_dir(t)) {
- tree_push(t, t->basename);
- t->stack->flags |=3D isDir;
- } else if (tree_current_is_dir(t)) {
- tree_push(t, t->basename);
- t->stack->flags |=3D isDirLink;
- }
-}
-
-/*
- * Get the stat() data for the entry just returned from tree_next().
- */
-const struct stat *
-tree_current_stat(struct tree *t)
-{
- if (!(t->flags & hasStat)) {
- if (stat(tree_current_access_path(t), &t->st) !=3D 0)
- return NULL;
- t->flags |=3D hasStat;
- }
- return (&t->st);
-}
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-const BY_HANDLE_FILE_INFORMATION *
-tree_current_file_information(struct tree *t)
-{
- if (!(t->flags & hasFileInfo)) {
- HANDLE h =3D CreateFile(tree_current_access_path(t),
- 0, 0, NULL,
- OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
- NULL);
- if (h =3D=3D INVALID_HANDLE_VALUE)
- return NULL;
- if (!GetFileInformationByHandle(h, &t->fileInfo)) {
- CloseHandle(h);
- return NULL;
- }
- CloseHandle(h);
- t->flags |=3D hasFileInfo;
- }
- return (&t->fileInfo);
-}
-#endif
-/*
- * Get the lstat() data for the entry just returned from tree_next().
- */
-const struct stat *
-tree_current_lstat(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- return (tree_current_stat(t));
-#else
- if (!(t->flags & hasLstat)) {
- if (lstat(tree_current_access_path(t), &t->lst) !=3D 0)
- return NULL;
- t->flags |=3D hasLstat;
- }
- return (&t->lst);
-#endif
-}
-
-/*
- * Test whether current entry is a dir or link to a dir.
- */
-int
-tree_current_is_dir(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (t->findData)
- return (t->findData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
- if (tree_current_file_information(t))
- return (t->fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
- return (0);
-#else
- const struct stat *st;
- /*
- * If we already have lstat() info, then try some
- * cheap tests to determine if this is a dir.
- */
- if (t->flags & hasLstat) {
- /* If lstat() says it's a dir, it must be a dir. */
- if (S_ISDIR(tree_current_lstat(t)->st_mode))
- return 1;
- /* Not a dir; might be a link to a dir. */
- /* If it's not a link, then it's not a link to a dir. */
- if (!S_ISLNK(tree_current_lstat(t)->st_mode))
- return 0;
- /*
- * It's a link, but we don't know what it's a link to,
- * so we'll have to use stat().
- */
- }
-
- st =3D tree_current_stat(t);
- /* If we can't stat it, it's not a dir. */
- if (st =3D=3D NULL)
- return 0;
- /* Use the definitive test. Hopefully this is cached. */
- return (S_ISDIR(st->st_mode));
-#endif
-}
-
-/*
- * Test whether current entry is a physical directory. Usually, we
- * already have at least one of stat() or lstat() in memory, so we
- * use tricks to try to avoid an extra trip to the disk.
- */
-int
-tree_current_is_physical_dir(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (tree_current_is_physical_link(t))
- return (0);
- return (tree_current_is_dir(t));
-#else
- const struct stat *st;
-
- /*
- * If stat() says it isn't a dir, then it's not a dir.
- * If stat() data is cached, this check is free, so do it first.
- */
- if ((t->flags & hasStat)
- && (!S_ISDIR(tree_current_stat(t)->st_mode)))
- return 0;
-
- /*
- * Either stat() said it was a dir (in which case, we have
- * to determine whether it's really a link to a dir) or
- * stat() info wasn't available. So we use lstat(), which
- * hopefully is already cached.
- */
-
- st =3D tree_current_lstat(t);
- /* If we can't stat it, it's not a dir. */
- if (st =3D=3D NULL)
- return 0;
- /* Use the definitive test. Hopefully this is cached. */
- return (S_ISDIR(st->st_mode));
-#endif
-}
-
-/*
- * Test whether current entry is a symbolic link.
- */
-int
-tree_current_is_physical_link(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#ifndef IO_REPARSE_TAG_SYMLINK
-/* Old SDKs do not provide IO_REPARSE_TAG_SYMLINK */
-#define IO_REPARSE_TAG_SYMLINK 0xA000000CL
-#endif
- if (t->findData)
- return ((t->findData->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
- && (t->findData->dwReserved0 =3D=3D IO_REPARSE_TAG_SYMLINK));
- return (0);
-#else
- const struct stat *st =3D tree_current_lstat(t);
- if (st =3D=3D NULL)
- return 0;
- return (S_ISLNK(st->st_mode));
-#endif
-}
-
-/*
- * Return the access path for the entry just returned from tree_next().
- */
-const char *
-tree_current_access_path(struct tree *t)
-{
- return (t->basename);
-}
-
-/*
- * Return the full path for the entry just returned from tree_next().
- */
-const char *
-tree_current_path(struct tree *t)
-{
- return (t->buff);
-}
-
-/*
- * Return the length of the path for the entry just returned from tree_nex=
t().
- */
-size_t
-tree_current_pathlen(struct tree *t)
-{
- return (t->path_length);
-}
-
-/*
- * Return the nesting depth of the entry just returned from tree_next().
- */
-int
-tree_current_depth(struct tree *t)
-{
- return (t->depth);
-}
-
-/*
- * Terminate the traversal and release any resources.
- */
-void
-tree_close(struct tree *t)
-{
- /* Release anything remaining in the stack. */
- while (t->stack !=3D NULL)
- tree_pop(t);
- free(t->buff);
- /* TODO: Ensure that premature close() resets cwd */
-#if 0
-#ifdef HAVE_FCHDIR
- if (t->initialDirFd >=3D 0) {
- int s =3D fchdir(t->initialDirFd);
- (void)s; /* UNUSED */
- close(t->initialDirFd);
- t->initialDirFd =3D -1;
- }
-#elif defined(_WIN32) && !defined(__CYGWIN__)
- if (t->initialDir !=3D NULL) {
- SetCurrentDir(t->initialDir);
- free(t->initialDir);
- t->initialDir =3D NULL;
- }
-#endif
-#endif
- free(t);
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/tree.h
--- a/head/contrib/libarchive/tar/tree.h Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: head/contrib/libarchive/tar/tree.h 228763 2011-12-21 11:13:29=
Z mm $
- */
-
-/*-
- * A set of routines for traversing directory trees.
- * Similar in concept to the fts library, but with a few
- * important differences:
- * * Uses less memory. In particular, fts stores an entire directory
- * in memory at a time. This package only keeps enough subdirectory
- * information in memory to track the traversal. Information
- * about non-directories is discarded as soon as possible.
- * * Supports very deep logical traversals. The fts package
- * uses "non-chdir" approach for logical traversals. This
- * package does use a chdir approach for logical traversals
- * and can therefore handle pathnames much longer than PATH_MAX.
- * * Supports deep physical traversals "out of the box."
- * Due to the memory optimizations above, there's no need to
- * limit dir names to 32k.
- */
-
-#include <sys/stat.h>
-#include <stdio.h>
-
-struct tree;
-
-/* Initiate/terminate a tree traversal. */
-struct tree *tree_open(const char * /* pathname */);
-void tree_close(struct tree *);
-
-/*
- * tree_next() returns Zero if there is no next entry, non-zero if
- * there is. Note that directories are visited three times.
- * Directories are always visited first as part of enumerating their
- * parent; that is a "regular" visit. If tree_descend() is invoked at
- * that time, the directory is added to a work list and will
- * subsequently be visited two more times: once just after descending
- * into the directory ("postdescent") and again just after ascending
- * back to the parent ("postascent").
- *
- * TREE_ERROR_DIR is returned if the descent failed (because the
- * directory couldn't be opened, for instance). This is returned
- * instead of TREE_POSTDESCENT/TREE_POSTASCENT. TREE_ERROR_DIR is not a
- * fatal error, but it does imply that the relevant subtree won't be
- * visited. TREE_ERROR_FATAL is returned for an error that left the
- * traversal completely hosed. Right now, this is only returned for
- * chdir() failures during ascent.
- */
-#define TREE_REGULAR 1
-#define TREE_POSTDESCENT 2
-#define TREE_POSTASCENT 3
-#define TREE_ERROR_DIR -1
-#define TREE_ERROR_FATAL -2
-
-int tree_next(struct tree *);
-
-/* Errno value associated with the last traversal error. */
-int tree_errno(struct tree *);
-
-/*
- * Request that current entry be visited. If you invoke it on every
- * directory, you'll get a physical traversal. This is ignored if the
- * current entry isn't a directory or a link to a directory. So, if
- * you invoke this on every returned path, you'll get a full logical
- * traversal.
- */
-void tree_descend(struct tree *);
-
-/*
- * Return information about the current entry.
- */
-
-/* Current depth in the traversal. */
-int tree_current_depth(struct tree *);
-
-/*
- * The current full pathname, length of the full pathname, and a name
- * that can be used to access the file. Because tree does use chdir
- * extensively, the access path is almost never the same as the full
- * current path.
- *
- * TODO: Flesh out this interface to provide other information. In
- * particular, Windows can provide file size, mode, and some permission
- * information without invoking stat() at all.
- *
- * TODO: On platforms that support it, use openat()-style operations
- * to eliminate the chdir() operations entirely while still supporting
- * arbitrarily deep traversals. This makes access_path troublesome to
- * support, of course, which means we'll need a rich enough interface
- * that clients can function without it. (In particular, we'll need
- * tree_current_open() that returns an open file descriptor.)
- *
- * TODO: Provide tree_current_archive_entry().
- */
-const char *tree_current_path(struct tree *);
-size_t tree_current_pathlen(struct tree *);
-const char *tree_current_access_path(struct tree *);
-
-/*
- * Request the lstat() or stat() data for the current path. Since the
- * tree package needs to do some of this anyway, and caches the
- * results, you should take advantage of it here if you need it rather
- * than make a redundant stat() or lstat() call of your own.
- */
-const struct stat *tree_current_stat(struct tree *);
-const struct stat *tree_current_lstat(struct tree *);
-
-/* The following functions use tricks to avoid a certain number of
- * stat()/lstat() calls. */
-/* "is_physical_dir" is equivalent to S_ISDIR(tree_current_lstat()->st_mod=
e) */
-int tree_current_is_physical_dir(struct tree *);
-/* "is_physical_link" is equivalent to S_ISLNK(tree_current_lstat()->st_mo=
de) */
-int tree_current_is_physical_link(struct tree *);
-/* "is_dir" is equivalent to S_ISDIR(tree_current_stat()->st_mode) */
-int tree_current_is_dir(struct tree *);
-
-/* For testing/debugging: Dump the internal status to the given filehandle=
. */
-void tree_dump(struct tree *, FILE *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/write.c
--- a/head/contrib/libarchive/tar/write.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/write.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2012 Michihiro NAKAJIMA
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -24,14 +25,11 @@
*/
=20
#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/write.c 232153 2012-02-25 =
10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/write.c 238856 2012-07-28 =
06:38:44Z mm $");
=20
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
@@ -56,20 +54,6 @@
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
-#ifdef HAVE_LINUX_FS_H
-#include <linux/fs.h> /* for Linux file flags */
-#endif
-/*
- * Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
- * As the include guards don't agree, the order of include is important.
- */
-#ifdef HAVE_LINUX_EXT2_FS_H
-#include <linux/ext2_fs.h> /* for Linux file flags */
-#endif
-#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
-/* This header exists but is broken on Cygwin. */
-#include <ext2fs/ext2_fs.h>
-#endif
#ifdef HAVE_PATHS_H
#include <paths.h>
#endif
@@ -93,7 +77,6 @@
#include "bsdtar.h"
#include "err.h"
#include "line_reader.h"
-#include "tree.h"
=20
#ifndef O_BINARY
#define O_BINARY 0
@@ -110,28 +93,27 @@
struct archive_dir_entry *head, *tail;
};
=20
-static void add_dir_list(struct bsdtar *bsdtar, const char *path,
- time_t mtime_sec, int mtime_nsec);
static int append_archive(struct bsdtar *, struct archive *,
struct archive *ina);
static int append_archive_filename(struct bsdtar *,
struct archive *, const char *fname);
static void archive_names_from_file(struct bsdtar *bsdtar,
struct archive *a);
-static int copy_file_data(struct bsdtar *, struct archive *a,
- struct archive *ina, struct archive_entry *);
-static int new_enough(struct bsdtar *, const char *path,
- const struct stat *);
+static int copy_file_data_block(struct bsdtar *,
+ struct archive *a, struct archive *,
+ struct archive_entry *);
+static void excluded_callback(struct archive *, void *,
+ struct archive_entry *);
static void report_write(struct bsdtar *, struct archive *,
struct archive_entry *, int64_t progress);
static void test_for_append(struct bsdtar *);
+static int metadata_filter(struct archive *, void *,
+ struct archive_entry *);
static void write_archive(struct archive *, struct bsdtar *);
static void write_entry(struct bsdtar *, struct archive *,
struct archive_entry *);
static void write_file(struct bsdtar *, struct archive *,
struct archive_entry *);
-static int write_file_data(struct bsdtar *, struct archive *,
- struct archive_entry *, int fd, size_t align);
static void write_hierarchy(struct bsdtar *, struct archive *,
const char *);
=20
@@ -360,9 +342,11 @@
lafe_errc(1, 0,
"Cannot append to compressed archive.");
}
- add_dir_list(bsdtar, archive_entry_pathname(entry),
- archive_entry_mtime(entry),
- archive_entry_mtime_nsec(entry));
+ if (archive_match_exclude_entry(bsdtar->matching,
+ ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+ ARCHIVE_MATCH_EQUAL, entry) !=3D ARCHIVE_OK)
+ lafe_errc(1, 0, "Error : %s",
+ archive_error_string(bsdtar->matching));
/* Record the last format determination we see */
format =3D archive_format(a);
/* Keep going until we hit end-of-archive */
@@ -426,8 +410,30 @@
lafe_errc(1, 0, "cannot create link resolver");
archive_entry_linkresolver_set_strategy(bsdtar->resolver,
archive_format(a));
+
+ /* Create a read_disk object. */
if ((bsdtar->diskreader =3D archive_read_disk_new()) =3D=3D NULL)
lafe_errc(1, 0, "Cannot create read_disk object");
+ /* Tell the read_disk how handle symlink. */
+ switch (bsdtar->symlink_mode) {
+ case 'H':
+ archive_read_disk_set_symlink_hybrid(bsdtar->diskreader);
+ break;
+ case 'L':
+ archive_read_disk_set_symlink_logical(bsdtar->diskreader);
+ break;
+ default:
+ archive_read_disk_set_symlink_physical(bsdtar->diskreader);
+ break;
+ }
+ /* Register entry filters. */
+ archive_read_disk_set_matching(bsdtar->diskreader,
+ bsdtar->matching, excluded_callback, bsdtar);
+ archive_read_disk_set_metadata_filter_callback(
+ bsdtar->diskreader, metadata_filter, bsdtar);
+ /* Set the behavior of archive_read_disk. */
+ archive_read_disk_set_behavior(bsdtar->diskreader,
+ bsdtar->readdisk_flags);
archive_read_disk_set_standard_lookup(bsdtar->diskreader);
=20
if (bsdtar->names_from_file !=3D NULL)
@@ -467,11 +473,57 @@
bsdtar->argv++;
}
=20
+ archive_read_disk_set_matching(bsdtar->diskreader, NULL, NULL, NULL);
+ archive_read_disk_set_metadata_filter_callback(
+ bsdtar->diskreader, NULL, NULL);
entry =3D NULL;
archive_entry_linkify(bsdtar->resolver, &entry, &sparse_entry);
while (entry !=3D NULL) {
+ int r;
+ struct archive_entry *entry2;
+ struct archive *disk =3D bsdtar->diskreader;
+
+ /*
+ * This tricky code here is to correctly read the cotents
+ * of the entry because the disk reader bsdtar->diskreader
+ * is pointing at does not have any information about the
+ * entry by this time and using archive_read_data_block()
+ * with the disk reader consequently must fail. And we
+ * have to re-open the entry to read the contents.
+ */
+ /* TODO: Work with -C option as well. */
+ r =3D archive_read_disk_open(disk,
+ archive_entry_sourcepath(entry));
+ if (r !=3D ARCHIVE_OK) {
+ lafe_warnc(archive_errno(disk),
+ "%s", archive_error_string(disk));
+ bsdtar->return_value =3D 1;
+ archive_entry_free(entry);
+ continue;
+ }
+
+ /*
+ * Invoke archive_read_next_header2() to work
+ * archive_read_data_block(), which is called via write_file(),
+ * without failure.
+ */
+ entry2 =3D archive_entry_new();
+ r =3D archive_read_next_header2(disk, entry2);
+ archive_entry_free(entry2);
+ if (r !=3D ARCHIVE_OK) {
+ lafe_warnc(archive_errno(disk),
+ "%s", archive_error_string(disk));
+ if (r =3D=3D ARCHIVE_FATAL)
+ bsdtar->return_value =3D 1;
+ else
+ archive_read_close(disk);
+ archive_entry_free(entry);
+ continue;
+ }
+
write_file(bsdtar, a, entry);
archive_entry_free(entry);
+ archive_read_close(disk);
entry =3D NULL;
archive_entry_linkify(bsdtar->resolver, &entry, &sparse_entry);
}
@@ -584,10 +636,7 @@
int e;
=20
while (ARCHIVE_OK =3D=3D (e =3D archive_read_next_header(ina, &in_entry))=
) {
- if (!new_enough(bsdtar, archive_entry_pathname(in_entry),
- archive_entry_stat(in_entry)))
- continue;
- if (lafe_excluded(bsdtar->matching, archive_entry_pathname(in_entry)))
+ if (archive_match_excluded(bsdtar->matching, in_entry))
continue;
if (bsdtar->option_interactive &&
!yes("copy '%s'", archive_entry_pathname(in_entry)))
@@ -613,7 +662,7 @@
if (e >=3D ARCHIVE_WARN) {
if (archive_entry_size(in_entry) =3D=3D 0)
archive_read_data_skip(ina);
- else if (copy_file_data(bsdtar, a, ina, in_entry))
+ else if (copy_file_data_block(bsdtar, a, ina, in_entry))
exit(1);
}
=20
@@ -624,31 +673,131 @@
return (e =3D=3D ARCHIVE_EOF ? ARCHIVE_OK : e);
}
=20
-/* Helper function to copy data between archives. */
+/* Helper function to copy file to archive. */
static int
-copy_file_data(struct bsdtar *bsdtar, struct archive *a,
- struct archive *ina, struct archive_entry *entry)
+copy_file_data_block(struct bsdtar *bsdtar, struct archive *a,
+ struct archive *in_a, struct archive_entry *entry)
{
- ssize_t bytes_read;
+ size_t bytes_read;
ssize_t bytes_written;
- int64_t progress =3D 0;
+ int64_t offset, progress =3D 0;
+ char *null_buff =3D NULL;
+ const void *buff;
+ int r;
=20
- bytes_read =3D archive_read_data(ina, bsdtar->buff, bsdtar->buff_size);
- while (bytes_read > 0) {
+ while ((r =3D archive_read_data_block(in_a, &buff,
+ &bytes_read, &offset)) =3D=3D ARCHIVE_OK) {
if (need_report())
report_write(bsdtar, a, entry, progress);
=20
- bytes_written =3D archive_write_data(a, bsdtar->buff,
- bytes_read);
- if (bytes_written < bytes_read) {
+ if (offset > progress) {
+ int64_t sparse =3D offset - progress;
+ size_t ns;
+
+ if (null_buff =3D=3D NULL) {
+ null_buff =3D bsdtar->buff;
+ memset(null_buff, 0, bsdtar->buff_size);
+ }
+
+ while (sparse > 0) {
+ if (sparse > (int64_t)bsdtar->buff_size)
+ ns =3D bsdtar->buff_size;
+ else
+ ns =3D (size_t)sparse;
+ bytes_written =3D
+ archive_write_data(a, null_buff, ns);
+ if (bytes_written < 0) {
+ /* Write failed; this is bad */
+ lafe_warnc(0, "%s",
+ archive_error_string(a));
+ return (-1);
+ }
+ if ((size_t)bytes_written < ns) {
+ /* Write was truncated; warn but
+ * continue. */
+ lafe_warnc(0,
+ "%s: Truncated write; file may "
+ "have grown while being archived.",
+ archive_entry_pathname(entry));
+ return (0);
+ }
+ progress +=3D bytes_written;
+ sparse -=3D bytes_written;
+ }
+ }
+
+ bytes_written =3D archive_write_data(a, buff, bytes_read);
+ if (bytes_written < 0) {
+ /* Write failed; this is bad */
lafe_warnc(0, "%s", archive_error_string(a));
return (-1);
}
+ if ((size_t)bytes_written < bytes_read) {
+ /* Write was truncated; warn but continue. */
+ lafe_warnc(0,
+ "%s: Truncated write; file may have grown "
+ "while being archived.",
+ archive_entry_pathname(entry));
+ return (0);
+ }
progress +=3D bytes_written;
- bytes_read =3D archive_read_data(ina, bsdtar->buff, bsdtar->buff_size);
}
+ if (r < ARCHIVE_WARN) {
+ lafe_warnc(archive_errno(a), "%s", archive_error_string(a));
+ return (-1);
+ }
+ return (0);
+}
=20
- return (0);
+static void
+excluded_callback(struct archive *a, void *_data, struct archive_entry *en=
try)
+{
+ struct bsdtar *bsdtar =3D (struct bsdtar *)_data;
+
+ if (bsdtar->option_no_subdirs)
+ return;
+ if (!archive_read_disk_can_descend(a))
+ return;
+ if (bsdtar->option_interactive &&
+ !yes("add '%s'", archive_entry_pathname(entry)))
+ return;
+ archive_read_disk_descend(a);
+}
+
+static int
+metadata_filter(struct archive *a, void *_data, struct archive_entry *entr=
y)
+{
+ struct bsdtar *bsdtar =3D (struct bsdtar *)_data;
+
+ /* XXX TODO: check whether this filesystem is
+ * synthetic and/or local. Add a new
+ * --local-only option to skip non-local
+ * filesystems. Skip synthetic filesystems
+ * regardless.
+ *
+ * The results should be cached, since
+ * tree.c doesn't usually visit a directory
+ * and the directory contents together. A simple
+ * move-to-front list should perform quite well.
+ *
+ * Use archive_read_disk_current_filesystem_is_remote().
+ */
+
+ /*
+ * If the user vetoes this file/directory, skip it.
+ * We want this to be fairly late; if some other
+ * check would veto this file, we shouldn't bother
+ * the user with it.
+ */
+ if (bsdtar->option_interactive &&
+ !yes("add '%s'", archive_entry_pathname(entry)))
+ return (0);
+
+ /* Note: if user vetoes, we won't descend. */
+ if (!bsdtar->option_no_subdirs && archive_read_disk_can_descend(a))
+ archive_read_disk_descend(a);
+
+ return (1);
}
=20
/*
@@ -657,171 +806,35 @@
static void
write_hierarchy(struct bsdtar *bsdtar, struct archive *a, const char *path)
{
+ struct archive *disk =3D bsdtar->diskreader;
struct archive_entry *entry =3D NULL, *spare_entry =3D NULL;
- struct tree *tree;
- char symlink_mode =3D bsdtar->symlink_mode;
- dev_t first_dev =3D 0;
- int dev_recorded =3D 0;
- int tree_ret;
+ int r;
=20
- tree =3D tree_open(path);
-
- if (!tree) {
- lafe_warnc(errno, "%s: Cannot open", path);
+ r =3D archive_read_disk_open(disk, path);
+ if (r !=3D ARCHIVE_OK) {
+ lafe_warnc(archive_errno(disk),
+ "%s", archive_error_string(disk));
bsdtar->return_value =3D 1;
return;
}
+ bsdtar->first_fs =3D -1;
=20
- while ((tree_ret =3D tree_next(tree)) !=3D 0) {
- int r;
- const char *name =3D tree_current_path(tree);
- const struct stat *st =3D NULL; /* info to use for this entry */
- const struct stat *lst =3D NULL; /* lstat() information */
- int descend;
-
- if (tree_ret =3D=3D TREE_ERROR_FATAL)
- lafe_errc(1, tree_errno(tree),
- "%s: Unable to continue traversing directory tree",
- name);
- if (tree_ret =3D=3D TREE_ERROR_DIR) {
- lafe_warnc(errno,
- "%s: Couldn't visit directory", name);
- bsdtar->return_value =3D 1;
- }
- if (tree_ret !=3D TREE_REGULAR)
- continue;
-
- /*
- * If this file/dir is excluded by a filename
- * pattern, skip it.
- */
- if (lafe_excluded(bsdtar->matching, name))
- continue;
-
- /*
- * Get lstat() info from the tree library.
- */
- lst =3D tree_current_lstat(tree);
- if (lst =3D=3D NULL) {
- /* Couldn't lstat(); must not exist. */
- lafe_warnc(errno, "%s: Cannot stat", name);
- /* Return error if files disappear during traverse. */
- bsdtar->return_value =3D 1;
- continue;
+ for (;;) {
+ archive_entry_free(entry);
+ entry =3D archive_entry_new();
+ r =3D archive_read_next_header2(disk, entry);
+ if (r =3D=3D ARCHIVE_EOF)
+ break;
+ else if (r !=3D ARCHIVE_OK) {
+ lafe_warnc(archive_errno(disk),
+ "%s", archive_error_string(disk));
+ if (r =3D=3D ARCHIVE_FATAL) {
+ bsdtar->return_value =3D 1;
+ return;
+ } else if (r < ARCHIVE_WARN)
+ continue;
}
=20
- /*
- * Distinguish 'L'/'P'/'H' symlink following.
- */
- switch(symlink_mode) {
- case 'H':
- /* 'H': After the first item, rest like 'P'. */
- symlink_mode =3D 'P';
- /* 'H': First item (from command line) like 'L'. */
- /* FALLTHROUGH */
- case 'L':
- /* 'L': Do descend through a symlink to dir. */
- descend =3D tree_current_is_dir(tree);
- /* 'L': Follow symlinks to files. */
- archive_read_disk_set_symlink_logical(bsdtar->diskreader);
- /* 'L': Archive symlinks as targets, if we can. */
- st =3D tree_current_stat(tree);
- if (st !=3D NULL)
- break;
- /* If stat fails, we have a broken symlink;
- * in that case, don't follow the link. */
- /* FALLTHROUGH */
- default:
- /* 'P': Don't descend through a symlink to dir. */
- descend =3D tree_current_is_physical_dir(tree);
- /* 'P': Don't follow symlinks to files. */
- archive_read_disk_set_symlink_physical(bsdtar->diskreader);
- /* 'P': Archive symlinks as symlinks. */
- st =3D lst;
- break;
- }
-
- if (bsdtar->option_no_subdirs)
- descend =3D 0;
-
- /*
- * Are we about to cross to a new filesystem?
- */
- if (!dev_recorded) {
- /* This is the initial file system. */
- first_dev =3D lst->st_dev;
- dev_recorded =3D 1;
- } else if (lst->st_dev =3D=3D first_dev) {
- /* The starting file system is always acceptable. */
- } else if (descend =3D=3D 0) {
- /* We're not descending, so no need to check. */
- } else if (bsdtar->option_dont_traverse_mounts) {
- descend =3D 0;
- } else {
- /* We're prepared to cross a mount point. */
-
- /* XXX TODO: check whether this filesystem is
- * synthetic and/or local. Add a new
- * --local-only option to skip non-local
- * filesystems. Skip synthetic filesystems
- * regardless.
- *
- * The results should be cached, since
- * tree.c doesn't usually visit a directory
- * and the directory contents together. A simple
- * move-to-front list should perform quite well.
- *
- * This is going to be heavily OS dependent:
- * FreeBSD's statfs() in conjunction with getvfsbyname()
- * provides all of this; NetBSD's statvfs() does
- * most of it; other systems will vary.
- */
- }
-
- /*
- * In -u mode, check that the file is newer than what's
- * already in the archive; in all modes, obey --newerXXX flags.
- */
- if (!new_enough(bsdtar, name, st)) {
- if (!descend)
- continue;
- if (bsdtar->option_interactive &&
- !yes("add '%s'", name))
- continue;
- tree_descend(tree);
- continue;
- }
-
- archive_entry_free(entry);
- entry =3D archive_entry_new();
-
- archive_entry_set_pathname(entry, name);
- archive_entry_copy_sourcepath(entry,
- tree_current_access_path(tree));
-
- /* Populate the archive_entry with metadata from the disk. */
- /* XXX TODO: Arrange to open a regular file before
- * calling this so we can pass in an fd and shorten
- * the race to query metadata. The linkify dance
- * makes this more complex than it might sound. */
-#if defined(_WIN32) && !defined(__CYGWIN__)
- /* TODO: tree.c uses stat(), which is badly broken
- * on Windows. To fix this, we should
- * deprecate tree_current_stat() and provide a new
- * call tree_populate_entry(t, entry). This call
- * would use stat() internally on POSIX and
- * GetInfoByFileHandle() internally on Windows.
- * This would be another step towards a tree-walker
- * that can be integrated deep into libarchive.
- * For now, just set st to NULL on Windows;
- * archive_read_disk_entry_from_file() should
- * be smart enough to use platform-appropriate
- * ways to probe file information.
- */
- st =3D NULL;
-#endif
- r =3D archive_read_disk_entry_from_file(bsdtar->diskreader,
- entry, -1, st);
if (bsdtar->uid >=3D 0) {
archive_entry_set_uid(entry, bsdtar->uid);
if (!bsdtar->uname)
@@ -840,68 +853,6 @@
archive_entry_set_uname(entry, bsdtar->uname);
if (bsdtar->gname)
archive_entry_set_gname(entry, bsdtar->gname);
- if (r !=3D ARCHIVE_OK)
- lafe_warnc(archive_errno(bsdtar->diskreader),
- "%s", archive_error_string(bsdtar->diskreader));
- if (r < ARCHIVE_WARN)
- continue;
-
- /* XXX TODO: Just use flag data from entry; avoid the
- * duplicate check here. */
-
- /*
- * If this file/dir is flagged "nodump" and we're
- * honoring such flags, skip this file/dir.
- */
-#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
- /* BSD systems store flags in struct stat */
- if (bsdtar->option_honor_nodump &&
- (lst->st_flags & UF_NODUMP))
- continue;
-#endif
-
-#if defined(EXT2_IOC_GETFLAGS) && defined(EXT2_NODUMP_FL) && defined(HAVE_=
WORKING_EXT2_IOC_GETFLAGS)
- /* Linux uses ioctl to read flags. */
- if (bsdtar->option_honor_nodump) {
- int fd =3D open(name, O_RDONLY | O_NONBLOCK | O_BINARY);
- if (fd >=3D 0) {
- unsigned long fflags;
- int r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &fflags);
- close(fd);
- if (r >=3D 0 && (fflags & EXT2_NODUMP_FL))
- continue;
- }
- }
-#endif
-
-#ifdef __APPLE__
- if (bsdtar->enable_copyfile) {
- /* If we're using copyfile(), ignore "._XXX" files. */
- const char *bname =3D strrchr(name, '/');
- if (bname =3D=3D NULL)
- bname =3D name;
- else
- ++bname;
- if (bname[0] =3D=3D '.' && bname[1] =3D=3D '_')
- continue;
- } else {
- /* If not, drop the copyfile() data. */
- archive_entry_copy_mac_metadata(entry, NULL, 0);
- }
-#endif
-
- /*
- * If the user vetoes this file/directory, skip it.
- * We want this to be fairly late; if some other
- * check would veto this file, we shouldn't bother
- * the user with it.
- */
- if (bsdtar->option_interactive &&
- !yes("add '%s'", name))
- continue;
-
- if (descend)
- tree_descend(tree);
=20
/*
* Rewrite the pathname to be archived. If rewrite
@@ -933,7 +884,7 @@
fprintf(stderr, "\n");
}
archive_entry_free(entry);
- tree_close(tree);
+ archive_read_close(disk);
}
=20
/*
@@ -954,29 +905,7 @@
write_entry(struct bsdtar *bsdtar, struct archive *a,
struct archive_entry *entry)
{
- int fd =3D -1;
int e;
- size_t align =3D 4096;
-
- if (archive_entry_size(entry) > 0) {
- const char *pathname =3D archive_entry_sourcepath(entry);
- /* TODO: Use O_DIRECT here and set 'align' to the
- * actual filesystem block size. As of July 2010, new
- * directory-traversal code is going in that will make
- * it much easier to track filesystem properties like
- * this during the traversal. */
- fd =3D open(pathname, O_RDONLY | O_BINARY);
- align =3D 4096;
- if (fd =3D=3D -1) {
- bsdtar->return_value =3D 1;
- if (!bsdtar->verbose)
- lafe_warnc(errno,
- "%s: could not open file", pathname);
- else
- fprintf(stderr, ": %s", strerror(errno));
- return;
- }
- }
=20
e =3D archive_write_header(a, entry);
if (e !=3D ARCHIVE_OK) {
@@ -997,17 +926,10 @@
* to inform us that the archive body won't get stored. In
* that case, just skip the write.
*/
- if (e >=3D ARCHIVE_WARN && fd >=3D 0 && archive_entry_size(entry) > 0) {
- if (write_file_data(bsdtar, a, entry, fd, align))
+ if (e >=3D ARCHIVE_WARN && archive_entry_size(entry) > 0) {
+ if (copy_file_data_block(bsdtar, a, bsdtar->diskreader, entry))
exit(1);
}
-
- /*
- * If we opened a file, close it now even if there was an error
- * which made us decide not to write the archive body.
- */
- if (fd >=3D 0)
- close(fd);
}
=20
static void
@@ -1038,144 +960,6 @@
tar_i64toa(archive_entry_size(entry)));
}
=20
-
-/* Helper function to copy file to archive. */
-static int
-write_file_data(struct bsdtar *bsdtar, struct archive *a,
- struct archive_entry *entry, int fd, size_t align)
-{
- ssize_t bytes_read;
- ssize_t bytes_written;
- int64_t progress =3D 0;
- size_t buff_size;
- char *buff =3D bsdtar->buff;
-
- /* Round 'buff' up to the next multiple of 'align' and reduce
- * 'buff_size' accordingly. */
- buff =3D (char *)((((uintptr_t)buff + align - 1) / align) * align);
- buff_size =3D bsdtar->buff + bsdtar->buff_size - buff;
- buff_size =3D (buff_size / align) * align;
-=09
- bytes_read =3D read(fd, buff, buff_size);
- while (bytes_read > 0) {
- if (need_report())
- report_write(bsdtar, a, entry, progress);
-
- bytes_written =3D archive_write_data(a, buff, bytes_read);
- if (bytes_written < 0) {
- /* Write failed; this is bad */
- lafe_warnc(0, "%s", archive_error_string(a));
- return (-1);
- }
- if (bytes_written < bytes_read) {
- /* Write was truncated; warn but continue. */
- lafe_warnc(0,
- "%s: Truncated write; file may have grown while being archived.",
- archive_entry_pathname(entry));
- return (0);
- }
- progress +=3D bytes_written;
- bytes_read =3D read(fd, buff, buff_size);
- }
- if (bytes_read < 0) {
- lafe_warnc(errno,
- "%s: Read error",
- archive_entry_pathname(entry));
- bsdtar->return_value =3D 1;
- }
- return 0;
-}
-
-/*
- * Test if the specified file is new enough to include in the archive.
- */
-static int
-new_enough(struct bsdtar *bsdtar, const char *path, const struct stat *st)
-{
- struct archive_dir_entry *p;
-
- /*
- * If this file/dir is excluded by a time comparison, skip it.
- */
- if (bsdtar->newer_ctime_filter) {
- if (st->st_ctime < bsdtar->newer_ctime_sec)
- return (0); /* Too old, skip it. */
- if (st->st_ctime =3D=3D bsdtar->newer_ctime_sec
- && ARCHIVE_STAT_CTIME_NANOS(st)
- <=3D bsdtar->newer_ctime_nsec)
- return (0); /* Too old, skip it. */
- }
- if (bsdtar->newer_mtime_filter) {
- if (st->st_mtime < bsdtar->newer_mtime_sec)
- return (0); /* Too old, skip it. */
- if (st->st_mtime =3D=3D bsdtar->newer_mtime_sec
- && ARCHIVE_STAT_MTIME_NANOS(st)
- <=3D bsdtar->newer_mtime_nsec)
- return (0); /* Too old, skip it. */
- }
-
- /*
- * In -u mode, we only write an entry if it's newer than
- * what was already in the archive.
- */
- if (bsdtar->archive_dir !=3D NULL &&
- bsdtar->archive_dir->head !=3D NULL) {
- for (p =3D bsdtar->archive_dir->head; p !=3D NULL; p =3D p->next) {
- if (pathcmp(path, p->name)=3D=3D0)
- return (p->mtime_sec < st->st_mtime ||
- (p->mtime_sec =3D=3D st->st_mtime &&
- p->mtime_nsec
- < ARCHIVE_STAT_MTIME_NANOS(st)));
- }
- }
-
- /* If the file wasn't rejected, include it. */
- return (1);
-}
-
-/*
- * Add an entry to the dir list for 'u' mode.
- *
- * XXX TODO: Make this fast.
- */
-static void
-add_dir_list(struct bsdtar *bsdtar, const char *path,
- time_t mtime_sec, int mtime_nsec)
-{
- struct archive_dir_entry *p;
-
- /*
- * Search entire list to see if this file has appeared before.
- * If it has, override the timestamp data.
- */
- p =3D bsdtar->archive_dir->head;
- while (p !=3D NULL) {
- if (strcmp(path, p->name)=3D=3D0) {
- p->mtime_sec =3D mtime_sec;
- p->mtime_nsec =3D mtime_nsec;
- return;
- }
- p =3D p->next;
- }
-
- p =3D malloc(sizeof(*p));
- if (p =3D=3D NULL)
- lafe_errc(1, ENOMEM, "Can't read archive directory");
-
- p->name =3D strdup(path);
- if (p->name =3D=3D NULL)
- lafe_errc(1, ENOMEM, "Can't read archive directory");
- p->mtime_sec =3D mtime_sec;
- p->mtime_nsec =3D mtime_nsec;
- p->next =3D NULL;
- if (bsdtar->archive_dir->tail =3D=3D NULL) {
- bsdtar->archive_dir->head =3D bsdtar->archive_dir->tail =3D p;
- } else {
- bsdtar->archive_dir->tail->next =3D p;
- bsdtar->archive_dir->tail =3D p;
- }
-}
-
static void
test_for_append(struct bsdtar *bsdtar)
{
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/llvm/tools/clang/lib/Driv=
er/Tools.cpp
--- a/head/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Fri Aug 10 14:19:2=
5 2012 +0300
@@ -4745,6 +4745,14 @@
const Driver &D =3D getToolChain().getDriver();
ArgStringList CmdArgs;
=20
+ // Silence warning for "clang -g foo.o -o foo"
+ Args.ClaimAllArgs(options::OPT_g_Group);
+ // and "clang -emit-llvm foo.o -o foo"
+ Args.ClaimAllArgs(options::OPT_emit_llvm);
+ // and for "clang -w foo.o -o foo". Other warning options are already
+ // handled somewhere else.
+ Args.ClaimAllArgs(options::OPT_w);
+
if (!D.SysRoot.empty())
CmdArgs.push_back(Args.MakeArgString("--sysroot=3D" + D.SysRoot));
=20
@@ -4761,8 +4769,10 @@
CmdArgs.push_back("/libexec/ld-elf.so.1");
}
llvm::Triple::ArchType Arch =3D getToolChain().getArch();
- if (Arch =3D=3D llvm::Triple::x86 || Arch =3D=3D llvm::Triple::x86_64)
+ if (Arch =3D=3D llvm::Triple::arm || Arch =3D=3D llvm::Triple::sparc ||
+ Arch =3D=3D llvm::Triple::x86 || Arch =3D=3D llvm::Triple::x86_64)
CmdArgs.push_back("--hash-style=3Dboth");
+ CmdArgs.push_back("--enable-new-dtags");
}
=20
// When building 32-bit code on FreeBSD/amd64, we have to explicitly
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/opie/libopie/hash.c
--- a/head/contrib/opie/libopie/hash.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/opie/libopie/hash.c Fri Aug 10 14:19:25 2012 +0300
@@ -14,9 +14,11 @@
they killed thread-safety.
Created by cmetz for OPIE 2.3 using the old hash.c as a guide.
=20
-$FreeBSD$
+$FreeBSD: head/contrib/opie/libopie/hash.c 239169 2012-08-10 04:48:58Z del=
phij $
*/
=20
+#include <sys/endian.h>
+
#include "opie_cfg.h"
#include "opie.h"
=20
@@ -39,6 +41,13 @@
SHA1_Final((unsigned char *)digest, &sha);
results[0] =3D digest[0] ^ digest[2] ^ digest[4];
results[1] =3D digest[1] ^ digest[3];
+
+ /*
+ * RFC2289 mandates that we convert SHA1 digest from big-endian to l=
ittle
+ * see Appendix A.
+ */
+ results[0] =3D bswap32(results[0]);
+ results[1] =3D bswap32(results[1]);
};
break;
case 4:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/opie/libopie/hashlen.c
--- a/head/contrib/opie/libopie/hashlen.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/opie/libopie/hashlen.c Fri Aug 10 14:19:25 2012 +0300
@@ -11,9 +11,11 @@
Modified by cmetz for OPIE 2.4. Use struct opie_otpkey, isolate variables.
Created by cmetz for OPIE 2.3.
=20
-$FreeBSD$
+$FreeBSD: head/contrib/opie/libopie/hashlen.c 239169 2012-08-10 04:48:58Z =
delphij $
*/
=20
+#include <sys/endian.h>
+
#include "opie_cfg.h"
#include "opie.h"
=20
@@ -36,6 +38,13 @@
SHA1_Final((unsigned char *)digest, &sha);
results[0] =3D digest[0] ^ digest[2] ^ digest[4];
results[1] =3D digest[1] ^ digest[3];
+
+ /*
+ * RFC2289 mandates that we convert SHA1 digest from big-endian to l=
ittle
+ * see Appendix A.
+ */
+ results[0] =3D bswap32(results[0]);
+ results[1] =3D bswap32(results[1]);
break;
}
case 4: {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/etc/devd/usb.conf
--- a/head/etc/devd/usb.conf Mon Jul 30 11:44:18 2012 +0300
+++ b/head/etc/devd/usb.conf Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
#
-# $FreeBSD: head/etc/devd/usb.conf 235725 2012-05-21 15:01:35Z hselasky $
+# $FreeBSD: head/etc/devd/usb.conf 239056 2012-08-05 11:53:16Z hselasky $
#
# This file was automatically generated by "tools/bus_autoconf.sh".
# Please do not edit!
@@ -157,7 +157,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x0403";
- match "product" "(0x6001|0x6004|0x6010|0x6011|0x8372|0x9e90|0xcc48|0xcc49=
|0xcc4a|0xd678|0xe6c8|0xe888|0xe889|0xe88a|0xe88b|0xe88c|0xee18|0xf608|0xf6=
0b|0xf850|0xfa00|0xfa01|0xfa02|0xfa03|0xfa04|0xfc08|0xfc09|0xfc0b|0xfc0c|0x=
fc0d|0xfc82)";
+ match "product" "(0x6001|0x6004|0x6006|0x6010|0x6011|0x6014|0x8372|0x9378=
|0x9379|0x937a|0x937c|0x9868|0x9e90|0x9f80|0xa6d0|0xabb8|0xb810|0xb811|0xb8=
12|0xbaf8|0xbca0|0xbca1|0xbca2|0xbca4|0xbcd8|0xbcd9|0xbdc8|0xbfd8|0xbfd9|0x=
bfda|0xbfdb|0xbfdc|0xc7d0|0xc850|0xc991|0xcaa0|0xcc48|0xcc49|0xcc4a|0xd010|=
0xd011|0xd012|0xd013|0xd014|0xd015|0xd016|0xd017|0xd070|0xd071|0xd388|0xd38=
9|0xd38a|0xd38b|0xd38c|0xd38d|0xd38e|0xd38f|0xd578|0xd678|0xd738|0xd780|0xd=
af8|0xdaf9|0xdafa|0xdafb|0xdafc|0xdafd|0xdafe|0xdaff|0xdc00|0xdc01|0xdd20|0=
xdf28|0xdf30|0xdf31|0xdf32|0xdf33|0xdf35|0xe000|0xe001|0xe002|0xe004|0xe006=
|0xe008|0xe009|0xe00a|0xe050|0xe0e8|0xe0e9|0xe0ea|0xe0eb|0xe0ec|0xe0ed|0xe0=
ee|0xe0ef|0xe0f0|0xe0f1|0xe0f2|0xe0f3|0xe0f4|0xe0f5|0xe0f6|0xe0f7|0xe40b|0x=
e520|0xe548|0xe6c8|0xe700|0xe729|0xe808|0xe809|0xe80a|0xe80b|0xe80c|0xe80d|=
0xe80e|0xe80f|0xe888|0xe889|0xe88a|0xe88b|0xe88c|0xe88d|0xe88e|0xe88f|0xea9=
0|0xebe0|0xec88|0xec89|0xed22|0xed71|0xed72|0xed73|0xed74|0xee18|0xeee8|0xe=
ee9|0xeeea|0xeeeb|0xeeec|0xeeed|0xeeee|0xeeef|0xef50|0xef51|0xf068|0xf069|0=
xf06a|0xf06b|0xf06c|0xf06d|0xf06e|0xf06f|0xf070|0xf0c0|0xf0c8|0xf208|0xf2d0=
|0xf3c0|0xf3c1|0xf3c2|0xf448|0xf449|0xf44a|0xf44b|0xf44c|0xf460|0xf608|0xf6=
0b|0xf680|0xf850|0xf857|0xf9d0|0xf9d1|0xf9d2|0xf9d3|0xf9d4|0xf9d5|0xfa00|0x=
fa01|0xfa02|0xfa03|0xfa04|0xfa05|0xfa06|0xfa10|0xfa33|0xfa88|0xfad0|0xfaf0|=
0xfb58|0xfb59|0xfb5a|0xfb5b|0xfb5c|0xfb5d|0xfb5e|0xfb5f|0xfb80|0xfb99|0xfbf=
a|0xfc08|0xfc09|0xfc0a|0xfc0b|0xfc0c|0xfc0d|0xfc0e|0xfc0f|0xfc60|0xfc70|0xf=
c71|0xfc72|0xfc73|0xfc82|0xfd60|0xfe38|0xff00|0xff18|0xff1c|0xff1d|0xff20|0=
xff38|0xff39|0xff3a|0xff3b|0xff3c|0xff3d|0xff3e|0xff3f|0xffa8)";
action "kldload -n uftdi";
};
=20
@@ -293,7 +293,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x0411";
- match "product" "(0x0148|0x0150|0x015d|0x016f|0x01a2)";
+ match "product" "(0x0148|0x0150|0x015d|0x016f|0x01a2|0x01ee)";
action "kldload -n if_run";
};
=20
@@ -324,6 +324,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0456";
+ match "product" "(0xf000|0xf001)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x045a";
match "product" "(0x5001|0x5002)";
action "kldload -n urio";
@@ -1021,7 +1029,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x05c6";
- match "product" "(0x1000|0x6000|0x6613|0x9000)";
+ match "product" "(0x1000|0x6000|0x6613|0x9000|0x9204|0x9205)";
action "kldload -n u3g";
};
=20
@@ -1068,6 +1076,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0647";
+ match "product" "0x0100";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x066b";
match "product" "(0x200c|0x2202)";
action "kldload -n if_aue";
@@ -1109,7 +1125,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x067b";
- match "product" "(0x04bb|0x0609|0x0611|0x0612|0x1234|0x206a|0x2303)";
+ match "product" "(0x0307|0x04bb|0x0609|0x0611|0x0612|0x1234|0x206a|0x2303=
)";
action "kldload -n uplcom";
};
=20
@@ -1156,6 +1172,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x06ce";
+ match "product" "0x8311";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x06e1";
match "product" "(0x0008|0x0009)";
action "kldload -n if_kue";
@@ -1301,7 +1325,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x0789";
- match "product" "(0x0162|0x0163|0x0164|0x0166)";
+ match "product" "(0x0162|0x0163|0x0164|0x0166|0x0168)";
action "kldload -n if_run";
};
=20
@@ -1653,7 +1677,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x0856";
- match "product" "0xac01";
+ match "product" "(0xac01|0xac02|0xac03|0xac11|0xac12|0xac16|0xac17|0xac18=
|0xac19|0xac25|0xac26|0xac27|0xac33|0xac34|0xac49|0xac50|0xba02)";
action "kldload -n uftdi";
};
=20
@@ -1876,6 +1900,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0acd";
+ match "product" "0x0300";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x0ace";
match "product" "(0x1211|0x1215)";
action "kldload -n if_zyd";
@@ -2045,6 +2077,14 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x0b39";
+ match "product" "0x0103";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
+ match "vendor" "0x0b39";
match "product" "0x0109";
action "kldload -n if_aue";
};
@@ -2172,6 +2212,22 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0c26";
+ match "product" "(0x0004|0x0009|0x000a|0x000b|0x000c|0x000d|0x0010|0x0011=
|0x0012|0x0013|0x0018)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
+ match "vendor" "0x0c33";
+ match "product" "0x0010";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x0c44";
match "product" "0x03a2";
action "kldload -n uipaq";
@@ -2180,6 +2236,30 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0c52";
+ match "product" "(0x2101|0x2102|0x2103|0x2104|0x2211|0x2212|0x2213|0x2221=
|0x2222|0x2223|0x2411|0x2412|0x2413|0x2421|0x2422|0x2423|0x2431|0x2432|0x24=
33|0x2441|0x2442|0x2443|0x2811|0x2812|0x2813|0x2821|0x2822|0x2823|0x2831|0x=
2832|0x2833|0x2841|0x2842|0x2843|0x2851|0x2852|0x2853|0x2861|0x2862|0x2863|=
0x2871|0x2872|0x2873|0x2881|0x2882|0x2883|0x9020)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
+ match "vendor" "0x0c6c";
+ match "product" "0x04b2";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
+ match "vendor" "0x0c7d";
+ match "product" "0x0005";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x0c88";
match "product" "0x17da";
action "kldload -n u3g";
@@ -2276,6 +2356,22 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0d3a";
+ match "product" "0x0300";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
+ match "vendor" "0x0d46";
+ match "product" "(0x2020|0x2021)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x0d8e";
match "product" "0x3762";
action "kldload -n if_upgt";
@@ -2340,6 +2436,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0dcd";
+ match "product" "0x0001";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x0df6";
match "product" "0x000d";
action "kldload -n if_urtw";
@@ -2557,7 +2661,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x0f94";
- match "product" "0x0001";
+ match "product" "(0x0001|0x0005)";
action "kldload -n uftdi";
};
=20
@@ -2588,6 +2692,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x0fd8";
+ match "product" "0x0001";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x0fe6";
match "product" "(0x8101|0x9700)";
action "kldload -n if_udav";
@@ -2612,6 +2724,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x103e";
+ match "product" "0x03e8";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1044";
match "product" "0x8001";
action "kldload -n if_ural";
@@ -2725,7 +2845,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x10c4";
- match "product" "(0x8066|0x806f|0x807a|0x80ca|0x80dd|0x80ed|0x80f6|0x8115=
|0x813d|0x813f|0x814a|0x814a|0x814b|0x8156|0x815e|0x818b|0x819f|0x81a6|0x81=
ac|0x81ad|0x81c8|0x81e2|0x81e7|0x81e8|0x81f2|0x8218|0x822b|0x826b|0x8293|0x=
82f9|0x8341|0x8382|0x83a8|0x8411|0x846e|0x8477|0xea60|0xea61|0xea71|0xf001|=
0xf002|0xf003|0xf004)";
+ match "product" "(0x8066|0x806f|0x807a|0x80c4|0x80ca|0x80dd|0x80ed|0x80f6=
|0x8115|0x813d|0x813f|0x814a|0x814a|0x814b|0x8156|0x815e|0x815f|0x818b|0x81=
9f|0x81a6|0x81a9|0x81ac|0x81ad|0x81c8|0x81e2|0x81e7|0x81e8|0x81f2|0x8218|0x=
822b|0x826b|0x8293|0x82f9|0x8341|0x8382|0x83a8|0x83d8|0x8411|0x8418|0x846e|=
0x8477|0x85ea|0x85eb|0x8664|0x8665|0xea60|0xea61|0xea70|0xea71|0xea80|0xf00=
1|0xf002|0xf003|0xf004)";
action "kldload -n uslcom";
};
=20
@@ -2900,6 +3020,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1209";
+ match "product" "(0x1002|0x1006)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1231";
match "product" "(0xce01|0xce02)";
action "kldload -n uipaq";
@@ -2916,6 +3044,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x128d";
+ match "product" "0x0001";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x129b";
match "product" "0x1666";
action "kldload -n if_zyd";
@@ -2933,7 +3069,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x12d1";
- match "product" "(0x1001|0x1003|0x1004|0x1401|0x1402|0x1403|0x1404|0x1405=
|0x1406|0x1407|0x1408|0x1409|0x140a|0x140b|0x140c|0x140d|0x140e|0x140f|0x14=
10|0x1411|0x1412|0x1413|0x1414|0x1415|0x1416|0x1417|0x1418|0x1419|0x141a|0x=
141b|0x141c|0x141d|0x141e|0x141f|0x1420|0x1421|0x1422|0x1423|0x1424|0x1425|=
0x1426|0x1427|0x1428|0x1429|0x142a|0x142b|0x142c|0x142d|0x142e|0x142f|0x143=
0|0x1431|0x1432|0x1433|0x1434|0x1435|0x1436|0x1437|0x1438|0x1439|0x143a|0x1=
43b|0x143c|0x143d|0x143e|0x143f|0x1446|0x1465|0x14ac|0x1520|0x1c05|0x1c0b)";
+ match "product" "(0x1001|0x1003|0x1004|0x1401|0x1402|0x1403|0x1404|0x1405=
|0x1406|0x1407|0x1408|0x1409|0x140a|0x140b|0x140c|0x140d|0x140e|0x140f|0x14=
10|0x1411|0x1412|0x1413|0x1414|0x1415|0x1416|0x1417|0x1418|0x1419|0x141a|0x=
141b|0x141c|0x141d|0x141e|0x141f|0x1420|0x1421|0x1422|0x1423|0x1424|0x1425|=
0x1426|0x1427|0x1428|0x1429|0x142a|0x142b|0x142c|0x142d|0x142e|0x142f|0x143=
0|0x1431|0x1432|0x1433|0x1434|0x1435|0x1436|0x1437|0x1438|0x1439|0x143a|0x1=
43b|0x143c|0x143d|0x143e|0x143f|0x1446|0x1465|0x14ac|0x14fe|0x1505|0x1506|0=
x1520|0x1803|0x1c05|0x1c0b)";
action "kldload -n u3g";
};
=20
@@ -2949,6 +3085,14 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x1342";
+ match "product" "0x0202";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
+ match "vendor" "0x1342";
match "product" "0x0204";
action "kldload -n if_kue";
};
@@ -3108,6 +3252,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1457";
+ match "product" "(0x5118|0x5118)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1472";
match "product" "0x0009";
action "kldload -n if_rum";
@@ -3332,6 +3484,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x15ba";
+ match "product" "(0x0003|0x002b)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x15c5";
match "product" "0x0008";
action "kldload -n if_run";
@@ -3381,7 +3541,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x166a";
- match "product" "0x0303";
+ match "product" "(0x0101|0x0201|0x0301|0x0303|0x0304|0x0305|0x0401)";
action "kldload -n uslcom";
};
=20
@@ -3477,7 +3637,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x16d6";
- match "product" "(0x0001|0x0001)";
+ match "product" "0x0001";
action "kldload -n uslcom";
};
=20
@@ -3596,6 +3756,22 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1781";
+ match "product" "0x0c30";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
+ match "vendor" "0x17a8";
+ match "product" "(0x0001|0x0005)";
+ action "kldload -n uslcom";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x17f4";
match "product" "0xaaaa";
action "kldload -n uslcom";
@@ -3676,6 +3852,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1a79";
+ match "product" "0x6001";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1a86";
match "product" "0x7523";
action "kldload -n uchcom";
@@ -3693,7 +3877,7 @@
match "bus" "uhub[0-9]+";
match "mode" "host";
match "vendor" "0x1b3d";
- match "product" "0x0153";
+ match "product" "(0x0100|0x0101|0x0102|0x0103|0x0104|0x0105|0x0106|0x0107=
|0x0108|0x0109|0x010a|0x010b|0x010c|0x010d|0x010e|0x010f|0x0110|0x0111|0x01=
12|0x0113|0x0114|0x0115|0x0116|0x0117|0x0118|0x0119|0x011a|0x011b|0x011c|0x=
011d|0x011e|0x011f|0x0120|0x0121|0x0122|0x0123|0x0124|0x0125|0x0126|0x0128|=
0x0129|0x012a|0x012b|0x012d|0x012e|0x012f|0x0130|0x0131|0x0132|0x0133|0x013=
4|0x0135|0x0136|0x0137|0x0138|0x0139|0x013a|0x013b|0x013c|0x013d|0x013e|0x0=
13f|0x0140|0x0141|0x0142|0x0143|0x0144|0x0145|0x0146|0x0147|0x0148|0x0149|0=
x014a|0x014b|0x014c|0x014d|0x014e|0x014f|0x0150|0x0151|0x0152|0x0153|0x0159=
|0x015a|0x015b|0x015c|0x015d|0x015e|0x015f|0x0160|0x0161|0x0162|0x0163|0x01=
64|0x0165|0x0166|0x0167|0x0168|0x0169|0x016a|0x016b|0x016c|0x016d|0x016e|0x=
016f|0x0170|0x0171|0x0172|0x0173|0x0174|0x0175|0x0176|0x0177|0x0178|0x0179|=
0x017a|0x017b|0x017c|0x017d|0x017e|0x017f|0x0180|0x0181|0x0182|0x0183|0x018=
4|0x0185|0x0186|0x0187|0x0188|0x0189|0x018a|0x018b|0x018c|0x018d|0x018e|0x0=
18f|0x0190|0x0191|0x0192|0x0193|0x0194|0x0195|0x0196|0x0197|0x0198|0x0199|0=
x019a|0x019b|0x019c|0x019d|0x019e|0x019f|0x01a0|0x01a1|0x01a2|0x01a3|0x01a4=
|0x01a5|0x01a6|0x01a7|0x01a8|0x01a9|0x01aa|0x01ab|0x01ac|0x01ad|0x01ae|0x01=
af|0x01b0|0x01b1|0x01b2|0x01b3|0x01b4|0x01b5|0x01b6|0x01b7|0x01b8|0x01b9|0x=
01ba|0x01bb|0x01bc|0x01bd|0x01be|0x01bf|0x01c0|0x01c1|0x01c2|0x01c3|0x01c4|=
0x01c5|0x01c6|0x01c7|0x01c8|0x01c9|0x01ca|0x01cb|0x01cc|0x01cd|0x01ce|0x01c=
f|0x01d0|0x01d1|0x01d2|0x01d3|0x01d4|0x01d5|0x01d6|0x01d7|0x01d8|0x01d9|0x0=
1da|0x01db|0x01dc|0x01dd|0x01de|0x01df|0x01e0|0x01e1|0x01e2|0x01e3|0x01e4|0=
x01e5|0x01e6|0x01e7|0x01e8|0x01e9|0x01ea|0x01eb|0x01ec|0x01ed|0x01ee|0x01ef=
|0x01f0|0x01f1|0x01f2|0x01f3|0x01f4|0x01f5|0x01f6|0x01f7|0x01f8|0x01f9|0x01=
fa|0x01fb|0x01fc|0x01fd|0x01fe|0x01ff)";
action "kldload -n uftdi";
};
=20
@@ -3716,6 +3900,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1b91";
+ match "product" "0x0064";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1bbb";
match "product" "(0x0000|0xf000)";
action "kldload -n u3g";
@@ -3732,6 +3924,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1bc9";
+ match "product" "0x6001";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1be3";
match "product" "0x07a6";
action "kldload -n uslcom";
@@ -3740,6 +3940,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1c0c";
+ match "product" "0x0102";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1c9e";
match "product" "(0x6061|0x9603|0x9605|0xf000)";
action "kldload -n u3g";
@@ -3788,6 +3996,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x1e29";
+ match "product" "(0x0102|0x0501)";
+ action "kldload -n uslcom";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x1eda";
match "product" "0x2310";
action "kldload -n if_run";
@@ -3924,6 +4140,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x20b7";
+ match "product" "0x0713";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x20b8";
match "product" "0x8888";
action "kldload -n if_run";
@@ -3940,6 +4164,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x2100";
+ match "product" "(0x9e52|0x9e54)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x22b8";
match "product" "(0x4204|0x4214|0x4224|0x4234|0x4244)";
action "kldload -n uipaq";
@@ -3964,6 +4196,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x3195";
+ match "product" "(0xf190|0xf280|0xf281)";
+ action "kldload -n uslcom";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x3334";
match "product" "0x1701";
action "kldload -n if_aue";
@@ -4052,6 +4292,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0x5050";
+ match "product" "(0x0100|0x0101|0x0102|0x0103|0x0104|0x0105|0x0106|0x0107=
|0x0300|0x0301|0x0400|0x0500|0x0700|0x0800|0x0900|0x0a00|0x0b00|0x0c00|0x0d=
00|0x0e00|0x0f00|0x1000|0x8000|0x8001|0x8002|0x8003|0x8004|0x8005)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "vendor" "0x5173";
match "product" "0x1809";
action "kldload -n if_zyd";
@@ -4204,6 +4452,14 @@
nomatch 32 {
match "bus" "uhub[0-9]+";
match "mode" "host";
+ match "vendor" "0xdeee";
+ match "product" "(0x0300|0x0302|0x0303)";
+ action "kldload -n uftdi";
+};
+
+nomatch 32 {
+ match "bus" "uhub[0-9]+";
+ match "mode" "host";
match "intclass" "0x02";
match "intsubclass" "0x02";
match "intprotocol" "0x01";
@@ -4344,5 +4600,5 @@
action "kldload -n umass";
};
=20
-# 1654 USB entries processed
-
+# 2271 USB entries processed
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/games/fortune/datfiles/fortunes
--- a/head/games/fortune/datfiles/fortunes Mon Jul 30 11:44:18 2012 +0300
+++ b/head/games/fortune/datfiles/fortunes Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
This fortune brought to you by:
-$FreeBSD: head/games/fortune/datfiles/fortunes 228938 2011-12-28 22:18:53Z=
dougb $
+$FreeBSD: head/games/fortune/datfiles/fortunes 238879 2012-07-29 01:01:35Z=
dougb $
%
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
|| ||
@@ -22100,6 +22100,11 @@
world that they like, but catnip is crack from home.
-- Bill Cole
%
+I am only one, but I am one. I cannot do everything, but I can do
+something. And I will not let what I cannot do interfere with what
+I can do.
+ -- Edward Everett Hale, (1822 - 1909)
+%
I am professionally trained in computer science, which is to say
(in all seriousness) that I am extremely poorly educated.
-- Joseph Weizenbaum, "Computer Power and Human Reason"
@@ -31413,6 +31418,10 @@
%
Look out! Behind you!=07=07=07
%
+Look up and not down, look forward and not back, look out and not in,
+and lend a hand.
+ -- Edward Everett Hale, "Lowell Institute Lectures" (1869)
+%
Look, we play the Star Spangled Banner before every game. You want us
to pay income taxes, too?
-- Bill Veeck, Chicago White Sox
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/gnu/usr.bin/groff/tmac/mdoc.local
--- a/head/gnu/usr.bin/groff/tmac/mdoc.local Mon Jul 30 11:44:18 2012 +0300
+++ b/head/gnu/usr.bin/groff/tmac/mdoc.local Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/gnu/usr.bin/groff/tmac/mdoc.local 228351 2011-12-08 13:=
54:06Z ru $
+.\" $FreeBSD: head/gnu/usr.bin/groff/tmac/mdoc.local 238799 2012-07-26 11:=
10:25Z ru $
.\"
.\" %beginstrip%
.
@@ -42,6 +42,7 @@
.ds doc-str-Lb-libproc Processor Monitoring and Analysis Library (libp=
roc, \-lproc)
.ds doc-str-Lb-libprocstat Process and Files Information Retrieval (libpro=
cstat, \-lprocstat)
.ds doc-str-Lb-librtld_db Run-time Linker Debugging Library (librtld_db, =
\-lrtld_db)
+.ds doc-str-Lb-libstdthreads C11 Threads Library (libstdthreads, \-lstdthr=
eads)
.
.\" Default .Os value
.ds doc-default-operating-system FreeBSD\~10.0
@@ -49,6 +50,7 @@
.\" FreeBSD releases not found in doc-common
.ds doc-operating-system-FreeBSD-7.4 7.4
.ds doc-operating-system-FreeBSD-8.3 8.3
+.ds doc-operating-system-FreeBSD-9.1 9.1
.ds doc-operating-system-FreeBSD-10.0 10.0
.
.\" Definitions not (yet) in doc-syms
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/include/gssapi/gssapi.h
--- a/head/include/gssapi/gssapi.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/include/gssapi/gssapi.h Fri Aug 10 14:19:25 2012 +0300
@@ -25,21 +25,19 @@
* HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
- * $FreeBSD: head/include/gssapi/gssapi.h 229781 2012-01-07 16:10:15Z uqs $
+ * $FreeBSD: head/include/gssapi/gssapi.h 239061 2012-08-05 13:38:15Z dfr $
*/
=20
#ifndef _GSSAPI_GSSAPI_H_
#define _GSSAPI_GSSAPI_H_
=20
-/*
- * First, include stddef.h to get size_t defined.
- */
-#include <stddef.h>
+#include <sys/cdefs.h>
+#include <sys/_types.h>
=20
-/*
- * Include stdint.h to get explicitly sized data types.
- */
-#include <stdint.h>
+#ifndef _SIZE_T_DECLARED
+typedef __size_t size_t;
+#define _SIZE_T_DECLARED
+#endif
=20
#ifndef _SSIZE_T_DECLARED
typedef __ssize_t ssize_t;
@@ -67,7 +65,7 @@
* unsigned integer supported by the platform that has at least
* 32 bits of precision.
*/
-typedef uint32_t gss_uint32;
+typedef __uint32_t gss_uint32;
=20
=20
#ifdef OM_STRING
@@ -89,7 +87,7 @@
*/
=20
typedef gss_uint32 OM_uint32;
-typedef uint64_t OM_uint64;
+typedef __uint64_t OM_uint64;
=20
typedef struct gss_OID_desc_struct {
OM_uint32 length;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libarchive/Makefile
--- a/head/lib/libarchive/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libarchive/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/lib/libarchive/Makefile 233352 2012-03-23 11:18:07Z dim $
+# $FreeBSD: head/lib/libarchive/Makefile 238909 2012-07-30 14:47:35Z mm $
.include <bsd.own.mk>
=20
LIBARCHIVEDIR=3D ${.CURDIR}/../../contrib/libarchive
@@ -63,7 +63,10 @@
archive_entry_stat.c \
archive_entry_strmode.c \
archive_entry_xattr.c \
+ archive_getdate.c \
+ archive_match.c \
archive_options.c \
+ archive_pathmatch.c \
archive_ppmd7.c \
archive_rb.c \
archive_read.c \
@@ -106,6 +109,8 @@
archive_util.c \
archive_virtual.c \
archive_write.c \
+ archive_write_add_filter.c \
+ archive_write_disk_acl.c \
archive_write_disk_set_standard_lookup.c \
archive_write_disk_posix.c \
archive_write_open_fd.c \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libarchive/config_freebsd.h
--- a/head/lib/libarchive/config_freebsd.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libarchive/config_freebsd.h Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/lib/libarchive/config_freebsd.h 232153 2012-02-25 10:58:=
02Z mm $
+ * $FreeBSD: head/lib/libarchive/config_freebsd.h 238909 2012-07-30 14:47:=
35Z mm $
*/
=20
/* FreeBSD 5.0 and later have ACL and extattr support. */
@@ -31,10 +31,12 @@
#define HAVE_ACL_GET_LINK_NP 1
#define HAVE_ACL_GET_PERM_NP 1
#define HAVE_ACL_INIT 1
+#define HAVE_ACL_IS_TRIVIAL_NP 1
#define HAVE_ACL_PERMSET_T 1
#define HAVE_ACL_SET_FD 1
#define HAVE_ACL_SET_FD_NP 1
#define HAVE_ACL_SET_FILE 1
+#define HAVE_ACL_SET_LINK_NP 1
#define HAVE_ACL_USER 1
#define HAVE_EXTATTR_GET_FILE 1
#define HAVE_EXTATTR_LIST_FILE 1
@@ -129,7 +131,6 @@
#define HAVE_LSTAT 1
#define HAVE_LUTIMES 1
#define HAVE_MBRTOWC 1
-#define HAVE_MBSNRTOWCS 1
#define HAVE_MEMMOVE 1
#define HAVE_MEMORY_H 1
#define HAVE_MEMSET 1
@@ -206,7 +207,6 @@
#define HAVE_WCSCMP 1
#define HAVE_WCSCPY 1
#define HAVE_WCSLEN 1
-#define HAVE_WCSNRTOMBS 1
#define HAVE_WCTOMB 1
#define HAVE_WCTYPE_H 1
#define HAVE_WMEMCMP 1
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libarchive/test/Makefile
--- a/head/lib/libarchive/test/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libarchive/test/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/lib/libarchive/test/Makefile 232153 2012-02-25 10:58:02Z =
mm $
+# $FreeBSD: head/lib/libarchive/test/Makefile 238909 2012-07-30 14:47:35Z =
mm $
=20
LIBARCHIVEDIR=3D ${.CURDIR}/../../../contrib/libarchive
=20
@@ -19,13 +19,19 @@
=20
.PATH: ${LIBARCHIVEDIR}/libarchive/test
TESTS=3D \
- test_acl_freebsd.c \
+ test_acl_freebsd_nfs4.c \
+ test_acl_freebsd_posix1e.c \
test_acl_nfs4.c \
test_acl_pax.c \
test_acl_posix1e.c \
test_archive_api_feature.c \
test_archive_clear_error.c \
test_archive_crypto.c \
+ test_archive_getdate.c \
+ test_archive_match_time.c \
+ test_archive_match_owner.c \
+ test_archive_match_path.c \
+ test_archive_pathmatch.c \
test_archive_read_close_twice.c \
test_archive_read_close_twice_open_fd.c \
test_archive_read_close_twice_open_filename.c \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/gen/fts.c
--- a/head/lib/libc/gen/fts.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/gen/fts.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
#endif
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libc/gen/fts.c 235647 2012-05-19 12:44:27Z gl=
eb $");
+__FBSDID("$FreeBSD: head/lib/libc/gen/fts.c 238963 2012-08-01 00:21:55Z de=
lphij $");
=20
#include "namespace.h"
#include <sys/param.h>
@@ -134,9 +134,8 @@
}
=20
/* Allocate/initialize the stream. */
- if ((priv =3D malloc(sizeof(*priv))) =3D=3D NULL)
+ if ((priv =3D calloc(1, sizeof(*priv))) =3D=3D NULL)
return (NULL);
- memset(priv, 0, sizeof(*priv));
sp =3D &priv->ftsp_fts;
sp->fts_compar =3D compar;
sp->fts_options =3D options;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/gen/ftw.c
--- a/head/lib/libc/gen/ftw.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/gen/ftw.c Fri Aug 10 14:19:25 2012 +0300
@@ -21,14 +21,13 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libc/gen/ftw.c 223215 2011-06-18 00:29:10Z de=
lphij $");
+__FBSDID("$FreeBSD: head/lib/libc/gen/ftw.c 239151 2012-08-09 15:11:38Z ji=
lles $");
=20
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fts.h>
#include <ftw.h>
-#include <limits.h>
=20
int
ftw(const char *path, int (*fn)(const char *, const struct stat *, int),
@@ -40,7 +39,7 @@
int error =3D 0, fnflag, sverrno;
=20
/* XXX - nfds is currently unused */
- if (nfds < 1 || nfds > OPEN_MAX) {
+ if (nfds < 1) {
errno =3D EINVAL;
return (-1);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/gen/nftw.c
--- a/head/lib/libc/gen/nftw.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/gen/nftw.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $ */
+/* $OpenBSD: nftw.c,v 1.7 2006/03/31 19:41:44 millert Exp $ */
=20
/*
* Copyright (c) 2003, 2004 Todd C. Miller <Todd.Miller at courtesan.com>
@@ -20,21 +20,14 @@
* Materiel Command, USAF, under agreement number F39502-99-1-0512.
*/
=20
-#if 0
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] =3D "$OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 =
millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-#endif
-
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/lib/libc/gen/nftw.c 239160 2012-08-09 22:05:40Z j=
illes $");
=20
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fts.h>
#include <ftw.h>
-#include <limits.h>
=20
int
nftw(const char *path, int (*fn)(const char *, const struct stat *, int,
@@ -47,7 +40,7 @@
int error =3D 0, ftsflags, fnflag, postorder, sverrno;
=20
/* XXX - nfds is currently unused */
- if (nfds < 1 || nfds > OPEN_MAX) {
+ if (nfds < 1) {
errno =3D EINVAL;
return (-1);
}
@@ -72,6 +65,8 @@
continue;
fnflag =3D FTW_D;
break;
+ case FTS_DC:
+ continue;
case FTS_DNR:
fnflag =3D FTW_DNR;
break;
@@ -94,9 +89,6 @@
case FTS_SLNONE:
fnflag =3D FTW_SLN;
break;
- case FTS_DC:
- errno =3D ELOOP;
- /* FALLTHROUGH */
default:
error =3D -1;
goto done;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/Makefile.inc
--- a/head/lib/libc/locale/Makefile.inc Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/Makefile.inc Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
# from @(#)Makefile.inc 8.1 (Berkeley) 6/4/93
-# $FreeBSD: head/lib/libc/locale/Makefile.inc 238781 2012-07-25 22:17:44Z =
issyl0 $
+# $FreeBSD: head/lib/libc/locale/Makefile.inc 238919 2012-07-30 20:56:19Z =
issyl0 $
=20
# locale sources
.PATH: ${.CURDIR}/${LIBC_ARCH}/locale ${.CURDIR}/locale
@@ -47,6 +47,11 @@
=20
MLINKS+=3Dbtowc.3 wctob.3
MLINKS+=3Disdigit.3 isnumber.3
+MLINKS+=3Disgraph.3 isgraph_l.3
+MLINKS+=3Dislower.3 islower_l.3
+MLINKS+=3Dispunct.3 ispunct_l.3
+MLINKS+=3Disspace.3 isspace_l.3
+MLINKS+=3Dnl_langinfo.3 nl_langinfo_l.3
MLINKS+=3Diswalnum.3 iswalpha.3 iswalnum.3 iswascii.3 iswalnum.3 iswblank.=
3 \
iswalnum.3 iswcntrl.3 iswalnum.3 iswdigit.3 iswalnum.3 iswgraph.3 \
iswalnum.3 iswhexnumber.3 \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/isgraph.3
--- a/head/lib/libc/locale/isgraph.3 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/isgraph.3 Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)isgraph.3 8.2 (Berkeley) 12/11/93
-.\" $FreeBSD: head/lib/libc/locale/isgraph.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/isgraph.3 238919 2012-07-30 20:56:19Z i=
ssyl0 $
.\"
-.Dd July 17, 2005
+.Dd July 30, 2012
.Dt ISGRAPH 3
.Os
.Sh NAME
@@ -44,6 +44,8 @@
.In ctype.h
.Ft int
.Fn isgraph "int c"
+.Ft int
+.Fn isgraph_l "int c" "locale_t loc"
.Sh DESCRIPTION
The
.Fn isgraph
@@ -79,11 +81,19 @@
.It "\&166\ ``v''" Ta "167\ ``w''" Ta "170\ ``x''" Ta "171\ ``y''" Ta "172=
\ ``z''"
.It "\&173\ ``{''" Ta "174\ ``|''" Ta "175\ ``}''" Ta "176\ ``~''" Ta \&
.El
+.Pp
+The
+.Fn isgraph_l
+function takes an explicit locale argument, whereas the
+.Fn isgraph
+function uses the current global or per-thread locale.
.Sh RETURN VALUES
The
.Fn isgraph
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn isgraph_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
.Sh COMPATIBILITY
The
.Bx 4.4
@@ -103,3 +113,7 @@
.Fn isgraph
function conforms to
.St -isoC .
+The
+.Fn isgraph_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/islower.3
--- a/head/lib/libc/locale/islower.3 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/islower.3 Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)islower.3 8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: head/lib/libc/locale/islower.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/islower.3 238920 2012-07-30 21:02:44Z j=
oel $
.\"
-.Dd July 17, 2005
+.Dd July 30, 2012
.Dt ISLOWER 3
.Os
.Sh NAME
@@ -44,6 +44,8 @@
.In ctype.h
.Ft int
.Fn islower "int c"
+.Ft int
+.Fn islower_l "int c" "locale_t loc"
.Sh DESCRIPTION
The
.Fn islower
@@ -63,11 +65,18 @@
.It "\&165\ ``u''" Ta "166\ ``v''" Ta "167\ ``w''" Ta "170\ ``x''" Ta "171=
\ ``y''"
.It "\&172\ ``z''" Ta \& Ta \& Ta \& Ta \&
.El
+The
+.Fn islower_l
+function takes an explicit locale argument, whereas the
+.Fn islower
+function uses the current global or per-thread locale.
.Sh RETURN VALUES
The
.Fn islower
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn islower_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
.Sh COMPATIBILITY
The
.Bx 4.4
@@ -88,3 +97,7 @@
.Fn islower
function conforms to
.St -isoC .
+The
+.Fn islower_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/ispunct.3
--- a/head/lib/libc/locale/ispunct.3 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/ispunct.3 Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)ispunct.3 8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: head/lib/libc/locale/ispunct.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/ispunct.3 238919 2012-07-30 20:56:19Z i=
ssyl0 $
.\"
-.Dd July 17, 2005
+.Dd July 30, 2012
.Dt ISPUNCT 3
.Os
.Sh NAME
@@ -44,6 +44,8 @@
.In ctype.h
.Ft int
.Fn ispunct "int c"
+.Ft int
+.Fn ispunct_l "int c" "locale_t loc"
.Sh DESCRIPTION
The
.Fn ispunct
@@ -69,11 +71,19 @@
.It "\&136\ ``^''" Ta "137\ ``_''" Ta "140\ ```''" Ta "173\ ``{''" Ta "174=
\ ``|''"
.It "\&175\ ``}''" Ta "176\ ``~''" Ta \& Ta \& Ta \&
.El
+.Pp
+The
+.Fn ispunct_l
+function takes an explicit locale argument, whereas the
+.Fn ispunct
+function uses the current global or per-thread locale.
.Sh RETURN VALUES
The
.Fn ispunct
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn ispunct_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
.Sh COMPATIBILITY
The
.Bx 4.4
@@ -93,3 +103,7 @@
.Fn ispunct
function conforms to
.St -isoC .
+The
+.Fn ispunct_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/isspace.3
--- a/head/lib/libc/locale/isspace.3 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/isspace.3 Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)isspace.3 8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: head/lib/libc/locale/isspace.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/isspace.3 238919 2012-07-30 20:56:19Z i=
ssyl0 $
.\"
-.Dd July 17, 2005
+.Dd July 30, 2012
.Dt ISSPACE 3
.Os
.Sh NAME
@@ -44,6 +44,8 @@
.In ctype.h
.Ft int
.Fn isspace "int c"
+.Ft int
+.Fn isspace_l "int c" "locale_t loc"
.Sh DESCRIPTION
The
.Fn isspace
@@ -60,11 +62,19 @@
.Vt "unsigned char"
or the value of
.Dv EOF .
+.Pp
+The
+.Fn isspace_l
+function takes an explicit locale argument, whereas the
+.Fn isspace
+function uses the current global or per-thread locale.
.Sh RETURN VALUES
The
.Fn isspace
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn isspace_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
.Sh COMPATIBILITY
The
.Bx 4.4
@@ -85,3 +95,7 @@
.Fn isspace
function conforms to
.St -isoC .
+The
+.Fn isspace_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/nl_langinfo.3
--- a/head/lib/libc/locale/nl_langinfo.3 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/nl_langinfo.3 Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
+.\" $FreeBSD: head/lib/libc/locale/nl_langinfo.3 238919 2012-07-30 20:56:1=
9Z issyl0 $
.\"
-.Dd May 3, 2001
+.Dd July 30, 2012
.Dt NL_LANGINFO 3
.Os
.Sh NAME
@@ -36,11 +36,16 @@
.In langinfo.h
.Ft char *
.Fn nl_langinfo "nl_item item"
+.Ft char *
+.Fn nl_langinfo_l "nl_item item" "locale_t loc"
.Sh DESCRIPTION
The
.Fn nl_langinfo
function returns a pointer to a string containing information relevant to
-the particular language or cultural area defined in the program's locale.
+the particular language or cultural area defined in the program or thread's
+locale, or in the case of
+.Fn nl_langinfo_l ,
+the locale passed as the second argument.
The manifest constant names and values of
.Fa item
are defined in
@@ -60,6 +65,9 @@
returns a pointer to the corresponding string in the
.Tn POSIX
locale.
+.Fn nl_langinfo_l
+returns the same values as
+.Fn nl_langinfo .
In all locales,
.Fn nl_langinfo
returns a pointer to an empty string if
@@ -83,6 +91,10 @@
.Fn nl_langinfo
function conforms to
.St -susv2 .
+The
+.Fn nl_langinfo_l
+function conforms to
+.St -p1003.1-2008 .
.Sh HISTORY
The
.Fn nl_langinfo
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libedit/el.c
--- a/head/lib/libedit/el.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libedit/el.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
static char sccsid[] =3D "@(#)el.c 8.2 (Berkeley) 1/3/94";
#endif /* not lint && not SCCSID */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libedit/el.c 237448 2012-06-22 18:01:22Z pfg =
$");
+__FBSDID("$FreeBSD: head/lib/libedit/el.c 238810 2012-07-26 15:48:07Z pfg =
$");
=20
/*
* el.c: EditLine interface functions
@@ -473,30 +473,6 @@
return (rv);
}
=20
-/* el_data_get():
- * Set user private data.
- */
-public void
-el_data_set (el, data)
- EditLine *el;
- void *data;
-{
- el->el_data =3D data;
-
- return;
-}
-
-/* el_data_get():
- * Return user private data.
- */
-public void *
-el_data_get (el)
- EditLine *el;
-{
- if (el->el_data)
- return (el->el_data);
- return (NULL);
-}
=20
/* el_line():
* Return editing info
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libedit/histedit.h
--- a/head/lib/libedit/histedit.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libedit/histedit.h Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*
* @(#)histedit.h 8.2 (Berkeley) 1/3/94
* $NetBSD: histedit.h,v 1.32 2007/06/10 20:20:28 christos Exp $
- * $FreeBSD: head/lib/libedit/histedit.h 237448 2012-06-22 18:01:22Z pfg $
+ * $FreeBSD: head/lib/libedit/histedit.h 238810 2012-07-26 15:48:07Z pfg $
*/
=20
/*
@@ -154,13 +154,6 @@
*/
void el_resize(EditLine *);
=20
-
-/*
- * Set user private data.
- */
-void el_data_set(EditLine *, void *);
-void * el_data_get(EditLine *);
-
/*
* User-defined function interface.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libedit/term.c
--- a/head/lib/libedit/term.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libedit/term.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
static char sccsid[] =3D "@(#)term.c 8.2 (Berkeley) 4/30/95";
#endif /* not lint && not SCCSID */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libedit/term.c 237448 2012-06-22 18:01:22Z pf=
g $");
+__FBSDID("$FreeBSD: head/lib/libedit/term.c 238810 2012-07-26 15:48:07Z pf=
g $");
=20
/*
* term.c: Editor/termcap-curses interface
@@ -340,8 +340,8 @@
if (el->el_term.t_val =3D=3D NULL)
return (-1);
(void) memset(el->el_term.t_val, 0, T_val * sizeof(int));
+ (void) term_set(el, NULL);
term_init_arrow(el);
- (void) term_set(el, NULL);
return (0);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libpam/modules/pam_krb5/pam_k=
rb5.c
--- a/head/lib/libpam/modules/pam_krb5/pam_krb5.c Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/lib/libpam/modules/pam_krb5/pam_krb5.c Fri Aug 10 14:19:25 2012 =
+0300
@@ -48,7 +48,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_krb5/pam_krb5.c 233406 201=
2-03-24 01:02:03Z stas $");
+__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_krb5/pam_krb5.c 239099 201=
2-08-06 18:40:14Z dim $");
=20
#include <sys/types.h>
#include <sys/stat.h>
@@ -91,6 +91,7 @@
#define PAM_OPT_NO_CCACHE "no_ccache"
#define PAM_OPT_NO_USER_CHECK "no_user_check"
#define PAM_OPT_REUSE_CCACHE "reuse_ccache"
+#define PAM_OPT_NO_USER_CHECK "no_user_check"
=20
#define PAM_LOG_KRB5_ERR(ctx, rv, fmt, ...) \
do { \
@@ -218,10 +219,12 @@
PAM_LOG("PAM_USER Redone");
}
=20
- pwd =3D getpwnam(user);
- if (pwd =3D=3D NULL) {
- retval =3D PAM_USER_UNKNOWN;
- goto cleanup2;
+ if (!openpam_get_option(pamh, PAM_OPT_NO_USER_CHECK)) {
+ pwd =3D getpwnam(user);
+ if (pwd =3D=3D NULL) {
+ retval =3D PAM_USER_UNKNOWN;
+ goto cleanup2;
+ }
}
=20
PAM_LOG("Done getpwnam()");
@@ -335,11 +338,11 @@
PAM_LOG("Done cleanup");
cleanup2:
krb5_free_principal(pam_context, princ);
- PAM_LOG("Done cleanup2");
-cleanup3:
if (princ_name)
free(princ_name);
+ PAM_LOG("Done cleanup2");
=20
+cleanup3:
krb5_free_context(pam_context);
=20
PAM_LOG("Done cleanup3");
@@ -802,11 +805,11 @@
PAM_LOG("Done cleanup");
cleanup2:
krb5_free_principal(pam_context, princ);
- PAM_LOG("Done cleanup2");
-cleanup3:
if (princ_name)
free(princ_name);
+ PAM_LOG("Done cleanup2");
=20
+cleanup3:
krb5_free_context(pam_context);
=20
PAM_LOG("Done cleanup3");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libpam/modules/pam_unix/pam_u=
nix.c
--- a/head/lib/libpam/modules/pam_unix/pam_unix.c Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/lib/libpam/modules/pam_unix/pam_unix.c Fri Aug 10 14:19:25 2012 =
+0300
@@ -35,7 +35,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_unix/pam_unix.c 227105 201=
1-11-05 10:00:29Z ed $");
+__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_unix/pam_unix.c 239100 201=
2-08-06 18:44:59Z dim $");
=20
#include <sys/param.h>
#include <sys/socket.h>
@@ -94,13 +94,13 @@
const char *pass, *user, *realpw, *prompt;
=20
if (openpam_get_option(pamh, PAM_OPT_AUTH_AS_SELF)) {
- pwd =3D getpwnam(getlogin());
+ user =3D getlogin();
} else {
retval =3D pam_get_user(pamh, &user, NULL);
if (retval !=3D PAM_SUCCESS)
return (retval);
- pwd =3D getpwnam(user);
}
+ pwd =3D getpwnam(user);
=20
PAM_LOG("Got user: %s", user);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/msun/ld128/s_expl.c
--- a/head/lib/msun/ld128/s_expl.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/msun/ld128/s_expl.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,17 +25,17 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/msun/ld128/s_expl.c 238722 2012-07-23 19:13:5=
5Z kargl $");
+__FBSDID("$FreeBSD: head/lib/msun/ld128/s_expl.c 238923 2012-07-30 21:55:4=
9Z kargl $");
=20
#include <float.h>
=20
+#include "fpmath.h"
#include "math.h"
#include "math_private.h"
-#include "fpmath.h"
=20
#define BIAS (LDBL_MAX_EXP - 1)
-#define EXPMASK (BIAS + LDBL_MAX_EXP)
=20
+/* XXX Prevent gcc from erroneously constant folding this: */
static volatile const long double twom10000 =3D 0x1p-10000L, tiny =3D 0x1p=
-10000L;
=20
static const long double
@@ -58,12 +58,12 @@
P10 =3D 2.75573236172670046201884000197885520e-7L,
P11 =3D 2.50517544183909126492878226167697856e-8L;
=20
-#define NUM 128
+#define INTERVALS 128
=20
static const struct {
long double hi;
long double lo;
-} s[NUM] =3D {
+} s[INTERVALS] =3D {
0x1p0L, 0x0p0L,
0x1.0163da9fb33356d84a66aep0L, 0x3.36dcdfa4003ec04c360be2404078p-92L,
0x1.02c9a3e778060ee6f7cacap0L, 0x4.f7a29bde93d70a2cabc5cb89ba10p-92L,
@@ -205,7 +205,7 @@
/* Filter out exceptional cases. */
u.e =3D x;
hx =3D u.xbits.expsign;
- ix =3D hx & EXPMASK;
+ ix =3D hx & 0x7fff;
if (ix >=3D BIAS + 13) { /* |x| >=3D 8192 or x is NaN */
if (ix =3D=3D BIAS + LDBL_MAX_EXP) {
if (u.xbits.manh !=3D 0
@@ -227,8 +227,8 @@
=20
fn =3D x * INV_L + 0x1.8p112 - 0x1.8p112;
n =3D (int)fn;
- n2 =3D (unsigned)n % NUM; /* Tang's j. */
- k =3D (n - n2) / NUM;
+ n2 =3D (unsigned)n % INTERVALS; /* Tang's j. */
+ k =3D (n - n2) / INTERVALS;
r1 =3D x - fn * L1;
r2 =3D -fn * L2;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/msun/ld80/s_expl.c
--- a/head/lib/msun/ld80/s_expl.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/msun/ld80/s_expl.c Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/msun/ld80/s_expl.c 238722 2012-07-23 19:13:55=
Z kargl $");
+__FBSDID("$FreeBSD: head/lib/msun/ld80/s_expl.c 238923 2012-07-30 21:55:49=
Z kargl $");
=20
/*
* Compute the exponential of x for Intel 80-bit format. This is based on:
@@ -36,7 +36,7 @@
* in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 15,
* 144-157 (1989).
*
- * where the 32 table entries have been expanded to NUM (see below).
+ * where the 32 table entries have been expanded to INTERVALS (see below).
*/
=20
#include <float.h>
@@ -45,13 +45,9 @@
#include <ieeefp.h>
#endif
=20
+#include "fpmath.h"
#include "math.h"
-#define FPSETPREC
-#ifdef NO_FPSETPREC
-#undef FPSETPREC
-#endif
#include "math_private.h"
-#include "fpmath.h"
=20
#define BIAS (LDBL_MAX_EXP - 1)
=20
@@ -69,9 +65,9 @@
=20
static const double __aligned(64)
/*
- * ln2/NUM =3D L1+L2 (hi+lo decomposition for multiplication). L1 must ha=
ve
- * at least 22 (=3D log2(|LDBL_MIN_EXP-extras|) + log2(NUM)) lowest bits z=
ero
- * so that multiplication of it by n is exact.
+ * ln2/INTERVALS =3D L1+L2 (hi+lo decomposition for multiplication). L1 m=
ust
+ * have at least 22 (=3D log2(|LDBL_MIN_EXP-extras|) + log2(INTERVALS)) lo=
west
+ * bits zero so that multiplication of it by n is exact.
*/
L1 =3D 5.4152123484527692e-3, /* 0x162e42ff000000.0p-60 */
L2 =3D -3.2819649005320973e-13, /* -0x1718432a1b0e26.0p-94 */
@@ -79,7 +75,7 @@
/*
* Domain [-0.002708, 0.002708], range ~[-5.7136e-24, 5.7110e-24]:
* |exp(x) - p(x)| < 2**-77.2
- * (0.002708 is ln2/(2*NUM) rounded up a little).
+ * (0.002708 is ln2/(2*INTERVALS) rounded up a little).
*/
P2 =3D 0.5,
P3 =3D 1.6666666666666119e-1, /* 0x15555555555490.0p-55 */
@@ -88,16 +84,16 @@
P6 =3D 1.3888891738560272e-3; /* 0x16c16c651633ae.0p-62 */
=20
/*
- * 2^(i/NUM) for i in [0,NUM] is represented by two values where the
- * first 47 (?!) bits of the significand is stored in hi and the next 53
+ * 2^(i/INTERVALS) for i in [0,INTERVALS] is represented by two values whe=
re
+ * the first 47 (?!) bits of the significand is stored in hi and the next =
53
* bits are in lo.
*/
-#define NUM 128
+#define INTERVALS 128
=20
static const struct {
double hi;
double lo;
-} s[NUM] __aligned(16) =3D {
+} s[INTERVALS] __aligned(16) =3D {
0x1p+0, 0x0p+0,
0x1.0163da9fb330p+0, 0x1.ab6c25335719bp-47,
0x1.02c9a3e77804p+0, 0x1.07737be56527cp-47,
@@ -269,8 +265,8 @@
#else
n =3D (int)fn;
#endif
- n2 =3D (unsigned)n % NUM; /* Tang's j. */
- k =3D (n - n2) / NUM;
+ n2 =3D (unsigned)n % INTERVALS; /* Tang's j. */
+ k =3D (n - n2) / INTERVALS;
r1 =3D x - fn * L1;
r2 =3D -fn * L2;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/msun/src/s_cbrtl.c
--- a/head/lib/msun/src/s_cbrtl.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/msun/src/s_cbrtl.c Fri Aug 10 14:19:25 2012 +0300
@@ -15,10 +15,12 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/lib/msun/src/s_cbrtl.c 238924 2012-07-30 21:58:28=
Z kargl $");
=20
#include <float.h>
+#ifdef __i386__
#include <ieeefp.h>
+#endif
=20
#include "fpmath.h" =20
#include "math.h"
@@ -51,23 +53,11 @@
if (k =3D=3D BIAS + LDBL_MAX_EXP)
return (x + x);
=20
-#ifdef __i386__
- fp_prec_t oprec;
-
- oprec =3D fpgetprec();
- if (oprec !=3D FP_PE)
- fpsetprec(FP_PE);
-#endif
-
+ ENTERI();
if (k =3D=3D 0) {
/* If x =3D +-0, then cbrt(x) =3D +-0. */
- if ((u.bits.manh | u.bits.manl) =3D=3D 0) {
-#ifdef __i386__
- if (oprec !=3D FP_PE)
- fpsetprec(oprec);
-#endif
- return (x);
- }
+ if ((u.bits.manh | u.bits.manl) =3D=3D 0)
+ RETURNI(x);
/* Adjust subnormal numbers. */
u.e *=3D 0x1.0p514;
k =3D u.bits.exp;
@@ -149,9 +139,5 @@
t=3Dt+t*r; /* error <=3D 0.5 + 0.5/3 + epsilon */
=20
t *=3D v.e;
-#ifdef __i386__
- if (oprec !=3D FP_PE)
- fpsetprec(oprec);
-#endif
- return (t);
+ RETURNI(t);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/libexec/rtld-elf/arm/rtld_start.S
--- a/head/libexec/rtld-elf/arm/rtld_start.S Mon Jul 30 11:44:18 2012 +0300
+++ b/head/libexec/rtld-elf/arm/rtld_start.S Fri Aug 10 14:19:25 2012 +0300
@@ -30,13 +30,15 @@
*/
=20
#include <machine/asm.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/libexec/rtld-elf/arm/rtld_start.S 239031 2012-08-=
04 05:30:20Z andrew $");
=20
.text
.align 0
.globl .rtld_start
.type .rtld_start,%function
.rtld_start:
+ mov r6, sp /* save the stack pointer */
+ bic sp, sp, #7 /* align the stack pointer */
sub sp, sp, #8 /* make room for obj_main & exit proc */
mov r4, r0 /* save ps_strings */
ldr sl, .L2
@@ -52,13 +54,13 @@
bl _rtld_relocate_nonplt_self
mov r1, sp
add r2, sp, #4
- add r0, sp, #8
+ mov r0, r6 /* load the sp the kernel gave us */
bl _rtld /* call the shared loader */
mov r3, r0 /* save entry point */
=20
ldr r2, [sp, #0] /* r2 =3D cleanup */
ldr r1, [sp, #4] /* r1 =3D obj_main */
- add sp, sp, #8 /* restore stack */
+ mov sp, r6 /* restore stack */
mov r0, r4 /* restore ps_strings */
mov pc, r3 /* jump to the entry point */
.L2:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/libexec/rtld-elf/map_object.c
--- a/head/libexec/rtld-elf/map_object.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/libexec/rtld-elf/map_object.c Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/libexec/rtld-elf/map_object.c 237058 2012-06-14 11:20:22=
Z kib $
+ * $FreeBSD: head/libexec/rtld-elf/map_object.c 239019 2012-08-03 17:04:41=
Z kan $
*/
=20
#include <sys/param.h>
@@ -153,7 +153,6 @@
break;
note_start =3D (Elf_Addr)(char *)hdr + phdr->p_offset;
note_end =3D note_start + phdr->p_filesz;
- digest_notes(obj, note_start, note_end);
break;
}
=20
@@ -291,7 +290,8 @@
obj->stack_flags =3D stack_flags;
obj->relro_page =3D obj->relocbase + trunc_page(relro_page);
obj->relro_size =3D round_page(relro_size);
-
+ if (note_start < note_end)
+ digest_notes(obj, note_start, note_end);
munmap(hdr, PAGE_SIZE);
return (obj);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/rescue/rescue/Makefile
--- a/head/rescue/rescue/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/rescue/rescue/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-#$FreeBSD: head/rescue/rescue/Makefile 231642 2012-02-14 07:14:42Z rmh $
+#$FreeBSD: head/rescue/rescue/Makefile 238926 2012-07-30 23:14:24Z mm $
# @(#)Makefile 8.1 (Berkeley) 6/2/93
=20
NO_MAN=3D
@@ -123,7 +123,7 @@
CRUNCH_LIBS+=3D -lipx
.endif
.if ${MK_ZFS} !=3D "no"
-CRUNCH_LIBS+=3D -lavl -lnvpair -lzfs -lpthread -luutil -lumem
+CRUNCH_LIBS+=3D -lavl -lzfs -lnvpair -lpthread -luutil -lumem
.endif
CRUNCH_LIBS+=3D -lgeom -lbsdxml -lkiconv -lmd -lsbuf -lufs -lz
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/camcontrol/camcontrol.c
--- a/head/sbin/camcontrol/camcontrol.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/camcontrol/camcontrol.c Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/camcontrol/camcontrol.c 237452 2012-06-22 18=
:57:06Z ken $");
+__FBSDID("$FreeBSD: head/sbin/camcontrol/camcontrol.c 239059 2012-08-05 12=
:16:11Z dim $");
=20
#include <sys/ioctl.h>
#include <sys/stdint.h>
@@ -4464,7 +4464,7 @@
smpcmd(struct cam_device *device, int argc, char **argv, char *combinedopt,
int retry_count, int timeout)
{
- int c, error;
+ int c, error =3D 0;
union ccb *ccb;
uint8_t *smp_request =3D NULL, *smp_response =3D NULL;
int request_size =3D 0, response_size =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/fsck_ffs/suj.c
--- a/head/sbin/fsck_ffs/suj.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/fsck_ffs/suj.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/fsck_ffs/suj.c 236976 2012-06-12 21:37:27Z k=
ib $");
+__FBSDID("$FreeBSD: head/sbin/fsck_ffs/suj.c 238984 2012-08-02 10:39:54Z k=
ib $");
=20
#include <sys/param.h>
#include <sys/disk.h>
@@ -2383,7 +2383,7 @@
return (-1);
}
=20
- if (DIP(ip, di_size) < SUJ_MIN || DIP(ip, di_size) > SUJ_MAX) {
+ if (DIP(ip, di_size) < SUJ_MIN) {
printf("Invalid size %jd for journal inode %d\n",
DIP(ip, di_size), sujino);
return (-1);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/multipath/geom_mu=
ltipath.c
--- a/head/sbin/geom/class/multipath/geom_multipath.c Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sbin/geom/class/multipath/geom_multipath.c Fri Aug 10 14:19:25 2=
012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/geom/class/multipath/geom_multipath.c 234415=
2012-04-18 09:42:14Z mav $");
+__FBSDID("$FreeBSD: head/sbin/geom/class/multipath/geom_multipath.c 239012=
2012-08-03 14:55:35Z thomas $");
#include <sys/param.h>
#include <errno.h>
#include <paths.h>
@@ -49,6 +49,7 @@
static void mp_main(struct gctl_req *, unsigned int);
static void mp_label(struct gctl_req *);
static void mp_clear(struct gctl_req *);
+static void mp_prefer(struct gctl_req *);
=20
struct g_command class_commands[] =3D {
{
@@ -87,6 +88,10 @@
"[-v] name prov"
},
{
+ "prefer", G_FLAG_VERBOSE, mp_main, G_NULL_OPTS,
+ "[-v] prov ..."
+ },
+ {
"fail", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
"[-v] name prov"
},
@@ -131,6 +136,8 @@
mp_label(req);
} else if (strcmp(name, "clear") =3D=3D 0) {
mp_clear(req);
+ } else if (strcmp(name, "prefer") =3D=3D 0) {
+ mp_prefer(req);
} else {
gctl_error(req, "Unknown command: %s.", name);
}
@@ -294,3 +301,22 @@
}
}
=20
+static void
+mp_prefer(struct gctl_req *req)
+{
+ const char *name, *comp, *errstr;
+ int nargs;
+
+ nargs =3D gctl_get_int(req, "nargs");
+ if (nargs !=3D 2) {
+ gctl_error(req, "Usage: prefer GEOM PROVIDER");
+ return;
+ }
+ name =3D gctl_get_ascii(req, "arg0");
+ comp =3D gctl_get_ascii(req, "arg1");
+ errstr =3D gctl_issue (req);
+ if (errstr !=3D NULL) {
+ fprintf(stderr, "Can't set %s preferred provider to %s: %s.\n",
+ name, comp, errstr);
+ }
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/multipath/gmultip=
ath.8
--- a/head/sbin/geom/class/multipath/gmultipath.8 Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/sbin/geom/class/multipath/gmultipath.8 Fri Aug 10 14:19:25 2012 =
+0300
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/sbin/geom/class/multipath/gmultipath.8 234415 2012-04-1=
8 09:42:14Z mav $
+.\" $FreeBSD: head/sbin/geom/class/multipath/gmultipath.8 239012 2012-08-0=
3 14:55:35Z thomas $
.\"
.Dd April 18, 2012
.Dt GMULTIPATH 8
@@ -66,6 +66,11 @@
.Op Fl v
.Ar name
.Nm
+.Cm prefer
+.Op Fl v
+.Ar name
+.Ar prov
+.Nm
.Cm getactive
.Op Fl v
.Ar name
@@ -171,7 +176,9 @@
Mark specified provider as a path of the specified multipath device as
operational, allowing it to handle requests.
.It Cm rotate
-Change the active provider/path in Active/Passive mode.
+Change the active provider/path to the next available provider in Active/P=
assive mode.
+.It Cm prefer
+Change the active provider/path to the specified provider in Active/Passiv=
e mode.
.It Cm getactive
Get the currently active provider(s)/path(s).
.It Cm destroy
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/sched/gsched.8
--- a/head/sbin/geom/class/sched/gsched.8 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/geom/class/sched/gsched.8 Fri Aug 10 14:19:25 2012 +0300
@@ -23,9 +23,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/sbin/geom/class/sched/gsched.8 233458 2012-03-25 09:21:=
09Z joel $
+.\" $FreeBSD: head/sbin/geom/class/sched/gsched.8 238899 2012-07-30 10:14:=
37Z joel $
.\"
-.Dd August 29, 2010
+.Dd July 26, 2012
.Dt GSCHED 8
.Os
.Sh NAME
@@ -135,19 +135,19 @@
Exit status is 0 on success, and 1 if the command fails.
.Sh EXAMPLES
The following example shows how to create a scheduling provider for disk
-.Pa /dev/ad0 ,
+.Pa /dev/ada0 ,
and how to destroy it.
.Bd -literal -offset indent
# Load the geom_sched module:
kldload geom_sched
# Load some scheduler classes used by geom_sched:
kldload gsched_rr
-# Configure device ad0 to use scheduler "rr":
-geom sched insert -a rr ad0
-# Now provider ad0 uses the "rr" algorithm;
-# the new geom is ad0.sched.
+# Configure device ada0 to use scheduler "rr":
+geom sched insert -a rr ada0
+# Now provider ada0 uses the "rr" algorithm;
+# the new geom is ada0.sched.
# Remove the scheduler on the device:
-geom sched destroy -v ad0.sched.
+geom sched destroy -v ada0.sched.
.Ed
.Sh SEE ALSO
.Xr geom 4 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/virstor/gvirstor.8
--- a/head/sbin/geom/class/virstor/gvirstor.8 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/geom/class/virstor/gvirstor.8 Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/sbin/geom/class/virstor/gvirstor.8 235873 2012-05-24 02=
:24:03Z wblock $
+.\" $FreeBSD: head/sbin/geom/class/virstor/gvirstor.8 239022 2012-08-03 20=
:30:40Z jimharris $
.\"
-.Dd January 24, 2011
+.Dd August 3, 2012
.Dt GVIRSTOR 8
.Os
.Sh NAME
@@ -43,6 +43,10 @@
.Op Fl fv
.Ar name ...
.Nm
+.Cm destroy
+.Op Fl fv
+.Ar name ...
+.Nm
.Cm add
.Op Fl vh
.Ar name prov ...
@@ -107,6 +111,9 @@
.Ar name .
This command does not touch on-disk metadata.
As with other GEOM classes, stopped geoms cannot be started manually.
+.It Cm destroy
+Same as
+.Cm stop.
.It Cm add
Adds new components to existing virtual device with the given
.Ar name .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ggate/shared/ggate.h
--- a/head/sbin/ggate/shared/ggate.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ggate/shared/ggate.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: head/sbin/ggate/shared/ggate.h 239106 2012-08-06 21:02:40Z di=
m $
*/
=20
#ifndef _GGATE_H_
@@ -95,8 +95,8 @@
=20
void g_gate_vlog(int priority, const char *message, va_list ap);
void g_gate_log(int priority, const char *message, ...);
-void g_gate_xvlog(const char *message, va_list ap);
-void g_gate_xlog(const char *message, ...);
+void g_gate_xvlog(const char *message, va_list ap) __dead2;
+void g_gate_xlog(const char *message, ...) __dead2;
off_t g_gate_mediasize(int fd);
unsigned g_gate_sectorsize(int fd);
void g_gate_open_device(void);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ipfw/dummynet.c
--- a/head/sbin/ipfw/dummynet.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ipfw/dummynet.c Fri Aug 10 14:19:25 2012 +0300
@@ -10,7 +10,7 @@
*
* This software is provided ``AS IS'' without any warranties of any kind.
*
- * $FreeBSD: head/sbin/ipfw/dummynet.c 232347 2012-03-01 17:35:16Z luigi $
+ * $FreeBSD: head/sbin/ipfw/dummynet.c 238900 2012-07-30 10:55:23Z luigi $
*
* dummynet support
*/
@@ -759,7 +759,8 @@
void
ipfw_config_pipe(int ac, char **av)
{
- int i, j;
+ int i;
+ u_int j;
char *end;
struct dn_id *buf, *base;
struct dn_sch *sch =3D NULL;
@@ -1282,8 +1283,8 @@
av--;
}
if (v[1] < v[0] ||
- v[1] < 0 || v[1] >=3D DN_MAX_ID-1 ||
- v[0] < 0 || v[1] >=3D DN_MAX_ID-1) {
+ v[1] >=3D DN_MAX_ID-1 ||
+ v[1] >=3D DN_MAX_ID-1) {
continue; /* invalid entry */
}
n++;
@@ -1310,11 +1311,12 @@
dummynet_list(int ac, char *av[], int show_counters)
{
struct dn_id *oid, *x =3D NULL;
- int ret, i, l;
+ int ret, i;
int n; /* # of ranges */
- int buflen;
- int max_size; /* largest obj passed up */
+ u_int buflen, l;
+ u_int max_size; /* largest obj passed up */
=20
+ (void)show_counters; // XXX unused, but we should use it.
ac--;
av++; /* skip 'list' | 'show' word */
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ipfw/ipfw2.c
--- a/head/sbin/ipfw/ipfw2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ipfw/ipfw2.c Fri Aug 10 14:19:25 2012 +0300
@@ -17,7 +17,7 @@
*
* NEW command line interface for IP firewall facility
*
- * $FreeBSD: head/sbin/ipfw/ipfw2.c 233478 2012-03-25 20:37:59Z melifaro $
+ * $FreeBSD: head/sbin/ipfw/ipfw2.c 238903 2012-07-30 11:02:22Z luigi $
*/
=20
#include <sys/types.h>
@@ -412,7 +412,7 @@
* and calls setsockopt().
* Function returns 0 on success or -1 otherwise.
*/
-int
+static int
do_setcmd3(int optname, void *optval, socklen_t optlen)
{
socklen_t len;
@@ -976,8 +976,9 @@
#define HAVE_OPTIONS 0x8000
=20
static void
-show_prerequisites(int *flags, int want, int cmd __unused)
+show_prerequisites(int *flags, int want, int cmd)
{
+ (void)cmd; /* UNUSED */
if (co.comment_only)
return;
if ( (*flags & HAVE_IP) =3D=3D HAVE_IP)
@@ -3930,6 +3931,7 @@
uint32_t a, type, mask, addrlen;
uint32_t tables_max;
=20
+ mask =3D 0; // XXX uninitialized ?
len =3D sizeof(tables_max);
if (sysctlbyname("net.inet.ip.fw.tables_max", &tables_max, &len,
NULL, 0) =3D=3D -1)
@@ -4135,7 +4137,7 @@
if (sz < xent->len)
break;
sz -=3D xent->len;
- xent =3D (void *)xent + xent->len;
+ xent =3D (ipfw_table_xentry *)((char *)xent + xent->len);
}
=20
free(tbl);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ipfw/nat.c
--- a/head/sbin/ipfw/nat.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ipfw/nat.c Fri Aug 10 14:19:25 2012 +0300
@@ -17,7 +17,7 @@
*
* NEW command line interface for IP firewall facility
*
- * $FreeBSD: head/sbin/ipfw/nat.c 227901 2011-11-23 18:38:08Z glebius $
+ * $FreeBSD: head/sbin/ipfw/nat.c 238900 2012-07-30 10:55:23Z luigi $
*
* In-kernel nat support
*/
@@ -318,6 +318,7 @@
char *sep =3D **av;
u_int c =3D 0;
=20
+ (void)ac; /* UNUSED */
while ((sep =3D strchr(sep, ',')) !=3D NULL) {
c++;
sep++;
@@ -379,6 +380,7 @@
char *sep =3D **av;
u_int c =3D 0;
=20
+ (void)ac; /* UNUSED */
while ((sep =3D strchr(sep, ',')) !=3D NULL) {
c++;
sep++;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/md5/Makefile
--- a/head/sbin/md5/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/md5/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,15 +1,17 @@
# @(#)Makefile 8.1 (Berkeley) 6/9/93
-# $FreeBSD$
+# $FreeBSD: head/sbin/md5/Makefile 238964 2012-08-01 00:36:12Z delphij $
=20
PROG=3D md5
=20
LINKS=3D ${BINDIR}/md5 ${BINDIR}/rmd160 \
${BINDIR}/md5 ${BINDIR}/sha1 \
- ${BINDIR}/md5 ${BINDIR}/sha256
+ ${BINDIR}/md5 ${BINDIR}/sha256 \
+ ${BINDIR}/md5 ${BINDIR}/sha512
=20
MLINKS=3D md5.1 rmd160.1 \
md5.1 sha1.1 \
- md5.1 sha256.1
+ md5.1 sha256.1 \
+ md5.1 sha512.1
=20
WFORMAT?=3D 1
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/md5/md5.1
--- a/head/sbin/md5/md5.1 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/md5/md5.1 Fri Aug 10 14:19:25 2012 +0300
@@ -1,9 +1,9 @@
-.\" $FreeBSD: head/sbin/md5/md5.1 235211 2012-05-10 02:07:00Z gjb $
-.Dd September 7, 2008
+.\" $FreeBSD: head/sbin/md5/md5.1 238964 2012-08-01 00:36:12Z delphij $
+.Dd July 31, 2012
.Dt MD5 1
.Os
.Sh NAME
-.Nm md5 , sha1 , sha256 , rmd160
+.Nm md5 , sha1 , sha256 , sha512, rmd160
.Nd calculate a message-digest fingerprint (checksum) for a file
.Sh SYNOPSIS
.Nm md5
@@ -21,6 +21,11 @@
.Op Fl c Ar string
.Op Fl s Ar string
.Op Ar
+.Nm sha512
+.Op Fl pqrtx
+.Op Fl c Ar string
+.Op Fl s Ar string
+.Op Ar
.Nm rmd160
.Op Fl pqrtx
.Op Fl c Ar string
@@ -28,7 +33,7 @@
.Op Ar
.Sh DESCRIPTION
The
-.Nm md5 , sha1 , sha256
+.Nm md5 , sha1 , sha256 , sha512
and
.Nm rmd160
utilities take as input a message of arbitrary length and produce as
@@ -41,7 +46,7 @@
produce two messages having the same message digest, or to produce any
message having a given prespecified target message digest.
The
-.Tn MD5 , SHA-1 , SHA-256
+.Tn MD5 , SHA-1 , SHA-256 , SHA-512
and
.Tn RIPEMD-160
algorithms are intended for digital signature applications, where a
@@ -104,7 +109,7 @@
.El
.Sh EXIT STATUS
The
-.Nm md5 , sha1 , sha256
+.Nm md5 , sha1 , sha256 , sha512
and
.Nm rmd160
utilities exit 0 on success,
@@ -115,7 +120,8 @@
.Xr md5 3 ,
.Xr ripemd 3 ,
.Xr sha 3 ,
-.Xr sha256 3
+.Xr sha256 3 ,
+.Xr sha512 3
.Rs
.%A R. Rivest
.%T The MD5 Message-Digest Algorithm
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/md5/md5.c
--- a/head/sbin/md5/md5.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/md5/md5.c Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/md5/md5.c 235205 2012-05-09 17:32:10Z eadler=
$");
+__FBSDID("$FreeBSD: head/sbin/md5/md5.c 238964 2012-08-01 00:36:12Z delphi=
j $");
=20
#include <sys/types.h>
#include <sys/time.h>
@@ -28,6 +28,7 @@
#include <ripemd.h>
#include <sha.h>
#include <sha256.h>
+#include <sha512.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -54,6 +55,7 @@
extern const char *MD5TestOutput[MDTESTCOUNT];
extern const char *SHA1_TestOutput[MDTESTCOUNT];
extern const char *SHA256_TestOutput[MDTESTCOUNT];
+extern const char *SHA512_TestOutput[MDTESTCOUNT];
extern const char *RIPEMD160_TestOutput[MDTESTCOUNT];
=20
typedef struct Algorithm_t {
@@ -78,12 +80,14 @@
MD5_CTX md5;
SHA1_CTX sha1;
SHA256_CTX sha256;
+ SHA512_CTX sha512;
RIPEMD160_CTX ripemd160;
} DIGEST_CTX;
=20
/* max(MD5_DIGEST_LENGTH, SHA_DIGEST_LENGTH,
- SHA256_DIGEST_LENGTH, RIPEMD160_DIGEST_LENGTH)*2+1 */
-#define HEX_DIGEST_LENGTH 65
+ SHA256_DIGEST_LENGTH, SHA512_DIGEST_LENGTH,
+ RIPEMD160_DIGEST_LENGTH)*2+1 */
+#define HEX_DIGEST_LENGTH 129
=20
/* algorithm function table */
=20
@@ -97,6 +101,9 @@
{ "sha256", "SHA256", &SHA256_TestOutput, (DIGEST_Init*)&SHA256_Init,
(DIGEST_Update*)&SHA256_Update, (DIGEST_End*)&SHA256_End,
&SHA256_Data, &SHA256_File },
+ { "sha512", "SHA512", &SHA512_TestOutput, (DIGEST_Init*)&SHA512_Init,
+ (DIGEST_Update*)&SHA512_Update, (DIGEST_End*)&SHA512_End,
+ &SHA512_Data, &SHA512_File },
{ "rmd160", "RMD160", &RIPEMD160_TestOutput,
(DIGEST_Init*)&RIPEMD160_Init, (DIGEST_Update*)&RIPEMD160_Update,
(DIGEST_End*)&RIPEMD160_End, &RIPEMD160_Data, &RIPEMD160_File }
@@ -320,6 +327,17 @@
"e6eae09f10ad4122a0e2a4075761d185a272ebd9f5aa489e998ff2f09cbfdd9f"
};
=20
+const char *SHA512_TestOutput[MDTESTCOUNT] =3D {
+ "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c=
5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
+ "1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c65=
2bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75",
+ "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a=
274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
+ "107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f3309e16455=
ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c",
+ "4dbff86cc2ca1bae1e16468a05cb9881c97f1753bce3619034898faa1aabe429955a1bf8=
ec483d7421fe3c1646613a59ed5441fb0f321389f77f48a879c7b1f1",
+ "1e07be23c26a86ea37ea810c8ec7809352515a970e9253c26f536cfc7a9996c45c837058=
3e0a78fa4a90041d71a4ceab7423f19c71b9d5a3e01249f0bebd5894",
+ "72ec1ef1124a45b047e8b7c75a932195135bb61de24ec0d1914042246e0aec3a2354e093=
d76f3048b456764346900cb130d2a4fd5dd16abb5e30bcb850dee843",
+ "e8a835195e039708b13d9131e025f4441dbdc521ce625f245a436dcd762f54bf5cb298d9=
6235e6c6a304e087ec8189b9512cbdf6427737ea82793460c367b9c3"
+};
+
const char *RIPEMD160_TestOutput[MDTESTCOUNT] =3D {
"9c1185a5c5e9fc54612808977ee8f548b2258d31",
"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe",
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/shutdown/shutdown.c
--- a/head/sbin/shutdown/shutdown.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/shutdown/shutdown.c Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
#endif /* not lint */
#endif
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/shutdown/shutdown.c 235855 2012-05-23 19:25:=
46Z jilles $");
+__FBSDID("$FreeBSD: head/sbin/shutdown/shutdown.c 238968 2012-08-01 09:10:=
21Z des $");
=20
#include <sys/param.h>
#include <sys/time.h>
@@ -93,7 +93,7 @@
static const char *nosync, *whom;
=20
static void badtime(void);
-static void perform_shutdown(void);
+static void die_you_gravy_sucking_pig_dog(void);
static void finish(int);
static void getoffset(char *);
static void loop(void);
@@ -282,7 +282,7 @@
if (!tp->timeleft)
break;
}
- perform_shutdown();
+ die_you_gravy_sucking_pig_dog();
}
=20
static jmp_buf alarmbuf;
@@ -349,7 +349,7 @@
}
=20
static void
-perform_shutdown(void)
+die_you_gravy_sucking_pig_dog(void)
{
char *empty_environ[] =3D { NULL };
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/examples/kld/dyn_sysctl/dyn=
_sysctl.c
--- a/head/share/examples/kld/dyn_sysctl/dyn_sysctl.c Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/share/examples/kld/dyn_sysctl/dyn_sysctl.c Fri Aug 10 14:19:25 2=
012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: head/share/examples/kld/dyn_sysctl/dyn_sysctl.c 239130 20=
12-08-07 13:11:47Z emaste $
*/
=20
#include <sys/types.h>
@@ -59,7 +59,7 @@
=20
error =3D 0;
switch (cmd) {
- case MOD_LOAD :
+ case MOD_LOAD:
/* Initialize the contexts */
printf("Initializing contexts and creating subtrees.\n\n");
sysctl_ctx_init(&clist);
@@ -123,7 +123,7 @@
OID_AUTO, "string_c", CTLFLAG_RD, c, 0, "shouldn't panic");
printf("3. (%p) /kern/dyn_sysctl bad (WRONG!)\n", &clist2);
break;
- case MOD_UNLOAD :
+ case MOD_UNLOAD:
printf("1. Try to free ctx1 (%p): ", &clist);
if (sysctl_ctx_free(&clist) !=3D 0)
printf("failed: expected. Need to remove ctx3 first.\n");
@@ -153,7 +153,7 @@
} else
printf("Ok\n");
break;
- default :
+ default:
error =3D EOPNOTSUPP;
break;
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/Makefile
--- a/head/share/man/man4/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
# @(#)Makefile 8.1 (Berkeley) 6/18/93
-# $FreeBSD: head/share/man/man4/Makefile 237981 2012-07-02 08:31:29Z mav $
+# $FreeBSD: head/share/man/man4/Makefile 238983 2012-08-02 08:46:08Z luigi=
$
=20
MAN=3D aac.4 \
acpi.4 \
@@ -509,6 +509,7 @@
utopia.4 \
uvisor.4 \
uvscom.4 \
+ vale.4 \
vga.4 \
vge.4 \
viapm.4 \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/ahci.4
--- a/head/share/man/man4/ahci.4 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/ahci.4 Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2009 Alexander Motin <mav at FreeBSD.org>
+.\" Copyright (c) 2009-2012 Alexander Motin <mav at FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/share/man/man4/ahci.4 237234 2012-06-18 19:11:07Z mariu=
s $
+.\" $FreeBSD: head/share/man/man4/ahci.4 238805 2012-07-26 13:44:48Z mav $
.\"
-.Dd June 18, 2012
+.Dd July 25, 2012
.Dt AHCI 4
.Os
.Sh NAME
@@ -132,7 +132,9 @@
When supported by hardware, it allows to control per-port activity, locate
and fault LEDs via the
.Xr led 4
-API for localization and status reporting purposes.
+API or emulated
+.Xr ses 4
+device for localization and status reporting purposes.
Supporting AHCI controllers may transmit that information to the backplane
controllers via SGPIO interface. Backplane controllers interpret received
statuses in some way (IBPI standard) to report them using present indicato=
rs.
@@ -153,11 +155,11 @@
such as JMicron JMB36x and Marvell 88SE61xx.
.Sh FILES
.Bl -tag -width /dev/led/ahcich*.locate
-.It Pa /dev/led/ahcich*.act
+.It Pa /dev/led/ahci*.*.act
activity LED device nodes
-.It Pa /dev/led/ahcich*.fault
+.It Pa /dev/led/ahci*.*.fault
fault LED device nodes
-.It Pa /dev/led/ahcich*.locate
+.It Pa /dev/led/ahci*.*.locate
locate LED device nodes
.El
.Sh SEE ALSO
@@ -166,7 +168,8 @@
.Xr cam 4 ,
.Xr cd 4 ,
.Xr da 4 ,
-.Xr sa 4
+.Xr sa 4 ,
+.Xr ses 4
.Sh HISTORY
The
.Nm
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/hptiop.4
--- a/head/share/man/man4/hptiop.4 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/hptiop.4 Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/share/man/man4/hptiop.4 233422 2012-03-24 13:37:57Z joe=
l $
+.\" $FreeBSD: head/share/man/man4/hptiop.4 239084 2012-08-06 05:27:26Z del=
phij $
.\"
-.Dd August 1, 2011
+.Dd August 5, 2012
.Dt HPTIOP 4
.Os
.Sh NAME
@@ -58,34 +58,46 @@
.Pp
.Bl -bullet -compact
.It
-HighPoint RocketRAID 4320
+HighPoint RocketRAID 4322
.It
HighPoint RocketRAID 4321
.It
-HighPoint RocketRAID 4322
+HighPoint RocketRAID 4320
+.It
+HighPoint RocketRAID 4311
+.It
+HighPoint RocketRAID 4310
+.It
+HighPoint RocketRAID 4211
+.It
+HighPoint RocketRAID 4210
+.It
+HighPoint RocketRAID 3560
+.It
+HighPoint RocketRAID 3540
+.It
+HighPoint RocketRAID 3530
+.It
+HighPoint RocketRAID 3522
+.It
+HighPoint RocketRAID 3521
+.It
+HighPoint RocketRAID 3520
+.It
+HighPoint RocketRAID 3511
+.It
+HighPoint RocketRAID 3510
+.It
+HighPoint RocketRAID 3410
+.It
+HighPoint RocketRAID 3320
.It
HighPoint RocketRAID 3220
.It
-HighPoint RocketRAID 3320
-.It
-HighPoint RocketRAID 3410
-.It
-HighPoint RocketRAID 3520
-.It
-HighPoint RocketRAID 3510
-.It
-HighPoint RocketRAID 3511
-.It
-HighPoint RocketRAID 3521
-.It
-HighPoint RocketRAID 3522
-.It
-HighPoint RocketRAID 3540
+HighPoint RocketRAID 3122
.It
HighPoint RocketRAID 3120
.It
-HighPoint RocketRAID 3122
-.It
HighPoint RocketRAID 3020
.El
.Sh NOTES
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/netmap.4
--- a/head/share/man/man4/netmap.4 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/netmap.4 Fri Aug 10 14:19:25 2012 +0300
@@ -21,12 +21,12 @@
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY =
WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
-.\"
+.\"=20
.\" This document is derived in part from the enet man page (enet.4)
.\" distributed with 4.3BSD Unix.
.\"
-.\" $FreeBSD: head/share/man/man4/netmap.4 235317 2012-05-12 03:25:46Z gjb=
$
-.\" $Id: netmap.4 9662 2011-11-16 13:18:06Z luigi $: stable/8/share/man/ma=
n4/bpf.4 181694 2008-08-13 17:45:06Z ed $
+.\" $FreeBSD: head/share/man/man4/netmap.4 238987 2012-08-02 12:17:52Z joe=
l $
+.\" $Id: netmap.4 11563 2012-08-02 08:59:12Z luigi $: stable/8/share/man/m=
an4/bpf.4 181694 2008-08-13 17:45:06Z ed $
.\"
.Dd February 27, 2012
.Dt NETMAP 4
@@ -46,7 +46,7 @@
which is in charge of validating information through
.Pa ioctl()
and
-.Pa select()/poll() .
+.Pa select()/poll().
.Nm
can exploit the parallelism in multiqueue devices and
multicore systems.
@@ -159,7 +159,7 @@
int i =3D txring->slot[txring->cur].buf_idx;
char *buf =3D NETMAP_BUF(txring, i);
.Ed
-.Ss IOCTLS
+.Sh IOCTLS
.Nm
supports some ioctl() to synchronize the state of the rings
between the kernel and the user processes, plus some
@@ -172,7 +172,7 @@
struct nmreq {
char nr_name[IFNAMSIZ];
uint32_t nr_version; /* API version */
-#define NETMAP_API 2 /* current version */
+#define NETMAP_API 3 /* current version */
uint32_t nr_offset; /* nifp offset in the shared region */
uint32_t nr_memsize; /* size of the shared region */
uint32_t nr_tx_slots; /* slots in tx rings */
@@ -184,6 +184,8 @@
#define NETMAP_SW_RING 0x2000 /* we process the sw ring */
#define NETMAP_NO_TX_POLL 0x1000 /* no gratuitous txsync on poll */
#define NETMAP_RING_MASK 0xfff /* the actual ring number */
+ uint16_t spare1;
+ uint32_t spare2[4];
};
=20
.Ed
@@ -250,7 +252,7 @@
tells the hardware of consumed packets, and asks for newly available
packets.
.El
-.Ss SYSTEM CALLS
+.Sh SYSTEM CALLS
.Nm
uses
.Nm select
@@ -279,7 +281,7 @@
fds.events =3D POLLOUT;
for (;;) {
poll(list, 1, -1);
- while (ring->avail-- > 0) {
+ for ( ; ring->avail > 0 ; ring->avail--) {
i =3D ring->cur;
buf =3D NETMAP_BUF(ring, ring->slot[i].buf_index);
... prepare packet in buf ...
@@ -292,13 +294,31 @@
.Nm
supports the following interfaces:
.Xr em 4 ,
+.Xr igb 4 ,
.Xr ixgbe 4 ,
-.Xr re 4 ,
+.Xr lem 4 ,
+.Xr re 4
+.Sh SEE ALSO
+.Xr vale 4
+.Pp
+http://info.iet.unipi.it/~luigi/netmap/
+.Pp
+Luigi Rizzo, Revisiting network I/O APIs: the netmap framework,
+Communications of the ACM, 55 (3), pp.45-51, March 2012
+.Pp
+Luigi Rizzo, netmap: a novel framework for fast packet I/O,
+Usenix ATC'12, June 2012, Boston
.Sh AUTHORS
+.An -nosplit
The
.Nm
-framework has been designed and implemented by
-.An Luigi Rizzo
-and
-.An Matteo Landi
-in 2011 at the Universita` di Pisa.
+framework has been designed and implemented at the
+Universita` di Pisa in 2011 by
+.An Luigi Rizzo ,
+with help from
+.An Matteo Landi ,
+.An Gaetano Catalli ,
+.An Giuseppe Lettieri .
+.Pp
+.Nm
+has been funded by the European Commission within FP7 Project CHANGE (2574=
22).
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/polling.4
--- a/head/share/man/man4/polling.4 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/polling.4 Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD$
+.\" $FreeBSD: head/share/man/man4/polling.4 239109 2012-08-06 22:43:49Z jf=
v $
.\"
.Dd April 6, 2007
.Dt POLLING 4
@@ -184,6 +184,7 @@
.Xr fwe 4 ,
.Xr fwip 4 ,
.Xr fxp 4 ,
+.Xr igb 4 ,
.Xr ixgb 4 ,
.Xr nfe 4 ,
.Xr nge 4 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/umodem.4
--- a/head/share/man/man4/umodem.4 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/umodem.4 Fri Aug 10 14:19:25 2012 +0300
@@ -27,9 +27,9 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF=
THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/share/man/man4/umodem.4 227750 2011-11-20 12:18:21Z miw=
i $
+.\" $FreeBSD: head/share/man/man4/umodem.4 239090 2012-08-06 08:59:39Z gle=
bius $
.\"
-.Dd November 20, 2011
+.Dd August 6, 2012
.Dt UMODEM 4
.Os
.Sh NAME
@@ -92,6 +92,8 @@
ELSA MicroLink 56k USB modem
.It
Sony Ericsson W810i phone
+.It
+Sonim XP5300 Force
.El
.Sh SEE ALSO
.Xr tty 4 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/uplcom.4
--- a/head/share/man/man4/uplcom.4 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/uplcom.4 Fri Aug 10 14:19:25 2012 +0300
@@ -27,9 +27,9 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF=
THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/share/man/man4/uplcom.4 227750 2011-11-20 12:18:21Z miw=
i $
+.\" $FreeBSD: head/share/man/man4/uplcom.4 238774 2012-07-25 17:25:44Z gav=
in $
.\"
-.Dd November 20, 2011
+.Dd July 25, 2012
.Dt UPLCOM 4
.Os
.Sh NAME
@@ -118,6 +118,8 @@
.It
Mobile Action MA-620 Infrared Adapter
.It
+Motorola Cables
+.It
Nokia CA-42 Cable
.It
OTI DKU-5 cable
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/uslcom.4
--- a/head/share/man/man4/uslcom.4 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/uslcom.4 Fri Aug 10 14:19:25 2012 +0300
@@ -14,14 +14,14 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.\" $FreeBSD: head/share/man/man4/uslcom.4 235317 2012-05-12 03:25:46Z gjb=
$
+.\" $FreeBSD: head/share/man/man4/uslcom.4 239037 2012-08-04 15:11:36Z gav=
in $
.\"
-.Dd November 20, 2011
+.Dd August 4, 2012
.Dt USLCOM 4
.Os
.Sh NAME
.Nm uslcom
-.Nd Silicon Laboratories CP2101/CP2102 based USB serial adapter
+.Nd Silicon Laboratories CP2101/CP2102/CP2103/CP2104/CP2105 based USB seri=
al adapter
.Sh SYNOPSIS
To compile this driver into the kernel,
place the following lines in your
@@ -41,7 +41,8 @@
.Sh DESCRIPTION
The
.Nm
-driver supports Silicon Laboratories CP2101/CP2102 based USB serial adapte=
rs.
+driver supports Silicon Laboratories CP2101/CP2102/CP2103/CP2104/CP2105
+based USB serial adapters.
.Sh HARDWARE
The following devices should work with the
.Nm
@@ -49,29 +50,147 @@
.Pp
.Bl -bullet -compact
.It
+AC-Services CAN, CIS-IBUS, IBUS and OBD interfaces
+.It
+Aerocomm Radio
+.It
+AKTACOM ACE-1001 cable
+.It
+AMBER Wireless AMB2560
+.It
+Arkham DS-101 Adapter
+.It
Argussoft ISP
.It
+Arygon Technologies Mifare RFID Reader
+.It
+AVIT Research USB-TTL interface
+.It
+B&G H3000 Data Cable
+.It
+Balluff RFID reader
+.It
Baltech card reader
.It
+BEI USB VCP Sensor
+.It
Burnside Telecom Desktop Mobile
.It
chip45.com Crumb128 module
.It
+Clipsal 5000CT2, 5500PACA, 5500PCU, 560884, 5800PC, C5000CT2
+and L51xx C-Bus Home Automation products
+.It
+Commander 2 EDGE(GSM) Modem
+.It
+Cygnal Fasttrax GPS and Debug adapter
+.It
+DataApex MultiCOM USB to RS232 converter
+.It
+Degree Controls USB adapter
+.It
+DekTec DTA Plus VHF/UHF Booster
+.It
+Dell DW700 GPS Receiver
+.It
+Digianswer ZigBee/802.15.4 MAC
+.It
+Dynastream ANT Development kits
+.It
+Elan USBcount50, USBscope50, USBpulse100 and USBwave12
+.It
+ELV USB-I2C interface
+.It
+EMS C1007 HF RFID controller
+.It
+Festo CPX-USB and CMSP interfaces
+.It
+Gemalto Prox-PU/CU contactless card reader
+.It
+Helicomm IP-Link 1220-DVM
+.It
+IMS USB-RS422 adapter
+.It
+Infinity GPS-MIC-1 Radio Monophone
+.It
+INSYS Modem
+.It
+IRZ SG-10 and MC35pu GSM/GPRS Modems
+.It
Jablotron PC-60B
.It
-Lipowsky Baby-JTAG
+Kamstrup M-Bus Master MultiPort 250D
+and Optical Eye/3 wire utility meter interfaces
.It
-Lipowsky Baby-LIN
+Kyocera GPS
.It
-Lipowsky HARP-1
+Link Instruments MS-019 and MS-028
+Oscilloscope/Logic Analyzer/Pattern Generators
+.It
+Lipowsky Baby-JTAG, Baby-LIN and HARP-1
+.It
+MEI CashFlow SC and Series 2000 cash acceptors
+.It
+MJS USB-TOSLINK Adapter
+.It
+MobiData GPRS USB Modems
+.It
+MSD DashHawk
+.It
+Multiplex RC adapter
+.It
+Optris MSpro LT Thermometer
+.It
+Owen AC4 USB-RS485 converter
+.It
+Pirelli DP-L10 SIP phone
+.It
+PLX CA-42 Phone cable
.It
Pololu USB to Serial
.It
-Silicon Laboratories CP2101
+Procyon AVS Mind Machine
.It
-Silicon Laboratories CP2102
+Renesas RX-Stick for RX610
+.It
+Siemens MC60 Cable
+.It
+Silicon Laboratories generic CP2101/CP2102/CP2103/CP2104/CP2105 chips
+.It
+Software Bisque Paramount ME
+.It
+SPORTident BSM7-D USB
+.It
+Suunto Sports Instrument
+.It
+Syntech CipherLab USB Barcode Scanner
+.It
+T-Com TC 300 SIP phone
+.It
+Tams Master Easy Control
+.It
+Telegesis ETRX2USB
+.It
+Timewave HamLinkUSB
+.It
+Tracient RFID Reader
.It
Track Systems Traqmate
+.It
+Vaisala USB Instrument cable
+.It
+VStabi Controller
+.It
+WAGO 750-923 USB Service Cable
+.It
+WaveSense Jazz Blood Glucose Meter
+.It
+WIENER Plein & Baus CML Data Logger, RCM Remote,
+and PL512 and MPOD PSUs
+.It
+WMR RIGblaster Plug&Play and RIGtalk RT1
+.It
+Zephyr Bioharness
.El
.Sh SEE ALSO
.Xr tty 4 ,
@@ -91,8 +210,3 @@
.Nm
driver was written by
.An Jonathan Gray Aq jsg at openbsd.org .
-.Sh CAVEATS
-Setting hardware flow control is not currently supported.
-.Pp
-Silicon Laboratories do not release any programming information
-on their products.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/vale.4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/share/man/man4/vale.4 Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,131 @@
+.\" Copyright (c) 2012 Luigi Rizzo, Universita` di Pisa
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PUR=
POSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUEN=
TIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ST=
RICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY =
WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"=20
+.\" This document is derived in part from the enet man page (enet.4)
+.\" distributed with 4.3BSD Unix.
+.\"
+.\" $FreeBSD: head/share/man/man4/vale.4 238986 2012-08-02 12:16:46Z joel $
+.\" $Id: $
+.\"
+.Dd July 27, 2012
+.Dt VALE 4
+.Os
+.Sh NAME
+.Nm vale
+.Nd a very fast Virtual Local Ethernet using the netmap API
+.Sh SYNOPSIS
+.Cd device netmap
+.Sh DESCRIPTION
+.Nm
+is a feature of the
+.Nm netmap
+module that implements multiple Virtual switches that can
+be used to interconnect netmap clients, including traffic
+sources and sinks, packet forwarders, userspace firewalls,
+and so on.
+.Pp
+.Nm
+is implemented completely in software, and is extremely fast.
+On a modern machine it can move almost 20 Million packets per
+second (Mpps) per core with small frames, and about 70 Gbit/s
+with 1500 byte frames.
+.Sh OPERATION
+.Nm
+dynamically creates switches and ports as client connect
+to it using the
+.Xr netmap 4
+API.
+.Pp
+.Nm
+ports are named
+.Pa vale[bdg:][port]
+where
+.Pa vale
+is the prefix indicating a VALE switch rather than a standard interface,
+.Pa bdg
+indicates a specific switch (the colon is a separator),
+and
+.Pa port
+indicates a port within the switch.
+Bridge and ports names are arbitrary strings, the only
+constraint being that the full name must fit within 16
+characters.
+.Pp
+See
+.Xr netmap 4
+for details on the API.
+.Ss LIMITS
+.Nm
+currently supports up to 4 switches, 16 ports per switch,
+1024 buffers per port. These hard limits will be
+changed to sysctl variables in future releases.
+.Sh SYSCTL VARIABLES
+.Nm
+uses the following sysctl variables to control operation:
+.Bl -tag -width 12
+.It dev.netmap.bridge
+The maximum number of packets processed internally
+in each iteration.
+Defaults to 1024, use lower values to trade latency
+with throughput.
+.Pp
+.It dev.netmap.verbose
+Set to non-zero values to enable in-kernel diagnostics.
+.El
+.Sh EXAMPLES
+Create one switch, with a traffic generator connected to one
+port, and a netmap-enabled tcpdump instance on another port:
+.Bd -literal -offset indent
+tcpdump -ni vale-a:1 &
+pkt-gen -i vale-a:0 -f tx &
+.Ed
+.Pp
+Create two switches,
+each connected to two qemu machines on different ports.
+.Bd -literal -offset indent
+qemu -net nic -net netmap,ifname=3Dvale-1:a ... &
+qemu -net nic -net netmap,ifname=3Dvale-1:b ... &
+qemu -net nic -net netmap,ifname=3Dvale-2:c ... &
+qemu -net nic -net netmap,ifname=3Dvale-2:d ... &
+.Ed
+.Sh SEE ALSO
+.Xr netmap 4
+.Pp
+.Xr http://info.iet.unipi.it/~luigi/vale/
+.Pp
+Luigi Rizzo, Giuseppe Lettieri: VALE, a switched ethernet for virtual mach=
ines,
+June 2012, http://info.iet.unipi.it/~luigi/vale/
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+switch has been designed and implemented in 2012 by
+.An Luigi Rizzo
+and
+.An Giuseppe Lettieri
+at the Universita` di Pisa.
+.Pp
+.Nm
+has been funded by the European Commission within FP7 Projects
+CHANGE (257422) and OPENLAB (287581).
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man5/rc.conf.5
--- a/head/share/man/man5/rc.conf.5 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man5/rc.conf.5 Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $FreeBSD: head/share/man/man5/rc.conf.5 238707 2012-07-22 23:21:21Z gj=
b $
+.\" $FreeBSD: head/share/man/man5/rc.conf.5 239049 2012-08-05 08:19:52Z ea=
dler $
.\"
.Dd July 22, 2012
.Dt RC.CONF 5
@@ -1201,7 +1201,7 @@
with the vlan tag 101 and the optional the IPv4 address 192.0.2.1/24:
.Bd -literal
vlans_em0=3D"101"
-ifconfig_em0_101=3D"inet 192.0.2.1/24"
+ipv4_addrs_em0_101=3D"192.0.2.1/24"
.Ed
.Pp
To create a vlan device named
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/misc/bsd-family-tree
--- a/head/share/misc/bsd-family-tree Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/misc/bsd-family-tree Fri Aug 10 14:19:25 2012 +0300
@@ -254,7 +254,8 @@
| 9.0 | | | | DragonFly 3=
.0.1
| v FreeBSD | | | |
| 8.3 | | OpenBSD 5.1 |
- | | | | |
+ | Mac OS X | | |
+ | 10.8 | | |
FreeBSD 10 -current | NetBSD -current OpenBSD -current |
| | | | |
v v v v v
@@ -547,6 +548,7 @@
DragonFly 3.0.1 2012-02-21 [DFB]
FreeBSD 8.3 2012-04-18 [FBD]
OpenBSD 5.1 2012-05-01 [OBD]
+Mac OS X 10.8 2012-07-25 [APL]
=20
Bibliography
------------------------
@@ -607,4 +609,4 @@
Copyright (c) 1997-2012 Wolfram Schneider <wosch at FreeBSD.ORG>
URL: http://cvsweb.freebsd.org/src/share/misc/bsd-family-tree
=20
-$FreeBSD: head/share/misc/bsd-family-tree 235199 2012-05-09 16:06:20Z pluk=
net $
+$FreeBSD: head/share/misc/bsd-family-tree 238801 2012-07-26 11:51:29Z pluk=
net $
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/misc/committers-ports.dot
--- a/head/share/misc/committers-ports.dot Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/misc/committers-ports.dot Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/share/misc/committers-ports.dot 238058 2012-07-03 07:28:5=
7Z zeising $
+# $FreeBSD: head/share/misc/committers-ports.dot 238976 2012-08-01 17:48:3=
8Z bdrewery $
=20
# This file is meant to list all FreeBSD ports committers and describe the
# mentor-mentee relationships between them.
@@ -57,6 +57,7 @@
avl [label=3D"Alexander Logvinov\navl at FreeBSD.org\n2009/05/27"]
az [label=3D"Andrej Zverev\naz at FreeBSD.org\n2005/10/03"]
bapt [label=3D"Baptiste Daroussin\nbapt at FreeBSD.org\n2010/07/27"]
+bdrewery [label=3D"Bryan Drewery\nbdrewery at FreeBSD.org\n2012/07/31"]
beat [label=3D"Beat Gaetzi\nbeat at FreeBSD.org\n2009/01/28"]
beech [label=3D"Beech Rintoul\nbeech at FreeBSD.org\n2007/05/30"]
bf [label=3D"Brendan Fabeny\nbf at FreeBSD.org\n2010/06/02"]
@@ -226,6 +227,7 @@
=20
avilla -> rakuco
=20
+bapt -> bdrewery
bapt -> eadler
bapt -> jlaffaye
=20
@@ -263,6 +265,7 @@
demon -> mat
=20
eadler -> ak
+eadler -> bdrewery
eadler -> gjb
eadler -> tj
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/elf_machdep.c
--- a/head/sys/amd64/amd64/elf_machdep.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/elf_machdep.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/elf_machdep.c 239123 2012-08-07 0=
5:46:36Z pluknet $");
=20
#include <sys/param.h>
#include <sys/kernel.h>
@@ -36,7 +36,6 @@
#include <sys/sysent.h>
#include <sys/imgact_elf.h>
#include <sys/syscall.h>
-#include <sys/sysent.h>
#include <sys/signalvar.h>
#include <sys/vnode.h>
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/fpu.c
--- a/head/sys/amd64/amd64/fpu.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/fpu.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/amd64/fpu.c 238671 2012-07-21 13:53:00Z=
kib $");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/fpu.c 238914 2012-07-30 19:26:02Z=
kib $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -106,7 +106,7 @@
void fxsave(caddr_t addr);
void fxrstor(caddr_t addr);
void ldmxcsr(u_int csr);
-void stmxcsr(u_int csr);
+void stmxcsr(u_int *csr);
void xrstor(char *addr, uint64_t mask);
void xsave(char *addr, uint64_t mask);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/initcpu.c
--- a/head/sys/amd64/amd64/initcpu.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/initcpu.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/amd64/initcpu.c 233702 2012-03-30 16:32=
:41Z jkim $");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/initcpu.c 239125 2012-08-07 08:36=
:10Z kib $");
=20
#include "opt_cpu.h"
=20
@@ -91,11 +91,17 @@
*
* http://support.amd.com/us/Processor_TechDocs/41322_10h_Rev_Gd.pdf
* http://support.amd.com/us/Processor_TechDocs/44739_12h_Rev_Gd.pdf
+ *
+ * Hypervisors do not provide access to the errata MSR,
+ * causing #GP exception on attempt to apply the errata. The
+ * MSR write shall be done on host and persist globally
+ * anyway, so do not try to do it when under virtualization.
*/
switch (CPUID_TO_FAMILY(cpu_id)) {
case 0x10:
case 0x12:
- wrmsr(0xc0011029, rdmsr(0xc0011029) | 1);
+ if ((cpu_feature2 & CPUID2_HV) =3D=3D 0)
+ wrmsr(0xc0011029, rdmsr(0xc0011029) | 1);
break;
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/pmap.c
--- a/head/sys/amd64/amd64/pmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/pmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -77,7 +77,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/amd64/pmap.c 238610 2012-07-19 05:34:19=
Z alc $");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/pmap.c 239137 2012-08-08 05:28:30=
Z alc $");
=20
/*
* Manages physical address maps.
@@ -3439,7 +3439,6 @@
pv_entry_t pv;
vm_paddr_t opa, pa;
vm_page_t mpte, om;
- boolean_t invlva;
=20
va =3D trunc_page(va);
KASSERT(va <=3D VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig"));
@@ -3453,9 +3452,13 @@
VM_OBJECT_LOCKED(m->object),
("pmap_enter: page %p is not busy", m));
pa =3D VM_PAGE_TO_PHYS(m);
- newpte =3D (pt_entry_t)(pa | pmap_cache_bits(m->md.pat_mode, 0) | PG_V);
+ newpte =3D (pt_entry_t)(pa | PG_A | PG_V);
+ if ((access & VM_PROT_WRITE) !=3D 0)
+ newpte |=3D PG_M;
if ((prot & VM_PROT_WRITE) !=3D 0)
newpte |=3D PG_RW;
+ KASSERT((newpte & (PG_M | PG_RW)) !=3D PG_M,
+ ("pmap_enter: access includes VM_PROT_WRITE but prot doesn't"));
if ((prot & VM_PROT_EXECUTE) =3D=3D 0)
newpte |=3D pg_nx;
if (wired)
@@ -3464,8 +3467,9 @@
newpte |=3D PG_U;
if (pmap =3D=3D kernel_pmap)
newpte |=3D PG_G;
-
- mpte =3D om =3D NULL;
+ newpte |=3D pmap_cache_bits(m->md.pat_mode, 0);
+
+ mpte =3D NULL;
=20
lock =3D NULL;
rw_rlock(&pvh_global_lock);
@@ -3495,7 +3499,6 @@
panic("pmap_enter: invalid page directory va=3D%#lx", va);
=20
origpte =3D *pte;
- opa =3D origpte & PG_FRAME;
=20
/*
* Is the specified virtual address already mapped?
@@ -3507,9 +3510,9 @@
* are valid mappings in them. Hence, if a user page is wired,
* the PT page will be also.
*/
- if (wired && (origpte & PG_W) =3D=3D 0)
+ if ((newpte & PG_W) !=3D 0 && (origpte & PG_W) =3D=3D 0)
pmap->pm_stats.wired_count++;
- else if (!wired && (origpte & PG_W))
+ else if ((newpte & PG_W) =3D=3D 0 && (origpte & PG_W) !=3D 0)
pmap->pm_stats.wired_count--;
=20
/*
@@ -3523,31 +3526,27 @@
}
=20
/*
- * Has the mapping changed?
+ * Has the physical page changed?
*/
+ opa =3D origpte & PG_FRAME;
if (opa =3D=3D pa) {
/*
* No, might be a protection or wiring change.
*/
if ((origpte & PG_MANAGED) !=3D 0) {
newpte |=3D PG_MANAGED;
- om =3D m;
+ if ((newpte & PG_RW) !=3D 0)
+ vm_page_aflag_set(m, PGA_WRITEABLE);
}
- if ((origpte & ~(PG_M | PG_A)) =3D=3D newpte)
+ if (((origpte ^ newpte) & ~(PG_M | PG_A)) =3D=3D 0)
goto unchanged;
goto validate;
- } else {
- /*
- * Yes, fall through to validate the new mapping.
- */
- if ((origpte & PG_MANAGED) !=3D 0)
- om =3D PHYS_TO_VM_PAGE(opa);
}
} else {
/*
* Increment the counters.
*/
- if (wired)
+ if ((newpte & PG_W) !=3D 0)
pmap->pm_stats.wired_count++;
pmap_resident_count_inc(pmap, 1);
}
@@ -3561,42 +3560,50 @@
pv->pv_va =3D va;
CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa);
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
+ if ((newpte & PG_RW) !=3D 0)
+ vm_page_aflag_set(m, PGA_WRITEABLE);
}
=20
-validate:
-
/*
* Update the PTE.
*/
- newpte |=3D PG_A;
- if ((access & VM_PROT_WRITE) !=3D 0)
- newpte |=3D PG_M;
- if ((newpte & (PG_MANAGED | PG_RW)) =3D=3D (PG_MANAGED | PG_RW))
- vm_page_aflag_set(m, PGA_WRITEABLE);
if ((origpte & PG_V) !=3D 0) {
- invlva =3D FALSE;
+validate:
origpte =3D pte_load_store(pte, newpte);
- if ((origpte & PG_A) !=3D 0 && (opa !=3D pa ||
- ((origpte & PG_NX) =3D=3D 0 && (newpte & PG_NX) !=3D 0)))
- invlva =3D TRUE;
- if ((origpte & (PG_M | PG_RW)) =3D=3D (PG_M | PG_RW)) {
+ opa =3D origpte & PG_FRAME;
+ if (opa !=3D pa) {
+ if ((origpte & PG_MANAGED) !=3D 0) {
+ om =3D PHYS_TO_VM_PAGE(opa);
+ if ((origpte & (PG_M | PG_RW)) =3D=3D (PG_M |
+ PG_RW))
+ vm_page_dirty(om);
+ if ((origpte & PG_A) !=3D 0)
+ vm_page_aflag_set(om, PGA_REFERENCED);
+ CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa);
+ pmap_pvh_free(&om->md, pmap, va);
+ if ((om->aflags & PGA_WRITEABLE) !=3D 0 &&
+ TAILQ_EMPTY(&om->md.pv_list) &&
+ ((om->flags & PG_FICTITIOUS) !=3D 0 ||
+ TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list)))
+ vm_page_aflag_clear(om, PGA_WRITEABLE);
+ }
+ } else if ((newpte & PG_M) =3D=3D 0 && (origpte & (PG_M |
+ PG_RW)) =3D=3D (PG_M | PG_RW)) {
if ((origpte & PG_MANAGED) !=3D 0)
- vm_page_dirty(om);
- if ((newpte & PG_RW) =3D=3D 0)
- invlva =3D TRUE;
+ vm_page_dirty(m);
+
+ /*
+ * Although the PTE may still have PG_RW set, TLB
+ * invalidation may nonetheless be required because
+ * the PTE no longer has PG_M set.
+ */
+ } else if ((origpte & PG_NX) !=3D 0 || (newpte & PG_NX) =3D=3D 0) {
+ /*
+ * This PTE change does not require TLB invalidation.
+ */
+ goto unchanged;
}
- if (opa !=3D pa && (origpte & PG_MANAGED) !=3D 0) {
- if ((origpte & PG_A) !=3D 0)
- vm_page_aflag_set(om, PGA_REFERENCED);
- CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa);
- pmap_pvh_free(&om->md, pmap, va);
- if ((om->aflags & PGA_WRITEABLE) !=3D 0 &&
- TAILQ_EMPTY(&om->md.pv_list) &&
- ((om->flags & PG_FICTITIOUS) !=3D 0 ||
- TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list)))
- vm_page_aflag_clear(om, PGA_WRITEABLE);
- }
- if (invlva)
+ if ((origpte & PG_A) !=3D 0)
pmap_invalidate_page(pmap, va);
} else
pte_store(pte, newpte);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/include/cpufunc.h
--- a/head/sys/amd64/include/cpufunc.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/include/cpufunc.h Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/amd64/include/cpufunc.h 238311 2012-07-09 20:55:39Z =
jhb $
+ * $FreeBSD: head/sys/amd64/include/cpufunc.h 238972 2012-08-01 17:24:53Z =
kib $
*/
=20
/*
@@ -290,6 +290,13 @@
}
=20
static __inline void
+lfence(void)
+{
+
+ __asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
mfence(void)
{
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/bcopyinout.S
--- a/head/sys/arm/arm/bcopyinout.S Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/bcopyinout.S Fri Aug 10 14:19:25 2012 +0300
@@ -39,13 +39,14 @@
#include "assym.s"
=20
#include <machine/asm.h>
+#include <sys/errno.h>
=20
.L_arm_memcpy:
.word _C_LABEL(_arm_memcpy)
.L_min_memcpy_size:
.word _C_LABEL(_min_memcpy_size)
=20
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/arm/bcopyinout.S 239033 2012-08-04 05:38:=
25Z andrew $");
#ifdef _ARM_ARCH_5E
#include <arm/arm/bcopyinout_xscale.S>
#else
@@ -310,7 +311,7 @@
RET
=20
.Lcopyfault:
- mov r0, #14 /* EFAULT */
+ ldr r0, =3DEFAULT
str r5, [r4, #PCB_ONFAULT]
RESTORE_REGS
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/bcopyinout_xscale.S
--- a/head/sys/arm/arm/bcopyinout_xscale.S Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/bcopyinout_xscale.S Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
*/
=20
#include <machine/asm.h>
-__FBSDID("$FreeBSD: head/sys/arm/arm/bcopyinout_xscale.S 236991 2012-06-13=
04:59:55Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/arm/bcopyinout_xscale.S 239033 2012-08-04=
05:38:25Z andrew $");
=20
.text
.align 0
@@ -108,6 +108,7 @@
ldmfd sp!, {r10-r11, pc}
=20
.Lcopyin_fault:
+ ldr r0, =3DEFAULT
str r11, [r10, #PCB_ONFAULT]
cmp r3, #0x00
ldmgtfd sp!, {r4-r7} /* r3 > 0 Restore r4-r7 */
@@ -559,6 +560,7 @@
ldmfd sp!, {r10-r11, pc}
=20
.Lcopyout_fault:
+ ldr r0, =3DEFAULT
str r11, [r10, #PCB_ONFAULT]
cmp r3, #0x00
ldmgtfd sp!, {r4-r7} /* r3 > 0 Restore r4-r7 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/exception.S
--- a/head/sys/arm/arm/exception.S Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/exception.S Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
#include <machine/asm.h>
#include <machine/armreg.h>
#include <machine/asmacros.h>
-__FBSDID("$FreeBSD: head/sys/arm/arm/exception.S 236991 2012-06-13 04:59:5=
5Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/arm/exception.S 239032 2012-08-04 05:31:2=
6Z andrew $");
=20
.text=09
.align 0
@@ -80,7 +80,10 @@
PUSHFRAME
=20
mov r0, sp /* Pass the frame to any function */
+ mov r6, sp /* Backup the stack pointer */
+ bic sp, sp, #7 /* Align the stack pointer */
bl _C_LABEL(swi_handler) /* It's a SWI ! */
+ mov sp, r6 /* Restore the stack */
=20
DO_AST
PULLFRAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/pmap.c
--- a/head/sys/arm/arm/pmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/pmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -140,7 +140,7 @@
#include "opt_vm.h"
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/arm/pmap.c 236991 2012-06-13 04:59:55Z im=
p $");
+__FBSDID("$FreeBSD: head/sys/arm/arm/pmap.c 239065 2012-08-05 14:11:42Z ki=
b $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
@@ -154,6 +154,7 @@
#include <sys/sched.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/uma.h>
#include <vm/pmap.h>
#include <vm/vm_kern.h>
@@ -165,7 +166,6 @@
#include <sys/lock.h>
#include <sys/mutex.h>
#include <machine/md_var.h>
-#include <machine/vmparam.h>
#include <machine/cpu.h>
#include <machine/cpufunc.h>
#include <machine/pcb.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_machdep.c
--- a/head/sys/arm/at91/at91_machdep.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_machdep.c Fri Aug 10 14:19:25 2012 +0300
@@ -44,7 +44,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91_machdep.c 238403 2012-07-12 19:=
11:37Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91_machdep.c 238788 2012-07-26 08:=
01:25Z andrew $");
=20
#define _ARM32_BUS_DMA_PRIVATE
#include <sys/param.h>
@@ -94,6 +94,7 @@
#include <arm/at91/at91_usartreg.h>
#include <arm/at91/at91rm92reg.h>
#include <arm/at91/at91sam9g20reg.h>
+#include <arm/at91/at91sam9g45reg.h>
=20
/* Page table for mapping proc0 zero page */
#define KERNEL_PT_SYS 0
@@ -201,6 +202,17 @@
VM_PROT_READ|VM_PROT_WRITE,
PTE_NOCACHE,
},
+ /*
+ * The next should be good for the 9G45.
+ */
+ {
+ /* Internal Memory 1MB */
+ AT91SAM9G45_OHCI_BASE,
+ AT91SAM9G45_OHCI_PA_BASE,
+ 0x00100000,
+ VM_PROT_READ|VM_PROT_WRITE,
+ PTE_NOCACHE,
+ },
{ 0, 0, 0, 0, 0, }
};
=20
@@ -213,7 +225,7 @@
long
at91_ramsize(void)
{
- uint32_t cr, mr, *SDRAMC;
+ uint32_t cr, mdr, mr, *SDRAMC;
int banks, rows, cols, bw;
#ifdef LINUX_BOOT_ABI
/*
@@ -231,6 +243,24 @@
rows =3D ((cr & AT91RM92_SDRAMC_CR_NR_MASK) >> 2) + 11;
cols =3D (cr & AT91RM92_SDRAMC_CR_NC_MASK) + 8;
bw =3D (mr & AT91RM92_SDRAMC_MR_DBW_16) ? 1 : 2;
+ } else if (at91_cpu_is(AT91_T_SAM9G45)) {
+ SDRAMC =3D (uint32_t *)(AT91_BASE + AT91SAM9G45_DDRSDRC0_BASE);
+ cr =3D SDRAMC[AT91SAM9G45_DDRSDRC_CR / 4];
+ mdr =3D SDRAMC[AT91SAM9G45_DDRSDRC_MDR / 4];
+ banks =3D 0;
+ rows =3D ((cr & AT91SAM9G45_DDRSDRC_CR_NR_MASK) >> 2) + 11;
+ cols =3D (cr & AT91SAM9G45_DDRSDRC_CR_NC_MASK) + 8;
+ bw =3D (mdr & AT91SAM9G45_DDRSDRC_MDR_DBW_16) ? 1 : 2;
+
+ /* Fix the calculation for DDR memory */
+ mdr &=3D AT91SAM9G45_DDRSDRC_MDR_MASK;
+ if (mdr & AT91SAM9G45_DDRSDRC_MDR_LPDDR1 ||
+ mdr & AT91SAM9G45_DDRSDRC_MDR_DDR2) {
+ /* The cols value is 1 higher for DDR */
+ cols +=3D 1;
+ /* DDR has 4 internal banks. */
+ banks =3D 2;
+ }
} else {
/*
* This should be good for the 9260, 9261, 9G20, 9G35 and 9X25
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_pio_sam9g45.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91_pio_sam9g45.h Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,272 @@
+/*-
+ * ----------------------------------------------------------------------=
------
+ * ATMEL Microcontroller Software Support - ROUSSET -
+ * ----------------------------------------------------------------------=
------
+ * Copyright (c) 2009, Atmel Corporation
+ *=20
+ * All rights reserved.
+ *=20
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are=
met:
+ *=20
+ * - Redistributions of source code must retain the above copyright notic=
e,
+ * this list of conditions and the disclaimer below.
+ *=20
+ * Atmel's name may not be used to endorse or promote products derived fr=
om
+ * this software without specific prior written permission.=20
+ * =20
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRES=
S OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANT=
IES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT=
ARE
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, B=
UT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, =
DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY=
OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOF=
TWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ----------------------------------------------------------------------=
------
+ *
+ * From AT91LIB version 1.9 boards/at91sam9g45-ek/at91sam9g45/AT91SAM9G45.h
+ */
+
+/* $FreeBSD: head/sys/arm/at91/at91_pio_sam9g45.h 238788 2012-07-26 08:01:=
25Z andrew $ */
+
+#ifndef ARM_AT91_AT91_PIO_SAM9G45_H
+#define ARM_AT91_AT91_PIO_SAM9G45_H
+
+#include <arm/at91/at91_pioreg.h>
+
+// ***********************************************************************=
******
+// PIO DEFINITIONS FOR AT91SAM9G45
+// ***********************************************************************=
******
+#define AT91C_PA0_MCI0_CK (AT91C_PIO_PA0) // =20
+#define AT91C_PA0_TCLK3 (AT91C_PIO_PA0) // =20
+#define AT91C_PA1_MCI0_CDA (AT91C_PIO_PA1) // =20
+#define AT91C_PA1_TIOA3 (AT91C_PIO_PA1) // =20
+#define AT91C_PA10_ETX0 (AT91C_PIO_PA10) // Ethernet MAC Transmit Dat=
a 0
+#define AT91C_PA11_ETX1 (AT91C_PIO_PA11) // Ethernet MAC Transmit Dat=
a 1
+#define AT91C_PA12_ERX0 (AT91C_PIO_PA12) // Ethernet MAC Receive Data=
0
+#define AT91C_PA13_ERX1 (AT91C_PIO_PA13) // Ethernet MAC Receive Data=
1
+#define AT91C_PA14_ETXEN (AT91C_PIO_PA14) // Ethernet MAC Transmit Ena=
ble
+#define AT91C_PA15_ERXDV (AT91C_PIO_PA15) // Ethernet MAC Receive Data=
Valid
+#define AT91C_PA16_ERXER (AT91C_PIO_PA16) // Ethernet MAC Receive Error
+#define AT91C_PA17_ETXCK_EREFCK (AT91C_PIO_PA17) // Ethernet MAC Transmit=
Clock/Reference Clock
+#define AT91C_PA18_EMDC (AT91C_PIO_PA18) // Ethernet MAC Management D=
ata Clock
+#define AT91C_PA19_EMDIO (AT91C_PIO_PA19) // Ethernet MAC Management D=
ata Input/Output
+#define AT91C_PA2_MCI0_DA0 (AT91C_PIO_PA2) // =20
+#define AT91C_PA2_TIOB3 (AT91C_PIO_PA2) // =20
+#define AT91C_PA20_TWD0 (AT91C_PIO_PA20) // TWI Two-wire Serial Data
+#define AT91C_PA21_TWCK0 (AT91C_PIO_PA21) // TWI Two-wire Serial Clock
+#define AT91C_PA22_MCI1_CDA (AT91C_PIO_PA22) // =20
+#define AT91C_PA22_SCK3 (AT91C_PIO_PA22) // =20
+#define AT91C_PA23_MCI1_DA0 (AT91C_PIO_PA23) // =20
+#define AT91C_PA23_RTS3 (AT91C_PIO_PA23) // =20
+#define AT91C_PA24_MCI1_DA1 (AT91C_PIO_PA24) // =20
+#define AT91C_PA24_CTS3 (AT91C_PIO_PA24) // =20
+#define AT91C_PA25_MCI1_DA2 (AT91C_PIO_PA25) // =20
+#define AT91C_PA25_PWM3 (AT91C_PIO_PA25) // =20
+#define AT91C_PA26_MCI1_DA3 (AT91C_PIO_PA26) // =20
+#define AT91C_PA26_TIOB2 (AT91C_PIO_PA26) // =20
+#define AT91C_PA27_MCI1_DA4 (AT91C_PIO_PA27) // =20
+#define AT91C_PA27_ETXER (AT91C_PIO_PA27) // Ethernet MAC Transmikt Co=
ding Error
+#define AT91C_PA28_MCI1_DA5 (AT91C_PIO_PA28) // =20
+#define AT91C_PA28_ERXCK (AT91C_PIO_PA28) // Ethernet MAC Receive Clock
+#define AT91C_PA29_MCI1_DA6 (AT91C_PIO_PA29) // =20
+#define AT91C_PA29_ECRS (AT91C_PIO_PA29) // Ethernet MAC Carrier Sens=
e/Carrier Sense and Data Valid
+#define AT91C_PA3_MCI0_DA1 (AT91C_PIO_PA3) // =20
+#define AT91C_PA3_TCLK4 (AT91C_PIO_PA3) // =20
+#define AT91C_PA30_MCI1_DA7 (AT91C_PIO_PA30) // =20
+#define AT91C_PA30_ECOL (AT91C_PIO_PA30) // Ethernet MAC Collision De=
tected
+#define AT91C_PA31_MCI1_CK (AT91C_PIO_PA31) // =20
+#define AT91C_PA31_PCK0 (AT91C_PIO_PA31) // =20
+#define AT91C_PA4_MCI0_DA2 (AT91C_PIO_PA4) // =20
+#define AT91C_PA4_TIOA4 (AT91C_PIO_PA4) // =20
+#define AT91C_PA5_MCI0_DA3 (AT91C_PIO_PA5) // =20
+#define AT91C_PA5_TIOB4 (AT91C_PIO_PA5) // =20
+#define AT91C_PA6_MCI0_DA4 (AT91C_PIO_PA6) // =20
+#define AT91C_PA6_ETX2 (AT91C_PIO_PA6) // Ethernet MAC Transmit Data 2
+#define AT91C_PA7_MCI0_DA5 (AT91C_PIO_PA7) // =20
+#define AT91C_PA7_ETX3 (AT91C_PIO_PA7) // Ethernet MAC Transmit Data 3
+#define AT91C_PA8_MCI0_DA6 (AT91C_PIO_PA8) // =20
+#define AT91C_PA8_ERX2 (AT91C_PIO_PA8) // Ethernet MAC Receive Data 2
+#define AT91C_PA9_MCI0_DA7 (AT91C_PIO_PA9) // =20
+#define AT91C_PA9_ERX3 (AT91C_PIO_PA9) // Ethernet MAC Receive Data 3
+#define AT91C_PB0_SPI0_MISO (AT91C_PIO_PB0) // SPI 0 Master In Slave
+#define AT91C_PB1_SPI0_MOSI (AT91C_PIO_PB1) // SPI 0 Master Out Slave
+#define AT91C_PB10_TWD1 (AT91C_PIO_PB10) // =20
+#define AT91C_PB10_ISI_D10 (AT91C_PIO_PB10) // =20
+#define AT91C_PB11_TWCK1 (AT91C_PIO_PB11) // =20
+#define AT91C_PB11_ISI_D11 (AT91C_PIO_PB11) // =20
+#define AT91C_PB12_DRXD (AT91C_PIO_PB12) // =20
+#define AT91C_PB13_DTXD (AT91C_PIO_PB13) // =20
+#define AT91C_PB14_SPI1_MISO (AT91C_PIO_PB14) // =20
+#define AT91C_PB15_SPI1_MOSI (AT91C_PIO_PB15) // =20
+#define AT91C_PB15_CTS0 (AT91C_PIO_PB15) // =20
+#define AT91C_PB16_SPI1_SPCK (AT91C_PIO_PB16) // =20
+#define AT91C_PB16_SCK0 (AT91C_PIO_PB16) // =20
+#define AT91C_PB17_SPI1_NPCS0 (AT91C_PIO_PB17) // =20
+#define AT91C_PB17_RTS0 (AT91C_PIO_PB17) // =20
+#define AT91C_PB18_RXD0 (AT91C_PIO_PB18) // =20
+#define AT91C_PB18_SPI0_NPCS1 (AT91C_PIO_PB18) // =20
+#define AT91C_PB19_TXD0 (AT91C_PIO_PB19) // =20
+#define AT91C_PB19_SPI0_NPCS2 (AT91C_PIO_PB19) // =20
+#define AT91C_PB2_SPI0_SPCK (AT91C_PIO_PB2) // SPI 0 Serial Clock
+#define AT91C_PB20_ISI_D0 (AT91C_PIO_PB20) // =20
+#define AT91C_PB21_ISI_D1 (AT91C_PIO_PB21) // =20
+#define AT91C_PB22_ISI_D2 (AT91C_PIO_PB22) // =20
+#define AT91C_PB23_ISI_D3 (AT91C_PIO_PB23) // =20
+#define AT91C_PB24_ISI_D4 (AT91C_PIO_PB24) // =20
+#define AT91C_PB25_ISI_D5 (AT91C_PIO_PB25) // =20
+#define AT91C_PB26_ISI_D6 (AT91C_PIO_PB26) // =20
+#define AT91C_PB27_ISI_D7 (AT91C_PIO_PB27) // =20
+#define AT91C_PB28_ISI_PCK (AT91C_PIO_PB28) // =20
+#define AT91C_PB29_ISI_VSYNC (AT91C_PIO_PB29) // =20
+#define AT91C_PB3_SPI0_NPCS0 (AT91C_PIO_PB3) // SPI 0 Peripheral Chip Sel=
ect 0
+#define AT91C_PB30_ISI_HSYNC (AT91C_PIO_PB30) // =20
+#define AT91C_PB31_ (AT91C_PIO_PB31) // =20
+#define AT91C_PB31_PCK1 (AT91C_PIO_PB31) // =20
+#define AT91C_PB4_TXD1 (AT91C_PIO_PB4) // USART 1 Transmit Data
+#define AT91C_PB5_RXD1 (AT91C_PIO_PB5) // USART 1 Receive Data
+#define AT91C_PB6_TXD2 (AT91C_PIO_PB6) // USART 2 Transmit Data
+#define AT91C_PB7_RXD2 (AT91C_PIO_PB7) // USART 2 Receive Data
+#define AT91C_PB8_TXD3 (AT91C_PIO_PB8) // USART 3 Transmit Data
+#define AT91C_PB8_ISI_D8 (AT91C_PIO_PB8) // =20
+#define AT91C_PB9_RXD3 (AT91C_PIO_PB9) // USART 3 Receive Data
+#define AT91C_PB9_ISI_D9 (AT91C_PIO_PB9) // =20
+#define AT91C_PC0_DQM2 (AT91C_PIO_PC0) // DQM2
+#define AT91C_PC1_DQM3 (AT91C_PIO_PC1) // DQM3
+#define AT91C_PC10_NCS4_CFCS0 (AT91C_PIO_PC10) // =20
+#define AT91C_PC10_TCLK2 (AT91C_PIO_PC10) // =20
+#define AT91C_PC11_NCS5_CFCS1 (AT91C_PIO_PC11) // =20
+#define AT91C_PC11_CTS2 (AT91C_PIO_PC11) // =20
+#define AT91C_PC12_A25_CFRNW (AT91C_PIO_PC12) // =20
+#define AT91C_PC13_NCS2 (AT91C_PIO_PC13) // =20
+#define AT91C_PC14_NCS3_NANDCS (AT91C_PIO_PC14) // =20
+#define AT91C_PC15_NWAIT (AT91C_PIO_PC15) // =20
+#define AT91C_PC16_D16 (AT91C_PIO_PC16) // =20
+#define AT91C_PC17_D17 (AT91C_PIO_PC17) // =20
+#define AT91C_PC18_D18 (AT91C_PIO_PC18) // =20
+#define AT91C_PC19_D19 (AT91C_PIO_PC19) // =20
+#define AT91C_PC2_A19 (AT91C_PIO_PC2) // =20
+#define AT91C_PC20_D20 (AT91C_PIO_PC20) // =20
+#define AT91C_PC21_D21 (AT91C_PIO_PC21) // =20
+#define AT91C_PC22_D22 (AT91C_PIO_PC22) // =20
+#define AT91C_PC23_D23 (AT91C_PIO_PC23) // =20
+#define AT91C_PC24_D24 (AT91C_PIO_PC24) // =20
+#define AT91C_PC25_D25 (AT91C_PIO_PC25) // =20
+#define AT91C_PC26_D26 (AT91C_PIO_PC26) // =20
+#define AT91C_PC27_D27 (AT91C_PIO_PC27) // =20
+#define AT91C_PC28_D28 (AT91C_PIO_PC28) // =20
+#define AT91C_PC29_D29 (AT91C_PIO_PC29) // =20
+#define AT91C_PC3_A20 (AT91C_PIO_PC3) // =20
+#define AT91C_PC30_D30 (AT91C_PIO_PC30) // =20
+#define AT91C_PC31_D31 (AT91C_PIO_PC31) // =20
+#define AT91C_PC4_A21_NANDALE (AT91C_PIO_PC4) // =20
+#define AT91C_PC5_A22_NANDCLE (AT91C_PIO_PC5) // =20
+#define AT91C_PC6_A23 (AT91C_PIO_PC6) // =20
+#define AT91C_PC7_A24 (AT91C_PIO_PC7) // =20
+#define AT91C_PC8_CFCE1 (AT91C_PIO_PC8) // =20
+#define AT91C_PC9_CFCE2 (AT91C_PIO_PC9) // =20
+#define AT91C_PC9_RTS2 (AT91C_PIO_PC9) // =20
+#define AT91C_PD0_TK0 (AT91C_PIO_PD0) // =20
+#define AT91C_PD0_PWM3 (AT91C_PIO_PD0) // =20
+#define AT91C_PD1_TF0 (AT91C_PIO_PD1) // =20
+#define AT91C_PD10_TD1 (AT91C_PIO_PD10) // =20
+#define AT91C_PD11_RD1 (AT91C_PIO_PD11) // =20
+#define AT91C_PD12_TK1 (AT91C_PIO_PD12) // =20
+#define AT91C_PD12_PCK0 (AT91C_PIO_PD12) // =20
+#define AT91C_PD13_RK1 (AT91C_PIO_PD13) // =20
+#define AT91C_PD14_TF1 (AT91C_PIO_PD14) // =20
+#define AT91C_PD15_RF1 (AT91C_PIO_PD15) // =20
+#define AT91C_PD16_RTS1 (AT91C_PIO_PD16) // =20
+#define AT91C_PD17_CTS1 (AT91C_PIO_PD17) // =20
+#define AT91C_PD18_SPI1_NPCS2 (AT91C_PIO_PD18) // =20
+#define AT91C_PD18_IRQ (AT91C_PIO_PD18) // =20
+#define AT91C_PD19_SPI1_NPCS3 (AT91C_PIO_PD19) // =20
+#define AT91C_PD19_FIQ (AT91C_PIO_PD19) // =20
+#define AT91C_PD2_TD0 (AT91C_PIO_PD2) // =20
+#define AT91C_PD20_TIOA0 (AT91C_PIO_PD20) // =20
+#define AT91C_PD21_TIOA1 (AT91C_PIO_PD21) // =20
+#define AT91C_PD22_TIOA2 (AT91C_PIO_PD22) // =20
+#define AT91C_PD23_TCLK0 (AT91C_PIO_PD23) // =20
+#define AT91C_PD24_SPI0_NPCS1 (AT91C_PIO_PD24) // =20
+#define AT91C_PD24_PWM0 (AT91C_PIO_PD24) // =20
+#define AT91C_PD25_SPI0_NPCS2 (AT91C_PIO_PD25) // =20
+#define AT91C_PD25_PWM1 (AT91C_PIO_PD25) // =20
+#define AT91C_PD26_PCK0 (AT91C_PIO_PD26) // =20
+#define AT91C_PD26_PWM2 (AT91C_PIO_PD26) // =20
+#define AT91C_PD27_PCK1 (AT91C_PIO_PD27) // =20
+#define AT91C_PD27_SPI0_NPCS3 (AT91C_PIO_PD27) // =20
+#define AT91C_PD28_TSADTRG (AT91C_PIO_PD28) // =20
+#define AT91C_PD28_SPI1_NPCS1 (AT91C_PIO_PD28) // =20
+#define AT91C_PD29_TCLK1 (AT91C_PIO_PD29) // =20
+#define AT91C_PD29_SCK1 (AT91C_PIO_PD29) // =20
+#define AT91C_PD3_RD0 (AT91C_PIO_PD3) // =20
+#define AT91C_PD30_TIOB0 (AT91C_PIO_PD30) // =20
+#define AT91C_PD30_SCK2 (AT91C_PIO_PD30) // =20
+#define AT91C_PD31_TIOB1 (AT91C_PIO_PD31) // =20
+#define AT91C_PD31_PWM1 (AT91C_PIO_PD31) // =20
+#define AT91C_PD4_RK0 (AT91C_PIO_PD4) // =20
+#define AT91C_PD5_RF0 (AT91C_PIO_PD5) // =20
+#define AT91C_PD6_AC97RX (AT91C_PIO_PD6) // =20
+#define AT91C_PD7_AC97TX (AT91C_PIO_PD7) // =20
+#define AT91C_PD7_TIOA5 (AT91C_PIO_PD7) // =20
+#define AT91C_PD8_AC97FS (AT91C_PIO_PD8) // =20
+#define AT91C_PD8_TIOB5 (AT91C_PIO_PD8) // =20
+#define AT91C_PD9_AC97CK (AT91C_PIO_PD9) // =20
+#define AT91C_PD9_TCLK5 (AT91C_PIO_PD9) // =20
+#define AT91C_PE0_LCDPWR (AT91C_PIO_PE0) // =20
+#define AT91C_PE0_PCK0 (AT91C_PIO_PE0) // =20
+#define AT91C_PE1_LCDMOD (AT91C_PIO_PE1) // =20
+#define AT91C_PE10_LCDD3 (AT91C_PIO_PE10) // =20
+#define AT91C_PE10_LCDD5 (AT91C_PIO_PE10) // =20
+#define AT91C_PE11_LCDD4 (AT91C_PIO_PE11) // =20
+#define AT91C_PE11_LCDD6 (AT91C_PIO_PE11) // =20
+#define AT91C_PE12_LCDD5 (AT91C_PIO_PE12) // =20
+#define AT91C_PE12_LCDD7 (AT91C_PIO_PE12) // =20
+#define AT91C_PE13_LCDD6 (AT91C_PIO_PE13) // =20
+#define AT91C_PE13_LCDD10 (AT91C_PIO_PE13) // =20
+#define AT91C_PE14_LCDD7 (AT91C_PIO_PE14) // =20
+#define AT91C_PE14_LCDD11 (AT91C_PIO_PE14) // =20
+#define AT91C_PE15_LCDD8 (AT91C_PIO_PE15) // =20
+#define AT91C_PE15_LCDD12 (AT91C_PIO_PE15) // =20
+#define AT91C_PE16_LCDD9 (AT91C_PIO_PE16) // =20
+#define AT91C_PE16_LCDD13 (AT91C_PIO_PE16) // =20
+#define AT91C_PE17_LCDD10 (AT91C_PIO_PE17) // =20
+#define AT91C_PE17_LCDD14 (AT91C_PIO_PE17) // =20
+#define AT91C_PE18_LCDD11 (AT91C_PIO_PE18) // =20
+#define AT91C_PE18_LCDD15 (AT91C_PIO_PE18) // =20
+#define AT91C_PE19_LCDD12 (AT91C_PIO_PE19) // =20
+#define AT91C_PE19_LCDD18 (AT91C_PIO_PE19) // =20
+#define AT91C_PE2_LCDCC (AT91C_PIO_PE2) // =20
+#define AT91C_PE20_LCDD13 (AT91C_PIO_PE20) // =20
+#define AT91C_PE20_LCDD19 (AT91C_PIO_PE20) // =20
+#define AT91C_PE21_LCDD14 (AT91C_PIO_PE21) // =20
+#define AT91C_PE21_LCDD20 (AT91C_PIO_PE21) // =20
+#define AT91C_PE22_LCDD15 (AT91C_PIO_PE22) // =20
+#define AT91C_PE22_LCDD21 (AT91C_PIO_PE22) // =20
+#define AT91C_PE23_LCDD16 (AT91C_PIO_PE23) // =20
+#define AT91C_PE23_LCDD22 (AT91C_PIO_PE23) // =20
+#define AT91C_PE24_LCDD17 (AT91C_PIO_PE24) // =20
+#define AT91C_PE24_LCDD23 (AT91C_PIO_PE24) // =20
+#define AT91C_PE25_LCDD18 (AT91C_PIO_PE25) // =20
+#define AT91C_PE26_LCDD19 (AT91C_PIO_PE26) // =20
+#define AT91C_PE27_LCDD20 (AT91C_PIO_PE27) // =20
+#define AT91C_PE28_LCDD21 (AT91C_PIO_PE28) // =20
+#define AT91C_PE29_LCDD22 (AT91C_PIO_PE29) // =20
+#define AT91C_PE3_LCDVSYNC (AT91C_PIO_PE3) // =20
+#define AT91C_PE30_LCDD23 (AT91C_PIO_PE30) // =20
+#define AT91C_PE31_PWM2 (AT91C_PIO_PE31) // =20
+#define AT91C_PE31_PCK1 (AT91C_PIO_PE31) // =20
+#define AT91C_PE4_LCDHSYNC (AT91C_PIO_PE4) // =20
+#define AT91C_PE5_LCDDOTCK (AT91C_PIO_PE5) // =20
+#define AT91C_PE6_LCDDEN (AT91C_PIO_PE6) // =20
+#define AT91C_PE7_LCDD0 (AT91C_PIO_PE7) // =20
+#define AT91C_PE7_LCDD2 (AT91C_PIO_PE7) // =20
+#define AT91C_PE8_LCDD1 (AT91C_PIO_PE8) // =20
+#define AT91C_PE8_LCDD3 (AT91C_PIO_PE8) // =20
+#define AT91C_PE9_LCDD2 (AT91C_PIO_PE9) // =20
+#define AT91C_PE9_LCDD4 (AT91C_PIO_PE9) // =20
+
+#endif /* ARM_AT91_AT91_PIO_SAM9G45_H */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_pmc.c
--- a/head/sys/arm/at91/at91_pmc.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_pmc.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91_pmc.c 236658 2012-06-06 06:19:5=
2Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91_pmc.c 239168 2012-08-10 04:48:0=
6Z imp $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -65,6 +65,7 @@
#define AT91_PMC_BASE 0xffffc00
=20
static void at91_pmc_set_pllb_mode(struct at91_pmc_clock *, int);
+static void at91_pmc_set_upll_mode(struct at91_pmc_clock *, int);
static void at91_pmc_set_sys_mode(struct at91_pmc_clock *, int);
static void at91_pmc_set_periph_mode(struct at91_pmc_clock *, int);
static void at91_pmc_clock_alias(const char *name, const char *alias);
@@ -110,6 +111,18 @@
.set_mode =3D &at91_pmc_set_pllb_mode,
};
=20
+/* Used by USB on at91sam9g45 */
+static struct at91_pmc_clock upll =3D {
+ .name =3D "upll", // UTMI PLL, used for USB functions on 9G45
+ .parent =3D &main_ck,
+ .refcnt =3D 0,
+ .id =3D 0,
+ .primary =3D 1,
+ .pll =3D 1,
+ .pmc_mask =3D (1 << 6),
+ .set_mode =3D &at91_pmc_set_upll_mode,
+};
+
static struct at91_pmc_clock udpck =3D {
.name =3D "udpck",
.parent =3D &pllb,
@@ -143,6 +156,7 @@
&main_ck,
&plla,
&pllb,
+ &upll,
&udpck,
&uhpck,
&mck,
@@ -199,6 +213,26 @@
}
=20
static void
+at91_pmc_set_upll_mode(struct at91_pmc_clock *clk, int on)
+{
+ struct at91_pmc_softc *sc =3D pmc_softc;
+ uint32_t value;
+
+ if (on) {
+ on =3D PMC_IER_LOCKU;
+ value =3D CKGR_UCKR_UPLLEN | CKGR_UCKR_BIASEN;
+ } else
+ value =3D 0;
+
+ WR4(sc, CKGR_UCKR, RD4(sc, CKGR_UCKR) | value);
+ while ((RD4(sc, PMC_SR) & PMC_IER_LOCKU) !=3D on)
+ continue;
+
+ WR4(sc, PMC_USB, PMC_USB_USBDIV(9) | PMC_USB_USBS);
+ WR4(sc, PMC_SCER, PMC_SCER_UHP_SAM9);
+}
+
+static void
at91_pmc_set_sys_mode(struct at91_pmc_clock *clk, int on)
{
struct at91_pmc_softc *sc =3D pmc_softc;
@@ -466,9 +500,19 @@
uhpck.pmc_mask =3D PMC_SCER_UHP_SAM9;
udpck.pmc_mask =3D PMC_SCER_UDP_SAM9;
}
+
+ /* There is no pllb on AT91SAM9G45 */
+ if (at91_cpu_is(AT91_T_SAM9G45)) {
+ uhpck.parent =3D &upll;
+ uhpck.pmc_mask =3D PMC_SCER_UHP_SAM9;
+ }
+
mckr =3D RD4(sc, PMC_MCKR);
main_ck.hz =3D main_clock;
=20
+ // Note: this means outa calc code for plla never used since
+ // we never change it. If we did, we'd also have to mind
+ // ICPLLA to get the charge pump current right.
at91_pmc_pll_rate(&plla, RD4(sc, CKGR_PLLAR));
=20
if (at91_cpu_is(AT91_T_SAM9G45) && (mckr & PMC_MCKR_PLLADIV2))
@@ -476,16 +520,17 @@
=20
/*
* Initialize the usb clock. This sets up pllb, but disables the
- * actual clock.
+ * actual clock. XXX except for the if 0 :(
*/
- pllb_init =3D at91_pmc_pll_calc(&pllb, 48000000 * 2) | 0x10000000;
- at91_pmc_pll_rate(&pllb, pllb_init);
-
+ if (!at91_cpu_is(AT91_T_SAM9G45)) {
+ pllb_init =3D at91_pmc_pll_calc(&pllb, 48000000 * 2) | 0x10000000;
+ at91_pmc_pll_rate(&pllb, pllb_init);
#if 0
- /* Turn off USB clocks */
- at91_pmc_set_periph_mode(&ohci_clk, 0);
- at91_pmc_set_periph_mode(&udc_clk, 0);
+ /* Turn off USB clocks */
+ at91_pmc_set_periph_mode(&ohci_clk, 0);
+ at91_pmc_set_periph_mode(&udc_clk, 0);
#endif
+ }
=20
if (at91_is_rm92()) {
WR4(sc, PMC_SCDR, PMC_SCER_UHP | PMC_SCER_UDP);
@@ -506,8 +551,14 @@
=20
mdiv =3D (mckr & PMC_MCKR_MDIV_MASK) >> 8;
if (at91_is_sam9() || at91_is_sam9xe()) {
+ /*
+ * On AT91SAM9G45 when mdiv =3D=3D 3 we need to divide
+ * MCK by 3 but not, for example, on 9g20.
+ */
+ if (!at91_cpu_is(AT91_T_SAM9G45) || mdiv <=3D 2)
+ mdiv *=3D 2;
if (mdiv > 0)
- mck.hz /=3D mdiv * 2;
+ mck.hz /=3D mdiv;
} else
mck.hz /=3D (1 + mdiv);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_pmcreg.h
--- a/head/sys/arm/at91/at91_pmcreg.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_pmcreg.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* SUCH DAMAGE.
*/
=20
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/arm/at91/at91_pmcreg.h 239167 2012-08-10 04:47:20Z i=
mp $ */
=20
#ifndef ARM_AT91_AT91_PMCREG_H
#define ARM_AT91_AT91_PMCREG_H
@@ -36,14 +36,14 @@
#define PMC_PCER 0x10 /* Peripheral Clock Enable Register */
#define PMC_PCDR 0x14 /* Peripheral Clock Disable Register */
#define PMC_PCSR 0x18 /* Peripheral Clock Status Register */
- /* 0x1c reserved */
+#define CKGR_UCKR 0x1c /* UTMI Clock Configuration Register */
#define CKGR_MOR 0x20 /* Main Oscillator Register */
#define CKGR_MCFR 0x24 /* Main Clock Frequency Register */
#define CKGR_PLLAR 0x28 /* PLL A Register */
#define CKGR_PLLBR 0x2c /* PLL B Register */
#define PMC_MCKR 0x30 /* Master Clock Register */
/* 0x34 reserved */
- /* 0x38 reserved */
+#define PMC_USB 0x38 /* USB Clock Register */
/* 0x3c reserved */
#define PMC_PCK0 0x40 /* Programmable Clock 0 Register */
#define PMC_PCK1 0x44 /* Programmable Clock 1 Register */
@@ -57,6 +57,11 @@
#define PMC_IDR 0x64 /* Interrupt Disable Register */
#define PMC_SR 0x68 /* Status Register */
#define PMC_IMR 0x6c /* Interrupt Mask Register */
+ /* 0x70 reserved */
+ /* 0x74 reserved */
+ /* 0x78 reserved */
+ /* 0x7c reserved */
+#define PMC_PLLICPR 0x80 /* PLL Charge Pump Current Register */
=20
/* PMC System Clock Enable Register */
/* PMC System Clock Disable Register */
@@ -77,6 +82,10 @@
/* PMC Peripheral Clock Status Register */
/* Each bit here is 1 << peripheral number to enable/disable/status */
=20
+/* PMC UTMI Clock Configuration Register */
+#define CKGR_UCKR_BIASEN (1UL << 24)
+#define CKGR_UCKR_UPLLEN (1UL << 16)
+
/* PMC Clock Generator Main Oscillator Register */
#define CKGR_MOR_MOSCEN (1UL << 0) /* MOSCEN: Main Oscillator Enable */
#define CKGR_MOR_OSCBYPASS (1UL << 1) /* Oscillator Bypass */
@@ -93,6 +102,10 @@
#define PMC_MCKR_MDIV_MASK (3 << 8) =09
#define PMC_MCKR_PRES_MASK (7 << 2) =09
=20
+/* PMC USB Clock Register */
+#define PMC_USB_USBDIV(n) (((n) & 0x0F) << 8)
+#define PMC_USB_USBS (1 << 0)
+
/* PMC Interrupt Enable Register */
/* PMC Interrupt Disable Register */
/* PMC Status Register */
@@ -101,6 +114,7 @@
#define PMC_IER_LOCKA (1UL << 1) /* PLL A Locked */
#define PMC_IER_LOCKB (1UL << 2) /* PLL B Locked */
#define PMC_IER_MCKRDY (1UL << 3) /* Master Clock Status */
+#define PMC_IER_LOCKU (1UL << 6) /* UPLL Locked */
#define PMC_IER_PCK0RDY (1UL << 8) /* Programmable Clock 0 Ready */
#define PMC_IER_PCK1RDY (1UL << 9) /* Programmable Clock 1 Ready */
#define PMC_IER_PCK2RDY (1UL << 10) /* Programmable Clock 2 Ready */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_spi.c
--- a/head/sys/arm/at91/at91_spi.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_spi.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91_spi.c 237239 2012-06-18 20:14:4=
2Z marius $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91_spi.c 238955 2012-07-31 19:14:2=
2Z imp $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -42,6 +42,7 @@
=20
#include <machine/bus.h>
=20
+#include <arm/at91/at91var.h>
#include <arm/at91/at91_spireg.h>
#include <arm/at91/at91_pdcreg.h>
=20
@@ -144,6 +145,7 @@
* memory and APB bandwidth.
* Also, currently we lack a way for lettting both the board and the
* slave devices take their maximum supported SPI clocks into account.
+ * Also, we hard-wire SPI mode to 3.
*/
csr =3D SPI_CSR_CPOL | (4 << 16) | (0xff << 8);
WR4(sc, SPI_CSR0, csr);
@@ -285,7 +287,10 @@
*/
WR4(sc, PDC_PTCR, PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS);
=20
-#ifdef SPI_CHIPSEL_SUPPORT
+ /*
+ * PSCDEC =3D 0 has a range of 0..3 for chip select. We
+ * don't support PSCDEC =3D 1 which has a range of 0..15.
+ */
if (cmd->cs < 0 || cmd->cs > 3) {
device_printf(dev,
"Invalid chip select %d requested by %s\n", cmd->cs,
@@ -293,18 +298,23 @@
err =3D EINVAL;
goto out;
}
+
#ifdef SPI_CHIP_SELECT_HIGH_SUPPORT
+ /*
+ * The AT91RM9200 couldn't do CS high for CS 0. Other chips can, but we
+ * don't support that yet, or other spi modes.
+ */
if (at91_is_rm92() && cmd->cs =3D=3D 0 &&
(cmd->flags & SPI_CHIP_SELECT_HIGH) !=3D 0) {
device_printf(dev,
- "Invalid chip select high requested by %s\n",
+ "Invalid chip select high requested by %s for cs 0.\n",
device_get_nameunit(child));
err =3D EINVAL;
goto out;
}
#endif
- WR4(sc, SPI_MR, (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs));
-#endif
+ err =3D (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs);
+ WR4(sc, SPI_MR, err);
=20
/*
* Set up the TX side of the transfer.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9g45.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9g45.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,177 @@
+/*-
+ * Copyright (c) 2005 Olivier Houchard. All rights reserved.
+ * Copyright (c) 2010 Greg Ansley. All rights reserved.
+ * Copyright (c) 2012 Andrew Turner. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91sam9g45.c 238788 2012-07-26 08:0=
1:25Z andrew $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+
+#define _ARM32_BUS_DMA_PRIVATE
+#include <machine/bus.h>
+
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91soc.h>
+#include <arm/at91/at91_aicreg.h>
+#include <arm/at91/at91sam9g45reg.h>
+#include <arm/at91/at91_pitreg.h>
+#include <arm/at91/at91_pmcreg.h>
+#include <arm/at91/at91_pmcvar.h>
+#include <arm/at91/at91_rstreg.h>
+
+/*
+ * Standard priority levels for the system. 0 is lowest and 7 is highest.
+ * These values are the ones Atmel uses for its Linux port
+ */
+static const int at91_irq_prio[32] =3D
+{
+ 7, /* Advanced Interrupt Controller */
+ 7, /* System Peripherals */
+ 1, /* Parallel IO Controller A */
+ 1, /* Parallel IO Controller B */
+ 1, /* Parallel IO Controller C */
+ 1, /* Parallel IO Controller D and E */
+ 0,
+ 5, /* USART 0 */
+ 5, /* USART 1 */
+ 5, /* USART 2 */
+ 5, /* USART 3 */
+ 0, /* Multimedia Card Interface 0 */
+ 6, /* Two-Wire Interface 0 */
+ 6, /* Two-Wire Interface 1 */
+ 5, /* Serial Peripheral Interface 0 */
+ 5, /* Serial Peripheral Interface 1 */
+ 4, /* Serial Synchronous Controller 0 */
+ 4, /* Serial Synchronous Controller 1 */
+ 0, /* Timer Counter 0, 1, 2, 3, 4 and 5 */
+ 0, /* Pulse Width Modulation Controller */
+ 0, /* Touch Screen Controller */
+ 0, /* DMA Controller */
+ 2, /* USB Host High Speed port */
+ 3, /* LCD Controller */
+ 5, /* AC97 Controller */
+ 3, /* Ethernet */
+ 0, /* Image Sensor Interface */
+ 2, /* USB Device High Speed port */
+ 0, /* (reserved) */
+ 0, /* Multimedia Card Interface 1 */
+ 0, /* (reserved) */
+ 0, /* Advanced Interrupt Controller IRQ0 */
+};
+
+#define DEVICE(_name, _id, _unit) \
+ { \
+ _name, _unit, \
+ AT91SAM9G45_ ## _id ##_BASE, \
+ AT91SAM9G45_ ## _id ## _SIZE, \
+ AT91SAM9G45_IRQ_ ## _id \
+ }
+
+static const struct cpu_devs at91_devs[] =3D
+{
+ DEVICE("at91_pmc", PMC, 0),
+ DEVICE("at91_wdt", WDT, 0),
+ DEVICE("at91_rst", RSTC, 0),
+ DEVICE("at91_pit", PIT, 0),
+ DEVICE("at91_pio", PIOA, 0),
+ DEVICE("at91_pio", PIOB, 1),
+ DEVICE("at91_pio", PIOC, 2),
+ DEVICE("at91_pio", PIOD, 3),
+ DEVICE("at91_pio", PIOE, 4),
+ DEVICE("at91_twi", TWI0, 0),
+ DEVICE("at91_twi", TWI1, 1),
+ DEVICE("at91_mci", HSMCI0, 0),
+ DEVICE("at91_mci", HSMCI1, 1),
+ DEVICE("uart", DBGU, 0),
+ DEVICE("uart", USART0, 1),
+ DEVICE("uart", USART1, 2),
+ DEVICE("uart", USART2, 3),
+ DEVICE("uart", USART3, 4),
+ DEVICE("spi", SPI0, 0),
+ DEVICE("spi", SPI1, 1),
+ DEVICE("ate", EMAC, 0),
+ DEVICE("macb", EMAC, 0),
+ DEVICE("nand", NAND, 0),
+ DEVICE("ohci", OHCI, 0),
+ { 0, 0, 0, 0, 0 }
+};
+
+static uint32_t
+at91_pll_outa(int freq)
+{
+
+ switch (freq / 10000000) {
+ case 747 ... 801: return ((1 << 29) | (0 << 14));
+ case 697 ... 746: return ((1 << 29) | (1 << 14));
+ case 647 ... 696: return ((1 << 29) | (2 << 14));
+ case 597 ... 646: return ((1 << 29) | (3 << 14));
+ case 547 ... 596: return ((1 << 29) | (4 << 14));
+ case 497 ... 546: return ((1 << 29) | (5 << 14));
+ case 447 ... 496: return ((1 << 29) | (6 << 14));
+ case 397 ... 446: return ((1 << 29) | (7 << 14));
+ default: return (1 << 29);
+ }
+}
+
+static void
+at91_clock_init(void)
+{
+ struct at91_pmc_clock *clk;
+
+ /* Update USB host port clock info */
+ clk =3D at91_pmc_clock_ref("uhpck");
+ clk->pmc_mask =3D PMC_SCER_UHP_SAM9;
+ at91_pmc_clock_deref(clk);
+
+ /* Each SOC has different PLL contraints */
+ clk =3D at91_pmc_clock_ref("plla");
+ clk->pll_min_in =3D SAM9G45_PLL_A_MIN_IN_FREQ; /* 2 MHz */
+ clk->pll_max_in =3D SAM9G45_PLL_A_MAX_IN_FREQ; /* 32 MHz */
+ clk->pll_min_out =3D SAM9G45_PLL_A_MIN_OUT_FREQ; /* 400 MHz */
+ clk->pll_max_out =3D SAM9G45_PLL_A_MAX_OUT_FREQ; /* 800 MHz */
+ clk->pll_mul_shift =3D SAM9G45_PLL_A_MUL_SHIFT;
+ clk->pll_mul_mask =3D SAM9G45_PLL_A_MUL_MASK;
+ clk->pll_div_shift =3D SAM9G45_PLL_A_DIV_SHIFT;
+ clk->pll_div_mask =3D SAM9G45_PLL_A_DIV_MASK;
+ clk->set_outb =3D at91_pll_outa;
+ at91_pmc_clock_deref(clk);
+}
+
+static struct at91_soc_data soc_data =3D {
+ .soc_delay =3D at91_pit_delay,
+ .soc_reset =3D at91_rst_cpu_reset,
+ .soc_clock_init =3D at91_clock_init,
+ .soc_irq_prio =3D at91_irq_prio,
+ .soc_children =3D at91_devs,
+};
+
+AT91_SOC(AT91_T_SAM9G45, &soc_data);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9g45reg.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9g45reg.h Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,294 @@
+/*-
+ * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
+ * Copyright (c) 2010 Greg Ansley. All rights reserved.
+ * Copyright (c) 2012 Andrew Turner. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $FreeBSD: head/sys/arm/at91/at91sam9g45reg.h 238788 2012-07-26 08:01:25=
Z andrew $ */
+
+#ifndef AT91SAM9G45REG_H_
+#define AT91SAM9G45REG_H_
+
+/* Chip Specific limits */
+#define SAM9G45_PLL_A_MIN_IN_FREQ 2000000 /* 2 Mhz */
+#define SAM9G45_PLL_A_MAX_IN_FREQ 32000000 /* 32 Mhz */
+#define SAM9G45_PLL_A_MIN_OUT_FREQ 400000000 /* 400 Mhz */
+#define SAM9G45_PLL_A_MAX_OUT_FREQ 800000000 /* 800 Mhz */
+#define SAM9G45_PLL_A_MUL_SHIFT 16
+#define SAM9G45_PLL_A_MUL_MASK 0xFF
+#define SAM9G45_PLL_A_DIV_SHIFT 0
+#define SAM9G45_PLL_A_DIV_MASK 0xFF
+
+/*
+ * Memory map, from datasheet :
+ * 0x00000000 - 0x0ffffffff : Internal Memories
+ * 0x10000000 - 0x1ffffffff : Chip Select 0
+ * 0x20000000 - 0x2ffffffff : Chip Select 1
+ * 0x30000000 - 0x3ffffffff : Chip Select 2
+ * 0x40000000 - 0x4ffffffff : Chip Select 3
+ * 0x50000000 - 0x5ffffffff : Chip Select 4
+ * 0x60000000 - 0x6ffffffff : Chip Select 5
+ * 0x70000000 - 0x7ffffffff : DDR SDRC 0
+ * 0x80000000 - 0xeffffffff : Undefined (Abort)
+ * 0xf0000000 - 0xfffffffff : Peripherals
+ */
+
+#define AT91_CHIPSELECT_0 0x10000000
+#define AT91_CHIPSELECT_1 0x20000000
+#define AT91_CHIPSELECT_2 0x30000000
+#define AT91_CHIPSELECT_3 0x40000000
+#define AT91_CHIPSELECT_4 0x50000000
+#define AT91_CHIPSELECT_5 0x60000000
+
+
+#define AT91SAM9G45_EMAC_BASE 0xffbc000
+#define AT91SAM9G45_EMAC_SIZE 0x4000
+
+#define AT91SAM9G45_RSTC_BASE 0xffffd00
+#define AT91SAM9G45_RSTC_SIZE 0x10
+
+/* USART*/
+
+#define AT91SAM9G45_USART_SIZE 0x4000
+#define AT91SAM9G45_USART0_BASE 0xff8c000
+#define AT91SAM9G45_USART0_SIZE AT91SAM9G45_USART_SIZE
+#define AT91SAM9G45_USART1_BASE 0xff90000
+#define AT91SAM9G45_USART1_SIZE AT91SAM9G45_USART_SIZE
+#define AT91SAM9G45_USART2_BASE 0xff94000
+#define AT91SAM9G45_USART2_SIZE AT91SAM9G45_USART_SIZE
+#define AT91SAM9G45_USART3_BASE 0xff98000
+#define AT91SAM9G45_USART3_SIZE AT91SAM9G45_USART_SIZE
+
+/*TC*/
+#define AT91SAM9G45_TC0_BASE 0xff7c000
+#define AT91SAM9G45_TC0_SIZE 0x4000
+#define AT91SAM9G45_TC0C0_BASE 0xff7c000
+#define AT91SAM9G45_TC0C1_BASE 0xff7c040
+#define AT91SAM9G45_TC0C2_BASE 0xff7c080
+
+#define AT91SAM9G45_TC1_BASE 0xffd4000
+#define AT91SAM9G45_TC1_SIZE 0x4000
+#define AT91SAM9G45_TC1C0_BASE 0xffd4000
+#define AT91SAM9G45_TC1C1_BASE 0xffd4040
+#define AT91SAM9G45_TC1C2_BASE 0xffd4080
+
+/*SPI*/
+
+#define AT91SAM9G45_SPI0_BASE 0xffa48000
+#define AT91SAM9G45_SPI0_SIZE 0x4000
+
+#define AT91SAM9G45_SPI1_BASE 0xffa8000
+#define AT91SAM9G45_SPI1_SIZE 0x4000
+
+/* System Registers */
+#define AT91SAM9G45_SYS_BASE 0xffff000
+#define AT91SAM9G45_SYS_SIZE 0x1000
+
+#define AT91SAM9G45_MATRIX_BASE 0xfffea00
+#define AT91SAM9G45_MATRIX_SIZE 0x200
+
+#define AT91SAM9G45_DBGU_BASE 0xfffee00
+#define AT91SAM9G45_DBGU_SIZE 0x200
+
+/*
+ * PIO
+ */
+#define AT91SAM9G45_PIOA_BASE 0xffff200
+#define AT91SAM9G45_PIOA_SIZE 0x200
+#define AT91SAM9G45_PIOB_BASE 0xffff400
+#define AT91SAM9G45_PIOB_SIZE 0x200
+#define AT91SAM9G45_PIOC_BASE 0xffff600
+#define AT91SAM9G45_PIOC_SIZE 0x200
+#define AT91SAM9G45_PIOD_BASE 0xffff800
+#define AT91SAM9G45_PIOD_SIZE 0x200
+#define AT91SAM9G45_PIOE_BASE 0xffffa00
+#define AT91SAM9G45_PIOE_SIZE 0x200
+
+#define AT91SAM9G45_PMC_BASE 0xffffc00
+#define AT91SAM9G45_PMC_SIZE 0x100
+
+/* IRQs : */
+/*
+ * 0: AIC
+ * 1: System peripheral (System timer, RTC, DBGU)
+ * 2: PIO Controller A
+ * 3: PIO Controller B
+ * 4: PIO Controller C
+ * 5: PIO Controller D/E
+ * 6: TRNG
+ * 7: USART 0
+ * 8: USART 1
+ * 9: USART 2
+ * 10: USART 3
+ * 11: Multimedia Card interface 0
+ * 12: Two-wirte interface 0
+ * 13: Two-wirte interface 1
+ * 14: SPI 0
+ * 15: SPI 1
+ * 16: SSC 0
+ * 17: SSC 0
+ * 18: Timer Counter 0, 2, 3, 4, 5
+ * 19: PWM
+ * 20: Touch Screen ADC
+ * 21: DMA
+ * 22: USB Host port
+ * 23: LCD
+ * 24: AC97
+ * 25: EMAC
+ * 26: Image Sensor Interface
+ * 27: USB Device High Speed
+ * 28: -
+ * 29: Multimedia Card interface 1
+ * 30: Reserved
+ * 31: AIC
+ */
+
+#define AT91SAM9G45_IRQ_SYSTEM 1
+#define AT91SAM9G45_IRQ_PIOA 2
+#define AT91SAM9G45_IRQ_PIOB 3
+#define AT91SAM9G45_IRQ_PIOC 4
+#define AT91SAM9G45_IRQ_PIOD 5
+#define AT91SAM9G45_IRQ_PIOE 6
+#define AT91SAM9G45_IRQ_USART0 7
+#define AT91SAM9G45_IRQ_USART1 8
+#define AT91SAM9G45_IRQ_USART2 9
+#define AT91SAM9G45_IRQ_USART3 10
+#define AT91SAM9G45_IRQ_HSMCI0 11
+#define AT91SAM9G45_IRQ_TWI0 12
+#define AT91SAM9G45_IRQ_TWI1 13
+#define AT91SAM9G45_IRQ_SPI0 14
+#define AT91SAM9G45_IRQ_SPI1 15
+#define AT91SAM9G45_IRQ_SSC0 16
+#define AT91SAM9G45_IRQ_SSC1 17
+#define AT91SAM9G45_IRQ_TC0_TC5 18
+#define AT91SAM9G45_IRQ_PWM 19
+#define AT91SAM9G45_IRQ_TSADCC 20
+#define AT91SAM9G45_IRQ_DMA 21
+#define AT91SAM9G45_IRQ_UHP 22
+#define AT91SAM9G45_IRQ_LCDC 23
+#define AT91SAM9G45_IRQ_AC97C 24
+#define AT91SAM9G45_IRQ_EMAC 25
+#define AT91SAM9G45_IRQ_ISI 26
+#define AT91SAM9G45_IRQ_UDPHS 27
+/* Reserved 28 */
+#define AT91SAM9G45_IRQ_HSMCI1 29
+/* Reserved 30 */
+#define AT91SAM9G45_IRQ_AICBASE 31
+
+/* Alias */
+#define AT91SAM9G45_IRQ_DBGU AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_PMC AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_WDT AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_PIT AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_RSTC AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_OHCI AT91SAM9G45_IRQ_UHP
+#define AT91SAM9G45_IRQ_TC0 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC1 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC2 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC3 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC4 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC5 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_NAND (-1)
+
+#define AT91SAM9G45_AIC_BASE 0xffff000
+#define AT91SAM9G45_AIC_SIZE 0x200
+
+/* Timer */
+
+#define AT91SAM9G45_WDT_BASE 0xffffd40
+#define AT91SAM9G45_WDT_SIZE 0x10
+
+#define AT91SAM9G45_PIT_BASE 0xffffd30
+#define AT91SAM9G45_PIT_SIZE 0x10
+
+#define AT91SAM9G45_SMC_BASE 0xfffe800
+#define AT91SAM9G45_SMC_SIZE 0x200
+
+#define AT91SAM9G45_PMC_BASE 0xffffc00
+#define AT91SAM9G45_PMC_SIZE 0x100
+
+#define AT91SAM9G45_HSMCI0_BASE 0xff80000
+#define AT91SAM9G45_HSMCI0_SIZE 0x4000
+
+#define AT91SAM9G45_HSMCI1_BASE 0xffd0000
+#define AT91SAM9G45_HSMCI1_SIZE 0x4000
+
+#define AT91SAM9G45_TWI0_BASE 0xff84000
+#define AT91SAM9G45_TWI0_SIZE 0x4000
+#define AT91SAM9G45_TWI1_BASE 0xff88000
+#define AT91SAM9G45_TWI1_SIZE 0x4000
+
+/* XXX Needs to be carfully coordinated with
+ * other * soc's so phyical and vm address
+ * mapping are unique. XXX
+ */
+#define AT91SAM9G45_OHCI_BASE 0xdfb00000
+#define AT91SAM9G45_OHCI_PA_BASE 0x00700000
+#define AT91SAM9G45_OHCI_SIZE 0x00100000
+
+#define AT91SAM9G45_NAND_BASE 0xe0000000
+#define AT91SAM9G45_NAND_PA_BASE 0x40000000
+#define AT91SAM9G45_NAND_SIZE 0x10000000
+
+
+/* DDRSDRC */
+#define AT91SAM9G45_DDRSDRC1_BASE 0xfffea00
+#define AT91SAM9G45_DDRSDRC0_BASE 0xfffe600
+#define AT91SAM9G45_DDRSDRC_MR 0x00
+#define AT91SAM9G45_DDRSDRC_TR 0x04
+#define AT91SAM9G45_DDRSDRC_CR 0x08
+#define AT91SAM9G45_DDRSDRC_CR_NC_8 0x0
+#define AT91SAM9G45_DDRSDRC_CR_NC_9 0x1
+#define AT91SAM9G45_DDRSDRC_CR_NC_10 0x2
+#define AT91SAM9G45_DDRSDRC_CR_NC_11 0x3
+#define AT91SAM9G45_DDRSDRC_CR_NC_MASK 0x00000003
+#define AT91SAM9G45_DDRSDRC_CR_NR_11 0x0
+#define AT91SAM9G45_DDRSDRC_CR_NR_12 0x4
+#define AT91SAM9G45_DDRSDRC_CR_NR_13 0x8
+#define AT91SAM9G45_DDRSDRC_CR_NR_14 0xc
+#define AT91SAM9G45_DDRSDRC_CR_NR_MASK 0x0000000c
+#define AT91SAM9G45_DDRSDRC_TPR0 0x0c
+#define AT91SAM9G45_DDRSDRC_TPR1 0x10
+#define AT91SAM9G45_DDRSDRC_TPR2 0x14
+/* Reserved 0x18 */
+#define AT91SAM9G45_DDRSDRC_LPR 0x1c
+#define AT91SAM9G45_DDRSDRC_MDR 0x20
+#define AT91SAM9G45_DDRSDRC_MDR_SDR 0x0
+#define AT91SAM9G45_DDRSDRC_MDR_LPSDR 0x1
+#define AT91SAM9G45_DDRSDRC_MDR_LPDDR1 0x3
+#define AT91SAM9G45_DDRSDRC_MDR_DDR2 0x6
+#define AT91SAM9G45_DDRSDRC_MDR_MASK 0x00000007
+#define AT91SAM9G45_DDRSDRC_MDR_DBW_16 0x10
+#define AT91SAM9G45_DDRSDRC_DLL 0x24
+#define AT91SAM9G45_DDRSDRC_HSR 0x2c
+#define AT91SAM9G45_DDRSDRC_DELAY1R 0x40
+#define AT91SAM9G45_DDRSDRC_DELAY2R 0x44
+#define AT91SAM9G45_DDRSDRC_DELAY3R 0x48
+#define AT91SAM9G45_DDRSDRC_DELAY4R 0x4c
+/* Reserved 0x50 - 0xe0 */
+#define AT91SAM9G45_DDRSDRC_WPMR 0xe4
+#define AT91SAM9G45_DDRSDRC_WPSR 0xe8
+
+#endif /* AT91SAM9G45REG_H_*/
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x25.c
--- a/head/sys/arm/at91/at91sam9x25.c Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-/*-
- * Copyright (c) 2005 Olivier Houchard. All rights reserved.
- * Copyright (c) 2010 Greg Ansley. All rights reserved.
- * Copyright (c) 2012 M. Warner Losh.. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
- * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91sam9x25.c 238397 2012-07-12 13:4=
5:58Z imp $");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/module.h>
-
-#include <machine/bus.h>
-
-#include <arm/at91/at91var.h>
-#include <arm/at91/at91reg.h>
-#include <arm/at91/at91soc.h>
-#include <arm/at91/at91_aicreg.h>
-#include <arm/at91/at91sam9x25reg.h>
-#include <arm/at91/at91_pitreg.h>
-#include <arm/at91/at91_pmcreg.h>
-#include <arm/at91/at91_pmcvar.h>
-#include <arm/at91/at91_rstreg.h>
-
-/*
- * Standard priority levels for the system. 0 is lowest and 7 is highest.
- * These values are the ones Atmel uses for its Linux port
- */
-static const int at91_irq_prio[32] =3D
-{
- 7, /* Advanced Interrupt Controller (FIQ) */
- 7, /* System Peripherals */
- 1, /* Parallel IO Controller A and B */
- 1, /* Parallel IO Controller C and D */
- 4, /* Soft Modem */
- 5, /* USART 0 */
- 5, /* USART 1 */
- 5, /* USART 2 */
- 5, /* USART 3 */
- 6, /* Two-Wire Interface 0 */
- 6, /* Two-Wire Interface 1 */
- 6, /* Two-Wire Interface 2 */
- 0, /* Multimedia Card Interface 0 */
- 5, /* Serial Peripheral Interface 0 */
- 5, /* Serial Peripheral Interface 1 */
- 5, /* UART 0 */
- 5, /* UART 1 */
- 0, /* Timer Counter 0, 1, 2, 3, 4 and 5 */
- 0, /* Pulse Width Modulation Controller */
- 0, /* ADC Controller */
- 0, /* DMA Controller 0 */
- 0, /* DMA Controller 1 */
- 2, /* USB Host High Speed port */
- 2, /* USB Device High speed port */
- 3, /* Ethernet MAC 0 */
- 3, /* LDC Controller or Image Sensor Interface */
- 0, /* Multimedia Card Interface 1 */
- 3, /* Ethernet MAC 1 */
- 4, /* Synchronous Serial Interface */
- 4, /* CAN Controller 0 */
- 4, /* CAN Controller 1 */
- 0, /* Advanced Interrupt Controller (IRQ0) */
-};
-
-#define DEVICE(_name, _id, _unit) \
- { \
- _name, _unit, \
- AT91SAM9X25_ ## _id ##_BASE, \
- AT91SAM9X25_ ## _id ## _SIZE, \
- AT91SAM9X25_IRQ_ ## _id \
- }
-
-static const struct cpu_devs at91_devs[] =3D
-{
- DEVICE("at91_pmc", PMC, 0),
- DEVICE("at91_wdt", WDT, 0),
- DEVICE("at91_rst", RSTC, 0),
- DEVICE("at91_pit", PIT, 0),
- DEVICE("at91_pio", PIOA, 0),
- DEVICE("at91_pio", PIOB, 1),
- DEVICE("at91_pio", PIOC, 2),
- DEVICE("at91_pio", PIOD, 3),
- DEVICE("at91_twi", TWI0, 0),
- DEVICE("at91_twi", TWI1, 1),
- DEVICE("at91_twi", TWI2, 2),
- DEVICE("at91_mci", HSMCI0, 0),
- DEVICE("at91_mci", HSMCI1, 1),
- DEVICE("uart", DBGU, 0),
- DEVICE("uart", USART0, 1),
- DEVICE("uart", USART1, 2),
- DEVICE("uart", USART2, 3),
- DEVICE("uart", USART3, 4),
- DEVICE("spi", SPI0, 0),
- DEVICE("spi", SPI1, 1),
- DEVICE("macb", EMAC0, 0),
- DEVICE("macb", EMAC1, 0),
- DEVICE("nand", NAND, 0),
- DEVICE("ohci", OHCI, 0),
- DEVICE("ehci", EHCI, 0),
- { 0, 0, 0, 0, 0 }
-};
-
-static uint32_t
-at91_pll_outa(int freq)
-{
-
- switch (freq / 10000000) {
- case 747 ... 801: return ((1 << 29) | (0 << 14));
- case 697 ... 746: return ((1 << 29) | (1 << 14));
- case 647 ... 696: return ((1 << 29) | (2 << 14));
- case 597 ... 646: return ((1 << 29) | (3 << 14));
- case 547 ... 596: return ((1 << 29) | (1 << 14));
- case 497 ... 546: return ((1 << 29) | (2 << 14));
- case 447 ... 496: return ((1 << 29) | (3 << 14));
- case 397 ... 446: return ((1 << 29) | (4 << 14));
- default: return (1 << 29);
- }
-}
-
-static uint32_t
-at91_pll_outb(int freq)
-{
-
- return (0);
-}
-
-static void
-at91_clock_init(void)
-{
- struct at91_pmc_clock *clk;
-
- /* Update USB device port clock info */
- clk =3D at91_pmc_clock_ref("udpck");
- clk->pmc_mask =3D PMC_SCER_UDP_SAM9;
- at91_pmc_clock_deref(clk);
-
- /* Update USB host port clock info */
- clk =3D at91_pmc_clock_ref("uhpck");
- clk->pmc_mask =3D PMC_SCER_UHP_SAM9;
- at91_pmc_clock_deref(clk);
-
- /* Each SOC has different PLL contraints */
- clk =3D at91_pmc_clock_ref("plla");
- clk->pll_min_in =3D SAM9X25_PLL_A_MIN_IN_FREQ; /* 2 MHz */
- clk->pll_max_in =3D SAM9X25_PLL_A_MAX_IN_FREQ; /* 32 MHz */
- clk->pll_min_out =3D SAM9X25_PLL_A_MIN_OUT_FREQ; /* 400 MHz */
- clk->pll_max_out =3D SAM9X25_PLL_A_MAX_OUT_FREQ; /* 800 MHz */
- clk->pll_mul_shift =3D SAM9X25_PLL_A_MUL_SHIFT;
- clk->pll_mul_mask =3D SAM9X25_PLL_A_MUL_MASK;
- clk->pll_div_shift =3D SAM9X25_PLL_A_DIV_SHIFT;
- clk->pll_div_mask =3D SAM9X25_PLL_A_DIV_MASK;
- clk->set_outb =3D at91_pll_outa;
- at91_pmc_clock_deref(clk);
-
- clk =3D at91_pmc_clock_ref("pllb");
- clk->pll_min_in =3D SAM9X25_PLL_B_MIN_IN_FREQ; /* 2 MHz */
- clk->pll_max_in =3D SAM9X25_PLL_B_MAX_IN_FREQ; /* 32 MHz */
- clk->pll_min_out =3D SAM9X25_PLL_B_MIN_OUT_FREQ; /* 30 MHz */
- clk->pll_max_out =3D SAM9X25_PLL_B_MAX_OUT_FREQ; /* 100 MHz */
- clk->pll_mul_shift =3D SAM9X25_PLL_B_MUL_SHIFT;
- clk->pll_mul_mask =3D SAM9X25_PLL_B_MUL_MASK;
- clk->pll_div_shift =3D SAM9X25_PLL_B_DIV_SHIFT;
- clk->pll_div_mask =3D SAM9X25_PLL_B_DIV_MASK;
- clk->set_outb =3D at91_pll_outb;
- at91_pmc_clock_deref(clk);
-}
-
-static struct at91_soc_data soc_data =3D {
- .soc_delay =3D at91_pit_delay,
- .soc_reset =3D at91_rst_cpu_reset,
- .soc_clock_init =3D at91_clock_init,
- .soc_irq_prio =3D at91_irq_prio,
- .soc_children =3D at91_devs,
-};
-
-AT91_SOC_SUB(AT91_T_SAM9X5, AT91_ST_SAM9X25, &soc_data);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x25reg.h
--- a/head/sys/arm/at91/at91sam9x25reg.h Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-/*-
- * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
- * Copyright (c) 2010 Greg Ansley. All rights reserved.
- * Copyright (c) 2012 M. Warener Losh. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
- * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* $FreeBSD: head/sys/arm/at91/at91sam9x25reg.h 238330 2012-07-10 02:14:50=
Z imp $ */
-
-#ifndef AT91SAM9X25REG_H_
-#define AT91SAM9X25REG_H_
-
-#ifndef AT91SAM9X25_MASTER_CLOCK
-#define AT91SAM9X25_MASTER_CLOCK ((18432000 * 43)/6)
-#endif
-
-/* Chip Specific limits */
-#define SAM9X25_PLL_A_MIN_IN_FREQ 2000000 /* 2 Mhz */
-#define SAM9X25_PLL_A_MAX_IN_FREQ 32000000 /* 32 Mhz */
-#define SAM9X25_PLL_A_MIN_OUT_FREQ 400000000 /* 400 Mhz */
-#define SAM9X25_PLL_A_MAX_OUT_FREQ 800000000 /* 800 Mhz */
-#define SAM9X25_PLL_A_MUL_SHIFT 16
-#define SAM9X25_PLL_A_MUL_MASK 0xFF=20
-#define SAM9X25_PLL_A_DIV_SHIFT 0
-#define SAM9X25_PLL_A_DIV_MASK 0xFF=20
-
-#define SAM9X25_PLL_B_MIN_IN_FREQ 2000000 /* 2 Mhz */
-#define SAM9X25_PLL_B_MAX_IN_FREQ 32000000 /* 32 Mhz */
-#define SAM9X25_PLL_B_MIN_OUT_FREQ 30000000 /* 30 Mhz */
-#define SAM9X25_PLL_B_MAX_OUT_FREQ 100000000 /* 100 Mhz */
-#define SAM9X25_PLL_B_MUL_SHIFT 16
-#define SAM9X25_PLL_B_MUL_MASK 0x3F=20
-#define SAM9X25_PLL_B_DIV_SHIFT 0
-#define SAM9X25_PLL_B_DIV_MASK 0xFF=20
-
-/*=20
- * Memory map, from datasheet :
- * 0x00000000 - 0x0ffffffff : Internal Memories
- * 0x10000000 - 0x1ffffffff : Chip Select 0
- * 0x20000000 - 0x2ffffffff : Chip Select 1 DDR2/LPDDR/SDR/LPSDR
- * 0x30000000 - 0x3ffffffff : Chip Select 2=20
- * 0x40000000 - 0x4ffffffff : Chip Select 3 NAND Flash
- * 0x50000000 - 0x5ffffffff : Chip Select 4
- * 0x60000000 - 0x6ffffffff : Chip Select 5
- * 0x70000000 - 0xeffffffff : Undefined (Abort)
- * 0xf0000000 - 0xfffffffff : Peripherals
- */
-
-#define AT91_CHIPSELECT_0 0x10000000
-#define AT91_CHIPSELECT_1 0x20000000
-#define AT91_CHIPSELECT_2 0x30000000
-#define AT91_CHIPSELECT_3 0x40000000
-#define AT91_CHIPSELECT_4 0x50000000
-#define AT91_CHIPSELECT_5 0x60000000
-
-#define AT91SAM9X25_EMAC_SIZE 0x4000
-#define AT91SAM9X25_EMAC0_BASE 0x802c000
-#define AT91SAM9X25_EMAC0_SIZE AT91SAM9X25_EMAC_SIZE
-#define AT91SAM9X25_EMAC1_BASE 0x8030000
-#define AT91SAM9X25_EMAC1_SIZE AT91SAM9X25_EMAC_SIZE
-
-#define AT91SAM9X25_RSTC_BASE 0xffffe00
-#define AT91SAM9X25_RSTC_SIZE 0x10
-
-/* USART*/
-
-#define AT91SAM9X25_USART_SIZE 0x4000
-#define AT91SAM9X25_USART0_BASE 0x801c000
-#define AT91SAM9X25_USART0_PDC 0x801c100
-#define AT91SAM9X25_USART0_SIZE AT91SAM9X25_USART_SIZE
-#define AT91SAM9X25_USART1_BASE 0x8020000
-#define AT91SAM9X25_USART1_PDC 0x8020100
-#define AT91SAM9X25_USART1_SIZE AT91SAM9X25_USART_SIZE
-#define AT91SAM9X25_USART2_BASE 0x8024000
-#define AT91SAM9X25_USART2_PDC 0x8024100
-#define AT91SAM9X25_USART2_SIZE AT91SAM9X25_USART_SIZE
-#define AT91SAM9X25_USART3_BASE 0x8028000
-#define AT91SAM9X25_USART3_PDC 0x8028100
-#define AT91SAM9X25_USART3_SIZE AT91SAM9X25_USART_SIZE
-
-/*TC*/
-#define AT91SAM9X25_TC0_BASE 0x8008000
-#define AT91SAM9X25_TC0_SIZE 0x4000
-#define AT91SAM9X25_TC0C0_BASE 0x8008000
-#define AT91SAM9X25_TC0C1_BASE 0x8008040
-#define AT91SAM9X25_TC0C2_BASE 0x8008080
-
-#define AT91SAM9X25_TC1_BASE 0x800c000
-#define AT91SAM9X25_TC1_SIZE 0x4000
-
-/*SPI*/
-
-#define AT91SAM9X25_SPI0_BASE 0x0000000
-
-#define AT91SAM9X25_SPI0_SIZE 0x4000
-
-#define AT91SAM9X25_SPI1_BASE 0x0004000
-#define AT91SAM9X25_SPI1_SIZE 0x4000
-
-/* System Registers */
-#define AT91SAM9X25_SYS_BASE 0xffff000
-#define AT91SAM9X25_SYS_SIZE 0x1000
-
-#define AT91SAM9X25_MATRIX_BASE 0xfffde00
-#define AT91SAM9X25_MATRIX_SIZE 0x200
-
-#define AT91SAM9X25_DBGU_BASE 0xffff200
-#define AT91SAM9X25_DBGU_SIZE 0x200
-
-/*
- * PIO
- */
-#define AT91SAM9X25_PIOA_BASE 0xffff400
-#define AT91SAM9X25_PIOA_SIZE 0x200
-#define AT91SAM9X25_PIOB_BASE 0xffff600
-#define AT91SAM9X25_PIOB_SIZE 0x200
-#define AT91SAM9X25_PIOC_BASE 0xffff800
-#define AT91SAM9X25_PIOC_SIZE 0x200
-#define AT91SAM9X25_PIOD_BASE 0xffffa00
-#define AT91SAM9X25_PIOD_SIZE 0x200
-
-#define AT91RM92_PMC_BASE 0xffffc00
-#define AT91RM92_PMC_SIZE 0x100
-/* IRQs :
- * 0: AIC=20
- * 1: System peripheral (System timer, RTC, DBGU)
- * 2: PIO Controller A,B
- * 3: PIO Controller C,D
- * 4: SMD Soft Modem
- * 5: USART 0
- * 6: USART 1
- * 7: USART 2
- * 8: USART 3
- * 9: Two-wirte interface
- * 10: Two-wirte interface
- * 11: Two-wirte interface
- * 12: HSMCI Interface
- * 13: SPI 0
- * 14: SPI 1
- * 15: UART0
- * 16: UART1
- * 17: Timer Counter 0,1
- * 18: PWM
- * 19: ADC
- * 20: DMAC 0
- * 21: DMAC 1
- * 22: UHPHS - USB Host controller
- * 23: UDPHS - USB Device Controller
- * 24: EMAC0
- * 25: LCD controller or Image Sensor Interface
- * 26: HSMCI1
- * 27: EMAC1
- * 28: SSC
- * 29: CAN0
- * 30: CAN1
- * 31: AIC IRQ0
- */
-
-#define AT91SAM9X25_IRQ_AIC 0
-#define AT91SAM9X25_IRQ_SYSTEM 1
-#define AT91SAM9X25_IRQ_PIOAB 2
-#define AT91SAM9X25_IRQ_PIOCD 3
-#define AT91SAM9X25_IRQ_SMD 4
-#define AT91SAM9X25_IRQ_USART0 5
-#define AT91SAM9X25_IRQ_USART1 6
-#define AT91SAM9X25_IRQ_USART2 7
-#define AT91SAM9X25_IRQ_USART3 8
-#define AT91SAM9X25_IRQ_TWI0 9
-#define AT91SAM9X25_IRQ_TWI1 10
-#define AT91SAM9X25_IRQ_TWI2 11
-#define AT91SAM9X25_IRQ_HSMCI0 12
-#define AT91SAM9X25_IRQ_SPI0 13
-#define AT91SAM9X25_IRQ_SPI1 14
-#define AT91SAM9X25_IRQ_UART0 15
-#define AT91SAM9X25_IRQ_UART1 16
-#define AT91SAM9X25_IRQ_TC01 17
-#define AT91SAM9X25_IRQ_PWM 18
-#define AT91SAM9X25_IRQ_ADC 19
-#define AT91SAM9X25_IRQ_DMAC0 20
-#define AT91SAM9X25_IRQ_DMAC1 21
-#define AT91SAM9X25_IRQ_UHPHS 22
-#define AT91SAM9X25_IRQ_UDPHS 23
-#define AT91SAM9X25_IRQ_EMAC0 24
-#define AT91SAM9X25_IRQ_HSMCI1 26
-#define AT91SAM9X25_IRQ_EMAC1 27
-#define AT91SAM9X25_IRQ_SSC 28
-#define AT91SAM9X25_IRQ_CAN0 29
-#define AT91SAM9X25_IRQ_CAN1 30
-#define AT91SAM9X25_IRQ_AICBASE 31
-
-/* Alias */
-#define AT91SAM9X25_IRQ_DBGU AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_PMC AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_WDT AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_PIT AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_RSTC AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_OHCI AT91SAM9X25_IRQ_UHPHS
-#define AT91SAM9X25_IRQ_EHCI AT91SAM9X25_IRQ_UHPHS
-#define AT91SAM9X25_IRQ_PIOA AT91SAM9X25_IRQ_PIOAB
-#define AT91SAM9X25_IRQ_PIOB AT91SAM9X25_IRQ_PIOAB
-#define AT91SAM9X25_IRQ_PIOC AT91SAM9X25_IRQ_PIOCD
-#define AT91SAM9X25_IRQ_PIOD AT91SAM9X25_IRQ_PIOCD
-#define AT91SAM9X25_IRQ_NAND (-1)
-
-#define AT91SAM9X25_AIC_BASE 0xffff000
-#define AT91SAM9X25_AIC_SIZE 0x200
-
-/* Timer */
-
-#define AT91SAM9X25_WDT_BASE 0xffffd40
-#define AT91SAM9X25_WDT_SIZE 0x10
-
-#define AT91SAM9X25_PIT_BASE 0xffffd30
-#define AT91SAM9X25_PIT_SIZE 0x10
-
-#define AT91SAM9X25_SMC_BASE 0xfffea00
-#define AT91SAM9X25_SMC_SIZE 0x200
-
-#define AT91SAM9X25_PMC_BASE 0xffffc00
-#define AT91SAM9X25_PMC_SIZE 0x100
-
-#define AT91SAM9X25_UDPHS_BASE 0x803c000
-#define AT91SAM9X25_UDPHS_SIZE 0x4000
-
-#define AT91SAM9X25_HSMCI_SIZE 0x4000
-#define AT91SAM9X25_HSMCI0_BASE 0x0008000
-#define AT91SAM9X25_HSMCI0_SIZE AT91SAM9X25_HSMCI_SIZE
-#define AT91SAM9X25_HSMCI1_BASE 0x000c000
-#define AT91SAM9X25_HSMCI1_SIZE AT91SAM9X25_HSMCI_SIZE
-
-#define AT91SAM9X25_TWI_SIZE 0x4000
-#define AT91SAM9X25_TWI0_BASE 0xffaC000
-#define AT91SAM9X25_TWI0_SIZE AT91SAM9X25_TWI_SIZE
-#define AT91SAM9X25_TWI1_BASE 0xffaC000
-#define AT91SAM9X25_TWI1_SIZE AT91SAM9X25_TWI_SIZE
-#define AT91SAM9X25_TWI2_BASE 0xffaC000
-#define AT91SAM9X25_TWI2_SIZE AT91SAM9X25_TWI_SIZE
-
-/* XXX Needs to be carfully coordinated with
- * other * soc's so phyical and vm address
- * mapping are unique. XXX
- */
-#define AT91SAM9X25_OHCI_BASE 0xdfc00000 /* SAME as 9c40 */
-#define AT91SAM9X25_OHCI_PA_BASE 0x00600000
-#define AT91SAM9X25_OHCI_SIZE 0x00100000
-
-#define AT91SAM9X25_EHCI_BASE 0xdfd00000
-#define AT91SAM9X25_EHCI_PA_BASE 0x00700000
-#define AT91SAM9X25_EHCI_SIZE 0x00100000
-
-#define AT91SAM9X25_NAND_BASE 0xe0000000
-#define AT91SAM9X25_NAND_PA_BASE 0x40000000
-#define AT91SAM9X25_NAND_SIZE 0x10000000
-
-
-/* SDRAMC */
-#define AT91SAM9X25_SDRAMC_BASE 0xfffea00 /* SAME as SMC? */
-#define AT91SAM9X25_SDRAMC_MR 0x00
-#define AT91SAM9X25_SDRAMC_MR_MODE_NORMAL 0
-#define AT91SAM9X25_SDRAMC_MR_MODE_NOP 1
-#define AT91SAM9X25_SDRAMC_MR_MODE_PRECHARGE 2
-#define AT91SAM9X25_SDRAMC_MR_MODE_LOAD_MODE_REGISTER 3
-#define AT91SAM9X25_SDRAMC_MR_MODE_REFRESH 4
-#define AT91SAM9X25_SDRAMC_TR 0x04
-#define AT91SAM9X25_SDRAMC_CR 0x08
-#define AT91SAM9X25_SDRAMC_CR_NC_8 0x0
-#define AT91SAM9X25_SDRAMC_CR_NC_9 0x1
-#define AT91SAM9X25_SDRAMC_CR_NC_10 0x2
-#define AT91SAM9X25_SDRAMC_CR_NC_11 0x3
-#define AT91SAM9X25_SDRAMC_CR_NC_MASK 0x00000003
-#define AT91SAM9X25_SDRAMC_CR_NR_11 0x0
-#define AT91SAM9X25_SDRAMC_CR_NR_12 0x4
-#define AT91SAM9X25_SDRAMC_CR_NR_13 0x8
-#define AT91SAM9X25_SDRAMC_CR_NR_RES 0xc
-#define AT91SAM9X25_SDRAMC_CR_NR_MASK 0x0000000c
-#define AT91SAM9X25_SDRAMC_CR_NB_2 0x00
-#define AT91SAM9X25_SDRAMC_CR_NB_4 0x10
-#define AT91SAM9X25_SDRAMC_CR_DBW_16 0x80
-#define AT91SAM9X25_SDRAMC_CR_NB_MASK 0x00000010
-#define AT91SAM9X25_SDRAMC_CR_NCAS_MASK 0x00000060
-#define AT91SAM9X25_SDRAMC_CR_TWR_MASK 0x00000780
-#define AT91SAM9X25_SDRAMC_CR_TRC_MASK 0x00007800
-#define AT91SAM9X25_SDRAMC_CR_TRP_MASK 0x00078000
-#define AT91SAM9X25_SDRAMC_CR_TRCD_MASK 0x00780000
-#define AT91SAM9X25_SDRAMC_CR_TRAS_MASK 0x07800000
-#define AT91SAM9X25_SDRAMC_CR_TXSR_MASK 0x78000000
-#define AT91SAM9X25_SDRAMC_HSR 0x0c
-#define AT91SAM9X25_SDRAMC_LPR 0x10
-#define AT91SAM9X25_SDRAMC_IER 0x14
-#define AT91SAM9X25_SDRAMC_IDR 0x18
-#define AT91SAM9X25_SDRAMC_IMR 0x1c
-#define AT91SAM9X25_SDRAMC_ISR 0x20
-#define AT91SAM9X25_SDRAMC_MDR 0x24
-
-#endif /* AT91SAM9X25REG_H_*/
-
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x5.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9x5.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,201 @@
+/*-
+ * Copyright (c) 2005 Olivier Houchard. All rights reserved.
+ * Copyright (c) 2010 Greg Ansley. All rights reserved.
+ * Copyright (c) 2012 M. Warner Losh.. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91sam9x5.c 238922 2012-07-30 21:30=
:43Z imp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+
+#include <machine/bus.h>
+
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91soc.h>
+#include <arm/at91/at91_aicreg.h>
+#include <arm/at91/at91sam9x5reg.h>
+#include <arm/at91/at91_pitreg.h>
+#include <arm/at91/at91_pmcreg.h>
+#include <arm/at91/at91_pmcvar.h>
+#include <arm/at91/at91_rstreg.h>
+
+/*
+ * Standard priority levels for the system. 0 is lowest and 7 is highest.
+ * These values are the ones Atmel uses for its Linux port
+ */
+static const int at91_irq_prio[32] =3D
+{
+ 7, /* Advanced Interrupt Controller (FIQ) */
+ 7, /* System Peripherals */
+ 1, /* Parallel IO Controller A and B */
+ 1, /* Parallel IO Controller C and D */
+ 4, /* Soft Modem */
+ 5, /* USART 0 */
+ 5, /* USART 1 */
+ 5, /* USART 2 */
+ 5, /* USART 3 */
+ 6, /* Two-Wire Interface 0 */
+ 6, /* Two-Wire Interface 1 */
+ 6, /* Two-Wire Interface 2 */
+ 0, /* Multimedia Card Interface 0 */
+ 5, /* Serial Peripheral Interface 0 */
+ 5, /* Serial Peripheral Interface 1 */
+ 5, /* UART 0 */
+ 5, /* UART 1 */
+ 0, /* Timer Counter 0, 1, 2, 3, 4 and 5 */
+ 0, /* Pulse Width Modulation Controller */
+ 0, /* ADC Controller */
+ 0, /* DMA Controller 0 */
+ 0, /* DMA Controller 1 */
+ 2, /* USB Host High Speed port */
+ 2, /* USB Device High speed port */
+ 3, /* Ethernet MAC 0 */
+ 3, /* LDC Controller or Image Sensor Interface */
+ 0, /* Multimedia Card Interface 1 */
+ 3, /* Ethernet MAC 1 */
+ 4, /* Synchronous Serial Interface */
+ 4, /* CAN Controller 0 */
+ 4, /* CAN Controller 1 */
+ 0, /* Advanced Interrupt Controller (IRQ0) */
+};
+
+#define DEVICE(_name, _id, _unit) \
+ { \
+ _name, _unit, \
+ AT91SAM9X25_ ## _id ##_BASE, \
+ AT91SAM9X25_ ## _id ## _SIZE, \
+ AT91SAM9X25_IRQ_ ## _id \
+ }
+
+static const struct cpu_devs at91_devs[] =3D
+{
+ DEVICE("at91_pmc", PMC, 0),
+ DEVICE("at91_wdt", WDT, 0),
+ DEVICE("at91_rst", RSTC, 0),
+ DEVICE("at91_pit", PIT, 0),
+ DEVICE("at91_pio", PIOA, 0),
+ DEVICE("at91_pio", PIOB, 1),
+ DEVICE("at91_pio", PIOC, 2),
+ DEVICE("at91_pio", PIOD, 3),
+ DEVICE("at91_twi", TWI0, 0),
+ DEVICE("at91_twi", TWI1, 1),
+ DEVICE("at91_twi", TWI2, 2),
+ DEVICE("at91_mci", HSMCI0, 0),
+ DEVICE("at91_mci", HSMCI1, 1),
+ DEVICE("uart", DBGU, 0),
+ DEVICE("uart", USART0, 1),
+ DEVICE("uart", USART1, 2),
+ DEVICE("uart", USART2, 3),
+ DEVICE("uart", USART3, 4),
+ DEVICE("spi", SPI0, 0),
+ DEVICE("spi", SPI1, 1),
+ DEVICE("macb", EMAC0, 0),
+ DEVICE("macb", EMAC1, 0),
+ DEVICE("nand", NAND, 0),
+ DEVICE("ohci", OHCI, 0),
+ DEVICE("ehci", EHCI, 0),
+ { 0, 0, 0, 0, 0 }
+};
+
+static uint32_t
+at91_pll_outa(int freq)
+{
+
+ switch (freq / 10000000) {
+ case 747 ... 801: return ((1 << 29) | (0 << 14));
+ case 697 ... 746: return ((1 << 29) | (1 << 14));
+ case 647 ... 696: return ((1 << 29) | (2 << 14));
+ case 597 ... 646: return ((1 << 29) | (3 << 14));
+ case 547 ... 596: return ((1 << 29) | (1 << 14));
+ case 497 ... 546: return ((1 << 29) | (2 << 14));
+ case 447 ... 496: return ((1 << 29) | (3 << 14));
+ case 397 ... 446: return ((1 << 29) | (4 << 14));
+ default: return (1 << 29);
+ }
+}
+
+static uint32_t
+at91_pll_outb(int freq)
+{
+
+ return (0);
+}
+
+static void
+at91_clock_init(void)
+{
+ struct at91_pmc_clock *clk;
+
+ /* Update USB device port clock info */
+ clk =3D at91_pmc_clock_ref("udpck");
+ clk->pmc_mask =3D PMC_SCER_UDP_SAM9;
+ at91_pmc_clock_deref(clk);
+
+ /* Update USB host port clock info */
+ clk =3D at91_pmc_clock_ref("uhpck");
+ clk->pmc_mask =3D PMC_SCER_UHP_SAM9;
+ at91_pmc_clock_deref(clk);
+
+ /* Each SOC has different PLL contraints */
+ clk =3D at91_pmc_clock_ref("plla");
+ clk->pll_min_in =3D SAM9X25_PLL_A_MIN_IN_FREQ; /* 2 MHz */
+ clk->pll_max_in =3D SAM9X25_PLL_A_MAX_IN_FREQ; /* 32 MHz */
+ clk->pll_min_out =3D SAM9X25_PLL_A_MIN_OUT_FREQ; /* 400 MHz */
+ clk->pll_max_out =3D SAM9X25_PLL_A_MAX_OUT_FREQ; /* 800 MHz */
+ clk->pll_mul_shift =3D SAM9X25_PLL_A_MUL_SHIFT;
+ clk->pll_mul_mask =3D SAM9X25_PLL_A_MUL_MASK;
+ clk->pll_div_shift =3D SAM9X25_PLL_A_DIV_SHIFT;
+ clk->pll_div_mask =3D SAM9X25_PLL_A_DIV_MASK;
+ clk->set_outb =3D at91_pll_outa;
+ at91_pmc_clock_deref(clk);
+
+ clk =3D at91_pmc_clock_ref("pllb");
+ clk->pll_min_in =3D SAM9X25_PLL_B_MIN_IN_FREQ; /* 2 MHz */
+ clk->pll_max_in =3D SAM9X25_PLL_B_MAX_IN_FREQ; /* 32 MHz */
+ clk->pll_min_out =3D SAM9X25_PLL_B_MIN_OUT_FREQ; /* 30 MHz */
+ clk->pll_max_out =3D SAM9X25_PLL_B_MAX_OUT_FREQ; /* 100 MHz */
+ clk->pll_mul_shift =3D SAM9X25_PLL_B_MUL_SHIFT;
+ clk->pll_mul_mask =3D SAM9X25_PLL_B_MUL_MASK;
+ clk->pll_div_shift =3D SAM9X25_PLL_B_DIV_SHIFT;
+ clk->pll_div_mask =3D SAM9X25_PLL_B_DIV_MASK;
+ clk->set_outb =3D at91_pll_outb;
+ at91_pmc_clock_deref(clk);
+}
+
+static struct at91_soc_data soc_data =3D {
+ .soc_delay =3D at91_pit_delay,
+ .soc_reset =3D at91_rst_cpu_reset,
+ .soc_clock_init =3D at91_clock_init,
+ .soc_irq_prio =3D at91_irq_prio,
+ .soc_children =3D at91_devs,
+};
+
+AT91_SOC_SUB(AT91_T_SAM9X5, AT91_ST_SAM9X25, &soc_data);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x5reg.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9x5reg.h Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,315 @@
+/*-
+ * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
+ * Copyright (c) 2010 Greg Ansley. All rights reserved.
+ * Copyright (c) 2012 M. Warener Losh. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $FreeBSD: head/sys/arm/at91/at91sam9x5reg.h 238922 2012-07-30 21:30:43Z=
imp $ */
+
+#ifndef AT91SAM9X5REG_H_
+#define AT91SAM9X5REG_H_
+
+#ifndef AT91SAM9X25_MASTER_CLOCK
+#define AT91SAM9X25_MASTER_CLOCK ((18432000 * 43)/6)
+#endif
+
+/* Chip Specific limits */
+#define SAM9X25_PLL_A_MIN_IN_FREQ 2000000 /* 2 Mhz */
+#define SAM9X25_PLL_A_MAX_IN_FREQ 32000000 /* 32 Mhz */
+#define SAM9X25_PLL_A_MIN_OUT_FREQ 400000000 /* 400 Mhz */
+#define SAM9X25_PLL_A_MAX_OUT_FREQ 800000000 /* 800 Mhz */
+#define SAM9X25_PLL_A_MUL_SHIFT 16
+#define SAM9X25_PLL_A_MUL_MASK 0xFF=20
+#define SAM9X25_PLL_A_DIV_SHIFT 0
+#define SAM9X25_PLL_A_DIV_MASK 0xFF=20
+
+#define SAM9X25_PLL_B_MIN_IN_FREQ 2000000 /* 2 Mhz */
+#define SAM9X25_PLL_B_MAX_IN_FREQ 32000000 /* 32 Mhz */
+#define SAM9X25_PLL_B_MIN_OUT_FREQ 30000000 /* 30 Mhz */
+#define SAM9X25_PLL_B_MAX_OUT_FREQ 100000000 /* 100 Mhz */
+#define SAM9X25_PLL_B_MUL_SHIFT 16
+#define SAM9X25_PLL_B_MUL_MASK 0x3F=20
+#define SAM9X25_PLL_B_DIV_SHIFT 0
+#define SAM9X25_PLL_B_DIV_MASK 0xFF=20
+
+/*=20
+ * Memory map, from datasheet :
+ * 0x00000000 - 0x0ffffffff : Internal Memories
+ * 0x10000000 - 0x1ffffffff : Chip Select 0
+ * 0x20000000 - 0x2ffffffff : Chip Select 1 DDR2/LPDDR/SDR/LPSDR
+ * 0x30000000 - 0x3ffffffff : Chip Select 2=20
+ * 0x40000000 - 0x4ffffffff : Chip Select 3 NAND Flash
+ * 0x50000000 - 0x5ffffffff : Chip Select 4
+ * 0x60000000 - 0x6ffffffff : Chip Select 5
+ * 0x70000000 - 0xeffffffff : Undefined (Abort)
+ * 0xf0000000 - 0xfffffffff : Peripherals
+ */
+
+#define AT91_CHIPSELECT_0 0x10000000
+#define AT91_CHIPSELECT_1 0x20000000
+#define AT91_CHIPSELECT_2 0x30000000
+#define AT91_CHIPSELECT_3 0x40000000
+#define AT91_CHIPSELECT_4 0x50000000
+#define AT91_CHIPSELECT_5 0x60000000
+
+#define AT91SAM9X25_EMAC_SIZE 0x4000
+#define AT91SAM9X25_EMAC0_BASE 0x802c000
+#define AT91SAM9X25_EMAC0_SIZE AT91SAM9X25_EMAC_SIZE
+#define AT91SAM9X25_EMAC1_BASE 0x8030000
+#define AT91SAM9X25_EMAC1_SIZE AT91SAM9X25_EMAC_SIZE
+
+#define AT91SAM9X25_RSTC_BASE 0xffffe00
+#define AT91SAM9X25_RSTC_SIZE 0x10
+
+/* USART*/
+
+#define AT91SAM9X25_USART_SIZE 0x4000
+#define AT91SAM9X25_USART0_BASE 0x801c000
+#define AT91SAM9X25_USART0_PDC 0x801c100
+#define AT91SAM9X25_USART0_SIZE AT91SAM9X25_USART_SIZE
+#define AT91SAM9X25_USART1_BASE 0x8020000
+#define AT91SAM9X25_USART1_PDC 0x8020100
+#define AT91SAM9X25_USART1_SIZE AT91SAM9X25_USART_SIZE
+#define AT91SAM9X25_USART2_BASE 0x8024000
+#define AT91SAM9X25_USART2_PDC 0x8024100
+#define AT91SAM9X25_USART2_SIZE AT91SAM9X25_USART_SIZE
+#define AT91SAM9X25_USART3_BASE 0x8028000
+#define AT91SAM9X25_USART3_PDC 0x8028100
+#define AT91SAM9X25_USART3_SIZE AT91SAM9X25_USART_SIZE
+
+/*TC*/
+#define AT91SAM9X25_TC0_BASE 0x8008000
+#define AT91SAM9X25_TC0_SIZE 0x4000
+#define AT91SAM9X25_TC0C0_BASE 0x8008000
+#define AT91SAM9X25_TC0C1_BASE 0x8008040
+#define AT91SAM9X25_TC0C2_BASE 0x8008080
+
+#define AT91SAM9X25_TC1_BASE 0x800c000
+#define AT91SAM9X25_TC1_SIZE 0x4000
+
+/*SPI*/
+
+#define AT91SAM9X25_SPI0_BASE 0x0000000
+
+#define AT91SAM9X25_SPI0_SIZE 0x4000
+
+#define AT91SAM9X25_SPI1_BASE 0x0004000
+#define AT91SAM9X25_SPI1_SIZE 0x4000
+
+/* System Registers */
+#define AT91SAM9X25_SYS_BASE 0xffff000
+#define AT91SAM9X25_SYS_SIZE 0x1000
+
+#define AT91SAM9X25_MATRIX_BASE 0xfffde00
+#define AT91SAM9X25_MATRIX_SIZE 0x200
+
+#define AT91SAM9X25_DBGU_BASE 0xffff200
+#define AT91SAM9X25_DBGU_SIZE 0x200
+
+/*
+ * PIO
+ */
+#define AT91SAM9X25_PIOA_BASE 0xffff400
+#define AT91SAM9X25_PIOA_SIZE 0x200
+#define AT91SAM9X25_PIOB_BASE 0xffff600
+#define AT91SAM9X25_PIOB_SIZE 0x200
+#define AT91SAM9X25_PIOC_BASE 0xffff800
+#define AT91SAM9X25_PIOC_SIZE 0x200
+#define AT91SAM9X25_PIOD_BASE 0xffffa00
+#define AT91SAM9X25_PIOD_SIZE 0x200
+
+#define AT91RM92_PMC_BASE 0xffffc00
+#define AT91RM92_PMC_SIZE 0x100
+/* IRQs :
+ * 0: AIC=20
+ * 1: System peripheral (System timer, RTC, DBGU)
+ * 2: PIO Controller A,B
+ * 3: PIO Controller C,D
+ * 4: SMD Soft Modem
+ * 5: USART 0
+ * 6: USART 1
+ * 7: USART 2
+ * 8: USART 3
+ * 9: Two-wirte interface
+ * 10: Two-wirte interface
+ * 11: Two-wirte interface
+ * 12: HSMCI Interface
+ * 13: SPI 0
+ * 14: SPI 1
+ * 15: UART0
+ * 16: UART1
+ * 17: Timer Counter 0,1
+ * 18: PWM
+ * 19: ADC
+ * 20: DMAC 0
+ * 21: DMAC 1
+ * 22: UHPHS - USB Host controller
+ * 23: UDPHS - USB Device Controller
+ * 24: EMAC0
+ * 25: LCD controller or Image Sensor Interface
+ * 26: HSMCI1
+ * 27: EMAC1
+ * 28: SSC
+ * 29: CAN0
+ * 30: CAN1
+ * 31: AIC IRQ0
+ */
+
+#define AT91SAM9X25_IRQ_AIC 0
+#define AT91SAM9X25_IRQ_SYSTEM 1
+#define AT91SAM9X25_IRQ_PIOAB 2
+#define AT91SAM9X25_IRQ_PIOCD 3
+#define AT91SAM9X25_IRQ_SMD 4
+#define AT91SAM9X25_IRQ_USART0 5
+#define AT91SAM9X25_IRQ_USART1 6
+#define AT91SAM9X25_IRQ_USART2 7
+#define AT91SAM9X25_IRQ_USART3 8
+#define AT91SAM9X25_IRQ_TWI0 9
+#define AT91SAM9X25_IRQ_TWI1 10
+#define AT91SAM9X25_IRQ_TWI2 11
+#define AT91SAM9X25_IRQ_HSMCI0 12
+#define AT91SAM9X25_IRQ_SPI0 13
+#define AT91SAM9X25_IRQ_SPI1 14
+#define AT91SAM9X25_IRQ_UART0 15
+#define AT91SAM9X25_IRQ_UART1 16
+#define AT91SAM9X25_IRQ_TC01 17
+#define AT91SAM9X25_IRQ_PWM 18
+#define AT91SAM9X25_IRQ_ADC 19
+#define AT91SAM9X25_IRQ_DMAC0 20
+#define AT91SAM9X25_IRQ_DMAC1 21
+#define AT91SAM9X25_IRQ_UHPHS 22
+#define AT91SAM9X25_IRQ_UDPHS 23
+#define AT91SAM9X25_IRQ_EMAC0 24
+#define AT91SAM9X25_IRQ_HSMCI1 26
+#define AT91SAM9X25_IRQ_EMAC1 27
+#define AT91SAM9X25_IRQ_SSC 28
+#define AT91SAM9X25_IRQ_CAN0 29
+#define AT91SAM9X25_IRQ_CAN1 30
+#define AT91SAM9X25_IRQ_AICBASE 31
+
+/* Alias */
+#define AT91SAM9X25_IRQ_DBGU AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_PMC AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_WDT AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_PIT AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_RSTC AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_OHCI AT91SAM9X25_IRQ_UHPHS
+#define AT91SAM9X25_IRQ_EHCI AT91SAM9X25_IRQ_UHPHS
+#define AT91SAM9X25_IRQ_PIOA AT91SAM9X25_IRQ_PIOAB
+#define AT91SAM9X25_IRQ_PIOB AT91SAM9X25_IRQ_PIOAB
+#define AT91SAM9X25_IRQ_PIOC AT91SAM9X25_IRQ_PIOCD
+#define AT91SAM9X25_IRQ_PIOD AT91SAM9X25_IRQ_PIOCD
+#define AT91SAM9X25_IRQ_NAND (-1)
+
+#define AT91SAM9X25_AIC_BASE 0xffff000
+#define AT91SAM9X25_AIC_SIZE 0x200
+
+/* Timer */
+
+#define AT91SAM9X25_WDT_BASE 0xffffd40
+#define AT91SAM9X25_WDT_SIZE 0x10
+
+#define AT91SAM9X25_PIT_BASE 0xffffd30
+#define AT91SAM9X25_PIT_SIZE 0x10
+
+#define AT91SAM9X25_SMC_BASE 0xfffea00
+#define AT91SAM9X25_SMC_SIZE 0x200
+
+#define AT91SAM9X25_PMC_BASE 0xffffc00
+#define AT91SAM9X25_PMC_SIZE 0x100
+
+#define AT91SAM9X25_UDPHS_BASE 0x803c000
+#define AT91SAM9X25_UDPHS_SIZE 0x4000
+
+#define AT91SAM9X25_HSMCI_SIZE 0x4000
+#define AT91SAM9X25_HSMCI0_BASE 0x0008000
+#define AT91SAM9X25_HSMCI0_SIZE AT91SAM9X25_HSMCI_SIZE
+#define AT91SAM9X25_HSMCI1_BASE 0x000c000
+#define AT91SAM9X25_HSMCI1_SIZE AT91SAM9X25_HSMCI_SIZE
+
+#define AT91SAM9X25_TWI_SIZE 0x4000
+#define AT91SAM9X25_TWI0_BASE 0xffaC000
+#define AT91SAM9X25_TWI0_SIZE AT91SAM9X25_TWI_SIZE
+#define AT91SAM9X25_TWI1_BASE 0xffaC000
+#define AT91SAM9X25_TWI1_SIZE AT91SAM9X25_TWI_SIZE
+#define AT91SAM9X25_TWI2_BASE 0xffaC000
+#define AT91SAM9X25_TWI2_SIZE AT91SAM9X25_TWI_SIZE
+
+/* XXX Needs to be carfully coordinated with
+ * other * soc's so phyical and vm address
+ * mapping are unique. XXX
+ */
+#define AT91SAM9X25_OHCI_BASE 0xdfc00000 /* SAME as 9c40 */
+#define AT91SAM9X25_OHCI_PA_BASE 0x00600000
+#define AT91SAM9X25_OHCI_SIZE 0x00100000
+
+#define AT91SAM9X25_EHCI_BASE 0xdfd00000
+#define AT91SAM9X25_EHCI_PA_BASE 0x00700000
+#define AT91SAM9X25_EHCI_SIZE 0x00100000
+
+#define AT91SAM9X25_NAND_BASE 0xe0000000
+#define AT91SAM9X25_NAND_PA_BASE 0x40000000
+#define AT91SAM9X25_NAND_SIZE 0x10000000
+
+
+/* SDRAMC */
+#define AT91SAM9X25_SDRAMC_BASE 0xfffea00 /* SAME as SMC? */
+#define AT91SAM9X25_SDRAMC_MR 0x00
+#define AT91SAM9X25_SDRAMC_MR_MODE_NORMAL 0
+#define AT91SAM9X25_SDRAMC_MR_MODE_NOP 1
+#define AT91SAM9X25_SDRAMC_MR_MODE_PRECHARGE 2
+#define AT91SAM9X25_SDRAMC_MR_MODE_LOAD_MODE_REGISTER 3
+#define AT91SAM9X25_SDRAMC_MR_MODE_REFRESH 4
+#define AT91SAM9X25_SDRAMC_TR 0x04
+#define AT91SAM9X25_SDRAMC_CR 0x08
+#define AT91SAM9X25_SDRAMC_CR_NC_8 0x0
+#define AT91SAM9X25_SDRAMC_CR_NC_9 0x1
+#define AT91SAM9X25_SDRAMC_CR_NC_10 0x2
+#define AT91SAM9X25_SDRAMC_CR_NC_11 0x3
+#define AT91SAM9X25_SDRAMC_CR_NC_MASK 0x00000003
+#define AT91SAM9X25_SDRAMC_CR_NR_11 0x0
+#define AT91SAM9X25_SDRAMC_CR_NR_12 0x4
+#define AT91SAM9X25_SDRAMC_CR_NR_13 0x8
+#define AT91SAM9X25_SDRAMC_CR_NR_RES 0xc
+#define AT91SAM9X25_SDRAMC_CR_NR_MASK 0x0000000c
+#define AT91SAM9X25_SDRAMC_CR_NB_2 0x00
+#define AT91SAM9X25_SDRAMC_CR_NB_4 0x10
+#define AT91SAM9X25_SDRAMC_CR_DBW_16 0x80
+#define AT91SAM9X25_SDRAMC_CR_NB_MASK 0x00000010
+#define AT91SAM9X25_SDRAMC_CR_NCAS_MASK 0x00000060
+#define AT91SAM9X25_SDRAMC_CR_TWR_MASK 0x00000780
+#define AT91SAM9X25_SDRAMC_CR_TRC_MASK 0x00007800
+#define AT91SAM9X25_SDRAMC_CR_TRP_MASK 0x00078000
+#define AT91SAM9X25_SDRAMC_CR_TRCD_MASK 0x00780000
+#define AT91SAM9X25_SDRAMC_CR_TRAS_MASK 0x07800000
+#define AT91SAM9X25_SDRAMC_CR_TXSR_MASK 0x78000000
+#define AT91SAM9X25_SDRAMC_HSR 0x0c
+#define AT91SAM9X25_SDRAMC_LPR 0x10
+#define AT91SAM9X25_SDRAMC_IER 0x14
+#define AT91SAM9X25_SDRAMC_IDR 0x18
+#define AT91SAM9X25_SDRAMC_IMR 0x1c
+#define AT91SAM9X25_SDRAMC_ISR 0x20
+#define AT91SAM9X25_SDRAMC_MDR 0x24
+
+#endif /* AT91SAM9X5REG_H_*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/board_sam9260ek.c
--- a/head/sys/arm/at91/board_sam9260ek.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/board_sam9260ek.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/board_sam9260ek.c 238443 2012-07-14 =
06:13:23Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/board_sam9260ek.c 238821 2012-07-27 =
05:33:55Z imp $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -74,37 +74,55 @@
at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA20, 0);
/* EMDIO */
at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA21, 0);
+ /* Not RMII */
+ /* ETX2 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA10, 0);
+ /* ETX3 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA11, 0);
+ /* ETXER */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA22, 0);
+ /* ERX2 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA25, 0);
+ /* ERX3 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA26, 0);
+ /* ERXCK */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA27, 0);
+ /* ECRS */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA28, 0);
+ /* ECOL */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA29, 0);
+
=20
/*
- * MMC
+ * MMC, wired to socket B.
*/
- /* MCDA0 */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA6, 1);
- /* MCCDA */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA7, 1);
+ /* MCDB0 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA0, 1);
+ /* MCCDB */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA1, 1);
+ /* MCDB3 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA3, 1);
+ /* MCDB2 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA4, 1);
+ /* MCDB1 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA5, 1);
/* MCCK */
at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA8, 1);
- /* MCDA1 */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA9, 1);
- /* MCDA2 */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA10, 1);
- /* MCDA3 */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA11, 1);
=20
/*
- * SPI0
+ * SPI0 and MMC are wired together, since we don't support sharing
+ * don't support the dataflash. But if you did, you'd have to
+ * use CS0 and CS1.
*/
- /* MISO */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA0, 0);
- /* MOSI */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA1, 0);
- /* SPCK */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA2, 0);
- /* NPCS0 */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA3, 0);
=20
/*
- * TWI
+ * SPI1 is wired to a audio CODEC that we don't support, so
+ * give it a pass.
+ */
+
+ /*
+ * TWI. Only one child on the iic bus, which we take care of
+ * via hints.
*/
/* TWD */
at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA23, 1);
@@ -132,16 +150,18 @@
at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB27, 0);
=20
/*
- * USART2
+ * USART1
*/
- /* RTS2 */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA4, 1);
- /* CTS2 */
- at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA5, 0);
- /* TXD2 */
- at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB8, 1);
- /* RXD2 */
- at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB9, 0);
+ /* RTS1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB28, 1);
+ /* CTS1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB29, 0);
+ /* TXD1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB6, 1);
+ /* RXD1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB7, 0);
+
+ /* USART2 - USART5 aren't wired up, except via PIO pins, ignore them. */
=20
return (at91_ramsize());
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/board_sn9g45.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/board_sn9g45.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 2009 Greg Ansley. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * DesignA Electronics Snapper9g45
+ * http://www.designa-electronics.com/
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/arm/at91/board_sn9g45.c 238846 2012-07-27 16:=
38:02Z imp $");
+#include <sys/param.h>
+#include <sys/systm.h>
+
+#include <machine/board.h>
+#include <arm/at91/at91board.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91sam9g45reg.h>
+#include <arm/at91/at91_piovar.h>
+#include <arm/at91/at91_pio_sam9g45.h>
+
+BOARD_INIT long
+board_init(void)
+{
+
+ /* PIOB's A periph: Turn the debug USART's TX/RX pins */
+ at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB12_DRXD, 0);
+ at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB13_DTXD, 1);
+
+ return (at91_ramsize());
+}
+
+ARM_BOARD(SNAPPER9G45, "DesignA Electronics Snapper9G45");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/files.at91
--- a/head/sys/arm/at91/files.at91 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/files.at91 Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/arm/at91/files.at91 238443 2012-07-14 06:13:23Z imp $
+# $FreeBSD: head/sys/arm/at91/files.at91 238922 2012-07-30 21:30:43Z imp $
arm/arm/cpufunc_asm_arm9.S standard
arm/arm/irq_dispatch.S standard
arm/at91/at91_machdep.c standard
@@ -32,7 +32,8 @@
arm/at91/at91rm9200_devices.c optional at91rm9200
arm/at91/at91sam9260.c optional at91sam9260
arm/at91/at91sam9g20.c optional at91sam9g20
-arm/at91/at91sam9x25.c optional at91sam9x25
+arm/at91/at91sam9g45.c optional at91sam9g45
+arm/at91/at91sam9x5.c optional at91sam9x5
#
# All the boards we support
#
@@ -45,4 +46,12 @@
arm/at91/board_sam9260ek.c optional at91_board_sam9260ek
arm/at91/board_sam9g20ek.c optional at91_board_sam9g20ek
arm/at91/board_sam9x25ek.c optional at91_board_sam9x25ek
+arm/at91/board_sn9g45.c optional at91_board_sn9g45
arm/at91/board_tsc4370.c optional at91_board_tsc4370
+#
+# usb
+#
+dev/usb/controller/at91dci.c optional at91_dci
+dev/usb/controller/at91dci_atmelarm.c optional at91_dci
+dev/usb/controller/ohci_atmelarm.c optional ohci
+dev/usb/controller/ehci_atmelarm.c optional ehci
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/if_ate.c
--- a/head/sys/arm/at91/if_ate.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/if_ate.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/if_ate.c 234291 2012-04-14 17:09:38Z=
marius $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/if_ate.c 238895 2012-07-30 06:00:31Z=
imp $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -569,8 +569,6 @@
=20
/*
* DMA tag and map for the TX descriptors.
- * XXX Old EMAC (not EMACB) doesn't really need DMA'able
- * memory. We could just malloc it. gja XXX
*/
if (bus_dma_tag_create(bus_get_dma_tag(dev), sizeof(eth_tx_desc_t),
0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
@@ -606,12 +604,11 @@
if (sc->is_emacb) {
/* Write the descriptor queue address. */
WR4(sc, ETHB_TBQP, sc->tx_desc_phys);
+
+ /* EMACB: Enable transceiver input clock */
+ WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) | ETHB_UIO_CLKE);
}
=20
- /* EMACB: Enable transceiver input clock */
- if (sc->is_emacb)
- WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) | ETHB_UIO_CLKE);
-
return (0);
=20
errout:
@@ -676,7 +673,7 @@
}
=20
if (sc->is_emacb)
- WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
+ WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
}
=20
/*
@@ -849,12 +846,11 @@
return;
=20
if (status & ETH_ISR_RCOM) {
-
- bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map,
+ bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map,
BUS_DMASYNC_POSTREAD);
=20
- rxdhead =3D &sc->rx_descs[sc->rxhead];
- while (rxdhead->addr & ETH_CPU_OWNER) {
+ rxdhead =3D &sc->rx_descs[sc->rxhead];
+ while (rxdhead->addr & ETH_CPU_OWNER) {
if (!sc->is_emacb) {
/*
* Simulate SAM9 FIRST/LAST bits for RM9200.
@@ -933,7 +929,8 @@
=20
/* XXX Performance robbing copy. Could
* recieve directly to mbufs if not an
- * RM9200. XXX */
+ * RM9200. And even then we could likely
+ * copy just the protocol headers. XXX */
m_append(mb, count, sc->rx_buf[sc->rxhead]);
remain -=3D count;
}
@@ -1014,6 +1011,9 @@
BARRIER(sc, ETH_CTL, 4, BUS_SPACE_BARRIER_WRITE);
WR4(sc, ETH_CTL, reg | ETH_CTL_RE);
}
+
+ /* XXX need to work around SAM9260 errata 43.2.4.1:
+ * disable the mac, reset tx buffer, enable mac on TUND */
}
=20
/*
@@ -1269,7 +1269,7 @@
=20
/* Turn off transeiver input clock */
if (sc->is_emacb)
- WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
+ WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
=20
/*
* XXX we should power down the EMAC if it isn't in use, after
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.at91sam9g45
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/std.at91sam9g45 Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,14 @@
+# $FreeBSD: head/sys/arm/at91/std.at91sam9g45 238921 2012-07-30 21:19:19Z =
imp $
+#
+# Unlike other Atmel SoCs, which have their SDRAM at CS1, the
+# at91sam9g45 family has it on CS6, so PHYSADDR must be adjusted
+# accordingly. The at91sam9g45, at91sam9g46, at91sam9m10 and at91sam9m11
+# SoCs are members of this family.
+
+files "../at91/files.at91"
+cpu CPU_ARM9
+makeoptions CONF_CFLAGS=3D-mcpu=3Darm9
+options PHYSADDR=3D0x70000000
+
+# bring in the sam specific timers and such
+device at91sam9
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.atmel
--- a/head/sys/arm/at91/std.atmel Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/std.atmel Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/arm/at91/std.atmel 237883 2012-07-01 06:56:41Z imp $
+# $FreeBSD: head/sys/arm/at91/std.atmel 238922 2012-07-30 21:30:43Z imp $
=20
files "../at91/files.at91"
cpu CPU_ARM9
@@ -9,7 +9,8 @@
device at91rm9200
device at91sam9260
device at91sam9g20
-device at91sam9x25
+device at91sam9g45
+device at91sam9x5
=20
# bring in the sam specific timers and such
device at91sam9
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.sam9x25ek
--- a/head/sys/arm/at91/std.sam9x25ek Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/std.sam9x25ek Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-#$FreeBSD: head/sys/arm/at91/std.sam9x25ek 237881 2012-07-01 06:34:17Z imp=
$
+#$FreeBSD: head/sys/arm/at91/std.sam9x25ek 238922 2012-07-30 21:30:43Z imp=
$
include "../at91/std.at91sam9"
=20
options STARTUP_PAGETABLE_ADDR=3D0x20800000
@@ -8,4 +8,4 @@
options KERNVIRTADDR=3D0xc0000000
=20
device at91_board_sam9x25ek
-device at91sam9x25
+device at91sam9x5
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.sn9g45
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/std.sn9g45 Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,12 @@
+#$FreeBSD: head/sys/arm/at91/std.sn9g45 238789 2012-07-26 08:05:28Z andrew=
$
+include "../at91/std.at91sam9g45"
+
+options STARTUP_PAGETABLE_ADDR=3D0x70800000
+makeoptions KERNPHYSADDR=3D0x70008000
+options KERNPHYSADDR=3D0x70008000=09
+makeoptions KERNVIRTADDR=3D0xc0008000
+options KERNVIRTADDR=3D0xc0008000
+
+device at91sam9g45
+device at91_board_sn9g45
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/uart_bus_at91usart.c
--- a/head/sys/arm/at91/uart_bus_at91usart.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/uart_bus_at91usart.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
#include "opt_uart.h"
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/uart_bus_at91usart.c 238325 2012-07-=
10 01:13:00Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/uart_bus_at91usart.c 238787 2012-07-=
26 05:46:56Z imp $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -95,6 +95,12 @@
case 4:
device_set_desc(dev, "USART3");
break;
+ case 5:
+ device_set_desc(dev, "USART4");
+ break;
+ case 6:
+ device_set_desc(dev, "USART5");
+ break;
}
sc->sc_class =3D &at91_usart_class;
if (sc->sc_class->uc_rclk =3D=3D 0)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/ATMEL
--- a/head/sys/arm/conf/ATMEL Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/ATMEL Fri Aug 10 14:19:25 2012 +0300
@@ -2,13 +2,14 @@
# configuration. This kernel will not (presently) boot. Do not copy
# it to create your own custom config file.
#
-# $FreeBSD: head/sys/arm/conf/ATMEL 238443 2012-07-14 06:13:23Z imp $
+# $FreeBSD: head/sys/arm/conf/ATMEL 238956 2012-07-31 19:39:21Z imp $
=20
ident ATMEL
=20
include "../at91/std.atmel"
=20
-# Arbitrary values for testing purposes.
+# Typical values for most SoCs and board configurations. Will not work for
+# at91sam9g45 or on some boards with non u-boot boot loaders.
options STARTUP_PAGETABLE_ADDR=3D0x20800000
makeoptions KERNPHYSADDR=3D0x20000000
makeoptions KERNVIRTADDR=3D0xc0000000
@@ -28,6 +29,7 @@
device at91_board_sam9260ek
device at91_board_sam9g20ek
device at91_board_sam9x25ek
+device at91_board_sn9g45
device at91_board_tsc4370
=20
#makeoptions DEBUG=3D-g # Build kernel with gdb(1) debug symbols
@@ -156,10 +158,16 @@
=20
# USB support
options USB_DEBUG # enable debug msgs
-device ohci # OHCI PCI->USB interface
+device ohci # OHCI USB interface
device usb # USB Bus (required)
device umass # Disks/Mass storage - Requires scbus and da
=20
+# USB device (gadget) support
+device at91_dci # Atmel's usb device
+device usfs # emulate a flash
+device cdce # emulate an ethernet
+device usb_template # Control of the gadget
+
# watchdog
device at91_wdt # Atmel AT91 Watchdog Timer
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/ETHERNUT5
--- a/head/sys/arm/conf/ETHERNUT5 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/ETHERNUT5 Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: head/sys/arm/conf/ETHERNUT5 236497 2012-06-03 01:07:55Z marius=
$
+# $FreeBSD: head/sys/arm/conf/ETHERNUT5 238847 2012-07-27 17:07:54Z imp $
=20
ident ETHERNUT5
=20
@@ -103,7 +103,7 @@
=20
# Ethernet
device mii # Minimal MII support
-device ate # Atmel AT91 Ethernet friver
+device ate # Atmel AT91 Ethernet driver
=20
# I2C
device at91_twi # Atmel AT91 Two-wire Interface
@@ -150,7 +150,7 @@
=20
# USB support
#options USB_DEBUG # enable debug msgs
-device ohci # OHCI PCI->USB interface
+device ohci # OHCI USB interface
device usb # USB Bus (required)
#device umass # Disks/Mass storage - Requires scbus and da
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/ETHERNUT5.hints
--- a/head/sys/arm/conf/ETHERNUT5.hints Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/ETHERNUT5.hints Fri Aug 10 14:19:25 2012 +0300
@@ -1,8 +1,8 @@
-# $FreeBSD: head/sys/arm/conf/ETHERNUT5.hints 236191 2012-05-28 17:58:10Z =
marius $
+# $FreeBSD: head/sys/arm/conf/ETHERNUT5.hints 238786 2012-07-26 05:37:36Z =
imp $
=20
# Atmel AT45DB21D
hint.at45d.0.at=3D"spibus0"
-hint.at45d.0.addr=3D0x00
+hint.at45d.0.cs=3D0
# user 132 kbytes
hint.map.0.at=3D"flash/spi0"
hint.map.0.start=3D0x00000000
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/HL201
--- a/head/sys/arm/conf/HL201 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/HL201 Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: head/sys/arm/conf/HL201 236988 2012-06-13 04:40:29Z imp $
+# $FreeBSD: head/sys/arm/conf/HL201 238957 2012-07-31 19:41:12Z imp $
=20
ident HL201
=20
@@ -70,7 +70,7 @@
device loop
device ether
device uart
-device macb
+device ate
device mii
#device lxtphy
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/KB920X
--- a/head/sys/arm/conf/KB920X Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/KB920X Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: head/sys/arm/conf/KB920X 238335 2012-07-10 05:39:06Z imp $
+# $FreeBSD: head/sys/arm/conf/KB920X 238881 2012-07-29 04:28:29Z imp $
=20
ident KB920X
=20
@@ -138,6 +138,12 @@
device wlan_tkip # 802.11 TKIP support
device wlan_amrr # AMRR transmit rate control algorithm
=20
+# USB device (gadget) support
+device at91_dci # Atmel's usb device
+device usfs # emulate a flash
+device cdce # emulate an ethernet
+device usb_template # Control of the gadget
+
options IEEE80211_SUPPORT_MESH
=20
options AH_SUPPORT_AR5416
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/QILA9G20
--- a/head/sys/arm/conf/QILA9G20 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/QILA9G20 Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: head/sys/arm/conf/QILA9G20 236988 2012-06-13 04:40:29Z imp $
+# $FreeBSD: head/sys/arm/conf/QILA9G20 238957 2012-07-31 19:41:12Z imp $
=20
ident QILA9G20
=20
@@ -86,7 +86,6 @@
=20
# Ethernet
device ate # Ethernet Driver=09
-#device macb # Alternate Ethernet driver
device mii
option AT91_ATE_USE_RMII
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9260EK
--- a/head/sys/arm/conf/SAM9260EK Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9260EK Fri Aug 10 14:19:25 2012 +0300
@@ -15,14 +15,14 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: head/sys/arm/conf/SAM9260EK 238443 2012-07-14 06:13:23Z imp $
+# $FreeBSD: head/sys/arm/conf/SAM9260EK 238823 2012-07-27 05:37:01Z imp $
=20
-ident ETHERNUT5
+ident SAM9260EK
=20
-include "../at91/std.ethernut5"
+include "../at91/std.sam9260ek"
=20
# To statically compile in device wiring instead of /boot/device.hints
-hints "ETHERNUT5.hints"
+hints "SAM9260EK.hints"
=20
#makeoptions DEBUG=3D-g # Build kernel with gdb(1) debug symbols
=20
@@ -66,14 +66,17 @@
#options INCLUDE_CONFIG_FILE # Include this file in kernel
=20
# required for netbooting
-options BOOTP
-options BOOTP_COMPAT
-options BOOTP_NFSROOT
-options BOOTP_NFSV3
-options BOOTP_WIRED_TO=3Date0
+#options BOOTP
+#options BOOTP_COMPAT
+#options BOOTP_NFSROOT
+#options BOOTP_NFSV3
+#options BOOTP_WIRED_TO=3Date0
=20
# alternatively, boot from a MMC/SD memory card
-#options ROOTDEVNAME=3D\"ufs:/dev/mmcsd0a\"
+#options ROOTDEVNAME=3D\"ufs:/dev/mmcsd0s1a\"
+
+# Alternatively, boot from a USB card.
+options ROOTDEVNAME=3D\"ufs:/dev/da0s1a\"
=20
# kernel/memory size reduction
options MUTEX_NOINLINE
@@ -103,25 +106,30 @@
=20
# Ethernet
device mii # Minimal MII support
-device ate # Atmel AT91 Ethernet friver
+device ate # Atmel AT91 Ethernet driver
=20
# I2C
device at91_twi # Atmel AT91 Two-wire Interface
device iic # I2C generic I/O device driver
device iicbus # I2C bus system
-device pcf8563 # NXP PCF8563 clock/calendar
+device icee # I2C eeprom
=20
# MMC/SD
+# See comment for DataFlash below
device at91_mci # Atmel AT91 Multimedia Card Interface
-options AT91_MCI_HAS_4WIRE
+options AT91_MCI_HAS_4WIRE # 4 wires
+options AT91_MCI_SLOT_B # Wired to slot B
device mmc # MMC/SD bus
device mmcsd # MMC/SD memory card
=20
# DataFlash
-device at91_spi # Atmel AT91 Serial Peripheral Interface
-device spibus # SPI bus
-device at45d # Atmel AT45D
-device geom_map # GEOM partition mapping
+# The DataFlash and MMC card are wired together, so we must pick one or the
+# other. This is due to pin mux, and also due to the design of the
+# SAM9260EK board. SLOT A wouldn't have this issue.
+#device at91_spi # Atmel AT91 Serial Peripheral Interface
+#device spibus # SPI bus
+#device at45d # Atmel AT45D
+#device geom_map # GEOM partition mapping
=20
# Pseudo devices.
device loop # Network loopback
@@ -135,13 +143,13 @@
#device firmware # firmware assist module
=20
# SCSI peripherals
-#device scbus # SCSI bus (required for ATA/SCSI)
+device scbus # SCSI bus (required for ATA/SCSI)
#device ch # SCSI media changers
-#device da # Direct Access (disks)
+device da # Direct Access (disks)
#device sa # Sequential Access (tape etc)
-#device cd # CD
-#device pass # Passthrough device (direct ATA/SCSI access)
-#device ses # Enclosure Services (SES and SAF-TE)
+device cd # CD/DVD
+device pass # Passthrough device (direct ATA/SCSI access)
+device ses # Enclosure Services (SES and SAF-TE)
#device ctl # CAM Target Layer
=20
# Serial (COM) ports
@@ -150,9 +158,9 @@
=20
# USB support
#options USB_DEBUG # enable debug msgs
-device ohci # OHCI PCI->USB interface
+device ohci # OHCI USB interface
device usb # USB Bus (required)
-#device umass # Disks/Mass storage - Requires scbus and da
+device umass # Disks/Mass storage - Requires scbus and da
=20
# watchdog
device at91_wdt # Atmel AT91 Watchdog Timer
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9260EK.hints
--- a/head/sys/arm/conf/SAM9260EK.hints Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9260EK.hints Fri Aug 10 14:19:25 2012 +0300
@@ -1,51 +1,48 @@
-# $FreeBSD: head/sys/arm/conf/SAM9260EK.hints 238443 2012-07-14 06:13:23Z =
imp $
+# $FreeBSD: head/sys/arm/conf/SAM9260EK.hints 238811 2012-07-26 16:34:21Z =
imp $
=20
# Atmel AT45DB21D
hint.at45d.0.at=3D"spibus0"
-hint.at45d.0.addr=3D0x00
-# user 132 kbytes
+hint.at45d.0.cs=3D1
+# Area 0: 00000000 to 000041FF (RO) Bootstrap
+# Area 1: 00004200 to 000083FF Environment
+# Area 2: 00008400 to 00041FFF (RO) U-Boot
+# Area 3: 00042000 to 00251FFF Kernel
+# Area 4: 00252000 to 0083FFFF FS
+# bootstrap
hint.map.0.at=3D"flash/spi0"
hint.map.0.start=3D0x00000000
-hint.map.0.end=3D0x00020fff
-hint.map.0.name=3D"user"
+hint.map.0.end=3D0x000041ff
+hint.map.0.name=3D"bootstrap"
hint.map.0.readonly=3D1
-# setup 132 kbytes
+# uboot environment
hint.map.1.at=3D"flash/spi0"
-hint.map.1.start=3D0x00021000
-hint.map.1.end=3D0x00041fff
-hint.map.1.name=3D"setup"
-hint.map.1.readonly=3D1
-# uboot 528 kbytes
+hint.map.1.start=3D0x00004200
+hint.map.1.end=3D0x00083ff
+hint.map.1.name=3D"uboot-env"
+#hint.map.1.readonly=3D1
+# uboot
hint.map.2.at=3D"flash/spi0"
-hint.map.2.start=3D0x00042000
-hint.map.2.end=3D0x000c5fff
+hint.map.2.start=3D0x00008400
+hint.map.2.end=3D0x00041fff
hint.map.2.name=3D"uboot"
hint.map.2.readonly=3D1
-# kernel 2640 kbytes
+# kernel
hint.map.3.at=3D"flash/spi0"
-hint.map.3.start=3D0x000c6000
-hint.map.3.end=3D0x00359fff
-hint.map.3.name=3D"kernel"
+hint.map.3.start=3D0x00042000
+hint.map.3.end=3D0x00251fff
+hint.map.3.name=3D"fs"
#hint.map.3.readonly=3D1
-# nutos 528 kbytes
+# fs
hint.map.4.at=3D"flash/spi0"
-hint.map.4.start=3D0x0035a000
-hint.map.4.end=3D0x003ddfff
-hint.map.4.name=3D"nutos"
-hint.map.4.readonly=3D1
-# env 132 kbytes
-hint.map.5.at=3D"flash/spi0"
-hint.map.5.start=3D0x003de000
-hint.map.5.end=3D0x003fefff
-hint.map.5.name=3D"env"
-hint.map.5.readonly=3D1
-# env 132 kbytes
-hint.map.6.at=3D"flash/spi0"
-hint.map.6.start=3D0x003ff000
-hint.map.6.end=3D0x0041ffff
-hint.map.6.name=3D"nutoscfg"
-hint.map.6.readonly=3D1
+hint.map.4.start=3D0x00252000
+hint.map.4.end=3D0x0083ffff
+hint.map.4.name=3D"fs"
+#hint.map.4.readonly=3D1
=20
-# NXP PCF8563 clock/calendar
-hint.pcf8563_rtc.0.at=3D"iicbus0"
-hint.pcf8563_rtc.0.addr=3D0xa2
+# EEPROM at24c512 - 512kbit 65,536x8 memory
+hint.icee.0.at=3D"iicbus0"
+hint.icee.0.addr=3D0xa0
+hint.icee.0.type=3D16
+hint.icee.0.size=3D65536
+hint.icee.0.rd_sz=3D128
+hint.icee.0.wr_sz=3D128
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9G20EK
--- a/head/sys/arm/conf/SAM9G20EK Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9G20EK Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: head/sys/arm/conf/SAM9G20EK 236988 2012-06-13 04:40:29Z imp $
+# $FreeBSD: head/sys/arm/conf/SAM9G20EK 238957 2012-07-31 19:41:12Z imp $
=20
ident SAM9G20EK
=20
@@ -85,7 +85,6 @@
=20
# Ethernet
device ate # Ethernet Driver=09
-#device macb # Alternate Ethernet driver
device mii
option AT91_ATE_USE_RMII
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9X25EK
--- a/head/sys/arm/conf/SAM9X25EK Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9X25EK Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
# If you are in doubt as to the purpose or necessity of a line, check firs=
t=20
# in NOTES.
#
-# $FreeBSD: head/sys/arm/conf/SAM9X25EK 237742 2012-06-29 04:18:52Z imp $
+# $FreeBSD: head/sys/arm/conf/SAM9X25EK 238932 2012-07-31 04:09:27Z imp $
=20
# NOUNIVERSE: disable building in make universe
ident SAM9X25EK
@@ -86,8 +86,7 @@
device uart # Serial Ports
=20
# Ethernet
-#device ate # Ethernet Driver=09
-device macb # Alternate Ethernet driver
+device ate # Ethernet Driver=09
device mii
option AT91_ATE_USE_RMII
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SN9G45
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/conf/SN9G45 Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,129 @@
+# Kernel configuration for DesignA Electronics Snapper9G45 System on Module
+#
+# For more information on this file, please read the handbook section on
+# Kernel Configuration Files:
+#
+# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfi=
g-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files.
+# If you are in doubt as to the purpose or necessity of a line, check first
+# in NOTES.
+#
+# $FreeBSD: head/sys/arm/conf/SN9G45 238957 2012-07-31 19:41:12Z imp $
+
+ident SN9G45
+
+include "../at91/std.sn9g45"
+
+#To statically compile in device wiring instead of /boot/device.hints
+#hints "SN9G45.hints"
+makeoptions MODULES_OVERRIDE=3D""
+
+makeoptions DEBUG=3D-g #Build kernel with gdb(1) debug symbols
+options DDB
+options KDB
+
+options SCHED_4BSD #4BSD scheduler
+options INET #InterNETworking
+#options INET6 #IPv6 communications protocols
+options FFS #Berkeley Fast Filesystem
+#options SOFTUPDATES #Enable FFS soft updates support
+#options UFS_ACL #Support for access control lists
+#options UFS_DIRHASH #Improve performance on big directories
+#options MD_ROOT #MD is a potential root device
+#options MD_ROOT_SIZE=3D4096 # 3MB ram disk
+options NFSCL #New Network Filesystem Client
+#options NFSD #New Network Filesystem Server
+#options NFSLOCKD #Network Lock Manager
+#options NFS_ROOT #NFS usable as /, requires NFSCL
+#options BOOTP_NFSROOT
+#options BOOTP
+#options BOOTP_NFSV3
+#options BOOTP_WIRED_TO=3Date0
+#options BOOTP_COMPAT
+
+options ROOTDEVNAME=3D\"ufs:/dev/da0s1\"
+
+options ALT_BREAK_TO_DEBUGGER
+
+#options MSDOSFS #MSDOS Filesystem
+#options CD9660 #ISO 9660 Filesystem
+#options PROCFS #Process filesystem (requires PSEUDOFS)
+#options PSEUDOFS #Pseudo-filesystem framework
+options SCSI_DELAY=3D1000 #Delay (in ms) before probing SCSI
+#options KTRACE #ktrace(1) support
+options SYSVSHM #SYSV-style shared memory
+options SYSVMSG #SYSV-style message queues
+options SYSVSEM #SYSV-style semaphores
+options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions
+#options SYSCTL_OMIT_DESCR
+options MUTEX_NOINLINE
+options RWLOCK_NOINLINE
+options NO_FFS_SNAPSHOT
+options NO_SWAPPING
+
+# Debugging for use in -current
+#options INVARIANTS #Enable calls of extra sanity checking
+#options INVARIANT_SUPPORT #Extra sanity checks of internal structures, r=
equired by INVARIANTS
+#options WITNESS #Enable checks to detect deadlocks and cycles
+#options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed
+#options DIAGNOSTIC
+
+device random
+device loop
+device bpf
+device ether
+device md
+
+device uart # Serial Ports
+
+# Ethernet
+device ate # Ethernet Driver=09
+device mii
+option AT91_ATE_USE_RMII
+
+device at91_wdt # WDT: Watchdog timer
+
+# SCSI peripherals
+device scbus # SCSI bus (required for SCSI)
+device da # Direct Access (disks)
+device cd # CD
+device pass # Passthrough device (direct SCSI access)
+
+# USB support
+device ohci # OHCI localbus->USB interface
+device usb # USB Bus (required)
+device umass # Disks/Mass storage - Requires scbus and da
+device uhid # "Human Interface Devices"
+#device ulpt # Printer
+#device udbp # USB Double Bulk Pipe devices
+
+# USB Ethernet, requires miibus
+device miibus
+#device aue # ADMtek USB Ethernet
+#device axe # ASIX Electronics USB Ethernet
+#device cdce # Generic USB over Ethernet
+#device cue # CATC USB Ethernet
+#device kue # Kawasaki LSI USB Ethernet
+#device rue # RealTek RTL8150 USB Ethernet
+device udav # Davicom DM9601E USB
+
+# USB Wireless
+#device rum # Ralink Technology RT2501USB wireless NICs
+#device uath # Atheros AR5523 wireless NICs
+#device ural # Ralink Technology RT2500USB wireless NICs
+#device zyd # ZyDAS zd1211/zd1211b wireless NICs
+
+# Wireless NIC cards
+#device wlan # 802.11 support
+#device wlan_wep # 802.11 WEP support
+#device wlan_ccmp # 802.11 CCMP support
+#device wlan_tkip # 802.11 TKIP support
+#device wlan_amrr # AMRR transmit rate control algorithm
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/common.c
--- a/head/sys/arm/mv/common.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/common.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/mv/common.c 233013 2012-03-15 21:48:27Z r=
aj $");
+__FBSDID("$FreeBSD: head/sys/arm/mv/common.c 238873 2012-07-28 21:56:24Z h=
rs $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -251,7 +251,9 @@
uint32_t ef =3D 0;
=20
soc_id(&dev, &rev);
- if (dev =3D=3D MV_DEV_88F6281 || dev =3D=3D MV_DEV_MV78100_Z0 ||
+ if (dev =3D=3D MV_DEV_88F6281 ||
+ dev =3D=3D MV_DEV_88F6282 ||
+ dev =3D=3D MV_DEV_MV78100_Z0 ||
dev =3D=3D MV_DEV_MV78100)
__asm __volatile("mrc p15, 1, %0, c15, c1, 0" : "=3Dr" (ef));
else if (dev =3D=3D MV_DEV_88F5182 || dev =3D=3D MV_DEV_88F5281)
@@ -351,6 +353,13 @@
else if (r =3D=3D 3)
rev =3D "A1";
break;
+ case MV_DEV_88F6282:
+ dev =3D "Marvell 88F6282";
+ if (r =3D=3D 0)
+ rev =3D "A0";
+ else if (r =3D=3D 1)
+ rev =3D "A1";
+ break;
case MV_DEV_MV78100_Z0:
dev =3D "Marvell MV78100 Z0";
break;
@@ -536,6 +545,7 @@
if ((dev =3D=3D MV_DEV_88F5182 && i < 2) ||
(dev =3D=3D MV_DEV_88F5281 && i < 4) ||
(dev =3D=3D MV_DEV_88F6281 && i < 4) ||
+ (dev =3D=3D MV_DEV_88F6282 && i < 4) ||
(dev =3D=3D MV_DEV_MV78100 && i < 8) ||
(dev =3D=3D MV_DEV_MV78100_Z0 && i < 8))
return (1);
@@ -1320,7 +1330,8 @@
uint32_t dev, rev;
=20
soc_id(&dev, &rev);
- if (dev =3D=3D MV_DEV_88F6281)
+ if (dev =3D=3D MV_DEV_88F6281 ||
+ dev =3D=3D MV_DEV_88F6282)
return (2);
else if ((dev =3D=3D MV_DEV_MV78100) || (dev =3D=3D MV_DEV_MV78100_Z0))
return (1);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/gpio.c
--- a/head/sys/arm/mv/gpio.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/gpio.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/mv/gpio.c 224051 2011-07-15 02:29:10Z mar=
cel $");
+__FBSDID("$FreeBSD: head/sys/arm/mv/gpio.c 238873 2012-07-28 21:56:24Z hrs=
$");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -155,7 +155,8 @@
sc->pin_num =3D 32;
sc->irq_num =3D 4;
=20
- } else if (dev_id =3D=3D MV_DEV_88F6281) {
+ } else if (dev_id =3D=3D MV_DEV_88F6281 ||
+ dev_id =3D=3D MV_DEV_88F6282) {
sc->pin_num =3D 50;
sc->irq_num =3D 7;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/ic.c
--- a/head/sys/arm/mv/ic.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/ic.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/mv/ic.c 238873 2012-07-28 21:56:24Z hrs $=
");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -105,7 +105,9 @@
sc->ic_high_regs =3D 0;
sc->ic_error_regs =3D 0;
=20
- if (dev_id =3D=3D MV_DEV_88F6281 || dev_id =3D=3D MV_DEV_MV78100 ||
+ if (dev_id =3D=3D MV_DEV_88F6281 ||
+ dev_id =3D=3D MV_DEV_88F6282 ||
+ dev_id =3D=3D MV_DEV_MV78100 ||
dev_id =3D=3D MV_DEV_MV78100_Z0)
sc->ic_high_regs =3D 1;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/kirkwood/kirkwood.c
--- a/head/sys/arm/mv/kirkwood/kirkwood.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/kirkwood/kirkwood.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/mv/kirkwood/kirkwood.c 238873 2012-07-28 =
21:56:24Z hrs $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -74,6 +74,8 @@
soc_id(&dev, &rev);
if (dev =3D=3D MV_DEV_88F6281 && (rev =3D=3D 2 || rev =3D=3D 3))
return (TCLK_200MHZ);
+ if (dev =3D=3D MV_DEV_88F6282)
+ return (TCLK_200MHZ);
=20
return (TCLK_166MHZ);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/mv_sata.c
--- a/head/sys/arm/mv/mv_sata.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/mv_sata.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/mv/mv_sata.c 238873 2012-07-28 21:56:24Z =
hrs $");
=20
#include <sys/param.h>
#include <sys/bus.h>
@@ -197,6 +197,7 @@
sc->sc_edma_qlen =3D 128;
break;
case MV_DEV_88F6281:
+ case MV_DEV_88F6282:
case MV_DEV_MV78100:
case MV_DEV_MV78100_Z0:
sc->sc_version =3D 2;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/mvreg.h
--- a/head/sys/arm/mv/mvreg.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/mvreg.h Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/arm/mv/mvreg.h 232512 2012-03-04 18:13:45Z raj $
+ * $FreeBSD: head/sys/arm/mv/mvreg.h 238873 2012-07-28 21:56:24Z hrs $
*/
=20
#ifndef _MVREG_H_
@@ -326,6 +326,7 @@
#define MV_DEV_88F5182 0x5182
#define MV_DEV_88F5281 0x5281
#define MV_DEV_88F6281 0x6281
+#define MV_DEV_88F6282 0x6282
#define MV_DEV_MV78100_Z0 0x6381
#define MV_DEV_MV78100 0x7810
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/Makefile.inc
--- a/head/sys/boot/common/Makefile.inc Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/common/Makefile.inc Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
-# $FreeBSD: head/sys/boot/common/Makefile.inc 223695 2011-06-30 16:08:56Z =
dfr $
+# $FreeBSD: head/sys/boot/common/Makefile.inc 239058 2012-08-05 12:15:15Z =
ae $
=20
-SRCS+=3D boot.c commands.c console.c devopen.c disk.c interp.c=20
+SRCS+=3D boot.c commands.c console.c devopen.c interp.c=20
SRCS+=3D interp_backslash.c interp_parse.c ls.c misc.c=20
SRCS+=3D module.c panic.c
=20
@@ -24,6 +24,18 @@
SRCS+=3D dev_net.c
.endif
=20
+.if !defined(LOADER_NO_DISK_SUPPORT)
+SRCS+=3D disk.c part.c
+CFLAGS+=3D -DLOADER_DISK_SUPPORT
+.if !defined(LOADER_NO_GPT_SUPPORT)
+SRCS+=3D crc32.c
+CFLAGS+=3D -DLOADER_GPT_SUPPORT
+.endif
+.if !defined(LOADER_NO_MBR_SUPPORT)
+CFLAGS+=3D -DLOADER_MBR_SUPPORT
+.endif
+.endif
+
.if defined(HAVE_BCACHE)
SRCS+=3D bcache.c
.endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/disk.c
--- a/head/sys/boot/common/disk.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/common/disk.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,28 +26,13 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/common/disk.c 226569 2011-10-20 15:46:54=
Z pjd $");
+__FBSDID("$FreeBSD: head/sys/boot/common/disk.c 239058 2012-08-05 12:15:15=
Z ae $");
=20
-/*
- * MBR/GPT partitioned disk device handling.
- *
- * Ideas and algorithms from:
- *
- * - NetBSD libi386/biosdisk.c
- * - FreeBSD biosboot/disk.c
- *
- */
-
+#include <sys/disk.h>
#include <stand.h>
-
-#include <sys/diskmbr.h>
-#include <sys/disklabel.h>
-#include <sys/gpt.h>
-
#include <stdarg.h>
-#include <uuid.h>
-
#include <bootstrap.h>
+#include <part.h>
=20
#include "disk.h"
=20
@@ -56,53 +42,26 @@
# define DEBUG(fmt, args...)
#endif
=20
-/*
- * Search for a slice with the following preferences:
- *
- * 1: Active FreeBSD slice
- * 2: Non-active FreeBSD slice
- * 3: Active Linux slice
- * 4: non-active Linux slice
- * 5: Active FAT/FAT32 slice
- * 6: non-active FAT/FAT32 slice
- */
-#define PREF_RAWDISK 0
-#define PREF_FBSD_ACT 1
-#define PREF_FBSD 2
-#define PREF_LINUX_ACT 3
-#define PREF_LINUX 4
-#define PREF_DOS_ACT 5
-#define PREF_DOS 6
-#define PREF_NONE 7
-
-#ifdef LOADER_GPT_SUPPORT
-
-struct gpt_part {
- int gp_index;
- uuid_t gp_type;
- uint64_t gp_start;
- uint64_t gp_end;
+struct open_disk {
+ struct ptable *table;
+ off_t mediasize;
+ u_int sectorsize;
};
=20
-static uuid_t efi =3D GPT_ENT_TYPE_EFI;
-static uuid_t freebsd_boot =3D GPT_ENT_TYPE_FREEBSD_BOOT;
-static uuid_t freebsd_ufs =3D GPT_ENT_TYPE_FREEBSD_UFS;
-static uuid_t freebsd_swap =3D GPT_ENT_TYPE_FREEBSD_SWAP;
-static uuid_t freebsd_zfs =3D GPT_ENT_TYPE_FREEBSD_ZFS;
-static uuid_t ms_basic_data =3D GPT_ENT_TYPE_MS_BASIC_DATA;
+struct print_args {
+ struct disk_devdesc *dev;
+ const char *prefix;
+ int verbose;
+};
=20
-#endif
-
-#if defined(LOADER_GPT_SUPPORT) || defined(LOADER_MBR_SUPPORT)
-
-/* Given a size in 512 byte sectors, convert it to a human-readable number=
. */
+/* Convert size to a human-readable number. */
static char *
-display_size(uint64_t size)
+display_size(uint64_t size, u_int sectorsize)
{
static char buf[80];
char unit;
=20
- size /=3D 2;
+ size =3D size * sectorsize / 1024;
unit =3D 'K';
if (size >=3D 10485760000LL) {
size /=3D 1073741824;
@@ -114,687 +73,230 @@
size /=3D 1024;
unit =3D 'M';
}
- sprintf(buf, "%.6ld%cB", (long)size, unit);
+ sprintf(buf, "%ld%cB", (long)size, unit);
return (buf);
}
=20
-#endif
+static int
+ptblread(void *d, void *buf, size_t blocks, off_t offset)
+{
+ struct disk_devdesc *dev;
+ struct open_disk *od;
=20
-#ifdef LOADER_MBR_SUPPORT
-
-static void
-disk_checkextended(struct disk_devdesc *dev,
- struct dos_partition *slicetab, int slicenum, int *nslicesp)
-{
- uint8_t buf[DISK_SECSIZE];
- struct dos_partition *dp;
- uint32_t base;
- int rc, i, start, end;
-
- dp =3D &slicetab[slicenum];
- start =3D *nslicesp;
-
- if (dp->dp_size =3D=3D 0)
- goto done;
- if (dp->dp_typ !=3D DOSPTYP_EXT)
- goto done;
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, dp->dp_start, DISK_SECSIZE,
- (char *) buf, NULL);
- if (rc)
- goto done;
- if (buf[0x1fe] !=3D 0x55 || buf[0x1ff] !=3D 0xaa) {
- DEBUG("no magic in extended table");
- goto done;
- }
- base =3D dp->dp_start;
- dp =3D (struct dos_partition *) &buf[DOSPARTOFF];
- for (i =3D 0; i < NDOSPART; i++, dp++) {
- if (dp->dp_size =3D=3D 0)
- continue;
- if (*nslicesp =3D=3D NEXTDOSPART)
- goto done;
- dp->dp_start +=3D base;
- bcopy(dp, &slicetab[*nslicesp], sizeof(*dp));
- (*nslicesp)++;
- }
- end =3D *nslicesp;
-
- /*
- * now, recursively check the slices we just added
- */
- for (i =3D start; i < end; i++)
- disk_checkextended(dev, slicetab, i, nslicesp);
-done:
- return;
+ dev =3D (struct disk_devdesc *)d;
+ od =3D (struct open_disk *)dev->d_opendata;
+ return (dev->d_dev->dv_strategy(dev, F_READ, offset,
+ blocks * od->sectorsize, (char *)buf, NULL));
}
=20
-static int
-disk_readslicetab(struct disk_devdesc *dev,
- struct dos_partition **slicetabp, int *nslicesp)
+#define PWIDTH 35
+static void
+ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
{
- struct dos_partition *slicetab =3D NULL;
- int nslices, i;
- int rc;
- uint8_t buf[DISK_SECSIZE];
+ struct print_args *pa, bsd;
+ struct open_disk *od;
+ struct ptable *table;
+ char line[80];
=20
- /*
- * Find the slice in the DOS slice table.
- */
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, 0, DISK_SECSIZE,
- (char *) buf, NULL);
- if (rc) {
- DEBUG("error reading MBR");
- return (rc);
+ pa =3D (struct print_args *)arg;
+ od =3D (struct open_disk *)pa->dev->d_opendata;
+ sprintf(line, " %s%s: %s", pa->prefix, pname,
+ parttype2str(part->type));
+ if (pa->verbose)
+ sprintf(line, "%-*s%s", PWIDTH, line,
+ display_size(part->end - part->start + 1,
+ od->sectorsize));
+ strcat(line, "\n");
+ pager_output(line);
+ if (part->type =3D=3D PART_FREEBSD) {
+ /* Open slice with BSD label */
+ pa->dev->d_offset =3D part->start;
+ table =3D ptable_open(pa->dev, part->end - part->start + 1,
+ od->sectorsize, ptblread);
+ if (table =3D=3D NULL)
+ return;
+ sprintf(line, " %s%s", pa->prefix, pname);
+ bsd.dev =3D pa->dev;
+ bsd.prefix =3D line;
+ bsd.verbose =3D pa->verbose;
+ ptable_iterate(table, &bsd, ptable_print);
+ ptable_close(table);
}
+}
+#undef PWIDTH
=20
- /*
- * Check the slice table magic.
- */
- if (buf[0x1fe] !=3D 0x55 || buf[0x1ff] !=3D 0xaa) {
- DEBUG("no slice table/MBR (no magic)");
- return (rc);
- }
+void
+disk_print(struct disk_devdesc *dev, char *prefix, int verbose)
+{
+ struct open_disk *od;
+ struct print_args pa;
=20
- /*
- * copy the partition table, then pick up any extended partitions.
- */
- slicetab =3D malloc(NEXTDOSPART * sizeof(struct dos_partition));
- bcopy(buf + DOSPARTOFF, slicetab,
- sizeof(struct dos_partition) * NDOSPART);
- nslices =3D NDOSPART; /* extended slices start here */
- for (i =3D 0; i < NDOSPART; i++)
- disk_checkextended(dev, slicetab, i, &nslices);
-
- *slicetabp =3D slicetab;
- *nslicesp =3D nslices;
- return (0);
+ /* Disk should be opened */
+ od =3D (struct open_disk *)dev->d_opendata;
+ pa.dev =3D dev;
+ pa.prefix =3D prefix;
+ pa.verbose =3D verbose;
+ ptable_iterate(od->table, &pa, ptable_print);
}
=20
-/*
- * Search for the best MBR slice (typically the first FreeBSD slice).
- */
-static int
-disk_bestslice(struct dos_partition *slicetab, int nslices)
+int
+disk_open(struct disk_devdesc *dev, off_t mediasize, u_int sectorsize)
{
- struct dos_partition *dp;
- int pref, preflevel;
- int i, prefslice;
-
- prefslice =3D 0;
- preflevel =3D PREF_NONE;
-
- dp =3D &slicetab[0];
- for (i =3D 0; i < nslices; i++, dp++) {
- switch (dp->dp_typ) {
- case DOSPTYP_386BSD: /* FreeBSD */
- pref =3D dp->dp_flag & 0x80 ? PREF_FBSD_ACT : PREF_FBSD;
- break;
-
- case DOSPTYP_LINUX:
- pref =3D dp->dp_flag & 0x80 ? PREF_LINUX_ACT : PREF_LINUX;
- break;
-
- case 0x01: /* DOS/Windows */
- case 0x04:
- case 0x06:
- case 0x0b:
- case 0x0c:
- case 0x0e:
- pref =3D dp->dp_flag & 0x80 ? PREF_DOS_ACT : PREF_DOS;
- break;
-
- default:
- pref =3D PREF_NONE;
- }
- if (pref < preflevel) {
- preflevel =3D pref;
- prefslice =3D i + 1;
- }
- }
- return (prefslice);
-}
-
-static int
-disk_openmbr(struct disk_devdesc *dev)
-{
- struct dos_partition *slicetab =3D NULL, *dptr;
- int nslices, sector, slice;
- int rc;
- uint8_t buf[DISK_SECSIZE];
- struct disklabel *lp;
-
- /*
- * Following calculations attempt to determine the correct value
- * for dev->d_offset by looking for the slice and partition specified,
- * or searching for reasonable defaults.
- */
- rc =3D disk_readslicetab(dev, &slicetab, &nslices);
- if (rc)
- return (rc);
-
- /*
- * if a slice number was supplied but not found, this is an error.
- */
- if (dev->d_slice > 0) {
- slice =3D dev->d_slice - 1;
- if (slice >=3D nslices) {
- DEBUG("slice %d not found", slice);
- rc =3D EPART;
- goto out;
- }
- }
-
- /*
- * Check for the historically bogus MBR found on true dedicated disks
- */
- if (slicetab[3].dp_typ =3D=3D DOSPTYP_386BSD &&
- slicetab[3].dp_start =3D=3D 0 && slicetab[3].dp_size =3D=3D 50000) {
- sector =3D 0;
- goto unsliced;
- }
-
- /*
- * Try to auto-detect the best slice; this should always give
- * a slice number
- */
- if (dev->d_slice =3D=3D 0) {
- slice =3D disk_bestslice(slicetab, nslices);
- if (slice =3D=3D -1) {
- rc =3D ENOENT;
- goto out;
- }
- dev->d_slice =3D slice;
- }
-
- /*
- * Accept the supplied slice number unequivocally (we may be looking
- * at a DOS partition).
- * Note: we number 1-4, offsets are 0-3
- */
- dptr =3D &slicetab[dev->d_slice - 1];
- sector =3D dptr->dp_start;
- DEBUG("slice entry %d at %d, %d sectors",
- dev->d_slice - 1, sector, dptr->dp_size);
-
-unsliced:
- /*
- * Now we have the slice offset, look for the partition in the
- * disklabel if we have a partition to start with.
- *
- * XXX we might want to check the label checksum.
- */
- if (dev->d_partition < 0) {
- /* no partition, must be after the slice */
- DEBUG("opening raw slice");
- dev->d_offset =3D sector;
- rc =3D 0;
- goto out;
- }
-
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, sector + LABELSECTOR,
- DISK_SECSIZE, (char *) buf, NULL);
- if (rc) {
- DEBUG("error reading disklabel");
- goto out;
- }
-
- lp =3D (struct disklabel *) buf;
-
- if (lp->d_magic !=3D DISKMAGIC) {
- DEBUG("no disklabel");
- rc =3D ENOENT;
- goto out;
- }
- if (dev->d_partition >=3D lp->d_npartitions) {
- DEBUG("partition '%c' exceeds partitions in table (a-'%c')",
- 'a' + dev->d_partition,
- 'a' + lp->d_npartitions);
- rc =3D EPART;
- goto out;
- }
-
- dev->d_offset =3D
- lp->d_partitions[dev->d_partition].p_offset -
- lp->d_partitions[RAW_PART].p_offset +
- sector;
- rc =3D 0;
-
-out:
- if (slicetab)
- free(slicetab);
- return (rc);
-}
-
-/*
- * Print out each valid partition in the disklabel of a FreeBSD slice.
- * For size calculations, we assume a 512 byte sector size.
- */
-static void
-disk_printbsdslice(struct disk_devdesc *dev, daddr_t offset,
- char *prefix, int verbose)
-{
- char line[80];
- char buf[DISK_SECSIZE];
- struct disklabel *lp;
- int i, rc, fstype;
-
- /* read disklabel */
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, offset + LABELSECTOR,
- DISK_SECSIZE, (char *) buf, NULL);
- if (rc)
- return;
- lp =3D(struct disklabel *)(&buf[0]);
- if (lp->d_magic !=3D DISKMAGIC) {
- sprintf(line, "%s: FFS bad disklabel\n", prefix);
- pager_output(line);
- return;
- }
-
- /* Print partitions */
- for (i =3D 0; i < lp->d_npartitions; i++) {
- /*
- * For each partition, make sure we know what type of fs it
- * is. If not, then skip it.
- */
- fstype =3D lp->d_partitions[i].p_fstype;
- if (fstype !=3D FS_BSDFFS &&
- fstype !=3D FS_SWAP &&
- fstype !=3D FS_VINUM)
- continue;
-
- /* Only print out statistics in verbose mode */
- if (verbose)
- sprintf(line, " %s%c: %s %s (%d - %d)\n",
- prefix, 'a' + i,
- (fstype =3D=3D FS_SWAP) ? "swap " :
- (fstype =3D=3D FS_VINUM) ? "vinum" :
- "FFS ",
- display_size(lp->d_partitions[i].p_size),
- lp->d_partitions[i].p_offset,
- (lp->d_partitions[i].p_offset
- + lp->d_partitions[i].p_size));
- else
- sprintf(line, " %s%c: %s\n", prefix, 'a' + i,
- (fstype =3D=3D FS_SWAP) ? "swap" :
- (fstype =3D=3D FS_VINUM) ? "vinum" :
- "FFS");
- pager_output(line);
- }
-}
-
-static void
-disk_printslice(struct disk_devdesc *dev, int slice,
- struct dos_partition *dp, char *prefix, int verbose)
-{
- char stats[80];
- char line[80];
-
- if (verbose)
- sprintf(stats, " %s (%d - %d)", display_size(dp->dp_size),
- dp->dp_start, dp->dp_start + dp->dp_size);
- else
- stats[0] =3D '\0';
-
- switch (dp->dp_typ) {
- case DOSPTYP_386BSD:
- disk_printbsdslice(dev, (daddr_t)dp->dp_start,
- prefix, verbose);
- return;
- case DOSPTYP_LINSWP:
- sprintf(line, "%s: Linux swap%s\n", prefix, stats);
- break;
- case DOSPTYP_LINUX:
- /*
- * XXX
- * read the superblock to confirm this is an ext2fs partition?
- */
- sprintf(line, "%s: ext2fs%s\n", prefix, stats);
- break;
- case 0x00: /* unused partition */
- case DOSPTYP_EXT:
- return;
- case 0x01:
- sprintf(line, "%s: FAT-12%s\n", prefix, stats);
- break;
- case 0x04:
- case 0x06:
- case 0x0e:
- sprintf(line, "%s: FAT-16%s\n", prefix, stats);
- break;
- case 0x07:
- sprintf(line, "%s: NTFS/HPFS%s\n", prefix, stats);
- break;
- case 0x0b:
- case 0x0c:
- sprintf(line, "%s: FAT-32%s\n", prefix, stats);
- break;
- default:
- sprintf(line, "%s: Unknown fs: 0x%x %s\n", prefix, dp->dp_typ,
- stats);
- }
- pager_output(line);
-}
-
-static int
-disk_printmbr(struct disk_devdesc *dev, char *prefix, int verbose)
-{
- struct dos_partition *slicetab;
- int nslices, i;
- int rc;
- char line[80];
-
- rc =3D disk_readslicetab(dev, &slicetab, &nslices);
- if (rc)
- return (rc);
- for (i =3D 0; i < nslices; i++) {
- sprintf(line, "%ss%d", prefix, i + 1);
- disk_printslice(dev, i, &slicetab[i], line, verbose);
- }
- free(slicetab);
- return (0);
-}
-
-#endif
-
-#ifdef LOADER_GPT_SUPPORT
-
-static int
-disk_readgpt(struct disk_devdesc *dev, struct gpt_part **gptp, int *ngptp)
-{
- struct dos_partition *dp;
- struct gpt_hdr *hdr;
- struct gpt_ent *ent;
- struct gpt_part *gptab =3D NULL;
- int entries_per_sec, rc, i, part;
- daddr_t lba, elba;
- uint8_t gpt[DISK_SECSIZE], tbl[DISK_SECSIZE];
-
- /*
- * Following calculations attempt to determine the correct value
- * for dev->d_offset by looking for the slice and partition specified,
- * or searching for reasonable defaults.
- */
- rc =3D 0;
-
- /* First, read the MBR and see if we have a PMBR. */
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, 0, DISK_SECSIZE,
- (char *) tbl, NULL);
- if (rc) {
- DEBUG("error reading MBR");
- return (EIO);
- }
-
- /* Check the slice table magic. */
- if (tbl[0x1fe] !=3D 0x55 || tbl[0x1ff] !=3D 0xaa)
- return (ENXIO);
-
- /* Check for GPT slice. */
- part =3D 0;
- dp =3D (struct dos_partition *)(tbl + DOSPARTOFF);
- for (i =3D 0; i < NDOSPART; i++) {
- if (dp[i].dp_typ =3D=3D 0xee)
- part++;
- else if ((part !=3D 1) && (dp[i].dp_typ !=3D 0x00))
- return (EINVAL);
- }
- if (part !=3D 1)
- return (EINVAL);
-
- /* Read primary GPT table header. */
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, 1, DISK_SECSIZE,
- (char *) gpt, NULL);
- if (rc) {
- DEBUG("error reading GPT header");
- return (EIO);
- }
- hdr =3D (struct gpt_hdr *)gpt;
- if (bcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) !=3D 0 ||
- hdr->hdr_lba_self !=3D 1 || hdr->hdr_revision < 0x00010000 ||
- hdr->hdr_entsz < sizeof(*ent) ||
- DISK_SECSIZE % hdr->hdr_entsz !=3D 0) {
- DEBUG("Invalid GPT header\n");
- return (EINVAL);
- }
-
- /* Walk the partition table to count valid partitions. */
- part =3D 0;
- entries_per_sec =3D DISK_SECSIZE / hdr->hdr_entsz;
- elba =3D hdr->hdr_lba_table + hdr->hdr_entries / entries_per_sec;
- for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, lba, DISK_SECSIZE,
- (char *) tbl, NULL);
- if (rc) {
- DEBUG("error reading GPT table");
- return (EIO);
- }
- for (i =3D 0; i < entries_per_sec; i++) {
- ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
- if (uuid_is_nil(&ent->ent_type, NULL) ||
- ent->ent_lba_start =3D=3D 0 ||
- ent->ent_lba_end < ent->ent_lba_start)
- continue;
- part++;
- }
- }
-
- /* Save the important information about all the valid partitions. */
- if (part !=3D 0) {
- gptab =3D malloc(part * sizeof(struct gpt_part));
- part =3D 0;
- for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
- rc =3D dev->d_dev->dv_strategy(dev, F_READ, lba, DISK_SECSIZE,
- (char *) tbl, NULL);
- if (rc) {
- DEBUG("error reading GPT table");
- free(gptab);
- return (EIO);
- }
- for (i =3D 0; i < entries_per_sec; i++) {
- ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
- if (uuid_is_nil(&ent->ent_type, NULL) ||
- ent->ent_lba_start =3D=3D 0 ||
- ent->ent_lba_end < ent->ent_lba_start)
- continue;
- gptab[part].gp_index =3D (lba - hdr->hdr_lba_table) *
- entries_per_sec + i + 1;
- gptab[part].gp_type =3D ent->ent_type;
- gptab[part].gp_start =3D ent->ent_lba_start;
- gptab[part].gp_end =3D ent->ent_lba_end;
- part++;
- }
- }
- }
-
- *gptp =3D gptab;
- *ngptp =3D part;
- return (0);
-}
-
-static struct gpt_part *
-disk_bestgpt(struct gpt_part *gpt, int ngpt)
-{
- struct gpt_part *gp, *prefpart;
- int i, pref, preflevel;
-
- prefpart =3D NULL;
- preflevel =3D PREF_NONE;
-
- gp =3D gpt;
- for (i =3D 0; i < ngpt; i++, gp++) {
- /* Windows. XXX: Also Linux. */
- if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
- pref =3D PREF_DOS;
- /* FreeBSD */
- else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL) ||
- uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
- pref =3D PREF_FBSD;
- else
- pref =3D PREF_NONE;
- if (pref < preflevel) {
- preflevel =3D pref;
- prefpart =3D gp;
- }
- }
- return (prefpart);
-}
-
-static int
-disk_opengpt(struct disk_devdesc *dev)
-{
- struct gpt_part *gpt =3D NULL, *gp;
- int rc, ngpt, i;
-
- rc =3D disk_readgpt(dev, &gpt, &ngpt);
- if (rc)
- return (rc);
-
- /* Is this a request for the whole disk? */
- if (dev->d_slice < 0) {
- dev->d_offset =3D 0;
- rc =3D 0;
- goto out;
- }
-
- /*
- * If a partition number was supplied, then the user is trying to use
- * an MBR address rather than a GPT address, so fail.
- */
- if (dev->d_partition !=3D 0xff) {
- rc =3D ENOENT;
- goto out;
- }
-
- /* If a slice number was supplied but not found, this is an error. */
- gp =3D NULL;
- if (dev->d_slice > 0) {
- for (i =3D 0; i < ngpt; i++) {
- if (gpt[i].gp_index =3D=3D dev->d_slice) {
- gp =3D &gpt[i];
- break;
- }
- }
- if (gp =3D=3D NULL) {
- DEBUG("partition %d not found", dev->d_slice);
- rc =3D ENOENT;
- goto out;
- }
- }
-
- /* Try to auto-detect the best partition. */
- if (dev->d_slice =3D=3D 0) {
- gp =3D disk_bestgpt(gpt, ngpt);
- if (gp =3D=3D NULL) {
- rc =3D ENOENT;
- goto out;
- }
- dev->d_slice =3D gp->gp_index;
- }
-
- dev->d_offset =3D gp->gp_start;
- rc =3D 0;
-
-out:
- if (gpt)
- free(gpt);
- return (rc);
-}
-
-static void
-disk_printgptpart(struct disk_devdesc *dev, struct gpt_part *gp,
- char *prefix, int verbose)
-{
- char stats[80];
- char line[96];
-
- if (verbose)
- sprintf(stats, " %s",
- display_size(gp->gp_end + 1 - gp->gp_start));
- else
- stats[0] =3D '\0';
-
- if (uuid_equal(&gp->gp_type, &efi, NULL))
- sprintf(line, "%s: EFI %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
- sprintf(line, "%s: FAT/NTFS %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_boot, NULL))
- sprintf(line, "%s: FreeBSD boot%s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL))
- sprintf(line, "%s: FreeBSD UFS %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
- sprintf(line, "%s: FreeBSD ZFS %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_swap, NULL))
- sprintf(line, "%s: FreeBSD swap%s\n", prefix, stats);
- else
- sprintf(line,
- "%s: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x%s\n",
- prefix,
- gp->gp_type.time_low, gp->gp_type.time_mid,
- gp->gp_type.time_hi_and_version,
- gp->gp_type.clock_seq_hi_and_reserved,
- gp->gp_type.clock_seq_low,
- gp->gp_type.node[0],
- gp->gp_type.node[1],
- gp->gp_type.node[2],
- gp->gp_type.node[3],
- gp->gp_type.node[4],
- gp->gp_type.node[5],
- stats);
- pager_output(line);
-}
-
-static int
-disk_printgpt(struct disk_devdesc *dev, char *prefix, int verbose)
-{
- struct gpt_part *gpt =3D NULL;
- int rc, ngpt, i;
- char line[80];
-
- rc =3D disk_readgpt(dev, &gpt, &ngpt);
- if (rc)
- return (rc);
- for (i =3D 0; i < ngpt; i++) {
- sprintf(line, "%sp%d", prefix, i + 1);
- disk_printgptpart(dev, &gpt[i], line, verbose);
- }
- free(gpt);
- return (0);
-}
-
-#endif
-
-int
-disk_open(struct disk_devdesc *dev)
-{
+ struct open_disk *od;
+ struct ptable *table;
+ struct ptable_entry part;
int rc;
=20
- rc =3D 0;
+ od =3D (struct open_disk *)malloc(sizeof(struct open_disk));
+ if (od =3D=3D NULL) {
+ DEBUG("no memory");
+ return (ENOMEM);
+ }
/*
* While we are reading disk metadata, make sure we do it relative
* to the start of the disk
*/
+ rc =3D 0;
+ table =3D NULL;
dev->d_offset =3D 0;
+ dev->d_opendata =3D od;
+ od->mediasize =3D mediasize;
+ od->sectorsize =3D sectorsize;
+ DEBUG("open '%s', unit %d slice %d partition %d",
+ disk_fmtdev(dev), dev->d_unit, dev->d_slice, dev->d_partition);
=20
-#ifdef LOADER_GPT_SUPPORT
- rc =3D disk_opengpt(dev);
- if (rc =3D=3D 0)
- return (0);
-#endif
-#ifdef LOADER_MBR_SUPPORT
- rc =3D disk_openmbr(dev);
-#endif
+ /* Determine disk layout. */
+ od->table =3D ptable_open(dev, mediasize / sectorsize, sectorsize,
+ ptblread);
+ if (od->table =3D=3D NULL) {
+ DEBUG("Can't read partition table");
+ rc =3D ENXIO;
+ goto out;
+ }
+ if (dev->d_slice > 0) {
+ /* Try to get information about partition */
+ rc =3D ptable_getpart(od->table, &part, dev->d_slice);
+ if (rc !=3D 0) /* Partition doesn't exist */
+ goto out;
+ dev->d_offset =3D part.start;
+ if (dev->d_partition =3D=3D -1 ||
+ dev->d_partition =3D=3D 255)
+ goto out; /* Nothing more to do */
=20
+ /* Try to read BSD label */
+ table =3D ptable_open(dev, part.end - part.start + 1,
+ od->sectorsize, ptblread);
+ if (table =3D=3D NULL) {
+ DEBUG("Can't read BSD label");
+ rc =3D ENXIO;
+ goto out;
+ }
+ rc =3D ptable_getpart(table, &part, dev->d_partition);
+ if (rc !=3D 0)
+ goto out;
+ dev->d_offset +=3D part.start;
+ } else if (dev->d_slice =3D=3D 0) {
+ rc =3D ptable_getbestpart(od->table, &part);
+ if (rc !=3D 0)
+ goto out;
+ /* Save the slice number of best partition to dev */
+ dev->d_slice =3D part.index;
+ dev->d_offset =3D part.start;
+ }
+out:
+ if (table !=3D NULL)
+ ptable_close(table);
+ if (rc !=3D 0) {
+ if (od->table !=3D NULL)
+ ptable_close(od->table);
+ free(od);
+ }
return (rc);
}
=20
-void
-disk_print(struct disk_devdesc *dev, char *prefix, int verbose)
+int
+disk_close(struct disk_devdesc *dev)
{
+ struct open_disk *od;
=20
+ od =3D (struct open_disk *)dev->d_opendata;
+ ptable_close(od->table);
+ free(od);
+ return (0);
+}
+
+char*
+disk_fmtdev(struct disk_devdesc *dev)
+{
+ static char buf[128];
+ char *cp;
+
+ cp =3D buf + sprintf(buf, "%s%d", dev->d_dev->dv_name, dev->d_unit);
+ if (dev->d_slice > 0) {
#ifdef LOADER_GPT_SUPPORT
- if (disk_printgpt(dev, prefix, verbose) =3D=3D 0)
- return;
+ if (dev->d_partition =3D=3D 255) {
+ sprintf(cp, "p%d:", dev->d_slice);
+ return (buf);
+ } else
#endif
#ifdef LOADER_MBR_SUPPORT
- disk_printmbr(dev, prefix, verbose);
+ cp +=3D sprintf(cp, "s%d", dev->d_slice);
#endif
+ if (dev->d_partition >=3D 0)
+ cp +=3D sprintf(cp, "%c", dev->d_partition + 'a');
+ }
+ strcat(cp, ":");
+ return (buf);
}
+
+int
+disk_parsedev(struct disk_devdesc *dev, const char *devspec, const char **=
path)
+{
+ int unit, slice, partition;
+ const char *np;
+ char *cp;
+
+ np =3D devspec;
+ unit =3D slice =3D partition =3D -1;
+ if (*np !=3D '\0' && *np !=3D ':') {
+ unit =3D strtol(np, &cp, 10);
+ if (cp =3D=3D np)
+ return (EUNIT);
+#ifdef LOADER_GPT_SUPPORT
+ if (*cp =3D=3D 'p') {
+ np =3D cp + 1;
+ slice =3D strtol(np, &cp, 10);
+ if (np =3D=3D cp)
+ return (ESLICE);
+ /* we don't support nested partitions on GPT */
+ if (*cp !=3D '\0' && *cp !=3D ':')
+ return (EINVAL);
+ partition =3D 255;
+ } else
+#endif
+#ifdef LOADER_MBR_SUPPORT
+ if (*cp =3D=3D 's') {
+ np =3D cp + 1;
+ slice =3D strtol(np, &cp, 10);
+ if (np =3D=3D cp)
+ return (ESLICE);
+ }
+#endif
+ if (*cp !=3D '\0' && *cp !=3D ':') {
+ partition =3D *cp - 'a';
+ if (partition < 0)
+ return (EPART);
+ cp++;
+ }
+ } else
+ return (EINVAL);
+
+ if (*cp !=3D '\0' && *cp !=3D ':')
+ return (EINVAL);
+ dev->d_unit =3D unit;
+ dev->d_slice =3D slice;
+ dev->d_partition =3D partition;
+ if (path !=3D NULL)
+ *path =3D (*cp =3D=3D '\0') ? cp: cp + 1;
+ return (0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/disk.h
--- a/head/sys/boot/common/disk.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/common/disk.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,12 +23,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/boot/common/disk.h 223695 2011-06-30 16:08:56Z dfr $
+ * $FreeBSD: head/sys/boot/common/disk.h 239058 2012-08-05 12:15:15Z ae $
*/
=20
/*
- * Device descriptor for partitioned disks. We assume that all disk addres=
ses
- * are 512 byte block offsets from the start of the disk. To use, set the
+ * Device descriptor for partitioned disks. To use, set the
* d_slice and d_partition variables as follows:
*
* Whole disk access:
@@ -74,8 +73,6 @@
* the device's strategy method.
*/
=20
-#define DISK_SECSIZE 512
-
struct disk_devdesc
{
struct devsw *d_dev;
@@ -84,16 +81,21 @@
void *d_opendata;
int d_slice;
int d_partition;
- int d_offset;
+ off_t d_offset;
};
=20
/*
* Parse disk metadata and initialise dev->d_offset.
*/
-extern int disk_open(struct disk_devdesc * dev);
+extern int disk_open(struct disk_devdesc *dev, off_t mediasize,
+ u_int sectorsize);
+extern int disk_close(struct disk_devdesc *dev);
=20
/*
- * Print information about slices on a disk. For the size calculations we
- * assume a 512 byte sector.
+ * Print information about slices on a disk.
*/
extern void disk_print(struct disk_devdesc *dev, char *prefix, int verbose=
);
+extern char* disk_fmtdev(struct disk_devdesc *dev);
+extern int disk_parsedev(struct disk_devdesc *dev, const char *devspec,
+ const char **path);
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/part.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/boot/common/part.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,839 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/boot/common/part.c 239127 2012-08-07 09:22:46=
Z ae $");
+
+#include <stand.h>
+#include <sys/param.h>
+#include <sys/diskmbr.h>
+#include <sys/disklabel.h>
+#include <sys/endian.h>
+#include <sys/gpt.h>
+#include <sys/stddef.h>
+#include <sys/queue.h>
+#include <sys/vtoc.h>
+
+#include <crc32.h>
+#include <part.h>
+#include <uuid.h>
+
+#ifdef PART_DEBUG
+#define DEBUG(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args)
+#else
+#define DEBUG(fmt, args...)
+#endif
+
+#ifdef LOADER_GPT_SUPPORT
+#define MAXTBLSZ 64
+static const uuid_t gpt_uuid_unused =3D GPT_ENT_TYPE_UNUSED;
+static const uuid_t gpt_uuid_ms_basic_data =3D GPT_ENT_TYPE_MS_BASIC_DATA;
+static const uuid_t gpt_uuid_freebsd_ufs =3D GPT_ENT_TYPE_FREEBSD_UFS;
+static const uuid_t gpt_uuid_efi =3D GPT_ENT_TYPE_EFI;
+static const uuid_t gpt_uuid_freebsd_boot =3D GPT_ENT_TYPE_FREEBSD_BOOT;
+static const uuid_t gpt_uuid_freebsd_nandfs =3D GPT_ENT_TYPE_FREEBSD_NANDF=
S;
+static const uuid_t gpt_uuid_freebsd_swap =3D GPT_ENT_TYPE_FREEBSD_SWAP;
+static const uuid_t gpt_uuid_freebsd_zfs =3D GPT_ENT_TYPE_FREEBSD_ZFS;
+static const uuid_t gpt_uuid_freebsd_vinum =3D GPT_ENT_TYPE_FREEBSD_VINUM;
+#endif
+
+struct pentry {
+ struct ptable_entry part;
+ uint64_t flags;
+ union {
+ uint8_t bsd;
+ uint8_t mbr;
+ uuid_t gpt;
+ uint16_t vtoc8;
+ } type;
+ STAILQ_ENTRY(pentry) entry;
+};
+
+struct ptable {
+ enum ptable_type type;
+ uint16_t sectorsize;
+ uint64_t sectors;
+
+ STAILQ_HEAD(, pentry) entries;
+};
+
+static struct parttypes {
+ enum partition_type type;
+ const char *desc;
+} ptypes[] =3D {
+ { PART_UNKNOWN, "Unknown" },
+ { PART_EFI, "EFI" },
+ { PART_FREEBSD, "FreeBSD" },
+ { PART_FREEBSD_BOOT, "FreeBSD boot" },
+ { PART_FREEBSD_NANDFS, "FreeBSD nandfs" },
+ { PART_FREEBSD_UFS, "FreeBSD UFS" },
+ { PART_FREEBSD_ZFS, "FreeBSD ZFS" },
+ { PART_FREEBSD_SWAP, "FreeBSD swap" },
+ { PART_FREEBSD_VINUM, "FreeBSD vinum" },
+ { PART_LINUX, "Linux" },
+ { PART_LINUX_SWAP, "Linux swap" },
+ { PART_DOS, "DOS/Windows" },
+};
+
+const char *
+parttype2str(enum partition_type type)
+{
+ int i;
+
+ for (i =3D 0; i < sizeof(ptypes) / sizeof(ptypes[0]); i++)
+ if (ptypes[i].type =3D=3D type)
+ return (ptypes[i].desc);
+ return (ptypes[0].desc);
+}
+
+#ifdef LOADER_GPT_SUPPORT
+static void
+uuid_letoh(uuid_t *uuid)
+{
+
+ uuid->time_low =3D le32toh(uuid->time_low);
+ uuid->time_mid =3D le16toh(uuid->time_mid);
+ uuid->time_hi_and_version =3D le16toh(uuid->time_hi_and_version);
+}
+
+static enum partition_type
+gpt_parttype(uuid_t type)
+{
+
+ if (uuid_equal(&type, &gpt_uuid_efi, NULL))
+ return (PART_EFI);
+ else if (uuid_equal(&type, &gpt_uuid_ms_basic_data, NULL))
+ return (PART_DOS);
+ else if (uuid_equal(&type, &gpt_uuid_freebsd_boot, NULL))
+ return (PART_FREEBSD_BOOT);
+ else if (uuid_equal(&type, &gpt_uuid_freebsd_ufs, NULL))
+ return (PART_FREEBSD_UFS);
+ else if (uuid_equal(&type, &gpt_uuid_freebsd_zfs, NULL))
+ return (PART_FREEBSD_ZFS);
+ else if (uuid_equal(&type, &gpt_uuid_freebsd_swap, NULL))
+ return (PART_FREEBSD_SWAP);
+ else if (uuid_equal(&type, &gpt_uuid_freebsd_vinum, NULL))
+ return (PART_FREEBSD_VINUM);
+ else if (uuid_equal(&type, &gpt_uuid_freebsd_nandfs, NULL))
+ return (PART_FREEBSD_NANDFS);
+ return (PART_UNKNOWN);
+}
+
+static struct gpt_hdr*
+gpt_checkhdr(struct gpt_hdr *hdr, uint64_t lba_self, uint64_t lba_last,
+ uint16_t sectorsize)
+{
+ uint32_t sz, crc;
+
+ if (memcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) !=3D 0) {
+ DEBUG("no GPT signature");
+ return (NULL);
+ }
+ sz =3D le32toh(hdr->hdr_size);
+ if (sz < 92 || sz > sectorsize) {
+ DEBUG("invalid GPT header size: %d", sz);
+ return (NULL);
+ }
+ crc =3D le32toh(hdr->hdr_crc_self);
+ hdr->hdr_crc_self =3D 0;
+ if (crc32(hdr, sz) !=3D crc) {
+ DEBUG("GPT header's CRC doesn't match");
+ return (NULL);
+ }
+ hdr->hdr_crc_self =3D crc;
+ hdr->hdr_revision =3D le32toh(hdr->hdr_revision);
+ if (hdr->hdr_revision < GPT_HDR_REVISION) {
+ DEBUG("unsupported GPT revision %d", hdr->hdr_revision);
+ return (NULL);
+ }
+ hdr->hdr_lba_self =3D le64toh(hdr->hdr_lba_self);
+ if (hdr->hdr_lba_self !=3D lba_self) {
+ DEBUG("self LBA doesn't match");
+ return (NULL);
+ }
+ hdr->hdr_lba_alt =3D le64toh(hdr->hdr_lba_alt);
+ if (hdr->hdr_lba_alt =3D=3D hdr->hdr_lba_self) {
+ DEBUG("invalid alternate LBA");
+ return (NULL);
+ }
+ hdr->hdr_entries =3D le32toh(hdr->hdr_entries);
+ hdr->hdr_entsz =3D le32toh(hdr->hdr_entsz);
+ if (hdr->hdr_entries < 128 ||
+ hdr->hdr_entsz < sizeof(struct gpt_ent) ||
+ sectorsize % hdr->hdr_entsz !=3D 0) {
+ DEBUG("invalid entry size or number of entries");
+ return (NULL);
+ }
+ hdr->hdr_lba_start =3D le64toh(hdr->hdr_lba_start);
+ hdr->hdr_lba_end =3D le64toh(hdr->hdr_lba_end);
+ hdr->hdr_lba_table =3D le64toh(hdr->hdr_lba_table);
+ hdr->hdr_crc_table =3D le32toh(hdr->hdr_crc_table);
+ uuid_letoh(&hdr->hdr_uuid);
+ return (hdr);
+}
+
+static int
+gpt_checktbl(const struct gpt_hdr *hdr, u_char *tbl, size_t size,
+ uint64_t lba_last)
+{
+ struct gpt_ent *ent;
+ int i, cnt;
+
+ cnt =3D size / hdr->hdr_entsz;
+ /* Check CRC only when buffer size is enough for table. */
+ if (hdr->hdr_entries <=3D cnt &&
+ crc32(tbl, size) !=3D hdr->hdr_crc_table) {
+ DEBUG("GPT table's CRC doesn't match");
+ return (-1);
+ }
+ ent =3D (struct gpt_ent *)tbl;
+ for (i =3D 0; i < cnt; i++, ent++) {
+ uuid_letoh(&ent->ent_type);
+ if (uuid_equal(&ent->ent_type, &gpt_uuid_unused, NULL))
+ continue;
+ ent->ent_lba_start =3D le64toh(ent->ent_lba_start);
+ ent->ent_lba_end =3D le64toh(ent->ent_lba_end);
+ }
+ return (0);
+}
+
+static struct ptable*
+ptable_gptread(struct ptable *table, void *dev, diskread_t dread)
+{
+ struct pentry *entry;
+ struct gpt_hdr *phdr, hdr;
+ struct gpt_ent *ent;
+ u_char *buf, *tbl;
+ uint64_t offset;
+ int pri, sec, i;
+ size_t size;
+
+ buf =3D malloc(table->sectorsize);
+ if (buf =3D=3D NULL)
+ return (NULL);
+ tbl =3D malloc(table->sectorsize * MAXTBLSZ);
+ if (tbl =3D=3D NULL) {
+ free(buf);
+ return (NULL);
+ }
+ /* Read the primary GPT header. */
+ if (dread(dev, buf, 1, 1) !=3D 0) {
+ ptable_close(table);
+ table =3D NULL;
+ goto out;
+ }
+ pri =3D sec =3D 0;
+ /* Check the primary GPT header. */
+ phdr =3D gpt_checkhdr((struct gpt_hdr *)buf, 1, table->sectors - 1,
+ table->sectorsize);
+ if (phdr !=3D NULL) {
+ /* Read the primary GPT table. */
+ size =3D MIN(MAXTBLSZ,
+ phdr->hdr_entries * phdr->hdr_entsz / table->sectorsize);
+ if (dread(dev, tbl, size, phdr->hdr_lba_table) =3D=3D 0 &&
+ gpt_checktbl(phdr, tbl, size * table->sectorsize,
+ table->sectors - 1) =3D=3D 0) {
+ memcpy(&hdr, phdr, sizeof(hdr));
+ pri =3D 1;
+ }
+ }
+ offset =3D pri ? hdr.hdr_lba_alt: table->sectors - 1;
+ /* Read the backup GPT header. */
+ if (dread(dev, buf, 1, offset) !=3D 0)
+ phdr =3D NULL;
+ else
+ phdr =3D gpt_checkhdr((struct gpt_hdr *)buf, offset,
+ table->sectors - 1, table->sectorsize);
+ if (phdr !=3D NULL) {
+ /*
+ * Compare primary and backup headers.
+ * If they are equal, then we do not need to read backup
+ * table. If they are different, then prefer backup header
+ * and try to read backup table.
+ */
+ if (pri =3D=3D 0 ||
+ uuid_equal(&hdr.hdr_uuid, &phdr->hdr_uuid, NULL) =3D=3D 0 ||
+ hdr.hdr_revision !=3D phdr->hdr_revision ||
+ hdr.hdr_size !=3D phdr->hdr_size ||
+ hdr.hdr_lba_start !=3D phdr->hdr_lba_start ||
+ hdr.hdr_lba_end !=3D phdr->hdr_lba_end ||
+ hdr.hdr_entries !=3D phdr->hdr_entries ||
+ hdr.hdr_entsz !=3D phdr->hdr_entsz ||
+ hdr.hdr_crc_table !=3D phdr->hdr_crc_table) {
+ /* Read the backup GPT table. */
+ size =3D MIN(MAXTBLSZ, phdr->hdr_entries *
+ phdr->hdr_entsz / table->sectorsize);
+ if (dread(dev, tbl, size, phdr->hdr_lba_table) =3D=3D 0 &&
+ gpt_checktbl(phdr, tbl, size * table->sectorsize,
+ table->sectors - 1) =3D=3D 0) {
+ memcpy(&hdr, phdr, sizeof(hdr));
+ sec =3D 1;
+ }
+ }
+ }
+ if (pri =3D=3D 0 && sec =3D=3D 0) {
+ /* Both primary and backup tables are invalid. */
+ table->type =3D PTABLE_NONE;
+ goto out;
+ }
+ ent =3D (struct gpt_ent *)tbl;
+ size =3D MIN(hdr.hdr_entries * hdr.hdr_entsz,
+ MAXTBLSZ * table->sectorsize);
+ for (i =3D 0; i < size / hdr.hdr_entsz; i++, ent++) {
+ if (uuid_equal(&ent->ent_type, &gpt_uuid_unused, NULL))
+ continue;
+ entry =3D malloc(sizeof(*entry));
+ if (entry =3D=3D NULL)
+ break;
+ entry->part.start =3D ent->ent_lba_start;
+ entry->part.end =3D ent->ent_lba_end;
+ entry->part.index =3D i + 1;
+ entry->part.type =3D gpt_parttype(ent->ent_type);
+ entry->flags =3D le64toh(ent->ent_attr);
+ memcpy(&entry->type.gpt, &ent->ent_type, sizeof(uuid_t));
+ STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+ DEBUG("new GPT partition added");
+ }
+out:
+ free(buf);
+ free(tbl);
+ return (table);
+}
+#endif /* LOADER_GPT_SUPPORT */
+
+#ifdef LOADER_MBR_SUPPORT
+/* We do not need to support too many EBR partitions in the loader */
+#define MAXEBRENTRIES 8
+static enum partition_type
+mbr_parttype(uint8_t type)
+{
+
+ switch (type) {
+ case DOSPTYP_386BSD:
+ return (PART_FREEBSD);
+ case DOSPTYP_LINSWP:
+ return (PART_LINUX_SWAP);
+ case DOSPTYP_LINUX:
+ return (PART_LINUX);
+ case 0x01:
+ case 0x04:
+ case 0x06:
+ case 0x07:
+ case 0x0b:
+ case 0x0c:
+ case 0x0e:
+ return (PART_DOS);
+ }
+ return (PART_UNKNOWN);
+}
+
+struct ptable*
+ptable_ebrread(struct ptable *table, void *dev, diskread_t dread)
+{
+ struct dos_partition *dp;
+ struct pentry *e1, *entry;
+ uint32_t start, end, offset;
+ u_char *buf;
+ int i, index;
+
+ STAILQ_FOREACH(e1, &table->entries, entry) {
+ if (e1->type.mbr =3D=3D DOSPTYP_EXT ||
+ e1->type.mbr =3D=3D DOSPTYP_EXTLBA)
+ break;
+ }
+ if (e1 =3D=3D NULL)
+ return (table);
+ index =3D 5;
+ offset =3D e1->part.start;
+ buf =3D malloc(table->sectorsize);
+ if (buf =3D=3D NULL)
+ return (table);
+ for (i =3D 0; i < MAXEBRENTRIES; i++) {
+ if (offset >=3D table->sectors)
+ break;
+ if (dread(dev, buf, 1, offset) !=3D 0)
+ break;
+ dp =3D (struct dos_partition *)(buf + DOSPARTOFF);
+ if (dp[0].dp_typ =3D=3D 0)
+ break;
+ start =3D le32toh(dp[0].dp_start);
+ if (dp[0].dp_typ =3D=3D DOSPTYP_EXT &&
+ dp[1].dp_typ =3D=3D 0) {
+ offset =3D e1->part.start + start;
+ continue;
+ }
+ end =3D le32toh(dp[0].dp_size);
+ entry =3D malloc(sizeof(*entry));
+ if (entry =3D=3D NULL)
+ break;
+ entry->part.start =3D offset + start;
+ entry->part.end =3D entry->part.start + end - 1;
+ entry->part.index =3D index++;
+ entry->part.type =3D mbr_parttype(dp[0].dp_typ);
+ entry->flags =3D dp[0].dp_flag;
+ entry->type.mbr =3D dp[0].dp_typ;
+ STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+ DEBUG("new EBR partition added");
+ if (dp[1].dp_typ =3D=3D 0)
+ break;
+ offset =3D e1->part.start + le32toh(dp[1].dp_start);
+ }
+ free(buf);
+ return (table);
+}
+#endif /* LOADER_MBR_SUPPORT */
+
+static enum partition_type
+bsd_parttype(uint8_t type)
+{
+
+ switch (type) {
+ case FS_NANDFS:
+ return (PART_FREEBSD_NANDFS);
+ case FS_SWAP:
+ return (PART_FREEBSD_SWAP);
+ case FS_BSDFFS:
+ return (PART_FREEBSD_UFS);
+ case FS_VINUM:
+ return (PART_FREEBSD_VINUM);
+ case FS_ZFS:
+ return (PART_FREEBSD_ZFS);
+ }
+ return (PART_UNKNOWN);
+}
+
+struct ptable*
+ptable_bsdread(struct ptable *table, void *dev, diskread_t dread)
+{
+ struct disklabel *dl;
+ struct partition *part;
+ struct pentry *entry;
+ u_char *buf;
+ uint32_t raw_offset;
+ int i;
+
+ if (table->sectorsize < sizeof(struct disklabel)) {
+ DEBUG("Too small sectorsize");
+ return (table);
+ }
+ buf =3D malloc(table->sectorsize);
+ if (buf =3D=3D NULL)
+ return (table);
+ if (dread(dev, buf, 1, 1) !=3D 0) {
+ DEBUG("read failed");
+ ptable_close(table);
+ table =3D NULL;
+ goto out;
+ }
+ dl =3D (struct disklabel *)buf;
+ if (le32toh(dl->d_magic) !=3D DISKMAGIC &&
+ le32toh(dl->d_magic2) !=3D DISKMAGIC)
+ goto out;
+ if (le32toh(dl->d_secsize) !=3D table->sectorsize) {
+ DEBUG("unsupported sector size");
+ goto out;
+ }
+ dl->d_npartitions =3D le16toh(dl->d_npartitions);
+ if (dl->d_npartitions > 20 || dl->d_npartitions < 8) {
+ DEBUG("invalid number of partitions");
+ goto out;
+ }
+ part =3D &dl->d_partitions[0];
+ raw_offset =3D le32toh(part[RAW_PART].p_offset);
+ for (i =3D 0; i < dl->d_npartitions; i++, part++) {
+ if (i =3D=3D RAW_PART)
+ continue;
+ if (part->p_size =3D=3D 0)
+ continue;
+ entry =3D malloc(sizeof(*entry));
+ if (entry =3D=3D NULL)
+ break;
+ entry->part.start =3D le32toh(part->p_offset) - raw_offset;
+ entry->part.end =3D entry->part.start +
+ le32toh(part->p_size) + 1;
+ entry->part.type =3D bsd_parttype(part->p_fstype);
+ entry->part.index =3D i; /* starts from zero */
+ entry->type.bsd =3D part->p_fstype;
+ STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+ DEBUG("new BSD partition added");
+ }
+ table->type =3D PTABLE_BSD;
+out:
+ free(buf);
+ return (table);
+}
+
+#ifdef LOADER_VTOC8_SUPPORT
+static enum partition_type
+vtoc8_parttype(uint16_t type)
+{
+
+ switch (type) {
+ case VTOC_TAG_FREEBSD_NANDFS:
+ return (PART_FREEBSD_NANDFS);
+ case VTOC_TAG_FREEBSD_SWAP:
+ return (PART_FREEBSD_SWAP);
+ case VTOC_TAG_FREEBSD_UFS:
+ return (PART_FREEBSD_UFS);
+ case VTOC_TAG_FREEBSD_VINUM:
+ return (PART_FREEBSD_VINUM);
+ case VTOC_TAG_FREEBSD_ZFS:
+ return (PART_FREEBSD_ZFS);
+ };
+ return (PART_UNKNOWN);
+}
+
+static struct ptable*
+ptable_vtoc8read(struct ptable *table, void *dev, diskread_t dread)
+{
+ struct pentry *entry;
+ struct vtoc8 *dl;
+ u_char *buf;
+ uint16_t sum, heads, sectors;
+ int i;
+
+ if (table->sectorsize !=3D sizeof(struct vtoc8))
+ return (table);
+ buf =3D malloc(table->sectorsize);
+ if (buf =3D=3D NULL)
+ return (table);
+ if (dread(dev, buf, 1, 0) !=3D 0) {
+ DEBUG("read failed");
+ ptable_close(table);
+ table =3D NULL;
+ goto out;
+ }
+ dl =3D (struct vtoc8 *)buf;
+ /* Check the sum */
+ for (i =3D sum =3D 0; i < sizeof(struct vtoc8); i +=3D sizeof(sum))
+ sum ^=3D be16dec(buf + i);
+ if (sum !=3D 0) {
+ DEBUG("incorrect checksum");
+ goto out;
+ }
+ if (be16toh(dl->nparts) !=3D VTOC8_NPARTS) {
+ DEBUG("invalid number of entries");
+ goto out;
+ }
+ sectors =3D be16toh(dl->nsecs);
+ heads =3D be16toh(dl->nheads);
+ if (sectors * heads =3D=3D 0) {
+ DEBUG("invalid geometry");
+ goto out;
+ }
+ for (i =3D 0; i < VTOC8_NPARTS; i++) {
+ dl->part[i].tag =3D be16toh(dl->part[i].tag);
+ if (i =3D=3D VTOC_RAW_PART ||
+ dl->part[i].tag =3D=3D VTOC_TAG_UNASSIGNED)
+ continue;
+ entry =3D malloc(sizeof(*entry));
+ if (entry =3D=3D NULL)
+ break;
+ entry->part.start =3D be32toh(dl->map[i].cyl) * heads * sectors;
+ entry->part.end =3D be32toh(dl->map[i].nblks) +
+ entry->part.start - 1;
+ entry->part.type =3D vtoc8_parttype(dl->part[i].tag);
+ entry->part.index =3D i; /* starts from zero */
+ entry->type.vtoc8 =3D dl->part[i].tag;
+ STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+ DEBUG("new VTOC8 partition added");
+ }
+ table->type =3D PTABLE_VTOC8;
+out:
+ free(buf);
+ return (table);
+
+}
+#endif /* LOADER_VTOC8_SUPPORT */
+
+struct ptable*
+ptable_open(void *dev, off_t sectors, uint16_t sectorsize,
+ diskread_t *dread)
+{
+ struct dos_partition *dp;
+ struct ptable *table;
+ u_char *buf;
+ int i, count;
+#ifdef LOADER_MBR_SUPPORT
+ struct pentry *entry;
+ uint32_t start, end;
+ int has_ext;
+#endif
+ table =3D NULL;
+ buf =3D malloc(sectorsize);
+ if (buf =3D=3D NULL)
+ return (NULL);
+ /* First, read the MBR. */
+ if (dread(dev, buf, 1, DOSBBSECTOR) !=3D 0) {
+ DEBUG("read failed");
+ goto out;
+ }
+
+ table =3D malloc(sizeof(*table));
+ if (table =3D=3D NULL)
+ goto out;
+ table->sectors =3D sectors;
+ table->sectorsize =3D sectorsize;
+ table->type =3D PTABLE_NONE;
+ STAILQ_INIT(&table->entries);
+
+#ifdef LOADER_VTOC8_SUPPORT
+ if (be16dec(buf + offsetof(struct vtoc8, magic)) =3D=3D VTOC_MAGIC) {
+ if (ptable_vtoc8read(table, dev, dread) =3D=3D NULL) {
+ /* Read error. */
+ table =3D NULL;
+ goto out;
+ } else if (table->type =3D=3D PTABLE_VTOC8)
+ goto out;
+ }
+#endif
+ /* Check the BSD label. */
+ if (ptable_bsdread(table, dev, dread) =3D=3D NULL) { /* Read error. */
+ table =3D NULL;
+ goto out;
+ } else if (table->type =3D=3D PTABLE_BSD)
+ goto out;
+
+#if defined(LOADER_GPT_SUPPORT) || defined(LOADER_MBR_SUPPORT)
+ /* Check the MBR magic. */
+ if (buf[DOSMAGICOFFSET] !=3D 0x55 ||
+ buf[DOSMAGICOFFSET + 1] !=3D 0xaa) {
+ DEBUG("magic sequence not found");
+ goto out;
+ }
+ /* Check that we have PMBR. Also do some validation. */
+ dp =3D (struct dos_partition *)(buf + DOSPARTOFF);
+ for (i =3D 0, count =3D 0; i < NDOSPART; i++) {
+ if (dp[i].dp_flag !=3D 0 && dp[i].dp_flag !=3D 0x80) {
+ DEBUG("invalid partition flag %x", dp[i].dp_flag);
+ break;
+ }
+#ifdef LOADER_GPT_SUPPORT
+ if (dp[i].dp_typ =3D=3D DOSPTYP_PMBR) {
+ table->type =3D PTABLE_GPT;
+ DEBUG("PMBR detected");
+ }
+#endif
+ if (dp[i].dp_typ !=3D 0)
+ count++;
+ }
+ /* Do we have some invalid values? */
+ if (i !=3D NDOSPART ||
+ (table->type =3D=3D PTABLE_GPT && count > 1)) {
+ table->type =3D PTABLE_NONE;
+ DEBUG("invalid values detected, ignore partition table");
+ goto out;
+ }
+#ifdef LOADER_GPT_SUPPORT
+ if (table->type =3D=3D PTABLE_GPT) {
+ table =3D ptable_gptread(table, dev, dread);
+ goto out;
+ }
+#endif
+#ifdef LOADER_MBR_SUPPORT
+ /* Read MBR. */
+ table->type =3D PTABLE_MBR;
+ for (i =3D has_ext =3D 0; i < NDOSPART; i++) {
+ if (dp[i].dp_typ =3D=3D 0)
+ continue;
+ start =3D le32toh(dp[i].dp_start);
+ end =3D le32toh(dp[i].dp_size);
+ if (start =3D=3D 0 || end =3D=3D 0)
+ continue;
+ if (start + end - 1 >=3D sectors)
+ continue; /* XXX: ignore */
+ if (dp[i].dp_typ =3D=3D DOSPTYP_EXT ||
+ dp[i].dp_typ =3D=3D DOSPTYP_EXTLBA)
+ has_ext =3D 1;
+ entry =3D malloc(sizeof(*entry));
+ if (entry =3D=3D NULL)
+ break;
+ entry->part.start =3D start;
+ entry->part.end =3D start + end - 1;
+ entry->part.index =3D i + 1;
+ entry->part.type =3D mbr_parttype(dp[i].dp_typ);
+ entry->flags =3D dp[i].dp_flag;
+ entry->type.mbr =3D dp[i].dp_typ;
+ STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+ DEBUG("new MBR partition added");
+ }
+ if (has_ext) {
+ table =3D ptable_ebrread(table, dev, dread);
+ /* FALLTHROUGH */
+ }
+#endif /* LOADER_MBR_SUPPORT */
+#endif /* LOADER_MBR_SUPPORT || LOADER_GPT_SUPPORT */
+out:
+ free(buf);
+ return (table);
+}
+
+void
+ptable_close(struct ptable *table)
+{
+ struct pentry *entry;
+
+ while (!STAILQ_EMPTY(&table->entries)) {
+ entry =3D STAILQ_FIRST(&table->entries);
+ STAILQ_REMOVE_HEAD(&table->entries, entry);
+ free(entry);
+ }
+ free(table);
+}
+
+enum ptable_type
+ptable_gettype(const struct ptable *table)
+{
+
+ return (table->type);
+}
+
+int
+ptable_getpart(const struct ptable *table, struct ptable_entry *part, int =
index)
+{
+ struct pentry *entry;
+
+ if (part =3D=3D NULL || table =3D=3D NULL)
+ return (EINVAL);
+
+ STAILQ_FOREACH(entry, &table->entries, entry) {
+ if (entry->part.index !=3D index)
+ continue;
+ memcpy(part, &entry->part, sizeof(*part));
+ return (0);
+ }
+ return (ENOENT);
+}
+
+/*
+ * Search for a slice with the following preferences:
+ *
+ * 1: Active FreeBSD slice
+ * 2: Non-active FreeBSD slice
+ * 3: Active Linux slice
+ * 4: non-active Linux slice
+ * 5: Active FAT/FAT32 slice
+ * 6: non-active FAT/FAT32 slice
+ */
+#define PREF_RAWDISK 0
+#define PREF_FBSD_ACT 1
+#define PREF_FBSD 2
+#define PREF_LINUX_ACT 3
+#define PREF_LINUX 4
+#define PREF_DOS_ACT 5
+#define PREF_DOS 6
+#define PREF_NONE 7
+int
+ptable_getbestpart(const struct ptable *table, struct ptable_entry *part)
+{
+ struct pentry *entry, *best;
+ int pref, preflevel;
+
+ if (part =3D=3D NULL || table =3D=3D NULL)
+ return (EINVAL);
+
+ best =3D NULL;
+ preflevel =3D pref =3D PREF_NONE;
+ STAILQ_FOREACH(entry, &table->entries, entry) {
+#ifdef LOADER_MBR_SUPPORT
+ if (table->type =3D=3D PTABLE_MBR) {
+ switch (entry->type.mbr) {
+ case DOSPTYP_386BSD:
+ pref =3D entry->flags & 0x80 ? PREF_FBSD_ACT:
+ PREF_FBSD;
+ break;
+ case DOSPTYP_LINUX:
+ pref =3D entry->flags & 0x80 ? PREF_LINUX_ACT:
+ PREF_LINUX;
+ break;
+ case 0x01: /* DOS/Windows */
+ case 0x04:
+ case 0x06:
+ case 0x0c:
+ case 0x0e:
+ case DOSPTYP_FAT32:
+ pref =3D entry->flags & 0x80 ? PREF_DOS_ACT:
+ PREF_DOS;
+ break;
+ default:
+ pref =3D PREF_NONE;
+ }
+ }
+#endif /* LOADER_MBR_SUPPORT */
+#ifdef LOADER_GPT_SUPPORT
+ if (table->type =3D=3D PTABLE_GPT) {
+ if (entry->part.type =3D=3D PART_DOS)
+ pref =3D PREF_DOS;
+ else if (entry->part.type =3D=3D PART_FREEBSD_UFS ||
+ entry->part.type =3D=3D PART_FREEBSD_ZFS)
+ pref =3D PREF_FBSD;
+ else
+ pref =3D PREF_NONE;
+ }
+#endif /* LOADER_GPT_SUPPORT */
+ if (pref < preflevel) {
+ preflevel =3D pref;
+ best =3D entry;
+ }
+ }
+ if (best !=3D NULL) {
+ memcpy(part, &best->part, sizeof(*part));
+ return (0);
+ }
+ return (ENOENT);
+}
+
+void
+ptable_iterate(const struct ptable *table, void *arg, ptable_iterate_t *it=
er)
+{
+ struct pentry *entry;
+ char name[32];
+
+ name[0] =3D '\0';
+ STAILQ_FOREACH(entry, &table->entries, entry) {
+#ifdef LOADER_MBR_SUPPORT
+ if (table->type =3D=3D PTABLE_MBR)
+ sprintf(name, "s%d", entry->part.index);
+ else
+#endif
+#ifdef LOADER_GPT_SUPPORT
+ if (table->type =3D=3D PTABLE_GPT)
+ sprintf(name, "p%d", entry->part.index);
+ else
+#endif
+#ifdef LOADER_VTOC8_SUPPORT
+ if (table->type =3D=3D PTABLE_VTOC8)
+ sprintf(name, "%c", (u_char) 'a' +
+ entry->part.index);
+ else
+#endif
+ if (table->type =3D=3D PTABLE_BSD)
+ sprintf(name, "%c", (u_char) 'a' +
+ entry->part.index);
+ iter(arg, name, &entry->part);
+ }
+}
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/part.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/boot/common/part.h Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,82 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: head/sys/boot/common/part.h 239054 2012-08-05 11:29:44Z ae $
+ */
+
+#ifndef _PART_H_
+#define _PART_H_
+
+struct ptable;
+
+enum ptable_type {
+ PTABLE_NONE,
+ PTABLE_BSD,
+ PTABLE_MBR,
+ PTABLE_GPT,
+ PTABLE_VTOC8
+};
+
+enum partition_type {
+ PART_UNKNOWN,
+ PART_EFI,
+ PART_FREEBSD,
+ PART_FREEBSD_BOOT,
+ PART_FREEBSD_NANDFS,
+ PART_FREEBSD_UFS,
+ PART_FREEBSD_ZFS,
+ PART_FREEBSD_SWAP,
+ PART_FREEBSD_VINUM,
+ PART_LINUX,
+ PART_LINUX_SWAP,
+ PART_DOS,
+};
+
+struct ptable_entry {
+ uint64_t start;
+ uint64_t end;
+ int index;
+ enum partition_type type;
+};
+
+/* The offset and size are in sectors */
+typedef int (diskread_t)(void *arg, void *buf, size_t blocks, off_t offset=
);
+typedef void (ptable_iterate_t)(void *arg, const char *partname,
+ const struct ptable_entry *part);
+
+struct ptable *ptable_open(void *dev, off_t sectors, uint16_t sectorsize,
+ diskread_t *dread);
+void ptable_close(struct ptable *table);
+enum ptable_type ptable_gettype(const struct ptable *table);
+
+int ptable_getpart(const struct ptable *table, struct ptable_entry *part,
+ int index);
+int ptable_getbestpart(const struct ptable *table, struct ptable_entry *pa=
rt);
+
+void ptable_iterate(const struct ptable *table, void *arg,
+ ptable_iterate_t *iter);
+const char *parttype2str(enum partition_type type);
+
+#endif /* !_PART_H_ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/ficl/Makefile
--- a/head/sys/boot/ficl/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/ficl/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD$
+# $FreeBSD: head/sys/boot/ficl/Makefile 238795 2012-07-26 10:10:54Z ache $
#
.PATH: ${.CURDIR}/${MACHINE_CPUARCH:S/amd64/i386/}
BASE_SRCS=3D dict.c ficl.c fileaccess.c float.c loader.c math64.c \
@@ -54,9 +54,11 @@
| awk -f softcore.awk -v datestamp=3D"`LC_ALL=3DC date`") > ${.TARGET}
=20
.if ${MACHINE_CPUARCH} =3D=3D "amd64"
+.if !exists(machine)
${SRCS:M*.c:R:S/$/.o/g}: machine
=20
beforedepend ${OBJS}: machine
+.endif
=20
machine:
ln -sf ${.CURDIR}/../../i386/include machine
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/Makefile
--- a/head/sys/boot/i386/libi386/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/i386/libi386/Makefile 235329 2012-05-12 09:03:30=
Z avg $
+# $FreeBSD: head/sys/boot/i386/libi386/Makefile 239066 2012-08-05 14:37:48=
Z ae $
#
LIB=3D i386
INTERNALLIB=3D
@@ -39,10 +39,6 @@
.endif
.endif
=20
-.if !defined(LOADER_NO_GPT_SUPPORT)
-CFLAGS+=3D -DLOADER_GPT_SUPPORT
-.endif
-
# Include simple terminal emulation (cons25-compatible)
CFLAGS+=3D -DTERM_EMU
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/biosdisk.c
--- a/head/sys/boot/i386/libi386/biosdisk.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/biosdisk.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,7 +26,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/biosdisk.c 235155 2012-05-0=
9 08:05:50Z avg $");
+__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/biosdisk.c 239066 2012-08-0=
5 14:37:48Z ae $");
=20
/*
* BIOS disk device handling.
@@ -37,21 +38,19 @@
*
*/
=20
+#include <sys/disk.h>
#include <stand.h>
-
-#include <sys/disklabel.h>
-#include <sys/diskmbr.h>
-#include <sys/gpt.h>
#include <machine/bootinfo.h>
-
#include <stdarg.h>
-#include <uuid.h>
=20
#include <bootstrap.h>
#include <btxv86.h>
#include <edd.h>
+#include "disk.h"
#include "libi386.h"
=20
+CTASSERT(sizeof(struct i386_devdesc) >=3D sizeof(struct disk_devdesc));
+
#define BIOS_NUMDRIVES 0x475
#define BIOSDISK_SECSIZE 512
#define BUFSIZE (1 * BIOSDISK_SECSIZE)
@@ -68,174 +67,118 @@
# define DEBUG(fmt, args...)
#endif
=20
-#ifdef LOADER_GPT_SUPPORT
-struct gpt_part {
- int gp_index;
- uuid_t gp_type;
- uint64_t gp_start;
- uint64_t gp_end;
-};
-#endif
-
-struct open_disk {
- int od_dkunit; /* disk unit number */
- int od_unit; /* BIOS unit number */
- int od_cyl; /* BIOS geometry */
- int od_hds;
- int od_sec;
- daddr_t od_boff; /* block offset from beginning of BIOS disk */
- int od_flags;
-#define BD_MODEINT13 0x0000
-#define BD_MODEEDD1 0x0001
-#define BD_MODEEDD3 0x0002
-#define BD_MODEMASK 0x0003
-#define BD_FLOPPY 0x0004
-#define BD_LABELOK 0x0008
-#define BD_PARTTABOK 0x0010
-#ifdef LOADER_GPT_SUPPORT
-#define BD_GPTOK 0x0020
-#endif
- union {
- struct {
- struct disklabel mbr_disklabel;
- int mbr_nslices; /* slice count */
- struct dos_partition mbr_slicetab[NEXTDOSPART];
- } _mbr;
-#ifdef LOADER_GPT_SUPPORT
- struct {
- int gpt_nparts; =09
- struct gpt_part *gpt_partitions;
- } _gpt;
-#endif
- } _data;
-};
-
-#define od_disklabel _data._mbr.mbr_disklabel
-#define od_nslices _data._mbr.mbr_nslices
-#define od_slicetab _data._mbr.mbr_slicetab
-#ifdef LOADER_GPT_SUPPORT
-#define od_nparts _data._gpt.gpt_nparts
-#define od_partitions _data._gpt.gpt_partitions
-#endif
-
/*
* List of BIOS devices, translation from disk unit number to
* BIOS unit number.
*/
static struct bdinfo
{
- int bd_unit; /* BIOS unit number */
- int bd_flags;
- int bd_type; /* BIOS 'drive type' (floppy only) */
+ int bd_unit; /* BIOS unit number */
+ int bd_cyl; /* BIOS geometry */
+ int bd_hds;
+ int bd_sec;
+ int bd_flags;
+#define BD_MODEINT13 0x0000
+#define BD_MODEEDD1 0x0001
+#define BD_MODEEDD3 0x0002
+#define BD_MODEMASK 0x0003
+#define BD_FLOPPY 0x0004
+ int bd_type; /* BIOS 'drive type' (floppy only) */
+ uint16_t bd_sectorsize; /* Sector size */
+ uint64_t bd_sectors; /* Disk size */
} bdinfo [MAXBDDEV];
static int nbdinfo =3D 0;
=20
-static int bd_getgeom(struct open_disk *od);
-static int bd_read(struct open_disk *od, daddr_t dblk, int blks,
- caddr_t dest);
-static int bd_write(struct open_disk *od, daddr_t dblk, int blks,
- caddr_t dest);
+#define BD(dev) (bdinfo[(dev)->d_unit])
=20
-static int bd_int13probe(struct bdinfo *bd);
+static int bd_read(struct disk_devdesc *dev, daddr_t dblk, int blks,
+ caddr_t dest);
+static int bd_write(struct disk_devdesc *dev, daddr_t dblk, int blks,
+ caddr_t dest);
+static int bd_int13probe(struct bdinfo *bd);
=20
-#ifdef LOADER_GPT_SUPPORT
-static void bd_printgptpart(struct open_disk *od, struct gpt_part *gp,
- char *prefix, int verbose);
-#endif
-static void bd_printslice(struct open_disk *od, struct dos_partition *dp,
- char *prefix, int verbose);
-static void bd_printbsdslice(struct open_disk *od, daddr_t offset,
- char *prefix, int verbose);
-
-static int bd_init(void);
-static int bd_strategy(void *devdata, int flag, daddr_t dblk,
- size_t size, char *buf, size_t *rsize);
-static int bd_realstrategy(void *devdata, int flag, daddr_t dblk,
- size_t size, char *buf, size_t *rsize);
-static int bd_open(struct open_file *f, ...);
-static int bd_close(struct open_file *f);
-static void bd_print(int verbose);
+static int bd_init(void);
+static int bd_strategy(void *devdata, int flag, daddr_t dblk, size_t size,
+ char *buf, size_t *rsize);
+static int bd_realstrategy(void *devdata, int flag, daddr_t dblk,
+ size_t size, char *buf, size_t *rsize);
+static int bd_open(struct open_file *f, ...);
+static int bd_close(struct open_file *f);
+static int bd_ioctl(struct open_file *f, u_long cmd, void *data);
+static void bd_print(int verbose);
=20
struct devsw biosdisk =3D {
- "disk",=20
- DEVT_DISK,=20
- bd_init,
- bd_strategy,=20
- bd_open,=20
- bd_close,=20
- noioctl,
- bd_print,
- NULL
+ "disk",
+ DEVT_DISK,
+ bd_init,
+ bd_strategy,
+ bd_open,
+ bd_close,
+ bd_ioctl,
+ bd_print,
+ NULL
};
=20
-static int bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev);
-static void bd_closedisk(struct open_disk *od);
-static int bd_open_mbr(struct open_disk *od, struct i386_devdesc *dev);
-static int bd_bestslice(struct open_disk *od);
-static void bd_checkextended(struct open_disk *od, int slicenum);
-#ifdef LOADER_GPT_SUPPORT
-static int bd_open_gpt(struct open_disk *od, struct i386_devdesc *dev);
-static struct gpt_part *bd_best_gptpart(struct open_disk *od);
-#endif
-
/*
* Translate between BIOS device numbers and our private unit numbers.
*/
int
bd_bios2unit(int biosdev)
{
- int i;
- =20
- DEBUG("looking for bios device 0x%x", biosdev);
- for (i =3D 0; i < nbdinfo; i++) {
- DEBUG("bd unit %d is BIOS device 0x%x", i, bdinfo[i].bd_unit);
- if (bdinfo[i].bd_unit =3D=3D biosdev)
- return(i);
- }
- return(-1);
+ int i;
+
+ DEBUG("looking for bios device 0x%x", biosdev);
+ for (i =3D 0; i < nbdinfo; i++) {
+ DEBUG("bd unit %d is BIOS device 0x%x", i, bdinfo[i].bd_unit);
+ if (bdinfo[i].bd_unit =3D=3D biosdev)
+ return (i);
+ }
+ return (-1);
}
=20
int
bd_unit2bios(int unit)
{
- if ((unit >=3D 0) && (unit < nbdinfo))
- return(bdinfo[unit].bd_unit);
- return(-1);
+
+ if ((unit >=3D 0) && (unit < nbdinfo))
+ return (bdinfo[unit].bd_unit);
+ return (-1);
}
=20
-/* =20
+/*
* Quiz the BIOS for disk devices, save a little info about them.
*/
static int
-bd_init(void)=20
+bd_init(void)
{
- int base, unit, nfd =3D 0;
+ int base, unit, nfd =3D 0;
=20
- /* sequence 0, 0x80 */
- for (base =3D 0; base <=3D 0x80; base +=3D 0x80) {
- for (unit =3D base; (nbdinfo < MAXBDDEV); unit++) {
+ /* sequence 0, 0x80 */
+ for (base =3D 0; base <=3D 0x80; base +=3D 0x80) {
+ for (unit =3D base; (nbdinfo < MAXBDDEV); unit++) {
#ifndef VIRTUALBOX
- /* check the BIOS equipment list for number of fixed disks */
- if((base =3D=3D 0x80) &&
- (nfd >=3D *(unsigned char *)PTOV(BIOS_NUMDRIVES)))
- break;
+ /*
+ * Check the BIOS equipment list for number
+ * of fixed disks.
+ */
+ if(base =3D=3D 0x80 &&
+ (nfd >=3D *(unsigned char *)PTOV(BIOS_NUMDRIVES)))
+ break;
#endif
+ bdinfo[nbdinfo].bd_unit =3D unit;
+ bdinfo[nbdinfo].bd_flags =3D unit < 0x80 ? BD_FLOPPY: 0;
+ if (!bd_int13probe(&bdinfo[nbdinfo]))
+ break;
=20
- bdinfo[nbdinfo].bd_unit =3D unit;
- bdinfo[nbdinfo].bd_flags =3D (unit < 0x80) ? BD_FLOPPY : 0;
-
- if (!bd_int13probe(&bdinfo[nbdinfo]))
- break;
-
- /* XXX we need "disk aliases" to make this simpler */
- printf("BIOS drive %c: is disk%d\n",=20
- (unit < 0x80) ? ('A' + unit) : ('C' + unit - 0x80), nbdinfo);
- nbdinfo++;
- if (base =3D=3D 0x80)
- nfd++;
+ /* XXX we need "disk aliases" to make this simpler */
+ printf("BIOS drive %c: is disk%d\n", (unit < 0x80) ?
+ ('A' + unit): ('C' + unit - 0x80), nbdinfo);
+ nbdinfo++;
+ if (base =3D=3D 0x80)
+ nfd++;
+ }
}
- }
- return(0);
+ return(0);
}
=20
/*
@@ -244,36 +187,60 @@
static int
bd_int13probe(struct bdinfo *bd)
{
- v86.ctl =3D V86_FLAGS;
- v86.addr =3D 0x13;
- v86.eax =3D 0x800;
- v86.edx =3D bd->bd_unit;
- v86int();
- =20
- if (!(V86_CY(v86.efl)) && /* carry clear */
- ((v86.edx & 0xff) > ((unsigned)bd->bd_unit & 0x7f))) { /* unit # OK */
- if ((v86.ecx & 0x3f) =3D=3D 0) { /* absurd sector size */
- DEBUG("Invalid geometry for unit %d", bd->bd_unit);
- return(0); /* skip device */
- }
+ struct edd_params params;
+
+ v86.ctl =3D V86_FLAGS;
+ v86.addr =3D 0x13;
+ v86.eax =3D 0x800;
+ v86.edx =3D bd->bd_unit;
+ v86int();
+
+ if (V86_CY(v86.efl) || /* carry set */
+ (v86.ecx & 0x3f) =3D=3D 0 || /* absurd sector number */
+ (v86.edx & 0xff) <=3D (unsigned)(bd->bd_unit & 0x7f)) /* unit # bad */
+ return (0); /* skip device */
+
+ /* Convert max cyl # -> # of cylinders */
+ bd->bd_cyl =3D ((v86.ecx & 0xc0) << 2) + ((v86.ecx & 0xff00) >> 8) + 1;
+ /* Convert max head # -> # of heads */
+ bd->bd_hds =3D ((v86.edx & 0xff00) >> 8) + 1;
+ bd->bd_sec =3D v86.ecx & 0x3f;
+ bd->bd_type =3D v86.ebx & 0xff;
bd->bd_flags |=3D BD_MODEINT13;
- bd->bd_type =3D v86.ebx & 0xff;
+
+ /* Calculate sectors count from the geometry */
+ bd->bd_sectors =3D bd->bd_cyl * bd->bd_hds * bd->bd_sec;
+ bd->bd_sectorsize =3D BIOSDISK_SECSIZE;
+ DEBUG("unit 0x%x geometry %d/%d/%d", bd->bd_unit, bd->bd_cyl,
+ bd->bd_hds, bd->bd_sec);
=20
/* Determine if we can use EDD with this device. */
v86.eax =3D 0x4100;
v86.edx =3D bd->bd_unit;
v86.ebx =3D 0x55aa;
v86int();
- if (!(V86_CY(v86.efl)) && /* carry clear */
- ((v86.ebx & 0xffff) =3D=3D 0xaa55) && /* signature */
- (v86.ecx & EDD_INTERFACE_FIXED_DISK)) { /* packets mode ok */
- bd->bd_flags |=3D BD_MODEEDD1;
- if ((v86.eax & 0xff00) >=3D 0x3000)
- bd->bd_flags |=3D BD_MODEEDD3;
+ if (V86_CY(v86.efl) || /* carry set */
+ (v86.ebx & 0xffff) !=3D 0xaa55 || /* signature */
+ (v86.ecx & EDD_INTERFACE_FIXED_DISK) =3D=3D 0)
+ return (1);
+ /* EDD supported */
+ bd->bd_flags |=3D BD_MODEEDD1;
+ if ((v86.eax & 0xff00) >=3D 0x3000)
+ bd->bd_flags |=3D BD_MODEEDD3;
+ /* Get disk params */
+ params.len =3D sizeof(struct edd_params);
+ v86.ctl =3D V86_FLAGS;
+ v86.addr =3D 0x13;
+ v86.eax =3D 0x4800;
+ v86.edx =3D bd->bd_unit;
+ v86.ds =3D VTOPSEG(¶ms);
+ v86.esi =3D VTOPOFF(¶ms);
+ v86int();
+ if (!V86_CY(v86.efl)) {
+ bd->bd_sectors =3D params.sectors;
+ bd->bd_sectorsize =3D params.sector_size;
}
- return(1);
- }
- return(0);
+ return (1);
}
=20
/*
@@ -282,237 +249,29 @@
static void
bd_print(int verbose)
{
- int i, j;
- char line[80];
- struct i386_devdesc dev;
- struct open_disk *od;
- struct dos_partition *dptr;
- =20
- for (i =3D 0; i < nbdinfo; i++) {
- sprintf(line, " disk%d: BIOS drive %c:\n", i,=20
- (bdinfo[i].bd_unit < 0x80) ? ('A' + bdinfo[i].bd_unit) : ('C' + bdinfo[i=
].bd_unit - 0x80));
- pager_output(line);
+ static char line[80];
+ struct disk_devdesc dev;
+ int i;
=20
- /* try to open the whole disk */
- dev.d_unit =3D i;
- dev.d_kind.biosdisk.slice =3D -1;
- dev.d_kind.biosdisk.partition =3D -1;
-=09
- if (!bd_opendisk(&od, &dev)) {
-
-#ifdef LOADER_GPT_SUPPORT
- /* Do we have a GPT table? */
- if (od->od_flags & BD_GPTOK) {
- for (j =3D 0; j < od->od_nparts; j++) {
- sprintf(line, " disk%dp%d", i,
- od->od_partitions[j].gp_index);
- bd_printgptpart(od, &od->od_partitions[j], line, verbose);
+ for (i =3D 0; i < nbdinfo; i++) {
+ sprintf(line, " disk%d: BIOS drive %c:\n", i,
+ (bdinfo[i].bd_unit < 0x80) ? ('A' + bdinfo[i].bd_unit):
+ ('C' + bdinfo[i].bd_unit - 0x80));
+ pager_output(line);
+ dev.d_dev =3D &biosdisk;
+ dev.d_unit =3D i;
+ dev.d_slice =3D -1;
+ dev.d_partition =3D -1;
+ if (disk_open(&dev,
+ bdinfo[i].bd_sectorsize * bdinfo[i].bd_sectors,
+ bdinfo[i].bd_sectorsize) =3D=3D 0) {
+ sprintf(line, " disk%d", i);
+ disk_print(&dev, line, verbose);
+ disk_close(&dev);
}
- } else
-#endif
- /* Do we have a partition table? */
- if (od->od_flags & BD_PARTTABOK) {
- dptr =3D &od->od_slicetab[0];
-
- /* Check for a "dedicated" disk */
- if ((dptr[3].dp_typ =3D=3D DOSPTYP_386BSD) &&
- (dptr[3].dp_start =3D=3D 0) &&
- (dptr[3].dp_size =3D=3D 50000)) {
- sprintf(line, " disk%d", i);
- bd_printbsdslice(od, 0, line, verbose);
- } else {
- for (j =3D 0; j < od->od_nslices; j++) {
- sprintf(line, " disk%ds%d", i, j + 1);
- bd_printslice(od, &dptr[j], line, verbose);
- }
- }
- }
- bd_closedisk(od);
}
- }
}
=20
-/* Given a size in 512 byte sectors, convert it to a human-readable number=
. */
-static char *
-display_size(uint64_t size)
-{
- static char buf[80];
- char unit;
-
- size /=3D 2;
- unit =3D 'K';
- if (size >=3D 10485760000LL) {
- size /=3D 1073741824;
- unit =3D 'T';
- } else if (size >=3D 10240000) {
- size /=3D 1048576;
- unit =3D 'G';
- } else if (size >=3D 10000) {
- size /=3D 1024;
- unit =3D 'M';
- }
- sprintf(buf, "%.6ld%cB", (long)size, unit);
- return (buf);
-}
-
-#ifdef LOADER_GPT_SUPPORT
-static uuid_t efi =3D GPT_ENT_TYPE_EFI;
-static uuid_t freebsd_boot =3D GPT_ENT_TYPE_FREEBSD_BOOT;
-static uuid_t freebsd_ufs =3D GPT_ENT_TYPE_FREEBSD_UFS;
-static uuid_t freebsd_swap =3D GPT_ENT_TYPE_FREEBSD_SWAP;
-static uuid_t freebsd_zfs =3D GPT_ENT_TYPE_FREEBSD_ZFS;
-static uuid_t ms_basic_data =3D GPT_ENT_TYPE_MS_BASIC_DATA;
-
-static void
-bd_printgptpart(struct open_disk *od, struct gpt_part *gp, char *prefix,
- int verbose)
-{
- char stats[80];
- char line[96];
-
- if (verbose)
- sprintf(stats, " %s", display_size(gp->gp_end + 1 - gp->gp_start));
- else
- stats[0] =3D '\0';
-
- if (uuid_equal(&gp->gp_type, &efi, NULL))
- sprintf(line, "%s: EFI %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
- sprintf(line, "%s: FAT/NTFS %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_boot, NULL))
- sprintf(line, "%s: FreeBSD boot%s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL))
- sprintf(line, "%s: FreeBSD UFS %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
- sprintf(line, "%s: FreeBSD ZFS %s\n", prefix, stats);
- else if (uuid_equal(&gp->gp_type, &freebsd_swap, NULL))
- sprintf(line, "%s: FreeBSD swap%s\n", prefix, stats);
- else
- sprintf(line, "%s: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x%s\n",
- prefix,
- gp->gp_type.time_low, gp->gp_type.time_mid,
- gp->gp_type.time_hi_and_version,
- gp->gp_type.clock_seq_hi_and_reserved, gp->gp_type.clock_seq_low,
- gp->gp_type.node[0], gp->gp_type.node[1], gp->gp_type.node[2],
- gp->gp_type.node[3], gp->gp_type.node[4], gp->gp_type.node[5],
- stats);
- pager_output(line);
-}
-#endif
-
-/*
- * Print information about slices on a disk. For the size calculations we
- * assume a 512 byte sector.
- */
-static void
-bd_printslice(struct open_disk *od, struct dos_partition *dp, char *prefix,
- int verbose)
-{
- char stats[80];
- char line[80];
-
- if (verbose)
- sprintf(stats, " %s (%d - %d)", display_size(dp->dp_size),
- dp->dp_start, dp->dp_start + dp->dp_size);
- else
- stats[0] =3D '\0';
-
- switch (dp->dp_typ) {
- case DOSPTYP_386BSD:
- bd_printbsdslice(od, (daddr_t)dp->dp_start, prefix, verbose);
- return;
- case DOSPTYP_LINSWP:
- sprintf(line, "%s: Linux swap%s\n", prefix, stats);
- break;
- case DOSPTYP_LINUX:
- /*
- * XXX
- * read the superblock to confirm this is an ext2fs partition?
- */
- sprintf(line, "%s: ext2fs%s\n", prefix, stats);
- break;
- case 0x00: /* unused partition */
- case DOSPTYP_EXT:
- return;
- case 0x01:
- sprintf(line, "%s: FAT-12%s\n", prefix, stats);
- break;
- case 0x04:
- case 0x06:
- case 0x0e:
- sprintf(line, "%s: FAT-16%s\n", prefix, stats);
- break;
- case 0x07:
- sprintf(line, "%s: NTFS/HPFS%s\n", prefix, stats);
- break;
- case 0x0b:
- case 0x0c:
- sprintf(line, "%s: FAT-32%s\n", prefix, stats);
- break;
- default:
- sprintf(line, "%s: Unknown fs: 0x%x %s\n", prefix, dp->dp_typ,
- stats);
- }
- pager_output(line);
-}
-
-/*
- * Print out each valid partition in the disklabel of a FreeBSD slice.
- * For size calculations, we assume a 512 byte sector size.
- */
-static void
-bd_printbsdslice(struct open_disk *od, daddr_t offset, char *prefix,
- int verbose)
-{
- char line[80];
- char buf[BIOSDISK_SECSIZE];
- struct disklabel *lp;
- int i;
-
- /* read disklabel */
- if (bd_read(od, offset + LABELSECTOR, 1, buf))
- return;
- lp =3D(struct disklabel *)(&buf[0]);
- if (lp->d_magic !=3D DISKMAGIC) {
- sprintf(line, "%s: FFS bad disklabel\n", prefix);
- pager_output(line);
- return;
- }
- =20
- /* Print partitions */
- for (i =3D 0; i < lp->d_npartitions; i++) {
- /*
- * For each partition, make sure we know what type of fs it is. If
- * not, then skip it. However, since floppies often have bogus
- * fstypes, print the 'a' partition on a floppy even if it is marked
- * unused.
- */
- if ((lp->d_partitions[i].p_fstype =3D=3D FS_BSDFFS) ||
- (lp->d_partitions[i].p_fstype =3D=3D FS_SWAP) ||
- (lp->d_partitions[i].p_fstype =3D=3D FS_VINUM) ||
- ((lp->d_partitions[i].p_fstype =3D=3D FS_UNUSED) &&=20
- (od->od_flags & BD_FLOPPY) && (i =3D=3D 0))) {
-
- /* Only print out statistics in verbose mode */
- if (verbose)
- sprintf(line, " %s%c: %s %s (%d - %d)\n", prefix, 'a' + i,
- (lp->d_partitions[i].p_fstype =3D=3D FS_SWAP) ? "swap " :=20
- (lp->d_partitions[i].p_fstype =3D=3D FS_VINUM) ? "vinum" :
- "FFS ",
- display_size(lp->d_partitions[i].p_size),
- lp->d_partitions[i].p_offset,
- lp->d_partitions[i].p_offset + lp->d_partitions[i].p_size);
- else
- sprintf(line, " %s%c: %s\n", prefix, 'a' + i,
- (lp->d_partitions[i].p_fstype =3D=3D FS_SWAP) ? "swap" :=20
- (lp->d_partitions[i].p_fstype =3D=3D FS_VINUM) ? "vinum" :
- "FFS");
- pager_output(line);
- }
- }
-}
-
-
/*
* Attempt to open the disk described by (dev) for use by (f).
*
@@ -523,564 +282,83 @@
* sliced - are they after the first BSD slice, or the DOS
* slice before it?)
*/
-static int=20
+static int
bd_open(struct open_file *f, ...)
{
- va_list ap;
- struct i386_devdesc *dev;
- struct open_disk *od;
- int error;
+ struct disk_devdesc *dev;
+ va_list ap;
=20
- va_start(ap, f);
- dev =3D va_arg(ap, struct i386_devdesc *);
- va_end(ap);
- if ((error =3D bd_opendisk(&od, dev)))
- return(error);
- =20
- /*
- * Save our context
- */
- ((struct i386_devdesc *)(f->f_devdata))->d_kind.biosdisk.data =3D od;
- DEBUG("open_disk %p, partition at 0x%x", od, od->od_boff);
- return(0);
+ va_start(ap, f);
+ dev =3D va_arg(ap, struct disk_devdesc *);
+ va_end(ap);
+
+ if (dev->d_unit < 0 || dev->d_unit >=3D nbdinfo)
+ return (EIO);
+
+ return (disk_open(dev, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
+ BD(dev).bd_sectorsize));
}
=20
static int
-bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
+bd_close(struct open_file *f)
{
- struct open_disk *od;
- int error;
+ struct disk_devdesc *dev;
=20
- if (dev->d_unit >=3D nbdinfo) {
- DEBUG("attempt to open nonexistent disk");
- return(ENXIO);
- }
- =20
- od =3D (struct open_disk *)malloc(sizeof(struct open_disk));
- if (!od) {
- DEBUG("no memory");
- return (ENOMEM);
- }
-
- /* Look up BIOS unit number, initalise open_disk structure */
- od->od_dkunit =3D dev->d_unit;
- od->od_unit =3D bdinfo[od->od_dkunit].bd_unit;
- od->od_flags =3D bdinfo[od->od_dkunit].bd_flags;
- od->od_boff =3D 0;
- error =3D 0;
- DEBUG("open '%s', unit 0x%x slice %d partition %d",
- i386_fmtdev(dev), dev->d_unit,=20
- dev->d_kind.biosdisk.slice, dev->d_kind.biosdisk.partition);
-
- /* Get geometry for this open (removable device may have changed) */
- if (bd_getgeom(od)) {
- DEBUG("can't get geometry");
- error =3D ENXIO;
- goto out;
- }
-
- /* Determine disk layout. */
-#ifdef LOADER_GPT_SUPPORT
- error =3D bd_open_gpt(od, dev);
- if (error)
-#endif
- error =3D bd_open_mbr(od, dev);
- =20
- out:
- if (error) {
- free(od);
- } else {
- *odp =3D od; /* return the open disk */
- }
- return(error);
+ dev =3D (struct disk_devdesc *)f->f_devdata;
+ return (disk_close(dev));
}
=20
static int
-bd_open_mbr(struct open_disk *od, struct i386_devdesc *dev)
+bd_ioctl(struct open_file *f, u_long cmd, void *data)
{
- struct dos_partition *dptr;
- struct disklabel *lp;
- int sector, slice, i;
- int error;
- char buf[BUFSIZE];
+ struct disk_devdesc *dev;
=20
- /*
- * Following calculations attempt to determine the correct value
- * for d->od_boff by looking for the slice and partition specified,
- * or searching for reasonable defaults.
- */
-
- /*
- * Find the slice in the DOS slice table.
- */
- od->od_nslices =3D 0;
- if (bd_read(od, 0, 1, buf)) {
- DEBUG("error reading MBR");
- return (EIO);
- }
-
- /*=20
- * Check the slice table magic.
- */
- if (((u_char)buf[0x1fe] !=3D 0x55) || ((u_char)buf[0x1ff] !=3D 0xaa)) {
- /* If a slice number was explicitly supplied, this is an error */
- if (dev->d_kind.biosdisk.slice > 0) {
- DEBUG("no slice table/MBR (no magic)");
- return (ENOENT);
+ dev =3D (struct disk_devdesc *)f->f_devdata;
+ switch (cmd) {
+ case DIOCGSECTORSIZE:
+ *(u_int *)data =3D BD(dev).bd_sectorsize;
+ break;
+ case DIOCGMEDIASIZE:
+ *(off_t *)data =3D BD(dev).bd_sectors * BD(dev).bd_sectorsize;
+ break;
+ default:
+ return (ENOTTY);
}
- sector =3D 0;
- goto unsliced; /* may be a floppy */
- }
-
- /*
- * copy the partition table, then pick up any extended partitions.
- */
- bcopy(buf + DOSPARTOFF, &od->od_slicetab,
- sizeof(struct dos_partition) * NDOSPART);
- od->od_nslices =3D 4; /* extended slices start here */
- for (i =3D 0; i < NDOSPART; i++)
- bd_checkextended(od, i);
- od->od_flags |=3D BD_PARTTABOK;
- dptr =3D &od->od_slicetab[0];
-
- /* Is this a request for the whole disk? */
- if (dev->d_kind.biosdisk.slice =3D=3D -1) {
- sector =3D 0;
- goto unsliced;
- }
-
- /*
- * if a slice number was supplied but not found, this is an error.
- */
- if (dev->d_kind.biosdisk.slice > 0) {
- slice =3D dev->d_kind.biosdisk.slice - 1;
- if (slice >=3D od->od_nslices) {
- DEBUG("slice %d not found", slice);
- return (ENOENT);
- }
- }
-
- /*
- * Check for the historically bogus MBR found on true dedicated disks
- */
- if ((dptr[3].dp_typ =3D=3D DOSPTYP_386BSD) &&
- (dptr[3].dp_start =3D=3D 0) &&
- (dptr[3].dp_size =3D=3D 50000)) {
- sector =3D 0;
- goto unsliced;
- }
-
- /* Try to auto-detect the best slice; this should always give a slice =
number */
- if (dev->d_kind.biosdisk.slice =3D=3D 0) {
- slice =3D bd_bestslice(od);
- if (slice =3D=3D -1) {
- return (ENOENT);
- }
- dev->d_kind.biosdisk.slice =3D slice;
- }
-
- dptr =3D &od->od_slicetab[0];
- /*
- * Accept the supplied slice number unequivocally (we may be looking
- * at a DOS partition).
- */
- dptr +=3D (dev->d_kind.biosdisk.slice - 1); /* we number 1-4, offsets =
are 0-3 */
- sector =3D dptr->dp_start;
- DEBUG("slice entry %d at %d, %d sectors", dev->d_kind.biosdisk.slice -=
1, sector, dptr->dp_size);
-
- /*
- * If we are looking at a BSD slice, and the partition is < 0, assume =
the 'a' partition
- */
- if ((dptr->dp_typ =3D=3D DOSPTYP_386BSD) && (dev->d_kind.biosdisk.part=
ition < 0))
- dev->d_kind.biosdisk.partition =3D 0;
-
- unsliced:
- /*=20
- * Now we have the slice offset, look for the partition in the disklab=
el if we have
- * a partition to start with.
- *
- * XXX we might want to check the label checksum.
- */
- if (dev->d_kind.biosdisk.partition < 0) {
- od->od_boff =3D sector; /* no partition, must be after the slice */
- DEBUG("opening raw slice");
- } else {
-=09
- if (bd_read(od, sector + LABELSECTOR, 1, buf)) {
- DEBUG("error reading disklabel");
- return (EIO);
- }
- DEBUG("copy %d bytes of label from %p to %p", sizeof(struct disklabel), b=
uf + LABELOFFSET, &od->od_disklabel);
- bcopy(buf + LABELOFFSET, &od->od_disklabel, sizeof(struct disklabel));
- lp =3D &od->od_disklabel;
- od->od_flags |=3D BD_LABELOK;
-
- if (lp->d_magic !=3D DISKMAGIC) {
- DEBUG("no disklabel");
- return (ENOENT);
- }
- if (dev->d_kind.biosdisk.partition >=3D lp->d_npartitions) {
- DEBUG("partition '%c' exceeds partitions in table (a-'%c')",
- 'a' + dev->d_kind.biosdisk.partition, 'a' + lp->d_npartitions);
- return (EPART);
- }
-
-#ifdef DISK_DEBUG
- /* Complain if the partition is unused unless this is a floppy. */
- if ((lp->d_partitions[dev->d_kind.biosdisk.partition].p_fstype =3D=3D FS_=
UNUSED) &&
- !(od->od_flags & BD_FLOPPY))
- DEBUG("warning, partition marked as unused");
-#endif
-=09
- od->od_boff =3D=20
- lp->d_partitions[dev->d_kind.biosdisk.partition].p_offset -
- lp->d_partitions[RAW_PART].p_offset +
- sector;
- }
- return (0);
+ return (0);
}
=20
-static void
-bd_checkextended(struct open_disk *od, int slicenum)
+static int
+bd_strategy(void *devdata, int rw, daddr_t dblk, size_t size, char *buf,
+ size_t *rsize)
{
- char buf[BIOSDISK_SECSIZE];
- struct dos_partition *dp;
- u_int base;
- int i, start, end;
+ struct bcache_devdata bcd;
+ struct disk_devdesc *dev;
=20
- dp =3D &od->od_slicetab[slicenum];
- start =3D od->od_nslices;
-
- if (dp->dp_size =3D=3D 0)
- goto done;
- if (dp->dp_typ !=3D DOSPTYP_EXT)
- goto done;
- if (bd_read(od, (daddr_t)dp->dp_start, 1, buf))
- goto done;
- if (((u_char)buf[0x1fe] !=3D 0x55) || ((u_char)buf[0x1ff] !=3D 0xaa)) {
- DEBUG("no magic in extended table");
- goto done;
- }
- base =3D dp->dp_start;
- dp =3D (struct dos_partition *)(&buf[DOSPARTOFF]);
- for (i =3D 0; i < NDOSPART; i++, dp++) {
- if (dp->dp_size =3D=3D 0)
- continue;
- if (od->od_nslices =3D=3D NEXTDOSPART)
- goto done;
- dp->dp_start +=3D base;
- bcopy(dp, &od->od_slicetab[od->od_nslices], sizeof(*dp));
- od->od_nslices++;
- }
- end =3D od->od_nslices;
-
- /*
- * now, recursively check the slices we just added
- */
- for (i =3D start; i < end; i++)
- bd_checkextended(od, i);
-done:
- return;
+ dev =3D (struct disk_devdesc *)devdata;
+ bcd.dv_strategy =3D bd_realstrategy;
+ bcd.dv_devdata =3D devdata;
+ return (bcache_strategy(&bcd, BD(dev).bd_unit, rw, dblk + dev->d_offset,
+ size, buf, rsize));
}
=20
-/*
- * Search for a slice with the following preferences:
- *
- * 1: Active FreeBSD slice
- * 2: Non-active FreeBSD slice
- * 3: Active Linux slice
- * 4: non-active Linux slice
- * 5: Active FAT/FAT32 slice
- * 6: non-active FAT/FAT32 slice
- */
-#define PREF_RAWDISK 0
-#define PREF_FBSD_ACT 1
-#define PREF_FBSD 2
-#define PREF_LINUX_ACT 3
-#define PREF_LINUX 4
-#define PREF_DOS_ACT 5
-#define PREF_DOS 6
-#define PREF_NONE 7
-
-/*
- * slicelimit is in the range 0 .. NDOSPART
- */
static int
-bd_bestslice(struct open_disk *od)
+bd_realstrategy(void *devdata, int rw, daddr_t dblk, size_t size, char *bu=
f,
+ size_t *rsize)
{
- struct dos_partition *dp;
- int pref, preflevel;
- int i, prefslice;
-=09
- prefslice =3D 0;
- preflevel =3D PREF_NONE;
-
- dp =3D &od->od_slicetab[0];
- for (i =3D 0; i < od->od_nslices; i++, dp++) {
-
- switch (dp->dp_typ) {
- case DOSPTYP_386BSD: /* FreeBSD */
- pref =3D dp->dp_flag & 0x80 ? PREF_FBSD_ACT : PREF_FBSD;
- break;
-
- case DOSPTYP_LINUX:
- pref =3D dp->dp_flag & 0x80 ? PREF_LINUX_ACT : PREF_LINUX;
- break;
- =20
- case 0x01: /* DOS/Windows */
- case 0x04:
- case 0x06:
- case 0x0b:
- case 0x0c:
- case 0x0e:
- pref =3D dp->dp_flag & 0x80 ? PREF_DOS_ACT : PREF_DOS;
- break;
-
- default:
- pref =3D PREF_NONE;
- }
- if (pref < preflevel) {
- preflevel =3D pref;
- prefslice =3D i + 1;
- }
- }
- return (prefslice);
-}
-
-#ifdef LOADER_GPT_SUPPORT
-static int
-bd_open_gpt(struct open_disk *od, struct i386_devdesc *dev)
-{
- struct dos_partition *dp;
- struct gpt_hdr *hdr;
- struct gpt_ent *ent;
- struct gpt_part *gp;
- int entries_per_sec, error, i, part;
- daddr_t lba, elba;
- char gpt[BIOSDISK_SECSIZE], tbl[BIOSDISK_SECSIZE];
-
- /*
- * Following calculations attempt to determine the correct value
- * for d->od_boff by looking for the slice and partition specified,
- * or searching for reasonable defaults.
- */
- error =3D 0;
-
- /* First, read the MBR and see if we have a PMBR. */
- if (bd_read(od, 0, 1, tbl)) {
- DEBUG("error reading MBR");
- return (EIO);
- }
-
- /* Check the slice table magic. */
- if (((u_char)tbl[0x1fe] !=3D 0x55) || ((u_char)tbl[0x1ff] !=3D 0xaa))
- return (ENXIO);
-
- /* Check for GPT slice. */
- part =3D 0;
- dp =3D (struct dos_partition *)(tbl + DOSPARTOFF);
- for (i =3D 0; i < NDOSPART; i++) {
- if (dp[i].dp_typ =3D=3D 0xee)
- part++;
- else if ((part !=3D 1) && (dp[i].dp_typ !=3D 0x00))
- return (EINVAL);
- }
- if (part !=3D 1)
- return (EINVAL);
-
- /* Read primary GPT table header. */
- if (bd_read(od, 1, 1, gpt)) {
- DEBUG("error reading GPT header");
- return (EIO);
- }
- hdr =3D (struct gpt_hdr *)gpt;
- if (bcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) !=3D 0 ||
- hdr->hdr_lba_self !=3D 1 || hdr->hdr_revision < 0x00010000 ||
- hdr->hdr_entsz < sizeof(*ent) ||
- BIOSDISK_SECSIZE % hdr->hdr_entsz !=3D 0) {
- DEBUG("Invalid GPT header\n");
- return (EINVAL);
- }
-
- /* Now walk the partition table to count the number of valid partition=
s. */
- part =3D 0;
- entries_per_sec =3D BIOSDISK_SECSIZE / hdr->hdr_entsz;
- elba =3D hdr->hdr_lba_table + hdr->hdr_entries / entries_per_sec;
- for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
- if (bd_read(od, lba, 1, tbl)) {
- DEBUG("error reading GPT table");
- return (EIO);
- }
- for (i =3D 0; i < entries_per_sec; i++) {
- ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
- if (uuid_is_nil(&ent->ent_type, NULL) || ent->ent_lba_start =3D=3D 0 =
||
- ent->ent_lba_end < ent->ent_lba_start)
- continue;
- part++;
- }
- }
-
- /* Save the important information about all the valid partitions. */
- od->od_nparts =3D part;
- if (part !=3D 0) {
- od->od_partitions =3D malloc(part * sizeof(struct gpt_part));
- part =3D 0;=09
- for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
- if (bd_read(od, lba, 1, tbl)) {
- DEBUG("error reading GPT table");
- error =3D EIO;
- goto out;
- }
- for (i =3D 0; i < entries_per_sec; i++) {
- ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
- if (uuid_is_nil(&ent->ent_type, NULL) ||
- ent->ent_lba_start =3D=3D 0 ||
- ent->ent_lba_end < ent->ent_lba_start)
- continue;
- od->od_partitions[part].gp_index =3D (lba - hdr->hdr_lba_table) *
- entries_per_sec + i + 1;
- od->od_partitions[part].gp_type =3D ent->ent_type;
- od->od_partitions[part].gp_start =3D ent->ent_lba_start;
- od->od_partitions[part].gp_end =3D ent->ent_lba_end;
- part++;
- }
- }
- }
- od->od_flags |=3D BD_GPTOK;
-
- /* Is this a request for the whole disk? */
- if (dev->d_kind.biosdisk.slice < 0) {
- od->od_boff =3D 0;
- return (0);
- }
-
- /*
- * If a partition number was supplied, then the user is trying to use
- * an MBR address rather than a GPT address, so fail.
- */
- if (dev->d_kind.biosdisk.partition !=3D 0xff) {
- error =3D ENOENT;
- goto out;
- }
-
- /* If a slice number was supplied but not found, this is an error. */
- gp =3D NULL;
- if (dev->d_kind.biosdisk.slice > 0) {
- for (i =3D 0; i < od->od_nparts; i++) {
- if (od->od_partitions[i].gp_index =3D=3D dev->d_kind.biosdisk.slice) {
- gp =3D &od->od_partitions[i];
- break;
- }
- }
- if (gp =3D=3D NULL) {
- DEBUG("partition %d not found", dev->d_kind.biosdisk.slice);
- error =3D ENOENT;
- goto out;
- }
- }
-
- /* Try to auto-detect the best partition. */
- if (dev->d_kind.biosdisk.slice =3D=3D 0) {
- gp =3D bd_best_gptpart(od);
- if (gp =3D=3D NULL) {
- error =3D ENOENT;
- goto out;
- }
- dev->d_kind.biosdisk.slice =3D gp->gp_index;
- }
- od->od_boff =3D gp->gp_start;
-
-out:
- if (error) {
- if (od->od_nparts > 0)
- free(od->od_partitions);
- od->od_flags &=3D ~BD_GPTOK;
- }
- return (error);
-}
-
-static struct gpt_part *
-bd_best_gptpart(struct open_disk *od)
-{
- struct gpt_part *gp, *prefpart;
- int i, pref, preflevel;
-=09
- prefpart =3D NULL;
- preflevel =3D PREF_NONE;
-
- gp =3D od->od_partitions;
- for (i =3D 0; i < od->od_nparts; i++, gp++) {
- /* Windows. XXX: Also Linux. */
- if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
- pref =3D PREF_DOS;
- /* FreeBSD */
- else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL) ||
- uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
- pref =3D PREF_FBSD;
- else
- pref =3D PREF_NONE;
- if (pref < preflevel) {
- preflevel =3D pref;
- prefpart =3D gp;
- }
- }
- return (prefpart);
-}
-#endif
-
-static int=20
-bd_close(struct open_file *f)
-{
- struct open_disk *od =3D (struct open_disk *)(((struct i386_devdesc *)=
(f->f_devdata))->d_kind.biosdisk.data);
-
- bd_closedisk(od);
- return(0);
-}
-
-static void
-bd_closedisk(struct open_disk *od)
-{
- DEBUG("open_disk %p", od);
-#if 0
- /* XXX is this required? (especially if disk already open...) */
- if (od->od_flags & BD_FLOPPY)
- delay(3000000);
-#endif
-#ifdef LOADER_GPT_SUPPORT
- if (od->od_flags & BD_GPTOK && od->od_nparts > 0)
- free(od->od_partitions);
-#endif
- free(od);
-}
-
-static int=20
-bd_strategy(void *devdata, int rw, daddr_t dblk, size_t size, char *buf, s=
ize_t *rsize)
-{
- struct bcache_devdata bcd;
- struct open_disk *od =3D (struct open_disk *)(((struct i386_devdesc *)=
devdata)->d_kind.biosdisk.data);
-
- bcd.dv_strategy =3D bd_realstrategy;
- bcd.dv_devdata =3D devdata;
- return(bcache_strategy(&bcd, od->od_unit, rw, dblk+od->od_boff, size, =
buf, rsize));
-}
-
-static int=20
-bd_realstrategy(void *devdata, int rw, daddr_t dblk, size_t size, char *bu=
f, size_t *rsize)
-{
- struct open_disk *od =3D (struct open_disk *)(((struct i386_devdesc *)=
devdata)->d_kind.biosdisk.data);
+ struct disk_devdesc *dev =3D (struct disk_devdesc *)devdata;
int blks;
-#ifdef BD_SUPPORT_FRAGS
+#ifdef BD_SUPPORT_FRAGS /* XXX: sector size */
char fragbuf[BIOSDISK_SECSIZE];
size_t fragsize;
=20
fragsize =3D size % BIOSDISK_SECSIZE;
#else
- if (size % BIOSDISK_SECSIZE)
+ if (size % BD(dev).bd_sectorsize)
panic("bd_strategy: %d bytes I/O not multiple of block size", size);
#endif
=20
- DEBUG("open_disk %p", od);
- blks =3D size / BIOSDISK_SECSIZE;
+ DEBUG("open_disk %p", dev);
+ blks =3D size / BD(dev).bd_sectorsize;
if (rsize)
*rsize =3D 0;
=20
@@ -1088,11 +366,11 @@
case F_READ:
DEBUG("read %d from %lld to %p", blks, dblk, buf);
=20
- if (blks && bd_read(od, dblk, blks, buf)) {
+ if (blks && bd_read(dev, dblk, blks, buf)) {
DEBUG("read error");
return (EIO);
}
-#ifdef BD_SUPPORT_FRAGS
+#ifdef BD_SUPPORT_FRAGS /* XXX: sector size */
DEBUG("bd_strategy: frag read %d from %d+%d to %p",
fragsize, dblk, blks, buf + (blks * BIOSDISK_SECSIZE));
if (fragsize && bd_read(od, dblk + blks, 1, fragsize)) {
@@ -1105,7 +383,7 @@
case F_WRITE :
DEBUG("write %d from %d to %p", blks, dblk, buf);
=20
- if (blks && bd_write(od, dblk, blks, buf)) {
+ if (blks && bd_write(dev, dblk, blks, buf)) {
DEBUG("write error");
return (EIO);
}
@@ -1130,7 +408,8 @@
#define FLOPPY_BOUNCEBUF 18
=20
static int
-bd_edd_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int =
write)
+bd_edd_io(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest,
+ int write)
{
static struct edd_packet packet;
=20
@@ -1146,7 +425,7 @@
v86.eax =3D 0x4300;
else
v86.eax =3D 0x4200;
- v86.edx =3D od->od_unit;
+ v86.edx =3D BD(dev).bd_unit;
v86.ds =3D VTOPSEG(&packet);
v86.esi =3D VTOPOFF(&packet);
v86int();
@@ -1154,16 +433,17 @@
}
=20
static int
-bd_chs_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int =
write)
+bd_chs_io(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest,
+ int write)
{
u_int x, bpc, cyl, hd, sec;
=20
- bpc =3D (od->od_sec * od->od_hds); /* blocks per cylinder */
+ bpc =3D BD(dev).bd_sec * BD(dev).bd_hds; /* blocks per cylinder */
x =3D dblk;
cyl =3D x / bpc; /* block # / blocks per cylinder */
x %=3D bpc; /* block offset into cylinder */
- hd =3D x / od->od_sec; /* offset / blocks per track */
- sec =3D x % od->od_sec; /* offset into track */
+ hd =3D x / BD(dev).bd_sec; /* offset / blocks per track */
+ sec =3D x % BD(dev).bd_sec; /* offset into track */
=20
/* correct sector number for 1-based BIOS numbering */
sec++;
@@ -1179,7 +459,7 @@
else
v86.eax =3D 0x200 | blks;
v86.ecx =3D ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec;
- v86.edx =3D (hd << 8) | od->od_unit;
+ v86.edx =3D (hd << 8) | BD(dev).bd_unit;
v86.es =3D VTOPSEG(dest);
v86.ebx =3D VTOPOFF(dest);
v86int();
@@ -1187,7 +467,7 @@
}
=20
static int
-bd_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int writ=
e)
+bd_io(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest, int =
write)
{
u_int x, sec, result, resid, retry, maxfer;
caddr_t p, xp, bbuf, breg;
@@ -1200,8 +480,9 @@
p =3D dest;
=20
/* Decide whether we have to bounce */
- if (VTOP(dest) >> 20 !=3D 0 || ((od->od_unit < 0x80) &&=20
- ((VTOP(dest) >> 16) !=3D (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16)))) {
+ if (VTOP(dest) >> 20 !=3D 0 || (BD(dev).bd_unit < 0x80 &&
+ (VTOP(dest) >> 16) !=3D (VTOP(dest +
+ blks * BD(dev).bd_sectorsize) >> 16))) {
=20
/*=20
* There is a 64k physical boundary somewhere in the
@@ -1212,12 +493,12 @@
* there, in which case we use the top half.
*/
x =3D min(FLOPPY_BOUNCEBUF, (unsigned)blks);
- bbuf =3D alloca(x * 2 * BIOSDISK_SECSIZE);
+ bbuf =3D alloca(x * 2 * BD(dev).bd_sectorsize);
if (((u_int32_t)VTOP(bbuf) & 0xffff0000) =3D=3D
- ((u_int32_t)VTOP(bbuf + x * BIOSDISK_SECSIZE) & 0xffff0000)) {
+ ((u_int32_t)VTOP(bbuf + x * BD(dev).bd_sectorsize) & 0xffff0000)) {
breg =3D bbuf;
} else {
- breg =3D bbuf + x * BIOSDISK_SECSIZE;
+ breg =3D bbuf + x * BD(dev).bd_sectorsize;
}
maxfer =3D x; /* limit transfers to bounce region size */
} else {
@@ -1230,8 +511,8 @@
* Play it safe and don't cross track boundaries.
* (XXX this is probably unnecessary)
*/
- sec =3D dblk % od->od_sec; /* offset into track */
- x =3D min(od->od_sec - sec, resid);
+ sec =3D dblk % BD(dev).bd_sec; /* offset into track */
+ x =3D min(BD(dev).bd_sec - sec, resid);
if (maxfer > 0)
x =3D min(x, maxfer); /* fit bounce buffer */
=20
@@ -1243,7 +524,7 @@
* Put your Data In, and shake it all about=20
*/
if (write && bbuf !=3D NULL)
- bcopy(p, breg, x * BIOSDISK_SECSIZE);
+ bcopy(p, breg, x * BD(dev).bd_sectorsize);
=20
/*
* Loop retrying the operation a couple of times. The BIOS
@@ -1255,14 +536,14 @@
v86.ctl =3D V86_FLAGS;
v86.addr =3D 0x13;
v86.eax =3D 0;
- v86.edx =3D od->od_unit;
+ v86.edx =3D BD(dev).bd_unit;
v86int();
}
=20
- if (od->od_flags & BD_MODEEDD1)
- result =3D bd_edd_io(od, dblk, x, xp, write);
+ if (BD(dev).bd_flags & BD_MODEEDD1)
+ result =3D bd_edd_io(dev, dblk, x, xp, write);
else
- result =3D bd_chs_io(od, dblk, x, xp, write);
+ result =3D bd_chs_io(dev, dblk, x, xp, write);
if (result =3D=3D 0)
break;
}
@@ -1277,52 +558,28 @@
return(-1);
}
if (!write && bbuf !=3D NULL)
- bcopy(breg, p, x * BIOSDISK_SECSIZE);
- p +=3D (x * BIOSDISK_SECSIZE);
+ bcopy(breg, p, x * BD(dev).bd_sectorsize);
+ p +=3D (x * BD(dev).bd_sectorsize);
dblk +=3D x;
resid -=3D x;
}
=20
-/* hexdump(dest, (blks * BIOSDISK_SECSIZE)); */
+/* hexdump(dest, (blks * BD(dev).bd_sectorsize)); */
return(0);
}
=20
static int
-bd_read(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
+bd_read(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest)
{
=20
- return (bd_io(od, dblk, blks, dest, 0));
+ return (bd_io(dev, dblk, blks, dest, 0));
}
=20
static int
-bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
+bd_write(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest)
{
=20
- return (bd_io(od, dblk, blks, dest, 1));
-}
-
-static int
-bd_getgeom(struct open_disk *od)
-{
-
- v86.ctl =3D V86_FLAGS;
- v86.addr =3D 0x13;
- v86.eax =3D 0x800;
- v86.edx =3D od->od_unit;
- v86int();
-
- if ((V86_CY(v86.efl)) || /* carry set */
- ((v86.edx & 0xff) <=3D (unsigned)(od->od_unit & 0x7f))) /* unit # bad */
- return(1);
- =20
- /* convert max cyl # -> # of cylinders */
- od->od_cyl =3D ((v86.ecx & 0xc0) << 2) + ((v86.ecx & 0xff00) >> 8) + 1;
- /* convert max head # -> # of heads */
- od->od_hds =3D ((v86.edx & 0xff00) >> 8) + 1;
- od->od_sec =3D v86.ecx & 0x3f;
-
- DEBUG("unit 0x%x geometry %d/%d/%d", od->od_unit, od->od_cyl, od->od_h=
ds, od->od_sec);
- return(0);
+ return (bd_io(dev, dblk, blks, dest, 1));
}
=20
/*
@@ -1361,21 +618,25 @@
* IDE disks to be specified in $num_ide_disks. There should be a Better =
Way.
*/
int
-bd_getdev(struct i386_devdesc *dev)
+bd_getdev(struct i386_devdesc *d)
{
- struct open_disk *od;
+ struct disk_devdesc *dev;
int biosdev;
int major;
int rootdev;
char *nip, *cp;
- int unitofs =3D 0, i, unit;
+ int i, unit;
=20
+ dev =3D (struct disk_devdesc *)d;
biosdev =3D bd_unit2bios(dev->d_unit);
DEBUG("unit %d BIOS device %d", dev->d_unit, biosdev);
if (biosdev =3D=3D -1) /* not a BIOS device */
return(-1);
- if (bd_opendisk(&od, dev) !=3D 0) /* oops, not a viable device */
- return(-1);
+ if (disk_open(dev, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
+ BD(dev).bd_sectorsize) !=3D 0) /* oops, not a viable device */
+ return (-1);
+ else
+ disk_close(dev);
=20
if (biosdev < 0x80) {
/* floppy (or emulated floppy) or ATAPI device */
@@ -1387,24 +648,11 @@
major =3D FDMAJOR;
}
} else {
- /* harddisk */
- if ((od->od_flags & BD_LABELOK) && (od->od_disklabel.d_type =3D=3D DTYPE_=
SCSI)) {
- /* label OK, disk labelled as SCSI */
- major =3D DAMAJOR;
- /* check for unit number correction hint, now deprecated */
- if ((nip =3D getenv("num_ide_disks")) !=3D NULL) {
- i =3D strtol(nip, &cp, 0);
- /* check for parse error */
- if ((cp !=3D nip) && (*cp =3D=3D 0))
- unitofs =3D i;
- }
- } else {
/* assume an IDE disk */
major =3D WDMAJOR;
- }
}
/* default root disk unit number */
- unit =3D (biosdev & 0x7f) - unitofs;
+ unit =3D biosdev & 0x7f;
=20
/* XXX a better kludge to set the root disk unit number */
if ((nip =3D getenv("root_disk_unit")) !=3D NULL) {
@@ -1414,8 +662,7 @@
unit =3D i;
}
=20
- rootdev =3D MAKEBOOTDEV(major, dev->d_kind.biosdisk.slice + 1, unit,
- dev->d_kind.biosdisk.partition);
+ rootdev =3D MAKEBOOTDEV(major, dev->d_slice + 1, unit, dev->d_partitio=
n);
DEBUG("dev is 0x%x\n", rootdev);
return(rootdev);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/devicename.c
--- a/head/sys/boot/i386/libi386/devicename.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/devicename.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,12 +25,12 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/devicename.c 235329 2012-05=
-12 09:03:30Z avg $");
+__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/devicename.c 239066 2012-08=
-05 14:37:48Z ae $");
=20
#include <stand.h>
#include <string.h>
-#include <sys/disklabel.h>
#include "bootstrap.h"
+#include "disk.h"
#include "libi386.h"
#include "../zfs/libzfs.h"
=20
@@ -86,7 +86,7 @@
{
struct i386_devdesc *idev;
struct devsw *dv;
- int i, unit, slice, partition, err;
+ int i, unit, err;
char *cp;
const char *np;
=20
@@ -112,62 +112,9 @@
break;
=20
case DEVT_DISK:
- unit =3D -1;
- slice =3D -1;
- partition =3D -1;
- if (*np && (*np !=3D ':')) {
- unit =3D strtol(np, &cp, 10); /* next comes the unit number */
- if (cp =3D=3D np) {
- err =3D EUNIT;
- goto fail;
- }
-#ifdef LOADER_GPT_SUPPORT
- if (*cp =3D=3D 'p') { /* got a GPT partition */
- np =3D cp + 1;
- slice =3D strtol(np, &cp, 10);
- if (cp =3D=3D np) {
- err =3D ESLICE;
- goto fail;
- }
- if (*cp && (*cp !=3D ':')) {
- err =3D EINVAL;
- goto fail;
- }
- partition =3D 0xff;
- } else {
-#endif
- if (*cp =3D=3D 's') { /* got a slice number */
- np =3D cp + 1;
- slice =3D strtol(np, &cp, 10);
- if (cp =3D=3D np) {
- err =3D ESLICE;
- goto fail;
- }
- }
- if (*cp && (*cp !=3D ':')) {
- partition =3D *cp - 'a'; /* got a partition number */
- if ((partition < 0) || (partition >=3D MAXPARTITIONS)) {
- err =3D EPART;
- goto fail;
- }
- cp++;
- }
-#ifdef LOADER_GPT_SUPPORT
- }
-#endif
- } else {
- cp =3D np;
- }
- if (*cp && (*cp !=3D ':')) {
- err =3D EINVAL;
+ err =3D disk_parsedev((struct disk_devdesc *)idev, np, path);
+ if (err !=3D 0)
goto fail;
- }
-
- idev->d_unit =3D unit;
- idev->d_kind.biosdisk.slice =3D slice;
- idev->d_kind.biosdisk.partition =3D partition;
- if (path !=3D NULL)
- *path =3D (*cp =3D=3D 0) ? cp : cp + 1;
break;
=20
case DEVT_CD:
@@ -221,38 +168,20 @@
{
struct i386_devdesc *dev =3D (struct i386_devdesc *)vdev;
static char buf[128]; /* XXX device length constant? */
- char *cp;
- =20
+
switch(dev->d_type) {
case DEVT_NONE:
strcpy(buf, "(no device)");
break;
=20
case DEVT_CD:
+ case DEVT_NET:
sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
break;
=20
case DEVT_DISK:
- cp =3D buf;
- cp +=3D sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_unit);
-#ifdef LOADER_GPT_SUPPORT
- if (dev->d_kind.biosdisk.partition =3D=3D 0xff) {
- cp +=3D sprintf(cp, "p%d", dev->d_kind.biosdisk.slice);
- } else {
-#endif
- if (dev->d_kind.biosdisk.slice > 0)
- cp +=3D sprintf(cp, "s%d", dev->d_kind.biosdisk.slice);
- if (dev->d_kind.biosdisk.partition >=3D 0)
- cp +=3D sprintf(cp, "%c", dev->d_kind.biosdisk.partition + 'a');
-#ifdef LOADER_GPT_SUPPORT
- }
-#endif
- strcat(cp, ":");
- break;
+ return (disk_fmtdev(vdev));
=20
- case DEVT_NET:
- sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
- break;
case DEVT_ZFS:
return(zfs_fmtdev(vdev));
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/libi386.h
--- a/head/sys/boot/i386/libi386/libi386.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/libi386.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/boot/i386/libi386/libi386.h 235329 2012-05-12 09:03:=
30Z avg $
+ * $FreeBSD: head/sys/boot/i386/libi386/libi386.h 239066 2012-08-05 14:37:=
48Z ae $
*/
=20
=20
@@ -45,6 +45,7 @@
void *data;
int slice;
int partition;
+ off_t offset;
} biosdisk;
struct
{
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/loader/Makefile
--- a/head/sys/boot/i386/loader/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/loader/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/i386/loader/Makefile 235537 2012-05-17 10:11:18Z=
gber $
+# $FreeBSD: head/sys/boot/i386/loader/Makefile 239067 2012-08-05 14:38:53Z=
ae $
=20
.include <bsd.own.mk>
MK_SSP=3D no
@@ -50,9 +50,6 @@
.if !defined(LOADER_NO_GZIP_SUPPORT)
CFLAGS+=3D -DLOADER_GZIP_SUPPORT
.endif
-.if !defined(LOADER_NO_GPT_SUPPORT)
-CFLAGS+=3D -DLOADER_GPT_SUPPORT
-.endif
.if defined(LOADER_NANDFS_SUPPORT)
CFLAGS+=3D -DLOADER_NANDFS_SUPPORT
.endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/loader/main.c
--- a/head/sys/boot/i386/loader/main.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/loader/main.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/i386/loader/main.c 235329 2012-05-12 09:=
03:30Z avg $");
+__FBSDID("$FreeBSD: head/sys/boot/i386/loader/main.c 239068 2012-08-05 14:=
48:28Z ae $");
=20
/*
* MD bootstrap main() and assorted miscellaneous
@@ -356,25 +356,17 @@
i386_zfs_probe(void)
{
char devname[32];
- int unit, slice;
+ int unit;
=20
/*
* Open all the disks we can find and see if we can reconstruct
- * ZFS pools from them. Bogusly assumes that the disks are named
- * diskN, diskNpM or diskNsM.
+ * ZFS pools from them.
*/
for (unit =3D 0; unit < MAXBDDEV; unit++) {
+ if (bd_unit2bios(unit) =3D=3D -1)
+ break;
sprintf(devname, "disk%d:", unit);
- if (zfs_probe_dev(devname, NULL) =3D=3D ENXIO)
- continue;
- for (slice =3D 1; slice <=3D 128; slice++) {
- sprintf(devname, "disk%dp%d:", unit, slice);
- zfs_probe_dev(devname, NULL);
- }
- for (slice =3D 1; slice <=3D 4; slice++) {
- sprintf(devname, "disk%ds%d:", unit, slice);
- zfs_probe_dev(devname, NULL);
- }
+ zfs_probe_dev(devname, NULL);
}
}
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/pmbr/pmbr.s
--- a/head/sys/boot/i386/pmbr/pmbr.s Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/pmbr/pmbr.s Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $FreeBSD$
+# $FreeBSD: head/sys/boot/i386/pmbr/pmbr.s 239060 2012-08-05 12:57:38Z ae $
#
# Partly from: src/sys/boot/i386/mbr/mbr.s 1.7
=20
@@ -42,8 +42,8 @@
.set STACK,EXEC+SECSIZE*4 # Stack address
.set GPT_ADDR,STACK # GPT header address
.set GPT_SIG,0
- .set GPT_SIG_0,0x20494645
- .set GPT_SIG_1,0x54524150
+ .set GPT_SIG_0,0x20494645 # "EFI "
+ .set GPT_SIG_1,0x54524150 # "PART"
.set GPT_MYLBA,24
.set GPT_PART_LBA,72
.set GPT_NPART,80
@@ -52,6 +52,8 @@
.set PART_TYPE,0
.set PART_START_LBA,32
.set PART_END_LBA,40
+ .set DPBUF,PART_ADDR+SECSIZE
+ .set DPBUF_SEC,0x10 # Number of sectors
=20
.set NHRDRV,0x475 # Number of hard drives
=20
@@ -91,15 +93,32 @@
jb main.2 # Yes
main.1: movb $0x80,%dl # Assume drive 0x80
#
-# Load the primary GPT header from LBA 1 and verify signature.
+# Load the GPT header and verify signature. Try LBA 1 for the primary one=
and
+# the last LBA for the backup if it is broken.
#
-main.2: movw $GPT_ADDR,%bx
+main.2: call getdrvparams # Read drive parameters
+ movb $1,%dh # %dh :=3D 1 (reading primary)
+main.2a: movw $GPT_ADDR,%bx
movw $lba,%si
- call read
+ call read # Read header and check GPT sig
cmpl $GPT_SIG_0,GPT_ADDR+GPT_SIG
- jnz err_pt
+ jnz main.2b
cmpl $GPT_SIG_1,GPT_ADDR+GPT_SIG+4
- jnz err_pt
+ jnz main.2b
+ jmp load_part
+main.2b: cmpb $1,%dh # Reading primary?
+ jne err_pt # If no - invalid table found
+#
+# Try alternative LBAs from the last sector for the GPT header.
+#
+main.3: movb $0,%dh # %dh :=3D 0 (reading backup)
+ movw $DPBUF+DPBUF_SEC,%si # %si =3D last sector + 1
+ movw $lba,%di # %di =3D $lba
+main.3a: decl (%si) # 0x0(%si) =3D last sec (0-31)
+ movw $2,%cx
+ rep
+ movsw # $lastsec--, copy it to $lba
+ jmp main.2a # Read the next sector
#
# Load a partition table sector from disk and look for a FreeBSD boot
# partition.
@@ -172,6 +191,16 @@
jc err_rd # If error
ret
#
+# Check the number of LBAs on the drive index %dx. Trashes %ax and %si.
+#
+getdrvparams:
+ movw $DPBUF,%si # Set the address of result buf
+ movw $0x001e,(%si) # len
+ movw $0x4800,%ax # BIOS: Read Drive Parameters
+ int $0x13 # Call the BIOS
+ jc err_rd # "I/O error" if error
+ ret
+#
# Various error message entry points.
#
err_big: movw $msg_big,%si # "Boot loader too
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/boot2/boot2.c
--- a/head/sys/boot/pc98/boot2/boot2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/boot2/boot2.c Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/pc98/boot2/boot2.c 235988 2012-05-25 09:=
36:39Z gleb $");
+__FBSDID("$FreeBSD: head/sys/boot/pc98/boot2/boot2.c 239063 2012-08-05 14:=
05:11Z nyan $");
=20
#include <sys/param.h>
#include <sys/disklabel.h>
@@ -126,13 +126,13 @@
unsigned unit;
unsigned head;
unsigned sec;
- unsigned slice;
- unsigned part;
+ uint8_t slice;
+ uint8_t part;
unsigned start;
} dsk;
static char cmd[512], cmddup[512], knamebuf[1024];
-static const char *kname =3D NULL;
-static uint32_t opts =3D 0;
+static const char *kname;
+static uint32_t opts;
static int comspeed =3D SIOSPD;
static struct bootinfo bootinfo;
static uint8_t ioctrl =3D IO_KEYBOARD;
@@ -615,7 +615,8 @@
struct pc98_partition *dp;
struct disklabel *d;
char *sec;
- unsigned sl, i;
+ unsigned i;
+ uint8_t sl;
u_char *p;
=20
if (!dsk_meta) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/btx/btxldr/btxldr.S
--- a/head/sys/boot/pc98/btx/btxldr/btxldr.S Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/btx/btxldr/btxldr.S Fri Aug 10 14:19:25 2012 +0300
@@ -12,16 +12,16 @@
* warranties of merchantability and fitness for a particular
* purpose.
*
- * $FreeBSD: head/sys/boot/pc98/btx/btxldr/btxldr.S 235264 2012-05-11 09:4=
6:17Z avg $
+ * $FreeBSD: head/sys/boot/pc98/btx/btxldr/btxldr.S 239064 2012-08-05 14:1=
1:07Z nyan $
*/
=20
+#include <bootargs.h>
+
/*
* Prototype BTX loader program, written in a couple of hours. The
* real thing should probably be more flexible, and in C.
*/
=20
-#include <bootargs.h>
-
/*
* Memory locations.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/btx/lib/btxcsu.S
--- a/head/sys/boot/pc98/btx/lib/btxcsu.S Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/btx/lib/btxcsu.S Fri Aug 10 14:19:25 2012 +0300
@@ -13,14 +13,14 @@
# purpose.
#
=20
-# $FreeBSD: head/sys/boot/pc98/btx/lib/btxcsu.S 235264 2012-05-11 09:46:17=
Z avg $
+# $FreeBSD: head/sys/boot/pc98/btx/lib/btxcsu.S 239064 2012-08-05 14:11:07=
Z nyan $
+
+#include <bootargs.h>
=20
#
# BTX C startup code (ELF).
#
=20
-#include <bootargs.h>
-
#
# Globals.
#
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/cdboot/cdboot.S
--- a/head/sys/boot/pc98/cdboot/cdboot.S Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/cdboot/cdboot.S Fri Aug 10 14:19:25 2012 +0300
@@ -28,9 +28,7 @@
# SUCH DAMAGE.
#
=20
-# $FreeBSD: head/sys/boot/pc98/cdboot/cdboot.S 235264 2012-05-11 09:46:17Z=
avg $
-
-#include <bootargs.h>
+# $FreeBSD: head/sys/boot/pc98/cdboot/cdboot.S 239069 2012-08-05 14:48:55Z=
nyan $
=20
#
# Basically, we first create a set of boot arguments to pass to the loaded
@@ -38,6 +36,8 @@
# off of.=20
#
=20
+#include <bootargs.h>
+
#
# Memory locations.
#
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/libpc98/Makefile
--- a/head/sys/boot/pc98/libpc98/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/libpc98/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/pc98/libpc98/Makefile 235395 2012-05-13 11:34:05=
Z avg $
+# $FreeBSD: head/sys/boot/pc98/libpc98/Makefile 239069 2012-08-05 14:48:55=
Z nyan $
#
LIB=3D pc98
INTERNALLIB=3D
@@ -37,7 +37,8 @@
# XXX: make alloca() useable
CFLAGS+=3D -Dalloca=3D__builtin_alloca
=20
-CFLAGS+=3D -I${.CURDIR}/../../common -I${.CURDIR}/../btx/lib \
+CFLAGS+=3D -I${.CURDIR}/../../common \
+ -I${.CURDIR}/../btx/lib \
-I${.CURDIR}/../../i386/libi386 \
-I${.CURDIR}/../../.. -I.
# the location of libstand
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/sparc64/loader/main.c
--- a/head/sys/boot/sparc64/loader/main.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/sparc64/loader/main.c Fri Aug 10 14:19:25 2012 +0300
@@ -7,7 +7,7 @@
* unchanged, you can do what ever you want with this file.
*/
/*-
- * Copyright (c) 2008 Marius Strobl <marius at FreeBSD.org>
+ * Copyright (c) 2008 - 2012 Marius Strobl <marius at FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/sparc64/loader/main.c 236581 2012-06-04 =
20:56:40Z marius $");
+__FBSDID("$FreeBSD: head/sys/boot/sparc64/loader/main.c 238851 2012-07-27 =
18:23:11Z marius $");
=20
/*
* FreeBSD/sparc64 kernel loader - machine dependent part
@@ -75,8 +75,6 @@
#include "libofw.h"
#include "dev_net.h"
=20
-#define MAXDEV 31
-
extern char bootprog_name[], bootprog_rev[], bootprog_date[], bootprog_mak=
er[];
=20
enum {
@@ -735,18 +733,52 @@
{
struct vtoc8 vtoc;
struct zfs_devdesc zfs_currdev;
- char devname[32];
+ char alias[64], devname[sizeof(alias) + sizeof(":x") - 1];
+ char type[sizeof("device_type")];
+ char *bdev, *dev, *odev;
uint64_t guid;
- int fd, part, unit;
+ int fd, len, part;
+ phandle_t aliases, options;
=20
/* Get the GUID of the ZFS pool on the boot device. */
guid =3D 0;
zfs_probe_dev(bootpath, &guid);
=20
- for (unit =3D 0; unit < MAXDEV; unit++) {
+ /*
+ * Get the GUIDs of the ZFS pools on any additional disks listed in
+ * the boot-device environment variable.
+ */
+ if ((aliases =3D OF_finddevice("/aliases")) =3D=3D -1)
+ goto out;
+ options =3D OF_finddevice("/options");
+ len =3D OF_getproplen(options, "boot-device");
+ if (len <=3D 0)
+ goto out;
+ bdev =3D odev =3D malloc(len + 1);
+ if (bdev =3D=3D NULL)
+ goto out;
+ if (OF_getprop(options, "boot-device", bdev, len) <=3D 0)
+ goto out;
+ bdev[len] =3D '\0';
+ while ((dev =3D strsep(&bdev, " ")) !=3D NULL) {
+ if (*dev =3D=3D '\0')
+ continue;
+ strcpy(alias, dev);
+ (void)OF_getprop(aliases, dev, alias, sizeof(alias));
+ /*
+ * Don't probe the boot disk twice. Note that bootpath
+ * includes the partition specifier.
+ */
+ if (strncmp(alias, bootpath, strlen(alias)) =3D=3D 0)
+ continue;
+ if (OF_getprop(OF_finddevice(alias), "device_type", type,
+ sizeof(type)) =3D=3D -1)
+ continue;
+ if (strcmp(type, "block") !=3D 0)
+ continue;
+
/* Find freebsd-zfs slices in the VTOC. */
- sprintf(devname, "disk%d:", unit);
- fd =3D open(devname, O_RDONLY);
+ fd =3D open(alias, O_RDONLY);
if (fd =3D=3D -1)
continue;
lseek(fd, 0, SEEK_SET);
@@ -760,12 +792,14 @@
if (part =3D=3D 2 || vtoc.part[part].tag !=3D
VTOC_TAG_FREEBSD_ZFS)
continue;
- sprintf(devname, "disk%d:%c", unit, part + 'a');
+ (void)sprintf(devname, "%s:%c", alias, part + 'a');
if (zfs_probe_dev(devname, NULL) =3D=3D ENXIO)
break;
}
}
+ free(odev);
=20
+ out:
if (guid !=3D 0) {
zfs_currdev.pool_guid =3D guid;
zfs_currdev.root_guid =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/test/test.c
--- a/head/sys/boot/userboot/test/test.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/test/test.c Fri Aug 10 14:19:25 2012 +0300
@@ -23,9 +23,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/boot/userboot/test/test.c 223695 2011-06-30 16:08:56=
Z dfr $
+ * $FreeBSD: head/sys/boot/userboot/test/test.c 239073 2012-08-05 17:04:58=
Z ae $
*/
=20
+#include <sys/types.h>
+#include <sys/disk.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <dirent.h>
@@ -251,6 +253,29 @@
return (0);
}
=20
+int
+test_diskioctl(void *arg, int unit, u_long cmd, void *data)
+{
+ struct stat sb;
+
+ if (unit !=3D 0 || disk_fd =3D=3D -1)
+ return (EBADF);
+ switch (cmd) {
+ case DIOCGSECTORSIZE:
+ *(u_int *)data =3D 512;
+ break;
+ case DIOCGMEDIASIZE:
+ if (fstat(disk_fd, &sb) =3D=3D 0)
+ *(off_t *)data =3D sb.st_size;
+ else
+ return (ENOTTY);
+ break;
+ default:
+ return (ENOTTY);
+ };
+ return (0);
+}
+
/*
* Guest virtual machine i/o
*
@@ -353,6 +378,7 @@
.stat =3D test_stat,
=20
.diskread =3D test_diskread,
+ .diskioctl =3D test_diskioctl,
=20
.copyin =3D test_copyin,
.copyout =3D test_copyout,
@@ -424,5 +450,5 @@
term.c_lflag &=3D ~(ICANON|ECHO);
tcsetattr(0, TCSAFLUSH, &term);
=20
- func(&cb, NULL, USERBOOT_VERSION_1, disk_fd >=3D 0);
+ func(&cb, NULL, USERBOOT_VERSION_2, disk_fd >=3D 0);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot.h
--- a/head/sys/boot/userboot/userboot.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/userboot.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,13 +23,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/boot/userboot/userboot.h 223695 2011-06-30 16:08:56Z=
dfr $
+ * $FreeBSD: head/sys/boot/userboot/userboot.h 239073 2012-08-05 17:04:58Z=
ae $
*/
=20
/*
* USERBOOT interface versions
*/
#define USERBOOT_VERSION_1 1
+#define USERBOOT_VERSION_2 2
=20
/*
* Exit codes from the loader
@@ -175,4 +176,9 @@
*/
void (*getmem)(void *arg, uint64_t *lowmem,
uint64_t *highmem);
+ /*
+ * ioctl interface to the disk device
+ */
+ int (*diskioctl)(void *arg, int unit, u_long cmd,
+ void *data);
};
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/Makefi=
le
--- a/head/sys/boot/userboot/userboot/Makefile Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/boot/userboot/userboot/Makefile Fri Aug 10 14:19:25 2012 +03=
00
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/userboot/userboot/Makefile 223712 2011-07-01 18:=
31:59Z marius $
+# $FreeBSD: head/sys/boot/userboot/userboot/Makefile 239058 2012-08-05 12:=
15:15Z ae $
=20
NO_MAN=3D
WITHOUT_SSP=3D
@@ -32,7 +32,6 @@
CFLAGS+=3D -I${.CURDIR}/../../..
CFLAGS+=3D -I${.CURDIR}/../../../../lib/libstand
CFLAGS+=3D -ffreestanding -I.
-CFLAGS+=3D -DLOADER_GPT_SUPPORT -DLOADER_MBR_SUPPORT
=20
LDFLAGS+=3D -nostdlib -Wl,-Bsymbolic
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/bootin=
fo32.c
--- a/head/sys/boot/userboot/userboot/bootinfo32.c Mon Jul 30 11:44:18 2012=
+0300
+++ b/head/sys/boot/userboot/userboot/bootinfo32.c Fri Aug 10 14:19:25 2012=
+0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/bootinfo32.c 223695 20=
11-06-30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/bootinfo32.c 239057 20=
12-08-05 11:59:46Z ae $");
=20
#include <stand.h>
#include <sys/param.h>
@@ -143,7 +143,7 @@
vm_offset_t size;
vm_offset_t ssym, esym;
char *rootdevname;
- int bootdevnr, i, howto;
+ int bootdevnr, howto;
char *kernelname;
const char *kernelpath;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/copy.c
--- a/head/sys/boot/userboot/userboot/copy.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/userboot/copy.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/copy.c 223695 2011-06-=
30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/copy.c 239057 2012-08-=
05 11:59:46Z ae $");
=20
#include <stand.h>
=20
@@ -50,7 +50,6 @@
ssize_t
userboot_readin(int fd, vm_offset_t va, size_t len)
{
- void *pa;
ssize_t res, s;
size_t sz;
char buf[4096];
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/device=
name.c
--- a/head/sys/boot/userboot/userboot/devicename.c Mon Jul 30 11:44:18 2012=
+0300
+++ b/head/sys/boot/userboot/userboot/devicename.c Fri Aug 10 14:19:25 2012=
+0300
@@ -25,11 +25,10 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/devicename.c 223695 20=
11-06-30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/devicename.c 239058 20=
12-08-05 12:15:15Z ae $");
=20
#include <stand.h>
#include <string.h>
-#include <sys/disklabel.h>
=20
#include "bootstrap.h"
#include "disk.h"
@@ -87,7 +86,7 @@
{
struct disk_devdesc *idev;
struct devsw *dv;
- int i, unit, slice, partition, err;
+ int i, unit, err;
char *cp;
const char *np;
=20
@@ -113,62 +112,9 @@
break;
=20
case DEVT_DISK:
- unit =3D -1;
- slice =3D -1;
- partition =3D -1;
- if (*np && (*np !=3D ':')) {
- unit =3D strtol(np, &cp, 10); /* next comes the unit number */
- if (cp =3D=3D np) {
- err =3D EUNIT;
- goto fail;
- }
-#ifdef LOADER_GPT_SUPPORT
- if (*cp =3D=3D 'p') { /* got a GPT partition */
- np =3D cp + 1;
- slice =3D strtol(np, &cp, 10);
- if (cp =3D=3D np) {
- err =3D ESLICE;
- goto fail;
- }
- if (*cp && (*cp !=3D ':')) {
- err =3D EINVAL;
- goto fail;
- }
- partition =3D 0xff;
- } else {
-#endif
- if (*cp =3D=3D 's') { /* got a slice number */
- np =3D cp + 1;
- slice =3D strtol(np, &cp, 10);
- if (cp =3D=3D np) {
- err =3D ESLICE;
- goto fail;
- }
- }
- if (*cp && (*cp !=3D ':')) {
- partition =3D *cp - 'a'; /* got a partition number */
- if ((partition < 0) || (partition >=3D MAXPARTITIONS)) {
- err =3D EPART;
- goto fail;
- }
- cp++;
- }
-#ifdef LOADER_GPT_SUPPORT
- }
-#endif
- } else {
- cp =3D np;
- }
- if (*cp && (*cp !=3D ':')) {
- err =3D EINVAL;
+ err =3D disk_parsedev(idev, np, path);
+ if (err !=3D 0)
goto fail;
- }
-
- idev->d_unit =3D unit;
- idev->d_slice =3D slice;
- idev->d_partition =3D partition;
- if (path !=3D NULL)
- *path =3D (*cp =3D=3D 0) ? cp : cp + 1;
break;
=20
case DEVT_CD:
@@ -219,8 +165,7 @@
{
struct disk_devdesc *dev =3D (struct disk_devdesc *)vdev;
static char buf[128]; /* XXX device length constant? */
- char *cp;
- =20
+
switch(dev->d_type) {
case DEVT_NONE:
strcpy(buf, "(no device)");
@@ -231,22 +176,7 @@
break;
=20
case DEVT_DISK:
- cp =3D buf;
- cp +=3D sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_unit);
-#ifdef LOADER_GPT_SUPPORT
- if (dev->d_partition =3D=3D 0xff) {
- cp +=3D sprintf(cp, "p%d", dev->d_slice);
- } else {
-#endif
- if (dev->d_slice > 0)
- cp +=3D sprintf(cp, "s%d", dev->d_slice);
- if (dev->d_partition >=3D 0)
- cp +=3D sprintf(cp, "%c", dev->d_partition + 'a');
-#ifdef LOADER_GPT_SUPPORT
- }
-#endif
- strcat(cp, ":");
- break;
+ return (disk_fmtdev(vdev));
=20
case DEVT_NET:
case DEVT_ZFS:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/main.c
--- a/head/sys/boot/userboot/userboot/main.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/userboot/main.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/main.c 223695 2011-06-=
30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/main.c 239073 2012-08-=
05 17:04:58Z ae $");
=20
#include <stand.h>
#include <string.h>
@@ -36,6 +36,8 @@
#include "disk.h"
#include "libuserboot.h"
=20
+#define USERBOOT_VERSION USERBOOT_VERSION_2
+
struct loader_callbacks_v1 *callbacks;
void *callbacks_arg;
=20
@@ -70,7 +72,7 @@
static char malloc[512*1024];
int i;
=20
- if (version !=3D USERBOOT_VERSION_1)
+ if (version !=3D USERBOOT_VERSION)
abort();
=20
callbacks =3D cb;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/userbo=
ot_disk.c
--- a/head/sys/boot/userboot/userboot/userboot_disk.c Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/boot/userboot/userboot/userboot_disk.c Fri Aug 10 14:19:25 2=
012 +0300
@@ -25,29 +25,37 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/userboot_disk.c 223695=
2011-06-30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/userboot_disk.c 239058=
2012-08-05 12:15:15Z ae $");
=20
/*
* Userboot disk image handling.
*/
=20
+#include <sys/disk.h>
#include <stand.h>
-
#include <stdarg.h>
-#include <uuid.h>
-
#include <bootstrap.h>
=20
#include "disk.h"
#include "libuserboot.h"
=20
+struct userdisk_info {
+ uint64_t mediasize;
+ uint16_t sectorsize;
+};
+
int userboot_disk_maxunit =3D 0;
=20
+static int userdisk_maxunit =3D 0;
+static struct userdisk_info *ud_info;
+
static int userdisk_init(void);
+static void userdisk_cleanup(void);
static int userdisk_strategy(void *devdata, int flag, daddr_t dblk,
size_t size, char *buf, size_t *rsize);
static int userdisk_open(struct open_file *f, ...);
static int userdisk_close(struct open_file *f);
+static int userdisk_ioctl(struct open_file *f, u_long cmd, void *data);
static void userdisk_print(int verbose);
=20
struct devsw userboot_disk =3D {
@@ -57,41 +65,70 @@
userdisk_strategy,
userdisk_open,
userdisk_close,
- noioctl,
+ userdisk_ioctl,
userdisk_print,
- NULL
+ userdisk_cleanup
};
=20
/*
- * Nothing to do here.
+ * Initialize userdisk_info structure for each disk.
*/
static int
userdisk_init(void)
{
+ off_t mediasize;
+ u_int sectorsize;
+ int i;
+
+ userdisk_maxunit =3D userboot_disk_maxunit;
+ if (userdisk_maxunit > 0) {
+ ud_info =3D malloc(sizeof(*ud_info) * userdisk_maxunit);
+ if (ud_info =3D=3D NULL)
+ return (ENOMEM);
+ for (i =3D 0; i < userdisk_maxunit; i++) {
+ if (CALLBACK(diskioctl, i, DIOCGSECTORSIZE,
+ §orsize) !=3D 0 || CALLBACK(diskioctl, i,
+ DIOCGMEDIASIZE, &mediasize) !=3D 0)
+ return (ENXIO);
+ ud_info[i].mediasize =3D mediasize;
+ ud_info[i].sectorsize =3D sectorsize;
+ }
+ }
=20
return(0);
}
=20
+static void
+userdisk_cleanup(void)
+{
+
+ if (userdisk_maxunit > 0)
+ free(ud_info);
+}
+
/*
* Print information about disks
*/
static void
userdisk_print(int verbose)
{
- int i;
- char line[80];
- struct disk_devdesc dev;
+ struct disk_devdesc dev;
+ char line[80];
+ int i;
=20
- for (i =3D 0; i < userboot_disk_maxunit; i++) {
+ for (i =3D 0; i < userdisk_maxunit; i++) {
sprintf(line, " disk%d: Guest drive image\n", i);
pager_output(line);
dev.d_dev =3D &userboot_disk;
dev.d_unit =3D i;
dev.d_slice =3D -1;
dev.d_partition =3D -1;
- dev.d_offset =3D 0;
- sprintf(line, " disk%d", i);
- disk_print(&dev, line, verbose);
+ if (disk_open(&dev, ud_info[i].mediasize,
+ ud_info[i].sectorsize) =3D=3D 0) {
+ sprintf(line, " disk%d", i);
+ disk_print(&dev, line, verbose);
+ disk_close(&dev);
+ }
}
}
=20
@@ -108,17 +145,20 @@
dev =3D va_arg(ap, struct disk_devdesc *);
va_end(ap);
=20
- if (dev->d_unit < 0 || dev->d_unit >=3D userboot_disk_maxunit)
+ if (dev->d_unit < 0 || dev->d_unit >=3D userdisk_maxunit)
return (EIO);
=20
- return (disk_open(dev));
+ return (disk_open(dev, ud_info[dev->d_unit].mediasize,
+ ud_info[dev->d_unit].sectorsize));
}
=20
static int
userdisk_close(struct open_file *f)
{
+ struct disk_devdesc *dev;
=20
- return(0);
+ dev =3D (struct disk_devdesc *)f->f_devdata;
+ return (disk_close(dev));
}
=20
static int
@@ -136,7 +176,7 @@
return (EINVAL);
if (rsize)
*rsize =3D 0;
- off =3D (dblk + dev->d_offset) * DISK_SECSIZE;
+ off =3D (dblk + dev->d_offset) * ud_info[dev->d_unit].sectorsize;
rc =3D CALLBACK(diskread, dev->d_unit, off, buf, size, &resid);
if (rc)
return (rc);
@@ -144,3 +184,12 @@
*rsize =3D size - resid;
return (0);
}
+
+static int
+userdisk_ioctl(struct open_file *f, u_long cmd, void *data)
+{
+ struct disk_devdesc *dev;
+
+ dev =3D (struct disk_devdesc *)f->f_devdata;
+ return (CALLBACK(diskioctl, dev->d_unit, cmd, data));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/zfs/Makefile
--- a/head/sys/boot/zfs/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/zfs/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD$
+# $FreeBSD: head/sys/boot/zfs/Makefile 238795 2012-07-26 10:10:54Z ache $
=20
LIB=3D zfsboot
INTERNALLIB=3D
@@ -33,5 +33,7 @@
.include <bsd.lib.mk>
=20
.if ${MACHINE_CPUARCH} =3D=3D "amd64"
+.if !exists(machine)
beforedepend ${OBJS}: machine
.endif
+.endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/zfs/zfs.c
--- a/head/sys/boot/zfs/zfs.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/zfs/zfs.c Fri Aug 10 14:19:25 2012 +0300
@@ -23,20 +23,21 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/boot/zfs/zfs.c 235394 2012-05-13 10:54:43Z avg $
+ * $FreeBSD: head/sys/boot/zfs/zfs.c 239068 2012-08-05 14:48:28Z ae $
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/zfs/zfs.c 235394 2012-05-13 10:54:43Z av=
g $");
+__FBSDID("$FreeBSD: head/sys/boot/zfs/zfs.c 239068 2012-08-05 14:48:28Z ae=
$");
=20
/*
* Stand-alone file reading package.
*/
=20
+#include <sys/disk.h>
#include <sys/param.h>
-#include <sys/disklabel.h>
#include <sys/time.h>
#include <sys/queue.h>
+#include <part.h>
#include <stddef.h>
#include <stdarg.h>
#include <string.h>
@@ -376,21 +377,103 @@
return (0);
}
=20
+struct zfs_probe_args {
+ int fd;
+ const char *devname;
+ uint64_t *pool_guid;
+ uint16_t secsz;
+};
+
+static int
+zfs_diskread(void *arg, void *buf, size_t blocks, off_t offset)
+{
+ struct zfs_probe_args *ppa;
+
+ ppa =3D (struct zfs_probe_args *)arg;
+ return (vdev_read(NULL, (void *)(uintptr_t)ppa->fd,
+ offset * ppa->secsz, buf, blocks * ppa->secsz));
+}
+
+static int
+zfs_probe(int fd, uint64_t *pool_guid)
+{
+ spa_t *spa;
+ int ret;
+
+ ret =3D vdev_probe(vdev_read, (void *)(uintptr_t)fd, &spa);
+ if (ret =3D=3D 0 && pool_guid !=3D NULL)
+ *pool_guid =3D spa->spa_guid;
+ return (ret);
+}
+
+static void
+zfs_probe_partition(void *arg, const char *partname,
+ const struct ptable_entry *part)
+{
+ struct zfs_probe_args *ppa, pa;
+ struct ptable *table;
+ char devname[32];
+ int ret;
+
+ /* Probe only freebsd-zfs and freebsd partitions */
+ if (part->type !=3D PART_FREEBSD &&
+ part->type !=3D PART_FREEBSD_ZFS)
+ return;
+
+ ppa =3D (struct zfs_probe_args *)arg;
+ strncpy(devname, ppa->devname, strlen(ppa->devname) - 1);
+ sprintf(devname, "%s%s:", devname, partname);
+ pa.fd =3D open(devname, O_RDONLY);
+ if (pa.fd =3D=3D -1)
+ return;
+ ret =3D zfs_probe(pa.fd, ppa->pool_guid);
+ if (ret =3D=3D 0)
+ return;
+ /* Do we have BSD label here? */
+ if (part->type =3D=3D PART_FREEBSD) {
+ pa.devname =3D devname;
+ pa.pool_guid =3D ppa->pool_guid;
+ pa.secsz =3D ppa->secsz;
+ table =3D ptable_open(&pa, part->end - part->start + 1,
+ ppa->secsz, zfs_diskread);
+ if (table !=3D NULL) {
+ ptable_iterate(table, &pa, zfs_probe_partition);
+ ptable_close(table);
+ }
+ }
+ close(pa.fd);
+}
+
int
zfs_probe_dev(const char *devname, uint64_t *pool_guid)
{
- spa_t *spa;
- int fd;
+ struct ptable *table;
+ struct zfs_probe_args pa;
+ off_t mediasz;
int ret;
=20
- fd =3D open(devname, O_RDONLY);
- if (fd =3D=3D -1)
+ pa.fd =3D open(devname, O_RDONLY);
+ if (pa.fd =3D=3D -1)
return (ENXIO);
- ret =3D vdev_probe(vdev_read, (void *)(uintptr_t)fd, &spa);
- if (ret !=3D 0)
- close(fd);
- else if (pool_guid !=3D NULL)
- *pool_guid =3D spa->spa_guid;
+ /* Probe the whole disk */
+ ret =3D zfs_probe(pa.fd, pool_guid);
+ if (ret =3D=3D 0)
+ return (0);
+ /* Probe each partition */
+ ret =3D ioctl(pa.fd, DIOCGMEDIASIZE, &mediasz);
+ if (ret =3D=3D 0)
+ ret =3D ioctl(pa.fd, DIOCGSECTORSIZE, &pa.secsz);
+ if (ret =3D=3D 0) {
+ pa.devname =3D devname;
+ pa.pool_guid =3D pool_guid;
+ table =3D ptable_open(&pa, mediasz / pa.secsz, pa.secsz,
+ zfs_diskread);
+ if (table !=3D NULL) {
+ ptable_iterate(table, &pa, zfs_probe_partition);
+ ptable_close(table);
+ }
+ }
+ close(pa.fd);
return (0);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/ata/ata_all.h
--- a/head/sys/cam/ata/ata_all.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/ata/ata_all.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/sys/cam/ata/ata_all.h 235897 2012-05-24 11:07:39Z mav $
+ * $FreeBSD: head/sys/cam/ata/ata_all.h 238886 2012-07-29 11:51:48Z mav $
*/
=20
#ifndef CAM_ATA_ALL_H
@@ -35,6 +35,7 @@
struct cam_periph;
union ccb;
=20
+#define SID_AEN 0x04 /* Abuse inq_flags bit to track enabled AEN. */
#define SID_DMA 0x10 /* Abuse inq_flags bit to track enabled DMA. */
=20
struct ata_cmd {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/ata/ata_xpt.c
--- a/head/sys/cam/ata/ata_xpt.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/ata/ata_xpt.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/ata/ata_xpt.c 236814 2012-06-09 13:07:44Z=
mav $");
+__FBSDID("$FreeBSD: head/sys/cam/ata/ata_xpt.c 238886 2012-07-29 11:51:48Z=
mav $");
=20
#include <sys/param.h>
#include <sys/bus.h>
@@ -468,6 +468,12 @@
0, 0x02);
break;
case PROBE_SETAN:
+ /* Remember what transport thinks about AEN. */
+ if (softc->caps & CTS_SATA_CAPS_H_AN)
+ path->device->inq_flags |=3D SID_AEN;
+ else
+ path->device->inq_flags &=3D ~SID_AEN;
+ xpt_async(AC_GETDEV_CHANGED, path, NULL);
cam_fill_ataio(ataio,
1,
probedone,
@@ -1154,6 +1160,12 @@
cts.xport_specific.sata.valid =3D CTS_SATA_VALID_CAPS;
xpt_action((union ccb *)&cts);
softc->caps =3D caps;
+ /* Remember what transport thinks about AEN. */
+ if (softc->caps & CTS_SATA_CAPS_H_AN)
+ path->device->inq_flags |=3D SID_AEN;
+ else
+ path->device->inq_flags &=3D ~SID_AEN;
+ xpt_async(AC_GETDEV_CHANGED, path, NULL);
if (periph->path->device->flags & CAM_DEV_UNCONFIGURED) {
path->device->flags &=3D ~CAM_DEV_UNCONFIGURED;
xpt_acquire_device(path->device);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/cam_ccb.h
--- a/head/sys/cam/cam_ccb.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/cam_ccb.h Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/cam/cam_ccb.h 236437 2012-06-02 08:29:07Z mav $
+ * $FreeBSD: head/sys/cam/cam_ccb.h 238886 2012-07-29 11:51:48Z mav $
*/
=20
#ifndef _CAM_CAM_CCB_H
@@ -755,6 +755,7 @@
* Definitions for the asynchronous callback CCB fields.
*/
typedef enum {
+ AC_UNIT_ATTENTION =3D 0x4000,/* Device reported UNIT ATTENTION */
AC_ADVINFO_CHANGED =3D 0x2000,/* Advance info might have changes */
AC_CONTRACT =3D 0x1000,/* A contractual callback */
AC_GETDEV_CHANGED =3D 0x800,/* Getdev info might have changed */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/cam_periph.c
--- a/head/sys/cam/cam_periph.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/cam_periph.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/cam_periph.c 237682 2012-06-28 03:36:13Z =
ken $");
+__FBSDID("$FreeBSD: head/sys/cam/cam_periph.c 238886 2012-07-29 11:51:48Z =
mav $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -1593,6 +1593,7 @@
const char *action_string;
cam_status status;
int frozen, error, openings, print, lost_device;
+ int error_code, sense_key, asc, ascq;
u_int32_t relsim_flags, timeout;
=20
print =3D 1;
@@ -1759,6 +1760,12 @@
xpt_async(AC_LOST_DEVICE, newpath, NULL);
xpt_free_path(newpath);
}
+
+ /* Broadcast UNIT ATTENTIONs to all periphs. */
+ } else if (scsi_extract_sense_ccb(ccb,
+ &error_code, &sense_key, &asc, &ascq) &&
+ sense_key =3D=3D SSD_KEY_UNIT_ATTENTION) {
+ xpt_async(AC_UNIT_ATTENTION, orig_ccb->ccb_h.path, orig_ccb);
}
=20
/* Attempt a retry */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/cam_xpt.c
--- a/head/sys/cam/cam_xpt.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/cam_xpt.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/cam_xpt.c 237398 2012-06-21 14:35:46Z mav=
$");
+__FBSDID("$FreeBSD: head/sys/cam/cam_xpt.c 238886 2012-07-29 11:51:48Z mav=
$");
=20
#include <sys/param.h>
#include <sys/bus.h>
@@ -4055,6 +4055,7 @@
case AC_GETDEV_CHANGED: return ("AC_GETDEV_CHANGED");
case AC_CONTRACT: return ("AC_CONTRACT");
case AC_ADVINFO_CHANGED: return ("AC_ADVINFO_CHANGED");
+ case AC_UNIT_ATTENTION: return ("AC_UNIT_ATTENTION");
}
return ("AC_UNKNOWN");
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/ctl/scsi_ctl.c
--- a/head/sys/cam/ctl/scsi_ctl.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/ctl/scsi_ctl.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/ctl/scsi_ctl.c 237726 2012-06-28 19:39:30=
Z ken $");
+__FBSDID("$FreeBSD: head/sys/cam/ctl/scsi_ctl.c 238870 2012-07-28 20:08:14=
Z mjacob $");
=20
#include <sys/param.h>
#include <sys/queue.h>
@@ -1081,11 +1081,81 @@
}
}
=20
+static int
+ctlfe_adjust_cdb(struct ccb_accept_tio *atio, uint32_t offset)
+{
+ uint64_t lba;
+ uint32_t num_blocks, nbc;
+ uint8_t *cmdbyt =3D (atio->ccb_h.flags & CAM_CDB_POINTER)?
+ atio->cdb_io.cdb_ptr : atio->cdb_io.cdb_bytes;
+
+ nbc =3D offset >> 9; /* ASSUMING 512 BYTE BLOCKS */
+
+ switch (cmdbyt[0]) {
+ case READ_6:
+ case WRITE_6:
+ {
+ struct scsi_rw_6 *cdb =3D (struct scsi_rw_6 *)cmdbyt;
+ lba =3D scsi_3btoul(cdb->addr);
+ lba &=3D 0x1fffff;
+ num_blocks =3D cdb->length;
+ if (num_blocks =3D=3D 0)
+ num_blocks =3D 256;
+ lba +=3D nbc;
+ num_blocks -=3D nbc;
+ scsi_ulto3b(lba, cdb->addr);
+ cdb->length =3D num_blocks;
+ break;
+ }
+ case READ_10:
+ case WRITE_10:
+ {
+ struct scsi_rw_10 *cdb =3D (struct scsi_rw_10 *)cmdbyt;
+ lba =3D scsi_4btoul(cdb->addr);
+ num_blocks =3D scsi_2btoul(cdb->length);
+ lba +=3D nbc;
+ num_blocks -=3D nbc;
+ scsi_ulto4b(lba, cdb->addr);
+ scsi_ulto2b(num_blocks, cdb->length);
+ break;
+ }
+ case READ_12:
+ case WRITE_12:
+ {
+ struct scsi_rw_12 *cdb =3D (struct scsi_rw_12 *)cmdbyt;
+ lba =3D scsi_4btoul(cdb->addr);
+ num_blocks =3D scsi_4btoul(cdb->length);
+ lba +=3D nbc;
+ num_blocks -=3D nbc;
+ scsi_ulto4b(lba, cdb->addr);
+ scsi_ulto4b(num_blocks, cdb->length);
+ break;
+ }
+ case READ_16:
+ case WRITE_16:
+ {
+ struct scsi_rw_16 *cdb =3D (struct scsi_rw_16 *)cmdbyt;
+ lba =3D scsi_8btou64(cdb->addr);
+ num_blocks =3D scsi_4btoul(cdb->length);
+ lba +=3D nbc;
+ num_blocks -=3D nbc;
+ scsi_u64to8b(lba, cdb->addr);
+ scsi_ulto4b(num_blocks, cdb->length);
+ break;
+ }
+ default:
+ return -1;
+ }
+ return (0);
+}
+
static void
ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
{
struct ctlfe_lun_softc *softc;
struct ctlfe_softc *bus_softc;
+ struct ccb_accept_tio *atio =3D NULL;
+ union ctl_io *io =3D NULL;
=20
#ifdef CTLFE_DEBUG
printf("%s: entered, func_code =3D %#x, type =3D %#lx\n", __func__,
@@ -1123,13 +1193,12 @@
}
switch (done_ccb->ccb_h.func_code) {
case XPT_ACCEPT_TARGET_IO: {
- union ctl_io *io;
- struct ccb_accept_tio *atio;
=20
atio =3D &done_ccb->atio;
=20
softc->atios_returned++;
=20
+ resubmit:
/*
* Allocate a ctl_io, pass it to CTL, and wait for the
* datamove or done.
@@ -1213,8 +1282,8 @@
break;
}
case XPT_CONT_TARGET_IO: {
- struct ccb_accept_tio *atio;
- union ctl_io *io;
+ int srr =3D 0;
+ uint32_t srr_off =3D 0;
=20
atio =3D (struct ccb_accept_tio *)done_ccb->ccb_h.ccb_atio;
io =3D (union ctl_io *)atio->ccb_h.io_ptr;
@@ -1225,6 +1294,57 @@
__func__, atio->tag_id, done_ccb->ccb_h.flags);
#endif
/*
+ * Handle SRR case were the data pointer is pushed back hack
+ */
+ if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM_MESSAGE_RECV
+ && done_ccb->csio.msg_ptr !=3D NULL
+ && done_ccb->csio.msg_ptr[0] =3D=3D MSG_EXTENDED
+ && done_ccb->csio.msg_ptr[1] =3D=3D 5
+ && done_ccb->csio.msg_ptr[2] =3D=3D 0) {
+ srr =3D 1;
+ srr_off =3D
+ (done_ccb->csio.msg_ptr[3] << 24)
+ | (done_ccb->csio.msg_ptr[4] << 16)
+ | (done_ccb->csio.msg_ptr[5] << 8)
+ | (done_ccb->csio.msg_ptr[6]);
+ }
+
+ if (srr && (done_ccb->ccb_h.flags & CAM_SEND_STATUS)) {
+ /*
+ * If status was being sent, the back end data is now
+ * history. Hack it up and resubmit a new command with
+ * the CDB adjusted. If the SIM does the right thing,
+ * all of the resid math should work.
+ */
+ softc->ccbs_freed++;
+ xpt_release_ccb(done_ccb);
+ ctl_free_io(io);
+ if (ctlfe_adjust_cdb(atio, srr_off) =3D=3D 0) {
+ done_ccb =3D (union ccb *)atio;
+ goto resubmit;
+ }
+ /*
+ * Fall through to doom....
+ */
+ } else if (srr) {
+ /*
+ * If we have an srr and we're still sending data, we
+ * should be able to adjust offsets and cycle again.
+ */
+ io->scsiio.kern_rel_offset =3D
+ io->scsiio.ext_data_filled =3D srr_off;
+ io->scsiio.ext_data_len =3D io->scsiio.kern_total_len -
+ io->scsiio.kern_rel_offset;
+ softc->ccbs_freed++;
+ io->scsiio.io_hdr.status =3D CTL_STATUS_NONE;
+ xpt_release_ccb(done_ccb);
+ TAILQ_INSERT_HEAD(&softc->work_queue, &atio->ccb_h,
+ periph_links.tqe);
+ xpt_schedule(periph, /*priority*/ 1);
+ return;
+ }
+
+ /*
* If we were sending status back to the initiator, free up
* resources. If we were doing a datamove, call the
* datamove done routine.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_cd.c
--- a/head/sys/cam/scsi/scsi_cd.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_cd.c Fri Aug 10 14:19:25 2012 +0300
@@ -46,7 +46,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_cd.c 237689 2012-06-28 07:01:48=
Z imp $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_cd.c 238886 2012-07-29 11:51:48=
Z mav $");
=20
#include "opt_cd.h"
=20
@@ -97,6 +97,7 @@
CD_FLAG_NEW_DISC =3D 0x0002,
CD_FLAG_DISC_LOCKED =3D 0x0004,
CD_FLAG_DISC_REMOVABLE =3D 0x0008,
+ CD_FLAG_SAW_MEDIA =3D 0x0010,
CD_FLAG_CHANGER =3D 0x0040,
CD_FLAG_ACTIVE =3D 0x0080,
CD_FLAG_SCHED_ON_COMP =3D 0x0100,
@@ -110,6 +111,7 @@
CD_CCB_PROBE =3D 0x01,
CD_CCB_BUFFER_IO =3D 0x02,
CD_CCB_WAITING =3D 0x03,
+ CD_CCB_TUR =3D 0x04,
CD_CCB_TYPE_MASK =3D 0x0F,
CD_CCB_RETRY_UA =3D 0x10
} cd_ccb_state;
@@ -154,12 +156,14 @@
struct cam_periph *periph;
int minimum_command_size;
int outstanding_cmds;
+ int tur;
struct task sysctl_task;
struct sysctl_ctx_list sysctl_ctx;
struct sysctl_oid *sysctl_tree;
STAILQ_HEAD(, cd_mode_params) mode_queue;
struct cd_tocdata toc;
struct disk *disk;
+ struct callout mediapoll_c;
};
=20
struct cd_page_sizes {
@@ -281,6 +285,7 @@
struct dvd_authinfo *authinfo);
static int cdreaddvdstructure(struct cam_periph *periph,
struct dvd_struct *dvdstruct);
+static timeout_t cdmediapoll;
=20
static struct periph_driver cddriver =3D
{
@@ -290,6 +295,9 @@
=20
PERIPHDRIVER_DECLARE(cd, cddriver);
=20
+#ifndef CD_DEFAULT_POLL_PERIOD
+#define CD_DEFAULT_POLL_PERIOD 3
+#endif
#ifndef CD_DEFAULT_RETRY
#define CD_DEFAULT_RETRY 4
#endif
@@ -303,6 +311,7 @@
#define CHANGER_MAX_BUSY_SECONDS 15
#endif
=20
+static int cd_poll_period =3D CD_DEFAULT_POLL_PERIOD;
static int cd_retry_count =3D CD_DEFAULT_RETRY;
static int cd_timeout =3D CD_DEFAULT_TIMEOUT;
static int changer_min_busy_seconds =3D CHANGER_MIN_BUSY_SECONDS;
@@ -311,6 +320,9 @@
static SYSCTL_NODE(_kern_cam, OID_AUTO, cd, CTLFLAG_RD, 0, "CAM CDROM driv=
er");
static SYSCTL_NODE(_kern_cam_cd, OID_AUTO, changer, CTLFLAG_RD, 0,
"CD Changer");
+SYSCTL_INT(_kern_cam_cd, OID_AUTO, poll_period, CTLFLAG_RW,
+ &cd_poll_period, 0, "Media polling period in seconds");
+TUNABLE_INT("kern.cam.cd.poll_period", &cd_poll_period);
SYSCTL_INT(_kern_cam_cd, OID_AUTO, retry_count, CTLFLAG_RW,
&cd_retry_count, 0, "Normal I/O retry count");
TUNABLE_INT("kern.cam.cd.retry_count", &cd_retry_count);
@@ -494,6 +506,7 @@
xpt_print(periph->path, "can't remove sysctl context\n");
}
=20
+ callout_drain(&softc->mediapoll_c);
disk_destroy(softc->disk);
free(softc, M_DEVBUF);
cam_periph_lock(periph);
@@ -504,6 +517,7 @@
struct cam_path *path, void *arg)
{
struct cam_periph *periph;
+ struct cd_softc *softc;
=20
periph =3D (struct cam_periph *)callback_arg;
switch (code) {
@@ -541,10 +555,39 @@
=20
break;
}
+ case AC_UNIT_ATTENTION:
+ {
+ union ccb *ccb;
+ int error_code, sense_key, asc, ascq;
+
+ softc =3D (struct cd_softc *)periph->softc;
+ ccb =3D (union ccb *)arg;
+
+ /*
+ * Handle all media change UNIT ATTENTIONs except
+ * our own, as they will be handled by cderror().
+ */
+ if (xpt_path_periph(ccb->ccb_h.path) !=3D periph &&
+ scsi_extract_sense_ccb(ccb,
+ &error_code, &sense_key, &asc, &ascq)) {
+ if (asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ }
+ cam_periph_async(periph, code, path, arg);
+ break;
+ }
+ case AC_SCSI_AEN:
+ softc =3D (struct cd_softc *)periph->softc;
+ if (softc->state =3D=3D CD_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+ softc->tur =3D 1;
+ xpt_schedule(periph, CAM_PRIORITY_DEV);
+ }
+ }
+ /* FALLTHROUGH */
case AC_SENT_BDR:
case AC_BUS_RESET:
{
- struct cd_softc *softc;
struct ccb_hdr *ccbh;
=20
softc =3D (struct cd_softc *)periph->softc;
@@ -788,8 +831,8 @@
* Add an async callback so that we get
* notified if this device goes away.
*/
- xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE,
- cdasync, periph, periph->path);
+ xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE |
+ AC_SCSI_AEN | AC_UNIT_ATTENTION, cdasync, periph, periph->path);
=20
/*
* If the target lun is greater than 0, we most likely have a CD
@@ -1005,6 +1048,17 @@
}
}
=20
+ /*
+ * Schedule a periodic media polling events.
+ */
+ callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0);
+ if ((softc->flags & CD_FLAG_DISC_REMOVABLE) &&
+ (softc->flags & CD_FLAG_CHANGER) =3D=3D 0 &&
+ (cgd->inq_flags & SID_AEN) =3D=3D 0 &&
+ cd_poll_period !=3D 0)
+ callout_reset(&softc->mediapoll_c, cd_poll_period * hz,
+ cdmediapoll, periph);
+
cdregisterexit:
=20
if ((softc->flags & CD_FLAG_CHANGER) =3D=3D 0)
@@ -1500,8 +1554,25 @@
periph->immediate_priority =3D CAM_PRIORITY_NONE;
wakeup(&periph->ccb_list);
} else if (bp =3D=3D NULL) {
- xpt_release_ccb(start_ccb);
+ if (softc->tur) {
+ softc->tur =3D 0;
+ csio =3D &start_ccb->csio;
+ scsi_test_unit_ready(csio,
+ /*retries*/ cd_retry_count,
+ cddone,
+ MSG_SIMPLE_Q_TAG,
+ SSD_FULL_SIZE,
+ cd_timeout);
+ start_ccb->ccb_h.ccb_bp =3D NULL;
+ start_ccb->ccb_h.ccb_state =3D CD_CCB_TUR;
+ xpt_action(start_ccb);
+ } else
+ xpt_release_ccb(start_ccb);
} else {
+ if (softc->tur) {
+ softc->tur =3D 0;
+ cam_periph_release_locked(periph);
+ }
bioq_remove(&softc->bio_queue, bp);
=20
scsi_read_write(&start_ccb->csio,
@@ -1545,7 +1616,7 @@
=20
xpt_action(start_ccb);
}
- if (bp !=3D NULL) {
+ if (bp !=3D NULL || softc->tur) {
/* Have more work to do, so ensure we stay scheduled */
xpt_schedule(periph, CAM_PRIORITY_NORMAL);
}
@@ -1840,6 +1911,25 @@
wakeup(&done_ccb->ccb_h.cbfcnp);
return;
}
+ case CD_CCB_TUR:
+ {
+ if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
+
+ if (cderror(done_ccb, CAM_RETRY_SELTO,
+ SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) =3D=3D
+ ERESTART)
+ return;
+ if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) !=3D 0)
+ cam_release_devq(done_ccb->ccb_h.path,
+ /*relsim_flags*/0,
+ /*reduction*/0,
+ /*timeout*/0,
+ /*getcount_only*/0);
+ }
+ xpt_release_ccb(done_ccb);
+ cam_periph_release_locked(periph);
+ return;
+ }
default:
break;
}
@@ -2830,7 +2920,7 @@
cdprevent(periph, PR_ALLOW);
return (error);
} else {
- softc->flags |=3D CD_FLAG_VALID_MEDIA;
+ softc->flags |=3D CD_FLAG_SAW_MEDIA | CD_FLAG_VALID_MEDIA;
softc->disk->d_sectorsize =3D softc->params.blksize;
softc->disk->d_mediasize =3D
(off_t)softc->params.blksize * softc->params.disksize;
@@ -3175,6 +3265,14 @@
&error_code, &sense_key, &asc, &ascq)) {
if (sense_key =3D=3D SSD_KEY_ILLEGAL_REQUEST)
error =3D cd6byteworkaround(ccb);
+ else if (sense_key =3D=3D SSD_KEY_UNIT_ATTENTION &&
+ asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ else if (sense_key =3D=3D SSD_KEY_NOT_READY &&
+ asc =3D=3D 0x3a && (softc->flags & CD_FLAG_SAW_MEDIA)) {
+ softc->flags &=3D ~CD_FLAG_SAW_MEDIA;
+ disk_media_gone(softc->disk, M_NOWAIT);
+ }
}
=20
if (error =3D=3D ERESTART)
@@ -3190,6 +3288,26 @@
&softc->saved_ccb));
}
=20
+static void
+cdmediapoll(void *arg)
+{
+ struct cam_periph *periph =3D arg;
+ struct cd_softc *softc =3D periph->softc;
+
+ if (softc->flags & CD_FLAG_CHANGER)
+ return;
+
+ if (softc->state =3D=3D CD_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+ softc->tur =3D 1;
+ xpt_schedule(periph, CAM_PRIORITY_DEV);
+ }
+ }
+ /* Queue us up again */
+ if (cd_poll_period !=3D 0)
+ callout_schedule(&softc->mediapoll_c, cd_poll_period * hz);
+}
+
/*
* Read table of contents
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_da.c
--- a/head/sys/cam/scsi/scsi_da.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_da.c Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_da.c 238437 2012-07-14 02:59:11=
Z mjacob $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_da.c 238886 2012-07-29 11:51:48=
Z mav $");
=20
#include <sys/param.h>
=20
@@ -77,6 +77,7 @@
DA_FLAG_NEW_PACK =3D 0x002,
DA_FLAG_PACK_LOCKED =3D 0x004,
DA_FLAG_PACK_REMOVABLE =3D 0x008,
+ DA_FLAG_SAW_MEDIA =3D 0x010,
DA_FLAG_NEED_OTAG =3D 0x020,
DA_FLAG_WENT_IDLE =3D 0x040,
DA_FLAG_RETRY_UA =3D 0x080,
@@ -101,6 +102,7 @@
DA_CCB_WAITING =3D 0x04,
DA_CCB_DUMP =3D 0x05,
DA_CCB_DELETE =3D 0x06,
+ DA_CCB_TUR =3D 0x07,
DA_CCB_TYPE_MASK =3D 0x0F,
DA_CCB_RETRY_UA =3D 0x10
} da_ccb_state;
@@ -150,6 +152,7 @@
int unmap_max_ranges;
int unmap_max_lba;
int delete_running;
+ int tur;
da_delete_methods delete_method;
struct disk_params params;
struct disk *disk;
@@ -161,6 +164,7 @@
uint64_t wwpn;
uint8_t unmap_buf[UNMAP_MAX_RANGES * 16 + 8];
struct scsi_read_capacity_data_long rcaplong;
+ struct callout mediapoll_c;
};
=20
struct da_quirk_entry {
@@ -857,6 +861,11 @@
size_t rcap_size);
static timeout_t dasendorderedtag;
static void dashutdown(void *arg, int howto);
+static timeout_t damediapoll;
+
+#ifndef DA_DEFAULT_POLL_PERIOD
+#define DA_DEFAULT_POLL_PERIOD 3
+#endif
=20
#ifndef DA_DEFAULT_TIMEOUT
#define DA_DEFAULT_TIMEOUT 60 /* Timeout in seconds */
@@ -871,12 +880,16 @@
#endif
=20
=20
+static int da_poll_period =3D DA_DEFAULT_POLL_PERIOD;
static int da_retry_count =3D DA_DEFAULT_RETRY;
static int da_default_timeout =3D DA_DEFAULT_TIMEOUT;
static int da_send_ordered =3D DA_DEFAULT_SEND_ORDERED;
=20
static SYSCTL_NODE(_kern_cam, OID_AUTO, da, CTLFLAG_RD, 0,
"CAM Direct Access Disk driver");
+SYSCTL_INT(_kern_cam_da, OID_AUTO, poll_period, CTLFLAG_RW,
+ &da_poll_period, 0, "Media polling period in seconds");
+TUNABLE_INT("kern.cam.da.poll_period", &da_poll_period);
SYSCTL_INT(_kern_cam_da, OID_AUTO, retry_count, CTLFLAG_RW,
&da_retry_count, 0, "Normal I/O retry count");
TUNABLE_INT("kern.cam.da.retry_count", &da_retry_count);
@@ -966,6 +979,9 @@
(softc->quirks & DA_Q_NO_PREVENT) =3D=3D 0)
daprevent(periph, PR_PREVENT);
=20
+ if (error =3D=3D 0)
+ softc->flags |=3D DA_FLAG_SAW_MEDIA;
+
cam_periph_unhold(periph);
cam_periph_unlock(periph);
=20
@@ -1050,7 +1066,8 @@
=20
/* Check if we have more work to do. */
if (bioq_first(&softc->bio_queue) ||
- (!softc->delete_running && bioq_first(&softc->delete_queue))) {
+ (!softc->delete_running && bioq_first(&softc->delete_queue)) ||
+ softc->tur) {
prio =3D CAM_PRIORITY_NORMAL;
}
=20
@@ -1297,6 +1314,7 @@
xpt_print(periph->path, "can't remove sysctl context\n");
}
=20
+ callout_drain(&softc->mediapoll_c);
disk_destroy(softc->disk);
callout_drain(&softc->sendordered_c);
free(softc, M_DEVBUF);
@@ -1308,6 +1326,7 @@
struct cam_path *path, void *arg)
{
struct cam_periph *periph;
+ struct da_softc *softc;
=20
periph =3D (struct cam_periph *)callback_arg;
switch (code) {
@@ -1359,10 +1378,43 @@
}
break;
}
+ case AC_UNIT_ATTENTION:
+ {
+ union ccb *ccb;
+ int error_code, sense_key, asc, ascq;
+
+ softc =3D (struct da_softc *)periph->softc;
+ ccb =3D (union ccb *)arg;
+
+ /*
+ * Handle all UNIT ATTENTIONs except our own,
+ * as they will be handled by daerror().
+ */
+ if (xpt_path_periph(ccb->ccb_h.path) !=3D periph &&
+ scsi_extract_sense_ccb(ccb,
+ &error_code, &sense_key, &asc, &ascq)) {
+ if (asc =3D=3D 0x2A && ascq =3D=3D 0x09) {
+ xpt_print(ccb->ccb_h.path,
+ "capacity data has changed\n");
+ dareprobe(periph);
+ } else if (asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ }
+ cam_periph_async(periph, code, path, arg);
+ break;
+ }
+ case AC_SCSI_AEN:
+ softc =3D (struct da_softc *)periph->softc;
+ if (softc->state =3D=3D DA_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+ softc->tur =3D 1;
+ xpt_schedule(periph, CAM_PRIORITY_DEV);
+ }
+ }
+ /* FALLTHROUGH */
case AC_SENT_BDR:
case AC_BUS_RESET:
{
- struct da_softc *softc;
struct ccb_hdr *ccbh;
=20
softc =3D (struct da_softc *)periph->softc;
@@ -1698,9 +1750,9 @@
* fine without them and the only alternative
* would be to not attach the device on failure.
*/
- xpt_register_async(AC_SENT_BDR | AC_BUS_RESET
- | AC_LOST_DEVICE | AC_ADVINFO_CHANGED,
- daasync, periph, periph->path);
+ xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE |
+ AC_ADVINFO_CHANGED | AC_SCSI_AEN | AC_UNIT_ATTENTION,
+ daasync, periph, periph->path);
=20
/*
* Emit an attribute changed notification just in case=20
@@ -1710,6 +1762,16 @@
*/
disk_attr_changed(softc->disk, "GEOM::physpath", M_NOWAIT);
=20
+ /*
+ * Schedule a periodic media polling events.
+ */
+ callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0);
+ if ((softc->flags & DA_FLAG_PACK_REMOVABLE) &&
+ (cgd->inq_flags & SID_AEN) =3D=3D 0 &&
+ da_poll_period !=3D 0)
+ callout_reset(&softc->mediapoll_c, da_poll_period * hz,
+ damediapoll, periph);
+
xpt_schedule(periph, CAM_PRIORITY_DEV);
=20
return(CAM_REQ_CMP);
@@ -1847,9 +1909,25 @@
/* Run regular command. */
bp =3D bioq_takefirst(&softc->bio_queue);
if (bp =3D=3D NULL) {
- xpt_release_ccb(start_ccb);
+ if (softc->tur) {
+ softc->tur =3D 0;
+ scsi_test_unit_ready(&start_ccb->csio,
+ /*retries*/ da_retry_count,
+ dadone,
+ MSG_SIMPLE_Q_TAG,
+ SSD_FULL_SIZE,
+ da_default_timeout * 1000);
+ start_ccb->ccb_h.ccb_bp =3D NULL;
+ start_ccb->ccb_h.ccb_state =3D DA_CCB_TUR;
+ xpt_action(start_ccb);
+ } else
+ xpt_release_ccb(start_ccb);
break;
}
+ if (softc->tur) {
+ softc->tur =3D 0;
+ cam_periph_release_locked(periph);
+ }
=20
if ((bp->bio_flags & BIO_ORDERED) !=3D 0 ||
(softc->flags & DA_FLAG_NEED_OTAG) !=3D 0) {
@@ -2417,6 +2495,25 @@
case DA_CCB_DUMP:
/* No-op. We're polling */
return;
+ case DA_CCB_TUR:
+ {
+ if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
+
+ if (daerror(done_ccb, CAM_RETRY_SELTO,
+ SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) =3D=3D
+ ERESTART)
+ return;
+ if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) !=3D 0)
+ cam_release_devq(done_ccb->ccb_h.path,
+ /*relsim_flags*/0,
+ /*reduction*/0,
+ /*timeout*/0,
+ /*getcount_only*/0);
+ }
+ xpt_release_ccb(done_ccb);
+ cam_periph_release_locked(periph);
+ return;
+ }
default:
break;
}
@@ -2477,6 +2574,13 @@
xpt_print(periph->path, "capacity data has changed\n");
dareprobe(periph);
sense_flags |=3D SF_NO_PRINT;
+ } else if (sense_key =3D=3D SSD_KEY_UNIT_ATTENTION &&
+ asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ else if (sense_key =3D=3D SSD_KEY_NOT_READY &&
+ asc =3D=3D 0x3a && (softc->flags & DA_FLAG_SAW_MEDIA)) {
+ softc->flags &=3D ~DA_FLAG_SAW_MEDIA;
+ disk_media_gone(softc->disk, M_NOWAIT);
}
}
if (error =3D=3D ERESTART)
@@ -2493,6 +2597,23 @@
}
=20
static void
+damediapoll(void *arg)
+{
+ struct cam_periph *periph =3D arg;
+ struct da_softc *softc =3D periph->softc;
+
+ if (softc->state =3D=3D DA_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+ softc->tur =3D 1;
+ daschedule(periph);
+ }
+ }
+ /* Queue us up again */
+ if (da_poll_period !=3D 0)
+ callout_schedule(&softc->mediapoll_c, da_poll_period * hz);
+}
+
+static void
daprevent(struct cam_periph *periph, int action)
{
struct da_softc *softc;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_enc.c
--- a/head/sys/cam/scsi/scsi_enc.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_enc.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc.c 237328 2012-06-20 17:08:0=
0Z ken $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc.c 238894 2012-07-30 03:00:5=
8Z bz $");
=20
#include <sys/param.h>
=20
@@ -56,8 +56,6 @@
#include <cam/scsi/scsi_enc.h>
#include <cam/scsi/scsi_enc_internal.h>
=20
-#include <opt_enc.h>
-
MALLOC_DEFINE(M_SCSIENC, "SCSI ENC", "SCSI ENC buffers");
=20
/* Enclosure type independent driver */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_enc_safte.c
--- a/head/sys/cam/scsi/scsi_enc_safte.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_enc_safte.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_safte.c 235911 2012-05-24 1=
4:07:44Z mav $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_safte.c 238894 2012-07-30 0=
3:00:58Z bz $");
=20
#include <sys/param.h>
=20
@@ -48,8 +48,6 @@
#include <cam/scsi/scsi_enc_internal.h>
#include <cam/scsi/scsi_message.h>
=20
-#include <opt_enc.h>
-
/*
* SAF-TE Type Device Emulation
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_enc_ses.c
--- a/head/sys/cam/scsi/scsi_enc_ses.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_enc_ses.c Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_ses.c 238739 2012-07-24 13:=
08:43Z mav $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_ses.c 238894 2012-07-30 03:=
00:58Z bz $");
=20
#include <sys/param.h>
=20
@@ -56,8 +56,6 @@
#include <cam/scsi/scsi_enc.h>
#include <cam/scsi/scsi_enc_internal.h>
=20
-#include <opt_enc.h>
-
/* SES Native Type Device Support */
=20
/* SES Diagnostic Page Codes */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/spa.c
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Fri Aug 10 =
14:19:25 2012 +0300
@@ -2172,7 +2172,7 @@
=20
if (spa_version(spa) >=3D SPA_VERSION_FEATURES) {
boolean_t missing_feat_read =3D B_FALSE;
- nvlist_t *unsup_feat;
+ nvlist_t *unsup_feat, *enabled_feat;
=20
if (spa_dir_prop(spa, DMU_POOL_FEATURES_FOR_READ,
&spa->spa_feat_for_read_obj) !=3D 0) {
@@ -2189,27 +2189,32 @@
return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO));
}
=20
- VERIFY(nvlist_alloc(&unsup_feat, NV_UNIQUE_NAME, KM_SLEEP) =3D=3D
- 0);
+ enabled_feat =3D fnvlist_alloc();
+ unsup_feat =3D fnvlist_alloc();
=20
if (!feature_is_supported(spa->spa_meta_objset,
spa->spa_feat_for_read_obj, spa->spa_feat_desc_obj,
- unsup_feat))
+ unsup_feat, enabled_feat))
missing_feat_read =3D B_TRUE;
=20
if (spa_writeable(spa) || state =3D=3D SPA_LOAD_TRYIMPORT) {
if (!feature_is_supported(spa->spa_meta_objset,
spa->spa_feat_for_write_obj, spa->spa_feat_desc_obj,
- unsup_feat))
+ unsup_feat, enabled_feat)) {
missing_feat_write =3D B_TRUE;
+ }
}
=20
+ fnvlist_add_nvlist(spa->spa_load_info,
+ ZPOOL_CONFIG_ENABLED_FEAT, enabled_feat);
+
if (!nvlist_empty(unsup_feat)) {
- VERIFY(nvlist_add_nvlist(spa->spa_load_info,
- ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat) =3D=3D 0);
+ fnvlist_add_nvlist(spa->spa_load_info,
+ ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat);
}
=20
- nvlist_free(unsup_feat);
+ fnvlist_free(enabled_feat);
+ fnvlist_free(unsup_feat);
=20
if (!missing_feat_read) {
fnvlist_add_boolean(spa->spa_load_info,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/sys/zfeature.h
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h Fr=
i Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
#endif
=20
extern boolean_t feature_is_supported(objset_t *os, uint64_t obj,
- uint64_t desc_obj, nvlist_t *unsup_feat);
+ uint64_t desc_obj, nvlist_t *unsup_feat, nvlist_t *enabled_feat);
=20
struct spa;
extern void spa_feature_create_zap_objects(struct spa *, dmu_tx_t *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/zfeature.c
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c Fri Au=
g 10 14:19:25 2012 +0300
@@ -173,7 +173,7 @@
*/
boolean_t
feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj,
- nvlist_t *unsup_feat)
+ nvlist_t *unsup_feat, nvlist_t *enabled_feat)
{
boolean_t supported;
zap_cursor_t zc;
@@ -186,11 +186,16 @@
ASSERT(za.za_integer_length =3D=3D sizeof (uint64_t) &&
za.za_num_integers =3D=3D 1);
=20
+ if (NULL !=3D enabled_feat) {
+ fnvlist_add_uint64(enabled_feat, za.za_name,
+ za.za_first_integer);
+ }
+
if (za.za_first_integer !=3D 0 &&
!zfeature_is_supported(za.za_name)) {
supported =3D B_FALSE;
=20
- if (unsup_feat !=3D NULL) {
+ if (NULL !=3D unsup_feat) {
char *desc =3D "";
char buf[MAXPATHLEN];
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/zfs_vnops.c
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Fri A=
ug 10 14:19:25 2012 +0300
@@ -71,6 +71,7 @@
#include <sys/sf_buf.h>
#include <sys/sched.h>
#include <sys/acl.h>
+#include <vm/vm_param.h>
#include <vm/vm_pageout.h>
=20
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/sys/fs/zfs.h
--- a/head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h Fri Aug 10 =
14:19:25 2012 +0300
@@ -520,6 +520,7 @@
#define ZPOOL_CONFIG_LOAD_INFO "load_info" /* not stored on disk */
#define ZPOOL_CONFIG_REWIND_INFO "rewind_info" /* not stored on disk */
#define ZPOOL_CONFIG_UNSUP_FEAT "unsup_feat" /* not stored on disk */
+#define ZPOOL_CONFIG_ENABLED_FEAT "enabled_feat" /* not stored on disk */
#define ZPOOL_CONFIG_CAN_RDONLY "can_rdonly" /* not stored on disk */
#define ZPOOL_CONFIG_FEATURES_FOR_READ "features_for_read"
#define ZPOOL_CONFIG_FEATURE_STATS "feature_stats" /* not stored on disk */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/NOTES
--- a/head/sys/conf/NOTES Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/NOTES Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/conf/NOTES 237263 2012-06-19 07:34:13Z np $
+# $FreeBSD: head/sys/conf/NOTES 238925 2012-07-30 22:46:42Z davide $
#
# NOTES -- Lines that can be cut/pasted into kernel and hints configs.
#
@@ -435,7 +435,7 @@
#
# KTR is a kernel tracing facility imported from BSD/OS. It is
# enabled with the KTR option. KTR_ENTRIES defines the number of
-# entries in the circular trace buffer; it must be a power of two.
+# entries in the circular trace buffer; it may be an arbitrary number.
# KTR_COMPILE defines the mask of events to compile into the kernel as
# defined by the KTR_* constants in <sys/ktr.h>. KTR_MASK defines the
# initial value of the ktr_mask variable which determines at runtime
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/files
--- a/head/sys/conf/files Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/files Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/conf/files 238710 2012-07-23 03:52:18Z adrian $
+# $FreeBSD: head/sys/conf/files 239009 2012-08-03 14:00:26Z luigi $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -639,6 +639,7 @@
dev/aha/aha_mca.c optional aha mca
dev/ahb/ahb.c optional ahb eisa
dev/ahci/ahci.c optional ahci pci
+dev/ahci/ahciem.c optional ahci pci
dev/aic/aic.c optional aic
dev/aic/aic_pccard.c optional aic pccard
dev/aic7xxx/ahc_eisa.c optional ahc eisa
@@ -2226,6 +2227,16 @@
dev/utopia/suni.c optional utopia
dev/utopia/utopia.c optional utopia
dev/vge/if_vge.c optional vge
+#
+# virtio support
+#
+dev/virtio/pci/virtio_pci.c optional vtnet
+dev/virtio/virtio.c optional vtnet
+dev/virtio/virtqueue.c optional vtnet
+dev/virtio/network/if_vtnet.c optional vtnet
+dev/virtio/virtio_bus_if.m optional vtnet
+dev/virtio/virtio_if.m optional vtnet
+
dev/vkbd/vkbd.c optional vkbd
dev/vr/if_vr.c optional vr pci
dev/vte/if_vte.c optional vte pci
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/files.powerpc
--- a/head/sys/conf/files.powerpc Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/files.powerpc Fri Aug 10 14:19:25 2012 +0300
@@ -1,7 +1,7 @@
# This file tells config what files go into building a kernel,
# files marked standard are always included.
#
-# $FreeBSD: head/sys/conf/files.powerpc 238046 2012-07-03 01:00:29Z marcel=
$
+# $FreeBSD: head/sys/conf/files.powerpc 239027 2012-08-04 03:05:01Z jhibbi=
ts $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -160,6 +160,7 @@
powerpc/powermac/kiic.c optional powermac kiic
powerpc/powermac/macgpio.c optional powermac pci=20
powerpc/powermac/macio.c optional powermac pci
+powerpc/powermac/nvbl.c optional powermac nvbl
powerpc/powermac/openpic_macio.c optional powermac pci
powerpc/powermac/platform_powermac.c optional powermac
powerpc/powermac/powermac_thermal.c optional powermac
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/kern.post.mk
--- a/head/sys/conf/kern.post.mk Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/kern.post.mk Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/conf/kern.post.mk 238050 2012-07-03 05:01:00Z obrien $
+# $FreeBSD: head/sys/conf/kern.post.mk 239107 2012-08-06 21:24:43Z brooks $
=20
# Part of a unified Makefile for building kernels. This part includes all
# the definitions that need to be after all the % directives except %RULES
@@ -121,7 +121,7 @@
.endif
.endif
=20
-${FULLKERNEL}: ${SYSTEM_DEP} vers.o
+${FULLKERNEL}: ${SYSTEM_DEP} vers.o ${MFS_IMAGE}
@rm -f ${.TARGET}
@echo linking ${.TARGET}
${SYSTEM_LD}
@@ -133,7 +133,7 @@
.endif
${SYSTEM_LD_TAIL}
.if defined(MFS_IMAGE)
- @sh ${S}/tools/embed_mfs.sh ${FULLKERNEL} ${MFS_IMAGE}
+ sh ${S}/tools/embed_mfs.sh ${FULLKERNEL} ${MFS_IMAGE}
.endif
=20
.if !exists(${.OBJDIR}/.depend)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/acpica/acpi_cpu.c
--- a/head/sys/dev/acpica/acpi_cpu.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/acpica/acpi_cpu.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/acpica/acpi_cpu.c 238418 2012-07-13 08:11=
:55Z avg $");
+__FBSDID("$FreeBSD: head/sys/dev/acpica/acpi_cpu.c 238943 2012-07-31 10:58=
:50Z mav $");
=20
#include "opt_acpi.h"
#include <sys/param.h>
@@ -876,7 +876,8 @@
sbuf_new(&sb, sc->cpu_cx_supported, sizeof(sc->cpu_cx_supported),
SBUF_FIXEDLEN);
for (i =3D 0; i < sc->cpu_cx_count; i++)
- sbuf_printf(&sb, "C%d/%d ", i + 1, sc->cpu_cx_states[i].trans_lat);
+ sbuf_printf(&sb, "C%d/%d/%d ", i + 1, sc->cpu_cx_states[i].type,
+ sc->cpu_cx_states[i].trans_lat);
sbuf_trim(&sb);
sbuf_finish(&sb);
}=09
@@ -921,6 +922,7 @@
{
struct acpi_cpu_softc *sc;
struct acpi_cx *cx_next;
+ uint64_t cputicks;
uint32_t start_time, end_time;
int bm_active, cx_next_idx, i;
=20
@@ -960,11 +962,12 @@
* driver polling for new devices keeps this bit set all the
* time if USB is loaded.
*/
- if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) =3D=3D 0) {
+ if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) =3D=3D 0 &&
+ cx_next_idx > sc->cpu_non_c3) {
AcpiReadBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, &bm_active);
if (bm_active !=3D 0) {
AcpiWriteBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, 1);
- cx_next_idx =3D min(cx_next_idx, sc->cpu_non_c3);
+ cx_next_idx =3D sc->cpu_non_c3;
}
}
=20
@@ -980,11 +983,10 @@
* we are called inside critical section, delaying context switch.
*/
if (cx_next->type =3D=3D ACPI_STATE_C1) {
- AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+ cputicks =3D cpu_ticks();
acpi_cpu_c1();
- AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
- end_time =3D PM_USEC(acpi_TimerDelta(end_time, start_time));
- if (curthread->td_critnest =3D=3D 0)
+ end_time =3D ((cpu_ticks() - cputicks) << 20) / cpu_tickrate();
+ if (curthread->td_critnest =3D=3D 0)
end_time =3D min(end_time, 500000 / hz);
sc->cpu_prev_sleep =3D (sc->cpu_prev_sleep * 3 + end_time) / 4;
return;
@@ -1008,7 +1010,13 @@
* get the time very close to the CPU start/stop clock logic, this
* is the only reliable time source.
*/
- AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+ if (cx_next->type =3D=3D ACPI_STATE_C3) {
+ AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+ cputicks =3D 0;
+ } else {
+ start_time =3D 0;
+ cputicks =3D cpu_ticks();
+ }
CPU_GET_REG(cx_next->p_lvlx, 1);
=20
/*
@@ -1018,7 +1026,11 @@
* margin that we are certain to have a correct value.
*/
AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
- AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
+ if (cx_next->type =3D=3D ACPI_STATE_C3) {
+ AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
+ end_time =3D acpi_TimerDelta(end_time, start_time);
+ } else
+ end_time =3D ((cpu_ticks() - cputicks) << 20) / cpu_tickrate();
=20
/* Enable bus master arbitration and disable bus master wakeup. */
if (cx_next->type =3D=3D ACPI_STATE_C3 &&
@@ -1028,8 +1040,6 @@
}
ACPI_ENABLE_IRQS();
=20
- /* Find the actual time asleep in microseconds. */
- end_time =3D acpi_TimerDelta(end_time, start_time);
sc->cpu_prev_sleep =3D (sc->cpu_prev_sleep * 3 + PM_USEC(end_time)) / =
4;
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/agp/agp.c
--- a/head/sys/dev/agp/agp.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/agp/agp.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/agp/agp.c 238172 2012-07-06 15:57:03Z mar=
cel $");
+__FBSDID("$FreeBSD: head/sys/dev/agp/agp.c 239065 2012-08-05 14:11:42Z kib=
$");
=20
#include "opt_agp.h"
#include "opt_bus.h"
@@ -50,6 +50,7 @@
#include <dev/pci/pcireg.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/agp/agp_i810.c
--- a/head/sys/dev/agp/agp_i810.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/agp/agp_i810.c Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/agp/agp_i810.c 238301 2012-07-09 16:23:59=
Z marcel $");
+__FBSDID("$FreeBSD: head/sys/dev/agp/agp_i810.c 239065 2012-08-05 14:11:42=
Z kib $");
=20
#include "opt_bus.h"
=20
@@ -67,6 +67,7 @@
#include <dev/pci/pci_private.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ahci/ahci.c
--- a/head/sys/dev/ahci/ahci.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ahci/ahci.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2009 Alexander Motin <mav at FreeBSD.org>
+ * Copyright (c) 2009-2012 Alexander Motin <mav at FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,27 +25,22 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ahci/ahci.c 236847 2012-06-10 11:17:14Z m=
av $");
+__FBSDID("$FreeBSD: head/sys/dev/ahci/ahci.c 238805 2012-07-26 13:44:48Z m=
av $");
=20
#include <sys/param.h>
#include <sys/module.h>
#include <sys/systm.h>
#include <sys/kernel.h>
-#include <sys/ata.h>
#include <sys/bus.h>
#include <sys/conf.h>
#include <sys/endian.h>
#include <sys/malloc.h>
#include <sys/lock.h>
#include <sys/mutex.h>
-#include <sys/sema.h>
-#include <sys/taskqueue.h>
-#include <vm/uma.h>
#include <machine/stdarg.h>
#include <machine/resource.h>
#include <machine/bus.h>
#include <sys/rman.h>
-#include <dev/led/led.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
#include "ahci.h"
@@ -69,7 +64,6 @@
static void ahci_ch_pm(void *arg);
static void ahci_ch_intr_locked(void *data);
static void ahci_ch_intr(void *data);
-static void ahci_ch_led(void *priv, int onoff);
static int ahci_ctlr_reset(device_t dev);
static int ahci_ctlr_setup(device_t dev);
static void ahci_begin_transaction(device_t dev, union ccb *ccb);
@@ -444,7 +438,6 @@
ctlr->caps &=3D ~AHCI_CAP_SNCQ;
if ((ctlr->caps & AHCI_CAP_CCCS) =3D=3D 0)
ctlr->ccc =3D 0;
- mtx_init(&ctlr->em_mtx, "AHCI EM lock", NULL, MTX_DEF);
ctlr->emloc =3D ATA_INL(ctlr->r_mem, AHCI_EM_LOC);
ahci_ctlr_setup(dev);
/* Setup interrupts. */
@@ -497,17 +490,6 @@
(ctlr->caps2 & AHCI_CAP2_NVMP) ? " NVMP":"",
(ctlr->caps2 & AHCI_CAP2_BOH) ? " BOH":"");
}
- if (bootverbose && (ctlr->caps & AHCI_CAP_EMS)) {
- device_printf(dev, "EM Caps:%s%s%s%s%s%s%s%s\n",
- (ctlr->capsem & AHCI_EM_PM) ? " PM":"",
- (ctlr->capsem & AHCI_EM_ALHD) ? " ALHD":"",
- (ctlr->capsem & AHCI_EM_XMT) ? " XMT":"",
- (ctlr->capsem & AHCI_EM_SMB) ? " SMB":"",
- (ctlr->capsem & AHCI_EM_SGPIO) ? " SGPIO":"",
- (ctlr->capsem & AHCI_EM_SES2) ? " SES-2":"",
- (ctlr->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"",
- (ctlr->capsem & AHCI_EM_LED) ? " LED":"");
- }
/* Attach all channels on this controller */
for (unit =3D 0; unit < ctlr->channels; unit++) {
child =3D device_add_child(dev, "ahcich", -1);
@@ -519,6 +501,13 @@
if ((ctlr->ichannels & (1 << unit)) =3D=3D 0)
device_disable(child);
}
+ if (ctlr->caps & AHCI_CAP_EMS) {
+ child =3D device_add_child(dev, "ahciem", -1);
+ if (child =3D=3D NULL)
+ device_printf(dev, "failed to add enclosure device\n");
+ else
+ device_set_ivars(child, (void *)(intptr_t)-1);
+ }
bus_generic_attach(dev);
return 0;
}
@@ -546,7 +535,6 @@
rman_fini(&ctlr->sc_iomem);
if (ctlr->r_mem)
bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem);
- mtx_destroy(&ctlr->em_mtx);
return (0);
}
=20
@@ -759,16 +747,34 @@
u_long start, u_long end, u_long count, u_int flags)
{
struct ahci_controller *ctlr =3D device_get_softc(dev);
- int unit =3D ((struct ahci_channel *)device_get_softc(child))->unit;
- struct resource *res =3D NULL;
- int offset =3D AHCI_OFFSET + (unit << 7);
+ struct resource *res;
long st;
+ int offset, size, unit;
=20
+ unit =3D (intptr_t)device_get_ivars(child);
+ res =3D NULL;
switch (type) {
case SYS_RES_MEMORY:
+ if (unit >=3D 0) {
+ offset =3D AHCI_OFFSET + (unit << 7);
+ size =3D 128;
+ } else if (*rid =3D=3D 0) {
+ offset =3D AHCI_EM_CTL;
+ size =3D 4;
+ } else {
+ offset =3D (ctlr->emloc & 0xffff0000) >> 14;
+ size =3D (ctlr->emloc & 0x0000ffff) << 2;
+ if (*rid !=3D 1) {
+ if (*rid =3D=3D 2 && (ctlr->capsem &
+ (AHCI_EM_XMT | AHCI_EM_SMB)) =3D=3D 0)
+ offset +=3D size;
+ else
+ break;
+ }
+ }
st =3D rman_get_start(ctlr->r_mem);
res =3D rman_reserve_resource(&ctlr->sc_iomem, st + offset,
- st + offset + 127, 128, RF_ACTIVE, child);
+ st + offset + size - 1, size, RF_ACTIVE, child);
if (res) {
bus_space_handle_t bsh;
bus_space_tag_t bst;
@@ -836,13 +842,13 @@
static int
ahci_print_child(device_t dev, device_t child)
{
- int retval;
+ int retval, channel;
=20
retval =3D bus_print_child_header(dev, child);
- retval +=3D printf(" at channel %d",
- (int)(intptr_t)device_get_ivars(child));
+ channel =3D (int)(intptr_t)device_get_ivars(child);
+ if (channel >=3D 0)
+ retval +=3D printf(" at channel %d", channel);
retval +=3D bus_print_child_footer(dev, child);
-
return (retval);
}
=20
@@ -850,9 +856,11 @@
ahci_child_location_str(device_t dev, device_t child, char *buf,
size_t buflen)
{
+ int channel;
=20
- snprintf(buf, buflen, "channel=3D%d",
- (int)(intptr_t)device_get_ivars(child));
+ channel =3D (int)(intptr_t)device_get_ivars(child);
+ if (channel >=3D 0)
+ snprintf(buf, buflen, "channel=3D%d", channel);
return (0);
}
=20
@@ -916,7 +924,6 @@
struct cam_devq *devq;
int rid, error, i, sata_rev =3D 0;
u_int32_t version;
- char buf[32];
=20
ch->dev =3D dev;
ch->unit =3D (intptr_t)device_get_ivars(dev);
@@ -956,7 +963,7 @@
ch->user[i].caps |=3D CTS_SATA_CAPS_H_DMAAA |
CTS_SATA_CAPS_H_AN;
}
- rid =3D ch->unit;
+ rid =3D 0;
if (!(ch->r_mem =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
&rid, RF_ACTIVE)))
return (ENXIO);
@@ -1025,25 +1032,6 @@
ahci_ch_pm, dev);
}
mtx_unlock(&ch->mtx);
- if ((ch->caps & AHCI_CAP_EMS) &&
- (ctlr->capsem & AHCI_EM_LED)) {
- for (i =3D 0; i < AHCI_NUM_LEDS; i++) {
- ch->leds[i].dev =3D dev;
- ch->leds[i].num =3D i;
- }
- if ((ctlr->capsem & AHCI_EM_ALHD) =3D=3D 0) {
- snprintf(buf, sizeof(buf), "%s.act",
- device_get_nameunit(dev));
- ch->leds[0].led =3D led_create(ahci_ch_led,
- &ch->leds[0], buf);
- }
- snprintf(buf, sizeof(buf), "%s.locate",
- device_get_nameunit(dev));
- ch->leds[1].led =3D led_create(ahci_ch_led, &ch->leds[1], buf);
- snprintf(buf, sizeof(buf), "%s.fault",
- device_get_nameunit(dev));
- ch->leds[2].led =3D led_create(ahci_ch_led, &ch->leds[2], buf);
- }
return (0);
=20
err3:
@@ -1063,12 +1051,7 @@
ahci_ch_detach(device_t dev)
{
struct ahci_channel *ch =3D device_get_softc(dev);
- int i;
=20
- for (i =3D 0; i < AHCI_NUM_LEDS; i++) {
- if (ch->leds[i].led)
- led_destroy(ch->leds[i].led);
- }
mtx_lock(&ch->mtx);
xpt_async(AC_LOST_DEVICE, ch->path, NULL);
/* Forget about reset. */
@@ -1191,47 +1174,6 @@
};
DRIVER_MODULE(ahcich, ahci, ahcich_driver, ahcich_devclass, 0, 0);
=20
-static void
-ahci_ch_setleds(device_t dev)
-{
- struct ahci_channel *ch;
- struct ahci_controller *ctlr;
- size_t buf;
- int i, timeout;
- int16_t val;
-
- ctlr =3D device_get_softc(device_get_parent(dev));
- ch =3D device_get_softc(dev);
-
- val =3D 0;
- for (i =3D 0; i < AHCI_NUM_LEDS; i++)
- val |=3D ch->leds[i].state << (i * 3);
-
- buf =3D (ctlr->emloc & 0xffff0000) >> 14;
- mtx_lock(&ctlr->em_mtx);
- timeout =3D 1000;
- while (ATA_INL(ctlr->r_mem, AHCI_EM_CTL) & (AHCI_EM_TM | AHCI_EM_RST) &&
- --timeout > 0)
- DELAY(1000);
- if (timeout =3D=3D 0)
- device_printf(dev, "EM timeout\n");
- ATA_OUTL(ctlr->r_mem, buf, (1 << 8) | (0 << 16) | (0 << 24));
- ATA_OUTL(ctlr->r_mem, buf + 4, ch->unit | (val << 16));
- ATA_OUTL(ctlr->r_mem, AHCI_EM_CTL, AHCI_EM_TM);
- mtx_unlock(&ctlr->em_mtx);
-}
-
-static void
-ahci_ch_led(void *priv, int onoff)
-{
- struct ahci_led *led;
-
- led =3D (struct ahci_led *)priv;
-
- led->state =3D onoff;
- ahci_ch_setleds(led->dev);
-}
-
struct ahci_dc_cb_args {
bus_addr_t maddr;
int error;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ahci/ahci.h
--- a/head/sys/dev/ahci/ahci.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ahci/ahci.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 1998 - 2008 S=C3=B8ren Schmidt <sos at FreeBSD.org>
- * Copyright (c) 2009 Alexander Motin <mav at FreeBSD.org>
+ * Copyright (c) 2009-2012 Alexander Motin <mav at FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/sys/dev/ahci/ahci.h 230132 2012-01-15 13:23:18Z uqs $
+ * $FreeBSD: head/sys/dev/ahci/ahci.h 238805 2012-07-26 13:44:48Z mav $
*/
=20
/* ATA register defines */
@@ -395,7 +395,6 @@
struct ata_dma dma; /* DMA data */
struct cam_sim *sim;
struct cam_path *path;
- struct ahci_led leds[3];
uint32_t caps; /* Controller capabilities */
uint32_t caps2; /* Controller capabilities */
uint32_t chcaps; /* Channel capabilities */
@@ -435,6 +434,22 @@
struct ahci_device curr[16]; /* Current settings */
};
=20
+struct ahci_enclosure {
+ device_t dev; /* Device handle */
+ struct resource *r_memc; /* Control register */
+ struct resource *r_memt; /* Transmit buffer */
+ struct resource *r_memr; /* Recieve buffer */
+ struct cam_sim *sim;
+ struct cam_path *path;
+ struct mtx mtx; /* state lock */
+ struct ahci_led leds[AHCI_MAX_PORTS * 3];
+ uint32_t capsem; /* Controller capabilities */
+ uint8_t status[AHCI_MAX_PORTS][4]; /* ArrayDev statuses */
+ int quirks;
+ int channels;
+ int ichannels;
+};
+
/* structure describing a AHCI controller */
struct ahci_controller {
device_t dev;
@@ -465,7 +480,6 @@
void (*function)(void *);
void *argument;
} interrupt[AHCI_MAX_PORTS];
- struct mtx em_mtx; /* EM access lock */
};
=20
enum ahci_err_type {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ahci/ahciem.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/dev/ahci/ahciem.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,600 @@
+/*-
+ * Copyright (c) 2012 Alexander Motin <mav at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer,
+ * without modification, immediately at the beginning of the file.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF US=
E,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/dev/ahci/ahciem.c 238805 2012-07-26 13:44:48Z=
mav $");
+
+#include <sys/param.h>
+#include <sys/module.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/endian.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <machine/stdarg.h>
+#include <machine/resource.h>
+#include <machine/bus.h>
+#include <sys/rman.h>
+#include <dev/led/led.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+#include "ahci.h"
+
+#include <cam/cam.h>
+#include <cam/cam_ccb.h>
+#include <cam/cam_sim.h>
+#include <cam/cam_xpt_sim.h>
+#include <cam/cam_debug.h>
+#include <cam/scsi/scsi_ses.h>
+
+/* local prototypes */
+static void ahciemaction(struct cam_sim *sim, union ccb *ccb);
+static void ahciempoll(struct cam_sim *sim);
+static int ahci_em_reset(device_t dev);
+static void ahci_em_led(void *priv, int onoff);
+static void ahci_em_setleds(device_t dev, int c);
+
+static int
+ahci_em_probe(device_t dev)
+{
+
+ device_set_desc_copy(dev, "AHCI enclosure management bridge");
+ return (0);
+}
+
+static int
+ahci_em_attach(device_t dev)
+{
+ device_t parent =3D device_get_parent(dev);
+ struct ahci_controller *ctlr =3D device_get_softc(parent);
+ struct ahci_enclosure *enc =3D device_get_softc(dev);
+ struct cam_devq *devq;
+ int i, c, rid, error;
+ char buf[32];
+
+ enc->dev =3D dev;
+ enc->quirks =3D ctlr->quirks;
+ enc->channels =3D ctlr->channels;
+ enc->ichannels =3D ctlr->ichannels;
+ mtx_init(&enc->mtx, "AHCI enclosure lock", NULL, MTX_DEF);
+ rid =3D 0;
+ if (!(enc->r_memc =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &rid, RF_ACTIVE)))
+ return (ENXIO);
+ enc->capsem =3D ATA_INL(enc->r_memc, 0);;
+ rid =3D 1;
+ if (!(enc->r_memt =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &rid, RF_ACTIVE))) {
+ error =3D ENXIO;
+ goto err0;
+ }
+ if ((enc->capsem & (AHCI_EM_XMT | AHCI_EM_SMB)) =3D=3D 0) {
+ rid =3D 2;
+ if (!(enc->r_memr =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &rid, RF_ACTIVE))) {
+ error =3D ENXIO;
+ goto err0;
+ }
+ } else
+ enc->r_memr =3D NULL;
+ mtx_lock(&enc->mtx);
+ ahci_em_reset(dev);
+ rid =3D ATA_IRQ_RID;
+ /* Create the device queue for our SIM. */
+ devq =3D cam_simq_alloc(1);
+ if (devq =3D=3D NULL) {
+ device_printf(dev, "Unable to allocate SIM queue\n");
+ error =3D ENOMEM;
+ goto err1;
+ }
+ /* Construct SIM entry */
+ enc->sim =3D cam_sim_alloc(ahciemaction, ahciempoll, "ahciem", enc,
+ device_get_unit(dev), &enc->mtx,
+ 1, 0, devq);
+ if (enc->sim =3D=3D NULL) {
+ cam_simq_free(devq);
+ device_printf(dev, "Unable to allocate SIM\n");
+ error =3D ENOMEM;
+ goto err1;
+ }
+ if (xpt_bus_register(enc->sim, dev, 0) !=3D CAM_SUCCESS) {
+ device_printf(dev, "unable to register xpt bus\n");
+ error =3D ENXIO;
+ goto err2;
+ }
+ if (xpt_create_path(&enc->path, /*periph*/NULL, cam_sim_path(enc->sim),
+ CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) !=3D CAM_REQ_CMP) {
+ device_printf(dev, "Unable to create path\n");
+ error =3D ENXIO;
+ goto err3;
+ }
+ mtx_unlock(&enc->mtx);
+ if (bootverbose) {
+ device_printf(dev, "Caps:%s%s%s%s%s%s%s%s\n",
+ (enc->capsem & AHCI_EM_PM) ? " PM":"",
+ (enc->capsem & AHCI_EM_ALHD) ? " ALHD":"",
+ (enc->capsem & AHCI_EM_XMT) ? " XMT":"",
+ (enc->capsem & AHCI_EM_SMB) ? " SMB":"",
+ (enc->capsem & AHCI_EM_SGPIO) ? " SGPIO":"",
+ (enc->capsem & AHCI_EM_SES2) ? " SES-2":"",
+ (enc->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"",
+ (enc->capsem & AHCI_EM_LED) ? " LED":"");
+ }
+ if ((enc->capsem & AHCI_EM_LED)) {
+ for (c =3D 0; c < enc->channels; c++) {
+ if ((enc->ichannels & (1 << c)) =3D=3D 0)
+ continue;
+ for (i =3D 0; i < AHCI_NUM_LEDS; i++) {
+ enc->leds[c * AHCI_NUM_LEDS + i].dev =3D dev;
+ enc->leds[c * AHCI_NUM_LEDS + i].num =3D
+ c * AHCI_NUM_LEDS + i;
+ }
+ if ((enc->capsem & AHCI_EM_ALHD) =3D=3D 0) {
+ snprintf(buf, sizeof(buf), "%s.%d.act",
+ device_get_nameunit(parent), c);
+ enc->leds[c * AHCI_NUM_LEDS + 0].led =3D
+ led_create(ahci_em_led,
+ &enc->leds[c * AHCI_NUM_LEDS + 0], buf);
+ }
+ snprintf(buf, sizeof(buf), "%s.%d.locate",
+ device_get_nameunit(parent), c);
+ enc->leds[c * AHCI_NUM_LEDS + 1].led =3D
+ led_create(ahci_em_led,
+ &enc->leds[c * AHCI_NUM_LEDS + 1], buf);
+ snprintf(buf, sizeof(buf), "%s.%d.fault",
+ device_get_nameunit(parent), c);
+ enc->leds[c * AHCI_NUM_LEDS + 2].led =3D
+ led_create(ahci_em_led,
+ &enc->leds[c * AHCI_NUM_LEDS + 2], buf);
+ }
+ }
+ return (0);
+
+err3:
+ xpt_bus_deregister(cam_sim_path(enc->sim));
+err2:
+ cam_sim_free(enc->sim, /*free_devq*/TRUE);
+err1:
+ mtx_unlock(&enc->mtx);
+ if (enc->r_memr)
+ bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr);
+err0:
+ if (enc->r_memt)
+ bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt);
+ bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc);
+ mtx_destroy(&enc->mtx);
+ return (error);
+}
+
+static int
+ahci_em_detach(device_t dev)
+{
+ struct ahci_enclosure *enc =3D device_get_softc(dev);
+ int i;
+
+ for (i =3D 0; i < enc->channels * AHCI_NUM_LEDS; i++) {
+ if (enc->leds[i].led)
+ led_destroy(enc->leds[i].led);
+ }
+ mtx_lock(&enc->mtx);
+ xpt_async(AC_LOST_DEVICE, enc->path, NULL);
+ xpt_free_path(enc->path);
+ xpt_bus_deregister(cam_sim_path(enc->sim));
+ cam_sim_free(enc->sim, /*free_devq*/TRUE);
+ mtx_unlock(&enc->mtx);
+
+ bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc);
+ bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt);
+ if (enc->r_memr)
+ bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr);
+ mtx_destroy(&enc->mtx);
+ return (0);
+}
+
+static int
+ahci_em_reset(device_t dev)
+{
+ struct ahci_enclosure *enc;
+ int i, timeout;
+
+ enc =3D device_get_softc(dev);
+ ATA_OUTL(enc->r_memc, 0, AHCI_EM_RST);
+ timeout =3D 1000;
+ while ((ATA_INL(enc->r_memc, 0) & AHCI_EM_RST) &&
+ --timeout > 0)
+ DELAY(1000);
+ if (timeout =3D=3D 0) {
+ device_printf(dev, "EM timeout\n");
+ return (1);
+ }
+ for (i =3D 0; i < enc->channels; i++)
+ ahci_em_setleds(dev, i);
+ return (0);
+}
+
+static int
+ahci_em_suspend(device_t dev)
+{
+ struct ahci_enclosure *enc =3D device_get_softc(dev);
+
+ mtx_lock(&enc->mtx);
+ xpt_freeze_simq(enc->sim, 1);
+ mtx_unlock(&enc->mtx);
+ return (0);
+}
+
+static int
+ahci_em_resume(device_t dev)
+{
+ struct ahci_enclosure *enc =3D device_get_softc(dev);
+
+ mtx_lock(&enc->mtx);
+ ahci_em_reset(dev);
+ xpt_release_simq(enc->sim, TRUE);
+ mtx_unlock(&enc->mtx);
+ return (0);
+}
+
+devclass_t ahciem_devclass;
+static device_method_t ahciem_methods[] =3D {
+ DEVMETHOD(device_probe, ahci_em_probe),
+ DEVMETHOD(device_attach, ahci_em_attach),
+ DEVMETHOD(device_detach, ahci_em_detach),
+ DEVMETHOD(device_suspend, ahci_em_suspend),
+ DEVMETHOD(device_resume, ahci_em_resume),
+ { 0, 0 }
+};
+static driver_t ahciem_driver =3D {
+ "ahciem",
+ ahciem_methods,
+ sizeof(struct ahci_enclosure)
+};
+DRIVER_MODULE(ahciem, ahci, ahciem_driver, ahciem_devclass, 0, 0);
+
+static void
+ahci_em_setleds(device_t dev, int c)
+{
+ struct ahci_enclosure *enc;
+ int timeout;
+ int16_t val;
+
+ enc =3D device_get_softc(dev);
+
+ val =3D 0;
+ if (enc->status[c][2] & 0x80) /* Activity */
+ val |=3D (1 << 0);
+ if (enc->status[c][2] & SESCTL_RQSID) /* Identification */
+ val |=3D (1 << 3);
+ else if (enc->status[c][3] & SESCTL_RQSFLT) /* Fault */
+ val |=3D (1 << 6);
+ else if (enc->status[c][1] & 0x02) /* Rebuild */
+ val |=3D (1 << 6) | (1 << 3);
+
+ timeout =3D 10000;
+ while (ATA_INL(enc->r_memc, 0) & (AHCI_EM_TM | AHCI_EM_RST) &&
+ --timeout > 0)
+ DELAY(100);
+ if (timeout =3D=3D 0)
+ device_printf(dev, "Transmit timeout\n");
+ ATA_OUTL(enc->r_memt, 0, (1 << 8) | (0 << 16) | (0 << 24));
+ ATA_OUTL(enc->r_memt, 4, c | (0 << 8) | (val << 16));
+ ATA_OUTL(enc->r_memc, 0, AHCI_EM_TM);
+}
+
+static void
+ahci_em_led(void *priv, int onoff)
+{
+ struct ahci_led *led;
+ struct ahci_enclosure *enc;
+ int c, l;
+
+ led =3D (struct ahci_led *)priv;
+ enc =3D device_get_softc(led->dev);
+ c =3D led->num / AHCI_NUM_LEDS;
+ l =3D led->num % AHCI_NUM_LEDS;
+
+ if (l =3D=3D 0) {
+ if (onoff)
+ enc->status[c][2] |=3D 0x80;
+ else
+ enc->status[c][2] &=3D ~0x80;
+ } else if (l =3D=3D 1) {
+ if (onoff)
+ enc->status[c][2] |=3D SESCTL_RQSID;
+ else
+ enc->status[c][2] &=3D ~SESCTL_RQSID;
+ } else if (l =3D=3D 2) {
+ if (onoff)
+ enc->status[c][3] |=3D SESCTL_RQSFLT;
+ else
+ enc->status[c][3] &=3D SESCTL_RQSFLT;
+ }
+ ahci_em_setleds(led->dev, c);
+}
+
+static int
+ahci_check_ids(device_t dev, union ccb *ccb)
+{
+
+ if (ccb->ccb_h.target_id !=3D 0) {
+ ccb->ccb_h.status =3D CAM_TID_INVALID;
+ xpt_done(ccb);
+ return (-1);
+ }
+ if (ccb->ccb_h.target_lun !=3D 0) {
+ ccb->ccb_h.status =3D CAM_LUN_INVALID;
+ xpt_done(ccb);
+ return (-1);
+ }
+ return (0);
+}
+
+static void
+ahci_em_emulate_ses_on_led(device_t dev, union ccb *ccb)
+{
+ struct ahci_enclosure *enc;
+ struct ses_status_page *page;
+ struct ses_status_array_dev_slot *ads, *ads0;
+ struct ses_elm_desc_hdr *elmd;
+ uint8_t *buf;
+ int i;
+
+ enc =3D device_get_softc(dev);
+ buf =3D ccb->ataio.data_ptr;
+
+ /* General request validation. */
+ if (ccb->ataio.cmd.command !=3D ATA_SEP_ATTN ||
+ ccb->ataio.dxfer_len < ccb->ataio.cmd.sector_count * 4) {
+ ccb->ccb_h.status =3D CAM_REQ_INVALID;
+ goto out;
+ }
+
+ /* SEMB IDENTIFY */
+ if (ccb->ataio.cmd.features =3D=3D 0xEC &&
+ ccb->ataio.cmd.sector_count >=3D 16) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ buf[0] =3D 64; /* Valid bytes. */
+ strncpy(&buf[10], "AHCI ", SID_VENDOR_SIZE);
+ strncpy(&buf[18], "SGPIO Enclosure ", SID_PRODUCT_SIZE);
+ strncpy(&buf[34], "1.00", SID_REVISION_SIZE);
+ strncpy(&buf[39], "0001", 4);
+ strncpy(&buf[43], "S-E-S ", 6);
+ strncpy(&buf[49], "2.00", 4);
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (0) */
+ page =3D (struct ses_status_page *)buf;
+ if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+ ccb->ataio.cmd.features =3D=3D 0x00 &&
+ ccb->ataio.cmd.sector_count >=3D 2) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code =3D 0;
+ scsi_ulto2b(3, page->hdr.length);
+ buf[4] =3D 0;
+ buf[5] =3D 1;
+ buf[6] =3D 2;
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (1) */
+ if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+ ccb->ataio.cmd.features =3D=3D 0x01 &&
+ ccb->ataio.cmd.sector_count >=3D 13) {
+ struct ses_enc_desc *ed;
+ struct ses_elm_type_desc *td;
+
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code =3D 0x01;
+ scsi_ulto2b(4 + 4 + 36 + 4, page->hdr.length);
+ ed =3D (struct ses_enc_desc *)&buf[8];
+ ed->byte0 =3D 0x11;
+ ed->subenc_id =3D 0;
+ ed->num_types =3D 1;
+ ed->length =3D 36;
+ strncpy(ed->vendor_id, "AHCI ", SID_VENDOR_SIZE);
+ strncpy(ed->product_id, "SGPIO Enclosure ", SID_PRODUCT_SIZE);
+ strncpy(ed->product_rev, " ", SID_REVISION_SIZE);
+ td =3D (struct ses_elm_type_desc *)ses_enc_desc_next(ed);
+ td->etype_elm_type =3D 0x17;
+ td->etype_maxelt =3D enc->channels;
+ td->etype_subenc =3D 0;
+ td->etype_txt_len =3D 0;
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (2) */
+ if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+ ccb->ataio.cmd.features =3D=3D 0x02 &&
+ ccb->ataio.cmd.sector_count >=3D (3 + enc->channels)) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code =3D 0x02;
+ scsi_ulto2b(4 + 4 * (1 + enc->channels),
+ page->hdr.length);
+ for (i =3D 0; i < enc->channels; i++) {
+ ads =3D &page->elements[i + 1].array_dev_slot;
+ memcpy(ads, enc->status[i], 4);
+ ads->common.bytes[0] |=3D
+ (enc->ichannels & (1 << i)) ?
+ SES_OBJSTAT_UNKNOWN :
+ SES_OBJSTAT_NOTINSTALLED;
+ }
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB SEND DIAGNOSTIC (2) */
+ if (ccb->ataio.cmd.lba_low =3D=3D 0x82 &&
+ ccb->ataio.cmd.features =3D=3D 0x02 &&
+ ccb->ataio.cmd.sector_count >=3D (3 + enc->channels)) {
+ ads0 =3D &page->elements[0].array_dev_slot;
+ for (i =3D 0; i < enc->channels; i++) {
+ ads =3D &page->elements[i + 1].array_dev_slot;
+ if (ads->common.bytes[0] & SESCTL_CSEL) {
+ enc->status[i][0] =3D 0;
+ enc->status[i][1] =3D=20
+ ads->bytes[0] & 0x02;
+ enc->status[i][2] =3D
+ ads->bytes[1] & (0x80 | SESCTL_RQSID);
+ enc->status[i][3] =3D
+ ads->bytes[2] & SESCTL_RQSFLT;
+ ahci_em_setleds(dev, i);
+ } else if (ads0->common.bytes[0] & SESCTL_CSEL) {
+ enc->status[i][0] =3D 0;
+ enc->status[i][1] =3D=20
+ ads0->bytes[0] & 0x02;
+ enc->status[i][2] =3D
+ ads0->bytes[1] & (0x80 | SESCTL_RQSID);
+ enc->status[i][3] =3D
+ ads0->bytes[2] & SESCTL_RQSFLT;
+ ahci_em_setleds(dev, i);
+ }
+ }
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (7) */
+ if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+ ccb->ataio.cmd.features =3D=3D 0x07 &&
+ ccb->ataio.cmd.sector_count >=3D (3 + 3 * enc->channels)) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code =3D 0x07;
+ scsi_ulto2b(4 + 4 + 12 * enc->channels,
+ page->hdr.length);
+ for (i =3D 0; i < enc->channels; i++) {
+ elmd =3D (struct ses_elm_desc_hdr *)&buf[8 + 4 + 12 * i];
+ scsi_ulto2b(8, elmd->length);
+ snprintf((char *)(elmd + 1), 9, "SLOT %03d", i);
+ }
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ goto out;
+ }
+
+ ccb->ccb_h.status =3D CAM_REQ_INVALID;
+out:
+ xpt_done(ccb);
+}
+
+static void
+ahci_em_begin_transaction(device_t dev, union ccb *ccb)
+{
+ struct ahci_enclosure *enc;
+ struct ata_res *res;
+
+ enc =3D device_get_softc(dev);
+ res =3D &ccb->ataio.res;
+ bzero(res, sizeof(*res));
+ if ((ccb->ataio.cmd.flags & CAM_ATAIO_CONTROL) &&
+ (ccb->ataio.cmd.control & ATA_A_RESET)) {
+ res->lba_high =3D 0xc3;
+ res->lba_mid =3D 0x3c;
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ xpt_done(ccb);
+ return;
+ }
+
+ if (enc->capsem & AHCI_EM_LED) {
+ ahci_em_emulate_ses_on_led(dev, ccb);
+ return;
+ } else
+ device_printf(dev, "Unsupported enclosure interface\n");
+
+ ccb->ccb_h.status =3D CAM_REQ_INVALID;
+ xpt_done(ccb);
+}
+
+static void
+ahciemaction(struct cam_sim *sim, union ccb *ccb)
+{
+ device_t dev, parent;
+ struct ahci_enclosure *enc;
+
+ CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE,
+ ("ahciemaction func_code=3D%x\n", ccb->ccb_h.func_code));
+
+ enc =3D cam_sim_softc(sim);
+ dev =3D enc->dev;
+ switch (ccb->ccb_h.func_code) {
+ case XPT_ATA_IO: /* Execute the requested I/O operation */
+ if (ahci_check_ids(dev, ccb))
+ return;
+ ahci_em_begin_transaction(dev, ccb);
+ return;
+ case XPT_RESET_BUS: /* Reset the specified bus */
+ case XPT_RESET_DEV: /* Bus Device Reset the specified device */
+ ahci_em_reset(dev);
+ ccb->ccb_h.status =3D CAM_REQ_CMP;
+ break;
+ case XPT_PATH_INQ: /* Path routing inquiry */
+ {
+ struct ccb_pathinq *cpi =3D &ccb->cpi;
+
+ parent =3D device_get_parent(dev);
+ cpi->version_num =3D 1; /* XXX??? */
+ cpi->hba_inquiry =3D PI_SDTR_ABLE;
+ cpi->target_sprt =3D 0;
+ cpi->hba_misc =3D PIM_SEQSCAN;
+ cpi->hba_eng_cnt =3D 0;
+ cpi->max_target =3D 0;
+ cpi->max_lun =3D 0;
+ cpi->initiator_id =3D 0;
+ cpi->bus_id =3D cam_sim_bus(sim);
+ cpi->base_transfer_speed =3D 150000;
+ strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN);
+ strncpy(cpi->hba_vid, "AHCI", HBA_IDLEN);
+ strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);
+ cpi->unit_number =3D cam_sim_unit(sim);
+ cpi->transport =3D XPORT_SATA;
+ cpi->transport_version =3D XPORT_VERSION_UNSPECIFIED;
+ cpi->protocol =3D PROTO_ATA;
+ cpi->protocol_version =3D PROTO_VERSION_UNSPECIFIED;
+ cpi->maxio =3D MAXPHYS;
+ cpi->hba_vendor =3D pci_get_vendor(parent);
+ cpi->hba_device =3D pci_get_device(parent);
+ cpi->hba_subvendor =3D pci_get_subvendor(parent);
+ cpi->hba_subdevice =3D pci_get_subdevice(parent);
+ cpi->ccb_h.status =3D CAM_REQ_CMP;
+ break;
+ }
+ default:
+ ccb->ccb_h.status =3D CAM_REQ_INVALID;
+ break;
+ }
+ xpt_done(ccb);
+}
+
+static void
+ahciempoll(struct cam_sim *sim)
+{
+
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/aic7xxx/aic79xx_osm.c
--- a/head/sys/dev/aic7xxx/aic79xx_osm.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/aic7xxx/aic79xx_osm.c Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/aic7xxx/aic79xx_osm.c 237601 2012-06-26 1=
4:51:35Z ken $");
+__FBSDID("$FreeBSD: head/sys/dev/aic7xxx/aic79xx_osm.c 239104 2012-08-06 2=
0:01:32Z dim $");
=20
#include <dev/aic7xxx/aic79xx_osm.h>
#include <dev/aic7xxx/aic79xx_inline.h>
@@ -222,6 +222,7 @@
count =3D 0;
devq =3D NULL;
sim =3D NULL;
+ path =3D NULL;
=20
/*
* Create a thread to perform all recovery.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/aic7xxx/aic_osm_lib.c
--- a/head/sys/dev/aic7xxx/aic_osm_lib.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/aic7xxx/aic_osm_lib.c Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/dev/aic7xxx/aic_osm_lib.c 239047 2012-08-05 0=
8:08:34Z eadler $");
=20
static void aic_recovery_thread(void *arg);
=20
@@ -54,9 +54,6 @@
* them after we've successfully fixed this problem.
*/
LIST_FOREACH(list_scb, &aic->pending_scbs, pending_links) {
- union ccb *ccb;
-
- ccb =3D list_scb->io_ctx;
callout_stop(&scb->io_timer);
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ah_osdep.h
--- a/head/sys/dev/ath/ah_osdep.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ah_osdep.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/sys/dev/ath/ah_osdep.h 237865 2012-07-01 02:37:04Z adria=
n $
+ * $FreeBSD: head/sys/dev/ath/ah_osdep.h 239051 2012-08-05 10:12:27Z adria=
n $
*/
#ifndef _ATH_AH_OSDEP_H_
#define _ATH_AH_OSDEP_H_
@@ -49,6 +49,12 @@
typedef bus_space_handle_t HAL_BUS_HANDLE;
=20
/*
+ * Although the underlying hardware may support 64 bit DMA, the
+ * current Atheros hardware only supports 32 bit addressing.
+ */
+typedef uint32_t HAL_DMA_ADDR;
+
+/*
* Linker set writearounds for chip and RF backend registration.
*/
#define OS_DATA_SET(set, item) DATA_SET(set, item)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah.c
--- a/head/sys/dev/ath/ath_hal/ah.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah.c Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah.c 238333 2012-07-10 03:48:07Z adr=
ian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah.c 238858 2012-07-28 07:28:08Z adr=
ian $
*/
#include "opt_ah.h"
=20
@@ -657,7 +657,8 @@
}
case HAL_CAP_RXBUFSIZE:
case HAL_CAP_NUM_MR_RETRIES:
- return HAL_EINVAL; /* XXX not yet */
+ *result =3D pCap->halNumMRRetries;
+ return HAL_OK;
case HAL_CAP_BT_COEX:
return pCap->halBtCoexSupport ? HAL_OK : HAL_ENOTSUPP;
case HAL_CAP_HT20_SGI:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah.h
--- a/head/sys/dev/ath/ath_hal/ah.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah.h Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah.h 238731 2012-07-24 01:18:19Z adr=
ian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah.h 239053 2012-08-05 11:24:21Z adr=
ian $
*/
=20
#ifndef _ATH_AH_H_
@@ -220,6 +220,8 @@
=20
#define HAL_NUM_RX_QUEUES 2 /* max possible # of queues */
=20
+#define HAL_TXFIFO_DEPTH 8 /* transmit fifo depth */
+
/*
* Transmit queue subtype. These map directly to
* WME Access Categories (except for UPSD). Refer
@@ -580,13 +582,16 @@
=20
typedef struct {
u_int Tries;
- u_int Rate;
+ u_int Rate; /* hardware rate code */
+ u_int RateIndex; /* rate series table index */
u_int PktDuration;
u_int ChSel;
u_int RateFlags;
#define HAL_RATESERIES_RTS_CTS 0x0001 /* use rts/cts w/this series */
#define HAL_RATESERIES_2040 0x0002 /* use ext channel for series */
#define HAL_RATESERIES_HALFGI 0x0004 /* use half-gi for series */
+#define HAL_RATESERIES_STBC 0x0008 /* use STBC for series */
+ u_int tx_power_cap;
} HAL_11N_RATE_SERIES;
=20
typedef enum {
@@ -1076,7 +1081,8 @@
u_int txRate2, u_int txTries2,
u_int txRate3, u_int txTries3);
HAL_BOOL __ahdecl(*ah_fillTxDesc)(struct ath_hal *, struct ath_desc *,
- u_int segLen, HAL_BOOL firstSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+ u_int descId, u_int qcuId, HAL_BOOL firstSeg,
HAL_BOOL lastSeg, const struct ath_desc *);
HAL_STATUS __ahdecl(*ah_procTxDesc)(struct ath_hal *,
struct ath_desc *, struct ath_tx_status *);
@@ -1221,8 +1227,11 @@
=20
/* 802.11n Functions */
HAL_BOOL __ahdecl(*ah_chainTxDesc)(struct ath_hal *,
- struct ath_desc *, u_int, u_int, HAL_PKT_TYPE,
- u_int, HAL_CIPHER, uint8_t, u_int, HAL_BOOL,
+ struct ath_desc *,
+ HAL_DMA_ADDR *bufAddrList,
+ uint32_t *segLenList,
+ u_int, u_int, HAL_PKT_TYPE,
+ u_int, HAL_CIPHER, uint8_t, HAL_BOOL,
HAL_BOOL, HAL_BOOL);
HAL_BOOL __ahdecl(*ah_setupFirstTxDesc)(struct ath_hal *,
struct ath_desc *, u_int, u_int, u_int,
@@ -1233,7 +1242,7 @@
struct ath_desc *, u_int, u_int,
HAL_11N_RATE_SERIES [], u_int, u_int);
void __ahdecl(*ah_set11nAggrFirst)(struct ath_hal *,
- struct ath_desc *, u_int, u_int);
+ struct ath_desc *, u_int);
void __ahdecl(*ah_set11nAggrMiddle)(struct ath_hal *,
struct ath_desc *, u_int);
void __ahdecl(*ah_set11nAggrLast)(struct ath_hal *,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah_desc.h
--- a/head/sys/dev/ath/ath_hal/ah_desc.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah_desc.h Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah_desc.h 238314 2012-07-09 23:58:22=
Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah_desc.h 238843 2012-07-27 12:08:49=
Z adrian $
*/
=20
#ifndef _DEV_ATH_DESC_H
@@ -57,16 +57,19 @@
uint8_t ts_finaltsi; /* final transmit series index */
#ifdef AH_SUPPORT_AR5416
/* 802.11n status */
- uint8_t ts_flags; /* misc flags */
- int8_t ts_rssi_ctl[3]; /* tx ack RSSI [ctl, chain 0-2] */
- int8_t ts_rssi_ext[3]; /* tx ack RSSI [ext, chain 0-2] */
+ uint8_t ts_flags; /* misc flags */
+ uint8_t ts_queue_id; /* AR9300: TX queue id */
+ uint8_t ts_desc_id; /* AR9300: TX descriptor id */
+ uint8_t ts_tid; /* TID */
/* #define ts_rssi ts_rssi_combined */
- uint32_t ts_ba_low; /* blockack bitmap low */
- uint32_t ts_ba_high; /* blockack bitmap high */
- uint8_t ts_tid; /* TID */
- uint32_t ts_evm0; /* evm bytes */
- uint32_t ts_evm1;
- uint32_t ts_evm2;
+ uint32_t ts_ba_low; /* blockack bitmap low */
+ uint32_t ts_ba_high; /* blockack bitmap high */
+ uint32_t ts_evm0; /* evm bytes */
+ uint32_t ts_evm1;
+ uint32_t ts_evm2;
+ int8_t ts_rssi_ctl[3]; /* tx ack RSSI [ctl, chain 0-2] */
+ int8_t ts_rssi_ext[3]; /* tx ack RSSI [ext, chain 0-2] */
+ uint8_t ts_pad[2];
#endif /* AH_SUPPORT_AR5416 */
};
=20
@@ -243,6 +246,8 @@
#define HAL_TXDESC_EXT_ONLY 0x0080 /* send on ext channel only (11n) */
#define HAL_TXDESC_EXT_AND_CTL 0x0100 /* send on ext + ctl channels (11n) =
*/
#define HAL_TXDESC_VMF 0x0200 /* virtual more frag */
+#define HAL_TXDESC_LOWRXCHAIN 0x0400 /* switch to low RX chain */
+#define HAL_TXDESC_LDPC 0x1000
=20
/* flags passed to rx descriptor setup methods */
#define HAL_RXDESC_INTREQ 0x0020 /* enable per-descriptor interrupt */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah_devid.h
--- a/head/sys/dev/ath/ath_hal/ah_devid.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah_devid.h Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah_devid.h 227434 2011-11-11 00:48:4=
1Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah_devid.h 239134 2012-08-07 23:45:4=
3Z adrian $
*/
=20
#ifndef _DEV_ATH_DEVID_H_
@@ -83,6 +83,15 @@
#define AR9287_DEVID_PCI 0x002d /* AR9227 PCI Kiwi */
#define AR9287_DEVID_PCIE 0x002e /* AR9287 PCI-E Kiwi */
=20
+/* AR9300 */
+#define AR9300_DEVID_AR9380_PCIE 0x0030
+#define AR9300_DEVID_AR9340 0x0031
+#define AR9300_DEVID_AR9485_PCIE 0x0032
+#define AR9300_DEVID_AR9580_PCIE 0x0033
+#define AR9300_DEVID_AR946X_PCIE 0x0034
+#define AR9300_DEVID_AR9330 0x0035
+#define AR9300_DEVID_QCA955X 0x0039
+
#define AR_SUBVENDOR_ID_NOG 0x0e11 /* No 11G subvendor ID */
#define AR_SUBVENDOR_ID_NEW_A 0x7065 /* Update device to new RD */
#endif /* _DEV_ATH_DEVID_H */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah_internal.h
--- a/head/sys/dev/ath/ath_hal/ah_internal.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah_internal.h Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah_internal.h 237868 2012-07-01 03:1=
5:18Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah_internal.h 238858 2012-07-28 07:2=
8:08Z adrian $
*/
#ifndef _ATH_AH_INTERAL_H_
#define _ATH_AH_INTERAL_H_
@@ -252,6 +252,7 @@
int halRxStatusLen;
int halRxHpFifoDepth;
int halRxLpFifoDepth;
+ int halNumMRRetries;
} HAL_CAPABILITIES;
=20
struct regDomain;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5210/ar5210=
.h
--- a/head/sys/dev/ath/ath_hal/ar5210/ar5210.h Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5210/ar5210.h Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210.h 238607 2012-07-19 02=
:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210.h 239051 2012-08-05 10=
:12:27Z adrian $
*/
#ifndef _ATH_AR5210_H_
#define _ATH_AR5210_H_
@@ -171,7 +171,8 @@
u_int txRate2, u_int txRetries2,
u_int txRate3, u_int txRetries3);
extern HAL_BOOL ar5210FillTxDesc(struct ath_hal *, struct ath_desc *,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+ u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0);
extern HAL_STATUS ar5210ProcTxDesc(struct ath_hal *,
struct ath_desc *, struct ath_tx_status *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5210/ar5210=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c 238607 2012-0=
7-19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
*/
#include "opt_ah.h"
=20
@@ -361,6 +361,7 @@
=20
pCap->halSleepAfterBeaconBroken =3D AH_TRUE;
pCap->halPSPollBroken =3D AH_FALSE;
+ pCap->halNumMRRetries =3D 1; /* No hardware MRR support */
=20
pCap->halTotalQueues =3D HAL_NUM_TX_QUEUES;
pCap->halKeyCacheSize =3D 64;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5210/ar5210=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c 238607 2012-07-=
19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c 239051 2012-08-=
05 10:12:27Z adrian $
*/
#include "opt_ah.h"
=20
@@ -546,13 +546,17 @@
=20
HAL_BOOL
ar5210FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int descId,
+ u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0)
{
struct ar5210_desc *ads =3D AR5210DESC(ds);
+ uint32_t segLen =3D segLenList[0];
=20
HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
+ ds->ds_data =3D bufAddrList[0];
+
if (firstSeg) {
/*
* First descriptor, don't clobber xmit control data
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5211/ar5211=
.h
--- a/head/sys/dev/ath/ath_hal/ar5211/ar5211.h Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5211/ar5211.h Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211.h 238607 2012-07-19 02=
:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211.h 239051 2012-08-05 10=
:12:27Z adrian $
*/
#ifndef _ATH_AR5211_H_
#define _ATH_AR5211_H_
@@ -196,7 +196,8 @@
u_int txRate2, u_int txRetries2,
u_int txRate3, u_int txRetries3);
extern HAL_BOOL ar5211FillTxDesc(struct ath_hal *, struct ath_desc *,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+ u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0);
extern HAL_STATUS ar5211ProcTxDesc(struct ath_hal *,
struct ath_desc *, struct ath_tx_status *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5211/ar5211=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c 238607 2012-0=
7-19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
*/
#include "opt_ah.h"
=20
@@ -496,6 +496,7 @@
pCap->halSleepAfterBeaconBroken =3D AH_TRUE;
pCap->halPSPollBroken =3D AH_TRUE;
pCap->halVEOLSupport =3D AH_TRUE;
+ pCap->halNumMRRetries =3D 1; /* No hardware MRR support */
=20
pCap->halTotalQueues =3D HAL_NUM_TX_QUEUES;
pCap->halKeyCacheSize =3D 128;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5211/ar5211=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c 238607 2012-07-=
19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c 239051 2012-08-=
05 10:12:27Z adrian $
*/
#include "opt_ah.h"
=20
@@ -577,10 +577,14 @@
=20
HAL_BOOL
ar5211FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int qcuId,
+ u_int descId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0)
{
struct ar5211_desc *ads =3D AR5211DESC(ds);
+ uint32_t segLen =3D segLenList[0];
+
+ ds->ds_data =3D bufAddrList[0];
=20
HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5212/ar5212=
.h
--- a/head/sys/dev/ath/ath_hal/ar5212/ar5212.h Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5212/ar5212.h Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212.h 238607 2012-07-19 02=
:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212.h 239051 2012-08-05 10=
:12:27Z adrian $
*/
#ifndef _ATH_AR5212_H_
#define _ATH_AR5212_H_
@@ -594,7 +594,8 @@
u_int txRate2, u_int txRetries2,
u_int txRate3, u_int txRetries3);
extern HAL_BOOL ar5212FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+ u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0);
extern HAL_STATUS ar5212ProcTxDesc(struct ath_hal *ah,
struct ath_desc *, struct ath_tx_status *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5212/ar5212=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c 238607 2012-0=
7-19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
*/
#include "opt_ah.h"
=20
@@ -824,6 +824,7 @@
pCap->halTurboGSupport =3D pCap->halWirelessModes & HAL_MODE_108G;
=20
pCap->halPSPollBroken =3D AH_TRUE; /* XXX fixed in later revs? */
+ pCap->halNumMRRetries =3D 4; /* Hardware supports 4 MRR */
pCap->halVEOLSupport =3D AH_TRUE;
pCap->halBssIdMaskSupport =3D AH_TRUE;
pCap->halMcastKeySrchSupport =3D AH_TRUE;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5212/ar5212=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c 238607 2012-07-=
19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c 239051 2012-08-=
05 10:12:27Z adrian $
*/
#include "opt_ah.h"
=20
@@ -802,13 +802,17 @@
=20
HAL_BOOL
ar5212FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int qcuId,
+ u_int descId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0)
{
struct ar5212_desc *ads =3D AR5212DESC(ds);
+ uint32_t segLen =3D segLenList[0];
=20
HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
+ ds->ds_data =3D bufAddrList[0];
+
if (firstSeg) {
/*
* First descriptor, don't clobber xmit control data
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5416/ar5416=
.h
--- a/head/sys/dev/ath/ath_hal/ar5416/ar5416.h Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5416/ar5416.h Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416.h 237611 2012-06-26 22=
:16:53Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416.h 239053 2012-08-05 11=
:24:21Z adrian $
*/
#ifndef _ATH_AR5416_H_
#define _ATH_AR5416_H_
@@ -360,7 +360,8 @@
u_int txRate2, u_int txRetries2,
u_int txRate3, u_int txRetries3);
extern HAL_BOOL ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+ u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0);
extern HAL_STATUS ar5416ProcTxDesc(struct ath_hal *ah,
struct ath_desc *, struct ath_tx_status *);
@@ -372,8 +373,9 @@
const HAL_TXQ_INFO *qInfo);
=20
extern HAL_BOOL ar5416ChainTxDesc(struct ath_hal *ah, struct ath_desc *ds,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
u_int pktLen, u_int hdrLen, HAL_PKT_TYPE type, u_int keyIx,
- HAL_CIPHER cipher, uint8_t delims, u_int segLen,
+ HAL_CIPHER cipher, uint8_t delims,
HAL_BOOL firstSeg, HAL_BOOL lastSeg, HAL_BOOL lastAggr);
extern HAL_BOOL ar5416SetupFirstTxDesc(struct ath_hal *ah, struct ath_desc=
*ds,
u_int aggrLen, u_int flags, u_int txPower, u_int txRate0, u_int txTries0,
@@ -387,7 +389,7 @@
u_int nseries, u_int flags);
=20
extern void ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds,
- u_int aggrLen, u_int numDelims);
+ u_int aggrLen);
extern void ar5416Set11nAggrMiddle(struct ath_hal *ah, struct ath_desc *ds=
, u_int numDelims);
extern void ar5416Set11nAggrLast(struct ath_hal *ah, struct ath_desc *ds);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5416/ar5416=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c 236017 2012-0=
5-25 17:53:57Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
*/
#include "opt_ah.h"
=20
@@ -892,6 +892,7 @@
pCap->halTurboGSupport =3D pCap->halWirelessModes & HAL_MODE_108G;
=20
pCap->halPSPollBroken =3D AH_TRUE; /* XXX fixed in later revs? */
+ pCap->halNumMRRetries =3D 4; /* Hardware supports 4 MRR */
pCap->halVEOLSupport =3D AH_TRUE;
pCap->halBssIdMaskSupport =3D AH_TRUE;
pCap->halMcastKeySrchSupport =3D AH_TRUE; /* Works on AR5416 and later */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5416/ar5416=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c 233895 2012-04-=
04 21:49:49Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c 239053 2012-08-=
05 11:24:21Z adrian $
*/
#include "opt_ah.h"
=20
@@ -135,6 +135,7 @@
#define set11nRateFlags(_series, _index) \
((_series)[_index].RateFlags & HAL_RATESERIES_2040 ? AR_2040_##_in=
dex : 0) \
|((_series)[_index].RateFlags & HAL_RATESERIES_HALFGI ? AR_GI##_in=
dex : 0) \
+ |((_series)[_index].RateFlags & HAL_RATESERIES_STBC ? AR_STBC##_in=
dex : 0) \
|SM((_series)[_index].ChSel, AR_ChainSel##_index)
=20
/*
@@ -276,13 +277,17 @@
=20
HAL_BOOL
ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
- u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+ HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int descId,
+ u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
const struct ath_desc *ds0)
{
struct ar5416_desc *ads =3D AR5416DESC(ds);
+ uint32_t segLen =3D segLenList[0];
=20
HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
+ ds->ds_data =3D bufAddrList[0];
+
if (firstSeg) {
/*
* First descriptor, don't clobber xmit control data
@@ -330,13 +335,14 @@
*/
HAL_BOOL
ar5416ChainTxDesc(struct ath_hal *ah, struct ath_desc *ds,
+ HAL_DMA_ADDR *bufAddrList,
+ uint32_t *segLenList,
u_int pktLen,
u_int hdrLen,
HAL_PKT_TYPE type,
u_int keyIx,
HAL_CIPHER cipher,
uint8_t delims,
- u_int segLen,
HAL_BOOL firstSeg,
HAL_BOOL lastSeg,
HAL_BOOL lastAggr)
@@ -344,6 +350,7 @@
struct ar5416_desc *ads =3D AR5416DESC(ds);
uint32_t *ds_txstatus =3D AR5416_DS_TXSTATUS(ah,ads);
struct ath_hal_5416 *ahp =3D AH5416(ah);
+ u_int segLen =3D segLenList[0];
=20
int isaggr =3D 0;
uint32_t last_aggr =3D 0;
@@ -352,6 +359,7 @@
(void) ah;
=20
HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
+ ds->ds_data =3D bufAddrList[0];
=20
HALASSERT(isValidPktType(type));
if (type =3D=3D HAL_PKT_TYPE_AMPDU) {
@@ -727,16 +735,14 @@
}
=20
void
-ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds,
- u_int aggrLen, u_int numDelims)
+ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, u_int aggrL=
en)
{
struct ar5416_desc *ads =3D AR5416DESC(ds);
=20
ads->ds_ctl1 |=3D (AR_IsAggr | AR_MoreAggr);
=20
ads->ds_ctl6 &=3D ~(AR_AggrLen | AR_PadDelim);
- ads->ds_ctl6 |=3D SM(aggrLen, AR_AggrLen) |
- SM(numDelims, AR_PadDelim);
+ ads->ds_ctl6 |=3D SM(aggrLen, AR_AggrLen);
}
=20
void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_rate/sample/sampl=
e.c
--- a/head/sys/dev/ath/ath_rate/sample/sample.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/sys/dev/ath/ath_rate/sample/sample.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -36,7 +36,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/ath_rate/sample/sample.c 238638 2012-=
07-20 02:17:48Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/ath_rate/sample/sample.c 238962 2012-=
08-01 00:18:02Z adrian $");
=20
/*
* John Bicket's SampleRate control algorithm.
@@ -502,8 +502,10 @@
goto done;
}
=20
- /* XXX TODO: this doesn't know about 11gn vs 11g protection; teach it */
- mrr =3D sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
+ mrr =3D sc->sc_mrretry;
+ /* XXX check HT protmode too */
+ if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot))
+ mrr =3D 0;
=20
best_rix =3D pick_best_rate(an, rt, size_bin, !mrr);
if (best_rix >=3D 0) {
@@ -910,7 +912,11 @@
short_tries, long_tries);
return;
}
- mrr =3D sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
+ mrr =3D sc->sc_mrretry;
+ /* XXX check HT protmode too */
+ if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot))
+ mrr =3D 0;
+
if (!mrr || ts->ts_finaltsi =3D=3D 0) {
if (!IS_RATE_DEFINED(sn, final_rix)) {
badrate(ifp, 0, ts->ts_rate, long_tries, status);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath.c
--- a/head/sys/dev/ath/if_ath.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath.c 238729 2012-07-23 23:40:13Z =
adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath.c 238961 2012-07-31 23:54:15Z =
adrian $");
=20
/*
* Driver for the Atheros Wireless LAN controller.
@@ -254,6 +254,28 @@
=20
MALLOC_DEFINE(M_ATHDEV, "athdev", "ath driver dma buffers");
=20
+void
+ath_legacy_attach_comp_func(struct ath_softc *sc)
+{
+
+ /*
+ * Special case certain configurations. Note the
+ * CAB queue is handled by these specially so don't
+ * include them when checking the txq setup mask.
+ */
+ switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) {
+ case 0x01:
+ TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc);
+ break;
+ case 0x0f:
+ TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc);
+ break;
+ default:
+ TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc);
+ break;
+ }
+}
+
#define HAL_MODE_HT20 (HAL_MODE_11NG_HT20 | HAL_MODE_11NA_HT20)
#define HAL_MODE_HT40 \
(HAL_MODE_11NG_HT40PLUS | HAL_MODE_11NG_HT40MINUS | \
@@ -460,21 +482,12 @@
}
=20
/*
- * Special case certain configurations. Note the
- * CAB queue is handled by these specially so don't
- * include them when checking the txq setup mask.
+ * Attach the TX completion function.
+ *
+ * The non-EDMA chips may have some special case optimisations;
+ * this method gives everyone a chance to attach cleanly.
*/
- switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) {
- case 0x01:
- TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc);
- break;
- case 0x0f:
- TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc);
- break;
- default:
- TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc);
- break;
- }
+ sc->sc_tx.xmit_attach_comp_func(sc);
=20
/*
* Setup rate control. Some rate control modules
@@ -692,6 +705,12 @@
(void) ath_hal_settxchainmask(sc->sc_ah, tx_chainmask);
}
=20
+ /*
+ * Disable MRR with protected frames by default.
+ * Only 802.11n series NICs can handle this.
+ */
+ sc->sc_mrrprot =3D 0; /* XXX should be a capability */
+
#ifdef ATH_ENABLE_11N
/*
* Query HT capabilities
@@ -701,6 +720,9 @@
int rxs, txs;
=20
device_printf(sc->sc_dev, "[HT] enabling HT modes\n");
+
+ sc->sc_mrrprot =3D 1; /* XXX should be a capability */
+
ic->ic_htcaps =3D IEEE80211_HTC_HT /* HT operation */
| IEEE80211_HTC_AMPDU /* A-MPDU tx/rx */
| IEEE80211_HTC_AMSDU /* A-MSDU tx/rx */
@@ -916,6 +938,7 @@
=20
ath_dfs_detach(sc);
ath_desc_free(sc);
+ ath_txdma_teardown(sc);
ath_rxdma_teardown(sc);
ath_tx_cleanup(sc);
ath_hal_detach(sc->sc_ah); /* NB: sets chip in full sleep */
@@ -2764,28 +2787,32 @@
*paddr =3D segs->ds_addr;
}
=20
+/*
+ * Allocate the descriptors and appropriate DMA tag/setup.
+ *
+ * For some situations (eg EDMA TX completion), there isn't a requirement
+ * for the ath_buf entries to be allocated.
+ */
int
-ath_descdma_setup(struct ath_softc *sc,
+ath_descdma_alloc_desc(struct ath_softc *sc,
struct ath_descdma *dd, ath_bufhead *head,
- const char *name, int ds_size, int nbuf, int ndesc)
+ const char *name, int ds_size, int ndesc)
{
#define DS2PHYS(_dd, _ds) \
((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
#define ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \
((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0)
struct ifnet *ifp =3D sc->sc_ifp;
- uint8_t *ds;
- struct ath_buf *bf;
- int i, bsize, error;
+ int error;
=20
dd->dd_descsize =3D ds_size;
=20
DPRINTF(sc, ATH_DEBUG_RESET,
- "%s: %s DMA: %u buffers %u desc/buf, %d bytes per descriptor\n",
- __func__, name, nbuf, ndesc, dd->dd_descsize);
+ "%s: %s DMA: %u desc, %d bytes per descriptor\n",
+ __func__, name, ndesc, dd->dd_descsize);
=20
dd->dd_name =3D name;
- dd->dd_desc_len =3D dd->dd_descsize * nbuf * ndesc;
+ dd->dd_desc_len =3D dd->dd_descsize * ndesc;
=20
/*
* Merlin work-around:
@@ -2793,8 +2820,8 @@
* Assume one skipped descriptor per 4KB page.
*/
if (! ath_hal_split4ktrans(sc->sc_ah)) {
- int numdescpage =3D 4096 / (dd->dd_descsize * ndesc);
- dd->dd_desc_len =3D (nbuf / numdescpage + 1) * 4096;
+ int numpages =3D dd->dd_desc_len / 4096;
+ dd->dd_desc_len +=3D ds_size * numpages;
}
=20
/*
@@ -2830,7 +2857,7 @@
&dd->dd_dmamap);
if (error !=3D 0) {
if_printf(ifp, "unable to alloc memory for %u %s descriptors, "
- "error %u\n", nbuf * ndesc, dd->dd_name, error);
+ "error %u\n", ndesc, dd->dd_name, error);
goto fail1;
}
=20
@@ -2844,10 +2871,49 @@
goto fail2;
}
=20
+ DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA map: %p (%lu) -> %p (%lu)\n",
+ __func__, dd->dd_name, (uint8_t *) dd->dd_desc,
+ (u_long) dd->dd_desc_len, (caddr_t) dd->dd_desc_paddr,
+ /*XXX*/ (u_long) dd->dd_desc_len);
+
+ return (0);
+
+fail2:
+ bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
+fail1:
+ bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
+fail0:
+ bus_dma_tag_destroy(dd->dd_dmat);
+ memset(dd, 0, sizeof(*dd));
+ return error;
+#undef DS2PHYS
+#undef ATH_DESC_4KB_BOUND_CHECK
+}
+
+int
+ath_descdma_setup(struct ath_softc *sc,
+ struct ath_descdma *dd, ath_bufhead *head,
+ const char *name, int ds_size, int nbuf, int ndesc)
+{
+#define DS2PHYS(_dd, _ds) \
+ ((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
+#define ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \
+ ((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0)
+ struct ifnet *ifp =3D sc->sc_ifp;
+ uint8_t *ds;
+ struct ath_buf *bf;
+ int i, bsize, error;
+
+ /* Allocate descriptors */
+ error =3D ath_descdma_alloc_desc(sc, dd, head, name, ds_size,
+ nbuf * ndesc);
+
+ /* Assume any errors during allocation were dealt with */
+ if (error !=3D 0) {
+ return (error);
+ }
+
ds =3D (uint8_t *) dd->dd_desc;
- DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA map: %p (%lu) -> %p (%lu)\n",
- __func__, dd->dd_name, ds, (u_long) dd->dd_desc_len,
- (caddr_t) dd->dd_desc_paddr, /*XXX*/ (u_long) dd->dd_desc_len);
=20
/* allocate rx buffers */
bsize =3D sizeof(struct ath_buf) * nbuf;
@@ -2870,7 +2936,7 @@
* in the descriptor.
*/
if (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr,
- dd->dd_descsize * ndesc)) {
+ dd->dd_descsize)) {
/* Start at the next page */
ds +=3D 0x1000 - (bf->bf_daddr & 0xFFF);
bf->bf_desc =3D (struct ath_desc *) ds;
@@ -2888,14 +2954,18 @@
bf->bf_lastds =3D bf->bf_desc; /* Just an initial value */
TAILQ_INSERT_TAIL(head, bf, bf_list);
}
+
+ /*
+ * XXX TODO: ensure that ds doesn't overflow the descriptor
+ * allocation otherwise weird stuff will occur and crash your
+ * machine.
+ */
return 0;
+ /* XXX this should likely just call ath_descdma_cleanup() */
fail3:
bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap);
-fail2:
bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
-fail1:
bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
-fail0:
bus_dma_tag_destroy(dd->dd_dmat);
memset(dd, 0, sizeof(*dd));
return error;
@@ -2980,27 +3050,32 @@
bus_dma_tag_destroy(dd->dd_dmat);
}
=20
- TAILQ_FOREACH(bf, head, bf_list) {
- if (bf->bf_m) {
- m_freem(bf->bf_m);
- bf->bf_m =3D NULL;
- }
- if (bf->bf_dmamap !=3D NULL) {
- bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap);
- bf->bf_dmamap =3D NULL;
- }
- ni =3D bf->bf_node;
- bf->bf_node =3D NULL;
- if (ni !=3D NULL) {
- /*
- * Reclaim node reference.
- */
- ieee80211_free_node(ni);
+ if (head !=3D NULL) {
+ TAILQ_FOREACH(bf, head, bf_list) {
+ if (bf->bf_m) {
+ m_freem(bf->bf_m);
+ bf->bf_m =3D NULL;
+ }
+ if (bf->bf_dmamap !=3D NULL) {
+ bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap);
+ bf->bf_dmamap =3D NULL;
+ }
+ ni =3D bf->bf_node;
+ bf->bf_node =3D NULL;
+ if (ni !=3D NULL) {
+ /*
+ * Reclaim node reference.
+ */
+ ieee80211_free_node(ni);
+ }
}
}
=20
- TAILQ_INIT(head);
- free(dd->dd_bufptr, M_ATHDEV);
+ if (head !=3D NULL)
+ TAILQ_INIT(head);
+
+ if (dd->dd_bufptr !=3D NULL)
+ free(dd->dd_bufptr, M_ATHDEV);
memset(dd, 0, sizeof(*dd));
}
=20
@@ -3510,8 +3585,8 @@
* Kick the packet scheduler if needed. This can occur from this
* particular task.
*/
-static int
-ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched)
+int
+ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosc=
hed)
{
struct ath_hal *ah =3D sc->sc_ah;
struct ath_buf *bf;
@@ -3911,7 +3986,7 @@
}
=20
void
-ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
+ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
{
#ifdef ATH_DEBUG
struct ath_hal *ah =3D sc->sc_ah;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_beacon.c
--- a/head/sys/dev/ath/if_ath_beacon.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_beacon.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_beacon.c 238609 2012-07-19 03:=
51:16Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_beacon.c 239051 2012-08-05 10:=
12:27Z adrian $");
=20
/*
* Driver for the Atheros Wireless LAN controller.
@@ -266,6 +266,8 @@
int flags, antenna;
const HAL_RATE_TABLE *rt;
u_int8_t rix, rate;
+ HAL_DMA_ADDR bufAddrList[4];
+ uint32_t segLenList[4];
=20
DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: m %p len %u\n",
__func__, m, m->m_len);
@@ -300,7 +302,7 @@
=20
KASSERT(bf->bf_nseg =3D=3D 1,
("multi-segment beacon frame; nseg %u", bf->bf_nseg));
- ds->ds_data =3D bf->bf_segs[0].ds_addr;
+
/*
* Calculate rate code.
* XXX everything at min xmit rate
@@ -323,8 +325,15 @@
, 0 /* rts/cts duration */
);
/* NB: beacon's BufLen must be a multiple of 4 bytes */
+ segLenList[0] =3D roundup(m->m_len, 4);
+ segLenList[1] =3D segLenList[2] =3D segLenList[3] =3D 0;
+ bufAddrList[0] =3D bf->bf_segs[0].ds_addr;
+ bufAddrList[1] =3D bufAddrList[2] =3D bufAddrList[3] =3D 0;
ath_hal_filltxdesc(ah, ds
- , roundup(m->m_len, 4) /* buffer length */
+ , bufAddrList
+ , segLenList
+ , 0 /* XXX desc id */
+ , sc->sc_bhalq /* hardware TXQ */
, AH_TRUE /* first segment */
, AH_TRUE /* last segment */
, ds /* first descriptor */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_misc.h
--- a/head/sys/dev/ath/if_ath_misc.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_misc.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/sys/dev/ath/if_ath_misc.h 238729 2012-07-23 23:40:13Z ad=
rian $
+ * $FreeBSD: head/sys/dev/ath/if_ath_misc.h 238931 2012-07-31 03:09:48Z ad=
rian $
*/
#ifndef __IF_ATH_MISC_H__
#define __IF_ATH_MISC_H__
@@ -66,7 +66,6 @@
extern void ath_returnbuf_tail(struct ath_softc *sc, struct ath_buf *bf);
=20
extern int ath_reset(struct ifnet *, ATH_RESET_TYPE);
-extern void ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq);
extern void ath_tx_default_comp(struct ath_softc *sc, struct ath_buf *bf,
int fail);
extern void ath_tx_update_ratectrl(struct ath_softc *sc,
@@ -84,6 +83,9 @@
=20
extern void ath_setslottime(struct ath_softc *sc);
=20
+extern int ath_descdma_alloc_desc(struct ath_softc *sc,
+ struct ath_descdma *dd, ath_bufhead *head, const char *name,
+ int ds_size, int ndesc);
extern int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
ath_bufhead *head, const char *name, int ds_size, int nbuf,
int ndesc);
@@ -93,6 +95,11 @@
extern void ath_descdma_cleanup(struct ath_softc *sc,
struct ath_descdma *dd, ath_bufhead *head);
=20
+extern void ath_legacy_attach_comp_func(struct ath_softc *sc);
+extern void ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *t=
xq);
+extern int ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *tx=
q,
+ int dosched);
+
/*
* This is only here so that the RX proc function can call it.
* It's very likely that the "start TX after RX" call should be
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_rx.c
--- a/head/sys/dev/ath/if_ath_rx.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_rx.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx.c 238729 2012-07-23 23:40:1=
3Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx.c 239111 2012-08-06 22:54:1=
0Z adrian $");
=20
/*
* Driver for the Atheros Wireless LAN controller.
@@ -1072,8 +1072,6 @@
{
int error;
=20
- device_printf(sc->sc_dev, "%s: called\n", __func__);
-
error =3D ath_descdma_setup(sc, &sc->sc_rxdma, &sc->sc_rxbuf,
"rx", sizeof(struct ath_desc), ath_rxbuf, 1);
if (error !=3D 0)
@@ -1086,8 +1084,6 @@
ath_legacy_dma_rxteardown(struct ath_softc *sc)
{
=20
- device_printf(sc->sc_dev, "%s: called\n", __func__);
-=09
if (sc->sc_rxdma.dd_desc_len !=3D 0)
ath_descdma_cleanup(sc, &sc->sc_rxdma, &sc->sc_rxbuf);
return (0);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_rx_edma.c
--- a/head/sys/dev/ath/if_ath_rx_edma.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_rx_edma.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx_edma.c 238710 2012-07-23 03=
:52:18Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx_edma.c 239111 2012-08-06 22=
:54:10Z adrian $");
=20
/*
* Driver for the Atheros Wireless LAN controller.
@@ -507,8 +507,6 @@
=20
ATH_RX_LOCK_ASSERT(sc);
=20
-// device_printf(sc->sc_dev, "%s: called; bf=3D%p\n", __func__, bf);
-
m =3D m_getm(NULL, sc->sc_edma_bufsize, M_DONTWAIT, MT_DATA);
if (! m)
return (ENOBUFS); /* XXX ?*/
@@ -799,8 +797,6 @@
ath_edma_dma_rxteardown(struct ath_softc *sc)
{
=20
- device_printf(sc->sc_dev, "%s: called\n", __func__);
-
ATH_RX_LOCK(sc);
ath_edma_rxfifo_flush(sc, HAL_RX_QUEUE_HP);
ath_edma_rxfifo_free(sc, HAL_RX_QUEUE_HP);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx.c
--- a/head/sys/dev/ath/if_ath_tx.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx.c 238729 2012-07-23 23:40:1=
3Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx.c 239120 2012-08-07 00:42:4=
6Z adrian $");
=20
/*
* Driver for the Atheros Wireless LAN controller.
@@ -302,6 +302,9 @@
struct ath_hal *ah =3D sc->sc_ah;
struct ath_desc *ds, *ds0;
int i;
+ HAL_DMA_ADDR bufAddrList[4];
+ uint32_t segLenList[4];
+
/*
* XXX There's txdma and txdma_mgmt; the descriptor
* sizes must match.
@@ -313,14 +316,30 @@
*/
ds0 =3D ds =3D bf->bf_desc;
for (i =3D 0; i < bf->bf_nseg; i++, ds++) {
- ds->ds_data =3D bf->bf_segs[i].ds_addr;
+ bufAddrList[0] =3D bf->bf_segs[i].ds_addr;
+ segLenList[0] =3D bf->bf_segs[i].ds_len;
+
+ /* Blank this out until multi-buf support is added for AR9300 */
+ bufAddrList[1] =3D bufAddrList[2] =3D bufAddrList[3] =3D 0;
+ segLenList[1] =3D segLenList[2] =3D segLenList[3] =3D 0;
+
if (i =3D=3D bf->bf_nseg - 1)
ath_hal_settxdesclink(ah, ds, 0);
else
ath_hal_settxdesclink(ah, ds,
bf->bf_daddr + dd->dd_descsize * (i + 1));
+
+ /*
+ * XXX this assumes that bfs_txq is the actual destination
+ * hardware queue at this point. It may not have been assigned,
+ * it may actually be pointing to the multicast software
+ * TXQ id. These must be fixed!
+ */
ath_hal_filltxdesc(ah, ds
- , bf->bf_segs[i].ds_len /* segment length */
+ , bufAddrList
+ , segLenList
+ , 0 /* XXX desc id */
+ , bf->bf_state.bfs_txq->axq_qnum /* XXX multicast? */
, i =3D=3D 0 /* first segment */
, i =3D=3D bf->bf_nseg - 1 /* last segment */
, ds0 /* first descriptor */
@@ -346,6 +365,9 @@
struct ath_hal *ah =3D sc->sc_ah;
struct ath_desc *ds, *ds0;
int i;
+ HAL_DMA_ADDR bufAddrList[4];
+ uint32_t segLenList[4];
+
/*
* XXX There's txdma and txdma_mgmt; the descriptor
* sizes must match.
@@ -359,25 +381,30 @@
* That's only going to occur for the first frame in an aggregate.
*/
for (i =3D 0; i < bf->bf_nseg; i++, ds++) {
- ds->ds_data =3D bf->bf_segs[i].ds_addr;
+ bzero(bufAddrList, sizeof(bufAddrList));
+ bzero(segLenList, sizeof(segLenList));
if (i =3D=3D bf->bf_nseg - 1)
ath_hal_settxdesclink(ah, ds, 0);
else
ath_hal_settxdesclink(ah, ds,
bf->bf_daddr + dd->dd_descsize * (i + 1));
=20
+ bufAddrList[0] =3D bf->bf_segs[i].ds_addr;
+ segLenList[0] =3D bf->bf_segs[i].ds_len;
+
/*
* This performs the setup for an aggregate frame.
* This includes enabling the aggregate flags if needed.
*/
ath_hal_chaintxdesc(ah, ds,
+ bufAddrList,
+ segLenList,
bf->bf_state.bfs_pktlen,
bf->bf_state.bfs_hdrlen,
HAL_PKT_TYPE_AMPDU, /* forces aggregate bits to be set */
bf->bf_state.bfs_keyix,
0, /* cipher, calculated from keyix */
bf->bf_state.bfs_ndelim,
- bf->bf_segs[i].ds_len, /* segment length */
i =3D=3D 0, /* first segment */
i =3D=3D bf->bf_nseg - 1, /* last segment */
bf->bf_next =3D=3D NULL /* last sub-frame in aggr */
@@ -394,6 +421,50 @@
}
=20
/*
+ * Set the rate control fields in the given descriptor based on
+ * the bf_state fields and node state.
+ *
+ * The bfs fields should already be set with the relevant rate
+ * control information, including whether MRR is to be enabled.
+ *
+ * Since the FreeBSD HAL currently sets up the first TX rate
+ * in ath_hal_setuptxdesc(), this will setup the MRR
+ * conditionally for the pre-11n chips, and call ath_buf_set_rate
+ * unconditionally for 11n chips. These require the 11n rate
+ * scenario to be set if MCS rates are enabled, so it's easier
+ * to just always call it. The caller can then only set rates 2, 3
+ * and 4 if multi-rate retry is needed.
+ */
+static void
+ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni,
+ struct ath_buf *bf)
+{
+ struct ath_rc_series *rc =3D bf->bf_state.bfs_rc;
+
+ /* If mrr is disabled, blank tries 1, 2, 3 */
+ if (! bf->bf_state.bfs_ismrr)
+ rc[1].tries =3D rc[2].tries =3D rc[3].tries =3D 0;
+
+ /*
+ * Always call - that way a retried descriptor will
+ * have the MRR fields overwritten.
+ *
+ * XXX TODO: see if this is really needed - setting up
+ * the first descriptor should set the MRR fields to 0
+ * for us anyway.
+ */
+ if (ath_tx_is_11n(sc)) {
+ ath_buf_set_rate(sc, ni, bf);
+ } else {
+ ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc
+ , rc[1].ratecode, rc[1].tries
+ , rc[2].ratecode, rc[2].tries
+ , rc[3].ratecode, rc[3].tries
+ );
+ }
+}
+
+/*
* Setup segments+descriptors for an 11n aggregate.
* bf_first is the first buffer in the aggregate.
* The descriptor list must already been linked together using
@@ -452,13 +523,6 @@
bf_first->bf_state.bfs_ctsduration);
=20
/*
- * Setup the last descriptor in the list.
- * bf_prev points to the last; bf is NULL here.
- */
- ath_hal_setuplasttxdesc(sc->sc_ah, bf_prev->bf_desc,
- bf_first->bf_desc);
-
- /*
* Set the first descriptor bf_lastds field to point to
* the last descriptor in the last subframe, that's where
* the status update will occur.
@@ -471,9 +535,38 @@
*/
bf_first->bf_last =3D bf_prev;
=20
+ /*
+ * setup first desc with rate and aggr info
+ */
+ ath_tx_set_ratectrl(sc, bf_first->bf_node, bf_first);
+
+ /*
+ * Setup the last descriptor in the list.
+ *
+ * bf_first->bf_lastds already points to it; the rate
+ * control information needs to be squirreled away here
+ * as well ans clearing the moreaggr/paddelim fields.
+ */
+ ath_hal_setuplasttxdesc(sc->sc_ah, bf_first->bf_lastds,
+ bf_first->bf_desc);
+
DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: end\n", __func__);
}
=20
+/*
+ * Hand-off a frame to the multicast TX queue.
+ *
+ * This is a software TXQ which will be appended to the CAB queue
+ * during the beacon setup code.
+ *
+ * XXX TODO: since the AR9300 EDMA TX queue support wants the QCU ID
+ * as part of the TX descriptor, bf_state.bfs_txq must be updated
+ * with the actual hardware txq, or all of this will fall apart.
+ *
+ * XXX It may not be a bad idea to just stuff the QCU ID into bf_state
+ * and retire bfs_txq; then make sure the CABQ QCU ID is populated
+ * correctly.
+ */
static void
ath_tx_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq,
struct ath_buf *bf)
@@ -639,8 +732,8 @@
*
* This must be called whether the queue is empty or not.
*/
-void
-ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq)
+static void
+ath_legacy_tx_dma_restart(struct ath_softc *sc, struct ath_txq *txq)
{
struct ath_hal *ah =3D sc->sc_ah;
struct ath_buf *bf, *bf_last;
@@ -658,7 +751,7 @@
return;
=20
ath_hal_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
- ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link);
+ ath_hal_gettxdesclinkptr(ah, bf_last->bf_lastds, &txq->axq_link);
ath_hal_txstart(ah, txq->axq_qnum);
}
=20
@@ -668,7 +761,8 @@
* The relevant hardware txq should be locked.
*/
static void
-ath_tx_handoff(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *=
bf)
+ath_legacy_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq,
+ struct ath_buf *bf)
{
ATH_TXQ_LOCK_ASSERT(txq);
=20
@@ -1001,16 +1095,22 @@
=09
/*
* Must disable multi-rate retry when using RTS/CTS.
- * XXX TODO: only for pre-11n NICs.
*/
- bf->bf_state.bfs_ismrr =3D 0;
- bf->bf_state.bfs_try0 =3D
- bf->bf_state.bfs_rc[0].tries =3D ATH_TXMGTTRY; /* XXX ew */
+ if (!sc->sc_mrrprot) {
+ bf->bf_state.bfs_ismrr =3D 0;
+ bf->bf_state.bfs_try0 =3D
+ bf->bf_state.bfs_rc[0].tries =3D ATH_TXMGTTRY; /* XXX ew */
+ }
}
=20
/*
* Setup the descriptor chain for a normal or fast-frame
* frame.
+ *
+ * XXX TODO: extend to include the destination hardware QCU ID.
+ * Make sure that is correct. Make sure that when being added
+ * to the mcastq, the CABQ QCUID is set or things will get a bit
+ * odd.
*/
static void
ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf)
@@ -1038,7 +1138,9 @@
bf->bf_lastds =3D ds;
bf->bf_last =3D bf;
=20
- /* XXX TODO: Setup descriptor chain */
+ /* Set rate control and descriptor chain for this frame */
+ ath_tx_set_ratectrl(sc, bf->bf_node, bf);
+ ath_tx_chaindesclist(sc, bf);
}
=20
/*
@@ -1087,50 +1189,6 @@
}
=20
/*
- * Set the rate control fields in the given descriptor based on
- * the bf_state fields and node state.
- *
- * The bfs fields should already be set with the relevant rate
- * control information, including whether MRR is to be enabled.
- *
- * Since the FreeBSD HAL currently sets up the first TX rate
- * in ath_hal_setuptxdesc(), this will setup the MRR
- * conditionally for the pre-11n chips, and call ath_buf_set_rate
- * unconditionally for 11n chips. These require the 11n rate
- * scenario to be set if MCS rates are enabled, so it's easier
- * to just always call it. The caller can then only set rates 2, 3
- * and 4 if multi-rate retry is needed.
- */
-static void
-ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni,
- struct ath_buf *bf)
-{
- struct ath_rc_series *rc =3D bf->bf_state.bfs_rc;
-
- /* If mrr is disabled, blank tries 1, 2, 3 */
- if (! bf->bf_state.bfs_ismrr)
- rc[1].tries =3D rc[2].tries =3D rc[3].tries =3D 0;
-
- /*
- * Always call - that way a retried descriptor will
- * have the MRR fields overwritten.
- *
- * XXX TODO: see if this is really needed - setting up
- * the first descriptor should set the MRR fields to 0
- * for us anyway.
- */
- if (ath_tx_is_11n(sc)) {
- ath_buf_set_rate(sc, ni, bf);
- } else {
- ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc
- , rc[1].ratecode, rc[1].tries
- , rc[2].ratecode, rc[2].tries
- , rc[3].ratecode, rc[3].tries
- );
- }
-}
-
-/*
* Transmit the given frame to the hardware.
*
* The frame must already be setup; rate control must already have
@@ -1155,8 +1213,6 @@
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_set_ratectrl(sc, bf->bf_node, bf);
- ath_tx_chaindesclist(sc, bf);
=20
/* Hand off to hardware */
ath_tx_handoff(sc, txq, bf);
@@ -1536,6 +1592,11 @@
DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: tid=3D%d, ac=3D%d, is_ampdu=3D%d\n",
__func__, tid, pri, is_ampdu);
=20
+ /* Set local packet state, used to queue packets to hardware */
+ bf->bf_state.bfs_tid =3D tid;
+ bf->bf_state.bfs_txq =3D txq;
+ bf->bf_state.bfs_pri =3D pri;
+
/*
* When servicing one or more stations in power-save mode
* (or) if there is some mcast data waiting on the mcast
@@ -1544,8 +1605,15 @@
*
* TODO: we should lock the mcastq before we check the length.
*/
- if (ismcast && (vap->iv_ps_sta || avp->av_mcastq.axq_depth))
+ if (ismcast && (vap->iv_ps_sta || avp->av_mcastq.axq_depth)) {
txq =3D &avp->av_mcastq;
+ /*
+ * Mark the frame as eventually belonging on the CAB
+ * queue, so the descriptor setup functions will
+ * correctly initialise the descriptor 'qcuId' field.
+ */
+ bf->bf_state.bfs_txq =3D sc->sc_cabq;
+ }
=20
/* Do the generic frame setup */
/* XXX should just bzero the bf_state? */
@@ -1554,6 +1622,10 @@
/*
* Acquire the TXQ lock early, so both the encap and seqno
* are allocated together.
+ *
+ * XXX should TXQ for CABQ traffic be the multicast queue,
+ * or the TXQ the given PRI would allocate from? (eg for
+ * sequence number allocation locking.)
*/
ATH_TXQ_LOCK(txq);
=20
@@ -1799,6 +1871,11 @@
bf->bf_state.bfs_shpream =3D
!! (params->ibp_flags & IEEE80211_BPF_SHORTPRE);
=20
+ /* Set local packet state, used to queue packets to hardware */
+ bf->bf_state.bfs_tid =3D WME_AC_TO_TID(pri);
+ bf->bf_state.bfs_txq =3D sc->sc_ac2q[pri];
+ bf->bf_state.bfs_pri =3D pri;
+
/* XXX this should be done in ath_tx_setrate() */
bf->bf_state.bfs_ctsrate =3D 0;
bf->bf_state.bfs_ctsduration =3D 0;
@@ -2370,12 +2447,20 @@
* Otherwise, schedule it as a single frame.
*/
static void
-ath_tx_xmit_aggr(struct ath_softc *sc, struct ath_node *an, struct ath_buf=
*bf)
+ath_tx_xmit_aggr(struct ath_softc *sc, struct ath_node *an,
+ struct ath_txq *txq, struct ath_buf *bf)
{
struct ath_tid *tid =3D &an->an_tid[bf->bf_state.bfs_tid];
- struct ath_txq *txq =3D bf->bf_state.bfs_txq;
+// struct ath_txq *txq =3D bf->bf_state.bfs_txq;
struct ieee80211_tx_ampdu *tap;
=20
+ if (txq !=3D bf->bf_state.bfs_txq) {
+ device_printf(sc->sc_dev, "%s: txq %d !=3D bfs_txq %d!\n",
+ __func__,
+ txq->axq_qnum,
+ bf->bf_state.bfs_txq->axq_qnum);
+ }
+
ATH_TXQ_LOCK_ASSERT(txq);
ATH_TID_LOCK_ASSERT(sc, tid);
=20
@@ -2404,8 +2489,6 @@
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_set_ratectrl(sc, bf->bf_node, bf);
- ath_tx_chaindesclist(sc, bf);
=20
/* Statistics */
sc->sc_aggr_stats.aggr_low_hwq_single_pkt++;
@@ -2456,6 +2539,8 @@
__func__, bf, pri, tid, IEEE80211_QOS_HAS_SEQ(wh));
=20
/* Set local packet state, used to queue packets to hardware */
+ /* XXX potentially duplicate info, re-check */
+ /* XXX remember, txq must be the hardware queue, not the av_mcastq */
bf->bf_state.bfs_tid =3D tid;
bf->bf_state.bfs_txq =3D txq;
bf->bf_state.bfs_pri =3D pri;
@@ -2493,7 +2578,7 @@
if (txq->axq_depth < sc->sc_hwq_limit) {
bf =3D TAILQ_FIRST(&atid->axq_q);
ATH_TXQ_REMOVE(atid, bf, bf_list);
- ath_tx_xmit_aggr(sc, an, bf);
+ ath_tx_xmit_aggr(sc, an, txq, bf);
DPRINTF(sc, ATH_DEBUG_SW_TX,
"%s: xmit_aggr\n",
__func__);
@@ -3847,7 +3932,6 @@
struct ath_buf *bf;
struct ath_txq *txq =3D sc->sc_ac2q[tid->ac];
struct ieee80211_tx_ampdu *tap;
- struct ieee80211_node *ni =3D &an->an_node;
ATH_AGGR_STATUS status;
ath_bufhead bf_q;
=20
@@ -3895,9 +3979,7 @@
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_chaindesclist(sc, bf);
ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
- ath_tx_set_ratectrl(sc, ni, bf);
=20
sc->sc_aggr_stats.aggr_nonbaw_pkt++;
=20
@@ -3955,9 +4037,7 @@
"%s: single-frame aggregate\n", __func__);
bf->bf_state.bfs_aggr =3D 0;
ath_tx_setds(sc, bf);
- ath_tx_chaindesclist(sc, bf);
ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
- ath_tx_set_ratectrl(sc, ni, bf);
if (status =3D=3D ATH_AGGR_BAW_CLOSED)
sc->sc_aggr_stats.aggr_baw_closed_single_pkt++;
else
@@ -3992,10 +4072,6 @@
*/
ath_tx_setds_11n(sc, bf);
=20
- /*
- * setup first desc with rate and aggr info
- */
- ath_tx_set_ratectrl(sc, ni, bf);
}
queuepkt:
//txq =3D bf->bf_state.bfs_txq;
@@ -4035,7 +4111,6 @@
{
struct ath_buf *bf;
struct ath_txq *txq =3D sc->sc_ac2q[tid->ac];
- struct ieee80211_node *ni =3D &an->an_node;
=20
DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: node %p: TID %d: called\n",
__func__, an, tid->tid);
@@ -4084,8 +4159,6 @@
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_chaindesclist(sc, bf);
- ath_tx_set_ratectrl(sc, ni, bf);
=20
/* Track outstanding buffer count to hardware */
/* aggregates are "one" buffer */
@@ -4493,4 +4566,10 @@
=20
sc->sc_tx.xmit_setup =3D ath_legacy_dma_txsetup;
sc->sc_tx.xmit_teardown =3D ath_legacy_dma_txteardown;
+ sc->sc_tx.xmit_attach_comp_func =3D ath_legacy_attach_comp_func;
+
+ sc->sc_tx.xmit_dma_restart =3D ath_legacy_tx_dma_restart;
+ sc->sc_tx.xmit_handoff =3D ath_legacy_xmit_handoff;
+ sc->sc_tx.xmit_processq =3D ath_legacy_tx_processq;
+ sc->sc_tx.xmit_drainq =3D ath_legacy_tx_draintxq;
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx.h
--- a/head/sys/dev/ath/if_ath_tx.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/sys/dev/ath/if_ath_tx.h 238710 2012-07-23 03:52:18Z adri=
an $
+ * $FreeBSD: head/sys/dev/ath/if_ath_tx.h 238931 2012-07-31 03:09:48Z adri=
an $
*/
#ifndef __IF_ATH_TX_H__
#define __IF_ATH_TX_H__
@@ -79,7 +79,6 @@
#define BAW_WITHIN(_start, _bawsz, _seqno) \
((((_seqno) - (_start)) & 4095) < (_bawsz))
=20
-extern void ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq);
extern void ath_freetx(struct mbuf *m);
extern void ath_tx_node_flush(struct ath_softc *sc, struct ath_node *an);
extern void ath_tx_txq_drain(struct ath_softc *sc, struct ath_txq *txq);
@@ -131,6 +130,15 @@
(_sc)->sc_tx.xmit_setup(_sc)
#define ath_txdma_teardown(_sc) \
(_sc)->sc_tx.xmit_teardown(_sc)
+#define ath_txq_restart_dma(_sc, _txq) \
+ (_sc)->sc_tx.xmit_dma_restart((_sc), (_txq))
+#define ath_tx_handoff(_sc, _txq, _bf) \
+ (_sc)->sc_tx.xmit_handoff((_sc), (_txq), (_bf))
+#define ath_tx_draintxq(_sc, _txq) \
+ (_sc)->sc_tx.xmit_drainq((_sc), (_txq))
+#define ath_tx_processq(_sc, _txq, _dosched) \
+ (_sc)->sc_tx.xmit_processq((_sc), (_txq), (_dosched))
+
extern void ath_xmit_setup_legacy(struct ath_softc *sc);
=20
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx_edma.c
--- a/head/sys/dev/ath/if_ath_tx_edma.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx_edma.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_edma.c 238710 2012-07-23 03=
:52:18Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_edma.c 238931 2012-07-31 03=
:09:48Z adrian $");
=20
/*
* Driver for the Atheros Wireless LAN controller.
@@ -119,28 +119,171 @@
=20
/*
* some general macros
- */
+ */
#define INCR(_l, _sz) (_l) ++; (_l) &=3D ((_sz) - 1)
#define DECR(_l, _sz) (_l) --; (_l) &=3D ((_sz) - 1)
=20
+/*
+ * XXX doesn't belong here, and should be tunable
+ */
+#define ATH_TXSTATUS_RING_SIZE 512
+
MALLOC_DECLARE(M_ATHDEV);
=20
+/*
+ * Re-initialise the DMA FIFO with the current contents of
+ * said FIFO.
+ *
+ * This should only be called as part of the chip reset path, as it
+ * assumes the FIFO is currently empty.
+ *
+ * TODO: verify that a cold/warm reset does clear the TX FIFO, so
+ * writing in a partially-filled FIFO will not cause double-entries
+ * to appear.
+ */
+static void
+ath_edma_dma_restart(struct ath_softc *sc, struct ath_txq *txq)
+{
+
+ device_printf(sc->sc_dev, "%s: called: txq=3D%p, qnum=3D%d\n",
+ __func__,
+ txq,
+ txq->axq_qnum);
+}
+
+/*
+ * Handoff this frame to the hardware.
+ *
+ * For the multicast queue, this will treat it as a software queue
+ * and append it to the list, after updating the MORE_DATA flag
+ * in the previous frame. The cabq processing code will ensure
+ * that the queue contents gets transferred over.
+ *
+ * For the hardware queues, this will queue a frame to the queue
+ * like before, then populate the FIFO from that. Since the
+ * EDMA hardware has 8 FIFO slots per TXQ, this ensures that
+ * frames such as management frames don't get prematurely dropped.
+ *
+ * This does imply that a similar flush-hwq-to-fifoq method will
+ * need to be called from the processq function, before the
+ * per-node software scheduler is called.
+ */
+static void
+ath_edma_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq,
+ struct ath_buf *bf)
+{
+
+ device_printf(sc->sc_dev, "%s: called; bf=3D%p, txq=3D%p, qnum=3D%d\n",
+ __func__,
+ bf,
+ txq,
+ txq->axq_qnum);
+
+ /*
+ * XXX For now this is a placeholder; free the buffer
+ * and inform the stack that the TX failed.
+ */
+ ath_tx_default_comp(sc, bf, 1);
+}
+
+static int
+ath_edma_setup_txfifo(struct ath_softc *sc, int qnum)
+{
+ struct ath_tx_edma_fifo *te =3D &sc->sc_txedma[qnum];
+
+ te->m_fifo =3D malloc(sizeof(struct ath_buf *) * HAL_TXFIFO_DEPTH,
+ M_ATHDEV,
+ M_NOWAIT | M_ZERO);
+ if (te->m_fifo =3D=3D NULL) {
+ device_printf(sc->sc_dev, "%s: malloc failed\n",
+ __func__);
+ return (-ENOMEM);
+ }
+
+ /*
+ * Set initial "empty" state.
+ */
+ te->m_fifo_head =3D te->m_fifo_tail =3D te->m_fifo_depth =3D 0;
+=09
+ return (0);
+}
+
+static int
+ath_edma_free_txfifo(struct ath_softc *sc, int qnum)
+{
+ struct ath_tx_edma_fifo *te =3D &sc->sc_txedma[qnum];
+
+ /* XXX TODO: actually deref the ath_buf entries? */
+ free(te->m_fifo, M_ATHDEV);
+ return (0);
+}
+
static int
ath_edma_dma_txsetup(struct ath_softc *sc)
{
+ int error;
+ int i;
=20
- /* XXX placeholder */
+ error =3D ath_descdma_alloc_desc(sc, &sc->sc_txsdma,
+ NULL, "txcomp", sc->sc_tx_statuslen, ATH_TXSTATUS_RING_SIZE);
+ if (error !=3D 0)
+ return (error);
+
+ ath_hal_setuptxstatusring(sc->sc_ah,
+ (void *) sc->sc_txsdma.dd_desc,
+ sc->sc_txsdma.dd_desc_paddr,
+ ATH_TXSTATUS_RING_SIZE);
+
+ for (i =3D 0; i < HAL_NUM_TX_QUEUES; i++) {
+ ath_edma_setup_txfifo(sc, i);
+ }
+
+
return (0);
}
=20
static int
ath_edma_dma_txteardown(struct ath_softc *sc)
{
+ int i;
=20
- /* XXX placeholder */
+ for (i =3D 0; i < HAL_NUM_TX_QUEUES; i++) {
+ ath_edma_free_txfifo(sc, i);
+ }
+
+ ath_descdma_cleanup(sc, &sc->sc_txsdma, NULL);
return (0);
}
=20
+static int
+ath_edma_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosche=
d)
+{
+
+ return (0);
+}
+
+static void
+ath_edma_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
+{
+
+}
+
+static void
+ath_edma_tx_proc(void *arg, int npending)
+{
+ struct ath_softc *sc =3D (struct ath_softc *) arg;
+
+ device_printf(sc->sc_dev, "%s: called, npending=3D%d\n",
+ __func__, npending);
+}
+
+static void
+ath_edma_attach_comp_func(struct ath_softc *sc)
+{
+
+ TASK_INIT(&sc->sc_txtask, 0, ath_edma_tx_proc, sc);
+}
+
void
ath_xmit_setup_edma(struct ath_softc *sc)
{
@@ -159,4 +302,10 @@
=20
sc->sc_tx.xmit_setup =3D ath_edma_dma_txsetup;
sc->sc_tx.xmit_teardown =3D ath_edma_dma_txteardown;
+ sc->sc_tx.xmit_attach_comp_func =3D ath_edma_attach_comp_func;
+
+ sc->sc_tx.xmit_dma_restart =3D ath_edma_dma_restart;
+ sc->sc_tx.xmit_handoff =3D ath_edma_xmit_handoff;
+ sc->sc_tx.xmit_processq =3D ath_edma_tx_processq;
+ sc->sc_tx.xmit_drainq =3D ath_edma_tx_draintxq;
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx_ht.c
--- a/head/sys/dev/ath/if_ath_tx_ht.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx_ht.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_ht.c 238711 2012-07-23 03:5=
5:19Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_ht.c 238949 2012-07-31 17:0=
8:29Z adrian $");
=20
#include "opt_inet.h"
#include "opt_ath.h"
@@ -511,6 +511,8 @@
series[i].RateFlags |=3D HAL_RATESERIES_HALFGI;
=20
series[i].Rate =3D rt->info[rc[i].rix].rateCode;
+ series[i].RateIndex =3D rc[i].rix;
+ series[i].tx_power_cap =3D 0x3f; /* XXX for now */
=20
/*
* PktDuration doesn't include slot, ACK, RTS, etc timing -
@@ -558,14 +560,12 @@
* This isn't useful for sending beacon frames, which has different needs
* wrt what's passed into the rate scenario function.
*/
-
void
ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni,
struct ath_buf *bf)
{
HAL_11N_RATE_SERIES series[4];
struct ath_desc *ds =3D bf->bf_desc;
- struct ath_desc *lastds =3D NULL;
struct ath_hal *ah =3D sc->sc_ah;
int is_pspoll =3D (bf->bf_state.bfs_atype =3D=3D HAL_PKT_TYPE_PSPOLL);
int ctsrate =3D bf->bf_state.bfs_ctsrate;
@@ -576,13 +576,6 @@
=20
ath_rateseries_setup(sc, ni, bf, series);
=20
- /* Enforce AR5416 aggregate limit - can't do RTS w/ an agg frame > 8k */
-
- /* Enforce RTS and CTS are mutually exclusive */
-
- /* Get a pointer to the last tx descriptor in the list */
- lastds =3D bf->bf_lastds;
-
#if 0
printf("pktlen: %d; flags 0x%x\n", pktlen, flags);
ath_rateseries_print(sc, series);
@@ -600,21 +593,6 @@
4, /* number of series */
flags);
=20
- /* Setup the last descriptor in the chain */
- /*
- * XXX Why is this done here, and not in the upper layer?
- * The rate control code stores a copy of the RC info in
- * the last descriptor as well as the first, then uses
- * the shadow copy in the last descriptor to see what the RC
- * decisions were. I'm not sure why; perhaps earlier hardware
- * overwrote the first descriptor contents.
- *
- * In the 802.11n case, it also clears the moreaggr/delim
- * fields. Again, this should be done by the caller of
- * ath_buf_set_rate().
- */
- ath_hal_setuplasttxdesc(ah, lastds, ds);
-
/* Set burst duration */
/*
* This is only required when doing 11n burst, not aggregation
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_athioctl.h
--- a/head/sys/dev/ath/if_athioctl.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_athioctl.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/sys/dev/ath/if_athioctl.h 238638 2012-07-20 02:17:48Z ad=
rian $
+ * $FreeBSD: head/sys/dev/ath/if_athioctl.h 238929 2012-07-31 02:18:10Z ad=
rian $
*/
=20
/*
@@ -231,6 +231,7 @@
caddr_t buf;
};
#define SIOCGATHNODERATESTATS _IOWR('i', 149, struct ath_rateioctl)
+#define SIOCGATHRATESTATS _IOWR('i', 150, struct ath_rateioctl)
=20
/*
* Radio capture format.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_athvar.h
--- a/head/sys/dev/ath/if_athvar.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_athvar.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/sys/dev/ath/if_athvar.h 238731 2012-07-24 01:18:19Z adri=
an $
+ * $FreeBSD: head/sys/dev/ath/if_athvar.h 239053 2012-08-05 11:24:21Z adri=
an $
*/
=20
/*
@@ -397,9 +397,28 @@
struct mbuf *m_rxpending;
};
=20
+struct ath_tx_edma_fifo {
+ struct ath_buf **m_fifo;
+ int m_fifolen;
+ int m_fifo_head;
+ int m_fifo_tail;
+ int m_fifo_depth;
+};
+
struct ath_tx_methods {
int (*xmit_setup)(struct ath_softc *sc);
int (*xmit_teardown)(struct ath_softc *sc);
+ void (*xmit_attach_comp_func)(struct ath_softc *sc);
+
+ void (*xmit_dma_restart)(struct ath_softc *sc,
+ struct ath_txq *txq);
+ void (*xmit_handoff)(struct ath_softc *sc,
+ struct ath_txq *txq, struct ath_buf *bf);
+
+ void (*xmit_drainq)(struct ath_softc *sc,
+ struct ath_txq *txq);
+ int (*xmit_processq)(struct ath_softc *sc,
+ struct ath_txq *txq, int dosched);
};
=20
struct ath_softc {
@@ -418,6 +437,7 @@
struct ath_rx_methods sc_rx;
struct ath_rx_edma sc_rxedma[HAL_NUM_RX_QUEUES]; /* HP/LP queues */
struct ath_tx_methods sc_tx;
+ struct ath_tx_edma_fifo sc_txedma[HAL_NUM_TX_QUEUES];
=20
int sc_rx_statuslen;
int sc_tx_desclen;
@@ -443,6 +463,7 @@
void (*sc_setdefantenna)(struct ath_softc *, u_int);
unsigned int sc_invalid : 1,/* disable hardware accesses */
sc_mrretry : 1,/* multi-rate retry support */
+ sc_mrrprot : 1,/* MRR + protection support */
sc_softled : 1,/* enable LED gpio status */
sc_hardled : 1,/* enable MAC LED status */
sc_splitmic : 1,/* split TKIP MIC keys */
@@ -557,6 +578,7 @@
int sc_txbuf_cnt; /* how many buffers avail */
struct ath_descdma sc_txdma_mgmt; /* mgmt TX descriptors */
ath_bufhead sc_txbuf_mgmt; /* mgmt transmit buffer */
+ struct ath_descdma sc_txsdma; /* EDMA TX status desc's */
struct mtx sc_txbuflock; /* txbuf lock */
char sc_txname[12]; /* e.g. "ath0_buf" */
u_int sc_txqsetup; /* h/w queues setup */
@@ -1085,8 +1107,9 @@
_txr1, _txtr1, _txr2, _txtr2, _txr3, _txtr3) \
((*(_ah)->ah_setupXTxDesc)((_ah), (_ds), \
(_txr1), (_txtr1), (_txr2), (_txtr2), (_txr3), (_txtr3)))
-#define ath_hal_filltxdesc(_ah, _ds, _l, _first, _last, _ds0) \
- ((*(_ah)->ah_fillTxDesc)((_ah), (_ds), (_l), (_first), (_last), (_ds0)))
+#define ath_hal_filltxdesc(_ah, _ds, _b, _l, _did, _qid, _first, _last, _d=
s0) \
+ ((*(_ah)->ah_fillTxDesc)((_ah), (_ds), (_b), (_l), (_did), (_qid), \
+ (_first), (_last), (_ds0)))
#define ath_hal_txprocdesc(_ah, _ds, _ts) \
((*(_ah)->ah_procTxDesc)((_ah), (_ds), (_ts)))
#define ath_hal_gettxintrtxqs(_ah, _txqs) \
@@ -1107,10 +1130,10 @@
_txr0, _txtr0, _antm, _rcr, _rcd) \
((*(_ah)->ah_setupFirstTxDesc)((_ah), (_ds), (_aggrlen), (_flags), \
(_txpower), (_txr0), (_txtr0), (_antm), (_rcr), (_rcd)))
-#define ath_hal_chaintxdesc(_ah, _ds, _pktlen, _hdrlen, _type, _keyix, \
- _cipher, _delims, _seglen, _first, _last, _lastaggr) \
- ((*(_ah)->ah_chainTxDesc)((_ah), (_ds), (_pktlen), (_hdrlen), \
- (_type), (_keyix), (_cipher), (_delims), (_seglen), \
+#define ath_hal_chaintxdesc(_ah, _ds, _bl, _sl, _pktlen, _hdrlen, _type, \
+ _keyix, _cipher, _delims, _first, _last, _lastaggr) \
+ ((*(_ah)->ah_chainTxDesc)((_ah), (_ds), (_bl), (_sl), \
+ (_pktlen), (_hdrlen), (_type), (_keyix), (_cipher), (_delims), \
(_first), (_last), (_lastaggr)))
#define ath_hal_setuplasttxdesc(_ah, _ds, _ds0) \
((*(_ah)->ah_setupLastTxDesc)((_ah), (_ds), (_ds0)))
@@ -1120,7 +1143,7 @@
(_series), (_ns), (_flags)))
=20
#define ath_hal_set11n_aggr_first(_ah, _ds, _len, _num) \
- ((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len), (_num)))
+ ((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len)))
#define ath_hal_set11naggrmiddle(_ah, _ds, _num) \
((*(_ah)->ah_set11nAggrMiddle)((_ah), (_ds), (_num)))
#define ath_hal_set11n_aggr_last(_ah, _ds) \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/bce/if_bce.c
--- a/head/sys/dev/bce/if_bce.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/bce/if_bce.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/bce/if_bce.c 235816 2012-05-23 01:20:25Z =
yongari $");
+__FBSDID("$FreeBSD: head/sys/dev/bce/if_bce.c 239110 2012-08-06 22:53:24Z =
davide $");
=20
/*
* The following controllers are supported by this driver:
@@ -10513,7 +10513,7 @@
(BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_CPQ_VALID_CNT << 8) |
(BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_MGMQ_VALID_CNT);
=20
- if ((BCE_CHIP_NUM(sc) =3D=3D BCE_CHIP_NUM_5709)
+ if (BCE_CHIP_NUM(sc) =3D=3D BCE_CHIP_NUM_5709)
val =3D val |
(BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PCSQ_VALID_CNT_XI <<
24);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/cesa/cesa.c
--- a/head/sys/dev/cesa/cesa.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/cesa/cesa.c Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/cesa/cesa.c 232883 2012-03-12 19:29:35Z s=
cottl $");
+__FBSDID("$FreeBSD: head/sys/dev/cesa/cesa.c 238873 2012-07-28 21:56:24Z h=
rs $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -1005,6 +1005,7 @@
=20
switch (d) {
case MV_DEV_88F6281:
+ case MV_DEV_88F6282:
sc->sc_tperr =3D 0;
break;
case MV_DEV_MV78100:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_=
provider.c
--- a/head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c Mon Jul 30 11:44:18 =
2012 +0300
+++ b/head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c Fri Aug 10 14:19:25 =
2012 +0300
@@ -27,7 +27,7 @@
=20
**************************************************************************=
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c 23726=
3 2012-06-19 07:34:13Z np $");
+__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c 23910=
1 2012-08-06 18:51:14Z dim $");
=20
#include "opt_inet.h"
=20
@@ -487,7 +487,7 @@
__be64 *page_list =3D NULL;
int shift =3D 0;
u64 total_size;
- int npages;
+ int npages =3D 0;
int ret;
=20
CTR3(KTR_IW_CXGB, "%s ib_mr %p ib_pd %p", __FUNCTION__, mr, pd);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/cxgbe/firmware/t4fw_inter=
face.h
--- a/head/sys/dev/cxgbe/firmware/t4fw_interface.h Mon Jul 30 11:44:18 2012=
+0300
+++ b/head/sys/dev/cxgbe/firmware/t4fw_interface.h Fri Aug 10 14:19:25 2012=
+0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/dev/cxgbe/firmware/t4fw_interface.h 237436 2012-06-2=
2 07:51:15Z np $
+ * $FreeBSD: head/sys/dev/cxgbe/firmware/t4fw_interface.h 239102 2012-08-0=
6 18:54:17Z dim $
*
*/
=20
@@ -7413,7 +7413,7 @@
#define G_FW_HDR_FW_VER_BUILD(x) \
(((x) >> S_FW_HDR_FW_VER_BUILD) & M_FW_HDR_FW_VER_BUILD)
=20
-enum fw_hdr_intfver {
+enum {
FW_HDR_INTFVER_NIC =3D 0x00,
FW_HDR_INTFVER_VNIC =3D 0x00,
FW_HDR_INTFVER_OFLD =3D 0x00,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/e1000/if_igb.c
--- a/head/sys/dev/e1000/if_igb.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/e1000/if_igb.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
POSSIBILITY OF SUCH DAMAGE.
=20
**************************************************************************=
****/
-/*$FreeBSD: head/sys/dev/e1000/if_igb.c 238214 2012-07-07 20:21:05Z jfv $*/
+/*$FreeBSD: head/sys/dev/e1000/if_igb.c 239109 2012-08-06 22:43:49Z jfv $*/
=20
=20
#ifdef HAVE_KERNEL_OPTION_HEADERS
@@ -100,7 +100,7 @@
/*********************************************************************
* Driver version:
*********************************************************************/
-char igb_driver_version[] =3D "version - 2.3.4";
+char igb_driver_version[] =3D "version - 2.3.5";
=20
=20
/*********************************************************************
@@ -961,7 +961,15 @@
que =3D &adapter->queues[i];
if (((txr->queue_status & IGB_QUEUE_DEPLETED) =3D=3D 0) &&
IGB_TX_TRYLOCK(txr)) {
- err =3D igb_mq_start_locked(ifp, txr, m);
+ struct mbuf *pm =3D NULL;
+ /*
+ ** Try to queue first to avoid
+ ** out-of-order delivery, but=20
+ ** settle for it if that fails
+ */
+ if (m && drbr_enqueue(ifp, txr->br, m))
+ pm =3D m;
+ err =3D igb_mq_start_locked(ifp, txr, pm);
IGB_TX_UNLOCK(txr);
} else {
err =3D drbr_enqueue(ifp, txr->br, m);
@@ -981,7 +989,7 @@
IGB_TX_LOCK_ASSERT(txr);
=20
if (((ifp->if_drv_flags & IFF_DRV_RUNNING) =3D=3D 0) ||
- (txr->queue_status =3D=3D IGB_QUEUE_DEPLETED) ||
+ (txr->queue_status & IGB_QUEUE_DEPLETED) ||
adapter->link_active =3D=3D 0) {
if (m !=3D NULL)
err =3D drbr_enqueue(ifp, txr->br, m);
@@ -1494,12 +1502,6 @@
}
=20
#ifdef DEVICE_POLLING
-/*********************************************************************
- *
- * Legacy polling routine : if using this code you MUST be sure that
- * multiqueue is not defined, ie, set igb_num_queues to 1.
- *
- *********************************************************************/
#if __FreeBSD_version >=3D 800000
#define POLL_RETURN_COUNT(a) (a)
static int
@@ -1510,8 +1512,8 @@
igb_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
{
struct adapter *adapter =3D ifp->if_softc;
- struct igb_queue *que =3D adapter->queues;
- struct tx_ring *txr =3D adapter->tx_rings;
+ struct igb_queue *que;
+ struct tx_ring *txr;
u32 reg_icr, rx_done =3D 0;
u32 loop =3D IGB_MAX_LOOP;
bool more;
@@ -1533,20 +1535,26 @@
}
IGB_CORE_UNLOCK(adapter);
=20
- igb_rxeof(que, count, &rx_done);
-
- IGB_TX_LOCK(txr);
- do {
- more =3D igb_txeof(txr);
- } while (loop-- && more);
+ for (int i =3D 0; i < adapter->num_queues; i++) {
+ que =3D &adapter->queues[i];
+ txr =3D que->txr;
+
+ igb_rxeof(que, count, &rx_done);
+
+ IGB_TX_LOCK(txr);
+ do {
+ more =3D igb_txeof(txr);
+ } while (loop-- && more);
#if __FreeBSD_version >=3D 800000
- if (!drbr_empty(ifp, txr->br))
- igb_mq_start_locked(ifp, txr, NULL);
+ if (!drbr_empty(ifp, txr->br))
+ igb_mq_start_locked(ifp, txr, NULL);
#else
- if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
- igb_start_locked(txr, ifp);
+ if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+ igb_start_locked(txr, ifp);
#endif
- IGB_TX_UNLOCK(txr);
+ IGB_TX_UNLOCK(txr);
+ }
+
return POLL_RETURN_COUNT(rx_done);
}
#endif /* DEVICE_POLLING */
@@ -2522,7 +2530,6 @@
"Bound queue %d to cpu %d\n",
i,igb_last_bind_cpu);
igb_last_bind_cpu =3D CPU_NEXT(igb_last_bind_cpu);
- igb_last_bind_cpu =3D igb_last_bind_cpu % mp_ncpus;
}
#if __FreeBSD_version >=3D 800000
TASK_INIT(&que->txr->txq_task, 0, igb_deferred_mq_start,
@@ -4894,7 +4901,7 @@
}
=20
if (done !=3D NULL)
- *done =3D rxdone;
+ *done +=3D rxdone;
=20
IGB_RX_UNLOCK(rxr);
return ((staterr & E1000_RXD_STAT_DD) ? TRUE : FALSE);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/e1000/if_lem.c
--- a/head/sys/dev/e1000/if_lem.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/e1000/if_lem.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
/*************************************************************************=
*****
=20
- Copyright (c) 2001-2011, Intel Corporation=20
+ Copyright (c) 2001-2012, Intel Corporation=20
All rights reserved.
=20
Redistribution and use in source and binary forms, with or without=20
@@ -30,7 +30,7 @@
POSSIBILITY OF SUCH DAMAGE.
=20
**************************************************************************=
****/
-/*$FreeBSD: head/sys/dev/e1000/if_lem.c 238770 2012-07-25 12:51:33Z luigi =
$*/
+/*$FreeBSD: head/sys/dev/e1000/if_lem.c 238953 2012-07-31 18:44:10Z jfv $*/
=20
#ifdef HAVE_KERNEL_OPTION_HEADERS
#include "opt_device_polling.h"
@@ -85,7 +85,7 @@
/*********************************************************************
* Legacy Em Driver version:
*********************************************************************/
-char lem_driver_version[] =3D "1.0.4";
+char lem_driver_version[] =3D "1.0.5";
=20
/*********************************************************************
* PCI Device ID Table
@@ -239,16 +239,12 @@
static int lem_enable_phy_wakeup(struct adapter *);
static void lem_led_func(void *, int);
=20
-#define EM_LEGACY_IRQ /* slightly faster, at least in qemu */
-#ifdef EM_LEGACY_IRQ
static void lem_intr(void *);
-#else /* FAST IRQ */
static int lem_irq_fast(void *);
static void lem_handle_rxtx(void *context, int pending);
static void lem_handle_link(void *context, int pending);
static void lem_add_rx_process_limit(struct adapter *, const char *,
const char *, int *, int);
-#endif /* ~EM_LEGACY_IRQ */
=20
#ifdef DEVICE_POLLING
static poll_handler_t lem_poll;
@@ -305,11 +301,13 @@
TUNABLE_INT("hw.em.smart_pwr_down", &lem_smart_pwr_down);
TUNABLE_INT("hw.em.sbp", &lem_debug_sbp);
=20
-#ifndef EM_LEGACY_IRQ
+/* Interrupt style - default to fast */
+static int lem_use_legacy_irq =3D 0;
+TUNABLE_INT("hw.em.use_legacy_irq", &lem_use_legacy_irq);
+
/* How many packets rxeof tries to clean at a time */
static int lem_rx_process_limit =3D 100;
TUNABLE_INT("hw.em.rx_process_limit", &lem_rx_process_limit);
-#endif
=20
/* Flow control setting - default to FULL */
static int lem_fc_setting =3D e1000_fc_full;
@@ -451,12 +449,10 @@
lem_tx_abs_int_delay_dflt);
}
=20
-#ifndef EM_LEGACY_IRQ
/* Sysctls for limiting the amount of work done in the taskqueue */
lem_add_rx_process_limit(adapter, "rx_processing_limit",
"max number of rx packets to process", &adapter->rx_process_limit,
lem_rx_process_limit);
-#endif
=20
/* Sysctl for setting the interface flow control */
lem_set_flow_cntrl(adapter, "flow_control",
@@ -1198,22 +1194,6 @@
callout_reset(&adapter->timer, hz, lem_local_timer, adapter);
e1000_clear_hw_cntrs_base_generic(&adapter->hw);
=20
- /* MSI/X configuration for 82574 */
- if (adapter->hw.mac.type =3D=3D e1000_82574) {
- int tmp;
- tmp =3D E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
- tmp |=3D E1000_CTRL_EXT_PBA_CLR;
- E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp);
- /*
- ** Set the IVAR - interrupt vector routing.
- ** Each nibble represents a vector, high bit
- ** is enable, other 3 bits are the MSIX table
- ** entry, we map RXQ0 to 0, TXQ0 to 1, and
- ** Link (other) to 2, hence the magic number.
- */
- E1000_WRITE_REG(&adapter->hw, E1000_IVAR, 0x800A0908);
- }
-
#ifdef DEVICE_POLLING
/*
* Only enable interrupts if we are not polling, make sure
@@ -1282,7 +1262,6 @@
}
#endif /* DEVICE_POLLING */
=20
-#ifdef EM_LEGACY_IRQ=20
/*********************************************************************
*
* Legacy Interrupt Service routine =20
@@ -1296,7 +1275,8 @@
u32 reg_icr;
=20
=20
- if (ifp->if_capenable & IFCAP_POLLING)
+ if ((ifp->if_capenable & IFCAP_POLLING) ||
+ ((ifp->if_drv_flags & IFF_DRV_RUNNING) =3D=3D 0))
return;
=20
EM_CORE_LOCK(adapter);
@@ -1304,11 +1284,10 @@
if (reg_icr & E1000_ICR_RXO)
adapter->rx_overruns++;
=20
- if ((reg_icr =3D=3D 0xffffffff) || (reg_icr =3D=3D 0))
- goto out;
-
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) =3D=3D 0)
- goto out;
+ if ((reg_icr =3D=3D 0xffffffff) || (reg_icr =3D=3D 0)) {
+ EM_CORE_UNLOCK(adapter);
+ return;
+ }
=20
if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
callout_stop(&adapter->timer);
@@ -1318,23 +1297,22 @@
lem_tx_purge(adapter);
callout_reset(&adapter->timer, hz,
lem_local_timer, adapter);
- goto out;
+ EM_CORE_UNLOCK(adapter);
+ return;
}
=20
+ EM_CORE_UNLOCK(adapter);
+ lem_rxeof(adapter, -1, NULL);
+
EM_TX_LOCK(adapter);
- lem_rxeof(adapter, -1, NULL);
lem_txeof(adapter);
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
lem_start_locked(ifp);
EM_TX_UNLOCK(adapter);
-
-out:
- EM_CORE_UNLOCK(adapter);
return;
}
=20
-#else /* EM_FAST_IRQ, then fast interrupt routines only */
=20
static void
lem_handle_link(void *context, int pending)
@@ -1418,7 +1396,6 @@
adapter->rx_overruns++;
return FILTER_HANDLED;
}
-#endif /* ~EM_LEGACY_IRQ */
=20
=20
/*********************************************************************
@@ -2215,19 +2192,21 @@
return (ENXIO);
}
=20
-#ifdef EM_LEGACY_IRQ
- /* We do Legacy setup */
- if ((error =3D bus_setup_intr(dev, adapter->res[0],
- INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter,
- &adapter->tag[0])) !=3D 0) {
- device_printf(dev, "Failed to register interrupt handler");
- return (error);
+ /* Do Legacy setup? */
+ if (lem_use_legacy_irq) {
+ if ((error =3D bus_setup_intr(dev, adapter->res[0],
+ INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter,
+ &adapter->tag[0])) !=3D 0) {
+ device_printf(dev,
+ "Failed to register interrupt handler");
+ return (error);
+ }
+ return (0);
}
=20
-#else /* FAST_IRQ */
/*
- * Try allocating a fast interrupt and the associated deferred
- * processing contexts.
+ * Use a Fast interrupt and the associated
+ * deferred processing contexts.
*/
TASK_INIT(&adapter->rxtx_task, 0, lem_handle_rxtx, adapter);
TASK_INIT(&adapter->link_task, 0, lem_handle_link, adapter);
@@ -2244,7 +2223,6 @@
adapter->tq =3D NULL;
return (error);
}
-#endif /* EM_LEGACY_IRQ */
=09
return (0);
}
@@ -3302,20 +3280,6 @@
E1000_WRITE_REG(&adapter->hw, E1000_ITR, DEFAULT_ITR);
}
=20
- /*
- ** When using MSIX interrupts we need to throttle
- ** using the EITR register (82574 only)
- */
- if (adapter->msix)
- for (int i =3D 0; i < 4; i++)
- E1000_WRITE_REG(&adapter->hw,
- E1000_EITR_82574(i), DEFAULT_ITR);
-
- /* Disable accelerated ackknowledge */
- if (adapter->hw.mac.type =3D=3D e1000_82574)
- E1000_WRITE_REG(&adapter->hw,
- E1000_RFCTL, E1000_RFCTL_ACK_DIS);
-
/* Setup the Base and Length of the Rx Descriptor Ring */
bus_addr =3D adapter->rxdma.dma_paddr;
E1000_WRITE_REG(&adapter->hw, E1000_RDLEN(0),
@@ -3835,10 +3799,6 @@
struct e1000_hw *hw =3D &adapter->hw;
u32 ims_mask =3D IMS_ENABLE_MASK;
=20
- if (adapter->msix) {
- E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK);
- ims_mask |=3D EM_MSIX_MASK;
- }=20
E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
}
=20
@@ -3847,9 +3807,7 @@
{
struct e1000_hw *hw =3D &adapter->hw;
=20
- if (adapter->msix)
- E1000_WRITE_REG(hw, EM_EIAC, 0);
- E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
+ E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
}
=20
/*
@@ -4683,7 +4641,6 @@
OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);
}
=20
-#ifndef EM_LEGACY_IRQ
static void
lem_add_rx_process_limit(struct adapter *adapter, const char *name,
const char *description, int *limit, int value)
@@ -4693,4 +4650,3 @@
SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);
}
-#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/esp/ncr53c9x.c
--- a/head/sys/dev/esp/ncr53c9x.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/esp/ncr53c9x.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*
*/
=20
-/* $NetBSD: ncr53c9x.c,v 1.143 2011/07/31 18:39:00 jakllsch Exp $ */
+/* $NetBSD: ncr53c9x.c,v 1.145 2012/06/18 21:23:56 martin Exp $ */
=20
/*-
* Copyright (c) 1998, 2002 The NetBSD Foundation, Inc.
@@ -98,7 +98,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/esp/ncr53c9x.c 235822 2012-05-23 06:49:50=
Z delphij $");
+__FBSDID("$FreeBSD: head/sys/dev/esp/ncr53c9x.c 239089 2012-08-06 08:58:54=
Z marius $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -256,7 +256,7 @@
return (EINVAL);
}
=20
- device_printf(sc->sc_dev, "%s, %dMHz, SCSI ID %d\n",
+ device_printf(sc->sc_dev, "%s, %d MHz, SCSI ID %d\n",
ncr53c9x_variant_names[sc->sc_rev], sc->sc_freq, sc->sc_id);
=20
sc->sc_ntarg =3D (sc->sc_rev =3D=3D NCR_VARIANT_FAS366) ? 16 : 8;
@@ -890,11 +890,8 @@
sc->sc_cmdp =3D cmd;
error =3D NCRDMA_SETUP(sc, &sc->sc_cmdp, &sc->sc_cmdlen, 0,
&dmasize);
- if (error !=3D 0) {
- sc->sc_cmdlen =3D 0;
- sc->sc_cmdp =3D NULL;
+ if (error !=3D 0)
goto cmd;
- }
=20
/* Program the SCSI counter. */
NCR_SET_COUNT(sc, dmasize);
@@ -920,6 +917,7 @@
*/
=20
/* Now get the command into the FIFO. */
+ sc->sc_cmdlen =3D 0;
ncr53c9x_wrfifo(sc, cmd, clen);
=20
/* And get the target's attention. */
@@ -1771,7 +1769,7 @@
struct ncr53c9x_linfo *li;
struct ncr53c9x_tinfo *ti;
uint8_t *pb;
- int lun, plen;
+ int len, lun;
=20
NCR_LOCK_ASSERT(sc, MA_OWNED);
=20
@@ -1818,15 +1816,15 @@
*/
case NCR_RESELECTED:
pb =3D sc->sc_imess + 1;
- plen =3D sc->sc_imlen - 1;
+ len =3D sc->sc_imlen - 1;
break;
=20
default:
pb =3D sc->sc_imess;
- plen =3D sc->sc_imlen;
+ len =3D sc->sc_imlen;
}
=20
- if (__verify_msg_format(pb, plen))
+ if (__verify_msg_format(pb, len))
goto gotit;
}
=20
@@ -1963,6 +1961,29 @@
sc->sc_dleft =3D ecb->dleft;
break;
=20
+ case MSG_IGN_WIDE_RESIDUE:
+ NCR_MSGS(("ignore wide residue (%d bytes)",
+ sc->sc_imess[1]));
+ if (sc->sc_imess[1] !=3D 1) {
+ xpt_print_path(ecb->ccb->ccb_h.path);
+ printf("unexpected MESSAGE IGNORE WIDE "
+ "RESIDUE (%d bytes); sending REJECT\n",
+ sc->sc_imess[1]);
+ goto reject;
+ }
+ /*
+ * If there was a last transfer of an even number of
+ * bytes, wipe the "done" memory and adjust by one
+ * byte (sc->sc_imess[1]).
+ */
+ len =3D sc->sc_dleft - ecb->dleft;
+ if (len !=3D 0 && (len & 1) =3D=3D 0) {
+ ecb->flags &=3D ~ECB_TENTATIVE_DONE;
+ sc->sc_dp =3D (char *)sc->sc_dp - 1;
+ sc->sc_dleft--;
+ }
+ break;
+
case MSG_EXTENDED:
NCR_MSGS(("extended(%x) ", sc->sc_imess[2]));
switch (sc->sc_imess[2]) {
@@ -2272,6 +2293,7 @@
/*
* XXX FIFO size
*/
+ sc->sc_cmdlen =3D 0;
ncr53c9x_flushfifo(sc);
ncr53c9x_wrfifo(sc, sc->sc_omp, sc->sc_omlen);
NCRCMD(sc, NCRCMD_TRANS);
@@ -2811,9 +2833,10 @@
* (Timing problems?)
*/
if (sc->sc_features & NCR_F_DMASELECT) {
- if (sc->sc_cmdlen =3D=3D 0)
+ if (sc->sc_cmdlen =3D=3D 0) {
/* Hope for the best... */
break;
+ }
} else if ((NCR_READ_REG(sc, NCR_FFLAG) &
NCRFIFO_FF) =3D=3D 0) {
/* Hope for the best... */
@@ -2986,11 +3009,8 @@
sc->sc_cmdp =3D (void *)&ecb->cmd.cmd;
error =3D NCRDMA_SETUP(sc, &sc->sc_cmdp, &sc->sc_cmdlen,
0, &size);
- if (error !=3D 0) {
- sc->sc_cmdlen =3D 0;
- sc->sc_cmdp =3D NULL;
+ if (error !=3D 0)
goto cmd;
- }
=20
/* Program the SCSI counter. */
NCR_SET_COUNT(sc, size);
@@ -3005,6 +3025,7 @@
break;
}
cmd:
+ sc->sc_cmdlen =3D 0;
ncr53c9x_wrfifo(sc, (uint8_t *)&ecb->cmd.cmd, ecb->clen);
NCRCMD(sc, NCRCMD_TRANS);
sc->sc_prevphase =3D COMMAND_PHASE;
@@ -3046,7 +3067,7 @@
goto finish;
}
=20
- /* Target returned to data phase: wipe "done" memory */
+ /* Target returned to data phase: wipe "done" memory. */
ecb->flags &=3D ~ECB_TENTATIVE_DONE;
=20
/* Program the SCSI counter. */
@@ -3105,8 +3126,8 @@
* overhead to pay. For example, selecting, sending a message
* and command and then doing some work can be done in one "pass".
*
- * The delay is a heuristic. It is 2 when at 20MHz, 2 at 25MHz and 1
- * at 40MHz. This needs testing.
+ * The delay is a heuristic. It is 2 when at 20 MHz, 2 at 25 MHz and
+ * 1 at 40 MHz. This needs testing.
*/
microtime(&wait);
wait.tv_usec +=3D 50 / sc->sc_freq;
@@ -3191,8 +3212,7 @@
ncr53c9x_abort(sc, ecb);
=20
/* Disable sync mode if stuck in a data phase. */
- if (ecb =3D=3D sc->sc_nexus &&
- ti->curr.offset !=3D 0 &&
+ if (ecb =3D=3D sc->sc_nexus && ti->curr.offset !=3D 0 &&
(sc->sc_phase & (MSGI | CDI)) =3D=3D 0) {
/* XXX ASYNC CALLBACK! */
ti->goal.offset =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/hptiop/hptiop.c
--- a/head/sys/dev/hptiop/hptiop.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/hptiop/hptiop.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/hptiop/hptiop.c 236379 2012-06-01 04:34:4=
9Z eadler $");
+__FBSDID("$FreeBSD: head/sys/dev/hptiop/hptiop.c 239084 2012-08-06 05:27:2=
6Z delphij $");
=20
#include <sys/param.h>
#include <sys/types.h>
@@ -1284,9 +1284,13 @@
id =3D pci_get_device(dev);
=20
switch (id) {
- case 0x4322:
+ case 0x4210:
+ case 0x4211:
+ case 0x4310:
+ case 0x4311:
+ case 0x4320:
case 0x4321:
- case 0x4320:
+ case 0x4322:
sas =3D 1;
case 0x3220:
case 0x3320:
@@ -1296,12 +1300,14 @@
case 0x3511:
case 0x3521:
case 0x3522:
+ case 0x3530:
case 0x3540:
+ case 0x3560:
ops =3D &hptiop_itl_ops;
break;
+ case 0x3020:
case 0x3120:
case 0x3122:
- case 0x3020:
ops =3D &hptiop_mv_ops;
break;
default:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ipmi/ipmi.c
--- a/head/sys/dev/ipmi/ipmi.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ipmi/ipmi.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ipmi/ipmi.c 227309 2011-11-07 15:43:11Z e=
d $");
+__FBSDID("$FreeBSD: head/sys/dev/ipmi/ipmi.c 239128 2012-08-07 12:40:31Z j=
hb $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -653,11 +653,12 @@
if (timeout =3D=3D 0)
timeout =3D 1;
e =3D ipmi_set_watchdog(sc, timeout);
- if (e =3D=3D 0)
+ if (e =3D=3D 0) {
*error =3D 0;
- else
+ sc->ipmi_watchdog_active =3D 1;
+ } else
(void)ipmi_set_watchdog(sc, 0);
- } else {
+ } else if (atomic_readandclear_int(&sc->ipmi_watchdog_active) !=3D 0) {
e =3D ipmi_set_watchdog(sc, 0);
if (e !=3D 0 && cmd =3D=3D 0)
*error =3D EOPNOTSUPP;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ipmi/ipmivars.h
--- a/head/sys/dev/ipmi/ipmivars.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ipmi/ipmivars.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: head/sys/dev/ipmi/ipmivars.h 239128 2012-08-07 12:40:31Z jhb $
*/
=20
#ifndef __IPMIVARS_H__
@@ -105,6 +105,7 @@
struct cdev *ipmi_cdev;
TAILQ_HEAD(,ipmi_request) ipmi_pending_requests;
eventhandler_tag ipmi_watchdog_tag;
+ int ipmi_watchdog_active;
struct intr_config_hook ipmi_ich;
struct mtx ipmi_lock;
struct cv ipmi_request_added;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp.c
--- a/head/sys/dev/isp/isp.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp.c Fri Aug 10 14:19:25 2012 +0300
@@ -47,7 +47,7 @@
#endif
#ifdef __FreeBSD__
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp.c 238486 2012-07-15 14:40:49Z bru=
effer $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp.c 238869 2012-07-28 20:06:29Z mja=
cob $");
#include <dev/isp/isp_freebsd.h>
#endif
#ifdef __OpenBSD__
@@ -65,7 +65,7 @@
*/
#define MBOX_DELAY_COUNT 1000000 / 100
#define ISP_MARK_PORTDB(a, b, c) \
- isp_prt(isp, ISP_LOGSANCFG, \
+ isp_prt(isp, ISP_LOG_SANCFG, \
"Chan %d ISP_MARK_PORTDB at LINE %d", b, __LINE__); \
isp_mark_portdb(a, b, c)
=20
@@ -670,8 +670,7 @@
ISP_DELAY(100);
if (--loops < 0) {
ISP_RESET0(isp);
- isp_prt(isp, ISP_LOGERR,
- "MBOX_BUSY never cleared on reset");
+ isp_prt(isp, ISP_LOGERR, "MBOX_BUSY never cleared on reset");
return;
}
}
@@ -1715,6 +1714,25 @@
=20
icbp->icb_xfwoptions =3D fcp->isp_xfwoptions;
=20
+ if (ISP_CAP_FCTAPE(isp)) {
+ if (isp->isp_confopts & ISP_CFG_NOFCTAPE)
+ icbp->icb_xfwoptions &=3D ~ICBXOPT_FCTAPE;
+
+ if (isp->isp_confopts & ISP_CFG_FCTAPE)
+ icbp->icb_xfwoptions |=3D ICBXOPT_FCTAPE;
+
+ if (icbp->icb_xfwoptions & ICBXOPT_FCTAPE) {
+ icbp->icb_fwoptions &=3D ~ICBOPT_FULL_LOGIN; /* per documents */
+ icbp->icb_xfwoptions |=3D ICBXOPT_FCTAPE_CCQ|ICBXOPT_FCTAPE_CONFIRM;
+ FCPARAM(isp, 0)->fctape_enabled =3D 1;
+ } else {
+ FCPARAM(isp, 0)->fctape_enabled =3D 0;
+ }
+ } else {
+ icbp->icb_xfwoptions &=3D ~ICBXOPT_FCTAPE;
+ FCPARAM(isp, 0)->fctape_enabled =3D 0;
+ }
+
/*
* Prefer or force Point-To-Point instead Loop?
*/
@@ -1804,6 +1822,9 @@
if (ISP_FW_NEWER_THAN(isp, 3, 16, 0)) {
mbs.param[1] |=3D IFCOPT1_EQFQASYNC|IFCOPT1_CTIO_RETRY;
if (fcp->role & ISP_ROLE_TARGET) {
+ if (ISP_FW_NEWER_THAN(isp, 3, 25, 0)) {
+ mbs.param[1] |=3D IFCOPT1_ENAPURE;
+ }
mbs.param[3] =3D IFCOPT3_NOPRLI;
}
}
@@ -1813,8 +1834,15 @@
}
}
icbp->icb_logintime =3D ICB_LOGIN_TOV;
- icbp->icb_lunetimeout =3D ICB_LUN_ENABLE_TOV;
-
+
+#ifdef ISP_TARGET_MODE
+ if (ISP_FW_NEWER_THAN(isp, 3, 25, 0) && (icbp->icb_fwoptions & ICBOPT_TGT=
_ENABLE)) {
+ icbp->icb_lunenables =3D 0xffff;
+ icbp->icb_ccnt =3D DFLT_CMND_CNT;
+ icbp->icb_icnt =3D DFLT_INOT_CNT;
+ icbp->icb_lunetimeout =3D ICB_LUN_ENABLE_TOV;
+ }
+#endif
if (fcp->isp_wwnn && fcp->isp_wwpn && (fcp->isp_wwnn >> 60) !=3D 2) {
icbp->icb_fwoptions |=3D ICBOPT_BOTH_WWNS;
MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, fcp->isp_wwnn);
@@ -1910,7 +1938,7 @@
}
}
if (chan =3D=3D isp->isp_nchan) {
- isp_prt(isp, ISP_LOGDEBUG0, "all %d channels with role 'none'", chan);
+ isp_prt(isp, ISP_LOG_WARN1, "all %d channels with role 'none'", chan);
isp->isp_state =3D ISP_INITSTATE;
return;
}
@@ -1978,6 +2006,19 @@
icbp->icb_fwoptions1 |=3D ICB2400_OPT1_HARD_ADDRESS;
=20
icbp->icb_fwoptions2 =3D fcp->isp_xfwoptions;
+ if (isp->isp_confopts & ISP_CFG_NOFCTAPE) {
+ icbp->icb_fwoptions2 &=3D ~ICB2400_OPT2_FCTAPE;
+ }
+ if (isp->isp_confopts & ISP_CFG_FCTAPE) {
+ icbp->icb_fwoptions2 |=3D ICB2400_OPT2_FCTAPE;
+ }
+
+ if (icbp->icb_fwoptions2 & ICB2400_OPT2_FCTAPE) {
+ FCPARAM(isp, chan)->fctape_enabled =3D 1;
+ } else {
+ FCPARAM(isp, chan)->fctape_enabled =3D 0;
+ }
+
switch (isp->isp_confopts & ISP_CFG_PORT_PREF) {
case ISP_CFG_NPORT_ONLY:
icbp->icb_fwoptions2 &=3D ~ICB2400_OPT2_TOPO_MASK;
@@ -2336,13 +2377,13 @@
msg =3D buf;
break;
case PLOGX_IOCBERR_PORTUSED:
- lev =3D ISP_LOGSANCFG|ISP_LOGDEBUG0;
+ lev =3D ISP_LOG_SANCFG|ISP_LOG_WARN1;
ISP_SNPRINTF(buf, sizeof (buf), "already logged in with N-Port handle 0x=
%x", parm1);
msg =3D buf;
rval =3D MBOX_PORT_ID_USED | (parm1 << 16);
break;
case PLOGX_IOCBERR_HNDLUSED:
- lev =3D ISP_LOGSANCFG|ISP_LOGDEBUG0;
+ lev =3D ISP_LOG_SANCFG|ISP_LOG_WARN1;
ISP_SNPRINTF(buf, sizeof (buf), "handle already used for PortID 0x%06x",=
parm1);
msg =3D buf;
rval =3D MBOX_LOOP_ID_USED;
@@ -2388,35 +2429,26 @@
=20
switch (mbs.param[0]) {
case MBOX_PORT_ID_USED:
- isp_prt(isp, ISP_LOGDEBUG0,
- "isp_port_login: portid 0x%06x already logged in as %u",
- portid, mbs.param[1]);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: portid 0x%06=
x already logged in as %u", portid, mbs.param[1]);
return (MBOX_PORT_ID_USED | (mbs.param[1] << 16));
=20
case MBOX_LOOP_ID_USED:
- isp_prt(isp, ISP_LOGDEBUG0,
- "isp_port_login: handle 0x%04x in use for port id 0x%02xXXXX",
- handle, mbs.param[1] & 0xff);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: handle 0x%04=
x in use for port id 0x%02xXXXX", handle, mbs.param[1] & 0xff);
return (MBOX_LOOP_ID_USED);
=20
case MBOX_COMMAND_COMPLETE:
return (0);
=20
case MBOX_COMMAND_ERROR:
- isp_prt(isp, ISP_LOGINFO,
- "isp_port_login: error 0x%x in PLOGI to port 0x%06x",
- mbs.param[1], portid);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: error 0x%x i=
n PLOGI to port 0x%06x", mbs.param[1], portid);
return (MBOX_COMMAND_ERROR);
=20
case MBOX_ALL_IDS_USED:
- isp_prt(isp, ISP_LOGINFO,
- "isp_port_login: all IDs used for fabric login");
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: all IDs used=
for fabric login");
return (MBOX_ALL_IDS_USED);
=20
default:
- isp_prt(isp, ISP_LOGINFO,
- "isp_port_login: error 0x%x on port login of 0x%06x at 0x%0x",
- mbs.param[0], portid, handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_port_login: error 0x%x on port login o=
f 0x%06x at 0x%0x", mbs.param[0], portid, handle);
return (mbs.param[0]);
}
}
@@ -2483,16 +2515,12 @@
if (IS_24XX(isp)) {
isp_get_pdb_24xx(isp, fcp->isp_scratch, &un.bill);
pdb->handle =3D un.bill.pdb_handle;
- pdb->s3_role =3D un.bill.pdb_prli_svc3;
+ pdb->prli_word3 =3D un.bill.pdb_prli_svc3;
pdb->portid =3D BITS2WORD_24XX(un.bill.pdb_portid_bits);
ISP_MEMCPY(pdb->portname, un.bill.pdb_portname, 8);
ISP_MEMCPY(pdb->nodename, un.bill.pdb_nodename, 8);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Port 0x%06x flags 0x%x curstate %x",
- chan, pdb->portid, un.bill.pdb_flags,
- un.bill.pdb_curstate);
- if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE ||
- un.bill.pdb_curstate > PDB2400_STATE_LOGGED_IN) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Port 0x%06x flags 0x%x curstate %x=
", chan, pdb->portid, un.bill.pdb_flags, un.bill.pdb_curstate);
+ if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE || un.bill.pdb_curst=
ate > PDB2400_STATE_LOGGED_IN) {
mbs.param[0] =3D MBOX_NOT_LOGGED_IN;
if (dolock) {
FC_SCRATCH_RELEASE(isp, chan);
@@ -2502,7 +2530,7 @@
} else {
isp_get_pdb_21xx(isp, fcp->isp_scratch, &un.fred);
pdb->handle =3D un.fred.pdb_loopid;
- pdb->s3_role =3D un.fred.pdb_prli_svc3;
+ pdb->prli_word3 =3D un.fred.pdb_prli_svc3;
pdb->portid =3D BITS2WORD(un.fred.pdb_portid_bits);
ISP_MEMCPY(pdb->portname, un.fred.pdb_portname, 8);
ISP_MEMCPY(pdb->nodename, un.fred.pdb_nodename, 8);
@@ -2528,7 +2556,7 @@
if (isp_getpdb(isp, chan, loopid, &pdb, dolock)) {
continue;
}
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x "
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x "
"PortID 0x%06x WWPN 0x%02x%02x%02x%02x%02x%02x%02x%02x",
chan, loopid, pdb.portid, pdb.portname[0], pdb.portname[1],
pdb.portname[2], pdb.portname[3], pdb.portname[4],
@@ -2606,7 +2634,7 @@
=20
fcp =3D FCPARAM(isp, chan);
=20
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Entry", c=
han);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Entry", chan);
ISP_MARK_PORTDB(isp, chan, 1);
=20
/*
@@ -2622,7 +2650,7 @@
GET_NANOTIME(&hra);
isp_fw_state(isp, chan);
if (lwfs !=3D fcp->isp_fwstate) {
- isp_prt(isp, ISP_LOGCONFIG|ISP_LOGSANCFG, "Chan %d Firmware State <%s->=
%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->i=
sp_fwstate));
+ isp_prt(isp, ISP_LOGCONFIG|ISP_LOG_SANCFG, "Chan %d Firmware State <%s-=
>%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->=
isp_fwstate));
lwfs =3D fcp->isp_fwstate;
}
if (fcp->isp_fwstate =3D=3D FW_READY) {
@@ -2673,7 +2701,7 @@
* If we haven't gone to 'ready' state, return.
*/
if (fcp->isp_fwstate !=3D FW_READY) {
- isp_prt(isp, ISP_LOGSANCFG, "%s: chan %d not at FW_READY state", __func_=
_, chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "%s: chan %d not at FW_READY state", __func=
__, chan);
return (-1);
}
=20
@@ -2738,7 +2766,9 @@
}
}
if (alpa_map[i] && fcp->isp_loopid !=3D i) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d deriving loopid %d =
from AL_PA map (AL_PA 0x%x) and ignoring returned value %d (AL_PA 0x%x)", =
chan, i, alpa_map[i], fcp->isp_loopid, alpa);
+ isp_prt(isp, ISP_LOG_SANCFG,
+ "Chan %d deriving loopid %d from AL_PA map (AL_PA 0x%x) and ignori=
ng returned value %d (AL_PA 0x%x)",
+ chan, i, alpa_map[i], fcp->isp_loopid, alpa);
fcp->isp_loopid =3D i;
}
}
@@ -2778,18 +2808,17 @@
lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
MAKE_WWN_FROM_NODE_NAME(lp->node_wwn, pdb.nodename);
MAKE_WWN_FROM_NODE_NAME(lp->port_wwn, pdb.portname);
- lp->roles =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ lp->prli_word3 =3D pdb.prli_word3;
lp->portid =3D pdb.portid;
lp->handle =3D pdb.handle;
lp->new_portid =3D lp->portid;
- lp->new_roles =3D lp->roles;
+ lp->new_prli_word3 =3D lp->prli_word3;
if (IS_24XX(isp)) {
if (check_for_fabric) {
/*
* The mbs is still hanging out from the MBOX_GET_LOOP_ID above.
*/
fcp->isp_fabric_params =3D mbs.param[7];
- isp_prt(isp, ISP_LOGCONFIG, "fabric params 0x%x", mbs.param[7]);
} else {
fcp->isp_fabric_params =3D 0;
}
@@ -2809,7 +2838,7 @@
r =3D isp_register_fc4_type(isp, chan);
}
if (r) {
- isp_prt(isp, ISP_LOGWARN|ISP_LOGSANCFG, "%s: register fc4 type failed",=
__func__);
+ isp_prt(isp, ISP_LOGWARN|ISP_LOG_SANCFG, "%s: register fc4 type failed"=
, __func__);
return (-1);
}
} else {
@@ -2843,8 +2872,8 @@
/*
* Announce ourselves, too.
*/
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fcp=
->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loop=
id, isp_fc_toponame(fcp));
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Complete"=
, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fc=
p->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loo=
pid, isp_fc_toponame(fcp));
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Complete", chan);
return (0);
}
=20
@@ -2912,8 +2941,7 @@
}
}
=20
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Synchronizing PDBs", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Synchronizing PDBs", chan);
=20
fcp->isp_loopstate =3D LOOP_SYNCING_PDB;
=20
@@ -2950,7 +2978,7 @@
} else {
lp->autologin =3D 0;
}
- lp->new_roles =3D 0;
+ lp->new_prli_word3 =3D 0;
lp->new_portid =3D 0;
/*
* Note that we might come out of this with our state
@@ -2963,13 +2991,12 @@
* target id in isp_dev_map (if any).
*/
lp->portid =3D lp->new_portid;
- lp->roles =3D lp->new_roles;
+ lp->prli_word3 =3D lp->new_prli_word3;
lp->state =3D FC_PORTDB_STATE_VALID;
isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp);
- lp->new_roles =3D 0;
+ lp->new_prli_word3 =3D 0;
lp->new_portid =3D 0;
- lp->reserved =3D 0;
- lp->new_reserved =3D 0;
+ lp->announced =3D 0;
break;
case FC_PORTDB_STATE_CHANGED:
/*
@@ -2977,14 +3004,13 @@
*/
lp->state =3D FC_PORTDB_STATE_VALID;
isp_async(isp, ISPASYNC_DEV_CHANGED, chan, lp);
- lp->new_roles =3D 0;
+ lp->new_prli_word3 =3D 0;
lp->new_portid =3D 0;
- lp->reserved =3D 0;
- lp->new_reserved =3D 0;
+ lp->announced =3D 0;
break;
case FC_PORTDB_STATE_PENDING_VALID:
lp->portid =3D lp->new_portid;
- lp->roles =3D lp->new_roles;
+ lp->prli_word3 =3D lp->new_prli_word3;
if (lp->dev_map_idx) {
int t =3D lp->dev_map_idx - 1;
fcp->isp_dev_map[t] =3D dbidx + 1;
@@ -2992,11 +3018,10 @@
lp->state =3D FC_PORTDB_STATE_VALID;
isp_async(isp, ISPASYNC_DEV_STAYED, chan, lp);
if (dbidx !=3D FL_ID) {
- lp->new_roles =3D 0;
+ lp->new_prli_word3 =3D 0;
lp->new_portid =3D 0;
}
- lp->reserved =3D 0;
- lp->new_reserved =3D 0;
+ lp->announced =3D 0;
break;
case FC_PORTDB_STATE_ZOMBIE:
break;
@@ -3054,8 +3079,7 @@
break;
case TOPO_FL_PORT:
if (IS_24XX(isp) && isp->isp_nchan > 1) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Skipping Local Loop Scan", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Skipping Local Loop Scan", chan);
fcp->isp_loopstate =3D LOOP_LSCAN_DONE;
return (0);
}
@@ -3065,16 +3089,14 @@
lim =3D 2;
break;
default:
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d no loop topology to scan", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d no loop topology to scan", chan);
fcp->isp_loopstate =3D LOOP_LSCAN_DONE;
return (0);
}
=20
fcp->isp_loopstate =3D LOOP_SCANNING_LOOP;
=20
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop 0..%d", chan, lim-1);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop 0..%d", chan, lim-1);
=20
=20
/*
@@ -3100,8 +3122,7 @@
if (IS_2100(isp) || IS_2200(isp)) {
uint64_t node_wwn =3D isp_get_wwn(isp, chan, handle, 1);
if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
if (node_wwn =3D=3D INI_NONE) {
@@ -3119,8 +3140,7 @@
chan, handle, r);
if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
continue;
@@ -3128,8 +3148,7 @@
=20
if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
=20
@@ -3143,8 +3162,7 @@
isp_prt(isp, ISP_LOGWARN,
"Chan %d cannot synchronize port database", chan);
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
=20
@@ -3153,7 +3171,7 @@
*/
MAKE_WWN_FROM_NODE_NAME(tmp.node_wwn, pdb.nodename);
MAKE_WWN_FROM_NODE_NAME(tmp.port_wwn, pdb.portname);
- tmp.roles =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ tmp.prli_word3 =3D pdb.prli_word3;
tmp.portid =3D pdb.portid;
tmp.handle =3D pdb.handle;
=20
@@ -3192,8 +3210,7 @@
for (i =3D 0; i < MAX_FC_TARG; i++) {
lp =3D &fcp->portdb[i];
=20
- if (lp->state =3D=3D FC_PORTDB_STATE_NIL ||
- lp->target_mode) {
+ if (lp->state =3D=3D FC_PORTDB_STATE_NIL || lp->target_mode) {
continue;
}
if (lp->node_wwn !=3D tmp.node_wwn) {
@@ -3214,8 +3231,7 @@
chan, i, lp->state);
isp_dump_portdb(isp, chan);
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
=20
@@ -3229,15 +3245,11 @@
* Check to make see if really still the same
* device. If it is, we mark it pending valid.
*/
- if (lp->portid =3D=3D tmp.portid &&
- lp->handle =3D=3D tmp.handle &&
- lp->roles =3D=3D tmp.roles) {
+ if (lp->portid =3D=3D tmp.portid && lp->handle =3D=3D tmp.handle && lp-=
>prli_word3 =3D=3D tmp.prli_word3) {
lp->new_portid =3D tmp.portid;
- lp->new_roles =3D tmp.roles;
+ lp->new_prli_word3 =3D tmp.prli_word3;
lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Loop Port 0x%06x at 0x%04x Pending "
- "Valid", chan, tmp.portid, tmp.handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x at 0x%04x Pending =
Valid", chan, tmp.portid, tmp.handle);
break;
}
=20
@@ -3251,12 +3263,10 @@
* Claim that this has changed and let somebody else
* decide what to do.
*/
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Loop Port 0x%06x at 0x%04x changed",
- chan, tmp.portid, tmp.handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x at 0x%04x changed",=
chan, tmp.portid, tmp.handle);
lp->state =3D FC_PORTDB_STATE_CHANGED;
lp->new_portid =3D tmp.portid;
- lp->new_roles =3D tmp.roles;
+ lp->new_prli_word3 =3D tmp.prli_word3;
break;
}
=20
@@ -3290,17 +3300,14 @@
lp->autologin =3D 1;
lp->state =3D FC_PORTDB_STATE_NEW;
lp->new_portid =3D tmp.portid;
- lp->new_roles =3D tmp.roles;
+ lp->new_prli_word3 =3D tmp.prli_word3;
lp->handle =3D tmp.handle;
lp->port_wwn =3D tmp.port_wwn;
lp->node_wwn =3D tmp.node_wwn;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Loop Port 0x%06x at 0x%04x is New Entry",
- chan, tmp.portid, tmp.handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x at 0x%04x is New Ent=
ry", chan, tmp.portid, tmp.handle);
}
fcp->isp_loopstate =3D LOOP_LSCAN_DONE;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE", chan);
return (0);
}
=20
@@ -3343,8 +3350,7 @@
sns_gid_ft_req_t *rq =3D &un._x;
mbreg_t mbs;
=20
- isp_prt(isp, ISP_LOGDEBUG0,
- "Chan %d scanning fabric (GID_FT) via SNS", chan);
+ isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via SNS", c=
han);
=20
ISP_MEMZERO(rq, SNS_GID_FT_REQ_SIZE);
rq->snscb_rblen =3D GIDLEN >> 1;
@@ -3393,8 +3399,7 @@
uint32_t *rp;
uint8_t *scp =3D fcp->isp_scratch;
=20
- isp_prt(isp, ISP_LOGDEBUG0,
- "Chan %d scanning fabric (GID_FT) via CT", chan);
+ isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via CT", ch=
an);
=20
if (!IS_24XX(isp)) {
return (1);
@@ -3488,10 +3493,8 @@
int portidx, portlim, r;
sns_gid_ft_rsp_t *rs0, *rs1;
=20
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC Scan Fabric", chan);
- if (fcp->isp_fwstate !=3D FW_READY ||
- fcp->isp_loopstate < LOOP_LSCAN_DONE) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric", chan);
+ if (fcp->isp_fwstate !=3D FW_READY || fcp->isp_loopstate < LOOP_LSCAN_DON=
E) {
return (-1);
}
if (fcp->isp_loopstate > LOOP_SCANNING_FABRIC) {
@@ -3499,8 +3502,7 @@
}
if (fcp->isp_topo !=3D TOPO_FL_PORT && fcp->isp_topo !=3D TOPO_F_PORT) {
fcp->isp_loopstate =3D LOOP_FSCAN_DONE;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC Scan Fabric Done (no fabric)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done (no fabric)", =
chan);
return (0);
}
=20
@@ -3568,9 +3570,8 @@
}
if (rs1->snscb_cthdr.ct_cmd_resp !=3D LS_ACC) {
int level;
- if (rs1->snscb_cthdr.ct_reason =3D=3D 9 &&
- rs1->snscb_cthdr.ct_explanation =3D=3D 7) {
- level =3D ISP_LOGSANCFG|ISP_LOGDEBUG0;
+ if (rs1->snscb_cthdr.ct_reason =3D=3D 9 && rs1->snscb_cthdr.ct_explanati=
on =3D=3D 7) {
+ level =3D ISP_LOG_SANCFG;
} else {
level =3D ISP_LOGWARN;
}
@@ -3614,7 +3615,7 @@
"fabric too big for scratch area: increase ISP_FC_SCRLEN");
}
portlim =3D portidx + 1;
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d got %d ports back from name server", chan, portlim);
=20
for (portidx =3D 0; portidx < portlim; portidx++) {
@@ -3639,9 +3640,7 @@
rs1->snscb_ports[npidx].portid[0] =3D 0;
rs1->snscb_ports[npidx].portid[1] =3D 0;
rs1->snscb_ports[npidx].portid[2] =3D 0;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d removing duplicate PortID 0x%06x"
- " entry from list", chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d removing duplicate PortID 0x%06x =
entry from list", chan, portid);
}
}
=20
@@ -3671,7 +3670,7 @@
((rs1->snscb_ports[portidx].portid[2]));
=20
if (portid =3D=3D 0) {
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d skipping null PortID at idx %d",
chan, portidx);
continue;
@@ -3687,19 +3686,19 @@
*/
if (ISP_CAP_MULTI_ID(isp)) {
if ((portid >> 8) =3D=3D (fcp->isp_portid >> 8)) {
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d skip PortID 0x%06x",
chan, portid);
continue;
}
} else if (portid =3D=3D fcp->isp_portid) {
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d skip ourselves on @ PortID 0x%06x",
chan, portid);
continue;
}
=20
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d Checking Fabric Port 0x%06x", chan, portid);
=20
/*
@@ -3711,8 +3710,7 @@
for (dbidx =3D 0; dbidx < MAX_FC_TARG; dbidx++) {
lp =3D &fcp->portdb[dbidx];
=20
- if (lp->state !=3D FC_PORTDB_STATE_PROBATIONAL ||
- lp->target_mode) {
+ if (lp->state !=3D FC_PORTDB_STATE_PROBATIONAL || lp->target_mode) {
continue;
}
if (lp->portid =3D=3D portid) {
@@ -3754,9 +3752,7 @@
if (r !=3D 0) {
lp->new_portid =3D portid;
lp->state =3D FC_PORTDB_STATE_DEAD;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Fabric Port 0x%06x is dead",
- chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is dead", cha=
n, portid);
continue;
}
=20
@@ -3773,7 +3769,7 @@
pdb.portid !=3D portid ||
wwpn !=3D lp->port_wwn ||
wwnn !=3D lp->node_wwn) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
+ isp_prt(isp, ISP_LOG_SANCFG,
fconf, chan, dbidx, pdb.handle, pdb.portid,
(uint32_t) (wwnn >> 32), (uint32_t) wwnn,
(uint32_t) (wwpn >> 32), (uint32_t) wwpn,
@@ -3824,7 +3820,7 @@
handle_changed++;
}
=20
- nr =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ nr =3D pdb.prli_word3;
=20
/*
* Check to see whether the portid and roles have
@@ -3839,17 +3835,12 @@
*/
=20
lp->new_portid =3D portid;
- lp->new_roles =3D nr;
- if (pdb.portid !=3D lp->portid || nr !=3D lp->roles ||
- handle_changed) {
- isp_prt(isp, ISP_LOGSANCFG,
- "Chan %d Fabric Port 0x%06x changed",
- chan, portid);
+ lp->new_prli_word3 =3D nr;
+ if (pdb.portid !=3D lp->portid || nr !=3D lp->prli_word3 || handle_chan=
ged) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x changed", cha=
n, portid);
lp->state =3D FC_PORTDB_STATE_CHANGED;
} else {
- isp_prt(isp, ISP_LOGSANCFG,
- "Chan %d Fabric Port 0x%06x "
- "Now Pending Valid", chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x Now Pending V=
alid", chan, portid);
lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
}
continue;
@@ -3935,7 +3926,7 @@
handle =3D pdb.handle;
MAKE_WWN_FROM_NODE_NAME(wwnn, pdb.nodename);
MAKE_WWN_FROM_NODE_NAME(wwpn, pdb.portname);
- nr =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ nr =3D pdb.prli_word3;
=20
/*
* And go through the database *one* more time to make sure
@@ -3949,8 +3940,7 @@
if (fcp->portdb[dbidx].target_mode) {
continue;
}
- if (fcp->portdb[dbidx].node_wwn =3D=3D wwnn &&
- fcp->portdb[dbidx].port_wwn =3D=3D wwpn) {
+ if (fcp->portdb[dbidx].node_wwn =3D=3D wwnn && fcp->portdb[dbidx].port_=
wwn =3D=3D wwpn) {
break;
}
}
@@ -3961,11 +3951,9 @@
lp->node_wwn =3D wwnn;
lp->port_wwn =3D wwpn;
lp->new_portid =3D portid;
- lp->new_roles =3D nr;
+ lp->new_prli_word3 =3D nr;
lp->state =3D FC_PORTDB_STATE_NEW;
- isp_prt(isp, ISP_LOGSANCFG,
- "Chan %d Fabric Port 0x%06x is a New Entry",
- chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is a New Entry=
", chan, portid);
continue;
}
=20
@@ -3991,16 +3979,12 @@
lp =3D &fcp->portdb[dbidx];
lp->handle =3D handle;
lp->new_portid =3D portid;
- lp->new_roles =3D nr;
- if (lp->portid !=3D portid || lp->roles !=3D nr) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Zombie Fabric Port 0x%06x Now Changed",
- chan, portid);
+ lp->new_prli_word3 =3D nr;
+ if (lp->portid !=3D portid || lp->prli_word3 !=3D nr) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Cha=
nged", chan, portid);
lp->state =3D FC_PORTDB_STATE_CHANGED;
} else {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Zombie Fabric Port 0x%06x "
- "Now Pending Valid", chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Pen=
ding Valid", chan, portid);
lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
}
}
@@ -4011,8 +3995,7 @@
return (-1);
}
fcp->isp_loopstate =3D LOOP_FSCAN_DONE;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC Scan Fabric Done", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done", chan);
return (0);
}
=20
@@ -4261,17 +4244,13 @@
FC_SCRATCH_RELEASE(isp, chan);
=20
if (ct->ct_cmd_resp =3D=3D LS_RJT) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Register FC4 Type rejected", chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "Chan %d Register FC4 Type re=
jected", chan);
return (-1);
} else if (ct->ct_cmd_resp =3D=3D LS_ACC) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Register FC4 Type accepted", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Register FC4 Type accepted", chan);
return (0);
} else {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d Register FC4 Type: 0x%x",
- chan, ct->ct_cmd_resp);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", chan, ct->c=
t_cmd_resp);
return (-1);
}
}
@@ -4369,6 +4348,7 @@
fcparam *fcp =3D FCPARAM(isp, XS_CHANNEL(xs));
=20
if ((fcp->role & ISP_ROLE_INITIATOR) =3D=3D 0) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d I am not an initiator", XS_CHANNE=
L(xs), target, XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4381,6 +4361,7 @@
}
=20
if (XS_TGT(xs) >=3D MAX_FC_TARG) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d target too big", XS_CHANNEL(xs), =
target, XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4392,9 +4373,11 @@
return (CMD_COMPLETE);
}
if (fcp->portdb[hdlidx].state =3D=3D FC_PORTDB_STATE_ZOMBIE) {
+ isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d target zombie", XS_CHANNEL(xs), t=
arget, XS_LUN(xs));
return (CMD_RQLATER);
}
if (fcp->portdb[hdlidx].state !=3D FC_PORTDB_STATE_VALID) {
+ isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d bad db port state 0x%x", XS_CHANN=
EL(xs), target, XS_LUN(xs), fcp->portdb[hdlidx].state);
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4403,6 +4386,7 @@
} else {
sdparam *sdp =3D SDPARAM(isp, XS_CHANNEL(xs));
if ((sdp->role & ISP_ROLE_INITIATOR) =3D=3D 0) {
+ isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d I am not an initiator", XS_CHANNE=
L(xs), target, XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4415,7 +4399,7 @@
=20
qep =3D isp_getrqentry(isp);
if (qep =3D=3D NULL) {
- isp_prt(isp, ISP_LOGDEBUG0, "Request Queue Overflow");
+ isp_prt(isp, ISP_LOG_WARN1, "Request Queue Overflow");
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@@ -4449,6 +4433,14 @@
}
=20
reqp->req_header.rqs_entry_count =3D 1;
+
+ /*
+ * Select and install Header Code.
+ * Note that it might be overridden before going out
+ * if we're on a 64 bit platform. The lower level
+ * code (isp_send_cmd) will select the appropriate
+ * 64 bit variant if it needs to.
+ */
if (IS_24XX(isp)) {
reqp->req_header.rqs_entry_type =3D RQSTYPE_T7RQS;
} else if (IS_FC(isp)) {
@@ -4461,6 +4453,9 @@
}
}
=20
+ /*
+ * Set task attributes
+ */
if (IS_24XX(isp)) {
int ttype;
if (XS_TAG_P(xs)) {
@@ -4513,20 +4508,30 @@
tptr =3D &reqp->req_time;
=20
/*
- * NB: we do not support long CDBs
+ * NB: we do not support long CDBs (yet)
*/
cdblen =3D XS_CDBLEN(xs);
=20
if (IS_SCSI(isp)) {
+ if (cdblen > sizeof (reqp->req_cdb)) {
+ isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cd=
blen);
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
reqp->req_target =3D target | (XS_CHANNEL(xs) << 7);
reqp->req_lun_trn =3D XS_LUN(xs);
- cdblen =3D ISP_MIN(cdblen, sizeof (reqp->req_cdb));
cdbp =3D reqp->req_cdb;
reqp->req_cdblen =3D cdblen;
} else if (IS_24XX(isp)) {
ispreqt7_t *t7 =3D (ispreqt7_t *)local;
fcportdb_t *lp;
=20
+ if (cdblen > sizeof (t7->req_cdb)) {
+ isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cd=
blen);
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
+
lp =3D &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
t7->req_nphdl =3D target;
t7->req_tidlo =3D lp->portid;
@@ -4537,28 +4542,47 @@
t7->req_lun[0] |=3D 0x40;
}
t7->req_lun[1] =3D XS_LUN(xs);
- FCP_NEXT_CRN(isp, xs, t7->req_crn, XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs=
));
+ if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PR=
LI_WD3_RETRY)) {
+ if (FCP_NEXT_CRN(isp, &t7->req_crn, xs)) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CH=
ANNEL(xs), target, XS_LUN(xs));
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_EAGAIN);
+ }
+ }
tptr =3D &t7->req_time;
cdbp =3D t7->req_cdb;
- cdblen =3D ISP_MIN(cdblen, sizeof (t7->req_cdb));
- } else if (ISP_CAP_2KLOGIN(isp)) {
- ispreqt2e_t *t2e =3D (ispreqt2e_t *)local;
- t2e->req_target =3D target;
- t2e->req_scclun =3D XS_LUN(xs);
- cdbp =3D t2e->req_cdb;
- cdblen =3D ISP_MIN(cdblen, sizeof (t2e->req_cdb));
- } else if (ISP_CAP_SCCFW(isp)) {
- ispreqt2_t *t2 =3D (ispreqt2_t *)local;
- t2->req_target =3D target;
- t2->req_scclun =3D XS_LUN(xs);
- cdbp =3D t2->req_cdb;
- cdblen =3D ISP_MIN(cdblen, sizeof (t2->req_cdb));
} else {
ispreqt2_t *t2 =3D (ispreqt2_t *)local;
- t2->req_target =3D target;
- t2->req_lun_trn =3D XS_LUN(xs);
- cdbp =3D t2->req_cdb;
- cdblen =3D ISP_MIN(cdblen, sizeof (t2->req_cdb));
+ fcportdb_t *lp;
+
+ if (cdblen > sizeof t2->req_cdb) {
+ isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cd=
blen);
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
+ lp =3D &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
+ if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PR=
LI_WD3_RETRY)) {
+ if (FCP_NEXT_CRN(isp, &t2->req_crn, xs)) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CH=
ANNEL(xs), target, XS_LUN(xs));
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_EAGAIN);
+ }
+ }
+ if (ISP_CAP_2KLOGIN(isp)) {
+ ispreqt2e_t *t2e =3D (ispreqt2e_t *)local;
+ t2e->req_target =3D target;
+ t2e->req_scclun =3D XS_LUN(xs);
+ cdbp =3D t2e->req_cdb;
+ } else if (ISP_CAP_SCCFW(isp)) {
+ ispreqt2_t *t2 =3D (ispreqt2_t *)local;
+ t2->req_target =3D target;
+ t2->req_scclun =3D XS_LUN(xs);
+ cdbp =3D t2->req_cdb;
+ } else {
+ t2->req_target =3D target;
+ t2->req_lun_trn =3D XS_LUN(xs);
+ cdbp =3D t2->req_cdb;
+ }
}
ISP_MEMCPY(cdbp, XS_CDBP(xs), cdblen);
=20
@@ -4571,7 +4595,7 @@
}
=20
if (isp_allocate_xs(isp, xs, &handle)) {
- isp_prt(isp, ISP_LOGDEBUG0, "out of xflist pointers");
+ isp_prt(isp, ISP_LOG_WARN1, "out of xflist pointers");
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@@ -4618,7 +4642,7 @@
* Issue a bus reset.
*/
if (IS_24XX(isp)) {
- isp_prt(isp, ISP_LOGWARN, "RESET BUS NOT IMPLEMENTED");
+ isp_prt(isp, ISP_LOGERR, "BUS RESET NOT IMPLEMENTED");
break;
} else if (IS_FC(isp)) {
mbs.param[1] =3D 10;
@@ -4639,8 +4663,7 @@
if (mbs.param[0] !=3D MBOX_COMMAND_COMPLETE) {
break;
}
- isp_prt(isp, ISP_LOGINFO,
- "driver initiated bus reset of bus %d", chan);
+ isp_prt(isp, ISP_LOGINFO, "driver initiated bus reset of bus %d", chan);
return (0);
=20
case ISPCTL_RESET_DEV:
@@ -4658,17 +4681,12 @@
=20
hdlidx =3D fcp->isp_dev_map[tgt] - 1;
if (hdlidx < 0 || hdlidx >=3D MAX_FC_TARG) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d bad handle %d trying to reset"
- "target %d", chan, hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to reset targe=
t %d", chan, hdlidx, tgt);
break;
}
lp =3D &fcp->portdb[hdlidx];
if (lp->state !=3D FC_PORTDB_STATE_VALID) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d handle %d for abort of target %d "
- "no longer valid", chan,
- hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no=
longer valid", chan, hdlidx, tgt);
break;
}
=20
@@ -4703,18 +4721,14 @@
FC_SCRATCH_RELEASE(isp, chan);
break;
}
- MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN,
- QENTRY_LEN, chan);
+ MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
sp =3D (isp24xx_statusreq_t *) local;
- isp_get_24xx_response(isp,
- &((isp24xx_statusreq_t *)fcp->isp_scratch)[1], sp);
+ isp_get_24xx_response(isp, &((isp24xx_statusreq_t *)fcp->isp_scratch)[1=
], sp);
FC_SCRATCH_RELEASE(isp, chan);
if (sp->req_completion_status =3D=3D 0) {
return (0);
}
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d reset of target %d returned 0x%x",
- chan, tgt, sp->req_completion_status);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d reset of target %d returned 0x%x", c=
han, tgt, sp->req_completion_status);
break;
} else if (IS_FC(isp)) {
if (ISP_CAP_2KLOGIN(isp)) {
@@ -4732,8 +4746,7 @@
if (mbs.param[0] !=3D MBOX_COMMAND_COMPLETE) {
break;
}
- isp_prt(isp, ISP_LOGINFO,
- "Target %d on Bus %d Reset Succeeded", tgt, chan);
+ isp_prt(isp, ISP_LOGINFO, "Target %d on Bus %d Reset Succeeded", tgt, ch=
an);
ISP_SET_SENDMARKER(isp, chan, 1);
return (0);
=20
@@ -4747,8 +4760,7 @@
=20
handle =3D isp_find_handle(isp, xs);
if (handle =3D=3D 0) {
- isp_prt(isp, ISP_LOGWARN,
- "cannot find handle for command to abort");
+ isp_prt(isp, ISP_LOGWARN, "cannot find handle for command to abort");
break;
}
if (IS_24XX(isp)) {
@@ -4760,21 +4772,15 @@
fcp =3D FCPARAM(isp, chan);
hdlidx =3D fcp->isp_dev_map[tgt] - 1;
if (hdlidx < 0 || hdlidx >=3D MAX_FC_TARG) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d bad handle %d trying to abort"
- "target %d", chan, hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to abort targe=
t %d", chan, hdlidx, tgt);
break;
}
lp =3D &fcp->portdb[hdlidx];
if (lp->state !=3D FC_PORTDB_STATE_VALID) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d handle %d for abort of target %d "
- "no longer valid", chan, hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no=
longer valid", chan, hdlidx, tgt);
break;
}
- isp_prt(isp, ISP_LOGALL,
- "Chan %d Abort Cmd for N-Port 0x%04x @ Port "
- "0x%06x %p", chan, lp->handle, lp->portid, xs);
+ isp_prt(isp, ISP_LOGALL, "Chan %d Abort Cmd for N-Port 0x%04x @ Port 0x=
%06x", chan, lp->handle, lp->portid);
ISP_MEMZERO(ab, QENTRY_LEN);
ab->abrt_header.rqs_entry_type =3D RQSTYPE_ABORT_IO;
ab->abrt_header.rqs_entry_count =3D 1;
@@ -4797,8 +4803,7 @@
break;
}
isp_put_24xx_abrt(isp, ab, fcp->isp_scratch);
- ab2 =3D (isp24xx_abrt_t *)
- &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN];
+ ab2 =3D (isp24xx_abrt_t *) &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN];
ab2->abrt_nphdl =3D 0xdeaf;
MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan);
isp_mboxcmd(isp, &mbs);
@@ -4806,16 +4811,13 @@
FC_SCRATCH_RELEASE(isp, chan);
break;
}
- MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN,
- QENTRY_LEN, chan);
+ MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
isp_get_24xx_abrt(isp, ab2, ab);
FC_SCRATCH_RELEASE(isp, chan);
if (ab->abrt_nphdl =3D=3D ISP24XX_ABRT_OKAY) {
return (0);
}
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d handle %d abort returned 0x%x", chan,
- hdlidx, ab->abrt_nphdl);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d abort returned 0x%x", chan=
, hdlidx, ab->abrt_nphdl);
break;
} else if (IS_FC(isp)) {
if (ISP_CAP_SCCFW(isp)) {
@@ -5003,7 +5005,8 @@
{
XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs;
uint32_t iptr, optr, junk;
- int i, nlooked =3D 0, ndone =3D 0;
+ int i, nlooked =3D 0, ndone =3D 0, continuations_expected =3D 0;
+ int etype, last_etype =3D 0;
=20
again:
optr =3D isp->isp_residx;
@@ -5179,10 +5182,10 @@
uint8_t qe[QENTRY_LEN];
ispstatusreq_t *sp =3D (ispstatusreq_t *) qe;
isphdr_t *hp;
- int buddaboom, etype, scsi_status, completion_status;
+ int buddaboom, scsi_status, completion_status;
int req_status_flags, req_state_flags;
uint8_t *snsp, *resp;
- uint32_t rlen, slen;
+ uint32_t rlen, slen, totslen;
long resid;
uint16_t oop;
=20
@@ -5234,9 +5237,22 @@
isp->isp_fpcchiwater =3D rio->req_header.rqs_seqno;
}
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype =3D etype;
continue;
} else if (etype =3D=3D RQSTYPE_RIO2) {
- isp_prt(isp, ISP_LOGERR, "dropping RIO2 response\n");
+ isp_prt(isp, ISP_LOGERR, "dropping RIO2 response");
+ ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype =3D etype;
+ continue;
+ } else if (etype =3D=3D RQSTYPE_STATUS_CONT) {
+ isp_get_cont_response(isp, (ispstatus_cont_t *) hp, (ispstatus_cont_t *=
) sp);
+ if (last_etype =3D=3D RQSTYPE_RESPONSE && continuations_expected && ndo=
ne > 0 && (xs =3D complist[ndone-1]) !=3D NULL) {
+ ispstatus_cont_t *scp =3D (ispstatus_cont_t *) sp;
+ XS_SENSE_APPEND(xs, scp->req_sense_data, sizeof (scp->req_sense_data));
+ isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "%d more Status Continuation=
s expected", --continuations_expected);
+ } else {
+ isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
+ }
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
continue;
} else {
@@ -5256,12 +5272,12 @@
* optr to be one more than the updated amount.
*/
while (tsto !=3D oop) {
- optr =3D ISP_NXT_QENTRY(tsto,
- RESULT_QUEUE_LEN(isp));
+ optr =3D ISP_NXT_QENTRY(tsto, RESULT_QUEUE_LEN(isp));
}
if (r > 0) {
ISP_WRITE(isp, isp->isp_respoutrp, optr);
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype =3D etype;
continue;
}
=20
@@ -5277,11 +5293,10 @@
* not, something bad has happened.
*/
if (etype !=3D RQSTYPE_REQUEST) {
- isp_prt(isp, ISP_LOGERR, notresp,
- etype, oop, optr, nlooked);
- isp_print_bytes(isp,
- "Request Queue Entry", QENTRY_LEN, sp);
+ isp_prt(isp, ISP_LOGERR, notresp, etype, oop, optr, nlooked);
+ isp_print_bytes(isp, "Request Queue Entry", QENTRY_LEN, sp);
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype =3D etype;
continue;
}
buddaboom =3D 1;
@@ -5296,10 +5311,11 @@
if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) {
isp_print_bytes(isp, "unexpected continuation segment", QENTRY_LEN, sp=
);
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype =3D etype;
continue;
}
if (sp->req_header.rqs_flags & RQSFLAG_FULL) {
- isp_prt(isp, ISP_LOGDEBUG0, "internal queues full");
+ isp_prt(isp, ISP_LOG_WARN1, "internal queues full");
/*
* We'll synthesize a QUEUE FULL message below.
*/
@@ -5319,6 +5335,7 @@
if (sp->req_header.rqs_flags & RQSFLAG_BADORDER) {
isp_print_bytes(isp, "invalid IOCB ordering", QENTRY_LEN, sp);
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype =3D etype;
continue;
}
}
@@ -5327,6 +5344,7 @@
isp_prt(isp, ISP_LOGERR, "bad request handle 0x%x (iocb type 0x%x)", sp=
->req_handle, etype);
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype =3D etype;
continue;
}
xs =3D isp_find_xs(isp, sp->req_handle);
@@ -5343,20 +5361,23 @@
}
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype =3D etype;
continue;
}
if (req_status_flags & RQSTF_BUS_RESET) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus was reset", XS_CHANNEL(xs), X=
S_TGT(xs), XS_LUN(xs));
XS_SETERR(xs, HBA_BUSRESET);
ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1);
}
if (buddaboom) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d buddaboom", XS_CHANNEL(xs), XS_TG=
T(xs), XS_LUN(xs));
XS_SETERR(xs, HBA_BOTCH);
}
=20
resp =3D NULL;
rlen =3D 0;
snsp =3D NULL;
- slen =3D 0;
+ totslen =3D slen =3D 0;
if (IS_24XX(isp) && (scsi_status & (RQCS_RV|RQCS_SV)) !=3D 0) {
resp =3D ((isp24xx_statusreq_t *)sp)->req_rsp_sense;
rlen =3D ((isp24xx_statusreq_t *)sp)->req_response_len;
@@ -5374,14 +5395,23 @@
if (IS_24XX(isp)) {
snsp =3D ((isp24xx_statusreq_t *)sp)->req_rsp_sense;
snsp +=3D rlen;
- slen =3D ((isp24xx_statusreq_t *)sp)->req_sense_len;
+ totslen =3D ((isp24xx_statusreq_t *)sp)->req_sense_len;
+ slen =3D (sizeof (((isp24xx_statusreq_t *)sp)->req_rsp_sense)) - rlen;
+ if (totslen < slen)
+ slen =3D totslen;=20
} else {
snsp =3D sp->req_sense_data;
- slen =3D sp->req_sense_len;
+ totslen =3D sp->req_sense_len;
+ slen =3D sizeof (sp->req_sense_data);
+ if (totslen < slen)
+ slen =3D totslen;
}
} else if (IS_SCSI(isp) && (req_state_flags & RQSF_GOT_SENSE)) {
snsp =3D sp->req_sense_data;
- slen =3D sp->req_sense_len;
+ totslen =3D sp->req_sense_len;
+ slen =3D sizeof (sp->req_sense_data);
+ if (totslen < slen)
+ slen =3D totslen;
}
if (req_state_flags & RQSF_GOT_STATUS) {
*XS_STSP(xs) =3D scsi_status & 0xff;
@@ -5442,7 +5472,22 @@
}
}
if (snsp && slen) {
- XS_SAVE_SENSE(xs, snsp, slen);
+ if (totslen > slen) {
+ continuations_expected +=3D ((totslen - slen + QENTRY_LEN - 5) / (QEN=
TRY_LEN - 4));
+ if (ndone > (MAX_REQUESTQ_COMPLETIONS - continuations_expected - 1)) {
+ /* we'll lose some stats, but that's a small price to pay */
+ for (i =3D 0; i < ndone; i++) {
+ if (complist[i]) {
+ isp->isp_rsltccmplt++;
+ isp_done(complist[i]);
+ }
+ }
+ ndone =3D 0;
+ }
+ isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "Expecting %d more Status C=
ontinuations for total sense length of %u",
+ continuations_expected, totslen);
+ }
+ XS_SAVE_SENSE(xs, snsp, totslen, slen);
} else if ((req_status_flags & RQSF_GOT_STATUS) && (scsi_status & 0xff)=
=3D=3D SCSI_CHECK && IS_FC(isp)) {
isp_prt(isp, ISP_LOGWARN, "CHECK CONDITION w/o sense data for CDB=3D0x=
%x", XS_CDBP(xs)[0] & 0xff);
isp_print_bytes(isp, "CC with no Sense", QENTRY_LEN, qe);
@@ -5461,6 +5506,7 @@
*XS_STSP(xs) =3D SCSI_QFULL;
XS_SETERR(xs, HBA_NOERROR);
} else if (XS_NOERR(xs)) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d badness at %s:%u", XS_CHANNEL(xs=
), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
XS_SETERR(xs, HBA_BOTCH);
}
XS_SET_RESID(xs, XS_XFRLEN(xs));
@@ -5482,15 +5528,12 @@
}
isp_destroy_handle(isp, sp->req_handle);
=20
- if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
- ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs))=
|| (*XS_STSP(xs) !=3D SCSI_GOOD))))) {
- isp_prt_endcmd(isp, xs);
- }
if (isp->isp_nactive > 0) {
isp->isp_nactive--;
}
complist[ndone++] =3D xs; /* defer completion call until later */
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype =3D etype;
if (ndone =3D=3D MAX_REQUESTQ_COMPLETIONS) {
break;
}
@@ -5525,6 +5568,10 @@
for (i =3D 0; i < ndone; i++) {
xs =3D complist[i];
if (xs) {
+ if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
+ ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)=
) || (*XS_STSP(xs) !=3D SCSI_GOOD))))) {
+ isp_prt_endcmd(isp, xs);
+ }
isp->isp_rsltccmplt++;
isp_done(xs);
}
@@ -5547,8 +5594,8 @@
ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "%s0x%02x ", cdbstr, XS_CDBP(xs)[i=
]);
}
if (XS_SENSE_VALID(xs)) {
- isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=3D%s KEY/ASC/ASC=
Q=3D0x%02x/0x%02x/0x%02x",
- XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_SNSKEY(xs), XS_SN=
SASC(xs), XS_SNSASCQ(xs));
+ isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=3D%s SenseLength=
=3D%u/%u KEY/ASC/ASCQ=3D0x%02x/0x%02x/0x%02x",
+ XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_CUR_SNSLEN(xs), X=
S_TOT_SNSLEN(xs), XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs));
} else {
isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=3D%s STS 0x%x XS=
_ERR=3D0x%x", XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, *XS_STSP(xs),=
XS_ERR(xs));
}
@@ -5876,6 +5923,7 @@
continue;
}
j++;
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus reset set at %s:%u", XS_CHA=
NNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
XS_SETERR(xs, HBA_BUSRESET);
}
if (j) {
@@ -6102,10 +6150,10 @@
{
switch (type) {
case RQSTYPE_STATUS_CONT:
- isp_prt(isp, ISP_LOGDEBUG0, "Ignored Continuation Response");
+ isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
return (1);
case RQSTYPE_MARKER:
- isp_prt(isp, ISP_LOGDEBUG0, "Marker Response");
+ isp_prt(isp, ISP_LOG_WARN1, "Marker Response");
return (1);
case RQSTYPE_ATIO:
case RQSTYPE_CTIO:
@@ -6170,7 +6218,7 @@
=20
case RQCS_INCOMPLETE:
if ((sp->req_state_flags & RQSF_GOT_TARGET) =3D=3D 0) {
- isp_xs_prt(isp, xs, ISP_LOGDEBUG1, "Selection Timeout");
+ isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Selection Timeout @ %s:%d", __func_=
_, __LINE__);
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_SELTIMEOUT);
*rp =3D XS_XFRLEN(xs);
@@ -6366,7 +6414,7 @@
break;
=20
case RQCS_QUEUE_FULL:
- isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "internal queues full status 0x%x", *=
XS_STSP(xs));
+ isp_xs_prt(isp, xs, ISP_LOG_WARN1, "internal queues full status 0x%x", *=
XS_STSP(xs));
=20
/*
* If QFULL or some other status byte is set, then this
@@ -6374,17 +6422,14 @@
*
* Unfortunately, some QLogic f/w writers have, in
* some cases, ommitted to *set* status to QFULL.
- *
-
+ */
+#if 0
if (*XS_STSP(xs) !=3D SCSI_GOOD && XS_NOERR(xs)) {
XS_SETERR(xs, HBA_NOERROR);
return;
}
=20
- *
- *
- */
-
+#endif
*XS_STSP(xs) =3D SCSI_QFULL;
XS_SETERR(xs, HBA_NOERROR);
return;
@@ -6446,8 +6491,7 @@
reason =3D "logout";
}
=20
- isp_prt(isp, ISP_LOGINFO, "port %s for target %d",
- reason, XS_TGT(xs));
+ isp_prt(isp, ISP_LOGINFO, "port %s for target %d", reason, XS_TGT(xs));
=20
/*
* If we're on a local loop, force a LIP (which is overkill)
@@ -6469,24 +6513,21 @@
return;
}
case RQCS_PORT_CHANGED:
- isp_prt(isp, ISP_LOGWARN,
- "port changed for target %d", XS_TGT(xs));
+ isp_prt(isp, ISP_LOGWARN, "port changed for target %d", XS_TGT(xs));
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_SELTIMEOUT);
}
return;
=20
case RQCS_PORT_BUSY:
- isp_prt(isp, ISP_LOGWARN,
- "port busy for target %d", XS_TGT(xs));
+ isp_prt(isp, ISP_LOGWARN, "port busy for target %d", XS_TGT(xs));
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_TGTBSY);
}
return;
=20
default:
- isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x",
- sp->req_completion_status);
+ isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x", sp->req_compl=
etion_status);
break;
}
if (XS_NOERR(xs)) {
@@ -6547,9 +6588,7 @@
return;
=20
case RQCS_24XX_DRE: /* data reassembly error */
- isp_prt(isp, ISP_LOGERR,
- "Chan %d data reassembly error for target %d",
- chan, XS_TGT(xs));
+ isp_prt(isp, ISP_LOGERR, "Chan %d data reassembly error for target %d", =
chan, XS_TGT(xs));
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_ABORTED);
}
@@ -6557,8 +6596,7 @@
return;
=20
case RQCS_24XX_TABORT: /* aborted by target */
- isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS",
- chan, XS_TGT(xs));
+ isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", chan, XS_TGT(xs)=
);
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_ABORTED);
}
@@ -6580,7 +6618,7 @@
return;
}
XS_SET_RESID(xs, sp->req_resid);
- isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "Data Underrun (%d) for command 0x%x"=
, sp->req_resid, XS_CDBP(xs)[0] & 0xff);
+ isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Data Underrun (%d) for command 0x%x"=
, sp->req_resid, XS_CDBP(xs)[0] & 0xff);
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_NOERROR);
}
@@ -6616,8 +6654,7 @@
return;
}
case RQCS_PORT_CHANGED:
- isp_prt(isp, ISP_LOGWARN,
- "port changed for target %d chan %d", XS_TGT(xs), chan);
+ isp_prt(isp, ISP_LOGWARN, "port changed for target %d chan %d", XS_TGT(x=
s), chan);
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_SELTIMEOUT);
}
@@ -6625,9 +6662,7 @@
=20
=20
case RQCS_24XX_ENOMEM: /* f/w resource unavailable */
- isp_prt(isp, ISP_LOGWARN,
- "f/w resource unavailable for target %d chan %d",
- XS_TGT(xs), chan);
+ isp_prt(isp, ISP_LOGWARN, "f/w resource unavailable for target %d chan %=
d", XS_TGT(xs), chan);
if (XS_NOERR(xs)) {
*XS_STSP(xs) =3D SCSI_BUSY;
XS_SETERR(xs, HBA_TGTBSY);
@@ -6635,9 +6670,7 @@
return;
=20
case RQCS_24XX_TMO: /* task management overrun */
- isp_prt(isp, ISP_LOGWARN,
- "command for target %d overlapped task management for "
- "chan %d", XS_TGT(xs), chan);
+ isp_prt(isp, ISP_LOGWARN, "command for target %d overlapped task managem=
ent for chan %d", XS_TGT(xs), chan);
if (XS_NOERR(xs)) {
*XS_STSP(xs) =3D SCSI_BUSY;
XS_SETERR(xs, HBA_TGTBSY);
@@ -6645,9 +6678,7 @@
return;
=20
default:
- isp_prt(isp, ISP_LOGERR,
- "Unknown Completion Status 0x%x on chan %d",
- sp->req_completion_status, chan);
+ isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x on chan %d", sp=
->req_completion_status, chan);
break;
}
if (XS_NOERR(xs)) {
@@ -6991,7 +7022,7 @@
ISP_FC_OPMAP(0x03, 0x07), /* 0x05: MBOX_READ_RAM_WORD */
ISP_FC_OPMAP_FULL(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff), /* 0x0=
6: MBOX_MAILBOX_REG_TEST */
ISP_FC_OPMAP(0x07, 0x07), /* 0x07: MBOX_VERIFY_CHECKSUM */
- ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x4f), /* 0x08: MB=
OX_ABOUT_FIRMWARE */
+ ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x7f), /* 0x08: MB=
OX_ABOUT_FIRMWARE */
ISP_FC_OPMAP(0xdf, 0x01), /* 0x09: MBOX_LOAD_RISC_RAM_2100 */
ISP_FC_OPMAP(0xdf, 0x01), /* 0x0a: DUMP RAM */
ISP_FC_OPMAP_HALF(0x1, 0xff, 0x0, 0x01), /* 0x0b: MBOX_LOAD_RISC_RAM */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_freebsd.c
--- a/head/sys/dev/isp/isp_freebsd.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_freebsd.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
* Platform (FreeBSD) dependent common attachment code for Qlogic adapters.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp_freebsd.c 237537 2012-06-24 17:30=
:54Z mjacob $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_freebsd.c 239143 2012-08-08 18:24=
:33Z mjacob $");
#include <dev/isp/isp_freebsd.h>
#include <sys/unistd.h>
#include <sys/kthread.h>
@@ -55,9 +55,6 @@
int isp_quickboot_time =3D 7; /* don't wait more than N secs for loop up */
int isp_gone_device_time =3D 30; /* grace time before reporting device los=
t */
int isp_autoconfig =3D 1; /* automatically attach/detach devices */
-static const char *roles[4] =3D {
- "(none)", "Target", "Initiator", "Target/Initiator"
-};
static const char prom3[] =3D "Chan %d PortID 0x%06x Departed from Target =
%u because of %s";
static const char rqo[] =3D "%s: Request Queue Overflow\n";
=20
@@ -77,6 +74,7 @@
static void isp_target_thread_pi(void *);
static void isp_target_thread_fc(void *);
#endif
+static int isp_timer_count;
static void isp_timer(void *);
=20
static struct cdevsw isp_cdevsw =3D {
@@ -120,7 +118,10 @@
csa.event_enable =3D AC_LOST_DEVICE;
csa.callback =3D isp_cam_async;
csa.callback_arg =3D sim;
+
+ ISP_LOCK(isp);
xpt_action((union ccb *)&csa);
+ ISP_UNLOCK(isp);
=20
if (IS_SCSI(isp)) {
struct isp_spi *spi =3D ISP_SPI_PC(isp, chan);
@@ -154,15 +155,14 @@
if (fcp->role & ISP_ROLE_INITIATOR) {
isp_freeze_loopdown(isp, chan, "isp_attach");
callout_reset(&fc->ldt, isp_quickboot_time * hz, isp_ldt, fc);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down T=
imer @ %lu", (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down =
Timer @ %lu", (unsigned long) time_uptime);
}
ISP_UNLOCK(isp);
if (THREAD_CREATE(isp_kthread, fc, &fc->kproc, 0, 0, "%s: fc_thrd%d", de=
vice_get_nameunit(isp->isp_osinfo.dev), chan)) {
xpt_free_path(fc->path);
ISP_LOCK(isp);
- if (callout_active(&fc->ldt)) {
+ if (callout_active(&fc->ldt))
callout_stop(&fc->ldt);
- }
xpt_bus_deregister(cam_sim_path(fc->sim));
ISP_UNLOCK(isp);
cam_sim_free(fc->sim, FALSE);
@@ -182,6 +182,9 @@
SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "wwpn", CTLFLAG_R=
D, &FCPARAM(isp, 0)->isp_wwpn, "World Wide Port Name");
SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "loop_down_limit"=
, CTLFLAG_RW, &ISP_FC_PC(isp, 0)->loop_down_limit, 0, "Loop Down Limit");
SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "gone_device_time=
", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->gone_device_time, 0, "Gone Device Time");
+#if defined(ISP_TARGET_MODE) && defined(DEBUG)
+ SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "inject_lost_data=
_frame", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->inject_lost_data_frame, 0, "Cause =
a Lost Frame on a Read");
+#endif
}
}
return (0);
@@ -223,7 +226,8 @@
}
=20
callout_init_mtx(&isp->isp_osinfo.tmo, &isp->isp_osinfo.lock, 0);
- callout_reset(&isp->isp_osinfo.tmo, hz, isp_timer, isp);
+ isp_timer_count =3D hz >> 2;
+ callout_reset(&isp->isp_osinfo.tmo, isp_timer_count, isp_timer, isp);
isp->isp_osinfo.timer_active =3D 1;
=20
isp->isp_osinfo.cdev =3D make_dev(&isp_cdevsw, du, UID_ROOT, GID_OPERATOR=
, 0600, "%s", nu);
@@ -301,7 +305,9 @@
csa.event_enable =3D 0;
csa.callback =3D isp_cam_async;
csa.callback_arg =3D sim;
+ ISP_LOCK(isp);
xpt_action((union ccb *)&csa);
+ ISP_UNLOCK(isp);
xpt_free_path(path);
xpt_bus_deregister(cam_sim_path(sim));
cam_sim_free(sim, FALSE);
@@ -346,7 +352,7 @@
int wasfrozen =3D fc->simqfrozen & SIMQFRZ_LOOPDOWN;
fc->simqfrozen &=3D ~SIMQFRZ_LOOPDOWN;
if (wasfrozen && fc->simqfrozen =3D=3D 0) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq",=
__func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq"=
, __func__, chan);
xpt_release_simq(fc->sim, 1);
}
}
@@ -360,7 +366,7 @@
int nr, chan, retval =3D ENOTTY;
=20
isp =3D dev->si_drv1;
-=09
+
switch (c) {
case ISP_SDBLEV:
{
@@ -479,7 +485,7 @@
}
lp =3D &FCPARAM(isp, ifc->chan)->portdb[ifc->loopid];
if (lp->state =3D=3D FC_PORTDB_STATE_VALID || lp->target_mode) {
- ifc->role =3D lp->roles;
+ ifc->role =3D (lp->prli_word3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
ifc->loopid =3D lp->handle;
ifc->portid =3D lp->portid;
ifc->node_wwn =3D lp->node_wwn;
@@ -772,14 +778,17 @@
static ISP_INLINE void
isp_free_pcmd(ispsoftc_t *isp, union ccb *ccb)
{
- ((struct isp_pcmd *)ISP_PCMD(ccb))->next =3D isp->isp_osinfo.pcmd_free;
- isp->isp_osinfo.pcmd_free =3D ISP_PCMD(ccb);
- ISP_PCMD(ccb) =3D NULL;
+ if (ISP_PCMD(ccb)) {
+ memset(ISP_PCMD(ccb), 0, sizeof (struct isp_pcmd));
+ ((struct isp_pcmd *)ISP_PCMD(ccb))->next =3D isp->isp_osinfo.pcmd_free;
+ isp->isp_osinfo.pcmd_free =3D ISP_PCMD(ccb);
+ ISP_PCMD(ccb) =3D NULL;
+ }
}
+
/*
* Put the target mode functions here, because some are inlines
*/
-
#ifdef ISP_TARGET_MODE
static ISP_INLINE void isp_tmlock(ispsoftc_t *, const char *);
static ISP_INLINE void isp_tmunlk(ispsoftc_t *);
@@ -804,9 +813,11 @@
static int isp_disable_target_mode(ispsoftc_t *, int);
static void isp_ledone(ispsoftc_t *, lun_entry_t *);
static timeout_t isp_refire_putback_atio;
+static timeout_t isp_refire_notify_ack;
static void isp_complete_ctio(union ccb *);
static void isp_target_putback_atio(union ccb *);
-static void isp_target_start_ctio(ispsoftc_t *, union ccb *);
+enum Start_Ctio_How { FROM_CAM, FROM_TIMER, FROM_SRR, FROM_CTIO_DONE };
+static void isp_target_start_ctio(ispsoftc_t *, union ccb *, enum Start_Ct=
io_How);
static void isp_handle_platform_atio(ispsoftc_t *, at_entry_t *);
static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *);
static void isp_handle_platform_atio7(ispsoftc_t *, at7_entry_t *);
@@ -967,7 +978,9 @@
isp_tmcmd_restart(ispsoftc_t *isp)
{
inot_private_data_t *ntp;
+ inot_private_data_t *restart_queue;
tstate_t *tptr;
+ union ccb *ccb;
struct tslist *lhp;
int bus, i;
=20
@@ -975,8 +988,8 @@
for (i =3D 0; i < LUN_HASH_SIZE; i++) {
ISP_GET_PC_ADDR(isp, bus, lun_hash[i], lhp);
SLIST_FOREACH(tptr, lhp, next) {
- inot_private_data_t *restart_queue =3D tptr->restart_queue;
- tptr->restart_queue =3D NULL;
+ if ((restart_queue =3D tptr->restart_queue) !=3D NULL)
+ tptr->restart_queue =3D NULL;
while (restart_queue) {
ntp =3D restart_queue;
restart_queue =3D ntp->rd.nt.nt_hba;
@@ -998,6 +1011,14 @@
break;
}
}
+ /*
+ * We only need to do this once per tptr
+ */
+ if (!TAILQ_EMPTY(&tptr->waitq)) {
+ ccb =3D (union ccb *)TAILQ_LAST(&tptr->waitq, isp_ccbq);
+ TAILQ_REMOVE(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);
+ isp_target_start_ctio(isp, ccb, FROM_TIMER);
+ }
}
}
}
@@ -1026,8 +1047,10 @@
static ISP_INLINE void
isp_put_atpd(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp)
{
- atp->tag =3D 0;
- atp->dead =3D 0;
+ if (atp->ests) {
+ isp_put_ecmd(isp, atp->ests);
+ }
+ memset(atp, 0, sizeof (*atp));
atp->next =3D tptr->atfree;
tptr->atfree =3D atp;
}
@@ -1042,8 +1065,8 @@
if (atp->tag =3D=3D 0) {
continue;
}
- xpt_print(tptr->owner, "ATP: [0x%x] origdlen %u bytes_xfrd %u last_xfr %=
u lun %u nphdl 0x%04x s_id 0x%06x d_id 0x%06x oxid 0x%04x state %s\n",
- atp->tag, atp->orig_datalen, atp->bytes_xfered, atp->l=
ast_xframt, atp->lun, atp->nphdl, atp->sid, atp->portid, atp->oxid, states[=
atp->state & 0x7]);
+ xpt_print(tptr->owner, "ATP: [0x%x] origdlen %u bytes_xfrd %u lun %u nph=
dl 0x%04x s_id 0x%06x d_id 0x%06x oxid 0x%04x state %s\n",
+ atp->tag, atp->orig_datalen, atp->bytes_xfered, atp->l=
un, atp->nphdl, atp->sid, atp->portid, atp->oxid, states[atp->state & 0x7]);
}
}
=20
@@ -1108,6 +1131,7 @@
}
SLIST_INIT(&tptr->atios);
SLIST_INIT(&tptr->inots);
+ TAILQ_INIT(&tptr->waitq);
for (i =3D 0; i < ATPDPSIZE-1; i++) {
tptr->atpool[i].next =3D &tptr->atpool[i+1];
tptr->ntpool[i].next =3D &tptr->ntpool[i+1];
@@ -1248,7 +1272,7 @@
ISP_SET_PC(isp, bus, tm_enable_defer, 1);
ccb->ccb_h.status =3D CAM_REQ_CMP;
xpt_print(ccb->ccb_h.path, "Target Mode not enabled yet- lun enable defe=
rred\n");
- goto done;
+ goto done1;
}
=20
/*
@@ -1265,6 +1289,7 @@
} else {
tptr->enabled =3D 1;
}
+done1:
if (tptr) {
rls_lun_statep(isp, tptr);
}
@@ -1283,6 +1308,7 @@
struct tslist *lhp;
int i, n;
=20
+
ISP_GET_PC(isp, bus, tm_enabled, i);
if (i =3D=3D 1) {
return (CAM_REQ_CMP);
@@ -1303,7 +1329,7 @@
SLIST_FOREACH(tptr, lhp, next) {
tptr->hold++;
if (tptr->enabled =3D=3D 0) {
- if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) =3D=3D=
0) {
+ if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) =3D=3D=
CAM_REQ_CMP) {
tptr->enabled =3D 1;
n++;
}
@@ -1325,9 +1351,10 @@
isp_enable_deferred(ispsoftc_t *isp, int bus, lun_id_t lun)
{
cam_status status;
- int luns_already_enabled =3D ISP_FC_PC(isp, bus)->tm_luns_enabled;
-
- isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u", __func__, bus, lun);
+ int luns_already_enabled;
+
+ ISP_GET_PC(isp, bus, tm_luns_enabled, luns_already_enabled);
+ isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u luns_enabled %d", __func__,=
bus, lun, luns_already_enabled);
if (IS_24XX(isp) || (IS_FC(isp) && luns_already_enabled)) {
status =3D CAM_REQ_CMP;
} else {
@@ -1342,7 +1369,7 @@
}
status =3D CAM_REQ_INPROG;
isp->isp_osinfo.rptr =3D &status;
- if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, DFLT_CMND_CNT, DFLT_I=
NOT_CNT)) {
+ if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun =3D=3D CAM_LUN_WILDCAR=
D? 0 : lun, cmd_cnt, not_cnt)) {
status =3D CAM_RESRC_UNAVAIL;
} else {
mtx_sleep(&status, &isp->isp_lock, PRIBIO, "isp_enable_deferred", 0);
@@ -1412,8 +1439,9 @@
/*
* For SCC FW, we only deal with lun zero.
*/
- if (IS_FC(isp)) {
- lun =3D 0;
+ if (IS_FC(isp) && lun > 0) {
+ status =3D CAM_REQ_CMP;
+ goto done;
}
isp->isp_osinfo.rptr =3D &status;
if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, 0, 0)) {
@@ -1426,7 +1454,8 @@
if (status =3D=3D CAM_REQ_CMP) {
tptr->enabled =3D 0;
/*
- * If we have no more luns enabled for this bus, delete all tracked wwns=
for it (if we are FC)
+ * If we have no more luns enabled for this bus,
+ * delete all tracked wwns for it (if we are FC),=20
* and disable target mode.
*/
if (is_any_lun_enabled(isp, bus) =3D=3D 0) {
@@ -1492,7 +1521,7 @@
}
}
ISP_SET_PC(isp, bus, tm_enabled, 0);
- isp_prt(isp, ISP_LOGINFO, "Target Role disabled onon Bus %d", bus);
+ isp_prt(isp, ISP_LOGINFO, "Target Role disabled on Bus %d", bus);
return (0);
}
=20
@@ -1517,313 +1546,546 @@
}
=20
static void
-isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
+isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How=
how)
{
- void *qe;
+ int fctape, sendstatus, resid;
tstate_t *tptr;
+ fcparam *fcp;
atio_private_data_t *atp;
- struct ccb_scsiio *cso =3D &ccb->csio;
- uint32_t dmaresult, handle;
+ struct ccb_scsiio *cso;
+ uint32_t dmaresult, handle, xfrlen, sense_length, tmp;
uint8_t local[QENTRY_LEN];
=20
- /*
- * Do some sanity checks.
- */
- if (cso->dxfer_len =3D=3D 0) {
- if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
- xpt_print(ccb->ccb_h.path, "a data transfer length of zero but no statu=
s to send is wrong\n");
- ccb->ccb_h.status =3D CAM_REQ_INVALID;
- xpt_done(ccb);
- return;
- }
- }
-
tptr =3D get_lun_statep(isp, XS_CHANNEL(ccb), XS_LUN(ccb));
if (tptr =3D=3D NULL) {
tptr =3D get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD);
if (tptr =3D=3D NULL) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find tstate pointer in %s=
\n", __func__, cso->tag_id);
- dump_tstates(isp, XS_CHANNEL(ccb));
+ isp_prt(isp, ISP_LOGERR, "%s: [0x%x] cannot find tstate pointer", __fun=
c__, ccb->csio.tag_id);
ccb->ccb_h.status =3D CAM_DEV_NOT_THERE;
xpt_done(ccb);
return;
}
}
-
- atp =3D isp_get_atpd(isp, tptr, cso->tag_id);
- if (atp =3D=3D NULL) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find private data adjunct\=
n", __func__, cso->tag_id);
- isp_dump_atpd(isp, tptr);
- ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
- xpt_done(ccb);
- return;
- }
- if (atp->dead) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO for a dea=
d command\n", __func__, cso->tag_id);
- ccb->ccb_h.status =3D CAM_REQ_ABORTED;
- xpt_done(ccb);
- return;
- }
-
- /*
- * Check to make sure we're still in target mode.
- */
- if ((FCPARAM(isp, XS_CHANNEL(ccb))->role & ISP_ROLE_TARGET) =3D=3D 0) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO because w=
e're no longer in target mode\n", __func__, cso->tag_id);
- ccb->ccb_h.status =3D CAM_PROVIDE_FAIL;
- xpt_done(ccb);
- return;
- }
-
- /*
- * Get some resources
- */
- if (isp_get_pcmd(isp, ccb)) {
- rls_lun_statep(isp, tptr);
- xpt_print(ccb->ccb_h.path, "out of PCMDs\n");
- cam_freeze_devq(ccb->ccb_h.path);
- cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, =
0);
- ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
- xpt_done(ccb);
- return;
- }
- qe =3D isp_getrqentry(isp);
- if (qe =3D=3D NULL) {
- xpt_print(ccb->ccb_h.path, rqo, __func__);
- cam_freeze_devq(ccb->ccb_h.path);
- cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, =
0);
- ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
- goto out;
- }
- memset(local, 0, QENTRY_LEN);
-
- /*
- * We're either moving data or completing a command here.
- */
- if (IS_24XX(isp)) {
- ct7_entry_t *cto =3D (ct7_entry_t *) local;
-
- cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO7;
- cto->ct_header.rqs_entry_count =3D 1;
- cto->ct_header.rqs_seqno =3D 1;
- cto->ct_nphdl =3D atp->nphdl;
- cto->ct_rxid =3D atp->tag;
- cto->ct_iid_lo =3D atp->portid;
- cto->ct_iid_hi =3D atp->portid >> 16;
- cto->ct_oxid =3D atp->oxid;
- cto->ct_vpidx =3D ISP_GET_VPIDX(isp, XS_CHANNEL(ccb));
- cto->ct_scsi_status =3D cso->scsi_status;
- cto->ct_timeout =3D 120;
- cto->ct_flags =3D atp->tattr << CT7_TASK_ATTR_SHIFT;
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: ENTRY[0x%x] how %u xfrlen %u sendstatus=
%d sense_len %u", __func__, ccb->csio.tag_id, how, ccb->csio.dxfer_len,
+ (ccb->ccb_h.flags & CAM_SEND_STATUS) !=3D 0, ((ccb->ccb_h.flags & CAM=
_SEND_SENSE)? ccb->csio.sense_len : 0));
+
+ switch (how) {
+ case FROM_TIMER:
+ case FROM_CAM:
+ /*
+ * Insert at the tail of the list, if any, waiting CTIO CCBs
+ */
+ TAILQ_INSERT_TAIL(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ break;
+ case FROM_SRR:
+ case FROM_CTIO_DONE:
+ TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ break;
+ }
+
+ while (TAILQ_FIRST(&tptr->waitq) !=3D NULL) {
+ ccb =3D (union ccb *) TAILQ_FIRST(&tptr->waitq);
+ TAILQ_REMOVE(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);
+
+ cso =3D &ccb->csio;
+ xfrlen =3D cso->dxfer_len;
+ if (xfrlen =3D=3D 0) {
+ if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
+ ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "a data transfer length=
of zero but no status to send is wrong\n");
+ ccb->ccb_h.status =3D CAM_REQ_INVALID;
+ xpt_done(ccb);
+ continue;
+ }
+ }
+
+ atp =3D isp_get_atpd(isp, tptr, cso->tag_id);
+ if (atp =3D=3D NULL) {
+ isp_prt(isp, ISP_LOGERR, "%s: [0x%x] cannot find private data adjunct i=
n %s", __func__, cso->tag_id, __func__);
+ isp_dump_atpd(isp, tptr);
+ ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
+ xpt_done(ccb);
+ continue;
+ }
+
+ /*
+ * Is this command a dead duck?
+ */
+ if (atp->dead) {
+ isp_prt(isp, ISP_LOGERR, "%s: [0x%x] not sending a CTIO for a dead comm=
and", __func__, cso->tag_id);
+ ccb->ccb_h.status =3D CAM_REQ_ABORTED;
+ xpt_done(ccb);
+ continue;
+ }
+
+ /*
+ * Check to make sure we're still in target mode.
+ */
+ fcp =3D FCPARAM(isp, XS_CHANNEL(ccb));
+ if ((fcp->role & ISP_ROLE_TARGET) =3D=3D 0) {
+ isp_prt(isp, ISP_LOGERR, "%s: [0x%x] stopping sending a CTIO because we=
're no longer in target mode", __func__, cso->tag_id);
+ ccb->ccb_h.status =3D CAM_PROVIDE_FAIL;
+ xpt_done(ccb);
+ continue;
+ }
+
+ /*
+ * We're only handling ATPD_CCB_OUTSTANDING outstanding CCB at a time (o=
ne of which
+ * could be split into two CTIOs to split data and status).
+ */
+ if (atp->ctcnt >=3D ATPD_CCB_OUTSTANDING) {
+ isp_prt(isp, ISP_LOGTINFO, "[0x%x] handling only %d CCBs at a time (fla=
gs for this ccb: 0x%x)", cso->tag_id, ATPD_CCB_OUTSTANDING, ccb->ccb_h.flag=
s);
+ TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ break;
+ }
+
+ /*
+ * Does the initiator expect FC-Tape style responses?
+ */
+ if ((atp->word3 & PRLI_WD3_RETRY) && fcp->fctape_enabled) {
+ fctape =3D 1;
+ } else {
+ fctape =3D 0;
+ }
+
+ /*
+ * If we already did the data xfer portion of a CTIO that sends data
+ * and status, don't do it again and do the status portion now.
+ */
+ if (atp->sendst) {
+ isp_prt(isp, ISP_LOGTINFO, "[0x%x] now sending synthesized status orig_=
dl=3D%u xfered=3D%u bit=3D%u",
+ cso->tag_id, atp->orig_datalen, atp->bytes_xfered, atp->bytes_in_tr=
ansit);
+ xfrlen =3D 0; /* we already did the data transfer */
+ atp->sendst =3D 0;
+ }
if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
- cto->ct_flags |=3D CT7_SENDSTATUS;
- }
- if (cso->dxfer_len =3D=3D 0) {
- cto->ct_flags |=3D CT7_FLAG_MODE1 | CT7_NO_DATA;
- if ((ccb->ccb_h.flags & CAM_SEND_SENSE) !=3D 0) {
- int m =3D min(cso->sense_len, sizeof (struct scsi_sense_data));
- cto->rsp.m1.ct_resplen =3D cto->ct_senselen =3D min(m, MAXRESPLEN_24XX=
);
- memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, cto->ct_senselen);
- cto->ct_scsi_status |=3D (FCP_SNSLEN_VALID << 8);
+ sendstatus =3D 1;
+ } else {
+ sendstatus =3D 0;
+ }
+
+ if (ccb->ccb_h.flags & CAM_SEND_SENSE) {
+ KASSERT((sendstatus !=3D 0), ("how can you have CAM_SEND_SENSE w/o CAM_=
SEND_STATUS?"));
+ /*
+ * Sense length is not the entire sense data structure size. Periph
+ * drivers don't seem to be setting sense_len to reflect the actual
+ * size. We'll peek inside to get the right amount.
+ */
+ sense_length =3D cso->sense_len;
+
+ /*
+ * This 'cannot' happen
+ */
+ if (sense_length > (XCMD_SIZE - MIN_FCP_RESPONSE_SIZE)) {
+ sense_length =3D XCMD_SIZE - MIN_FCP_RESPONSE_SIZE;
}
} else {
- cto->ct_flags |=3D CT7_FLAG_MODE0;
- if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
- cto->ct_flags |=3D CT7_DATA_IN;
+ sense_length =3D 0;
+ }
+
+ memset(local, 0, QENTRY_LEN);
+
+ /*
+ * Check for overflow
+ */
+ tmp =3D atp->bytes_xfered + atp->bytes_in_transit + xfrlen;
+ if (tmp > atp->orig_datalen) {
+ isp_prt(isp, ISP_LOGERR, "%s: [0x%x] data overflow by %u bytes", __func=
__, cso->tag_id, tmp - atp->orig_datalen);
+ ccb->ccb_h.status =3D CAM_DATA_RUN_ERR;
+ xpt_done(ccb);
+ continue;
+ }
+
+ if (IS_24XX(isp)) {
+ ct7_entry_t *cto =3D (ct7_entry_t *) local;
+
+ cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO7;
+ cto->ct_header.rqs_entry_count =3D 1;
+ cto->ct_header.rqs_seqno |=3D ATPD_SEQ_NOTIFY_CAM;
+ ATPD_SET_SEQNO(cto, atp);
+ cto->ct_nphdl =3D atp->nphdl;
+ cto->ct_rxid =3D atp->tag;
+ cto->ct_iid_lo =3D atp->portid;
+ cto->ct_iid_hi =3D atp->portid >> 16;
+ cto->ct_oxid =3D atp->oxid;
+ cto->ct_vpidx =3D ISP_GET_VPIDX(isp, XS_CHANNEL(ccb));
+ cto->ct_timeout =3D 120;
+ cto->ct_flags =3D atp->tattr << CT7_TASK_ATTR_SHIFT;
+
+ /*
+ * Mode 1, status, no data. Only possible when we are sending status, h=
ave
+ * no data to transfer, and any sense length can fit in the ct7_entry.
+ *
+ * Mode 2, status, no data. We have to use this in the case sense data
+ * won't fit into a ct7_entry_t.
+ *
+ */
+ if (sendstatus && xfrlen =3D=3D 0) {
+ cto->ct_flags |=3D CT7_SENDSTATUS | CT7_NO_DATA;
+ resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_in_transi=
t;
+ if (sense_length <=3D MAXRESPLEN_24XX) {
+ if (resid < 0) {
+ cto->ct_resid =3D -resid;
+ } else if (resid > 0) {
+ cto->ct_resid =3D resid;
+ }
+ cto->ct_flags |=3D CT7_FLAG_MODE1;
+ cto->ct_scsi_status =3D cso->scsi_status;
+ if (resid < 0) {
+ cto->ct_scsi_status |=3D (FCP_RESID_OVERFLOW << 8);
+ } else if (resid > 0) {
+ cto->ct_scsi_status |=3D (FCP_RESID_UNDERFLOW << 8);
+ }
+ if (fctape) {
+ cto->ct_flags |=3D CT7_CONFIRM|CT7_EXPLCT_CONF;
+ }
+ if (sense_length) {
+ cto->ct_scsi_status |=3D (FCP_SNSLEN_VALID << 8);
+ cto->rsp.m1.ct_resplen =3D cto->ct_senselen =3D sense_length;
+ memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length);
+ }
+ } else {
+ bus_addr_t addr;
+ char buf[XCMD_SIZE];
+ fcp_rsp_iu_t *rp;
+
+ if (atp->ests =3D=3D NULL) {
+ atp->ests =3D isp_get_ecmd(isp);
+ if (atp->ests =3D=3D NULL) {
+ TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ break;
+ }
+ }
+ memset(buf, 0, sizeof (buf));
+ rp =3D (fcp_rsp_iu_t *)buf;
+ if (fctape) {
+ cto->ct_flags |=3D CT7_CONFIRM|CT7_EXPLCT_CONF;
+ rp->fcp_rsp_bits |=3D FCP_CONF_REQ;
+ }
+ cto->ct_flags |=3D CT7_FLAG_MODE2;
+ rp->fcp_rsp_scsi_status =3D cso->scsi_status;
+ if (resid < 0) {
+ rp->fcp_rsp_resid =3D -resid;
+ rp->fcp_rsp_bits |=3D FCP_RESID_OVERFLOW;
+ } else if (resid > 0) {
+ rp->fcp_rsp_resid =3D resid;
+ rp->fcp_rsp_bits |=3D FCP_RESID_UNDERFLOW;
+ }
+ if (sense_length) {
+ rp->fcp_rsp_snslen =3D sense_length;
+ cto->ct_senselen =3D sense_length;
+ rp->fcp_rsp_bits |=3D FCP_SNSLEN_VALID;
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data,=
sense_length);
+ } else {
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ }
+ if (isp->isp_dblev & ISP_LOGTDEBUG1) {
+ isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_R=
ESPONSE_SIZE + sense_length, atp->ests);
+ }
+ addr =3D isp->isp_osinfo.ecmd_dma;
+ addr +=3D ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * =
XCMD_SIZE);
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: ests base %p vaddr %p ecmd_dma %jx =
addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests,
+ (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RE=
SPONSE_SIZE + sense_length);
+ cto->rsp.m2.ct_datalen =3D MIN_FCP_RESPONSE_SIZE + sense_length;
+ cto->rsp.m2.ct_fcp_rsp_iudata.ds_base =3D DMA_LO32(addr);
+ cto->rsp.m2.ct_fcp_rsp_iudata.ds_basehi =3D DMA_HI32(addr);
+ cto->rsp.m2.ct_fcp_rsp_iudata.ds_count =3D MIN_FCP_RESPONSE_SIZE + se=
nse_length;
+ }
+ if (sense_length) {
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO7[0x%x] seq %u nc %d CDB0=3D%x =
sstatus=3D0x%x flags=3D0x%x resid=3D%d slen %u sense: %x %x/%x/%x", __func_=
_,
+ cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0,=
cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, sense_length,
+ cso->sense_data.error_code, cso->sense_data.sense_buf[1], cso->se=
nse_data.sense_buf[11], cso->sense_data.sense_buf[12]);
+ } else {
+ isp_prt(isp, ISP_LOGDEBUG0, "%s: CTIO7[0x%x] seq %u nc %d CDB0=3D%x s=
status=3D0x%x flags=3D0x%x resid=3D%d", __func__,
+ cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0,=
cto->ct_scsi_status, cto->ct_flags, cto->ct_resid);
+ }
+ atp->state =3D ATPD_STATE_LAST_CTIO;
+ }
+
+ /*
+ * Mode 0 data transfers, *possibly* with status.
+ */
+ if (xfrlen !=3D 0) {
+ cto->ct_flags |=3D CT7_FLAG_MODE0;
+ if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
+ cto->ct_flags |=3D CT7_DATA_IN;
+ } else {
+ cto->ct_flags |=3D CT7_DATA_OUT;
+ }
+
+ cto->rsp.m0.reloff =3D atp->bytes_xfered + atp->bytes_in_transit;
+ cto->rsp.m0.ct_xfrlen =3D xfrlen;
+
+#ifdef DEBUG
+ if (ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame && xfrlen =
> ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame) {
+ isp_prt(isp, ISP_LOGWARN, "%s: truncating data frame with xfrlen %d t=
o %d", __func__, xfrlen, xfrlen - (xfrlen >> 2));
+ ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame =3D 0;
+ cto->rsp.m0.ct_xfrlen -=3D xfrlen >> 2;
+ }
+#endif
+ if (sendstatus) {
+ resid =3D atp->orig_datalen - atp->bytes_xfered - xfrlen;
+ if (cso->scsi_status =3D=3D SCSI_STATUS_OK && resid =3D=3D 0 /* && fc=
tape =3D=3D 0 */) {
+ cto->ct_flags |=3D CT7_SENDSTATUS;
+ atp->state =3D ATPD_STATE_LAST_CTIO;
+ if (fctape) {
+ cto->ct_flags |=3D CT7_CONFIRM|CT7_EXPLCT_CONF;
+ }
+ } else {
+ atp->sendst =3D 1; /* send status later */
+ cto->ct_header.rqs_seqno &=3D ~ATPD_SEQ_NOTIFY_CAM;
+ atp->state =3D ATPD_STATE_CTIO;
+ }
+ } else {
+ atp->state =3D ATPD_STATE_CTIO;
+ }
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO7[0x%x] seq %u nc %d CDB0=3D%x s=
status=3D0x%x flags=3D0x%x xfrlen=3D%u off=3D%u", __func__,
+ cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0, =
cto->ct_scsi_status, cto->ct_flags, xfrlen, atp->bytes_xfered);
+ }
+ } else if (IS_FC(isp)) {
+ ct2_entry_t *cto =3D (ct2_entry_t *) local;
+
+ if (isp->isp_osinfo.sixtyfourbit)
+ cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO3;
+ else
+ cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO2;
+ cto->ct_header.rqs_entry_count =3D 1;
+ cto->ct_header.rqs_seqno |=3D ATPD_SEQ_NOTIFY_CAM;
+ ATPD_SET_SEQNO(cto, atp);
+ if (ISP_CAP_2KLOGIN(isp) =3D=3D 0) {
+ ((ct2e_entry_t *)cto)->ct_iid =3D cso->init_id;
} else {
- cto->ct_flags |=3D CT7_DATA_OUT;
+ cto->ct_iid =3D cso->init_id;
+ if (ISP_CAP_SCCFW(isp) =3D=3D 0) {
+ cto->ct_lun =3D ccb->ccb_h.target_lun;
+ }
}
- cto->rsp.m0.reloff =3D atp->bytes_xfered;
+ cto->ct_timeout =3D 10;
+ cto->ct_rxid =3D cso->tag_id;
+
/*
- * Don't overrun the limits placed on us
+ * Mode 1, status, no data. Only possible when we are sending status, h=
ave
+ * no data to transfer, and the sense length can fit in the ct7_entry.
+ *
+ * Mode 2, status, no data. We have to use this in the case the the res=
ponse
+ * length won't fit into a ct2_entry_t.
+ *
+ * We'll fill out this structure with information as if this were a
+ * Mode 1. The hardware layer will create the Mode 2 FCP RSP IU as
+ * needed based upon this.
*/
- if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) {
- cso->dxfer_len =3D atp->orig_datalen - atp->bytes_xfered;
+ if (sendstatus && xfrlen =3D=3D 0) {
+ cto->ct_flags |=3D CT2_SENDSTATUS | CT2_NO_DATA;
+ resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_in_transi=
t;
+ if (sense_length <=3D MAXRESPLEN) {
+ if (resid < 0) {
+ cto->ct_resid =3D -resid;
+ } else if (resid > 0) {
+ cto->ct_resid =3D resid;
+ }
+ cto->ct_flags |=3D CT2_FLAG_MODE1;
+ cto->rsp.m1.ct_scsi_status =3D cso->scsi_status;
+ if (resid < 0) {
+ cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_OVER;
+ } else if (resid > 0) {
+ cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_UNDER;
+ }
+ if (fctape) {
+ cto->ct_flags |=3D CT2_CONFIRM;
+ }
+ if (sense_length) {
+ cto->rsp.m1.ct_scsi_status |=3D CT2_SNSLEN_VALID;
+ cto->rsp.m1.ct_resplen =3D cto->rsp.m1.ct_senselen =3D sense_length;
+ memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length);
+ }
+ } else {
+ bus_addr_t addr;
+ char buf[XCMD_SIZE];
+ fcp_rsp_iu_t *rp;
+
+ if (atp->ests =3D=3D NULL) {
+ atp->ests =3D isp_get_ecmd(isp);
+ if (atp->ests =3D=3D NULL) {
+ TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ break;
+ }
+ }
+ memset(buf, 0, sizeof (buf));
+ rp =3D (fcp_rsp_iu_t *)buf;
+ if (fctape) {
+ cto->ct_flags |=3D CT2_CONFIRM;
+ rp->fcp_rsp_bits |=3D FCP_CONF_REQ;
+ }
+ cto->ct_flags |=3D CT2_FLAG_MODE2;
+ rp->fcp_rsp_scsi_status =3D cso->scsi_status;
+ if (resid < 0) {
+ rp->fcp_rsp_resid =3D -resid;
+ rp->fcp_rsp_bits |=3D FCP_RESID_OVERFLOW;
+ } else if (resid > 0) {
+ rp->fcp_rsp_resid =3D resid;
+ rp->fcp_rsp_bits |=3D FCP_RESID_UNDERFLOW;
+ }
+ if (sense_length) {
+ rp->fcp_rsp_snslen =3D sense_length;
+ rp->fcp_rsp_bits |=3D FCP_SNSLEN_VALID;
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data,=
sense_length);
+ } else {
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ }
+ if (isp->isp_dblev & ISP_LOGTDEBUG1) {
+ isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_R=
ESPONSE_SIZE + sense_length, atp->ests);
+ }
+ addr =3D isp->isp_osinfo.ecmd_dma;
+ addr +=3D ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * =
XCMD_SIZE);
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: ests base %p vaddr %p ecmd_dma %jx =
addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests,
+ (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RE=
SPONSE_SIZE + sense_length);
+ cto->rsp.m2.ct_datalen =3D MIN_FCP_RESPONSE_SIZE + sense_length;
+ if (isp->isp_osinfo.sixtyfourbit) {
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base =3D DMA_LO32(addr);
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi =3D DMA_HI32(addr);
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count =3D MIN_FCP_RESPONSE_SIZ=
E + sense_length;
+ } else {
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base =3D DMA_LO32(addr);
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count =3D MIN_FCP_RESPONSE_SIZ=
E + sense_length;
+ }
+ }
+ if (sense_length) {
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[0x%x] seq %u nc %d CDB0=3D%x =
sstatus=3D0x%x flags=3D0x%x resid=3D%d sense: %x %x/%x/%x", __func__,
+ cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0,=
cso->scsi_status, cto->ct_flags, cto->ct_resid,
+ cso->sense_data.error_code, cso->sense_data.sense_buf[1], cso->se=
nse_data.sense_buf[11], cso->sense_data.sense_buf[12]);
+ } else {
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[0x%x] seq %u nc %d CDB0=3D%x =
sstatus=3D0x%x flags=3D0x%x resid=3D%d", __func__, cto->ct_rxid,
+ ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0, cso->scsi_sta=
tus, cto->ct_flags, cto->ct_resid);
+ }
+ atp->state =3D ATPD_STATE_LAST_CTIO;
}
- atp->last_xframt =3D cso->dxfer_len;
- cto->rsp.m0.ct_xfrlen =3D cso->dxfer_len;
- }
- if (cto->ct_flags & CT7_SENDSTATUS) {
- int lvl =3D (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0;
- cto->ct_resid =3D atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_l=
en);
- if (cto->ct_resid < 0) {
- cto->ct_scsi_status |=3D (FCP_RESID_OVERFLOW << 8);
- } else if (cto->ct_resid > 0) {
- cto->ct_scsi_status |=3D (FCP_RESID_UNDERFLOW << 8);
+
+ if (xfrlen !=3D 0) {
+ cto->ct_flags |=3D CT2_FLAG_MODE0;
+ if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
+ cto->ct_flags |=3D CT2_DATA_IN;
+ } else {
+ cto->ct_flags |=3D CT2_DATA_OUT;
+ }
+
+ cto->ct_reloff =3D atp->bytes_xfered + atp->bytes_in_transit;
+ cto->rsp.m0.ct_xfrlen =3D xfrlen;
+
+ if (sendstatus) {
+ resid =3D atp->orig_datalen - atp->bytes_xfered - xfrlen;
+ if (cso->scsi_status =3D=3D SCSI_STATUS_OK && resid =3D=3D 0 /*&& fct=
ape =3D=3D 0*/) {
+ cto->ct_flags |=3D CT2_SENDSTATUS;
+ atp->state =3D ATPD_STATE_LAST_CTIO;
+ if (fctape) {
+ cto->ct_flags |=3D CT2_CONFIRM;
+ }
+ } else {
+ atp->sendst =3D 1; /* send status later */
+ cto->ct_header.rqs_seqno &=3D ~ATPD_SEQ_NOTIFY_CAM;
+ atp->state =3D ATPD_STATE_CTIO;
+ }
+ } else {
+ atp->state =3D ATPD_STATE_CTIO;
+ }
}
- atp->state =3D ATPD_STATE_LAST_CTIO;
- ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO7[%x] CDB0=3D%x scsi s=
tatus %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid,
- atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, cso->=
dxfer_len, atp->bytes_xfered);
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[%x] seq %u nc %d CDB0=3D%x scsi=
status %x flags %x resid %d xfrlen %u offset %u", __func__, cto->ct_rxid,
+ ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0, cso->scsi_statu=
s, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered);
} else {
- cto->ct_resid =3D 0;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, cso->ccb_h.path, "%s: CTIO7[%x] flags=
%x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags,
- cso->dxfer_len, atp->bytes_xfered);
- atp->state =3D ATPD_STATE_CTIO;
- }
- } else if (IS_FC(isp)) {
- ct2_entry_t *cto =3D (ct2_entry_t *) local;
-
- cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO2;
- cto->ct_header.rqs_entry_count =3D 1;
- cto->ct_header.rqs_seqno =3D 1;
- if (ISP_CAP_2KLOGIN(isp) =3D=3D 0) {
- ((ct2e_entry_t *)cto)->ct_iid =3D cso->init_id;
+ ct_entry_t *cto =3D (ct_entry_t *) local;
+
+ cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO;
+ cto->ct_header.rqs_entry_count =3D 1;
+ cto->ct_header.rqs_seqno |=3D ATPD_SEQ_NOTIFY_CAM;
+ ATPD_SET_SEQNO(cto, atp);
+ cto->ct_iid =3D cso->init_id;
+ cto->ct_iid |=3D XS_CHANNEL(ccb) << 7;
+ cto->ct_tgt =3D ccb->ccb_h.target_id;
+ cto->ct_lun =3D ccb->ccb_h.target_lun;
+ cto->ct_fwhandle =3D cso->tag_id;
+ if (atp->rxid) {
+ cto->ct_tag_val =3D atp->rxid;
+ cto->ct_flags |=3D CT_TQAE;
+ }
+ if (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) {
+ cto->ct_flags |=3D CT_NODISC;
+ }
+ if (cso->dxfer_len =3D=3D 0) {
+ cto->ct_flags |=3D CT_NO_DATA;
+ } else if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
+ cto->ct_flags |=3D CT_DATA_IN;
+ } else {
+ cto->ct_flags |=3D CT_DATA_OUT;
+ }
+ if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
+ cto->ct_flags |=3D CT_SENDSTATUS|CT_CCINCR;
+ cto->ct_scsi_status =3D cso->scsi_status;
+ cto->ct_resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_i=
n_transit - xfrlen;
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] seq %u nc %d scsi status %x=
resid %d tag_id %x", __func__,
+ cto->ct_fwhandle, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), cso->sc=
si_status, cso->resid, cso->tag_id);
+ }
+ ccb->ccb_h.flags &=3D ~CAM_SEND_SENSE;
+ cto->ct_timeout =3D 10;
+ }
+
+ if (isp_get_pcmd(isp, ccb)) {
+ ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "out of PCMDs\n");
+ TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ break;
+ }
+ if (isp_allocate_xs_tgt(isp, ccb, &handle)) {
+ ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "No XFLIST pointers for=
%s\n", __func__);
+ TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ isp_free_pcmd(isp, ccb);
+ break;
+ }
+ atp->bytes_in_transit +=3D xfrlen;
+ PISP_PCMD(ccb)->datalen =3D xfrlen;
+
+
+ /*
+ * Call the dma setup routines for this entry (and any subsequent
+ * CTIOs) if there's data to move, and then tell the f/w it's got
+ * new things to play with. As with isp_start's usage of DMA setup,
+ * any swizzling is done in the machine dependent layer. Because
+ * of this, we put the request onto the queue area first in native
+ * format.
+ */
+
+ if (IS_24XX(isp)) {
+ ct7_entry_t *cto =3D (ct7_entry_t *) local;
+ cto->ct_syshandle =3D handle;
+ } else if (IS_FC(isp)) {
+ ct2_entry_t *cto =3D (ct2_entry_t *) local;
+ cto->ct_syshandle =3D handle;
} else {
- cto->ct_iid =3D cso->init_id;
- if (ISP_CAP_SCCFW(isp) =3D=3D 0) {
- cto->ct_lun =3D ccb->ccb_h.target_lun;
+ ct_entry_t *cto =3D (ct_entry_t *) local;
+ cto->ct_syshandle =3D handle;
+ }
+
+ dmaresult =3D ISP_DMASETUP(isp, cso, (ispreq_t *) local);
+ if (dmaresult !=3D CMD_QUEUED) {
+ isp_destroy_tgt_handle(isp, handle);
+ isp_free_pcmd(isp, ccb);
+ if (dmaresult =3D=3D CMD_EAGAIN) {
+ TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+ break;
}
- }
-
-
- cto->ct_rxid =3D cso->tag_id;
- if (cso->dxfer_len =3D=3D 0) {
- cto->ct_flags |=3D CT2_FLAG_MODE1 | CT2_NO_DATA | CT2_SENDSTATUS;
- cto->rsp.m1.ct_scsi_status =3D cso->scsi_status;
- cto->ct_resid =3D atp->orig_datalen - atp->bytes_xfered;
- if (cto->ct_resid < 0) {
- cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_OVER;
- } else if (cto->ct_resid > 0) {
- cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_UNDER;
- }
- if ((ccb->ccb_h.flags & CAM_SEND_SENSE) !=3D 0) {
- int m =3D min(cso->sense_len, MAXRESPLEN);
- memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, m);
- cto->rsp.m1.ct_senselen =3D m;
- cto->rsp.m1.ct_scsi_status |=3D CT2_SNSLEN_VALID;
- } else if (cso->scsi_status =3D=3D SCSI_STATUS_CHECK_COND) {
- /*
- * XXX: DEBUG
- */
- xpt_print(ccb->ccb_h.path, "CHECK CONDITION being sent without associa=
ted SENSE DATA for CDB=3D0x%x\n", atp->cdb0);
- }
+ ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
+ xpt_done(ccb);
+ continue;
+ }
+ isp->isp_nactive++;
+ ccb->ccb_h.status =3D CAM_REQ_INPROG | CAM_SIM_QUEUED;
+ if (xfrlen) {
+ ccb->ccb_h.spriv_field0 =3D atp->bytes_xfered;
} else {
- cto->ct_flags |=3D CT2_FLAG_MODE0;
- if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
- cto->ct_flags |=3D CT2_DATA_IN;
- } else {
- cto->ct_flags |=3D CT2_DATA_OUT;
- }
- cto->ct_reloff =3D atp->bytes_xfered;
- cto->rsp.m0.ct_xfrlen =3D cso->dxfer_len;
- /*
- * Don't overrun the limits placed on us
- */
- if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) {
- cso->dxfer_len =3D atp->orig_datalen - atp->bytes_xfered;
- }
- if ((ccb->ccb_h.flags & CAM_SEND_STATUS) !=3D 0) {
- cto->ct_flags |=3D CT2_SENDSTATUS;
- cto->rsp.m0.ct_scsi_status =3D cso->scsi_status;
- cto->ct_resid =3D atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_=
len);
- if (cto->ct_resid < 0) {
- cto->rsp.m0.ct_scsi_status |=3D CT2_DATA_OVER;
- } else if (cto->ct_resid > 0) {
- cto->rsp.m0.ct_scsi_status |=3D CT2_DATA_UNDER;
- }
- } else {
- atp->last_xframt =3D cso->dxfer_len;
- }
- /*
- * If we're sending data and status back together,
- * we can't also send back sense data as well.
- */
- ccb->ccb_h.flags &=3D ~CAM_SEND_SENSE;
- }
-
- if (cto->ct_flags & CT2_SENDSTATUS) {
- int lvl =3D (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0;
- cto->ct_flags |=3D CT2_CCINCR;
- atp->state =3D ATPD_STATE_LAST_CTIO;
- ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO2[%x] CDB0=3D%x scsi s=
tatus %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid,
- atp->cdb0, cto->rsp.m0.ct_scsi_status, cto->ct_flags, cto->ct_resid=
, cso->dxfer_len, atp->bytes_xfered);
- } else {
- cto->ct_resid =3D 0;
- atp->state =3D ATPD_STATE_CTIO;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO2[%x] flags=
%x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags,
- cso->dxfer_len, atp->bytes_xfered);
- }
- cto->ct_timeout =3D 10;
- } else {
- ct_entry_t *cto =3D (ct_entry_t *) local;
-
- cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO;
- cto->ct_header.rqs_entry_count =3D 1;
- cto->ct_header.rqs_seqno =3D 1;
- cto->ct_iid =3D cso->init_id;
- cto->ct_iid |=3D XS_CHANNEL(ccb) << 7;
- cto->ct_tgt =3D ccb->ccb_h.target_id;
- cto->ct_lun =3D ccb->ccb_h.target_lun;
- cto->ct_fwhandle =3D cso->tag_id >> 16;
- if (AT_HAS_TAG(cso->tag_id)) {
- cto->ct_tag_val =3D cso->tag_id;
- cto->ct_flags |=3D CT_TQAE;
- }
- if (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) {
- cto->ct_flags |=3D CT_NODISC;
- }
- if (cso->dxfer_len =3D=3D 0) {
- cto->ct_flags |=3D CT_NO_DATA;
- } else if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
- cto->ct_flags |=3D CT_DATA_IN;
- } else {
- cto->ct_flags |=3D CT_DATA_OUT;
- }
- if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
- cto->ct_flags |=3D CT_SENDSTATUS|CT_CCINCR;
- cto->ct_scsi_status =3D cso->scsi_status;
- cto->ct_resid =3D cso->resid;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO[%x] scsi s=
tatus %x resid %d tag_id %x\n", __func__,
- cto->ct_fwhandle, cso->scsi_status, cso->resid, cso->tag_id);
- }
- ccb->ccb_h.flags &=3D ~CAM_SEND_SENSE;
- cto->ct_timeout =3D 10;
- }
-
- if (isp_allocate_xs_tgt(isp, ccb, &handle)) {
- xpt_print(ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__);
- ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
- goto out;
- }
-
-
- /*
- * Call the dma setup routines for this entry (and any subsequent
- * CTIOs) if there's data to move, and then tell the f/w it's got
- * new things to play with. As with isp_start's usage of DMA setup,
- * any swizzling is done in the machine dependent layer. Because
- * of this, we put the request onto the queue area first in native
- * format.
- */
-
- if (IS_24XX(isp)) {
- ct7_entry_t *cto =3D (ct7_entry_t *) local;
- cto->ct_syshandle =3D handle;
- } else if (IS_FC(isp)) {
- ct2_entry_t *cto =3D (ct2_entry_t *) local;
- cto->ct_syshandle =3D handle;
- } else {
- ct_entry_t *cto =3D (ct_entry_t *) local;
- cto->ct_syshandle =3D handle;
- }
-
- dmaresult =3D ISP_DMASETUP(isp, cso, (ispreq_t *) local);
- if (dmaresult =3D=3D CMD_QUEUED) {
- isp->isp_nactive++;
- ccb->ccb_h.status |=3D CAM_SIM_QUEUED;
- rls_lun_statep(isp, tptr);
- return;
- }
- if (dmaresult =3D=3D CMD_EAGAIN) {
- ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
- } else {
- ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
- }
- isp_destroy_tgt_handle(isp, handle);
-out:
+ ccb->ccb_h.spriv_field0 =3D ~0;
+ }
+ atp->ctcnt++;
+ atp->seqno++;
+ }
rls_lun_statep(isp, tptr);
- isp_free_pcmd(isp, ccb);
- xpt_done(ccb);
}
=20
static void
@@ -1837,6 +2099,21 @@
}
=20
static void
+isp_refire_notify_ack(void *arg)
+{
+ isp_tna_t *tp =3D arg;
+ ispsoftc_t *isp =3D tp->isp;
+ ISP_LOCK(isp);
+ if (isp_notify_ack(isp, tp->not)) {
+ (void) timeout(isp_refire_notify_ack, tp, 5);
+ } else {
+ free(tp, M_DEVBUF);
+ }
+ ISP_UNLOCK(isp);
+}
+
+
+static void
isp_target_putback_atio(union ccb *ccb)
{
ispsoftc_t *isp;
@@ -1889,12 +2166,10 @@
static void
isp_complete_ctio(union ccb *ccb)
{
- if ((ccb->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM_REQ_INPROG) {
- ccb->ccb_h.status |=3D CAM_REQ_CMP;
- }
- ccb->ccb_h.status &=3D ~CAM_SIM_QUEUED;
- isp_free_pcmd(XS_ISP(ccb), ccb);
- xpt_done(ccb);
+ if ((ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_INPROG) {
+ ccb->ccb_h.status &=3D ~CAM_SIM_QUEUED;
+ xpt_done(ccb);
+ }
}
=20
/*
@@ -1975,14 +2250,12 @@
rls_lun_statep(isp, tptr);
return;
}
- atp->tag =3D aep->at_tag_val;
- if (atp->tag =3D=3D 0) {
- atp->tag =3D ~0;
- }
+ atp->tag =3D aep->at_handle;
+ atp->rxid =3D aep->at_tag_val;
atp->state =3D ATPD_STATE_ATIO;
SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
tptr->atio_count--;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
atiop->ccb_h.target_id =3D aep->at_tgt;
atiop->ccb_h.target_lun =3D aep->at_lun;
if (aep->at_flags & AT_NODISC) {
@@ -2014,7 +2287,6 @@
}
atp->orig_datalen =3D 0;
atp->bytes_xfered =3D 0;
- atp->last_xframt =3D 0;
atp->lun =3D aep->at_lun;
atp->nphdl =3D aep->at_iid;
atp->portid =3D PORT_NONE;
@@ -2022,7 +2294,7 @@
atp->cdb0 =3D atiop->cdb_io.cdb_bytes[0];
atp->tattr =3D aep->at_tag_type;
atp->state =3D ATPD_STATE_CAM;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO[%x] CDB=3D0x%x lun %=
d\n", aep->at_tag_val, atp->cdb0, atp->lun);
+ isp_prt(isp, ISP_LOGTDEBUG0, "ATIO[0x%x] CDB=3D0x%x lun %d", aep->at_tag_=
val, atp->cdb0, atp->lun);
rls_lun_statep(isp, tptr);
}
=20
@@ -2063,8 +2335,12 @@
if (tptr =3D=3D NULL) {
tptr =3D get_lun_statep(isp, 0, CAM_LUN_WILDCARD);
if (tptr =3D=3D NULL) {
- isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d", aep-=
>at_rxid, lun);
- isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12)=
| (0x25 << 16), 0);
+ isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wi=
ldcard", __func__, aep->at_rxid, lun);
+ if (lun =3D=3D 0) {
+ isp_endcmd(isp, aep, SCSI_STATUS_BUSY, 0);
+ } else {
+ isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12=
) | (0x25 << 16), 0);
+ }
return;
}
}
@@ -2112,7 +2388,7 @@
atp->state =3D ATPD_STATE_ATIO;
SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
tptr->atio_count--;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
+ isp_prt(isp, ISP_LOGTDEBUG2, "Take FREE ATIO count now %d", tptr->atio_co=
unt);
atiop->ccb_h.target_id =3D FCPARAM(isp, 0)->isp_loopid;
atiop->ccb_h.target_lun =3D lun;
=20
@@ -2146,7 +2422,7 @@
if (isp_find_pdb_by_wwn(isp, 0, iid, &lp)) {
isp_del_wwn_entry(isp, 0, iid, lp->handle, lp->portid);
}
- isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY);
+ isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY, 0);
}
atiop->cdb_len =3D ATIO2_CDBLEN;
ISP_MEMCPY(atiop->cdb_io.cdb_bytes, aep->at_cdb, ATIO2_CDBLEN);
@@ -2174,7 +2450,6 @@
=20
atp->orig_datalen =3D aep->at_datalen;
atp->bytes_xfered =3D 0;
- atp->last_xframt =3D 0;
atp->lun =3D lun;
atp->nphdl =3D atiop->init_id;
atp->sid =3D PORT_ANY;
@@ -2183,7 +2458,7 @@
atp->tattr =3D aep->at_taskflags & ATIO2_TC_ATTR_MASK;
atp->state =3D ATPD_STATE_CAM;
xpt_done((union ccb *)atiop);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO2[%x] CDB=3D0x%x lun =
%d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
+ isp_prt(isp, ISP_LOGTDEBUG0, "ATIO2[0x%x] CDB=3D0x%x lun %d datalen %u", =
aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
rls_lun_statep(isp, tptr);
return;
noresrc:
@@ -2281,8 +2556,12 @@
if (tptr =3D=3D NULL) {
tptr =3D get_lun_statep(isp, chan, CAM_LUN_WILDCARD);
if (tptr =3D=3D NULL) {
- isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d or wil=
dcard", aep->at_rxid, lun);
- isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID =
| (0x5 << 12) | (0x25 << 16), 0);
+ isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wi=
ldcard", __func__, aep->at_rxid, lun);
+ if (lun =3D=3D 0) {
+ isp_endcmd(isp, aep, nphdl, SCSI_STATUS_BUSY, 0);
+ } else {
+ isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID=
| (0x5 << 12) | (0x25 << 16), 0);
+ }
return;
}
}
@@ -2344,18 +2623,19 @@
}
oatp =3D isp_get_atpd(isp, tptr, aep->at_rxid);
if (oatp) {
- isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platfo=
rms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d\n",
+ isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platfo=
rms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d",
aep->at_rxid, nphdl, sid, aep->at_hdr.ox_id, oatp->state);
/*
* It's not a "no resource" condition- but we can treat it like one
*/
goto noresrc;
}
+ atp->word3 =3D lp->prli_word3;
atp->tag =3D aep->at_rxid;
atp->state =3D ATPD_STATE_ATIO;
SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
tptr->atio_count--;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
atiop->init_id =3D nphdl;
atiop->ccb_h.target_id =3D FCPARAM(isp, chan)->isp_loopid;
atiop->ccb_h.target_lun =3D lun;
@@ -2391,7 +2671,6 @@
}
atp->orig_datalen =3D aep->at_cmnd.cdb_dl.sf.fcp_cmnd_dl;
atp->bytes_xfered =3D 0;
- atp->last_xframt =3D 0;
atp->lun =3D lun;
atp->nphdl =3D nphdl;
atp->portid =3D sid;
@@ -2400,7 +2679,7 @@
atp->cdb0 =3D atiop->cdb_io.cdb_bytes[0];
atp->tattr =3D aep->at_cmnd.fcp_cmnd_task_attribute & FCP_CMND_TASK_ATTR_=
MASK;
atp->state =3D ATPD_STATE_CAM;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO7[%x] CDB=3D0x%x lun =
%d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
+ isp_prt(isp, ISP_LOGTDEBUG0, "ATIO7[0x%x] CDB=3D0x%x lun %d datalen %u", =
aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
xpt_done((union ccb *)atiop);
rls_lun_statep(isp, tptr);
return;
@@ -2420,15 +2699,156 @@
rls_lun_statep(isp, tptr);
}
=20
+
+/*
+ * Handle starting an SRR (sequence retransmit request)
+ * We get here when we've gotten the immediate notify
+ * and the return of all outstanding CTIOs for this
+ * transaction.
+ */
+static void
+isp_handle_srr_start(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t =
*atp)
+{
+ in_fcentry_24xx_t *inot;
+ uint32_t srr_off, ccb_off, ccb_len, ccb_end;
+ union ccb *ccb;
+
+ inot =3D (in_fcentry_24xx_t *)atp->srr;
+ srr_off =3D inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16);
+ ccb =3D atp->srr_ccb;
+ atp->srr_ccb =3D NULL;
+ atp->nsrr++;
+ if (ccb =3D=3D NULL) {
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] null ccb", atp->tag);
+ goto fail;
+ }
+
+ ccb_off =3D ccb->ccb_h.spriv_field0;
+ ccb_len =3D ccb->csio.dxfer_len;
+ ccb_end =3D (ccb_off =3D=3D ~0)? ~0 : ccb_off + ccb_len;
+
+ switch (inot->in_srr_iu) {
+ case R_CTL_INFO_SOLICITED_DATA:
+ /*
+ * We have to restart a FCP_DATA data out transaction
+ */
+ atp->sendst =3D 0;
+ atp->bytes_xfered =3D srr_off;
+ if (ccb_len =3D=3D 0) {
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] SRR offset 0x%x but current CCB do=
esn't transfer data", atp->tag, srr_off);
+ goto mdp;
+ }
+ if (srr_off < ccb_off || ccb_off > srr_off + ccb_len) {
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] SRR offset 0x%x not covered by cur=
rent CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end);
+ goto mdp;
+ }
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] SRR offset 0x%x covered by current =
CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end);
+ break;
+ case R_CTL_INFO_COMMAND_STATUS:
+ isp_prt(isp, ISP_LOGTINFO, "SRR[0x%x] Got an FCP RSP SRR- resending stat=
us", atp->tag);
+ atp->sendst =3D 1;
+ /*
+ * We have to restart a FCP_RSP IU transaction
+ */
+ break;
+ case R_CTL_INFO_DATA_DESCRIPTOR:
+ /*
+ * We have to restart an FCP DATA in transaction
+ */
+ isp_prt(isp, ISP_LOGWARN, "Got an FCP DATA IN SRR- dropping");
+ goto fail;
+ =09
+ default:
+ isp_prt(isp, ISP_LOGWARN, "Got an unknown information (%x) SRR- dropping=
", inot->in_srr_iu);
+ goto fail;
+ }
+
+ /*
+ * We can't do anything until this is acked, so we might as well start it=
now.
+ * We aren't going to do the usual asynchronous ack issue because we need
+ * to make sure this gets on the wire first.
+ */
+ if (isp_notify_ack(isp, inot)) {
+ isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose=
");
+ goto fail;
+ }
+ isp_target_start_ctio(isp, ccb, FROM_SRR);
+ return;
+fail:
+ inot->in_reserved =3D 1;
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+ ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+ ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
+ isp_complete_ctio(ccb);
+ return;
+mdp:
+ if (isp_notify_ack(isp, inot)) {
+ isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose=
");
+ goto fail;
+ }
+ ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+ ccb->ccb_h.status =3D CAM_MESSAGE_RECV;
+ /*
+ * This is not a strict interpretation of MDP, but it's close
+ */
+ ccb->csio.msg_ptr =3D &ccb->csio.sense_data.sense_buf[SSD_FULL_SIZE - 16];
+ ccb->csio.msg_len =3D 7;
+ ccb->csio.msg_ptr[0] =3D MSG_EXTENDED;
+ ccb->csio.msg_ptr[1] =3D 5;
+ ccb->csio.msg_ptr[2] =3D 0; /* modify data pointer */
+ ccb->csio.msg_ptr[3] =3D srr_off >> 24;
+ ccb->csio.msg_ptr[4] =3D srr_off >> 16;
+ ccb->csio.msg_ptr[5] =3D srr_off >> 8;
+ ccb->csio.msg_ptr[6] =3D srr_off;
+ isp_complete_ctio(ccb);
+}
+
+
+static void
+isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw)
+{
+ tstate_t *tptr;
+ in_fcentry_24xx_t *inot =3D inot_raw;
+ atio_private_data_t *atp;
+ uint32_t tag =3D inot->in_rxid;
+ uint32_t bus =3D inot->in_vpidx;
+
+ if (!IS_24XX(isp)) {
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_raw);
+ return;
+ }
+
+ tptr =3D get_lun_statep_from_tag(isp, bus, tag);
+ if (tptr =3D=3D NULL) {
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x in SRR Notify"=
, __func__, tag);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+ return;
+ }
+ atp =3D isp_get_atpd(isp, tptr, tag);
+ if (atp =3D=3D NULL) {
+ rls_lun_statep(isp, tptr);
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x in SRR Notify",=
__func__, tag);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+ return;
+ }
+ atp->srr_notify_rcvd =3D 1;
+ memcpy(atp->srr, inot, sizeof (atp->srr));
+ isp_prt(isp, ISP_LOGTINFO /* ISP_LOGTDEBUG0 */, "SRR[0x%x] inot->in_rxid =
flags 0x%x srr_iu=3D%x reloff 0x%x", inot->in_rxid, inot->in_flags, inot->i=
n_srr_iu,
+ inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16));
+ if (atp->srr_ccb)
+ isp_handle_srr_start(isp, tptr, atp);
+ rls_lun_statep(isp, tptr);
+}
+
static void
isp_handle_platform_ctio(ispsoftc_t *isp, void *arg)
{
union ccb *ccb;
- int sentstatus, ok, notify_cam, resid =3D 0;
+ int sentstatus =3D 0, ok =3D 0, notify_cam =3D 0, resid =3D 0, failure =
=3D 0;
tstate_t *tptr =3D NULL;
atio_private_data_t *atp =3D NULL;
int bus;
- uint32_t tval, handle;
+ uint32_t handle, moved_data =3D 0, data_requested;
=20
/*
* CTIO handles are 16 bits.
@@ -2446,147 +2866,157 @@
return;
}
isp_destroy_tgt_handle(isp, handle);
+ data_requested =3D PISP_PCMD(ccb)->datalen;
+ isp_free_pcmd(isp, ccb);
+ if (isp->isp_nactive) {
+ isp->isp_nactive--;
+ }
+
bus =3D XS_CHANNEL(ccb);
tptr =3D get_lun_statep(isp, bus, XS_LUN(ccb));
if (tptr =3D=3D NULL) {
tptr =3D get_lun_statep(isp, bus, CAM_LUN_WILDCARD);
}
- KASSERT((tptr !=3D NULL), ("cannot get state pointer"));
- if (isp->isp_nactive) {
- isp->isp_nactive++;
- }
+ if (tptr =3D=3D NULL) {
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x after I/O", __=
func__, ccb->csio.tag_id);
+ return;
+ }
+
+ if (IS_24XX(isp)) {
+ atp =3D isp_get_atpd(isp, tptr, ((ct7_entry_t *)arg)->ct_rxid);
+ } else if (IS_FC(isp)) {
+ atp =3D isp_get_atpd(isp, tptr, ((ct2_entry_t *)arg)->ct_rxid);
+ } else {
+ atp =3D isp_get_atpd(isp, tptr, ((ct_entry_t *)arg)->ct_fwhandle);
+ }
+ if (atp =3D=3D NULL) {
+ rls_lun_statep(isp, tptr);
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __f=
unc__, ccb->csio.tag_id);
+ return;
+ }
+ KASSERT((atp->ctcnt > 0), ("ctio count not greater than zero"));
+ atp->bytes_in_transit -=3D data_requested;
+ atp->ctcnt -=3D 1;
+ ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+
if (IS_24XX(isp)) {
ct7_entry_t *ct =3D arg;
=20
- atp =3D isp_get_atpd(isp, tptr, ct->ct_rxid);
- if (atp =3D=3D NULL) {
+ if (ct->ct_nphdl =3D=3D CT7_SRR) {
+ atp->srr_ccb =3D ccb;
+ if (atp->srr_notify_rcvd)
+ isp_handle_srr_start(isp, tptr, atp);
rls_lun_statep(isp, tptr);
- isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __=
func__, ct->ct_rxid);
return;
}
-
- sentstatus =3D ct->ct_flags & CT7_SENDSTATUS;
- ok =3D (ct->ct_nphdl =3D=3D CT7_OK);
- if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
- ccb->ccb_h.status |=3D CAM_SENT_SENSE;
- }
- notify_cam =3D ct->ct_header.rqs_seqno & 0x1;
- if ((ct->ct_flags & CT7_DATAMASK) !=3D CT7_NO_DATA) {
- resid =3D ct->ct_resid;
- atp->bytes_xfered +=3D (atp->last_xframt - resid);
- atp->last_xframt =3D 0;
- }
if (ct->ct_nphdl =3D=3D CT_HBA_RESET) {
- ok =3D 0;
- notify_cam =3D 1;
- sentstatus =3D 1;
- ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
- } else if (!ok) {
- ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
- }
- tval =3D atp->tag;
- isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO7[%x] sts 0x%x f=
lg 0x%x sns %d resid %d %s", __func__,
- ct->ct_rxid, ct->ct_nphdl, ct->ct_flags, (ccb->ccb_h.status & CAM_SE=
NT_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
- atp->state =3D ATPD_STATE_PDON; /* XXX: should really come after isp_com=
plete_ctio */
+ failure =3D CAM_UNREC_HBA_ERROR;
+ } else {
+ sentstatus =3D ct->ct_flags & CT7_SENDSTATUS;
+ ok =3D (ct->ct_nphdl =3D=3D CT7_OK);
+ notify_cam =3D (ct->ct_header.rqs_seqno & ATPD_SEQ_NOTIFY_CAM) !=3D 0;
+ if ((ct->ct_flags & CT7_DATAMASK) !=3D CT7_NO_DATA) {
+ resid =3D ct->ct_resid;
+ moved_data =3D data_requested - resid;
+ }
+ }
+ isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO7[%x] seq %u nc =
%d sts 0x%x flg 0x%x sns %d resid %d %s", __func__, ct->ct_rxid, ATPD_GET_S=
EQNO(ct),
+ notify_cam, ct->ct_nphdl, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT=
_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
} else if (IS_FC(isp)) {
ct2_entry_t *ct =3D arg;
-
- atp =3D isp_get_atpd(isp, tptr, ct->ct_rxid);
- if (atp =3D=3D NULL) {
+ if (ct->ct_status =3D=3D CT_SRR) {
+ atp->srr_ccb =3D ccb;
+ if (atp->srr_notify_rcvd)
+ isp_handle_srr_start(isp, tptr, atp);
rls_lun_statep(isp, tptr);
- isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __=
func__, ct->ct_rxid);
+ isp_target_putback_atio(ccb);
return;
}
- sentstatus =3D ct->ct_flags & CT2_SENDSTATUS;
- ok =3D (ct->ct_status & ~QLTM_SVALID) =3D=3D CT_OK;
- if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
- ccb->ccb_h.status |=3D CAM_SENT_SENSE;
- }
- notify_cam =3D ct->ct_header.rqs_seqno & 0x1;
- if ((ct->ct_flags & CT2_DATAMASK) !=3D CT2_NO_DATA) {
- resid =3D ct->ct_resid;
- atp->bytes_xfered +=3D (atp->last_xframt - resid);
- atp->last_xframt =3D 0;
- }
if (ct->ct_status =3D=3D CT_HBA_RESET) {
- ok =3D 0;
- notify_cam =3D 1;
- sentstatus =3D 1;
- ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
- } else if (!ok) {
- ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
- }
- isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO2[%x] sts 0x%x f=
lg 0x%x sns %d resid %d %s", __func__,
- ct->ct_rxid, ct->ct_status, ct->ct_flags, (ccb->ccb_h.status & CAM_S=
ENT_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
- tval =3D atp->tag;
- atp->state =3D ATPD_STATE_PDON; /* XXX: should really come after isp_com=
plete_ctio */
+ failure =3D CAM_UNREC_HBA_ERROR;
+ } else {
+ sentstatus =3D ct->ct_flags & CT2_SENDSTATUS;
+ ok =3D (ct->ct_status & ~QLTM_SVALID) =3D=3D CT_OK;
+ notify_cam =3D (ct->ct_header.rqs_seqno & ATPD_SEQ_NOTIFY_CAM) !=3D 0;
+ if ((ct->ct_flags & CT2_DATAMASK) !=3D CT2_NO_DATA) {
+ resid =3D ct->ct_resid;
+ moved_data =3D data_requested - resid;
+ }
+ }
+ isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO2[%x] seq %u nc =
%d sts 0x%x flg 0x%x sns %d resid %d %s", __func__, ct->ct_rxid, ATPD_GET_S=
EQNO(ct),
+ notify_cam, ct->ct_status, ct->ct_flags, (ccb->ccb_h.status & CAM_SE=
NT_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
} else {
ct_entry_t *ct =3D arg;
- sentstatus =3D ct->ct_flags & CT_SENDSTATUS;
- ok =3D (ct->ct_status & ~QLTM_SVALID) =3D=3D CT_OK;
- /*
- * We *ought* to be able to get back to the original ATIO
- * here, but for some reason this gets lost. It's just as
- * well because it's squirrelled away as part of periph
- * private data.
- *
- * We can live without it as long as we continue to use
- * the auto-replenish feature for CTIOs.
- */
- notify_cam =3D ct->ct_header.rqs_seqno & 0x1;
+
if (ct->ct_status =3D=3D (CT_HBA_RESET & 0xff)) {
- ok =3D 0;
- notify_cam =3D 1;
- sentstatus =3D 1;
- ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
- } else if (!ok) {
- ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
- } else if (ct->ct_status & QLTM_SVALID) {
- char *sp =3D (char *)ct;
- sp +=3D CTIO_SENSE_OFFSET;
- ccb->csio.sense_len =3D min(sizeof (ccb->csio.sense_data), QLTM_SENSELE=
N);
- ISP_MEMCPY(&ccb->csio.sense_data, sp, ccb->csio.sense_len);
- ccb->ccb_h.status |=3D CAM_AUTOSNS_VALID;
+ failure =3D CAM_UNREC_HBA_ERROR;
+ } else {
+ sentstatus =3D ct->ct_flags & CT_SENDSTATUS;
+ ok =3D (ct->ct_status & ~QLTM_SVALID) =3D=3D CT_OK;
+ notify_cam =3D (ct->ct_header.rqs_seqno & ATPD_SEQ_NOTIFY_CAM) !=3D 0;
}
if ((ct->ct_flags & CT_DATAMASK) !=3D CT_NO_DATA) {
resid =3D ct->ct_resid;
- }
- isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] tag %x S_ID 0x%x lun %d sts %=
x flg %x resid %d %s", __func__,
- ct->ct_fwhandle, ct->ct_tag_val, ct->ct_iid, ct->ct_lun, ct->ct_stat=
us, ct->ct_flags, resid, sentstatus? "FIN" : "MID");
- tval =3D ct->ct_fwhandle;
- }
- ccb->csio.resid +=3D resid;
+ moved_data =3D data_requested - resid;
+ }
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] seq %u nc %d tag %x S_ID 0x%x=
lun %d sts %x flg %x resid %d %s", __func__, ct->ct_fwhandle, ATPD_GET_SEQ=
NO(ct),
+ notify_cam, ct->ct_tag_val, ct->ct_iid, ct->ct_lun, ct->ct_status, c=
t->ct_flags, resid, sentstatus? "FIN" : "MID");
+ }
+ if (ok) {
+ if (moved_data) {
+ atp->bytes_xfered +=3D moved_data;
+ ccb->csio.resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_=
in_transit;
+ }
+ if (sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
+ ccb->ccb_h.status |=3D CAM_SENT_SENSE;
+ }
+ ccb->ccb_h.status |=3D CAM_REQ_CMP;
+ } else {
+ notify_cam =3D 1;
+ if (failure =3D=3D CAM_UNREC_HBA_ERROR)
+ ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
+ else
+ ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
+ }
+ atp->state =3D ATPD_STATE_PDON;
+ rls_lun_statep(isp, tptr);
=20
/*
- * We're here either because intermediate data transfers are done
- * and/or the final status CTIO (which may have joined with a
- * Data Transfer) is done.
+ * We never *not* notify CAM when there has been any error (ok =3D=3D 0),
+ * so we never need to do an ATIO putback if we're not notifying CAM.
+ */
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done (ok=3D%d nc=3D%d nowsend=
status=3D%d ccb ss=3D%d)",
+ (sentstatus)? " FINAL " : "MIDTERM ", atp->tag, ok, notify_cam, atp-=
>sendst, (ccb->ccb_h.flags & CAM_SEND_STATUS) !=3D 0);
+ if (notify_cam =3D=3D 0) {
+ if (atp->sendst) {
+ isp_target_start_ctio(isp, ccb, FROM_CTIO_DONE);
+ }
+ return;
+ }
+
+ /*
+ * We're telling CAM we're done with this CTIO transaction.
*
- * In any case, for this platform, the upper layers figure out
- * what to do next, so all we do here is collect status and
- * pass information along. Any DMA handles have already been
- * freed.
+ * 24XX cards never need an ATIO put back.
+ *
+ * Other cards need one put back only on error.
+ * In the latter case, a timeout will re-fire
+ * and try again in case we didn't have
+ * queue resources to do so at first. In any case,
+ * once the putback is done we do the completion
+ * call.
*/
- if (notify_cam =3D=3D 0) {
- isp_prt(isp, ISP_LOGTDEBUG0, " INTER CTIO[0x%x] done", tval);
- return;
- }
- if (tptr) {
- rls_lun_statep(isp, tptr);
- }
- isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done", (sentstatus)? " FINAL=
" : "MIDTERM ", tval);
-
- if (!ok && !IS_24XX(isp)) {
+ if (ok || IS_24XX(isp)) {
+ isp_complete_ctio(ccb);
+ } else {
isp_target_putback_atio(ccb);
- } else {
- isp_complete_ctio(ccb);
}
}
=20
static void
isp_handle_platform_notify_scsi(ispsoftc_t *isp, in_entry_t *inot)
{
- (void) isp_notify_ack(isp, inot);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
}
=20
static void
@@ -2649,9 +3079,9 @@
if (inot) {
tptr->inot_count--;
SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INO=
T count now %d\n", __func__, tptr->inot_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INO=
T count now %d\n", __func__, tptr->inot_count);
} else {
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "out of INOT structures=
\n");
+ ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "out of INOT structures\n"=
);
}
} else {
ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "abort task RX_ID %x from w=
wn 0x%016llx, state unknown\n", inp->in_seqid, wwn);
@@ -2680,7 +3110,7 @@
break;
}
if (needack) {
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
}
}
=20
@@ -2688,6 +3118,7 @@
isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
{
uint16_t nphdl;
+ uint16_t prli_options =3D 0;
uint32_t portid;
fcportdb_t *lp;
uint8_t *ptr =3D NULL;
@@ -2737,10 +3168,12 @@
/*
* Treat PRLI the same as PLOGI and make a database entry for it.
*/
- if (inot->in_status_subcode =3D=3D PLOGI)
+ if (inot->in_status_subcode =3D=3D PLOGI) {
msg =3D "PLOGI";
- else
+ } else {
+ prli_options =3D inot->in_prli_options;
msg =3D "PRLI";
+ }
if (ISP_FW_NEWER_THAN(isp, 4, 0, 25)) {
ptr =3D (uint8_t *)inot; /* point to unswizzled entry! */
wwn =3D (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF]) << 56) |
@@ -2754,7 +3187,7 @@
} else {
wwn =3D INI_NONE;
}
- isp_add_wwn_entry(isp, chan, wwn, nphdl, portid);
+ isp_add_wwn_entry(isp, chan, wwn, nphdl, portid, prli_options);
break;
case PDISC:
msg =3D "PDISC";
@@ -2773,7 +3206,7 @@
}
isp_prt(isp, ISP_LOGTDEBUG0, "%s Chan %d ELS N-port handle %x PortID 0x%=
06x RX_ID 0x%x OX_ID 0x%x", msg, chan, nphdl, portid,
inot->in_rxid, inot->in_oxid);
- (void) isp_notify_ack(isp, inot);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
break;
}
=20
@@ -2800,14 +3233,30 @@
* this initiator (known by N-port handle).
*/
/* XXX IMPLEMENT XXX */
- (void) isp_notify_ack(isp, inot);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
break;
=20
+ case IN24XX_SRR_RCVD:
+#ifdef ISP_TARGET_MODE
+ isp_handle_srr_notify(isp, inot);
+ break;
+#else
+ if (ptr =3D=3D NULL) {
+ ptr =3D "SRR RCVD";
+ }
+ /* FALLTHROUGH */
+#endif
case IN24XX_LINK_RESET:
+ if (ptr =3D=3D NULL) {
+ ptr =3D "LINK RESET";
+ }
case IN24XX_LINK_FAILED:
- case IN24XX_SRR_RCVD:
+ if (ptr =3D=3D NULL) {
+ ptr =3D "LINK FAILED";
+ }
default:
- (void) isp_notify_ack(isp, inot);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d %s", ISP_GET_VPIDX(isp, inot->in_vpid=
x), ptr);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
break;
}
}
@@ -2905,6 +3354,9 @@
*/
if (mp->nt_need_ack) {
isp_prt(isp, ISP_LOGTINFO, "Notify Code 0x%x (qevalid=3D%d) being acked"=
, mp->nt_ncode, mp->nt_lreserved !=3D NULL);
+ /*
+ * Don't need to use the guaranteed send because the caller can retry
+ */
return (isp_notify_ack(isp, mp->nt_lreserved));
}
return (0);
@@ -3003,7 +3455,7 @@
tptr->inot_count--;
SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle);
rls_lun_statep(isp, tptr);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INOT c=
ount now %d\n", __func__, tptr->inot_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT c=
ount now %d\n", __func__, tptr->inot_count);
inot->ccb_h.status =3D CAM_MESSAGE_RECV;
xpt_done((union ccb *)inot);
return;
@@ -3013,9 +3465,11 @@
}
if (notify->nt_need_ack && notify->nt_lreserved) {
if (((isphdr_t *)notify->nt_lreserved)->rqs_entry_type =3D=3D RQSTYPE_AB=
TS_RCVD) {
- (void) isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM);
+ if (isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM)) {
+ isp_prt(isp, ISP_LOGWARN, "you lose- unable to send an ACKNAK");
+ }
} else {
- (void) isp_notify_ack(isp, notify->nt_lreserved);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, notify->nt_lreserved);
}
}
}
@@ -3091,25 +3545,47 @@
=20
=20
#ifdef ISP_INTERNAL_TARGET
-// #define ISP_FORCE_TIMEOUT 1
-// #define ISP_TEST_WWNS 1
-// #define ISP_TEST_SEPARATE_STATUS 1
-
-#define ccb_data_offset ppriv_field0
+//#define ISP_SEPARATE_STATUS 1
+#define ISP_MULTI_CCBS 1
+#if defined(ISP_MULTI_CCBS) && !defined(ISP_SEPARATE_STATUS)
+#define ISP_SEPARATE_STATUS 1
+#endif
+
+typedef struct periph_private_data_t {
+ union ccb *ccb; /* original ATIO or Immediate Notify */
+ unsigned long offset; /* current offset */
+ int sequence; /* current CTIO sequence */
+ int ctio_cnt; /* current # of ctio's outstanding */
+ int
+ status_sent : 1,
+ on_queue : 1; /* on restart queue */
+} ppd_t;
+/*
+ * Each ATIO we allocate will have periph private data associated with it
+ * that maintains per-command state. This private to each ATIO.
+ */
+#define ATIO_PPD(ccb) ((ppd_t *)(((struct ccb_hdr *)ccb)->ppriv_ptr0))
+/*
+ * Each CTIO we send downstream will get a pointer to the ATIO itself
+ * so that on completion we can retrieve that pointer.
+ */
#define ccb_atio ppriv_ptr1
#define ccb_inot ppriv_ptr1
=20
+/*
+ * Each CTIO we send downstream will contain a sequence number
+ */
+#define CTIO_SEQ(ccb) ccb->ccb_h.ppriv_field0
+
#define MAX_ISP_TARG_TRANSFER (2 << 20)
-#define NISP_TARG_CMDS 1024
-#define NISP_TARG_NOTIFIES 1024
+#define NISP_TARG_CMDS 64
+#define NISP_TARG_NOTIFIES 64
#define DISK_SHIFT 9
#define JUNK_SIZE 256
-
-#ifndef VERIFY_10
-#define VERIFY_10 0x2f
-#endif
-
-TAILQ_HEAD(ccb_queue, ccb_hdr);
+#define MULTI_CCB_DATA_LIM 8192
+//#define MULTI_CCB_DATA_CNT 64
+#define MULTI_CCB_DATA_CNT 8
+
extern u_int vm_kmem_size;
static int ca;
static uint32_t disk_size;
@@ -3118,10 +3594,10 @@
static MALLOC_DEFINE(M_ISPTARG, "ISPTARG", "ISP TARGET data");
struct isptarg_softc {
/* CCBs (CTIOs, ATIOs, INOTs) pending on the controller */
- struct ccb_queue work_queue;
- struct ccb_queue rework_queue;
- struct ccb_queue running_queue;
- struct ccb_queue inot_queue;
+ struct isp_ccbq work_queue;
+ struct isp_ccbq rework_queue;
+ struct isp_ccbq running_queue;
+ struct isp_ccbq inot_queue;
struct cam_periph *periph;
struct cam_path *path;
ispsoftc_t *isp;
@@ -3138,7 +3614,7 @@
=20
static struct periph_driver isptargdriver =3D
{
- isptarginit, "isptarg", TAILQ_HEAD_INITIALIZER(isptargdriver.units), /* g=
eneration */ 0
+ isptarginit, "isptarg", TAILQ_HEAD_INITIALIZER(isptargdriver.units), 0
};
=20
static void
@@ -3182,7 +3658,8 @@
'O', 'R', 'Y', ' ', 'D', 'I', 'S', 'K',
'0', '0', '0', '1'
};
- int i, more =3D 0, last;
+ int r, i, more =3D 0, last, is_data_cmd =3D 0, is_write;
+ char *queue;
struct isptarg_softc *softc =3D periph->softc;
struct ccb_scsiio *csio;
lun_id_t return_lun;
@@ -3193,7 +3670,7 @@
struct ccb_hdr *ccbh;
=20
mtx_assert(periph->sim->mtx, MA_OWNED);
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: function =
code 0x%x INOTQ=3D%c WORKQ=3D%c REWORKQ=3D%c\n", __func__, iccb->ccb_h.func=
_code,
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, iccb->ccb_h.path, "%s: function =
code 0x%x INOTQ=3D%c WORKQ=3D%c REWORKQ=3D%c\n", __func__, iccb->ccb_h.func=
_code,
TAILQ_FIRST(&softc->inot_queue)? 'y' : 'n', TAILQ_FIRST(&softc->work_=
queue)? 'y' : 'n', TAILQ_FIRST(&softc->rework_queue)? 'y' : 'n');
/*
* Check for immediate notifies first
@@ -3216,41 +3693,42 @@
atio =3D (struct ccb_accept_tio *)ccbh;
TAILQ_REMOVE(&softc->rework_queue, ccbh, periph_links.tqe);
more =3D TAILQ_FIRST(&softc->work_queue) || TAILQ_FIRST(&softc->rework_q=
ueue);
+ queue =3D "rework";
} else {
ccbh =3D TAILQ_FIRST(&softc->work_queue);
if (ccbh =3D=3D NULL) {
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: woken u=
p but no work?\n", __func__);
xpt_release_ccb(iccb);
return;
}
atio =3D (struct ccb_accept_tio *)ccbh;
TAILQ_REMOVE(&softc->work_queue, ccbh, periph_links.tqe);
more =3D TAILQ_FIRST(&softc->work_queue) !=3D NULL;
- atio->ccb_h.ccb_data_offset =3D 0;
- }
+ queue =3D "work";
+ }
+ ATIO_PPD(atio)->on_queue =3D 0;
=20
if (atio->tag_id =3D=3D 0xffffffff || atio->ccb_h.func_code !=3D XPT_ACCE=
PT_TARGET_IO) {
panic("BAD ATIO");
}
=20
+ data_len =3D is_write =3D 0;
data_ptr =3D NULL;
- data_len =3D 0;
csio =3D &iccb->csio;
status =3D SCSI_STATUS_OK;
flags =3D CAM_SEND_STATUS;
memset(&atio->sense_data, 0, sizeof (atio->sense_data));
cdb =3D atio->cdb_io.cdb_bytes;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, ccbh->path, "%s: [0x%x] processi=
ng ATIO from 0x%x CDB=3D0x%x data_offset=3D%u\n", __func__, atio->tag_id, a=
tio->init_id,
- cdb[0], atio->ccb_h.ccb_data_offset);
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, ccbh->path, "%s: [0x%x] processi=
ng ATIO from %s queue initiator 0x%x CDB=3D0x%x data_offset=3D%u\n", __func=
__, atio->tag_id,
+ queue, atio->init_id, cdb[0], ATIO_PPD(atio)->offset);
=20
return_lun =3D XS_LUN(atio);
if (return_lun !=3D 0) {
xpt_print(atio->ccb_h.path, "[0x%x] Non-Zero Lun %d: cdb0=3D0x%x\n", ati=
o->tag_id, return_lun, cdb[0]);
if (cdb[0] !=3D INQUIRY && cdb[0] !=3D REPORT_LUNS && cdb[0] !=3D REQUES=
T_SENSE) {
status =3D SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_ILLEGAL_REQUEST;
- SDFIXED(atio->sense_data)->add_sense_code =3D 0x25;
- SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x0;
+ SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+ SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+ SDFIXED(atio->sense_data)->add_sense_code =3D 0x25; /* LOGICAL UNIT NOT=
SUPPORTED */
atio->sense_len =3D SSD_MIN_SIZE;
}
return_lun =3D CAM_LUN_WILDCARD;
@@ -3269,30 +3747,30 @@
data_ptr =3D junk_data;
}
break;
+ case WRITE_6:
+ case WRITE_10:
+ case WRITE_12:
+ case WRITE_16:
+ is_write =3D 1;
+ /* FALLTHROUGH */
case READ_6:
case READ_10:
case READ_12:
case READ_16:
- if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offse=
t, &data_ptr, &data_len, &last)) {
+ is_data_cmd =3D 1;
+ r =3D isptarg_rwparm(cdb, disk_data, disk_size, ATIO_PPD(atio)->offset, =
&data_ptr, &data_len, &last);
+ if (r !=3D 0) {
status =3D SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x24;
+ SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+ SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+ if (r =3D=3D -1) {
+ SDFIXED(atio->sense_data)->add_sense_code =3D 0x21; /* LOGICAL BLOCK A=
DDRESS OUT OF RANGE */
+ } else {
+ SDFIXED(atio->sense_data)->add_sense_code =3D 0x20; /* INVALID COMMAND=
OPERATION CODE */
+ }
atio->sense_len =3D SSD_MIN_SIZE;
} else {
-#ifdef ISP_FORCE_TIMEOUT
- {
- static int foo;
- if (foo++ =3D=3D 500) {
- if (more) {
- xpt_schedule(periph, 1);
- }
- foo =3D 0;
- return;
- }
- }
-#endif
-#ifdef ISP_TEST_SEPARATE_STATUS
+#ifdef ISP_SEPARATE_STATUS
if (last && data_len) {
last =3D 0;
}
@@ -3301,47 +3779,11 @@
flags &=3D ~CAM_SEND_STATUS;
}
if (data_len) {
- atio->ccb_h.ccb_data_offset +=3D data_len;
- flags |=3D CAM_DIR_IN;
- } else {
- flags |=3D CAM_DIR_NONE;
- }
- }
- break;
- case WRITE_6:
- case WRITE_10:
- case WRITE_12:
- case WRITE_16:
- if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offse=
t, &data_ptr, &data_len, &last)) {
- status =3D SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x24;
- atio->sense_len =3D SSD_MIN_SIZE;
- } else {
-#ifdef ISP_FORCE_TIMEOUT
- {
- static int foo;
- if (foo++ =3D=3D 500) {
- if (more) {
- xpt_schedule(periph, 1);
- }
- foo =3D 0;
- return;
- }
- }
-#endif
-#ifdef ISP_TEST_SEPARATE_STATUS
- if (last && data_len) {
- last =3D 0;
- }
-#endif
- if (last =3D=3D 0) {
- flags &=3D ~CAM_SEND_STATUS;
- }
- if (data_len) {
- atio->ccb_h.ccb_data_offset +=3D data_len;
- flags |=3D CAM_DIR_OUT;
+ ATIO_PPD(atio)->offset +=3D data_len;
+ if (is_write)
+ flags |=3D CAM_DIR_OUT;
+ else
+ flags |=3D CAM_DIR_IN;
} else {
flags |=3D CAM_DIR_NONE;
}
@@ -3351,9 +3793,9 @@
flags |=3D CAM_DIR_IN;
if (cdb[1] || cdb[2] || cdb[3]) {
status =3D SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x20;
+ SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+ SDFIXED(atio->sense_data)->flags =3D SSD_KEY_UNIT_ATTENTION;
+ SDFIXED(atio->sense_data)->add_sense_code =3D 0x24; /* INVALID FIELD IN=
CDB */
atio->sense_len =3D SSD_MIN_SIZE;
break;
}
@@ -3375,9 +3817,9 @@
if (ca) {
ca =3D 0;
status =3D SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code =3D 0x28;
- SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x0;
+ SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+ SDFIXED(atio->sense_data)->flags =3D SSD_KEY_UNIT_ATTENTION;
+ SDFIXED(atio->sense_data)->add_sense_code =3D 0x29; /* POWER ON, RESET,=
OR BUS DEVICE RESET OCCURRED */
atio->sense_len =3D SSD_MIN_SIZE;
}
break;
@@ -3393,9 +3835,9 @@
flags |=3D CAM_DIR_IN;
if (cdb[2] || cdb[3] || cdb[4] || cdb[5]) {
status =3D SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x24;
+ SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+ SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+ SDFIXED(atio->sense_data)->add_sense_code =3D 0x24; /* INVALID FIELD I=
N CDB */
atio->sense_len =3D SSD_MIN_SIZE;
break;
}
@@ -3434,7 +3876,7 @@
junk_data[3] =3D (1 << 3);
ptr =3D NULL;
for (i =3D 0; i < 1; i++) {
- ptr =3D &junk_data[8 + (1 << 3)];
+ ptr =3D &junk_data[8 + (i << 3)];
if (i >=3D 256) {
ptr[0] =3D 0x40 | ((i >> 8) & 0x3f);
}
@@ -3447,9 +3889,9 @@
default:
flags |=3D CAM_DIR_NONE;
status =3D SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT_=
ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x20;
+ SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT_=
ERROR;
+ SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+ SDFIXED(atio->sense_data)->add_sense_code =3D 0x20; /* INVALID COMMAND O=
PERATION CODE */
atio->sense_len =3D SSD_MIN_SIZE;
break;
}
@@ -3468,16 +3910,31 @@
data_len =3D 0;
data_ptr =3D NULL;
}
- cam_fill_ctio(csio, 0, isptarg_done, flags, MSG_SIMPLE_Q_TAG, atio->tag_i=
d, atio->init_id, status, data_ptr, data_len, 0);
+ cam_fill_ctio(csio, 0, isptarg_done, flags, MSG_SIMPLE_Q_TAG, atio->tag_i=
d, atio->init_id, status, data_ptr, data_len, 30 * hz);
iccb->ccb_h.target_id =3D atio->ccb_h.target_id;
iccb->ccb_h.target_lun =3D return_lun;
iccb->ccb_h.ccb_atio =3D atio;
+ CTIO_SEQ(iccb) =3D ATIO_PPD(atio)->sequence++;
+ ATIO_PPD(atio)->ctio_cnt++;
+ if (flags & CAM_SEND_STATUS) {
+ KASSERT((ATIO_PPD(atio)->status_sent =3D=3D 0), ("we have already sent s=
tatus for 0x%x in %s", atio->tag_id, __func__));
+ ATIO_PPD(atio)->status_sent =3D 1;
+ }
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, atio->ccb_h.path, "%s: sending d=
ownstream for 0x%x sequence %u len %u flags %x\n", __func__, atio->tag_id,=
CTIO_SEQ(iccb), data_len, flags);
xpt_action(iccb);
=20
if ((atio->ccb_h.status & CAM_DEV_QFRZN) !=3D 0) {
cam_release_devq(periph->path, 0, 0, 0, 0);=20
atio->ccb_h.status &=3D ~CAM_DEV_QFRZN;
}
+#ifdef ISP_MULTI_CCBS
+ if (is_data_cmd && ATIO_PPD(atio)->status_sent =3D=3D 0 && ATIO_PPD(atio)=
->ctio_cnt < MULTI_CCB_DATA_CNT && ATIO_PPD(atio)->on_queue =3D=3D 0) {
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, atio->ccb_h.path, "%s: more sti=
ll to do for 0x%x\n", __func__, atio->tag_id);
+ TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe);=20
+ ATIO_PPD(atio)->on_queue =3D 1;
+ more =3D 1;
+ }
+#endif
if (more) {
xpt_schedule(periph, 1);
}
@@ -3492,7 +3949,7 @@
periph->softc =3D softc;
softc->periph =3D periph;
softc->path =3D periph->path;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __f=
unc__);
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __f=
unc__);
return (CAM_REQ_CMP);
}
=20
@@ -3501,7 +3958,7 @@
{
struct isptarg_softc *softc;
softc =3D (struct isptarg_softc *)periph->softc;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __f=
unc__);
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __f=
unc__);
softc->periph =3D NULL;
softc->path =3D NULL;
periph->softc =3D NULL;
@@ -3512,6 +3969,7 @@
{
struct isptarg_softc *softc;
ispsoftc_t *isp;
+ uint32_t newoff;
struct ccb_accept_tio *atio;
struct ccb_immediate_notify *inot;
cam_status status;
@@ -3524,7 +3982,9 @@
case XPT_ACCEPT_TARGET_IO:
atio =3D (struct ccb_accept_tio *) ccb;
ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] ATIO seen in =
%s\n", atio->tag_id, __func__);
+ memset(ATIO_PPD(atio), 0, sizeof (ppd_t));
TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, periph_links.tqe);=20
+ ATIO_PPD(atio)->on_queue =3D 1;
xpt_schedule(periph, 1);
break;
case XPT_IMMEDIATE_NOTIFY:
@@ -3534,22 +3994,43 @@
xpt_schedule(periph, 1);
break;
case XPT_CONT_TARGET_IO:
+ atio =3D ccb->ccb_h.ccb_atio;
+ KASSERT((ATIO_PPD(atio)->ctio_cnt !=3D 0), ("ctio zero when finishing a =
CTIO"));
+ ATIO_PPD(atio)->ctio_cnt--;
+ if ((ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
+ switch (ccb->ccb_h.status & CAM_STATUS_MASK) {
+ case CAM_MESSAGE_RECV:
+ newoff =3D (ccb->csio.msg_ptr[3] << 24) | (ccb->csio.msg_ptr[4] << 16)=
| (ccb->csio.msg_ptr[5] << 8) | (ccb->csio.msg_ptr[6]);
+ ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "[0x%x] got message to=
return to reset offset to 0x%x at sequence %u\n", atio->tag_id, newoff, CT=
IO_SEQ(ccb));
+ ATIO_PPD(atio)->offset =3D newoff;
+ ATIO_PPD(atio)->status_sent =3D 0;
+ if (ATIO_PPD(atio)->on_queue =3D=3D 0) {
+ TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tq=
e);=20
+ ATIO_PPD(atio)->on_queue =3D 1;
+ }
+ xpt_schedule(periph, 1);
+ break;
+ default:
+ cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL);
+ xpt_action((union ccb *)atio);
+ break;
+ }
+ } else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO seq=
uence %u seen in %s\n", atio->tag_id, CTIO_SEQ(ccb), __func__);
+ if (ATIO_PPD(atio)->status_sent =3D=3D 0 && ATIO_PPD(atio)->on_queue =
=3D=3D 0) {
+ TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe=
);=20
+ ATIO_PPD(atio)->on_queue =3D 1;
+ }
+ xpt_schedule(periph, 1);
+ } else {
+ KASSERT((ATIO_PPD(atio)->ctio_cnt =3D=3D 0), ("ctio count still %d when=
we think we've sent the STATUS ctio", ATIO_PPD(atio)->ctio_cnt));
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] FINAL CTIO s=
equence %u seen in %s\n", atio->tag_id, CTIO_SEQ(ccb), __func__);
+ xpt_action((union ccb *)atio);
+ }
if ((ccb->ccb_h.status & CAM_DEV_QFRZN) !=3D 0) {
cam_release_devq(ccb->ccb_h.path, 0, 0, 0, 0);=20
ccb->ccb_h.status &=3D ~CAM_DEV_QFRZN;
}
- atio =3D ccb->ccb_h.ccb_atio;
- if ((ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
- cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL);
- xpt_action((union ccb *)atio);
- } else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO see=
n in %s\n", atio->tag_id, __func__);
- TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe)=
;=20
- xpt_schedule(periph, 1);
- } else {
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] FINAL CTIO s=
een in %s\n", atio->tag_id, __func__);
- xpt_action((union ccb *)atio);
- }
xpt_release_ccb(ccb);
break;
case XPT_NOTIFY_ACKNOWLEDGE:
@@ -3558,7 +4039,7 @@
ccb->ccb_h.status &=3D ~CAM_DEV_QFRZN;
}
inot =3D ccb->ccb_h.ccb_inot;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "[0x%x] recycle noti=
fy for tag 0x%x\n", inot->tag_id, inot->seq_id);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, inot->ccb_h.path, "[0x%x] recycle noti=
fy for tag 0x%x\n", inot->tag_id, inot->seq_id);
xpt_release_ccb(ccb);
xpt_action((union ccb *)inot);
break;
@@ -3684,13 +4165,7 @@
xpt_setup_ccb(&ccb->ccb_h, periph->path, 10);
ccb->ccb_h.func_code =3D XPT_SET_SIM_KNOB;
ccb->knob.xport_specific.fc.role =3D KNOB_ROLE_NONE;
-#ifdef ISP_TEST_WWNS
- ccb->knob.xport_specific.fc.valid =3D KNOB_VALID_ROLE | KNOB_VALID_ADDRES=
S;
- ccb->knob.xport_specific.fc.wwnn =3D 0x508004d000000000ULL | (device_get_=
unit(isp->isp_osinfo.dev) << 8) | (chan << 16);
- ccb->knob.xport_specific.fc.wwpn =3D 0x508004d000000001ULL | (device_get_=
unit(isp->isp_osinfo.dev) << 8) | (chan << 16);
-#else
ccb->knob.xport_specific.fc.valid =3D KNOB_VALID_ROLE;
-#endif
=20
ISP_LOCK(isp);
xpt_action(ccb);
@@ -3733,6 +4208,7 @@
xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 1);
ccb->ccb_h.func_code =3D XPT_ACCEPT_TARGET_IO;
ccb->ccb_h.cbfcnp =3D isptarg_done;
+ ccb->ccb_h.ppriv_ptr0 =3D malloc(sizeof (ppd_t), M_ISPTARG, M_WAITOK | M=
_ZERO);
ISP_LOCK(isp);
xpt_action(ccb);
ISP_UNLOCK(isp);
@@ -3742,6 +4218,7 @@
xpt_setup_ccb(&ccb->ccb_h, periph->path, 1);
ccb->ccb_h.func_code =3D XPT_ACCEPT_TARGET_IO;
ccb->ccb_h.cbfcnp =3D isptarg_done;
+ ccb->ccb_h.ppriv_ptr0 =3D malloc(sizeof (ppd_t), M_ISPTARG, M_WAITOK | M=
_ZERO);
ISP_LOCK(isp);
xpt_action(ccb);
ISP_UNLOCK(isp);
@@ -3890,9 +4367,8 @@
}
=20
if (lba + cnt > dl) {
- return (-1);
- }
-
+ return (-2);
+ }
=20
curcnt =3D MAX_ISP_TARG_TRANSFER;
if (offset + curcnt >=3D cnt) {
@@ -3901,6 +4377,10 @@
} else {
*lp =3D 0;
}
+#ifdef ISP_MULTI_CCBS
+ if (curcnt > MULTI_CCB_DATA_LIM)
+ curcnt =3D MULTI_CCB_DATA_LIM;
+#endif
*tl =3D curcnt;
*kp =3D &dp[lba + offset];
return (0);
@@ -3976,14 +4456,6 @@
=20
handle =3D isp_find_handle(isp, xs);
=20
- if (handle !=3D ISP_HANDLE_FREE && !XS_CMD_WPEND_P(xs)) {
- isp_xs_prt(isp, xs, ISP_LOGWARN, "first watchdog (handle 0x%x) timed out=
- deferring for grace period", handle);
- callout_reset(&PISP_PCMD(xs)->wdog, 2 * hz, isp_watchdog, xs);
- XS_CMD_S_WPEND(xs);
- return;
- }
- XS_C_TACTIVE(xs);
-
/*
* Hand crank the interrupt code just to be sure the command isn't stuck =
somewhere.
*/
@@ -4031,7 +4503,8 @@
}=20
isp_destroy_handle(isp, handle);
isp_prt(isp, ISP_LOGERR, "%s: timeout for handle 0x%x", __func__, handle=
);
- XS_SETERR(xs, CAM_CMD_TIMEOUT);
+ xs->ccb_h.status &=3D ~CAM_STATUS_MASK;
+ xs->ccb_h.status |=3D CAM_CMD_TIMEOUT;
isp_prt_endcmd(isp, xs);
isp_done(xs);
} else {
@@ -4122,7 +4595,7 @@
continue;
}
if (lp->gone_timer !=3D 0) {
- isp_prt(isp, ISP_LOGSANCFG, "%s: Chan %d more to do for target %u (time=
r=3D%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer);
+ isp_prt(isp, ISP_LOG_SANCFG, "%s: Chan %d more to do for target %u (tim=
er=3D%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer);
lp->gone_timer -=3D 1;
more_to_do++;
continue;
@@ -4139,7 +4612,7 @@
callout_reset(&fc->gdt, hz, isp_gdt, fc);
} else {
callout_deactivate(&fc->gdt);
- isp_prt(isp, ISP_LOGSANCFG, "Chan %d Stopping Gone Device Timer @ %lu",=
chan, (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Stopping Gone Device Timer @ %lu"=
, chan, (unsigned long) time_uptime);
}
}
ISP_UNLOCK(isp);
@@ -4171,7 +4644,7 @@
int dbidx, tgt, i;
=20
ISP_LOCK(isp);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expire=
d @ %lu", chan, (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expir=
ed @ %lu", chan, (unsigned long) time_uptime);
callout_deactivate(&fc->ldt);
=20
/*
@@ -4190,7 +4663,7 @@
/*
* XXX: CLEAN UP AND COMPLETE ANY PENDING COMMANDS FIRST!
*/
- =09
+
=20
for (i =3D 0; i < isp->isp_maxcmds; i++) {
struct ccb_scsiio *xs;
@@ -4204,14 +4677,14 @@
if (dbidx !=3D (FCPARAM(isp, chan)->isp_dev_map[XS_TGT(xs)] - 1)) {
continue;
}
- isp_prt(isp, ISP_LOGWARN, "command handle 0x%08x for %d.%d.%d orphaned =
by loop down timeout",
+ isp_prt(isp, ISP_LOGWARN, "command handle 0x%x for %d.%d.%d orphaned by=
loop down timeout",
isp->isp_xflist[i].handle, chan, XS_TGT(xs), XS_LUN(xs));
}
=20
/*
* Mark that we've announced that this device is gone....
*/
- lp->reserved =3D 1;
+ lp->announced =3D 1;
=20
/*
* but *don't* change the state of the entry. Just clear
@@ -4254,7 +4727,7 @@
for (;;) {
int lb, lim;
=20
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC state=
", __func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC stat=
e", __func__, chan);
lb =3D isp_fc_runstate(isp, chan, 250000);
=20
/*
@@ -4272,9 +4745,9 @@
fc->loop_down_time +=3D slp;
=20
if (lb < 0) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up =
(down count %d)", __func__, chan, fc->loop_down_time);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up=
(down count %d)", __func__, chan, fc->loop_down_time);
} else {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (d=
own count %d)", __func__, chan, lb, fc->loop_down_time);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (=
down count %d)", __func__, chan, lb, fc->loop_down_time);
}
=20
/*
@@ -4304,11 +4777,14 @@
}
=20
} else if (lb) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", _=
_func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", =
__func__, chan);
fc->loop_down_time +=3D slp;
- slp =3D 60;
+ if (fc->loop_down_time > 300)
+ slp =3D 0;
+ else
+ slp =3D 60;
} else {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", __=
func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", _=
_func__, chan);
fc->loop_down_time =3D 0;
slp =3D 0;
}
@@ -4326,7 +4802,7 @@
isp_unfreeze_loopdown(isp, chan);
}
=20
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", _=
_func__, chan, slp);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", =
__func__, chan, slp);
=20
msleep(fc, &isp->isp_osinfo.lock, PRIBIO, "ispf", slp * hz);
=20
@@ -4338,7 +4814,7 @@
* to settle.
*/
if (slp =3D=3D 0 && fc->hysteresis) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresis=
ticks %d", __func__, chan, fc->hysteresis * hz);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresi=
s ticks %d", __func__, chan, fc->hysteresis * hz);
mtx_unlock(&isp->isp_osinfo.lock);
pause("ispt", fc->hysteresis * hz);
mtx_lock(&isp->isp_osinfo.lock);
@@ -4355,7 +4831,7 @@
struct ccb_trans_settings *cts;
=20
CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("isp_action\n"));
-=09
+
isp =3D (ispsoftc_t *)cam_sim_softc(sim);
mtx_assert(&isp->isp_lock, MA_OWNED);
=20
@@ -4388,6 +4864,7 @@
break;
}
}
+ ccb->csio.req_map =3D NULL;
#ifdef DIAGNOSTIC
if (ccb->ccb_h.target_id > (ISP_MAX_TARGETS(isp) - 1)) {
xpt_print(ccb->ccb_h.path, "invalid target\n");
@@ -4412,7 +4889,6 @@
error =3D isp_start((XS_T *) ccb);
switch (error) {
case CMD_QUEUED:
- XS_CMD_S_CLEAR(ccb);
ccb->ccb_h.status |=3D CAM_SIM_QUEUED;
if (ccb->ccb_h.timeout =3D=3D CAM_TIME_INFINITY) {
break;
@@ -4422,7 +4898,6 @@
ts =3D 60*1000;
}
ts =3D isp_mstohz(ts);
- XS_S_TACTIVE(ccb);
callout_reset(&PISP_PCMD(ccb)->wdog, ts, isp_watchdog, ccb);
break;
case CMD_RQLATER:
@@ -4449,7 +4924,7 @@
isp_prt(isp, ISP_LOGDEBUG0, "%d.%d retry later", XS_TGT(ccb), XS_LUN(cc=
b));
cam_freeze_devq(ccb->ccb_h.path);
cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000=
, 0);
- XS_SETERR(ccb, CAM_REQUEUE_REQ);
+ ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
isp_free_pcmd(isp, ccb);
xpt_done(ccb);
break;
@@ -4457,7 +4932,7 @@
isp_free_pcmd(isp, ccb);
cam_freeze_devq(ccb->ccb_h.path);
cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 100,=
0);
- XS_SETERR(ccb, CAM_REQUEUE_REQ);
+ ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
xpt_done(ccb);
break;
case CMD_COMPLETE:
@@ -4465,7 +4940,7 @@
break;
default:
isp_prt(isp, ISP_LOGERR, "What's this? 0x%x at %d in file %s", error, _=
_LINE__, __FILE__);
- XS_SETERR(ccb, CAM_REQ_CMP_ERR);
+ ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
isp_free_pcmd(isp, ccb);
xpt_done(ccb);
}
@@ -4503,8 +4978,8 @@
ccb->ccb_h.status =3D CAM_DEV_NOT_THERE;
break;
}
- ccb->ccb_h.sim_priv.entries[0].field =3D 0;
- ccb->ccb_h.sim_priv.entries[1].ptr =3D isp;
+ ccb->ccb_h.spriv_field0 =3D 0;
+ ccb->ccb_h.spriv_ptr1 =3D isp;
ccb->ccb_h.flags =3D 0;
=20
if (ccb->ccb_h.func_code =3D=3D XPT_ACCEPT_TARGET_IO) {
@@ -4516,8 +4991,9 @@
}
tptr->atio_count++;
SLIST_INSERT_HEAD(&tptr->atios, &ccb->ccb_h, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE ATIO (tag =
id 0x%x), count now %d\n",
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE ATIO (tag =
id 0x%x), count now %d\n",
ccb->atio.tag_id, tptr->atio_count);
+ ccb->atio.tag_id =3D 0;
} else if (ccb->ccb_h.func_code =3D=3D XPT_IMMEDIATE_NOTIFY) {
if (ccb->cin1.tag_id) {
inot_private_data_t *ntp =3D isp_find_ntpd(isp, tptr, ccb->cin1.tag_id=
, ccb->cin1.seq_id);
@@ -4527,13 +5003,15 @@
}
tptr->inot_count++;
SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq=
id 0x%x) count now %d\n",
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq=
id 0x%x) count now %d\n",
ccb->cin1.seq_id, tptr->inot_count);
+ ccb->cin1.seq_id =3D 0;
} else if (ccb->ccb_h.func_code =3D=3D XPT_IMMED_NOTIFY) {
tptr->inot_count++;
SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq=
id 0x%x) count now %d\n",
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq=
id 0x%x) count now %d\n",
ccb->cin1.seq_id, tptr->inot_count);
+ ccb->cin1.seq_id =3D 0;
}
rls_lun_statep(isp, tptr);
ccb->ccb_h.status =3D CAM_REQ_INPROG;
@@ -4567,7 +5045,8 @@
rls_lun_statep(isp, tptr);
cam_freeze_devq(ccb->ccb_h.path);
cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000=
, 0);
- XS_SETERR(ccb, CAM_REQUEUE_REQ);
+ ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+ ccb->ccb_h.status |=3D CAM_REQUEUE_REQ;
break;
}
isp_put_ntpd(isp, tptr, ntp);
@@ -4578,7 +5057,7 @@
break;
}
case XPT_CONT_TARGET_IO:
- isp_target_start_ctio(isp, ccb);
+ isp_target_start_ctio(isp, ccb, FROM_CAM);
break;
#endif
case XPT_RESET_DEV: /* BDR the specified SCSI device */
@@ -4874,13 +5353,24 @@
}
if (rchange) {
ISP_PATH_PRT(isp, ISP_LOGCONFIG, ccb->ccb_h.path, "changing role on fr=
om %d to %d\n", fcp->role, newrole);
+#ifdef ISP_TARGET_MODE
+ ISP_SET_PC(isp, bus, tm_enabled, 0);
+ ISP_SET_PC(isp, bus, tm_luns_enabled, 0);
+#endif
if (isp_fc_change_role(isp, bus, newrole) !=3D 0) {
ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
+ xpt_done(ccb);
+ break;
+ }
#ifdef ISP_TARGET_MODE
- } else if (newrole =3D=3D ISP_ROLE_TARGET || newrole =3D=3D ISP_ROLE_B=
OTH) {
+ if (newrole =3D=3D ISP_ROLE_TARGET || newrole =3D=3D ISP_ROLE_BOTH) {
+ /*
+ * Give the new role a chance to complain and settle
+ */
+ msleep(isp, &isp->isp_lock, PRIBIO, "taking a breather", 2);
ccb->ccb_h.status =3D isp_enable_deferred_luns(isp, bus);
+ }
#endif
- }
}
}
xpt_done(ccb);
@@ -5026,10 +5516,8 @@
xpt_print(sccb->ccb_h.path, "cam completion status 0x%x\n", sccb->ccb_h.=
status);
}
=20
- XS_CMD_S_DONE(sccb);
- if (XS_TACTIVE_P(sccb))
+ if (callout_active(&PISP_PCMD(sccb)->wdog))
callout_stop(&PISP_PCMD(sccb)->wdog);
- XS_CMD_S_CLEAR(sccb);
isp_free_pcmd(isp, (union ccb *) sccb);
xpt_done((union ccb *) sccb);
}
@@ -5038,8 +5526,9 @@
isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
{
int bus;
- static const char prom[] =3D "Chan %d PortID 0x%06x handle 0x%x role %s %=
s WWPN 0x%08x%08x";
- static const char prom2[] =3D "Chan %d PortID 0x%06x handle 0x%x role %s =
%s tgt %u WWPN 0x%08x%08x";
+ static const char prom0[] =3D "Chan %d PortID 0x%06x handle 0x%x %s %s WW=
PN 0x%08x%08x";
+ static const char prom2[] =3D "Chan %d PortID 0x%06x handle 0x%x %s %s tg=
t %u WWPN 0x%08x%08x";
+ char buf[64];
char *msg =3D NULL;
target_id_t tgt;
fcportdb_t *lp;
@@ -5148,7 +5637,7 @@
}
if (!callout_active(&fc->ldt)) {
callout_reset(&fc->ldt, fc->loop_down_limit * hz, isp_ldt, fc);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer @=
%lu", (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer =
@ %lu", (unsigned long) time_uptime);
}
}
}
@@ -5177,9 +5666,9 @@
lp =3D va_arg(ap, fcportdb_t *);
va_end(ap);
fc =3D ISP_FC_PC(isp, bus);
- lp->reserved =3D 0;
+ lp->announced =3D 0;
lp->gone_timer =3D 0;
- if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->roles & (SVC3=
_TGT_ROLE >> SVC3_ROLE_SHIFT))) {
+ if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->prli_word3 & =
PRLI_WD3_TARGET_FUNCTION)) {
int dbidx =3D lp - FCPARAM(isp, bus)->portdb;
int i;
=20
@@ -5199,12 +5688,13 @@
isp_dump_portdb(isp, bus);
}
}
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
if (lp->dev_map_idx) {
tgt =3D lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[l=
p->roles], "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) l=
p->port_wwn);
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "a=
rrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
isp_make_here(isp, bus, tgt);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp=
->roles], "arrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_w=
wn);
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "a=
rrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
break;
case ISPASYNC_DEV_CHANGED:
@@ -5213,7 +5703,7 @@
lp =3D va_arg(ap, fcportdb_t *);
va_end(ap);
fc =3D ISP_FC_PC(isp, bus);
- lp->reserved =3D 0;
+ lp->announced =3D 0;
lp->gone_timer =3D 0;
if (isp_change_is_bad) {
lp->state =3D FC_PORTDB_STATE_NIL;
@@ -5224,20 +5714,22 @@
isp_prt(isp, ISP_LOGCONFIG, prom3, bus, lp->portid, tgt, "change is ba=
d");
isp_make_gone(isp, bus, tgt);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[l=
p->roles], "changed and departed",
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "=
changed and departed",
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
} else {
lp->portid =3D lp->new_portid;
- lp->roles =3D lp->new_roles;
+ lp->prli_word3 =3D lp->new_prli_word3;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
if (lp->dev_map_idx) {
int t =3D lp->dev_map_idx - 1;
FCPARAM(isp, bus)->isp_dev_map[t] =3D (lp - FCPARAM(isp, bus)->portdb)=
+ 1;
tgt =3D lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[=
lp->roles], "changed at", tgt,
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "=
changed at", tgt,
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[l=
p->roles], "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_=
wwn);
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "=
changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
}
break;
@@ -5246,12 +5738,13 @@
bus =3D va_arg(ap, int);
lp =3D va_arg(ap, fcportdb_t *);
va_end(ap);
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
if (lp->dev_map_idx) {
tgt =3D lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[l=
p->roles], "stayed at", tgt,
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "s=
tayed at", tgt,
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp=
->roles], "stayed",
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "s=
tayed",
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
break;
@@ -5270,18 +5763,19 @@
* announce that it's gone.
*
*/
- if (lp->dev_map_idx && lp->reserved =3D=3D 0) {
- lp->reserved =3D 1;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+ if (lp->dev_map_idx && lp->announced =3D=3D 0) {
+ lp->announced =3D 1;
lp->state =3D FC_PORTDB_STATE_ZOMBIE;
lp->gone_timer =3D ISP_FC_PC(isp, bus)->gone_device_time;
if (fc->ready && !callout_active(&fc->gdt)) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Devic=
e Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long)=
time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Devi=
ce Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long=
)time_uptime);
callout_reset(&fc->gdt, hz, isp_gdt, fc);
}
tgt =3D lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[l=
p->roles], "gone zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_=
t) lp->port_wwn);
- } else if (lp->reserved =3D=3D 0) {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp=
->roles], "departed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_=
wwn);
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "g=
one zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_w=
wn);
+ } else if (lp->announced =3D=3D 0) {
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "d=
eparted", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
break;
case ISPASYNC_CHANGE_NOTIFY:
@@ -5315,7 +5809,7 @@
* If the loop down timer is running, cancel it.
*/
if (fc->ready && callout_active(&fc->ldt)) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %=
lu", (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ =
%lu", (unsigned long) time_uptime);
callout_stop(&fc->ldt);
}
isp_prt(isp, ISP_LOGINFO, msg, bus);
@@ -5355,6 +5849,7 @@
case NT_HBA_RESET:
isp_del_all_wwn_entries(isp, ISP_NOCHAN);
break;
+ case NT_GLOBAL_LOGOUT:
case NT_LOGOUT:
/*
* This is device arrival/departure notification
@@ -5396,6 +5891,29 @@
}
break;
}
+ case ISPASYNC_TARGET_NOTIFY_ACK:
+ {
+ void *inot;
+ va_start(ap, cmd);
+ inot =3D va_arg(ap, void *);
+ va_end(ap);
+ if (isp_notify_ack(isp, inot)) {
+ isp_tna_t *tp =3D malloc(sizeof (*tp), M_DEVBUF, M_NOWAIT);
+ if (tp) {
+ tp->isp =3D isp;
+ if (inot) {
+ memcpy(tp->data, inot, sizeof (tp->data));
+ tp->not =3D tp->data;
+ } else {
+ tp->not =3D NULL;
+ }
+ (void) timeout(isp_refire_notify_ack, tp, 5);
+ } else {
+ isp_prt(isp, ISP_LOGERR, "you lose- cannot allocate a notify refire");
+ }
+ }
+ break;
+ }
case ISPASYNC_TARGET_ACTION:
{
isphdr_t *hp;
@@ -5628,13 +6146,13 @@
isp_prt(ispsoftc_t *isp, int level, const char *fmt, ...)
{
int loc;
- char lbuf[128];
+ char lbuf[200];
va_list ap;
=20
if (level !=3D ISP_LOGALL && (level & isp->isp_dblev) =3D=3D 0) {
return;
}
- sprintf(lbuf, "%s: ", device_get_nameunit(isp->isp_dev));
+ snprintf(lbuf, sizeof (lbuf), "%s: ", device_get_nameunit(isp->isp_dev));
loc =3D strlen(lbuf);
va_start(ap, fmt);
vsnprintf(&lbuf[loc], sizeof (lbuf) - loc - 1, fmt, ap);=20
@@ -5805,6 +6323,50 @@
bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap);
}
=20
+int
+isp_fcp_next_crn(ispsoftc_t *isp, uint8_t *crnp, XS_T *cmd)
+{
+ uint32_t chan =3D XS_CHANNEL(cmd);
+ uint32_t tgt =3D XS_TGT(cmd);
+ uint32_t lun =3D XS_LUN(cmd);
+ struct isp_fc *fc =3D &isp->isp_osinfo.pc.fc[chan];
+ int idx =3D NEXUS_HASH(tgt, lun);
+ struct isp_nexus *nxp =3D fc->nexus_hash[idx];
+
+ while (nxp) {
+ if (nxp->tgt =3D=3D tgt && nxp->lun =3D=3D lun)
+ break;
+ nxp =3D nxp->next;
+ }
+ if (nxp =3D=3D NULL) {
+ nxp =3D fc->nexus_free_list;
+ if (nxp =3D=3D NULL) {
+ nxp =3D malloc(sizeof (struct isp_nexus), M_DEVBUF, M_ZERO|M_NOWAIT);
+ if (nxp =3D=3D NULL) {
+ return (-1);
+ }
+ } else {
+ fc->nexus_free_list =3D nxp->next;
+ }
+ nxp->tgt =3D tgt;
+ nxp->lun =3D lun;
+ nxp->next =3D fc->nexus_hash[idx];
+ fc->nexus_hash[idx] =3D nxp;
+ }
+ if (nxp) {
+ if (nxp->crnseed =3D=3D 0)
+ nxp->crnseed =3D 1;
+ if (cmd)
+ PISP_PCMD(cmd)->crn =3D nxp->crnseed;
+ *crnp =3D nxp->crnseed++;
+ return (0);
+ }
+ return (-1);
+}
+
+/*
+ * We enter with the lock held
+ */
void
isp_timer(void *arg)
{
@@ -5812,5 +6374,22 @@
#ifdef ISP_TARGET_MODE
isp_tmcmd_restart(isp);
#endif
- callout_reset(&isp->isp_osinfo.tmo, hz, isp_timer, isp);
+ callout_reset(&isp->isp_osinfo.tmo, isp_timer_count, isp_timer, isp);
}
+
+isp_ecmd_t *
+isp_get_ecmd(ispsoftc_t *isp)
+{
+ isp_ecmd_t *ecmd =3D isp->isp_osinfo.ecmd_free;
+ if (ecmd) {
+ isp->isp_osinfo.ecmd_free =3D ecmd->next;
+ }
+ return (ecmd);
+}
+
+void
+isp_put_ecmd(ispsoftc_t *isp, isp_ecmd_t *ecmd)
+{
+ ecmd->next =3D isp->isp_osinfo.ecmd_free;
+ isp->isp_osinfo.ecmd_free =3D ecmd;
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_freebsd.h
--- a/head/sys/dev/isp/isp_freebsd.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_freebsd.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/sys/dev/isp/isp_freebsd.h 237537 2012-06-24 17:30:54Z mj=
acob $ */
+/* $FreeBSD: head/sys/dev/isp/isp_freebsd.h 239143 2012-08-08 18:24:33Z mj=
acob $ */
/*-
* Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions
*
@@ -75,6 +75,16 @@
=20
#define ISP_IFLAGS INTR_TYPE_CAM | INTR_ENTROPY | INTR_MPSAFE
=20
+#define N_XCMDS 64
+#define XCMD_SIZE 512
+struct ispsoftc;
+typedef union isp_ecmd {
+ union isp_ecmd * next;
+ uint8_t data[XCMD_SIZE];
+} isp_ecmd_t;
+isp_ecmd_t * isp_get_ecmd(struct ispsoftc *);
+void isp_put_ecmd(struct ispsoftc *, isp_ecmd_t *);
+
#ifdef ISP_TARGET_MODE
/* Not quite right, but there was no bump for this change */
#if __FreeBSD_version < 225469
@@ -92,7 +102,7 @@
void * next;
uint32_t orig_datalen;
uint32_t bytes_xfered;
- uint32_t last_xframt;
+ uint32_t bytes_in_transit;
uint32_t tag; /* typically f/w RX_ID */
uint32_t lun;
uint32_t nphdl;
@@ -100,12 +110,23 @@
uint32_t portid;
uint16_t rxid; /* wire rxid */
uint16_t oxid; /* wire oxid */
+ uint16_t word3; /* PRLI word3 params */
+ uint16_t ctcnt; /* number of CTIOs currently active */
+ uint8_t seqno; /* CTIO sequence number */
uint32_t
- cdb0 : 8,
- : 1,
- dead : 1,
- tattr : 3,
- state : 3;
+ srr_notify_rcvd : 1,
+ cdb0 : 8,
+ sendst : 1,
+ dead : 1,
+ tattr : 3,
+ state : 3;
+ void * ests;
+ /*
+ * The current SRR notify copy
+ */
+ uint8_t srr[64]; /* sb QENTRY_LEN, but order of definitions is wrong */
+ void * srr_ccb;
+ uint32_t nsrr;
} atio_private_data_t;
#define ATPD_STATE_FREE 0
#define ATPD_STATE_ATIO 1
@@ -114,6 +135,14 @@
#define ATPD_STATE_LAST_CTIO 4
#define ATPD_STATE_PDON 5
=20
+#define ATPD_CCB_OUTSTANDING 16
+
+#define ATPD_SEQ_MASK 0x7f
+#define ATPD_SEQ_NOTIFY_CAM 0x80
+#define ATPD_SET_SEQNO(hdrp, atp) ((isphdr_t *)hdrp)->rqs_seqno &=3D ~ATPD=
_SEQ_MASK, ((isphdr_t *)hdrp)->rqs_seqno |=3D (atp)->seqno
+#define ATPD_GET_SEQNO(hdrp) (((isphdr_t *)hdrp)->rqs_seqno & ATPD_SEQ_MA=
SK)
+#define ATPD_GET_NCAM(hdrp) ((((isphdr_t *)hdrp)->rqs_seqno & ATPD_SEQ_NO=
TIFY_CAM) !=3D 0)
+
typedef union inot_private_data inot_private_data_t;
union inot_private_data {
inot_private_data_t *next;
@@ -123,10 +152,17 @@
uint32_t tag_id, seq_id;
} rd;
};
+typedef struct isp_timed_notify_ack {
+ void *isp;
+ void *not;
+ uint8_t data[64]; /* sb QENTRY_LEN, but order of definitions is wrong */
+} isp_tna_t;
=20
+TAILQ_HEAD(isp_ccbq, ccb_hdr);
typedef struct tstate {
SLIST_ENTRY(tstate) next;
struct cam_path *owner;
+ struct isp_ccbq waitq; /* waiting CCBs */
struct ccb_hdr_slist atios;
struct ccb_hdr_slist inots;
uint32_t hold;
@@ -151,15 +187,33 @@
*/
struct isp_pcmd {
struct isp_pcmd * next;
- bus_dmamap_t dmap; /* dma map for this command */
- struct ispsoftc * isp; /* containing isp */
- struct callout wdog; /* watchdog timer */
- uint8_t crn; /* command reference number */
+ bus_dmamap_t dmap; /* dma map for this command */
+ struct ispsoftc * isp; /* containing isp */
+ struct callout wdog; /* watchdog timer */
+ uint32_t datalen; /* data length for this command (target mode only) */
+ uint8_t totslen; /* sense length on status response */
+ uint8_t cumslen; /* sense length on status response */
+ uint8_t crn; /* command reference number */
};
#define ISP_PCMD(ccb) (ccb)->ccb_h.spriv_ptr1
#define PISP_PCMD(ccb) ((struct isp_pcmd *)ISP_PCMD(ccb))
=20
/*
+ * Per nexus info.
+ */
+struct isp_nexus {
+ struct isp_nexus * next;
+ uint32_t
+ crnseed : 8; /* next command reference number */
+ uint32_t
+ tgt : 16, /* TGT for target */
+ lun : 16; /* LUN for target */
+};
+#define NEXUS_HASH_WIDTH 32
+#define INITIAL_NEXUS_COUNT MAX_FC_TARG
+#define NEXUS_HASH(tgt, lun) ((tgt + lun) % NEXUS_HASH_WIDTH)
+
+/*
* Per channel information
*/
SLIST_HEAD(tslist, tstate);
@@ -176,6 +230,11 @@
uint32_t loop_down_time;
uint32_t loop_down_limit;
uint32_t gone_device_time;
+ /*
+ * Per target/lun info- just to keep a per-ITL nexus crn count
+ */
+ struct isp_nexus *nexus_hash[NEXUS_HASH_WIDTH];
+ struct isp_nexus *nexus_free_list;
uint32_t
#ifdef ISP_TARGET_MODE
#ifdef ISP_INTERNAL_TARGET
@@ -202,8 +261,10 @@
#ifdef ISP_INTERNAL_TARGET
struct proc * target_proc;
#endif
+#if defined(DEBUG)
+ unsigned int inject_lost_data_frame;
#endif
- uint8_t crnseed; /* next command reference number */
+#endif
};
=20
struct isp_spi {
@@ -266,6 +327,7 @@
#else
: 2,
#endif
+ sixtyfourbit : 1, /* sixtyfour bit platform */
timer_active : 1,
autoconf : 1,
ehook_active : 1,
@@ -288,6 +350,10 @@
cam_status * rptr;
#endif
=20
+ bus_addr_t ecmd_dma;
+ isp_ecmd_t * ecmd_base;
+ isp_ecmd_t * ecmd_free;
+
/*
* Per-type private storage...
*/
@@ -318,16 +384,7 @@
ISP_FC_PC(isp, chan)-> tag =3D val; \
}
=20
-#define FCP_NEXT_CRN(isp, cmd, rslt, chan, tgt, lun) \
- if ((isp)->isp_osinfo.pc.fc[(chan)].crnseed =3D=3D 0) { \
- (isp)->isp_osinfo.pc.fc[(chan)].crnseed =3D 1; \
- } \
- if (cmd) { \
- PISP_PCMD(cmd)->crn =3D (isp)->isp_osinfo.pc.fc[(chan)].crnseed; \
- } \
- (rslt) =3D (isp)->isp_osinfo.pc.fc[(chan)].crnseed++
-=09
-
+#define FCP_NEXT_CRN isp_fcp_next_crn
#define isp_lock isp_osinfo.lock
#define isp_bus_tag isp_osinfo.bus_tag
#define isp_bus_handle isp_osinfo.bus_handle
@@ -341,7 +398,6 @@
/*
* Required Macros/Defines
*/
-
#define ISP_FC_SCRLEN 0x1000
=20
#define ISP_MEMZERO(a, b) memset(a, 0, b)
@@ -459,20 +515,17 @@
#define XS_STSP(ccb) (&(ccb)->scsi_status)
#define XS_SNSP(ccb) (&(ccb)->sense_data)
=20
-#define XS_SNSLEN(ccb) \
- imin((sizeof((ccb)->sense_data)), ccb->sense_len - ccb->sense_resid)
+#define XS_TOT_SNSLEN(ccb) ccb->sense_len
+#define XS_CUR_SNSLEN(ccb) (ccb->sense_len - ccb->sense_resid)
=20
#define XS_SNSKEY(ccb) (scsi_get_sense_key(&(ccb)->sense_data, \
- ccb->sense_len - ccb->sense_resid, \
- /*show_errors*/ 1))
+ ccb->sense_len - ccb->sense_resid, 1))
=20
#define XS_SNSASC(ccb) (scsi_get_asc(&(ccb)->sense_data, \
- ccb->sense_len - ccb->sense_resid, \
- /*show_errors*/ 1))
+ ccb->sense_len - ccb->sense_resid, 1))
=20
#define XS_SNSASCQ(ccb) (scsi_get_ascq(&(ccb)->sense_data, \
- ccb->sense_len - ccb->sense_resid, \
- /*show_errors*/ 1))
+ ccb->sense_len - ccb->sense_resid, 1))
#define XS_TAG_P(ccb) \
(((ccb)->ccb_h.flags & CAM_TAG_ACTION_VALID) && \
(ccb)->tag_action !=3D CAM_TAG_ACTION_NONE)
@@ -483,8 +536,7 @@
=09
=20
#define XS_SETERR(ccb, v) (ccb)->ccb_h.status &=3D ~CAM_STATUS_MASK, \
- (ccb)->ccb_h.status |=3D v, \
- (ccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_ERRSET
+ (ccb)->ccb_h.status |=3D v
=20
# define HBA_NOERROR CAM_REQ_INPROG
# define HBA_BOTCH CAM_UNREC_HBA_ERROR
@@ -499,21 +551,31 @@
=20
#define XS_ERR(ccb) ((ccb)->ccb_h.status & CAM_STATUS_MASK)
=20
-#define XS_NOERR(ccb) \
- (((ccb)->ccb_h.spriv_field0 & ISP_SPRIV_ERRSET) =3D=3D 0 || \
- ((ccb)->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM_REQ_INPROG)
+#define XS_NOERR(ccb) (((ccb)->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM=
_REQ_INPROG)
=20
-#define XS_INITERR(ccb) \
- XS_SETERR(ccb, CAM_REQ_INPROG), (ccb)->ccb_h.spriv_field0 =3D 0
+#define XS_INITERR(ccb) XS_SETERR(ccb, CAM_REQ_INPROG), ccb->sense_resid =
=3D ccb->sense_len
=20
-#define XS_SAVE_SENSE(xs, sense_ptr, slen) do { \
- (xs)->ccb_h.status |=3D CAM_AUTOSNS_VALID; \
- memset(&(xs)->sense_data, 0, sizeof((xs)->sense_data)); \
- memcpy(&(xs)->sense_data, sense_ptr, imin(XS_SNSLEN(xs),\
- slen)); \
- if (slen < (xs)->sense_len) \
- (xs)->sense_resid =3D (xs)->sense_len - slen; \
- } while (0);
+#define XS_SAVE_SENSE(xs, sense_ptr, totslen, slen) do { \
+ uint32_t tlen =3D slen; \
+ if (tlen > (xs)->sense_len) \
+ tlen =3D (xs)->sense_len; \
+ PISP_PCMD(xs)->totslen =3D imin((xs)->sense_len, totslen); \
+ PISP_PCMD(xs)->cumslen =3D tlen; \
+ memcpy(&(xs)->sense_data, sense_ptr, tlen); \
+ (xs)->sense_resid =3D (xs)->sense_len - tlen; \
+ (xs)->ccb_h.status |=3D CAM_AUTOSNS_VALID; \
+ } while (0)
+
+#define XS_SENSE_APPEND(xs, xsnsp, xsnsl) do { \
+ uint32_t off =3D PISP_PCMD(xs)->cumslen; \
+ uint8_t *ptr =3D &((uint8_t *)(&(xs)->sense_data))[off]; \
+ uint32_t amt =3D imin(xsnsl, PISP_PCMD(xs)->totslen - off); \
+ if (amt) { \
+ memcpy(ptr, xsnsp, amt); \
+ (xs)->sense_resid -=3D amt; \
+ PISP_PCMD(xs)->cumslen +=3D amt; \
+ } \
+ } while (0)
=20
#define XS_SENSE_VALID(xs) (((xs)->ccb_h.status & CAM_AUTOSNS_VALID) !=3D =
0)
=20
@@ -634,24 +696,6 @@
/*
* Platform private flags
*/
-#define ISP_SPRIV_ERRSET 0x1
-#define ISP_SPRIV_TACTIVE 0x2
-#define ISP_SPRIV_DONE 0x8
-#define ISP_SPRIV_WPEND 0x10
-
-#define XS_S_TACTIVE(sccb) (sccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_TACTI=
VE
-#define XS_C_TACTIVE(sccb) (sccb)->ccb_h.spriv_field0 &=3D ~ISP_SPRIV_TACT=
IVE
-#define XS_TACTIVE_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_TACTIVE)
-
-#define XS_CMD_S_DONE(sccb) (sccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_DONE
-#define XS_CMD_C_DONE(sccb) (sccb)->ccb_h.spriv_field0 &=3D ~ISP_SPRIV_DONE
-#define XS_CMD_DONE_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_DONE)
-
-#define XS_CMD_S_WPEND(sccb) (sccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_WPE=
ND
-#define XS_CMD_C_WPEND(sccb) (sccb)->ccb_h.spriv_field0 &=3D ~ISP_SPRIV_WP=
END
-#define XS_CMD_WPEND_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_WPEND)
-
-#define XS_CMD_S_CLEAR(sccb) (sccb)->ccb_h.spriv_field0 =3D 0
=20
/*
* Platform Library Functions
@@ -667,6 +711,7 @@
int isp_mstohz(int);
void isp_platform_intr(void *);
void isp_common_dmateardown(ispsoftc_t *, struct ccb_scsiio *, uint32_t);
+int isp_fcp_next_crn(ispsoftc_t *, uint8_t *, XS_T *);
=20
/*
* Platform Version specific defines
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_library.c
--- a/head/sys/dev/isp/isp_library.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_library.c Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
#endif
#ifdef __FreeBSD__
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_library.c 238869 2012-07-28 20:06=
:29Z mjacob $");
#include <dev/isp/isp_freebsd.h>
#endif
#ifdef __OpenBSD__
@@ -58,7 +58,7 @@
* Called with the first queue entry at least partially filled out.
*/
int
-isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint3=
2_t totalcnt, isp_ddir_t ddir)
+isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint3=
2_t totalcnt, isp_ddir_t ddir, ispds64_t *ecmd)
{
uint8_t storage[QENTRY_LEN];
uint8_t type, nqe;
@@ -396,11 +396,11 @@
}
if (fcp->isp_fwstate < FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) {
if (isp_control(isp, ISPCTL_FCLINK_TEST, chan, tval) !=3D 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: linktest failed for chann=
el %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: linktest failed for chan=
nel %d", chan);
return (-1);
}
if (fcp->isp_fwstate !=3D FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD=
) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready for channel=
%d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready for channe=
l %d", chan);
return (-1);
}
}
@@ -410,19 +410,19 @@
}
=20
if (isp_control(isp, ISPCTL_SCAN_LOOP, chan) !=3D 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan loop fails on channel=
%d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan loop fails on channe=
l %d", chan);
return (LOOP_PDB_RCVD);
}
if (isp_control(isp, ISPCTL_SCAN_FABRIC, chan) !=3D 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan fabric fails on chann=
el %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan fabric fails on chan=
nel %d", chan);
return (LOOP_LSCAN_DONE);
}
if (isp_control(isp, ISPCTL_PDB_SYNC, chan) !=3D 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails on channel =
%d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: pdb_sync fails on channel=
%d", chan);
return (LOOP_FSCAN_DONE);
}
if (fcp->isp_fwstate !=3D FW_READY || fcp->isp_loopstate !=3D LOOP_READY)=
{
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready again on cha=
nnel %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready again on ch=
annel %d", chan);
return (-1);
}
return (0);
@@ -438,7 +438,7 @@
int i;
=20
for (i =3D 0; i < MAX_FC_TARG; i++) {
- char mb[4];
+ char mb[4], buf1[64], buf2[64];
const char *dbs[8] =3D {
"NIL ",
"PROB",
@@ -449,9 +449,6 @@
"ZOMB",
"VLD "
};
- const char *roles[4] =3D {
- " UNK", " TGT", " INI", "TINI"
- };
fcportdb_t *lp =3D &fcp->portdb[i];
=20
if (lp->state =3D=3D FC_PORTDB_STATE_NIL && lp->target_mode =3D=3D 0) {
@@ -462,12 +459,81 @@
} else {
ISP_SNPRINTF(mb, sizeof (mb), "---");
}
+ isp_gen_role_str(buf1, sizeof (buf1), lp->prli_word3);
+ isp_gen_role_str(buf2, sizeof (buf2), lp->new_prli_word3);
isp_prt(isp, ISP_LOGALL, "Chan %d [%d]: hdl 0x%x %s al%d tgt %s %s 0x%06=
x =3D>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x",
- chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, roles[lp->ro=
les], lp->portid, roles[lp->new_roles], lp->new_portid,
+ chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, buf1, lp->po=
rtid, buf2, lp->new_portid,
(uint32_t) (lp->node_wwn >> 32), (uint32_t) (lp->node_wwn), (uint32_=
t) (lp->port_wwn >> 32), (uint32_t) (lp->port_wwn));
}
}
=20
+void
+isp_gen_role_str(char *buf, size_t len, uint16_t p3)
+{
+ int nd =3D 0;
+ buf[0] =3D '(';
+ buf[1] =3D 0;
+ if (p3 & PRLI_WD3_ENHANCED_DISCOVERY) {
+ nd++;
+ strlcat(buf, "EDisc", len);
+ }
+ if (p3 & PRLI_WD3_REC_SUPPORT) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "REC", len);
+ }
+ if (p3 & PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "RetryID", len);
+ }
+ if (p3 & PRLI_WD3_RETRY) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "Retry", len);
+ }
+ if (p3 & PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "CNFRM", len);
+ }
+ if (p3 & PRLI_WD3_DATA_OVERLAY_ALLOWED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "DOver", len);
+ }
+ if (p3 & PRLI_WD3_INITIATOR_FUNCTION) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "INI", len);
+ }
+ if (p3 & PRLI_WD3_TARGET_FUNCTION) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "TGT", len);
+ }
+ if (p3 & PRLI_WD3_READ_FCP_XFER_RDY_DISABLED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "RdXfrDis", len);
+ }
+ if (p3 & PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "XfrDis", len);
+ }
+ strlcat(buf, ")", len);
+}
+
const char *
isp_fc_fw_statename(int state)
{
@@ -535,7 +601,6 @@
isp_del_all_wwn_entries(isp, chan);
#endif
isp_clear_commands(isp);
-
isp_reset(isp, 0);
if (isp->isp_state !=3D ISP_RESETSTATE) {
isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__);
@@ -896,7 +961,8 @@
ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
- ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
+ ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
+ ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved);
ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
for (i =3D 0; i < ASIZE(src->req_cdb); i++) {
@@ -919,7 +985,8 @@
ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
- ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
+ ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
+ ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved);
ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
for (i =3D 0; i < ASIZE(src->req_cdb); i++) {
@@ -1077,15 +1144,34 @@
ISP_IOXGET_16(isp, &src->req_time, dst->req_time);
ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len);
ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
- for (i =3D 0; i < 8; i++) {
+ for (i =3D 0; i < sizeof (src->req_response); i++) {
ISP_IOXGET_8(isp, &src->req_response[i], dst->req_response[i]);
}
- for (i =3D 0; i < 32; i++) {
+ for (i =3D 0; i < sizeof (src->req_sense_data); i++) {
ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]);
}
}
=20
void
+isp_get_cont_response(ispsoftc_t *isp, ispstatus_cont_t *src, ispstatus_co=
nt_t *dst)
+{
+ int i;
+ isp_get_hdr(isp, &src->req_header, &dst->req_header);
+ if (IS_24XX(isp)) {
+ uint32_t *a, *b;
+ a =3D (uint32_t *) src->req_sense_data;
+ b =3D (uint32_t *) dst->req_sense_data;
+ for (i =3D 0; i < (sizeof (src->req_sense_data) / sizeof (uint32_t)); i+=
+) {
+ ISP_IOZGET_32(isp, a++, *b++);
+ }
+ } else {
+ for (i =3D 0; i < sizeof (src->req_sense_data); i++) {
+ ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]);
+ }
+ }
+}
+
+void
isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, isp24xx_s=
tatusreq_t *dst)
{
int i;
@@ -1929,6 +2015,29 @@
}
=20
void
+isp_put_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
+{
+ ISP_IOZPUT_8(isp, src->r_ctl, &dst->r_ctl);
+ ISP_IOZPUT_8(isp, src->d_id[0], &dst->d_id[0]);
+ ISP_IOZPUT_8(isp, src->d_id[1], &dst->d_id[1]);
+ ISP_IOZPUT_8(isp, src->d_id[2], &dst->d_id[2]);
+ ISP_IOZPUT_8(isp, src->cs_ctl, &dst->cs_ctl);
+ ISP_IOZPUT_8(isp, src->s_id[0], &dst->s_id[0]);
+ ISP_IOZPUT_8(isp, src->s_id[1], &dst->s_id[1]);
+ ISP_IOZPUT_8(isp, src->s_id[2], &dst->s_id[2]);
+ ISP_IOZPUT_8(isp, src->type, &dst->type);
+ ISP_IOZPUT_8(isp, src->f_ctl[0], &dst->f_ctl[0]);
+ ISP_IOZPUT_8(isp, src->f_ctl[1], &dst->f_ctl[1]);
+ ISP_IOZPUT_8(isp, src->f_ctl[2], &dst->f_ctl[2]);
+ ISP_IOZPUT_8(isp, src->seq_id, &dst->seq_id);
+ ISP_IOZPUT_8(isp, src->df_ctl, &dst->df_ctl);
+ ISP_IOZPUT_16(isp, src->seq_cnt, &dst->seq_cnt);
+ ISP_IOZPUT_16(isp, src->ox_id, &dst->ox_id);
+ ISP_IOZPUT_16(isp, src->rx_id, &dst->rx_id);
+ ISP_IOZPUT_32(isp, src->parameter, &dst->parameter);
+}
+
+void
isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *ds=
t)
{
int i;
@@ -1998,23 +2107,43 @@
ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
}
=20
+void
+isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *src, fcp_rsp_iu_t *dst)
+{
+ int i;
+ for (i =3D 0; i < ((sizeof (src->fcp_rsp_reserved))/(sizeof (src->fcp_rsp=
_reserved[0]))); i++) {
+ ISP_IOZPUT_8(isp, src->fcp_rsp_reserved[i], &dst->fcp_rsp_reserved[i]);
+ }
+ ISP_IOZPUT_16(isp, src->fcp_rsp_status_qualifier, &dst->fcp_rsp_status_qu=
alifier);
+ ISP_IOZPUT_8(isp, src->fcp_rsp_bits, &dst->fcp_rsp_bits);
+ ISP_IOZPUT_8(isp, src->fcp_rsp_scsi_status, &dst->fcp_rsp_scsi_status);
+ ISP_IOZPUT_32(isp, src->fcp_rsp_resid, &dst->fcp_rsp_resid);
+ ISP_IOZPUT_32(isp, src->fcp_rsp_snslen, &dst->fcp_rsp_snslen);
+ ISP_IOZPUT_32(isp, src->fcp_rsp_rsplen, &dst->fcp_rsp_rsplen);
+}
+
#ifdef ISP_TARGET_MODE
=20
/*
* Command shipping- finish off first queue entry and do dma mapping and
* additional segments as needed.
*
- * Called with the first queue entry at least partially filled out.
+ * Called with the first queue entry mostly filled out.
+ * Our job here is to finish that and add additional data
+ * segments if needed.
+ *
+ * We used to do synthetic entries to split data and status
+ * at this level, but that started getting too tricky.
*/
int
isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, u=
int32_t totalcnt, isp_ddir_t ddir, void *snsptr, uint32_t snslen)
{
- uint8_t storage[QENTRY_LEN], storage2[QENTRY_LEN];
+ uint8_t storage[QENTRY_LEN];
uint8_t type, nqe;
uint32_t seg, curseg, seglim, nxt, nxtnxt;
ispds_t *dsp =3D NULL;
ispds64_t *dsp64 =3D NULL;
- void *qe0, *qe1, *sqe =3D NULL;
+ void *qe0, *qe1;
=20
qe0 =3D isp_getrqentry(isp);
if (qe0 =3D=3D NULL) {
@@ -2027,7 +2156,7 @@
seglim =3D 0;
=20
/*
- * If we have no data to transmit, just copy the first IOCB and start it =
up.
+ * If we have data to transmit, figure out how many segments can fit into=
the first entry.
*/
if (ddir !=3D ISP_NOXFR) {
/*
@@ -2039,100 +2168,25 @@
seglim =3D ISP_RQDSEG;
break;
case RQSTYPE_CTIO2:
+ dsp =3D ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg;
+ seglim =3D ISP_RQDSEG_T2;
+ break;
case RQSTYPE_CTIO3:
- {
- ct2_entry_t *ct =3D fqe, *ct2 =3D (ct2_entry_t *) storage2;
- uint16_t swd =3D ct->rsp.m0.ct_scsi_status & 0xff;
-
- if ((ct->ct_flags & CT2_SENDSTATUS) && (swd || ct->ct_resid)) {
- memcpy(ct2, ct, QENTRY_LEN);
- /*
- * Clear fields from first CTIO2 that now need to be cleared
- */
- ct->ct_header.rqs_seqno =3D 0;
- ct->ct_flags &=3D ~(CT2_SENDSTATUS|CT2_CCINCR|CT2_FASTPOST);
- ct->ct_resid =3D 0;
- ct->ct_syshandle =3D 0;
- ct->rsp.m0.ct_scsi_status =3D 0;
-
- /*
- * Reset fields in the second CTIO2 as appropriate.
- */
- ct2->ct_flags &=3D ~(CT2_FLAG_MMASK|CT2_DATAMASK|CT2_FASTPOST);
- ct2->ct_flags |=3D CT2_NO_DATA|CT2_FLAG_MODE1;
- ct2->ct_seg_count =3D 0;
- ct2->ct_reloff =3D 0;
- memset(&ct2->rsp, 0, sizeof (ct2->rsp));
- if (swd =3D=3D SCSI_CHECK && snsptr && snslen) {
- ct2->rsp.m1.ct_senselen =3D min(snslen, MAXRESPLEN);
- memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_senselen);
- swd |=3D CT2_SNSLEN_VALID;
- }
- if (ct2->ct_resid > 0) {
- swd |=3D CT2_DATA_UNDER;
- } else if (ct2->ct_resid < 0) {
- swd |=3D CT2_DATA_OVER;
- }
- ct2->rsp.m1.ct_scsi_status =3D swd;
- sqe =3D storage2;
- }
- if (type =3D=3D RQSTYPE_CTIO2) {
- dsp =3D ct->rsp.m0.u.ct_dataseg;
- seglim =3D ISP_RQDSEG_T2;
- } else {
- dsp64 =3D ct->rsp.m0.u.ct_dataseg64;
- seglim =3D ISP_RQDSEG_T3;
- }
+ dsp64 =3D ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg64;
+ seglim =3D ISP_RQDSEG_T3;
break;
- }
case RQSTYPE_CTIO7:
- {
- ct7_entry_t *ct =3D fqe, *ct2 =3D (ct7_entry_t *)storage2;
- uint16_t swd =3D ct->ct_scsi_status & 0xff;
-
- dsp64 =3D &ct->rsp.m0.ds;
+ dsp64 =3D &((ct7_entry_t *)fqe)->rsp.m0.ds;
seglim =3D 1;
- if ((ct->ct_flags & CT7_SENDSTATUS) && (swd || ct->ct_resid)) {
- memcpy(ct2, ct, sizeof (ct7_entry_t));
-
- /*
- * Clear fields from first CTIO7 that now need to be cleared
- */
- ct->ct_header.rqs_seqno =3D 0;
- ct->ct_flags &=3D ~CT7_SENDSTATUS;
- ct->ct_resid =3D 0;
- ct->ct_syshandle =3D 0;
- ct->ct_scsi_status =3D 0;
-
- /*
- * Reset fields in the second CTIO7 as appropriate.
- */
- ct2->ct_flags &=3D ~(CT7_FLAG_MMASK|CT7_DATAMASK);
- ct2->ct_flags |=3D CT7_NO_DATA|CT7_NO_DATA|CT7_FLAG_MODE1;
- ct2->ct_seg_count =3D 0;
- memset(&ct2->rsp, 0, sizeof (ct2->rsp));
- if (swd =3D=3D SCSI_CHECK && snsptr && snslen) {
- ct2->rsp.m1.ct_resplen =3D min(snslen, MAXRESPLEN_24XX);
- memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_resplen);
- swd |=3D (FCP_SNSLEN_VALID << 8);
- }
- if (ct2->ct_resid < 0) {
- swd |=3D (FCP_RESID_OVERFLOW << 8);
- } else if (ct2->ct_resid > 0) {
- swd |=3D (FCP_RESID_UNDERFLOW << 8);
- }
- ct2->ct_scsi_status =3D swd;
- sqe =3D storage2;
- }
break;
- }
default:
return (CMD_COMPLETE);
}
}
=20
/*
- * Fill out the data transfer stuff in the first queue entry
+ * First, fill out any of the data transfer stuff that fits
+ * in the first queue entry.
*/
if (seglim > nsegs) {
seglim =3D nsegs;
@@ -2147,12 +2201,6 @@
}
=20
/*
- * First, if we are sending status with data and we have a non-zero
- * status or non-zero residual, we have to make a synthetic extra CTIO
- * that contains the status that we'll ship separately (FC cards only).
- */
-
- /*
* Second, start building additional continuation segments as needed.
*/
while (seg < nsegs) {
@@ -2198,25 +2246,10 @@
}
=20
/*
- * If we have a synthetic queue entry to complete things, do it here.
+ * Third, not patch up the first queue entry with the number of segments
+ * we actually are going to be transmitting. At the same time, handle
+ * any mode 2 requests.
*/
- if (sqe) {
- nxtnxt =3D ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp));
- if (nxtnxt =3D=3D isp->isp_reqodx) {
- return (CMD_EAGAIN);
- }
- qe1 =3D ISP_QUEUE_ENTRY(isp->isp_rquest, nxt);
- nxt =3D nxtnxt;
- if (type =3D=3D RQSTYPE_CTIO7) {
- isp_put_ctio7(isp, sqe, qe1);
- } else {
- isp_put_ctio2(isp, sqe, qe1);
- }
- if (isp->isp_dblev & ISP_LOGTDEBUG1) {
- isp_print_bytes(isp, "synthetic final queue entry", QENTRY_LEN, storage=
2);
- }
- }
-
((isphdr_t *)fqe)->rqs_entry_count =3D nqe;
switch (type) {
case RQSTYPE_CTIO:
@@ -2225,7 +2258,11 @@
break;
case RQSTYPE_CTIO2:
case RQSTYPE_CTIO3:
- ((ct2_entry_t *)fqe)->ct_seg_count =3D nsegs;
+ if (((ct2_entry_t *)fqe)->ct_flags & CT2_FLAG_MODE2) {
+ ((ct2_entry_t *)fqe)->ct_seg_count =3D 1;
+ } else {
+ ((ct2_entry_t *)fqe)->ct_seg_count =3D nsegs;
+ }
if (ISP_CAP_2KLOGIN(isp)) {
isp_put_ctio2e(isp, fqe, qe0);
} else {
@@ -2233,7 +2270,11 @@
}
break;
case RQSTYPE_CTIO7:
- ((ct7_entry_t *)fqe)->ct_seg_count =3D nsegs;
+ if (((ct7_entry_t *)fqe)->ct_flags & CT7_FLAG_MODE2) {
+ ((ct7_entry_t *)fqe)->ct_seg_count =3D 1;
+ } else {
+ ((ct7_entry_t *)fqe)->ct_seg_count =3D nsegs;
+ }
isp_put_ctio7(isp, fqe, qe0);
break;
default:
@@ -2405,8 +2446,9 @@
* Add an initiator device to the port database
*/
void
-isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl,=
uint32_t s_id)
+isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl,=
uint32_t s_id, uint16_t prli_params)
{
+ char buf[64];
fcparam *fcp;
fcportdb_t *lp;
isp_notify_t nt;
@@ -2415,8 +2457,8 @@
fcp =3D FCPARAM(isp, chan);
=20
if (nphdl >=3D MAX_NPORT_HANDLE) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0=
x%04x Port ID 0x%06x",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04=
x Port ID 0x%06x",
+ chan, (unsigned long long) ini, nphdl, s_id);
return;
}
=20
@@ -2451,19 +2493,18 @@
if (lp) {
int something =3D 0;
if (lp->handle !=3D nphdl) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d attempt to re-enter N-port handl=
e 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%=
04x Port ID 0x%06x",
- __func__, chan, nphdl, (unsigned long long)ini, s_id, (unsigned lon=
g long) lp->port_wwn, lp->handle, lp->portid);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d attempt to re-enter N-port handle 0x=
%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x =
Port ID 0x%06x",
+ chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp=
->port_wwn, lp->handle, lp->portid);
isp_dump_portdb(isp, chan);
return;
}
if (s_id !=3D PORT_NONE) {
if (lp->portid =3D=3D PORT_NONE) {
lp->portid =3D s_id;
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets Port=
ID 0x%06x", __func__, chan, nphdl, s_id);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets Port ID =
0x%06x", chan, nphdl, s_id);
something++;
} else if (lp->portid !=3D s_id) {
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x tries to =
change Port ID 0x%06x to 0x%06x", __func__, chan, nphdl,
- lp->portid, s_id);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x tries to chan=
ge Port ID 0x%06x to 0x%06x", chan, nphdl, lp->portid, s_id);
isp_dump_portdb(isp, chan);
return;
}
@@ -2471,18 +2512,24 @@
if (VALID_INI(ini)) {
if (!VALID_INI(lp->port_wwn)) {
lp->port_wwn =3D ini;
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets WWN =
0x%016llxx", __func__, chan, nphdl, (unsigned long long) ini);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets WWN 0x%0=
16llxx", chan, nphdl, (unsigned long long) ini);
something++;
} else if (lp->port_wwn !=3D ini) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d N-port handle 0x%04x tries to c=
hange WWN 0x%016llx to 0x%016llx", __func__, chan, nphdl,
+ isp_prt(isp, ISP_LOGWARN, "Chan %d N-port handle 0x%04x tries to chang=
e WWN 0x%016llx to 0x%016llx", chan, nphdl,
(unsigned long long) lp->port_wwn, (unsigned long long) ini);
isp_dump_portdb(isp, chan);
return;
}
}
-
+ if (prli_params !=3D lp->prli_word3) {
+ lp->prli_word3 =3D prli_params;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+ isp_prt(isp, ISP_LOGTINFO|ISP_LOGCONFIG, "Chan %d IID 0x%016llx N-Port =
Handle 0x%04x Port ID 0x%06x new PRLI Word 3 params %s", chan,
+ (unsigned long long) lp->port_wwn, lp->handle, lp->portid, buf);
+ something++;
+ }
if (!something) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%0=
4x Port ID 0x%06x reentered", __func__, chan,
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x P=
ort ID 0x%06x reentered", chan,
(unsigned long long) lp->port_wwn, lp->handle, lp->portid);
}
return;
@@ -2500,8 +2547,8 @@
}
}
if (i < 0) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x- no room in port database",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x- no room in port database",
+ chan, (unsigned long long) ini, nphdl, s_id);
return;
}
=20
@@ -2511,9 +2558,12 @@
lp->handle =3D nphdl;
lp->portid =3D s_id;
lp->port_wwn =3D ini;
+ lp->prli_word3 =3D prli_params;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
fcp->isp_tgt_map[nphdl] =3D i + 1;
=20
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x vtgt %d added", __func__, chan, (unsigned long long) ini, =
nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x vtgt %d %s added", chan,
+ (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1, b=
uf);
=20
ISP_MEMZERO(&nt, sizeof (nt));
nt.nt_hba =3D isp;
@@ -2538,8 +2588,8 @@
fcportdb_t *lp;
=20
if (nphdl >=3D MAX_NPORT_HANDLE) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0=
x%04x Port ID 0x%06x",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04=
x Port ID 0x%06x",
+ chan, (unsigned long long) ini, nphdl, s_id);
return;
}
=20
@@ -2553,13 +2603,13 @@
}
}
if (lp =3D=3D NULL) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x cannot be found to be cleared",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x cannot be found to be cleared",
+ chan, (unsigned long long) ini, nphdl, s_id);
isp_dump_portdb(isp, chan);
return;
}
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x vtgt %d cleared",
- __func__, chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid,=
fcp->isp_tgt_map[nphdl] - 1);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x vtgt %d cleared",
+ chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_=
tgt_map[nphdl] - 1);
fcp->isp_tgt_map[nphdl] =3D 0;
=20
ISP_MEMZERO(&nt, sizeof (nt));
@@ -2650,7 +2700,7 @@
return;
}
}
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d unable to find entry to delete N-p=
ort handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x", __func__,
+ isp_prt(isp, ISP_LOGWARN, "Chan %d unable to find entry to delete N-port =
handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x",
mp->nt_channel, mp->nt_nphdl, (unsigned long long) mp->nt_wwn, mp->nt=
_sid);
}
=20
@@ -2973,8 +3023,14 @@
ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
=20
@@ -3026,8 +3082,14 @@
ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
=20
@@ -3072,8 +3134,9 @@
}
} else {
ISP_IOXPUT_32(isp, src->rsp.m2.reserved0, &dst->rsp.m2.reserved0);
+ ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
- ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1);
+ ISP_IOXPUT_32(isp, src->rsp.m2.reserved2, &dst->rsp.m2.reserved2);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, &dst->rsp.m2=
.ct_fcp_rsp_iudata.ds_basehi);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
@@ -3132,8 +3195,14 @@
ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
=20
@@ -3187,8 +3256,14 @@
ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_library.h
--- a/head/sys/dev/isp/isp_library.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_library.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/isp/isp_library.h 238869 2012-07-28 20:06:29Z mj=
acob $ */
/*-
* Copyright (c) 1997-2009 by Matthew Jacob
* All rights reserved.
@@ -36,7 +36,7 @@
* stuff figured out, you can make all the code in one spot.
*/
typedef enum { ISP_TO_DEVICE, ISP_FROM_DEVICE, ISP_NOXFR} isp_ddir_t;
-int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddi=
r_t);
+int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddi=
r_t, ispds64_t *);
=20
/*
* Handle management functions.
@@ -66,6 +66,7 @@
extern const char *isp_class3_roles[4];
int isp_fc_runstate(ispsoftc_t *, int, int);
void isp_dump_portdb(ispsoftc_t *, int);
+void isp_gen_role_str(char *, size_t, uint16_t);
=20
const char *isp_fc_fw_statename(int);
const char *isp_fc_loop_statename(int);
@@ -106,6 +107,7 @@
void isp_put_cont_req(ispsoftc_t *, ispcontreq_t *, ispcontreq_t *);
void isp_put_cont64_req(ispsoftc_t *, ispcontreq64_t *, ispcontreq64_t *);
void isp_get_response(ispsoftc_t *, ispstatusreq_t *, ispstatusreq_t *);
+void isp_get_cont_response(ispsoftc_t *, ispstatus_cont_t *, ispstatus_con=
t_t *);
void isp_get_24xx_response(ispsoftc_t *, isp24xx_statusreq_t *, isp24xx_st=
atusreq_t *);
void isp_get_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *);
void isp_get_rio1(ispsoftc_t *, isp_rio1_t *, isp_rio1_t *);
@@ -139,10 +141,12 @@
void isp_get_els(ispsoftc_t *, els_t *, els_t *);
void isp_put_els(ispsoftc_t *, els_t *, els_t *);
void isp_get_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *);
+void isp_put_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *);
void isp_get_fcp_cmnd_iu(ispsoftc_t *, fcp_cmnd_iu_t *, fcp_cmnd_iu_t *);
void isp_put_rft_id(ispsoftc_t *, rft_id_t *, rft_id_t *);
void isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
void isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
+void isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *, fcp_rsp_iu_t *);
=20
#define ISP_HANDLE_MASK 0x7fff
=20
@@ -166,7 +170,7 @@
int isp_find_pdb_by_loopid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
void isp_find_chan_by_did(ispsoftc_t *, uint32_t, uint16_t *);
-void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
+void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t, ui=
nt16_t);
void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
void isp_del_all_wwn_entries(ispsoftc_t *, int);
void isp_del_wwn_entries(ispsoftc_t *, isp_notify_t *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_pci.c
--- a/head/sys/dev/isp/isp_pci.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_pci.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
* FreeBSD Version.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp_pci.c 237537 2012-06-24 17:30:54Z=
mjacob $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_pci.c 239010 2012-08-03 14:25:35Z=
mjacob $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -588,6 +588,20 @@
}
}
=20
+ tval =3D 0;
+ (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "no=
fctape", &tval);
+ if (tval) {
+ isp->isp_confopts |=3D ISP_CFG_NOFCTAPE;
+ }
+
+ tval =3D 0;
+ (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "fc=
tape", &tval);
+ if (tval) {
+ isp->isp_confopts &=3D ~ISP_CFG_NOFCTAPE;
+ isp->isp_confopts |=3D ISP_CFG_FCTAPE;
+ }
+
+
/*
* Because the resource_*_value functions can neither return
* 64 bit integer values, nor can they be directly coerced
@@ -664,6 +678,8 @@
isp =3D &pcs->pci_isp;
isp->isp_dev =3D dev;
isp->isp_nchan =3D 1;
+ if (sizeof (bus_addr_t) > 4)
+ isp->isp_osinfo.sixtyfourbit =3D 1;
=20
/*
* Get Generic Options
@@ -1028,6 +1044,9 @@
pci_release_msi(dev);
}
(void) bus_release_resource(dev, pcs->rtp, pcs->rgd, pcs->regs);
+ /*
+ * XXX: THERE IS A LOT OF LEAKAGE HERE
+ */
if (pcs->pci_isp.isp_param) {
free(pcs->pci_isp.isp_param, M_DEVBUF);
pcs->pci_isp.isp_param =3D NULL;
@@ -1441,6 +1460,7 @@
imc(void *arg, bus_dma_segment_t *segs, int nseg, int error)
{
struct imush *imushp =3D (struct imush *) arg;
+ isp_ecmd_t *ecmd;
=20
if (error) {
imushp->error =3D error;
@@ -1451,17 +1471,33 @@
return;
}
isp_prt(imushp->isp, ISP_LOGDEBUG0, "request/result area @ 0x%jx/0x%jx", =
(uintmax_t) segs->ds_addr, (uintmax_t) segs->ds_len);
+
imushp->isp->isp_rquest =3D imushp->vbase;
imushp->isp->isp_rquest_dma =3D segs->ds_addr;
segs->ds_addr +=3D ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp));
imushp->vbase +=3D ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp));
+
imushp->isp->isp_result_dma =3D segs->ds_addr;
imushp->isp->isp_result =3D imushp->vbase;
+ segs->ds_addr +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
+ imushp->vbase +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
=20
+ if (imushp->isp->isp_type >=3D ISP_HA_FC_2300) {
+ imushp->isp->isp_osinfo.ecmd_dma =3D segs->ds_addr;
+ imushp->isp->isp_osinfo.ecmd_free =3D (isp_ecmd_t *)imushp->vbase;
+ imushp->isp->isp_osinfo.ecmd_base =3D imushp->isp->isp_osinfo.ecmd=
_free;
+ for (ecmd =3D imushp->isp->isp_osinfo.ecmd_free; ecmd < &imushp->i=
sp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) {
+ if (ecmd =3D=3D &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS - 1=
]) {
+ ecmd->next =3D NULL;
+ } else {
+ ecmd->next =3D ecmd + 1;
+ }
+ }
+ }
#ifdef ISP_TARGET_MODE
+ segs->ds_addr +=3D (N_XCMDS * XCMD_SIZE);
+ imushp->vbase +=3D (N_XCMDS * XCMD_SIZE);
if (IS_24XX(imushp->isp)) {
- segs->ds_addr +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
- imushp->vbase +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
imushp->isp->isp_atioq_dma =3D segs->ds_addr;
imushp->isp->isp_atioq =3D imushp->vbase;
}
@@ -1531,11 +1567,11 @@
return (1);
}
=20
+#ifdef ISP_TARGET_MODE
/*
* XXX: We don't really support 64 bit target mode for parallel scsi yet
*/
-#ifdef ISP_TARGET_MODE
- if (IS_SCSI(isp) && sizeof (bus_addr_t) > 4) {
+ if (IS_SCSI(isp) && isp->isp_osinfo.sixtyfourbit) {
free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
isp_prt(isp, ISP_LOGERR, "we cannot do DAC for SPI cards yet");
ISP_LOCK(isp);
@@ -1580,7 +1616,9 @@
=20
/*
* Allocate and map the request and result queues (and ATIO queue
- * if we're a 2400 supporting target mode).
+ * if we're a 2400 supporting target mode), and a region for
+ * external dma addressable command/status structures (23XX and
+ * later).
*/
len =3D ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
len +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
@@ -1589,7 +1627,9 @@
len +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
}
#endif
-
+ if (isp->isp_type >=3D ISP_HA_FC_2300) {
+ len +=3D (N_XCMDS * XCMD_SIZE);
+ }
ns =3D (len / PAGE_SIZE) + 1;
=20
/*
@@ -1650,6 +1690,19 @@
bus_dma_tag_destroy(fc->tdmat);
goto bad;
}
+ for (i =3D 0; i < INITIAL_NEXUS_COUNT; i++) {
+ struct isp_nexus *n =3D malloc(sizeof (struct isp_nexus), M_DEVBUF, M_=
NOWAIT | M_ZERO);
+ if (n =3D=3D NULL) {
+ while (fc->nexus_free_list) {
+ n =3D fc->nexus_free_list;
+ fc->nexus_free_list =3D n->next;
+ free(n, M_DEVBUF);
+ }
+ goto bad;
+ }
+ n->next =3D fc->nexus_free_list;
+ fc->nexus_free_list =3D n;
+ }
}
}
=20
@@ -1679,6 +1732,11 @@
struct isp_fc *fc =3D ISP_FC_PC(isp, cmap);
bus_dmamem_free(fc->tdmat, base, fc->tdmap);
bus_dma_tag_destroy(fc->tdmat);
+ while (fc->nexus_free_list) {
+ struct isp_nexus *n =3D fc->nexus_free_list;
+ fc->nexus_free_list =3D n->next;
+ free(n, M_DEVBUF);
+ }
}
bus_dmamem_free(isp->isp_osinfo.cdmat, base, isp->isp_osinfo.cdmap);
bus_dma_tag_destroy(isp->isp_osinfo.cdmat);
@@ -1733,7 +1791,7 @@
isp =3D mp->isp;
rq =3D mp->rq;
if (nseg) {
- if (sizeof (bus_addr_t) > 4) {
+ if (isp->isp_osinfo.sixtyfourbit) {
if (nseg >=3D ISP_NSEG64_MAX) {
isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we ca=
n support (%d)", nseg, ISP_NSEG64_MAX);
mp->error =3D EFAULT;
@@ -1766,8 +1824,14 @@
ddir =3D ISP_NOXFR;
}
=20
- if (isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio=
->sense_data, csio->sense_len) !=3D CMD_QUEUED) {
+ error =3D isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir,=
&csio->sense_data, csio->sense_len);
+ switch (error) {
+ case CMD_EAGAIN:
mp->error =3D MUSHERR_NOQENTRIES;
+ case CMD_QUEUED:
+ break;
+ default:
+ mp->error =3D EIO;
}
}
#endif
@@ -1802,7 +1866,7 @@
isp =3D mp->isp;
rq =3D mp->rq;
if (nseg) {
- if (sizeof (bus_addr_t) > 4) {
+ if (isp->isp_osinfo.sixtyfourbit) {
if (nseg >=3D ISP_NSEG64_MAX) {
isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we ca=
n support (%d)", nseg, ISP_NSEG64_MAX);
mp->error =3D EFAULT;
@@ -1835,8 +1899,16 @@
ddir =3D ISP_NOXFR;
}
=20
- if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) !=3D CMD_=
QUEUED) {
+ error =3D isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, (is=
pds64_t *)csio->req_map);
+ switch (error) {
+ case CMD_EAGAIN:
mp->error =3D MUSHERR_NOQENTRIES;
+ break;
+ case CMD_QUEUED:
+ break;
+ default:
+ mp->error =3D EIO;
+ break;
}
}
=20
@@ -1936,11 +2008,11 @@
if (mp->error =3D=3D MUSHERR_NOQENTRIES) {
retval =3D CMD_EAGAIN;
} else if (mp->error =3D=3D EFBIG) {
- XS_SETERR(csio, CAM_REQ_TOO_BIG);
+ csio->ccb_h.status =3D CAM_REQ_TOO_BIG;
} else if (mp->error =3D=3D EINVAL) {
- XS_SETERR(csio, CAM_REQ_INVALID);
+ csio->ccb_h.status =3D CAM_REQ_INVALID;
} else {
- XS_SETERR(csio, CAM_UNREC_HBA_ERROR);
+ csio->ccb_h.status =3D CAM_UNREC_HBA_ERROR;
}
return (retval);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_sbus.c
--- a/head/sys/dev/isp/isp_sbus.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_sbus.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp_sbus.c 236379 2012-06-01 04:34:49=
Z eadler $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_sbus.c 239023 2012-08-04 00:00:30=
Z mjacob $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -78,19 +78,22 @@
=20
static int isp_sbus_probe (device_t);
static int isp_sbus_attach (device_t);
+static int isp_sbus_detach (device_t);
=20
=20
#define ISP_SBD(isp) ((struct isp_sbussoftc *)isp)->sbus_dev
struct isp_sbussoftc {
ispsoftc_t sbus_isp;
device_t sbus_dev;
- struct resource * sbus_reg;
+ struct resource * regs;
+ void * irq;
+ int iqd;
+ int rgd;
void * ih;
int16_t sbus_poff[_NREG_BLKS];
sdparam sbus_param;
struct isp_spi sbus_spi;
struct ispmdvec sbus_mdvec;
- struct resource * sbus_ires;
};
=20
=20
@@ -98,6 +101,7 @@
/* Device interface */
DEVMETHOD(device_probe, isp_sbus_probe),
DEVMETHOD(device_attach, isp_sbus_attach),
+ DEVMETHOD(device_detach, isp_sbus_detach),
{ 0, 0 }
};
=20
@@ -136,13 +140,21 @@
static int
isp_sbus_attach(device_t dev)
{
- struct resource *regs;
- int tval, iqd, isp_debug, role, rid, ispburst, default_id;
+ int tval, isp_debug, role, ispburst, default_id;
struct isp_sbussoftc *sbs;
ispsoftc_t *isp =3D NULL;
int locksetup =3D 0;
int ints_setup =3D 0;
=20
+ sbs =3D device_get_softc(dev);
+ if (sbs =3D=3D NULL) {
+ device_printf(dev, "cannot get softc\n");
+ return (ENOMEM);
+ }
+
+ sbs->sbus_dev =3D dev;
+ sbs->sbus_mdvec =3D mdvec;
+
/*
* Figure out if we're supposed to skip this one.
* If we are, we actually go to ISP_ROLE_NONE.
@@ -165,23 +177,15 @@
role =3D ISP_DEFAULT_ROLES;
}
=20
- sbs =3D malloc(sizeof (*sbs), M_DEVBUF, M_NOWAIT | M_ZERO);
- if (sbs =3D=3D NULL) {
- device_printf(dev, "cannot allocate softc\n");
- return (ENOMEM);
- }
+ sbs->irq =3D sbs->regs =3D NULL;
+ sbs->rgd =3D sbs->iqd =3D 0;
=20
- regs =3D NULL;
- iqd =3D 0;
- rid =3D 0;
- regs =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
- if (regs =3D=3D 0) {
+ sbs->regs =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sbs->rgd,
+ RF_ACTIVE);
+ if (sbs->regs =3D=3D NULL) {
device_printf(dev, "unable to map registers\n");
goto bad;
}
- sbs->sbus_dev =3D dev;
- sbs->sbus_reg =3D regs;
- sbs->sbus_mdvec =3D mdvec;
=20
sbs->sbus_poff[BIU_BLOCK >> _BLK_REG_SHFT] =3D BIU_REGS_OFF;
sbs->sbus_poff[MBOX_BLOCK >> _BLK_REG_SHFT] =3D SBUS_MBOX_REGS_OFF;
@@ -189,8 +193,8 @@
sbs->sbus_poff[RISC_BLOCK >> _BLK_REG_SHFT] =3D SBUS_RISC_REGS_OFF;
sbs->sbus_poff[DMA_BLOCK >> _BLK_REG_SHFT] =3D DMA_REGS_OFF;
isp =3D &sbs->sbus_isp;
- isp->isp_bus_tag =3D rman_get_bustag(regs);
- isp->isp_bus_handle =3D rman_get_bushandle(regs);
+ isp->isp_bus_tag =3D rman_get_bustag(sbs->regs);
+ isp->isp_bus_handle =3D rman_get_bushandle(sbs->regs);
isp->isp_mdvec =3D &sbs->sbus_mdvec;
isp->isp_bustype =3D ISP_BT_SBUS;
isp->isp_type =3D ISP_HA_SCSI_UNKNOWN;
@@ -244,7 +248,6 @@
SDPARAM(isp, 0)->isp_ptisp =3D 1;
}
=20
-
isp->isp_osinfo.fw =3D firmware_get("isp_1000");
if (isp->isp_osinfo.fw) {
union {
@@ -280,16 +283,15 @@
mtx_init(&isp->isp_osinfo.lock, "isp", NULL, MTX_DEF);
locksetup++;
=20
- iqd =3D 0;
- sbs->sbus_ires =3D bus_alloc_resource_any(dev, SYS_RES_IRQ, &iqd,
+ sbs->irq =3D bus_alloc_resource_any(dev, SYS_RES_IRQ, &sbs->iqd,
RF_ACTIVE | RF_SHAREABLE);
- if (sbs->sbus_ires =3D=3D NULL) {
+ if (sbs->irq =3D=3D NULL) {
device_printf(dev, "could not allocate interrupt\n");
goto bad;
}
=20
- if (isp_setup_intr(dev, sbs->sbus_ires, ISP_IFLAGS, NULL,
- isp_platform_intr, isp, &sbs->ih)) {
+ if (isp_setup_intr(dev, sbs->irq, ISP_IFLAGS, NULL, isp_platform_intr,
+ isp, &sbs->ih)) {
device_printf(dev, "could not setup interrupt\n");
goto bad;
}
@@ -333,27 +335,51 @@
bad:
=20
if (sbs && ints_setup) {
- (void) bus_teardown_intr(dev, sbs->sbus_ires, sbs->ih);
+ (void) bus_teardown_intr(dev, sbs->irq, sbs->ih);
}
=20
- if (sbs && sbs->sbus_ires) {
- bus_release_resource(dev, SYS_RES_IRQ, iqd, sbs->sbus_ires);
+ if (sbs && sbs->irq) {
+ bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, sbs->irq);
}
=20
if (locksetup && isp) {
mtx_destroy(&isp->isp_osinfo.lock);
}
=20
- if (regs) {
- (void) bus_release_resource(dev, SYS_RES_MEMORY, 0, regs);
- }
-
- if (sbs) {
- free(sbs, M_DEVBUF);
+ if (sbs->regs) {
+ (void) bus_release_resource(dev, SYS_RES_MEMORY, sbs->rgd,
+ sbs->regs);
}
return (ENXIO);
}
=20
+static int
+isp_sbus_detach(device_t dev)
+{
+ struct isp_sbussoftc *sbs;
+ ispsoftc_t *isp;
+ int status;
+
+ sbs =3D device_get_softc(dev);
+ if (sbs =3D=3D NULL) {
+ return (ENXIO);
+ }
+ isp =3D (ispsoftc_t *) sbs;
+ status =3D isp_detach(isp);
+ if (status)
+ return (status);
+ ISP_LOCK(isp);
+ isp_uninit(isp);
+ if (sbs->ih) {
+ (void) bus_teardown_intr(dev, sbs->irq, sbs->ih);
+ }
+ ISP_UNLOCK(isp);
+ mtx_destroy(&isp->isp_osinfo.lock);
+ (void) bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, sbs->irq);
+ (void) bus_release_resource(dev, SYS_RES_MEMORY, sbs->rgd, sbs->regs);
+ return (0);
+}
+
#define IspVirt2Off(a, x) \
(((struct isp_sbussoftc *)a)->sbus_poff[((x) & _BLK_REG_MASK) >> \
_BLK_REG_SHFT] + ((x) & 0xff))
@@ -600,7 +626,7 @@
ddir =3D ISP_NOXFR;
}
=20
- if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) !=3D CMD_=
QUEUED) {
+ if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, NULL) !=
=3D CMD_QUEUED) {
mp->error =3D MUSHERR_NOQENTRIES;
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_stds.h
--- a/head/sys/dev/isp/isp_stds.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_stds.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/isp/isp_stds.h 238869 2012-07-28 20:06:29Z mjaco=
b $ */
/*-
* Copyright (c) 1997-2009 by Matthew Jacob
* All rights reserved.
@@ -137,9 +137,30 @@
} rft_id_t;
=20
/*
- * FCP Response IU Bits of interest
- * Source: NCITS T10, Project 1144D, Revision 08 (aka FCP2r08)
+ * FCP Response IU and bits of interest
+ * Source: NCITS T10, Project 1828D, Revision 02b (aka FCP4r02b)
*/
+typedef struct {
+ uint8_t fcp_rsp_reserved[8];
+ uint16_t fcp_rsp_status_qualifier; /* SAM-5 Status Qualifier */
+ uint8_t fcp_rsp_bits;
+ uint8_t fcp_rsp_scsi_status; /* SAM-5 SCSI Status Byte */
+ uint32_t fcp_rsp_resid;
+ uint32_t fcp_rsp_snslen;
+ uint32_t fcp_rsp_rsplen;
+ /*
+ * In the bytes that follow, it's going to be
+ * FCP RESPONSE INFO (max 8 bytes, possibly 0)
+ * FCP SENSE INFO (if any)
+ * FCP BIDIRECTIONAL READ RESID (if any)
+ */
+ uint8_t fcp_rsp_extra[0];
+} fcp_rsp_iu_t;
+#define MIN_FCP_RESPONSE_SIZE 24
+
+#define FCP_BIDIR_RSP 0x80 /* Bi-Directional response */
+#define FCP_BIDIR_RESID_UNDERFLOW 0x40
+#define FCP_BIDIR_RESID_OVERFLOW 0x20
#define FCP_CONF_REQ 0x10
#define FCP_RESID_UNDERFLOW 0x08
#define FCP_RESID_OVERFLOW 0x04
@@ -162,17 +183,41 @@
#define FCP_RSPNS_TMF_SUCCEEDED 8
#define FCP_RSPNS_TMF_INCORRECT_LUN 9
=20
+/*
+ * R_CTL field definitions
+ *
+ * Bits 31-28 are ROUTING
+ * Bits 27-24 are INFORMATION
+ *
+ * These are nibble values, not bits
+ */
+#define R_CTL_ROUTE_DATA 0x00
+#define R_CTL_ROUTE_ELS 0x02
+#define R_CTL_ROUTE_FC4_LINK 0x03
+#define R_CTL_ROUTE_VDATA 0x04
+#define R_CTL_ROUTE_EXENDED 0x05
+#define R_CTL_ROUTE_BASIC 0x08
+#define R_CTL_ROUTE_LINK 0x0c
+#define R_CTL_ROUTE_EXT_ROUTING 0x0f
+
+#define R_CTL_INFO_UNCATEGORIZED 0x00
+#define R_CTL_INFO_SOLICITED_DATA 0x01
+#define R_CTL_INFO_UNSOLICITED_CONTROL 0x02
+#define R_CTL_INFO_SOLICITED_CONTROL 0x03
+#define R_CTL_INFO_UNSOLICITED_DATA 0x04
+#define R_CTL_INFO_DATA_DESCRIPTOR 0x05
+#define R_CTL_INFO_UNSOLICITED_COMMAND 0x06
+#define R_CTL_INFO_COMMAND_STATUS 0x07
+
+#define MAKE_RCTL(a, b) (((a) << 4) | (b))
=20
/* unconverted miscellany */
/*
* Basic FC Link Service defines
*/
-/*
- * These are in the R_CTL field.
- */
-#define ABTS 0x81
-#define BA_ACC 0x84 /* of ABORT SEQUENCE */
-#define BA_RJT 0x85 /* of ABORT SEQUENCE */
+/* #define ABTS MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_SOLICITED_DATA) */
+#define BA_ACC MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_UNSOLICITED_DATA) /=
* of ABORT */
+#define BA_RJT MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_DATA_DESCRIPTOR) /*=
of ABORT */
=20
/*
* Link Service Accept/Reject
@@ -196,6 +241,23 @@
#define RNC 0x53
=20
/*
+ * PRLI Word 3 definitions
+ * FPC4-r02b January, 2011
+ */
+#define PRLI_WD3_ENHANCED_DISCOVERY (1 << 11)
+#define PRLI_WD3_REC_SUPPORT (1 << 10)
+#define PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED (1 << 9)
+#define PRLI_WD3_RETRY (1 << 8)
+#define PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED (1 << 7)
+#define PRLI_WD3_DATA_OVERLAY_ALLOWED (1 << 6)
+#define PRLI_WD3_INITIATOR_FUNCTION (1 << 5)
+#define PRLI_WD3_TARGET_FUNCTION (1 << 4)
+#define PRLI_WD3_READ_FCP_XFER_RDY_DISABLED (1 << 1) /* definitely suppos=
ed to be set */
+#define PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED (1 << 0)
+
+
+
+/*
* FC4 defines
*/
#define FC4_IP 5 /* ISO/EEC 8802-2 LLC/SNAP */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_target.c
--- a/head/sys/dev/isp/isp_target.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_target.c Fri Aug 10 14:19:25 2012 +0300
@@ -41,7 +41,7 @@
#endif
#ifdef __FreeBSD__
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_target.c 238869 2012-07-28 20:06:=
29Z mjacob $");
#include <dev/isp/isp_freebsd.h>
#endif
#ifdef __OpenBSD__
@@ -291,7 +291,7 @@
break;
case IN_RSRC_UNAVAIL:
isp_prt(isp, ISP_LOGINFO, "Firmware out of ATIOs");
- (void) isp_notify_ack(isp, local);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local);
break;
=20
case IN_RESET:
@@ -346,19 +346,29 @@
notify.nt_sid =3D PORT_ANY;
notify.nt_did =3D PORT_ANY;
notify.nt_ncode =3D NT_GLOBAL_LOGOUT;
+ notify.nt_need_ack =3D 1;
+ notify.nt_lreserved =3D local;
isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify);
- (void) isp_notify_ack(isp, local);
break;
=20
case IN_PORT_CHANGED:
isp_prt(isp, ISP_LOGTINFO, "%s: port changed", __func__);
- (void) isp_notify_ack(isp, local);
+ ISP_MEMZERO(¬ify, sizeof (isp_notify_t));
+ notify.nt_hba =3D isp;
+ notify.nt_wwn =3D INI_ANY;
+ notify.nt_nphdl =3D NIL_HANDLE;
+ notify.nt_sid =3D PORT_ANY;
+ notify.nt_did =3D PORT_ANY;
+ notify.nt_ncode =3D NT_CHANGED;
+ notify.nt_need_ack =3D 1;
+ notify.nt_lreserved =3D local;
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify);
break;
=20
default:
ISP_SNPRINTF(local, sizeof local, "%s: unknown status to RQSTYPE_NOTIFY=
(0x%x)", __func__, status);
isp_print_bytes(isp, local, QENTRY_LEN, vptr);
- (void) isp_notify_ack(isp, local);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local);
break;
}
break;
@@ -466,23 +476,30 @@
if (IS_DUALBUS(isp)) {
el.le_rsvd =3D (bus & 0x1) << 7;
}
- el.le_cmd_count =3D cmd_cnt;
- el.le_in_count =3D inot_cnt;
+ el.le_cmd_count =3D (cmd_cnt < 0)? -cmd_cnt : cmd_cnt;
+ el.le_in_count =3D (inot_cnt < 0)? -inot_cnt : inot_cnt;
if (cmd =3D=3D RQSTYPE_ENABLE_LUN) {
if (IS_SCSI(isp)) {
el.le_flags =3D LUN_TQAE|LUN_DISAD;
el.le_cdb6len =3D 12;
el.le_cdb7len =3D 12;
}
- } else if (cmd =3D=3D -RQSTYPE_ENABLE_LUN) {
- cmd =3D RQSTYPE_ENABLE_LUN;
- el.le_cmd_count =3D 0;
- el.le_in_count =3D 0;
- } else if (cmd =3D=3D -RQSTYPE_MODIFY_LUN) {
- cmd =3D RQSTYPE_MODIFY_LUN;
- el.le_ops =3D LUN_CCDECR | LUN_INDECR;
+ } else if (cmd =3D=3D RQSTYPE_MODIFY_LUN) {
+ if (cmd_cnt =3D=3D 0 && inot_cnt =3D=3D 0) {
+ isp_prt(isp, ISP_LOGWARN, "makes no sense to modify a lun with both com=
mand and immediate notify counts as zero");
+ return (0);
+ }
+ if (cmd_cnt < 0)
+ el.le_ops |=3D LUN_CCDECR;
+ else
+ el.le_ops |=3D LUN_CCINCR;
+ if (inot_cnt < 0)
+ el.le_ops |=3D LUN_INDECR;
+ else
+ el.le_ops |=3D LUN_ININCR;
} else {
- el.le_ops =3D LUN_CCINCR | LUN_ININCR;
+ isp_prt(isp, ISP_LOGWARN, "unknown cmd (0x%x) in %s", cmd, __func__);
+ return (-1);
}
el.le_header.rqs_entry_type =3D cmd;
el.le_header.rqs_entry_count =3D 1;
@@ -662,8 +679,8 @@
cto->rsp.m1.ct_resp[0] =3D 0xf0;
cto->rsp.m1.ct_resp[2] =3D (code >> 12) & 0xf;
cto->rsp.m1.ct_resp[7] =3D 8;
- cto->rsp.m1.ct_resp[12] =3D (code >> 24) & 0xff;
- cto->rsp.m1.ct_resp[13] =3D (code >> 16) & 0xff;
+ cto->rsp.m1.ct_resp[12] =3D (code >> 16) & 0xff;
+ cto->rsp.m1.ct_resp[13] =3D (code >> 24) & 0xff;
} else {
cto->ct_flags |=3D CT7_FLAG_MODE1 | CT7_SENDSTATUS;
}
@@ -837,7 +854,7 @@
default:
isp_prt(isp, ISP_LOGERR, "%s: unknown event 0x%x", __func__, event);
if (isp->isp_state =3D=3D ISP_RUNSTATE) {
- (void) isp_notify_ack(isp, NULL);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, NULL);
}
break;
}
@@ -897,13 +914,13 @@
break;
default:
isp_prt(isp, ISP_LOGERR, "%s: unhandled message 0x%x", __func__, inp->i=
n_msg[0]);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
return;
}
isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify);
} else {
isp_prt(isp, ISP_LOGERR, "%s: unknown immediate notify status 0x%x", __f=
unc__, inp->in_status);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
}
}
=20
@@ -946,7 +963,7 @@
=20
if (inp->in_status !=3D IN_MSG_RECEIVED) {
isp_prt(isp, ISP_LOGINFO, f2, "immediate notify status", inp->in_status,=
notify.nt_lun, loopid, inp->in_task_flags, inp->in_seqid);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
return;
}
=20
@@ -967,7 +984,7 @@
notify.nt_ncode =3D NT_CLEAR_ACA;
} else {
isp_prt(isp, ISP_LOGWARN, f2, "task flag", inp->in_status, notify.nt_lun=
, loopid, inp->in_task_flags, inp->in_seqid);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
return;
}
isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify);
@@ -1054,10 +1071,12 @@
=20
if (IS_24XX(isp)) {
na_fcentry_24xx_t *na =3D (na_fcentry_24xx_t *) storage;
+ na->na_header.rqs_entry_type =3D RQSTYPE_NOTIFY_ACK;
+ na->na_header.rqs_entry_count =3D 1;
if (arg) {
in_fcentry_24xx_t *in =3D arg;
na->na_nphdl =3D in->in_nphdl;
- na->na_flags =3D in->in_flags & IN24XX_FLAG_PUREX_IOCB;
+ na->na_flags =3D in->in_flags;
na->na_status =3D in->in_status;
na->na_status_subcode =3D in->in_status_subcode;
na->na_rxid =3D in->in_rxid;
@@ -1068,14 +1087,19 @@
na->na_srr_reloff_hi =3D in->in_srr_reloff_hi;
na->na_srr_reloff_lo =3D in->in_srr_reloff_lo;
na->na_srr_iu =3D in->in_srr_iu;
- na->na_srr_flags =3D 1;
- na->na_srr_reject_vunique =3D 0;
- na->na_srr_reject_explanation =3D 1;
- na->na_srr_reject_code =3D 1;
+ /*
+ * Whether we're accepting the SRR or rejecting
+ * it is determined by looking at the in_reserved
+ * field in the original notify structure.
+ */
+ if (in->in_reserved) {
+ na->na_srr_flags =3D 1;
+ na->na_srr_reject_vunique =3D 0;
+ na->na_srr_reject_code =3D 9; /* unable to perform this command at t=
his time */
+ na->na_srr_reject_explanation =3D 0x2a; /* unable to supply the reque=
sted data */
+ }
}
}
- na->na_header.rqs_entry_type =3D RQSTYPE_NOTIFY_ACK;
- na->na_header.rqs_entry_count =3D 1;
isp_put_notify_24xx_ack(isp, na, (na_fcentry_24xx_t *)outp);
} else if (IS_FC(isp)) {
na_fcentry_t *na =3D (na_fcentry_t *) storage;
@@ -1093,10 +1117,10 @@
}
na->na_task_flags =3D inp->in_task_flags & TASK_FLAGS_RESERVED_MASK;
na->na_seqid =3D inp->in_seqid;
+ na->na_status =3D inp->in_status;
na->na_flags =3D NAFC_RCOUNT;
- na->na_status =3D inp->in_status;
if (inp->in_status =3D=3D IN_RESET) {
- na->na_flags |=3D NAFC_RST_CLRD;
+ na->na_flags =3D NAFC_RST_CLRD; /* We do not modify resource counts fo=
r LIP resets */
}
if (inp->in_status =3D=3D IN_MSG_RECEIVED) {
na->na_flags |=3D NAFC_TVALID;
@@ -1200,7 +1224,7 @@
ISP_MEMZERO(&rsp->abts_rsp_payload.ba_rjt, sizeof (rsp->abts_rsp_payload=
.ba_acc));
switch (errno) {
case ENOMEM:
- rsp->abts_rsp_payload.ba_rjt.reason =3D 5; /* Logical Busy */
+ rsp->abts_rsp_payload.ba_rjt.reason =3D 5; /* Logical Unit Busy */
break;
default:
rsp->abts_rsp_payload.ba_rjt.reason =3D 9; /* Unable to perform command=
request */
@@ -1771,7 +1795,7 @@
break;
=20
case CT7_SRR:
- isp_prt(isp, ISP_LOGWARN, "SRR received");
+ isp_prt(isp, ISP_LOGTDEBUG0, "SRR received");
break;
=20
default:
@@ -1789,7 +1813,7 @@
*/
if (ct->ct_syshandle =3D=3D 0) {
if (ct->ct_flags & CT7_TERMINATE) {
- isp_prt(isp, ISP_LOGINFO, "termination of 0x%x complete", ct->ct_rxid);
+ isp_prt(isp, ISP_LOGINFO, "termination of [RX_ID 0x%x] complete", ct->=
ct_rxid);
} else if ((ct->ct_flags & CT7_SENDSTATUS) =3D=3D 0) {
isp_prt(isp, pl, "intermediate CTIO completed ok");
} else {
@@ -1844,7 +1868,7 @@
char buf[64];
ISP_SNPRINTF(buf, sizeof buf, "%s: bad channel %d for status 0x%x", __f=
unc__, chan, inot_24xx->in_status);
isp_print_bytes(isp, buf, QENTRY_LEN, inot_24xx);
- (void) isp_notify_ack(isp, inot_24xx);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx);
return;
}
lochan =3D chan;
@@ -1860,12 +1884,13 @@
case IN24XX_LINK_FAILED:
case IN24XX_SRR_RCVD:
case IN24XX_ELS_RCVD:
+ inot_24xx->in_reserved =3D 0; /* clear this for later usage */
inot_24xx->in_vpidx =3D chan;
isp_async(isp, ISPASYNC_TARGET_ACTION, inot_24xx);
break;
default:
isp_prt(isp, ISP_LOGINFO, "%s: unhandled status (0x%x) for chan %d", __=
func__, inot_24xx->in_status, chan);
- (void) isp_notify_ack(isp, inot_24xx);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx);
break;
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_target.h
--- a/head/sys/dev/isp/isp_target.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_target.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/isp/isp_target.h 238869 2012-07-28 20:06:29Z mja=
cob $ */
/*-
* Copyright (c) 1997-2009 by Matthew Jacob
* All rights reserved.
@@ -50,6 +50,7 @@
NT_LINK_DOWN,
NT_LOGOUT,
NT_GLOBAL_LOGOUT,
+ NT_CHANGED,
NT_ARRIVED,
NT_DEPARTED,
NT_HBA_RESET
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/ispmbox.h
--- a/head/sys/dev/isp/ispmbox.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/ispmbox.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/sys/dev/isp/ispmbox.h 237537 2012-06-24 17:30:54Z mjacob=
$ */
+/* $FreeBSD: head/sys/dev/isp/ispmbox.h 238869 2012-07-28 20:06:29Z mjacob=
$ */
/*-
* Copyright (c) 1997-2009 by Matthew Jacob
* All rights reserved.
@@ -428,7 +428,8 @@
uint8_t req_target;
uint16_t req_scclun;
uint16_t req_flags;
- uint16_t req_reserved;
+ uint8_t req_crn;
+ uint8_t req_reserved;
uint16_t req_time;
uint16_t req_seg_count;
uint8_t req_cdb[16];
@@ -458,7 +459,8 @@
uint8_t req_target;
uint16_t req_scclun;
uint16_t req_flags;
- uint16_t req_reserved;
+ uint8_t req_crn;
+ uint8_t req_reserved;
uint16_t req_time;
uint16_t req_seg_count;
uint8_t req_cdb[16];
@@ -473,7 +475,8 @@
uint16_t req_target;
uint16_t req_scclun;
uint16_t req_flags;
- uint16_t req_reserved;
+ uint8_t req_crn;
+ uint8_t req_reserved;
uint16_t req_time;
uint16_t req_seg_count;
uint8_t req_cdb[16];
@@ -515,40 +518,10 @@
uint8_t req_cdb[44];
} ispextreq_t;
=20
-/* 24XX only */
-typedef struct {
- uint16_t fcd_length;
- uint16_t fcd_a1500;
- uint16_t fcd_a3116;
- uint16_t fcd_a4732;
- uint16_t fcd_a6348;
-} fcp_cmnd_ds_t;
=20
-typedef struct {
- isphdr_t req_header;
- uint32_t req_handle;
- uint16_t req_nphdl;
- uint16_t req_time;
- uint16_t req_seg_count;
- uint16_t req_fc_rsp_dsd_length;
- uint8_t req_lun[8];
- uint16_t req_flags;
- uint16_t req_fc_cmnd_dsd_length;
- uint16_t req_fc_cmnd_dsd_a1500;
- uint16_t req_fc_cmnd_dsd_a3116;
- uint16_t req_fc_cmnd_dsd_a4732;
- uint16_t req_fc_cmnd_dsd_a6348;
- uint16_t req_fc_rsp_dsd_a1500;
- uint16_t req_fc_rsp_dsd_a3116;
- uint16_t req_fc_rsp_dsd_a4732;
- uint16_t req_fc_rsp_dsd_a6348;
- uint32_t req_totalcnt;
- uint16_t req_tidlo;
- uint8_t req_tidhi;
- uint8_t req_vpidx;
- ispds64_t req_dataseg;
-} ispreqt6_t;
-
+/*
+ * ISP24XX structures
+ */
typedef struct {
isphdr_t req_header;
uint32_t req_handle;
@@ -945,7 +918,7 @@
#define ICBOPT_SRCHDOWN 0x0400
#define ICBOPT_NOLIP 0x0200
#define ICBOPT_PDBCHANGE_AE 0x0100
-#define ICBOPT_INI_TGTTYPE 0x0080
+#define ICBOPT_TGT_TYPE 0x0080
#define ICBOPT_INI_ADISC 0x0040
#define ICBOPT_INI_DISABLE 0x0020
#define ICBOPT_TGT_ENABLE 0x0010
@@ -1044,7 +1017,7 @@
#define ICB_DFLT_RCOUNT 3
=20
#define ICB_LOGIN_TOV 30
-#define ICB_LUN_ENABLE_TOV 180
+#define ICB_LUN_ENABLE_TOV 15
=20
=20
/*
@@ -1272,10 +1245,8 @@
#define PDB_STATE_PLOGO 10
#define PDB_STATE_PLOG_ACK 11
=20
-#define SVC3_TGT_ROLE 0x10
-#define SVC3_INI_ROLE 0x20
-#define SVC3_ROLE_MASK 0x30
-#define SVC3_ROLE_SHIFT 4
+#define SVC3_ROLE_MASK 0x30
+#define SVC3_ROLE_SHIFT 4
=20
#define BITS2WORD(x) ((x)[0] << 16 | (x)[3] << 8 | (x)[2])
#define BITS2WORD_24XX(x) ((x)[0] << 16 | (x)[1] << 8 | (x)[2])
@@ -1321,8 +1292,8 @@
*/
typedef struct {
uint16_t handle;
- uint16_t reserved;
- uint32_t s3_role : 8,
+ uint16_t prli_word3;
+ uint32_t : 8,
portid : 24;
uint8_t portname[8];
uint8_t nodename[8];
@@ -1781,6 +1752,7 @@
#define IN_PORT_CHANGED 0x2A /* port changed */
#define IN_GLOBAL_LOGO 0x2E /* all ports logged out */
#define IN_NO_NEXUS 0x3B /* Nexus not established */
+#define IN_SRR_RCVD 0x45 /* SRR received */
=20
/*
* Values for the in_task_flags field- should only get one at a time!
@@ -1811,24 +1783,17 @@
uint16_t in_srr_iu;
uint16_t in_srr_oxid;
/*
- * If bit 2 is set in in_flags, the following
- * two tags are valid. If the received ELS is
+ * If bit 2 is set in in_flags, the N-Port and
+ * handle tags are valid. If the received ELS is
* a LOGO, then these tags contain the N Port ID
* from the LOGO payload. If the received ELS
* request is TPRLO, these tags contain the
* Third Party Originator N Port ID.
*/
uint16_t in_nport_id_hi;
+#define in_prli_options in_nport_id_hi
uint8_t in_nport_id_lo;
uint8_t in_reserved3;
- /*
- * If bit 2 is set in in_flags, the following
- * tag is valid. If the received ELS is a LOGO,
- * then this tag contains the n-port handle
- * from the LOGO payload. If the received ELS
- * request is TPRLO, this tag contain the
- * n-port handle for the Third Party Originator.
- */
uint16_t in_np_handle;
uint8_t in_reserved4[12];
uint8_t in_reserved5;
@@ -2183,7 +2148,7 @@
uint8_t ct_tag_val; /* tag value */
uint8_t ct_tag_type; /* tag type */
uint32_t ct_xfrlen; /* transfer length */
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
uint16_t ct_timeout;
uint16_t ct_seg_count;
ispds_t ct_dataseg[ISP_RQDSEG];
@@ -2206,8 +2171,8 @@
* ct_flags values
*/
#define CT_TQAE 0x00000002 /* bit 1, Tagged Queue Action enable */
-#define CT_DATA_IN 0x00000040 /* bits 6&7, Data direction */
-#define CT_DATA_OUT 0x00000080 /* bits 6&7, Data direction */
+#define CT_DATA_IN 0x00000040 /* bits 6&7, Data direction - *to* initiator=
*/
+#define CT_DATA_OUT 0x00000080 /* bits 6&7, Data direction - *from* initia=
tor */
#define CT_NO_DATA 0x000000C0 /* bits 6&7, Data direction */
#define CT_CCINCR 0x00000100 /* bit 8, autoincrement atio count */
#define CT_DATAMASK 0x000000C0 /* bits 6&7, Data direction */
@@ -2278,7 +2243,7 @@
uint16_t ct_timeout;
uint16_t ct_seg_count;
uint32_t ct_reloff; /* relative offset */
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
union {
/*
* The three different modes that the target driver
@@ -2317,7 +2282,10 @@
uint16_t _reserved2;
uint16_t _reserved3;
uint32_t ct_datalen;
- ispds_t ct_fcp_rsp_iudata;
+ union {
+ ispds_t ct_fcp_rsp_iudata_32;
+ ispds64_t ct_fcp_rsp_iudata_64;
+ } u;
} m2;
} rsp;
} ct2_entry_t;
@@ -2332,7 +2300,7 @@
uint16_t ct_timeout;
uint16_t ct_seg_count;
uint32_t ct_reloff; /* relative offset */
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
union {
struct {
uint32_t _reserved;
@@ -2358,7 +2326,10 @@
uint16_t _reserved2;
uint16_t _reserved3;
uint32_t ct_datalen;
- ispds_t ct_fcp_rsp_iudata;
+ union {
+ ispds_t ct_fcp_rsp_iudata_32;
+ ispds64_t ct_fcp_rsp_iudata_64;
+ } u;
} m2;
} rsp;
} ct2e_entry_t;
@@ -2370,8 +2341,8 @@
#define CT2_FLAG_MODE1 0x0001
#define CT2_FLAG_MODE2 0x0002
#define CT2_FLAG_MMASK 0x0003
-#define CT2_DATA_IN 0x0040
-#define CT2_DATA_OUT 0x0080
+#define CT2_DATA_IN 0x0040 /* *to* initiator */
+#define CT2_DATA_OUT 0x0080 /* *from* initiator */
#define CT2_NO_DATA 0x00C0
#define CT2_DATAMASK 0x00C0
#define CT2_CCINCR 0x0100
@@ -2412,7 +2383,7 @@
uint32_t ct_rxid;
uint16_t ct_senselen; /* mode 1 only */
uint16_t ct_flags;
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
uint16_t ct_oxid;
uint16_t ct_scsi_status; /* modes 0 && 1 only */
union {
@@ -2430,8 +2401,9 @@
} m1;
struct {
uint32_t reserved0;
+ uint32_t reserved1;
uint32_t ct_datalen;
- uint32_t reserved1;
+ uint32_t reserved2;
ispds64_t ct_fcp_rsp_iudata;
} m2;
} rsp;
@@ -2440,10 +2412,10 @@
/*
* ct_flags values for CTIO7
*/
-#define CT7_DATA_IN 0x0002
-#define CT7_DATA_OUT 0x0001
#define CT7_NO_DATA 0x0000
-#define CT7_DATAMASK 0x003
+#define CT7_DATA_OUT 0x0001 /* *from* initiator */
+#define CT7_DATA_IN 0x0002 /* *to* initiator */
+#define CT7_DATAMASK 0x3
#define CT7_DSD_ENABLE 0x0004
#define CT7_CONF_STSFD 0x0010
#define CT7_EXPLCT_CONF 0x0020
@@ -2451,9 +2423,9 @@
#define CT7_FLAG_MODE1 0x0040
#define CT7_FLAG_MODE2 0x0080
#define CT7_FLAG_MMASK 0x00C0
-#define CT7_NOACK 0x0100
+#define CT7_NOACK 0x0100
#define CT7_TASK_ATTR_SHIFT 9
-#define CT7_CONFIRM 0x2000
+#define CT7_CONFIRM 0x2000
#define CT7_TERMINATE 0x4000
#define CT7_SENDSTATUS 0x8000
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/ispvar.h
--- a/head/sys/dev/isp/ispvar.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/ispvar.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/sys/dev/isp/ispvar.h 237537 2012-06-24 17:30:54Z mjacob =
$ */
+/* $FreeBSD: head/sys/dev/isp/ispvar.h 238869 2012-07-28 20:06:29Z mjacob =
$ */
/*-
* Copyright (c) 1997-2009 by Matthew Jacob
* All rights reserved.
@@ -77,7 +77,7 @@
*/
#define MAX_TARGETS 16
#ifndef MAX_FC_TARG
-#define MAX_FC_TARG 512
+#define MAX_FC_TARG 256
#endif
#define ISP_MAX_TARGETS(isp) (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS)
#define ISP_MAX_LUNS(isp) (isp)->isp_maxluns
@@ -400,10 +400,10 @@
* A device is 'autologin' if the firmware automatically logs into
* it (re-logins as needed). Basically, local private loop devices.
*
+ * PRLI word 3 parameters contains role as well as other things.
+ *
* The state is the current state of this entry.
*
- * Role is Initiator, Target, Both
- *
* Portid is obvious, as are node && port WWNs. The new_role and
* new_portid is for when we are pending a change.
*
@@ -412,17 +412,18 @@
* You should also never see anything with an initiator role
* with this set.
*/
+ uint16_t prli_word3; /* PRLI parameters */
+ uint16_t new_prli_word3; /* Incoming new PRLI parameters */
uint16_t dev_map_idx : 12,
autologin : 1, /* F/W does PLOGI/PLOGO */
state : 3;
- uint32_t reserved : 5,
+ uint32_t : 7,
target_mode : 1,
- roles : 2,
portid : 24;
uint32_t
+ : 6,
+ announced : 1,
dirty : 1, /* commands have been run */
- new_reserved : 5,
- new_roles : 2,
new_portid : 24;
uint64_t node_wwn;
uint64_t port_wwn;
@@ -447,6 +448,7 @@
=20
typedef struct {
uint32_t
+ fctape_enabled : 1,
link_active : 1,
sendmarker : 1,
role : 2,
@@ -680,21 +682,24 @@
/*
* ISP Runtime Configuration Options
*/
-#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */
-#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */
-#define ISP_CFG_TWOGB 0x20 /* force 2GB connection (23XX only) */
-#define ISP_CFG_ONEGB 0x10 /* force 1GB connection (23XX only) */
#define ISP_CFG_FULL_DUPLEX 0x01 /* Full Duplex (Fibre Channel only) */
-#define ISP_CFG_PORT_PREF 0x0C /* Mask for Port Prefs (2200 only) */
+#define ISP_CFG_PORT_PREF 0x0c /* Mask for Port Prefs (all FC except 2100)=
*/
#define ISP_CFG_LPORT 0x00 /* prefer {N/F}L-Port connection */
#define ISP_CFG_NPORT 0x04 /* prefer {N/F}-Port connection */
#define ISP_CFG_NPORT_ONLY 0x08 /* insist on {N/F}-Port connection */
-#define ISP_CFG_LPORT_ONLY 0x0C /* insist on {N/F}L-Port connection */
+#define ISP_CFG_LPORT_ONLY 0x0c /* insist on {N/F}L-Port connection */
+#define ISP_CFG_ONEGB 0x10 /* force 1GB connection (23XX only) */
+#define ISP_CFG_TWOGB 0x20 /* force 2GB connection (23XX only) */
+#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */
+#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */
+#define ISP_CFG_NOFCTAPE 0x100 /* disable FC-Tape */
+#define ISP_CFG_FCTAPE 0x200 /* enable FC-Tape */
#define ISP_CFG_OWNFSZ 0x400 /* override NVRAM frame size */
#define ISP_CFG_OWNLOOPID 0x800 /* override NVRAM loopid */
#define ISP_CFG_OWNEXCTHROTTLE 0x1000 /* override NVRAM execution throttle=
*/
#define ISP_CFG_FOURGB 0x2000 /* force 4GB connection (24XX only) */
#define ISP_CFG_EIGHTGB 0x4000 /* force 8GB connection (25XX only) */
+#define ISP_CFG_SIXTEENGB 0x8000 /* force 16GB connection (82XX only) */
=20
/*
* For each channel, the outer layers should know what role that channel
@@ -951,6 +956,7 @@
ISPASYNC_DEV_STAYED, /* FC Device Stayed */
ISPASYNC_DEV_GONE, /* FC Device Departure */
ISPASYNC_TARGET_NOTIFY, /* All target async notification */
+ ISPASYNC_TARGET_NOTIFY_ACK, /* All target notify ack required */
ISPASYNC_TARGET_ACTION, /* All target action requested */
ISPASYNC_FW_CRASH, /* All Firmware has crashed */
ISPASYNC_FW_RESTARTED /* All Firmware has been restarted */
@@ -987,8 +993,9 @@
#define ISP_LOGDEBUG1 0x20 /* log intermediate debug messages */
#define ISP_LOGDEBUG2 0x40 /* log most debug messages */
#define ISP_LOGDEBUG3 0x80 /* log high frequency debug messages */
-#define ISP_LOGSANCFG 0x100 /* log SAN configuration */
+#define ISP_LOG_SANCFG 0x100 /* log SAN configuration */
#define ISP_LOG_CWARN 0x200 /* log SCSI command "warnings" (e.g., check co=
nditions) */
+#define ISP_LOG_WARN1 0x400 /* log WARNS we might be interested at some ti=
me */
#define ISP_LOGTINFO 0x1000 /* log informational messages (target mode) */
#define ISP_LOGTDEBUG0 0x2000 /* log simple debug messages (target mode) */
#define ISP_LOGTDEBUG1 0x4000 /* log intermediate debug messages (target) =
*/
@@ -1063,7 +1070,8 @@
* XS_GET_RESID(xs, resid) sets the current residual count
* XS_STSP(xs) gets a pointer to the SCSI status byte ""
* XS_SNSP(xs) gets a pointer to the associate sense data
- * XS_SNSLEN(xs) gets the length of sense data storage
+ * XS_TOT_SNSLEN(xs) gets the total length of sense data storage
+ * XS_CUR_SNSLEN(xs) gets the currently used lenght of sense data storage
* XS_SNSKEY(xs) dereferences XS_SNSP to get the current stored Sense Key
* XS_SNSASC(xs) dereferences XS_SNSP to get the current stored Additiona=
l Sense Code
* XS_SNSASCQ(xs) dereferences XS_SNSP to get the current stored Addition=
al Sense Code Qualifier
@@ -1085,7 +1093,9 @@
* XS_NOERR(xs) there is no error currently set
* XS_INITERR(xs) initialize error state
*
- * XS_SAVE_SENSE(xs, sp, len) save sense data
+ * XS_SAVE_SENSE(xs, sp, total_len, this_len) save sense data (total and c=
urrent amount)
+ *
+ * XS_APPEND_SENSE(xs, sp, len) append more sense data
*
* XS_SENSE_VALID(xs) indicates whether sense is valid
*
@@ -1154,8 +1164,8 @@
* Enable/Disable/Modify a logical unit.
* (softc, cmd, bus, tgt, lun, cmd_cnt, inotify_cnt)
*/
-#define DFLT_CMND_CNT 0xfe /* unmonitored */
-#define DFLT_INOT_CNT 0xfe /* unmonitored */
+#define DFLT_CMND_CNT 0xff /* unmonitored */
+#define DFLT_INOT_CNT 0xff /* unmonitored */
int isp_lun_cmd(ispsoftc_t *, int, int, int, int, int);
=20
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ispfw/asm_2300.h
--- a/head/sys/dev/ispfw/asm_2300.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ispfw/asm_2300.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/ispfw/asm_2300.h 238806 2012-07-26 13:58:43Z mja=
cob $ */
/*-
* Copyright (C) 2001, 2002, 2003, 2004, 2005 by Qlogic, Inc.
* All rights reserved.
@@ -27,17 +27,17 @@
=20
/************************************************************************
* *
- * --- ISP2300 Initiator/Target Firmware --- *
- * with Fabric support (Public Loop), with expanded LUN *
- * addressing and 2K port logins. *
+ * --- ISP2300 Initiator/Target Firmware --- *
+ * with Fabric (Public Loop), Point-point, *
+ * expanded LUN addressing for FCTAPE, and 2K port logins *
* *
************************************************************************/
/*
- * Firmware Version 3.03.26 (16:54 Aug 14, 2007)
+ * Firmware Version 3.03.26 (16:58 Aug 14, 2007)
*/
static const uint16_t isp_2300_risc_code[] =3D {
- 0x0470, 0x0000, 0x0000, 0xd048, 0x0000, 0x0003, 0x0003, 0x001a,
- 0x0107, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
+ 0x0470, 0x0000, 0x0000, 0xddef, 0x0000, 0x0003, 0x0003, 0x001a,
+ 0x0117, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
@@ -50,487 +50,496 @@
0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78,
- 0x7883, 0x0004, 0x2089, 0x2bf2, 0x2051, 0x1800, 0x2a70, 0x20e1,
- 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e53, 0x2029,
- 0x3500, 0x2031, 0xffff, 0x2039, 0x34c8, 0x2021, 0x0200, 0x20e9,
+ 0x7883, 0x0004, 0x2089, 0x2c69, 0x2051, 0x1800, 0x2a70, 0x20e1,
+ 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e51, 0x2029,
+ 0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9,
0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,
0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,
0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,
0x4104, 0x8001, 0x1de0, 0x756a, 0x766e, 0x7766, 0x7472, 0x7476,
- 0x00e6, 0x2071, 0x1aa0, 0x2472, 0x00ee, 0x20a1, 0x1cc8, 0x716c,
+ 0x00e6, 0x2071, 0x1aac, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x716c,
0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,
0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x716c, 0x3400,
0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,
0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
- 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f19, 0x080c,
- 0x5f04, 0x080c, 0x9eae, 0x080c, 0x10d0, 0x080c, 0x12b8, 0x080c,
- 0x1a99, 0x080c, 0x0d58, 0x080c, 0x1055, 0x080c, 0x32cc, 0x080c,
- 0x75f0, 0x080c, 0x6836, 0x080c, 0x8273, 0x080c, 0x235c, 0x080c,
- 0x857b, 0x080c, 0x7c59, 0x080c, 0x2191, 0x080c, 0x22c5, 0x080c,
- 0x2351, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
+ 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f25, 0x080c,
+ 0x5fc1, 0x080c, 0xa333, 0x080c, 0x10dc, 0x080c, 0x12c4, 0x080c,
+ 0x1ae1, 0x080c, 0x0d55, 0x080c, 0x1061, 0x080c, 0x3368, 0x080c,
+ 0x7660, 0x080c, 0x695d, 0x080c, 0x83d5, 0x080c, 0x23a4, 0x080c,
+ 0x874c, 0x080c, 0x7cf9, 0x080c, 0x21d9, 0x080c, 0x230d, 0x080c,
+ 0x2399, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833,
0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
- 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1800, 0x7003,
+ 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x7003,
0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c,
- 0x4b82, 0x080c, 0x32f3, 0x080c, 0x7661, 0x080c, 0x6d5c, 0x080c,
- 0x829f, 0x080c, 0x2b09, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
- 0x0ade, 0x093e, 0x0b9e, 0x0d57, 0x0d57, 0x0d57, 0x080c, 0x0dc4,
+ 0x4c32, 0x080c, 0x338f, 0x080c, 0x76d1, 0x080c, 0x6e62, 0x080c,
+ 0x8401, 0x080c, 0x2b72, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
+ 0x0ade, 0x093e, 0x0b9e, 0x0d54, 0x0d54, 0x0d54, 0x080c, 0x0dc3,
0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001,
- 0x1904, 0x0ab1, 0x080c, 0x0ecd, 0x080c, 0x72e5, 0x0150, 0x080c,
- 0x7308, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
- 0x0478, 0x080c, 0x7212, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1,
- 0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x8253, 0x080c,
- 0x8245, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003,
+ 0x1904, 0x0ab1, 0x080c, 0x0e93, 0x080c, 0x7351, 0x0150, 0x080c,
+ 0x7374, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
+ 0x0478, 0x080c, 0x727e, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1,
+ 0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x83b5, 0x080c,
+ 0x83a7, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003,
0x0001, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011,
- 0x7176, 0x080c, 0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x2011,
- 0x5d5f, 0x080c, 0x835e, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0,
- 0x080c, 0x5607, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1,
- 0x2011, 0x5d5f, 0x080c, 0x835e, 0x2011, 0x7176, 0x080c, 0x835e,
- 0x2011, 0x7169, 0x080c, 0x8474, 0x2001, 0x0265, 0x2001, 0x0205,
+ 0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0,
+ 0x080c, 0x56c4, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1,
+ 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x2011, 0x71cd, 0x080c, 0x84c2,
+ 0x2011, 0x71c0, 0x080c, 0x85e0, 0x2001, 0x0265, 0x2001, 0x0205,
0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1983,
- 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5eac,
- 0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x72ed,
+ 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5f69,
+ 0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x7359,
0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011,
- 0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x29ae,
- 0x080c, 0x4abd, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c,
- 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x98cb, 0x2011, 0x0004, 0x080c,
- 0xb965, 0x080c, 0x664c, 0x080c, 0x72e5, 0x1120, 0x080c, 0x29f2,
- 0x02e0, 0x0400, 0x080c, 0x5eb3, 0x0140, 0x7093, 0x0001, 0x70cf,
- 0x0000, 0x080c, 0x57d9, 0x0804, 0x0ab1, 0x080c, 0x55a7, 0xd094,
- 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x55ab,
- 0xd0d4, 0x1118, 0x080c, 0x29f2, 0x1270, 0x2011, 0x180c, 0x2204,
- 0xc0bc, 0x00a8, 0x080c, 0x55ab, 0xd0d4, 0x1db8, 0x2011, 0x180c,
+ 0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x2a17,
+ 0x080c, 0x4b6d, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c,
+ 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x9b9c, 0x2011, 0x0004, 0x080c,
+ 0xc1dd, 0x080c, 0x6758, 0x080c, 0x7351, 0x1120, 0x080c, 0x2a5b,
+ 0x02e0, 0x0400, 0x080c, 0x5f70, 0x0140, 0x7093, 0x0001, 0x70cf,
+ 0x0000, 0x080c, 0x5896, 0x0804, 0x0ab1, 0x080c, 0x5664, 0xd094,
+ 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5668,
+ 0xd0d4, 0x1118, 0x080c, 0x2a5b, 0x1270, 0x2011, 0x180c, 0x2204,
+ 0xc0bc, 0x00a8, 0x080c, 0x5668, 0xd0d4, 0x1db8, 0x2011, 0x180c,
0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012,
- 0x080c, 0x673e, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012,
- 0x080c, 0x6704, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b,
- 0x0000, 0x080c, 0x72e5, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c,
- 0xbc7a, 0x0050, 0x080c, 0xbc7a, 0x70d8, 0xd09c, 0x1128, 0x70ac,
- 0x9005, 0x0110, 0x080c, 0x5e89, 0x70e3, 0x0000, 0x70df, 0x0000,
- 0x70a3, 0x0000, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204,
- 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x72e5, 0x1178, 0x9016, 0x0016,
- 0x080c, 0x27b7, 0x2019, 0x194a, 0x211a, 0x001e, 0x705b, 0xffff,
- 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x194a, 0x201b,
+ 0x080c, 0x6865, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012,
+ 0x080c, 0x682b, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b,
+ 0x0000, 0x080c, 0x7351, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c,
+ 0xc617, 0x0050, 0x080c, 0xc617, 0x70d8, 0xd09c, 0x1128, 0x70ac,
+ 0x9005, 0x0110, 0x080c, 0x5f46, 0x70e3, 0x0000, 0x70df, 0x0000,
+ 0x70a3, 0x0000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204,
+ 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x7351, 0x1178, 0x9016, 0x0016,
+ 0x080c, 0x2820, 0x2019, 0x1949, 0x211a, 0x001e, 0x705b, 0xffff,
+ 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x1949, 0x201b,
0x0000, 0x2079, 0x185e, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da,
- 0x080c, 0x72e5, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001,
- 0x080c, 0xb965, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002,
+ 0x080c, 0x7351, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001,
+ 0x080c, 0xc1dd, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002,
0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a,
- 0x00fe, 0x080c, 0x2e5f, 0x2011, 0x0005, 0x080c, 0x99d6, 0x080c,
- 0x8c37, 0x080c, 0x72e5, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
- 0x080c, 0x27b7, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7,
+ 0x00fe, 0x080c, 0x2ed6, 0x2011, 0x0005, 0x080c, 0x9ca7, 0x080c,
+ 0x8e38, 0x080c, 0x7351, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
+ 0x080c, 0x2820, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7,
0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100,
0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011,
- 0x0005, 0x080c, 0x99d6, 0x080c, 0x8c37, 0x080c, 0x72e5, 0x0148,
- 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x27b7, 0x61e2, 0x001e,
- 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x72e5,
- 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x72e5,
+ 0x0005, 0x080c, 0x9ca7, 0x080c, 0x8e38, 0x080c, 0x7351, 0x0148,
+ 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2820, 0x61e2, 0x001e,
+ 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351,
+ 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351,
0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180,
- 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x3162,
+ 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x31fe,
0x8108, 0x1f04, 0x0ac5, 0x707b, 0x0000, 0x707c, 0x9084, 0x00ff,
0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126,
0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0b9b, 0x70a8,
- 0x9086, 0xffff, 0x0130, 0x080c, 0x2e5f, 0x080c, 0x8c37, 0x0804,
+ 0x9086, 0xffff, 0x0130, 0x080c, 0x2ed6, 0x080c, 0x8e38, 0x0804,
0x0b9b, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084, 0x0548,
0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, 0x0508,
- 0x080c, 0x31c5, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c,
- 0x2fd8, 0x080c, 0x8c37, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011,
- 0x0001, 0x080c, 0xbef8, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c,
- 0x3012, 0x080c, 0x8c37, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904,
+ 0x080c, 0x3261, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c,
+ 0x306e, 0x080c, 0x8e38, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011,
+ 0x0001, 0x080c, 0xc8ce, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c,
+ 0x30a8, 0x080c, 0x8e38, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904,
0x0b9b, 0x70a4, 0x9005, 0x1904, 0x0b9b, 0x70d8, 0xd0a4, 0x0118,
- 0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x6704, 0x1904, 0x0b9b, 0x080c,
- 0x6757, 0x1904, 0x0b9b, 0x080c, 0x673e, 0x01c0, 0x0156, 0x00c6,
- 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6411, 0x1118, 0xb800,
+ 0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x682b, 0x1904, 0x0b9b, 0x080c,
+ 0x687e, 0x1904, 0x0b9b, 0x080c, 0x6865, 0x01c0, 0x0156, 0x00c6,
+ 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1118, 0xb800,
0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b3b, 0x00ce, 0x015e,
0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b9b, 0x0006, 0x2001,
- 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f89,
- 0x2011, 0x19aa, 0x080c, 0x0f89, 0x7030, 0xc08c, 0x7032, 0x7003,
- 0x0003, 0x70ab, 0xffff, 0x080c, 0x0ecd, 0x9006, 0x080c, 0x264c,
- 0x080c, 0x31c5, 0x0118, 0x080c, 0x4c5a, 0x0050, 0x0036, 0x0046,
- 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e, 0x003e,
- 0x00f6, 0x2079, 0x0100, 0x080c, 0x7308, 0x0150, 0x080c, 0x72e5,
+ 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f95,
+ 0x2011, 0x19aa, 0x080c, 0x0f95, 0x7030, 0xc08c, 0x7032, 0x7003,
+ 0x0003, 0x70ab, 0xffff, 0x080c, 0x0e75, 0x9006, 0x080c, 0x26b1,
+ 0x080c, 0x3261, 0x0118, 0x080c, 0x4d0a, 0x0050, 0x0036, 0x0046,
+ 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4d24, 0x004e, 0x003e,
+ 0x00f6, 0x2079, 0x0100, 0x080c, 0x7374, 0x0150, 0x080c, 0x7351,
0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a,
0x00fe, 0x2001, 0x19c5, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011,
- 0x0000, 0x080c, 0x99d6, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c,
- 0x8c37, 0x080c, 0x8d06, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
+ 0x0000, 0x080c, 0x9ca7, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c,
+ 0x8e38, 0x080c, 0x8f0e, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c,
- 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x7940, 0x918c,
+ 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x7940, 0x918c,
0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c,
0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac,
0x1904, 0x0c2b, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518, 0x080c,
- 0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x0001,
- 0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006, 0x080c,
- 0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85, 0x1d50,
- 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x27eb,
- 0x0804, 0x0d0a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118,
- 0x080c, 0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6,
- 0x080c, 0x75dc, 0x080c, 0x7212, 0x0058, 0x080c, 0x72e5, 0x0140,
- 0x2009, 0x00f8, 0x080c, 0x5e72, 0x7843, 0x0090, 0x7843, 0x0010,
- 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x72e5, 0x0138,
- 0x7824, 0xd0ac, 0x1904, 0x0d0f, 0x1f04, 0x0c0a, 0x0070, 0x7824,
- 0x080c, 0x72ff, 0x0118, 0xd0ac, 0x1904, 0x0d0f, 0x9084, 0x1800,
- 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d0f, 0x2001, 0x0001, 0x080c,
- 0x264c, 0x0804, 0x0d22, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518,
- 0x080c, 0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001,
- 0x0001, 0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006,
- 0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85,
+ 0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001,
+ 0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006, 0x080c,
+ 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee, 0x1d50,
+ 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2854,
+ 0x0804, 0x0d0b, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118,
+ 0x080c, 0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656,
+ 0x080c, 0x764c, 0x080c, 0x727e, 0x0058, 0x080c, 0x7351, 0x0140,
+ 0x2009, 0x00f8, 0x080c, 0x5f2f, 0x7843, 0x0090, 0x7843, 0x0010,
+ 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x7351, 0x0138,
+ 0x7824, 0xd0ac, 0x1904, 0x0d10, 0x1f04, 0x0c0a, 0x0070, 0x7824,
+ 0x080c, 0x736b, 0x0118, 0xd0ac, 0x1904, 0x0d10, 0x9084, 0x1800,
+ 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d10, 0x2001, 0x0001, 0x080c,
+ 0x26b1, 0x0804, 0x0d23, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518,
+ 0x080c, 0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001,
+ 0x0001, 0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006,
+ 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee,
0x1d50, 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c,
- 0x27eb, 0x0804, 0x0d0a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
- 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000,
- 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x8454,
+ 0x2854, 0x0804, 0x0d0b, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
+ 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000,
+ 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x85c0,
0x1f04, 0x0c64, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
- 0x793a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118, 0x080c,
- 0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6, 0x080c,
- 0x75dc, 0x080c, 0x7212, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5e72,
+ 0x793a, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118, 0x080c,
+ 0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656, 0x080c,
+ 0x764c, 0x080c, 0x727e, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f2f,
0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c8a, 0x7850, 0x9085, 0x1400,
- 0x7852, 0x080c, 0x72e5, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
- 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x8454, 0x7820, 0xd09c,
- 0x1580, 0x080c, 0x72e5, 0x0904, 0x0cef, 0x7824, 0xd0ac, 0x1904,
- 0x0d0f, 0x080c, 0x7308, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421,
- 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x9084,
- 0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004,
- 0xd0fc, 0x0110, 0x080c, 0x0d34, 0x8421, 0x1158, 0x1d04, 0x0cca,
- 0x080c, 0x8454, 0x080c, 0x75e6, 0x080c, 0x75dc, 0x7003, 0x0001,
- 0x04f0, 0x8319, 0x1948, 0x1d04, 0x0cd7, 0x080c, 0x8454, 0x2009,
- 0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b,
- 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2a6e, 0x7924,
- 0x080c, 0x2a8d, 0xd19c, 0x0110, 0x080c, 0x29ae, 0x00d8, 0x080c,
- 0x72f6, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x72bd, 0x7003,
- 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x080c,
- 0x72ff, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,
- 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x264c, 0x0078, 0x2009,
- 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906,
- 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085,
- 0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006, 0x78f2,
- 0x015e, 0x003e, 0x000e, 0x080c, 0x55b6, 0x090c, 0x0e64, 0x012e,
- 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046,
- 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c,
- 0x8454, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e,
- 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189f, 0x7004,
- 0x9086, 0x0001, 0x1110, 0x080c, 0x32f3, 0x00ee, 0x0005, 0x0005,
- 0x2a70, 0x2061, 0x1988, 0x2063, 0x0003, 0x6007, 0x0003, 0x600b,
- 0x001a, 0x600f, 0x0107, 0x2001, 0x1959, 0x900e, 0x2102, 0x7192,
- 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff,
- 0x0008, 0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbc7a,
- 0x2061, 0x1949, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f,
- 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0,
- 0x2061, 0x1951, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200,
- 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965,
- 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020,
- 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6411, 0x1178,
- 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00,
- 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108,
- 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079,
- 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc6,
- 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e,
- 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886,
- 0x3900, 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c,
- 0x78b2, 0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004,
- 0x78ba, 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000,
- 0x0156, 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84,
- 0x7a08, 0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c,
- 0x226a, 0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016,
- 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386,
- 0x1a9e, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead,
- 0x2019, 0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000,
- 0x2069, 0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a,
- 0x8d68, 0x8318, 0x1f04, 0x0e25, 0x002e, 0x003e, 0x00de, 0x015e,
- 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130,
- 0x2001, 0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a,
- 0x2003, 0x0002, 0x2003, 0x1001, 0x080c, 0x55b6, 0x1110, 0x080c,
- 0x0e9b, 0x0cd0, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004,
- 0x9084, 0x0600, 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000,
- 0x2001, 0x017f, 0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1826,
- 0x2f04, 0x8000, 0x207a, 0x080c, 0x2a85, 0x1150, 0x0006, 0x2001,
- 0x1974, 0x2004, 0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010,
- 0x9082, 0x000f, 0x0258, 0x9006, 0x207a, 0x2079, 0x1829, 0x2f04,
- 0x9084, 0x0001, 0x9086, 0x0001, 0x207a, 0x0090, 0x2079, 0x1829,
- 0x2f7c, 0x8fff, 0x1138, 0x0026, 0x2011, 0x0080, 0x080c, 0x0ee1,
- 0x002e, 0x0030, 0x0026, 0x2011, 0x0000, 0x080c, 0x0ee1, 0x002e,
- 0x000e, 0x00fe, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c,
- 0x0ee1, 0x20a9, 0x0fff, 0x080c, 0x0f02, 0x2011, 0x0040, 0x04c9,
- 0x20a9, 0x0fff, 0x080c, 0x0f02, 0x0c80, 0x2011, 0x0040, 0x0488,
- 0x2011, 0x0080, 0x0470, 0x0005, 0x0026, 0x70eb, 0x0000, 0x04b1,
- 0x1148, 0x080c, 0x2a85, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011,
- 0x8282, 0x0040, 0x080c, 0x2a85, 0x1118, 0x2011, 0xcdc5, 0x0010,
- 0x2011, 0xcac2, 0x0441, 0x002e, 0x0005, 0x080c, 0x55b6, 0x1140,
- 0x0026, 0x2001, 0x1800, 0x2004, 0x9084, 0x0007, 0x0013, 0x002e,
- 0x0005, 0x0ecc, 0x0eb0, 0x0eb0, 0x0ead, 0x0e64, 0x0eb0, 0x0eb0,
- 0x0e64, 0x0016, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8,
- 0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, 0x0005, 0x2001, 0x1839,
- 0x2004, 0xd0dc, 0x0005, 0x9e86, 0x1800, 0x190c, 0x0dc4, 0x70e4,
- 0xd0e4, 0x0108, 0xc2e5, 0x72e6, 0xd0e4, 0x1118, 0x9294, 0x00c0,
- 0x0c01, 0x0005, 0x1d04, 0x0f02, 0x2091, 0x6000, 0x1f04, 0x0f02,
- 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0,
- 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d, 0x894d, 0x000e,
- 0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x188e, 0x600b,
- 0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000, 0x2009,
- 0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555,
- 0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800, 0x9306,
- 0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98,
- 0x000e, 0x200f, 0x2001, 0x189e, 0x928a, 0x000e, 0x1638, 0x928a,
- 0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202, 0x9006,
- 0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff, 0x6003,
- 0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280, 0x0001,
- 0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0,
- 0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011, 0x000e,
- 0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f09, 0x2100,
- 0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036, 0x3518,
- 0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e,
- 0x0005, 0x20e9, 0x0001, 0x71b4, 0x81ff, 0x11c0, 0x9006, 0x2009,
- 0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009,
- 0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001, 0x7078,
- 0x8007, 0x717c, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c,
- 0x23a0, 0x900e, 0x080c, 0x0da4, 0x2001, 0x0000, 0x810f, 0x20a9,
- 0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000,
- 0x0006, 0x080c, 0x1033, 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071,
- 0x1800, 0x080c, 0x10ac, 0x090c, 0x0dc4, 0x00ee, 0x0005, 0x0086,
- 0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9,
- 0x2071, 0x1800, 0x73bc, 0x702c, 0x9016, 0x9045, 0x0158, 0x8210,
- 0x9906, 0x090c, 0x0dc4, 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0dc4,
- 0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e,
- 0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
- 0x1911, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128, 0x9906,
- 0x090c, 0x0dc4, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e,
- 0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000, 0x70bc,
- 0x8001, 0x0270, 0x70be, 0x702c, 0x2048, 0x9085, 0x0001, 0xa800,
- 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005,
- 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800,
- 0x70bc, 0x90ca, 0x0040, 0x0268, 0x8001, 0x70be, 0x702c, 0x2048,
- 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee,
- 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016,
- 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0,
- 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
- 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
- 0x080c, 0x8245, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026,
- 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800,
- 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120,
- 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7000, 0x9005,
- 0x11a0, 0x2001, 0x04d4, 0xa802, 0x2048, 0x2009, 0x3500, 0x8940,
- 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0800,
- 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7104,
- 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b, 0x831b,
- 0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900, 0xa802,
- 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130, 0x2848,
- 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071,
- 0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00,
- 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982,
- 0x0440, 0x0278, 0x9982, 0x04d4, 0x0288, 0x9982, 0x0800, 0x1270,
- 0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x188e, 0x7010, 0x9902,
- 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8,
- 0x00e6, 0x2071, 0x19f7, 0x7007, 0x0000, 0x9006, 0x701e, 0x7022,
- 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012, 0x2071,
- 0x0080, 0x9006, 0x20a9, 0x0040, 0x7022, 0x1f04, 0x10e4, 0x702b,
- 0x0020, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0xa073,
- 0x0000, 0x2071, 0x19f7, 0x701c, 0x9088, 0x1a01, 0x280a, 0x8000,
- 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0dc4, 0x7004,
- 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe, 0x00ee,
- 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071, 0x19f7,
- 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021, 0x00fe,
- 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110, 0x7007,
- 0x0006, 0x7000, 0x0002, 0x112d, 0x112b, 0x112b, 0x112b, 0x12a7,
- 0x12a7, 0x12a7, 0x12a7, 0x080c, 0x0dc4, 0x701c, 0x7120, 0x9106,
- 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007,
- 0x0000, 0x0005, 0x0096, 0x9180, 0x1a01, 0x2004, 0x700a, 0x2048,
- 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa890, 0x7802,
- 0xa894, 0x7806, 0xa898, 0x780a, 0xa89c, 0x780e, 0xa87c, 0x700e,
- 0xa874, 0x7016, 0xa878, 0x701a, 0xa86c, 0x009e, 0xd084, 0x0120,
- 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005,
- 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210,
- 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b, 0x0020,
- 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0136,
- 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000,
- 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182,
- 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203,
- 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001, 0x015e,
- 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x0016, 0x2009, 0x19f7,
- 0x2104, 0xc095, 0x200a, 0x080c, 0x110a, 0x001e, 0x0005, 0x0016,
- 0x00e6, 0x2071, 0x19f7, 0x00f6, 0x2079, 0x0080, 0x792c, 0xd1bc,
- 0x190c, 0x0dbd, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700,
- 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x111b, 0x11c5,
- 0x11f9, 0x0dc4, 0x0dc4, 0x12b3, 0x0dc4, 0x918c, 0x0700, 0x1550,
- 0x0136, 0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1,
- 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005,
- 0x3400, 0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005, 0x0578,
- 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x1160, 0x0005, 0x7008,
- 0x0096, 0x2048, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x080c,
- 0x111b, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e,
- 0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180, 0x7800,
- 0x7802, 0x7804, 0x7806, 0x080c, 0x1175, 0x0005, 0x7008, 0x0096,
- 0x2048, 0xa873, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080, 0x0096,
- 0x7008, 0x2048, 0x7800, 0xa892, 0x7804, 0xa896, 0x7808, 0xa89a,
- 0x780c, 0xa89e, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x0096,
- 0x00d6, 0x7008, 0x2048, 0x2001, 0x18ba, 0x2004, 0x9906, 0x1128,
- 0xa8a0, 0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096,
- 0x00d6, 0x7008, 0x2048, 0x0081, 0x0150, 0xa8a0, 0x0086, 0x2940,
- 0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x110a, 0x0005, 0x00de,
- 0x009e, 0x080c, 0x110a, 0x0005, 0xa8ac, 0xd08c, 0x0005, 0x0096,
- 0xa0a4, 0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0130,
- 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0xa898, 0x908e,
- 0x006b, 0x090c, 0x469d, 0x080c, 0x6b11, 0xa0a3, 0x0000, 0xa0a7,
- 0x0000, 0x2848, 0x080c, 0x1033, 0x009e, 0x0005, 0x00a6, 0xa0a4,
- 0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0128, 0xa87f,
- 0x0001, 0xa887, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005,
- 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f,
- 0x9084, 0xffc0, 0x9080, 0x0002, 0xa07a, 0xa176, 0xb000, 0xa07e,
- 0x2810, 0x080c, 0x10eb, 0x00c8, 0xa980, 0xa898, 0x0016, 0x0006,
- 0x080c, 0x6b11, 0x000e, 0x001e, 0xd1a4, 0x0128, 0x00c6, 0x2060,
- 0x080c, 0x9f18, 0x00ce, 0x7008, 0x2048, 0xa8a3, 0x0000, 0xa8a7,
- 0x0000, 0x080c, 0x1033, 0x080c, 0x110a, 0x00ae, 0x0005, 0x0126,
- 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094,
- 0x7002, 0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x111b, 0x0005,
- 0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a41, 0x7003,
- 0x0000, 0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003,
- 0x780f, 0x0000, 0x20a9, 0x0259, 0x2061, 0xd387, 0x2c0d, 0x7912,
- 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12ce, 0x7807, 0x0007,
- 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803,
- 0x0000, 0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a42,
- 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab,
- 0x0002, 0x7807, 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827,
- 0x0031, 0x782b, 0x1a64, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001,
- 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a64,
- 0x602f, 0x1cc8, 0x2001, 0x1819, 0x2004, 0x9082, 0x1cc8, 0x6032,
- 0x603b, 0x1f70, 0x2001, 0x31cc, 0xd0fc, 0x190c, 0x0dc4, 0x2001,
- 0x1810, 0x2004, 0xd0c4, 0x1128, 0x2001, 0x0003, 0x2004, 0xd0d4,
- 0x1118, 0x783f, 0x31cc, 0x0020, 0x9084, 0xc000, 0x783f, 0xb1cc,
- 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0030,
- 0x190c, 0x0dbd, 0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15f0,
- 0x908a, 0x0024, 0x1a0c, 0x0dc4, 0x0023, 0x012e, 0x0005, 0x012e,
- 0x0005, 0x1366, 0x1366, 0x137d, 0x1382, 0x1386, 0x138b, 0x13b3,
- 0x13b7, 0x13c5, 0x13c9, 0x1366, 0x1452, 0x1456, 0x14c6, 0x1366,
- 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366,
- 0x1366, 0x1366, 0x1366, 0x1366, 0x138d, 0x1366, 0x1366, 0x1366,
- 0x1366, 0x1366, 0x1366, 0x136a, 0x1368, 0x1366, 0x080c, 0x0dc4,
- 0x080c, 0x0dbd, 0x080c, 0x14cd, 0x2009, 0x1a59, 0x2104, 0x8000,
- 0x200a, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005, 0x2009, 0x0048,
- 0x2060, 0x080c, 0x9f88, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5,
- 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x14cd,
- 0x080c, 0x1636, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x14cd, 0x2060,
- 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048,
- 0x080c, 0x9f88, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8,
- 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,
- 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x14d2, 0x2001, 0x0307,
- 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c,
- 0x14cd, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e,
- 0x2009, 0x0048, 0x080c, 0x9f88, 0x0005, 0x080c, 0x14cd, 0x080c,
- 0x0dc4, 0x080c, 0x14cd, 0x080c, 0x143d, 0x7827, 0x0018, 0x79ac,
- 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065,
- 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400,
- 0x7004, 0x9005, 0x1180, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b,
- 0x0000, 0xd1bc, 0x090c, 0x0dc4, 0x2001, 0x020d, 0x2003, 0x0050,
- 0x2003, 0x0020, 0x0478, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c,
- 0x1456, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0dc4,
- 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x01d8, 0x080c,
- 0x7d22, 0x080c, 0x199b, 0x080c, 0xb955, 0x0158, 0xa9b0, 0xa936,
- 0xa9b4, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa884, 0xc0bd,
- 0xa886, 0xa984, 0x9184, 0x0020, 0x1120, 0xc1ad, 0xa986, 0x080c,
- 0xb5c5, 0x0005, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201,
- 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd314, 0xd5a4, 0x1118,
- 0x080c, 0x14d2, 0x0005, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005,
- 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076,
- 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003,
- 0x0120, 0x2001, 0x0016, 0x080c, 0x1553, 0x00fe, 0x007e, 0x006e,
- 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184,
- 0x0004, 0x190c, 0x0dc4, 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c,
- 0x7106, 0x0016, 0x080c, 0x1619, 0x001e, 0x0148, 0x2001, 0x020d,
- 0x2003, 0x0050, 0x2003, 0x0020, 0x080c, 0x14d2, 0x0005, 0x81ff,
- 0x190c, 0x0dc4, 0x0005, 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4,
- 0x0016, 0x00e6, 0x1904, 0x14bb, 0x2071, 0x0200, 0x080c, 0x160d,
- 0x080c, 0x1619, 0x05a8, 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048,
- 0xa868, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e,
- 0x0048, 0x1548, 0x601c, 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c,
- 0x1679, 0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, 0x17bd, 0x00fe,
- 0x2009, 0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005,
- 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040,
- 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12de, 0x7803, 0x0001,
- 0x00ee, 0x001e, 0x0005, 0x080c, 0x1619, 0x0dd0, 0x2001, 0x020d,
- 0x2003, 0x0050, 0x2003, 0x0020, 0x0069, 0x0c90, 0x0031, 0x2060,
- 0x2009, 0x0053, 0x080c, 0x9f88, 0x0005, 0x7808, 0xd09c, 0x0de8,
- 0x7820, 0x0005, 0x080c, 0x143d, 0x00d6, 0x2069, 0x0200, 0x2009,
- 0x01f4, 0x8109, 0x0520, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d,
- 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff,
- 0x0180, 0x9182, 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8,
- 0x810c, 0x810c, 0x810c, 0x080c, 0x153f, 0x6827, 0x0001, 0x8109,
- 0x1dd0, 0x080c, 0x153f, 0x6827, 0x0002, 0x080c, 0x153f, 0x6804,
- 0x9005, 0x1170, 0x682c, 0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014,
- 0x0120, 0x6830, 0x9084, 0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8,
- 0x79b8, 0xd1ec, 0x1130, 0x0870, 0x080c, 0x7d22, 0x080c, 0x199b,
- 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b,
- 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003,
- 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400,
- 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015, 0x782b, 0x0000, 0x7803,
- 0x0001, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005, 0x6824,
- 0x9084, 0x0003, 0x1de0, 0x0005, 0x2079, 0x0001, 0x000e, 0x00f6,
- 0x0804, 0x0dc6, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830,
- 0x9086, 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808,
- 0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x132a, 0x00ce,
- 0x002e, 0x001e, 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b,
- 0x8080, 0x0059, 0x1118, 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c,
- 0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x2009, 0x180c, 0x2104,
- 0xc0f4, 0x200a, 0x2009, 0xff00, 0x8109, 0x0904, 0x15d1, 0x7a18,
- 0x9284, 0x0030, 0x0904, 0x15cc, 0x9284, 0x0048, 0x9086, 0x0008,
- 0x1904, 0x15cc, 0x2001, 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006,
- 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x0126, 0x2091, 0x2800,
- 0x00f6, 0x0026, 0x0016, 0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x080c, 0x8689, 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e,
- 0x014e, 0x013e, 0x01de, 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004,
- 0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
- 0x0156, 0x00f6, 0x0016, 0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x080c, 0x1d94, 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e,
- 0x01de, 0x01ce, 0x012e, 0x000e, 0x7818, 0xd0bc, 0x1904, 0x157c,
- 0x0005, 0x2001, 0x180c, 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284,
- 0x0030, 0x0508, 0x9284, 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001,
- 0x19d3, 0x2004, 0x9005, 0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086,
- 0x0000, 0x0188, 0x2009, 0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a,
- 0x080c, 0x96a1, 0x2009, 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009,
- 0xff00, 0x0804, 0x157c, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936,
- 0x7a3a, 0x781b, 0x8080, 0x080c, 0x1575, 0x1108, 0x0005, 0x792c,
- 0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x7037, 0x0001, 0x7150,
- 0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060,
- 0x0005, 0x0006, 0x0046, 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002,
- 0x7058, 0x9084, 0xff00, 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021,
- 0x1a5a, 0x2404, 0x8000, 0x0208, 0x2022, 0x080c, 0x7d22, 0x080c,
- 0x199b, 0x9006, 0x00ee, 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108,
- 0x0005, 0x00e6, 0x0016, 0x2071, 0x0200, 0x0879, 0x6120, 0x9186,
- 0x0000, 0x0560, 0x9186, 0x0002, 0x0548, 0x7358, 0x745c, 0x6014,
- 0x905d, 0x0520, 0x2b48, 0xab42, 0xac3e, 0x2001, 0x1880, 0x2004,
- 0xd0b4, 0x1138, 0x601c, 0xd0e4, 0x1120, 0xa83b, 0x7fff, 0xa837,
- 0xffff, 0x080c, 0x1f90, 0x1190, 0x080c, 0x181a, 0x2a00, 0xa816,
+ 0x7852, 0x080c, 0x7351, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
+ 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x85c0, 0x7820, 0xd09c,
+ 0x1588, 0x080c, 0x7351, 0x0904, 0x0cf0, 0x7824, 0xd0ac, 0x1904,
+ 0x0d10, 0x080c, 0x7374, 0x1530, 0x0046, 0x2021, 0x0320, 0x8421,
+ 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824, 0x9084,
+ 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,
+ 0x9084, 0x9000, 0x0110, 0x080c, 0x0d31, 0x8421, 0x1158, 0x1d04,
+ 0x0ccb, 0x080c, 0x85c0, 0x080c, 0x7656, 0x080c, 0x764c, 0x7003,
+ 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cd8, 0x080c, 0x85c0,
+ 0x2009, 0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178,
+ 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2ad7,
+ 0x7924, 0x080c, 0x2af6, 0xd19c, 0x0110, 0x080c, 0x2a17, 0x00d8,
+ 0x080c, 0x7362, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7329,
+ 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824,
+ 0x080c, 0x736b, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950,
+ 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x26b1, 0x0078,
+ 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002,
+ 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850,
+ 0x9085, 0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006,
+ 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x001e,
+ 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6,
+ 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x85c0, 0x015e, 0x00fe,
+ 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e,
+ 0x0005, 0x00e6, 0x2071, 0x189f, 0x7004, 0x9086, 0x0001, 0x1110,
+ 0x080c, 0x338f, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, 0x1988,
+ 0x2063, 0x0003, 0x6007, 0x0003, 0x600b, 0x001a, 0x600f, 0x0117,
+ 0x2001, 0x1958, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100, 0x2004,
+ 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, 0x715a, 0x7063,
+ 0xffff, 0x717a, 0x717e, 0x080c, 0xc617, 0x70e7, 0x00c0, 0x2061,
+ 0x1948, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200,
+ 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061,
+ 0x1950, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013,
+ 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965, 0x6003,
+ 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
+ 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x64fc, 0x1178, 0xb804,
+ 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6,
+ 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186,
+ 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079, 0x0000,
+ 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc5, 0x0006,
+ 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e, 0x7882,
+ 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886, 0x3900,
+ 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c, 0x78b2,
+ 0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004, 0x78ba,
+ 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156,
+ 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84, 0x7a08,
+ 0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a,
+ 0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016, 0x7808,
+ 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1aaa,
+ 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019,
+ 0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069,
+ 0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68,
+ 0x8318, 0x1f04, 0x0e24, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079,
+ 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
+ 0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130, 0x2001,
+ 0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a, 0x2003,
+ 0x0002, 0x2003, 0x1001, 0x080c, 0x5673, 0x1108, 0x0099, 0x0cd8,
+ 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600,
+ 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f,
+ 0x2102, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0eed,
+ 0x20a9, 0x0900, 0x080c, 0x0f0e, 0x2011, 0x0040, 0x080c, 0x0eed,
+ 0x20a9, 0x0900, 0x080c, 0x0f0e, 0x0c78, 0x0026, 0x080c, 0x0efa,
+ 0x1118, 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214, 0x9294,
+ 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010, 0x2011,
+ 0x6840, 0xd0e4, 0x70eb, 0x0000, 0x1120, 0x70eb, 0x0fa0, 0x080c,
+ 0x0eff, 0x002e, 0x0005, 0x0026, 0x080c, 0x0efa, 0x0128, 0xd0a4,
+ 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c, 0x0eff,
+ 0x002e, 0x0005, 0x0026, 0x70eb, 0x0000, 0x080c, 0x0efa, 0x1148,
+ 0x080c, 0x2aee, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011, 0x8282,
+ 0x0040, 0x080c, 0x2aee, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011,
+ 0xcac2, 0x080c, 0x0eff, 0x002e, 0x0005, 0x00e6, 0x0006, 0x2071,
+ 0x1800, 0xd0b4, 0x70e4, 0x1110, 0xc0e4, 0x0048, 0x0006, 0x3b00,
+ 0x9084, 0xff3f, 0x20d8, 0x000e, 0x70eb, 0x0000, 0xc0e5, 0x0079,
+ 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70e4,
+ 0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70e6,
+ 0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0ebc, 0x0e93, 0x0e93,
+ 0x0e75, 0x0ea2, 0x0e93, 0x0e93, 0x0ea2, 0x0016, 0x3b08, 0x3a00,
+ 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0,
+ 0x001e, 0x0005, 0x2001, 0x1839, 0x2004, 0xd0dc, 0x0005, 0x9e86,
+ 0x1800, 0x190c, 0x0dc3, 0x70e4, 0xd0e4, 0x0108, 0xc2e5, 0x72e6,
+ 0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0f0e,
+ 0x2091, 0x6000, 0x1f04, 0x0f0e, 0x0005, 0x890e, 0x810e, 0x810f,
+ 0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d,
+ 0x894f, 0x894d, 0x894d, 0x000e, 0x0005, 0x01d6, 0x0146, 0x0036,
+ 0x0096, 0x2061, 0x188e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6003,
+ 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006, 0x2001,
+ 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff, 0xab02,
+ 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306, 0x0120,
+ 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001, 0x189e,
+ 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006, 0x1210,
+ 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200,
+ 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000, 0x0026,
+ 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104,
+ 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e, 0x014e,
+ 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026, 0x0096,
+ 0x3348, 0x080c, 0x0f15, 0x2100, 0x9300, 0x2098, 0x22e0, 0x009e,
+ 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002, 0x8007,
+ 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001, 0x71b4,
+ 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002, 0x9298,
+ 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002, 0x9298,
+ 0x0008, 0x23a0, 0x4001, 0x7078, 0x8007, 0x717c, 0x810f, 0x20a9,
+ 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c, 0x0da3,
+ 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff,
+ 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x103f, 0x009e,
+ 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x10b8, 0x090c,
+ 0x0dc3, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026, 0x0036,
+ 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73bc, 0x702c,
+ 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0dc3, 0x2300,
+ 0x9202, 0x0120, 0x1a0c, 0x0dc3, 0xa000, 0x0c98, 0x012e, 0x003e,
+ 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6, 0x0006,
+ 0x0126, 0x2091, 0x8000, 0x2071, 0x1911, 0x7010, 0x9005, 0x0140,
+ 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0dc3, 0xa000, 0x0cc8,
+ 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071, 0x1800,
+ 0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be, 0x702c,
+ 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807,
+ 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126,
+ 0x2091, 0x8000, 0x2071, 0x1800, 0x70bc, 0x90ca, 0x0040, 0x0268,
+ 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803, 0x0000,
+ 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f, 0x9184,
+ 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
+ 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x012e, 0x00ee,
+ 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400,
+ 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001,
+ 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90,
+ 0x2071, 0x188e, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534, 0xa802,
+ 0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863,
+ 0x0001, 0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040,
+ 0x0c90, 0x2071, 0x188e, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308,
+ 0x8318, 0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800,
+ 0xa802, 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420,
+ 0x2300, 0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000,
+ 0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, 0x74ba, 0x74be, 0x0005,
+ 0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168,
+ 0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0534,
+ 0x0288, 0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250,
+ 0x2071, 0x188e, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e,
+ 0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19f7, 0x7007,
+ 0x0000, 0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010,
+ 0x9085, 0x8044, 0x7012, 0x2071, 0x0080, 0x9006, 0x20a9, 0x0040,
+ 0x7022, 0x1f04, 0x10f0, 0x702b, 0x0020, 0x00ee, 0x0005, 0x0126,
+ 0x2091, 0x8000, 0x00e6, 0xa073, 0x0000, 0x2071, 0x19f7, 0x701c,
+ 0x9088, 0x1a01, 0x280a, 0x8000, 0x9084, 0x003f, 0x701e, 0x7120,
+ 0x9106, 0x090c, 0x0dc3, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079,
+ 0x0080, 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x00e6, 0x2071, 0x19f7, 0x7004, 0x9005, 0x1128, 0x00f6,
+ 0x2079, 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004,
+ 0x9086, 0x0000, 0x1110, 0x7007, 0x0006, 0x7000, 0x0002, 0x1139,
+ 0x1137, 0x1137, 0x1137, 0x12b3, 0x12b3, 0x12b3, 0x12b3, 0x080c,
+ 0x0dc3, 0x701c, 0x7120, 0x9106, 0x1148, 0x792c, 0x9184, 0x0001,
+ 0x1120, 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005, 0x0096, 0x9180,
+ 0x1a01, 0x2004, 0x700a, 0x2048, 0x8108, 0x918c, 0x003f, 0x7122,
+ 0x782b, 0x0026, 0xa890, 0x7802, 0xa894, 0x7806, 0xa898, 0x780a,
+ 0xa89c, 0x780e, 0xa87c, 0x700e, 0xa874, 0x7016, 0xa878, 0x701a,
+ 0xa86c, 0x009e, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005,
+ 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011,
+ 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x7212,
+ 0x8203, 0x7812, 0x782b, 0x0020, 0x782b, 0x0041, 0x002e, 0x001e,
+ 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0,
+ 0x7018, 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026,
+ 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006,
+ 0x700e, 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b, 0x0020, 0x3300,
+ 0x701a, 0x782b, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, 0x001e,
+ 0x0005, 0x0016, 0x2009, 0x19f7, 0x2104, 0xc095, 0x200a, 0x080c,
+ 0x1116, 0x001e, 0x0005, 0x0016, 0x00e6, 0x2071, 0x19f7, 0x00f6,
+ 0x2079, 0x0080, 0x792c, 0xd1bc, 0x190c, 0x0dbc, 0x782b, 0x0002,
+ 0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee,
+ 0x001e, 0x0005, 0x1127, 0x11d1, 0x1205, 0x0dc3, 0x0dc3, 0x12bf,
+ 0x0dc3, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014,
+ 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b,
+ 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e,
+ 0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806,
+ 0x080c, 0x116c, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0100,
+ 0x009e, 0x7007, 0x0000, 0x080c, 0x1127, 0x0005, 0x7008, 0x0096,
+ 0x2048, 0xa873, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150,
+ 0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c,
+ 0x1181, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e,
+ 0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa892,
+ 0x7804, 0xa896, 0x7808, 0xa89a, 0x780c, 0xa89e, 0xa873, 0x0100,
+ 0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001,
+ 0x18ba, 0x2004, 0x9906, 0x1128, 0xa8a0, 0x080f, 0x00de, 0x009e,
+ 0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081,
+ 0x0150, 0xa8a0, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e,
+ 0x080c, 0x1116, 0x0005, 0x00de, 0x009e, 0x080c, 0x1116, 0x0005,
+ 0xa8ac, 0xd08c, 0x0005, 0x0096, 0xa0a4, 0x904d, 0x090c, 0x0dc3,
+ 0xa070, 0x908e, 0x0100, 0x0130, 0xa87f, 0x0030, 0xa887, 0x0000,
+ 0xa89b, 0x4002, 0xa898, 0x908e, 0x006b, 0x090c, 0x4740, 0x080c,
+ 0x6bf5, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x2848, 0x080c, 0x103f,
+ 0x009e, 0x0005, 0x00a6, 0xa0a4, 0x904d, 0x090c, 0x0dc3, 0xa070,
+ 0x908e, 0x0100, 0x0128, 0xa87f, 0x0001, 0xa887, 0x0000, 0x00c0,
+ 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006,
+ 0x8006, 0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+ 0xa07a, 0xa176, 0xb000, 0xa07e, 0x2810, 0x080c, 0x10f7, 0x00c8,
+ 0xa980, 0xa898, 0x0016, 0x0006, 0x080c, 0x6bf5, 0x000e, 0x001e,
+ 0xd1a4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xa39d, 0x00ce, 0x7008,
+ 0x2048, 0xa8a3, 0x0000, 0xa8a7, 0x0000, 0x080c, 0x103f, 0x080c,
+ 0x1116, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001,
+ 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x7007,
+ 0x0000, 0x080c, 0x1127, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079,
+ 0x0300, 0x2071, 0x1a41, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x781b,
+ 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x0266,
+ 0x2061, 0xe114, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916,
+ 0x1f04, 0x12da, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001,
+ 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110,
+ 0x7820, 0x0cd8, 0x2001, 0x1a42, 0x2003, 0x0000, 0x78ab, 0x0004,
+ 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0007, 0x7827,
+ 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a64, 0x781f,
+ 0xff00, 0x781b, 0xb700, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110,
+ 0x781f, 0x0303, 0x2061, 0x1a64, 0x602f, 0x1cd0, 0x2001, 0x1819,
+ 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b, 0x1fb8, 0x2001, 0x3268,
+ 0xd0fc, 0x190c, 0x0dc3, 0x2001, 0x1810, 0x2004, 0xd0c4, 0x1128,
+ 0x2001, 0x0003, 0x2004, 0xd0d4, 0x1118, 0x783f, 0x3268, 0x0020,
+ 0x9084, 0xc000, 0x783f, 0xb268, 0x00ce, 0x0005, 0x0126, 0x2091,
+ 0x2200, 0x7908, 0x9184, 0x0030, 0x190c, 0x0dbc, 0xd19c, 0x0158,
+ 0x7820, 0x908c, 0xf000, 0x15f0, 0x908a, 0x0024, 0x1a0c, 0x0dc3,
+ 0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x1372, 0x1372, 0x1389,
+ 0x138e, 0x1392, 0x1397, 0x13bf, 0x13c3, 0x13d1, 0x13d5, 0x1372,
+ 0x1467, 0x146b, 0x14db, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372,
+ 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372,
+ 0x1399, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1376,
+ 0x1374, 0x1372, 0x080c, 0x0dc3, 0x080c, 0x0dbc, 0x080c, 0x14e2,
+ 0x2009, 0x1a59, 0x2104, 0x8000, 0x200a, 0x080c, 0x7dcd, 0x080c,
+ 0x19e3, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xa419, 0x012e,
+ 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085,
+ 0x7006, 0x0005, 0x080c, 0x14e2, 0x080c, 0x164b, 0x0005, 0x080c,
+ 0x0dc3, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b,
+ 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419, 0x2001, 0x015d,
+ 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201,
+ 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110,
+ 0x080c, 0x14e7, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004,
+ 0xc095, 0x7006, 0x0005, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096,
+ 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419,
+ 0x0005, 0x080c, 0x14e2, 0x080c, 0x0dc3, 0x080c, 0x14e2, 0x080c,
+ 0x1452, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015,
+ 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003,
+ 0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005, 0x1180, 0x78ab,
+ 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0dc3,
+ 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x04c0, 0x78ab,
+ 0x0004, 0x7803, 0x0001, 0x080c, 0x146b, 0x0005, 0x7828, 0x782b,
+ 0x0000, 0x9065, 0x090c, 0x0dc3, 0x6014, 0x2048, 0x78ab, 0x0004,
+ 0x918c, 0x0700, 0x01d8, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x080c,
+ 0xc1cd, 0x0158, 0xa9b0, 0xa936, 0xa9b4, 0xa93a, 0xa83f, 0xffff,
+ 0xa843, 0xffff, 0xa884, 0xc0bd, 0xa886, 0xa984, 0x9184, 0x0020,
+ 0x1120, 0xc1ad, 0xa986, 0x080c, 0xbde5, 0x0005, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, 0xc5b0, 0x2029,
+ 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
+ 0x7dbc, 0x080c, 0xe0a1, 0xd5a4, 0x1118, 0x080c, 0x14e7, 0x0005,
+ 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0005, 0x781f, 0x0300, 0x7803,
+ 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300,
+ 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016,
+ 0x080c, 0x1568, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004,
+ 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0dc3,
+ 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c, 0x7106, 0x0016, 0x080c,
+ 0x162e, 0x001e, 0x0148, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
+ 0x0020, 0x080c, 0x14e7, 0x0005, 0x81ff, 0x190c, 0x0dc3, 0x0005,
+ 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4, 0x0016, 0x00e6, 0x1904,
+ 0x14d0, 0x2071, 0x0200, 0x080c, 0x1622, 0x080c, 0x162e, 0x05a8,
+ 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048, 0xa868, 0x009e, 0x9084,
+ 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1548, 0x601c,
+ 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c, 0x16c1, 0x00fe, 0x00a8,
+ 0x00f6, 0x2c78, 0x080c, 0x1805, 0x00fe, 0x2009, 0x01f4, 0x8109,
+ 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218,
+ 0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040, 0x2001, 0x020d, 0x2003,
+ 0x0020, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005,
+ 0x080c, 0x162e, 0x0dd0, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
+ 0x0020, 0x0069, 0x0c90, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c,
+ 0xa419, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c,
+ 0x1452, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0520,
+ 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc,
+ 0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841,
+ 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c,
+ 0x080c, 0x1554, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x080c, 0x1554,
+ 0x6827, 0x0002, 0x080c, 0x1554, 0x6804, 0x9005, 0x1170, 0x682c,
+ 0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014, 0x0120, 0x6830, 0x9084,
+ 0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8, 0x79b8, 0xd1ec, 0x1130,
+ 0x0870, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0090, 0x7827, 0x0015,
+ 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d,
+ 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001,
+ 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30,
+ 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085,
+ 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0,
+ 0x0005, 0x2079, 0x0001, 0x000e, 0x00f6, 0x0804, 0x0dc5, 0x2001,
+ 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041, 0x0005,
+ 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, 0x0016,
+ 0x0026, 0x00c6, 0x080c, 0x1336, 0x00ce, 0x002e, 0x001e, 0x000e,
+ 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, 0x1118,
+ 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004,
+ 0x080c, 0x0dc3, 0x2009, 0x180c, 0x2104, 0xc0f4, 0x200a, 0x2009,
+ 0xff00, 0x8109, 0x0904, 0x15e6, 0x7a18, 0x9284, 0x0030, 0x0904,
+ 0x15e1, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x15e1, 0x2001,
+ 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136,
+ 0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016,
+ 0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x885a,
+ 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de,
+ 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006,
+ 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016,
+ 0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x1ddc,
+ 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,
+ 0x000e, 0x7818, 0xd0bc, 0x1904, 0x1591, 0x0005, 0x2001, 0x180c,
+ 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284,
+ 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19d3, 0x2004, 0x9005,
+ 0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009,
+ 0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x994f, 0x2009,
+ 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1591,
+ 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,
+ 0x080c, 0x158a, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004,
+ 0x080c, 0x0dc3, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050,
+ 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x0006, 0x0046,
+ 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002, 0x7058, 0x9084, 0xff00,
+ 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021, 0x1a5a, 0x2404, 0x8000,
+ 0x0208, 0x2022, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x9006, 0x00ee,
+ 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108, 0x0005, 0x00e6, 0x0016,
+ 0x2071, 0x0200, 0x0879, 0x6120, 0x9186, 0x0000, 0x0904, 0x16b6,
+ 0x9186, 0x0002, 0x0904, 0x16b6, 0x6124, 0xd1dc, 0x01f8, 0x701c,
+ 0xd08c, 0x0904, 0x16b6, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004,
+ 0xd0bc, 0x0904, 0x16b6, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104,
+ 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x16b6, 0x9c06, 0x15f0,
+ 0x0126, 0x2091, 0x2600, 0x080c, 0x7d14, 0x012e, 0x7358, 0x745c,
+ 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800,
+ 0x00be, 0xd0bc, 0x190c, 0xc58b, 0xab42, 0xac3e, 0x2001, 0x1880,
+ 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837,
+ 0xffff, 0x080c, 0x1fd8, 0x1190, 0x080c, 0x1862, 0x2a00, 0xa816,
0x0130, 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037,
0x0020, 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050,
- 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14d2, 0x0005, 0x080c,
- 0x0dc4, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0,
+ 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14e7, 0x0005, 0x080c,
+ 0x0dc3, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0,
0x0126, 0x2091, 0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048,
0x2940, 0x903e, 0x2730, 0xa868, 0x2068, 0xa81a, 0x9d84, 0x000f,
- 0x9088, 0x1f70, 0x2165, 0x0002, 0x16ab, 0x16f8, 0x16ab, 0x16ab,
- 0x16ab, 0x16da, 0x16ab, 0x16af, 0x16a4, 0x16ef, 0x16ab, 0x16ab,
- 0x16ab, 0x17b5, 0x16c3, 0x16b9, 0xa968, 0x918c, 0x00ff, 0x918e,
- 0x0048, 0x0904, 0x16ef, 0x9085, 0x0001, 0x0804, 0x17ab, 0xa880,
+ 0x9088, 0x1fb8, 0x2165, 0x0002, 0x16f3, 0x1740, 0x16f3, 0x16f3,
+ 0x16f3, 0x1722, 0x16f3, 0x16f7, 0x16ec, 0x1737, 0x16f3, 0x16f3,
+ 0x16f3, 0x17fd, 0x170b, 0x1701, 0xa968, 0x918c, 0x00ff, 0x918e,
+ 0x0048, 0x0904, 0x1737, 0x9085, 0x0001, 0x0804, 0x17f3, 0xa880,
0xd0bc, 0x0dc8, 0xa894, 0xa842, 0xa890, 0xa83e, 0xa88c, 0x0804,
- 0x16ff, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e,
- 0xa88c, 0x0804, 0x174e, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842,
- 0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc4, 0xa168, 0xa91a,
- 0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065, 0xa88c, 0xd19c, 0x1904,
- 0x174e, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c,
- 0x0dc4, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065,
- 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x174e, 0x0080, 0xa880,
- 0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x0804, 0x174e,
- 0xa880, 0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x2c05,
- 0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1722,
- 0x1722, 0x1724, 0x1722, 0x1722, 0x1722, 0x172a, 0x1722, 0x1722,
- 0x1722, 0x1730, 0x1722, 0x1722, 0x1722, 0x1736, 0x1722, 0x1722,
- 0x1722, 0x173c, 0x1722, 0x1722, 0x1722, 0x1742, 0x1722, 0x1722,
- 0x1722, 0x1748, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284,
- 0x0804, 0x1793, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1793,
- 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1793, 0xa5a8, 0xa4ac,
- 0xa3b0, 0xa2b4, 0x0804, 0x1793, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4,
- 0x0804, 0x1793, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1793,
- 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1793, 0x2c05, 0x908a,
- 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1771, 0x176f,
- 0x176f, 0x176f, 0x176f, 0x176f, 0x1778, 0x176f, 0x176f, 0x176f,
- 0x176f, 0x176f, 0x177f, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f,
- 0x1786, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f, 0x178d, 0x080c,
- 0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8,
+ 0x1747, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e,
+ 0xa88c, 0x0804, 0x1796, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842,
+ 0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc3, 0xa168, 0xa91a,
+ 0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065, 0xa88c, 0xd19c, 0x1904,
+ 0x1796, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c,
+ 0x0dc3, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065,
+ 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x1796, 0x0080, 0xa880,
+ 0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x0804, 0x1796,
+ 0xa880, 0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x2c05,
+ 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x176a,
+ 0x176a, 0x176c, 0x176a, 0x176a, 0x176a, 0x1772, 0x176a, 0x176a,
+ 0x176a, 0x1778, 0x176a, 0x176a, 0x176a, 0x177e, 0x176a, 0x176a,
+ 0x176a, 0x1784, 0x176a, 0x176a, 0x176a, 0x178a, 0x176a, 0x176a,
+ 0x176a, 0x1790, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284,
+ 0x0804, 0x17db, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x17db,
+ 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x17db, 0xa5a8, 0xa4ac,
+ 0xa3b0, 0xa2b4, 0x0804, 0x17db, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4,
+ 0x0804, 0x17db, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x17db,
+ 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x17db, 0x2c05, 0x908a,
+ 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x17b9, 0x17b7,
+ 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17c0, 0x17b7, 0x17b7, 0x17b7,
+ 0x17b7, 0x17b7, 0x17c7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7,
+ 0x17ce, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17d5, 0x080c,
+ 0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8,
0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x00a0, 0xa5a0,
0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x0068, 0xa5b8, 0xa4bc,
0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0030, 0xa5d0, 0xa4d4, 0xa7d8,
@@ -538,120 +547,120 @@
0xae2a, 0xa98c, 0x8c60, 0x2c1d, 0xa8b0, 0xaab4, 0xa836, 0xaa3a,
0x8109, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880,
0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0x2800,
- 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16ab, 0x2001,
- 0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0, 0x0126, 0x2091,
+ 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16f3, 0x2001,
+ 0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0, 0x0126, 0x2091,
0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e,
- 0x2061, 0x1f6b, 0xa813, 0x1f6b, 0x2c05, 0xa80a, 0xa968, 0xa91a,
- 0xa880, 0xd0ac, 0x090c, 0x0dc4, 0x9006, 0xa842, 0xa83e, 0x2c05,
- 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0xadd0, 0xacd4, 0xafd8, 0xaedc,
+ 0x2061, 0x1fb3, 0xa813, 0x1fb3, 0x2c05, 0xa80a, 0xa968, 0xa91a,
+ 0xa880, 0xd0ac, 0x090c, 0x0dc3, 0x9006, 0xa842, 0xa83e, 0x2c05,
+ 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0xadd0, 0xacd4, 0xafd8, 0xaedc,
0xabe0, 0xaae4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a,
0xa8b0, 0xaab4, 0xa836, 0xaa3a, 0xa98c, 0xa868, 0x9084, 0x00ff,
0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128, 0x0080, 0x918a,
0x0002, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880,
0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0xa804,
- 0x9045, 0x090c, 0x0dc4, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f,
- 0x9080, 0x1f70, 0x2015, 0x82ff, 0x090c, 0x0dc4, 0xaa12, 0x2205,
+ 0x9045, 0x090c, 0x0dc3, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f,
+ 0x9080, 0x1fb8, 0x2015, 0x82ff, 0x090c, 0x0dc3, 0xaa12, 0x2205,
0xa80a, 0x0c08, 0x903e, 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00,
- 0x0002, 0x190f, 0x1871, 0x1871, 0x190f, 0x190f, 0x1909, 0x190f,
- 0x1871, 0x18c0, 0x18c0, 0x18c0, 0x190f, 0x190f, 0x190f, 0x1906,
- 0x18c0, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
- 0x0904, 0x1911, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082,
- 0x001c, 0x0002, 0x185d, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b,
- 0x1861, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b, 0x1865, 0x185b,
- 0x185b, 0x185b, 0x185b, 0x185b, 0x1869, 0x185b, 0x185b, 0x185b,
- 0x185b, 0x185b, 0x186d, 0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804,
- 0x1911, 0xa790, 0xa694, 0x0804, 0x1911, 0xa7a8, 0xa6ac, 0x0804,
- 0x1911, 0xa7c0, 0xa6c4, 0x0804, 0x1911, 0xa7d8, 0xa6dc, 0x0804,
- 0x1911, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c,
- 0x0002, 0x1894, 0x1894, 0x1896, 0x1894, 0x1894, 0x1894, 0x189c,
- 0x1894, 0x1894, 0x1894, 0x18a2, 0x1894, 0x1894, 0x1894, 0x18a8,
- 0x1894, 0x1894, 0x1894, 0x18ae, 0x1894, 0x1894, 0x1894, 0x18b4,
- 0x1894, 0x1894, 0x1894, 0x18ba, 0x080c, 0x0dc4, 0xa578, 0xa47c,
- 0xa380, 0xa284, 0x0804, 0x1911, 0xa588, 0xa48c, 0xa390, 0xa294,
- 0x0804, 0x1911, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1911,
- 0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1911, 0xa5b8, 0xa4bc,
- 0xa3c0, 0xa2c4, 0x0804, 0x1911, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4,
- 0x0804, 0x1911, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1911,
- 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002,
- 0x18e3, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18ea, 0x18e1,
- 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18f1, 0x18e1, 0x18e1, 0x18e1,
- 0x18e1, 0x18e1, 0x18f8, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1,
- 0x18ff, 0x080c, 0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380,
+ 0x0002, 0x1957, 0x18b9, 0x18b9, 0x1957, 0x1957, 0x1951, 0x1957,
+ 0x18b9, 0x1908, 0x1908, 0x1908, 0x1957, 0x1957, 0x1957, 0x194e,
+ 0x1908, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
+ 0x0904, 0x1959, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082,
+ 0x001c, 0x0002, 0x18a5, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3,
+ 0x18a9, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18ad, 0x18a3,
+ 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18b1, 0x18a3, 0x18a3, 0x18a3,
+ 0x18a3, 0x18a3, 0x18b5, 0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804,
+ 0x1959, 0xa790, 0xa694, 0x0804, 0x1959, 0xa7a8, 0xa6ac, 0x0804,
+ 0x1959, 0xa7c0, 0xa6c4, 0x0804, 0x1959, 0xa7d8, 0xa6dc, 0x0804,
+ 0x1959, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c,
+ 0x0002, 0x18dc, 0x18dc, 0x18de, 0x18dc, 0x18dc, 0x18dc, 0x18e4,
+ 0x18dc, 0x18dc, 0x18dc, 0x18ea, 0x18dc, 0x18dc, 0x18dc, 0x18f0,
+ 0x18dc, 0x18dc, 0x18dc, 0x18f6, 0x18dc, 0x18dc, 0x18dc, 0x18fc,
+ 0x18dc, 0x18dc, 0x18dc, 0x1902, 0x080c, 0x0dc3, 0xa578, 0xa47c,
+ 0xa380, 0xa284, 0x0804, 0x1959, 0xa588, 0xa48c, 0xa390, 0xa294,
+ 0x0804, 0x1959, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1959,
+ 0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1959, 0xa5b8, 0xa4bc,
+ 0xa3c0, 0xa2c4, 0x0804, 0x1959, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4,
+ 0x0804, 0x1959, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1959,
+ 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002,
+ 0x192b, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929, 0x1932, 0x1929,
+ 0x1929, 0x1929, 0x1929, 0x1929, 0x1939, 0x1929, 0x1929, 0x1929,
+ 0x1929, 0x1929, 0x1940, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929,
+ 0x1947, 0x080c, 0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380,
0xa284, 0x0438, 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c,
0x0400, 0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x00c8,
0xa5b8, 0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0090, 0xa5d0,
0xa4d4, 0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0058, 0x9d86, 0x000e,
- 0x1130, 0x080c, 0x1f28, 0x1904, 0x181a, 0x900e, 0x0050, 0x080c,
- 0x0dc4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,
- 0x1f28, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e,
- 0x2001, 0x000a, 0x080c, 0x854b, 0x8204, 0x1110, 0x2011, 0x0002,
+ 0x1130, 0x080c, 0x1f70, 0x1904, 0x1862, 0x900e, 0x0050, 0x080c,
+ 0x0dc3, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,
+ 0x1f70, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e,
+ 0x2001, 0x000a, 0x080c, 0x871c, 0x8204, 0x1110, 0x2011, 0x0002,
0x8211, 0xaa8a, 0x601b, 0x0002, 0xa878, 0x9084, 0x00ff, 0x9084,
0x0008, 0x0150, 0x00e9, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009,
- 0x0048, 0x080c, 0x9f88, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005,
+ 0x0048, 0x080c, 0xa419, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005,
0xa934, 0xa890, 0x9106, 0x1158, 0xa938, 0xa894, 0x9106, 0x1138,
- 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0x9f88, 0x0005,
+ 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0xa419, 0x0005,
0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007,
0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023,
0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808,
- 0xd09c, 0x0120, 0x080c, 0x132a, 0x8631, 0x1db8, 0x00ce, 0x781f,
- 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x132a,
- 0x00ce, 0x2001, 0x0038, 0x080c, 0x1a2b, 0x7930, 0x9186, 0x0040,
- 0x0160, 0x9186, 0x0042, 0x190c, 0x0dc4, 0x2001, 0x001e, 0x8001,
- 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a3a, 0x000e, 0x6022, 0x012e,
- 0x0005, 0x080c, 0x1a27, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8,
+ 0xd09c, 0x0120, 0x080c, 0x1336, 0x8631, 0x1db8, 0x00ce, 0x781f,
+ 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x1336,
+ 0x00ce, 0x2001, 0x0038, 0x080c, 0x1a73, 0x7930, 0x9186, 0x0040,
+ 0x0160, 0x9186, 0x0042, 0x190c, 0x0dc3, 0x2001, 0x001e, 0x8001,
+ 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a82, 0x000e, 0x6022, 0x012e,
+ 0x0005, 0x080c, 0x1a6f, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8,
0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000,
- 0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc4, 0x7aac,
- 0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x72e5, 0x1188, 0x2001, 0x0138,
+ 0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc3, 0x7aac,
+ 0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x7351, 0x1188, 0x2001, 0x0138,
0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c,
- 0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x7393, 0x0479,
+ 0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x73fe, 0x0479,
0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005,
- 0x00e6, 0x2071, 0x0200, 0x080c, 0x2a99, 0x2009, 0x003c, 0x080c,
- 0x22b2, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c,
- 0x1de0, 0x080c, 0x8245, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c,
+ 0x00e6, 0x2071, 0x0200, 0x080c, 0x2b02, 0x2009, 0x003c, 0x080c,
+ 0x22fa, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c,
+ 0x1de0, 0x080c, 0x83a7, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c,
0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300,
- 0x080c, 0x12de, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001,
+ 0x080c, 0x12ea, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001,
0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003,
- 0x0000, 0x080c, 0x72e5, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001,
+ 0x0000, 0x080c, 0x7351, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001,
0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c,
0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421,
0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021,
0x0019, 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048,
0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x601c,
- 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1553, 0x7930,
- 0x0005, 0x2c08, 0x621c, 0x080c, 0x15fe, 0x7930, 0x0005, 0x8001,
+ 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1568, 0x7930,
+ 0x0005, 0x2c08, 0x621c, 0x080c, 0x1613, 0x7930, 0x0005, 0x8001,
0x1df0, 0x0005, 0x2031, 0x0064, 0x781c, 0x9084, 0x0007, 0x0170,
- 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1a98, 0x2001,
- 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc4, 0x781f, 0x0202,
+ 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1ae0, 0x2001,
+ 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc3, 0x781f, 0x0202,
0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0dac, 0x0c01, 0x781c,
0xd084, 0x0110, 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891, 0x9186,
0x0040, 0x0568, 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101, 0x2001,
0x0014, 0x0869, 0x2001, 0x0037, 0x0821, 0x9186, 0x0040, 0x0140,
- 0x2001, 0x0030, 0x080c, 0x1a31, 0x9186, 0x0040, 0x190c, 0x0dc4,
+ 0x2001, 0x0030, 0x080c, 0x1a79, 0x9186, 0x0040, 0x190c, 0x0dc3,
0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4, 0x0160,
0xd19c, 0x0130, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0080,
0x6908, 0x9184, 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100, 0x791c,
- 0x9184, 0x0007, 0x090c, 0x0dc4, 0xa001, 0xa001, 0x781f, 0x0200,
+ 0x9184, 0x0007, 0x090c, 0x0dc3, 0xa001, 0xa001, 0x781f, 0x0200,
0x0005, 0x0126, 0x2091, 0x2400, 0x2071, 0x1a44, 0x2079, 0x0090,
0x012e, 0x0005, 0x9280, 0x0005, 0x2004, 0x2048, 0xa980, 0xd1dc,
- 0x1904, 0x1b2d, 0xa968, 0x9184, 0x0007, 0x0002, 0x1ab6, 0x1b18,
- 0x1acd, 0x1acd, 0x1acd, 0x1b00, 0x1ae0, 0x1acf, 0x918c, 0x00ff,
- 0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d4e, 0x9006,
- 0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1f6b, 0x0804,
- 0x1b29, 0x9186, 0x0048, 0x0904, 0x1b18, 0x080c, 0x0dc4, 0xa880,
- 0xd0b4, 0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e,
- 0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b20,
+ 0x1904, 0x1b75, 0xa968, 0x9184, 0x0007, 0x0002, 0x1afe, 0x1b60,
+ 0x1b15, 0x1b15, 0x1b15, 0x1b48, 0x1b28, 0x1b17, 0x918c, 0x00ff,
+ 0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d96, 0x9006,
+ 0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1fb3, 0x0804,
+ 0x1b71, 0x9186, 0x0048, 0x0904, 0x1b60, 0x080c, 0x0dc3, 0xa880,
+ 0xd0b4, 0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e,
+ 0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b68,
0xa868, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1d38, 0xa880, 0xd0b4,
- 0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836,
+ 0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836,
0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa804, 0xa85a, 0x2040, 0xa068,
- 0x9084, 0x000f, 0x9080, 0x1f70, 0x2005, 0xa812, 0xa98c, 0x0448,
+ 0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005, 0xa812, 0xa98c, 0x0448,
0x918c, 0x00ff, 0x9186, 0x0015, 0x1540, 0xa880, 0xd0b4, 0x0904,
- 0x1d4e, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080,
- 0x1f70, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088,
- 0xa880, 0xd0b4, 0x0904, 0x1d4e, 0xa98c, 0x9006, 0xa842, 0xa83e,
- 0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1f70, 0x2005,
+ 0x1d96, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080,
+ 0x1fb8, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088,
+ 0xa880, 0xd0b4, 0x0904, 0x1d96, 0xa98c, 0x9006, 0xa842, 0xa83e,
+ 0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005,
0xa812, 0xa916, 0xa880, 0xc0dd, 0xa882, 0x0005, 0x00f6, 0x2079,
- 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1d94, 0x00e6, 0x2071, 0x1a44,
- 0x7000, 0x9005, 0x1904, 0x1b94, 0x7206, 0x9280, 0x0005, 0x204c,
+ 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1ddc, 0x00e6, 0x2071, 0x1a44,
+ 0x7000, 0x9005, 0x1904, 0x1bdc, 0x7206, 0x9280, 0x0005, 0x204c,
0x9280, 0x0004, 0x2004, 0x782b, 0x0004, 0x00f6, 0x2079, 0x0200,
0x7803, 0x0040, 0x00fe, 0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890,
0x00be, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001,
@@ -663,46 +672,46 @@
0x0118, 0x001e, 0x000e, 0x0098, 0x001e, 0x000e, 0x8aff, 0x01c8,
0x0126, 0x2091, 0x8000, 0x2009, 0x0306, 0x200b, 0x0808, 0x00d9,
0x0108, 0x00c9, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, 0x0036,
- 0x0046, 0xab38, 0xac34, 0x080c, 0x1f90, 0x004e, 0x003e, 0x0d30,
+ 0x0046, 0xab38, 0xac34, 0x080c, 0x1fd8, 0x004e, 0x003e, 0x0d30,
0x0c98, 0x9085, 0x0001, 0x0c80, 0x2009, 0x0306, 0x200b, 0x4800,
0x7027, 0x0000, 0x0005, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036,
- 0x0026, 0x8aff, 0x0904, 0x1d47, 0x700c, 0x7214, 0x923a, 0x7010,
- 0x7218, 0x9203, 0x0a04, 0x1d46, 0x9705, 0x0904, 0x1d46, 0x903e,
- 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1cd6, 0x1c16,
- 0x1c16, 0x1cd6, 0x1cd6, 0x1cb3, 0x1cd6, 0x1c16, 0x1cba, 0x1c65,
- 0x1c65, 0x1cd6, 0x1cd6, 0x1cd6, 0x1cad, 0x1c65, 0xc0fc, 0xa886,
- 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1cd8, 0x2c05,
- 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c02,
- 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c06, 0x1c00, 0x1c00,
- 0x1c00, 0x1c00, 0x1c00, 0x1c0a, 0x1c00, 0x1c00, 0x1c00, 0x1c00,
- 0x1c00, 0x1c0e, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c12,
- 0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804, 0x1cd8, 0xa790, 0xa694,
- 0x0804, 0x1cd8, 0xa7a8, 0xa6ac, 0x0804, 0x1cd8, 0xa7c0, 0xa6c4,
- 0x0804, 0x1cd8, 0xa7d8, 0xa6dc, 0x0804, 0x1cd8, 0x2c05, 0x908a,
- 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c39, 0x1c39,
- 0x1c3b, 0x1c39, 0x1c39, 0x1c39, 0x1c41, 0x1c39, 0x1c39, 0x1c39,
- 0x1c47, 0x1c39, 0x1c39, 0x1c39, 0x1c4d, 0x1c39, 0x1c39, 0x1c39,
- 0x1c53, 0x1c39, 0x1c39, 0x1c39, 0x1c59, 0x1c39, 0x1c39, 0x1c39,
- 0x1c5f, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804,
- 0x1cd8, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1cd8, 0xa598,
- 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1cd8, 0xa5a8, 0xa4ac, 0xa3b0,
- 0xa2b4, 0x0804, 0x1cd8, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804,
- 0x1cd8, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1cd8, 0xa5d8,
- 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1cd8, 0x2c05, 0x908a, 0x0035,
- 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c88, 0x1c86, 0x1c86,
- 0x1c86, 0x1c86, 0x1c86, 0x1c90, 0x1c86, 0x1c86, 0x1c86, 0x1c86,
- 0x1c86, 0x1c98, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c9f,
- 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1ca6, 0x080c, 0x0dc4,
- 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1cd8,
- 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1cd8,
+ 0x0026, 0x8aff, 0x0904, 0x1d8f, 0x700c, 0x7214, 0x923a, 0x7010,
+ 0x7218, 0x9203, 0x0a04, 0x1d8e, 0x9705, 0x0904, 0x1d8e, 0x903e,
+ 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1d1e, 0x1c5e,
+ 0x1c5e, 0x1d1e, 0x1d1e, 0x1cfb, 0x1d1e, 0x1c5e, 0x1d02, 0x1cad,
+ 0x1cad, 0x1d1e, 0x1d1e, 0x1d1e, 0x1cf5, 0x1cad, 0xc0fc, 0xa886,
+ 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1d20, 0x2c05,
+ 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c4a,
+ 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c4e, 0x1c48, 0x1c48,
+ 0x1c48, 0x1c48, 0x1c48, 0x1c52, 0x1c48, 0x1c48, 0x1c48, 0x1c48,
+ 0x1c48, 0x1c56, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c5a,
+ 0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804, 0x1d20, 0xa790, 0xa694,
+ 0x0804, 0x1d20, 0xa7a8, 0xa6ac, 0x0804, 0x1d20, 0xa7c0, 0xa6c4,
+ 0x0804, 0x1d20, 0xa7d8, 0xa6dc, 0x0804, 0x1d20, 0x2c05, 0x908a,
+ 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c81, 0x1c81,
+ 0x1c83, 0x1c81, 0x1c81, 0x1c81, 0x1c89, 0x1c81, 0x1c81, 0x1c81,
+ 0x1c8f, 0x1c81, 0x1c81, 0x1c81, 0x1c95, 0x1c81, 0x1c81, 0x1c81,
+ 0x1c9b, 0x1c81, 0x1c81, 0x1c81, 0x1ca1, 0x1c81, 0x1c81, 0x1c81,
+ 0x1ca7, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804,
+ 0x1d20, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1d20, 0xa598,
+ 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1d20, 0xa5a8, 0xa4ac, 0xa3b0,
+ 0xa2b4, 0x0804, 0x1d20, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804,
+ 0x1d20, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1d20, 0xa5d8,
+ 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1d20, 0x2c05, 0x908a, 0x0035,
+ 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1cd0, 0x1cce, 0x1cce,
+ 0x1cce, 0x1cce, 0x1cce, 0x1cd8, 0x1cce, 0x1cce, 0x1cce, 0x1cce,
+ 0x1cce, 0x1ce0, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1ce7,
+ 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cee, 0x080c, 0x0dc3,
+ 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1d20,
+ 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1d20,
0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x04c8, 0xa5b8,
0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0490, 0xa5d0, 0xa4d4,
0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0458, 0xa868, 0x9084, 0x00ff,
- 0x9086, 0x001e, 0x1518, 0x080c, 0x1f28, 0x1904, 0x1bb1, 0x900e,
- 0x0804, 0x1d47, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180,
+ 0x9086, 0x001e, 0x1518, 0x080c, 0x1f70, 0x1904, 0x1bf9, 0x900e,
+ 0x0804, 0x1d8f, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180,
0x00c6, 0x7004, 0x2060, 0x6004, 0x9086, 0x0043, 0x00ce, 0x0904,
- 0x1c65, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040,
- 0x9386, 0x0008, 0x0904, 0x1c65, 0x080c, 0x0dc4, 0x080c, 0x0dc4,
+ 0x1cad, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040,
+ 0x9386, 0x0008, 0x0904, 0x1cad, 0x080c, 0x0dc3, 0x080c, 0x0dc3,
0x2009, 0x030f, 0x2104, 0xd0fc, 0x0538, 0x0066, 0x2009, 0x0306,
0x2134, 0x200b, 0x4000, 0x2104, 0x9084, 0x0030, 0x15b8, 0x2031,
0x1000, 0x2600, 0x9302, 0x928b, 0x0000, 0xa82e, 0xa932, 0x0278,
@@ -711,169 +720,169 @@
0x0000, 0xa833, 0x0000, 0x006e, 0x7b12, 0x7a16, 0x7d02, 0x7c06,
0x7f0a, 0x7e0e, 0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c,
0x9300, 0xa83e, 0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e,
- 0x7010, 0x9201, 0x7012, 0x080c, 0x1f28, 0x0448, 0xd6b4, 0x0110,
+ 0x7010, 0x9201, 0x7012, 0x080c, 0x1f70, 0x0448, 0xd6b4, 0x0110,
0x200b, 0x4040, 0x2031, 0x0080, 0x9584, 0x007f, 0x0108, 0x9632,
0x7124, 0x7000, 0x9086, 0x0000, 0x1198, 0xc185, 0x7126, 0x2009,
- 0x0306, 0x2104, 0xd0b4, 0x1904, 0x1ce9, 0x200b, 0x4040, 0x2009,
- 0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1ce9, 0x200a, 0x0804, 0x1ce9,
- 0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1ce9, 0x9006, 0x002e,
- 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc4,
+ 0x0306, 0x2104, 0xd0b4, 0x1904, 0x1d31, 0x200b, 0x4040, 0x2009,
+ 0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1d31, 0x200a, 0x0804, 0x1d31,
+ 0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1d31, 0x9006, 0x002e,
+ 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc3,
0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003,
- 0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xb955, 0x0118,
- 0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1ba4,
+ 0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0118,
+ 0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1bec,
0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001,
0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89e,
- 0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xb5c5, 0x00ce,
+ 0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xbde5, 0x00ce,
0x2001, 0x19d3, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c,
- 0x22b2, 0x080c, 0x9b40, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c,
- 0x8d06, 0x002e, 0x0804, 0x1ed8, 0x0126, 0x2091, 0x2400, 0xa858,
- 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d50,
- 0x7000, 0x0002, 0x1ed8, 0x1da6, 0x1e26, 0x1ed6, 0x8001, 0x7002,
- 0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1df3, 0x080c,
- 0x1bab, 0x0904, 0x1ed8, 0x080c, 0x1bab, 0x0804, 0x1ed8, 0x782b,
+ 0x22fa, 0x080c, 0x9e13, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c,
+ 0x8f0e, 0x002e, 0x0804, 0x1f20, 0x0126, 0x2091, 0x2400, 0xa858,
+ 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d98,
+ 0x7000, 0x0002, 0x1f20, 0x1dee, 0x1e6e, 0x1f1e, 0x8001, 0x7002,
+ 0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1e3b, 0x080c,
+ 0x1bf3, 0x0904, 0x1f20, 0x080c, 0x1bf3, 0x0804, 0x1f20, 0x782b,
0x0004, 0xd194, 0x0148, 0xa884, 0xc0fc, 0xa886, 0x8aff, 0x1518,
0xa880, 0xc0f5, 0xa882, 0x00f8, 0x0026, 0x0036, 0xab3c, 0xaa40,
0x0016, 0x7910, 0xa82c, 0x9100, 0xa82e, 0x7914, 0xa830, 0x9101,
0xa832, 0x001e, 0x7810, 0x931a, 0x7814, 0x9213, 0x7800, 0xa81e,
- 0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f43,
+ 0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f8b,
0xa884, 0xc0fd, 0xa886, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00,
0xa812, 0x7003, 0x0000, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027,
- 0x0000, 0x0804, 0x1ed8, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818,
+ 0x0000, 0x0804, 0x1f20, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818,
0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012,
- 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc4, 0x7820,
+ 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc3, 0x7820,
0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006,
0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284,
0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008,
- 0x7003, 0x0000, 0x080c, 0x1ba4, 0x0804, 0x1ed8, 0x8001, 0x7002,
+ 0x7003, 0x0000, 0x080c, 0x1bec, 0x0804, 0x1f20, 0x8001, 0x7002,
0x7024, 0x8004, 0x7026, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904,
- 0x1d99, 0xd19c, 0x1904, 0x1ed4, 0x8aff, 0x0904, 0x1ed8, 0x080c,
- 0x1bab, 0x0804, 0x1ed8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c,
- 0x1f43, 0xdd9c, 0x1904, 0x1e93, 0x2c05, 0x908a, 0x0037, 0x1a0c,
- 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1e67, 0x1e67, 0x1e69, 0x1e67,
- 0x1e67, 0x1e67, 0x1e6f, 0x1e67, 0x1e67, 0x1e67, 0x1e75, 0x1e67,
- 0x1e67, 0x1e67, 0x1e7b, 0x1e67, 0x1e67, 0x1e67, 0x1e81, 0x1e67,
- 0x1e67, 0x1e67, 0x1e87, 0x1e67, 0x1e67, 0x1e67, 0x1e8d, 0x080c,
- 0x0dc4, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1dc8, 0xa090,
- 0x931a, 0xa094, 0x9213, 0x0804, 0x1dc8, 0xa0a0, 0x931a, 0xa0a4,
- 0x9213, 0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804,
- 0x1dc8, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1dc8, 0xa0d0,
- 0x931a, 0xa0d4, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a, 0xa0e4,
- 0x9213, 0x0804, 0x1dc8, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4,
- 0x9082, 0x001c, 0x0002, 0x1eb6, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4,
- 0x1eb4, 0x1ebc, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec2,
- 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec8, 0x1eb4, 0x1eb4,
- 0x1eb4, 0x1eb4, 0x1eb4, 0x1ece, 0x080c, 0x0dc4, 0xa080, 0x931a,
- 0xa084, 0x9213, 0x0804, 0x1dc8, 0xa098, 0x931a, 0xa09c, 0x9213,
- 0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1dc8,
- 0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a,
- 0xa0e4, 0x9213, 0x0804, 0x1dc8, 0x0804, 0x1dc4, 0x080c, 0x0dc4,
+ 0x1de1, 0xd19c, 0x1904, 0x1f1c, 0x8aff, 0x0904, 0x1f20, 0x080c,
+ 0x1bf3, 0x0804, 0x1f20, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c,
+ 0x1f8b, 0xdd9c, 0x1904, 0x1edb, 0x2c05, 0x908a, 0x0037, 0x1a0c,
+ 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1eaf, 0x1eaf, 0x1eb1, 0x1eaf,
+ 0x1eaf, 0x1eaf, 0x1eb7, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ebd, 0x1eaf,
+ 0x1eaf, 0x1eaf, 0x1ec3, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ec9, 0x1eaf,
+ 0x1eaf, 0x1eaf, 0x1ecf, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ed5, 0x080c,
+ 0x0dc3, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1e10, 0xa090,
+ 0x931a, 0xa094, 0x9213, 0x0804, 0x1e10, 0xa0a0, 0x931a, 0xa0a4,
+ 0x9213, 0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804,
+ 0x1e10, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1e10, 0xa0d0,
+ 0x931a, 0xa0d4, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a, 0xa0e4,
+ 0x9213, 0x0804, 0x1e10, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3,
+ 0x9082, 0x001c, 0x0002, 0x1efe, 0x1efc, 0x1efc, 0x1efc, 0x1efc,
+ 0x1efc, 0x1f04, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f0a,
+ 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f10, 0x1efc, 0x1efc,
+ 0x1efc, 0x1efc, 0x1efc, 0x1f16, 0x080c, 0x0dc3, 0xa080, 0x931a,
+ 0xa084, 0x9213, 0x0804, 0x1e10, 0xa098, 0x931a, 0xa09c, 0x9213,
+ 0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1e10,
+ 0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a,
+ 0xa0e4, 0x9213, 0x0804, 0x1e10, 0x0804, 0x1e0c, 0x080c, 0x0dc3,
0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086,
- 0x0000, 0x0904, 0x1f23, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
+ 0x0000, 0x0904, 0x1f6b, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,
- 0x080c, 0xd379, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc4,
- 0x0016, 0x2009, 0x0040, 0x080c, 0x22b2, 0x001e, 0x2001, 0x020c,
+ 0x080c, 0xe106, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc3,
+ 0x0016, 0x2009, 0x0040, 0x080c, 0x22fa, 0x001e, 0x2001, 0x020c,
0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
- 0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc, 0x09a8,
- 0x080c, 0x1d94, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
- 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782b,
- 0x0002, 0x7003, 0x0000, 0x080c, 0x1ba4, 0x00ee, 0x00fe, 0x0005,
+ 0x1120, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x09a8,
+ 0x080c, 0x1ddc, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
+ 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b,
+ 0x0002, 0x7003, 0x0000, 0x080c, 0x1bec, 0x00ee, 0x00fe, 0x0005,
0xa884, 0xd0fc, 0x11a8, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,
0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa068, 0x9084,
- 0x000f, 0x9080, 0x1f70, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x8a51,
+ 0x000f, 0x9080, 0x1fb8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x8a51,
0x0005, 0x2050, 0x0005, 0xa884, 0xd0fc, 0x11b8, 0x8a50, 0x8c61,
0x2c05, 0x9005, 0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005,
0x1108, 0x2900, 0x2040, 0xa85a, 0xa068, 0x9084, 0x000f, 0x9080,
- 0x1f80, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x0005, 0x0000, 0x001e,
+ 0x1fc8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x0005, 0x0000, 0x001e,
0x0022, 0x0026, 0x002a, 0x002e, 0x0032, 0x0036, 0x0000, 0x001c,
0x0022, 0x0028, 0x002e, 0x0034, 0x0000, 0x0000, 0x0024, 0x0000,
- 0x0000, 0x1f63, 0x1f5f, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f63,
- 0x1f6a, 0x1f6a, 0x1f67, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6a,
- 0x0000, 0x1f65, 0x1f65, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f65,
- 0x1f6b, 0x1f6b, 0x1f6b, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6b,
+ 0x0000, 0x1fab, 0x1fa7, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fab,
+ 0x1fb2, 0x1fb2, 0x1faf, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb2,
+ 0x0000, 0x1fad, 0x1fad, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fad,
+ 0x1fb3, 0x1fb3, 0x1fb3, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb3,
0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa88c, 0x9055, 0x0904,
- 0x216f, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086,
- 0x0008, 0x1118, 0x2061, 0x1f6b, 0x00d0, 0x9de0, 0x1f70, 0x9d86,
+ 0x21b7, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086,
+ 0x0008, 0x1118, 0x2061, 0x1fb3, 0x00d0, 0x9de0, 0x1fb8, 0x9d86,
0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120,
0xa090, 0x9422, 0xa094, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310,
- 0x0804, 0x216f, 0xa004, 0x9045, 0x0904, 0x216f, 0x08d8, 0x2c05,
- 0x9005, 0x0904, 0x2057, 0xdd9c, 0x1904, 0x2013, 0x908a, 0x0037,
- 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1fe8, 0x1fe8, 0x1fea,
- 0x1fe8, 0x1fe8, 0x1fe8, 0x1ff0, 0x1fe8, 0x1fe8, 0x1fe8, 0x1ff6,
- 0x1fe8, 0x1fe8, 0x1fe8, 0x1ffc, 0x1fe8, 0x1fe8, 0x1fe8, 0x2002,
- 0x1fe8, 0x1fe8, 0x1fe8, 0x2008, 0x1fe8, 0x1fe8, 0x1fe8, 0x200e,
- 0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x204d,
- 0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x204d, 0xa0a0, 0x9422,
- 0xa0a4, 0x931b, 0x0804, 0x204d, 0xa0b0, 0x9422, 0xa0b4, 0x931b,
- 0x0804, 0x204d, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x204d,
- 0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x204d, 0xa0e0, 0x9422,
- 0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082,
- 0x001c, 0x0002, 0x2035, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033,
- 0x203a, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033, 0x203f, 0x2033,
- 0x2033, 0x2033, 0x2033, 0x2033, 0x2044, 0x2033, 0x2033, 0x2033,
- 0x2033, 0x2033, 0x2049, 0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084,
+ 0x0804, 0x21b7, 0xa004, 0x9045, 0x0904, 0x21b7, 0x08d8, 0x2c05,
+ 0x9005, 0x0904, 0x209f, 0xdd9c, 0x1904, 0x205b, 0x908a, 0x0037,
+ 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x2030, 0x2030, 0x2032,
+ 0x2030, 0x2030, 0x2030, 0x2038, 0x2030, 0x2030, 0x2030, 0x203e,
+ 0x2030, 0x2030, 0x2030, 0x2044, 0x2030, 0x2030, 0x2030, 0x204a,
+ 0x2030, 0x2030, 0x2030, 0x2050, 0x2030, 0x2030, 0x2030, 0x2056,
+ 0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x2095,
+ 0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x2095, 0xa0a0, 0x9422,
+ 0xa0a4, 0x931b, 0x0804, 0x2095, 0xa0b0, 0x9422, 0xa0b4, 0x931b,
+ 0x0804, 0x2095, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x2095,
+ 0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x2095, 0xa0e0, 0x9422,
+ 0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082,
+ 0x001c, 0x0002, 0x207d, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b,
+ 0x2082, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b, 0x2087, 0x207b,
+ 0x207b, 0x207b, 0x207b, 0x207b, 0x208c, 0x207b, 0x207b, 0x207b,
+ 0x207b, 0x207b, 0x2091, 0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084,
0x931b, 0x0098, 0xa098, 0x9422, 0xa09c, 0x931b, 0x0070, 0xa0b0,
0x9422, 0xa0b4, 0x931b, 0x0048, 0xa0c8, 0x9422, 0xa0cc, 0x931b,
0x0020, 0xa0e0, 0x9422, 0xa0e4, 0x931b, 0x0630, 0x2300, 0x9405,
- 0x0160, 0x8a51, 0x0904, 0x216f, 0x8c60, 0x0804, 0x1fbf, 0xa004,
- 0x9045, 0x0904, 0x216f, 0x0804, 0x1f9a, 0x8a51, 0x0904, 0x216f,
- 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x216f,
- 0xa068, 0x90ec, 0x000f, 0x9de0, 0x1f70, 0x2c05, 0x2060, 0xa884,
- 0xc0fc, 0xa886, 0x0804, 0x2164, 0x2c05, 0x8422, 0x8420, 0x831a,
- 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2101, 0x9082,
- 0x001c, 0x0002, 0x209d, 0x209d, 0x209f, 0x209d, 0x209d, 0x209d,
- 0x20ad, 0x209d, 0x209d, 0x209d, 0x20bb, 0x209d, 0x209d, 0x209d,
- 0x20c9, 0x209d, 0x209d, 0x209d, 0x20d7, 0x209d, 0x209d, 0x209d,
- 0x20e5, 0x209d, 0x209d, 0x209d, 0x20f3, 0x080c, 0x0dc4, 0xa180,
- 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa078,
- 0x9420, 0xa07c, 0x9319, 0x0804, 0x215f, 0xa190, 0x2400, 0x9122,
- 0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c,
- 0x9319, 0x0804, 0x215f, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300,
- 0x911b, 0x0a0c, 0x0dc4, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804,
- 0x215f, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
- 0x0dc4, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x215f, 0xa1c0,
- 0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8,
- 0x9420, 0xa0bc, 0x9319, 0x0804, 0x215f, 0xa1d0, 0x2400, 0x9122,
- 0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0c8, 0x9420, 0xa0cc,
- 0x9319, 0x0804, 0x215f, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
- 0x911b, 0x0a0c, 0x0dc4, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804,
- 0x215f, 0x9082, 0x001c, 0x0002, 0x211f, 0x211d, 0x211d, 0x211d,
- 0x211d, 0x211d, 0x212c, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d,
- 0x2139, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d, 0x2146, 0x211d,
- 0x211d, 0x211d, 0x211d, 0x211d, 0x2153, 0x080c, 0x0dc4, 0xa180,
- 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa070,
+ 0x0160, 0x8a51, 0x0904, 0x21b7, 0x8c60, 0x0804, 0x2007, 0xa004,
+ 0x9045, 0x0904, 0x21b7, 0x0804, 0x1fe2, 0x8a51, 0x0904, 0x21b7,
+ 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x21b7,
+ 0xa068, 0x90ec, 0x000f, 0x9de0, 0x1fb8, 0x2c05, 0x2060, 0xa884,
+ 0xc0fc, 0xa886, 0x0804, 0x21ac, 0x2c05, 0x8422, 0x8420, 0x831a,
+ 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2149, 0x9082,
+ 0x001c, 0x0002, 0x20e5, 0x20e5, 0x20e7, 0x20e5, 0x20e5, 0x20e5,
+ 0x20f5, 0x20e5, 0x20e5, 0x20e5, 0x2103, 0x20e5, 0x20e5, 0x20e5,
+ 0x2111, 0x20e5, 0x20e5, 0x20e5, 0x211f, 0x20e5, 0x20e5, 0x20e5,
+ 0x212d, 0x20e5, 0x20e5, 0x20e5, 0x213b, 0x080c, 0x0dc3, 0xa180,
+ 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa078,
+ 0x9420, 0xa07c, 0x9319, 0x0804, 0x21a7, 0xa190, 0x2400, 0x9122,
+ 0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c,
+ 0x9319, 0x0804, 0x21a7, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300,
+ 0x911b, 0x0a0c, 0x0dc3, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804,
+ 0x21a7, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
+ 0x0dc3, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x21a7, 0xa1c0,
+ 0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8,
+ 0x9420, 0xa0bc, 0x9319, 0x0804, 0x21a7, 0xa1d0, 0x2400, 0x9122,
+ 0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0c8, 0x9420, 0xa0cc,
+ 0x9319, 0x0804, 0x21a7, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
+ 0x911b, 0x0a0c, 0x0dc3, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804,
+ 0x21a7, 0x9082, 0x001c, 0x0002, 0x2167, 0x2165, 0x2165, 0x2165,
+ 0x2165, 0x2165, 0x2174, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165,
+ 0x2181, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165, 0x218e, 0x2165,
+ 0x2165, 0x2165, 0x2165, 0x2165, 0x219b, 0x080c, 0x0dc3, 0xa180,
+ 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa070,
0x9420, 0xa074, 0x9319, 0x0498, 0xa198, 0x2400, 0x9122, 0xa19c,
- 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c, 0x9319,
+ 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c, 0x9319,
0x0430, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
- 0x0dc4, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400,
- 0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8, 0x9420,
+ 0x0dc3, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400,
+ 0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8, 0x9420,
0xa0bc, 0x9319, 0x0060, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
- 0x911b, 0x0a0c, 0x0dc4, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e,
+ 0x911b, 0x0a0c, 0x0dc3, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e,
0xab22, 0xa884, 0xc0fd, 0xa886, 0x2800, 0xa85a, 0x2c00, 0xa812,
0x2a00, 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e,
0x00de, 0x00ce, 0x9085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004,
- 0xd0bc, 0x190c, 0x0dbd, 0x9084, 0x0007, 0x0002, 0x2190, 0x1d94,
- 0x2190, 0x2186, 0x2189, 0x218c, 0x2189, 0x218c, 0x080c, 0x1d94,
- 0x0005, 0x080c, 0x11a7, 0x0005, 0x080c, 0x1d94, 0x080c, 0x11a7,
+ 0xd0bc, 0x190c, 0x0dbc, 0x9084, 0x0007, 0x0002, 0x21d8, 0x1ddc,
+ 0x21d8, 0x21ce, 0x21d1, 0x21d4, 0x21d1, 0x21d4, 0x080c, 0x1ddc,
+ 0x0005, 0x080c, 0x11b3, 0x0005, 0x080c, 0x1ddc, 0x080c, 0x11b3,
0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260,
0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406,
0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002,
0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005,
- 0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22af, 0x7900, 0xd1dc,
- 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x21d7,
- 0x21cf, 0x7c74, 0x21cf, 0x21d1, 0x21d1, 0x21d1, 0x21d1, 0x7c5a,
- 0x21cf, 0x21d3, 0x21cf, 0x21d1, 0x21cf, 0x21d1, 0x21cf, 0x080c,
- 0x0dc4, 0x0031, 0x0020, 0x080c, 0x7c5a, 0x080c, 0x7c74, 0x0005,
- 0x0006, 0x0016, 0x0026, 0x080c, 0xd379, 0x7930, 0x9184, 0x0003,
+ 0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22f7, 0x7900, 0xd1dc,
+ 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x221f,
+ 0x2217, 0x7d14, 0x2217, 0x2219, 0x2219, 0x2219, 0x2219, 0x7cfa,
+ 0x2217, 0x221b, 0x2217, 0x2219, 0x2217, 0x2219, 0x2217, 0x080c,
+ 0x0dc3, 0x0031, 0x0020, 0x080c, 0x7cfa, 0x080c, 0x7d14, 0x0005,
+ 0x0006, 0x0016, 0x0026, 0x080c, 0xe106, 0x7930, 0x9184, 0x0003,
0x01c0, 0x2001, 0x19d3, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133,
- 0x2004, 0x9005, 0x090c, 0x0dc4, 0x00c6, 0x2001, 0x19d3, 0x2064,
- 0x080c, 0xb5c5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22b2,
+ 0x2004, 0x9005, 0x090c, 0x0dc3, 0x00c6, 0x2001, 0x19d3, 0x2064,
+ 0x080c, 0xbde5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22fa,
0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160,
- 0x080c, 0x72e5, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
- 0x7212, 0x0010, 0x080c, 0x5db5, 0x080c, 0x7d18, 0x0041, 0x0018,
+ 0x080c, 0x7351, 0x1138, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c,
+ 0x727e, 0x0010, 0x080c, 0x5e72, 0x080c, 0x7dc3, 0x0041, 0x0018,
0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6,
- 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x199b, 0x005e,
+ 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x19e3, 0x005e,
0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071,
- 0x1800, 0x7128, 0x2001, 0x194c, 0x2102, 0x2001, 0x1954, 0x2102,
+ 0x1800, 0x7128, 0x2001, 0x194b, 0x2102, 0x2001, 0x1953, 0x2102,
0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e,
0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398,
0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423,
@@ -890,1979 +899,1996 @@
0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4,
0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810,
0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938,
- 0x080c, 0x0dbd, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,
+ 0x080c, 0x0dbc, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,
0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001,
0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800,
- 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2a93,
- 0x080c, 0x29ae, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084,
+ 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2afc,
+ 0x080c, 0x2a17, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084,
0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084,
0xb17f, 0x9085, 0x2000, 0x6052, 0x2009, 0x1979, 0x2011, 0x197a,
- 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x29f2, 0x1238, 0x939d,
+ 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x2a5b, 0x1238, 0x939d,
0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203,
- 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x29dd, 0x9006,
- 0x080c, 0x29c0, 0x20a9, 0x0012, 0x1d04, 0x2304, 0x2091, 0x6000,
- 0x1f04, 0x2304, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,
- 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x26d8,
- 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x26e8, 0x60e7, 0x0000,
+ 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x2a46, 0x9006,
+ 0x080c, 0x2a29, 0x20a9, 0x0012, 0x1d04, 0x234c, 0x2091, 0x6000,
+ 0x1f04, 0x234c, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,
+ 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x2741,
+ 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2751, 0x60e7, 0x0000,
0x61ea, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1110,
0x2001, 0x0008, 0x60e2, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
0x0080, 0x602f, 0x0000, 0x6007, 0x149f, 0x60bb, 0x0000, 0x20a9,
- 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2339, 0x60bb, 0x0000, 0x60bf,
+ 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2381, 0x60bb, 0x0000, 0x60bf,
0x0108, 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b,
0x00f0, 0x601f, 0x001e, 0x600f, 0x006b, 0x602b, 0x402f, 0x012e,
0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083,
0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001, 0x1834, 0x2003, 0x0000,
0x2001, 0x1833, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800,
0x0006, 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184,
- 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x2399,
- 0x237f, 0x2382, 0x2385, 0x238a, 0x238c, 0x2390, 0x2394, 0x080c,
- 0x85b8, 0x00b8, 0x080c, 0x8689, 0x00a0, 0x080c, 0x8689, 0x080c,
- 0x85b8, 0x0078, 0x0099, 0x0068, 0x080c, 0x85b8, 0x0079, 0x0048,
- 0x080c, 0x8689, 0x0059, 0x0028, 0x080c, 0x8689, 0x080c, 0x85b8,
+ 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x23e1,
+ 0x23c7, 0x23ca, 0x23cd, 0x23d2, 0x23d4, 0x23d8, 0x23dc, 0x080c,
+ 0x8789, 0x00b8, 0x080c, 0x885a, 0x00a0, 0x080c, 0x885a, 0x080c,
+ 0x8789, 0x0078, 0x0099, 0x0068, 0x080c, 0x8789, 0x0079, 0x0048,
+ 0x080c, 0x885a, 0x0059, 0x0028, 0x080c, 0x885a, 0x080c, 0x8789,
0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124,
- 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x25f3, 0xd1f4, 0x190c,
- 0x0dbd, 0x080c, 0x72e5, 0x0904, 0x23f6, 0x080c, 0xbef8, 0x1120,
+ 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x2654, 0xd1f4, 0x190c,
+ 0x0dbc, 0x080c, 0x7351, 0x0904, 0x243e, 0x080c, 0xc8ce, 0x1120,
0x7000, 0x9086, 0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550,
- 0x080c, 0x7308, 0x0118, 0x080c, 0x72f6, 0x1520, 0x6027, 0x0020,
- 0x6043, 0x0000, 0x080c, 0xbef8, 0x0168, 0x080c, 0x7308, 0x1150,
- 0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x7176,
- 0x0804, 0x25f6, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6,
- 0x2069, 0x0140, 0x080c, 0x733a, 0x00de, 0x1904, 0x25f6, 0x080c,
- 0x75e6, 0x0438, 0x080c, 0x7308, 0x1904, 0x242b, 0x6024, 0x9084,
- 0x1800, 0x1110, 0x0804, 0x242b, 0x080c, 0x75e6, 0x080c, 0x75dc,
- 0x080c, 0x5ef6, 0x080c, 0x7212, 0x0804, 0x25f3, 0xd1ac, 0x1598,
+ 0x080c, 0x7374, 0x0118, 0x080c, 0x7362, 0x1520, 0x6027, 0x0020,
+ 0x6043, 0x0000, 0x080c, 0xc8ce, 0x0168, 0x080c, 0x7374, 0x1150,
+ 0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x71cd,
+ 0x0804, 0x2657, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6,
+ 0x2069, 0x0140, 0x080c, 0x73a5, 0x00de, 0x1904, 0x2657, 0x080c,
+ 0x7656, 0x0438, 0x080c, 0x7374, 0x1904, 0x2473, 0x6024, 0x9084,
+ 0x1800, 0x1110, 0x0804, 0x2473, 0x080c, 0x7656, 0x080c, 0x764c,
+ 0x080c, 0x5fb3, 0x080c, 0x727e, 0x0804, 0x2654, 0xd1ac, 0x1598,
0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x11c0, 0xd0d4, 0x1520, 0xd0cc,
- 0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x74c7, 0x0804,
- 0x25f3, 0x080c, 0xbef8, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c,
- 0x2bbf, 0x004e, 0x080c, 0x75e1, 0x0090, 0x080c, 0xbef8, 0x0130,
- 0x0046, 0x2021, 0x0002, 0x080c, 0x2bbf, 0x004e, 0x2001, 0x195a,
- 0x2003, 0x0002, 0x0020, 0x080c, 0x7423, 0x0804, 0x25f3, 0x080c,
- 0x7569, 0x0804, 0x25f3, 0xd1ac, 0x0904, 0x2514, 0x080c, 0x72e5,
- 0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xbef8,
- 0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e,
- 0x080c, 0x72ff, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
- 0x7212, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
- 0x000e, 0x080c, 0x72bd, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
+ 0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x7532, 0x0804,
+ 0x2654, 0x080c, 0xc8ce, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c,
+ 0x2c28, 0x004e, 0x080c, 0x7651, 0x0090, 0x080c, 0xc8ce, 0x0130,
+ 0x0046, 0x2021, 0x0002, 0x080c, 0x2c28, 0x004e, 0x2001, 0x1959,
+ 0x2003, 0x0002, 0x0020, 0x080c, 0x748e, 0x0804, 0x2654, 0x080c,
+ 0x75d4, 0x0804, 0x2654, 0xd1ac, 0x0904, 0x2575, 0x080c, 0x7351,
+ 0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xc8ce,
+ 0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2c28, 0x004e,
+ 0x080c, 0x736b, 0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c,
+ 0x727e, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
+ 0x000e, 0x080c, 0x7329, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043,
0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x080c,
- 0xbef8, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418,
- 0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e, 0x003e, 0x080c, 0xbef1,
- 0x1904, 0x24f1, 0x9196, 0xff00, 0x01e8, 0x705c, 0x9084, 0x00ff,
- 0x810f, 0x81ff, 0x0110, 0x9116, 0x01a8, 0x7130, 0xd18c, 0x1190,
- 0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132, 0x0060, 0x6240, 0x9294,
- 0x0010, 0x0904, 0x24f1, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00,
- 0x1904, 0x24f1, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
- 0xd1ac, 0x1904, 0x24f1, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,
- 0x8013, 0x080c, 0x4abd, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
+ 0xc8ce, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418,
+ 0x2021, 0x0000, 0x080c, 0x2c28, 0x004e, 0x003e, 0x080c, 0xc8c7,
+ 0x1904, 0x2552, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff,
+ 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550,
+ 0x080c, 0x325c, 0x0128, 0xc18d, 0x7132, 0x080c, 0x6865, 0x1510,
+ 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296,
+ 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2552, 0x7038, 0xd08c,
+ 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2552, 0xc1ad,
+ 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x4b6d, 0x003e,
+ 0x0804, 0x2552, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
+ 0xd1ac, 0x1904, 0x2552, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,
+ 0x8013, 0x080c, 0x4b6d, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
0x185f, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001, 0x2011,
- 0x0100, 0x080c, 0x8532, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000,
- 0x080c, 0xd0d7, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x31cc, 0x200d,
+ 0x0100, 0x080c, 0x8703, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000,
+ 0x080c, 0xdc90, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3268, 0x200d,
0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c,
- 0xd156, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004,
- 0x080c, 0x3037, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9, 0x007f,
- 0x900e, 0x080c, 0x6411, 0x1140, 0x7030, 0xd084, 0x1118, 0xb800,
- 0xd0bc, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x24e1, 0x00be,
- 0x015e, 0x00ce, 0x004e, 0x080c, 0x9e89, 0x60e3, 0x0000, 0x001e,
- 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0,
- 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002,
- 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1825,
- 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x25f3, 0x0016,
- 0x6220, 0xd2b4, 0x0904, 0x259c, 0x080c, 0x8420, 0x080c, 0x9623,
- 0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d, 0x0904,
- 0x256b, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6,
- 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043,
- 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001,
- 0x003c, 0x8001, 0x1df0, 0x080c, 0x2b75, 0x2001, 0x001e, 0x8001,
- 0x0240, 0x20a9, 0x0009, 0x080c, 0x2a6e, 0x6904, 0xd1dc, 0x1140,
- 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65,
- 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x7814, 0x2048, 0xa86b, 0x0103,
- 0x2f60, 0x080c, 0x9f18, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe,
- 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804,
- 0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061,
- 0x19c4, 0x6028, 0x080c, 0xbef8, 0x0120, 0x909a, 0x0003, 0x1258,
- 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c,
- 0x95ff, 0x0804, 0x25f2, 0x2061, 0x0100, 0x62c0, 0x080c, 0x9d0f,
- 0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, 0x080c,
- 0x9f88, 0x00ce, 0x0804, 0x25f2, 0xd2bc, 0x0904, 0x25df, 0x080c,
- 0x842d, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027,
- 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,
- 0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044, 0x080c,
- 0xbef8, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a, 0x00c8,
- 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558, 0x2009,
- 0x07d0, 0x080c, 0x8425, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006,
- 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x00d0,
- 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098, 0x6027,
- 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x003e,
- 0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f, 0x080c,
- 0x9f88, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2647, 0x7038, 0xd0ac,
- 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2b9f, 0x20a9,
- 0x0028, 0xa001, 0x1f04, 0x2601, 0x6150, 0x9185, 0x1400, 0x6052,
- 0x20a9, 0x0366, 0x1d04, 0x260a, 0x080c, 0x8454, 0x6020, 0xd09c,
- 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c,
- 0x2a55, 0x1f04, 0x260a, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008,
- 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x9e89, 0x60e3, 0x0000,
- 0x080c, 0xd33c, 0x080c, 0xd373, 0x080c, 0x55ab, 0xd0fc, 0x1138,
- 0x080c, 0xbef1, 0x1120, 0x9085, 0x0001, 0x080c, 0x732a, 0x9006,
- 0x080c, 0x2b65, 0x2009, 0x0002, 0x080c, 0x2a93, 0x2001, 0x1800,
- 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c,
- 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
- 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc,
- 0x70ce, 0x9116, 0x05e0, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c,
- 0x2a93, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007,
- 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4abd,
- 0x0430, 0x2001, 0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109,
- 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011,
- 0x8012, 0x080c, 0x4abd, 0x080c, 0x55ab, 0xd0fc, 0x1180, 0x080c,
- 0xbef1, 0x1168, 0x00c6, 0x080c, 0x2733, 0x080c, 0x98cb, 0x2061,
- 0x0100, 0x2019, 0x0028, 0x900e, 0x080c, 0x3037, 0x00ce, 0x012e,
- 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028,
- 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836,
- 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204,
- 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00, 0x9584,
- 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294, 0x00ff,
- 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x7f2a, 0x0048,
- 0x9584, 0x00ff, 0x9080, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f,
- 0x9006, 0x0005, 0x9080, 0x31cc, 0x200d, 0x918c, 0x00ff, 0x0005,
- 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9,
- 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x26e3, 0x00de, 0x0005,
- 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817, 0x2102,
- 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000,
- 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xd837, 0x2005,
- 0x6856, 0x8211, 0x1f04, 0x26f8, 0x002e, 0x00de, 0x000e, 0x0005,
- 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c,
- 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006,
- 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212,
- 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404,
- 0x680e, 0x1f04, 0x2728, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e,
- 0x00de, 0x015e, 0x0005, 0x080c, 0x55a7, 0xd0c4, 0x0150, 0xd0a4,
- 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xd156,
- 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4,
- 0xd0dc, 0x0904, 0x279f, 0x080c, 0x29f2, 0x0660, 0x9084, 0x0700,
- 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e,
- 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400,
- 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120,
- 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016,
- 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009,
- 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011,
- 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x854b,
- 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085,
- 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x72e5, 0x1118,
- 0x2009, 0x194a, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3,
- 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
- 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110,
- 0x080c, 0x0dbd, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001,
- 0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005, 0x2001,
- 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c,
- 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f,
- 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff,
- 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff,
- 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000,
- 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6,
- 0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc4, 0x0033,
- 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x2805, 0x2823,
- 0x2847, 0x2849, 0x2872, 0x2874, 0x2876, 0x2001, 0x0001, 0x080c,
- 0x264c, 0x080c, 0x2a50, 0x2001, 0x196e, 0x2003, 0x0000, 0x7828,
- 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2a0e,
- 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877,
- 0x080c, 0x8432, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001,
- 0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a, 0x2001,
- 0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x29c0, 0x2001, 0xffff,
- 0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001, 0x196c, 0x2003, 0x0006,
- 0x2009, 0x001e, 0x2011, 0x2877, 0x080c, 0x8432, 0x0005, 0x080c,
- 0x0dc4, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e, 0x2003,
- 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006,
- 0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x2001, 0x1972, 0x2003,
- 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001,
- 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877, 0x080c,
- 0x8432, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x0005, 0x0006,
- 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000,
- 0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007, 0x1a0c,
- 0x0dc4, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e,
- 0x000e, 0x0005, 0x2899, 0x28b5, 0x28f1, 0x291d, 0x293d, 0x2949,
- 0x294b, 0x080c, 0x2a02, 0x1190, 0x2009, 0x1974, 0x2104, 0x7a38,
- 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085,
- 0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c, 0x296f,
- 0x2001, 0xffff, 0x080c, 0x2814, 0x0005, 0x080c, 0x294d, 0x05c0,
- 0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a02, 0x1158,
- 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1974,
- 0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000, 0x200a,
- 0x9086, 0x0005, 0x0118, 0x080c, 0x2955, 0x00c0, 0x200b, 0x0000,
- 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010,
- 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x196e, 0x2003, 0x0002,
- 0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c, 0x2836,
- 0x0005, 0x080c, 0x294d, 0x0540, 0x2009, 0x1975, 0x2104, 0x8001,
- 0x200a, 0x080c, 0x2a02, 0x1148, 0x2001, 0x196c, 0x2003, 0x0003,
- 0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975, 0x2104,
- 0x9005, 0x1118, 0x080c, 0x2992, 0x0010, 0x080c, 0x2962, 0x080c,
- 0x2955, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e, 0x2003,
- 0x0001, 0x080c, 0x2836, 0x0000, 0x0005, 0x0479, 0x01e8, 0x080c,
- 0x2a02, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a, 0x9086,
- 0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a, 0x2009,
- 0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001, 0x196e,
- 0x2003, 0x0004, 0x080c, 0x2861, 0x0005, 0x0079, 0x0148, 0x080c,
- 0x2a02, 0x1118, 0x080c, 0x284d, 0x0018, 0x0079, 0x080c, 0x2861,
- 0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x2009, 0x1976, 0x2104,
- 0x8001, 0x200a, 0x090c, 0x29ae, 0x0005, 0x7a38, 0x9294, 0x0005,
- 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
- 0x29dd, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,
- 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x0005, 0x2009,
- 0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108, 0x0068,
- 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,
- 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005,
- 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
- 0x29dd, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084, 0x7fff,
- 0x090c, 0x0dc4, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a, 0x9844,
- 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc4, 0x9006,
- 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156,
- 0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04,
- 0x29b4, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e, 0x0005,
- 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838, 0x9084,
- 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c, 0x795a,
- 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009,
- 0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,
- 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004,
- 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005, 0x783a,
- 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0007,
- 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0009,
- 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, 0x2a8d,
- 0xd09c, 0x1110, 0x1f04, 0x2a05, 0x015e, 0x0005, 0x0126, 0x0016,
- 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852, 0x7850,
- 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x7852,
- 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007, 0x0090,
- 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002,
- 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b,
- 0x0004, 0x0000, 0x0006, 0x1d04, 0x2a3b, 0x080c, 0x8454, 0x1f04,
- 0x2a3b, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c,
- 0x2a8d, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005,
- 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6,
- 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820,
- 0xd0e4, 0x1140, 0x1f04, 0x2a5f, 0x0028, 0x7854, 0xd08c, 0x1110,
- 0x1f04, 0x2a65, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, 0x2a6e,
- 0x080c, 0x8454, 0x1f04, 0x2a6e, 0x0005, 0x0006, 0x2001, 0x1978,
- 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978,
- 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978,
- 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001,
- 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102, 0x000e,
- 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170,
- 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005, 0x0036,
- 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x2100,
- 0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904, 0x2b06,
- 0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208, 0x200a,
- 0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e53, 0x2019, 0x0160,
- 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084, 0x0007,
- 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003, 0x1548,
- 0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e, 0x0148,
- 0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208, 0x2732,
- 0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211, 0x19d8,
- 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186,
- 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a, 0x0008,
- 0x0421, 0x2001, 0x195e, 0x200c, 0x080c, 0x0e53, 0x004e, 0x003e,
- 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, 0x0160,
- 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, 0xff00,
- 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
- 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, 0x0100,
- 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, 0x0018,
- 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, 0x6106,
- 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e, 0x9184,
- 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124, 0x918c,
- 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, 0x919c,
- 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184,
- 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c,
- 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c,
- 0x72ff, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
- 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009,
- 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a,
- 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114,
- 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006,
- 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x72ff, 0x0110,
- 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x0006,
- 0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf,
- 0x6052, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012,
- 0x1d04, 0x2bb0, 0x080c, 0x8454, 0x1f04, 0x2bb0, 0x6050, 0x9085,
- 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005, 0x7044,
- 0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c, 0x4abd,
- 0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xd348, 0x2001,
- 0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc4, 0x0096, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x0178, 0xa884, 0xc0dd, 0xa886, 0x6020,
- 0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131,
- 0x2004, 0xa99a, 0xa89e, 0x009e, 0x080c, 0xb5c5, 0x00ce, 0x000e,
- 0x001e, 0x0005, 0x2e5e, 0x2e5e, 0x2c82, 0x2c82, 0x2c8e, 0x2c8e,
- 0x2c9a, 0x2c9a, 0x2ca8, 0x2ca8, 0x2cb4, 0x2cb4, 0x2cc2, 0x2cc2,
- 0x2cd0, 0x2cd0, 0x2ce2, 0x2ce2, 0x2cee, 0x2cee, 0x2cfc, 0x2cfc,
- 0x2d1a, 0x2d1a, 0x2d3a, 0x2d3a, 0x2d0a, 0x2d0a, 0x2d2a, 0x2d2a,
- 0x2d48, 0x2d48, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2d5a, 0x2d5a, 0x2d66, 0x2d66, 0x2d74, 0x2d74,
- 0x2d82, 0x2d82, 0x2d92, 0x2d92, 0x2da0, 0x2da0, 0x2db0, 0x2db0,
- 0x2dc0, 0x2dc0, 0x2dd2, 0x2dd2, 0x2de0, 0x2de0, 0x2df0, 0x2df0,
- 0x2e12, 0x2e12, 0x2e34, 0x2e34, 0x2e00, 0x2e00, 0x2e23, 0x2e23,
- 0x2e43, 0x2e43, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006,
- 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x21b0, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006,
- 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365,
- 0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x0804, 0x2e56, 0x0106, 0x0006,
- 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2,
- 0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x132a, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365,
- 0x080c, 0x132a, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
- 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c,
- 0x132a, 0x080c, 0x21b0, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a,
- 0x080c, 0x21b0, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
- 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c,
- 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0000, 0x015e, 0x014e,
- 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6,
- 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x6704, 0x1904, 0x2f62,
- 0x72d8, 0x2001, 0x1959, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148,
- 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2f62, 0x080c, 0x2f67, 0x0804,
- 0x2f62, 0xd2cc, 0x1904, 0x2f62, 0x080c, 0x72e5, 0x1120, 0x70ab,
- 0xffff, 0x0804, 0x2f62, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804,
- 0x2f62, 0x080c, 0x31bb, 0x0160, 0x080c, 0xbef8, 0x0128, 0x2001,
- 0x1817, 0x203c, 0x0804, 0x2ef3, 0x70ab, 0xffff, 0x0804, 0x2f62,
- 0x2001, 0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2ef3, 0xd28c,
- 0x1904, 0x2ef3, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019,
- 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120,
- 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x0588,
- 0x908e, 0x0000, 0x0570, 0x908e, 0x00ff, 0x1150, 0x080c, 0x31c0,
- 0x1568, 0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x0458,
- 0x2009, 0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010,
- 0x080c, 0x6781, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00c8, 0x900e,
- 0x080c, 0x269f, 0x080c, 0x63c1, 0x1178, 0x080c, 0x6746, 0x1120,
- 0x080c, 0x2f80, 0x0148, 0x0028, 0x080c, 0x30ab, 0x080c, 0x2fac,
- 0x0118, 0x8318, 0x0804, 0x2ea9, 0x73aa, 0x0010, 0x70ab, 0xffff,
- 0x003e, 0x0804, 0x2f62, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00,
+ 0xdd18, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019,
+ 0x0004, 0x080c, 0x30cd, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9,
+ 0x007f, 0x900e, 0x080c, 0x64fc, 0x1140, 0x7030, 0xd084, 0x1118,
+ 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x2542,
+ 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa30e, 0x60e3, 0x0000,
+ 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c,
+ 0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295,
+ 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001,
+ 0x1825, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x2654,
+ 0x0016, 0x6220, 0xd2b4, 0x0904, 0x25fd, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d,
+ 0x0904, 0x25cc, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6,
+ 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a,
+ 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000,
+ 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2bde, 0x2001, 0x001e,
+ 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2ad7, 0x6904, 0xd1dc,
+ 0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c,
+ 0x2bce, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x7814, 0x2048, 0xa86b,
+ 0x0103, 0x2f60, 0x080c, 0xa39d, 0x009e, 0x00ee, 0x00ce, 0x00de,
+ 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140,
+ 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6,
+ 0x2061, 0x19c4, 0x6028, 0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003,
+ 0x1258, 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce,
+ 0x080c, 0x98ad, 0x0804, 0x2653, 0x2061, 0x0100, 0x62c0, 0x080c,
+ 0xa194, 0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027,
+ 0x080c, 0xa419, 0x00ce, 0x0804, 0x2653, 0xd2bc, 0x0904, 0x2640,
+ 0x080c, 0x8599, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016,
+ 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000,
+ 0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044,
+ 0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a,
+ 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558,
+ 0x2009, 0x07d0, 0x080c, 0x8591, 0x9080, 0x0008, 0x2004, 0x9086,
+ 0x0006, 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116,
+ 0x00d0, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098,
+ 0x6027, 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35,
+ 0x003e, 0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f,
+ 0x080c, 0xa419, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x26ac, 0x7038,
+ 0xd0ac, 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2c08,
+ 0x20a9, 0x0028, 0xa001, 0x1f04, 0x2662, 0x6150, 0x9185, 0x1400,
+ 0x6052, 0x20a9, 0x0366, 0x1d04, 0x266b, 0x080c, 0x85c0, 0x6020,
+ 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0,
+ 0x080c, 0x2abe, 0x1f04, 0x266b, 0x015e, 0x6152, 0x001e, 0x6027,
+ 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0xa30e, 0x60e3,
+ 0x0000, 0x080c, 0xe0c9, 0x080c, 0xe100, 0x080c, 0x5668, 0xd0fc,
+ 0x1138, 0x080c, 0xc8c7, 0x1120, 0x9085, 0x0001, 0x080c, 0x7395,
+ 0x9006, 0x080c, 0x2bce, 0x2009, 0x0002, 0x080c, 0x2afc, 0x00e6,
+ 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0ea2, 0x00ee, 0x6027,
+ 0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae,
+ 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126,
+ 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904,
+ 0x2700, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2afc, 0x2011,
+ 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,
+ 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b6d, 0x0448, 0x2001,
+ 0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,
+ 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,
+ 0x4b6d, 0x080c, 0x0ea2, 0x080c, 0x5668, 0xd0fc, 0x1188, 0x080c,
+ 0xc8c7, 0x1170, 0x00c6, 0x080c, 0x279c, 0x080c, 0x9b9c, 0x2061,
+ 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, 0x080c, 0x30cd, 0x00ce,
+ 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
+ 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011,
+ 0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e,
+ 0x2204, 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00,
+ 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294,
+ 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x8050,
+ 0x0048, 0x9584, 0x00ff, 0x9080, 0x3268, 0x200d, 0x918c, 0xff00,
+ 0x810f, 0x9006, 0x0005, 0x9080, 0x3268, 0x200d, 0x918c, 0x00ff,
+ 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef,
+ 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x274c, 0x00de,
+ 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817,
+ 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853,
+ 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xe5de,
+ 0x2005, 0x6856, 0x8211, 0x1f04, 0x2761, 0x002e, 0x00de, 0x000e,
+ 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008,
+ 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016,
+ 0x0006, 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230,
+ 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001,
+ 0x0404, 0x680e, 0x1f04, 0x2791, 0x680f, 0x0000, 0x000e, 0x001e,
+ 0x002e, 0x00de, 0x015e, 0x0005, 0x080c, 0x5664, 0xd0c4, 0x0150,
+ 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c,
+ 0xdd18, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140,
+ 0x78c4, 0xd0dc, 0x0904, 0x2808, 0x080c, 0x2a5b, 0x0660, 0x9084,
+ 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458,
+ 0x908e, 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e,
+ 0x0400, 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300,
+ 0x1120, 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120,
+ 0x9016, 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016,
+ 0x2009, 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500,
+ 0x2011, 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c,
+ 0x871c, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007,
+ 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x7351,
+ 0x1118, 0x2009, 0x1949, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005,
+ 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,
+ 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003,
+ 0x0110, 0x080c, 0x0dbc, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005,
+ 0x2001, 0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005,
+ 0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c,
+ 0x918c, 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00,
+ 0x810f, 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084,
+ 0x00ff, 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084,
+ 0x00ff, 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020,
+ 0x1000, 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026,
+ 0x00e6, 0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc3,
+ 0x0033, 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x286e,
+ 0x288c, 0x28b0, 0x28b2, 0x28db, 0x28dd, 0x28df, 0x2001, 0x0001,
+ 0x080c, 0x26b1, 0x080c, 0x2ab9, 0x2001, 0x196e, 0x2003, 0x0000,
+ 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c,
+ 0x2a77, 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011,
+ 0x28e0, 0x080c, 0x859e, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000,
+ 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a,
+ 0x2001, 0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x2a29, 0x2001,
+ 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77, 0x2001, 0x196c, 0x2003,
+ 0x0006, 0x2009, 0x001e, 0x2011, 0x28e0, 0x080c, 0x859e, 0x0005,
+ 0x080c, 0x0dc3, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e,
+ 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110,
+ 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x2001, 0x1972,
+ 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77,
+ 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x28e0,
+ 0x080c, 0x859e, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x0005,
+ 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091,
+ 0x8000, 0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007,
+ 0x1a0c, 0x0dc3, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e,
+ 0x001e, 0x000e, 0x0005, 0x2902, 0x291e, 0x295a, 0x2986, 0x29a6,
+ 0x29b2, 0x29b4, 0x080c, 0x2a6b, 0x1190, 0x2009, 0x1974, 0x2104,
+ 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008,
+ 0xc085, 0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c,
+ 0x29d8, 0x2001, 0xffff, 0x080c, 0x287d, 0x0005, 0x080c, 0x29b6,
+ 0x05c0, 0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a6b,
+ 0x1158, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009,
+ 0x1974, 0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000,
+ 0x200a, 0x9086, 0x0005, 0x0118, 0x080c, 0x29be, 0x00c0, 0x200b,
+ 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006,
+ 0x0010, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x196e, 0x2003,
+ 0x0002, 0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c,
+ 0x289f, 0x0005, 0x080c, 0x29b6, 0x0540, 0x2009, 0x1975, 0x2104,
+ 0x8001, 0x200a, 0x080c, 0x2a6b, 0x1148, 0x2001, 0x196c, 0x2003,
+ 0x0003, 0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975,
+ 0x2104, 0x9005, 0x1118, 0x080c, 0x29fb, 0x0010, 0x080c, 0x29cb,
+ 0x080c, 0x29be, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e,
+ 0x2003, 0x0001, 0x080c, 0x289f, 0x0000, 0x0005, 0x0479, 0x01e8,
+ 0x080c, 0x2a6b, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a,
+ 0x9086, 0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a,
+ 0x2009, 0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001,
+ 0x196e, 0x2003, 0x0004, 0x080c, 0x28ca, 0x0005, 0x0079, 0x0148,
+ 0x080c, 0x2a6b, 0x1118, 0x080c, 0x28b6, 0x0018, 0x0079, 0x080c,
+ 0x28ca, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x2009, 0x1976,
+ 0x2104, 0x8001, 0x200a, 0x090c, 0x2a17, 0x0005, 0x7a38, 0x9294,
+ 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
+ 0x080c, 0x2a46, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,
+ 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x0005,
+ 0x2009, 0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108,
+ 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,
+ 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294,
+ 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
+ 0x080c, 0x2a46, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084,
+ 0x7fff, 0x090c, 0x0dc3, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a,
+ 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc3,
+ 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006,
+ 0x0156, 0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000,
+ 0x1f04, 0x2a1d, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e,
+ 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838,
+ 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c,
+ 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a,
+ 0x2009, 0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079,
+ 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085,
+ 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005,
+ 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082,
+ 0x0007, 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082,
+ 0x0009, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c,
+ 0x2af6, 0xd09c, 0x1110, 0x1f04, 0x2a6e, 0x015e, 0x0005, 0x0126,
+ 0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852,
+ 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000,
+ 0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007,
+ 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186,
+ 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118,
+ 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x2aa4, 0x080c, 0x85c0,
+ 0x1f04, 0x2aa4, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
+ 0x080c, 0x2af6, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e,
+ 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156,
+ 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130,
+ 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x2ac8, 0x0028, 0x7854, 0xd08c,
+ 0x1110, 0x1f04, 0x2ace, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04,
+ 0x2ad7, 0x080c, 0x85c0, 0x1f04, 0x2ad7, 0x0005, 0x0006, 0x2001,
+ 0x1978, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001,
+ 0x1978, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001,
+ 0x1978, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001,
+ 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102,
+ 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009,
+ 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005,
+ 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186,
+ 0x2100, 0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904,
+ 0x2b6f, 0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208,
+ 0x200a, 0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e51, 0x2019,
+ 0x0160, 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084,
+ 0x0007, 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003,
+ 0x1548, 0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e,
+ 0x0148, 0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208,
+ 0x2732, 0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211,
+ 0x19d8, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
+ 0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a,
+ 0x0008, 0x0421, 0x2001, 0x195d, 0x200c, 0x080c, 0x0e51, 0x004e,
+ 0x003e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001,
+ 0x0160, 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084,
+ 0xff00, 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016,
+ 0x0026, 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061,
+ 0x0100, 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017,
+ 0x0018, 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010,
+ 0x6106, 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e,
+ 0x9184, 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124,
+ 0x918c, 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e,
+ 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016,
+ 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001,
+ 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026,
+ 0x080c, 0x736b, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294,
+ 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+ 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a,
+ 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140,
+ 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005,
+ 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x736b,
+ 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005,
+ 0x0006, 0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084,
+ 0xfbcf, 0x6052, 0x080c, 0x2af6, 0x9085, 0x2000, 0x6052, 0x20a9,
+ 0x0012, 0x1d04, 0x2c19, 0x080c, 0x85c0, 0x1f04, 0x2c19, 0x6050,
+ 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005,
+ 0x7044, 0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c,
+ 0x4b6d, 0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xe0d5,
+ 0x2001, 0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc3, 0x0096,
+ 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0178, 0xa884, 0xc0dd, 0xa886,
+ 0x6020, 0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001,
+ 0x0131, 0x2004, 0xa99a, 0xa89e, 0x009e, 0x6020, 0x9086, 0x0003,
+ 0x1150, 0x080c, 0x6823, 0x0138, 0x2031, 0x0001, 0x080c, 0xbe31,
+ 0x080c, 0xc4fe, 0x0010, 0x080c, 0xbde5, 0x00ce, 0x000e, 0x001e,
+ 0x0005, 0x2ed5, 0x2ed5, 0x2cf9, 0x2cf9, 0x2d05, 0x2d05, 0x2d11,
+ 0x2d11, 0x2d1f, 0x2d1f, 0x2d2b, 0x2d2b, 0x2d39, 0x2d39, 0x2d47,
+ 0x2d47, 0x2d59, 0x2d59, 0x2d65, 0x2d65, 0x2d73, 0x2d73, 0x2d91,
+ 0x2d91, 0x2db1, 0x2db1, 0x2d81, 0x2d81, 0x2da1, 0x2da1, 0x2dbf,
+ 0x2dbf, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2dd1, 0x2dd1, 0x2ddd, 0x2ddd, 0x2deb, 0x2deb, 0x2df9,
+ 0x2df9, 0x2e09, 0x2e09, 0x2e17, 0x2e17, 0x2e27, 0x2e27, 0x2e37,
+ 0x2e37, 0x2e49, 0x2e49, 0x2e57, 0x2e57, 0x2e67, 0x2e67, 0x2e89,
+ 0x2e89, 0x2eab, 0x2eab, 0x2e77, 0x2e77, 0x2e9a, 0x2e9a, 0x2eba,
+ 0x2eba, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x21f8, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0xa001,
+ 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c,
+ 0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c,
+ 0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c,
+ 0x1336, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
+ 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x1336,
+ 0x080c, 0x21f8, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x080c,
+ 0x21f8, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
+ 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad,
+ 0x080c, 0x1336, 0x080c, 0x21f8, 0x0000, 0x015e, 0x014e, 0x013e,
+ 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6,
+ 0x0026, 0x0046, 0x9026, 0x080c, 0x682b, 0x1904, 0x2fe9, 0x72d8,
+ 0x2001, 0x1958, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284,
+ 0x1138, 0xd2bc, 0x1904, 0x2fe9, 0x080c, 0x2fee, 0x0804, 0x2fe9,
+ 0xd2cc, 0x1904, 0x2fe9, 0x080c, 0x7351, 0x1120, 0x70ab, 0xffff,
+ 0x0804, 0x2fe9, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804, 0x2fe9,
+ 0x080c, 0x3257, 0x0160, 0x080c, 0xc8ce, 0x0128, 0x2001, 0x1817,
+ 0x203c, 0x0804, 0x2f73, 0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2001,
+ 0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2f73, 0xd28c, 0x1904,
+ 0x2f73, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001,
+ 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084,
+ 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05d0, 0x908e,
+ 0x0000, 0x05b8, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x15b0,
+ 0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x04a0, 0x2009,
+ 0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010, 0x080c,
+ 0x68a8, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c,
+ 0x2708, 0x080c, 0x6497, 0x11c0, 0x080c, 0x686d, 0x1168, 0x7030,
+ 0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x6748, 0x0120,
+ 0x080c, 0x3007, 0x0148, 0x0028, 0x080c, 0x3147, 0x080c, 0x3033,
+ 0x0118, 0x8318, 0x0804, 0x2f20, 0x73aa, 0x0010, 0x70ab, 0xffff,
+ 0x003e, 0x0804, 0x2fe9, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00,
0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e,
0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,
- 0x70ab, 0xffff, 0x0804, 0x2f62, 0x2700, 0x0156, 0x0016, 0x9106,
- 0x0904, 0x2f57, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0150, 0x0026,
- 0x2011, 0x0010, 0x080c, 0x6781, 0x002e, 0x0118, 0x2009, 0xffff,
- 0x04f0, 0xc484, 0x080c, 0x6411, 0x0150, 0x080c, 0xbef8, 0x1578,
- 0x080c, 0x31bb, 0x1560, 0x080c, 0x63c1, 0x1588, 0x0008, 0xc485,
- 0x080c, 0x6746, 0x01e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6746,
- 0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x63eb, 0x0028,
- 0x080c, 0x3137, 0x01a0, 0x080c, 0x3162, 0x0088, 0x080c, 0x30ab,
- 0x080c, 0xbef8, 0x1160, 0x080c, 0x2fac, 0x0188, 0x0040, 0x080c,
- 0xbef8, 0x1118, 0x080c, 0x3137, 0x0110, 0x0451, 0x0140, 0x001e,
- 0x8108, 0x015e, 0x1f04, 0x2f0c, 0x70ab, 0xffff, 0x0018, 0x001e,
- 0x015e, 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6,
- 0x0016, 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x63c1, 0x1168,
- 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x30ab, 0x04a9, 0x0128,
- 0x70d8, 0xc0bd, 0x70da, 0x080c, 0xbc7a, 0x001e, 0x00ce, 0x0005,
- 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084,
- 0x00ff, 0xb842, 0x080c, 0x9f5b, 0x01d0, 0x2b00, 0x6012, 0x080c,
- 0xbc97, 0x6023, 0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0000,
- 0x080c, 0x6372, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6,
- 0x012e, 0x2009, 0x0004, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce,
- 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
- 0x2001, 0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9f5b,
- 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023, 0x0001, 0x9006,
- 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x0126, 0x2091,
- 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
- 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x63c1, 0x1140,
- 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff,
- 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
- 0x080c, 0x9ec2, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023,
- 0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x0126, 0x2091, 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009,
- 0x0002, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e,
- 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009,
- 0x007f, 0x080c, 0x63c1, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd,
- 0xb8bb, 0x0004, 0x080c, 0x9ec2, 0x0170, 0x2b00, 0x6012, 0x6316,
- 0x6023, 0x0001, 0x620a, 0x080c, 0xbc97, 0x2009, 0x0022, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6,
- 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x884e,
- 0x080c, 0x87ef, 0x080c, 0x9d56, 0x080c, 0xacec, 0x3e08, 0x2130,
- 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f,
- 0x900e, 0x0016, 0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x001e,
- 0x8108, 0x1f04, 0x3051, 0x9686, 0x0001, 0x190c, 0x318f, 0x00be,
- 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
- 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0,
- 0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xba10,
- 0xbb14, 0xbcac, 0x080c, 0x5f10, 0xba12, 0xbb16, 0xbcae, 0x00be,
- 0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
- 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080,
- 0x0150, 0x2071, 0x1800, 0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6,
- 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0,
- 0x8001, 0x70e2, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6,
- 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016, 0x0156,
- 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c, 0x55a7,
- 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009, 0x002d,
- 0x080c, 0xd156, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e,
- 0x0904, 0x3116, 0x928e, 0x007f, 0x0904, 0x3116, 0x928e, 0x0080,
- 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148,
- 0x2001, 0x196a, 0x0006, 0x2003, 0x0001, 0x04f1, 0x000e, 0x2003,
- 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x6710,
- 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039,
- 0x0000, 0x080c, 0x8748, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04,
- 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028,
- 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be,
- 0x0016, 0x2c08, 0x080c, 0xce89, 0x001e, 0x007e, 0x002e, 0x8210,
- 0x1f04, 0x30cd, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, 0x00be,
- 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c,
- 0x55a7, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009,
- 0x0029, 0x080c, 0xd156, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016,
- 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, 0x673e,
- 0x11d0, 0x2100, 0x080c, 0x26d2, 0x81ff, 0x01b8, 0x2019, 0x0001,
- 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00,
- 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff,
- 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e,
- 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0036,
- 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004, 0x9065,
- 0x0158, 0x0016, 0x00c6, 0x2061, 0x1a92, 0x001e, 0x6112, 0x080c,
- 0x3066, 0x001e, 0x080c, 0x63eb, 0x012e, 0x00ce, 0x001e, 0x0005,
- 0x0016, 0x0026, 0x2110, 0x080c, 0x9b81, 0x080c, 0xd251, 0x002e,
- 0x001e, 0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6,
- 0x00b6, 0x080c, 0x72e5, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,
- 0x0782, 0x080c, 0x72e5, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,
- 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800,
- 0xd0bc, 0x090c, 0x63eb, 0x8108, 0x1f04, 0x31a0, 0x2061, 0x1800,
- 0x607b, 0x0000, 0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000,
- 0x00be, 0x00ce, 0x0005, 0x2001, 0x1880, 0x2004, 0xd0bc, 0x0005,
- 0x2011, 0x185f, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x187e,
- 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
- 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
- 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
- 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,
- 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,
- 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,
- 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,
- 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,
- 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,
- 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,
- 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,
- 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,
- 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,
- 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,
- 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,
- 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,
- 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,
- 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,
- 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,
- 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,
- 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,
- 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,
- 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,
- 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,
- 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,
- 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,
- 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,
- 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,
+ 0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2700, 0x0156, 0x0016, 0x9106,
+ 0x0904, 0x2fde, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0158, 0x0026,
+ 0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0120, 0x2009, 0xffff,
+ 0x0804, 0x2fe6, 0xc484, 0x080c, 0x64fc, 0x0150, 0x080c, 0xc8ce,
+ 0x15a8, 0x080c, 0x3257, 0x1590, 0x080c, 0x6497, 0x15b8, 0x0008,
+ 0xc485, 0x080c, 0x686d, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800,
+ 0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x686d, 0x9082,
+ 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x64c1, 0x0028, 0x080c,
+ 0x31d3, 0x01a0, 0x080c, 0x31fe, 0x0088, 0x080c, 0x3147, 0x080c,
+ 0xc8ce, 0x1160, 0x080c, 0x3033, 0x0188, 0x0040, 0x080c, 0xc8ce,
+ 0x1118, 0x080c, 0x31d3, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108,
+ 0x015e, 0x1f04, 0x2f8c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e,
+ 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016,
+ 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x6497, 0x1168, 0xb813,
+ 0x00ff, 0xb817, 0xfffe, 0x080c, 0x3147, 0x04a9, 0x0128, 0x70d8,
+ 0xc0bd, 0x70da, 0x080c, 0xc617, 0x001e, 0x00ce, 0x0005, 0x0016,
+ 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084, 0x00ff,
+ 0xb842, 0x080c, 0xa3ec, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640,
+ 0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0000, 0x080c,
+ 0x6448, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,
+ 0x2009, 0x0004, 0x080c, 0xa419, 0x9085, 0x0001, 0x00ce, 0x00de,
+ 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,
+ 0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xa3ec, 0x0548,
+ 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,
+ 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,
+ 0x3102, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006, 0x080c, 0x6434,
+ 0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091, 0x8000, 0x70a4,
+ 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,
+ 0x0026, 0x2009, 0x0080, 0x080c, 0x6497, 0x1140, 0xb813, 0x00ff,
+ 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,
+ 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0xa347,
+ 0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006,
+ 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091,
+ 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,
+ 0xa419, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
+ 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,
+ 0x6497, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004,
+ 0x080c, 0xa347, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,
+ 0x620a, 0x080c, 0xc640, 0x2009, 0x0022, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,
+ 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x8a36, 0x080c, 0x89c0,
+ 0x080c, 0xa1db, 0x080c, 0xb3a0, 0x3e08, 0x2130, 0x81ff, 0x0120,
+ 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016,
+ 0x080c, 0x64fc, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc,
+ 0x1110, 0x080c, 0x5fcd, 0x001e, 0x8108, 0x1f04, 0x30e7, 0x9686,
+ 0x0001, 0x190c, 0x322b, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce,
+ 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016,
+ 0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
+ 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x2c08, 0x080c,
+ 0xda37, 0x007e, 0x001e, 0xba10, 0xbb14, 0xbcb0, 0x080c, 0x5fcd,
+ 0xba12, 0xbb16, 0xbcb2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e,
+ 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058,
+ 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4,
+ 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071,
+ 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800,
+ 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046,
+ 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
+ 0x0001, 0x0078, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4, 0x0130,
+ 0x9006, 0x2020, 0x2009, 0x002d, 0x080c, 0xdd18, 0x20a9, 0x0800,
+ 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x31b2, 0x928e, 0x007f,
+ 0x0904, 0x31b2, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c,
+ 0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, 0x196a, 0x0006, 0x2003,
+ 0x0001, 0x04f1, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158,
+ 0x2001, 0x0001, 0x080c, 0x6837, 0x00ce, 0x00be, 0x2019, 0x0029,
+ 0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x00b6,
+ 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006,
+ 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215,
+ 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xda37,
+ 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3169, 0x015e, 0x001e,
+ 0x002e, 0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005,
+ 0x0046, 0x0026, 0x0016, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4,
+ 0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xdd18, 0x001e,
+ 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290,
+ 0x82ff, 0x01e8, 0x080c, 0x6865, 0x11d0, 0x2100, 0x080c, 0x273b,
+ 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04,
+ 0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff,
+ 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085,
+ 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6,
+ 0x0126, 0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e,
+ 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061,
+ 0x1a92, 0x001e, 0x6112, 0x080c, 0x3102, 0x001e, 0x080c, 0x64c1,
+ 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c,
+ 0x9e54, 0x080c, 0xdfde, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836,
+ 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351, 0x1118,
+ 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351, 0x1110,
+ 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d,
+ 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x64c1, 0x8108,
+ 0x1f04, 0x323c, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084,
+ 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001,
+ 0x1880, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x185f, 0x2214, 0xd2ec,
+ 0x0005, 0x0026, 0x2011, 0x187e, 0x2214, 0xd2dc, 0x002e, 0x0005,
+ 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
+ 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
+ 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
+ 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
+ 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
+ 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
+ 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
+ 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
+ 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
+ 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
+ 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
+ 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
+ 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
+ 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
+ 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
+ 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
+ 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
+ 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
+ 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
+ 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
+ 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
+ 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
+ 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
+ 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
+ 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
+ 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
+ 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
+ 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
+ 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
+ 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189f, 0x7003, 0x0002,
- 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046,
- 0x703b, 0x18bb, 0x703f, 0x18bb, 0x7007, 0x0001, 0x080c, 0x101a,
- 0x090c, 0x0dc4, 0x2900, 0x706a, 0xa86b, 0x0002, 0xa8af, 0xdcb0,
- 0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x706e, 0xa86b, 0x0002,
- 0xa8af, 0xdcb0, 0x0005, 0x2071, 0x189f, 0x7004, 0x0002, 0x32fb,
- 0x32fc, 0x330f, 0x3323, 0x0005, 0x1004, 0x330c, 0x0e04, 0x330c,
- 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128,
- 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079,
- 0x0000, 0x2061, 0x18b9, 0x2c4c, 0xa870, 0x908e, 0x0100, 0x0128,
- 0x9086, 0x0200, 0x0904, 0x33f7, 0x0005, 0x7018, 0x2048, 0x2061,
- 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa868, 0x9094, 0x00ff,
- 0x9296, 0x0029, 0x1120, 0xaa7c, 0xd2fc, 0x0128, 0x0005, 0x9086,
- 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c,
- 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc,
- 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x33f4, 0x61cc, 0x0804,
- 0x3389, 0x33cb, 0x3403, 0x33f4, 0x340f, 0x3419, 0x341f, 0x3423,
- 0x3433, 0x3437, 0x344d, 0x3453, 0x3459, 0x3464, 0x346f, 0x347e,
- 0x348d, 0x349b, 0x34b2, 0x34cd, 0x33f4, 0x3578, 0x35b6, 0x3658,
- 0x3669, 0x368c, 0x33f4, 0x33f4, 0x33f4, 0x36c4, 0x36e0, 0x36e9,
- 0x3717, 0x371d, 0x33f4, 0x3763, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x376e, 0x3777, 0x377f, 0x3781, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x33f4, 0x33f4, 0x37ad, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x37ca, 0x384c, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x0002, 0x3876, 0x3879, 0x38d8, 0x38f1, 0x3921, 0x3bc3,
- 0x33f4, 0x5165, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x33f4, 0x344d, 0x3453, 0x40f8, 0x55c1, 0x410e, 0x51f4,
- 0x5246, 0x5351, 0x33f4, 0x53b3, 0x53ef, 0x5420, 0x5529, 0x544d,
- 0x54a9, 0x33f4, 0x4112, 0x42da, 0x42f0, 0x4315, 0x437a, 0x43ee,
- 0x440e, 0x4485, 0x44e1, 0x453d, 0x4540, 0x4565, 0x46ec, 0x4751,
- 0x4759, 0x488e, 0x49eb, 0x4a1f, 0x4c7f, 0x33f4, 0x4c9c, 0x4d60,
- 0x4e3d, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x4ea3, 0x4ebe, 0x4759,
- 0x5105, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4a99, 0x0126,
- 0x2091, 0x8000, 0x0e04, 0x33d5, 0x0010, 0x012e, 0x0cc0, 0x7c36,
- 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010,
- 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x7007, 0x0001, 0x2091, 0x5000,
- 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021,
- 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868,
- 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
- 0x7a8c, 0x7884, 0x7990, 0x81ff, 0x0d98, 0x0804, 0x4aa6, 0x2039,
- 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804,
- 0x4aa9, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x33cb, 0x7984,
- 0x2114, 0x0804, 0x33cb, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9,
- 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88,
- 0x7b8c, 0x0804, 0x33cb, 0x7884, 0x2060, 0x0804, 0x3480, 0x2009,
- 0x0003, 0x2011, 0x0003, 0x2019, 0x001a, 0x789b, 0x0107, 0x7893,
- 0xffff, 0x2001, 0x1890, 0x2004, 0x9005, 0x0118, 0x7896, 0x0804,
- 0x33cb, 0x7897, 0x0001, 0x0804, 0x33cb, 0x2039, 0x0001, 0x7d98,
- 0x7c9c, 0x0804, 0x3407, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804,
- 0x3413, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x2138,
- 0x7d98, 0x7c9c, 0x0804, 0x3407, 0x79a0, 0x9182, 0x0040, 0x0210,
- 0x0804, 0x3400, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3413, 0x79a0,
- 0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x21e8, 0x7984, 0x7888,
- 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x33cb, 0x2061, 0x0800,
- 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010,
- 0x9005, 0x0904, 0x33cb, 0x0804, 0x33fa, 0x79a0, 0x9182, 0x0040,
- 0x0210, 0x0804, 0x3400, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198,
- 0x4012, 0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7990, 0x911a,
- 0x1a04, 0x3400, 0x8019, 0x0904, 0x3400, 0x684a, 0x6942, 0x788c,
- 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x760d,
- 0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7994, 0x911a, 0x1a04,
- 0x3400, 0x8019, 0x0904, 0x3400, 0x684e, 0x6946, 0x788c, 0x6862,
- 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x68f1, 0x012e, 0x0804, 0x33cb, 0x902e, 0x2520, 0x81ff,
- 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x7984, 0x7b88, 0x7a8c,
- 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x18a7, 0x4101, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020,
- 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x34f1,
- 0x0005, 0xa868, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168,
- 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048,
- 0x0120, 0x9096, 0x0029, 0x1904, 0x33fd, 0x810f, 0x918c, 0x00ff,
- 0x0904, 0x33fd, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020,
- 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0x9290, 0x0040,
- 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080,
- 0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x352f, 0x0005, 0xa868,
- 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904,
- 0x33fd, 0x0888, 0x0126, 0x2091, 0x8000, 0x7014, 0x2048, 0xa86c,
- 0xc0fd, 0xa86e, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1148,
- 0xc2fd, 0xaa7e, 0x080c, 0x5ff5, 0x0138, 0xa87e, 0xa986, 0x012e,
- 0x0060, 0x080c, 0x6313, 0x1130, 0x7007, 0x0003, 0x701f, 0x355d,
- 0x012e, 0x0005, 0x080c, 0x6d45, 0x012e, 0x0126, 0x2091, 0x8000,
- 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a7, 0x400a, 0x2100,
- 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c,
- 0x9080, 0x001a, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x4aa9,
- 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000,
- 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f,
- 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061,
- 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104,
- 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x0180, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0128, 0x2001,
- 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,
- 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904,
- 0x33fd, 0x7984, 0x080c, 0x6411, 0x1904, 0x3400, 0x7e98, 0x9682,
- 0x4000, 0x1a04, 0x3400, 0x7c88, 0x7d8c, 0x080c, 0x6579, 0x080c,
- 0x6548, 0x0000, 0x1518, 0x2061, 0x1cc8, 0x0126, 0x2091, 0x8000,
+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+ 0x2071, 0x189f, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a,
+ 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f, 0x18bb,
+ 0x7007, 0x0001, 0x080c, 0x1026, 0x090c, 0x0dc3, 0x2900, 0x706a,
+ 0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x080c, 0x1026, 0x090c, 0x0dc3,
+ 0x2900, 0x706e, 0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x0005, 0x2071,
+ 0x189f, 0x7004, 0x0002, 0x3397, 0x3398, 0x33ab, 0x33bf, 0x0005,
+ 0x1004, 0x33a8, 0x0e04, 0x33a8, 0x2079, 0x0000, 0x0126, 0x2091,
+ 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468,
+ 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b9, 0x2c4c,
+ 0xa870, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3493,
+ 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014,
+ 0x2048, 0xa868, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa7c,
+ 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079,
+ 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880,
+ 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f,
+ 0x1a04, 0x3490, 0x61cc, 0x0804, 0x3425, 0x3467, 0x349f, 0x3490,
+ 0x34ab, 0x34b5, 0x34bb, 0x34bf, 0x34cf, 0x34d3, 0x34e9, 0x34ef,
+ 0x34f5, 0x3500, 0x350b, 0x351a, 0x3529, 0x3537, 0x354e, 0x3569,
+ 0x3490, 0x3614, 0x3652, 0x36f4, 0x3705, 0x3728, 0x3490, 0x3490,
+ 0x3490, 0x3760, 0x377c, 0x3785, 0x37b3, 0x37b9, 0x3490, 0x37ff,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x380a, 0x3813, 0x381b,
+ 0x381d, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3849,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3866, 0x38ea, 0x3490,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x0002, 0x3914, 0x3917,
+ 0x3976, 0x398f, 0x39bf, 0x3c61, 0x3490, 0x5222, 0x3490, 0x3490,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x34e9, 0x34ef,
+ 0x4196, 0x567e, 0x41ac, 0x52b1, 0x5303, 0x540e, 0x3490, 0x5470,
+ 0x54ac, 0x54dd, 0x55e6, 0x550a, 0x5566, 0x3490, 0x41b0, 0x437d,
+ 0x4393, 0x43b8, 0x441d, 0x4491, 0x44b1, 0x4528, 0x4584, 0x45e0,
+ 0x45e3, 0x4608, 0x478f, 0x47f4, 0x47fc, 0x4931, 0x4a9b, 0x4acf,
+ 0x4d2f, 0x3490, 0x4d4d, 0x4e1d, 0x4efa, 0x3490, 0x3490, 0x3490,
+ 0x3490, 0x4f60, 0x4f7b, 0x47fc, 0x51c2, 0x714c, 0x0000, 0x2021,
+ 0x4000, 0x080c, 0x4b49, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3471,
+ 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+ 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e,
+ 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9,
+ 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005,
+ 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003,
+ 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039,
+ 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x81ff,
+ 0x0d98, 0x0804, 0x4b56, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
+ 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4b59, 0x7984, 0x7888, 0x2114,
+ 0x200a, 0x0804, 0x3467, 0x7984, 0x2114, 0x0804, 0x3467, 0x20e1,
+ 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9,
+ 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3467, 0x7884,
+ 0x2060, 0x0804, 0x351c, 0x2009, 0x0003, 0x2011, 0x0003, 0x2019,
+ 0x001a, 0x789b, 0x0117, 0x7893, 0xffff, 0x2001, 0x1890, 0x2004,
+ 0x9005, 0x0118, 0x7896, 0x0804, 0x3467, 0x7897, 0x0001, 0x0804,
+ 0x3467, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34a3, 0x2039,
+ 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040,
+ 0x0210, 0x0804, 0x349c, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x34a3,
+ 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x2138, 0x7d98,
+ 0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
+ 0x349c, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004,
+ 0x0804, 0x3467, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200,
+ 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3467, 0x0804,
+ 0x3496, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x21e0,
+ 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3467, 0x2069,
+ 0x185e, 0x7884, 0x7990, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904,
+ 0x349c, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006,
+ 0x685a, 0x685e, 0x080c, 0x767d, 0x0804, 0x3467, 0x2069, 0x185e,
+ 0x7884, 0x7994, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904, 0x349c,
+ 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a,
+ 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69d9, 0x012e, 0x0804,
+ 0x3467, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+ 0x3499, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001,
+ 0x20a1, 0x18a7, 0x4101, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x2009, 0x0020, 0xa85c, 0x9080, 0x001a, 0xaf60,
+ 0x080c, 0x4b56, 0x701f, 0x358d, 0x0005, 0xa868, 0x2008, 0x9084,
+ 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096,
+ 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904,
+ 0x3499, 0x810f, 0x918c, 0x00ff, 0x0904, 0x3499, 0x7112, 0x7010,
+ 0x8001, 0x0560, 0x7012, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x2009, 0x0020, 0x7068, 0x2040, 0xa290, 0xa394,
+ 0xa498, 0xa59c, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,
+ 0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56,
+ 0x701f, 0x35cb, 0x0005, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0002,
+ 0x0120, 0x9096, 0x000a, 0x1904, 0x3499, 0x0888, 0x0126, 0x2091,
+ 0x8000, 0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0xa868, 0x9084,
+ 0x00ff, 0x9096, 0x0029, 0x1148, 0xc2fd, 0xaa7e, 0x080c, 0x60c5,
+ 0x0138, 0xa87e, 0xa986, 0x012e, 0x0060, 0x080c, 0x63e9, 0x1130,
+ 0x7007, 0x0003, 0x701f, 0x35f9, 0x012e, 0x0005, 0x080c, 0x6e4b,
+ 0x012e, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001,
+ 0x2099, 0x18a7, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1,
+ 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0x2009, 0x0020,
+ 0x012e, 0xaf60, 0x0804, 0x4b59, 0x2091, 0x8000, 0x7837, 0x4000,
+ 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020,
+ 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896,
+ 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205,
+ 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091,
+ 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19f8,
+ 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8,
+ 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080,
+ 0x0804, 0x0427, 0x81ff, 0x1904, 0x3499, 0x7984, 0x080c, 0x64fc,
+ 0x1904, 0x349c, 0x7e98, 0x9682, 0x4000, 0x1a04, 0x349c, 0x7c88,
+ 0x7d8c, 0x080c, 0x6681, 0x080c, 0x6650, 0x0000, 0x1518, 0x2061,
+ 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
+ 0x6014, 0x904d, 0x0130, 0xa870, 0x9406, 0x1118, 0xa874, 0x9506,
+ 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02,
+ 0x1a04, 0x3499, 0x0c30, 0x080c, 0xbde5, 0x012e, 0x0904, 0x3499,
+ 0x0804, 0x3467, 0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0xc4c0, 0x080c, 0x6c02, 0x012e, 0x0804,
+ 0x3467, 0x00a6, 0x2950, 0xb19c, 0x080c, 0x64fc, 0x1904, 0x36e1,
+ 0xb6a8, 0x9682, 0x4000, 0x16e8, 0xb4a0, 0xb5a4, 0x080c, 0x6681,
+ 0x080c, 0x6650, 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000,
0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa870,
- 0x9406, 0x1118, 0xa874, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x000c,
- 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33fd, 0x0c30, 0x080c,
- 0xb5c5, 0x012e, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x900e, 0x2001,
- 0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000, 0x080c, 0xbc45,
- 0x080c, 0x6b1d, 0x012e, 0x0804, 0x33cb, 0x00a6, 0x2950, 0xb19c,
- 0x080c, 0x6411, 0x1904, 0x3645, 0xb6a8, 0x9682, 0x4000, 0x16e8,
- 0xb4a0, 0xb5a4, 0x080c, 0x6579, 0x080c, 0x6548, 0x1520, 0x2061,
- 0x1cc8, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
- 0x6014, 0x904d, 0x0130, 0xa870, 0x9406, 0x1118, 0xa874, 0x9506,
- 0x0158, 0x012e, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb5c5, 0x012e, 0x2009,
- 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6d45,
- 0x0126, 0x2091, 0x8000, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x012e,
- 0x0070, 0xb09b, 0x4005, 0xb19e, 0x0010, 0xb09b, 0x4006, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb09b,
- 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005,
- 0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c,
- 0x64bb, 0x0904, 0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x0804,
- 0x4405, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a90, 0x0904, 0x3400,
- 0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0005, 0x79a8, 0x080c,
- 0x6592, 0x0904, 0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400,
- 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x836c, 0x79a8, 0xd184,
- 0x1904, 0x33cb, 0x0804, 0x4405, 0x0126, 0x2091, 0x8000, 0x81ff,
- 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x6458, 0x2400,
- 0x9506, 0x01f8, 0x2508, 0x080c, 0x6411, 0x11d8, 0x080c, 0x660e,
- 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019, 0x0004,
- 0x900e, 0x080c, 0x6592, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884,
- 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,
- 0x836c, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x33cb, 0x012e, 0x0804,
- 0x33fd, 0x012e, 0x0804, 0x3400, 0x080c, 0x4a78, 0x0904, 0x3400,
- 0x080c, 0x64bb, 0x0904, 0x33fd, 0xbaa0, 0x2019, 0x0005, 0x00c6,
- 0x9066, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e,
- 0x080c, 0xce89, 0x007e, 0x00ce, 0x080c, 0x6579, 0x0804, 0x33cb,
- 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6579, 0x2208, 0x0804,
- 0x33cb, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1911, 0x6810, 0x6914,
- 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e,
- 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210,
- 0x8d68, 0x1f04, 0x36fa, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e,
- 0x0804, 0x33cb, 0x0086, 0x9045, 0x0140, 0x0016, 0x900e, 0x8108,
- 0xa000, 0x9045, 0x1de0, 0x2100, 0x001e, 0x008e, 0x0005, 0x2069,
- 0x1911, 0x6910, 0x62b8, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009,
- 0x0001, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000, 0x080c, 0x55bb,
- 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x33fd, 0x012e, 0x6158,
- 0x9190, 0x31cc, 0x2215, 0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108,
- 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031,
- 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031,
- 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031,
- 0x0002, 0x0068, 0x080c, 0x72e5, 0x1118, 0x2031, 0x0004, 0x0038,
- 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x33fd, 0x9036, 0x7e9a,
- 0x7f9e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x2019, 0x1963, 0x231c,
- 0x2001, 0x1964, 0x2004, 0x789a, 0x0804, 0x33cb, 0x0126, 0x2091,
- 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x33cb, 0x080c,
- 0x4a90, 0x0904, 0x3400, 0xba44, 0xbb38, 0x0804, 0x33cb, 0x080c,
- 0x0dc4, 0x080c, 0x4a90, 0x2110, 0x0904, 0x3400, 0xb804, 0x908c,
- 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600,
- 0x2009, 0x0009, 0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x2019,
- 0x0005, 0x00c6, 0x9066, 0x080c, 0x9b81, 0x080c, 0x8843, 0x0076,
- 0x903e, 0x080c, 0x8748, 0x900e, 0x080c, 0xce89, 0x007e, 0x00ce,
- 0xb807, 0x0407, 0x012e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x7884,
- 0x604a, 0x7b88, 0x634e, 0x2069, 0x185e, 0x831f, 0x9305, 0x6816,
- 0x788c, 0x2069, 0x1963, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014,
- 0x1210, 0x2031, 0x07d0, 0x2069, 0x1964, 0x2d04, 0x266a, 0x789a,
- 0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884, 0x603a,
- 0x910e, 0xd1b4, 0x0118, 0x080c, 0x0ecd, 0x7884, 0xd094, 0x0148,
- 0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0, 0x1208, 0x713e,
- 0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x1979, 0x200a,
- 0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086,
- 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de,
- 0x7884, 0xd0b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888,
- 0x603e, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036, 0x2001,
- 0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2088, 0x00c6, 0x2061,
- 0x1aa0, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c,
- 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x788c,
- 0x6042, 0x6040, 0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x31cc,
- 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804,
- 0x33cb, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf,
- 0x9215, 0xa8a0, 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084,
- 0x0140, 0x9215, 0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888,
- 0x9025, 0x0904, 0x3400, 0x788c, 0x902d, 0x0904, 0x3400, 0x900e,
- 0x080c, 0x6411, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186,
- 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x4a90, 0x0904, 0x3400,
- 0x7888, 0x900d, 0x0904, 0x3400, 0x788c, 0x9005, 0x0904, 0x3400,
- 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x33cb, 0x2011, 0xbc09,
- 0x0010, 0x2011, 0xbc05, 0x080c, 0x55bb, 0x1904, 0x33fd, 0x00c6,
- 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817,
- 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188,
- 0x31cc, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026,
- 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000,
- 0x0006, 0x080c, 0x9ec2, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984,
- 0x00b6, 0x080c, 0x63c7, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023,
- 0x0001, 0x080c, 0x4a61, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003,
- 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x701f, 0x38d1, 0x2900, 0x6016,
- 0x2009, 0x0032, 0x080c, 0x9f88, 0x012e, 0x00ce, 0x0005, 0x012e,
- 0x00ce, 0x0804, 0x33fd, 0x00ce, 0x0804, 0x3400, 0x080c, 0x9f18,
- 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x33fd, 0x0804, 0x33cb,
- 0x2061, 0x1a4f, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170,
- 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc,
- 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x33cb, 0x900e, 0x2110,
- 0x0c88, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5, 0x0904, 0x33fd,
- 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085,
- 0x0001, 0x080c, 0x2708, 0x080c, 0x57d9, 0x012e, 0x0804, 0x33cb,
- 0x012e, 0x0804, 0x3400, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001,
- 0x1986, 0x2070, 0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011,
- 0x1400, 0x080c, 0x854b, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021,
- 0x400b, 0x0804, 0x33cd, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a,
- 0x2004, 0x9005, 0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804,
- 0x3400, 0x2001, 0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e,
- 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3400, 0x012e, 0x0804,
- 0x33fd, 0x080c, 0x9e82, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x39a0,
- 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884,
- 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004,
- 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004,
- 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004,
- 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004,
- 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3b26,
- 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930,
- 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906,
+ 0x9406, 0x1118, 0xa874, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018,
+ 0x2001, 0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28,
+ 0x080c, 0xbde5, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e,
+ 0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xc4c0, 0x080c, 0x6bf5, 0x012e, 0x0070, 0xb09b, 0x4005, 0xb19e,
+ 0x0010, 0xb09b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
+ 0x2a48, 0x00ae, 0x0005, 0xb09b, 0x4000, 0x9006, 0x918d, 0x0001,
+ 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x3499, 0x080c,
+ 0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499, 0x080c,
+ 0x668b, 0x0904, 0x3499, 0x0804, 0x44a8, 0x81ff, 0x1904, 0x3499,
+ 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499,
+ 0x2019, 0x0005, 0x79a8, 0x080c, 0x669a, 0x0904, 0x3499, 0x7888,
+ 0x908a, 0x1000, 0x1a04, 0x349c, 0x8003, 0x800b, 0x810b, 0x9108,
+ 0x080c, 0x84d0, 0x79a8, 0xd184, 0x1904, 0x3467, 0x0804, 0x44a8,
+ 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450,
+ 0x2029, 0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c,
+ 0x64fc, 0x11d8, 0x080c, 0x6716, 0x1128, 0x2009, 0x0002, 0x62bc,
+ 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x1118,
+ 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003,
+ 0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x8529, 0x1ae0, 0x012e,
+ 0x0804, 0x3467, 0x012e, 0x0804, 0x3499, 0x012e, 0x0804, 0x349c,
+ 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499,
+ 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x8a2b, 0x0076,
+ 0x903e, 0x080c, 0x8919, 0x900e, 0x080c, 0xda37, 0x007e, 0x00ce,
+ 0x080c, 0x6681, 0x0804, 0x3467, 0x080c, 0x4b28, 0x0904, 0x349c,
+ 0x080c, 0x6681, 0x2208, 0x0804, 0x3467, 0x0156, 0x00d6, 0x00e6,
+ 0x2069, 0x1911, 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816,
+ 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d,
+ 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04, 0x3796, 0x2300,
+ 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3467, 0x0086, 0x9045,
+ 0x0140, 0x0016, 0x900e, 0x8108, 0xa000, 0x9045, 0x1de0, 0x2100,
+ 0x001e, 0x008e, 0x0005, 0x2069, 0x1911, 0x6910, 0x62b8, 0x0804,
+ 0x3467, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x5678, 0x0128, 0x2009, 0x0007, 0x012e,
+ 0x0804, 0x3499, 0x012e, 0x6158, 0x9190, 0x3268, 0x2215, 0x9294,
+ 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a,
+ 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022,
+ 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012,
+ 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x7351,
+ 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005,
+ 0x0804, 0x3499, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3467, 0x6148,
+ 0x624c, 0x2019, 0x1962, 0x231c, 0x2001, 0x1963, 0x2004, 0x789a,
+ 0x0804, 0x3467, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340,
+ 0x012e, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0xba44,
+ 0xbb38, 0x0804, 0x3467, 0x080c, 0x0dc3, 0x080c, 0x4b40, 0x2110,
+ 0x0904, 0x349c, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140,
+ 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3499,
+ 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,
+ 0x9e54, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e,
+ 0x080c, 0xda37, 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804,
+ 0x3467, 0x6148, 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069,
+ 0x185e, 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1962, 0x2d1c,
+ 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069,
+ 0x1963, 0x2d04, 0x266a, 0x789a, 0x0804, 0x3467, 0x0126, 0x2091,
+ 0x8000, 0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ebd,
+ 0xd094, 0x0148, 0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0,
+ 0x1208, 0x713e, 0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009,
+ 0x1979, 0x200a, 0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100,
+ 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c,
+ 0x695a, 0x00de, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036,
+ 0x2001, 0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2450, 0x00c6,
+ 0x2061, 0x1aac, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888,
+ 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112,
+ 0x603c, 0x7988, 0x613e, 0x6140, 0x910d, 0x788c, 0x6042, 0x7a88,
+ 0x9294, 0x1000, 0x9205, 0x910e, 0xd1e4, 0x190c, 0x0ed3, 0x6040,
+ 0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x3268, 0xd0cc, 0x0120,
+ 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3467, 0x00f6,
+ 0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf, 0x9215, 0xa8a0,
+ 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215,
+ 0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
+ 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904,
+ 0x349c, 0x788c, 0x902d, 0x0904, 0x349c, 0x900e, 0x080c, 0x64fc,
+ 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190,
+ 0x8108, 0x0ca0, 0x080c, 0x4b40, 0x0904, 0x349c, 0x7888, 0x900d,
+ 0x0904, 0x349c, 0x788c, 0x9005, 0x0904, 0x349c, 0xba44, 0xb946,
+ 0xbb38, 0xb83a, 0x0804, 0x3467, 0x2011, 0xbc09, 0x0010, 0x2011,
+ 0xbc05, 0x080c, 0x5678, 0x1904, 0x3499, 0x00c6, 0x2061, 0x0100,
+ 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817, 0x2004, 0x9085,
+ 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x3268, 0x210d,
+ 0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026, 0x9116, 0x002e,
+ 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c,
+ 0xa347, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c,
+ 0x649d, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c,
+ 0x4b11, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003, 0xa832, 0xa86c,
+ 0xc0fd, 0xa86e, 0x701f, 0x396f, 0x2900, 0x6016, 0x2009, 0x0032,
+ 0x080c, 0xa419, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804,
+ 0x3499, 0x00ce, 0x0804, 0x349c, 0x080c, 0xa39d, 0x0cb0, 0xa830,
+ 0x9086, 0x0100, 0x0904, 0x3499, 0x0804, 0x3467, 0x2061, 0x1a4f,
+ 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208,
+ 0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8,
+ 0x78aa, 0x012e, 0x0804, 0x3467, 0x900e, 0x2110, 0x0c88, 0x81ff,
+ 0x1904, 0x3499, 0x080c, 0x7351, 0x0904, 0x3499, 0x0126, 0x2091,
+ 0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c,
+ 0x2771, 0x080c, 0x5896, 0x012e, 0x0804, 0x3467, 0x012e, 0x0804,
+ 0x349c, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x1986, 0x2070,
+ 0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c,
+ 0x871c, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,
+ 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804,
+ 0x3469, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a, 0x2004, 0x9005,
+ 0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804, 0x349c, 0x2001,
+ 0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e, 0x6908, 0x9102,
+ 0x1230, 0x012e, 0x0804, 0x349c, 0x012e, 0x0804, 0x3499, 0x080c,
+ 0xa307, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3a3e, 0x00c6, 0x080c,
+ 0x4b11, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884, 0xa80a, 0x7898,
+ 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001,
+ 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001,
+ 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001,
+ 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003,
+ 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3bc4, 0x0928, 0x7014,
+ 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4,
+ 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007,
+ 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c, 0x4b56,
+ 0x701f, 0x3b01, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086,
+ 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
+ 0x39a9, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061,
+ 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf,
+ 0x0012, 0x080c, 0x3c33, 0x080c, 0x3bf2, 0x00f6, 0x00e6, 0x0086,
+ 0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
+ 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001,
+ 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3fda,
+ 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc, 0x080c, 0x3e01, 0x05b8,
+ 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x404e,
+ 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560,
+ 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086,
+ 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086,
+ 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c,
+ 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106, 0x1168, 0x00c6,
+ 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c,
+ 0x3e0b, 0x080c, 0x3bed, 0x0058, 0x080c, 0x3bed, 0x080c, 0x3f72,
+ 0x080c, 0x3ef2, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001,
+ 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e,
+ 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf,
+ 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd,
+ 0x2102, 0x080c, 0x12c4, 0x2009, 0x0028, 0x080c, 0x22fa, 0x2001,
+ 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+ 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c, 0x2004, 0x9005,
+ 0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804,
+ 0x3469, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086,
+ 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000,
+ 0x7022, 0xa804, 0x9005, 0x0904, 0x3b5d, 0x2048, 0x1f04, 0x3b11,
+ 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0xa930, 0xa808,
+ 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014,
+ 0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006,
+ 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c,
+ 0x4b56, 0x701f, 0x3b01, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc,
+ 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098,
+ 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f8a, 0x000e, 0x080c, 0x4b59,
+ 0x701f, 0x3b01, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e,
+ 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa868,
+ 0x9086, 0x0103, 0x1118, 0x701f, 0x3bc2, 0x0450, 0x7014, 0x2048,
+ 0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c, 0x6497, 0x0110,
+ 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xc693,
+ 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e,
+ 0x002e, 0x001e, 0x0904, 0x3499, 0x0016, 0x0026, 0x0036, 0x0046,
+ 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3b94,
+ 0x7007, 0x0003, 0x0804, 0x3b52, 0xa830, 0x9086, 0x0100, 0x2021,
+ 0x400c, 0x0904, 0x3469, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20,
+ 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000,
+ 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+ 0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,
+ 0x0f8a, 0x000e, 0x080c, 0x4b59, 0x007e, 0x701f, 0x3b01, 0x7023,
+ 0x0001, 0x0005, 0x0804, 0x3467, 0x0156, 0x00c6, 0xa814, 0x908a,
+ 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff,
+ 0x0168, 0x0016, 0x080c, 0x4b11, 0x001e, 0x0130, 0xa800, 0x2040,
+ 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001,
+ 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880,
+ 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x197c, 0x2003,
+ 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001,
+ 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004,
+ 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4b11, 0xa813, 0x001a,
+ 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa86a,
+ 0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090, 0x2079, 0x0100,
+ 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x22fa,
+ 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x601a, 0xa877,
+ 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce,
+ 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4b11, 0x2940, 0xa013,
+ 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+ 0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004,
+ 0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001, 0x032a, 0x2003,
+ 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003,
+ 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee,
+ 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2aee,
+ 0x1130, 0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x2001,
+ 0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007, 0x0002, 0x3c82,
+ 0x3c8b, 0x3c94, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x012e,
+ 0x0804, 0x349c, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,
+ 0x080c, 0x3e55, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,
+ 0x200a, 0x080c, 0x3e55, 0x0078, 0x080c, 0x7351, 0x1128, 0x012e,
+ 0x2009, 0x0016, 0x0804, 0x3499, 0x81ff, 0x0128, 0x012e, 0x2021,
+ 0x400b, 0x0804, 0x3469, 0x2001, 0x0141, 0x2004, 0xd0dc, 0x0db0,
+ 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
+ 0x080c, 0x39a9, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc,
+ 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x4129, 0x080c, 0x4079,
+ 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44,
+ 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
+ 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,
+ 0x3fda, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c,
+ 0x2af6, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc,
+ 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3e0b, 0x2001, 0x0004,
+ 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de,
+ 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c,
+ 0x3499, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10,
+ 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001,
+ 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3eda, 0x2d00, 0x9c05,
+ 0x9b05, 0x0120, 0x080c, 0x3e0b, 0x0804, 0x3db8, 0x080c, 0x404e,
+ 0x080c, 0x3f72, 0x080c, 0x3ebd, 0x080c, 0x3ef2, 0x00f6, 0x2079,
+ 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3e0b, 0x00fe,
+ 0x0804, 0x3db8, 0x00fe, 0x080c, 0x3e01, 0x1150, 0x8d68, 0x2001,
+ 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3e0b, 0x0080,
+ 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739,
+ 0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000, 0x1904, 0x3d08,
+ 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500,
+ 0x9605, 0x0904, 0x3db8, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05,
+ 0x9b05, 0x1904, 0x3db8, 0xa013, 0x001a, 0x2001, 0x032a, 0x2003,
+ 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41, 0x2003, 0x0003,
+ 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4,
+ 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c,
+ 0x22fa, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884, 0xd0a4, 0x1180,
+ 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b,
+ 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3d8f, 0x00ce, 0x0030,
+ 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6,
+ 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a,
+ 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004,
+ 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3cc2,
+ 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100,
+ 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001,
+ 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12c4, 0x7884,
+ 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c,
+ 0x22fa, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef,
+ 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043,
+ 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05,
+ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,
+ 0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804,
+ 0x3469, 0x9085, 0x0001, 0x1d04, 0x3e0a, 0x2091, 0x6000, 0x8420,
+ 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001,
+ 0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003, 0x0000, 0x0071,
+ 0x2009, 0x0048, 0x080c, 0x22fa, 0x2001, 0x0227, 0x2024, 0x2402,
+ 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6,
+ 0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090,
+ 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120,
+ 0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x0d88, 0x080c,
+ 0x404e, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c,
+ 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b, 0x0002,
+ 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,
+ 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x2751, 0x7850,
+ 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319,
+ 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046,
+ 0x1d04, 0x3e70, 0x2091, 0x6000, 0x1f04, 0x3e70, 0x7850, 0x9085,
+ 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084,
+ 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852,
+ 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028,
+ 0xa001, 0x1f04, 0x3e90, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019,
+ 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8,
+ 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040,
+ 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100,
+ 0x080c, 0x2bce, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c,
+ 0x2bce, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8,
+ 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320, 0x2001, 0x0201,
+ 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051,
+ 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee,
+ 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
+ 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a,
+ 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108,
+ 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110,
+ 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001,
+ 0x1987, 0x2004, 0x70e2, 0x080c, 0x3be3, 0x1188, 0x2001, 0x181f,
+ 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a,
+ 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c,
+ 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e, 0x7063,
+ 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077,
+ 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082,
+ 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab,
+ 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092,
+ 0x7016, 0x080c, 0x404e, 0x00f6, 0x2071, 0x1a41, 0x2079, 0x0320,
+ 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e,
+ 0x6898, 0x780a, 0x00de, 0x080c, 0x3be3, 0x0140, 0x2001, 0x197b,
+ 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120, 0x2009, 0x03e8,
+ 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011,
+ 0x0011, 0x080c, 0x3fda, 0x2011, 0x0001, 0x080c, 0x3fda, 0x00fe,
+ 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320,
+ 0x792c, 0xd1fc, 0x0904, 0x3fd7, 0x782b, 0x0002, 0x9026, 0xd19c,
+ 0x1904, 0x3fd3, 0x7000, 0x0002, 0x3fd7, 0x3f88, 0x3fb8, 0x3fd3,
+ 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001,
+ 0x080c, 0x3fda, 0x0904, 0x3fd7, 0x080c, 0x3fda, 0x0804, 0x3fd7,
+ 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914,
+ 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff,
+ 0x0de8, 0x080c, 0x3eda, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300,
+ 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8,
+ 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904,
+ 0x3f7c, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004,
+ 0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0032, 0xa212,
+ 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee,
+ 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096,
+ 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032, 0x911a, 0x831c,
+ 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc3, 0x9398, 0x4008, 0x231d,
+ 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e,
+ 0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804,
+ 0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005,
+ 0x4045, 0x403c, 0x4033, 0x402a, 0x4021, 0x4018, 0x400f, 0xa968,
+ 0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974, 0x7916, 0x0005,
+ 0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912, 0xa984, 0x7916,
+ 0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990, 0x7912, 0xa994,
+ 0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906, 0xa9a0, 0x7912,
+ 0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac, 0x7906, 0xa9b0,
+ 0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902, 0xa9bc, 0x7906,
+ 0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8, 0x7902, 0xa9cc,
+ 0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005, 0x00f6, 0x00e6,
+ 0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8,
+ 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x4075, 0x4061,
+ 0x406c, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c,
+ 0x3fda, 0x190c, 0x3fda, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc,
+ 0x1d38, 0x2011, 0x0001, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe,
+ 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001,
+ 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004,
+ 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005,
+ 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c,
+ 0x080c, 0x4b11, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a,
+ 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
+ 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c,
+ 0x40f1, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4b11, 0xa813,
+ 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,
+ 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004,
+ 0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004, 0xa876, 0x2061,
+ 0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009,
+ 0x0040, 0x080c, 0x22fa, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+ 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,
+ 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
+ 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1,
+ 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006,
+ 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b,
+ 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040,
+ 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940,
+ 0x0086, 0x080c, 0x4b11, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900,
+ 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee,
+ 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038,
+ 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4b11,
+ 0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,
+ 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,
+ 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c, 0x40f1,
+ 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4b11, 0x2940, 0xa013,
+ 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+ 0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001, 0x002a, 0x2004,
+ 0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004, 0xa076, 0x2001,
+ 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101,
+ 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a41,
+ 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300,
+ 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,
+ 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006,
+ 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052,
+ 0x0108, 0x0005, 0x0804, 0x3467, 0x7d98, 0x7c9c, 0x0804, 0x356b,
+ 0x080c, 0x7351, 0x190c, 0x5f78, 0x2069, 0x185e, 0x2d00, 0x2009,
+ 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c,
+ 0x4b56, 0x701f, 0x41c4, 0x0005, 0x080c, 0x5673, 0x1130, 0x3b00,
+ 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x185e, 0x6800,
+ 0x9005, 0x0904, 0x349c, 0x2001, 0x180d, 0x2004, 0xd08c, 0x6804,
+ 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118, 0xd0a4, 0x0904,
+ 0x349c, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200,
+ 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020,
+ 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118,
+ 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084,
+ 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x349c, 0x9288, 0x3268,
+ 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, 0x908a,
+ 0x007f, 0x1a04, 0x349c, 0x605a, 0x6888, 0x9084, 0x0030, 0x8004,
+ 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e, 0x9080, 0x284c,
+ 0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080, 0x2850, 0x2005,
+ 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x349c, 0x908a, 0x0841,
+ 0x1a04, 0x349c, 0x9084, 0x0007, 0x1904, 0x349c, 0x680c, 0x9005,
+ 0x0904, 0x349c, 0x6810, 0x9005, 0x0904, 0x349c, 0x6848, 0x6940,
+ 0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x684c, 0x6944,
+ 0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x2009, 0x195d,
+ 0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0140, 0x7884,
+ 0x200a, 0x2008, 0x080c, 0x0e51, 0x3b00, 0xc085, 0x20d8, 0x6814,
+ 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, 0x080c,
+ 0x767d, 0x080c, 0x696f, 0x080c, 0x69d9, 0x6808, 0x602a, 0x080c,
+ 0x226c, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b,
+ 0x0000, 0x0036, 0x6b08, 0x080c, 0x27ab, 0x003e, 0x6000, 0x9086,
+ 0x0000, 0x1904, 0x436d, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007,
+ 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04,
+ 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f,
+ 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e,
+ 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1,
+ 0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19aa,
+ 0x20e9, 0x0001, 0x4001, 0x080c, 0x8615, 0x00c6, 0x900e, 0x20a9,
+ 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c,
+ 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0,
+ 0x3508, 0x8109, 0x080c, 0x7c58, 0x6878, 0x6016, 0x6874, 0x2008,
+ 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108,
+ 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x42bd,
+ 0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d, 0x2004, 0xd08c,
+ 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158,
+ 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001,
+ 0x080c, 0x2a29, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001,
+ 0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0028, 0x9286,
+ 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c,
+ 0x0ea2, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204,
+ 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030,
+ 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x1958,
+ 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010,
+ 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2820,
+ 0x2001, 0x1949, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100,
+ 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x7351, 0x0128,
+ 0x080c, 0x4f54, 0x0110, 0x080c, 0x2771, 0x60d0, 0x9005, 0x01c0,
+ 0x6003, 0x0001, 0x2009, 0x4355, 0x00d0, 0x080c, 0x7351, 0x1168,
+ 0x2011, 0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0,
+ 0x080c, 0x7651, 0x080c, 0x727e, 0x0040, 0x080c, 0x5e72, 0x0028,
+ 0x6003, 0x0004, 0x2009, 0x436d, 0x0010, 0x0804, 0x3467, 0x2001,
+ 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091,
+ 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086, 0x0000,
+ 0x0904, 0x3499, 0x2069, 0x185e, 0x7890, 0x6842, 0x7894, 0x6846,
+ 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
+ 0x0001, 0x0804, 0x4b59, 0x9006, 0x080c, 0x2771, 0x81ff, 0x1904,
+ 0x3499, 0x080c, 0x7351, 0x11b0, 0x080c, 0x764c, 0x080c, 0x5fb3,
+ 0x080c, 0x325c, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xc8ce,
+ 0x0130, 0x080c, 0x7374, 0x1118, 0x080c, 0x7329, 0x0038, 0x080c,
+ 0x727e, 0x0020, 0x080c, 0x5f78, 0x080c, 0x5e72, 0x0804, 0x3467,
+ 0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x1110, 0x0804, 0x3499,
+ 0x0126, 0x2091, 0x8000, 0x6190, 0x81ff, 0x0190, 0x704f, 0x0000,
+ 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+ 0x2039, 0x0001, 0x080c, 0x4b59, 0x701f, 0x3465, 0x012e, 0x0005,
+ 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9,
+ 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6558, 0x9588,
+ 0x3268, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
+ 0x2100, 0x9506, 0x01a8, 0x080c, 0x64fc, 0x1190, 0xb814, 0x821c,
+ 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
+ 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
+ 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
+ 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099,
+ 0x1c80, 0x080c, 0x5f03, 0x0804, 0x43c8, 0x080c, 0x4b40, 0x0904,
+ 0x349c, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
+ 0x080c, 0x5664, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538,
+ 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x3257,
+ 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086,
+ 0x0006, 0x11a8, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c,
+ 0xc394, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003,
+ 0x701f, 0x4453, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x20a9,
+ 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c,
+ 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006,
+ 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
+ 0x0f8a, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0,
+ 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a,
+ 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+ 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
+ 0x4b59, 0x81ff, 0x1904, 0x3499, 0x080c, 0x4b28, 0x0904, 0x349c,
+ 0x080c, 0x6690, 0x0904, 0x3499, 0x0058, 0xa87c, 0x9005, 0x0120,
+ 0x2009, 0x0004, 0x0804, 0x3499, 0xa978, 0xaa98, 0x0804, 0x3467,
+ 0x080c, 0x566c, 0x0904, 0x3467, 0x701f, 0x449d, 0x7007, 0x0003,
+ 0x0005, 0x81ff, 0x1904, 0x3499, 0x7888, 0x908a, 0x1000, 0x1a04,
+ 0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120,
+ 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499,
+ 0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x0904, 0x3499, 0x7984,
+ 0x7a88, 0x04c9, 0x08a8, 0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c,
+ 0x4b3e, 0x01e0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x11b0,
+ 0x080c, 0x6716, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019,
+ 0x0004, 0x080c, 0x669a, 0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0,
+ 0x00d1, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+ 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
+ 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001,
+ 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060,
+ 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506, 0x0110,
+ 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x64fc, 0x1138,
+ 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x0005,
+ 0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195c, 0x918c, 0x8000,
+ 0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120,
+ 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499,
+ 0x080c, 0x6695, 0x0904, 0x3499, 0x2001, 0x195c, 0x2004, 0xd0fc,
+ 0x1904, 0x3467, 0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195c, 0x918c,
+ 0x8000, 0xc18d, 0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d,
+ 0x0118, 0x080c, 0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002,
+ 0x0128, 0x080c, 0x6695, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005,
+ 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
+ 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004, 0xd0fc,
+ 0x1128, 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
+ 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x3499, 0x798c,
+ 0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904,
+ 0x349c, 0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c,
+ 0x080c, 0x65c3, 0x0904, 0x3499, 0x080c, 0x668b, 0x0904, 0x3499,
+ 0x2001, 0x195b, 0x2004, 0xd0fc, 0x1904, 0x3467, 0x0804, 0x44a8,
+ 0xa9a4, 0x2001, 0x195b, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
+ 0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1170,
+ 0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c, 0x668b, 0x1170,
+ 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+ 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
+ 0x2001, 0x195b, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x566c, 0x0110,
+ 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
+ 0x6100, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+ 0x5678, 0x1904, 0x3499, 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007,
+ 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217,
+ 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c,
+ 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0202, 0x0804, 0x3467,
+ 0x78a8, 0x909c, 0x0003, 0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a,
+ 0x0003, 0x1a04, 0x3499, 0x6258, 0x7884, 0x9206, 0x1904, 0x4678,
+ 0x2031, 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009,
+ 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006,
+ 0x78a8, 0x9084, 0x0080, 0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e,
+ 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e,
+ 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000,
+ 0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61,
+ 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0126, 0x2091,
+ 0x8000, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000,
+ 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x012e,
+ 0x000e, 0x0804, 0x4b59, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b9,
+ 0x2c44, 0xa66e, 0xa17e, 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a,
+ 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f, 0x4698, 0x0005,
+ 0x81ff, 0x1904, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+ 0x686d, 0x1904, 0x3499, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x0904,
+ 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c,
+ 0xc33a, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f, 0x46d2, 0x0005,
+ 0x0126, 0x2091, 0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c,
+ 0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003,
+ 0x0000, 0x003e, 0x000e, 0x012e, 0x080c, 0x4196, 0x0006, 0x0036,
+ 0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f,
+ 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2,
+ 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000,
+ 0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e,
+ 0x0804, 0x3467, 0xa830, 0x9086, 0x0100, 0x0904, 0x3499, 0x8906,
0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c,
- 0x080c, 0x4aa6, 0x701f, 0x3a63, 0x7023, 0x0001, 0x012e, 0x0005,
- 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
- 0x00f6, 0x080c, 0x390b, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021,
- 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf,
- 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b95, 0x080c, 0x3b54, 0x00f6,
- 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6,
- 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004,
- 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001,
- 0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3e5e, 0x080c,
- 0x3d63, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8,
- 0x080c, 0x3fb0, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
- 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084,
- 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084,
- 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037,
- 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106,
- 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce,
- 0x0138, 0x080c, 0x3d6d, 0x080c, 0x3b4f, 0x0058, 0x080c, 0x3b4f,
- 0x080c, 0x3ed4, 0x080c, 0x3e54, 0x2001, 0x020b, 0x2004, 0xd0e4,
- 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,
- 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb,
- 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c,
- 0x918c, 0xfffd, 0x2102, 0x080c, 0x12b8, 0x2009, 0x0028, 0x080c,
- 0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de,
- 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c,
- 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021,
- 0x400c, 0x0804, 0x33cd, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056,
- 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020,
- 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x3abf, 0x2048,
- 0x1f04, 0x3a73, 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c,
- 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000,
- 0x0096, 0x7014, 0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170,
- 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
- 0x001c, 0x080c, 0x4aa6, 0x701f, 0x3a63, 0x00b0, 0x8906, 0x8006,
- 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8,
- 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7e, 0x000e,
- 0x080c, 0x4aa9, 0x701f, 0x3a63, 0x015e, 0x00de, 0x009e, 0x008e,
- 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014,
- 0x2048, 0xa868, 0x9086, 0x0103, 0x1118, 0x701f, 0x3b24, 0x0450,
- 0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c,
- 0x63c1, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd,
- 0x080c, 0xbcea, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e,
- 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x33fd, 0x0016, 0x0026,
- 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156,
- 0x701f, 0x3af6, 0x7007, 0x0003, 0x0804, 0x3ab4, 0xa830, 0x9086,
- 0x0100, 0x2021, 0x400c, 0x0904, 0x33cd, 0x0076, 0xad10, 0xac0c,
- 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
- 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
- 0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0,
- 0x0006, 0x080c, 0x0f7e, 0x000e, 0x080c, 0x4aa9, 0x007e, 0x701f,
- 0x3a63, 0x7023, 0x0001, 0x0005, 0x0804, 0x33cb, 0x0156, 0x00c6,
- 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832,
- 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4a61, 0x001e, 0x0130,
- 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010,
- 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079,
- 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001,
- 0x197c, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061,
- 0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
- 0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4a61,
- 0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
- 0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090,
- 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040,
- 0x080c, 0x22b2, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872,
- 0x601a, 0xa877, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a,
- 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4a61,
- 0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001,
- 0x0030, 0x2004, 0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001,
- 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001,
- 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001,
- 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002,
- 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148,
- 0x080c, 0x2a85, 0x1130, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c,
- 0x29c0, 0x2001, 0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007,
- 0x0002, 0x3be4, 0x3bed, 0x3bf6, 0x3be1, 0x3be1, 0x3be1, 0x3be1,
- 0x3be1, 0x012e, 0x0804, 0x3400, 0x2009, 0x0114, 0x2104, 0x9085,
- 0x0800, 0x200a, 0x080c, 0x3db7, 0x00c0, 0x2009, 0x0114, 0x2104,
- 0x9085, 0x4000, 0x200a, 0x080c, 0x3db7, 0x0078, 0x080c, 0x72e5,
- 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x33fd, 0x81ff, 0x0128,
- 0x012e, 0x2021, 0x400b, 0x0804, 0x33cd, 0x2001, 0x0141, 0x2004,
- 0xd0dc, 0x0db0, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6,
- 0x00e6, 0x00f6, 0x080c, 0x390b, 0x2009, 0x0101, 0x210c, 0x0016,
- 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x408b,
- 0x080c, 0x3fdb, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940,
- 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884,
- 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011,
- 0x0001, 0x080c, 0x3f3c, 0x080c, 0x2a8d, 0x080c, 0x2a8d, 0x080c,
- 0x2a8d, 0x080c, 0x2a8d, 0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe,
- 0x080c, 0x3e5e, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3d6d,
- 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe,
- 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009,
- 0x0017, 0x080c, 0x33fd, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084,
- 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc,
- 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3e3c,
- 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3d6d, 0x0804, 0x3d1a,
- 0x080c, 0x3fb0, 0x080c, 0x3ed4, 0x080c, 0x3e1f, 0x080c, 0x3e54,
- 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c,
- 0x3d6d, 0x00fe, 0x0804, 0x3d1a, 0x00fe, 0x080c, 0x3d63, 0x1150,
- 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c,
- 0x3d6d, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005,
- 0x1908, 0x8739, 0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000,
- 0x1904, 0x3c6a, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208,
- 0x8529, 0x2500, 0x9605, 0x0904, 0x3d1a, 0x7884, 0xd0bc, 0x0128,
- 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3d1a, 0xa013, 0x001a, 0x2001,
- 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41,
- 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017,
- 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009,
- 0x0040, 0x080c, 0x22b2, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884,
- 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061,
- 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3cf1,
- 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816,
- 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002,
- 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001,
- 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe,
- 0x0804, 0x3c24, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004,
- 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013,
- 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c,
- 0x12b8, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009,
- 0x0028, 0x080c, 0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050,
- 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043,
- 0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00,
- 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
- 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021,
- 0x400c, 0x0804, 0x33cd, 0x9085, 0x0001, 0x1d04, 0x3d6c, 0x2091,
- 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003,
- 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003,
- 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x22b2, 0x2001, 0x0227,
- 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005,
- 0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520,
- 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c,
- 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc,
- 0x0d88, 0x080c, 0x3fb0, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b,
- 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2,
- 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6,
- 0x2079, 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c,
- 0x26e8, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019,
- 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852,
- 0x20a9, 0x0046, 0x1d04, 0x3dd2, 0x2091, 0x6000, 0x1f04, 0x3dd2,
- 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021,
- 0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084,
- 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010,
- 0x20a9, 0x0028, 0xa001, 0x1f04, 0x3df2, 0x7850, 0x9085, 0x1400,
- 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110,
- 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852,
- 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0,
- 0x2001, 0x0100, 0x080c, 0x2b65, 0x7827, 0x0020, 0x7843, 0x0000,
- 0x9006, 0x080c, 0x2b65, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884,
- 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320,
- 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000,
- 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b,
- 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc,
- 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009,
- 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68,
- 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c,
- 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071,
- 0x0100, 0x2001, 0x1987, 0x2004, 0x70e2, 0x080c, 0x3b45, 0x1188,
- 0x2001, 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff,
- 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109,
- 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c,
- 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073,
- 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080,
- 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e,
- 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984,
- 0x9085, 0x0092, 0x7016, 0x080c, 0x3fb0, 0x00f6, 0x2071, 0x1a41,
- 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
- 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x080c, 0x3b45, 0x0140,
- 0x2001, 0x197b, 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120,
- 0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b,
- 0x0004, 0x2011, 0x0011, 0x080c, 0x3f3c, 0x2011, 0x0001, 0x080c,
- 0x3f3c, 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41,
- 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3f39, 0x782b, 0x0002,
- 0x9026, 0xd19c, 0x1904, 0x3f35, 0x7000, 0x0002, 0x3f39, 0x3eea,
- 0x3f1a, 0x3f35, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002,
- 0x2011, 0x0001, 0x080c, 0x3f3c, 0x0904, 0x3f39, 0x080c, 0x3f3c,
- 0x0804, 0x3f39, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe,
- 0x7810, 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201,
- 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3e3c, 0x2009, 0x0001, 0x00f6,
- 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011,
- 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c,
- 0xd0fc, 0x1904, 0x3ede, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010,
- 0x9092, 0x0004, 0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011,
- 0x0032, 0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003,
- 0x0000, 0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001,
- 0x0036, 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032,
- 0x911a, 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc4, 0x9398,
- 0x3f6a, 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108,
- 0x7102, 0x009e, 0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058,
- 0x2048, 0xa804, 0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085,
- 0x0001, 0x0005, 0x3fa7, 0x3f9e, 0x3f95, 0x3f8c, 0x3f83, 0x3f7a,
- 0x3f71, 0xa968, 0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974,
- 0x7916, 0x0005, 0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912,
- 0xa984, 0x7916, 0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990,
- 0x7912, 0xa994, 0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906,
- 0xa9a0, 0x7912, 0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac,
- 0x7906, 0xa9b0, 0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902,
- 0xa9bc, 0x7906, 0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8,
- 0x7902, 0xa9cc, 0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005,
- 0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c,
- 0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002,
- 0x3fd7, 0x3fc3, 0x3fce, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011,
- 0x0001, 0x080c, 0x3f3c, 0x190c, 0x3f3c, 0x0048, 0x8001, 0x7002,
- 0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x3f3c, 0x008e,
- 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061,
- 0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
- 0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c,
- 0x2004, 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001,
- 0x002f, 0x201c, 0x080c, 0x4a61, 0xa813, 0x001a, 0xaf16, 0x2900,
- 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
- 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a,
- 0x009e, 0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c,
- 0x4a61, 0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001,
- 0x002e, 0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001,
- 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004,
- 0xa876, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004,
- 0x6036, 0x2009, 0x0040, 0x080c, 0x22b2, 0x2001, 0x002a, 0x2004,
- 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e,
- 0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce,
- 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8,
- 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402,
- 0x7306, 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b,
- 0x7112, 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002,
- 0x702b, 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086,
- 0x0096, 0x2940, 0x0086, 0x080c, 0x4a61, 0x008e, 0xa058, 0x00a6,
- 0x2050, 0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085,
- 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005,
- 0x0528, 0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c,
- 0x080c, 0x4a61, 0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a,
- 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708,
- 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e,
- 0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4a61,
- 0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001,
- 0x0030, 0x2004, 0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001,
- 0x002a, 0x2004, 0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004,
- 0xa076, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180,
- 0x2001, 0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000,
- 0x2001, 0x1a41, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009,
- 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000,
- 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005,
- 0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9,
- 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880,
- 0x9086, 0x0052, 0x0108, 0x0005, 0x0804, 0x33cb, 0x7d98, 0x7c9c,
- 0x0804, 0x34cf, 0x080c, 0x72e5, 0x190c, 0x5ebb, 0x2069, 0x185e,
- 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
- 0x0001, 0x080c, 0x4aa6, 0x701f, 0x4126, 0x0005, 0x080c, 0x55b6,
- 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069,
- 0x185e, 0x6800, 0x9005, 0x0904, 0x3400, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x6804, 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118,
- 0xd0a4, 0x0904, 0x3400, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104,
- 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010,
- 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100,
- 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106,
- 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x3400,
- 0x9288, 0x31cc, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130,
- 0x6828, 0x908a, 0x007f, 0x1a04, 0x3400, 0x605a, 0x6888, 0x9084,
- 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e,
- 0x9080, 0x27e3, 0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080,
- 0x27e7, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x3400,
- 0x908a, 0x0841, 0x1a04, 0x3400, 0x9084, 0x0007, 0x1904, 0x3400,
- 0x680c, 0x9005, 0x0904, 0x3400, 0x6810, 0x9005, 0x0904, 0x3400,
- 0x6848, 0x6940, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400,
- 0x684c, 0x6944, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400,
- 0x2009, 0x195e, 0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4,
- 0x0140, 0x7884, 0x200a, 0x2008, 0x080c, 0x0e53, 0x3b00, 0xc085,
- 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff,
- 0x604e, 0x080c, 0x760d, 0x080c, 0x6862, 0x080c, 0x68f1, 0x6808,
- 0x602a, 0x080c, 0x2224, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001,
- 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2742, 0x003e,
- 0x6000, 0x9086, 0x0000, 0x1904, 0x42ca, 0x6818, 0x691c, 0x6a20,
- 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e,
- 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c,
- 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006,
- 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9,
- 0x0004, 0x20a1, 0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004,
- 0x20a1, 0x19aa, 0x20e9, 0x0001, 0x4001, 0x080c, 0x8480, 0x00c6,
- 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009,
- 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5,
- 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7bb8, 0x6878, 0x6016,
- 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff,
- 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001,
- 0x1f04, 0x421f, 0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d,
- 0x2004, 0xd08c, 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286,
- 0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x29dd,
- 0x2001, 0x0001, 0x080c, 0x29c0, 0x0088, 0x9286, 0x4000, 0x1148,
- 0x2063, 0x0001, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0,
- 0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888,
- 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012,
- 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf,
- 0x9295, 0x0020, 0x6a82, 0x2001, 0x1959, 0x6a80, 0x9294, 0x0030,
- 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020,
- 0x0140, 0x2003, 0xaaaa, 0x080c, 0x27b7, 0x2001, 0x194a, 0x2102,
- 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f,
- 0x0000, 0x00ce, 0x080c, 0x72e5, 0x0128, 0x080c, 0x4e97, 0x0110,
- 0x080c, 0x2708, 0x60d0, 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009,
- 0x42b2, 0x00d0, 0x080c, 0x72e5, 0x1168, 0x2011, 0x7176, 0x080c,
- 0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x080c, 0x75e1, 0x080c,
- 0x7212, 0x0040, 0x080c, 0x5db5, 0x0028, 0x6003, 0x0004, 0x2009,
- 0x42ca, 0x0010, 0x0804, 0x33cb, 0x2001, 0x0170, 0x2004, 0x9084,
- 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091,
- 0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x33fd, 0x2069,
- 0x185e, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4aa9,
- 0x9006, 0x080c, 0x2708, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5,
- 0x11b0, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c, 0x31c0, 0x0118,
- 0x6130, 0xc18d, 0x6132, 0x080c, 0xbef8, 0x0130, 0x080c, 0x7308,
- 0x1118, 0x080c, 0x72bd, 0x0038, 0x080c, 0x7212, 0x0020, 0x080c,
- 0x5ebb, 0x080c, 0x5db5, 0x0804, 0x33cb, 0x81ff, 0x1904, 0x33fd,
- 0x080c, 0x72e5, 0x1110, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000,
- 0x6190, 0x81ff, 0x0190, 0x704f, 0x0000, 0x2001, 0x1c80, 0x2009,
- 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c,
- 0x4aa9, 0x701f, 0x33c9, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6,
- 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80,
- 0x2019, 0xffff, 0x4304, 0x6558, 0x9588, 0x31cc, 0x210d, 0x918c,
- 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8,
- 0x080c, 0x6411, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80,
- 0x9085, 0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324,
- 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080,
- 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de,
- 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5e46,
- 0x0804, 0x4325, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x4a61,
- 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x55a7, 0xd0b4,
- 0x0558, 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520,
- 0x908e, 0x0080, 0x0508, 0x080c, 0x31bb, 0x1148, 0xb800, 0xd08c,
- 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa86b,
- 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009,
- 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x43b0, 0x0005,
- 0x080c, 0x4a90, 0x0904, 0x3400, 0x20a9, 0x002b, 0xb8b0, 0x20e0,
- 0xb8b4, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,
- 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8b0, 0x20e0,
- 0xb8b4, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7e, 0x0070, 0x20a9,
- 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4,
- 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x8906, 0x8006, 0x8007,
- 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0x81ff, 0x1904,
- 0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6588, 0x0904,
- 0x33fd, 0x0058, 0xa87c, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804,
- 0x33fd, 0xa978, 0xaa98, 0x0804, 0x33cb, 0x080c, 0x55af, 0x0904,
- 0x33cb, 0x701f, 0x43fa, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904,
- 0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400, 0x080c, 0x4a90,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
- 0x3400, 0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0004, 0x900e,
- 0x080c, 0x6592, 0x0904, 0x33fd, 0x7984, 0x7a88, 0x04c9, 0x08a8,
- 0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c, 0x4a8e, 0x01e0, 0x080c,
- 0x6746, 0x0118, 0x080c, 0x674e, 0x11b0, 0x080c, 0x660e, 0x2009,
- 0x0002, 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6592,
- 0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0, 0x00d1, 0x0060, 0xa89b,
- 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x080c, 0x55af, 0x0110,
- 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
- 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061,
- 0x1800, 0x6458, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529,
- 0x1ec8, 0x0005, 0x080c, 0x6411, 0x1138, 0x2200, 0x8003, 0x800b,
- 0x810b, 0x9108, 0x080c, 0x836c, 0x0005, 0x81ff, 0x1904, 0x33fd,
- 0x798c, 0x2001, 0x195d, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
- 0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x080c, 0x658d, 0x0904,
- 0x33fd, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1904, 0x33cb, 0x0804,
- 0x4405, 0xa9a4, 0x2001, 0x195d, 0x918c, 0x8000, 0xc18d, 0x2102,
- 0x080c, 0x4a83, 0x01a0, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e,
- 0x1170, 0x080c, 0x64bb, 0x2009, 0x0002, 0x0128, 0x080c, 0x658d,
- 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b,
- 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b,
- 0x4000, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x55af,
- 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
- 0x0005, 0x81ff, 0x1904, 0x33fd, 0x798c, 0x2001, 0x195c, 0x918c,
- 0x8000, 0x2102, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6746,
- 0x0120, 0x080c, 0x674e, 0x1904, 0x3400, 0x080c, 0x64bb, 0x0904,
- 0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x2001, 0x195c, 0x2004,
- 0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195c,
- 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c,
- 0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009,
- 0x0002, 0x0128, 0x080c, 0x6583, 0x1170, 0x2009, 0x0003, 0xa89b,
- 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004,
- 0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x33cb,
- 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x55bb, 0x1904, 0x33fd,
- 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007,
- 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007,
- 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217,
- 0xb900, 0x918c, 0x0202, 0x0804, 0x33cb, 0x78a8, 0x909c, 0x0003,
- 0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a, 0x0003, 0x1a04, 0x33fd,
- 0x6258, 0x7884, 0x9206, 0x1904, 0x45d5, 0x2031, 0x1848, 0x2009,
- 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c, 0x7b88,
- 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084, 0x0080,
- 0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003,
- 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001,
- 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c,
- 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003,
- 0x0000, 0x003e, 0x000e, 0x0126, 0x2091, 0x8000, 0x0036, 0x2001,
- 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c,
- 0x7bba, 0x2003, 0x0000, 0x003e, 0x012e, 0x000e, 0x0804, 0x4aa9,
- 0x000e, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e,
- 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
- 0x7007, 0x0002, 0x701f, 0x45f5, 0x0005, 0x81ff, 0x1904, 0x33fd,
- 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x6746, 0x1904, 0x33fd,
- 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0904, 0x33fd, 0xa86b, 0x0000,
- 0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c, 0xbabf, 0x0904, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x462f, 0x0005, 0x0126, 0x2091, 0x8000,
- 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000,
- 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x000e,
- 0x012e, 0x080c, 0x40f8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c,
- 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003,
- 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001,
- 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c,
- 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0804, 0x33cb, 0xa830,
- 0x9086, 0x0100, 0x0904, 0x33fd, 0x8906, 0x8006, 0x8007, 0x90bc,
- 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x2009, 0x000c, 0x7a8c,
- 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0xa8b4, 0x909c, 0x0003,
- 0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04, 0x4695,
- 0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031, 0x1848, 0x2009, 0x013c,
- 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0xaaa4, 0xaba0, 0xacac,
- 0xada8, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1247, 0x080c,
- 0xa45b, 0x1528, 0x2009, 0x0002, 0x0420, 0xa99c, 0x080c, 0x6411,
- 0x0118, 0x2009, 0x000a, 0x0408, 0x080c, 0x6746, 0x2009, 0x0009,
- 0x11c0, 0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002,
- 0x0080, 0x2900, 0x009e, 0xa806, 0xa86c, 0xc0fc, 0xa86e, 0xaeb4,
- 0x96b4, 0x000b, 0x080c, 0xbabf, 0x2009, 0x0003, 0x0110, 0x9006,
- 0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa87f, 0x0000, 0xa887,
- 0x0000, 0xa89b, 0x4000, 0x0126, 0x2091, 0x8000, 0x0006, 0x0036,
- 0x2001, 0x185b, 0x201c, 0xabc2, 0x2003, 0x0000, 0x2001, 0x185c,
- 0x201c, 0xabc6, 0x2003, 0x0000, 0x003e, 0x000e, 0x012e, 0xa8b4,
- 0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1,
- 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a,
- 0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0xabaa, 0x2003,
- 0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae, 0x2003, 0x0000, 0x2001,
- 0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c,
- 0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0xabbe, 0x2003,
- 0x0000, 0x003e, 0x000e, 0x0005, 0x9006, 0x080c, 0x2708, 0x78a8,
- 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x33fd,
- 0x080c, 0x72e5, 0x190c, 0x5ebb, 0x7888, 0x908a, 0x1000, 0x1a04,
- 0x3400, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04,
- 0x3400, 0x2100, 0x080c, 0x26d2, 0x0026, 0x00c6, 0x0126, 0x2091,
- 0x8000, 0x2061, 0x19d7, 0x601b, 0x0000, 0x601f, 0x0000, 0x607b,
- 0x0000, 0x607f, 0x0000, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc,
- 0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212,
- 0x00d0, 0x080c, 0x9e89, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004,
- 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043,
- 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011,
- 0x5de1, 0x080c, 0x8432, 0x7984, 0x080c, 0x72e5, 0x1110, 0x2009,
- 0x00ff, 0x7a88, 0x080c, 0x4468, 0x012e, 0x00ce, 0x002e, 0x0804,
- 0x33cb, 0x7984, 0x080c, 0x63c1, 0x2b08, 0x1904, 0x3400, 0x0804,
- 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8,
- 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd,
- 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984,
- 0x81ff, 0x0904, 0x3400, 0x9192, 0x0021, 0x1a04, 0x3400, 0x7a8c,
- 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0x702a, 0xaf60,
- 0x7736, 0x080c, 0x4aa6, 0x701f, 0x478c, 0x7880, 0x9086, 0x006e,
- 0x0110, 0x701f, 0x5049, 0x0005, 0x2009, 0x0080, 0x080c, 0x6411,
- 0x1118, 0x080c, 0x6746, 0x0120, 0x2021, 0x400a, 0x0804, 0x33cd,
- 0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74, 0xac78, 0xad7c, 0xae80,
- 0xa888, 0x90be, 0x0100, 0x0904, 0x4825, 0x90be, 0x0112, 0x0904,
- 0x4825, 0x90be, 0x0113, 0x0904, 0x4825, 0x90be, 0x0114, 0x0904,
- 0x4825, 0x90be, 0x0117, 0x0904, 0x4825, 0x90be, 0x011a, 0x0904,
- 0x4825, 0x90be, 0x011c, 0x0904, 0x4825, 0x90be, 0x0121, 0x0904,
- 0x480c, 0x90be, 0x0131, 0x0904, 0x480c, 0x90be, 0x0171, 0x0904,
- 0x4825, 0x90be, 0x0173, 0x0904, 0x4825, 0x90be, 0x01a1, 0x1128,
- 0xa898, 0x8007, 0xa89a, 0x0804, 0x4830, 0x90be, 0x0212, 0x0904,
- 0x4819, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be,
- 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa8a0, 0x8007, 0xa8a2,
- 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e,
- 0x00de, 0x0804, 0x3400, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0,
- 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x486e, 0x7028,
- 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
- 0x0001, 0x080c, 0x486e, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098,
- 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b,
- 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0,
- 0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b, 0x7028, 0x9080, 0x000c,
- 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1,
- 0x00c6, 0x080c, 0x4a61, 0x0550, 0xa86c, 0xc0fd, 0xa86e, 0xa86b,
- 0x0119, 0x9006, 0xa886, 0xa883, 0x0020, 0xa88f, 0x0001, 0x810b,
- 0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2, 0xadc6, 0xa9ca, 0xa8ce,
- 0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822, 0xa86c, 0xc0fd, 0xa86e,
- 0xa804, 0x2048, 0x080c, 0xbada, 0x1120, 0x2009, 0x0003, 0x0804,
- 0x33fd, 0x7007, 0x0003, 0x701f, 0x4865, 0x0005, 0x00ce, 0x009e,
- 0x00de, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa820, 0x9086, 0x8001,
- 0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x0016, 0x0026,
- 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8,
- 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520,
- 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421,
- 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120,
- 0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8, 0xd0ac, 0x1188, 0x2009,
- 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c, 0x0120, 0x2009, 0x0016,
- 0x0804, 0x33fd, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd,
- 0x7984, 0x78a8, 0x2040, 0x080c, 0x9e82, 0x1120, 0x9182, 0x007f,
- 0x0a04, 0x3400, 0x9186, 0x00ff, 0x0904, 0x3400, 0x9182, 0x0800,
- 0x1a04, 0x3400, 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1158, 0x607c,
- 0x924e, 0x0904, 0x3400, 0x080c, 0x9e82, 0x1120, 0x99cc, 0xff00,
- 0x0904, 0x3400, 0x0126, 0x2091, 0x8000, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178, 0x0026, 0x2011, 0x8008,
- 0x080c, 0x6781, 0x002e, 0x0140, 0x918d, 0x8000, 0x080c, 0x67cb,
- 0x1118, 0x2001, 0x4009, 0x0420, 0x080c, 0x497d, 0x0528, 0x90c6,
- 0x4000, 0x1138, 0x00c6, 0x0006, 0x080c, 0x6643, 0x000e, 0x00ce,
- 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6, 0x4008,
- 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108, 0x0040,
- 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, 0x000a,
- 0x2020, 0x012e, 0x0804, 0x33cd, 0x2b00, 0x7026, 0x0016, 0x00b6,
- 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9f5b, 0x05a8, 0x2b00, 0x6012,
- 0x080c, 0xbc97, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4a61,
- 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9f18, 0x00ee, 0x00ce, 0x00be,
- 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x33fd, 0x900e, 0xa96a,
- 0xa96e, 0x2900, 0x6016, 0xa932, 0xa86c, 0xc0fd, 0xd88c, 0x0108,
- 0xc0f5, 0xa86e, 0x080c, 0x3066, 0x6023, 0x0001, 0x9006, 0x080c,
- 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2009, 0x0002, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e,
- 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f,
- 0x495a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140,
- 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x33cd,
- 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04,
- 0x9294, 0x00ff, 0x0804, 0x54f7, 0x900e, 0xa86c, 0xd0f4, 0x1904,
- 0x33cb, 0x080c, 0x6643, 0x0804, 0x33cb, 0x00e6, 0x00d6, 0x0096,
- 0x83ff, 0x0904, 0x49c3, 0x902e, 0x080c, 0x9e82, 0x0130, 0x9026,
- 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9,
- 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406,
- 0x15d8, 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1518,
- 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11e0, 0x93ce,
- 0x00ff, 0x11c8, 0xc5fd, 0x0440, 0x2058, 0xbf10, 0x2700, 0x9306,
- 0x11a8, 0xbe14, 0x2600, 0x9206, 0x1188, 0x2400, 0x9106, 0x1140,
- 0xd884, 0x0558, 0x080c, 0x6746, 0x1540, 0x2001, 0x4000, 0x0430,
+ 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59,
+ 0xa8b4, 0x909c, 0x0003, 0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a,
+ 0x0003, 0x1a04, 0x4738, 0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031,
+ 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c,
+ 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2039, 0x0001,
+ 0x2041, 0x1253, 0x080c, 0xa8fb, 0x1528, 0x2009, 0x0002, 0x0420,
+ 0xa99c, 0x080c, 0x64fc, 0x0118, 0x2009, 0x000a, 0x0408, 0x080c,
+ 0x686d, 0x2009, 0x0009, 0x11c0, 0x0096, 0x080c, 0x100d, 0x1120,
+ 0x009e, 0x2009, 0x0002, 0x0080, 0x2900, 0x009e, 0xa806, 0xa86c,
+ 0xc0fc, 0xa86e, 0xaeb4, 0x96b4, 0x000b, 0x080c, 0xc33a, 0x2009,
+ 0x0003, 0x0110, 0x9006, 0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010,
+ 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
+ 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0126, 0x2091,
+ 0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0xabc2, 0x2003,
+ 0x0000, 0x2001, 0x185c, 0x201c, 0xabc6, 0x2003, 0x0000, 0x003e,
+ 0x000e, 0x012e, 0xa8b4, 0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000,
+ 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004,
+ 0x2009, 0x013c, 0x200a, 0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e,
+ 0x201c, 0xabaa, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae,
+ 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000,
+ 0x2001, 0x1a5a, 0x201c, 0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61,
+ 0x201c, 0xabbe, 0x2003, 0x0000, 0x003e, 0x000e, 0x0005, 0x9006,
+ 0x080c, 0x2771, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118,
+ 0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x190c, 0x5f78, 0x7888,
+ 0x908a, 0x1000, 0x1a04, 0x349c, 0x7984, 0x9186, 0x00ff, 0x0138,
+ 0x9182, 0x007f, 0x1a04, 0x349c, 0x2100, 0x080c, 0x273b, 0x0026,
+ 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x19d7, 0x601b, 0x0000,
+ 0x601f, 0x0000, 0x607b, 0x0000, 0x607f, 0x0000, 0x080c, 0x7351,
+ 0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x9085, 0x0001, 0x080c,
+ 0x7395, 0x080c, 0x727e, 0x00d0, 0x080c, 0xa30e, 0x2061, 0x0100,
+ 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a,
+ 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000,
+ 0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c, 0x859e, 0x7984, 0x080c,
+ 0x7351, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x450b, 0x012e,
+ 0x00ce, 0x002e, 0x0804, 0x3467, 0x7984, 0x080c, 0x6497, 0x2b08,
+ 0x1904, 0x349c, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009, 0x0001,
+ 0x0804, 0x3499, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
+ 0x0005, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x7984, 0x81ff, 0x0904, 0x349c, 0x9192, 0x0021,
+ 0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
+ 0x001a, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4b56, 0x701f, 0x482f,
+ 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x5106, 0x0005, 0x2009,
+ 0x0080, 0x080c, 0x64fc, 0x1118, 0x080c, 0x686d, 0x0120, 0x2021,
+ 0x400a, 0x0804, 0x3469, 0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74,
+ 0xac78, 0xad7c, 0xae80, 0xa888, 0x90be, 0x0100, 0x0904, 0x48c8,
+ 0x90be, 0x0112, 0x0904, 0x48c8, 0x90be, 0x0113, 0x0904, 0x48c8,
+ 0x90be, 0x0114, 0x0904, 0x48c8, 0x90be, 0x0117, 0x0904, 0x48c8,
+ 0x90be, 0x011a, 0x0904, 0x48c8, 0x90be, 0x011c, 0x0904, 0x48c8,
+ 0x90be, 0x0121, 0x0904, 0x48af, 0x90be, 0x0131, 0x0904, 0x48af,
+ 0x90be, 0x0171, 0x0904, 0x48c8, 0x90be, 0x0173, 0x0904, 0x48c8,
+ 0x90be, 0x01a1, 0x1128, 0xa898, 0x8007, 0xa89a, 0x0804, 0x48d3,
+ 0x90be, 0x0212, 0x0904, 0x48bc, 0x90be, 0x0213, 0x05e8, 0x90be,
+ 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,
+ 0xa8a0, 0x8007, 0xa8a2, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,
+ 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x349c, 0x7028, 0x9080,
+ 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,
+ 0x080c, 0x4911, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,
+ 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4911, 0x00c8, 0x7028,
+ 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
+ 0x0001, 0x080c, 0x491e, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,
+ 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x491e,
+ 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
+ 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4b11, 0x0550, 0xa86c,
+ 0xc0fd, 0xa86e, 0xa86b, 0x0119, 0x9006, 0xa886, 0xa883, 0x0020,
+ 0xa88f, 0x0001, 0x810b, 0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2,
+ 0xadc6, 0xa9ca, 0xa8ce, 0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822,
+ 0xa86c, 0xc0fd, 0xa86e, 0xa804, 0x2048, 0x080c, 0xc355, 0x1120,
+ 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4908,
+ 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3499,
+ 0xa820, 0x9086, 0x8001, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804,
+ 0x3499, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,
+ 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+ 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,
+ 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,
+ 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x60d8,
+ 0xd0ac, 0x1188, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c,
+ 0x0120, 0x2009, 0x0016, 0x0804, 0x3499, 0xd09c, 0x1120, 0x2009,
+ 0x0005, 0x0804, 0x3499, 0x7984, 0x78a8, 0x2040, 0x080c, 0xa307,
+ 0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186, 0x00ff, 0x0904,
+ 0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x6078,
+ 0x9306, 0x1158, 0x607c, 0x924e, 0x0904, 0x349c, 0x080c, 0xa307,
+ 0x1120, 0x99cc, 0xff00, 0x0904, 0x349c, 0x0126, 0x2091, 0x8000,
+ 0x2001, 0x180d, 0x2004, 0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178,
+ 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x0140, 0x918d,
+ 0x8000, 0x080c, 0x68f2, 0x1118, 0x2001, 0x4009, 0x0420, 0x080c,
+ 0x4a2b, 0x0528, 0x90c6, 0x4000, 0x1138, 0x00c6, 0x0006, 0x080c,
+ 0x674b, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408,
+ 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6,
+ 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001,
+ 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3469, 0x2b00,
+ 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xa3ec,
+ 0x0904, 0x49f9, 0x2b00, 0x6012, 0x080c, 0xc640, 0x2e58, 0x00ee,
+ 0x00e6, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x2b70, 0x1158, 0x080c,
+ 0xa39d, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x900e, 0xa96a, 0xa96e, 0x2900, 0x6016, 0xa932,
+ 0xa86c, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86e, 0x080c, 0x3102,
+ 0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c,
+ 0x6448, 0x2009, 0x0002, 0x080c, 0xa419, 0x78a8, 0xd094, 0x0138,
+ 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085,
+ 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009,
+ 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4a08, 0x0005,
+ 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e,
+ 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3469, 0x9086, 0x0100,
+ 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff,
+ 0x0804, 0x55b4, 0x900e, 0xa86c, 0xd0f4, 0x1904, 0x3467, 0x080c,
+ 0x674b, 0x0804, 0x3467, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904,
+ 0x4a73, 0x902e, 0x080c, 0xa307, 0x0130, 0x9026, 0x20a9, 0x0800,
+ 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071,
+ 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428,
+ 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce,
+ 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8,
+ 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14,
+ 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568,
+ 0xd894, 0x1558, 0x080c, 0x686d, 0x1540, 0x2001, 0x4000, 0x0430,
0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106,
- 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0958, 0x080c, 0x9e82,
- 0x1940, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4993,
+ 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0xa307,
+ 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4a41,
0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
- 0x080c, 0x63c1, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
+ 0x080c, 0x6497, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
- 0x33fd, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd,
+ 0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7884, 0x9005, 0x0904,
- 0x3400, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x3400,
- 0x2010, 0x2918, 0x080c, 0x3012, 0x1120, 0x2009, 0x0003, 0x0804,
- 0x33fd, 0x7007, 0x0003, 0x701f, 0x4a16, 0x0005, 0xa830, 0x9086,
- 0x0100, 0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x7984,
- 0x080c, 0x9e82, 0x1120, 0x9182, 0x007f, 0x0a04, 0x3400, 0x9186,
- 0x00ff, 0x0904, 0x3400, 0x9182, 0x0800, 0x1a04, 0x3400, 0x2001,
- 0x9400, 0x080c, 0x5552, 0x1904, 0x33fd, 0x0804, 0x33cb, 0xa99c,
- 0x080c, 0x9e82, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
- 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x5552,
+ 0x349c, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x349c,
+ 0x2010, 0x2918, 0x080c, 0x30a8, 0x1120, 0x2009, 0x0003, 0x0804,
+ 0x3499, 0x7007, 0x0003, 0x701f, 0x4ac6, 0x0005, 0xa830, 0x9086,
+ 0x0100, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804, 0x3499, 0x7984,
+ 0x080c, 0xa307, 0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186,
+ 0x00ff, 0x0904, 0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x2001,
+ 0x9400, 0x080c, 0x560f, 0x1904, 0x3499, 0x0804, 0x3467, 0xa99c,
+ 0x080c, 0xa307, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
+ 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x560f,
0x11a8, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a,
- 0x0c48, 0x080c, 0x1001, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
+ 0x0c48, 0x080c, 0x100d, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086,
0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005,
- 0x7984, 0x080c, 0x6411, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208,
- 0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x6411, 0x1120, 0xaea0,
+ 0x7984, 0x080c, 0x64fc, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208,
+ 0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x64fc, 0x1120, 0xaea0,
0x9682, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae9c, 0x0008,
- 0x7e84, 0x2608, 0x080c, 0x6411, 0x1108, 0x0008, 0x905e, 0x8bff,
+ 0x7e84, 0x2608, 0x080c, 0x64fc, 0x1108, 0x0008, 0x905e, 0x8bff,
0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c,
- 0x1033, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001,
+ 0x103f, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001,
0x0010, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e,
- 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
- 0x7007, 0x0002, 0x701f, 0x33cb, 0x0005, 0x00f6, 0x0126, 0x2091,
+ 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7,
+ 0x7007, 0x0002, 0x701f, 0x3467, 0x0005, 0x00f6, 0x0126, 0x2091,
0x8000, 0x2079, 0x0000, 0x2001, 0x18b1, 0x2004, 0x9005, 0x1190,
- 0x0e04, 0x4ada, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a,
- 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d,
- 0x0804, 0x4b40, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071,
+ 0x0e04, 0x4b8a, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a,
+ 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9,
+ 0x0804, 0x4bf0, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071,
0x189f, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288,
- 0x7038, 0x2060, 0x080c, 0x1001, 0x0904, 0x4b38, 0xa84b, 0x0000,
- 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846,
+ 0x7038, 0x2060, 0x080c, 0x100d, 0x0904, 0x4be8, 0xa84b, 0x0000,
+ 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846,
0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18bb, 0x9c82, 0x18fb,
0x0210, 0x2061, 0x18bb, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108,
0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044,
- 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc4,
+ 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc3,
0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c,
- 0x1001, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8,
+ 0x100d, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8,
0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006,
- 0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846, 0x0058,
+ 0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846, 0x0058,
0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e,
- 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4b62,
- 0x4b62, 0x4b64, 0x4b62, 0x4b62, 0x4b62, 0x4b68, 0x4b62, 0x4b62,
- 0x4b62, 0x4b6c, 0x4b62, 0x4b62, 0x4b62, 0x4b70, 0x4b62, 0x4b62,
- 0x4b62, 0x4b74, 0x4b62, 0x4b62, 0x4b62, 0x4b78, 0x4b62, 0x4b62,
- 0x4b62, 0x4b7d, 0x080c, 0x0dc4, 0xa27a, 0xa37e, 0xa482, 0x0898,
+ 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4c12,
+ 0x4c12, 0x4c14, 0x4c12, 0x4c12, 0x4c12, 0x4c18, 0x4c12, 0x4c12,
+ 0x4c12, 0x4c1c, 0x4c12, 0x4c12, 0x4c12, 0x4c20, 0x4c12, 0x4c12,
+ 0x4c12, 0x4c24, 0x4c12, 0x4c12, 0x4c12, 0x4c28, 0x4c12, 0x4c12,
+ 0x4c12, 0x4c2d, 0x080c, 0x0dc3, 0xa27a, 0xa37e, 0xa482, 0x0898,
0xa28a, 0xa38e, 0xa492, 0x0878, 0xa29a, 0xa39e, 0xa4a2, 0x0858,
0xa2aa, 0xa3ae, 0xa4b2, 0x0838, 0xa2ba, 0xa3be, 0xa4c2, 0x0818,
- 0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4b3b, 0xa2da, 0xa3de, 0xa4e2,
- 0x0804, 0x4b3b, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904,
- 0x4c14, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c13, 0x00f6, 0x2079,
+ 0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4beb, 0xa2da, 0xa3de, 0xa4e2,
+ 0x0804, 0x4beb, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904,
+ 0x4cc4, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4cc3, 0x00f6, 0x2079,
0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040,
0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0037,
- 0x1a0c, 0x0dc4, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a,
- 0x1904, 0x4c16, 0xa804, 0x9005, 0x090c, 0x0dc4, 0x7042, 0x2938,
- 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005,
- 0xa04a, 0x0804, 0x4c16, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408,
+ 0x1a0c, 0x0dc3, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a,
+ 0x1904, 0x4cc6, 0xa804, 0x9005, 0x090c, 0x0dc3, 0x7042, 0x2938,
+ 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005,
+ 0xa04a, 0x0804, 0x4cc6, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408,
0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886,
0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
- 0x190c, 0x119d, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1033, 0x7048,
+ 0x190c, 0x11a9, 0x87ff, 0x0118, 0x2748, 0x080c, 0x103f, 0x7048,
0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128,
- 0x080c, 0x1033, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f,
+ 0x080c, 0x103f, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f,
0x18bb, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206,
0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fb, 0x0210, 0x2001, 0x18bb,
0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c,
- 0x0dc4, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001,
- 0x0002, 0x9080, 0x1f70, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e,
+ 0x0dc3, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001,
+ 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e,
0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082,
- 0x001c, 0x0002, 0x4c35, 0x4c35, 0x4c37, 0x4c35, 0x4c35, 0x4c35,
- 0x4c3c, 0x4c35, 0x4c35, 0x4c35, 0x4c41, 0x4c35, 0x4c35, 0x4c35,
- 0x4c46, 0x4c35, 0x4c35, 0x4c35, 0x4c4b, 0x4c35, 0x4c35, 0x4c35,
- 0x4c50, 0x4c35, 0x4c35, 0x4c35, 0x4c55, 0x080c, 0x0dc4, 0xaa78,
- 0xab7c, 0xac80, 0x0804, 0x4bc1, 0xaa88, 0xab8c, 0xac90, 0x0804,
- 0x4bc1, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4bc1, 0xaaa8, 0xabac,
- 0xacb0, 0x0804, 0x4bc1, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4bc1,
- 0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4bc1, 0xaad8, 0xabdc, 0xace0,
- 0x0804, 0x4bc1, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009,
- 0x007e, 0x080c, 0x6411, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110,
- 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4abd, 0x00ce, 0x00be,
- 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x55a7, 0xd0c4,
- 0x0120, 0x2011, 0x8014, 0x080c, 0x4abd, 0x002e, 0x0005, 0x81ff,
- 0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc0ac,
- 0x6032, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6,
- 0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212, 0x0010, 0x080c,
- 0x5db5, 0x012e, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001,
- 0x0804, 0x33fd, 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804,
- 0x33fd, 0x080c, 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd,
- 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011, 0x0010,
- 0x080c, 0x6781, 0x002e, 0x0140, 0x7984, 0x080c, 0x67cb, 0x1120,
- 0x2009, 0x4009, 0x0804, 0x33fd, 0x7984, 0x080c, 0x63c1, 0x1904,
- 0x3400, 0x080c, 0x4a90, 0x0904, 0x3400, 0x2b00, 0x7026, 0x080c,
- 0x6746, 0x7888, 0x1138, 0x9084, 0x0001, 0x1120, 0x080c, 0x6643,
- 0x0804, 0x33cb, 0x080c, 0x4a61, 0x0904, 0x33fd, 0x9006, 0xa86a,
- 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x0904, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x4d47, 0x0005, 0x2061, 0x1800, 0x080c,
- 0x55bb, 0x2009, 0x0007, 0x11f8, 0x080c, 0x673e, 0x0118, 0x2009,
- 0x0008, 0x00c8, 0xa99c, 0x080c, 0x63c1, 0x11c8, 0x080c, 0x4a8e,
- 0x01b0, 0x080c, 0x6746, 0xa8a0, 0x1130, 0x9084, 0x0001, 0x1118,
- 0x080c, 0x6643, 0x00a0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xbb78,
- 0x11b8, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b,
- 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b,
- 0x4000, 0xa99e, 0x0039, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005,
- 0x9006, 0x0005, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
- 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098,
- 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0,
- 0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x0005, 0xa830,
- 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead,
- 0x1120, 0x2021, 0x4009, 0x0804, 0x33cd, 0x9086, 0x0100, 0x7024,
- 0x2058, 0x1110, 0x0804, 0x54f7, 0x080c, 0x6643, 0x0804, 0x33cb,
- 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7f84,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4a61, 0x1120, 0x2009,
- 0x0002, 0x0804, 0x33fd, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860,
- 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c,
- 0x6411, 0x1904, 0x4dea, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e,
- 0x1904, 0x4dea, 0x080c, 0x673e, 0x1130, 0x080c, 0x6640, 0x1118,
- 0xd79c, 0x0904, 0x4dea, 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b0,
- 0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, 0x0198,
- 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9,
- 0x0002, 0x080c, 0x487b, 0x0080, 0xb8b0, 0x20e0, 0xb8b4, 0x9080,
- 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0,
- 0x3d00, 0x20e0, 0x080c, 0x487b, 0x4104, 0xd794, 0x0528, 0xb8b0,
- 0x20e0, 0xb8b4, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002,
- 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80,
- 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0,
- 0x3d00, 0x20e0, 0x080c, 0x486e, 0x9c80, 0x0026, 0x2098, 0xb8b0,
- 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b,
- 0x96b0, 0x0005, 0x8108, 0x080c, 0x9e82, 0x0118, 0x9186, 0x0800,
- 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186,
- 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686,
- 0x0028, 0x0150, 0x0804, 0x4d7f, 0x86ff, 0x1120, 0x7124, 0x810b,
- 0x0804, 0x33cb, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026,
- 0x772e, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034,
- 0xa076, 0x7028, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c,
- 0x10eb, 0x7007, 0x0002, 0x701f, 0x4e26, 0x0005, 0x7030, 0x9005,
- 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8,
- 0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x0804,
- 0x4d7f, 0x7124, 0x810b, 0x0804, 0x33cb, 0x2029, 0x007e, 0x7984,
- 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020,
- 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9184, 0x00ff, 0x90e2,
- 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9284, 0xff00,
- 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400,
- 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04,
- 0x3400, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400,
- 0x9502, 0x0a04, 0x3400, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04,
- 0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0xff00, 0x8007, 0x90e2,
- 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0x00ff,
- 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x2061,
- 0x1965, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x33cb, 0x0006,
- 0x080c, 0x55a7, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab,
- 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118,
- 0x7986, 0x0804, 0x33cb, 0x83ff, 0x1904, 0x3400, 0x2001, 0xfff0,
- 0x9200, 0x1a04, 0x3400, 0x2019, 0xffff, 0x6074, 0x9302, 0x9200,
- 0x0a04, 0x3400, 0x7986, 0x6272, 0x0804, 0x33cb, 0x080c, 0x55bb,
- 0x1904, 0x33fd, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4a61,
- 0x0904, 0x33fd, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8,
- 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000,
- 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e,
- 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104,
- 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
- 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003,
- 0x080c, 0x854b, 0x2208, 0x0804, 0x33cb, 0x7033, 0x0001, 0x7122,
- 0x7024, 0x9300, 0x7026, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000,
- 0xa37e, 0x7028, 0xa07a, 0x7034, 0xa076, 0xa492, 0xa596, 0xa69a,
- 0xa79e, 0x080c, 0x10eb, 0x7007, 0x0002, 0x701f, 0x4f18, 0x0005,
- 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034,
- 0x20e8, 0x2061, 0x18b9, 0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c,
- 0x0804, 0x4ed6, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b,
- 0x2208, 0x0804, 0x33cb, 0x00f6, 0x00e6, 0x080c, 0x55bb, 0x2009,
- 0x0007, 0x1904, 0x4fac, 0x2071, 0x189f, 0x745c, 0x84ff, 0x2009,
- 0x000e, 0x1904, 0x4fac, 0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096,
- 0x080c, 0x101a, 0x2009, 0x0002, 0x0904, 0x4fab, 0x2900, 0x705e,
- 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080,
- 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
- 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148, 0xb814, 0x20a9,
- 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
- 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff,
- 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b, 0x2208,
- 0x009e, 0xa89b, 0x4000, 0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc4,
- 0x2148, 0x080c, 0x1033, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,
- 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061,
- 0x18ba, 0x2c44, 0xa37e, 0x7058, 0xa07a, 0x7064, 0xa076, 0xa492,
- 0xa596, 0xa69a, 0xa79e, 0xa0a3, 0x4fb7, 0x000e, 0xa0a6, 0x080c,
- 0x10eb, 0x9006, 0x0048, 0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6,
- 0xa0a4, 0x904d, 0x090c, 0x0dc4, 0x00e6, 0x2071, 0x189f, 0xa070,
- 0x908e, 0x0100, 0x0138, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b,
- 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0,
- 0x901e, 0x7064, 0x20e8, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0428,
- 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x7254, 0x900e,
- 0x2001, 0x0003, 0x080c, 0x854b, 0xaa9e, 0x715c, 0x81ff, 0x090c,
- 0x0dc4, 0x2148, 0x080c, 0x1033, 0x705f, 0x0000, 0xa0a4, 0x2048,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000,
- 0xa0a7, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c,
- 0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148,
- 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,
- 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518,
- 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000,
- 0x715c, 0x81ff, 0x090c, 0x0dc4, 0x2148, 0x080c, 0x1033, 0x9006,
- 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000,
- 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37e,
- 0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10eb, 0x9006, 0x00ee,
- 0x0005, 0x0096, 0xa890, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100,
- 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x3400, 0xa888,
- 0xa98c, 0x080c, 0x269f, 0x1518, 0x080c, 0x63c1, 0x1500, 0x7126,
- 0xbe12, 0xbd16, 0xae80, 0x080c, 0x4a61, 0x01f0, 0x080c, 0x4a61,
- 0x01d8, 0x009e, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823,
- 0x0000, 0xa804, 0x2048, 0x080c, 0xbafa, 0x1120, 0x2009, 0x0003,
- 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x5085, 0x0005, 0x009e,
- 0x2009, 0x0002, 0x0804, 0x33fd, 0x0cd0, 0x7124, 0x080c, 0x3162,
- 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd,
- 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007,
- 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076,
- 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c,
- 0x0f7e, 0xaa70, 0xab74, 0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44,
- 0xa06f, 0x0000, 0xae68, 0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6,
- 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e,
- 0x007e, 0x0804, 0x4aa9, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054,
- 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776,
- 0xa07f, 0x002a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
- 0x7007, 0x0002, 0x701f, 0x50e1, 0x0005, 0x000e, 0x007e, 0x0804,
- 0x3400, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906,
- 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
- 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f7e,
- 0x2100, 0x2238, 0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498,
- 0xa59c, 0x2009, 0x002a, 0x0804, 0x4aa9, 0x81ff, 0x1904, 0x33fd,
- 0x798c, 0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
- 0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x6597, 0x012e, 0x0904, 0x33fd, 0x2001, 0x195b, 0x2004,
- 0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195b,
- 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c,
- 0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009,
- 0x0002, 0x0128, 0x080c, 0x6597, 0x1170, 0x2009, 0x0003, 0xa89b,
- 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195b, 0x2004,
- 0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118,
- 0xd084, 0x0904, 0x437a, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x6746,
- 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8,
- 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x55a7,
- 0xd0b4, 0x0904, 0x43b4, 0x7884, 0x908e, 0x007e, 0x0904, 0x43b4,
- 0x908e, 0x007f, 0x0904, 0x43b4, 0x908e, 0x0080, 0x0904, 0x43b4,
- 0xb800, 0xd08c, 0x1904, 0x43b4, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
- 0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x51ad, 0x0005, 0x080c, 0x4a90, 0x0904,
- 0x3400, 0x0804, 0x43b4, 0x080c, 0x31bb, 0x0108, 0x0005, 0x2009,
- 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd,
- 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x080c,
- 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0xb89c, 0xd0a4,
- 0x1118, 0xd0ac, 0x1904, 0x43b4, 0x9006, 0xa86a, 0xa832, 0xa86c,
- 0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x1120, 0x2009, 0x0003, 0x0804,
- 0x33fd, 0x7007, 0x0003, 0x701f, 0x51e6, 0x0005, 0xa830, 0x9086,
- 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x54f7, 0x080c, 0x4a90,
- 0x0904, 0x3400, 0x0804, 0x517f, 0x81ff, 0x2009, 0x0001, 0x1904,
- 0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd, 0x080c,
- 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0x080c, 0x4a90,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x2009, 0x0009, 0x1904, 0x33fd,
- 0x080c, 0x4a61, 0x2009, 0x0002, 0x0904, 0x33fd, 0x9006, 0xa86a,
- 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00,
- 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c,
- 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3400, 0xc0e5, 0xa952,
- 0xa956, 0xa83e, 0x080c, 0xbc98, 0x2009, 0x0003, 0x0904, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x523d, 0x0005, 0xa830, 0x9086, 0x0100,
- 0x2009, 0x0004, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x7aa8, 0x9284,
- 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x55bb, 0x1188, 0x2009,
- 0x0014, 0x0804, 0x33fd, 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001,
- 0x1904, 0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd,
- 0xd2f4, 0x0138, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x557d, 0x0804,
- 0x33cb, 0xd2fc, 0x0160, 0x080c, 0x4a90, 0x0904, 0x3400, 0x7984,
- 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x080c,
- 0x4a90, 0x0904, 0x3400, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
- 0x2009, 0x0009, 0x1904, 0x532c, 0x080c, 0x4a61, 0x2009, 0x0002,
- 0x0904, 0x532c, 0xa85c, 0x9080, 0x001c, 0xaf60, 0x2009, 0x0008,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa6, 0x701f, 0x5299,
- 0x0005, 0xa870, 0x9086, 0x0500, 0x1138, 0xa874, 0x9005, 0x1120,
- 0xa878, 0x9084, 0xff00, 0x0110, 0x1904, 0x3400, 0xa86a, 0xa832,
- 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0x4a90, 0x1110, 0x0804, 0x3400,
- 0x2009, 0x0043, 0x080c, 0xbd04, 0x2009, 0x0003, 0x0904, 0x532c,
- 0x7007, 0x0003, 0x701f, 0x52bd, 0x0005, 0xa830, 0x9086, 0x0100,
- 0x2009, 0x0004, 0x0904, 0x532c, 0x7984, 0x7aa8, 0x9284, 0x1000,
- 0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x00c6, 0xaab4, 0x9284,
- 0xc000, 0x0148, 0xd2ec, 0x0170, 0x080c, 0x55bb, 0x1158, 0x2009,
- 0x0014, 0x0804, 0x531b, 0x2061, 0x1800, 0x080c, 0x55bb, 0x2009,
- 0x0007, 0x15c8, 0xd2f4, 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c,
- 0x557d, 0x0058, 0xd2fc, 0x0180, 0x080c, 0x4a8e, 0x0590, 0xa99c,
- 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0xa87f, 0x0000, 0xa887,
- 0x0000, 0xa89b, 0x4000, 0x0438, 0x080c, 0x4a8e, 0x0510, 0x080c,
- 0x6746, 0x2009, 0x0009, 0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8,
- 0xa8cc, 0x9005, 0x11b0, 0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c,
- 0x4a8e, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xbd04, 0x2009,
- 0x0003, 0x0108, 0x0078, 0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e,
- 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
- 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x33fd,
- 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552, 0x001e,
- 0x1904, 0x33fd, 0x0804, 0x33cb, 0x00f6, 0x2d78, 0xaab4, 0x0021,
- 0x00fe, 0x0005, 0xaab4, 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c,
- 0x9284, 0x1400, 0xc0fd, 0x080c, 0x5552, 0x001e, 0x9085, 0x0001,
- 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c,
- 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8,
- 0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f,
- 0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd,
- 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b,
- 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a,
- 0x080c, 0xbb33, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007,
- 0x0003, 0x701f, 0x538c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100,
- 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd, 0xa8e4, 0xa86a, 0xa810,
- 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff,
- 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc,
- 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c,
- 0x7d98, 0x0804, 0x4aa9, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002,
- 0x0804, 0x33fd, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217,
- 0x82ff, 0x1118, 0x7023, 0x1990, 0x0040, 0x92c6, 0x0001, 0x1118,
- 0x7023, 0x19aa, 0x0010, 0x0804, 0x3400, 0x2009, 0x001a, 0x7a8c,
- 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c,
- 0x4aa6, 0x701f, 0x53dc, 0x0005, 0x2001, 0x182d, 0x2003, 0x0001,
- 0xa85c, 0x9080, 0x001a, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a,
- 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x33cb, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984, 0x9194,
- 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1990,
- 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19aa, 0x0010, 0x0804,
- 0x3400, 0xa85c, 0x9080, 0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9,
- 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88,
- 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x0804, 0x4aa9,
- 0x7884, 0x908a, 0x1000, 0x1a04, 0x3400, 0x0126, 0x2091, 0x8000,
- 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a,
- 0x00ce, 0x012e, 0x0804, 0x33cb, 0x00c6, 0x080c, 0x72e5, 0x1160,
- 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a,
- 0x080c, 0x7212, 0x080c, 0x0dc4, 0x2061, 0x1800, 0x6030, 0xc09d,
- 0x6032, 0x080c, 0x5db5, 0x00ce, 0x0005, 0x2001, 0x1800, 0x2004,
- 0x908e, 0x0000, 0x0904, 0x33fd, 0x00c6, 0x7884, 0x9005, 0x0190,
- 0x7888, 0x2061, 0x1978, 0x2c0c, 0x2062, 0x080c, 0x2a75, 0x01a8,
- 0x080c, 0x2a7d, 0x0190, 0x080c, 0x2a85, 0x0178, 0x2162, 0x00ce,
- 0x0804, 0x3400, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,
- 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,
- 0x1568, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011,
- 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x002e,
- 0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e, 0x60e3,
- 0x0000, 0x080c, 0xd33c, 0x080c, 0xd373, 0x9085, 0x0001, 0x080c,
- 0x732a, 0x9006, 0x080c, 0x2b65, 0x2001, 0x1800, 0x2003, 0x0004,
- 0x2001, 0x1984, 0x2003, 0x0000, 0x6027, 0x0008, 0x00ce, 0x0804,
- 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c,
- 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8,
- 0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f,
- 0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd,
- 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b,
- 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb36, 0x1120, 0x2009,
- 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x54e0, 0x0005,
- 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd,
- 0xa8e4, 0xa86a, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4aa9, 0xa89c,
- 0x9086, 0x000d, 0x1904, 0x33fd, 0x2021, 0x4005, 0x0126, 0x2091,
- 0x8000, 0x0e04, 0x5504, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486,
- 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883,
- 0x4005, 0xa99c, 0x7986, 0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c,
- 0x4a99, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
- 0x119d, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984,
- 0x615a, 0x6156, 0x605f, 0x0000, 0x6053, 0x0009, 0x7898, 0x6072,
- 0x789c, 0x606e, 0x7888, 0x606a, 0x788c, 0x6066, 0x2001, 0x19e7,
- 0x2044, 0x2001, 0x19ee, 0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001,
- 0xa083, 0x0002, 0xa06f, 0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e,
- 0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4,
- 0xc000, 0x0168, 0x0006, 0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029,
- 0x080c, 0x3180, 0x003e, 0x080c, 0xb99f, 0x000e, 0x1198, 0xd0e4,
- 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x5f10,
- 0x080c, 0x9e82, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be,
- 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000,
- 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000,
- 0x2004, 0x9005, 0x0188, 0x9186, 0x007e, 0x0170, 0x9186, 0x007f,
- 0x0158, 0x9186, 0x0080, 0x0178, 0x9186, 0x00ff, 0x0128, 0x0026,
- 0x2200, 0x080c, 0x5552, 0x002e, 0x001e, 0x8108, 0x1f04, 0x5585,
- 0x015e, 0x012e, 0x0005, 0x080c, 0xbef8, 0x0db0, 0x0c80, 0x2001,
- 0x185f, 0x2004, 0x0005, 0x2001, 0x187e, 0x2004, 0x0005, 0x0006,
- 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e,
- 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
- 0x0005, 0x79a4, 0x81ff, 0x0904, 0x3400, 0x9182, 0x0081, 0x1a04,
- 0x3400, 0x810c, 0x0016, 0x080c, 0x4a61, 0x0170, 0x080c, 0x0f09,
- 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c,
- 0x4aa6, 0x701f, 0x55e1, 0x0005, 0x001e, 0x2009, 0x0002, 0x0804,
- 0x33fd, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4,
- 0x810c, 0x2061, 0x18b9, 0x2c44, 0xa774, 0xa078, 0x2071, 0x189f,
- 0x080c, 0x4aa9, 0x701f, 0x55f5, 0x0005, 0x2061, 0x18b9, 0x2c44,
- 0x0016, 0x0026, 0xa274, 0xa178, 0x080c, 0x0f11, 0x002e, 0x001e,
- 0x080c, 0x0fbe, 0x9006, 0xa802, 0xa806, 0x0804, 0x33cb, 0x0126,
- 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
- 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044,
- 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x57b5, 0x0068, 0xd08c,
- 0x0118, 0x080c, 0x56be, 0x0040, 0xd094, 0x0118, 0x080c, 0x568e,
- 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce,
- 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016,
- 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030,
- 0xd09c, 0x1120, 0x6004, 0x9085, 0x0002, 0x6006, 0x7094, 0x9005,
- 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0,
- 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090,
- 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178,
- 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294,
- 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x00f0, 0x6040,
- 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7083,
- 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009,
- 0x1c80, 0x200b, 0x0000, 0x7093, 0x0000, 0x7087, 0x000f, 0x2009,
- 0x000f, 0x2011, 0x5d58, 0x080c, 0x8432, 0x0005, 0x2001, 0x1880,
- 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, 0x7084, 0x9005, 0x1528,
- 0x2011, 0x5d58, 0x080c, 0x835e, 0x6040, 0x9094, 0x0010, 0x9285,
- 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
- 0x56a4, 0x6242, 0x7097, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285,
- 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7097, 0x0000, 0x708b,
- 0x0000, 0x9006, 0x080c, 0x5efb, 0x0000, 0x0005, 0x7088, 0x908a,
- 0x0003, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x56c8, 0x5719, 0x57b4,
- 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708b, 0x0001, 0x2001,
- 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800,
- 0x9084, 0x00fc, 0x0120, 0x1f04, 0x56d7, 0x080c, 0x0dc4, 0x68a0,
- 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600,
- 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5ed7, 0x2079, 0x1c00,
- 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805,
- 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c,
- 0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1,
- 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000,
- 0x080c, 0x5d89, 0x00fe, 0x9006, 0x708e, 0x6043, 0x0008, 0x6042,
- 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, 0x9025, 0x0904, 0x5791,
- 0x6020, 0xd0b4, 0x1904, 0x578f, 0x719c, 0x81ff, 0x0904, 0x577d,
- 0x9486, 0x000c, 0x1904, 0x578a, 0x9480, 0x0018, 0x8004, 0x20a8,
- 0x080c, 0x5ed0, 0x2011, 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304,
- 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5736, 0x6043, 0x0004,
- 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100,
- 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, 0x0002, 0x2009, 0x07d0,
- 0x2011, 0x5d5f, 0x080c, 0x8432, 0x080c, 0x5ed7, 0x04c0, 0x080c,
- 0x5ed0, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834,
- 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005,
- 0x0190, 0x080c, 0x5ed0, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9,
- 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318,
- 0x1f04, 0x5771, 0x0078, 0x709f, 0x0000, 0x080c, 0x5ed0, 0x20e1,
- 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9,
- 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe,
- 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
- 0x080c, 0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000,
- 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011,
- 0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7,
- 0x9575, 0x080c, 0x961a, 0x08d8, 0x0005, 0x7094, 0x908a, 0x001d,
- 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x57e6, 0x57f9, 0x5822, 0x5842,
- 0x5868, 0x5897, 0x58bd, 0x58f5, 0x591b, 0x5949, 0x5984, 0x59bc,
- 0x59da, 0x5a05, 0x5a27, 0x5a42, 0x5a4c, 0x5a80, 0x5aa6, 0x5ad5,
- 0x5afb, 0x5b33, 0x5b77, 0x5bb4, 0x5bd5, 0x5c2e, 0x5c50, 0x5c7e,
- 0x5c7e, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100,
- 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140,
- 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002,
- 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c, 0x8432,
- 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020,
- 0xd0b4, 0x11f0, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296,
- 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128,
- 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011, 0x5d5f, 0x080c,
- 0x835e, 0x7097, 0x0010, 0x080c, 0x5a4c, 0x0010, 0x708f, 0x0000,
- 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, 0x6043, 0x0004, 0x2011,
- 0x5d5f, 0x080c, 0x835e, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833,
- 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b,
- 0x0000, 0x8108, 0x1f04, 0x5837, 0x60c3, 0x0014, 0x080c, 0x5d89,
- 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f,
- 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079,
- 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160,
+ 0x001c, 0x0002, 0x4ce5, 0x4ce5, 0x4ce7, 0x4ce5, 0x4ce5, 0x4ce5,
+ 0x4cec, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cf1, 0x4ce5, 0x4ce5, 0x4ce5,
+ 0x4cf6, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cfb, 0x4ce5, 0x4ce5, 0x4ce5,
+ 0x4d00, 0x4ce5, 0x4ce5, 0x4ce5, 0x4d05, 0x080c, 0x0dc3, 0xaa78,
+ 0xab7c, 0xac80, 0x0804, 0x4c71, 0xaa88, 0xab8c, 0xac90, 0x0804,
+ 0x4c71, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4c71, 0xaaa8, 0xabac,
+ 0xacb0, 0x0804, 0x4c71, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4c71,
+ 0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4c71, 0xaad8, 0xabdc, 0xace0,
+ 0x0804, 0x4c71, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009,
+ 0x007e, 0x080c, 0x64fc, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110,
+ 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b6d, 0x00ce, 0x00be,
+ 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x5664, 0xd0c4,
+ 0x0120, 0x2011, 0x8014, 0x080c, 0x4b6d, 0x002e, 0x0005, 0x81ff,
+ 0x1904, 0x3499, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085,
+ 0xc0ac, 0x6032, 0x080c, 0x7351, 0x1158, 0x080c, 0x764c, 0x080c,
+ 0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x0010,
+ 0x080c, 0x5e72, 0x012e, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009,
+ 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009, 0x0007,
+ 0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009, 0x0008, 0x0804,
+ 0x3499, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011,
+ 0x0010, 0x080c, 0x68a8, 0x002e, 0x0140, 0x7984, 0x080c, 0x68f2,
+ 0x1120, 0x2009, 0x4009, 0x0804, 0x3499, 0x7984, 0x080c, 0x6497,
+ 0x1904, 0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x2b00, 0x7026,
+ 0x080c, 0x686d, 0x7888, 0x1138, 0x9084, 0x0005, 0x1120, 0x080c,
+ 0x674b, 0x0804, 0x3467, 0x080c, 0x4b11, 0x0904, 0x3499, 0x9006,
+ 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc3f3, 0x0904,
+ 0x3499, 0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007,
+ 0x0003, 0x701f, 0x4e04, 0x0005, 0x2061, 0x1800, 0x080c, 0x5678,
+ 0x2009, 0x0007, 0x1528, 0x080c, 0x6865, 0x0118, 0x2009, 0x0008,
+ 0x00f8, 0xa99c, 0x080c, 0x6497, 0x11f8, 0x080c, 0x4b3e, 0x01e0,
+ 0x080c, 0x686d, 0xa8a0, 0x1130, 0x9084, 0x0005, 0x1118, 0x080c,
+ 0x674b, 0x00d0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xc3f3, 0x11e8,
+ 0xa8a0, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009, 0x0003,
+ 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085,
+ 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0xa99e, 0x0039,
+ 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0x20a9,
+ 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4,
+ 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9,
+ 0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a,
+ 0x2098, 0x080c, 0x0f8a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c,
+ 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009,
+ 0x0804, 0x3469, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804,
+ 0x55b4, 0x080c, 0x674b, 0x0804, 0x3467, 0x080c, 0x5678, 0x0120,
+ 0x2009, 0x0007, 0x0804, 0x3499, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c,
+ 0x7d98, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
+ 0x900e, 0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c,
+ 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, 0x64fc, 0x1904, 0x4ea7,
+ 0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x4ea7, 0x080c,
+ 0x6865, 0x1130, 0x080c, 0x6748, 0x1118, 0xd79c, 0x0904, 0x4ea7,
+ 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080,
+ 0x0006, 0x2098, 0x3400, 0xd794, 0x0198, 0x20a9, 0x0008, 0x4003,
+ 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x491e,
+ 0x0080, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x3400,
+ 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
+ 0x491e, 0x4104, 0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060,
+ 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003,
+ 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400,
+ 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
+ 0x4911, 0x9c80, 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002,
+ 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108,
+ 0x080c, 0xa307, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120,
+ 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794,
+ 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804,
+ 0x4e3c, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3467, 0x7033,
+ 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b9,
+ 0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034, 0xa076, 0x7028, 0xa07a,
+ 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002,
+ 0x701f, 0x4ee3, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028,
+ 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b9, 0x2c44,
+ 0xa290, 0xa394, 0xa498, 0xa59c, 0x0804, 0x4e3c, 0x7124, 0x810b,
+ 0x0804, 0x3467, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98,
+ 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502,
+ 0x0a04, 0x349c, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c,
+ 0x9502, 0x0a04, 0x349c, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020,
+ 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9284, 0x00ff, 0x90e2,
+ 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9384, 0xff00,
+ 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c,
+ 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04,
+ 0x349c, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c,
+ 0x9502, 0x0a04, 0x349c, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04,
+ 0x349c, 0x9502, 0x0a04, 0x349c, 0x2061, 0x1965, 0x6102, 0x6206,
+ 0x630a, 0x640e, 0x0804, 0x3467, 0x0006, 0x080c, 0x5664, 0xd0cc,
+ 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0xd0bc, 0x000e, 0x0005,
+ 0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3467,
+ 0x83ff, 0x1904, 0x349c, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x349c,
+ 0x2019, 0xffff, 0x6074, 0x9302, 0x9200, 0x0a04, 0x349c, 0x7986,
+ 0x6272, 0x0804, 0x3467, 0x080c, 0x5678, 0x1904, 0x3499, 0x7c88,
+ 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4b11, 0x0904, 0x3499, 0x900e,
+ 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080,
+ 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
+ 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0x20a9, 0x0001,
+ 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
+ 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff,
+ 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208,
+ 0x0804, 0x3467, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026,
+ 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa37e, 0x7028, 0xa07a,
+ 0x7034, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10f7,
+ 0x7007, 0x0002, 0x701f, 0x4fd5, 0x0005, 0x7030, 0x9005, 0x1178,
+ 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b9,
+ 0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0804, 0x4f93, 0x7224,
+ 0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x0804, 0x3467,
+ 0x00f6, 0x00e6, 0x080c, 0x5678, 0x2009, 0x0007, 0x1904, 0x5069,
+ 0x2071, 0x189f, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x5069,
+ 0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096, 0x080c, 0x1026, 0x2009,
+ 0x0002, 0x0904, 0x5068, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356,
+ 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0,
+ 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x686d, 0x0118,
+ 0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
+ 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
+ 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e,
+ 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x009e, 0xa89b, 0x4000,
+ 0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c, 0x103f,
+ 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001,
+ 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18ba, 0x2c44, 0xa37e,
+ 0x7058, 0xa07a, 0x7064, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e,
+ 0xa0a3, 0x5074, 0x000e, 0xa0a6, 0x080c, 0x10f7, 0x9006, 0x0048,
+ 0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e, 0x9085, 0x0001, 0x2001,
+ 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a4, 0x904d, 0x090c,
+ 0x0dc3, 0x00e6, 0x2071, 0x189f, 0xa070, 0x908e, 0x0100, 0x0138,
+ 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0x00d8, 0x7060,
+ 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8,
+ 0xa490, 0xa594, 0xa698, 0xa79c, 0x0428, 0xa87f, 0x0000, 0xa887,
+ 0x0000, 0xa89b, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c,
+ 0x871c, 0xaa9e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c,
+ 0x103f, 0x705f, 0x0000, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0x6c02, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x00ee,
+ 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
+ 0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001,
+ 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,
+ 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0,
+ 0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000, 0x715c, 0x81ff, 0x090c,
+ 0x0dc3, 0x2148, 0x080c, 0x103f, 0x9006, 0x705e, 0x918d, 0x0001,
+ 0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02,
+ 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x0070, 0x7063, 0x0001,
+ 0x7152, 0x7054, 0x9300, 0x7056, 0xa37e, 0xa492, 0xa596, 0xa69a,
+ 0xa79e, 0x080c, 0x10f7, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa890,
+ 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200,
+ 0x0118, 0x009e, 0x0804, 0x349c, 0xa888, 0xa98c, 0x080c, 0x2708,
+ 0x1518, 0x080c, 0x6497, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae80,
+ 0x080c, 0x4b11, 0x01f0, 0x080c, 0x4b11, 0x01d8, 0x009e, 0xa86b,
+ 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823, 0x0000, 0xa804, 0x2048,
+ 0x080c, 0xc375, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007,
+ 0x0003, 0x701f, 0x5142, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804,
+ 0x3499, 0x0cd0, 0x7124, 0x080c, 0x31fe, 0xa820, 0x9086, 0x8001,
+ 0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0x2900, 0x7022, 0xa804,
+ 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+ 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0,
+ 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0xaa70, 0xab74,
+ 0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xae68,
+ 0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2,
+ 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4b59,
+ 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e,
+ 0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776, 0xa07f, 0x002a, 0xa292,
+ 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f,
+ 0x519e, 0x0005, 0x000e, 0x007e, 0x0804, 0x349c, 0x7020, 0x2048,
+ 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc,
+ 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0,
+ 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0x2100, 0x2238, 0x2061,
+ 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x2009, 0x002a,
+ 0x0804, 0x4b59, 0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195a,
+ 0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c,
+ 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3,
+ 0x0904, 0x3499, 0x0126, 0x2091, 0x8000, 0x080c, 0x669f, 0x012e,
+ 0x0904, 0x3499, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1904, 0x3467,
+ 0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195a, 0x918c, 0x8000, 0xc18d,
+ 0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c,
+ 0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c,
+ 0x669f, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010,
+ 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
+ 0xa89b, 0x4000, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1128, 0x080c,
+ 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001,
+ 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x441d,
+ 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x4b11, 0x1120, 0x2009,
+ 0x0002, 0x0804, 0x3499, 0x080c, 0x686d, 0x0130, 0x908e, 0x0004,
+ 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800,
+ 0xc08c, 0xb802, 0x0028, 0x080c, 0x5664, 0xd0b4, 0x0904, 0x4457,
+ 0x7884, 0x908e, 0x007e, 0x0904, 0x4457, 0x908e, 0x007f, 0x0904,
+ 0x4457, 0x908e, 0x0080, 0x0904, 0x4457, 0xb800, 0xd08c, 0x1904,
+ 0x4457, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc394,
+ 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f,
+ 0x526a, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804, 0x4457,
+ 0x080c, 0x3257, 0x0108, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff,
+ 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120,
+ 0x2009, 0x0007, 0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009,
+ 0x0008, 0x0804, 0x3499, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904,
+ 0x4457, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c,
+ 0xc3f3, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003,
+ 0x701f, 0x52a3, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009,
+ 0x0004, 0x0804, 0x55b4, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804,
+ 0x523c, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c, 0x5678,
+ 0x2009, 0x0007, 0x1904, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009,
+ 0x0008, 0x0804, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+ 0x686d, 0x2009, 0x0009, 0x1904, 0x3499, 0x080c, 0x4b11, 0x2009,
+ 0x0002, 0x0904, 0x3499, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd,
+ 0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00, 0x918c, 0x00ff, 0x9006,
+ 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e,
+ 0x0100, 0x1904, 0x349c, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c,
+ 0xc641, 0x2009, 0x0003, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f,
+ 0x52fa, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
+ 0x3499, 0x0804, 0x3467, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec,
+ 0x01a0, 0x080c, 0x5678, 0x1188, 0x2009, 0x0014, 0x0804, 0x3499,
+ 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c,
+ 0x5678, 0x2009, 0x0007, 0x1904, 0x3499, 0xd2f4, 0x0138, 0x9284,
+ 0x5000, 0xc0d5, 0x080c, 0x563a, 0x0804, 0x3467, 0xd2fc, 0x0160,
+ 0x080c, 0x4b40, 0x0904, 0x349c, 0x7984, 0x9284, 0x9000, 0xc0d5,
+ 0x080c, 0x560f, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c,
+ 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904,
+ 0x53e9, 0x080c, 0x4b11, 0x2009, 0x0002, 0x0904, 0x53e9, 0xa85c,
+ 0x9080, 0x001c, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c,
+ 0x7d98, 0x080c, 0x4b56, 0x701f, 0x5356, 0x0005, 0xa870, 0x9086,
+ 0x0500, 0x1138, 0xa874, 0x9005, 0x1120, 0xa878, 0x9084, 0xff00,
+ 0x0110, 0x1904, 0x349c, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e,
+ 0x080c, 0x4b40, 0x1110, 0x0804, 0x349c, 0x2009, 0x0043, 0x080c,
+ 0xc6ad, 0x2009, 0x0003, 0x0904, 0x53e9, 0x7007, 0x0003, 0x701f,
+ 0x537a, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
+ 0x53e9, 0x7984, 0x7aa8, 0x9284, 0x1000, 0xc0d5, 0x080c, 0x560f,
+ 0x0804, 0x3467, 0x00c6, 0xaab4, 0x9284, 0xc000, 0x0148, 0xd2ec,
+ 0x0170, 0x080c, 0x5678, 0x1158, 0x2009, 0x0014, 0x0804, 0x53d8,
+ 0x2061, 0x1800, 0x080c, 0x5678, 0x2009, 0x0007, 0x15c8, 0xd2f4,
+ 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x563a, 0x0058, 0xd2fc,
+ 0x0180, 0x080c, 0x4b3e, 0x0590, 0xa99c, 0x9284, 0x9000, 0xc0d5,
+ 0x080c, 0x560f, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000,
+ 0x0438, 0x080c, 0x4b3e, 0x0510, 0x080c, 0x686d, 0x2009, 0x0009,
+ 0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8, 0xa8cc, 0x9005, 0x11b0,
+ 0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c, 0x4b3e, 0x1108, 0x0070,
+ 0x2009, 0x004b, 0x080c, 0xc6ad, 0x2009, 0x0003, 0x0108, 0x0078,
+ 0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+ 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006,
+ 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x3499, 0x0016, 0x7984, 0x9284,
+ 0x1000, 0xc0fd, 0x080c, 0x560f, 0x001e, 0x1904, 0x3499, 0x0804,
+ 0x3467, 0x00f6, 0x2d78, 0xaab4, 0x0021, 0x00fe, 0x0005, 0xaab4,
+ 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c, 0x9284, 0x1400, 0xc0fd,
+ 0x080c, 0x560f, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120,
+ 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009,
+ 0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+ 0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d,
+ 0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120,
+ 0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
+ 0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xc3ae, 0x1120,
+ 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x5449,
+ 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
+ 0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa810, 0x8007, 0x9084, 0x00ff,
+ 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002,
+ 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+ 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59,
+ 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499, 0x7984,
+ 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023,
+ 0x1990, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19aa, 0x0010,
+ 0x0804, 0x349c, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+ 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56, 0x701f, 0x5499,
+ 0x0005, 0x2001, 0x182d, 0x2003, 0x0001, 0xa85c, 0x9080, 0x001a,
+ 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9,
+ 0x0001, 0x4003, 0x0804, 0x3467, 0x080c, 0x4b11, 0x1120, 0x2009,
+ 0x0002, 0x0804, 0x3499, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,
+ 0x8217, 0x82ff, 0x1118, 0x2099, 0x1990, 0x0040, 0x92c6, 0x0001,
+ 0x1118, 0x2099, 0x19aa, 0x0010, 0x0804, 0x349c, 0xa85c, 0x9080,
+ 0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001,
+ 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,
+ 0x9080, 0x001a, 0xaf60, 0x0804, 0x4b59, 0x7884, 0x908a, 0x1000,
+ 0x1a04, 0x349c, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b,
+ 0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a, 0x00ce, 0x012e, 0x0804,
+ 0x3467, 0x00c6, 0x080c, 0x7351, 0x1160, 0x080c, 0x764c, 0x080c,
+ 0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x080c,
+ 0x0dc3, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5e72,
+ 0x00ce, 0x0005, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904,
+ 0x3499, 0x00c6, 0x7884, 0x9005, 0x0190, 0x7888, 0x2061, 0x1978,
+ 0x2c0c, 0x2062, 0x080c, 0x2ade, 0x01a8, 0x080c, 0x2ae6, 0x0190,
+ 0x080c, 0x2aee, 0x0178, 0x2162, 0x00ce, 0x0804, 0x349c, 0x2061,
+ 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010,
+ 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1568, 0x2061, 0x0100,
+ 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, 0x0003, 0x080c, 0x9ca7,
+ 0x2011, 0x0002, 0x080c, 0x9cb1, 0x002e, 0x080c, 0x9bbf, 0x0036,
+ 0x901e, 0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9,
+ 0x080c, 0xe100, 0x9085, 0x0001, 0x080c, 0x7395, 0x9006, 0x080c,
+ 0x2bce, 0x2001, 0x1800, 0x2003, 0x0004, 0x2001, 0x1984, 0x2003,
+ 0x0000, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3467, 0x81ff, 0x0120,
+ 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009,
+ 0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+ 0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d,
+ 0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120,
+ 0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
+ 0xa86e, 0x080c, 0xc3b1, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499,
+ 0x7007, 0x0003, 0x701f, 0x559d, 0x0005, 0xa830, 0x9086, 0x0100,
+ 0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa834,
+ 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
+ 0x7d98, 0xaf60, 0x0804, 0x4b59, 0xa89c, 0x9086, 0x000d, 0x1904,
+ 0x3499, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x55c1,
+ 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+ 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa99c, 0x7986,
+ 0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c, 0x4b49, 0x2091, 0x4080,
+ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x7007, 0x0001,
+ 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984, 0x615a, 0x6156, 0x605f,
+ 0x0000, 0x6053, 0x0009, 0x7898, 0x6072, 0x789c, 0x606e, 0x7888,
+ 0x606a, 0x788c, 0x6066, 0x2001, 0x19e7, 0x2044, 0x2001, 0x19ee,
+ 0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001, 0xa083, 0x0002, 0xa06f,
+ 0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3467, 0x0126,
+ 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0168, 0x0006,
+ 0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029, 0x080c, 0x321c, 0x003e,
+ 0x080c, 0xc21a, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000,
+ 0x2004, 0x905d, 0x0160, 0x080c, 0x5fcd, 0x080c, 0xa307, 0x0110,
+ 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085,
+ 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e,
+ 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0188,
+ 0x9186, 0x007e, 0x0170, 0x9186, 0x007f, 0x0158, 0x9186, 0x0080,
+ 0x0178, 0x9186, 0x00ff, 0x0128, 0x0026, 0x2200, 0x080c, 0x560f,
+ 0x002e, 0x001e, 0x8108, 0x1f04, 0x5642, 0x015e, 0x012e, 0x0005,
+ 0x080c, 0xc8ce, 0x0db0, 0x0c80, 0x2001, 0x185f, 0x2004, 0x0005,
+ 0x2001, 0x187e, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004,
+ 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005,
+ 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x79a4, 0x81ff,
+ 0x0904, 0x349c, 0x9182, 0x0081, 0x1a04, 0x349c, 0x810c, 0x0016,
+ 0x080c, 0x4b11, 0x0170, 0x080c, 0x0f15, 0x2100, 0x2238, 0x7d84,
+ 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4b56, 0x701f, 0x569e,
+ 0x0005, 0x001e, 0x2009, 0x0002, 0x0804, 0x3499, 0x2079, 0x0000,
+ 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b9,
+ 0x2c44, 0xa774, 0xa078, 0x2071, 0x189f, 0x080c, 0x4b59, 0x701f,
+ 0x56b2, 0x0005, 0x2061, 0x18b9, 0x2c44, 0x0016, 0x0026, 0xa274,
+ 0xa178, 0x080c, 0x0f1d, 0x002e, 0x001e, 0x080c, 0x0fca, 0x9006,
+ 0xa802, 0xa806, 0x0804, 0x3467, 0x0126, 0x0156, 0x0136, 0x0146,
+ 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100,
+ 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084,
+ 0x0118, 0x080c, 0x5872, 0x0068, 0xd08c, 0x0118, 0x080c, 0x577b,
+ 0x0040, 0xd094, 0x0118, 0x080c, 0x574b, 0x0018, 0xd09c, 0x0108,
+ 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
+ 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110,
+ 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030, 0xd09c, 0x1120, 0x6004,
+ 0x9085, 0x0002, 0x6006, 0x7094, 0x9005, 0x0120, 0x7097, 0x0000,
+ 0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086,
+ 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490,
+ 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160,
+ 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009,
+ 0x00f7, 0x080c, 0x5f2f, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085,
+ 0x0140, 0x6042, 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001,
+ 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000,
+ 0x7093, 0x0000, 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e15,
+ 0x080c, 0x859e, 0x0005, 0x2001, 0x1880, 0x2004, 0xd08c, 0x0110,
+ 0x705b, 0xffff, 0x7084, 0x9005, 0x1528, 0x2011, 0x5e15, 0x080c,
+ 0x84c2, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9,
+ 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x5761, 0x6242, 0x7097,
+ 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242,
+ 0x0048, 0x6242, 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c,
+ 0x5fb8, 0x0000, 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0dc3,
+ 0x000b, 0x0005, 0x5785, 0x57d6, 0x5871, 0x00f6, 0x0016, 0x6900,
+ 0x918c, 0x0800, 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000,
+ 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120,
+ 0x1f04, 0x5794, 0x080c, 0x0dc3, 0x68a0, 0x68a2, 0x689c, 0x689e,
+ 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837,
+ 0x0020, 0x080c, 0x5f94, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837,
+ 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1,
+ 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xa190, 0x20e1, 0x0001,
+ 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014,
+ 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5e46, 0x00fe,
+ 0x9006, 0x708e, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c,
+ 0x708f, 0x0000, 0x9025, 0x0904, 0x584e, 0x6020, 0xd0b4, 0x1904,
+ 0x584c, 0x719c, 0x81ff, 0x0904, 0x583a, 0x9486, 0x000c, 0x1904,
+ 0x5847, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5f8d, 0x2011,
+ 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210,
+ 0x8318, 0x1f04, 0x57f3, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b,
+ 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b,
+ 0x0002, 0x7097, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c,
+ 0x859e, 0x080c, 0x5f94, 0x04c0, 0x080c, 0x5f8d, 0x2079, 0x0260,
+ 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900,
+ 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5f8d,
+ 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304,
+ 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x582e, 0x0078,
+ 0x709f, 0x0000, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260,
+ 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043,
+ 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085,
+ 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xa190, 0x20e1,
+ 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
+ 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19ce, 0x2013, 0x0000,
+ 0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8,
+ 0x08d8, 0x0005, 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0dc3, 0x000b,
+ 0x0005, 0x58a3, 0x58b6, 0x58df, 0x58ff, 0x5925, 0x5954, 0x597a,
+ 0x59b2, 0x59d8, 0x5a06, 0x5a41, 0x5a79, 0x5a97, 0x5ac2, 0x5ae4,
+ 0x5aff, 0x5b09, 0x5b3d, 0x5b63, 0x5b92, 0x5bb8, 0x5bf0, 0x5c34,
+ 0x5c71, 0x5c92, 0x5ceb, 0x5d0d, 0x5d3b, 0x5d3b, 0x00c6, 0x2061,
+ 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9,
+ 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,
+ 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009,
+ 0x07d0, 0x2011, 0x5e1c, 0x080c, 0x859e, 0x0005, 0x00f6, 0x708c,
+ 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c,
+ 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834,
+ 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
+ 0x70c3, 0x0001, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0010,
+ 0x080c, 0x5b09, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6,
+ 0x7097, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e1c, 0x080c, 0x84c2,
+ 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000,
+ 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04,
+ 0x58f4, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6,
+ 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086,
+ 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296,
+ 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
+ 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029,
+ 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005,
+ 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000,
+ 0x080c, 0x5f8d, 0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158,
+ 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9,
+ 0x0168, 0x080c, 0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
+ 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
+ 0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500,
+ 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c,
+ 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834,
+ 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
+ 0x70c3, 0x0001, 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5f69,
+ 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007, 0x080c, 0x5f11, 0x2079,
+ 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c,
+ 0x5f70, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff,
+ 0x0180, 0x9180, 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011,
+ 0x0008, 0x080c, 0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c,
+ 0x2771, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+ 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46,
+ 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c,
+ 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079,
+ 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
- 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005,
- 0x00f6, 0x7097, 0x0005, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833,
- 0x1103, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170,
- 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011,
- 0x0008, 0x080c, 0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008,
+ 0x7097, 0x0008, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005,
+ 0x00f6, 0x7097, 0x0009, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833,
+ 0x1105, 0x7837, 0x0100, 0x080c, 0x5f70, 0x1150, 0x7080, 0x9005,
+ 0x1138, 0x080c, 0x5d3c, 0x1188, 0x9085, 0x0001, 0x080c, 0x2771,
+ 0x20a9, 0x0008, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e,
+ 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
+ 0x5e46, 0x0010, 0x080c, 0x5896, 0x00fe, 0x0005, 0x00f6, 0x708c,
+ 0x9005, 0x05a8, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014,
+ 0x1560, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,
+ 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160,
+ 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+ 0x7097, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc,
+ 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000,
+ 0x7097, 0x000e, 0x080c, 0x5ae4, 0x0010, 0x080c, 0x5f69, 0x00fe,
+ 0x0005, 0x00f6, 0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001,
+ 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f11,
+ 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f70,
+ 0x0118, 0x2013, 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012,
+ 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210,
+ 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,
+ 0x0240, 0x1f04, 0x5a66, 0x60c3, 0x0084, 0x080c, 0x5e46, 0x00fe,
+ 0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0, 0x2011, 0x5e1c, 0x080c,
+ 0x84c2, 0x9086, 0x0084, 0x1178, 0x080c, 0x5f8d, 0x2079, 0x0260,
+ 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097,
+ 0x000c, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6,
+ 0x7097, 0x000d, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1107,
+ 0x7837, 0x0000, 0x080c, 0x5f8d, 0x20a9, 0x0040, 0x2011, 0x026e,
+ 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,
+ 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,
+ 0x2011, 0x0260, 0x1f04, 0x5aaa, 0x60c3, 0x0084, 0x080c, 0x5e46,
+ 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5e1c,
+ 0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d, 0x2079,
+ 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,
+ 0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x000e, 0x0029, 0x0010,
+ 0x080c, 0x5f69, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5fb8,
+ 0x7097, 0x000f, 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85,
+ 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004,
+ 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c, 0x84b6, 0x0005, 0x708c,
+ 0x9005, 0x0130, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0000,
+ 0x0005, 0x7097, 0x0011, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x20e1,
+ 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c,
+ 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8,
+ 0x4003, 0x080c, 0x5f70, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e,
+ 0x707c, 0x9084, 0x00ff, 0x0160, 0x080c, 0x2708, 0x9186, 0x007e,
+ 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5dc9,
+ 0x60c3, 0x0014, 0x080c, 0x5e46, 0x0005, 0x00f6, 0x708c, 0x9005,
+ 0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8,
+ 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178,
+ 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
+ 0x1110, 0x70c3, 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f,
+ 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5f1f,
+ 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5f8d,
+ 0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186,
+ 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9, 0x0168, 0x080c,
+ 0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+ 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46,
+ 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c,
+ 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079,
+ 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
+ 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+ 0x7097, 0x0014, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
+ 0x00f6, 0x7097, 0x0015, 0x080c, 0x5f1f, 0x2079, 0x0240, 0x7833,
+ 0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c, 0x5f70, 0x11b8,
+ 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180,
+ 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,
+ 0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c, 0x2771, 0x20a9,
+ 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
+ 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005,
+ 0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011, 0x5e1c, 0x080c, 0x84c2,
+ 0x9086, 0x0014, 0x15a8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30,
+ 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100,
+ 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7a38, 0xd2fc,
+ 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005,
+ 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
+ 0x0001, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7093, 0x0000, 0x7a38,
+ 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010,
+ 0x708f, 0x0000, 0x00fe, 0x0005, 0x080c, 0xa190, 0x080c, 0x5f8d,
+ 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240,
+ 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100,
+ 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c,
+ 0x5f70, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5d3c, 0x1188,
+ 0x9085, 0x0001, 0x080c, 0x2771, 0x20a9, 0x0008, 0x080c, 0x5f8d,
0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
- 0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6,
- 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086,
- 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296,
- 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
- 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0006, 0x0029,
- 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007,
- 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000,
- 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0,
- 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c,
- 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c,
- 0x4e9d, 0x0110, 0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000,
- 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
- 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
- 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8,
- 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
- 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
- 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, 0x0029, 0x0010, 0x080c,
- 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0009, 0x080c, 0x5e54,
- 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5eb3,
- 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5c7f, 0x1188, 0x9085,
- 0x0001, 0x080c, 0x2708, 0x20a9, 0x0008, 0x080c, 0x5ed0, 0x20e1,
- 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
- 0x60c3, 0x0014, 0x080c, 0x5d89, 0x0010, 0x080c, 0x57d9, 0x00fe,
- 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, 0x2011, 0x5d5f, 0x080c,
- 0x835e, 0x9086, 0x0014, 0x1560, 0x080c, 0x5ed0, 0x2079, 0x0260,
- 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011,
- 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
- 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, 0x00b1, 0x0098, 0x9005,
- 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
- 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, 0x080c, 0x5a27, 0x0010,
- 0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000b, 0x2011,
- 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff,
- 0x4304, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837,
- 0x0000, 0x080c, 0x5eb3, 0x0118, 0x2013, 0x0000, 0x0020, 0x705c,
- 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011,
- 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810,
- 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x59a9, 0x60c3, 0x0084,
- 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0,
- 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1178, 0x080c,
- 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834,
- 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, 0x0010, 0x080c, 0x5eac,
- 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, 0x080c, 0x5e54, 0x2079,
- 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x20a9,
- 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108,
- 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
- 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x59ed, 0x60c3,
- 0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
- 0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1198,
- 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158,
- 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26, 0x7097,
- 0x000e, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x918d,
- 0x0001, 0x080c, 0x5efb, 0x7097, 0x000f, 0x708f, 0x0000, 0x2061,
- 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043,
- 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c,
- 0x8352, 0x0005, 0x708c, 0x9005, 0x0130, 0x2011, 0x5d5f, 0x080c,
- 0x835e, 0x7097, 0x0000, 0x0005, 0x7097, 0x0011, 0x080c, 0x9d0b,
- 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
- 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,
- 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5eb3, 0x11a0, 0x7178,
- 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, 0x00ff, 0x0160, 0x080c,
- 0x269f, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011,
- 0x0008, 0x080c, 0x5d0c, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x0005,
- 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e,
- 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30,
- 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
- 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0012,
- 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097,
- 0x0013, 0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837,
- 0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170, 0x7080, 0x9005,
- 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c,
- 0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008, 0x20e1, 0x0000,
- 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
- 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
- 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8,
- 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
- 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
- 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, 0x0029, 0x0010, 0x708f,
- 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0015, 0x080c, 0x5e62,
- 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ed0,
- 0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186,
- 0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f,
- 0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c, 0x4e9d, 0x0110,
- 0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
- 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
- 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011,
- 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x15a8, 0x080c, 0x5ed0,
- 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084,
- 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c,
- 0x5efb, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
- 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
- 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, 0x0001, 0x080c, 0x5efb,
- 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097,
- 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x080c,
- 0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
- 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d,
- 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e,
- 0x7097, 0x0017, 0x080c, 0x5eb3, 0x1150, 0x7080, 0x9005, 0x1138,
- 0x080c, 0x5c7f, 0x1188, 0x9085, 0x0001, 0x080c, 0x2708, 0x20a9,
- 0x0008, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
- 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89,
- 0x0010, 0x080c, 0x57d9, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8,
- 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1190, 0x080c,
- 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834,
- 0x9005, 0x1138, 0x9006, 0x080c, 0x5efb, 0x7097, 0x0018, 0x0029,
- 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019,
- 0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
- 0x080c, 0x5ed0, 0x2009, 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040,
- 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000,
- 0x6816, 0x2009, 0x0260, 0x1f04, 0x5be8, 0x2039, 0x1c0e, 0x080c,
- 0x5eb3, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000,
- 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x705c, 0x2310,
- 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294,
- 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9,
- 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260,
- 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5c1b,
- 0x60c3, 0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c,
- 0x9005, 0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084,
- 0x1198, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107,
- 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26,
- 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
- 0x9085, 0x0001, 0x080c, 0x5efb, 0x7097, 0x001b, 0x080c, 0x9d0b,
- 0x080c, 0x5ed0, 0x2011, 0x0260, 0x2009, 0x0240, 0x748c, 0x9480,
- 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e,
- 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
- 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
- 0x5c67, 0x60c3, 0x0084, 0x080c, 0x5d89, 0x0005, 0x0005, 0x0086,
- 0x0096, 0x2029, 0x185f, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e,
- 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099,
- 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108,
- 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4,
- 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5c99, 0x0804, 0x5d08,
- 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020,
- 0x91a6, 0x3fff, 0x0904, 0x5d08, 0x918d, 0xc000, 0x20a9, 0x0010,
- 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
- 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
- 0x0008, 0x8318, 0x1f04, 0x5cbf, 0x04d8, 0x23a8, 0x2021, 0x0001,
- 0x8426, 0x8425, 0x1f04, 0x5cd1, 0x2328, 0x8529, 0x92be, 0x0007,
- 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8,
- 0x95a8, 0x0010, 0x1f04, 0x5ce0, 0x755a, 0x95c8, 0x31cc, 0x292d,
- 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
- 0x26e8, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405,
- 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1,
- 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008,
- 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
- 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce,
- 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218,
- 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010,
- 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
- 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8,
- 0x9405, 0x203a, 0x715a, 0x91a0, 0x31cc, 0x242d, 0x95ac, 0x00ff,
- 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x26e8, 0x001e,
- 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, 0x9084, 0x0000, 0x0005,
- 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6,
- 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5e15, 0x080c,
- 0x9623, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x0126,
- 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, 0x0000, 0x7840, 0x0026,
- 0x0016, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x001e, 0x9094, 0x0010,
- 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x29fa, 0x0228, 0x2011,
- 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19ce, 0x2013, 0x0000,
- 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
- 0x961a, 0x6144, 0xd184, 0x0120, 0x7194, 0x918d, 0x2000, 0x0018,
- 0x7188, 0x918d, 0x1000, 0x2011, 0x1975, 0x2112, 0x2009, 0x07d0,
- 0x2011, 0x5d5f, 0x080c, 0x8432, 0x0005, 0x0016, 0x0026, 0x00c6,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x9e89, 0x2009, 0x00f7, 0x080c,
- 0x5e72, 0x2061, 0x19d7, 0x900e, 0x611a, 0x611e, 0x617a, 0x617e,
- 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090,
- 0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d,
- 0x2011, 0x5de1, 0x080c, 0x8352, 0x012e, 0x00ce, 0x002e, 0x001e,
- 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071,
- 0x0100, 0x080c, 0x9623, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000,
- 0x0110, 0x080c, 0x2b75, 0x080c, 0x72ed, 0x0188, 0x080c, 0x7308,
- 0x1170, 0x080c, 0x75e6, 0x0016, 0x080c, 0x27b7, 0x2001, 0x194a,
- 0x2102, 0x001e, 0x080c, 0x75e1, 0x080c, 0x7212, 0x0050, 0x2009,
- 0x0001, 0x080c, 0x2a93, 0x2001, 0x0001, 0x080c, 0x264c, 0x080c,
- 0x5db5, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004,
- 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1975,
- 0x201c, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012,
- 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, 0x5ed0, 0x20e9, 0x0000,
- 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x5eca, 0x2099,
- 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5ecd,
- 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026,
- 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04,
- 0x5e4a, 0x002e, 0x001e, 0x0005, 0x080c, 0x9d0b, 0x20e1, 0x0001,
- 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
- 0x4003, 0x0005, 0x080c, 0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000,
- 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
- 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001,
- 0x1833, 0x2004, 0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084,
- 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce,
- 0x0005, 0x0016, 0x0046, 0x080c, 0x6742, 0x0158, 0x9006, 0x2020,
- 0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c, 0xc195,
- 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x3037, 0x080c, 0xbef8,
- 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4c74,
- 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, 0x5db5, 0x7097, 0x0000,
- 0x708f, 0x0000, 0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c,
- 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000,
- 0x2001, 0x0101, 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e,
- 0x000e, 0x0005, 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008,
- 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6,
- 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001,
- 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807,
- 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827,
- 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800,
- 0x2003, 0x0001, 0x0005, 0x2001, 0x1983, 0x0118, 0x2003, 0x0001,
- 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009,
- 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x5f0a, 0x015e, 0x0005,
- 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x185e, 0x9006,
- 0xb802, 0xb8ba, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198,
- 0x31cc, 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8ae,
- 0x080c, 0x9e82, 0x1120, 0x9192, 0x007e, 0x1208, 0xbbae, 0x20a9,
- 0x0004, 0xb8b0, 0x20e8, 0xb9b4, 0x9198, 0x0006, 0x9006, 0x23a0,
- 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e,
- 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e,
- 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a,
- 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb9a2,
- 0x0096, 0xb8a4, 0x904d, 0x190c, 0x0fb3, 0xb8a7, 0x0000, 0x009e,
- 0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084,
- 0x00ff, 0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005,
- 0x0126, 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x5fe6,
- 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904, 0x5fcb, 0x9188,
- 0x1000, 0x2104, 0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e,
- 0x0006, 0x1560, 0xb8a4, 0x900d, 0x1904, 0x5fec, 0xa888, 0x908a,
- 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108,
- 0xa966, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e,
- 0x080c, 0x86ed, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900,
- 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005,
- 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006,
- 0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
- 0xb900, 0xd1fc, 0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408,
- 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
- 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040,
- 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048,
- 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
- 0x900e, 0x9005, 0x012e, 0x0005, 0xae7c, 0x96b4, 0x3fff, 0x080c,
- 0x65a2, 0x0904, 0x5fae, 0x0804, 0x5f8e, 0x00b6, 0x00e6, 0x0126,
- 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6073, 0x9188,
- 0x1000, 0x2104, 0x905d, 0x0904, 0x604b, 0xb8a0, 0x9086, 0x007f,
- 0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x674e, 0x0160, 0xa998,
+ 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x0010, 0x080c, 0x5896,
+ 0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8, 0x2011, 0x5e1c, 0x080c,
+ 0x84c2, 0x9086, 0x0084, 0x1190, 0x080c, 0x5f8d, 0x2079, 0x0260,
+ 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006,
+ 0x080c, 0x5fb8, 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000,
+ 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019, 0x080c, 0x5f1f, 0x2079,
+ 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x2009,
+ 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108,
+ 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260,
+ 0x1f04, 0x5ca5, 0x2039, 0x1c0e, 0x080c, 0x5f70, 0x11e8, 0x2728,
+ 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff,
+ 0x8007, 0x9205, 0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1c0e,
+ 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294,
+ 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e,
+ 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,
+ 0x6812, 0x2009, 0x0240, 0x1f04, 0x5cd8, 0x60c3, 0x0084, 0x080c,
+ 0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d,
+ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005,
+ 0x1140, 0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x001a, 0x0029,
+ 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c,
+ 0x5fb8, 0x7097, 0x001b, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x2011,
+ 0x0260, 0x2009, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007,
+ 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186,
+ 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,
+ 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5d24, 0x60c3, 0x0084,
+ 0x080c, 0x5e46, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x185f,
+ 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0,
+ 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9,
+ 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200,
+ 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008,
+ 0x8211, 0x1f04, 0x5d56, 0x0804, 0x5dc5, 0x82ff, 0x1160, 0xd5d4,
+ 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904,
+ 0x5dc5, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4,
+ 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008,
+ 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04,
+ 0x5d7c, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04,
+ 0x5d8e, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039,
+ 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04,
+ 0x5d9d, 0x755a, 0x95c8, 0x3268, 0x292d, 0x95ac, 0x00ff, 0x757e,
+ 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7,
+ 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001,
+ 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9,
+ 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e,
+ 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1,
+ 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0,
+ 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026,
+ 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0,
+ 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021,
+ 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029,
+ 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a,
+ 0x91a0, 0x3268, 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536,
+ 0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7, 0x0000, 0x65ea,
+ 0x7083, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800,
+ 0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100,
+ 0x2071, 0x0140, 0x080c, 0x5ed2, 0x080c, 0x98d1, 0x7004, 0x9084,
+ 0x4000, 0x0110, 0x080c, 0x2bde, 0x0126, 0x2091, 0x8000, 0x2071,
+ 0x1825, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7,
+ 0x080c, 0x5f2f, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842,
+ 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
+ 0x2012, 0x2011, 0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e,
+ 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8, 0x6144, 0xd184,
+ 0x0120, 0x7194, 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000,
+ 0x2011, 0x1975, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c,
+ 0x859e, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0xa30e, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x2061, 0x19d7,
+ 0x900e, 0x611a, 0x611e, 0x617a, 0x617e, 0x2061, 0x1800, 0x6003,
+ 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
+ 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c,
+ 0x84b6, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006,
+ 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x98d1,
+ 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde,
+ 0x080c, 0x7359, 0x0188, 0x080c, 0x7374, 0x1170, 0x080c, 0x7656,
+ 0x0016, 0x080c, 0x2820, 0x2001, 0x1949, 0x2102, 0x001e, 0x080c,
+ 0x7651, 0x080c, 0x727e, 0x0050, 0x2009, 0x0001, 0x080c, 0x2afc,
+ 0x2001, 0x0001, 0x080c, 0x26b1, 0x080c, 0x5e72, 0x012e, 0x000e,
+ 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026,
+ 0x0036, 0x2011, 0x8017, 0x2001, 0x1975, 0x201c, 0x080c, 0x4b6d,
+ 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1,
+ 0x1c80, 0x080c, 0x5f8d, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099,
+ 0x20a9, 0x0020, 0x080c, 0x5f87, 0x2099, 0x0260, 0x20a1, 0x1c92,
+ 0x0051, 0x20a9, 0x000e, 0x080c, 0x5f8a, 0x2099, 0x0260, 0x20a1,
+ 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104,
+ 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f07, 0x002e, 0x001e,
+ 0x0005, 0x080c, 0xa190, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9,
+ 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c,
+ 0xa190, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
+ 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6,
+ 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005,
+ 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010,
+ 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046,
+ 0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
+ 0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
+ 0x900e, 0x080c, 0x30cd, 0x080c, 0xc8ce, 0x0140, 0x0036, 0x2019,
+ 0xffff, 0x2021, 0x0007, 0x080c, 0x4d24, 0x003e, 0x004e, 0x001e,
+ 0x0005, 0x080c, 0x5e72, 0x7097, 0x0000, 0x708f, 0x0000, 0x0005,
+ 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005,
+ 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c,
+ 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009,
+ 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084,
+ 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6,
+ 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004,
+ 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef,
+ 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e,
+ 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005,
+ 0x2001, 0x1983, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000,
+ 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a,
+ 0x8108, 0x1f04, 0x5fc7, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156,
+ 0x0136, 0x0146, 0x2069, 0x185e, 0x9006, 0xb802, 0xb8be, 0xb807,
+ 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3268, 0x231d, 0x939c,
+ 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8b2, 0x080c, 0xa307, 0x1120,
+ 0x9192, 0x007e, 0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8,
+ 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004,
+ 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842,
+ 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a,
+ 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893,
+ 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4,
+ 0x904d, 0x190c, 0x0fbf, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,
+ 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842,
+ 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x60a4, 0x2001, 0x180c,
+ 0x2004, 0x9084, 0x0003, 0x1904, 0x60aa, 0x9188, 0x1000, 0x2104,
+ 0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1560,
+ 0xb8a4, 0x900d, 0x1904, 0x60bc, 0xa888, 0x908a, 0x199a, 0x0210,
+ 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0xa966, 0xb850,
+ 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e, 0x080c, 0x88be,
+ 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900, 0xb002, 0xa803,
+ 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005, 0x900e, 0x04b8,
+ 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290, 0x080c,
+ 0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc,
+ 0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001, 0x0028,
+ 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
+ 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001, 0x0029,
+ 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e, 0x0038,
+ 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,
+ 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, 0x19d0, 0x9188,
+ 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x686d, 0x1990, 0xb800,
+ 0xd0bc, 0x0978, 0x0804, 0x6048, 0xae7c, 0x96b4, 0x3fff, 0x080c,
+ 0x66aa, 0x0904, 0x606c, 0x0804, 0x604c, 0x00b6, 0x00e6, 0x0126,
+ 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6143, 0x9188,
+ 0x1000, 0x2104, 0x905d, 0x0904, 0x611b, 0xb8a0, 0x9086, 0x007f,
+ 0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x6875, 0x0160, 0xa998,
0x81ff, 0x0130, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118,
- 0x080c, 0x6746, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005,
- 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xb943, 0x002e, 0x1120,
- 0x2001, 0x0008, 0x0804, 0x6075, 0x6020, 0x9086, 0x000a, 0x0120,
- 0x2001, 0x0008, 0x0804, 0x6075, 0x601a, 0x6003, 0x0008, 0x2900,
- 0x6016, 0x0058, 0x080c, 0x9ec2, 0x05e8, 0x2b00, 0x6012, 0x2900,
+ 0x080c, 0x686d, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005,
+ 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x002e, 0x1120,
+ 0x2001, 0x0008, 0x0804, 0x6145, 0x6020, 0x9086, 0x000a, 0x0120,
+ 0x2001, 0x0008, 0x0804, 0x6145, 0x601a, 0x6003, 0x0008, 0x2900,
+ 0x6016, 0x0058, 0x080c, 0xa347, 0x05e8, 0x2b00, 0x6012, 0x2900,
0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c,
- 0x9f88, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006,
- 0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
+ 0xa419, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006,
+ 0x1290, 0x080c, 0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8,
0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028,
@@ -2875,163 +2901,170 @@
0x7930, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001,
0x002c, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008,
- 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x610a, 0x60c5, 0x60dc,
- 0x610a, 0x610a, 0x610a, 0x610a, 0x610a, 0x2100, 0x9082, 0x007e,
- 0x1278, 0x080c, 0x63c1, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904,
- 0x6112, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010,
- 0x080c, 0x497d, 0x0150, 0x04b0, 0x080c, 0x6411, 0x1598, 0xb810,
- 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0x9ec2, 0x0530,
- 0x2b00, 0x6012, 0x080c, 0xbc97, 0x2900, 0x6016, 0x600b, 0xffff,
- 0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3066,
- 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2001,
- 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0x9f88,
+ 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x61da, 0x6195, 0x61ac,
+ 0x61da, 0x61da, 0x61da, 0x61da, 0x61da, 0x2100, 0x9082, 0x007e,
+ 0x1278, 0x080c, 0x6497, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904,
+ 0x61e2, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010,
+ 0x080c, 0x4a2b, 0x0150, 0x04b0, 0x080c, 0x64fc, 0x1598, 0xb810,
+ 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0xa347, 0x0530,
+ 0x2b00, 0x6012, 0x080c, 0xc640, 0x2900, 0x6016, 0x600b, 0xffff,
+ 0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3102,
+ 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x2001,
+ 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xa419,
0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c,
0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e,
0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091,
- 0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x62e7, 0x90c6, 0x0056,
- 0x0904, 0x62eb, 0x90c6, 0x0066, 0x0904, 0x62ef, 0x90c6, 0x0067,
- 0x0904, 0x62f3, 0x90c6, 0x0068, 0x0904, 0x62f7, 0x90c6, 0x006b,
- 0x0904, 0x62fb, 0x90c6, 0x0071, 0x0904, 0x62ff, 0x90c6, 0x0074,
- 0x0904, 0x6303, 0x90c6, 0x007c, 0x0904, 0x6307, 0x90c6, 0x007e,
- 0x0904, 0x630b, 0x90c6, 0x0037, 0x0904, 0x630f, 0x9016, 0x2079,
- 0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x62e2, 0x9182, 0x0800,
- 0x1a04, 0x62e2, 0x080c, 0x6411, 0x11b8, 0xb804, 0x9084, 0x00ff,
- 0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x6254,
- 0x90c6, 0x006f, 0x0148, 0x080c, 0x9e82, 0x1904, 0x62cb, 0xb8a0,
- 0x9084, 0xff80, 0x1904, 0x62cb, 0xa898, 0x90c6, 0x006f, 0x0158,
- 0x90c6, 0x005e, 0x0904, 0x622b, 0x90c6, 0x0064, 0x0904, 0x6254,
- 0x2008, 0x0804, 0x61f4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0x9e82,
- 0x1120, 0x9182, 0x007f, 0x0a04, 0x61f4, 0x9186, 0x00ff, 0x0904,
- 0x61f4, 0x9182, 0x0800, 0x1a04, 0x61f4, 0xaaa4, 0xaba0, 0x7878,
+ 0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x63bd, 0x90c6, 0x0056,
+ 0x0904, 0x63c1, 0x90c6, 0x0066, 0x0904, 0x63c5, 0x90c6, 0x0067,
+ 0x0904, 0x63c9, 0x90c6, 0x0068, 0x0904, 0x63cd, 0x90c6, 0x006b,
+ 0x0904, 0x63d1, 0x90c6, 0x0071, 0x0904, 0x63d5, 0x90c6, 0x0074,
+ 0x0904, 0x63d9, 0x90c6, 0x007c, 0x0904, 0x63dd, 0x90c6, 0x007e,
+ 0x0904, 0x63e1, 0x90c6, 0x0037, 0x0904, 0x63e5, 0x9016, 0x2079,
+ 0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x63b8, 0x9182, 0x0800,
+ 0x1a04, 0x63b8, 0x080c, 0x64fc, 0x11b8, 0xb804, 0x9084, 0x00ff,
+ 0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x632a,
+ 0x90c6, 0x006f, 0x0148, 0x080c, 0xa307, 0x1904, 0x63a1, 0xb8a0,
+ 0x9084, 0xff80, 0x1904, 0x63a1, 0xa898, 0x90c6, 0x006f, 0x0158,
+ 0x90c6, 0x005e, 0x0904, 0x6301, 0x90c6, 0x0064, 0x0904, 0x632a,
+ 0x2008, 0x0804, 0x62c4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0xa307,
+ 0x1120, 0x9182, 0x007f, 0x0a04, 0x62c4, 0x9186, 0x00ff, 0x0904,
+ 0x62c4, 0x9182, 0x0800, 0x1a04, 0x62c4, 0xaaa4, 0xaba0, 0x7878,
0x9306, 0x11a8, 0x787c, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310,
- 0x009e, 0x0804, 0x61f4, 0x080c, 0x9e82, 0x1140, 0x99cc, 0xff00,
- 0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x61f4, 0x009e, 0x080c,
- 0x497d, 0x0904, 0x61fd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528,
- 0x0006, 0x080c, 0x6643, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006,
- 0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0036, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x000a,
- 0x2098, 0x080c, 0x0f7e, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110,
+ 0x009e, 0x0804, 0x62c4, 0x080c, 0xa307, 0x1140, 0x99cc, 0xff00,
+ 0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x62c4, 0x009e, 0x080c,
+ 0x4a2b, 0x0904, 0x62cd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528,
+ 0x0006, 0x080c, 0x674b, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+ 0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006,
+ 0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+ 0x9080, 0x0036, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a,
+ 0x2098, 0x080c, 0x0f8a, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110,
0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070,
0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001,
0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa89a, 0xa99e,
- 0xaaa2, 0x2001, 0x0030, 0x900e, 0x0440, 0x080c, 0x9ec2, 0x1130,
+ 0xaaa2, 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0xa347, 0x1130,
0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012,
- 0x080c, 0xbc97, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c,
- 0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3066,
- 0x012e, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x2009, 0x0002, 0x080c, 0x9f88, 0x9006, 0x9005, 0x012e, 0x00ee,
- 0x00fe, 0x00be, 0x0005, 0x080c, 0x55bb, 0x0118, 0x2009, 0x0007,
- 0x00f8, 0xa99c, 0xaeb4, 0x080c, 0x6411, 0x1904, 0x61ef, 0x9186,
- 0x007f, 0x0130, 0x080c, 0x6746, 0x0118, 0x2009, 0x0009, 0x0080,
- 0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040,
- 0x2900, 0x009e, 0xa806, 0x080c, 0xbb36, 0x19b0, 0x2009, 0x0003,
- 0x2001, 0x4005, 0x0804, 0x61f6, 0xa99c, 0xaeb4, 0x080c, 0x6411,
- 0x1904, 0x61ef, 0x0096, 0x080c, 0x1001, 0x1128, 0x009e, 0x2009,
- 0x0002, 0x0804, 0x62a8, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048,
- 0x20a9, 0x002b, 0xb8b0, 0x20e0, 0xb8b4, 0x2098, 0xa860, 0x20e8,
- 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
- 0x0006, 0x20a0, 0xbbb4, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f7e,
- 0x009e, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684,
- 0x1168, 0x080c, 0x55a7, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0,
- 0xb800, 0xd08c, 0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x6746,
- 0x0118, 0xa89f, 0x0009, 0x0080, 0x080c, 0x55bb, 0x0118, 0xa89f,
- 0x0007, 0x0050, 0x080c, 0xbb19, 0x1904, 0x6224, 0x2009, 0x0003,
- 0x2001, 0x4005, 0x0804, 0x61f6, 0xa87f, 0x0030, 0xa89b, 0x4005,
- 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
- 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8,
- 0x2031, 0x0000, 0x2041, 0x1247, 0x080c, 0xa45b, 0x1904, 0x6224,
- 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x6225,
- 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,
- 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e,
- 0x0804, 0x6225, 0x2001, 0x0029, 0x900e, 0x0804, 0x6225, 0x080c,
- 0x35fd, 0x0804, 0x6226, 0x080c, 0x52cd, 0x0804, 0x6226, 0x080c,
- 0x4430, 0x0804, 0x6226, 0x080c, 0x44a9, 0x0804, 0x6226, 0x080c,
- 0x4505, 0x0804, 0x6226, 0x080c, 0x4645, 0x0804, 0x6226, 0x080c,
- 0x4a37, 0x0804, 0x6226, 0x080c, 0x4ced, 0x0804, 0x6226, 0x080c,
- 0x4f33, 0x0804, 0x6226, 0x080c, 0x512d, 0x0804, 0x6226, 0x080c,
- 0x3831, 0x0804, 0x6226, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268,
- 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6746, 0x1148,
- 0x00e9, 0x080c, 0x6541, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
- 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001,
- 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
- 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091,
- 0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802,
- 0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852,
- 0xb84e, 0xa803, 0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800,
- 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126,
- 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005,
- 0x0110, 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e,
- 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210,
- 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac,
- 0x0158, 0x080c, 0x6742, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086,
- 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215,
- 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c,
- 0x0dc4, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126,
- 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086,
- 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x673e, 0x1138,
- 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e,
- 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be,
- 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6,
- 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f,
- 0x2004, 0x9082, 0x0050, 0x0290, 0x0096, 0x080c, 0x1001, 0x2958,
- 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8b6, 0xb860, 0xb8b2,
- 0x9006, 0xb8a6, 0x080c, 0x5f10, 0x9006, 0x0010, 0x9085, 0x0001,
- 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000,
- 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x00a8, 0x00d6,
- 0x9190, 0x1000, 0x2204, 0x905d, 0x0168, 0x2013, 0x0000, 0xb8a4,
- 0x904d, 0x190c, 0x0fb3, 0x2b48, 0xb8b4, 0xb85e, 0xb8b0, 0xb862,
- 0x080c, 0x1043, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be,
- 0x0005, 0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030,
- 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005,
- 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800,
- 0xc08c, 0xb802, 0x080c, 0x72e5, 0x1510, 0xb8a0, 0x9086, 0x007e,
- 0x0120, 0x080c, 0x9e82, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8,
- 0x00c6, 0x2061, 0x195f, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050,
- 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005,
- 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040,
- 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099,
- 0x0276, 0xb8b0, 0x20e8, 0xb8b4, 0x9088, 0x000a, 0x21a0, 0x20a9,
- 0x0004, 0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9,
- 0x0004, 0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a,
- 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200,
- 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e,
- 0x9182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259,
- 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009,
- 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070,
- 0x9182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581,
- 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e,
- 0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071,
- 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x00ee,
+ 0x080c, 0xc640, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c,
+ 0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3102,
+ 0x012e, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448,
+ 0x2009, 0x0002, 0x080c, 0xa419, 0xa8b4, 0xd094, 0x0118, 0xb8bc,
+ 0xc08d, 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be,
+ 0x0005, 0x080c, 0x5678, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa99c,
+ 0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf, 0x9186, 0x007f, 0x0130,
+ 0x080c, 0x686d, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c,
+ 0x100d, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e,
+ 0xa806, 0x080c, 0xc3b1, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005,
+ 0x0804, 0x62c6, 0xa99c, 0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf,
+ 0x0096, 0x080c, 0x100d, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804,
+ 0x637e, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b,
+ 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,
+ 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0,
+ 0xbbb8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f8a, 0x009e, 0xa87f,
+ 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684, 0x1168, 0x080c,
+ 0x5664, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0, 0xb800, 0xd08c,
+ 0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x686d, 0x0118, 0xa89f,
+ 0x0009, 0x0080, 0x080c, 0x5678, 0x0118, 0xa89f, 0x0007, 0x0050,
+ 0x080c, 0xc394, 0x1904, 0x62fa, 0x2009, 0x0003, 0x2001, 0x4005,
+ 0x0804, 0x62c6, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa804, 0x8006,
+ 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+ 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000,
+ 0x2041, 0x1253, 0x080c, 0xa8fb, 0x1904, 0x62fa, 0x2009, 0x0002,
+ 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x62fb, 0x2009, 0x180c,
+ 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
+ 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x62fb,
+ 0x2001, 0x0029, 0x900e, 0x0804, 0x62fb, 0x080c, 0x3699, 0x0804,
+ 0x62fc, 0x080c, 0x538a, 0x0804, 0x62fc, 0x080c, 0x44d3, 0x0804,
+ 0x62fc, 0x080c, 0x454c, 0x0804, 0x62fc, 0x080c, 0x45a8, 0x0804,
+ 0x62fc, 0x080c, 0x46e8, 0x0804, 0x62fc, 0x080c, 0x4ae7, 0x0804,
+ 0x62fc, 0x080c, 0x4da4, 0x0804, 0x62fc, 0x080c, 0x4ff0, 0x0804,
+ 0x62fc, 0x080c, 0x51ea, 0x0804, 0x62fc, 0x080c, 0x38cf, 0x0804,
+ 0x62fc, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268, 0x9188, 0x1000,
+ 0x2104, 0x905d, 0x0140, 0x080c, 0x686d, 0x1148, 0x00e9, 0x080c,
+ 0x6649, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082,
+ 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029, 0x2009,
+ 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
+ 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0xb850,
+ 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e, 0xa803,
+ 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, 0xa803,
+ 0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108,
+ 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026,
+ 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285,
+ 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005,
+ 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04,
+ 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c,
+ 0x6869, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110,
+ 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006,
+ 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dc3, 0x000e,
+ 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091,
+ 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168,
+ 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6865, 0x1138, 0x9284, 0x00ff,
+ 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff,
+ 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182,
+ 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190,
+ 0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f, 0x2004, 0x9082,
+ 0x0050, 0x0290, 0x0096, 0x080c, 0x100d, 0x2958, 0x009e, 0x0160,
+ 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006, 0xb8a6,
+ 0x080c, 0x5fcd, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, 0x00de,
+ 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182,
+ 0x0800, 0x0218, 0x9085, 0x0001, 0x0450, 0x00d6, 0x9190, 0x1000,
+ 0x2204, 0x905d, 0x0510, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x190c,
+ 0x0fbf, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, 0x0168, 0x600c,
+ 0x0006, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0110, 0x080c, 0x0fbf,
+ 0x080c, 0xa39d, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48, 0xb8b8,
+ 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x104f, 0x00de, 0x9006, 0x002e,
+ 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800, 0x0218,
+ 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0,
+ 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006,
+ 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x7351, 0x1510,
+ 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xa307, 0x11d8, 0x0078,
+ 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x195e, 0x7048, 0x2062,
+ 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c,
+ 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
+ 0x1800, 0x68b2, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866,
+ 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8, 0xb8b8, 0x9088,
+ 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a, 0x9088,
+ 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200, 0x6817,
+ 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050,
+ 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e,
+ 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009, 0x0008,
+ 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182,
+ 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218,
+ 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009, 0x0004,
+ 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
+ 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
+ 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a,
+ 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00, 0x2009, 0x187e,
+ 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac,
+ 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c,
+ 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe, 0x003e, 0x00ee,
0x002e, 0x001e, 0x0005, 0x0096, 0x00a6, 0x0126, 0x2091, 0x8000,
- 0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6509, 0xaa6c,
+ 0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6611, 0xaa6c,
0x9282, 0x001c, 0x0250, 0x2950, 0xa804, 0x904d, 0x1dc0, 0x080c,
- 0x1001, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6,
+ 0x100d, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6,
0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084,
0xffc0, 0x9080, 0x001e, 0x2098, 0x2009, 0x001c, 0x20a9, 0x0001,
- 0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc4,
+ 0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc3,
0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa6e,
- 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1001, 0x0178,
- 0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x65ca, 0xa86f, 0x0001,
+ 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x100d, 0x0178,
+ 0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x66d2, 0xa86f, 0x0001,
0xae7a, 0x9085, 0x0001, 0x012e, 0x00ae, 0x009e, 0x0005, 0x9006,
0x0cd0, 0x0126, 0x2091, 0x8000, 0x0096, 0x0036, 0x0046, 0x00a6,
- 0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x65da,
+ 0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x66e2,
0x1160, 0x2348, 0xa86c, 0x908a, 0x0002, 0x0268, 0x8001, 0xa86e,
- 0x0020, 0x080c, 0x1033, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e,
+ 0x0020, 0x080c, 0x103f, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e,
0x009e, 0x012e, 0x0005, 0xb8a4, 0x9306, 0x1120, 0x2348, 0xa804,
- 0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x1033,
- 0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x86ed, 0x012e, 0x0005,
+ 0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x103f,
+ 0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x88be, 0x012e, 0x0005,
0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000,
0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff,
0x0120, 0xa87c, 0x9606, 0x0158, 0x0030, 0xa870, 0x9406, 0x1118,
0xa874, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c,
- 0x9a08, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,
+ 0x9cd9, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,
0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e,
0x0005, 0x9016, 0x0036, 0x0046, 0x00f9, 0x004e, 0x003e, 0x1110,
- 0x2011, 0x0001, 0x0005, 0x080c, 0x6640, 0x1904, 0xba0f, 0x0005,
- 0x080c, 0x6640, 0x1904, 0xb9b4, 0x0005, 0x080c, 0x6640, 0x1904,
- 0xba0c, 0x0005, 0x080c, 0x6640, 0x1904, 0xb9d3, 0x0005, 0x080c,
- 0x6640, 0x1904, 0xba52, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
+ 0x2011, 0x0001, 0x0005, 0x080c, 0x6748, 0x1904, 0xc28a, 0x0005,
+ 0x080c, 0x6748, 0x1904, 0xc22f, 0x0005, 0x080c, 0x6748, 0x1904,
+ 0xc287, 0x0005, 0x080c, 0x6748, 0x1904, 0xc24e, 0x0005, 0x080c,
+ 0x6748, 0x1904, 0xc2cd, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
0x0001, 0x0005, 0x2918, 0x2320, 0x0136, 0x01c6, 0xa868, 0x9005,
0x11e8, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
0xffc0, 0x9080, 0x001e, 0x2098, 0x20a9, 0x0001, 0x2009, 0x001c,
@@ -3046,93 +3079,89 @@
0x0110, 0x2348, 0x0c30, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,
0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,
0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,
- 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x1001, 0x0168,
- 0x2900, 0xb8a6, 0x080c, 0x65ca, 0xa86b, 0x0001, 0xa86f, 0x0000,
+ 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x100d, 0x0168,
+ 0x2900, 0xb8a6, 0x080c, 0x66d2, 0xa86b, 0x0001, 0xa86f, 0x0000,
0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,
- 0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x0c50,
+ 0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fbf, 0x009e, 0x0c50,
0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7,
- 0x0000, 0x080c, 0x0fb3, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
+ 0x0000, 0x080c, 0x0fbf, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
0xb89c, 0xd0a4, 0x0005, 0x900e, 0xb89c, 0xd0a4, 0x1108, 0xc185,
- 0xd0ac, 0x1108, 0xc195, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x72e5,
- 0x01b0, 0x71c0, 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001,
- 0x007e, 0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084,
- 0x00ff, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079,
- 0x185e, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x20a9, 0x007f, 0x900e,
- 0x0016, 0x080c, 0x6411, 0x1180, 0x080c, 0x676a, 0x1168, 0xb804,
- 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006,
- 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x6670,
- 0x015e, 0x080c, 0x6704, 0x0120, 0x2001, 0x1962, 0x200c, 0x0038,
- 0x2079, 0x185e, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
- 0x669e, 0x080c, 0x8432, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
- 0x669e, 0x080c, 0x835e, 0x080c, 0x6704, 0x01d8, 0x2001, 0x107e,
- 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6742, 0x0130,
- 0x2009, 0x07d0, 0x2011, 0x669e, 0x080c, 0x8432, 0x00e6, 0x2071,
- 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2e5f, 0x00ee,
+ 0xd0ac, 0x1108, 0xc195, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0005,
+ 0x00b6, 0x00f6, 0x080c, 0x7351, 0x01b0, 0x71c0, 0x81ff, 0x1198,
+ 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
+ 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
+ 0xb800, 0xc0ed, 0xb802, 0x2079, 0x185e, 0x7804, 0xd0a4, 0x01e8,
+ 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1180,
+ 0x080c, 0x6891, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096,
+ 0x0004, 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802,
+ 0x001e, 0x8108, 0x1f04, 0x677c, 0x015e, 0x080c, 0x682b, 0x0120,
+ 0x2001, 0x1961, 0x200c, 0x0098, 0x2079, 0x185e, 0x7804, 0xd0a4,
+ 0x0190, 0x2009, 0x07d0, 0x2001, 0x182b, 0x2004, 0x9005, 0x0138,
+ 0x2001, 0x187e, 0x2004, 0xd0e4, 0x0110, 0x2009, 0x5dc0, 0x2011,
+ 0x67b6, 0x080c, 0x859e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
+ 0x67b6, 0x080c, 0x84c2, 0x080c, 0x682b, 0x01d8, 0x2001, 0x107e,
+ 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6869, 0x0130,
+ 0x2009, 0x07d0, 0x2011, 0x67b6, 0x080c, 0x859e, 0x00e6, 0x2071,
+ 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2ed6, 0x00ee,
0x04c8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
- 0x6411, 0x1550, 0x080c, 0x676a, 0x1538, 0xb800, 0xd0ec, 0x0520,
- 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd156,
- 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x673e, 0x2001, 0x0707,
+ 0x64fc, 0x1550, 0x080c, 0x6891, 0x1538, 0xb800, 0xd0ec, 0x0520,
+ 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xdd18,
+ 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6865, 0x2001, 0x0707,
0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019,
- 0x0029, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e,
- 0x080c, 0xce89, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x66c6,
+ 0x0029, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e,
+ 0x080c, 0xda37, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x67de,
0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800,
- 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e,
- 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005,
- 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000,
- 0x2204, 0x9b06, 0x190c, 0x0dc4, 0x000e, 0xba00, 0x9005, 0x0110,
- 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011,
- 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1960, 0x200c, 0x2011,
- 0x6734, 0x080c, 0x8432, 0x0005, 0x2011, 0x6734, 0x080c, 0x835e,
- 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x55a7,
- 0xd0ac, 0x0005, 0x080c, 0x55a7, 0xd0a4, 0x0005, 0x0016, 0xb904,
- 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904,
- 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6,
- 0x00f6, 0x080c, 0xbef8, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138,
- 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8b8, 0xd094, 0x00fe,
- 0x00be, 0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168,
- 0x2009, 0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814,
- 0x9084, 0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e,
- 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001,
- 0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00, 0x873f,
- 0x9006, 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001,
- 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404,
- 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138,
- 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108,
- 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e,
- 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085,
- 0x0001, 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e,
- 0x9006, 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100,
- 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804,
- 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580,
- 0x2001, 0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00,
- 0x873f, 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000,
- 0x2504, 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
- 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810,
- 0x9306, 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c,
- 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005,
- 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005,
- 0x0006, 0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8,
- 0x000e, 0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001,
- 0xa001, 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001,
- 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911,
- 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a,
- 0x701e, 0x700a, 0x7046, 0x2071, 0x1925, 0x080c, 0x101a, 0x090c,
- 0x0dc4, 0xa8af, 0xdcb0, 0xa86b, 0x1911, 0xa86f, 0x0000, 0xa873,
- 0x0000, 0xa877, 0x0001, 0xa87b, 0x1928, 0xa87f, 0x0020, 0xa883,
- 0x0040, 0xa8a3, 0x0000, 0x2900, 0x708e, 0x2001, 0x1923, 0x2003,
- 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1925, 0x900e, 0x710a,
- 0x080c, 0x55a7, 0xd0fc, 0x1148, 0x080c, 0x55a7, 0x900e, 0xd09c,
- 0x0108, 0x8108, 0x7102, 0x0804, 0x68c7, 0x2001, 0x187e, 0x200c,
- 0x9184, 0x000f, 0x0006, 0x2001, 0x180d, 0x2004, 0xd08c, 0x000e,
- 0x0108, 0x9006, 0x0002, 0x686c, 0x686c, 0x686c, 0x686c, 0x686c,
- 0x6893, 0x68a8, 0x68d2, 0x68ab, 0x686c, 0x686c, 0x686c, 0x686c,
- 0x686c, 0x686c, 0x686c, 0x7003, 0x0003, 0x2009, 0x187f, 0x210c,
- 0x9184, 0xff00, 0x908e, 0xff00, 0x0140, 0x8007, 0x9005, 0x1110,
- 0x2001, 0x0002, 0x8003, 0x7006, 0x0410, 0x7007, 0x0001, 0x00f8,
- 0x7003, 0x0005, 0x0c50, 0x7003, 0x0004, 0x0136, 0x0146, 0x0156,
- 0x20e1, 0x0001, 0x2099, 0x1882, 0x2071, 0x1925, 0x0096, 0x708c,
- 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0024, 0x20a0, 0x009e,
- 0x20a9, 0x0004, 0x4003, 0x015e, 0x014e, 0x013e, 0x0000, 0x2071,
+ 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,
+ 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800,
+ 0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004,
+ 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126,
+ 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204,
+ 0x9b06, 0x190c, 0x0dc3, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd,
+ 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836,
+ 0x2204, 0xd0cc, 0x0138, 0x2001, 0x195f, 0x200c, 0x2011, 0x685b,
+ 0x080c, 0x859e, 0x0005, 0x2011, 0x685b, 0x080c, 0x84c2, 0x2011,
+ 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x5664, 0xd0ac,
+ 0x0005, 0x080c, 0x5664, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184,
+ 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184,
+ 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6,
+ 0x080c, 0xc8ce, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001,
+ 0x107f, 0x2004, 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be,
+ 0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168, 0x2009,
+ 0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814, 0x9084,
+ 0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e, 0x0005,
+ 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817,
+ 0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006,
+ 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294,
+ 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d,
+ 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff,
+ 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff,
+ 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08,
+ 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001,
+ 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006,
+ 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084,
+ 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084,
+ 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001,
+ 0x1817, 0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f,
+ 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504,
+ 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148,
+ 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306,
+ 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff,
+ 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c,
+ 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x0006,
+ 0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e,
+ 0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001,
+ 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001, 0xa001,
+ 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911, 0x7003,
+ 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e,
+ 0x700a, 0x7046, 0x2001, 0x1923, 0x2003, 0x0000, 0x0005, 0x0016,
+ 0x00e6, 0x2071, 0x1925, 0x900e, 0x710a, 0x080c, 0x5664, 0xd0fc,
+ 0x1140, 0x080c, 0x5664, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102,
+ 0x0470, 0x2001, 0x187e, 0x200c, 0x9184, 0x0007, 0x0006, 0x2001,
+ 0x180d, 0x2004, 0xd08c, 0x000e, 0x0108, 0x9006, 0x0002, 0x6979,
+ 0x6979, 0x6979, 0x6979, 0x6979, 0x6997, 0x69ac, 0x69ba, 0x7003,
+ 0x0003, 0x2009, 0x187f, 0x210c, 0x9184, 0xff00, 0x908e, 0xff00,
+ 0x0140, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x8003, 0x7006,
+ 0x0030, 0x7007, 0x0001, 0x0018, 0x7003, 0x0005, 0x0c50, 0x2071,
0x1911, 0x704f, 0x0000, 0x2071, 0x1800, 0x70ef, 0x0001, 0x00ee,
0x001e, 0x0005, 0x7003, 0x0000, 0x2071, 0x1911, 0x2009, 0x187f,
0x210c, 0x9184, 0x7f00, 0x8007, 0x908c, 0x000f, 0x0160, 0x714e,
@@ -3140,423 +3169,408 @@
0x0128, 0x70ee, 0x0c20, 0x704f, 0x000f, 0x0c90, 0x70ef, 0x0005,
0x08f0, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6,
0x2071, 0x1911, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001,
- 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x764e, 0x6a60, 0x9200,
+ 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x76be, 0x6a60, 0x9200,
0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860,
0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844,
0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085,
0x0040, 0x701e, 0x7037, 0x001a, 0x702b, 0x0001, 0x00e6, 0x2071,
0x1911, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000,
0x00ee, 0x9006, 0x00ee, 0x0005, 0xa86c, 0xd0fc, 0x1508, 0x00e6,
- 0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6b22, 0xa97c,
- 0xa878, 0x9105, 0x1904, 0x6b22, 0x9286, 0x0003, 0x0904, 0x69bd,
- 0x9286, 0x0005, 0x0904, 0x69bd, 0xa880, 0xd0bc, 0x1904, 0x6b22,
- 0x2200, 0x0002, 0x6b22, 0x6981, 0x69bd, 0x69bd, 0x6ead, 0x69bd,
- 0x0005, 0xa86c, 0xd0fc, 0x1520, 0x00e6, 0x0026, 0x2009, 0x1925,
- 0x210c, 0x81ff, 0x0904, 0x6b22, 0xa884, 0x9084, 0x00ff, 0x9086,
- 0x0001, 0x1904, 0x6b22, 0x9186, 0x0003, 0x0904, 0x69bd, 0x9186,
- 0x0005, 0x0904, 0x69bd, 0xa880, 0xd0cc, 0x0904, 0x6b22, 0x9186,
- 0x0004, 0x0904, 0x6ead, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028,
- 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1911, 0x701c,
- 0x9005, 0x1904, 0x6cd0, 0x0e04, 0x6d1b, 0x2071, 0x0000, 0xa84c,
- 0x7082, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874, 0x708a,
- 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d,
- 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158,
- 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245,
- 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210,
- 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6,
- 0x2079, 0x0050, 0x2071, 0x1911, 0xa803, 0x0000, 0x7010, 0x9005,
- 0x1904, 0x6aa8, 0x782c, 0x908c, 0x0780, 0x190c, 0x6eed, 0x8004,
- 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x69db, 0x6aa8, 0x69ff,
- 0x6a45, 0x080c, 0x0dc4, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
+ 0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6c08, 0xa97c,
+ 0xa878, 0x9105, 0x1904, 0x6c08, 0x9286, 0x0003, 0x0904, 0x6aa1,
+ 0x9286, 0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0bc, 0x1904, 0x6c08,
+ 0x2200, 0x0002, 0x6c08, 0x6a65, 0x6aa1, 0x6aa1, 0x6c08, 0x6aa1,
+ 0x0005, 0xa86c, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x1925,
+ 0x210c, 0x81ff, 0x0904, 0x6c08, 0xa884, 0x9084, 0x00ff, 0x9086,
+ 0x0001, 0x1904, 0x6c08, 0x9186, 0x0003, 0x0904, 0x6aa1, 0x9186,
+ 0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0cc, 0x0904, 0x6c08, 0xa84f,
+ 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853,
+ 0x0016, 0x2071, 0x1911, 0x701c, 0x9005, 0x1904, 0x6dd6, 0x0e04,
+ 0x6e21, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa870,
+ 0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089,
+ 0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x2011, 0x0001,
+ 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70bc,
+ 0x9200, 0x70be, 0x080c, 0x83a7, 0x002e, 0x00ee, 0x0005, 0x0096,
+ 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e,
+ 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1911,
+ 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6b8c, 0x782c, 0x908c,
+ 0x0780, 0x190c, 0x6f4a, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003,
+ 0x0002, 0x6abf, 0x6b8c, 0x6ae3, 0x6b29, 0x080c, 0x0dc3, 0x2071,
+ 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7,
+ 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe,
+ 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
+ 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
+ 0x080c, 0x83a7, 0x0c18, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
+ 0x900d, 0x1578, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c,
+ 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022,
+ 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
+ 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780,
+ 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x2071, 0x19d7, 0x7044, 0x9005,
+ 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee,
+ 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+ 0x0808, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
+ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x1d60, 0x00ee,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x1198, 0x009e,
+ 0x2900, 0x7822, 0xa804, 0x900d, 0x1550, 0x2071, 0x19d7, 0x7044,
+ 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
+ 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
0x900d, 0x1168, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001,
- 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
+ 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
+ 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+ 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012,
+ 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
+ 0xa804, 0x900d, 0x1904, 0x6be0, 0x782c, 0x9094, 0x0780, 0x190c,
+ 0x6f4a, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001,
+ 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c,
+ 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d68, 0x782c, 0x9094,
+ 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048,
+ 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
+ 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a,
+ 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320,
+ 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005,
+ 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
+ 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
+ 0x080c, 0x83a7, 0x00ee, 0x0804, 0x6b9c, 0xa86c, 0xd0fc, 0x1904,
+ 0x6c56, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fbf,
+ 0x009e, 0x0020, 0xa86c, 0xd0fc, 0x1904, 0x6c56, 0x00e6, 0x0026,
+ 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800, 0x70e8,
+ 0x8001, 0x0558, 0x1a04, 0x6c53, 0x2071, 0x1911, 0xa803, 0x0000,
+ 0xa868, 0x9084, 0x00ff, 0x908e, 0x0016, 0x01a8, 0x7010, 0x9005,
+ 0x1904, 0x6d52, 0x782c, 0x908c, 0x0780, 0x190c, 0x6f4a, 0x8004,
+ 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c57, 0x6d52, 0x6c72,
+ 0x6ce3, 0x080c, 0x0dc3, 0x2009, 0x1925, 0x2104, 0x0002, 0x6c1e,
+ 0x6c1e, 0x6c1e, 0x6aaa, 0x6c1e, 0x6aaa, 0x70eb, 0x0fa0, 0x71e4,
+ 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70e6,
+ 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f,
+ 0x9205, 0x20d0, 0x0808, 0x70ea, 0x0804, 0x6c14, 0x0005, 0x2071,
+ 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+ 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+ 0x83a7, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
+ 0x1904, 0x6cd2, 0x7830, 0x8007, 0x908c, 0x001f, 0x70ec, 0x9102,
+ 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071,
+ 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a,
+ 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
+ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x0e04,
+ 0x6cc9, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
+ 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922, 0x200c, 0xc184,
+ 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+ 0x11a9, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe, 0x002e, 0x00ee,
+ 0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+ 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+ 0x83a7, 0x0804, 0x6c85, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071,
+ 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+ 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4,
+ 0x1d60, 0x00ee, 0x0e04, 0x6d25, 0x7838, 0x7938, 0x910e, 0x1de0,
+ 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
+ 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+ 0x190c, 0x11a9, 0x704b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,
+ 0x6f4a, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
+ 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,
+ 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+ 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
- 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x0c18, 0x2071,
- 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1578, 0x7824, 0x00e6,
- 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c,
- 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,
- 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
- 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0,
- 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004,
- 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148,
- 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
- 0x9200, 0x70be, 0x080c, 0x8245, 0x0808, 0x0096, 0x00e6, 0x7824,
+ 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+ 0x1904, 0x6dc1, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c,
+ 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,
+ 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d50, 0x782c,
+ 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x05b8, 0x00e6, 0x7824,
0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
- 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd09c, 0x1198, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
- 0x1550, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926,
- 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908,
- 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
- 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7,
- 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe,
- 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
- 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
- 0x9200, 0x70be, 0x080c, 0x8245, 0x00fe, 0x002e, 0x00ee, 0x0005,
- 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
- 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6afc,
- 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1198, 0x701c,
- 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800,
- 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed,
- 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4,
- 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,
- 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c,
- 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x2071,
- 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016,
- 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
- 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804,
- 0x6ab8, 0xa86c, 0xd0fc, 0x15e0, 0x0096, 0xa804, 0xa807, 0x0000,
- 0x904d, 0x190c, 0x0fb3, 0x009e, 0x0018, 0xa86c, 0xd0fc, 0x1580,
- 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071,
- 0x1911, 0xa803, 0x0000, 0xa868, 0x9084, 0x00ff, 0x908e, 0x0016,
- 0x01a8, 0x7010, 0x9005, 0x1904, 0x6c4c, 0x782c, 0x908c, 0x0780,
- 0x190c, 0x6eed, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002,
- 0x6b51, 0x6c4c, 0x6b6c, 0x6bdd, 0x080c, 0x0dc4, 0x2009, 0x1925,
- 0x2104, 0x0002, 0x6b31, 0x6b31, 0x6b31, 0x69c6, 0x6b31, 0x69c6,
- 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
- 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
- 0x70be, 0x080c, 0x8245, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822,
- 0xa804, 0x900d, 0x1904, 0x6bcc, 0x7830, 0x8007, 0x908c, 0x001f,
- 0x70ec, 0x9102, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824,
- 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f,
- 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee,
- 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
- 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4,
- 0x19f0, 0x0e04, 0x6bc3, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
- 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922,
- 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x190c, 0x119d, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe,
- 0x002e, 0x00ee, 0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
- 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
- 0x70be, 0x080c, 0x8245, 0x0804, 0x6b7f, 0x0096, 0x00e6, 0x7824,
- 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
- 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6c1f, 0x7838, 0x7938,
+ 0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c,
+ 0x6f4a, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6dba, 0x7838, 0x7938,
0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x782c, 0x9094,
- 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822,
- 0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044,
- 0xc085, 0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012,
- 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
- 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
+ 0x2004, 0xd084, 0x190c, 0x11a9, 0x704b, 0x0000, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,
+ 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
+ 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
+ 0x70be, 0x080c, 0x83a7, 0x00ee, 0x0804, 0x6d62, 0x2071, 0x1911,
+ 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+ 0x1128, 0x1e04, 0x6e01, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,
+ 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
+ 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x0e04,
+ 0x6deb, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18,
+ 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036,
+ 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+ 0x190c, 0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x002e, 0x00ee,
+ 0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
+ 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
+ 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,
0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
- 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012,
- 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
- 0xa804, 0x900d, 0x1904, 0x6cbb, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005,
- 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e,
- 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c,
- 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x05b8,
- 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
- 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094,
- 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6cb4,
- 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
- 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
- 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe,
- 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,
- 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
- 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804, 0x6c5c,
- 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,
- 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
- 0xa804, 0x900d, 0x1128, 0x1e04, 0x6cfb, 0x002e, 0x00ee, 0x0005,
- 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
- 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
- 0x8245, 0x0e04, 0x6ce5, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c,
- 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870,
- 0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9,
- 0x002e, 0x00ee, 0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908,
- 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
- 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee,
- 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
- 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
- 0x080c, 0x8245, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006,
- 0xa86b, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080,
- 0x001e, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882,
- 0x000e, 0xa87e, 0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002,
- 0x6d68, 0x6d69, 0x6eac, 0x6e96, 0x6d66, 0x6eac, 0x080c, 0x0dc4,
- 0x0005, 0x2001, 0x1925, 0x2004, 0x0002, 0x6d73, 0x6d73, 0x6dc8,
- 0x6dc9, 0x6e30, 0x6dc9, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8,
- 0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6d97,
- 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086,
- 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9, 0x012e,
- 0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed,
- 0xd09c, 0x2071, 0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001,
- 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c,
- 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050,
- 0x6822, 0x00de, 0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001,
- 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005,
- 0x0005, 0x00d6, 0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760,
- 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009,
- 0x1aa0, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069,
- 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6dfb, 0x2069,
- 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091,
- 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2069,
- 0x19d7, 0x6847, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000,
- 0x1e0c, 0x6f69, 0x701c, 0x904d, 0x0548, 0x2001, 0x005b, 0x2004,
- 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1500, 0x2071, 0x1911,
- 0x700f, 0x0001, 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130,
- 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6,
- 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001,
- 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005,
- 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8, 0x701c, 0x904d, 0x0568,
- 0xa84c, 0x9086, 0x0004, 0x1558, 0x0136, 0x0146, 0x0156, 0x2099,
- 0x1882, 0x20e1, 0x0001, 0x2001, 0x1948, 0x2004, 0x2040, 0xa060,
- 0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x20a9, 0x0004, 0x4003,
- 0x015e, 0x014e, 0x013e, 0xa860, 0xa076, 0xa85c, 0x9080, 0x001c,
- 0xa07a, 0xa07f, 0x0002, 0xa06f, 0x0002, 0xa073, 0x0000, 0x080c,
- 0x10eb, 0x2071, 0x1911, 0x7007, 0x0003, 0x012e, 0x0005, 0x2001,
- 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x2071,
- 0x1911, 0x1d98, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184,
+ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+ 0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006, 0xa86b, 0x0103,
+ 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001e, 0x20a0,
+ 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882, 0x000e, 0xa87e,
+ 0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002, 0x6e6e, 0x6e6f,
+ 0x6f35, 0x6e6f, 0x6e6c, 0x6f35, 0x080c, 0x0dc3, 0x0005, 0x2001,
+ 0x1925, 0x2004, 0x0002, 0x6e79, 0x6e79, 0x6ece, 0x6ecf, 0x6e79,
+ 0x6ecf, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6f55, 0x701c, 0x904d,
+ 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6e9d, 0xa94c, 0x2071,
+ 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874,
+ 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+ 0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x012e, 0x0470, 0x2001,
+ 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x2071,
+ 0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184,
0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,
0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,
0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,
- 0x701e, 0x9005, 0x1990, 0x701a, 0x012e, 0x0005, 0x2071, 0x1925,
- 0x708c, 0x2040, 0xa070, 0x2071, 0x1911, 0x908e, 0x0100, 0x1120,
- 0x7007, 0x0001, 0x04b1, 0x0005, 0x908e, 0x0000, 0x0de0, 0x908e,
- 0x0200, 0x1dc8, 0x080c, 0x6eed, 0x0005, 0xa84f, 0x0004, 0xa803,
- 0x0000, 0x2908, 0x2071, 0x1911, 0x7010, 0x8000, 0x7012, 0x7018,
- 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
- 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
- 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
- 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x002e, 0x00ee,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010,
- 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e,
- 0x080c, 0x1033, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04,
- 0x6eef, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dcd,
- 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084,
- 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
- 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x00fe, 0x009e,
- 0x0005, 0x782c, 0x9094, 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x2001,
- 0x1925, 0x2004, 0x9086, 0x0004, 0x0130, 0x7148, 0x704c, 0x8108,
- 0x714a, 0x9102, 0x0e58, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6,
- 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c,
- 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,
- 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
- 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0,
+ 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6,
+ 0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760, 0x0158, 0x9186,
+ 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1aac, 0x210c,
+ 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,
+ 0x6838, 0x9106, 0x0190, 0x0e04, 0x6f01, 0x2069, 0x0000, 0x6837,
+ 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,
+ 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2069, 0x19d7, 0x6847,
+ 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6fc0,
+ 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
+ 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968,
+ 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
+ 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,
+ 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,
+ 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,
+ 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x103f, 0x0005,
+ 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6f4c, 0x0006, 0x0016,
+ 0x2001, 0x8004, 0x0006, 0x0804, 0x0dcc, 0x0096, 0x00f6, 0x2079,
+ 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084, 0x7046, 0x7838, 0x7938,
+ 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
+ 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+ 0x11a9, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094,
+ 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x7148, 0x704c, 0x8108, 0x714a,
+ 0x9102, 0x0e88, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071,
+ 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a,
+ 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
+ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x7838,
+ 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
+ 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+ 0x190c, 0x11a9, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005,
+ 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046,
0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x190c, 0x119d, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e,
- 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084,
- 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
- 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x00fe, 0x0005, 0x782c, 0x9094,
- 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800,
- 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
- 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed,
- 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925,
- 0x6808, 0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005,
- 0x1320, 0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe,
- 0x0005, 0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc4, 0x9082, 0x001d,
- 0x001b, 0x6027, 0x1e00, 0x0005, 0x70aa, 0x7017, 0x7033, 0x705d,
- 0x7099, 0x70d9, 0x70eb, 0x7033, 0x70c1, 0x6fd2, 0x7000, 0x7083,
- 0x6fd1, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180,
- 0x6808, 0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04,
- 0x7002, 0x080c, 0x7423, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0,
- 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085,
- 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41,
- 0x080c, 0x199b, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
- 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005,
- 0x1160, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c,
- 0x74c7, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006,
- 0x2001, 0x0090, 0x080c, 0x2b65, 0x000e, 0x6124, 0xd1e4, 0x1190,
- 0x080c, 0x7158, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150,
- 0x7097, 0x0020, 0x080c, 0x7158, 0x0028, 0x7097, 0x001d, 0x0010,
- 0x7097, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2b65, 0x6124,
- 0xd1cc, 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00,
- 0x11d8, 0x080c, 0x19c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
- 0x080c, 0x7311, 0x2001, 0x0080, 0x080c, 0x2b65, 0x7097, 0x0029,
- 0x0058, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097,
- 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x19c8, 0x60e3,
- 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7311, 0x2001, 0x0080,
- 0x080c, 0x2b65, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4,
- 0x1148, 0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097,
- 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
- 0x7097, 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
- 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040,
- 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f,
- 0x0005, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x6124, 0xd1dc, 0x1138,
- 0xd1e4, 0x0138, 0x080c, 0x19c8, 0x7097, 0x001e, 0x0010, 0x7097,
- 0x001d, 0x0005, 0x080c, 0x71db, 0x6124, 0xd1dc, 0x1188, 0x080c,
- 0x7158, 0x0016, 0x080c, 0x19c8, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
- 0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x7158,
- 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x000e, 0x6124,
- 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
- 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021,
- 0x0005, 0x080c, 0x71db, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
- 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
- 0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2b65,
- 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
- 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028,
- 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6,
- 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
- 0x1800, 0x2091, 0x8000, 0x080c, 0x72e5, 0x11d8, 0x2001, 0x180c,
- 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c,
- 0x2a8d, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2b65,
- 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0428, 0x6028, 0xc0cd, 0x602a,
- 0x0408, 0x080c, 0x72ff, 0x0150, 0x080c, 0x72f6, 0x1138, 0x2001,
- 0x0001, 0x080c, 0x264c, 0x080c, 0x72bd, 0x00a0, 0x080c, 0x71d8,
- 0x0178, 0x2001, 0x0001, 0x080c, 0x264c, 0x7094, 0x9086, 0x001e,
- 0x0120, 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010,
- 0x7097, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005,
- 0x0026, 0x2011, 0x7169, 0x080c, 0x8474, 0x002e, 0x0016, 0x0026,
- 0x2009, 0x0064, 0x2011, 0x7169, 0x080c, 0x846b, 0x002e, 0x001e,
- 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9623, 0x2071, 0x1800,
- 0x080c, 0x7106, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026,
- 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800,
- 0x080c, 0x9623, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000,
- 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011,
- 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x080c, 0x8420, 0x0036,
- 0x901e, 0x080c, 0x9964, 0x003e, 0x60e3, 0x0000, 0x080c, 0xd33c,
- 0x080c, 0xd373, 0x2009, 0x0004, 0x080c, 0x2a93, 0x080c, 0x29ae,
- 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x7169,
- 0x080c, 0x8474, 0x080c, 0x72ff, 0x0118, 0x9006, 0x080c, 0x2b65,
- 0x080c, 0x0b9e, 0x2001, 0x0001, 0x080c, 0x264c, 0x012e, 0x00fe,
- 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026,
- 0x00e6, 0x2011, 0x7176, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118,
- 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005,
- 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0,
- 0x0170, 0x2001, 0x00c0, 0x080c, 0x2b65, 0x0156, 0x20a9, 0x002d,
- 0x1d04, 0x71e8, 0x2091, 0x6000, 0x1f04, 0x71e8, 0x015e, 0x0005,
- 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
- 0x1800, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000, 0x9006,
- 0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c, 0x2b65,
- 0x080c, 0x5db5, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
- 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
- 0x0140, 0x2071, 0x1800, 0x2001, 0x195a, 0x200c, 0x9186, 0x0000,
- 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,
- 0x0003, 0x0158, 0x0804, 0x72ad, 0x7097, 0x0022, 0x0040, 0x7097,
- 0x0021, 0x0028, 0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3,
- 0x0000, 0x6887, 0x0000, 0x2001, 0x0001, 0x080c, 0x2713, 0x0026,
- 0x080c, 0x9e89, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b,
- 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
- 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c,
- 0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0804, 0x72b9, 0x6800,
- 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a8d, 0x6904, 0xd1d4,
- 0x1140, 0x2001, 0x0100, 0x080c, 0x2b65, 0x1f04, 0x7252, 0x080c,
- 0x733a, 0x012e, 0x015e, 0x080c, 0x72f6, 0x01d0, 0x6044, 0x9005,
- 0x0190, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6050,
- 0x2008, 0x9085, 0x0020, 0x6052, 0x080c, 0x733a, 0x9006, 0x8001,
- 0x1df0, 0x6152, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x733a,
- 0x080c, 0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0016, 0x0026,
- 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7176,
- 0x080c, 0x8432, 0x002e, 0x001e, 0x080c, 0x823c, 0x7034, 0xc085,
- 0x7036, 0x2001, 0x195a, 0x2003, 0x0004, 0x080c, 0x6fb9, 0x080c,
- 0x72f6, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c,
- 0x75e1, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6,
- 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8253,
- 0x080c, 0x8245, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000,
- 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c,
- 0x2b65, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b,
- 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x1959,
- 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab,
- 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c,
- 0x55ab, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006,
- 0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005,
- 0x0006, 0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e,
- 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013,
- 0x0170, 0x9084, 0x0011, 0x0120, 0x080c, 0x2733, 0x900e, 0x0008,
- 0x900e, 0x2019, 0x0028, 0x080c, 0x3037, 0x9006, 0x0019, 0x001e,
- 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c,
- 0xbef1, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072,
- 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006,
- 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084,
- 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04,
- 0x734f, 0x2091, 0x6000, 0x1f04, 0x734f, 0x602f, 0x0100, 0x602f,
- 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a,
- 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e,
- 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887,
- 0x0001, 0x2001, 0x0001, 0x080c, 0x2713, 0x2001, 0x00a0, 0x0006,
- 0x080c, 0xbef8, 0x000e, 0x0130, 0x080c, 0x2b83, 0x9006, 0x080c,
- 0x2b8f, 0x0010, 0x080c, 0x2b65, 0x000e, 0x6052, 0x6050, 0x0006,
- 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2a02, 0x00fe,
- 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
- 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
- 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5,
- 0x2102, 0x0804, 0x7415, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102,
- 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090,
- 0x080c, 0x2b65, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04,
- 0x73bc, 0x2091, 0x6000, 0x1f04, 0x73bc, 0x2011, 0x0003, 0x080c,
- 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x901e,
- 0x080c, 0x9964, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x080c, 0x75dc,
- 0x080c, 0x5ef6, 0x080c, 0xbef8, 0x0110, 0x080c, 0x0d34, 0x9085,
- 0x0001, 0x04c8, 0x080c, 0x19c8, 0x60e3, 0x0000, 0x2001, 0x180d,
- 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a, 0x2004,
- 0x080c, 0x2713, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b65, 0x20a9,
- 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024,
- 0x910c, 0x0140, 0x1d04, 0x73f9, 0x2091, 0x6000, 0x1f04, 0x73f9,
- 0x0804, 0x73c5, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005,
- 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xbef8, 0x0110,
- 0x080c, 0x0d34, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
- 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
- 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086,
- 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086,
- 0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04, 0x8000, 0x206a, 0x2069,
- 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,
- 0x7488, 0x2001, 0x0088, 0x080c, 0x2b65, 0x9006, 0x60e2, 0x6886,
- 0x080c, 0x2713, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
- 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400,
- 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001,
- 0x20a9, 0x0002, 0x1d04, 0x746a, 0x2091, 0x6000, 0x1f04, 0x746a,
- 0x0804, 0x74bf, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,
- 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c, 0x0508, 0x9084,
- 0x1a00, 0x11f0, 0x1d04, 0x7476, 0x2091, 0x6000, 0x1f04, 0x7476,
- 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0,
- 0x080c, 0x98ee, 0x901e, 0x080c, 0x9964, 0x2001, 0x00a0, 0x080c,
- 0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x00f8,
- 0x080c, 0x19c8, 0x2001, 0x0080, 0x080c, 0x2b65, 0x2069, 0x0140,
- 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008,
- 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118,
- 0x2001, 0x194a, 0x2004, 0x080c, 0x2713, 0x60e2, 0x9006, 0x00ee,
- 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
- 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
- 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003,
- 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee,
- 0x901e, 0x080c, 0x9964, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c,
- 0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0804, 0x7561, 0x2001,
- 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x715e,
- 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2b65, 0x60e3, 0x0000,
- 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180,
- 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x196b,
- 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7561,
- 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c,
- 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7518, 0x0006, 0x0016,
- 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x829f, 0x00ee, 0x00de, 0x00ce,
- 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7, 0x7078, 0x00ee, 0x9005,
- 0x19f8, 0x0438, 0x0026, 0x2011, 0x7176, 0x080c, 0x835e, 0x2011,
- 0x7169, 0x080c, 0x8474, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000,
- 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,
- 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a,
- 0x2004, 0x080c, 0x2713, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4,
- 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
- 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,
- 0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xbef1, 0x1904, 0x75ca,
- 0x7130, 0xd18c, 0x1150, 0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132,
- 0x0020, 0x7030, 0xd08c, 0x0904, 0x75ca, 0x2011, 0x185f, 0x220c,
- 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xd0d7, 0x0156,
- 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186,
- 0x0080, 0x0188, 0x080c, 0x6411, 0x1170, 0x2120, 0x9006, 0x0016,
- 0x2009, 0x000e, 0x080c, 0xd156, 0x2009, 0x0001, 0x2011, 0x0100,
- 0x080c, 0x8532, 0x001e, 0x8108, 0x1f04, 0x7594, 0x00be, 0x015e,
- 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004, 0x080c,
- 0x3037, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
- 0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x75c0,
- 0x00be, 0x015e, 0x080c, 0x19c8, 0x080c, 0x9e89, 0x60e3, 0x0000,
- 0x080c, 0x5ef6, 0x080c, 0x7212, 0x00ee, 0x00ce, 0x004e, 0x003e,
- 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x195a, 0x2003, 0x0001,
- 0x0005, 0x2001, 0x195a, 0x2003, 0x0000, 0x0005, 0x2001, 0x1959,
- 0x2003, 0xaaaa, 0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005,
- 0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x101a,
- 0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x101a,
- 0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000,
+ 0xd084, 0x190c, 0x11a9, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780,
+ 0x190c, 0x6f4a, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824,
+ 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+ 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4,
+ 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925, 0x6808,
+ 0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005, 0x1320,
+ 0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe, 0x0005,
+ 0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc3, 0x9082, 0x001d, 0x001b,
+ 0x6027, 0x1e00, 0x0005, 0x7101, 0x706e, 0x708a, 0x70b4, 0x70f0,
+ 0x7130, 0x7142, 0x708a, 0x7118, 0x7029, 0x7057, 0x70da, 0x7028,
+ 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808,
+ 0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002,
+ 0x080c, 0x748e, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097,
+ 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600,
+ 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c,
+ 0x19e3, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6,
+ 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160,
+ 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c, 0x7532,
+ 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001,
+ 0x0090, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c,
+ 0x71af, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097,
+ 0x0020, 0x080c, 0x71af, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+ 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2bce, 0x6124, 0xd1cc,
+ 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8,
+ 0x080c, 0x1a10, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c,
+ 0x737d, 0x2001, 0x0080, 0x080c, 0x2bce, 0x7097, 0x0029, 0x0058,
+ 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020,
+ 0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x1a10, 0x60e3, 0x0001,
+ 0x600c, 0xc0b4, 0x600e, 0x080c, 0x737d, 0x2001, 0x0080, 0x080c,
+ 0x2bce, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4, 0x1148,
+ 0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097, 0x0028,
+ 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+ 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4,
+ 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040, 0x7097,
+ 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005,
+ 0x2001, 0x00a0, 0x080c, 0x2bce, 0x6124, 0xd1dc, 0x1138, 0xd1e4,
+ 0x0138, 0x080c, 0x1a10, 0x7097, 0x001e, 0x0010, 0x7097, 0x001d,
+ 0x0005, 0x080c, 0x7232, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x71af,
+ 0x0016, 0x080c, 0x1a10, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138,
+ 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x71af, 0x0005,
+ 0x0006, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1d4,
+ 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097,
+ 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021, 0x0005,
+ 0x080c, 0x7232, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
+ 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+ 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2bce, 0x000e,
+ 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
+ 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097,
+ 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6,
+ 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
+ 0x2091, 0x8000, 0x080c, 0x7351, 0x11d8, 0x2001, 0x180c, 0x200c,
+ 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2af6,
+ 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c,
+ 0x764c, 0x080c, 0x5fb3, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,
+ 0x080c, 0x736b, 0x0150, 0x080c, 0x7362, 0x1138, 0x2001, 0x0001,
+ 0x080c, 0x26b1, 0x080c, 0x7329, 0x00a0, 0x080c, 0x722f, 0x0178,
+ 0x2001, 0x0001, 0x080c, 0x26b1, 0x7094, 0x9086, 0x001e, 0x0120,
+ 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097,
+ 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,
+ 0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x0016, 0x0026, 0x2009,
+ 0x0064, 0x2011, 0x71c0, 0x080c, 0x85d7, 0x002e, 0x001e, 0x0005,
+ 0x00e6, 0x00f6, 0x0016, 0x080c, 0x98d1, 0x2071, 0x1800, 0x080c,
+ 0x715d, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,
+ 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800, 0x080c,
+ 0x98d1, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000, 0x6028,
+ 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002,
+ 0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x080c, 0x858c, 0x0036, 0x901e,
+ 0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9, 0x080c,
+ 0xe100, 0x2009, 0x0004, 0x080c, 0x2afc, 0x080c, 0x2a17, 0x2001,
+ 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x71c0, 0x080c,
+ 0x85e0, 0x080c, 0x736b, 0x0118, 0x9006, 0x080c, 0x2bce, 0x080c,
+ 0x0b9e, 0x2001, 0x0001, 0x080c, 0x26b1, 0x012e, 0x00fe, 0x00ee,
+ 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6,
+ 0x2011, 0x71cd, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118, 0x7018,
+ 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020,
+ 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8,
+ 0x2001, 0x00c0, 0x080c, 0x2bce, 0x0156, 0x20a9, 0x002d, 0x1d04,
+ 0x723f, 0x2091, 0x6000, 0x1f04, 0x723f, 0x015e, 0x00d6, 0x2069,
+ 0x1800, 0x6898, 0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005,
+ 0x689b, 0x0014, 0x68e4, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001,
+ 0x1da8, 0x080c, 0x85ec, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+ 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x765b, 0x2001,
+ 0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c,
+ 0x277c, 0x9006, 0x080c, 0x2bce, 0x080c, 0x5e72, 0x6027, 0xffff,
+ 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
+ 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,
+ 0x1959, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,
+ 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7319,
+ 0x7097, 0x0022, 0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023,
+ 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001,
+ 0x0001, 0x080c, 0x277c, 0x0026, 0x080c, 0xa30e, 0x002e, 0x7000,
+ 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,
+ 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,
+ 0x0150, 0x012e, 0x015e, 0x080c, 0xc8ce, 0x0118, 0x9006, 0x080c,
+ 0x2bf8, 0x0804, 0x7325, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802,
+ 0x080c, 0x2af6, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c,
+ 0x2bce, 0x1f04, 0x72be, 0x080c, 0x73a5, 0x012e, 0x015e, 0x080c,
+ 0x7362, 0x01d0, 0x6044, 0x9005, 0x0190, 0x2011, 0x0114, 0x2204,
+ 0x9085, 0x0100, 0x2012, 0x6050, 0x2008, 0x9085, 0x0020, 0x6052,
+ 0x080c, 0x73a5, 0x9006, 0x8001, 0x1df0, 0x6152, 0x0028, 0x6804,
+ 0xd0d4, 0x1110, 0x080c, 0x73a5, 0x080c, 0xc8ce, 0x0118, 0x9006,
+ 0x080c, 0x2bf8, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130,
+ 0x2009, 0x00c8, 0x2011, 0x71cd, 0x080c, 0x859e, 0x002e, 0x001e,
+ 0x080c, 0x839e, 0x7034, 0xc085, 0x7036, 0x2001, 0x1959, 0x2003,
+ 0x0004, 0x080c, 0x7010, 0x080c, 0x7362, 0x0138, 0x6804, 0xd0d4,
+ 0x1120, 0xd0dc, 0x1100, 0x080c, 0x7651, 0x00ee, 0x00de, 0x00ce,
+ 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
+ 0x2071, 0x1800, 0x080c, 0x83b5, 0x080c, 0x83a7, 0x080c, 0x765b,
+ 0x2001, 0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886,
+ 0x080c, 0x277c, 0x9006, 0x080c, 0x2bce, 0x6043, 0x0090, 0x6043,
+ 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce,
+ 0x0005, 0x0006, 0x2001, 0x1958, 0x2004, 0x9086, 0xaaaa, 0x000e,
+ 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086, 0x0000,
+ 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086,
+ 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030,
+ 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084,
+ 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001,
+ 0x180c, 0x2004, 0x908c, 0x0013, 0x0168, 0x0020, 0x080c, 0x279c,
+ 0x900e, 0x0010, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x30cd,
+ 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c,
+ 0x2e04, 0x0130, 0x080c, 0xc8c7, 0x1128, 0x9085, 0x0010, 0x0010,
+ 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec,
+ 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016,
+ 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a,
+ 0x20a9, 0x0012, 0x1d04, 0x73ba, 0x2091, 0x6000, 0x1f04, 0x73ba,
+ 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084,
+ 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000,
+ 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee,
+ 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x277c,
+ 0x2001, 0x00a0, 0x0006, 0x080c, 0xc8ce, 0x000e, 0x0130, 0x080c,
+ 0x2bec, 0x9006, 0x080c, 0x2bf8, 0x0010, 0x080c, 0x2bce, 0x000e,
+ 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100,
+ 0x080c, 0x2a6b, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016,
+ 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
+ 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001,
+ 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x7480, 0x2001, 0x180c,
+ 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027,
+ 0x0200, 0x2001, 0x0090, 0x080c, 0x2bce, 0x20a9, 0x0366, 0x6024,
+ 0xd0cc, 0x1518, 0x1d04, 0x7427, 0x2091, 0x6000, 0x1f04, 0x7427,
+ 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1,
+ 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2001, 0x00a0, 0x080c,
+ 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c, 0xc8ce, 0x0110,
+ 0x080c, 0x0d31, 0x9085, 0x0001, 0x04c8, 0x080c, 0x1a10, 0x60e3,
+ 0x0000, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118,
+ 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001, 0x0080,
+ 0x080c, 0x2bce, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00,
+ 0x080c, 0x2af6, 0x6024, 0x910c, 0x0140, 0x1d04, 0x7464, 0x2091,
+ 0x6000, 0x1f04, 0x7464, 0x0804, 0x7430, 0x6028, 0x9085, 0x1e00,
+ 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
+ 0x080c, 0xc8ce, 0x0110, 0x080c, 0x0d31, 0x9006, 0x00ee, 0x00de,
+ 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
+ 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,
+ 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004,
+ 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04,
+ 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120,
+ 0x6884, 0x9005, 0x1904, 0x74f3, 0x2001, 0x0088, 0x080c, 0x2bce,
+ 0x9006, 0x60e2, 0x6886, 0x080c, 0x277c, 0x2069, 0x0200, 0x6804,
+ 0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff,
+ 0x602a, 0x6027, 0x0400, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097,
+ 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x74d5, 0x2091,
+ 0x6000, 0x1f04, 0x74d5, 0x0804, 0x752a, 0x2069, 0x0140, 0x20a9,
+ 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2af6, 0x6024,
+ 0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x74e1, 0x2091,
+ 0x6000, 0x1f04, 0x74e1, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011,
+ 0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35,
+ 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3,
+ 0x9085, 0x0001, 0x00f8, 0x080c, 0x1a10, 0x2001, 0x0080, 0x080c,
+ 0x2bce, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118,
+ 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c,
+ 0x2001, 0x0002, 0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c,
+ 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
+ 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
+ 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0,
+ 0x01c8, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c,
+ 0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2069, 0x0140,
+ 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3,
+ 0x0804, 0x75cc, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
+ 0x2102, 0x080c, 0x71b5, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c,
+ 0x2bce, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,
+ 0x6808, 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027,
+ 0x0200, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003,
+ 0x0001, 0x0804, 0x75cc, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c,
+ 0x2af6, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04,
+ 0x7583, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8401,
+ 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7,
+ 0x7078, 0x00ee, 0x9005, 0x19f8, 0x0438, 0x0026, 0x2011, 0x71cd,
+ 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x2069,
+ 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,
+ 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002,
+ 0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001,
+ 0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
+ 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
+ 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,
+ 0xc8c7, 0x1904, 0x763a, 0x7130, 0xd184, 0x1170, 0x080c, 0x325c,
+ 0x0138, 0xc18d, 0x7132, 0x2011, 0x185f, 0x2214, 0xd2ac, 0x1120,
+ 0x7030, 0xd08c, 0x0904, 0x763a, 0x2011, 0x185f, 0x220c, 0xd1a4,
+ 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xdc90, 0x0156, 0x00b6,
+ 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080,
+ 0x0188, 0x080c, 0x64fc, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009,
+ 0x000e, 0x080c, 0xdd18, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
+ 0x8703, 0x001e, 0x8108, 0x1f04, 0x7603, 0x00be, 0x015e, 0x001e,
+ 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c,
+ 0x30cd, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
+ 0x080c, 0x64fc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x7630,
+ 0x00be, 0x015e, 0x080c, 0x1a10, 0x080c, 0xa30e, 0x60e3, 0x0000,
+ 0x080c, 0x5fb3, 0x080c, 0x727e, 0x00ee, 0x00ce, 0x004e, 0x003e,
+ 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x1959, 0x2003, 0x0001,
+ 0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005, 0x2001, 0x1958,
+ 0x2003, 0xaaaa, 0x0005, 0x2001, 0x1958, 0x2003, 0x0000, 0x0005,
+ 0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1026,
+ 0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1026,
+ 0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000,
0xa86f, 0x0001, 0xa8a3, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,
0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005,
0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006,
@@ -3565,83 +3579,83 @@
0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x001a,
0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7,
0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fb, 0x6807, 0x0001,
- 0x00de, 0x080c, 0x7bbd, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
+ 0x00de, 0x080c, 0x7c5d, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008,
- 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x7652, 0x015e,
- 0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x7671,
- 0x7672, 0x76aa, 0x7705, 0x7850, 0x766f, 0x766f, 0x787a, 0x080c,
- 0x0dc4, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,
- 0x7c49, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
+ 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x76c2, 0x015e,
+ 0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x76e1,
+ 0x76e2, 0x771a, 0x7775, 0x78c0, 0x76df, 0x76df, 0x78ea, 0x080c,
+ 0x0dc3, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,
+ 0x7ce9, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
0xa868, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0610, 0x00c0, 0x2001,
- 0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x769a,
- 0x7674, 0x769a, 0x7698, 0x769a, 0x769a, 0x769a, 0x769a, 0x769a,
- 0x080c, 0x7705, 0x782c, 0xd09c, 0x090c, 0x7bbd, 0x0005, 0x9082,
- 0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x773b, 0x0c90,
- 0x00e3, 0x08e8, 0x0005, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7747,
- 0x773b, 0x795d, 0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x7747,
- 0x799e, 0x79df, 0x7a26, 0x7a3a, 0x773b, 0x773b, 0x775d, 0x7747,
- 0x773b, 0x773b, 0x7824, 0x7ab3, 0x7ace, 0x773b, 0x775d, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x781a, 0x7ace, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7771, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x7bed, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7785, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x2079, 0x0040, 0x7004,
- 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7be6, 0xd0a4, 0x0170,
+ 0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x770a,
+ 0x76e4, 0x770a, 0x7708, 0x770a, 0x770a, 0x770a, 0x770a, 0x770a,
+ 0x080c, 0x7775, 0x782c, 0xd09c, 0x090c, 0x7c5d, 0x0005, 0x9082,
+ 0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x77ab, 0x0c90,
+ 0x00e3, 0x08e8, 0x0005, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77b7,
+ 0x77ab, 0x79c4, 0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77b7,
+ 0x7a05, 0x7a46, 0x7a8d, 0x7aa1, 0x77ab, 0x77ab, 0x77cd, 0x77b7,
+ 0x77ab, 0x77ab, 0x7894, 0x7b4c, 0x7b67, 0x77ab, 0x77cd, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x788a, 0x7b67, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77e1, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x7c8d, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77f5, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x2079, 0x0040, 0x7004,
+ 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7c86, 0xd0a4, 0x0170,
0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa868, 0x9084, 0x00ff,
- 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7bbd,
- 0x0005, 0x773b, 0x7747, 0x7949, 0x773b, 0x7747, 0x773b, 0x7747,
- 0x7747, 0x773b, 0x7747, 0x7949, 0x7747, 0x7747, 0x7747, 0x7747,
- 0x7747, 0x773b, 0x7747, 0x7949, 0x773b, 0x773b, 0x7747, 0x773b,
- 0x773b, 0x773b, 0x7747, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400,
+ 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7c5d,
+ 0x0005, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77b7, 0x77ab, 0x77b7,
+ 0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77b7, 0x77b7, 0x77b7, 0x77b7,
+ 0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77ab, 0x77b7, 0x77ab,
+ 0x77ab, 0x77ab, 0x77b7, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400,
0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009,
0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007,
0x0001, 0xa86c, 0x9084, 0x00ff, 0x9105, 0xa86e, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084,
- 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x78f9,
- 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x78f9,
+ 0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084,
+ 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7969,
+ 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7969,
0x0005, 0xa868, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120,
- 0x7007, 0x0001, 0x0804, 0x791d, 0x7007, 0x0003, 0x7012, 0x2900,
- 0x7016, 0x701a, 0x704b, 0x791d, 0x0005, 0xa868, 0x8007, 0x9084,
- 0x00ff, 0x9086, 0x0001, 0x1904, 0x7743, 0x7007, 0x0001, 0x2009,
- 0x1833, 0x210c, 0x81ff, 0x1904, 0x77f1, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x0904, 0x77dc, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998,
+ 0x7007, 0x0001, 0x0804, 0x7984, 0x7007, 0x0003, 0x7012, 0x2900,
+ 0x7016, 0x701a, 0x704b, 0x7984, 0x0005, 0xa868, 0x8007, 0x9084,
+ 0x00ff, 0x9086, 0x0001, 0x1904, 0x77b3, 0x7007, 0x0001, 0x2009,
+ 0x1833, 0x210c, 0x81ff, 0x1904, 0x7861, 0x2001, 0x180d, 0x2004,
+ 0xd08c, 0x0904, 0x784c, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998,
0x9186, 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011,
- 0x0010, 0x080c, 0x6781, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c,
- 0x67cb, 0x001e, 0x1548, 0x0400, 0x080c, 0x72e5, 0x0140, 0xa89b,
+ 0x0010, 0x080c, 0x68a8, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c,
+ 0x68f2, 0x001e, 0x1548, 0x0400, 0x080c, 0x7351, 0x0140, 0xa89b,
0x4005, 0xa89f, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026,
- 0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x01b0, 0x0016, 0x0026,
- 0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x67cb,
+ 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x01b0, 0x0016, 0x0026,
+ 0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x68f2,
0x003e, 0x002e, 0x001e, 0x1140, 0xa89b, 0x4005, 0xa89f, 0x4009,
0x2001, 0x0030, 0x900e, 0x0050, 0xa86c, 0x9084, 0x00ff, 0xa86e,
- 0xa887, 0x0000, 0x080c, 0x611b, 0x1108, 0x0005, 0x0126, 0x2091,
- 0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6b1d, 0x012e,
- 0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7795, 0x9186, 0x0064,
- 0x0904, 0x7795, 0x9186, 0x007c, 0x0904, 0x7795, 0x9186, 0x0028,
- 0x0904, 0x7795, 0x9186, 0x0038, 0x0904, 0x7795, 0x9186, 0x0078,
- 0x0904, 0x7795, 0x9186, 0x005f, 0x0904, 0x7795, 0x9186, 0x0056,
- 0x0904, 0x7795, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030,
+ 0xa887, 0x0000, 0x080c, 0x61eb, 0x1108, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e,
+ 0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7805, 0x9186, 0x0064,
+ 0x0904, 0x7805, 0x9186, 0x007c, 0x0904, 0x7805, 0x9186, 0x0028,
+ 0x0904, 0x7805, 0x9186, 0x0038, 0x0904, 0x7805, 0x9186, 0x0078,
+ 0x0904, 0x7805, 0x9186, 0x005f, 0x0904, 0x7805, 0x9186, 0x0056,
+ 0x0904, 0x7805, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030,
0x900e, 0x0860, 0xa880, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120,
- 0x7007, 0x0001, 0x0804, 0x7ae5, 0x2900, 0x7016, 0x701a, 0x20a9,
+ 0x7007, 0x0001, 0x0804, 0x7b7e, 0x2900, 0x7016, 0x701a, 0x20a9,
0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0031, 0x2098, 0x7050,
0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x4003,
- 0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x774b, 0xaab8, 0x928a,
- 0x0002, 0x1a04, 0x774b, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105,
- 0x0118, 0x2001, 0x78b7, 0x0018, 0x9280, 0x78ad, 0x2005, 0x7056,
- 0x7010, 0x9015, 0x0904, 0x7898, 0x080c, 0x101a, 0x1118, 0x7007,
+ 0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x77bb, 0xaab8, 0x928a,
+ 0x0002, 0x1a04, 0x77bb, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105,
+ 0x0118, 0x2001, 0x7927, 0x0018, 0x9280, 0x791d, 0x2005, 0x7056,
+ 0x7010, 0x9015, 0x0904, 0x7908, 0x080c, 0x1026, 0x1118, 0x7007,
0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa86a,
0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa07a, 0xa860, 0xa076,
0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003,
0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17e, 0x810b, 0xa182,
- 0x080c, 0x10eb, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
- 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1033,
- 0x7014, 0x2048, 0x0804, 0x774b, 0x7020, 0x2048, 0x7018, 0xa802,
- 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7850,
+ 0x080c, 0x10f7, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
+ 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x103f,
+ 0x7014, 0x2048, 0x0804, 0x77bb, 0x7020, 0x2048, 0x7018, 0xa802,
+ 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x78c0,
0x7014, 0x2048, 0x7007, 0x0001, 0xa8b8, 0x9005, 0x1128, 0xa8bc,
0xa9c0, 0x9105, 0x0108, 0x00b9, 0xa868, 0x9084, 0x00ff, 0x9086,
- 0x001e, 0x0904, 0x7ae5, 0x0804, 0x78f9, 0x78af, 0x78b3, 0x0002,
+ 0x001e, 0x0904, 0x7b7e, 0x0804, 0x7969, 0x791f, 0x7923, 0x0002,
0x001e, 0x0007, 0x0004, 0x000a, 0x001c, 0x0005, 0x0006, 0x000a,
0x001e, 0x0005, 0x0004, 0x0076, 0x0066, 0xafbc, 0xaec0, 0xa804,
0x2050, 0xb0c4, 0xb0e6, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0d6, 0xb0b8,
@@ -3651,1370 +3665,1504 @@
0xb09e, 0xb090, 0xb09a, 0xb08c, 0xb08e, 0xb088, 0xb08a, 0xb696,
0xb792, 0xb084, 0xb086, 0xb080, 0xb082, 0xb07c, 0xb076, 0xb078,
0xb072, 0xb67e, 0xb77a, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e,
- 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x11c0, 0xa887, 0x0000,
- 0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0bd, 0xa882, 0x080c,
- 0x5f70, 0x1108, 0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000,
- 0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x012e, 0x0ca0, 0x080c, 0xbef1,
- 0x1d28, 0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c,
- 0x9005, 0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c,
- 0x607d, 0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x5ff5, 0x1108,
- 0x0005, 0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6b1d,
- 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000,
- 0x0c80, 0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce,
- 0x0005, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010,
- 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048,
- 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001,
- 0xa978, 0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9,
- 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096,
- 0x0002, 0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x6411, 0x11b8,
- 0x0066, 0xae84, 0x080c, 0x6511, 0x006e, 0x0088, 0x0046, 0x2011,
- 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6411,
- 0x1110, 0x080c, 0x6630, 0x8108, 0x1f04, 0x7986, 0x00ce, 0xa880,
- 0xd084, 0x1120, 0x080c, 0x1033, 0x00be, 0x0005, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091,
- 0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x0580, 0x2061, 0x1a4f,
- 0x6100, 0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000,
- 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b,
- 0x0000, 0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001,
- 0x001e, 0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006,
- 0xa88c, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000,
- 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7ba7, 0x012e, 0x0804,
- 0x7ba1, 0x012e, 0x0804, 0x7b9b, 0x012e, 0x0804, 0x7b9e, 0x0126,
- 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x05e0, 0x2061,
- 0x1a4f, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530,
- 0xac7c, 0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001,
- 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100,
- 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c,
- 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030,
- 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005,
- 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7ba7,
- 0x012e, 0x0804, 0x7ba4, 0x012e, 0x0804, 0x7ba1, 0x0126, 0x2091,
- 0x8000, 0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120,
- 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7bb5, 0x012e,
- 0x0804, 0x7ba4, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007,
- 0x0001, 0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000,
- 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8,
- 0xa890, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118,
- 0x080c, 0x9f42, 0x0068, 0x6017, 0xf400, 0x602b, 0x0000, 0xa980,
- 0xd1a4, 0x0110, 0xa984, 0x612a, 0x2009, 0x0041, 0x080c, 0x9f88,
- 0xa98c, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e,
- 0x2011, 0xfdff, 0x080c, 0x8532, 0x002e, 0xa880, 0xd0c4, 0x0148,
- 0x2061, 0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208,
- 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7ba7, 0x00ce, 0x012e,
- 0x00be, 0x0804, 0x7ba1, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186,
- 0x002d, 0x0d18, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c,
- 0xc194, 0x2102, 0x08d0, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029,
- 0x1d28, 0xa978, 0x080c, 0x6411, 0x1980, 0xb800, 0xc0e4, 0xb802,
- 0x0860, 0xa890, 0x9065, 0x09d0, 0x6007, 0x0024, 0x2001, 0x1963,
- 0x2004, 0x601a, 0x0810, 0x2061, 0x1a4f, 0x6000, 0xd084, 0x0190,
- 0xd08c, 0x1904, 0x7bb5, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
- 0x0220, 0x6206, 0x012e, 0x0804, 0x7bb5, 0x012e, 0xa887, 0x0016,
- 0x0804, 0x7bae, 0xa887, 0x0007, 0x0804, 0x7bae, 0xa868, 0x8007,
- 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,
- 0x0005, 0x080c, 0x7743, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,
- 0x7016, 0x701a, 0x704b, 0x7ae5, 0x0005, 0x00b6, 0x00e6, 0x0126,
- 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904,
- 0x7b63, 0x6130, 0xd194, 0x1904, 0x7b8d, 0xa87c, 0x2070, 0x9e82,
- 0x1cc8, 0x0a04, 0x7b57, 0x6064, 0x9e02, 0x1a04, 0x7b57, 0x7120,
- 0x9186, 0x0006, 0x1904, 0x7b49, 0x7010, 0x905d, 0x0904, 0x7b63,
- 0xb800, 0xd0e4, 0x1904, 0x7b87, 0x2061, 0x1a4f, 0x6100, 0x9184,
- 0x0301, 0x9086, 0x0001, 0x1580, 0xa887, 0x0000, 0xa803, 0x0000,
- 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904,
- 0x7b90, 0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882,
- 0x2e60, 0x080c, 0x848e, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048,
- 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904,
- 0x7b90, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa887,
- 0x0006, 0x00be, 0x0804, 0x7bae, 0xd184, 0x0db8, 0xd1c4, 0x1190,
- 0x00a0, 0xa978, 0x080c, 0x6411, 0x15d0, 0xb800, 0xd0e4, 0x15b8,
- 0x7120, 0x9186, 0x0007, 0x1118, 0xa887, 0x0002, 0x0490, 0xa887,
- 0x0008, 0x0478, 0xa887, 0x000e, 0x0460, 0xa887, 0x0017, 0x0448,
- 0xa887, 0x0035, 0x0430, 0x080c, 0x55ab, 0xd0fc, 0x01e8, 0xa87c,
- 0x2070, 0x9e82, 0x1cc8, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120,
- 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc,
- 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7af1,
- 0x7003, 0x0002, 0x0804, 0x7af1, 0xa887, 0x0028, 0x0010, 0xa887,
- 0x0029, 0x012e, 0x00ee, 0x00be, 0x0408, 0xa887, 0x002a, 0x0cc8,
- 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xccc8, 0x012e,
+ 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c, 0x602e,
+ 0x1108, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xc4ba, 0x080c, 0x6c02, 0x012e, 0x0ca0, 0x080c, 0xc8c7, 0x1d70,
+ 0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c, 0x9005,
+ 0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c, 0x614d,
+ 0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x60c5, 0x1108, 0x0005,
+ 0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e,
+ 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80,
+ 0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce, 0x0005,
+ 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001,
+ 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007,
+ 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa978,
+ 0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001,
+ 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002,
+ 0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x64fc, 0x11b8, 0x0066,
+ 0xae84, 0x080c, 0x6619, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c,
+ 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x64fc, 0x1110,
+ 0x080c, 0x6738, 0x8108, 0x1f04, 0x79ed, 0x00ce, 0xa880, 0xd084,
+ 0x1120, 0x080c, 0x103f, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0x6c02, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+ 0x7007, 0x0001, 0x080c, 0x6869, 0x0580, 0x2061, 0x1a4f, 0x6100,
+ 0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084,
+ 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000,
+ 0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001, 0x001e,
+ 0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa88c,
+ 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000, 0x1108,
+ 0xc28d, 0x6202, 0x012e, 0x0804, 0x7c47, 0x012e, 0x0804, 0x7c41,
+ 0x012e, 0x0804, 0x7c3b, 0x012e, 0x0804, 0x7c3e, 0x0126, 0x2091,
+ 0x8000, 0x7007, 0x0001, 0x080c, 0x6869, 0x05e0, 0x2061, 0x1a4f,
+ 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac7c,
+ 0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001, 0x1120,
+ 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212,
+ 0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c, 0x00ff,
+ 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082,
+ 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005, 0x0110,
+ 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7c47, 0x012e,
+ 0x0804, 0x7c44, 0x012e, 0x0804, 0x7c41, 0x0126, 0x2091, 0x8000,
+ 0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120, 0x6308,
+ 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7c55, 0x012e, 0x0804,
+ 0x7c44, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001,
+ 0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x9084,
+ 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8, 0xa890,
+ 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c,
+ 0xa3cf, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa980, 0xd1a4,
+ 0x0110, 0xa984, 0x615a, 0x2009, 0x0041, 0x080c, 0xa419, 0xa98c,
+ 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011,
+ 0xfdff, 0x080c, 0x8703, 0x002e, 0xa880, 0xd0c4, 0x0148, 0x2061,
+ 0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a,
+ 0x00ce, 0x012e, 0x00be, 0x0804, 0x7c47, 0x00ce, 0x012e, 0x00be,
+ 0x0804, 0x7c41, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d,
+ 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001,
+ 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158,
+ 0x9186, 0x0029, 0x1d10, 0xa978, 0x080c, 0x64fc, 0x1968, 0xb800,
+ 0xc0e4, 0xb802, 0x0848, 0xa890, 0x9065, 0x09b8, 0x6007, 0x0024,
+ 0x2001, 0x1962, 0x2004, 0x601a, 0x0804, 0x7adc, 0xa890, 0x9065,
+ 0x0960, 0x00e6, 0xa894, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005,
+ 0x0150, 0x080c, 0xa3cf, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xa3cf,
+ 0x00ee, 0x0804, 0x7adc, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60,
+ 0x6007, 0x003a, 0xa8a4, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a8,
+ 0x602e, 0xa8ac, 0x6016, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x00ee, 0x0804, 0x7adc, 0x2061, 0x1a4f, 0x6000, 0xd084,
+ 0x0190, 0xd08c, 0x1904, 0x7c55, 0x0126, 0x2091, 0x8000, 0x6204,
+ 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x7c55, 0x012e, 0xa887,
+ 0x0016, 0x0804, 0x7c4e, 0xa887, 0x0007, 0x0804, 0x7c4e, 0xa868,
+ 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001,
+ 0x0069, 0x0005, 0x080c, 0x77b3, 0x0040, 0x7007, 0x0003, 0x7012,
+ 0x2900, 0x7016, 0x701a, 0x704b, 0x7b7e, 0x0005, 0x00b6, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff,
+ 0x1904, 0x7c00, 0x6130, 0xd194, 0x1904, 0x7c2a, 0xa87c, 0x2070,
+ 0x9e82, 0x1cd0, 0x0a04, 0x7bf4, 0x6064, 0x9e02, 0x1a04, 0x7bf4,
+ 0x7120, 0x9186, 0x0006, 0x1904, 0x7be6, 0x7010, 0x905d, 0x0904,
+ 0x7c00, 0xb800, 0xd0e4, 0x1904, 0x7c24, 0x2061, 0x1a4f, 0x6100,
+ 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904,
+ 0x7c2d, 0xa887, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005,
+ 0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x080c, 0x5664,
+ 0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882, 0x2e60, 0x080c, 0x8623,
+ 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0,
+ 0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x012e, 0x00ee,
+ 0x00be, 0x0005, 0x012e, 0x00ee, 0xa887, 0x0006, 0x00be, 0x0804,
+ 0x7c4e, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa978, 0x080c,
+ 0x64fc, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007,
+ 0x1118, 0xa887, 0x0002, 0x0490, 0xa887, 0x0008, 0x0478, 0xa887,
+ 0x000e, 0x0460, 0xa887, 0x0017, 0x0448, 0xa887, 0x0035, 0x0430,
+ 0x080c, 0x5668, 0xd0fc, 0x01e8, 0xa87c, 0x2070, 0x9e82, 0x1cd0,
+ 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188,
+ 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001,
+ 0x7000, 0x9086, 0x0007, 0x1904, 0x7b8a, 0x7003, 0x0002, 0x0804,
+ 0x7b8a, 0xa887, 0x0028, 0x0010, 0xa887, 0x0029, 0x012e, 0x00ee,
+ 0x00be, 0x0420, 0xa887, 0x002a, 0x0cc8, 0xa887, 0x0045, 0x0cb0,
+ 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xd86f, 0x012e,
0x00ee, 0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004,
0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009,
0x0001, 0xa888, 0x9084, 0xff00, 0x9105, 0xa88a, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0x080c, 0x1033, 0x0005,
- 0x00d6, 0x080c, 0x8485, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126,
+ 0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0x080c, 0x103f, 0x0005,
+ 0x00d6, 0x080c, 0x861a, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126,
0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c,
- 0x0780, 0x190c, 0x7c49, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc,
+ 0x0780, 0x190c, 0x7ce9, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc,
0x90ea, 0x0040, 0x0278, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800,
0x702e, 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022,
0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084,
- 0x0780, 0x190c, 0x7c49, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036,
+ 0x0780, 0x190c, 0x7ce9, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036,
0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa78, 0x9282, 0x0004,
- 0x1a04, 0x7c3a, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804,
+ 0x1a04, 0x7cda, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804,
0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006,
- 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9ec2, 0x1118, 0x080c, 0x9f5b,
- 0x05a8, 0x6212, 0xa878, 0x0002, 0x7c18, 0x7c1d, 0x7c20, 0x7c26,
- 0x2019, 0x0002, 0x080c, 0xd0d7, 0x0060, 0x080c, 0xd077, 0x0048,
- 0x2019, 0x0002, 0xa984, 0x080c, 0xd08f, 0x0018, 0xa984, 0x080c,
- 0xd077, 0x080c, 0x9f18, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x6b1d, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce,
+ 0x1108, 0x04b0, 0x2b10, 0x080c, 0xa347, 0x1118, 0x080c, 0xa3ec,
+ 0x05a8, 0x6212, 0xa878, 0x0002, 0x7cb8, 0x7cbd, 0x7cc0, 0x7cc6,
+ 0x2019, 0x0002, 0x080c, 0xdc90, 0x0060, 0x080c, 0xdc27, 0x0048,
+ 0x2019, 0x0002, 0xa984, 0x080c, 0xdc42, 0x0018, 0xa984, 0x080c,
+ 0xdc27, 0x080c, 0xa39d, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0x6c02, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce,
0x00de, 0x0005, 0xa88b, 0x0006, 0x0c80, 0xa88b, 0x0002, 0x0c68,
0xa88b, 0x0005, 0x0c50, 0xa88b, 0x0004, 0x0c38, 0xa88b, 0x0007,
- 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7c4b, 0x0006, 0x0016, 0x2001,
- 0x8003, 0x0006, 0x0804, 0x0dcd, 0x2001, 0x1833, 0x2004, 0x9005,
+ 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7ceb, 0x0006, 0x0016, 0x2001,
+ 0x8003, 0x0006, 0x0804, 0x0dcc, 0x2001, 0x1833, 0x2004, 0x9005,
0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c,
0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120,
- 0x080c, 0x14d2, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
- 0x781f, 0x0300, 0x00fe, 0x0005, 0x68bc, 0x90aa, 0x0005, 0x0a04,
- 0x823c, 0x7d44, 0x7c40, 0x9484, 0x0fff, 0x688e, 0x9584, 0x00f6,
- 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584,
- 0x0700, 0x8007, 0x0804, 0x7cd0, 0x7000, 0x9084, 0xff00, 0x9086,
- 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084,
- 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd314, 0x080c, 0x8171,
- 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x81cf,
- 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7d22, 0x080c,
- 0x2217, 0x005e, 0x004e, 0x0020, 0x080c, 0xd314, 0x7817, 0x0140,
- 0x080c, 0x72e5, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140,
- 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000,
- 0x04d1, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005,
- 0x0002, 0x7ce2, 0x7f8f, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9,
- 0x7cd9, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c,
- 0x8c37, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f,
- 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c,
- 0x5607, 0x0040, 0x080c, 0x7d42, 0x0028, 0x9286, 0x8000, 0x1110,
- 0x080c, 0x80bc, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005,
- 0x090c, 0x8c37, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178,
- 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036,
- 0x2011, 0x8048, 0x2518, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005,
- 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe,
- 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,
- 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c,
- 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026,
- 0x2011, 0x8048, 0x080c, 0x4abd, 0x002e, 0x00fe, 0x005e, 0x004e,
- 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
- 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7ef7, 0x688c,
- 0x9082, 0x0004, 0x0a04, 0x7ef7, 0x9186, 0x0023, 0x15e8, 0x080c,
- 0x815f, 0x0904, 0x7ef7, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186,
- 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904,
- 0x7ef7, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,
- 0x0015, 0x080c, 0x9f88, 0x0804, 0x7ef7, 0x908e, 0x0214, 0x0118,
- 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9f88, 0x0804,
- 0x7ef7, 0x908e, 0x0100, 0x1904, 0x7ef7, 0x7034, 0x9005, 0x1904,
- 0x7ef7, 0x688c, 0x9082, 0x0008, 0x0a04, 0x7ef7, 0x2009, 0x0016,
- 0x080c, 0x9f88, 0x0804, 0x7ef7, 0x9186, 0x0022, 0x1904, 0x7ef7,
- 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5,
- 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6,
- 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016,
- 0x2008, 0x080c, 0x26e8, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
- 0x080c, 0x269f, 0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
- 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7ef7,
- 0x2009, 0x0017, 0x0804, 0x7ea7, 0x908e, 0x0400, 0x1190, 0x7034,
- 0x9005, 0x1904, 0x7ef7, 0x080c, 0x72e5, 0x0120, 0x2009, 0x001d,
- 0x0804, 0x7ea7, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804,
- 0x7ea7, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7,
- 0x2009, 0x0018, 0x0804, 0x7ea7, 0x908e, 0x2010, 0x1120, 0x2009,
- 0x0019, 0x0804, 0x7ea7, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a,
- 0x0804, 0x7ea7, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904,
- 0x7ef7, 0x2009, 0x001b, 0x0804, 0x7ea7, 0x908e, 0x5000, 0x1140,
- 0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009, 0x001c, 0x0804, 0x7ea7,
- 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009,
- 0x0024, 0x0804, 0x7ea7, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170,
- 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x7ea7,
- 0x080c, 0xc52f, 0x1904, 0x7ef7, 0x0804, 0x7ea5, 0x908c, 0xff00,
- 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7ea7, 0x908e,
- 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7ea7, 0x908e, 0x6104,
- 0x1588, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9092,
- 0x0401, 0x1a04, 0x7ef7, 0x9094, 0x0003, 0x1904, 0x7ef7, 0x6a8c,
- 0x9212, 0x0a04, 0x7ef7, 0x9082, 0x0004, 0x0904, 0x7ef7, 0x8004,
- 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x2124, 0x080c,
- 0x4abd, 0x8108, 0x0f04, 0x7e6d, 0x9186, 0x0280, 0x1d98, 0x2504,
- 0x8000, 0x202a, 0x2009, 0x0260, 0x0c68, 0x202b, 0x0000, 0x2009,
- 0x0023, 0x04a8, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f, 0x0478,
- 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0448, 0x908e, 0x1000,
- 0x1118, 0x2009, 0x004e, 0x0418, 0x908e, 0x6300, 0x1118, 0x2009,
- 0x004a, 0x00e8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009,
- 0x004f, 0x00a8, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009,
- 0x0050, 0x0068, 0x908e, 0x7d00, 0x1118, 0x2009, 0x0053, 0x0038,
- 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016,
- 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1904,
- 0x7efa, 0x080c, 0x63c1, 0x1904, 0x7efa, 0xbe12, 0xbd16, 0x001e,
- 0x0016, 0x080c, 0x72e5, 0x01c0, 0x68d8, 0xd08c, 0x1148, 0x7000,
- 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040,
- 0x6878, 0x9606, 0x1148, 0x687c, 0x9506, 0x9084, 0xff00, 0x1120,
- 0x9584, 0x00ff, 0xb8ae, 0x0080, 0xb8ac, 0x9005, 0x1168, 0x9186,
- 0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084,
- 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9ec2, 0x01c8, 0x2b08,
- 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c,
- 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9f88, 0x00ce,
- 0x00be, 0x0005, 0x001e, 0x0cd8, 0x9085, 0x0001, 0x001e, 0x0cb8,
- 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c,
- 0x4abd, 0x080c, 0x9f5b, 0x0d70, 0x2b08, 0x6112, 0x6023, 0x0004,
- 0x7120, 0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186,
- 0x0030, 0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007,
- 0x0051, 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c,
- 0x8718, 0x0880, 0x00b6, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696,
- 0x00ff, 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120,
- 0x2009, 0x007f, 0x0804, 0x7f87, 0x9596, 0xfffe, 0x1120, 0x2009,
- 0x007e, 0x0804, 0x7f87, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080,
- 0x04f0, 0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130,
- 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081,
- 0x20a9, 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140,
- 0x82ff, 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0,
- 0xbf10, 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408,
- 0x00b0, 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f,
- 0x0118, 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7f5c,
- 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006,
- 0x00de, 0x00ee, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x2001,
+ 0x080c, 0x14e7, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
+ 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x7d6e,
+ 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x839e, 0x7d44, 0x7c40, 0x9484,
+ 0x0fff, 0x688e, 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140,
+ 0x908a, 0x2000, 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x7d75,
+ 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484,
+ 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0,
+ 0x080c, 0xe0a1, 0x080c, 0x82d3, 0x7817, 0x0140, 0x00a8, 0x9584,
+ 0x0076, 0x1118, 0x080c, 0x8331, 0x19c0, 0xd5a4, 0x0148, 0x0046,
+ 0x0056, 0x080c, 0x7dcd, 0x080c, 0x225f, 0x005e, 0x004e, 0x0020,
+ 0x080c, 0xe0a1, 0x7817, 0x0140, 0x080c, 0x7351, 0x0168, 0x2001,
+ 0x0111, 0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, 0x2001, 0x0110,
+ 0x2003, 0x0008, 0x2003, 0x0000, 0x080c, 0x7dae, 0x2001, 0x19cd,
+ 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x0002, 0x7d87, 0x80b7,
+ 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7817, 0x0140,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x7000,
+ 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9286, 0x2000, 0x1150,
+ 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x56c4, 0x0070, 0x080c,
+ 0x7ded, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7fde, 0x0028,
+ 0x9286, 0x8000, 0x1110, 0x080c, 0x81ec, 0x7817, 0x0140, 0x2001,
+ 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x2001, 0x1810,
+ 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
+ 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x4b6d,
+ 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079,
+ 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056,
+ 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001,
+ 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086,
+ 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b6d, 0x002e,
+ 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010,
+ 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023,
+ 0x1904, 0x7fab, 0x688c, 0x9082, 0x0004, 0x0a04, 0x7fab, 0x9186,
+ 0x0023, 0x15e8, 0x080c, 0x8292, 0x0904, 0x7fab, 0x6120, 0x9186,
+ 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120,
+ 0x9186, 0x000a, 0x1904, 0x7fab, 0x7124, 0x610a, 0x7030, 0x908e,
+ 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0xa419, 0x0804, 0x7fab,
+ 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015,
+ 0x080c, 0xa419, 0x0804, 0x7fab, 0x908e, 0x0100, 0x1904, 0x7fab,
+ 0x7034, 0x9005, 0x1904, 0x7fab, 0x688c, 0x9082, 0x0008, 0x0a04,
+ 0x7fab, 0x2009, 0x0016, 0x080c, 0xa419, 0x0804, 0x7fab, 0x9186,
+ 0x0022, 0x1904, 0x7fab, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,
+ 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a,
+ 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,
+ 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2751, 0x7932, 0x7936,
+ 0x001e, 0x000e, 0x00fe, 0x080c, 0x2708, 0x695a, 0x703c, 0x00e6,
+ 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034,
+ 0x9005, 0x1904, 0x7fab, 0x2009, 0x0017, 0x0804, 0x7f5b, 0x908e,
+ 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7fab, 0x080c, 0x7351,
+ 0x0120, 0x2009, 0x001d, 0x0804, 0x7f5b, 0x68d8, 0xc0a5, 0x68da,
+ 0x2009, 0x0030, 0x0804, 0x7f5b, 0x908e, 0x0500, 0x1140, 0x7034,
+ 0x9005, 0x1904, 0x7fab, 0x2009, 0x0018, 0x0804, 0x7f5b, 0x908e,
+ 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7f5b, 0x908e, 0x2110,
+ 0x1120, 0x2009, 0x001a, 0x0804, 0x7f5b, 0x908e, 0x5200, 0x1140,
+ 0x7034, 0x9005, 0x1904, 0x7fab, 0x2009, 0x001b, 0x0804, 0x7f5b,
+ 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7fab, 0x2009,
+ 0x001c, 0x0804, 0x7f5b, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,
+ 0x0804, 0x7f5b, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,
+ 0x7fab, 0x2009, 0x0024, 0x0804, 0x7f5b, 0x908c, 0xff00, 0x918e,
+ 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c,
+ 0x0904, 0x7f5b, 0x080c, 0xd02f, 0x1904, 0x7fab, 0x0804, 0x7f59,
+ 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804,
+ 0x7f5b, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7f5b,
+ 0x908e, 0x6104, 0x1598, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208,
+ 0x2204, 0x9092, 0x0401, 0x1a04, 0x7fab, 0x9094, 0x0003, 0x1904,
+ 0x7fab, 0x6a8c, 0x9212, 0x0a04, 0x7fab, 0x9082, 0x0004, 0x0904,
+ 0x7fab, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108,
+ 0x0046, 0x2124, 0x080c, 0x4b6d, 0x004e, 0x8108, 0x0f04, 0x7f21,
+ 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260,
+ 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x04a8, 0x908e, 0x6000,
+ 0x1118, 0x2009, 0x003f, 0x0478, 0x908e, 0x7800, 0x1118, 0x2009,
+ 0x0045, 0x0448, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x0418,
+ 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00e8, 0x908c, 0xff00,
+ 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x00a8, 0x908c, 0xff00,
+ 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0068, 0x908e, 0x7d00,
+ 0x1118, 0x2009, 0x0053, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4,
+ 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211,
+ 0x220c, 0x080c, 0x2708, 0x1904, 0x7fae, 0x080c, 0x6497, 0x1904,
+ 0x7fae, 0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x7351, 0x01c0,
+ 0x68d8, 0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004,
+ 0x9084, 0xff00, 0x1168, 0x0040, 0x6878, 0x9606, 0x1148, 0x687c,
+ 0x9506, 0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb8b2, 0x0080,
+ 0xb8b0, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606,
+ 0x1138, 0x687c, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098,
+ 0x080c, 0xa347, 0x01c8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120,
+ 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016,
+ 0x001e, 0x080c, 0xa419, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8,
+ 0x9085, 0x0001, 0x001e, 0x0cb8, 0x2001, 0x180e, 0x2004, 0xd0ec,
+ 0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d, 0x080c, 0xa3ec, 0x0d70,
+ 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016,
+ 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009,
+ 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f,
+ 0x0009, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0880, 0x080c, 0x83bd,
+ 0x1158, 0x080c, 0x3226, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007,
+ 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046,
+ 0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x1538, 0x080c,
+ 0x8292, 0x0904, 0x804c, 0x7124, 0x610a, 0x688c, 0x9082, 0x0004,
+ 0x0a04, 0x804c, 0x7030, 0x908e, 0x0200, 0x1148, 0x7034, 0x9005,
+ 0x1904, 0x804c, 0x2009, 0x0015, 0x080c, 0xa419, 0x04e8, 0x908e,
+ 0x0100, 0x15d0, 0x7034, 0x9005, 0x15b8, 0x688c, 0x9082, 0x0008,
+ 0x0698, 0x2009, 0x0016, 0x080c, 0xa419, 0x0470, 0x9186, 0x0032,
+ 0x1558, 0x7030, 0x908e, 0x1400, 0x1538, 0x688c, 0x9082, 0x0010,
+ 0x0618, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211,
+ 0x220c, 0x080c, 0x2708, 0x11b8, 0x080c, 0x6497, 0x11a0, 0xbe12,
+ 0xbd16, 0x080c, 0xa347, 0x0178, 0x2b08, 0x6112, 0x080c, 0xc640,
+ 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xa419, 0x080c,
+ 0x8e38, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005,
+ 0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff,
+ 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009,
+ 0x007f, 0x0804, 0x80ae, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e,
+ 0x0804, 0x80ae, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0,
+ 0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026,
+ 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9,
+ 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff,
+ 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10,
+ 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0,
+ 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118,
+ 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8083, 0x82ff,
+ 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de,
+ 0x00ee, 0x004e, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc0, 0x2001,
0x1836, 0x200c, 0x9184, 0x0080, 0x0110, 0xd18c, 0x0138, 0x7000,
0x908c, 0xff00, 0x810f, 0x9184, 0x000f, 0x004a, 0x7817, 0x0140,
- 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005, 0x7fb7,
- 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fc0, 0x7ff3, 0x8081, 0x7fb7,
- 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7817,
- 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005,
- 0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0003,
- 0x11e8, 0x9c8a, 0x1cc8, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x80df,
+ 0x80df, 0x80df, 0x82a4, 0x80df, 0x80e8, 0x811b, 0x81af, 0x80df,
+ 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x7817,
+ 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005,
+ 0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0007,
+ 0x11e8, 0x9c8a, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008,
0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c,
0xb914, 0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280,
- 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9f88, 0x7817, 0x0140,
- 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005,
- 0x080c, 0x826a, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904,
- 0x8054, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
- 0xff00, 0x15b8, 0x81ff, 0x15a8, 0x9080, 0x31cc, 0x200d, 0x918c,
- 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8054, 0x9484,
- 0x0fff, 0x9082, 0x0020, 0x0a04, 0x805f, 0x080c, 0x63c1, 0x15e0,
- 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04, 0x9294, 0xff00,
- 0x9286, 0x0600, 0x1180, 0x080c, 0x9ec2, 0x05e0, 0x2b08, 0x6112,
- 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x2009, 0x0044,
- 0x080c, 0xc7a6, 0x0408, 0x080c, 0x6746, 0x1138, 0xb807, 0x0606,
- 0x0c50, 0x190c, 0x7f2a, 0x11c0, 0x08c0, 0x080c, 0x9ec2, 0x2b08,
- 0x0198, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400,
- 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x7817, 0x0140, 0x2001, 0x19cd,
- 0x2004, 0x9005, 0x090c, 0x8c37, 0x00ce, 0x00be, 0x0005, 0x080c,
- 0x826a, 0x0c90, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011,
- 0x8049, 0x080c, 0x4abd, 0x080c, 0x9f5b, 0x0d30, 0x2b08, 0x6112,
- 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x6017, 0xf300,
- 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c, 0x8c37,
- 0x0898, 0x00b6, 0x7110, 0xd1bc, 0x0500, 0x7020, 0x2060, 0x9c84,
- 0x0003, 0x11d8, 0x9c82, 0x1cc8, 0x02c0, 0x6864, 0x9c02, 0x12a8,
- 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1168,
- 0x700c, 0xb914, 0x9106, 0x1148, 0x9484, 0x0fff, 0x9082, 0x000c,
- 0x0270, 0x2009, 0x0045, 0x080c, 0x9f88, 0x7817, 0x0140, 0x2001,
- 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005, 0x080c,
- 0x826a, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005,
- 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x825b, 0x1180, 0x080c,
- 0x318a, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
+ 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0xa419, 0x7817, 0x0140,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005,
+ 0x080c, 0x83cc, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904,
+ 0x8182, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
+ 0xff00, 0x15e8, 0x81ff, 0x15d8, 0x9080, 0x3268, 0x200d, 0x918c,
+ 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8182, 0x9484,
+ 0x0fff, 0x9082, 0x0020, 0x0a04, 0x818d, 0x080c, 0x6497, 0x1904,
+ 0x8182, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15e0, 0xba04, 0x9294,
+ 0xff00, 0x9286, 0x0600, 0x11a8, 0x080c, 0xa347, 0x0904, 0x8190,
+ 0x2b08, 0x7028, 0x6046, 0x702c, 0x604a, 0x6112, 0x6023, 0x0006,
+ 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xd2ad,
+ 0x0408, 0x080c, 0x686d, 0x1138, 0xb807, 0x0606, 0x0c28, 0x190c,
+ 0x8050, 0x11c0, 0x0890, 0x080c, 0xa347, 0x2b08, 0x0198, 0x6112,
+ 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007,
+ 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9,
+ 0x080c, 0x8e38, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005,
+ 0x090c, 0x8e38, 0x00ce, 0x00be, 0x0005, 0x080c, 0x83cc, 0x0c90,
+ 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c,
+ 0x4b6d, 0x080c, 0xa3ec, 0x0d30, 0x2b08, 0x6112, 0x6023, 0x0006,
+ 0x7120, 0x610a, 0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001,
+ 0x6007, 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0898, 0x00b6,
+ 0x7110, 0xd1bc, 0x0510, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11e8,
+ 0x9c82, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008, 0x9084,
+ 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c, 0xb914,
+ 0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280, 0x7124,
+ 0x610a, 0x2009, 0x0045, 0x080c, 0xa419, 0x7817, 0x0140, 0x2001,
+ 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005, 0x080c,
+ 0x83cc, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005,
+ 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x83bd, 0x1180, 0x080c,
+ 0x3226, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005,
- 0x80d6, 0x80d7, 0x80d6, 0x80d6, 0x8139, 0x814c, 0x0005, 0x00b6,
- 0x700c, 0x7108, 0x080c, 0x269f, 0x1904, 0x8137, 0x080c, 0x63c1,
- 0x1904, 0x8137, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0528, 0x702c,
- 0xd084, 0x1904, 0x8137, 0x080c, 0x6746, 0x0148, 0x9086, 0x0004,
- 0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6,
- 0x080c, 0x815f, 0x00ce, 0x05d8, 0x080c, 0x9ec2, 0x2b08, 0x05b8,
- 0x6112, 0x080c, 0xbc97, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009,
- 0x0088, 0x080c, 0x9f88, 0x0458, 0x080c, 0x6746, 0x0148, 0x9086,
- 0x0004, 0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1180,
- 0x080c, 0x9ec2, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbc97, 0x6023,
- 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9f88, 0x0078,
- 0x080c, 0x9ec2, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbc97, 0x6023,
- 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9f88, 0x00be,
- 0x0005, 0x688c, 0x9082, 0x000c, 0x0270, 0x7110, 0xd1bc, 0x0158,
- 0x00f1, 0x0148, 0x080c, 0x80b2, 0x1130, 0x7124, 0x610a, 0x2009,
- 0x0089, 0x080c, 0x9f88, 0x0005, 0x688c, 0x9082, 0x0004, 0x0270,
- 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x80b2, 0x1130,
- 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x9f88, 0x0005, 0x7020,
- 0x2060, 0x9c84, 0x0003, 0x1158, 0x9c82, 0x1cc8, 0x0240, 0x2001,
- 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006,
- 0x0ce8, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
- 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
- 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,
- 0xc000, 0x05d0, 0x080c, 0x9ec2, 0x05b8, 0x0066, 0x00c6, 0x0046,
- 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x15a0,
- 0x080c, 0x63c1, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,
- 0x6012, 0x080c, 0xbc97, 0x080c, 0x1001, 0x0510, 0x2900, 0x602a,
- 0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8, 0x001c, 0x20a9,
- 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,
- 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x00fe, 0x009e, 0x00ce, 0x0005,
- 0x080c, 0x9f18, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6,
- 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000,
- 0x1904, 0x8226, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004,
- 0x9005, 0x1904, 0x8228, 0x7030, 0x908e, 0x0400, 0x0904, 0x8228,
- 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300,
- 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580,
- 0x080c, 0x6704, 0x0588, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c,
- 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105,
- 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4,
- 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e,
- 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x815f,
- 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010,
- 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e, 0x0300, 0x0118,
- 0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009,
- 0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079, 0x0200, 0x7800,
- 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800,
- 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200,
- 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084,
- 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836, 0x200c, 0x9184,
- 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e, 0x0005, 0x9085,
- 0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003, 0x0003, 0x700f,
- 0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017, 0x1cc8, 0x7007,
- 0x0000, 0x7026, 0x702b, 0x9639, 0x7032, 0x703a, 0x703f, 0x0064,
- 0x7037, 0x96a1, 0x7047, 0xffff, 0x704a, 0x704f, 0x5434, 0x7052,
- 0x7063, 0x843b, 0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x7042,
- 0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0, 0x0005, 0x2071,
- 0x19d7, 0x1d04, 0x834d, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e,
- 0x1500, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c,
- 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c,
- 0x0dc4, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000,
- 0x7048, 0x900d, 0x0148, 0x8109, 0x714a, 0x1130, 0x704c, 0x080f,
- 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020,
- 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186,
- 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f,
- 0x7030, 0x900d, 0x05a8, 0x702c, 0x8001, 0x702e, 0x1588, 0x0016,
- 0x2009, 0x0306, 0x210c, 0x9184, 0x0030, 0x01e8, 0x9184, 0x0048,
- 0x9086, 0x0008, 0x11c0, 0x7038, 0x9005, 0x01a8, 0x8001, 0x703a,
- 0x1190, 0x080c, 0x72e5, 0x0178, 0x00e6, 0x2071, 0x19c4, 0x080c,
- 0x971d, 0x00ee, 0x1140, 0x2009, 0x1a61, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x001e, 0x0068, 0x001e, 0x702f, 0x0009, 0x8109, 0x7132,
- 0x0128, 0x9184, 0x007f, 0x090c, 0x97ec, 0x0010, 0x7034, 0x080f,
- 0x7044, 0x9005, 0x0118, 0x0310, 0x8001, 0x7046, 0x7054, 0x900d,
- 0x0168, 0x7050, 0x8001, 0x7052, 0x1148, 0x7053, 0x0009, 0x8109,
- 0x7156, 0x1120, 0x7158, 0x7156, 0x7060, 0x080f, 0x7018, 0x900d,
- 0x01d8, 0x0016, 0x7078, 0x900d, 0x0158, 0x7074, 0x8001, 0x7076,
- 0x1138, 0x7077, 0x0009, 0x8109, 0x717a, 0x1110, 0x707c, 0x080f,
- 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109,
- 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8375,
- 0x8376, 0x83dc, 0x00e6, 0x2071, 0x19d7, 0x7018, 0x9005, 0x1120,
- 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,
- 0x2071, 0x19d7, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x707a,
- 0x707e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19d7, 0xb888,
- 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x6411, 0x1904, 0x83d1, 0xb888,
- 0x8001, 0x0230, 0xb88a, 0x1120, 0x0016, 0x080c, 0x8c37, 0x001e,
- 0x901e, 0xb84c, 0x904d, 0x0904, 0x83d1, 0xa864, 0x9005, 0x0118,
- 0x8001, 0xa866, 0x0128, 0x2918, 0xa800, 0x904d, 0x05d0, 0x0ca8,
- 0xa888, 0x90a2, 0x199a, 0x0270, 0x9082, 0x1999, 0xa88a, 0x90a2,
- 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8023, 0x8423, 0x9420,
- 0xac66, 0x0c48, 0xac00, 0xa803, 0x0000, 0x83ff, 0x1150, 0xb850,
- 0x9906, 0x1128, 0xb84f, 0x0000, 0xb853, 0x0000, 0x0050, 0xbc4e,
- 0x0040, 0x0096, 0x2348, 0xac02, 0x009e, 0xb850, 0x9906, 0x1108,
- 0xbb52, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0x0016,
- 0x0036, 0x0046, 0x080c, 0x6b1d, 0x004e, 0x003e, 0x001e, 0x2400,
- 0x0820, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007,
- 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091,
- 0x8000, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120,
- 0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xb955,
- 0x01b0, 0x6014, 0x2048, 0xa888, 0x908a, 0x199a, 0x0280, 0x9082,
- 0x1999, 0xa88a, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
- 0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0xd0e4, 0x0110, 0x080c,
- 0xb68c, 0x012e, 0x9c88, 0x000c, 0x7116, 0x2001, 0x1819, 0x2004,
- 0x9102, 0x0220, 0x7017, 0x1cc8, 0x7007, 0x0000, 0x0005, 0x00e6,
- 0x2071, 0x19d7, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005,
- 0x2001, 0x19e0, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7,
- 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x19e3, 0x2013,
- 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x711a, 0x721e, 0x700b,
- 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x705c, 0x8000, 0x705e,
- 0x2001, 0x19e7, 0x2044, 0xa070, 0x9086, 0x0000, 0x0150, 0x7070,
- 0xa09e, 0x706c, 0xa09a, 0x7068, 0xa096, 0x7064, 0xa092, 0x080c,
- 0x10eb, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6,
- 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x829f,
- 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
- 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x717a, 0x727e,
- 0x7077, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7,
- 0x707c, 0x9206, 0x1110, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005,
- 0x00c6, 0x2061, 0x1a4f, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003,
- 0x8003, 0x8003, 0x9080, 0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a,
- 0x199a, 0x1630, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014,
- 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff,
- 0x01a8, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0x908c,
- 0x00c0, 0x918e, 0x00c0, 0x0904, 0x84ec, 0xd0b4, 0x1160, 0xd0bc,
- 0x1528, 0x2009, 0x0006, 0x080c, 0x8509, 0x0005, 0x900e, 0x0c68,
- 0x2001, 0x1999, 0x08b8, 0xd0fc, 0x0138, 0x908c, 0x0003, 0x0120,
- 0x918e, 0x0003, 0x1904, 0x8503, 0x2009, 0x1880, 0x2104, 0xd084,
- 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0x9f88, 0x0005,
- 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9f88, 0xd0fc, 0x0130,
- 0x908c, 0x0003, 0x0118, 0x918e, 0x0003, 0x1528, 0x0076, 0x00f6,
- 0x2c78, 0x080c, 0x1679, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009,
- 0x0042, 0x080c, 0x9f88, 0x0005, 0xd0fc, 0x0160, 0x9084, 0x0003,
- 0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c,
- 0x9f88, 0x0005, 0x0061, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043,
- 0x080c, 0x9f88, 0x0cb0, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009,
- 0x0001, 0x0096, 0x080c, 0xb955, 0x0518, 0x6014, 0x2048, 0xa986,
- 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c, 0x8100,
- 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200, 0xd28c,
- 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x6959,
- 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x848e, 0x007e,
- 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x81ff,
- 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005,
- 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, 0x680a,
- 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156,
- 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, 0x2039,
- 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
- 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8556, 0x0028, 0x911a,
- 0x2308, 0x8210, 0x1f04, 0x8556, 0x0006, 0x3200, 0x9084, 0xefff,
- 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200,
- 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19c4,
- 0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156, 0x0146,
- 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x0401,
- 0x080c, 0x9cf6, 0x00e9, 0x080c, 0x9cf9, 0x00d1, 0x080c, 0x9cfc,
- 0x00b9, 0x080c, 0x9cff, 0x00a1, 0x080c, 0x9d02, 0x0089, 0x080c,
- 0x9d05, 0x0071, 0x080c, 0x9d08, 0x0059, 0x01de, 0x014e, 0x015e,
- 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005,
- 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005,
- 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002, 0x85cb,
- 0x85ef, 0x8630, 0x85d1, 0x85ef, 0x85cb, 0x85c9, 0x85c7, 0x080c,
- 0x0dc4, 0x00ce, 0x0005, 0x080c, 0x8420, 0x080c, 0x8c37, 0x00ce,
- 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, 0x5d5f,
- 0x080c, 0x835e, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000, 0x782a,
- 0x080c, 0x5d9f, 0x0c88, 0x62c0, 0x080c, 0x9d0f, 0x080c, 0x5d5f,
- 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28, 0x080c,
- 0x8420, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b, 0x0000,
- 0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c, 0x9f88,
- 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x7828,
- 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x29fa,
- 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dc4,
- 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8c37, 0x0c00,
- 0x080c, 0x95ff, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0x9d0f,
- 0x080c, 0xd36d, 0x2009, 0x0014, 0x080c, 0x9f88, 0x00ce, 0x0880,
- 0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
- 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c,
- 0x9fda, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005,
- 0x090c, 0x0dc4, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a,
- 0x00de, 0x00ce, 0x00be, 0x080c, 0x29fa, 0x02f0, 0x00b6, 0x00c6,
- 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc4, 0xb800, 0xc0dc, 0xb802,
- 0x7924, 0x2160, 0x080c, 0x9f18, 0xb93c, 0x81ff, 0x090c, 0x0dc4,
- 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
- 0x00be, 0x080c, 0x8c37, 0x0868, 0x080c, 0x95ff, 0x0850, 0x2011,
- 0x0130, 0x2214, 0x080c, 0x9d0f, 0x080c, 0xd36d, 0x7824, 0x9065,
- 0x2009, 0x0014, 0x080c, 0x9f88, 0x00de, 0x00ce, 0x00be, 0x0804,
- 0x8641, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1d94,
- 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205,
- 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0x9f88,
- 0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8, 0x793c,
- 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7946,
- 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014,
- 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, 0x9084,
- 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, 0x2009,
- 0x004a, 0x080c, 0x9f88, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880,
- 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
- 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005,
- 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e,
- 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19c4,
- 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001,
- 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8c37, 0x00de, 0x0005,
- 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000,
- 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069,
- 0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8,
- 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
- 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005,
- 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,
- 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,
- 0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003,
- 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005,
- 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066,
- 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071,
- 0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904,
- 0x87c4, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x87bf, 0x87ff,
- 0x0120, 0x6024, 0x9106, 0x1904, 0x87bf, 0x703c, 0x9c06, 0x1178,
- 0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x7033, 0x0000, 0x9006,
- 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038,
- 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
- 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
- 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
- 0x0000, 0x080c, 0xb955, 0x01f0, 0x6014, 0x2048, 0x6020, 0x9086,
- 0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30, 0xa86b,
- 0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
- 0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x007e, 0x003e, 0x001e,
- 0x080c, 0xbb39, 0x080c, 0x9f42, 0x00ce, 0x0804, 0x875e, 0x2c78,
- 0x600c, 0x2060, 0x0804, 0x875e, 0x85ff, 0x0120, 0x0036, 0x080c,
- 0x8d06, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
- 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe,
- 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076,
- 0x080c, 0xd242, 0x080c, 0xd101, 0x007e, 0x003e, 0x001e, 0x0890,
- 0x6020, 0x9086, 0x000a, 0x0904, 0x87a9, 0x0804, 0x87a2, 0x0006,
- 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091,
- 0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0578, 0x600c, 0x0006,
- 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,
- 0x080c, 0x9964, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46,
- 0x7b4a, 0x003e, 0x080c, 0xb955, 0x01a0, 0x6014, 0x2048, 0x6020,
- 0x9086, 0x0003, 0x11e0, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30,
- 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c,
- 0xbb39, 0x080c, 0x9f42, 0x000e, 0x0878, 0x7e3a, 0x7e36, 0x012e,
+ 0x8206, 0x8207, 0x8206, 0x8206, 0x826c, 0x827f, 0x0005, 0x00b6,
+ 0x700c, 0x7108, 0x080c, 0x2708, 0x1904, 0x826a, 0x080c, 0x6497,
+ 0x1904, 0x826a, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0540, 0x702c,
+ 0xd084, 0x1120, 0xb800, 0xd0bc, 0x1904, 0x826a, 0x080c, 0x686d,
+ 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118, 0x9086,
+ 0x0004, 0x1588, 0x00c6, 0x080c, 0x8292, 0x00ce, 0x05d8, 0x080c,
+ 0xa347, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xc640, 0x6023, 0x0002,
+ 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xa419, 0x0458, 0x080c,
+ 0x686d, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118,
+ 0x9086, 0x0004, 0x1180, 0x080c, 0xa347, 0x2b08, 0x01d8, 0x6112,
+ 0x080c, 0xc640, 0x6023, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088,
+ 0x080c, 0xa419, 0x0078, 0x080c, 0xa347, 0x2b08, 0x0158, 0x6112,
+ 0x080c, 0xc640, 0x6023, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001,
+ 0x080c, 0xa419, 0x00be, 0x0005, 0x688c, 0x9082, 0x000c, 0x0270,
+ 0x7110, 0xd1bc, 0x0158, 0x00f1, 0x0148, 0x080c, 0x81e2, 0x1130,
+ 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0xa419, 0x0005, 0x688c,
+ 0x9082, 0x0004, 0x0270, 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148,
+ 0x080c, 0x81e2, 0x1130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c,
+ 0xa419, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82,
+ 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085,
+ 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11f0,
+ 0x7024, 0x2060, 0x9c84, 0x0007, 0x11c8, 0x9c82, 0x1cd0, 0x02b0,
+ 0x6864, 0x9c02, 0x1298, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158,
+ 0xb910, 0x9106, 0x1158, 0x700c, 0xb914, 0x9106, 0x1138, 0x698c,
+ 0x81ff, 0x1170, 0x2009, 0x0051, 0x080c, 0xa419, 0x7817, 0x0140,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005,
+ 0x080c, 0x83cc, 0x0c98, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031,
+ 0x0206, 0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031,
+ 0x0213, 0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084,
+ 0xf000, 0x9086, 0xc000, 0x05d0, 0x080c, 0xa347, 0x05b8, 0x0066,
+ 0x00c6, 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+ 0x2708, 0x15a0, 0x080c, 0x6497, 0x1588, 0xbe12, 0xbd16, 0x2b00,
+ 0x004e, 0x00ce, 0x6012, 0x080c, 0xc640, 0x080c, 0x100d, 0x0510,
+ 0x2900, 0x605a, 0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8,
+ 0x001c, 0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0,
+ 0x2e98, 0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00fe, 0x009e,
+ 0x00ce, 0x0005, 0x080c, 0xa39d, 0x006e, 0x0cc0, 0x004e, 0x00ce,
+ 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f,
+ 0x9086, 0x2000, 0x1904, 0x8388, 0x9186, 0x0022, 0x15f0, 0x2001,
+ 0x0111, 0x2004, 0x9005, 0x1904, 0x838a, 0x7030, 0x908e, 0x0400,
+ 0x0904, 0x838a, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0,
+ 0x908e, 0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590,
+ 0xd1a4, 0x1580, 0x080c, 0x682b, 0x0588, 0x68ac, 0x9084, 0x00ff,
+ 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c,
+ 0xff00, 0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103,
+ 0x210c, 0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500,
+ 0x09d0, 0x908e, 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140,
+ 0x080c, 0x8292, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000,
+ 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e,
+ 0x0300, 0x0118, 0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004,
+ 0x9084, 0x0009, 0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079,
+ 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6,
+ 0x2079, 0x1800, 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800,
+ 0x9085, 0x1200, 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800,
+ 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836,
+ 0x200c, 0x9184, 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e,
+ 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104,
+ 0x8000, 0x0208, 0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003,
+ 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017,
+ 0x1cd0, 0x7007, 0x0000, 0x7026, 0x702b, 0x98e7, 0x7032, 0x703a,
+ 0x703f, 0x0064, 0x7037, 0x994f, 0x7047, 0xffff, 0x704a, 0x704f,
+ 0x54f1, 0x7052, 0x7063, 0x85a7, 0x080c, 0x1026, 0x090c, 0x0dc3,
+ 0x2900, 0x7042, 0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0,
+ 0x0005, 0x2071, 0x19d7, 0x1d04, 0x84b1, 0x2091, 0x6000, 0x700c,
+ 0x8001, 0x700e, 0x1510, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158,
+ 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1,
+ 0x0000, 0x080c, 0x0dc3, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x85ec, 0x7048, 0x900d, 0x0148, 0x8109,
+ 0x714a, 0x1130, 0x704c, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000,
+ 0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023,
+ 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f,
+ 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x05a8, 0x702c,
+ 0x8001, 0x702e, 0x1588, 0x0016, 0x2009, 0x0306, 0x210c, 0x9184,
+ 0x0030, 0x01e8, 0x9184, 0x0048, 0x9086, 0x0008, 0x11c0, 0x7038,
+ 0x9005, 0x01a8, 0x8001, 0x703a, 0x1190, 0x080c, 0x7351, 0x0178,
+ 0x00e6, 0x2071, 0x19c4, 0x080c, 0x99cb, 0x00ee, 0x1140, 0x2009,
+ 0x1a61, 0x2104, 0x8000, 0x0208, 0x200a, 0x001e, 0x0068, 0x001e,
+ 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c,
+ 0x9a9a, 0x0010, 0x7034, 0x080f, 0x7044, 0x9005, 0x0118, 0x0310,
+ 0x8001, 0x7046, 0x7054, 0x900d, 0x0168, 0x7050, 0x8001, 0x7052,
+ 0x1148, 0x7053, 0x0009, 0x8109, 0x7156, 0x1120, 0x7158, 0x7156,
+ 0x7060, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7078, 0x900d,
+ 0x0158, 0x7074, 0x8001, 0x7076, 0x1138, 0x7077, 0x0009, 0x8109,
+ 0x717a, 0x1110, 0x707c, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
+ 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
+ 0x012e, 0x7004, 0x0002, 0x84d9, 0x84da, 0x8540, 0x00e6, 0x2071,
+ 0x19d7, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
+ 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7, 0x701c, 0x9206,
+ 0x1120, 0x701a, 0x701e, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005,
+ 0x00e6, 0x2071, 0x19d7, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee,
+ 0x0005, 0x0005, 0x00b6, 0x7110, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0x64fc, 0x1904, 0x8535, 0xb888, 0x8001, 0x0230, 0xb88a, 0x1120,
+ 0x0016, 0x080c, 0x8e38, 0x001e, 0x901e, 0xb84c, 0x904d, 0x0904,
+ 0x8535, 0xa864, 0x9005, 0x0118, 0x8001, 0xa866, 0x0128, 0x2918,
+ 0xa800, 0x904d, 0x05d0, 0x0ca8, 0xa888, 0x90a2, 0x199a, 0x0270,
+ 0x9082, 0x1999, 0xa88a, 0x90a2, 0x199a, 0x0210, 0x2001, 0x1999,
+ 0x8003, 0x8023, 0x8423, 0x9420, 0xac66, 0x0c48, 0xac00, 0xa803,
+ 0x0000, 0x83ff, 0x1150, 0xb850, 0x9906, 0x1128, 0xb84f, 0x0000,
+ 0xb853, 0x0000, 0x0050, 0xbc4e, 0x0040, 0x0096, 0x2348, 0xac02,
+ 0x009e, 0xb850, 0x9906, 0x1108, 0xbb52, 0xa86b, 0x0103, 0xa87f,
+ 0x0006, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0046, 0x080c, 0x6c02,
+ 0x004e, 0x003e, 0x001e, 0x2400, 0x0820, 0x012e, 0x8108, 0x9182,
+ 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005,
+ 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128,
+ 0x8001, 0x6042, 0x1110, 0x080c, 0xc4d1, 0x6018, 0x9005, 0x0528,
+ 0x8001, 0x601a, 0x1510, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
+ 0x0006, 0x11c8, 0x080c, 0xc1cd, 0x01b0, 0x6014, 0x2048, 0xa888,
+ 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa88a, 0x908a, 0x199a,
+ 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
+ 0xa880, 0xd0e4, 0x0110, 0x080c, 0xbeae, 0x012e, 0x9c88, 0x0018,
+ 0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0,
+ 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x7027, 0x07d0,
+ 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x19e0, 0x2003, 0x0000,
+ 0x0005, 0x00e6, 0x2071, 0x19d7, 0x7132, 0x702f, 0x0009, 0x00ee,
+ 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071,
+ 0x19d7, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086,
+ 0x0026, 0x705c, 0x8000, 0x705e, 0x2001, 0x19e7, 0x2044, 0xa070,
+ 0x9086, 0x0000, 0x0150, 0x7070, 0xa09e, 0x706c, 0xa09a, 0x7068,
+ 0xa096, 0x7064, 0xa092, 0x080c, 0x10f7, 0x002e, 0x008e, 0x0005,
+ 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
+ 0x00f6, 0x0156, 0x080c, 0x8401, 0x015e, 0x00fe, 0x00ee, 0x00de,
+ 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6,
+ 0x2071, 0x19d7, 0x717a, 0x727e, 0x7077, 0x0009, 0x00ee, 0x0005,
+ 0x00e6, 0x0006, 0x2071, 0x19d7, 0x707c, 0x9206, 0x1110, 0x707a,
+ 0x707e, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69e4, 0xd1e4,
+ 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a50, 0x6870, 0x9202, 0x0288,
+ 0x8117, 0x9294, 0x00c0, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109,
+ 0x9184, 0x0007, 0x0110, 0x69e6, 0x0070, 0x8107, 0x9084, 0x0007,
+ 0x910d, 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205,
+ 0x68e6, 0x080c, 0x0eed, 0x002e, 0x0005, 0x00c6, 0x2061, 0x1a4f,
+ 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080,
+ 0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a, 0x199a, 0x1638, 0x9005,
+ 0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014, 0x00ce, 0x9005, 0x1130,
+ 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b,
+ 0x810b, 0x9108, 0x611a, 0xa880, 0x908c, 0x00c0, 0x918e, 0x00c0,
+ 0x0904, 0x86ad, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x8686, 0x2009,
+ 0x0006, 0x080c, 0x86da, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999,
+ 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003,
+ 0x1904, 0x86d4, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024,
+ 0xd0d4, 0x11e8, 0x2009, 0x1880, 0x2104, 0xd084, 0x1138, 0x87ff,
+ 0x1120, 0x2009, 0x0043, 0x0804, 0xa419, 0x0005, 0x87ff, 0x1de8,
+ 0x2009, 0x0042, 0x0804, 0xa419, 0x6110, 0x00b6, 0x2158, 0xb900,
+ 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4,
+ 0x6026, 0xa894, 0x602e, 0xa890, 0x6032, 0x08e0, 0xd0fc, 0x0160,
+ 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x86d4, 0x908c,
+ 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c,
+ 0x16c1, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
+ 0xa419, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
+ 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c,
+ 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002,
+ 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xa419, 0x0005,
+ 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0xa419,
+ 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20,
+ 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005,
+ 0x2009, 0x0001, 0x0096, 0x080c, 0xc1cd, 0x0518, 0x6014, 0x2048,
+ 0xa986, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c,
+ 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200,
+ 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c,
+ 0x6a41, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x8623,
+ 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000,
+ 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e,
+ 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001,
+ 0x680a, 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076,
+ 0x0156, 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213,
+ 0x2039, 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010,
+ 0x81f5, 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8727, 0x0028,
+ 0x911a, 0x2308, 0x8210, 0x1f04, 0x8727, 0x0006, 0x3200, 0x9084,
+ 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006,
+ 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079,
+ 0x19c4, 0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156,
+ 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0xa190,
+ 0x0401, 0x080c, 0xa17b, 0x00e9, 0x080c, 0xa17e, 0x00d1, 0x080c,
+ 0xa181, 0x00b9, 0x080c, 0xa184, 0x00a1, 0x080c, 0xa187, 0x0089,
+ 0x080c, 0xa18a, 0x0071, 0x080c, 0xa18d, 0x0059, 0x01de, 0x014e,
+ 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de,
+ 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004,
+ 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002,
+ 0x879c, 0x87c0, 0x8801, 0x87a2, 0x87c0, 0x879c, 0x879a, 0x8798,
+ 0x080c, 0x0dc3, 0x00ce, 0x0005, 0x080c, 0x858c, 0x080c, 0x8e38,
+ 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000,
+ 0x782a, 0x080c, 0x5e5c, 0x0c88, 0x62c0, 0x080c, 0xa194, 0x080c,
+ 0x5e1c, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28,
+ 0x080c, 0x858c, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b,
+ 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013, 0x080c,
+ 0xa419, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc3,
+ 0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c,
+ 0x2a63, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c,
+ 0x0dc3, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8e38,
+ 0x0c00, 0x080c, 0x98ad, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,
+ 0xa194, 0x080c, 0xe0fa, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce,
+ 0x0880, 0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,
+ 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013,
+ 0x080c, 0xa46b, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,
+ 0x9005, 0x090c, 0x0dc3, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000,
+ 0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x2a63, 0x02f0, 0x00b6,
+ 0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc3, 0xb800, 0xc0dc,
+ 0xb802, 0x7924, 0x2160, 0x080c, 0xa39d, 0xb93c, 0x81ff, 0x090c,
+ 0x0dc3, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de,
+ 0x00ce, 0x00be, 0x080c, 0x8e38, 0x0868, 0x080c, 0x98ad, 0x0850,
+ 0x2011, 0x0130, 0x2214, 0x080c, 0xa194, 0x080c, 0xe0fa, 0x7824,
+ 0x9065, 0x2009, 0x0014, 0x080c, 0xa419, 0x00de, 0x00ce, 0x00be,
+ 0x0804, 0x8812, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,
+ 0x1ddc, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4,
+ 0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c,
+ 0xa419, 0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8,
+ 0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108,
+ 0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138,
+ 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014,
+ 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160,
+ 0x2009, 0x004a, 0x080c, 0xa419, 0x08a0, 0x7848, 0xc085, 0x784a,
+ 0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
+ 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010,
+ 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,
+ 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,
+ 0x19c4, 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086,
+ 0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8e38, 0x00de,
+ 0x0005, 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b,
+ 0x0000, 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e,
+ 0x2069, 0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e,
+ 0x08d8, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
+ 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008,
+ 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce,
+ 0x001e, 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f,
+ 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080,
+ 0x0003, 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce,
+ 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076,
+ 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e,
+ 0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
+ 0x0904, 0x8995, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8990,
+ 0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x8990, 0x703c, 0x9c06,
+ 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000,
+ 0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001,
+ 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,
+ 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
+ 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
+ 0x600f, 0x0000, 0x080c, 0xc1cd, 0x01f0, 0x6014, 0x2048, 0x6020,
+ 0x9086, 0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03,
+ 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076,
+ 0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x007e, 0x003e,
+ 0x001e, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x0804, 0x892f,
+ 0x2c78, 0x600c, 0x2060, 0x0804, 0x892f, 0x85ff, 0x0120, 0x0036,
+ 0x080c, 0x8f0e, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e,
+ 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee,
+ 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036,
+ 0x0076, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x007e, 0x003e, 0x001e,
+ 0x0890, 0x6020, 0x9086, 0x000a, 0x0904, 0x897a, 0x0804, 0x8973,
+ 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126,
+ 0x2091, 0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0904, 0x8a15,
+ 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036,
+ 0x2019, 0x0001, 0x080c, 0x9c35, 0x7833, 0x0000, 0x901e, 0x7b3e,
+ 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xc1cd, 0x0548, 0x6014,
+ 0x2048, 0x6020, 0x9086, 0x0003, 0x1590, 0x3e08, 0x918e, 0x0002,
+ 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be,
+ 0xd0bc, 0x0140, 0x6040, 0x9005, 0x11a8, 0x2001, 0x1964, 0x2004,
+ 0x6042, 0x0080, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03, 0xa86b,
+ 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6bf5, 0x080c, 0xc3b4,
+ 0x080c, 0xa3cf, 0x000e, 0x0804, 0x89cd, 0x7e3a, 0x7e36, 0x012e,
0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020,
- 0x9086, 0x0006, 0x1118, 0x080c, 0xd101, 0x0c58, 0x6020, 0x9086,
- 0x000a, 0x0d00, 0x08c0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,
- 0x080c, 0x892e, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
- 0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x89c5, 0x080c, 0x8a4f,
+ 0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x6020, 0x9086,
+ 0x000a, 0x09f8, 0x08b8, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,
+ 0x080c, 0x8b16, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
+ 0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x8bad, 0x080c, 0x8c3d,
0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6,
0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
- 0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x88f3, 0x6010,
- 0x2058, 0xb8a0, 0x9206, 0x1904, 0x88ee, 0x88ff, 0x0120, 0x6024,
- 0x9106, 0x1904, 0x88ee, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100,
- 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c,
- 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036,
+ 0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x8adb, 0x6010,
+ 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8ad6, 0x88ff, 0x0120, 0x6054,
+ 0x9106, 0x1904, 0x8ad6, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100,
+ 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036,
0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
- 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
+ 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
- 0x630a, 0x0804, 0x88ee, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
+ 0x630a, 0x0804, 0x8ad6, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012,
0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c,
- 0xb955, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xbb56,
- 0x1118, 0x080c, 0xa717, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b,
- 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xbc3f, 0x080c, 0xd242,
- 0x080c, 0x6b1d, 0x008e, 0x003e, 0x001e, 0x080c, 0xbb39, 0x080c,
- 0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804, 0x886c, 0x2c78, 0x600c,
- 0x2060, 0x0804, 0x886c, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
+ 0xc1cd, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xc3d1,
+ 0x1118, 0x080c, 0xadb3, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b,
+ 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xc4ba, 0x080c, 0xdfcf,
+ 0x080c, 0x6c02, 0x008e, 0x003e, 0x001e, 0x080c, 0xc3b4, 0x080c,
+ 0xa3cf, 0x080c, 0x9cd9, 0x00ce, 0x0804, 0x8a54, 0x2c78, 0x600c,
+ 0x2060, 0x0804, 0x8a54, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086,
- 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xd242, 0x080c,
- 0xd101, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xa717, 0x6020,
+ 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xdfcf, 0x080c,
+ 0xdcc3, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xadb3, 0x6020,
0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
- 0x0904, 0x88d4, 0x9086, 0x008b, 0x0904, 0x88d4, 0x0840, 0x6020,
+ 0x0904, 0x8abc, 0x9086, 0x008b, 0x0904, 0x8abc, 0x0840, 0x6020,
0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
- 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x88e7, 0x00b6, 0x00a6,
+ 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x8acf, 0x00b6, 0x00a6,
0x0096, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000,
- 0x2004, 0x905d, 0x0904, 0x89be, 0x00f6, 0x00e6, 0x00d6, 0x0066,
+ 0x2004, 0x905d, 0x0904, 0x8ba6, 0x00f6, 0x00e6, 0x00d6, 0x0066,
0x2071, 0x19c4, 0xbe54, 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c,
0x9b06, 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e,
0xb858, 0x904d, 0x0108, 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900,
0xb05a, 0xb857, 0x0000, 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc,
- 0xb802, 0x080c, 0x6354, 0x0904, 0x89ba, 0x7624, 0x86ff, 0x0904,
- 0x89a9, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069,
- 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x8420, 0x080c, 0x9623,
- 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069,
+ 0xb802, 0x080c, 0x642a, 0x0904, 0x8ba2, 0x7624, 0x86ff, 0x0904,
+ 0x8b91, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069,
+ 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x858c, 0x080c, 0x98d1,
+ 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069,
0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
- 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084,
+ 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084,
0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005,
- 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9f42, 0x00ce, 0x0048,
+ 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa3cf, 0x00ce, 0x0048,
0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
- 0x8961, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
- 0x080c, 0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x080c, 0x9a08,
- 0x0804, 0x8961, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
+ 0x8b49, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
+ 0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x080c, 0x9cd9,
+ 0x0804, 0x8b49, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
0x00ce, 0x009e, 0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066,
- 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8a22, 0x600c,
- 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1568, 0x2069, 0x0100,
- 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c,
- 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036,
+ 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8c10, 0x600c,
+ 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1580, 0x2069, 0x0100,
+ 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036,
0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
- 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
- 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
- 0x630a, 0x2c30, 0x00e0, 0x6014, 0x2048, 0x080c, 0xb953, 0x0198,
- 0x6020, 0x9086, 0x0003, 0x11f0, 0x080c, 0xbb56, 0x1118, 0x080c,
- 0xa717, 0x0048, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c,
- 0x6b1d, 0x080c, 0xbb39, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x000e,
- 0x0804, 0x89cc, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e,
- 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd101,
- 0x0c50, 0x080c, 0xa717, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004,
- 0x0006, 0x9086, 0x0085, 0x000e, 0x09a8, 0x9086, 0x008b, 0x0990,
- 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086,
- 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006,
- 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904,
- 0x8abc, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4,
- 0xc0dc, 0xb802, 0x080c, 0x6354, 0x0904, 0x8ab9, 0x7e24, 0x86ff,
- 0x0904, 0x8aac, 0x9680, 0x0005, 0x2004, 0x9906, 0x15e8, 0x00d6,
- 0x2069, 0x0100, 0x68c0, 0x9005, 0x0570, 0x080c, 0x8420, 0x080c,
- 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036,
+ 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
+ 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x080c, 0x6823,
+ 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, 0x6014, 0x2048,
+ 0x080c, 0xc1cb, 0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, 0x080c,
+ 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0060, 0x080c, 0x6823, 0x1168,
+ 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+ 0xc3b4, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x000e, 0x0804, 0x8bb4,
+ 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005,
+ 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x080c,
+ 0xadb3, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086,
+ 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020,
+ 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
+ 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0066, 0x0096,
+ 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, 0x8cbd, 0xb854,
+ 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, 0xc0dc, 0xb802,
+ 0x080c, 0x642a, 0x0904, 0x8cba, 0x7e24, 0x86ff, 0x0904, 0x8cad,
+ 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x8cad, 0x00d6, 0x2069,
+ 0x0100, 0x68c0, 0x9005, 0x0904, 0x8ca4, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036,
0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
- 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
- 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c,
- 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000, 0x080c,
- 0x9f42, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009,
- 0x630a, 0x00ce, 0x0804, 0x8a62, 0x89ff, 0x0138, 0xa86b, 0x0103,
- 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c, 0x9a08, 0x0804,
- 0x8a62, 0x000e, 0x0804, 0x8a56, 0x781e, 0x781a, 0x00de, 0x00ce,
- 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096,
- 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188, 0xa87c,
- 0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148, 0x9080,
- 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802, 0x0029,
- 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100,
- 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a,
- 0x00ce, 0x04b8, 0x080c, 0x9623, 0x78c3, 0x0000, 0x080c, 0x9b30,
- 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000,
- 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65,
- 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c,
- 0x9b30, 0x003e, 0x080c, 0x6354, 0x00c6, 0xb83c, 0x9005, 0x0110,
- 0x8001, 0xb83e, 0x2660, 0x080c, 0x9f18, 0x00ce, 0xa86b, 0x0103,
- 0xab7e, 0xa87b, 0x0000, 0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x080c,
- 0x9a08, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101,
- 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202,
- 0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8b48, 0x8b4c,
- 0x8b6a, 0x8b93, 0x8bd1, 0x8b48, 0x8b63, 0x8b46, 0x080c, 0x0dc4,
- 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148, 0x7020,
- 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f, 0x0000,
- 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,
- 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020,
- 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc,
- 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022,
- 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee,
- 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x8c37,
- 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8c37, 0x0c80, 0xc2ec, 0x2202,
- 0x080c, 0x8d06, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06,
- 0x1160, 0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f,
- 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160,
- 0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000,
- 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198,
- 0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc, 0xb802, 0x080c,
- 0x9a08, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e,
- 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be,
- 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9a08, 0x600c, 0x9015,
- 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000,
- 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6,
- 0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8bf4, 0x8bf6,
- 0x8c1a, 0x8bf2, 0x080c, 0x0dc4, 0x00de, 0x0005, 0x00c6, 0x6840,
- 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015,
- 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
- 0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
- 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003,
- 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c,
- 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000,
- 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de,
- 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001,
- 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, 0x8d06,
- 0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069,
- 0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8c57, 0x8cee, 0x8cee,
- 0x8cee, 0x8cee, 0x8cf0, 0x8cee, 0x8c55, 0x080c, 0x0dc4, 0x6820,
- 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150,
- 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce,
- 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826,
- 0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x00b6,
- 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8cd8, 0xb84c, 0x900d,
- 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120, 0x920e,
- 0x0904, 0x8cd8, 0x0028, 0x6818, 0x920e, 0x0904, 0x8cd8, 0x2058,
- 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e,
- 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0x9eef, 0x05c8, 0x8318,
- 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148, 0xab64, 0xa867,
+ 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
+ 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x3e08,
+ 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150, 0x9680, 0x0010,
+ 0x200c, 0x81ff, 0x1518, 0x2009, 0x1964, 0x210c, 0x2102, 0x00f0,
+ 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000,
+ 0x080c, 0xa3cf, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,
+ 0x0009, 0x630a, 0x00ce, 0x0804, 0x8c50, 0x89ff, 0x0138, 0xa86b,
+ 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0x9cd9,
+ 0x0804, 0x8c50, 0x000e, 0x0804, 0x8c44, 0x781e, 0x781a, 0x00de,
+ 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6,
+ 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188,
+ 0xa87c, 0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148,
+ 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802,
+ 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079,
+ 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009,
+ 0x630a, 0x00ce, 0x04b8, 0x080c, 0x98d1, 0x78c3, 0x0000, 0x080c,
+ 0x9e03, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384,
+ 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c,
+ 0x2bce, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001,
+ 0x080c, 0x9e03, 0x003e, 0x080c, 0x642a, 0x00c6, 0xb83c, 0x9005,
+ 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa39d, 0x00ce, 0xa86b,
+ 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xc4ba, 0x080c, 0x6c02,
+ 0x080c, 0x9cd9, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011,
+ 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4,
+ 0x2202, 0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8d49,
+ 0x8d4d, 0x8d6b, 0x8d94, 0x8dd2, 0x8d49, 0x8d64, 0x8d47, 0x080c,
+ 0x0dc3, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148,
+ 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f,
+ 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be,
+ 0x0005, 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000,
+ 0x7020, 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800,
+ 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001,
+ 0x7022, 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce,
+ 0x00ee, 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c,
+ 0x8e38, 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8e38, 0x0c80, 0xc2ec,
+ 0x2202, 0x080c, 0x8f0e, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c,
+ 0x9c06, 0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x720e,
+ 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06,
+ 0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f,
+ 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003,
+ 0x1198, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800, 0xc0dc, 0xb802,
+ 0x080c, 0x9cd9, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110,
+ 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee,
+ 0x00be, 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9cd9, 0x600c,
+ 0x9015, 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9e03, 0x7027,
+ 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8,
+ 0x00d6, 0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8df5,
+ 0x8df7, 0x8e1b, 0x8df3, 0x080c, 0x0dc3, 0x00de, 0x0005, 0x00c6,
+ 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c,
+ 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f,
+ 0x0000, 0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005,
+ 0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68,
+ 0x6003, 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a,
+ 0x683c, 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f,
+ 0x0000, 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce,
+ 0x00de, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005,
+ 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c,
+ 0x8f0e, 0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6,
+ 0x2069, 0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8e58, 0x8ef6,
+ 0x8ef6, 0x8ef6, 0x8ef6, 0x8ef8, 0x8ef6, 0x8e56, 0x080c, 0x0dc3,
+ 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065,
+ 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8f65,
+ 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001,
+ 0x6826, 0x682b, 0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005,
+ 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8ee0, 0xb84c,
+ 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120,
+ 0x920e, 0x0904, 0x8ee0, 0x0028, 0x6818, 0x920e, 0x0904, 0x8ee0,
+ 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00,
+ 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0xa374, 0x0904,
+ 0x8ee0, 0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148,
+ 0xa884, 0x9084, 0x00ff, 0x605e, 0xa887, 0x0000, 0xab64, 0xa867,
0x0000, 0x009e, 0x631a, 0x6114, 0x0096, 0x2148, 0xa968, 0x009e,
0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78, 0x2061,
- 0x0100, 0xbaac, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c,
- 0x92c9, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002,
+ 0x0100, 0xbab0, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c,
+ 0x94f6, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002,
0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001,
0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005,
0x00ee, 0x00be, 0x00ce, 0x0cd0, 0x6807, 0x0006, 0x2c18, 0x6b26,
- 0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x6354, 0x080c,
- 0x9d2f, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
+ 0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x642a, 0x080c,
+ 0xa1b4, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
0x00c6, 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,
- 0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
+ 0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6,
0x2069, 0x19c4, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c,
- 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8c46, 0x2069,
+ 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8e47, 0x2069,
0x19c4, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0, 0x6838, 0x907d,
0x01b0, 0x6a04, 0x9296, 0x0000, 0x1568, 0x6833, 0x0001, 0x683e,
0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400,
- 0x002e, 0x080c, 0x1b2e, 0x1158, 0x012e, 0x080c, 0x94a3, 0x00de,
- 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x7393, 0x08f8, 0x012e,
+ 0x002e, 0x080c, 0x1b76, 0x1158, 0x012e, 0x080c, 0x972e, 0x00de,
+ 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x73fe, 0x08f8, 0x012e,
0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a,
0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c40, 0x683a,
- 0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8cfe, 0x6a30,
- 0x9296, 0x0000, 0x0950, 0x0804, 0x8cfe, 0x6020, 0x9084, 0x000f,
- 0x000b, 0x0005, 0x8d71, 0x8d76, 0x91f9, 0x9292, 0x8d76, 0x91f9,
- 0x9292, 0x8d71, 0x8d76, 0x8d71, 0x8d71, 0x8d71, 0x8d71, 0x8d71,
- 0x8d71, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0005, 0x00b6, 0x0156,
+ 0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8f06, 0x6a30,
+ 0x9296, 0x0000, 0x0950, 0x0804, 0x8f06, 0x6020, 0x9084, 0x000f,
+ 0x000b, 0x0005, 0x8f79, 0x8f7e, 0x9426, 0x94bf, 0x8f7e, 0x9426,
+ 0x94bf, 0x8f79, 0x8f7e, 0x8f79, 0x8f79, 0x8f79, 0x8f79, 0x8f79,
+ 0x8f79, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x0005, 0x00b6, 0x0156,
0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0054, 0x1a0c,
- 0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061, 0x0100, 0x619a,
- 0x908a, 0x0040, 0x1a04, 0x8de2, 0x005b, 0x00fe, 0x00ee, 0x00de,
+ 0x0dc3, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a,
+ 0x908a, 0x0040, 0x1a04, 0x8fea, 0x005b, 0x00fe, 0x00ee, 0x00de,
0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005,
- 0x8f7f, 0x8fba, 0x8fe3, 0x90a7, 0x90c6, 0x90cc, 0x90d6, 0x90de,
- 0x90ea, 0x90f0, 0x9101, 0x90f0, 0x9140, 0x90de, 0x914c, 0x9152,
- 0x90ea, 0x9152, 0x915e, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0,
- 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x983e,
- 0x984f, 0x986f, 0x98a1, 0x90d6, 0x8de0, 0x90d6, 0x90f0, 0x8de0,
- 0x8fe3, 0x90a7, 0x8de0, 0x9c27, 0x90f0, 0x8de0, 0x9c43, 0x90f0,
- 0x8de0, 0x90ea, 0x8f79, 0x8e05, 0x8de0, 0x8de0, 0x8de0, 0x8de0,
- 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x98ab, 0x9c79, 0x8de0,
- 0x080c, 0x0dc4, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
- 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8e03,
- 0x8e03, 0x8e03, 0x8e3d, 0x8ee9, 0x8ef4, 0x8e03, 0x8e03, 0x8e03,
- 0x8f4e, 0x8f5a, 0x8e58, 0x8e03, 0x8e73, 0x8ea7, 0x9df6, 0x9e3b,
- 0x90f0, 0x8e03, 0x9c5f, 0x080c, 0x0dc4, 0x00d6, 0x0096, 0x080c,
- 0x9171, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138,
+ 0x9187, 0x91c2, 0x91eb, 0x92b5, 0x92d7, 0x92dd, 0x92ea, 0x92f2,
+ 0x92fe, 0x9304, 0x9315, 0x9304, 0x936d, 0x92f2, 0x9379, 0x937f,
+ 0x92fe, 0x937f, 0x938b, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8,
+ 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x9aec, 0x9b0f,
+ 0x9b20, 0x9b40, 0x9b72, 0x92ea, 0x8fe8, 0x92ea, 0x9304, 0x8fe8,
+ 0x91eb, 0x92b5, 0x8fe8, 0x9efa, 0x9304, 0x8fe8, 0x9f16, 0x9304,
+ 0x8fe8, 0x92fe, 0x9181, 0x900d, 0x8fe8, 0x9f32, 0x9f9f, 0xa07a,
+ 0x8fe8, 0xa087, 0x92e7, 0xa0b2, 0x8fe8, 0x9b7c, 0xa0f9, 0x8fe8,
+ 0x080c, 0x0dc3, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+ 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x900b,
+ 0x900b, 0x900b, 0x9045, 0x90f1, 0x90fc, 0x900b, 0x900b, 0x900b,
+ 0x9156, 0x9162, 0x9060, 0x900b, 0x907b, 0x90af, 0xa27b, 0xa2c0,
+ 0x9304, 0x900b, 0xa0df, 0x080c, 0x0dc3, 0x00d6, 0x0096, 0x080c,
+ 0x939e, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138,
0x2009, 0x2414, 0x2011, 0x0018, 0x2019, 0x0018, 0x0030, 0x2009,
0x2410, 0x2011, 0x0014, 0x2019, 0x0014, 0x7102, 0x7206, 0x700b,
0x0800, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x63c2,
- 0x080c, 0x95f7, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810,
- 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0x9e82, 0x1118, 0x9084,
+ 0x080c, 0x98a5, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810,
+ 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xa307, 0x1118, 0x9084,
0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c,
- 0x9171, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c,
+ 0x939e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c,
0x700e, 0xa880, 0x7012, 0xa884, 0x7016, 0xa888, 0x701a, 0xa88c,
- 0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7, 0x009e, 0x00de, 0x0005,
- 0x00d6, 0x0096, 0x080c, 0x9171, 0x7003, 0x0500, 0x7814, 0x2048,
+ 0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5, 0x009e, 0x00de, 0x0005,
+ 0x00d6, 0x0096, 0x080c, 0x939e, 0x7003, 0x0500, 0x7814, 0x2048,
0xa8d0, 0x700a, 0xa8d4, 0x700e, 0xa8d8, 0x7012, 0xa8dc, 0x7016,
- 0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7,
+ 0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5,
0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x9171, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000,
+ 0x080c, 0x939e, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000,
0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016,
- 0x200c, 0x2001, 0x0001, 0x080c, 0x2297, 0x080c, 0xc491, 0x9006,
- 0x080c, 0x2297, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
- 0x04d9, 0x080c, 0x95f7, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
- 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x91bc, 0x20e9, 0x0000,
+ 0x200c, 0x2001, 0x0001, 0x080c, 0x22df, 0x080c, 0xcf91, 0x9006,
+ 0x080c, 0x22df, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
+ 0x04d9, 0x080c, 0x98a5, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
+ 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x93e9, 0x20e9, 0x0000,
0x2001, 0x1980, 0x2003, 0x0000, 0x7814, 0x2048, 0xa873, 0x0200,
0xa877, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016,
- 0x200c, 0x080c, 0xc491, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
- 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb3, 0x080c, 0x95f7,
+ 0x200c, 0x080c, 0xcf91, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
+ 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fbf, 0x080c, 0x98a5,
0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,
0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,
- 0x0005, 0x080c, 0x9171, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
- 0x60c3, 0x0008, 0x0804, 0x95f7, 0x00d6, 0x00e6, 0x080c, 0x91bc,
+ 0x0005, 0x080c, 0x939e, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
+ 0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x00e6, 0x080c, 0x93e9,
0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9096,
0xdf00, 0x0138, 0x9096, 0xe000, 0x0120, 0x2073, 0x0010, 0x8e70,
0x0030, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70,
0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04,
- 0x8f14, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
- 0x1f04, 0x8f1d, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118,
+ 0x911c, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
+ 0x1f04, 0x9125, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118,
0x60c3, 0x0018, 0x00f0, 0x2069, 0x1990, 0x9086, 0xdf00, 0x0110,
0x2069, 0x19aa, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6,
0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240,
- 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8f34, 0x60c3,
- 0x004c, 0x080c, 0x95f7, 0x00ee, 0x00de, 0x0005, 0x080c, 0x9171,
+ 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x913c, 0x60c3,
+ 0x004c, 0x080c, 0x98a5, 0x00ee, 0x00de, 0x0005, 0x080c, 0x939e,
0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008,
- 0x0804, 0x95f7, 0x00d6, 0x0026, 0x0016, 0x080c, 0x91bc, 0x7003,
+ 0x0804, 0x98a5, 0x00d6, 0x0026, 0x0016, 0x080c, 0x93e9, 0x7003,
0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001,
0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000, 0x00ee,
- 0x7206, 0x710a, 0x62c2, 0x080c, 0x95f7, 0x001e, 0x002e, 0x00de,
- 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x95f7, 0x080c,
- 0x9171, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130,
- 0x6828, 0x0016, 0x080c, 0x26d2, 0x710e, 0x001e, 0x20a9, 0x0004,
+ 0x7206, 0x710a, 0x62c2, 0x080c, 0x98a5, 0x001e, 0x002e, 0x00de,
+ 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x98a5, 0x080c,
+ 0x939e, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130,
+ 0x6828, 0x0016, 0x080c, 0x273b, 0x710e, 0x001e, 0x20a9, 0x0004,
0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250,
0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254, 0x4003,
- 0x080c, 0x9e82, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
+ 0x080c, 0xa307, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036, 0x0030,
0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x001c,
- 0x0804, 0x95f7, 0x080c, 0x9171, 0x7003, 0x0500, 0x080c, 0x9e82,
+ 0x0804, 0x98a5, 0x080c, 0x939e, 0x7003, 0x0500, 0x080c, 0xa307,
0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004,
0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001, 0x1817,
0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001,
0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x60c3,
- 0x0010, 0x0804, 0x95f7, 0x080c, 0x9171, 0x9006, 0x080c, 0x6710,
+ 0x0010, 0x0804, 0x98a5, 0x080c, 0x939e, 0x9006, 0x080c, 0x6837,
0xb8a0, 0x9086, 0x007e, 0x1170, 0x2011, 0x0240, 0x2013, 0x22ff,
0x2011, 0x0241, 0x2013, 0xfffe, 0x7003, 0x0400, 0x620c, 0xc2b4,
0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120, 0x9006, 0xa89e,
0xa8aa, 0xa8ae, 0x009e, 0x7003, 0x0300, 0xb8a0, 0x9086, 0x007e,
- 0x1904, 0x9067, 0x00d6, 0x2069, 0x1949, 0x2001, 0x1836, 0x2004,
+ 0x1904, 0x9275, 0x00d6, 0x2069, 0x1948, 0x2001, 0x1836, 0x2004,
0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084, 0x2000, 0x7012,
- 0x080c, 0x9e99, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
+ 0x080c, 0xa31e, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
0x681c, 0x7026, 0x0428, 0x6800, 0x700a, 0x6804, 0x700e, 0x2009,
0x180d, 0x210c, 0xd18c, 0x0110, 0x2001, 0x0002, 0x00f6, 0x2079,
- 0x0100, 0x080c, 0x72e5, 0x1128, 0x78e3, 0x0000, 0x080c, 0x2713,
- 0x78e2, 0x00fe, 0x6808, 0x080c, 0x72e5, 0x1118, 0x9084, 0x37ff,
- 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0x9e99, 0x680c, 0x7016,
+ 0x0100, 0x080c, 0x7351, 0x1128, 0x78e3, 0x0000, 0x080c, 0x277c,
+ 0x78e2, 0x00fe, 0x6808, 0x080c, 0x7351, 0x1118, 0x9084, 0x37ff,
+ 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xa31e, 0x680c, 0x7016,
0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
- 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9cf6, 0x2069, 0x1951,
- 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x00de, 0x04e0, 0x2001,
- 0x1836, 0x2004, 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x2009, 0x0002, 0x1118, 0x2001, 0x194a, 0x200c, 0x60e0,
- 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x2713, 0x61e2,
- 0x001e, 0x20e1, 0x0001, 0x2099, 0x1949, 0x20e9, 0x0000, 0x20a1,
- 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,
- 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
- 0x025a, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x024e, 0x20a9, 0x0008,
- 0x2099, 0x1951, 0x4003, 0x60c3, 0x0074, 0x0804, 0x95f7, 0x080c,
- 0x9171, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,
- 0x2000, 0x9006, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac,
- 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085,
- 0x0002, 0x7026, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x9171,
- 0x7003, 0x5000, 0x0804, 0x9005, 0x080c, 0x9171, 0x7003, 0x2110,
- 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc,
- 0x7003, 0x0200, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x080c, 0x91bc,
- 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008,
- 0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200, 0x0804, 0x9005,
- 0x080c, 0x91bc, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a,
- 0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804,
- 0x95f7, 0x00d6, 0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014,
- 0x700b, 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184,
- 0x0030, 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118,
- 0x700f, 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400,
- 0x0028, 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079,
- 0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4,
- 0x0110, 0x9085, 0x0010, 0x2009, 0x1880, 0x210c, 0xd184, 0x1110,
- 0x9085, 0x0002, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x95f7,
- 0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100,
- 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200,
- 0x0804, 0x8f83, 0x080c, 0x91bc, 0x7003, 0x0100, 0x700b, 0x0003,
- 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x080c, 0x91bc,
- 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x95f7,
- 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800,
- 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021,
- 0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
- 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029,
- 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x9f95,
- 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005,
- 0x0026, 0x080c, 0x9d0b, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6,
- 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x00de, 0x7013,
- 0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02,
- 0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
- 0x3300, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046,
- 0x2019, 0x2300, 0x2021, 0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305,
- 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140,
- 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020,
- 0x6878, 0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012,
- 0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
- 0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x95e5,
- 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e,
- 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200,
- 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
- 0x0092, 0x1a0c, 0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061,
- 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de,
- 0x00ce, 0x00be, 0x0005, 0x922a, 0x9239, 0x9244, 0x9228, 0x9228,
- 0x9228, 0x922a, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
- 0x080c, 0x0dc4, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x29fa,
- 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804,
- 0x95f7, 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff,
- 0x60c3, 0x000c, 0x0804, 0x95f7, 0x04a1, 0x7003, 0x0003, 0x7007,
- 0x0300, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x0026, 0x080c, 0x9d0b,
- 0xb810, 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
- 0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x918c,
- 0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814,
- 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001,
- 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804,
- 0x91ee, 0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8500, 0x7002,
- 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e,
- 0x2001, 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012,
- 0x0804, 0x91ee, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78,
- 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c,
- 0x0dc4, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x7910, 0x2158, 0xb9ac,
- 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee,
- 0x00de, 0x00ce, 0x00be, 0x0005, 0x92c9, 0x9375, 0x9348, 0x9454,
- 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x99ef,
- 0x99f4, 0x99f9, 0x99fe, 0x92c7, 0x92c7, 0x92c7, 0x99ea, 0x080c,
- 0x0dc4, 0x0096, 0x080c, 0x932c, 0x7914, 0x2148, 0xa97c, 0x7926,
- 0xae68, 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032,
- 0xa8bc, 0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132,
- 0xa980, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184,
- 0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x7042,
- 0xd1ac, 0x0158, 0x7047, 0x0002, 0x9686, 0x0008, 0x1118, 0x080c,
- 0x17b7, 0x0010, 0x080c, 0x1679, 0x0050, 0xd1b4, 0x0118, 0x7047,
- 0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab4,
- 0xaeb0, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860,
- 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x20a1, 0x0252, 0x2069,
- 0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020,
- 0x6017, 0x0009, 0x2001, 0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df,
- 0x2003, 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210,
+ 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa17b, 0x2069, 0x1950,
+ 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x5668, 0xd0e4,
+ 0x0110, 0x680c, 0x700e, 0x00de, 0x04e0, 0x2001, 0x1836, 0x2004,
+ 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2009,
+ 0x0002, 0x1118, 0x2001, 0x1949, 0x200c, 0x60e0, 0x9106, 0x0130,
+ 0x2100, 0x60e3, 0x0000, 0x080c, 0x277c, 0x61e2, 0x001e, 0x20e1,
+ 0x0001, 0x2099, 0x1948, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9,
+ 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256,
+ 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003,
+ 0x080c, 0xa17b, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1950,
+ 0x4003, 0x60c3, 0x0074, 0x0804, 0x98a5, 0x080c, 0x939e, 0x7003,
+ 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006,
+ 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085,
+ 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6,
+ 0x0804, 0x934e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c,
+ 0x939e, 0x7003, 0x5000, 0x0804, 0x920d, 0x080c, 0x939e, 0x7003,
+ 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c,
+ 0x93e0, 0x0010, 0x080c, 0x93e9, 0x7003, 0x0200, 0x60c3, 0x0004,
+ 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b, 0x0003,
+ 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9,
+ 0x7003, 0x0200, 0x0804, 0x920d, 0x080c, 0x93e9, 0x7003, 0x0100,
+ 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, 0x7814,
+ 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x080c, 0x93e9,
+ 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, 0x9086,
+ 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998, 0x9184,
+ 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f,
+ 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010,
+ 0x700f, 0x0800, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac,
+ 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009,
+ 0x1880, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009,
+ 0x187e, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbabc, 0xd28c, 0x1108,
+ 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130,
+ 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026,
+ 0x60c3, 0x0014, 0x00de, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003,
+ 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804,
+ 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0200, 0x0804, 0x918b, 0x080c,
+ 0x93e9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3,
+ 0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b,
+ 0x000b, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0026, 0x00d6, 0x0036,
+ 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6,
+ 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0xa190,
+ 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,
+ 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e,
+ 0x00de, 0x080c, 0x9893, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027,
+ 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0xa190,
+ 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878,
+ 0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003,
+ 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005,
+ 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800,
+ 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021,
+ 0x0100, 0x080c, 0xa190, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
+ 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128,
+ 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c,
+ 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de,
+ 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
+ 0x024c, 0x002e, 0x0005, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222,
+ 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6,
+ 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
+ 0x908a, 0x0085, 0x0a0c, 0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3,
+ 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082,
+ 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,
+ 0x9457, 0x9466, 0x9471, 0x9455, 0x9455, 0x9455, 0x9457, 0x9455,
+ 0x9455, 0x9455, 0x9455, 0x9455, 0x9455, 0x080c, 0x0dc3, 0x0411,
+ 0x60c3, 0x0000, 0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101,
+ 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x98a5, 0x0431, 0x7808,
+ 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804,
+ 0x98a5, 0x04a1, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004,
+ 0x0804, 0x98a5, 0x0026, 0x080c, 0xa190, 0xb810, 0x9085, 0x8100,
+ 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,
+ 0x700e, 0x7013, 0x0009, 0x0804, 0x93b9, 0x0026, 0x080c, 0xa190,
+ 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+ 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20, 0x9296,
+ 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x0026, 0x080c,
+ 0xa190, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, 0x2069,
+ 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20,
+ 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x00b6,
+ 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,
+ 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dc3, 0x908a, 0x0054,
+ 0x1a0c, 0x0dc3, 0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a,
+ 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+ 0x0005, 0x94f6, 0x95bd, 0x9590, 0x96df, 0x94f4, 0x94f4, 0x94f4,
+ 0x94f4, 0x94f4, 0x94f4, 0x94f4, 0x9cc0, 0x9cc5, 0x9cca, 0x9ccf,
+ 0x94f4, 0xa0be, 0x94f4, 0x9cbb, 0x080c, 0x0dc3, 0x0096, 0x780b,
+ 0xffff, 0x080c, 0x9561, 0x7914, 0x2148, 0xa97c, 0x7956, 0xae68,
+ 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032, 0xa8bc,
+ 0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132, 0xa980,
+ 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118,
+ 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c,
+ 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047,
+ 0x0002, 0x9686, 0x0008, 0x1118, 0x080c, 0x17ff, 0x0010, 0x080c,
+ 0x16c1, 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047,
+ 0x0000, 0x9016, 0x2230, 0x0010, 0xaab4, 0xaeb0, 0x726a, 0x766e,
+ 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080,
+ 0x0024, 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018,
+ 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001,
+ 0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df, 0x2003, 0x0009, 0x009e,
+ 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8bc, 0xd084, 0x0180,
+ 0x2001, 0x1aab, 0x200c, 0x8108, 0x2102, 0x2001, 0x1aaa, 0x201c,
+ 0x1218, 0x8318, 0x2302, 0x0ea0, 0x794a, 0x712e, 0x7b46, 0x732a,
0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600,
0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c,
0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005,
0x00d6, 0x0096, 0x0081, 0x7814, 0x2048, 0xa894, 0x7002, 0xa890,
0x7006, 0xa8b4, 0x700a, 0xa8b0, 0x700e, 0x60c3, 0x000c, 0x009e,
- 0x00de, 0x0804, 0x95f7, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
+ 0x00de, 0x0804, 0x98a5, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,
- 0x700e, 0x7013, 0x0889, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
+ 0x700e, 0x7013, 0x0889, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222,
0x2f10, 0x7226, 0x2071, 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c,
- 0x9438, 0x7814, 0x2048, 0x080c, 0xb953, 0x1130, 0x7814, 0x9084,
+ 0x96bd, 0x7814, 0x2048, 0x080c, 0xc1cb, 0x1130, 0x7814, 0x9084,
0x0700, 0x8007, 0x0033, 0x0010, 0x9006, 0x001b, 0x009e, 0x00de,
- 0x0005, 0x9393, 0x93f0, 0x93fa, 0x9412, 0x9418, 0x9424, 0x9427,
- 0x9391, 0x080c, 0x0dc4, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003,
- 0x0118, 0x9186, 0x0003, 0x1170, 0xabac, 0x7316, 0xa89c, 0x701a,
- 0xa898, 0x701e, 0x003e, 0x001e, 0x2001, 0x198e, 0x2004, 0x60c2,
- 0x0804, 0x95f7, 0x9186, 0x0001, 0x190c, 0x0dc4, 0xabac, 0x7316,
- 0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0, 0x702e,
- 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8b0,
- 0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085, 0x0010,
- 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9,
- 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098, 0x4003,
- 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005,
- 0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003, 0x0118,
- 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, 0x95f7,
- 0x7017, 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x7017,
- 0x0028, 0x00d0, 0x7017, 0x0302, 0x7027, 0x0012, 0x702f, 0x0008,
+ 0x0005, 0x95db, 0x9644, 0x9654, 0x967a, 0x9686, 0x9697, 0x969f,
+ 0x95d9, 0x080c, 0x0dc3, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003,
+ 0x0118, 0x9186, 0x0003, 0x1198, 0xabac, 0x7824, 0xd0cc, 0x1168,
+ 0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0x003e, 0x001e, 0x2001,
+ 0x198e, 0x2004, 0x60c2, 0x0804, 0x98a5, 0xc3e5, 0x0c88, 0x9186,
+ 0x0001, 0x190c, 0x0dc3, 0xabac, 0x7824, 0xd0cc, 0x1904, 0x9641,
+ 0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0,
+ 0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110,
+ 0xa8b0, 0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085,
+ 0x0010, 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156,
+ 0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098,
+ 0x4003, 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9,
+ 0x0005, 0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003,
+ 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804,
+ 0x98a5, 0xc3e5, 0x0804, 0x9600, 0x2011, 0x0008, 0x2001, 0x180f,
+ 0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110,
+ 0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c,
+ 0x701a, 0x7930, 0x711e, 0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824,
+ 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027, 0x0012, 0x702f, 0x0008,
0x7043, 0x7000, 0x7047, 0x0500, 0x704f, 0x000a, 0x2069, 0x0200,
0x6813, 0x0009, 0x2071, 0x0240, 0x700b, 0x2500, 0x60c3, 0x0032,
- 0x0804, 0x95f7, 0x7017, 0x0028, 0x60c3, 0x0018, 0x0804, 0x95f7,
- 0x7017, 0x0100, 0x702f, 0x0008, 0x7828, 0x9084, 0x00ff, 0x7036,
- 0x60c3, 0x0020, 0x0804, 0x95f7, 0x7017, 0x0008, 0x0c68, 0x0036,
- 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1118,
- 0x7216, 0x003e, 0x0c08, 0x7017, 0x0800, 0x701e, 0x003e, 0x08e0,
- 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, 0xb814,
- 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x7013,
- 0x0898, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
- 0x2071, 0x024c, 0x00de, 0x0005, 0x0016, 0x7814, 0x9084, 0x0700,
- 0x8007, 0x0013, 0x001e, 0x0005, 0x9464, 0x9464, 0x9466, 0x9464,
- 0x9464, 0x9464, 0x9480, 0x9464, 0x080c, 0x0dc4, 0x7914, 0x918c,
- 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069,
- 0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007,
- 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x95f7,
- 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c,
- 0x9d0b, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006,
- 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888,
- 0x918d, 0x0008, 0x7116, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
- 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6,
- 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810,
- 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820,
- 0x90be, 0x0006, 0x0904, 0x9577, 0x90be, 0x000a, 0x1904, 0x9533,
- 0xb8ac, 0x609e, 0x7814, 0x2048, 0xa880, 0xd0fc, 0x0558, 0xaf94,
- 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006,
- 0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf98,
- 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082,
- 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129,
- 0x6077, 0x0000, 0xb8ac, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705,
- 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa880,
- 0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808,
- 0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000,
- 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa838,
- 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c,
- 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0x9cf0, 0x2009,
- 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58,
- 0x080c, 0x8425, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee,
- 0x009e, 0x00be, 0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x95aa,
- 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809,
- 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000,
- 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
- 0x6082, 0x7808, 0x6086, 0x7814, 0x2048, 0xa838, 0x608a, 0xa834,
- 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbaac,
- 0x629e, 0x080c, 0x9cf0, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0,
- 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x8425, 0x003e, 0x004e,
- 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814,
- 0x2048, 0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x05d8, 0x9185,
- 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077,
- 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
- 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa894, 0x608a,
- 0xa890, 0x608e, 0xa8b4, 0x60c6, 0xa8b0, 0x60ca, 0xb86c, 0x60ce,
- 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac, 0x629e, 0x080c, 0x9cd2,
- 0x0804, 0x9563, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
+ 0x0804, 0x98a5, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216,
+ 0x60c3, 0x0018, 0x0804, 0x98a5, 0x0cd0, 0xc2e5, 0x2011, 0x0100,
+ 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858,
+ 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020, 0x0804, 0x98a5, 0x2011,
+ 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036,
+ 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138,
+ 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046,
+ 0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5,
+ 0x7416, 0x004e, 0x701e, 0x003e, 0x0818, 0x00d6, 0x6813, 0x0008,
+ 0xb810, 0x9085, 0x0700, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+ 0x6878, 0x700a, 0x687c, 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013,
+ 0x0898, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
+ 0x2071, 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016,
+ 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x96ef,
+ 0x96ef, 0x96f1, 0x96ef, 0x96ef, 0x96ef, 0x970b, 0x96ef, 0x080c,
+ 0x0dc3, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009,
+ 0x0003, 0x00b9, 0x2069, 0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c,
+ 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3,
+ 0x0001, 0x0804, 0x98a5, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00,
+ 0x0cb0, 0x0016, 0x080c, 0xa190, 0x001e, 0xb810, 0x9085, 0x0100,
+ 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c,
+ 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x9893,
+ 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096,
+ 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
+ 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14,
+ 0x7378, 0x747c, 0x7820, 0x90be, 0x0006, 0x0904, 0x9802, 0x90be,
+ 0x000a, 0x1904, 0x97be, 0xb8b0, 0x609e, 0x7814, 0x2048, 0xa880,
+ 0xd0fc, 0x0558, 0xaf94, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f,
+ 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005,
+ 0x000e, 0x1160, 0xaf98, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705,
+ 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,
+ 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8b0, 0x609e, 0x0050,
+ 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062,
+ 0x6073, 0x2029, 0xa880, 0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120,
+ 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077,
+ 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
+ 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
+ 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
+ 0x080c, 0xa175, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005,
+ 0x0110, 0x2009, 0x1b58, 0x080c, 0x8591, 0x003e, 0x004e, 0x005e,
+ 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086,
+ 0x0040, 0x0904, 0x983e, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
+ 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7,
+ 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
+ 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048,
+ 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
+ 0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c, 0xa175, 0x2009, 0x07d0,
+ 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c,
+ 0x8591, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e,
+ 0x00be, 0x0005, 0x7814, 0x2048, 0xa880, 0x9084, 0x0003, 0x9086,
+ 0x0002, 0x0904, 0x985a, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
+ 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,
+ 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086,
+ 0x7808, 0x6082, 0xa894, 0x608a, 0xa890, 0x608e, 0xa8b4, 0x60c6,
+ 0xa8b0, 0x60ca, 0xa8b0, 0x7930, 0x9108, 0x7932, 0xa8b4, 0x792c,
+ 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
+ 0xbab0, 0x629e, 0x080c, 0xa152, 0x0804, 0x97ee, 0xb8bc, 0xd084,
+ 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x784a, 0xa836, 0x2900,
+ 0xa83a, 0xb046, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000,
- 0x0804, 0x9546, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
- 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff,
- 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
- 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844,
- 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac,
- 0x629e, 0x080c, 0x9cd2, 0x0804, 0x9563, 0x7a10, 0x00b6, 0x2258,
- 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005,
- 0x00d6, 0x2069, 0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3,
- 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8417, 0x0005, 0x0016,
- 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,
- 0x0089, 0x080c, 0x8417, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,
- 0x2102, 0x2001, 0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003,
- 0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009,
- 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,
- 0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008,
- 0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,
- 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,
- 0x0140, 0x080c, 0x72e5, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005,
- 0x15d0, 0x080c, 0x7393, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4,
- 0x1120, 0x6024, 0xd084, 0x090c, 0x0dc4, 0x080c, 0x8417, 0x0458,
- 0x00c6, 0x2061, 0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540,
- 0x0811, 0x080c, 0x2b75, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192,
- 0x0008, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198,
- 0x080c, 0x8417, 0x080c, 0x961a, 0x0070, 0x6124, 0x91e5, 0x0000,
- 0x0140, 0x080c, 0xd36d, 0x080c, 0x8420, 0x2009, 0x0014, 0x080c,
- 0x9f88, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,
- 0x2001, 0x19e0, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4,
- 0x6128, 0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c,
- 0x8417, 0x080c, 0x5db5, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a,
- 0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
- 0x842d, 0x2071, 0x19c4, 0x713c, 0x81ff, 0x0904, 0x9711, 0x2061,
- 0x0100, 0x2069, 0x0140, 0x080c, 0x72e5, 0x1198, 0x0036, 0x2019,
- 0x0002, 0x080c, 0x9964, 0x003e, 0x080c, 0xd36d, 0x703c, 0x9065,
- 0x0120, 0x2009, 0x004a, 0x080c, 0x9f88, 0x080c, 0x7393, 0x0804,
- 0x9711, 0x080c, 0x971d, 0x0904, 0x9711, 0x6904, 0xd1f4, 0x0904,
- 0x9718, 0x080c, 0x2b75, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc4,
- 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105,
- 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294,
- 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4,
- 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2aa7, 0x6014, 0x9084, 0xe7fd,
- 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c,
- 0x9f88, 0x0078, 0x080c, 0xd36d, 0x0036, 0x2019, 0x0001, 0x080c,
- 0x9964, 0x003e, 0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c,
- 0x9f88, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005,
- 0xd1ec, 0x1904, 0x96d1, 0x0804, 0x96d3, 0x00d6, 0x00c6, 0x0096,
- 0x703c, 0x9065, 0x090c, 0x0dc4, 0x2001, 0x0306, 0x200c, 0x9184,
- 0x0030, 0x0904, 0x97e9, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904,
- 0x97e9, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
- 0x1904, 0x97e9, 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c,
- 0x9116, 0x9084, 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110,
- 0x9102, 0x0030, 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102,
- 0x9082, 0x0005, 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004,
- 0x8004, 0x8004, 0x9102, 0x1a04, 0x97e9, 0x2009, 0x1a5f, 0x2104,
- 0x8000, 0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984,
- 0x918d, 0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106,
- 0x1904, 0x97c2, 0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800,
- 0x00c6, 0x2061, 0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e,
- 0x200c, 0x2001, 0x012c, 0x080c, 0x1a37, 0x602c, 0xd0b4, 0x1d98,
- 0x2001, 0x022e, 0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce,
- 0x2001, 0x009a, 0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000,
- 0x2001, 0x1a4d, 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105,
- 0x1170, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884,
- 0xc0fc, 0xa886, 0x009e, 0x2c10, 0x080c, 0x1aa2, 0x0040, 0x6014,
- 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126,
- 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1b2e, 0x190c, 0x0dc4,
- 0x012e, 0x0090, 0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a,
- 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0,
- 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827,
- 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a,
- 0x2009, 0x07d0, 0x080c, 0x8425, 0x9006, 0x009e, 0x00ce, 0x00de,
- 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4,
- 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100,
- 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084,
- 0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984,
- 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6,
- 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091,
- 0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058,
- 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0,
- 0x6014, 0x0096, 0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c,
- 0x6548, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e,
- 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x9171,
- 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff,
- 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x0156,
- 0x080c, 0x91bc, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312,
- 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002,
- 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
- 0x1f04, 0x9860, 0x60c3, 0x001c, 0x015e, 0x0804, 0x95f7, 0x0016,
- 0x0026, 0x080c, 0x9198, 0x080c, 0x91aa, 0x9e80, 0x0004, 0x20e9,
- 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860,
- 0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808, 0x9088,
- 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004,
- 0x8003, 0x60c2, 0x080c, 0x95f7, 0x002e, 0x001e, 0x0005, 0x20a9,
- 0x0010, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x0240, 0x22a8, 0x4003,
- 0x0c68, 0x080c, 0x9171, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3,
- 0x0008, 0x0804, 0x95f7, 0x0016, 0x0026, 0x080c, 0x9171, 0x20e9,
- 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
- 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e, 0x7808,
- 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x95f7,
- 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091,
- 0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c,
- 0xbb56, 0x1110, 0x080c, 0xa717, 0x600c, 0x0006, 0x080c, 0xbc8f,
- 0x080c, 0x9f18, 0x080c, 0x9a08, 0x00ce, 0x0c78, 0x2c00, 0x700e,
- 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
- 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
- 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102,
- 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024, 0x2060,
- 0x8cff, 0x01f8, 0x080c, 0x9623, 0x6ac0, 0x68c3, 0x0000, 0x080c,
- 0x8420, 0x00c6, 0x2061, 0x0100, 0x080c, 0x9d0f, 0x00ce, 0x20a9,
- 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0x9f88, 0x000e, 0x001e,
- 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
- 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096,
- 0x0004, 0x0d60, 0x080c, 0x8420, 0x6814, 0x9084, 0x0001, 0x0110,
- 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5d5f,
- 0x080c, 0x835e, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094,
- 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75,
- 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04, 0x9946,
- 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65,
- 0x9006, 0x080c, 0x2b65, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6,
- 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000,
- 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100,
- 0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff, 0x0904,
- 0x99cb, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904,
- 0x99cb, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109,
- 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x842d, 0x080c, 0x1eda,
- 0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8, 0x692c,
- 0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140,
- 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75, 0x0090,
- 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x99a5, 0x7804,
- 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006,
- 0x080c, 0x2b65, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120, 0x2009,
- 0x0049, 0x080c, 0x9f88, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce,
- 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
- 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de, 0x0005,
- 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32, 0x012e,
- 0x00de, 0x0005, 0x080c, 0x932c, 0x7047, 0x1000, 0x0098, 0x080c,
- 0x932c, 0x7047, 0x4000, 0x0070, 0x080c, 0x932c, 0x7047, 0x2000,
- 0x0048, 0x080c, 0x932c, 0x7047, 0x0400, 0x0020, 0x080c, 0x932c,
- 0x7047, 0x0200, 0x7824, 0x7032, 0x60c3, 0x0020, 0x0804, 0x95f7,
- 0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022,
- 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
- 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614, 0x2660,
- 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9aab, 0x8cff, 0x0904,
- 0x9aab, 0x6020, 0x9086, 0x0006, 0x1904, 0x9aa6, 0x88ff, 0x0138,
- 0x2800, 0x9c06, 0x1904, 0x9aa6, 0x2039, 0x0000, 0x0050, 0x6010,
- 0x9b06, 0x1904, 0x9aa6, 0x85ff, 0x0120, 0x6024, 0x9106, 0x1904,
- 0x9aa6, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,
- 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8420,
- 0x080c, 0x9b30, 0x7027, 0x0000, 0x0428, 0x080c, 0x8420, 0x6820,
- 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
- 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
- 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006,
- 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
- 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,
- 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,
- 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
- 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c,
- 0xb953, 0x0110, 0x080c, 0xd101, 0x009e, 0x080c, 0x9f42, 0x080c,
- 0x9a08, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9a23, 0x2c78, 0x600c,
- 0x2060, 0x0804, 0x9a23, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e,
- 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
- 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6,
- 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4,
- 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9b1f, 0x6020, 0x9086,
- 0x0006, 0x1904, 0x9b1a, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904,
- 0x9b1a, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x6024,
- 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,
- 0x080c, 0x9964, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046,
- 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034,
- 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010,
- 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
- 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb953,
- 0x0110, 0x080c, 0xd101, 0x080c, 0x9f42, 0x87ff, 0x1198, 0x00ce,
- 0x0804, 0x9acb, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9acb, 0x9006,
- 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee,
- 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80,
- 0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002,
- 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005,
- 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
- 0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff,
- 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038, 0x9c36, 0x1110, 0x660c,
- 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
- 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110,
- 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6004, 0x9086, 0x0040,
- 0x090c, 0x8b2b, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060,
- 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe,
- 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
- 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c, 0x2660,
- 0x2678, 0x8cff, 0x0904, 0x9c16, 0x6010, 0x00b6, 0x2058, 0xb8a0,
- 0x00be, 0x9206, 0x1904, 0x9c11, 0x7024, 0x9c06, 0x1520, 0x2069,
- 0x0100, 0x68c0, 0x9005, 0x0904, 0x9be8, 0x080c, 0x9623, 0x68c3,
- 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
- 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65,
- 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
- 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e,
- 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a,
- 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
- 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xbb45, 0x1180,
- 0x080c, 0x308f, 0x080c, 0xbb56, 0x1518, 0x080c, 0xa717, 0x0400,
- 0x080c, 0x9b30, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001, 0x0898,
- 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0090, 0x6014, 0x2048,
- 0x080c, 0xb953, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa86b,
- 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c, 0xbb39,
- 0x080c, 0xbc8f, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804,
- 0x9b91, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9b91, 0x012e, 0x000e,
- 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005,
- 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xd101, 0x0c08, 0x00d6,
- 0x080c, 0x91bc, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014,
- 0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9, 0x0000, 0x20a1, 0x0250,
- 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c,
- 0x95f7, 0x00de, 0x0005, 0x080c, 0x91bc, 0x700b, 0x0800, 0x7814,
- 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c,
- 0x7026, 0x7828, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7828,
- 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x95f7, 0x080c,
- 0x91bc, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238,
+ 0x0804, 0x97d1, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
+ 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073,
+ 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
+ 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
+ 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
+ 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e,
+ 0x7824, 0xd0cc, 0x0120, 0x080c, 0xa175, 0x0804, 0x97ee, 0x080c,
+ 0xa152, 0x0804, 0x97ee, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210,
+ 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069,
+ 0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7,
+ 0x9575, 0x00f1, 0x080c, 0x8583, 0x0005, 0x0016, 0x2001, 0x180c,
+ 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c,
+ 0x8583, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001,
+ 0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003, 0x0000, 0x0c88,
+ 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e,
+ 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7,
+ 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e,
+ 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6,
+ 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c,
+ 0x7351, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005, 0x15d0, 0x080c,
+ 0x73fe, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024,
+ 0xd084, 0x090c, 0x0dc3, 0x080c, 0x8583, 0x0458, 0x00c6, 0x2061,
+ 0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540, 0x0811, 0x080c,
+ 0x2bde, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192, 0x0008, 0x1258,
+ 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8583,
+ 0x080c, 0x98c8, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c,
+ 0xe0fa, 0x080c, 0x858c, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce,
+ 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19e0,
+ 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192,
+ 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8583, 0x080c,
+ 0x5e72, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096,
+ 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8599, 0x2071,
+ 0x19c4, 0x713c, 0x81ff, 0x0904, 0x99bf, 0x2061, 0x0100, 0x2069,
+ 0x0140, 0x080c, 0x7351, 0x1198, 0x0036, 0x2019, 0x0002, 0x080c,
+ 0x9c35, 0x003e, 0x080c, 0xe0fa, 0x703c, 0x9065, 0x0120, 0x2009,
+ 0x004a, 0x080c, 0xa419, 0x080c, 0x73fe, 0x0804, 0x99bf, 0x080c,
+ 0x99cb, 0x0904, 0x99bf, 0x6904, 0xd1f4, 0x0904, 0x99c6, 0x080c,
+ 0x2bde, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc3, 0x6020, 0x00ce,
+ 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009,
+ 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128,
+ 0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4, 0x200a, 0xd0cc,
+ 0x0110, 0x080c, 0x2b10, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010,
+ 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0xa419, 0x0078,
+ 0x080c, 0xe0fa, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x003e,
+ 0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c, 0xa419, 0x002e,
+ 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904,
+ 0x997f, 0x0804, 0x9981, 0x00d6, 0x00c6, 0x0096, 0x703c, 0x9065,
+ 0x090c, 0x0dc3, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030, 0x0904,
+ 0x9a97, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x9a97, 0x2009,
+ 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1904, 0x9a97,
+ 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c, 0x9116, 0x9084,
+ 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110, 0x9102, 0x0030,
+ 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102, 0x9082, 0x0005,
+ 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004, 0x8004, 0x8004,
+ 0x9102, 0x1a04, 0x9a97, 0x2009, 0x1a5f, 0x2104, 0x8000, 0x0208,
+ 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984, 0x918d, 0x0010,
+ 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1904, 0x9a70,
+ 0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800, 0x00c6, 0x2061,
+ 0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e, 0x200c, 0x2001,
+ 0x012c, 0x080c, 0x1a7f, 0x602c, 0xd0b4, 0x1d98, 0x2001, 0x022e,
+ 0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce, 0x2001, 0x009a,
+ 0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000, 0x2001, 0x1a4d,
+ 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1170, 0x0096,
+ 0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884, 0xc0fc, 0xa886,
+ 0x009e, 0x2c10, 0x080c, 0x1aea, 0x0040, 0x6014, 0x2048, 0xaa3a,
+ 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6, 0x2091,
+ 0x2400, 0x002e, 0x080c, 0x1b76, 0x190c, 0x0dc3, 0x012e, 0x0090,
+ 0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a, 0x69c8, 0x2011,
+ 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4, 0x68c8,
+ 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827, 0x0002, 0x7048,
+ 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a, 0x2009, 0x07d0,
+ 0x080c, 0x8591, 0x9006, 0x009e, 0x00ce, 0x00de, 0x0005, 0x9085,
+ 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4, 0x7048, 0xd084,
+ 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008,
+ 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085,
+ 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016,
+ 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6,
+ 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010,
+ 0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058, 0x8bff, 0x0190,
+ 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096,
+ 0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c, 0x6650, 0x0110,
+ 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce,
+ 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x939e, 0x7003, 0x1200,
+ 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004,
+ 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914,
+ 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c, 0x9084, 0x00ff,
+ 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x98a5, 0x080c,
+ 0x939e, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084,
+ 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5,
+ 0x0156, 0x080c, 0x93e9, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0,
+ 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0,
+ 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290,
+ 0x0002, 0x1f04, 0x9b31, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5,
+ 0x0016, 0x0026, 0x080c, 0x93c5, 0x080c, 0x93d7, 0x9e80, 0x0004,
+ 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
+ 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808,
+ 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080,
+ 0x0004, 0x8003, 0x60c2, 0x080c, 0x98a5, 0x002e, 0x001e, 0x0005,
+ 0x20a9, 0x0010, 0x4003, 0x080c, 0xa17b, 0x20a1, 0x0240, 0x22a8,
+ 0x4003, 0x0c68, 0x080c, 0x939e, 0x7003, 0x6200, 0x7808, 0x700e,
+ 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0016, 0x0026, 0x080c, 0x939e,
+ 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800,
+ 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e,
+ 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c,
+ 0x98a5, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126,
+ 0x2091, 0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178,
+ 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x600c, 0x0006, 0x080c,
+ 0xc638, 0x080c, 0xa39d, 0x080c, 0x9cd9, 0x00ce, 0x0c78, 0x2c00,
+ 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126,
+ 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016,
+ 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff,
+ 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024,
+ 0x2060, 0x8cff, 0x01f8, 0x080c, 0x98d1, 0x6ac0, 0x68c3, 0x0000,
+ 0x080c, 0x858c, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa194, 0x00ce,
+ 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xa419, 0x000e,
+ 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e,
+ 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78,
+ 0x9096, 0x0004, 0x0d60, 0x080c, 0x858c, 0x6814, 0x9084, 0x0001,
+ 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824,
+ 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c,
+ 0x2bde, 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04,
+ 0x9c17, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+ 0x2bce, 0x9006, 0x080c, 0x2bce, 0x0005, 0x0126, 0x0156, 0x00f6,
+ 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091,
+ 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069,
+ 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff,
+ 0x0904, 0x9c9c, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002,
+ 0x0904, 0x9c9c, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa,
+ 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8599, 0x080c,
+ 0x1f22, 0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8,
+ 0x692c, 0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094,
+ 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2bde,
+ 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x9c76,
+ 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce,
+ 0x9006, 0x080c, 0x2bce, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120,
+ 0x2009, 0x0049, 0x080c, 0xa419, 0x000e, 0x001e, 0x002e, 0x006e,
+ 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
+ 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de,
+ 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32,
+ 0x012e, 0x00de, 0x0005, 0x080c, 0x9561, 0x7047, 0x1000, 0x0098,
+ 0x080c, 0x9561, 0x7047, 0x4000, 0x0070, 0x080c, 0x9561, 0x7047,
+ 0x2000, 0x0048, 0x080c, 0x9561, 0x7047, 0x0400, 0x0020, 0x080c,
+ 0x9561, 0x7047, 0x0200, 0x7854, 0x7032, 0x60c3, 0x0020, 0x0804,
+ 0x98a5, 0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001,
+ 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076,
+ 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614,
+ 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9d7e, 0x8cff,
+ 0x0904, 0x9d7e, 0x6020, 0x9086, 0x0006, 0x1904, 0x9d79, 0x88ff,
+ 0x0138, 0x2800, 0x9c06, 0x1904, 0x9d79, 0x2039, 0x0000, 0x0050,
+ 0x6010, 0x9b06, 0x1904, 0x9d79, 0x85ff, 0x0120, 0x6054, 0x9106,
+ 0x1904, 0x9d79, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0,
+ 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c,
+ 0x858c, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0428, 0x080c, 0x858c,
+ 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3,
+ 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
+ 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce,
+ 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
+ 0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
+ 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012,
+ 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
+ 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014,
+ 0x0096, 0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x009e,
+ 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x88ff, 0x1190, 0x00ce, 0x0804,
+ 0x9cf4, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9cf4, 0x9006, 0x012e,
+ 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
+ 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6,
+ 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
+ 0x8000, 0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904,
+ 0x9df2, 0x6020, 0x9086, 0x0006, 0x1904, 0x9ded, 0x87ff, 0x0128,
+ 0x2700, 0x9c06, 0x1904, 0x9ded, 0x0040, 0x6010, 0x9b06, 0x15e8,
+ 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168,
+ 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000, 0x9006,
+ 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110,
+ 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
+ 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00,
+ 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014,
+ 0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x080c, 0xa3cf,
+ 0x87ff, 0x1198, 0x00ce, 0x0804, 0x9d9e, 0x2c78, 0x600c, 0x2060,
+ 0x0804, 0x9d9e, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
+ 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
+ 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800,
+ 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007,
+ 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026,
+ 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638,
+ 0x2660, 0x2678, 0x8cff, 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038,
+ 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
+ 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
+ 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+ 0x6004, 0x9086, 0x0040, 0x090c, 0x8d2c, 0x9085, 0x0001, 0x0020,
+ 0x2c78, 0x600c, 0x2060, 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e,
+ 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6,
+ 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
+ 0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9ee9, 0x6010,
+ 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x9ee4, 0x7024,
+ 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x9ebb,
+ 0x080c, 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000,
+ 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
+ 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100,
+ 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36,
+ 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36,
+ 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066,
+ 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+ 0x080c, 0xc3c0, 0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518,
+ 0x080c, 0xadb3, 0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0,
+ 0x6827, 0x0001, 0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3,
+ 0x0090, 0x6014, 0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086,
+ 0x0003, 0x1508, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c,
+ 0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c,
+ 0x9cd9, 0x00ce, 0x0804, 0x9e64, 0x2c78, 0x600c, 0x2060, 0x0804,
+ 0x9e64, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
+ 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c,
+ 0xdcc3, 0x0c08, 0x00d6, 0x080c, 0x93e9, 0x7003, 0x0200, 0x7007,
+ 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9,
+ 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004,
+ 0x7027, 0x7878, 0x080c, 0x98a5, 0x00de, 0x0005, 0x080c, 0x93e9,
+ 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084,
+ 0x00ff, 0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085,
+ 0x0200, 0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2,
+ 0x0804, 0x98a5, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009,
+ 0x0035, 0x080c, 0xc83f, 0x00de, 0x1904, 0x9f97, 0x080c, 0x939e,
+ 0x7003, 0x1300, 0x782c, 0x080c, 0xa09d, 0x2068, 0x6820, 0x9086,
+ 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xa307, 0x11d8,
+ 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498,
+ 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458,
+ 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff,
+ 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a,
+ 0xb814, 0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xa307,
+ 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6,
+ 0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de,
+ 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
+ 0x000c, 0x001e, 0x00de, 0x080c, 0x98a5, 0x00be, 0x0005, 0x781b,
+ 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c,
+ 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003,
+ 0x0904, 0xa012, 0x9186, 0x0005, 0x0904, 0x9ffa, 0x9186, 0x0004,
+ 0x05d8, 0x9186, 0x0008, 0x0904, 0xa003, 0x7807, 0x0037, 0x782f,
+ 0x0003, 0x7817, 0x1700, 0x080c, 0xa07a, 0x0005, 0x080c, 0xa03b,
+ 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002,
+ 0x9fdb, 0x9fe6, 0x9fdd, 0x9fe6, 0x9fe2, 0x9fdb, 0x9fdb, 0x9fe6,
+ 0x9fe6, 0x9fe6, 0x9fe6, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb,
+ 0x9fe6, 0x9fdb, 0x9fe6, 0x080c, 0x0dc3, 0x6824, 0xd0e4, 0x0110,
+ 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022,
+ 0x6830, 0x7026, 0x0804, 0xa034, 0x080c, 0xa03b, 0x00d6, 0x0026,
+ 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108,
+ 0x900e, 0x04d0, 0x080c, 0xa03b, 0x00d6, 0x0026, 0x792c, 0x2168,
+ 0x2009, 0x4000, 0x0488, 0x04b9, 0x00d6, 0x0026, 0x792c, 0x2168,
+ 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108,
+ 0x900e, 0x0410, 0x0441, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814,
+ 0x6924, 0xc185, 0x6926, 0x0096, 0x2048, 0xa9b0, 0xa834, 0x9112,
+ 0xa9b4, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180,
+ 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118,
+ 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e,
+ 0x00de, 0x0804, 0x98a5, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066,
+ 0x080c, 0x93e9, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c,
+ 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xa307, 0x1118, 0x9092,
+ 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34,
+ 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e,
+ 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004,
+ 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020,
+ 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e,
+ 0x00be, 0x0005, 0x080c, 0x93e9, 0x7003, 0x0100, 0x782c, 0x700a,
+ 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c,
+ 0x9395, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e,
+ 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007,
+ 0x701a, 0x60c3, 0x0010, 0x0804, 0x98a5, 0x00e6, 0x2071, 0x0240,
+ 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084,
+ 0x0120, 0x7844, 0x702a, 0x7848, 0x702e, 0x00be, 0x00fe, 0x000e,
+ 0x00ee, 0x0005, 0x080c, 0x93e0, 0x7003, 0x0100, 0x782c, 0x700a,
+ 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0021, 0x60c3,
+ 0x0000, 0x0804, 0x98a5, 0x00d6, 0x080c, 0xa190, 0xb810, 0x9085,
+ 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a,
+ 0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x9893, 0x721a, 0x2f10,
+ 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x080c,
+ 0x93e9, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238,
0x9286, 0x0004, 0x2001, 0x8000, 0x0138, 0x9286, 0x0007, 0x2001,
0x4000, 0x0110, 0x2001, 0x0002, 0x700e, 0x60c3, 0x0008, 0x0804,
- 0x95f7, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575,
- 0x0026, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
- 0x2012, 0x002e, 0x080c, 0x961a, 0x080c, 0x8417, 0x0005, 0x0036,
- 0x0096, 0x00d6, 0x00e6, 0x7828, 0x2048, 0xaa80, 0x9296, 0x00c0,
+ 0x98a5, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575,
+ 0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
+ 0x2012, 0x002e, 0x080c, 0x98c8, 0x080c, 0x8583, 0x0005, 0x0036,
+ 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa80, 0x9296, 0x00c0,
0x9294, 0x00fd, 0xaa82, 0xaa84, 0x9294, 0x0300, 0xaa86, 0xa970,
0x9194, 0x00ff, 0xab78, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa972,
0x9384, 0xff00, 0x9215, 0xaa7a, 0xa874, 0xaa7c, 0xa87e, 0xaa76,
- 0x00d6, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x00de, 0x20e9, 0x0000,
+ 0x00d6, 0x2069, 0x0200, 0x080c, 0xa190, 0x00de, 0x20e9, 0x0000,
0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080,
0x001c, 0x2098, 0x4003, 0x60a3, 0x0035, 0xaa6c, 0x9294, 0x7000,
0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e,
0x003e, 0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa880, 0xd0fc,
- 0x0198, 0x9084, 0x0003, 0x1180, 0x2001, 0x180c, 0x2004, 0xd0bc,
- 0x0158, 0xa8ac, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5,
- 0x2102, 0x2009, 0x198f, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010,
- 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009,
- 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009,
- 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028,
- 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6,
- 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813,
- 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292,
- 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff,
- 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6,
- 0x0096, 0x6014, 0x2048, 0xa87c, 0x6026, 0x9006, 0xa836, 0xa83a,
- 0xa9a0, 0xa946, 0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003,
- 0x0003, 0x600b, 0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900,
- 0xa85a, 0xa813, 0x1f6e, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x8d06, 0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6,
- 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000,
- 0x2071, 0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9de2,
- 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,
- 0x9db4, 0x080c, 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027,
- 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
- 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069,
- 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c,
- 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00,
- 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c,
- 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
- 0x0000, 0x080c, 0xbb45, 0x1180, 0x080c, 0x308f, 0x080c, 0xbb56,
- 0x1518, 0x080c, 0xa717, 0x0400, 0x080c, 0x9b30, 0x6824, 0xd084,
- 0x09b0, 0x6827, 0x0001, 0x0898, 0x080c, 0xbb56, 0x1118, 0x080c,
- 0xa717, 0x0090, 0x6014, 0x2048, 0x080c, 0xb953, 0x0168, 0x6020,
- 0x9086, 0x0003, 0x1520, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
- 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x080c, 0xbc8f, 0x080c, 0x9f42,
- 0x080c, 0x9a08, 0x00ce, 0x0804, 0x9d65, 0x2c78, 0x600c, 0x2060,
- 0x0804, 0x9d65, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e,
- 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
- 0x9086, 0x0006, 0x1d08, 0x080c, 0xd101, 0x08f0, 0x00d6, 0x0156,
- 0x080c, 0x91bc, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b,
- 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000,
- 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d,
- 0x0060, 0x080c, 0x72e5, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8,
- 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848,
- 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841,
- 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002,
- 0x9290, 0x0002, 0x1f04, 0x9e2a, 0x60c3, 0x0020, 0x080c, 0x95f7,
- 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x91bc, 0x7a14, 0x82ff,
- 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003,
- 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200,
- 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x199a, 0x2204, 0x8007,
- 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0,
- 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001,
- 0x181f, 0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084,
- 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805,
- 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e,
- 0x0804, 0x95f7, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e,
- 0x0005, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c,
- 0x99e0, 0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e,
- 0x0005, 0x080c, 0x31c5, 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010,
- 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x6411, 0xb85c,
- 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, 0x188e,
- 0x7000, 0x9005, 0x0140, 0x2001, 0x12ee, 0x2071, 0x1800, 0x7072,
- 0x7076, 0x7067, 0xfff0, 0x2071, 0x1800, 0x7070, 0x7052, 0x7057,
- 0x1cc8, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000,
- 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086,
- 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208, 0x0cb0,
- 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8,
- 0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e,
- 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0, 0x00e6,
- 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060,
- 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02,
- 0x1208, 0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529,
- 0x7552, 0x9ca8, 0x000c, 0x7064, 0x9502, 0x1228, 0x7556, 0x9085,
- 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc8, 0x9006, 0x0cc8,
- 0x9c82, 0x1cc8, 0x0a0c, 0x0dc4, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x1a0c, 0x0dc4, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a,
- 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6026, 0x602a,
- 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086, 0x0001, 0x0108,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x8c37, 0x001e,
- 0x012e, 0x0cb0, 0x0006, 0x6000, 0x9086, 0x0000, 0x0190, 0x601c,
- 0xd084, 0x190c, 0x1950, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001,
- 0x1963, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,
- 0x601a, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,
- 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060, 0x6000,
- 0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208,
- 0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552,
- 0x9ca8, 0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001,
- 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0,
- 0x6020, 0x9084, 0x000f, 0x0002, 0x9f9b, 0x9fa4, 0x9fbf, 0x9fda,
- 0xbf64, 0xbf81, 0xbf9c, 0x9f9b, 0x9fa4, 0x9f9b, 0x9ff3, 0x9f9b,
- 0x9f9b, 0x9f9b, 0x9f9b, 0x9186, 0x0013, 0x1128, 0x080c, 0x8b2b,
- 0x080c, 0x8c37, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0010,
- 0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005, 0x9fbd, 0xa57b, 0xa75e,
- 0x9fbd, 0xa7dd, 0x9fbd, 0x9fbd, 0x9fbd, 0xa505, 0xadb7, 0x9fbd,
- 0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x080c, 0x0dc4, 0x0066,
- 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005,
- 0x9fd8, 0xb3cf, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8,
- 0xb37f, 0xb4c6, 0x9fd8, 0xb410, 0xb474, 0xb410, 0xb474, 0x9fd8,
- 0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc4, 0x6000,
- 0x0002, 0x9ff1, 0xadfc, 0xaeb8, 0xafac, 0xb14e, 0x9ff1, 0x9ff1,
- 0x9ff1, 0xadd2, 0xb304, 0xb307, 0x9ff1, 0x9ff1, 0x9ff1, 0x9ff1,
- 0xb336, 0x080c, 0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c,
- 0x0dc4, 0x0013, 0x006e, 0x0005, 0xa00c, 0xa00c, 0xa04f, 0xa0e7,
- 0xa17c, 0xa00c, 0xa00c, 0xa00c, 0xa00e, 0xa00c, 0xa00c, 0xa00c,
- 0xa00c, 0xa00c, 0xa00c, 0xa00c, 0x080c, 0x0dc4, 0x9186, 0x004c,
- 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc4, 0x0096, 0x601c, 0xc0ed,
- 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880, 0x9084,
- 0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0x9006,
- 0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999,
- 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c,
- 0x1aa2, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000, 0x080c, 0x8d06,
- 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00,
- 0x080c, 0xa19e, 0x080c, 0xbf10, 0x6003, 0x0007, 0x0005, 0x00d6,
- 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa880,
- 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046, 0xa8e4,
- 0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f, 0x0007,
- 0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000, 0x8214,
- 0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6,
- 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086,
- 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016,
- 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405,
- 0x0002, 0xa0af, 0xa0af, 0xa0a6, 0xa0a9, 0xa0af, 0xa0a3, 0xa0a1,
- 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1,
- 0xa0a1, 0x080c, 0x0dc4, 0x080c, 0xa9ce, 0x0048, 0x080c, 0xab05,
- 0x0030, 0x080c, 0xabf3, 0x2001, 0x0004, 0x080c, 0x6372, 0x00fe,
- 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a, 0x000e,
- 0x080c, 0xa25c, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100,
- 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
- 0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031, 0x0000,
- 0x2041, 0x1266, 0x080c, 0xa45b, 0x0160, 0x000e, 0x9005, 0x0120,
- 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804,
- 0x9f18, 0x2001, 0x002c, 0x900e, 0x080c, 0xa2c2, 0x0c70, 0x91b6,
- 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c,
- 0x0dc4, 0x91b2, 0x0050, 0x1a0c, 0x0dc4, 0x9182, 0x0047, 0x00ca,
- 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800,
- 0x0006, 0x0016, 0x0026, 0x080c, 0x8689, 0x002e, 0x001e, 0x000e,
- 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xa04f,
- 0x0005, 0xa11a, 0xa11a, 0xa11c, 0xa152, 0xa11a, 0xa11a, 0xa11a,
- 0xa11a, 0xa165, 0x080c, 0x0dc4, 0x00d6, 0x0016, 0x0096, 0x080c,
- 0x8be7, 0x080c, 0x8d06, 0x6003, 0x0004, 0x6114, 0x2148, 0xa880,
- 0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898, 0x9005,
- 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa2c2, 0x080c, 0x9f18,
- 0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178, 0xa8b2,
- 0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8, 0xa8b2,
- 0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e, 0x001e,
- 0x00de, 0x0005, 0x080c, 0x8be7, 0x00d6, 0x0096, 0x6114, 0x2148,
- 0x080c, 0xb955, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6b1d, 0x009e,
- 0x00de, 0x080c, 0x9f18, 0x0804, 0x8d06, 0x080c, 0x8be7, 0x080c,
- 0x3066, 0x080c, 0xbf0d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c,
- 0xb955, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x00de,
- 0x080c, 0x9f18, 0x0804, 0x8d06, 0x9182, 0x0047, 0x0002, 0xa18c,
- 0xa18e, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c,
- 0xa18c, 0xa18c, 0xa18c, 0xa18e, 0x080c, 0x0dc4, 0x00d6, 0x0096,
- 0x080c, 0x154a, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887, 0x0000,
- 0x080c, 0x6b1d, 0x009e, 0x00de, 0x0804, 0x9f18, 0x0026, 0x0036,
- 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1001,
- 0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x001a,
- 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079, 0x1800,
- 0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a, 0x2950,
- 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001,
- 0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xb54b, 0x04c0,
- 0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xb54b, 0x96b2,
- 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c, 0x1001,
- 0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406,
- 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c, 0xb54b,
- 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c,
- 0x080c, 0xb54b, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
- 0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076, 0x0048,
- 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050,
- 0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6b1d,
- 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e,
- 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006,
- 0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c,
- 0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa6a,
- 0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182,
- 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976, 0xac7a,
- 0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205, 0x200c,
- 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6b1d,
- 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096,
- 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e,
- 0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80, 0x000c,
- 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011,
- 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1001,
- 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009,
- 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200,
- 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020,
- 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff,
- 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085,
- 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa271, 0x0804,
- 0xa273, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de,
- 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87e,
- 0xa986, 0x080c, 0x6b11, 0x009e, 0x003e, 0x00de, 0x0005, 0x20a9,
- 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804,
- 0x9005, 0x15c0, 0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8,
- 0xa85c, 0x20a0, 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136,
- 0x9080, 0x001c, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,
- 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,
- 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,
- 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xb955,
- 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e,
- 0x0804, 0x9f18, 0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c,
- 0xa717, 0x0804, 0x9f18, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198,
- 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080,
- 0x000e, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0,
- 0x4003, 0x3318, 0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e,
- 0x20a0, 0x3318, 0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8,
- 0x6014, 0x0096, 0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c,
- 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
- 0x000e, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041,
- 0x1247, 0x080c, 0xa45b, 0x0120, 0x008e, 0x009e, 0x0804, 0x9f18,
- 0x080c, 0xa717, 0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386,
- 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0000, 0x00be,
- 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103,
- 0xab32, 0x080c, 0x9f18, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011,
- 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbef8, 0x0178, 0x6014,
- 0x9005, 0x1160, 0x600b, 0x0003, 0x601b, 0x0000, 0x2009, 0x0022,
- 0x080c, 0xa551, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
+ 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc,
+ 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8ac, 0x9005,
+ 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x198f,
+ 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab,
+ 0x0036, 0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a,
+ 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009,
+ 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010,
+ 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214,
+ 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284,
+ 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016,
+ 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000,
+ 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048,
+ 0xa87c, 0x6056, 0x9006, 0xa836, 0xa83a, 0xa9a0, 0xa946, 0xa84a,
+ 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff,
+ 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1fb6,
+ 0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c, 0x8f0e, 0x012e,
+ 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6,
+ 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c,
+ 0x2660, 0x2678, 0x8cff, 0x0904, 0xa267, 0x7024, 0x9c06, 0x1520,
+ 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa239, 0x080c, 0x98d1,
+ 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069,
+ 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+ 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084,
+ 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c,
+ 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+ 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
+ 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xc3c0,
+ 0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518, 0x080c, 0xadb3,
+ 0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001,
+ 0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0090, 0x6014,
+ 0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520,
+ 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+ 0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x00ce,
+ 0x0804, 0xa1ea, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa1ea, 0x700f,
+ 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce,
+ 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08,
+ 0x080c, 0xdcc3, 0x08f0, 0x00d6, 0x0156, 0x080c, 0x93e9, 0x7a14,
+ 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008,
+ 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e,
+ 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x7351,
+ 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c, 0x1110, 0xd2ac,
+ 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9,
+ 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250, 0x2376,
+ 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04,
+ 0xa2af, 0x60c3, 0x0020, 0x080c, 0x98a5, 0x015e, 0x00de, 0x0005,
+ 0x0156, 0x080c, 0x93e9, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff,
+ 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003,
+ 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f,
+ 0x0001, 0x2011, 0x199a, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204,
+ 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
+ 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, 0x7026,
+ 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9,
+ 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
+ 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5, 0x0006,
+ 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003,
+ 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf,
+ 0x0036, 0x901e, 0x080c, 0x9c35, 0x003e, 0x0005, 0x080c, 0x3261,
+ 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012,
+ 0x2009, 0x007e, 0x080c, 0x64fc, 0xb85c, 0xc0ac, 0xb85e, 0x00ce,
+ 0x00be, 0x001e, 0x0005, 0x2071, 0x188e, 0x7000, 0x9005, 0x0140,
+ 0x2001, 0x0976, 0x2071, 0x1800, 0x7072, 0x7076, 0x7067, 0xffe0,
+ 0x2071, 0x1800, 0x7070, 0x7052, 0x7057, 0x1cd0, 0x0005, 0x00e6,
+ 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0010,
+ 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
+ 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,
+ 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502,
+ 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057,
+ 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550,
+ 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000,
+ 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061,
+ 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018,
+ 0x7064, 0x9502, 0x1228, 0x7556, 0x9085, 0x0001, 0x00ee, 0x0005,
+ 0x7057, 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c,
+ 0x0dc3, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c, 0x0dc3, 0x9006,
+ 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000,
+ 0x6003, 0x0000, 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e,
+ 0x6032, 0x6036, 0x603a, 0x603e, 0x6042, 0x2061, 0x1800, 0x6050,
+ 0x8000, 0x6052, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x0016, 0x080c, 0x8e38, 0x001e, 0x012e, 0x0cb0, 0x0006,
+ 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, 0x190c, 0x1998,
+ 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1962, 0x2004, 0x0006,
+ 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xdf7c,
+ 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800,
+ 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060,
+ 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02,
+ 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529,
+ 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085,
+ 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006,
+ 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xa42c, 0xa435, 0xa450,
+ 0xa46b, 0xc93f, 0xc95c, 0xc977, 0xa42c, 0xa435, 0xa42c, 0xa484,
+ 0xa42c, 0xa42c, 0xa42c, 0xa42c, 0x9186, 0x0013, 0x1128, 0x080c,
+ 0x8d2c, 0x080c, 0x8e38, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2,
+ 0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa44e, 0xac0f,
+ 0xadfa, 0xa44e, 0xae89, 0xa760, 0xa44e, 0xa44e, 0xab8f, 0xb472,
+ 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0x080c, 0x0dc3,
+ 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e,
+ 0x0005, 0xa469, 0xbb61, 0xa469, 0xa469, 0xa469, 0xa469, 0xa469,
+ 0xa469, 0xbaf8, 0xbce3, 0xa469, 0xbba2, 0xbc21, 0xbba2, 0xbc21,
+ 0xa469, 0x080c, 0x0dc3, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc3,
+ 0x6000, 0x0002, 0xa482, 0xb4b9, 0xb581, 0xb6b7, 0xb866, 0xa482,
+ 0xa482, 0xa482, 0xb48d, 0xba7d, 0xba80, 0xa482, 0xa482, 0xa482,
+ 0xa482, 0xbaaf, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010,
+ 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa49d, 0xa49d, 0xa4e0,
+ 0xa578, 0xa60d, 0xa49d, 0xa49d, 0xa49d, 0xa49f, 0xa49d, 0xa49d,
+ 0xa49d, 0xa49d, 0xa49d, 0xa49d, 0xa49d, 0x080c, 0x0dc3, 0x9186,
+ 0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc3, 0x0096, 0x601c,
+ 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880,
+ 0x9084, 0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a,
+ 0x9006, 0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001,
+ 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10,
+ 0x080c, 0x1aea, 0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0x8f0e, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
+ 0x2c00, 0x080c, 0xa62f, 0x080c, 0xc8e6, 0x6003, 0x0007, 0x0005,
+ 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048,
+ 0xa880, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046,
+ 0xa8e4, 0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f,
+ 0x0007, 0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000,
+ 0x8214, 0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6,
+ 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100,
+ 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086,
+ 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423,
+ 0x9405, 0x0002, 0xa540, 0xa540, 0xa537, 0xa53a, 0xa540, 0xa534,
+ 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532,
+ 0xa532, 0xa532, 0x080c, 0x0dc3, 0x080c, 0xb082, 0x0048, 0x080c,
+ 0xb1b9, 0x0030, 0x080c, 0xb2a7, 0x2001, 0x0004, 0x080c, 0x6448,
+ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a,
+ 0x000e, 0x080c, 0xa6ed, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050,
+ 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+ 0xffc0, 0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031,
+ 0x0000, 0x2041, 0x1272, 0x080c, 0xa8fb, 0x0160, 0x000e, 0x9005,
+ 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de,
+ 0x0804, 0xa39d, 0x2001, 0x002c, 0x900e, 0x080c, 0xa753, 0x0c70,
+ 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047,
+ 0x0a0c, 0x0dc3, 0x91b2, 0x0050, 0x1a0c, 0x0dc3, 0x9182, 0x0047,
+ 0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091,
+ 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x885a, 0x002e, 0x001e,
+ 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804,
+ 0xa4e0, 0x0005, 0xa5ab, 0xa5ab, 0xa5ad, 0xa5e3, 0xa5ab, 0xa5ab,
+ 0xa5ab, 0xa5ab, 0xa5f6, 0x080c, 0x0dc3, 0x00d6, 0x0016, 0x0096,
+ 0x080c, 0x8de8, 0x080c, 0x8f0e, 0x6003, 0x0004, 0x6114, 0x2148,
+ 0xa880, 0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898,
+ 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa753, 0x080c,
+ 0xa39d, 0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178,
+ 0xa8b2, 0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8,
+ 0xa8b2, 0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e,
+ 0x001e, 0x00de, 0x0005, 0x080c, 0x8de8, 0x00d6, 0x0096, 0x6114,
+ 0x2148, 0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6c02,
+ 0x009e, 0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x080c, 0x8de8,
+ 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00d6, 0x0096, 0x6114, 0x2148,
+ 0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e,
+ 0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x9182, 0x0047, 0x0002,
+ 0xa61d, 0xa61f, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d,
+ 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61f, 0x080c, 0x0dc3, 0x00d6,
+ 0x0096, 0x080c, 0x155f, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887,
+ 0x0000, 0x080c, 0x6c02, 0x009e, 0x00de, 0x0804, 0xa39d, 0x0026,
+ 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c,
+ 0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8, 0xa95c, 0x9188,
+ 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079,
+ 0x1800, 0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a,
+ 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029,
+ 0x0001, 0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xbd68,
+ 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xbd68,
+ 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c,
+ 0x100d, 0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920,
+ 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c,
+ 0xbd68, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011,
+ 0x001c, 0x080c, 0xbd68, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000,
+ 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076,
+ 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+ 0x0050, 0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c,
+ 0x6c02, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e,
+ 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096,
+ 0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8,
+ 0xa95c, 0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104,
+ 0xaa6a, 0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c,
+ 0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976,
+ 0xac7a, 0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205,
+ 0x200c, 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c,
+ 0x6c02, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6,
+ 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102,
+ 0x001e, 0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80,
+ 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218,
+ 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c,
+ 0x100d, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8,
+ 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140,
+ 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318,
+ 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006,
+ 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003,
+ 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000,
+ 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa702,
+ 0x0804, 0xa704, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe,
+ 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348,
+ 0xa87e, 0xa986, 0x080c, 0x6bf5, 0x009e, 0x003e, 0x00de, 0x0005,
+ 0x91b6, 0x0015, 0x1118, 0x080c, 0xa39d, 0x0030, 0x91b6, 0x0016,
+ 0x190c, 0x0dc3, 0x080c, 0xa39d, 0x0005, 0x20a9, 0x000e, 0x20e1,
+ 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804, 0x9005, 0x15c0,
+ 0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0,
+ 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136, 0x9080, 0x001c,
+ 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0,
+ 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006,
+ 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318,
+ 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xc1cd, 0x0130, 0x6014,
+ 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d,
+ 0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c, 0xadb3, 0x0804,
+ 0xa39d, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198, 0x0096, 0x2048,
+ 0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080, 0x000e, 0x20a0,
+ 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0, 0x4003, 0x3318,
+ 0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318,
+ 0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8, 0x6014, 0x0096,
+ 0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c, 0x8806, 0x8006,
+ 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000e, 0xaaa4,
+ 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x080c,
+ 0xa8fb, 0x0120, 0x008e, 0x009e, 0x0804, 0xa39d, 0x080c, 0xadb3,
+ 0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8,
+ 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014, 0x9005,
+ 0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xab32, 0x080c,
+ 0xa39d, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8,
+ 0x0006, 0x0016, 0x080c, 0xc8ce, 0x0188, 0x6014, 0x9005, 0x1170,
+ 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022,
+ 0x080c, 0xabe5, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1,
0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099,
@@ -5022,449 +5170,528 @@
0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103,
- 0x080c, 0x9f18, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
+ 0x080c, 0xa39d, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c,
0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b,
- 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xb54b,
- 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xb955, 0x0140, 0x6014,
+ 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xbd68,
+ 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc1cd, 0x0140, 0x6014,
0x2048, 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c,
- 0x9f18, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
+ 0xa39d, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b,
0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096,
- 0x9005, 0x0108, 0x2048, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013,
- 0x0000, 0x009e, 0x080c, 0xb955, 0x0148, 0xa804, 0x9005, 0x1158,
- 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0x9f18,
+ 0x9005, 0x0108, 0x2048, 0x080c, 0xbd68, 0x2011, 0x0205, 0x2013,
+ 0x0000, 0x009e, 0x080c, 0xc1cd, 0x0148, 0xa804, 0x9005, 0x1158,
+ 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0xa39d,
0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086,
- 0x0100, 0x1118, 0x080c, 0xa717, 0x00e0, 0xa034, 0x8007, 0x800c,
+ 0x0100, 0x1118, 0x080c, 0xadb3, 0x00e0, 0xa034, 0x8007, 0x800c,
0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
0x000c, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xaaa4,
- 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247, 0x0019,
- 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x1001, 0x000e,
+ 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x0019,
+ 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x100d, 0x000e,
0x01b0, 0xa8af, 0x0dcb, 0xa87a, 0x000e, 0xa8a6, 0x0006, 0xae6e,
0x2800, 0xa8a2, 0xa97e, 0xaf76, 0xaa92, 0xab96, 0xac9a, 0xad9e,
- 0x0086, 0x2940, 0x080c, 0x10eb, 0x008e, 0x9085, 0x0001, 0x009e,
- 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,
- 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,
- 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,
- 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xad8d, 0x002e, 0x003e,
- 0x015e, 0x009e, 0x1904, 0xa4e4, 0x0096, 0x0156, 0x0036, 0x0026,
- 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,
- 0xad8d, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0, 0x7238, 0xba0a,
- 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d, 0xbc02, 0xa804,
- 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0xa305, 0x0096,
- 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007,
- 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
- 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247,
- 0x080c, 0xa45b, 0x0130, 0x00fe, 0x009e, 0x080c, 0x9f18, 0x00be,
- 0x0005, 0x080c, 0xa717, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x3066,
- 0x080c, 0xbf0d, 0x00fe, 0x00c6, 0x080c, 0x9ec2, 0x2f00, 0x6012,
- 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x639e, 0x080c, 0x8718,
- 0x080c, 0x8c37, 0x00ce, 0x0804, 0xa4b7, 0x2100, 0x91b2, 0x0054,
- 0x1a0c, 0x0dc4, 0x91b2, 0x0040, 0x1a04, 0xa563, 0x0002, 0xa551,
- 0xa551, 0xa551, 0xa551, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f,
- 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f, 0xa54f, 0x080c,
- 0x0dc4, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,
- 0x8718, 0x0010, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c,
- 0x8c37, 0x012e, 0x0005, 0x2600, 0x0002, 0xa579, 0xa579, 0xa579,
- 0xa551, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa551, 0xa579,
- 0xa551, 0xa579, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa579,
- 0xa579, 0x080c, 0x0dc4, 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4,
- 0x91b6, 0x0013, 0x0904, 0xa64e, 0x91b6, 0x0027, 0x1904, 0xa5f8,
- 0x080c, 0x8b2b, 0x6004, 0x080c, 0xbb45, 0x01b0, 0x080c, 0xbb56,
- 0x01a8, 0x908e, 0x0021, 0x0904, 0xa5f5, 0x908e, 0x0022, 0x1130,
- 0x080c, 0xa382, 0x0904, 0xa5f1, 0x0804, 0xa5f2, 0x908e, 0x003d,
- 0x0904, 0xa5f5, 0x0804, 0xa5eb, 0x080c, 0x308f, 0x2001, 0x0007,
- 0x080c, 0x6372, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c,
- 0xa717, 0x9186, 0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285,
- 0x080c, 0x72e5, 0x1108, 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019,
- 0x0028, 0x2110, 0x080c, 0xd251, 0x002e, 0x003e, 0x0016, 0x0026,
- 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x8843, 0x0076, 0x903e,
- 0x080c, 0x8748, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,
- 0x080c, 0xce89, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xbf0d,
- 0x0016, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x001e, 0x080c, 0x3162,
- 0x080c, 0x8c37, 0x0030, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x080c,
- 0x8c37, 0x0005, 0x080c, 0xa717, 0x0cb0, 0x080c, 0xa753, 0x0c98,
- 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c, 0xbf19,
- 0x0d80, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0c50, 0x9186,
- 0x0014, 0x1d38, 0x080c, 0x8b2b, 0x6004, 0x908e, 0x0022, 0x1118,
- 0x080c, 0xa382, 0x09f0, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c,
- 0xbb45, 0x1198, 0x080c, 0x308f, 0x6010, 0x00b6, 0x2058, 0xb9a0,
- 0x00be, 0x080c, 0xa717, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836,
- 0x200c, 0xc185, 0x2102, 0x0804, 0xa5eb, 0x080c, 0xbb56, 0x1120,
- 0x080c, 0xa717, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0032, 0x1160,
- 0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c, 0x33fd,
- 0x00fe, 0x00ee, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0021, 0x0d40,
- 0x908e, 0x0022, 0x090c, 0xa717, 0x0804, 0xa5eb, 0x90b2, 0x0040,
- 0x1a04, 0xa6fe, 0x2008, 0x0002, 0xa696, 0xa697, 0xa69a, 0xa69d,
- 0xa6a0, 0xa6ad, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa6b0, 0xa6b3, 0xa694, 0xa6b5, 0xa6b3, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa6b3, 0xa6b3, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa6e5, 0xa6b3,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa6b3, 0xa6dc, 0xa694, 0x080c, 0x0dc4, 0x00e0, 0x2001,
- 0x000b, 0x0420, 0x2001, 0x0003, 0x0408, 0x2001, 0x0005, 0x00f0,
- 0x6010, 0x00b6, 0x2058, 0xb804, 0x00be, 0x9084, 0x00ff, 0x9086,
- 0x0000, 0x11b0, 0x2001, 0x0001, 0x0088, 0x2001, 0x0009, 0x0070,
- 0x080c, 0x0dc4, 0x0050, 0x0804, 0xa6f6, 0x080c, 0x8b2b, 0x080c,
- 0xbf10, 0x6003, 0x0004, 0x080c, 0x8c37, 0x0005, 0x080c, 0x6372,
- 0x080c, 0x8b2b, 0x6003, 0x0002, 0x0036, 0x2019, 0x1869, 0x2304,
- 0x9084, 0xff00, 0x1120, 0x2001, 0x1963, 0x201c, 0x0040, 0x8007,
- 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a,
- 0x003e, 0x080c, 0x8c37, 0x0c08, 0x080c, 0x8b2b, 0x080c, 0xbc8f,
- 0x080c, 0x9f18, 0x080c, 0x8c37, 0x08c0, 0x00e6, 0x00f6, 0x2071,
- 0x189f, 0x2079, 0x0000, 0x080c, 0x33fd, 0x00fe, 0x00ee, 0x080c,
- 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0838, 0x080c, 0x8b2b,
- 0x6003, 0x0002, 0x080c, 0xbf10, 0x0804, 0x8c37, 0x2600, 0x2008,
- 0x0002, 0xa715, 0xa715, 0xa715, 0xa6f6, 0xa6f6, 0xa715, 0xa715,
- 0xa715, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715,
- 0xa715, 0xa715, 0xa715, 0xa715, 0xa715, 0x080c, 0x0dc4, 0x00e6,
- 0x0096, 0x0026, 0x0016, 0x080c, 0xb955, 0x0568, 0x6014, 0x2048,
- 0xa868, 0x9086, 0x0139, 0x11a8, 0xa898, 0x9086, 0x0056, 0x1148,
- 0x080c, 0x533c, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
- 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xbe00,
- 0x0090, 0xa86c, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004,
- 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa86b,
- 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005,
- 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048,
- 0xa86b, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610,
- 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0dc4,
- 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbd1f, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xbd68, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xbd94, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbcb1, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x0028, 0x1118, 0x080c, 0xbb94, 0x04e0, 0x6604,
- 0x96b6, 0x0029, 0x1118, 0x080c, 0xbbd5, 0x04a8, 0x6604, 0x96b6,
- 0x001f, 0x1118, 0x080c, 0xa2cf, 0x0470, 0x6604, 0x96b6, 0x0000,
- 0x1118, 0x080c, 0xa479, 0x0438, 0x6604, 0x96b6, 0x0022, 0x1118,
- 0x080c, 0xa363, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
- 0xa399, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa3d5,
- 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa404, 0x0058,
- 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128,
- 0x00be, 0x0804, 0xaaac, 0x00be, 0x0005, 0x080c, 0x9fa3, 0x0cd8,
- 0xa7e9, 0xa7f7, 0xa7e9, 0xa834, 0xa7e9, 0xa9ce, 0xaab9, 0xa7e9,
- 0xa7e9, 0xa7e9, 0xaa86, 0xa7e9, 0xaa9a, 0x0096, 0x080c, 0x154a,
- 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0x009e, 0x0804,
- 0x9f18, 0xa001, 0xa001, 0x0005, 0x6604, 0x96b6, 0x0004, 0x1130,
- 0x2001, 0x0001, 0x080c, 0x635e, 0x0804, 0x9f18, 0x0005, 0x00e6,
- 0x2071, 0x1800, 0x708c, 0x9086, 0x0074, 0x1500, 0x080c, 0xce5a,
- 0x1170, 0x6010, 0x00b6, 0x2058, 0x00e9, 0x00be, 0x2001, 0x0006,
- 0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0088, 0x2001,
- 0x000a, 0x080c, 0x6372, 0x080c, 0x308f, 0x6003, 0x0001, 0x6007,
- 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0xa9b9,
- 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c,
- 0x635e, 0x2069, 0x185e, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006,
- 0x080c, 0x639e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011,
- 0x1823, 0x2204, 0x9086, 0x0074, 0x1904, 0xa990, 0x6010, 0x2058,
- 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xabfe, 0x0804, 0xa8fd,
- 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xa89f, 0x00d6, 0x080c,
- 0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781, 0x002e,
- 0x0904, 0xa89e, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048, 0xa807,
- 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6,
- 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011,
- 0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005, 0x090c,
- 0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140,
- 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00, 0x0040,
- 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead,
- 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c, 0x9f18,
- 0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xa993, 0x00de, 0x080c,
- 0xabf3, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014,
- 0x9005, 0x01a8, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039,
- 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00,
- 0x0030, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x2001,
- 0x0006, 0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0804,
- 0xa993, 0x080c, 0xa9a1, 0x6014, 0x9005, 0x0190, 0x2048, 0xa86c,
- 0xd0f4, 0x01e8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08,
- 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x08f8,
- 0x080c, 0xa997, 0x0160, 0x9006, 0x080c, 0x635e, 0x2001, 0x0004,
- 0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x08a0, 0x2001,
- 0x0004, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x0804, 0xa993, 0xb85c, 0xd0e4, 0x0178,
- 0x080c, 0xbc49, 0x080c, 0x72e5, 0x0118, 0xd0dc, 0x1904, 0xa8bf,
- 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x0804, 0xa8bf, 0x080c,
- 0xbc7a, 0x2011, 0x1836, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c,
- 0xcffa, 0x000e, 0x1904, 0xa8bf, 0xc0b5, 0x2012, 0x2001, 0x0006,
- 0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x00c6, 0x2001, 0x180f,
- 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071,
- 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707a, 0x7010, 0x78ea,
- 0x707e, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe,
- 0x080c, 0x26e8, 0x00f6, 0x2100, 0x900e, 0x080c, 0x269f, 0x795a,
- 0x00fe, 0x9186, 0x0081, 0x01f0, 0x2009, 0x0081, 0x00e0, 0x2009,
- 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x78e7, 0x0000, 0x7932,
- 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26e8, 0x00f6,
- 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x797a, 0x080c, 0x269f,
- 0x795a, 0x00fe, 0x8108, 0x080c, 0x63c1, 0x2b00, 0x00ce, 0x1904,
- 0xa8bf, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009,
- 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c,
- 0xb916, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001, 0x6003,
- 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0018,
- 0x080c, 0xa717, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001,
- 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x185f, 0x2004, 0xd0ac,
- 0x0005, 0x00e6, 0x080c, 0xd2aa, 0x0190, 0x2071, 0x0260, 0x7108,
- 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010,
- 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee,
- 0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x55bb,
- 0x1120, 0x2001, 0x0007, 0x080c, 0x639e, 0x080c, 0x308f, 0x6020,
- 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x9f18, 0x00b6, 0x00e6,
- 0x0026, 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904,
- 0xaa7d, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xaa30, 0x00d6,
- 0x080c, 0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781,
- 0x002e, 0x0904, 0xaa2f, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048,
- 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010,
- 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026,
- 0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005,
- 0x090c, 0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039,
- 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00,
- 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833,
- 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c,
- 0x9f18, 0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xaa81, 0x00de,
- 0x080c, 0x55bb, 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046,
- 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e,
- 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x64ac, 0x080c, 0xa822,
- 0x00de, 0x080c, 0xacce, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005,
- 0x0560, 0x2001, 0x0006, 0x080c, 0x6372, 0x0096, 0x6014, 0x904d,
- 0x01d0, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,
- 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x0060, 0xa868,
- 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa86b,
- 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x308f, 0x6020, 0x9086,
- 0x000a, 0x0138, 0x080c, 0x9f18, 0x0020, 0x080c, 0xa717, 0x080c,
- 0xa9b9, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823,
- 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37,
- 0x0804, 0xa9b9, 0x2030, 0x2011, 0x1823, 0x2204, 0x9086, 0x0004,
- 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x6372,
- 0x0804, 0x9f18, 0x0804, 0xa9b9, 0x0002, 0xa7e9, 0xaac4, 0xa7e9,
- 0xab05, 0xa7e9, 0xabb0, 0xaab9, 0xa7ec, 0xa7e9, 0xabc2, 0xa7e9,
- 0xabd2, 0x6604, 0x9686, 0x0003, 0x0904, 0xa9ce, 0x96b6, 0x001e,
- 0x1110, 0x080c, 0x9f18, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c,
- 0xabe2, 0x11a0, 0x9006, 0x080c, 0x635e, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007,
- 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0418, 0x2009, 0x026e,
- 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084,
- 0x00ff, 0x9005, 0x0180, 0x8001, 0xb842, 0x601b, 0x000a, 0x0088,
- 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x908e, 0x1900, 0x0148,
- 0x908e, 0x1e00, 0x0990, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c,
- 0xa9b9, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026,
- 0x9016, 0x080c, 0xabf0, 0x00d6, 0x2069, 0x1959, 0x2d04, 0x9005,
- 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069,
- 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088,
- 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003,
- 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0804,
- 0xab80, 0x080c, 0xb955, 0x01b0, 0x6014, 0x2048, 0xa868, 0x2010,
- 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c,
- 0xbe57, 0x00b0, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0118, 0x2001,
- 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010,
- 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38,
- 0x080c, 0xa717, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686,
- 0x0005, 0x0510, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104,
- 0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01b0, 0x9086, 0x1900,
- 0x1168, 0x9686, 0x0009, 0x0180, 0x2001, 0x0004, 0x080c, 0x6372,
- 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa9b9,
- 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x0140, 0xa868, 0x9086, 0x0139, 0x0118,
- 0xa86c, 0xd0fc, 0x0108, 0x0c50, 0x6010, 0x2058, 0xb840, 0x9084,
- 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007,
- 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071,
- 0x1800, 0x080c, 0x5e89, 0x00ee, 0x0010, 0x080c, 0x3066, 0x0870,
- 0x2001, 0x0004, 0x080c, 0x6372, 0x04d9, 0x1140, 0x6003, 0x0001,
- 0x6007, 0x0003, 0x080c, 0x8718, 0x0804, 0x8c37, 0x080c, 0xa717,
- 0x0804, 0xa9b9, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c, 0x6372,
- 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x8718, 0x0804, 0x8c37,
- 0x0804, 0xa9b9, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c, 0x6372,
- 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37,
- 0x0804, 0xa9b9, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138,
- 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005,
- 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158,
- 0x080c, 0x6420, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6,
- 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, 0x1836,
- 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xaca0, 0x05d0, 0x2009,
- 0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x6742, 0x0158, 0x9006,
- 0x2020, 0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c,
- 0xc195, 0x2102, 0x6120, 0x0016, 0x6023, 0x0007, 0x2019, 0x002a,
- 0x2009, 0x0001, 0x00e6, 0x2071, 0x1800, 0x00c6, 0x2061, 0x0100,
- 0x080c, 0x3037, 0x00ce, 0x6010, 0x9005, 0x090c, 0x0dc4, 0x080c,
- 0x2e5f, 0x00ee, 0x001e, 0x6122, 0x00c6, 0x0156, 0x20a9, 0x0781,
- 0x2009, 0x007f, 0x080c, 0x3162, 0x8108, 0x1f04, 0xac42, 0x015e,
- 0x00ce, 0x080c, 0xabf3, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817,
- 0x0001, 0x2001, 0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110,
- 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000,
- 0x2001, 0x1836, 0x2102, 0x9184, 0x0050, 0x9086, 0x0050, 0x0588,
- 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e, 0x206a,
- 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, 0x78ea,
- 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009,
- 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x26e8,
- 0x080c, 0x72e5, 0x0170, 0x2071, 0x0260, 0x2069, 0x195f, 0x7048,
- 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c,
- 0xbc49, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005,
- 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182b, 0x231c,
- 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004,
- 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9,
- 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x1148, 0x2011,
- 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xad8d, 0x1100,
- 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071,
- 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800,
- 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100,
- 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010,
- 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076,
- 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029,
- 0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071,
- 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xad63, 0x080c, 0xd187,
- 0x0904, 0xad5c, 0x6720, 0x9786, 0x0007, 0x0904, 0xad5c, 0x2500,
- 0x9c06, 0x0904, 0xad5c, 0x2400, 0x9c06, 0x0904, 0xad5c, 0x3e08,
- 0x81ff, 0x0190, 0x6010, 0x9005, 0x0178, 0x00b6, 0x2058, 0x9186,
- 0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e, 0x1128, 0x6004, 0x9086,
- 0x0002, 0x0904, 0xad77, 0x00be, 0x00c6, 0x6000, 0x9086, 0x0004,
- 0x1110, 0x080c, 0x1950, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56,
- 0x1130, 0x00ce, 0x080c, 0xa717, 0x080c, 0x9f42, 0x00e8, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa86b,
- 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c,
- 0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c,
- 0xbb39, 0x080c, 0x9f42, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02,
- 0x1210, 0x0804, 0xad01, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e,
- 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118,
- 0x080c, 0xd101, 0x0c30, 0x9786, 0x000a, 0x09e0, 0x0880, 0x00be,
- 0x0c18, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,
- 0xad79, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001,
- 0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016,
- 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,
- 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e,
- 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e,
- 0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001,
- 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004,
- 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c, 0xbb45, 0x0120, 0x080c,
- 0xbb56, 0x0168, 0x0028, 0x080c, 0x308f, 0x080c, 0xbb56, 0x0138,
- 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c,
- 0xa717, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
- 0x000a, 0x0005, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee,
- 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadf0, 0xadf0,
- 0xadf0, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadee, 0x080c, 0x0dc4,
- 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x8c37, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
- 0x9082, 0x0040, 0x0804, 0xae86, 0x9186, 0x0027, 0x1520, 0x080c,
- 0x8b2b, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x0096, 0x6114, 0x2148,
- 0x080c, 0xb955, 0x0198, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717,
- 0x0068, 0xa86b, 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980,
- 0xc1c5, 0xa982, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c,
- 0x9f18, 0x0804, 0x8c37, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,
- 0x0040, 0x00b8, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138,
- 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0dc4, 0x080c,
- 0xbf19, 0x0130, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaeb8,
- 0x0005, 0x0002, 0xae60, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e,
- 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae7b, 0xae7b,
- 0xae7b, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae5e, 0x080c, 0x0dc4,
- 0x080c, 0x8b2b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0168,
- 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec,
- 0xa886, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f18,
- 0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x080c, 0xbb56, 0x090c,
- 0xa717, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x0002, 0xae9d,
- 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b,
- 0xae9b, 0xae9b, 0xaeb0, 0xaeb0, 0xaeb0, 0xaeb0, 0xae9b, 0xae9b,
- 0xae9b, 0xaeb0, 0xae9b, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b,
- 0x6014, 0x2048, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004, 0xa880,
- 0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002, 0x0cb8,
- 0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x000f, 0x0804, 0x8c37,
- 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,
- 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed6, 0xaf79, 0xaed4,
- 0xafab, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4,
- 0xaed4, 0xaed4, 0xaed4, 0xafab, 0x080c, 0x0dc4, 0x00b6, 0x0096,
- 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x11d8, 0xa87f,
- 0x0000, 0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834,
- 0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x6210, 0x2258,
- 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x080c, 0x9f18, 0x009e,
- 0x00be, 0x0005, 0x080c, 0xbf3b, 0x1dd0, 0x968c, 0x0c00, 0x0120,
- 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002,
- 0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8, 0xd6dc,
- 0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938, 0xaa34,
- 0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206,
- 0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87f,
- 0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a, 0x901e,
- 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
- 0xc6c4, 0x0804, 0xaedd, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a,
- 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018,
- 0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x0904, 0xaeec,
- 0x7154, 0xa98e, 0x81ff, 0x0904, 0xaeec, 0x9192, 0x0021, 0x1278,
- 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011,
- 0x0205, 0x2013, 0x0000, 0x080c, 0xbe96, 0x0804, 0xaeec, 0xa86c,
- 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6, 0x2950,
- 0x080c, 0xb4ea, 0x00ae, 0x080c, 0xbe96, 0x080c, 0xb53b, 0x0804,
- 0xaeee, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043, 0x2079,
- 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048, 0xa880,
- 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005, 0x2130,
- 0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4, 0x9213,
- 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a, 0xae46,
- 0xad4a, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c,
- 0x8d06, 0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182,
- 0x0040, 0x0208, 0x000a, 0x0005, 0xafc8, 0xafc8, 0xafc8, 0xafc8,
- 0xafc8, 0xafca, 0xb060, 0xafc8, 0xafc8, 0xb077, 0xb0fc, 0xafc8,
- 0xafc8, 0xafc8, 0xafc8, 0xb10f, 0xafc8, 0xafc8, 0xafc8, 0xafc8,
- 0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260,
- 0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5,
- 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
- 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb05b, 0x9694, 0xff00, 0x9284,
- 0x0c00, 0x0120, 0x7048, 0xb096, 0x704c, 0xb092, 0x9284, 0x0300,
- 0x0904, 0xb05b, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e,
- 0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070,
- 0xa872, 0xb074, 0xa876, 0xae7a, 0x968c, 0x0c00, 0x0120, 0x7348,
- 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180,
- 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x0060, 0xd6dc, 0x0118,
- 0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87f, 0x0007, 0x0010,
- 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886, 0xb088, 0xa88a, 0x901e,
- 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a, 0x0009,
- 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011,
- 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98e,
- 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018,
- 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013, 0x0000,
- 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c68,
- 0x2950, 0x080c, 0xb4ea, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005,
- 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00,
- 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a,
- 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x0804, 0x95f0, 0x6003,
- 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048,
- 0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00,
- 0x2078, 0x080c, 0x1679, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003,
- 0x0002, 0x009e, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0096, 0x080c,
- 0x8be7, 0x080c, 0x8d06, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904,
- 0xb0fa, 0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016,
- 0xa880, 0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080,
- 0x001a, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0,
- 0x9184, 0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020,
- 0x4003, 0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e,
- 0xa878, 0x0006, 0x2148, 0x080c, 0x0fb3, 0x001e, 0x0448, 0x0016,
- 0x080c, 0x0fb3, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016,
- 0x080c, 0xb53b, 0x001e, 0x00e0, 0xa86b, 0x0103, 0xa978, 0x9184,
- 0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f,
- 0x001c, 0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4,
- 0x0118, 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x080c, 0x6934,
- 0x080c, 0x9f18, 0x009e, 0x0005, 0x6004, 0x9086, 0x0040, 0x1120,
- 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019, 0x0001, 0x080c, 0x9964,
- 0x6003, 0x0002, 0x080c, 0x8be7, 0x080c, 0x8d06, 0x0005, 0x6004,
- 0x9086, 0x0040, 0x1120, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019,
- 0x0001, 0x080c, 0x9964, 0x080c, 0x8be7, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0150, 0xa86b,
- 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c,
- 0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8d06, 0x0005, 0xa87f,
+ 0x0086, 0x2940, 0x080c, 0x10f7, 0x008e, 0x9085, 0x0001, 0x009e,
+ 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,
+ 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210,
+ 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000,
+ 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xc83f, 0x001e, 0x1158,
+ 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130,
+ 0x9386, 0x0006, 0x0128, 0x080c, 0xa39d, 0x0020, 0x0039, 0x0010,
+ 0x080c, 0xaa1c, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814,
+ 0x2048, 0x9186, 0x0015, 0x0904, 0xaa02, 0x918e, 0x0016, 0x1904,
+ 0xaa1a, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186,
+ 0x0300, 0x1904, 0xa9dc, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f,
+ 0x0904, 0xa9bf, 0x0804, 0xaa18, 0x6808, 0x9086, 0xffff, 0x1904,
+ 0xaa04, 0xa880, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c,
+ 0xa940, 0x9105, 0x1904, 0xaa04, 0x6824, 0xd084, 0x1904, 0xaa04,
+ 0xd0b4, 0x0158, 0x0016, 0x2001, 0x1962, 0x200c, 0x6018, 0x9102,
+ 0x9082, 0x0005, 0x001e, 0x1a04, 0xaa04, 0x080c, 0xc3b4, 0x685c,
+ 0xa886, 0xa880, 0xc0dc, 0xc0f4, 0xc0d4, 0xa882, 0x0026, 0x900e,
+ 0x6a18, 0x2001, 0x000a, 0x080c, 0x871c, 0xa888, 0x920a, 0x0208,
+ 0x8011, 0xaa8a, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c,
+ 0xbed5, 0x00ce, 0x0804, 0xaa18, 0x00c6, 0xa86c, 0xd0fc, 0x1118,
+ 0x080c, 0x602e, 0x0010, 0x080c, 0x63e9, 0x00ce, 0x1904, 0xaa04,
+ 0x00c6, 0x2d60, 0x080c, 0xa39d, 0x00ce, 0x0804, 0xaa18, 0x00c6,
+ 0x080c, 0xa3ec, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c,
+ 0xc640, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xa39d,
+ 0x00ce, 0x080c, 0xa419, 0x00ce, 0x0804, 0xaa18, 0x2001, 0x1964,
+ 0x2004, 0x6842, 0x00ce, 0x04e0, 0x7008, 0x9086, 0x000b, 0x11c8,
+ 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6,
+ 0x2d60, 0xa87f, 0x0003, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003,
+ 0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce,
+ 0x00f8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1964, 0x2004,
+ 0x6842, 0x00b0, 0x0489, 0x00b0, 0x89ff, 0x090c, 0x0dc3, 0x00c6,
+ 0x00d6, 0x2d60, 0xa86b, 0x0103, 0xa87f, 0x0003, 0xa87b, 0x0000,
+ 0x080c, 0x6a1c, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00de, 0x00ce,
+ 0x080c, 0xa39d, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001,
+ 0x1964, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6,
+ 0x2d00, 0x2060, 0x080c, 0xdf7c, 0x080c, 0x86d8, 0x080c, 0xa39d,
+ 0x00ce, 0x080c, 0xa39d, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228,
+ 0xacb4, 0xabb0, 0xd2f4, 0x0130, 0x2001, 0x1964, 0x2004, 0x6842,
+ 0x0804, 0xaa96, 0x00c6, 0x2d60, 0x080c, 0xbdd8, 0x00ce, 0x6804,
+ 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001,
+ 0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x04f0,
+ 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dc3, 0x6800,
+ 0x9086, 0x0004, 0x1190, 0xa880, 0xd0ac, 0x0178, 0xa843, 0x0fff,
+ 0xa83f, 0x0fff, 0xa884, 0xc0fc, 0xa886, 0x2001, 0x0001, 0x6832,
+ 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa880, 0xd0b4, 0x1150,
+ 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105,
+ 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020,
+ 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005,
+ 0x6832, 0x080c, 0xc537, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d,
+ 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008,
+ 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206,
+ 0x1904, 0xaafd, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be,
+ 0x9206, 0x1904, 0xaafd, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826,
+ 0x6a20, 0x9286, 0x0007, 0x0904, 0xaafd, 0x9286, 0x0002, 0x05e8,
+ 0x9286, 0x0000, 0x05d0, 0x6808, 0x633c, 0x9306, 0x15b0, 0x2071,
+ 0x026c, 0x9186, 0x0015, 0x0558, 0x00c6, 0x6038, 0x2060, 0x6104,
+ 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d,
+ 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014,
+ 0x0096, 0x2048, 0x080c, 0xc1cd, 0x090c, 0x0dc3, 0xa87f, 0x0003,
+ 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+ 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x0030, 0x6038,
+ 0x2070, 0x2001, 0x1964, 0x2004, 0x7042, 0x080c, 0xa39d, 0x002e,
+ 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048,
+ 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00,
+ 0xc48c, 0xbc02, 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48,
+ 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xb448,
+ 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xab6e, 0x0096, 0x0156,
+ 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9,
+ 0x0004, 0x080c, 0xb448, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0,
+ 0x7238, 0xba0a, 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d,
+ 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804,
+ 0xa7a3, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006,
+ 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+ 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000,
+ 0x2041, 0x1253, 0x080c, 0xa8fb, 0x0130, 0x00fe, 0x009e, 0x080c,
+ 0xa39d, 0x00be, 0x0005, 0x080c, 0xadb3, 0x0cb8, 0x2b78, 0x00f6,
+ 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00fe, 0x00c6, 0x080c, 0xa347,
+ 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+ 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x6448, 0x080c, 0x6474,
+ 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ce, 0x0804, 0xab41, 0x2100,
+ 0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b2, 0x0040, 0x1a04, 0xabf7,
+ 0x0002, 0xabe5, 0xabe5, 0xabdb, 0xabe5, 0xabe5, 0xabe5, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabe5, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabdb, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabd9,
+ 0xabd9, 0x080c, 0x0dc3, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8bc,
+ 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106,
+ 0x9186, 0x0032, 0x0118, 0x080c, 0x88e9, 0x0010, 0x080c, 0x88a1,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x2600,
+ 0x0002, 0xac0d, 0xac0d, 0xac0d, 0xabe5, 0xabe5, 0xac0d, 0xac0d,
+ 0xac0d, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d,
+ 0xac0d, 0xac0d, 0xac0d, 0xac0d, 0xac0d, 0x080c, 0x0dc3, 0x6004,
+ 0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x0904, 0xace2,
+ 0x91b6, 0x0027, 0x1904, 0xac8c, 0x080c, 0x8d2c, 0x6004, 0x080c,
+ 0xc3c0, 0x01b0, 0x080c, 0xc3d1, 0x01a8, 0x908e, 0x0021, 0x0904,
+ 0xac89, 0x908e, 0x0022, 0x1130, 0x080c, 0xa820, 0x0904, 0xac85,
+ 0x0804, 0xac86, 0x908e, 0x003d, 0x0904, 0xac89, 0x0804, 0xac7f,
+ 0x080c, 0x312b, 0x2001, 0x0007, 0x080c, 0x6448, 0x6010, 0x00b6,
+ 0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186, 0x007e, 0x1148,
+ 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x7351, 0x1108, 0xc2ad,
+ 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xdfde,
+ 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,
+ 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x6010, 0x00b6,
+ 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xda37, 0x007e, 0x003e,
+ 0x002e, 0x001e, 0x080c, 0xc8e3, 0x0016, 0x080c, 0xc638, 0x080c,
+ 0xa39d, 0x001e, 0x080c, 0x31fe, 0x080c, 0x8e38, 0x0030, 0x080c,
+ 0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xadb3,
+ 0x0cb0, 0x080c, 0xadef, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186,
+ 0x0016, 0x1148, 0x080c, 0xc8f4, 0x0d80, 0x6000, 0x9086, 0x0002,
+ 0x0904, 0xadfa, 0x0c50, 0x9186, 0x0014, 0x1d38, 0x080c, 0x8d2c,
+ 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa820, 0x09f0, 0x080c,
+ 0x3102, 0x080c, 0xc8e3, 0x080c, 0xc3c0, 0x1198, 0x080c, 0x312b,
+ 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186,
+ 0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, 0x2102, 0x0804,
+ 0xac7f, 0x080c, 0xc3d1, 0x1120, 0x080c, 0xadb3, 0x0804, 0xac7f,
+ 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189f,
+ 0x2079, 0x0000, 0x080c, 0x3499, 0x00fe, 0x00ee, 0x0804, 0xac7f,
+ 0x6004, 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xadb3,
+ 0x0804, 0xac7f, 0x90b2, 0x0040, 0x1a04, 0xad9a, 0x2008, 0x0002,
+ 0xad2a, 0xad2b, 0xad2e, 0xad31, 0xad34, 0xad41, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad44, 0xad4f,
+ 0xad28, 0xad51, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad4f, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad81, 0xad4f, 0xad28, 0xad4d, 0xad28, 0xad28,
+ 0xad28, 0xad4e, 0xad28, 0xad28, 0xad28, 0xad4f, 0xad78, 0xad28,
+ 0x080c, 0x0dc3, 0x0420, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003,
+ 0x0448, 0x2001, 0x0005, 0x0430, 0x6010, 0x00b6, 0x2058, 0xb804,
+ 0x00be, 0x9084, 0x00ff, 0x9086, 0x0000, 0x11f0, 0x2001, 0x0001,
+ 0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, 0x8d2c, 0x6003, 0x0005,
+ 0x080c, 0xc8e6, 0x080c, 0x8e38, 0x0060, 0x0008, 0x0000, 0x0804,
+ 0xad92, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0004, 0x080c,
+ 0x8e38, 0x0005, 0x080c, 0x6448, 0x080c, 0x8d2c, 0x6003, 0x0002,
+ 0x0036, 0x2019, 0x1869, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001,
+ 0x1962, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003,
+ 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8e38, 0x0c08,
+ 0x080c, 0x8d2c, 0x080c, 0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38,
+ 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c,
+ 0x3499, 0x00fe, 0x00ee, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+ 0x8e38, 0x0838, 0x080c, 0x8d2c, 0x6003, 0x0002, 0x080c, 0xc8e6,
+ 0x0804, 0x8e38, 0x2600, 0x2008, 0x0002, 0xadb1, 0xadb1, 0xadb1,
+ 0xad92, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xad92, 0xadb1,
+ 0xad92, 0xadb1, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xadb1,
+ 0xadb1, 0x080c, 0x0dc3, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c,
+ 0xc1cd, 0x0568, 0x6014, 0x2048, 0xa868, 0x9086, 0x0139, 0x11a8,
+ 0xa898, 0x9086, 0x0056, 0x1148, 0x080c, 0x53f9, 0x0130, 0x2001,
+ 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e,
+ 0x2011, 0x4005, 0x080c, 0xc7a9, 0x0090, 0xa86c, 0xd0fc, 0x0178,
+ 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e,
+ 0x003d, 0x0150, 0x001e, 0xa86b, 0x0103, 0xa833, 0x0100, 0x001e,
+ 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096,
+ 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0xa823, 0x8001,
+ 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff,
+ 0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x6604, 0x96b6, 0x004d, 0x1120,
+ 0x080c, 0xc6c8, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0043, 0x1120,
+ 0x080c, 0xc711, 0x0804, 0xae77, 0x6604, 0x96b6, 0x004b, 0x1120,
+ 0x080c, 0xc73d, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0033, 0x1120,
+ 0x080c, 0xc65a, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0028, 0x1120,
+ 0x080c, 0xc40f, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0029, 0x1120,
+ 0x080c, 0xc450, 0x0804, 0xae77, 0x6604, 0x96b6, 0x001f, 0x1118,
+ 0x080c, 0xa76d, 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c,
+ 0xab03, 0x04a8, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xa801,
+ 0x0470, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xa919, 0x0438,
+ 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xaa9c, 0x0400, 0x6604,
+ 0x96b6, 0x003d, 0x1118, 0x080c, 0xa839, 0x00c8, 0x6604, 0x96b6,
+ 0x0044, 0x1118, 0x080c, 0xa875, 0x0090, 0x6604, 0x96b6, 0x0049,
+ 0x1118, 0x080c, 0xa8a4, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063,
+ 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xb160, 0x00be,
+ 0x0005, 0x080c, 0xa434, 0x0cd8, 0xae95, 0xaea3, 0xae95, 0xaee8,
+ 0xae95, 0xb082, 0xb16d, 0xae95, 0xae95, 0xae95, 0xb13a, 0xae95,
+ 0xb14e, 0x0096, 0x080c, 0x155f, 0x6014, 0x2048, 0xa800, 0x2048,
+ 0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d, 0xa001, 0xa001, 0x0005,
+ 0x6604, 0x96b6, 0x0004, 0x1130, 0x2001, 0x0001, 0x080c, 0x6434,
+ 0x0804, 0xa39d, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086,
+ 0x0074, 0x1540, 0x080c, 0xda08, 0x11b0, 0x6010, 0x00b6, 0x2058,
+ 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802,
+ 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c, 0x312b,
+ 0x080c, 0xa39d, 0x0088, 0x2001, 0x000a, 0x080c, 0x6448, 0x080c,
+ 0x312b, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x88e9, 0x080c,
+ 0x8e38, 0x0010, 0x080c, 0xb06d, 0x00ee, 0x0005, 0x00d6, 0xb800,
+ 0xd084, 0x0160, 0x9006, 0x080c, 0x6434, 0x2069, 0x185e, 0x6804,
+ 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x6474, 0x00de, 0x0005,
+ 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074,
+ 0x1904, 0xb044, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120,
+ 0x080c, 0xb2b2, 0x0804, 0xafb1, 0x2001, 0x180d, 0x2004, 0xd08c,
+ 0x0904, 0xaf53, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026, 0x2011,
+ 0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xaf52, 0x080c, 0x5678,
+ 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833,
+ 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186,
+ 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e,
+ 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868, 0x9084,
+ 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011,
+ 0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000,
+ 0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016,
+ 0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe, 0x00de,
+ 0x0804, 0xb047, 0x00de, 0x080c, 0xb2a7, 0x6010, 0x2058, 0xbaa0,
+ 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa868,
+ 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e,
+ 0x2011, 0x4000, 0x080c, 0xc7a9, 0x0030, 0xa807, 0x0000, 0xa86b,
+ 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c,
+ 0x312b, 0x080c, 0xa39d, 0x0804, 0xb047, 0x080c, 0xb055, 0x6014,
+ 0x9005, 0x0190, 0x2048, 0xa86c, 0xd0f4, 0x01e8, 0xa868, 0x9084,
+ 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011,
+ 0x4000, 0x080c, 0xc7a9, 0x08f8, 0x080c, 0xb04b, 0x0160, 0x9006,
+ 0x080c, 0x6434, 0x2001, 0x0004, 0x080c, 0x6474, 0x2001, 0x0007,
+ 0x080c, 0x6448, 0x08a0, 0x2001, 0x0004, 0x080c, 0x6448, 0x6003,
+ 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0804,
+ 0xb047, 0xb85c, 0xd0e4, 0x0178, 0x080c, 0xc5da, 0x080c, 0x7351,
+ 0x0118, 0xd0dc, 0x1904, 0xaf73, 0x2011, 0x1836, 0x2204, 0xc0ad,
+ 0x2012, 0x0804, 0xaf73, 0x080c, 0xc617, 0x2011, 0x1836, 0x2204,
+ 0xc0a5, 0x2012, 0x0006, 0x080c, 0xdba8, 0x000e, 0x1904, 0xaf73,
+ 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6448, 0x9006, 0x080c,
+ 0x6434, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6,
+ 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff,
+ 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee,
+ 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2751, 0x00f6, 0x2100,
+ 0x900e, 0x080c, 0x2708, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01f0,
+ 0x2009, 0x0081, 0x00e0, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,
+ 0x79ea, 0x78e7, 0x0000, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e,
+ 0x00fe, 0x080c, 0x2751, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100,
+ 0x900e, 0x797a, 0x080c, 0x2708, 0x795a, 0x00fe, 0x8108, 0x080c,
+ 0x6497, 0x2b00, 0x00ce, 0x1904, 0xaf73, 0x6012, 0x2009, 0x180f,
+ 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff,
+ 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c,
+ 0x6448, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x0018, 0x080c, 0xadb3, 0x0431, 0x00de,
+ 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120,
+ 0x2001, 0x185f, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe037,
+ 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,
+ 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80,
+ 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007,
+ 0x080c, 0x6448, 0x080c, 0x5678, 0x1120, 0x2001, 0x0007, 0x080c,
+ 0x6474, 0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005,
+ 0x0804, 0xa39d, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800,
+ 0x708c, 0x9086, 0x0014, 0x1904, 0xb131, 0x2001, 0x180d, 0x2004,
+ 0xd08c, 0x0904, 0xb0e4, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026,
+ 0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xb0e3, 0x080c,
+ 0x5678, 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103,
+ 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be,
+ 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8,
+ 0x002e, 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868,
+ 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e,
+ 0x2011, 0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807,
+ 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0,
+ 0x0016, 0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe,
+ 0x00de, 0x0804, 0xb135, 0x00de, 0x080c, 0x5678, 0x1170, 0x6014,
+ 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021,
+ 0x0006, 0x080c, 0x4d24, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058,
+ 0x080c, 0x6597, 0x080c, 0xaed6, 0x00de, 0x080c, 0xb382, 0x1588,
+ 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c,
+ 0x6448, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa868, 0x9084, 0x00ff,
+ 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
+ 0x080c, 0xc7a9, 0x0060, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0029,
+ 0x0130, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x009e,
+ 0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0xa39d,
+ 0x0020, 0x080c, 0xadb3, 0x080c, 0xb06d, 0x001e, 0x002e, 0x00ee,
+ 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x1160,
+ 0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001,
+ 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2030, 0x2011,
+ 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120,
+ 0x2001, 0x0007, 0x080c, 0x6448, 0x0804, 0xa39d, 0x0804, 0xb06d,
+ 0x0002, 0xae95, 0xb178, 0xae95, 0xb1b9, 0xae95, 0xb264, 0xb16d,
+ 0xae98, 0xae95, 0xb276, 0xae95, 0xb286, 0x6604, 0x9686, 0x0003,
+ 0x0904, 0xb082, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005,
+ 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xb296, 0x11a0, 0x9006, 0x080c,
+ 0x6434, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x2001, 0x0002, 0x080c,
+ 0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c,
+ 0x8e38, 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160,
+ 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180, 0x8001,
+ 0xb842, 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084,
+ 0xff00, 0x908e, 0x1900, 0x0148, 0x908e, 0x1e00, 0x0990, 0x080c,
+ 0x3102, 0x080c, 0xc8e3, 0x080c, 0xb06d, 0x00ce, 0x00de, 0x00be,
+ 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xb2a4, 0x00d6,
+ 0x2069, 0x1958, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0,
+ 0x9086, 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a,
+ 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x6434, 0x2001,
+ 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x0804, 0xb234, 0x080c, 0xc1cd, 0x01b0,
+ 0x6014, 0x2048, 0xa868, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007,
+ 0x0016, 0x2001, 0x0002, 0x080c, 0xc800, 0x00b0, 0x6014, 0x2048,
+ 0xa868, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e,
+ 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+ 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xadb3, 0x2009, 0x026e,
+ 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b,
+ 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686,
+ 0x0009, 0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180,
+ 0x2001, 0x0004, 0x080c, 0x6448, 0x2001, 0x0028, 0x601a, 0x6007,
+ 0x0052, 0x0010, 0x080c, 0xb06d, 0x002e, 0x00be, 0x009e, 0x0005,
+ 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140,
+ 0xa868, 0x9086, 0x0139, 0x0118, 0xa86c, 0xd0fc, 0x0108, 0x0c50,
+ 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001,
+ 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086,
+ 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee,
+ 0x0010, 0x080c, 0x3102, 0x0870, 0x2001, 0x0004, 0x080c, 0x6448,
+ 0x04d9, 0x1140, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9,
+ 0x0804, 0x8e38, 0x080c, 0xadb3, 0x0804, 0xb06d, 0x0469, 0x1160,
+ 0x2001, 0x0008, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0005,
+ 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x00e9, 0x1160,
+ 0x2001, 0x000a, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001,
+ 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2009, 0x026e,
+ 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084,
+ 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6,
+ 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x650b, 0x001e, 0x00ce,
+ 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
+ 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a,
+ 0x080c, 0xb354, 0x05d0, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a,
+ 0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
+ 0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x6120, 0x0016,
+ 0x6023, 0x0007, 0x2019, 0x002a, 0x2009, 0x0001, 0x00e6, 0x2071,
+ 0x1800, 0x00c6, 0x2061, 0x0100, 0x080c, 0x30cd, 0x00ce, 0x6010,
+ 0x9005, 0x090c, 0x0dc3, 0x080c, 0x2ed6, 0x00ee, 0x001e, 0x6122,
+ 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x31fe,
+ 0x8108, 0x1f04, 0xb2f6, 0x015e, 0x00ce, 0x080c, 0xb2a7, 0x2071,
+ 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1836, 0x200c,
+ 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc,
+ 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836, 0x2102, 0x9184,
+ 0x0050, 0x9086, 0x0050, 0x0588, 0x2079, 0x0100, 0x2e04, 0x9084,
+ 0x00ff, 0x2069, 0x181e, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04,
+ 0x2069, 0x181f, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084,
+ 0xff00, 0x001e, 0x9105, 0x2009, 0x182b, 0x200a, 0x2200, 0x9084,
+ 0x00ff, 0x2008, 0x080c, 0x2751, 0x080c, 0x7351, 0x0170, 0x2071,
+ 0x0260, 0x2069, 0x195e, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050,
+ 0x680a, 0x7054, 0x680e, 0x080c, 0xc5da, 0x001e, 0x003e, 0x00de,
+ 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6,
+ 0x0156, 0x2019, 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260,
+ 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306,
+ 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a,
+ 0x080c, 0xb448, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019,
+ 0x0006, 0x080c, 0xb448, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
+ 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014,
+ 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160,
+ 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110,
+ 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005,
+ 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006,
+ 0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3,
+ 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202,
+ 0x1a04, 0xb41e, 0x080c, 0xdd49, 0x0904, 0xb417, 0x6720, 0x9786,
+ 0x0007, 0x0904, 0xb417, 0x2500, 0x9c06, 0x0904, 0xb417, 0x2400,
+ 0x9c06, 0x0904, 0xb417, 0x3e08, 0x81ff, 0x01c8, 0x6010, 0x9005,
+ 0x01b0, 0x00b6, 0x2058, 0x9186, 0x0002, 0x1120, 0xb800, 0xd0bc,
+ 0x1904, 0xb432, 0x9186, 0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e,
+ 0x1128, 0x6004, 0x9086, 0x0002, 0x0904, 0xb432, 0x00be, 0x00c6,
+ 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1998, 0x9786, 0x000a,
+ 0x0148, 0x080c, 0xc3d1, 0x1130, 0x00ce, 0x080c, 0xadb3, 0x080c,
+ 0xa3cf, 0x00e8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01a8, 0x9786,
+ 0x0003, 0x1530, 0xa86b, 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096,
+ 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e, 0xab7e, 0xa87b, 0x0000,
+ 0x080c, 0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x9ce0,
+ 0x0018, 0x7064, 0x9c02, 0x1210, 0x0804, 0xb3b5, 0x012e, 0x000e,
+ 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005,
+ 0x9786, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c30, 0x9786, 0x000a,
+ 0x09e0, 0x0880, 0x00be, 0x0c18, 0x220c, 0x2304, 0x9106, 0x1130,
+ 0x8210, 0x8318, 0x1f04, 0xb434, 0x9006, 0x0005, 0x2304, 0x9102,
+ 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001, 0x0005,
+ 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f,
+ 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001,
+ 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006,
+ 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218, 0x2001,
+ 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce,
+ 0x013e, 0x0005, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c,
+ 0xc3c0, 0x0120, 0x080c, 0xc3d1, 0x0168, 0x0028, 0x080c, 0x312b,
+ 0x080c, 0xc3d1, 0x0138, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+ 0x8e38, 0x0005, 0x080c, 0xadb3, 0x0cb0, 0x9182, 0x0054, 0x1220,
+ 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb4a9, 0xb4a9, 0xb4a9,
+ 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9,
+ 0xb4ab, 0xb4ab, 0xb4ab, 0xb4ab, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4ab,
+ 0xb4a9, 0x080c, 0x0dc3, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106,
+ 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e,
+ 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804,
+ 0xb543, 0x9186, 0x0027, 0x1520, 0x080c, 0x8d2c, 0x080c, 0x3102,
+ 0x080c, 0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0198,
+ 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0068, 0xa86b, 0x0103,
+ 0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980, 0xc1c5, 0xa982, 0x080c,
+ 0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x0804, 0x8e38,
+ 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x00b8, 0x9186,
+ 0x0046, 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120,
+ 0x9186, 0x0048, 0x190c, 0x0dc3, 0x080c, 0xc8f4, 0x0130, 0x6000,
+ 0x9086, 0x0002, 0x1110, 0x0804, 0xb581, 0x0005, 0x0002, 0xb51d,
+ 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b,
+ 0xb51b, 0xb51b, 0xb538, 0xb538, 0xb538, 0xb538, 0xb51b, 0xb538,
+ 0xb51b, 0xb538, 0xb51b, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x0096,
+ 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0168, 0xa86b, 0x0103, 0xa87f,
+ 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec, 0xa886, 0x080c, 0x6c02,
+ 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005,
+ 0x080c, 0x8d2c, 0x080c, 0xc3d1, 0x090c, 0xadb3, 0x080c, 0xa39d,
+ 0x080c, 0x8e38, 0x0005, 0x0002, 0xb55a, 0xb558, 0xb558, 0xb558,
+ 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb571,
+ 0xb571, 0xb571, 0xb571, 0xb558, 0xb57b, 0xb558, 0xb571, 0xb558,
+ 0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014, 0x2048, 0x2001,
+ 0x1964, 0x2004, 0x6042, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004,
+ 0xa880, 0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002,
+ 0x0cb8, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x080c, 0xc8eb, 0x6003,
+ 0x000f, 0x0804, 0x8e38, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x0804,
+ 0x8e38, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
+ 0x0005, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59f, 0xb682,
+ 0xb59d, 0xb6b6, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d,
+ 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb6b6, 0x080c, 0x0dc3, 0x00b6,
+ 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528,
+ 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb671, 0xa87f, 0x0000,
+ 0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
+ 0x9115, 0x190c, 0xb84f, 0x080c, 0x6a1c, 0x6210, 0x2258, 0xba3c,
+ 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xb652,
+ 0x080c, 0xa39d, 0x009e, 0x00be, 0x0005, 0x080c, 0xc916, 0x1dd0,
+ 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904,
+ 0xb656, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186,
+ 0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8,
+ 0xd6dc, 0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938,
+ 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c,
+ 0x9206, 0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118,
+ 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a,
+ 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005,
+ 0x1118, 0xc6c4, 0x0804, 0xb5a6, 0x735c, 0xab8a, 0x83ff, 0x0170,
+ 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
+ 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc, 0x0904,
+ 0xb5bb, 0x7154, 0xa98e, 0x81ff, 0x0904, 0xb5bb, 0x9192, 0x0021,
+ 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68,
+ 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc86c, 0x0804, 0xb5bb,
+ 0xa86c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6,
+ 0x2950, 0x080c, 0xbd07, 0x00ae, 0x080c, 0xc86c, 0x080c, 0xbd58,
+ 0x0804, 0xb5bd, 0x080c, 0xc4c4, 0x0804, 0xb5ca, 0xa880, 0xd0ac,
+ 0x0904, 0xb5d9, 0xa884, 0xd0bc, 0x1904, 0xb5d9, 0x9684, 0x0400,
+ 0x0130, 0xa838, 0xab34, 0x9305, 0x0904, 0xb5d9, 0x00b8, 0x7348,
+ 0xa838, 0x9306, 0x1198, 0x734c, 0xa834, 0x931e, 0x0904, 0xb5d9,
+ 0x0068, 0xa880, 0xd0ac, 0x0904, 0xb5ae, 0xa838, 0xa934, 0x9105,
+ 0x0904, 0xb5ae, 0xa884, 0xd0bc, 0x1904, 0xb5ae, 0x080c, 0xc4fe,
+ 0x0804, 0xb5ca, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043,
+ 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048,
+ 0xa880, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005,
+ 0x2130, 0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4,
+ 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a,
+ 0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10, 0x080c, 0x1aea,
+ 0x080c, 0x8906, 0x080c, 0x8f0e, 0x009e, 0x0005, 0x0005, 0x9182,
+ 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb6d3,
+ 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d5, 0xb76b, 0xb6d3, 0xb6d3,
+ 0xb782, 0xb812, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb827, 0xb6d3,
+ 0xb6d3, 0xb6d3, 0xb6d3, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6,
+ 0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4,
+ 0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c,
+ 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb766,
+ 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb096, 0x704c,
+ 0xb092, 0x9284, 0x0300, 0x0904, 0xb766, 0x080c, 0x100d, 0x090c,
+ 0x0dc3, 0x2900, 0xb07e, 0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103,
+ 0xb06c, 0xa86e, 0xb070, 0xa872, 0xb074, 0xa876, 0xae7a, 0x968c,
+ 0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff,
+ 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c,
+ 0x0060, 0xd6dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118,
+ 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886,
+ 0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff,
+ 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
+ 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc,
+ 0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260,
+ 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011,
+ 0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009,
+ 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x009e, 0x00ee,
+ 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079,
+ 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436,
+ 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aea,
+ 0x0804, 0x989e, 0x6003, 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8,
+ 0x0096, 0x6014, 0x2048, 0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084,
+ 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x16c1, 0x00fe, 0x6003,
+ 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c, 0x8d2c, 0x080c,
+ 0x8e38, 0x0096, 0x2001, 0x1964, 0x2004, 0x6042, 0x080c, 0x8de8,
+ 0x080c, 0x8f0e, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904, 0xb80d,
+ 0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016, 0xa880,
+ 0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a,
+ 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
+ 0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020, 0x4003,
+ 0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e, 0xa878,
+ 0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0458, 0x0016, 0x080c,
+ 0x0fbf, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016, 0x080c,
+ 0xbd58, 0x001e, 0x00f0, 0xa86b, 0x0103, 0xa978, 0x9184, 0x00ff,
+ 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f, 0x001c,
+ 0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4, 0x0118,
+ 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x0016, 0x080c, 0x6a1c,
+ 0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e, 0x0005, 0x080c,
+ 0xc4c4, 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c,
+ 0x080c, 0x8e38, 0x2019, 0x0001, 0x080c, 0x9c35, 0x6003, 0x0002,
+ 0x080c, 0xc8eb, 0x080c, 0x8de8, 0x080c, 0x8f0e, 0x0005, 0x6004,
+ 0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x2019,
+ 0x0001, 0x080c, 0x9c35, 0x080c, 0x8de8, 0x080c, 0x3102, 0x080c,
+ 0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0150, 0xa86b,
+ 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+ 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8f0e, 0x0005, 0xa87f,
0x0015, 0xd1fc, 0x0180, 0xa87f, 0x0007, 0x8002, 0x8000, 0x810a,
0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a58, 0x2104, 0x8000,
0x200a, 0x001e, 0x000e, 0xa996, 0xa892, 0x0005, 0x9182, 0x0054,
- 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb16a, 0xb16a,
- 0xb16a, 0xb16a, 0xb16a, 0xb16c, 0xb16a, 0xb16a, 0xb21a, 0xb16a,
- 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a,
- 0xb16a, 0xb2fb, 0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096,
- 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb215,
+ 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb882, 0xb882,
+ 0xb882, 0xb882, 0xb882, 0xb884, 0xb882, 0xb882, 0xb932, 0xb882,
+ 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882,
+ 0xb882, 0xba74, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6, 0x0096,
+ 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb92d,
0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6,
0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff,
- 0x0904, 0xb20e, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
- 0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb20e, 0x9686,
+ 0x0904, 0xb926, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
+ 0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb926, 0x9686,
0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb67a, 0x0c38,
- 0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e, 0xb780, 0x97bd,
+ 0x080c, 0x100d, 0x090c, 0x0dc3, 0x2900, 0xb07e, 0xb780, 0x97bd,
0x0200, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070, 0xa872,
0xb074, 0xa876, 0x7044, 0x9084, 0xf000, 0x9635, 0xae7a, 0x968c,
0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff,
@@ -5473,1234 +5700,1444 @@
0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886,
0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff,
0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
- 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc,
+ 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc,
0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260,
- 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011,
+ 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011,
0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009,
- 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xb4ea, 0x080c, 0x191a,
- 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xbf3b, 0x0904,
- 0xb178, 0x0cb0, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
- 0x1118, 0xa880, 0xc0dc, 0xa882, 0x6003, 0x0002, 0xa980, 0xd1e4,
- 0x0904, 0xb2f9, 0xd1cc, 0x0904, 0xb2cd, 0xa97c, 0xa86c, 0xd0fc,
- 0x0904, 0xb28e, 0x0016, 0xa880, 0x0006, 0xa884, 0x0006, 0x00a6,
- 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
- 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc,
- 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118,
- 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007,
- 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
- 0x9115, 0x190c, 0xb137, 0xa880, 0xb082, 0xa894, 0xb096, 0xa890,
- 0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0, 0x20a9,
- 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084,
- 0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa886,
- 0x000e, 0xc0cc, 0xa882, 0x080c, 0xbe96, 0x001e, 0xa878, 0x0006,
- 0x2148, 0x080c, 0x0fb3, 0x001e, 0x0804, 0xb2f7, 0x0016, 0x00a6,
- 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
- 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc,
- 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118,
- 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007,
- 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
- 0x9115, 0x190c, 0xb137, 0xa894, 0xb096, 0xa890, 0xb092, 0xa880,
- 0xb082, 0x00ae, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbe96, 0xa978,
- 0x0016, 0x080c, 0xb53b, 0x001e, 0x0450, 0xa86b, 0x0103, 0xa978,
- 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,
- 0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015, 0x080c,
- 0xbde9, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4, 0x0118,
- 0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac, 0x0128,
- 0xa834, 0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x080c,
- 0x9f18, 0x009e, 0x0005, 0x6114, 0x0096, 0x2148, 0xa980, 0xd1e4,
- 0x190c, 0x193c, 0x009e, 0x0005, 0x080c, 0x8b2b, 0x0010, 0x080c,
- 0x8be7, 0x080c, 0xb955, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c,
- 0xbb56, 0x1118, 0x080c, 0xa717, 0x00a0, 0xa86b, 0x0103, 0x2009,
- 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97e,
- 0x918e, 0x0029, 0x1110, 0x080c, 0xd242, 0xa87b, 0x0000, 0x080c,
- 0x6b1d, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0804, 0x8d06,
- 0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182, 0x0054,
- 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb352, 0xb352,
- 0xb352, 0xb352, 0xb352, 0xb354, 0xb352, 0xb352, 0xb352, 0xb352,
- 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352,
- 0xb352, 0xb352, 0x080c, 0x0dc4, 0x080c, 0x55af, 0x0528, 0x7144,
- 0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xbf3b, 0x006e, 0x11f0,
- 0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096,
- 0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139, 0x0128,
- 0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000, 0xa99e,
- 0xaaa2, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x0005, 0x9182,
- 0x0085, 0x0002, 0xb391, 0xb38f, 0xb38f, 0xb39d, 0xb38f, 0xb38f,
- 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0x080c,
- 0x0dc4, 0x6003, 0x000b, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x8c37, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6,
- 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xb943,
- 0x01c8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01a0, 0x6010, 0x6d10,
- 0x952e, 0x1180, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xb5b8, 0x00de,
- 0x00ce, 0x0128, 0x080c, 0xb578, 0x6007, 0x0086, 0x0028, 0x080c,
- 0xb5a7, 0x0dc0, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x86d0,
- 0x080c, 0x8c37, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186,
- 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
- 0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027,
- 0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c, 0x8b2b, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87b,
- 0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x080c, 0x9f42,
- 0x0804, 0x8c37, 0xb407, 0xb409, 0xb409, 0xb407, 0xb407, 0xb407,
- 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0x080c,
- 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005,
- 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x04ba,
- 0x9186, 0x0027, 0x11f8, 0x080c, 0x8b2b, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955, 0x0150, 0xa86b,
- 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x080c,
- 0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c,
- 0x9fa3, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x8b2b, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x0d60, 0xa86b, 0x0103, 0xa87b,
- 0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886, 0x08f0, 0xb45e,
- 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb469, 0xb45c, 0xb45c,
- 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0x080c, 0x0dc4, 0x080c, 0x8b2b,
- 0x2001, 0x1964, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8c37,
- 0x0005, 0x080c, 0x8b2b, 0x2001, 0x1964, 0x2004, 0x601a, 0x6003,
- 0x000e, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182,
- 0x0085, 0x0208, 0x0012, 0x0804, 0x9fa3, 0xb48a, 0xb48a, 0xb48a,
- 0xb48a, 0xb48c, 0xb4a4, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a,
- 0xb48a, 0xb48a, 0x080c, 0x0dc4, 0x0096, 0x080c, 0xb955, 0x1118,
- 0x080c, 0xbb39, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4, 0x1110,
- 0x080c, 0xbb39, 0xa86b, 0x0103, 0x080c, 0xbed3, 0x080c, 0x6b1d,
- 0x080c, 0x9f18, 0x009e, 0x0005, 0x0096, 0x6014, 0x2048, 0x080c,
- 0xb955, 0x01c8, 0xa86b, 0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec,
- 0xa886, 0xa87f, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002,
- 0x0020, 0xa87f, 0x0005, 0x080c, 0xbc45, 0xa87b, 0x0000, 0x080c,
- 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x0804, 0x9f18, 0x0016, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87f,
- 0x0028, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x009e, 0x001e, 0x9186,
- 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118,
- 0x080c, 0x9fa3, 0x0030, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c,
- 0x8c37, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001,
- 0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304,
- 0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x002a, 0x080c, 0xb54b,
- 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c,
- 0x1001, 0x0520, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920,
- 0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001c, 0x0499,
- 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c,
- 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
- 0x95ad, 0x0003, 0xb56a, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205,
- 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e,
- 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055,
- 0x0130, 0xa807, 0x0000, 0x080c, 0x6b1d, 0x2a48, 0x0cb8, 0x080c,
- 0x6b1d, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085,
- 0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001,
- 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300,
- 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018,
- 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
- 0x8109, 0x1d80, 0x7814, 0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005,
- 0x6920, 0x9186, 0x0003, 0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6,
- 0x00d6, 0x00e6, 0x2d60, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955,
- 0x0158, 0x0089, 0x2001, 0x0006, 0xa984, 0xc1d5, 0x080c, 0x6d45,
- 0x080c, 0x6b11, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f42, 0x00ee,
- 0x00de, 0x00ce, 0x0005, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c,
- 0x2048, 0x080c, 0x0fb3, 0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6,
+ 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x080c, 0x1962,
+ 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xc916, 0x0904,
+ 0xb890, 0x0cb0, 0x2001, 0x1964, 0x2004, 0x6042, 0x0096, 0x6114,
+ 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa880, 0xc0dc, 0xa882,
+ 0x6003, 0x0002, 0xa980, 0xd1e4, 0x0904, 0xba6f, 0x6043, 0x0000,
+ 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc,
+ 0x0904, 0xba3e, 0xa97c, 0xa86c, 0xd0fc, 0x0904, 0xb9ff, 0x0016,
+ 0xa880, 0x0006, 0xa884, 0x0006, 0x00a6, 0x2150, 0xb178, 0x9184,
+ 0x00ff, 0x90b6, 0x0002, 0x0904, 0xb9cc, 0x9086, 0x0028, 0x1904,
+ 0xb9b8, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x0804, 0xb9d4, 0x6024,
+ 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa94,
+ 0x9206, 0x1120, 0xa890, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4,
+ 0x1148, 0xa9b0, 0xa834, 0x9102, 0x603a, 0xa9b4, 0xa838, 0x9103,
+ 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c,
+ 0x8000, 0xb83e, 0x00be, 0x9006, 0xa87a, 0xa896, 0xa892, 0xa880,
+ 0xc0e4, 0xa882, 0xd0cc, 0x0140, 0xc0cc, 0xa882, 0x0096, 0xa87c,
+ 0x2048, 0x080c, 0x0fbf, 0x009e, 0x6218, 0x82ff, 0x0168, 0x2001,
+ 0x1964, 0x2004, 0x9202, 0x1240, 0xa86b, 0x0103, 0xa87f, 0x0006,
+ 0xa87b, 0x0000, 0x0804, 0xba66, 0x080c, 0xc4fe, 0x0804, 0xba6f,
+ 0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792,
+ 0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f,
+ 0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834,
+ 0xa938, 0x9115, 0x190c, 0xb84f, 0xa880, 0xb082, 0xa894, 0xb096,
+ 0xa890, 0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0,
+ 0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0,
+ 0x9084, 0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e,
+ 0xa886, 0x000e, 0xc0cc, 0xa882, 0x080c, 0xc86c, 0x001e, 0xa878,
+ 0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0804, 0xba6b, 0x0016,
+ 0x00a6, 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0,
+ 0x9086, 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0,
+ 0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792,
+ 0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f,
+ 0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834,
+ 0xa938, 0x9115, 0x190c, 0xb84f, 0xa894, 0xb096, 0xa890, 0xb092,
+ 0xa880, 0xb082, 0x00ae, 0x080c, 0x0fbf, 0x009e, 0x080c, 0xc86c,
+ 0xa978, 0x0016, 0x080c, 0xbd58, 0x001e, 0x0468, 0xa86b, 0x0103,
+ 0xa978, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028,
+ 0x1118, 0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015,
+ 0x080c, 0xc792, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4,
+ 0x0118, 0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac,
+ 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xb84f, 0xa978, 0x0016,
+ 0x080c, 0x6a1c, 0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e,
+ 0x0005, 0x080c, 0xc4c4, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa980,
+ 0xd1e4, 0x190c, 0x1984, 0x009e, 0x0005, 0x080c, 0x8d2c, 0x0010,
+ 0x080c, 0x8de8, 0x080c, 0xc1cd, 0x01f0, 0x0096, 0x6114, 0x2148,
+ 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x00a0, 0xa86b, 0x0103,
+ 0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108,
+ 0xa97e, 0x918e, 0x0029, 0x1110, 0x080c, 0xdfcf, 0xa87b, 0x0000,
+ 0x080c, 0x6c02, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0804,
+ 0x8f0e, 0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182,
+ 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbacb,
+ 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacd, 0xbacb, 0xbacb, 0xbacb,
+ 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb,
+ 0xbacb, 0xbacb, 0xbacb, 0x080c, 0x0dc3, 0x080c, 0x566c, 0x0528,
+ 0x7144, 0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xc916, 0x006e,
+ 0x11f0, 0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff,
+ 0x0096, 0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139,
+ 0x0128, 0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000,
+ 0xa99e, 0xaaa2, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x0005,
+ 0x9182, 0x0085, 0x0002, 0xbb0a, 0xbb08, 0xbb08, 0xbb16, 0xbb08,
+ 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08,
+ 0x080c, 0x0dc3, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x0026, 0x0056,
+ 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c,
+ 0xc1bb, 0x01f8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01d0, 0x6010,
+ 0x6d10, 0x952e, 0x11b0, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xbdd8,
+ 0x00de, 0x00ce, 0x0158, 0x702c, 0xd084, 0x1118, 0x080c, 0xbd95,
+ 0x0010, 0x6803, 0x0002, 0x6007, 0x0086, 0x0028, 0x080c, 0xbdc4,
+ 0x0d90, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x7220, 0x080c, 0xc1bb, 0x0178, 0x6810, 0x00b6, 0x2058,
+ 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6,
+ 0x2d60, 0x080c, 0xc4fe, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
+ 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
+ 0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00e2,
+ 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c,
+ 0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140, 0xa86b,
+ 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e,
+ 0x080c, 0xa3cf, 0x0804, 0x8e38, 0xbb99, 0xbb9b, 0xbb9b, 0xbb99,
+ 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99,
+ 0xbb99, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c,
+ 0x8e38, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,
+ 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8d2c, 0x080c,
+ 0x3102, 0x080c, 0xc8e3, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd,
+ 0x0150, 0xa86b, 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c,
+ 0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38,
+ 0x0005, 0x080c, 0xa434, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c,
+ 0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0d60, 0xa86b,
+ 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886,
+ 0x08f0, 0x0002, 0xbbf1, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef,
+ 0xbc09, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0x080c,
+ 0x0dc3, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+ 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010,
+ 0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8e38,
+ 0x0005, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+ 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010,
+ 0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x8e38,
+ 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012,
+ 0x0804, 0xa434, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc39, 0xbc86,
+ 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0x080c,
+ 0x0dc3, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+ 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
+ 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xbc9a, 0x080c, 0xc1cd,
+ 0x1118, 0x080c, 0xc3b4, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4,
+ 0x1110, 0x080c, 0xc3b4, 0xa86b, 0x0103, 0x080c, 0xc8a9, 0x080c,
+ 0x6c02, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01d0, 0x6003, 0x0001,
+ 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a,
+ 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xc640,
+ 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x2d60, 0x00de, 0x080c, 0xa39d, 0x009e, 0x0005, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00,
+ 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186,
+ 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc83f, 0x11f0, 0x080c,
+ 0xa347, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910,
+ 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff,
+ 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c,
+ 0xc640, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x00de, 0x0804,
+ 0xa39d, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c8, 0xa86b,
+ 0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec, 0xa886, 0xa87f, 0x0006,
+ 0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0020, 0xa87f, 0x0005,
+ 0x080c, 0xc4c0, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0xc3b4,
+ 0x009e, 0x0804, 0xa39d, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c,
+ 0xc1cd, 0x0140, 0xa86b, 0x0103, 0xa87f, 0x0028, 0xa87b, 0x0000,
+ 0x080c, 0x6c02, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186,
+ 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030,
+ 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0056,
+ 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208,
+ 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009,
+ 0x0020, 0x2011, 0x002a, 0x080c, 0xbd68, 0x96b2, 0x0020, 0xb004,
+ 0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c, 0x100d, 0x0520, 0x8528,
+ 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,
+ 0x1228, 0x2608, 0x2011, 0x001c, 0x0499, 0x00a8, 0x96b2, 0x003c,
+ 0x2009, 0x003c, 0x2950, 0x2011, 0x001c, 0x0451, 0x0c28, 0x2001,
+ 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a,
+ 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
+ 0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e, 0x006e, 0x005e, 0x0005,
+ 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000,
+ 0x080c, 0x6c02, 0x2a48, 0x0cb8, 0x080c, 0x6c02, 0x00ae, 0x0005,
+ 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184,
+ 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c,
+ 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003,
+ 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098,
+ 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7814,
+ 0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005, 0x6920, 0x9186, 0x0003,
+ 0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6, 0x00d6, 0x00e6, 0x2d60,
+ 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0158, 0x0089, 0x2001,
+ 0x0006, 0xa984, 0xc1d5, 0x080c, 0x6e4b, 0x080c, 0x6bf5, 0x080c,
+ 0xc3b4, 0x009e, 0x080c, 0xa3cf, 0x00ee, 0x00de, 0x00ce, 0x0005,
+ 0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf,
+ 0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6, 0x702c, 0xd084, 0x1170,
0x6008, 0x2060, 0x6020, 0x9086, 0x0002, 0x1140, 0x6104, 0x9186,
0x0085, 0x0118, 0x9186, 0x008b, 0x1108, 0x9006, 0x00ce, 0x0005,
0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084,
0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000,
0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e,
- 0x012e, 0x0005, 0xb5ef, 0xb5ef, 0xb5ea, 0xb60f, 0xb5e1, 0xb5ea,
- 0xb5e3, 0xb5ea, 0xb5ea, 0xb5e1, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5e1,
- 0xb5e1, 0x080c, 0x0dc4, 0x0036, 0x2019, 0x0010, 0x080c, 0xccbc,
+ 0x012e, 0x0005, 0xbe0f, 0xbe0f, 0xbe0a, 0xbe31, 0xbe01, 0xbe0a,
+ 0xbe31, 0xbe0a, 0xbe0a, 0xbe01, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe01,
+ 0xbe01, 0x080c, 0x0dc3, 0x0036, 0x2019, 0x0010, 0x080c, 0xd861,
0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x01c0, 0xa868, 0x9086, 0x0139,
- 0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028, 0x900e, 0x2001,
- 0x0005, 0x080c, 0x6d45, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x080c,
- 0x9f42, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000,
- 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002, 0xb625, 0xb655, 0xb627,
- 0xb676, 0xb650, 0xb625, 0xb5ea, 0xb5ef, 0xb5ef, 0xb5ea, 0xb5ea,
- 0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0x080c, 0x0dc4, 0x86ff,
- 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096, 0x6014, 0x2048,
- 0x080c, 0xb955, 0x0168, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xc0cc,
- 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbc45,
- 0x009e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
- 0x0002, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x9085, 0x0001, 0x0005,
- 0x0066, 0x080c, 0x1950, 0x006e, 0x0890, 0x00e6, 0x2071, 0x19c4,
- 0x7024, 0x9c06, 0x1120, 0x080c, 0x98ee, 0x00ee, 0x0840, 0x6020,
- 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
- 0x0001, 0x2c40, 0x080c, 0x9a12, 0x009e, 0x008e, 0x0010, 0x080c,
- 0x980e, 0x00ee, 0x1904, 0xb627, 0x0804, 0xb5ea, 0x0036, 0x00e6,
- 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x9964,
- 0x00ee, 0x003e, 0x0804, 0xb627, 0x080c, 0x9b40, 0x00ee, 0x003e,
- 0x1904, 0xb627, 0x0804, 0xb5ea, 0x00c6, 0x6020, 0x9084, 0x000f,
- 0x0013, 0x00ce, 0x0005, 0xb6a9, 0xb776, 0xb8a8, 0xb6b3, 0x9f42,
- 0xb6a9, 0xccb6, 0xbf15, 0xb776, 0xb6a2, 0xb91a, 0xb6a2, 0xb6a2,
- 0xb6a2, 0xb6a2, 0x080c, 0x0dc4, 0x080c, 0xbb56, 0x1110, 0x080c,
- 0xa717, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0804, 0x9f18,
- 0x601b, 0x0001, 0x0005, 0x080c, 0xb955, 0x0130, 0x6014, 0x0096,
- 0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a, 0x0010, 0x1a0c,
- 0x0dc4, 0x0002, 0xb6d2, 0xb6d4, 0xb6f8, 0xb70c, 0xb732, 0xb6d2,
- 0xb6a9, 0xb6a9, 0xb6a9, 0xb70c, 0xb70c, 0xb6d2, 0xb6d2, 0xb6d2,
- 0xb6d2, 0xb716, 0x080c, 0x0dc4, 0x00e6, 0x6014, 0x0096, 0x2048,
- 0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4, 0x7024, 0x9c06,
- 0x01a0, 0x080c, 0x980e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003,
- 0x000b, 0x6023, 0x0002, 0x2001, 0x1964, 0x2004, 0x601a, 0x080c,
- 0x86d0, 0x080c, 0x8c37, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8,
- 0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x080c,
- 0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,
- 0x86d0, 0x080c, 0x8c37, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014,
- 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005, 0x080c, 0x55af,
- 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868, 0xa86b, 0x0103,
- 0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b, 0x0139, 0xa87f,
- 0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c, 0x6b1d, 0x009e,
- 0x0804, 0x9f18, 0x6014, 0x0096, 0x904d, 0x05d8, 0xa980, 0xd1e4,
- 0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005,
- 0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001,
- 0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1553, 0x2001, 0x030c,
- 0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014, 0x0096, 0x904d,
- 0x090c, 0x0dc4, 0xa884, 0xd0f4, 0x1130, 0xc0f5, 0xa886, 0x009e,
- 0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c, 0x2217, 0x00ce,
- 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9f88,
- 0x0005, 0x009e, 0x080c, 0x1950, 0x0804, 0xb6f8, 0x6000, 0x908a,
- 0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xb78d, 0xb6b0, 0xb78f,
- 0xb78d, 0xb78f, 0xb78d, 0xb6aa, 0xb78d, 0xb6a4, 0xb6a4, 0xb78d,
- 0xb78d, 0xb78d, 0xb78d, 0xb78d, 0xb78d, 0x080c, 0x0dc4, 0x6010,
- 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c,
- 0x1a0c, 0x0dc4, 0x00b6, 0x0013, 0x00be, 0x0005, 0xb7aa, 0xb86e,
- 0xb7ac, 0xb7e1, 0xb7ac, 0xb7e1, 0xb7ac, 0xb7ba, 0xb7aa, 0xb7e1,
- 0xb7aa, 0xb7d0, 0x080c, 0x0dc4, 0x6004, 0x908e, 0x0016, 0x0568,
- 0x908e, 0x0004, 0x0550, 0x908e, 0x0002, 0x0538, 0x908e, 0x0052,
- 0x0904, 0xb86a, 0x6004, 0x080c, 0xbb56, 0x0904, 0xb887, 0x908e,
- 0x0004, 0x1110, 0x080c, 0x308f, 0x908e, 0x0021, 0x0904, 0xb88b,
- 0x908e, 0x0022, 0x0904, 0xb8a4, 0x908e, 0x003d, 0x0904, 0xb88b,
- 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff,
- 0x9086, 0x0006, 0x0110, 0x080c, 0x3066, 0x080c, 0xa717, 0x0804,
- 0x9f42, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb85b,
- 0x9186, 0x0002, 0x1904, 0xb830, 0x2001, 0x1836, 0x2004, 0xd08c,
- 0x11c8, 0x080c, 0x72e5, 0x11b0, 0x080c, 0xbef8, 0x0138, 0x080c,
- 0x7308, 0x1120, 0x080c, 0x71f0, 0x0804, 0xb88f, 0x2001, 0x195a,
- 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x7212,
- 0x0804, 0xb88f, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130,
- 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, 0xb88f, 0xb8a0, 0x9082,
- 0x0081, 0x1a04, 0xb88f, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180,
- 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,
- 0x080c, 0x9ec2, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458,
- 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058,
- 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085,
- 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x00ee, 0x080c,
- 0xa717, 0x0030, 0x080c, 0xa717, 0x080c, 0x3066, 0x080c, 0xbf0d,
- 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x308f, 0x012e, 0x00ee,
- 0x080c, 0x9f42, 0x0005, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003,
- 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x00de,
- 0x00ce, 0x0c80, 0x080c, 0x308f, 0x0804, 0xb7dd, 0x00c6, 0x00d6,
- 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084,
- 0x00ff, 0x9005, 0x0904, 0xb830, 0x8001, 0xb842, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x00de, 0x00ce, 0x0898, 0x080c,
- 0xa717, 0x0804, 0xb7df, 0x080c, 0xa753, 0x0804, 0xb7df, 0x00de,
- 0x00ce, 0x080c, 0xa717, 0x080c, 0x3066, 0x00e6, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x308f, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b,
- 0x0398, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa382, 0x1d00, 0x0005,
- 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0096, 0x00d6, 0x001b,
- 0x00de, 0x009e, 0x0005, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3,
- 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb6a9, 0xb8c3, 0xb6b0, 0xb8c5,
- 0xb6b0, 0xb8d2, 0xb8c3, 0x080c, 0x0dc4, 0x6004, 0x9086, 0x008b,
- 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x86d0, 0x080c,
- 0x8c37, 0x0005, 0x080c, 0xbeec, 0x0118, 0x080c, 0xbeff, 0x0010,
- 0x080c, 0xbf0d, 0x080c, 0xbb39, 0x080c, 0xb955, 0x0570, 0x080c,
- 0x3066, 0x080c, 0xb955, 0x0168, 0x6014, 0x2048, 0xa86b, 0x0103,
- 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ed, 0xa886, 0x080c,
- 0x6b1d, 0x2c68, 0x080c, 0x9ec2, 0x0150, 0x6810, 0x6012, 0x080c,
- 0xbc97, 0x00c6, 0x2d60, 0x080c, 0x9f42, 0x00ce, 0x0008, 0x2d60,
- 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0060, 0x080c, 0xbeec, 0x0138,
- 0x602c, 0x9086, 0x4000, 0x1118, 0x080c, 0x3066, 0x08d0, 0x080c,
- 0x9f42, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002,
- 0xb930, 0xb930, 0xb934, 0xb932, 0xb93e, 0xb930, 0xb930, 0x9f42,
- 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930,
- 0x080c, 0x0dc4, 0x080c, 0x9b40, 0x6114, 0x0096, 0x2148, 0xa87f,
- 0x0006, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x601c, 0xd084,
- 0x190c, 0x1950, 0x0c88, 0x9284, 0x0003, 0x1158, 0x9282, 0x1cc8,
+ 0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c0, 0xa868,
+ 0x9086, 0x0139, 0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028,
+ 0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x080c, 0xc4c0, 0x080c,
+ 0x6bf5, 0x080c, 0xa3cf, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006,
+ 0x0ce0, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbe47,
+ 0xbe77, 0xbe49, 0xbe98, 0xbe72, 0xbe47, 0xbe0a, 0xbe0f, 0xbe0f,
+ 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0x080c,
+ 0x0dc3, 0x86ff, 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096,
+ 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0168, 0xa880, 0xd0cc, 0x0140,
+ 0x0096, 0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e,
+ 0x080c, 0xc4c0, 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003,
+ 0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x9085,
+ 0x0001, 0x0005, 0x0066, 0x080c, 0x1998, 0x006e, 0x0890, 0x00e6,
+ 0x2071, 0x19c4, 0x7024, 0x9c06, 0x1120, 0x080c, 0x9bbf, 0x00ee,
+ 0x0840, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086,
+ 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x9ce3, 0x009e, 0x008e,
+ 0x0010, 0x080c, 0x9abc, 0x00ee, 0x1904, 0xbe49, 0x0804, 0xbe0a,
+ 0x0036, 0x00e6, 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e,
+ 0x080c, 0x9c35, 0x00ee, 0x003e, 0x0804, 0xbe49, 0x080c, 0x9e13,
+ 0x00ee, 0x003e, 0x1904, 0xbe49, 0x0804, 0xbe0a, 0x00c6, 0x6020,
+ 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb, 0xbf98, 0xc106,
+ 0xbed5, 0xa3cf, 0xbecb, 0xd857, 0xc8f0, 0xbf98, 0xbec4, 0xc192,
+ 0xbec4, 0xbec4, 0xbec4, 0xbec4, 0x080c, 0x0dc3, 0x080c, 0xc3d1,
+ 0x1110, 0x080c, 0xadb3, 0x0005, 0x080c, 0x8d2c, 0x080c, 0x8e38,
+ 0x0804, 0xa39d, 0x601b, 0x0001, 0x0005, 0x080c, 0xc1cd, 0x0130,
+ 0x6014, 0x0096, 0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a,
+ 0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbef4, 0xbef6, 0xbf1a, 0xbf2e,
+ 0xbf54, 0xbef4, 0xbecb, 0xbecb, 0xbecb, 0xbf2e, 0xbf2e, 0xbef4,
+ 0xbef4, 0xbef4, 0xbef4, 0xbf38, 0x080c, 0x0dc3, 0x00e6, 0x6014,
+ 0x0096, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4,
+ 0x7024, 0x9c06, 0x01a0, 0x080c, 0x9abc, 0x080c, 0xc883, 0x6007,
+ 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1963, 0x2004,
+ 0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ee, 0x0005, 0x601b,
+ 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886,
+ 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+ 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x601b,
+ 0x0001, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005,
+ 0x080c, 0x566c, 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868,
+ 0xa86b, 0x0103, 0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b,
+ 0x0139, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c,
+ 0x6c02, 0x009e, 0x0804, 0xa39d, 0x6014, 0x0096, 0x904d, 0x05d8,
+ 0xa980, 0xd1e4, 0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110,
+ 0x009e, 0x0005, 0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108,
+ 0x611a, 0x2001, 0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1568,
+ 0x2001, 0x030c, 0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014,
+ 0x0096, 0x904d, 0x090c, 0x0dc3, 0xa884, 0xd0f4, 0x1130, 0xc0f5,
+ 0xa886, 0x009e, 0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c,
+ 0x225f, 0x00ce, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048,
+ 0x080c, 0xa419, 0x0005, 0x009e, 0x080c, 0x1998, 0x0804, 0xbf1a,
+ 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xbfaf,
+ 0xbed2, 0xbfb1, 0xbfaf, 0xbfb1, 0xbfb1, 0xbecc, 0xbfaf, 0xbec6,
+ 0xbec6, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0x080c,
+ 0x0dc3, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be,
+ 0x908a, 0x000c, 0x1a0c, 0x0dc3, 0x00b6, 0x0013, 0x00be, 0x0005,
+ 0xbfcc, 0xc09d, 0xbfce, 0xc00e, 0xbfce, 0xc00e, 0xbfce, 0xbfdc,
+ 0xbfcc, 0xc00e, 0xbfcc, 0xbffd, 0x080c, 0x0dc3, 0x6004, 0x908e,
+ 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590,
+ 0x908e, 0x0052, 0x0904, 0xc099, 0x6004, 0x080c, 0xc3d1, 0x0904,
+ 0xc0b6, 0x908e, 0x0004, 0x1110, 0x080c, 0x312b, 0x908e, 0x0021,
+ 0x0904, 0xc0ba, 0x908e, 0x0022, 0x0904, 0xc101, 0x908e, 0x003d,
+ 0x0904, 0xc0ba, 0x908e, 0x0039, 0x0904, 0xc0be, 0x908e, 0x0035,
+ 0x0904, 0xc0be, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140,
+ 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110,
+ 0x080c, 0x3102, 0x080c, 0xadb3, 0x0804, 0xa3cf, 0x00c6, 0x00d6,
+ 0x6104, 0x9186, 0x0016, 0x0904, 0xc08a, 0x9186, 0x0002, 0x1904,
+ 0xc05f, 0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x7351,
+ 0x11b0, 0x080c, 0xc8ce, 0x0138, 0x080c, 0x7374, 0x1120, 0x080c,
+ 0x725c, 0x0804, 0xc0ea, 0x2001, 0x1959, 0x2003, 0x0001, 0x2001,
+ 0x1800, 0x2003, 0x0001, 0x080c, 0x727e, 0x0804, 0xc0ea, 0x6010,
+ 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130, 0x2001, 0x1836, 0x2004,
+ 0xd0ac, 0x1904, 0xc0ea, 0xb8a0, 0x9082, 0x0081, 0x1a04, 0xc0ea,
+ 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017,
+ 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c,
+ 0xa347, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de,
+ 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0,
+ 0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a,
+ 0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee, 0x080c, 0xadb3,
+ 0x0030, 0x080c, 0xadb3, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x012e, 0x00ee, 0x080c,
+ 0xa3cf, 0x0005, 0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001,
+ 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce,
+ 0x0c80, 0x080c, 0x312b, 0x0804, 0xc00a, 0x00c6, 0x00d6, 0x6104,
+ 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+ 0x9005, 0x0904, 0xc05f, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce, 0x0898, 0x080c, 0xadb3,
+ 0x0804, 0xc00c, 0x080c, 0xadef, 0x0804, 0xc00c, 0x00d6, 0x2c68,
+ 0x6104, 0x080c, 0xc83f, 0x00de, 0x0118, 0x080c, 0xa39d, 0x0408,
+ 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007,
+ 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001,
+ 0x1963, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xd0b4,
+ 0x0108, 0xc085, 0xc0b5, 0x6026, 0x2160, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x0005, 0x00de, 0x00ce, 0x080c, 0xadb3, 0x080c, 0x3102,
+ 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x6017, 0x0000,
+ 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x012e, 0x00ee,
+ 0x0005, 0x080c, 0xa820, 0x1904, 0xc0b6, 0x0005, 0x6000, 0x908a,
+ 0x0010, 0x1a0c, 0x0dc3, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e,
+ 0x0005, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121,
+ 0xc121, 0xc121, 0xbecb, 0xc121, 0xbed2, 0xc123, 0xbed2, 0xc13d,
+ 0xc121, 0x080c, 0x0dc3, 0x6004, 0x9086, 0x008b, 0x01b0, 0x6034,
+ 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x1130, 0x602c, 0x9080,
+ 0x0009, 0x200c, 0xc185, 0x2102, 0x6007, 0x008b, 0x6003, 0x000d,
+ 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x080c, 0xc8c2, 0x0118,
+ 0x080c, 0xc8d5, 0x0010, 0x080c, 0xc8e3, 0x080c, 0xc3b4, 0x080c,
+ 0xc1cd, 0x0570, 0x080c, 0x3102, 0x080c, 0xc1cd, 0x0168, 0x6014,
+ 0x2048, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884,
+ 0xc0ed, 0xa886, 0x080c, 0x6c02, 0x2c68, 0x080c, 0xa347, 0x0150,
+ 0x6810, 0x6012, 0x080c, 0xc640, 0x00c6, 0x2d60, 0x080c, 0xa3cf,
+ 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007,
+ 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00c8,
+ 0x080c, 0xc8c2, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c,
+ 0x3102, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
+ 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x3102, 0x0868, 0x080c,
+ 0xa3cf, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002,
+ 0xc1a8, 0xc1a8, 0xc1ac, 0xc1aa, 0xc1b6, 0xc1a8, 0xc1a8, 0xa3cf,
+ 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8,
+ 0x080c, 0x0dc3, 0x080c, 0x9e13, 0x6114, 0x0096, 0x2148, 0xa87f,
+ 0x0006, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x601c, 0xd084,
+ 0x190c, 0x1998, 0x0c88, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0,
0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001,
0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014,
0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110,
- 0x080c, 0x10ac, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,
- 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cc8, 0x2071, 0x1800,
- 0x7350, 0x7070, 0x9302, 0x1628, 0x6020, 0x9206, 0x11e0, 0x080c,
- 0xbef8, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,
- 0x1148, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x00c6, 0x080c, 0x9f42,
- 0x00ce, 0x0048, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717, 0x00c6,
- 0x080c, 0x9f18, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208,
- 0x08b8, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
- 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061,
- 0x1a92, 0x6112, 0x080c, 0x3066, 0x9006, 0x0010, 0x9085, 0x0001,
- 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x9ec2, 0x01b0, 0x6626, 0x2b00, 0x6012, 0x080c, 0x55af,
- 0x0118, 0x080c, 0xba81, 0x0168, 0x080c, 0xbc97, 0x6023, 0x0003,
- 0x2009, 0x004b, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce,
- 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0,
- 0x080c, 0x9f5b, 0x0560, 0x6027, 0x0000, 0x2b00, 0x6012, 0x080c,
- 0xbc97, 0x6023, 0x0003, 0x0016, 0x080c, 0x8843, 0x0076, 0x903e,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xd184,
- 0x0128, 0x080c, 0x9f18, 0x9085, 0x0001, 0x0070, 0x080c, 0x55af,
- 0x0128, 0xd18c, 0x1170, 0x080c, 0xba81, 0x0148, 0x2009, 0x004c,
- 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
- 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009,
- 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x9ec2, 0x2c78,
- 0x05a0, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0016, 0x2021,
- 0x0005, 0x080c, 0xba93, 0x001e, 0x9186, 0x004d, 0x0118, 0x9186,
- 0x004e, 0x0148, 0x2001, 0x195d, 0x200c, 0xd1fc, 0x0168, 0x2f60,
- 0x080c, 0x9f18, 0x00d0, 0x2001, 0x195c, 0x200c, 0xd1fc, 0x0120,
- 0x2f60, 0x080c, 0x9f18, 0x0088, 0x2f60, 0x080c, 0x55af, 0x0138,
- 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e,
- 0x0016, 0x080c, 0x9f88, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce,
- 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0x9ec2, 0x2c78,
- 0x0508, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021,
- 0x0004, 0x0489, 0x009e, 0x2001, 0x195b, 0x200c, 0xd1fc, 0x0120,
- 0x2f60, 0x080c, 0x9f18, 0x0060, 0x2f60, 0x080c, 0x55af, 0x0120,
- 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0x9f88,
- 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816,
- 0x0c98, 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x1120, 0x080c, 0x9f18,
- 0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f, 0x8000, 0x2900, 0x6016,
- 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x654a, 0x0138, 0x900e, 0x2400, 0x080c, 0x6d45, 0x080c,
- 0x6b1d, 0x0cb0, 0x2418, 0x080c, 0x8ac5, 0xbaa0, 0x0086, 0x2041,
- 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x885b, 0x008e, 0x080c,
- 0x8748, 0x2f08, 0x2648, 0x080c, 0xce89, 0xb93c, 0x81ff, 0x090c,
- 0x892e, 0x080c, 0x8c37, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0190, 0x660a, 0x2b08,
- 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
- 0x001f, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
- 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b,
- 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0008,
- 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1679, 0x00fe, 0x2009,
- 0x0021, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
- 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091,
- 0x8000, 0x080c, 0x9ec2, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c,
- 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006,
- 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0188,
- 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016,
- 0x2009, 0x0000, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce,
- 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049,
- 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110,
- 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004,
- 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004,
- 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0086,
- 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8, 0x6014, 0x904d, 0x080c,
- 0xb955, 0x0180, 0xa868, 0x9086, 0x0139, 0x0170, 0x6020, 0x90c6,
- 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128, 0xa86c, 0xd0fc, 0x0110,
- 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x008e, 0x000e, 0x0005,
- 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0198, 0x2b08,
- 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c,
- 0x3066, 0x2009, 0x0028, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e,
- 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011,
- 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa9a1,
- 0x00be, 0x080c, 0xabf3, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x0078, 0x6014, 0x0096, 0x2048, 0xa86c,
- 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xbe57, 0x080c,
- 0xa717, 0x080c, 0x9f18, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c,
- 0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f,
- 0x0004, 0xa86b, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d,
- 0x012e, 0x009e, 0x080c, 0x9f18, 0x0c30, 0x0096, 0x9186, 0x0016,
- 0x1128, 0x2001, 0x0004, 0x080c, 0x6372, 0x00e8, 0x9186, 0x0015,
- 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010,
- 0x00b6, 0x2058, 0x080c, 0x64ac, 0x00be, 0x080c, 0xacce, 0x1198,
- 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001,
- 0x0006, 0x080c, 0x6372, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0170,
- 0x080c, 0xa305, 0x0048, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0500,
- 0x080c, 0xa717, 0x080c, 0x9f18, 0x009e, 0x0005, 0x6014, 0x6310,
- 0x2358, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0000, 0xa887, 0x0000,
- 0xa89b, 0x4000, 0x080c, 0x6643, 0xa99e, 0x080c, 0x4d2a, 0x0126,
- 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0c20,
- 0x6014, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000,
+ 0x080c, 0x10b8, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,
+ 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800,
+ 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c,
+ 0xc8ce, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,
+ 0x1148, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00c6, 0x080c, 0xa3cf,
+ 0x00ce, 0x0060, 0x080c, 0xc5ba, 0x0148, 0x080c, 0xc3d1, 0x1110,
+ 0x080c, 0xadb3, 0x00c6, 0x080c, 0xa39d, 0x00ce, 0x9ce0, 0x0018,
+ 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce,
+ 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c,
+ 0x81ff, 0x0128, 0x2061, 0x1a92, 0x6112, 0x080c, 0x3102, 0x9006,
+ 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x01b0, 0x6656, 0x2b00,
+ 0x6012, 0x080c, 0x566c, 0x0118, 0x080c, 0xc2fc, 0x0168, 0x080c,
+ 0xc640, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126,
+ 0x2091, 0x8000, 0xbaa0, 0x080c, 0xa3ec, 0x0560, 0x6057, 0x0000,
+ 0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0003, 0x0016, 0x080c,
+ 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37,
+ 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0xa39d, 0x9085, 0x0001,
+ 0x0070, 0x080c, 0x566c, 0x0128, 0xd18c, 0x1170, 0x080c, 0xc2fc,
+ 0x0148, 0x2009, 0x004c, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e,
+ 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009,
+ 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016,
+ 0x080c, 0xa347, 0x2c78, 0x05a0, 0x7e56, 0x2b00, 0x7812, 0x7823,
+ 0x0003, 0x0016, 0x2021, 0x0005, 0x080c, 0xc30e, 0x001e, 0x9186,
+ 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x195c, 0x200c,
+ 0xd1fc, 0x0168, 0x2f60, 0x080c, 0xa39d, 0x00d0, 0x2001, 0x195b,
+ 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0088, 0x2f60,
+ 0x080c, 0x566c, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010,
+ 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046,
+ 0x080c, 0xa347, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823,
+ 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x195a,
+ 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0060, 0x2f60,
+ 0x080c, 0x566c, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009,
+ 0x0052, 0x080c, 0xa419, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe,
+ 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4b11, 0x00ce,
+ 0x1120, 0x080c, 0xa39d, 0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f,
+ 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0x6652, 0x0138, 0x900e, 0x2400,
+ 0x080c, 0x6e4b, 0x080c, 0x6c02, 0x0cb0, 0x2418, 0x080c, 0x8cc6,
+ 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c,
+ 0x8a43, 0x008e, 0x080c, 0x8919, 0x2f08, 0x2648, 0x080c, 0xda37,
+ 0xb93c, 0x81ff, 0x090c, 0x8b16, 0x080c, 0x8e38, 0x012e, 0x007e,
+ 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347,
+ 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+ 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
+ 0x8000, 0x080c, 0xa3ec, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c,
+ 0xc640, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c,
+ 0x16c1, 0x00fe, 0x2009, 0x0021, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6,
+ 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xa347, 0x0198, 0x660a,
+ 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001, 0x2900, 0x6016,
+ 0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001, 0x001e, 0x012e,
+ 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0xa3ec, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023,
+ 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044,
+ 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258,
+ 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005,
+ 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003,
+ 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e,
+ 0x0005, 0x0006, 0x0086, 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8,
+ 0x6014, 0x904d, 0x080c, 0xc1cd, 0x0180, 0xa868, 0x9086, 0x0139,
+ 0x0170, 0x6020, 0x90c6, 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128,
+ 0xa86c, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e,
+ 0x008e, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xa3ec, 0x0198, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+ 0x2900, 0x6016, 0x080c, 0x3102, 0x2009, 0x0028, 0x080c, 0xa419,
+ 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186,
+ 0x0015, 0x11a8, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178,
+ 0x00b6, 0x080c, 0xb055, 0x00be, 0x080c, 0xb2a7, 0x6003, 0x0001,
+ 0x6007, 0x0029, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0078, 0x6014,
+ 0x0096, 0x2048, 0xa86c, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001,
+ 0x080c, 0xc800, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x0005, 0x0096,
+ 0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f, 0x0030, 0xa887, 0x0000,
0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b, 0x0139, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0868, 0xa87c,
- 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, 0xa884, 0xc0ad, 0xa886,
- 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0x195f,
- 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x854b, 0x2001,
- 0x1963, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1961,
- 0x200c, 0x8000, 0x2014, 0x2071, 0x1949, 0x711a, 0x721e, 0x2001,
- 0x0064, 0x080c, 0x854b, 0x2001, 0x1964, 0x82ff, 0x1110, 0x2011,
- 0x0014, 0x2202, 0x080c, 0x6727, 0x00ee, 0x003e, 0x002e, 0x001e,
- 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1963, 0x2003,
- 0x0028, 0x2001, 0x1964, 0x2003, 0x0014, 0x2071, 0x1949, 0x701b,
- 0x0000, 0x701f, 0x07d0, 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096,
- 0x6028, 0x904d, 0x0110, 0x080c, 0x1033, 0x009e, 0x0005, 0x0005,
- 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0180, 0x2b08,
- 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0033,
- 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
- 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
- 0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086, 0x0014,
- 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c,
- 0x8e2f, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54,
- 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e,
- 0x080c, 0x30af, 0x080c, 0xa305, 0x0020, 0x080c, 0xa717, 0x080c,
- 0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206,
- 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2,
- 0x0188, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900,
- 0x6016, 0x2009, 0x004d, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e,
- 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
- 0x0016, 0x080c, 0x9ec2, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbc97,
- 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9f88, 0x9085,
- 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016,
- 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6,
- 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048,
- 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x197d,
- 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006,
- 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001c,
- 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xc443, 0x001e,
- 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa86b,
- 0x0103, 0x0010, 0x080c, 0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee,
- 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,
- 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8,
- 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c,
- 0x8e2f, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c, 0xaa7c,
- 0x9206, 0x1110, 0x080c, 0x3066, 0x080c, 0xa305, 0x0020, 0x080c,
- 0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c,
- 0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071,
- 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530,
- 0x6014, 0x2048, 0x2c78, 0x080c, 0x8e2f, 0x05f0, 0x7078, 0xaad0,
- 0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c, 0x3066,
- 0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552,
- 0x001e, 0x0010, 0x080c, 0x533c, 0x080c, 0xb955, 0x0508, 0xa87f,
- 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c, 0xb955,
- 0x01b8, 0x6014, 0x2048, 0x080c, 0x533c, 0x1d70, 0xa87f, 0x0030,
- 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126, 0x2091,
- 0x8000, 0xa86b, 0x0139, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18,
- 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206, 0x0930,
- 0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938, 0xaa34,
- 0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890, 0x9206,
- 0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,
- 0x00b6, 0x00d6, 0x0036, 0x080c, 0xb955, 0x0904, 0xbe53, 0x0096,
- 0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550, 0x6310,
- 0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110, 0x080c,
- 0x6643, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006,
- 0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036,
- 0x20a0, 0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x00ce,
- 0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086,
- 0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358, 0xb804,
- 0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c, 0x6b11,
- 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, 0x0026,
- 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210,
- 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084,
- 0x00ff, 0x900e, 0x080c, 0x269f, 0x2118, 0x831f, 0x939c, 0xff00,
- 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
- 0x4abd, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89f,
- 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096, 0x0002,
- 0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x00fe,
- 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0xa978, 0xd1cc,
- 0x0198, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c,
- 0x000f, 0x918e, 0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834,
- 0xa938, 0x9115, 0x190c, 0xb137, 0x0005, 0x0036, 0x2019, 0x0001,
- 0x0010, 0x0036, 0x901e, 0x04c1, 0x01e0, 0x080c, 0xb955, 0x01c8,
- 0x080c, 0xbb39, 0x602f, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096,
- 0x2048, 0xa880, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0040,
- 0xa86b, 0x0103, 0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6b1d,
- 0x009e, 0x003e, 0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006,
- 0xc0ec, 0xa886, 0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048,
- 0xd0dc, 0x0118, 0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c,
- 0xbc45, 0xa87b, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec,
- 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005,
- 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036,
- 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007,
- 0x080c, 0x4c74, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005,
- 0x2001, 0x1963, 0x2004, 0x601a, 0x0005, 0x080c, 0x9f18, 0x0804,
- 0x8c37, 0x2001, 0x0109, 0x2004, 0xd084, 0x01e0, 0x0126, 0x2091,
- 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6,
- 0x2079, 0x19c4, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x85b8,
- 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e,
- 0x9085, 0x0001, 0x0005, 0x0016, 0x0026, 0x2009, 0x1823, 0x210c,
- 0x9694, 0x0c00, 0x0118, 0x9182, 0x0010, 0x02c8, 0x9016, 0xd6cc,
- 0x0120, 0x9182, 0x0014, 0x0298, 0x7254, 0x9006, 0xd6c4, 0x0120,
- 0x9182, 0x0018, 0x0260, 0x705c, 0x9200, 0x0248, 0x0128, 0x9080,
- 0x0018, 0x9102, 0x0220, 0x9006, 0x002e, 0x001e, 0x0005, 0x080c,
- 0x826a, 0x9085, 0x0001, 0x0cc0, 0x00b6, 0x0066, 0x6000, 0x90b2,
- 0x0010, 0x1a0c, 0x0dc4, 0x001b, 0x006e, 0x00be, 0x0005, 0xbf7f,
- 0xc5a8, 0xc71d, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbfb6,
- 0xc79a, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0x080c,
- 0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013,
- 0x006e, 0x0005, 0xbf9a, 0xcc4f, 0xbf9a, 0xbf9a, 0xbf9a, 0xbf9a,
- 0xbf9a, 0xbf9a, 0xcbfc, 0xcca3, 0xbf9a, 0xd1a5, 0xd1db, 0xd1a5,
- 0xd1db, 0xbf9a, 0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c,
- 0x0dc4, 0x6000, 0x000a, 0x0005, 0xbfb4, 0xc96b, 0xca29, 0xca43,
- 0xcace, 0xbfb4, 0xcb6f, 0xcb27, 0xc7a6, 0xcbd2, 0xcbe7, 0xbfb4,
- 0xbfb4, 0xbfb4, 0xbfb4, 0xbfb4, 0x080c, 0x0dc4, 0x91b2, 0x0054,
- 0x1a0c, 0x0dc4, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xc34c, 0x0002,
- 0xc000, 0xc214, 0xc000, 0xc000, 0xc000, 0xc21d, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc002,
- 0xc065, 0xc074, 0xc0dd, 0xc113, 0xc18c, 0xc1ff, 0xc000, 0xc000,
- 0xc220, 0xc000, 0xc000, 0xc235, 0xc242, 0xc000, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc2e8, 0xc000, 0xc000, 0xc2fc, 0xc000, 0xc000,
- 0xc2b7, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc314,
- 0x080c, 0x0dc4, 0x080c, 0x6704, 0x1150, 0x2001, 0x1836, 0x2004,
- 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007,
- 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xc20d, 0x080c,
- 0x66fc, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258,
- 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x903e,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0x001e,
- 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x6420,
- 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026,
- 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xd2d2,
- 0x002e, 0x001e, 0x1178, 0x080c, 0xcdbb, 0x1904, 0xc0d5, 0x080c,
- 0xcd57, 0x1120, 0x6007, 0x0008, 0x0804, 0xc20d, 0x6007, 0x0009,
- 0x0804, 0xc20d, 0x080c, 0xcffa, 0x0128, 0x080c, 0xcdbb, 0x0d78,
- 0x0804, 0xc0d5, 0x6017, 0x1900, 0x0c88, 0x080c, 0x318a, 0x1904,
- 0xc349, 0x6106, 0x080c, 0xccfb, 0x6007, 0x0006, 0x0804, 0xc20d,
- 0x6007, 0x0007, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x6610, 0x2658, 0xbe04,
- 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
- 0x635e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686,
- 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140,
- 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x04a8,
- 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1168, 0x7034,
- 0x908a, 0x0014, 0x0248, 0x2009, 0x1823, 0x210c, 0x9102, 0x0220,
- 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f,
- 0x0007, 0x00b0, 0x00ee, 0x080c, 0xce1f, 0x1190, 0x9686, 0x0006,
- 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x30af,
- 0x002e, 0x080c, 0x64ac, 0x6007, 0x000a, 0x00de, 0x0804, 0xc20d,
- 0x6007, 0x000b, 0x00de, 0x0804, 0xc20d, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x6007, 0x0001, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904,
- 0xc349, 0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x00e6, 0x2071,
- 0x0260, 0x7034, 0x90b4, 0x0003, 0x1938, 0x2031, 0x1823, 0x2634,
- 0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04, 0xc0b4, 0x7030, 0x9084,
- 0x0003, 0x1904, 0xc0b4, 0x00ee, 0x00de, 0x6610, 0x2658, 0xbe04,
- 0x9686, 0x0707, 0x0990, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e,
- 0x080c, 0x30af, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c,
- 0xd2b1, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001, 0x1836,
- 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc00f,
- 0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082,
- 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x639e,
- 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
- 0x9686, 0x0006, 0x1904, 0xc0d5, 0x080c, 0xce2c, 0x1120, 0x6007,
- 0x000e, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,
- 0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016, 0x9006, 0x2009,
- 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xd156,
- 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007,
- 0x0001, 0x0804, 0xc20d, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156,
- 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
- 0x0270, 0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005,
- 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xc0d5,
- 0x9682, 0x0007, 0x0a04, 0xc13c, 0x0804, 0xc0d5, 0x6017, 0x1900,
- 0x6007, 0x0009, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001,
- 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804,
- 0xc00f, 0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff,
- 0x0006, 0x0016, 0x908e, 0x0001, 0x0118, 0x908e, 0x0000, 0x1118,
- 0x001e, 0x000e, 0x0080, 0x001e, 0x000e, 0x9082, 0x0006, 0x06a0,
- 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686,
- 0x0006, 0x1904, 0xc0d5, 0x080c, 0xce5a, 0x1138, 0x080c, 0xcd57,
- 0x1120, 0x6007, 0x0010, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458,
- 0xbca0, 0x0046, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016,
- 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029,
- 0x080c, 0xd156, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,
- 0x004e, 0x6007, 0x0001, 0x0448, 0x080c, 0xcffa, 0x0198, 0x0016,
- 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160, 0x9186, 0x0003, 0x0148,
- 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0920, 0x0804,
- 0xc0d5, 0x001e, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c,
- 0x318a, 0x1904, 0xc349, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c,
- 0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0cb0, 0x6007, 0x0005, 0x0c68,
- 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a, 0x1904, 0xc349,
- 0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0020, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x080c, 0x318a, 0x1904,
- 0xc349, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8718, 0x080c,
- 0x8c37, 0x0005, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a,
- 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x0016, 0x0026,
- 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011, 0x181f, 0x2214, 0x703c,
- 0x9206, 0x11e0, 0x2011, 0x181e, 0x2214, 0x7038, 0x9084, 0x00ff,
- 0x9206, 0x11a0, 0x7240, 0x080c, 0xb943, 0x0570, 0x2260, 0x6008,
- 0x9086, 0xffff, 0x0120, 0x7244, 0x6008, 0x9206, 0x1528, 0x6020,
- 0x9086, 0x0007, 0x1508, 0x080c, 0x9f18, 0x04a0, 0x7244, 0x9286,
- 0xffff, 0x0180, 0x2c08, 0x080c, 0xb943, 0x01b0, 0x2260, 0x7240,
- 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206,
- 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xd128, 0x1180,
- 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017,
- 0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068,
- 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110,
- 0x080c, 0x9f18, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001,
- 0x0001, 0x080c, 0x635e, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
- 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xad79, 0x003e,
- 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xc20d,
- 0x080c, 0xa9b9, 0x080c, 0x72e5, 0x1190, 0x0006, 0x0026, 0x0036,
- 0x080c, 0x72ff, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
- 0x7212, 0x0010, 0x080c, 0x72bd, 0x003e, 0x002e, 0x000e, 0x0005,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5,
- 0x6106, 0x080c, 0xc4fc, 0x1120, 0x6007, 0x002b, 0x0804, 0xc20d,
- 0x6007, 0x002c, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5,
- 0x6106, 0x080c, 0xc501, 0x1120, 0x6007, 0x002e, 0x0804, 0xc20d,
- 0x6007, 0x002f, 0x0804, 0xc20d, 0x00e6, 0x0026, 0x080c, 0x6704,
- 0x0550, 0x080c, 0x66fc, 0x080c, 0xd205, 0x1518, 0x2071, 0x1800,
- 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac,
- 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205,
- 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6742, 0x0120,
- 0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2e5f,
- 0x0010, 0x080c, 0xd239, 0x002e, 0x00ee, 0x080c, 0x9f18, 0x0804,
- 0xc213, 0x080c, 0x9f18, 0x0005, 0x2600, 0x0002, 0xc362, 0xc362,
- 0xc362, 0xc362, 0xc362, 0xc364, 0xc362, 0xc362, 0xc362, 0xc362,
- 0xc37e, 0xc362, 0xc362, 0xc362, 0xc390, 0xc3a6, 0xc3d7, 0xc362,
- 0xc362, 0xc3dc, 0x080c, 0x0dc4, 0x080c, 0xd1fc, 0x1d10, 0x080c,
- 0x318a, 0x19f8, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x0005, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x6007,
- 0x0001, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005, 0x080c, 0xd1fc,
- 0x1940, 0x080c, 0x318a, 0x1928, 0x080c, 0xc4e0, 0x1d60, 0x703c,
- 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005,
- 0x2001, 0x1823, 0x2004, 0x9082, 0x00e1, 0x1268, 0x080c, 0xc3ea,
- 0x0904, 0xc349, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x8718,
- 0x080c, 0x8c37, 0x0005, 0x6007, 0x0012, 0x0cb0, 0x6007, 0x004f,
- 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186,
- 0x0001, 0x1160, 0x7140, 0x2001, 0x199a, 0x2004, 0x9106, 0x11b0,
- 0x7144, 0x2001, 0x199b, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002,
- 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
- 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x0110, 0x6017, 0x0001,
- 0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x6007,
- 0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c, 0xd1fc, 0x1904, 0xc349,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x6007, 0x0053, 0x6003, 0x0001,
- 0x0804, 0x8718, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6,
+ 0x8000, 0x080c, 0x6c02, 0x012e, 0x009e, 0x080c, 0xa39d, 0x0c30,
+ 0x0096, 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6448,
+ 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086,
+ 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x6597, 0x00be,
+ 0x080c, 0xb382, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be,
+ 0x9005, 0x0160, 0x2001, 0x0006, 0x080c, 0x6448, 0x6014, 0x2048,
+ 0xa86c, 0xd0fc, 0x0170, 0x080c, 0xa7a3, 0x0048, 0x6014, 0x2048,
+ 0xa86c, 0xd0fc, 0x0500, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x009e,
+ 0x0005, 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0dc3, 0xa87f,
+ 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x080c, 0x674b, 0xa99e,
+ 0x080c, 0x4de7, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e,
+ 0x080c, 0xa39d, 0x0c20, 0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f,
+ 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b,
+ 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x080c,
+ 0xa39d, 0x0868, 0xa87c, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005,
+ 0xa884, 0xc0ad, 0xa886, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000,
+ 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+ 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb,
+ 0xc4f0, 0xc4f0, 0xc4f3, 0xdd67, 0xdd82, 0xdd85, 0xbecb, 0xbecb,
+ 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0x080c, 0x0dc3,
+ 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa880,
+ 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1833, 0x2004,
+ 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xa347, 0x0508, 0x7810,
+ 0x6012, 0x080c, 0xc640, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
+ 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
+ 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
+ 0x6156, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2f60, 0x00fe, 0x0005,
+ 0x2f60, 0x00fe, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005, 0x0016,
+ 0x0096, 0x6814, 0x2048, 0xa880, 0xd0e4, 0x0180, 0xc0e4, 0xa882,
+ 0xa87b, 0x0000, 0xa897, 0x0000, 0xa893, 0x0000, 0xd0cc, 0x0130,
+ 0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x6830, 0x6036,
+ 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170,
+ 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803,
+ 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048,
+ 0xa8b0, 0x6938, 0x9102, 0xa8b4, 0x693c, 0x9103, 0x1e48, 0x683c,
+ 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
+ 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001,
+ 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
+ 0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
+ 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046,
+ 0x0036, 0x2400, 0xacb0, 0x9402, 0xa836, 0x2300, 0xabb4, 0x9303,
+ 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
+ 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5,
+ 0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
+ 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
+ 0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
+ 0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
+ 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
+ 0x195e, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x871c,
+ 0x2001, 0x1962, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
+ 0x1960, 0x200c, 0x8000, 0x2014, 0x2071, 0x1948, 0x711a, 0x721e,
+ 0x2001, 0x0064, 0x080c, 0x871c, 0x2001, 0x1963, 0x82ff, 0x1110,
+ 0x2011, 0x0014, 0x2202, 0x2001, 0x1964, 0x9288, 0x000a, 0x2102,
+ 0x2001, 0x1a73, 0x2102, 0x2001, 0x0032, 0x080c, 0x1568, 0x080c,
+ 0x684e, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
+ 0x0016, 0x00e6, 0x2001, 0x1962, 0x2003, 0x0028, 0x2001, 0x1963,
+ 0x2003, 0x0014, 0x2071, 0x1948, 0x701b, 0x0000, 0x701f, 0x07d0,
+ 0x2001, 0x1964, 0x2009, 0x001e, 0x2102, 0x2001, 0x1a73, 0x2102,
+ 0x2001, 0x0032, 0x080c, 0x1568, 0x00ee, 0x001e, 0x000e, 0x0005,
+ 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x103f, 0x009e, 0x0005,
+ 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x0180,
+ 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
+ 0x0033, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
+ 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
+ 0x0015, 0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086,
+ 0x0014, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78,
+ 0x080c, 0x9037, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c,
+ 0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+ 0x900e, 0x080c, 0x314b, 0x080c, 0xa7a3, 0x0020, 0x080c, 0xadb3,
+ 0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54,
+ 0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xa347, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+ 0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
+ 0x8000, 0x0016, 0x080c, 0xa347, 0x0180, 0x2b08, 0x6112, 0x080c,
+ 0xc640, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xa419,
+ 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0,
+ 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6,
+ 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014,
+ 0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001,
+ 0x197d, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906,
+ 0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080,
+ 0x001c, 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xcf43,
+ 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048,
+ 0xa86b, 0x0103, 0x0010, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe,
+ 0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+ 0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
+ 0x11b8, 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78,
+ 0x080c, 0x9037, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c,
+ 0xaa7c, 0x9206, 0x1110, 0x080c, 0x3102, 0x080c, 0xa7a3, 0x0020,
+ 0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005,
+ 0x705c, 0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6,
+ 0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004,
+ 0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9037, 0x05f0, 0x7078,
+ 0xaad0, 0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c,
+ 0x3102, 0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c,
+ 0x560f, 0x001e, 0x0010, 0x080c, 0x53f9, 0x080c, 0xc1cd, 0x0508,
+ 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c,
+ 0xc1cd, 0x01b8, 0x6014, 0x2048, 0x080c, 0x53f9, 0x1d70, 0xa87f,
+ 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126,
+ 0x2091, 0x8000, 0xa86b, 0x0139, 0x080c, 0x6c02, 0x012e, 0x080c,
+ 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206,
+ 0x0930, 0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938,
+ 0xaa34, 0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890,
+ 0x9206, 0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e,
+ 0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xc1cd, 0x0904, 0xc7fc,
+ 0x0096, 0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550,
+ 0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110,
+ 0x080c, 0x674b, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8,
+ 0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080,
+ 0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa85c, 0x9080,
+ 0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a,
+ 0x00ce, 0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004,
+ 0x9086, 0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358,
+ 0xb804, 0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c,
+ 0x6bf5, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005,
+ 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248,
+ 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814,
+ 0x9084, 0x00ff, 0x900e, 0x080c, 0x2708, 0x2118, 0x831f, 0x939c,
+ 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018,
+ 0x080c, 0x4b6d, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180,
+ 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096,
+ 0x0002, 0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae,
+ 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6,
+ 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c,
+ 0x080c, 0xc1bb, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118,
+ 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206,
+ 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c,
+ 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce,
+ 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa978, 0xd1cc, 0x0198, 0x918c,
+ 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c, 0x000f, 0x918e,
+ 0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
+ 0x190c, 0xb84f, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,
+ 0x901e, 0x04c1, 0x01e0, 0x080c, 0xc1cd, 0x01c8, 0x080c, 0xc3b4,
+ 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa880,
+ 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0040, 0xa86b, 0x0103,
+ 0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6c02, 0x009e, 0x003e,
+ 0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006, 0xc0ec, 0xa886,
+ 0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048, 0xd0dc, 0x0118,
+ 0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c, 0xc4c0, 0xa87b,
+ 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006,
+ 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001,
+ 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010,
+ 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4d24,
+ 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1962,
+ 0x2004, 0x601a, 0x0005, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005,
+ 0x080c, 0xa39d, 0x0804, 0x8e38, 0x2001, 0x0109, 0x2004, 0xd084,
+ 0x01e0, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x0036,
+ 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19c4, 0x2071, 0x1800, 0x2061,
+ 0x0100, 0x080c, 0x8789, 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e,
+ 0x001e, 0x000e, 0x012e, 0x9085, 0x0001, 0x0005, 0x0016, 0x0026,
+ 0x2009, 0x1823, 0x210c, 0x9694, 0x0c00, 0x0118, 0x9182, 0x0010,
+ 0x02c8, 0x9016, 0xd6cc, 0x0120, 0x9182, 0x0014, 0x0298, 0x7254,
+ 0x9006, 0xd6c4, 0x0120, 0x9182, 0x0018, 0x0260, 0x705c, 0x9200,
+ 0x0248, 0x0128, 0x9080, 0x0018, 0x9102, 0x0220, 0x9006, 0x002e,
+ 0x001e, 0x0005, 0x080c, 0x83cc, 0x9085, 0x0001, 0x0cc0, 0x00b6,
+ 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x001b, 0x006e,
+ 0x00be, 0x0005, 0xc95a, 0xd0a8, 0xd21d, 0xc95a, 0xc95a, 0xc95a,
+ 0xc95a, 0xc95a, 0xc991, 0xd2a1, 0xc95a, 0xc95a, 0xc95a, 0xc95a,
+ 0xc95a, 0xc95a, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010,
+ 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xc975, 0xd7f0, 0xc975,
+ 0xc975, 0xc975, 0xc975, 0xc975, 0xc975, 0xd79d, 0xd844, 0xc975,
+ 0xde9a, 0xded0, 0xde9a, 0xded0, 0xc975, 0x080c, 0x0dc3, 0x6000,
+ 0x9082, 0x0010, 0x1a0c, 0x0dc3, 0x6000, 0x000a, 0x0005, 0xc98f,
+ 0xd47f, 0xd54e, 0xd571, 0xd631, 0xc98f, 0xd710, 0xd6b9, 0xd2ad,
+ 0xd773, 0xd788, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0x080c,
+ 0x0dc3, 0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x2100, 0x91b2, 0x0040,
+ 0x1a04, 0xce2f, 0x0002, 0xc9db, 0xcbef, 0xc9db, 0xc9db, 0xc9db,
+ 0xcbf8, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+ 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+ 0xc9db, 0xc9db, 0xc9dd, 0xca40, 0xca4f, 0xcab8, 0xcaee, 0xcb67,
+ 0xcbda, 0xc9db, 0xc9db, 0xcbfb, 0xc9db, 0xc9db, 0xcc10, 0xcc1d,
+ 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xccc3, 0xc9db, 0xc9db,
+ 0xccd7, 0xc9db, 0xc9db, 0xcc92, 0xc9db, 0xc9db, 0xc9db, 0xccef,
+ 0xc9db, 0xc9db, 0xc9db, 0xcd6c, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+ 0xc9db, 0xc9db, 0xcdf7, 0x080c, 0x0dc3, 0x080c, 0x682b, 0x1150,
+ 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086,
+ 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000,
+ 0x0804, 0xcbe8, 0x080c, 0x6814, 0x00e6, 0x00c6, 0x0036, 0x0026,
+ 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
+ 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37,
+ 0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,
+ 0x2658, 0x080c, 0x650b, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
+ 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+ 0x2c08, 0x080c, 0xe05f, 0x002e, 0x001e, 0x1178, 0x080c, 0xd969,
+ 0x1904, 0xcab0, 0x080c, 0xd905, 0x1120, 0x6007, 0x0008, 0x0804,
+ 0xcbe8, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c, 0xdba8, 0x0128,
+ 0x080c, 0xd969, 0x0d78, 0x0804, 0xcab0, 0x6017, 0x1900, 0x0c88,
+ 0x080c, 0x3226, 0x1904, 0xce2c, 0x6106, 0x080c, 0xd8a9, 0x6007,
+ 0x0006, 0x0804, 0xcbe8, 0x6007, 0x0007, 0x0804, 0xcbe8, 0x080c,
+ 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x00d6,
+ 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220,
+ 0x2001, 0x0001, 0x080c, 0x6434, 0x96b4, 0xff00, 0x8637, 0x9686,
+ 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff,
+ 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005,
+ 0x0110, 0x00de, 0x04a8, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084,
+ 0x0003, 0x1168, 0x7034, 0x908a, 0x0014, 0x0248, 0x2009, 0x1823,
+ 0x210c, 0x9102, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee,
+ 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xd9cd,
+ 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0,
+ 0x900e, 0x080c, 0x314b, 0x002e, 0x080c, 0x6597, 0x6007, 0x000a,
+ 0x00de, 0x0804, 0xcbe8, 0x6007, 0x000b, 0x00de, 0x0804, 0xcbe8,
+ 0x080c, 0x3102, 0x080c, 0xc8e3, 0x6007, 0x0001, 0x0804, 0xcbe8,
+ 0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c,
+ 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1938,
+ 0x2031, 0x1823, 0x2634, 0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04,
+ 0xca8f, 0x7030, 0x9084, 0x0003, 0x1904, 0xca8f, 0x00ee, 0x00de,
+ 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x0990, 0x0026, 0x6210,
+ 0x2258, 0xbaa0, 0x900e, 0x080c, 0x314b, 0x002e, 0x6007, 0x000c,
+ 0x2001, 0x0001, 0x080c, 0xe03e, 0x0804, 0xcbe8, 0x080c, 0x682b,
+ 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
+ 0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658, 0xbe04,
+ 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001,
+ 0x0006, 0x080c, 0x6474, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637,
+ 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c,
+ 0xd9da, 0x1120, 0x6007, 0x000e, 0x0804, 0xcbe8, 0x0046, 0x6410,
+ 0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x004e,
+ 0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009,
+ 0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
+ 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xcbe8, 0x2001, 0x0001,
+ 0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
+ 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xb434, 0x003e, 0x002e,
+ 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682,
+ 0x0004, 0x0a04, 0xcab0, 0x9682, 0x0007, 0x0a04, 0xcb17, 0x0804,
+ 0xcab0, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c,
+ 0x682b, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,
+ 0x0008, 0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658,
+ 0xbe04, 0x9684, 0x00ff, 0x0006, 0x0016, 0x908e, 0x0001, 0x0118,
+ 0x908e, 0x0000, 0x1118, 0x001e, 0x000e, 0x0080, 0x001e, 0x000e,
+ 0x9082, 0x0006, 0x06a0, 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686,
+ 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c, 0xda08,
+ 0x1138, 0x080c, 0xd905, 0x1120, 0x6007, 0x0010, 0x0804, 0xcbe8,
+ 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c,
+ 0xc8e3, 0x004e, 0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4,
+ 0x0148, 0x2009, 0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800,
+ 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0448, 0x080c,
+ 0xdba8, 0x0198, 0x0016, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160,
+ 0x9186, 0x0003, 0x0148, 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686,
+ 0x0006, 0x0920, 0x0804, 0xcab0, 0x001e, 0x6017, 0x1900, 0x6007,
+ 0x0009, 0x0070, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xdf0c,
+ 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007, 0x0012,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007,
+ 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0cb0,
+ 0x6007, 0x0005, 0x0c68, 0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c,
+ 0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007,
+ 0x0020, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005,
+ 0x080c, 0x3226, 0x1904, 0xce2c, 0x6007, 0x0023, 0x6003, 0x0001,
+ 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf0c, 0x1904,
+ 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904,
+ 0xcab0, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011,
+ 0x181f, 0x2214, 0x703c, 0x9206, 0x11e0, 0x2011, 0x181e, 0x2214,
+ 0x7038, 0x9084, 0x00ff, 0x9206, 0x11a0, 0x7240, 0x080c, 0xc1bb,
+ 0x0570, 0x2260, 0x6008, 0x9086, 0xffff, 0x0120, 0x7244, 0x6008,
+ 0x9206, 0x1528, 0x6020, 0x9086, 0x0007, 0x1508, 0x080c, 0xa39d,
+ 0x04a0, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xc1bb,
+ 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190,
+ 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006,
+ 0x080c, 0xdcea, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160,
+ 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180,
+ 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004,
+ 0x9086, 0x0024, 0x1110, 0x080c, 0xa39d, 0x2160, 0x6007, 0x0025,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ee, 0x002e,
+ 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016,
+ 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
+ 0x080c, 0xb434, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007,
+ 0x0031, 0x0804, 0xcbe8, 0x080c, 0xb06d, 0x080c, 0x7351, 0x1190,
+ 0x0006, 0x0026, 0x0036, 0x080c, 0x736b, 0x1138, 0x080c, 0x764c,
+ 0x080c, 0x5fb3, 0x080c, 0x727e, 0x0010, 0x080c, 0x7329, 0x003e,
+ 0x002e, 0x000e, 0x0005, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c,
+ 0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xcffc, 0x1120, 0x6007,
+ 0x002b, 0x0804, 0xcbe8, 0x6007, 0x002c, 0x0804, 0xcbe8, 0x080c,
+ 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c,
+ 0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xd001, 0x1120, 0x6007,
+ 0x002e, 0x0804, 0xcbe8, 0x6007, 0x002f, 0x0804, 0xcbe8, 0x080c,
+ 0x3226, 0x1904, 0xce2c, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058,
+ 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00,
+ 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804,
+ 0xcbef, 0x080c, 0x5668, 0xd0e4, 0x0904, 0xcd69, 0x2071, 0x026c,
+ 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6869,
+ 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206,
+ 0x0510, 0x080c, 0x6865, 0x15b8, 0x2069, 0x1800, 0x687c, 0x9206,
+ 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c, 0xc1bb, 0x0590,
+ 0x080c, 0xcecd, 0x0578, 0x080c, 0xdd94, 0x0560, 0x622e, 0x6007,
+ 0x0036, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce,
+ 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c,
+ 0xc1bb, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190,
+ 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10,
+ 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017,
+ 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700,
+ 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x3226, 0x1904, 0xce2c,
+ 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006,
+ 0x1904, 0xcbef, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x5668, 0xd0e4,
+ 0x0904, 0xcdef, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a,
+ 0x720c, 0x623e, 0x9286, 0xffff, 0x1158, 0x7208, 0x00c6, 0x2c08,
+ 0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10, 0x00ce, 0x0904, 0xcde2,
+ 0x080c, 0xc1bb, 0x0904, 0xcde2, 0x7108, 0x9280, 0x0002, 0x2004,
+ 0x9106, 0x1904, 0xcde2, 0x00c6, 0x0026, 0x2260, 0x0066, 0x2031,
+ 0x0001, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x190c, 0x0dc3,
+ 0x080c, 0xbe31, 0x006e, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00,
+ 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186,
+ 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c,
+ 0xcecd, 0x0904, 0xcd62, 0x0056, 0x7510, 0x7614, 0x080c, 0xddad,
+ 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f,
+ 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300,
+ 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0c10, 0x6007,
+ 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xcd39, 0x00e6,
+ 0x0026, 0x080c, 0x682b, 0x0550, 0x080c, 0x6814, 0x080c, 0xdf92,
+ 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6,
+ 0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284,
+ 0xff00, 0x727c, 0x9205, 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000,
+ 0x080c, 0x6869, 0x0120, 0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac,
+ 0x1128, 0x080c, 0x2ed6, 0x0010, 0x080c, 0xdfc6, 0x002e, 0x00ee,
+ 0x080c, 0xa39d, 0x0804, 0xcbee, 0x080c, 0xa39d, 0x0005, 0x2600,
+ 0x0002, 0xce45, 0xce45, 0xce45, 0xce45, 0xce45, 0xce47, 0xce45,
+ 0xce45, 0xce45, 0xce45, 0xce61, 0xce45, 0xce45, 0xce45, 0xce73,
+ 0xce89, 0xceba, 0xce45, 0xce45, 0xcebf, 0x080c, 0x0dc3, 0x080c,
+ 0xdf0c, 0x1d10, 0x080c, 0x3226, 0x19f8, 0x7038, 0x6016, 0x6007,
+ 0x0045, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0005, 0x080c, 0x3102,
+ 0x080c, 0xc8e3, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9,
+ 0x0005, 0x080c, 0xdf0c, 0x1940, 0x080c, 0x3226, 0x1928, 0x080c,
+ 0xcfe0, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001,
+ 0x080c, 0x88e9, 0x0005, 0x2001, 0x1823, 0x2004, 0x9082, 0x00e1,
+ 0x1268, 0x080c, 0xceea, 0x0904, 0xce2c, 0x6007, 0x004e, 0x6003,
+ 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007, 0x0012,
+ 0x0cb0, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff,
+ 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x199a,
+ 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x199b, 0x2004, 0x9106,
+ 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004,
+ 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xb448, 0x009e,
+ 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c,
+ 0x8e38, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c,
+ 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x6007,
+ 0x0053, 0x6003, 0x0001, 0x0804, 0x88e9, 0x0016, 0x00e6, 0x2071,
+ 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8bc, 0xd084,
+ 0x0150, 0x7128, 0x6044, 0x9106, 0x1120, 0x712c, 0x6048, 0x9106,
+ 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee,
+ 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6,
0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x20e1, 0x0000, 0x2001,
- 0x197d, 0x2003, 0x0000, 0x080c, 0x101a, 0x05a0, 0x2900, 0x6016,
+ 0x197d, 0x2003, 0x0000, 0x080c, 0x1026, 0x05a0, 0x2900, 0x6016,
0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e,
0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
0x2001, 0x197d, 0x0016, 0x200c, 0x0471, 0x001e, 0x81ff, 0x01b8,
- 0x2940, 0x080c, 0x101a, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18,
+ 0x2940, 0x080c, 0x1026, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18,
0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
0x2001, 0x197d, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085,
0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000, 0x6014, 0x2048,
- 0x080c, 0x0fb3, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,
+ 0x080c, 0x0fbf, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,
0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6,
- 0x918c, 0xffff, 0x11b0, 0x080c, 0x228b, 0x2099, 0x026c, 0x2001,
+ 0x918c, 0xffff, 0x11b0, 0x080c, 0x22d3, 0x2099, 0x026c, 0x2001,
0x0014, 0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0400,
- 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260,
- 0x0ca8, 0x080c, 0x228b, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008,
+ 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260,
+ 0x0ca8, 0x080c, 0x22d3, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008,
0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,
- 0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260, 0x0ca8,
+ 0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260, 0x0ca8,
0x2061, 0x197d, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,
0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,
- 0x080c, 0x22a3, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
+ 0x080c, 0x22eb, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,
- 0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x080c,
- 0x22a3, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
+ 0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x080c,
+ 0x22eb, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,
- 0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x2061,
+ 0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x2061,
0x1980, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,
0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,
0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4,
0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,
- 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc578, 0x00de,
- 0x0005, 0x00d6, 0x080c, 0xc585, 0x1520, 0x680c, 0x908c, 0xff00,
+ 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xd078, 0x00de,
+ 0x0005, 0x00d6, 0x080c, 0xd085, 0x1520, 0x680c, 0x908c, 0xff00,
0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4,
- 0x0130, 0x9006, 0x080c, 0xd2b1, 0x2009, 0x0001, 0x0078, 0xd1ec,
- 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x269f, 0x1148,
- 0x2001, 0x0001, 0x080c, 0xd2b1, 0x2110, 0x900e, 0x080c, 0x30af,
+ 0x0130, 0x9006, 0x080c, 0xe03e, 0x2009, 0x0001, 0x0078, 0xd1ec,
+ 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2708, 0x1148,
+ 0x2001, 0x0001, 0x080c, 0xe03e, 0x2110, 0x900e, 0x080c, 0x314b,
0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,
- 0x00c6, 0x080c, 0x9f5b, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011,
- 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1578, 0x080c,
- 0x63c1, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
- 0x6012, 0x080c, 0xd1fc, 0x11d8, 0x080c, 0x318a, 0x11c0, 0x080c,
- 0xc4e0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6372, 0x2001, 0x0007,
- 0x080c, 0x639e, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
- 0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c,
- 0x9f18, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9f18,
- 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9f18, 0x9006, 0x0c98,
+ 0x00c6, 0x080c, 0xa3ec, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011,
+ 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x1578, 0x080c,
+ 0x6497, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
+ 0x6012, 0x080c, 0xdf0c, 0x11d8, 0x080c, 0x3226, 0x11c0, 0x080c,
+ 0xcfe0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6448, 0x2001, 0x0007,
+ 0x080c, 0x6474, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c,
+ 0xa39d, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xa39d,
+ 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0xa39d, 0x9006, 0x0c98,
0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000,
0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069,
0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x11c0, 0x6804,
0x2009, 0x1823, 0x210c, 0x9102, 0x0290, 0x6904, 0x9186, 0x0018,
0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,
- 0x910d, 0x612a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
- 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4, 0x91b6, 0x0013, 0x1130,
- 0x2008, 0x91b2, 0x0040, 0x1a04, 0xc6eb, 0x040a, 0x91b6, 0x0027,
+ 0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
+ 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x1130,
+ 0x2008, 0x91b2, 0x0040, 0x1a04, 0xd1eb, 0x040a, 0x91b6, 0x0027,
0x0198, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c,
- 0xbf19, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0005,
- 0x91b6, 0x0014, 0x190c, 0x0dc4, 0x2001, 0x0007, 0x080c, 0x639e,
- 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0xc617,
- 0xc619, 0xc617, 0xc617, 0xc617, 0xc619, 0xc628, 0xc6e4, 0xc66c,
- 0xc6e4, 0xc692, 0xc6e4, 0xc628, 0xc6e4, 0xc6dc, 0xc6e4, 0xc6dc,
- 0xc6e4, 0xc6e4, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617,
- 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc6e4,
- 0xc617, 0xc617, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc617,
- 0xc617, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617,
- 0xc623, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617,
- 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0x080c,
- 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x0002, 0x080c,
- 0x8c37, 0x0804, 0xc6ea, 0x9006, 0x080c, 0x635e, 0x0804, 0xc6e4,
- 0x080c, 0x673e, 0x1904, 0xc6e4, 0x9006, 0x080c, 0x635e, 0x6010,
+ 0xc8f4, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xadfa, 0x0005,
+ 0x91b6, 0x0014, 0x190c, 0x0dc3, 0x2001, 0x0007, 0x080c, 0x6474,
+ 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0xd117,
+ 0xd119, 0xd117, 0xd117, 0xd117, 0xd119, 0xd128, 0xd1e4, 0xd16c,
+ 0xd1e4, 0xd192, 0xd1e4, 0xd128, 0xd1e4, 0xd1dc, 0xd1e4, 0xd1dc,
+ 0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117,
+ 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd119, 0xd117, 0xd1e4,
+ 0xd117, 0xd117, 0xd1e4, 0xd117, 0xd1e1, 0xd1e4, 0xd117, 0xd117,
+ 0xd117, 0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd1e4, 0xd1e4, 0xd117,
+ 0xd123, 0xd117, 0xd117, 0xd117, 0xd117, 0xd1e0, 0xd1e4, 0xd117,
+ 0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0x080c,
+ 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0002, 0x080c,
+ 0x8e38, 0x0804, 0xd1ea, 0x9006, 0x080c, 0x6434, 0x0804, 0xd1e4,
+ 0x080c, 0x6865, 0x1904, 0xd1e4, 0x9006, 0x080c, 0x6434, 0x6010,
0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800,
- 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8ac,
- 0x9005, 0x0904, 0xc6e4, 0x080c, 0x31bb, 0x1904, 0xc6e4, 0x2001,
+ 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8b0,
+ 0x9005, 0x0904, 0xd1e4, 0x080c, 0x3257, 0x1904, 0xd1e4, 0x2001,
0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800,
- 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x080c, 0x8b2b, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x6110, 0x2158, 0x2009, 0x0001,
- 0x080c, 0x836c, 0x0804, 0xc6ea, 0x6610, 0x2658, 0xbe04, 0x96b4,
+ 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6448,
+ 0x080c, 0x8d2c, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
+ 0x080c, 0x88e9, 0x080c, 0x8e38, 0x6110, 0x2158, 0x2009, 0x0001,
+ 0x080c, 0x84d0, 0x0804, 0xd1ea, 0x6610, 0x2658, 0xbe04, 0x96b4,
0xff00, 0x8637, 0x9686, 0x0006, 0x0138, 0x9686, 0x0004, 0x0120,
- 0x2001, 0x0004, 0x080c, 0x639e, 0x080c, 0xd300, 0x0904, 0xc6e4,
- 0x080c, 0x8b2b, 0x2001, 0x0004, 0x080c, 0x6372, 0x6023, 0x0001,
- 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x8718, 0x080c, 0x8c37,
- 0x0804, 0xc6ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158,
+ 0x2001, 0x0004, 0x080c, 0x6474, 0x080c, 0xe08d, 0x0904, 0xd1e4,
+ 0x080c, 0x8d2c, 0x2001, 0x0004, 0x080c, 0x6448, 0x6023, 0x0001,
+ 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38,
+ 0x0804, 0xd1ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158,
0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c,
- 0x4c74, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xc70a, 0x6610,
+ 0x4d24, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xd20a, 0x6610,
0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
- 0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x639e, 0x9284, 0x00ff,
+ 0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x6474, 0x9284, 0x00ff,
0x908e, 0x0007, 0x0118, 0x908e, 0x0004, 0x1120, 0x2001, 0x0006,
- 0x080c, 0x6372, 0x080c, 0x673e, 0x11f8, 0x2001, 0x1836, 0x2004,
+ 0x080c, 0x6448, 0x080c, 0x6865, 0x11f8, 0x2001, 0x1836, 0x2004,
0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0,
0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0804,
- 0xc654, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020,
- 0x0018, 0x0010, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f18,
- 0x080c, 0x8c37, 0x0005, 0x2600, 0x0002, 0xc701, 0xc701, 0xc701,
- 0xc701, 0xc701, 0xc703, 0xc701, 0xc701, 0xc701, 0xc701, 0xc703,
- 0xc701, 0xc701, 0xc701, 0xc703, 0xc703, 0xc703, 0xc703, 0xc701,
- 0xc703, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c,
- 0x8c37, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,
- 0xd184, 0x0138, 0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x080c,
- 0x308f, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,
- 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc4, 0x91b6,
- 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc4,
- 0x006b, 0x0005, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xc798, 0xa7e9,
- 0xa7e9, 0xc74a, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9,
- 0xa7e9, 0xa7e9, 0xc798, 0xa7e9, 0xa7e9, 0xc789, 0xa7e9, 0xa7e9,
- 0xa7e9, 0xa7e9, 0x00f6, 0x080c, 0x673e, 0x11d8, 0x080c, 0xbef8,
- 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8ac, 0x9005, 0x0190, 0x9006,
- 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001,
- 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37,
- 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f,
- 0x11b0, 0x080c, 0x6411, 0x0118, 0x080c, 0x9f18, 0x0080, 0xb810,
- 0x0006, 0xb814, 0x0006, 0xb8ac, 0x0006, 0x080c, 0x5f10, 0x000e,
- 0xb8ae, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9f18, 0x00fe,
- 0x0005, 0x080c, 0xabf0, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0x9f18, 0x0005,
- 0x0804, 0x9f18, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c,
- 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0040,
- 0x0002, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bf, 0xc7bd, 0xc7bd,
- 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd,
- 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0x080c, 0x0dc4, 0x0096,
- 0x00b6, 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6106, 0x2071,
- 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc81c, 0x080c, 0xd2a5,
- 0x1150, 0x9486, 0x2000, 0x1138, 0x2009, 0x0001, 0x2011, 0x0200,
- 0x080c, 0x8532, 0x0000, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x6003,
+ 0xd154, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020,
+ 0x0018, 0x0010, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa39d,
+ 0x080c, 0x8e38, 0x0005, 0x2600, 0x0002, 0xd201, 0xd201, 0xd201,
+ 0xd201, 0xd201, 0xd203, 0xd201, 0xd201, 0xd201, 0xd201, 0xd203,
+ 0xd201, 0xd201, 0xd201, 0xd203, 0xd203, 0xd203, 0xd203, 0xd201,
+ 0xd203, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+ 0x8e38, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,
+ 0xd184, 0x0138, 0x080c, 0x6448, 0x9006, 0x080c, 0x6434, 0x080c,
+ 0x312b, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,
+ 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x91b6,
+ 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc3,
+ 0x006b, 0x0005, 0xae95, 0xae95, 0xae95, 0xae95, 0xd29f, 0xae95,
+ 0xd289, 0xd24a, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95,
+ 0xae95, 0xae95, 0xd29f, 0xae95, 0xd289, 0xd290, 0xae95, 0xae95,
+ 0xae95, 0xae95, 0x00f6, 0x080c, 0x6865, 0x11d8, 0x080c, 0xc8ce,
+ 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190, 0x9006,
+ 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x6023, 0x0001,
+ 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38,
+ 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708,
+ 0x11b0, 0x080c, 0x64fc, 0x0118, 0x080c, 0xa39d, 0x0080, 0xb810,
+ 0x0006, 0xb814, 0x0006, 0xb8b0, 0x0006, 0x080c, 0x5fcd, 0x000e,
+ 0xb8b2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xa39d, 0x00fe,
+ 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005,
+ 0x080c, 0xb2a4, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d, 0x0005, 0x0804,
+ 0xa39d, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c, 0x8d2c,
+ 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x9182, 0x0040, 0x0002,
+ 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c6, 0xd2c4, 0xd2c4, 0xd2c4,
+ 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4,
+ 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0x080c, 0x0dc3, 0x0096, 0x00b6,
+ 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac,
+ 0x9005, 0x11a8, 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00,
+ 0x0904, 0xd32c, 0x080c, 0xe032, 0x1170, 0x9486, 0x2000, 0x1158,
+ 0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x8703, 0x0020, 0x9026,
+ 0x080c, 0xdf55, 0x0c38, 0x080c, 0x100d, 0x090c, 0x0dc3, 0x6003,
0x0007, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e, 0xac8e, 0x2c00,
0xa892, 0x6008, 0xa8e6, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97e,
0x0016, 0xa87a, 0xa883, 0x0000, 0xa887, 0x0000, 0xa88b, 0x0036,
- 0x080c, 0x6b1d, 0x001e, 0x080c, 0xd2a5, 0x1904, 0xc87c, 0x9486,
- 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xd0d7, 0x0804, 0xc87c,
- 0x9486, 0x0200, 0x1120, 0x080c, 0xd077, 0x0804, 0xc87c, 0x9486,
- 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xc87c, 0x2019, 0x0002,
- 0x080c, 0xd08f, 0x0804, 0xc87c, 0x2069, 0x1a4f, 0x6a00, 0xd284,
- 0x0904, 0xc8e2, 0x9284, 0x0300, 0x1904, 0xc8db, 0x6804, 0x9005,
- 0x0904, 0xc8c3, 0x2d78, 0x6003, 0x0007, 0x080c, 0x101a, 0x0904,
- 0xc888, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
- 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xc8e6, 0x9006,
+ 0x080c, 0x6c02, 0x001e, 0x080c, 0xe032, 0x1904, 0xd38c, 0x9486,
+ 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xdc90, 0x0804, 0xd38c,
+ 0x9486, 0x0200, 0x1120, 0x080c, 0xdc27, 0x0804, 0xd38c, 0x9486,
+ 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xd38c, 0x2019, 0x0002,
+ 0x080c, 0xdc42, 0x0804, 0xd38c, 0x2069, 0x1a4f, 0x6a00, 0xd284,
+ 0x0904, 0xd3f6, 0x9284, 0x0300, 0x1904, 0xd3ef, 0x6804, 0x9005,
+ 0x0904, 0xd3d7, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1026, 0x0904,
+ 0xd398, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
+ 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd3fa, 0x9006,
0xa802, 0xa86b, 0x0116, 0xa86e, 0x6008, 0xa8e6, 0x2c00, 0xa87e,
0x6010, 0x2058, 0xb8a0, 0x7130, 0xa9ba, 0xa87a, 0xb928, 0xa9be,
0xb92c, 0xa9c2, 0xb930, 0xa9c6, 0xb934, 0xa9ca, 0xa887, 0x003d,
- 0x7044, 0x9084, 0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x20a9,
+ 0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005, 0xa882, 0x20a9,
0x000a, 0x2001, 0x0270, 0xaa5c, 0x9290, 0x0022, 0x2009, 0x0205,
0x200b, 0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0,
0x4003, 0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b6, 0x8000,
- 0x200c, 0xa9b2, 0x080c, 0x6b1d, 0x002e, 0x004e, 0x00fe, 0x00ee,
+ 0x200c, 0xa9b2, 0x080c, 0x6c02, 0x002e, 0x004e, 0x00fe, 0x00ee,
0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000,
- 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x1001, 0x1904,
- 0xc831, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
- 0x86d0, 0x080c, 0x8c37, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
+ 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x100d, 0x1904,
+ 0xd341, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
+ 0x88a1, 0x080c, 0x8e38, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016,
0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001,
- 0x6007, 0x0043, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x0828, 0x6017,
- 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c,
- 0x8c37, 0x0804, 0xc87c, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,
- 0x2011, 0x8049, 0x080c, 0x4abd, 0x6017, 0xf300, 0x0010, 0x6017,
- 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c,
- 0x8c37, 0x0804, 0xc87c, 0x6017, 0xf500, 0x0c98, 0x6017, 0xf600,
- 0x0804, 0xc89c, 0x6017, 0xf200, 0x0804, 0xc89c, 0xa86b, 0x0146,
- 0xa86f, 0x0000, 0x6008, 0xa88a, 0x2c00, 0xa87e, 0x7044, 0x9084,
- 0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x2928, 0x6010, 0x2058,
- 0xb8a0, 0xa87a, 0xb828, 0xa88e, 0xb82c, 0xa892, 0xb830, 0xa896,
- 0xb834, 0xa89a, 0xa887, 0x003d, 0x2009, 0x0205, 0x2104, 0x9085,
- 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214, 0x9294,
- 0x0fff, 0xaaa6, 0x9282, 0x0111, 0x1a0c, 0x0dc4, 0x8210, 0x821c,
- 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x002a,
- 0x20a0, 0x2011, 0xc962, 0x2041, 0x0001, 0x223d, 0x9784, 0x00ff,
- 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530, 0x8210,
- 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098, 0x0c68,
- 0x2950, 0x080c, 0x101a, 0x0170, 0x2900, 0xb002, 0xa86b, 0x0147,
- 0xa86f, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
- 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c, 0x1033,
- 0x0cc8, 0x080c, 0x1033, 0x0804, 0xc888, 0x2548, 0x8847, 0x9885,
- 0x0046, 0xa86a, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c, 0xd101,
- 0x0804, 0xc87c, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018, 0x0008,
- 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a,
- 0x0054, 0x1a0c, 0x0dc4, 0x9082, 0x0040, 0x0a0c, 0x0dc4, 0x2008,
- 0x0804, 0xc9ee, 0x0048, 0x080c, 0xbf19, 0x0500, 0x6000, 0x9086,
- 0x0002, 0x11e0, 0x0804, 0xca29, 0x9186, 0x0027, 0x0190, 0x9186,
- 0x0048, 0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc4, 0x080c,
- 0xbf19, 0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc4, 0x0804,
- 0xcace, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9fa3,
- 0x0005, 0xc9b5, 0xc9b7, 0xc9b7, 0xc9de, 0xc9b5, 0xc9b5, 0xc9b5,
- 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5,
- 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0x080c, 0x0dc4, 0x080c,
- 0x8b2b, 0x080c, 0x8c37, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8,
- 0x080c, 0xb955, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058,
- 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xd101,
- 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1964, 0x2004,
- 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c,
- 0x8b2b, 0x080c, 0x8c37, 0x080c, 0xb955, 0x0120, 0x6014, 0x2048,
- 0x080c, 0x1033, 0x080c, 0x9f42, 0x009e, 0x0005, 0x0002, 0xca03,
- 0xca1a, 0xca05, 0xca23, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03,
- 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03,
- 0xca03, 0xca03, 0xca03, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b,
- 0x6014, 0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,
- 0x0043, 0x080c, 0x9f88, 0x0010, 0x6003, 0x0004, 0x080c, 0x8c37,
- 0x009e, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8507, 0x080c, 0x9f18,
- 0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x2009, 0x0041, 0x0804,
- 0xcb27, 0x9182, 0x0040, 0x0002, 0xca40, 0xca42, 0xca40, 0xca40,
- 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40,
- 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40,
- 0x080c, 0x0dc4, 0x0005, 0x9182, 0x0040, 0x0002, 0xca5a, 0xca5a,
- 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5c,
- 0xcaae, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xcaae, 0xca5a, 0xca5a,
- 0xca5a, 0xca5a, 0x080c, 0x0dc4, 0x2001, 0x0105, 0x2004, 0x9084,
- 0x1800, 0x01c0, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004,
- 0x9105, 0x1904, 0xcaae, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x05f0,
- 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085,
- 0x0010, 0x200a, 0x080c, 0x8be7, 0x6014, 0x0096, 0x2048, 0xa880,
- 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002, 0x01b0, 0x2001,
- 0x180c, 0x2004, 0xd0d4, 0x1188, 0x080c, 0x8d06, 0x2009, 0x0041,
- 0x009e, 0x0804, 0xcb27, 0x080c, 0x8d06, 0x6003, 0x0007, 0x601b,
- 0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,
- 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2aa7, 0x080c, 0x8d06,
- 0x080c, 0x8507, 0x080c, 0x9f18, 0x009e, 0x0005, 0x2001, 0x180c,
- 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x8be7, 0x080c, 0x8d06,
- 0x6014, 0x0096, 0x2048, 0x2019, 0x0004, 0x080c, 0xd101, 0x6018,
- 0x9005, 0x1128, 0x2001, 0x1964, 0x2004, 0x8003, 0x601a, 0x6017,
- 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
- 0x0002, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5,
- 0xcae5, 0xcae7, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5,
- 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcb0c, 0x080c, 0x0dc4, 0x6014,
- 0x0096, 0x2048, 0xa834, 0xaa38, 0x920d, 0x1178, 0xa880, 0xd0fc,
- 0x0120, 0x2009, 0x0041, 0x009e, 0x0490, 0x6003, 0x0007, 0x601b,
- 0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2009, 0x180e, 0x210c,
- 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0081,
- 0x080c, 0x8509, 0x009e, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834,
- 0xa938, 0x009e, 0x9105, 0x1118, 0x080c, 0x154a, 0x1980, 0x0005,
- 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009,
- 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a, 0x0005, 0x9182,
- 0x0040, 0x0208, 0x0012, 0x080c, 0x0dc4, 0xcb41, 0xcb48, 0xcb54,
- 0xcb60, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb43, 0xcb41, 0xcb41,
- 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41,
- 0xcb43, 0x080c, 0x0dc4, 0x6014, 0x9005, 0x190c, 0x0dc4, 0x0005,
- 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x8c37, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
- 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37, 0x012e, 0x0005,
- 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x8735, 0x080c, 0x8d06, 0x012e, 0x0005, 0x0126,
- 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e,
- 0x003e, 0x012e, 0x0005, 0xcb8f, 0xcb91, 0xcba3, 0xcbbd, 0xcb8f,
- 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f,
- 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0x080c,
- 0x0dc4, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c, 0x0003,
- 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0,
- 0x080c, 0x8c37, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x0168,
- 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106,
- 0x080c, 0x86d0, 0x080c, 0x8c37, 0x00e0, 0x901e, 0x6316, 0x631a,
- 0x2019, 0x0004, 0x080c, 0xd101, 0x00a0, 0x6014, 0x2048, 0xa880,
- 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003,
- 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c,
- 0x8d06, 0x0005, 0x080c, 0x8b2b, 0x6114, 0x81ff, 0x0158, 0x0096,
- 0x2148, 0x080c, 0xd242, 0x0036, 0x2019, 0x0029, 0x080c, 0xd101,
- 0x003e, 0x009e, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x080c,
- 0x8be7, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd242,
- 0x0036, 0x2019, 0x0029, 0x080c, 0xd101, 0x003e, 0x009e, 0x080c,
- 0x9f42, 0x080c, 0x8d06, 0x0005, 0x9182, 0x0085, 0x0002, 0xcc0e,
- 0xcc0c, 0xcc0c, 0xcc1a, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c,
- 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0x080c, 0x0dc4, 0x6003, 0x000b,
- 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37,
- 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xd1fc, 0x0118, 0x080c,
- 0x9f18, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e,
- 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
- 0x2c00, 0x2011, 0x014e, 0x080c, 0xa224, 0x7220, 0x080c, 0xcf6a,
- 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296,
- 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x86d0,
- 0x080c, 0x8c37, 0x080c, 0x8d06, 0x00ee, 0x002e, 0x0005, 0x9186,
- 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
- 0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027,
- 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9fa3, 0x0050, 0x2001,
- 0x0007, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c,
- 0x8c37, 0x0005, 0xcc7f, 0xcc81, 0xcc81, 0xcc7f, 0xcc7f, 0xcc7f,
- 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0x080c,
- 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005,
- 0x9182, 0x0085, 0x0a0c, 0x0dc4, 0x9182, 0x0092, 0x1a0c, 0x0dc4,
- 0x9182, 0x0085, 0x0002, 0xcca0, 0xcca0, 0xcca0, 0xcca2, 0xcca0,
- 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0,
- 0x080c, 0x0dc4, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014,
- 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9fa3, 0x0030, 0x080c,
- 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x0036, 0x2019,
- 0x000b, 0x0011, 0x003e, 0x0005, 0x6010, 0x0006, 0x0049, 0x000e,
- 0x6012, 0x6023, 0x0006, 0x6003, 0x0007, 0x601b, 0x0000, 0x0005,
- 0x0126, 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x080c, 0x9a12,
- 0x008e, 0x1530, 0x0076, 0x2c38, 0x080c, 0x9abb, 0x007e, 0x1500,
- 0x6000, 0x9086, 0x0000, 0x01e0, 0x6020, 0x9086, 0x0007, 0x01c0,
- 0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c, 0x1950,
- 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0110, 0x080c,
- 0xd101, 0x009e, 0x6017, 0x0000, 0x6023, 0x0007, 0x080c, 0xbf10,
- 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156,
- 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x269f, 0x1904, 0xcd51,
- 0x0016, 0x00c6, 0x080c, 0x6411, 0x1904, 0xcd4f, 0x001e, 0x00c6,
- 0x080c, 0xbef8, 0x1130, 0xb8ac, 0x9005, 0x0118, 0x080c, 0x31bb,
- 0x0148, 0x2b10, 0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xbeff,
- 0x000e, 0x6012, 0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029,
- 0x080c, 0x9b81, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748,
- 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xce89, 0x007e, 0x0026,
- 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286,
- 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3124, 0x002e, 0xbcac, 0x001e,
- 0x080c, 0x5f10, 0xbe12, 0xbd16, 0xbcae, 0x9006, 0x0010, 0x00ce,
- 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6,
- 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074,
- 0x1904, 0xcdb0, 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0,
- 0x6940, 0x9184, 0x8000, 0x0904, 0xcdad, 0x2001, 0x1959, 0x2004,
- 0x9005, 0x1140, 0x6010, 0x2058, 0xb8ac, 0x9005, 0x0118, 0x9184,
- 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xd2aa,
- 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001,
- 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940,
- 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a,
- 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300,
- 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017,
- 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010,
- 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be,
- 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156,
- 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180,
- 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006,
- 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x6420, 0x0804, 0xce18,
- 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
- 0x080c, 0xad8d, 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004,
- 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xad8d, 0x009e, 0x1548,
- 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c,
- 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xd156, 0xb800, 0xc0e5,
- 0xb802, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x2001, 0x0007,
- 0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x001e, 0x004e,
- 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6,
- 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000,
- 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026,
- 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x269f,
- 0x11d0, 0x080c, 0x6411, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004,
- 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158,
- 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006,
- 0x080c, 0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe,
- 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156,
- 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x11d0,
- 0x080c, 0x6411, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,
- 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158, 0x2011,
- 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
- 0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be,
- 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046,
- 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c,
- 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650,
- 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128,
- 0x8001, 0x9602, 0x1a04, 0xcf23, 0x0018, 0x9606, 0x0904, 0xcf23,
- 0x2100, 0x9c06, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0007, 0x0904,
- 0xcf1a, 0x080c, 0xd197, 0x1904, 0xcf1a, 0x080c, 0xd2c8, 0x0904,
- 0xcf1a, 0x080c, 0xd187, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0001,
- 0x1148, 0x080c, 0x31bb, 0x0904, 0xcf3e, 0x6004, 0x9086, 0x0000,
- 0x1904, 0xcf3e, 0x9786, 0x0004, 0x0904, 0xcf3e, 0x2500, 0x9c06,
- 0x0904, 0xcf1a, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6024,
- 0x9906, 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
- 0x080c, 0x1950, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56,
- 0x1130, 0x080c, 0xa717, 0x009e, 0x080c, 0x9f42, 0x0418, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b,
- 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c,
- 0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xd242, 0x0016,
- 0x080c, 0xbc3f, 0x080c, 0x6b11, 0x001e, 0x080c, 0xbb39, 0x009e,
- 0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x1210, 0x0804, 0xce9d, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
- 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150,
- 0x9386, 0x0005, 0x0128, 0x080c, 0xd242, 0x080c, 0xd101, 0x08f8,
- 0x009e, 0x0c00, 0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0,
- 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001,
- 0x2004, 0x9086, 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950,
- 0x080c, 0xbb45, 0x0130, 0x080c, 0xbb56, 0x1920, 0x080c, 0xa717,
- 0x0038, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717,
- 0x080c, 0x9f42, 0x0804, 0xcf1a, 0xa868, 0x9084, 0x00ff, 0x9086,
- 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006,
- 0x080c, 0xd128, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b,
- 0x00ee, 0x00ce, 0x0005, 0xcf89, 0xcf89, 0xcf89, 0xcf89, 0xcf89,
- 0xcf89, 0xcf8b, 0xcf89, 0xcf89, 0xcf89, 0xcfb4, 0x9f42, 0x9f42,
- 0xcf89, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6,
- 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xd156,
- 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xccc8, 0x003e, 0x9085,
- 0x0001, 0x0005, 0x0096, 0x080c, 0xb955, 0x0140, 0x6014, 0x904d,
- 0x080c, 0xb5c5, 0x687f, 0x0005, 0x080c, 0x6b1d, 0x009e, 0x080c,
- 0x9f42, 0x9085, 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005,
- 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xcfcf,
- 0xcfcf, 0xcfe6, 0xcfd6, 0xcff5, 0xcfcf, 0xcfcf, 0xcfd1, 0xcfcf,
- 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0x080c,
- 0x0dc4, 0x080c, 0x9f42, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6,
- 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c,
- 0x9964, 0x0010, 0x080c, 0x9b40, 0x00ee, 0x003e, 0x0096, 0x00d6,
- 0x6014, 0x2048, 0xa87f, 0x0005, 0x080c, 0x6b1d, 0x080c, 0x9f42,
- 0x00de, 0x009e, 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c,
- 0x1950, 0x0c60, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156, 0x0016,
- 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
- 0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005,
- 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126,
- 0x2091, 0x8000, 0x2740, 0x2061, 0x1cc8, 0x2079, 0x0001, 0x8fff,
- 0x0904, 0xd06a, 0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602,
- 0x1a04, 0xd06a, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078,
- 0x080c, 0xd187, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786,
- 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1150, 0xd58c,
- 0x1118, 0x6010, 0x9b06, 0x11e8, 0xd584, 0x0118, 0x6024, 0x9106,
- 0x11c0, 0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c,
- 0x1950, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0120,
- 0x0046, 0x080c, 0xd101, 0x004e, 0x009e, 0x080c, 0x9f42, 0x88ff,
- 0x1198, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210,
- 0x0804, 0xd01f, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e,
+ 0x6007, 0x0043, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0828, 0x6868,
+ 0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007,
+ 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x2001,
+ 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d,
+ 0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007,
+ 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x6017,
+ 0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xd3ac, 0x6017, 0xf200,
+ 0x0804, 0xd3ac, 0xa86b, 0x0146, 0xa86f, 0x0000, 0x6008, 0xa88a,
+ 0x2c00, 0xa87e, 0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005,
+ 0xa882, 0x2928, 0x6010, 0x2058, 0xb8a0, 0xa87a, 0xb828, 0xa88e,
+ 0xb82c, 0xa892, 0xb830, 0xa896, 0xb834, 0xa89a, 0xa887, 0x003d,
+ 0x2009, 0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000,
+ 0x2011, 0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa6, 0x9282, 0x0111,
+ 0x1a0c, 0x0dc3, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860,
+ 0x20e8, 0xa85c, 0x9080, 0x002a, 0x20a0, 0x2011, 0xd476, 0x2041,
+ 0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8,
+ 0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a,
+ 0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1026, 0x0170,
+ 0x2900, 0xb002, 0xa86b, 0x0147, 0xa86f, 0x0000, 0xa860, 0x20e8,
+ 0xa85c, 0x9080, 0x001c, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800,
+ 0x902d, 0x0118, 0x080c, 0x103f, 0x0cc8, 0x080c, 0x103f, 0x0804,
+ 0xd398, 0x2548, 0x8847, 0x9885, 0x0046, 0xa86a, 0x2009, 0x0205,
+ 0x200b, 0x0000, 0x080c, 0xdcc3, 0x0804, 0xd38c, 0x8010, 0x0004,
+ 0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186,
+ 0x0013, 0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x9082,
+ 0x0040, 0x0a0c, 0x0dc3, 0x2008, 0x0804, 0xd505, 0x9186, 0x0051,
+ 0x0108, 0x0048, 0x080c, 0xc8f4, 0x0500, 0x6000, 0x9086, 0x0002,
+ 0x11e0, 0x0804, 0xd54e, 0x9186, 0x0027, 0x0190, 0x9186, 0x0048,
+ 0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc3, 0x080c, 0xc8f4,
+ 0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc3, 0x0804, 0xd631,
+ 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xa434, 0x0005,
+ 0xd4cc, 0xd4ce, 0xd4ce, 0xd4f5, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc,
+ 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc,
+ 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0x080c, 0x0dc3, 0x080c, 0x8d2c,
+ 0x080c, 0x8e38, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,
+ 0xc1cd, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,
+ 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x6017,
+ 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1963, 0x2004, 0x601a,
+ 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x8d2c,
+ 0x080c, 0x8e38, 0x080c, 0xc1cd, 0x0120, 0x6014, 0x2048, 0x080c,
+ 0x103f, 0x080c, 0xa3cf, 0x009e, 0x0005, 0x0002, 0xd51a, 0xd531,
+ 0xd51c, 0xd548, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a,
+ 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a,
+ 0xd51a, 0xd51a, 0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014,
+ 0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
+ 0x080c, 0xa419, 0x0010, 0x6003, 0x0004, 0x080c, 0x8e38, 0x009e,
+ 0x0005, 0x080c, 0x8d2c, 0x080c, 0xc1cd, 0x0138, 0x6114, 0x0096,
+ 0x2148, 0xa980, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x86d8, 0x080c,
+ 0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf15, 0x0db0, 0x0cc8,
+ 0x080c, 0x8d2c, 0x2009, 0x0041, 0x0804, 0xd6b9, 0x9182, 0x0040,
+ 0x0002, 0xd565, 0xd567, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565,
+ 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565,
+ 0xd565, 0xd565, 0xd568, 0xd565, 0xd565, 0x080c, 0x0dc3, 0x0005,
+ 0x00d6, 0x080c, 0x86d8, 0x00de, 0x080c, 0xdf7c, 0x080c, 0xa39d,
+ 0x0005, 0x9182, 0x0040, 0x0002, 0xd588, 0xd588, 0xd588, 0xd588,
+ 0xd588, 0xd588, 0xd588, 0xd588, 0xd588, 0xd58a, 0xd5f9, 0xd588,
+ 0xd588, 0xd588, 0xd588, 0xd5f9, 0xd588, 0xd588, 0xd588, 0xd588,
+ 0x080c, 0x0dc3, 0x2001, 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8,
+ 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004, 0x9105, 0x1904,
+ 0xd5f9, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x0904, 0xd5f9, 0xc0d4,
+ 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010,
+ 0x200a, 0x2001, 0x187e, 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000,
+ 0x080c, 0x8de8, 0x6014, 0x0096, 0x2048, 0xa880, 0xd0fc, 0x0188,
+ 0x908c, 0x0003, 0x918e, 0x0002, 0x0508, 0x2001, 0x180c, 0x2004,
+ 0xd0d4, 0x11e0, 0x080c, 0x8f0e, 0x2009, 0x0041, 0x009e, 0x0804,
+ 0xd6b9, 0x080c, 0x8f0e, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c,
+ 0x86d8, 0x009e, 0x0005, 0x2001, 0x0100, 0x2004, 0x9082, 0x0005,
+ 0x0aa8, 0x2001, 0x011f, 0x2004, 0x603a, 0x0890, 0x2001, 0x180c,
+ 0x200c, 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2b10, 0x080c,
+ 0x8f0e, 0x6014, 0x2048, 0xa980, 0xd1ec, 0x1130, 0x080c, 0x86d8,
+ 0x080c, 0xa39d, 0x009e, 0x0005, 0x080c, 0xdf15, 0x0db8, 0x009e,
+ 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c,
+ 0x8de8, 0x080c, 0x8f0e, 0x6014, 0x0096, 0x2048, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0188, 0xa880, 0x9084, 0x0003,
+ 0x9086, 0x0002, 0x0140, 0xa8b0, 0x6330, 0x931a, 0x6332, 0xa8b4,
+ 0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004,
+ 0x080c, 0xdcc3, 0x6018, 0x9005, 0x1128, 0x2001, 0x1963, 0x2004,
+ 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x009e, 0x003e,
+ 0x0005, 0x9182, 0x0040, 0x0002, 0xd648, 0xd648, 0xd648, 0xd648,
+ 0xd648, 0xd648, 0xd648, 0xd648, 0xd64a, 0xd648, 0xd648, 0xd648,
+ 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd695,
+ 0x080c, 0x0dc3, 0x6014, 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110,
+ 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518,
+ 0xa880, 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e, 0x0804, 0xd6b9,
+ 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x86d8, 0x009e, 0x0005,
+ 0x6124, 0xd1f4, 0x1d58, 0x0006, 0x0046, 0xacb0, 0x9422, 0xa9b4,
+ 0x2200, 0x910b, 0x6030, 0x9420, 0x6432, 0x602c, 0x9109, 0x612e,
+ 0x004e, 0x000e, 0x08d8, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
+ 0xd1bc, 0x1178, 0x2009, 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003,
+ 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c, 0x86da, 0x009e,
+ 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128,
+ 0x080c, 0x155f, 0x1904, 0xd64a, 0x0005, 0x6014, 0x0096, 0x2048,
+ 0xa834, 0xa938, 0x009e, 0x9105, 0x1120, 0x080c, 0x155f, 0x1904,
+ 0xd64a, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291,
+ 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a,
+ 0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186, 0x0013, 0x0120,
+ 0x9186, 0x0014, 0x190c, 0x0dc3, 0x6024, 0xd0dc, 0x090c, 0x0dc3,
+ 0x0005, 0xd6dd, 0xd6e9, 0xd6f5, 0xd701, 0xd6dd, 0xd6dd, 0xd6dd,
+ 0xd6dd, 0xd6e4, 0xd6df, 0xd6df, 0xd6dd, 0xd6dd, 0xd6dd, 0xd6dd,
+ 0xd6df, 0xd6dd, 0xd6df, 0xd6dd, 0xd6e4, 0x080c, 0x0dc3, 0x6024,
+ 0xd0dc, 0x090c, 0x0dc3, 0x0005, 0x6014, 0x9005, 0x190c, 0x0dc3,
+ 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091,
+ 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106,
+ 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e,
+ 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x8906, 0x080c, 0x8f0e, 0x012e, 0x0005,
+ 0x0126, 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023,
+ 0x009e, 0x003e, 0x012e, 0x0005, 0xd730, 0xd732, 0xd744, 0xd75e,
+ 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730,
+ 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730,
+ 0x080c, 0x0dc3, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c,
+ 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c,
+ 0x88a1, 0x080c, 0x8e38, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc,
+ 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001,
+ 0x6106, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00e0, 0x901e, 0x6316,
+ 0x631a, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x00a0, 0x6014, 0x2048,
+ 0xa880, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70,
+ 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x080c, 0x8906,
+ 0x080c, 0x8f0e, 0x0005, 0x080c, 0x8d2c, 0x6114, 0x81ff, 0x0158,
+ 0x0096, 0x2148, 0x080c, 0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c,
+ 0xdcc3, 0x003e, 0x009e, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005,
+ 0x080c, 0x8de8, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,
+ 0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c, 0xdcc3, 0x003e, 0x009e,
+ 0x080c, 0xa3cf, 0x080c, 0x8f0e, 0x0005, 0x9182, 0x0085, 0x0002,
+ 0xd7af, 0xd7ad, 0xd7ad, 0xd7bb, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad,
+ 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0x080c, 0x0dc3, 0x6003,
+ 0x000b, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0x8e38, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xdf0c, 0x0118,
+ 0x080c, 0xa39d, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,
+ 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0,
+ 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa6b5, 0x7220, 0x080c,
+ 0xdb18, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,
+ 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,
+ 0x88a1, 0x080c, 0x8e38, 0x080c, 0x8f0e, 0x00ee, 0x002e, 0x0005,
+ 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc3,
+ 0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00a2, 0x9186,
+ 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xa434, 0x0050,
+ 0x2001, 0x0007, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa3cf,
+ 0x080c, 0x8e38, 0x0005, 0xd820, 0xd822, 0xd822, 0xd820, 0xd820,
+ 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820,
+ 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38,
+ 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0dc3, 0x9182, 0x0092, 0x1a0c,
+ 0x0dc3, 0x9182, 0x0085, 0x0002, 0xd841, 0xd841, 0xd841, 0xd843,
+ 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841,
+ 0xd841, 0x080c, 0x0dc3, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,
+ 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030,
+ 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0036,
+ 0x080c, 0xdf7c, 0x6043, 0x0000, 0x2019, 0x000b, 0x0011, 0x003e,
+ 0x0005, 0x6010, 0x0006, 0x0059, 0x000e, 0x6012, 0x6023, 0x0006,
+ 0x6003, 0x0007, 0x601b, 0x0000, 0x6043, 0x0000, 0x0005, 0x0126,
+ 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c,
+ 0x9ce3, 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x9d8e,
+ 0x007e, 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086,
+ 0x0007, 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c,
+ 0x080c, 0xc8e6, 0x080c, 0x1998, 0x6023, 0x0007, 0x6014, 0x2048,
+ 0x080c, 0xc1cd, 0x0110, 0x080c, 0xdcc3, 0x009e, 0x6017, 0x0000,
+ 0x080c, 0xdf7c, 0x6023, 0x0007, 0x080c, 0xc8e6, 0x003e, 0x012e,
+ 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260,
+ 0x7938, 0x783c, 0x080c, 0x2708, 0x1904, 0xd8ff, 0x0016, 0x00c6,
+ 0x080c, 0x64fc, 0x1904, 0xd8fd, 0x001e, 0x00c6, 0x080c, 0xc8ce,
+ 0x1130, 0xb8b0, 0x9005, 0x0118, 0x080c, 0x3257, 0x0148, 0x2b10,
+ 0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xc8d5, 0x000e, 0x6012,
+ 0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x9e54,
+ 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x007e, 0x001e,
+ 0x0076, 0x903e, 0x080c, 0xda37, 0x007e, 0x0026, 0xba04, 0x9294,
+ 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118,
+ 0xbaa0, 0x080c, 0x31c0, 0x002e, 0xbcb0, 0x001e, 0x080c, 0x5fcd,
+ 0xbe12, 0xbd16, 0xbcb2, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e,
+ 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6,
+ 0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074, 0x1904, 0xd95e,
+ 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184,
+ 0x8000, 0x0904, 0xd95b, 0x2001, 0x1958, 0x2004, 0x9005, 0x1140,
+ 0x6010, 0x2058, 0xb8b0, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598,
+ 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xe037, 0x0118, 0x6978,
+ 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff,
+ 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178,
+ 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298,
+ 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017,
+ 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040,
+ 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00,
+ 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce,
+ 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258,
+ 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004,
+ 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286,
+ 0x0004, 0x0120, 0x080c, 0x650b, 0x0804, 0xd9c6, 0x2011, 0x0276,
+ 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xb448,
+ 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48,
+ 0x2019, 0x0006, 0x080c, 0xb448, 0x009e, 0x1548, 0x0046, 0x0016,
+ 0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0138,
+ 0x2009, 0x0029, 0x080c, 0xdd18, 0xb800, 0xc0e5, 0xb802, 0x2019,
+ 0x0029, 0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919,
+ 0x2c08, 0x080c, 0xda37, 0x007e, 0x2001, 0x0007, 0x080c, 0x6474,
+ 0x2001, 0x0007, 0x080c, 0x6448, 0x001e, 0x004e, 0x9006, 0x015e,
+ 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e,
+ 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006,
+ 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156,
+ 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x2708, 0x11d0, 0x080c,
+ 0x64fc, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48,
+ 0x2019, 0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x0274,
+ 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448,
+ 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005,
+ 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263,
+ 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x11d0, 0x080c, 0x64fc,
+ 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
+ 0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9,
+ 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448, 0x009e,
+ 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6,
+ 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126,
+ 0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3,
+ 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff,
+ 0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128, 0x8001, 0x9602,
+ 0x1a04, 0xdad1, 0x0018, 0x9606, 0x0904, 0xdad1, 0x2100, 0x9c06,
+ 0x0904, 0xdac8, 0x6720, 0x9786, 0x0007, 0x0904, 0xdac8, 0x080c,
+ 0xdd59, 0x1904, 0xdac8, 0x080c, 0xe055, 0x0904, 0xdac8, 0x080c,
+ 0xdd49, 0x0904, 0xdac8, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c,
+ 0x3257, 0x0904, 0xdaec, 0x6004, 0x9086, 0x0000, 0x1904, 0xdaec,
+ 0x9786, 0x0004, 0x0904, 0xdaec, 0x2500, 0x9c06, 0x0904, 0xdac8,
+ 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0,
+ 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1998,
+ 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xc3d1, 0x1130, 0x080c,
+ 0xadb3, 0x009e, 0x080c, 0xa3cf, 0x0418, 0x6014, 0x2048, 0x080c,
+ 0xc1cd, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b, 0x0103, 0xa880,
+ 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e,
+ 0xab7e, 0xa87b, 0x0000, 0x080c, 0xdfcf, 0x0016, 0x080c, 0xc4ba,
+ 0x080c, 0x6bf5, 0x001e, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa3cf,
+ 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804,
+ 0xda4b, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e,
+ 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005,
+ 0x0128, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x08f8, 0x009e, 0x0c00,
+ 0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0, 0x9180, 0x0001,
+ 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001, 0x2004, 0x9086,
+ 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950, 0x080c, 0xc3c0,
+ 0x0130, 0x080c, 0xc3d1, 0x1920, 0x080c, 0xadb3, 0x0038, 0x080c,
+ 0x312b, 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf,
+ 0x0804, 0xdac8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005,
+ 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xdcea,
+ 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce,
+ 0x0005, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb39,
+ 0xdb37, 0xdb37, 0xdb37, 0xdb62, 0xa3cf, 0xa3cf, 0xdb37, 0x9006,
+ 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0,
+ 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xdd18, 0x001e, 0x004e,
+ 0x2019, 0x0002, 0x080c, 0xd86f, 0x003e, 0x9085, 0x0001, 0x0005,
+ 0x0096, 0x080c, 0xc1cd, 0x0140, 0x6014, 0x904d, 0x080c, 0xbde5,
+ 0x687f, 0x0005, 0x080c, 0x6c02, 0x009e, 0x080c, 0xa3cf, 0x9085,
+ 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005, 0x6000, 0x908a,
+ 0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xdb7d, 0xdb7d, 0xdb94,
+ 0xdb84, 0xdba3, 0xdb7d, 0xdb7d, 0xdb7f, 0xdb7d, 0xdb7d, 0xdb7d,
+ 0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0x080c, 0x0dc3, 0x080c,
+ 0xa3cf, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6, 0x2071, 0x19c4,
+ 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c, 0x9c35, 0x0010,
+ 0x080c, 0x9e13, 0x00ee, 0x003e, 0x0096, 0x00d6, 0x6014, 0x2048,
+ 0xa87f, 0x0005, 0x080c, 0x6c02, 0x080c, 0xa3cf, 0x00de, 0x009e,
+ 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c, 0x1998, 0x0c60,
+ 0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036,
+ 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xb434,
+ 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6,
+ 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000,
+ 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xdc1a,
+ 0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602, 0x1a04, 0xdc1a,
+ 0x88ff, 0x0120, 0x2800, 0x9c06, 0x15a0, 0x2078, 0x080c, 0xdd49,
+ 0x0580, 0x2400, 0x9c06, 0x0568, 0x6720, 0x9786, 0x0006, 0x1548,
+ 0x9786, 0x0007, 0x0530, 0x88ff, 0x1150, 0xd58c, 0x1118, 0x6010,
+ 0x9b06, 0x11f8, 0xd584, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096,
+ 0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c, 0x080c, 0xc8e6, 0x080c,
+ 0x1998, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0120,
+ 0x0046, 0x080c, 0xdcc3, 0x004e, 0x009e, 0x080c, 0xa3cf, 0x88ff,
+ 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210,
+ 0x0804, 0xdbcd, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e,
0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6,
0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019,
- 0x0002, 0x6210, 0x2258, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c,
- 0x9abb, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6,
- 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9,
- 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1168, 0x0056,
- 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x080c, 0x9a12, 0x008e,
- 0x903e, 0x080c, 0x9abb, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04,
- 0xd09a, 0x0036, 0x2508, 0x2029, 0x0003, 0x080c, 0xd010, 0x003e,
- 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6,
- 0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001,
- 0x2019, 0x0048, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb,
- 0x2c20, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6,
- 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800,
- 0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1148, 0x0086, 0x9046,
- 0x2828, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb, 0x003e,
- 0x001e, 0x8108, 0x1f04, 0xd0e1, 0x0036, 0x2029, 0x0002, 0x080c,
- 0xd010, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be,
- 0x0005, 0x0016, 0x00f6, 0x080c, 0xb953, 0x0198, 0xa868, 0x9084,
- 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803,
- 0x0000, 0xab86, 0x080c, 0x6b1d, 0x2f48, 0x0cb0, 0xab86, 0x080c,
- 0x6b1d, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803,
- 0x0000, 0x080c, 0x6b1d, 0x2f48, 0x0cb8, 0x080c, 0x6b1d, 0x0c88,
- 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cc8, 0x9005, 0x1138, 0x2071,
- 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06,
- 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206, 0x1130,
- 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x000c,
- 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001,
- 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006,
- 0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xaae6, 0xa86b, 0x010d,
- 0xa892, 0x0026, 0x2010, 0x080c, 0xb943, 0x2001, 0x0000, 0x0120,
- 0x2200, 0x9080, 0x0009, 0x2004, 0x002e, 0xa87e, 0x9186, 0x0020,
- 0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883, 0x0000, 0x2001,
- 0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e, 0xa88e, 0x0126,
- 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x009e, 0x0005, 0x6700,
- 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a,
- 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6,
- 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206,
- 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x9186, 0x0013, 0x1128,
- 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178,
- 0x080c, 0x8b2b, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004,
- 0x080c, 0xd101, 0x009e, 0x003e, 0x080c, 0x8c37, 0x0005, 0x9186,
- 0x0014, 0x0d70, 0x080c, 0x9fa3, 0x0005, 0xd1d4, 0xd1d2, 0xd1d2,
- 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d4, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2,
- 0xd1d2, 0xd1d2, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x6003, 0x000c,
- 0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085,
- 0x0208, 0x001a, 0x080c, 0x9fa3, 0x0005, 0xd1f2, 0xd1f2, 0xd1f2,
- 0xd1f2, 0xd1f4, 0xd1f9, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2,
- 0xd1f2, 0xd1f2, 0x080c, 0x0dc4, 0x00d6, 0x080c, 0x9f18, 0x00de,
- 0x0005, 0x080c, 0x9f18, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058,
- 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x0026, 0x0036, 0x0156,
- 0x2011, 0x182b, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334,
- 0x96b4, 0x00ff, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084,
- 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010,
- 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1168,
- 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
- 0x0006, 0x080c, 0xad8d, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e,
- 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x080c, 0x2e5f,
- 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
- 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886,
- 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046,
- 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c,
- 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650,
- 0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786,
- 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0,
- 0x080c, 0xd187, 0x01b8, 0x080c, 0xd197, 0x11a0, 0x6000, 0x9086,
- 0x0004, 0x1120, 0x0016, 0x080c, 0x1950, 0x001e, 0x080c, 0xbb45,
- 0x1110, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717,
- 0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e,
- 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
- 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e,
- 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xbef8, 0x0168, 0x2019,
- 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,
- 0x2021, 0x0004, 0x080c, 0x4c74, 0x004e, 0x003e, 0x000e, 0x0005,
- 0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x9b81, 0x080c, 0x9f42,
- 0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cc8,
- 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100,
- 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6010, 0x2058,
- 0xb8a0, 0x9206, 0x1120, 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0,
- 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085,
- 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005,
- 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004,
- 0xd0a4, 0x0138, 0x2001, 0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085,
- 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016,
- 0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000,
- 0x7056, 0xd5b4, 0x0118, 0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178,
- 0x2500, 0x9084, 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004,
- 0x0130, 0x908e, 0x0005, 0x0118, 0x2071, 0x184a, 0x0469, 0x001e,
- 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,
- 0x8000, 0x2071, 0x1842, 0x0401, 0x00ee, 0x000e, 0x012e, 0x0005,
- 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x706c,
- 0x8000, 0x706e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
- 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7070, 0x8000, 0x7072,
- 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220,
- 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0x1840,
- 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee,
- 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840,
- 0x7064, 0x8000, 0x7066, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003,
- 0x000b, 0x04b0, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, 0x0010,
- 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, 0x8060,
- 0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x799e, 0x000b, 0x50eb,
- 0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a,
- 0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000,
- 0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x162c, 0x000b, 0x808c,
- 0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c,
- 0x0008, 0x0002, 0x0000, 0x0821, 0x0003, 0x4022, 0x0000, 0x0022,
- 0x000b, 0x4122, 0x0008, 0x4447, 0x0002, 0x0e54, 0x000b, 0x0bfe,
- 0x0008, 0x11a0, 0x0001, 0x1232, 0x0003, 0x0ca0, 0x0001, 0x1232,
- 0x0003, 0x9180, 0x0001, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400,
- 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4430,
- 0x000b, 0x808c, 0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062,
- 0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0411, 0x0000, 0x4438,
- 0x0003, 0x03fe, 0x0000, 0x43e0, 0x0001, 0x0e2f, 0x000b, 0xc2c0,
- 0x0009, 0x00ff, 0x0008, 0x02e0, 0x0001, 0x0e2f, 0x000b, 0x9180,
- 0x0001, 0x0005, 0x0008, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62,
- 0x0008, 0x8066, 0x0000, 0x0019, 0x0000, 0x4447, 0x000b, 0x0240,
- 0x0002, 0x0a2c, 0x0003, 0x00fe, 0x0000, 0x322f, 0x000b, 0x112a,
- 0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a,
- 0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062,
- 0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4458,
- 0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e22, 0x0003, 0x00fe,
- 0x0000, 0x43e0, 0x0001, 0x0e22, 0x0003, 0x1734, 0x0000, 0x1530,
- 0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x808a, 0x0008, 0x0003,
- 0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x5868,
- 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x446b, 0x0003, 0x586c,
- 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x0872, 0x0003, 0x0d00,
- 0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074,
- 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, 0x00c8,
- 0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x3482, 0x0003, 0x1a60,
- 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0231,
- 0x0008, 0x4481, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cbc,
- 0x0003, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400,
- 0x0000, 0x089a, 0x0003, 0x14c4, 0x0003, 0x01fe, 0x0008, 0x0580,
- 0x0009, 0x7f06, 0x0000, 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c,
- 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680,
- 0x0009, 0x109a, 0x0003, 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00,
- 0x0008, 0x08bc, 0x000b, 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cab,
- 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6,
- 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0409, 0x0000, 0x44a4,
- 0x0003, 0x80fe, 0x0008, 0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066,
- 0x0000, 0x040a, 0x0000, 0x44aa, 0x000b, 0x00fe, 0x0000, 0x34b2,
- 0x0003, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, 0x08ad,
- 0x000b, 0x00b6, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, 0x3945,
- 0x000a, 0x08b2, 0x0003, 0x3946, 0x000a, 0x0cc3, 0x000b, 0x0000,
- 0x0007, 0x3943, 0x000a, 0x08c3, 0x0003, 0x00b6, 0x0003, 0x00fe,
- 0x0000, 0x34c1, 0x000b, 0x8072, 0x0000, 0x1000, 0x0000, 0x00c3,
- 0x000b, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0,
- 0x0009, 0xfc00, 0x0008, 0x08bc, 0x000b, 0x009a, 0x000b, 0x1c60,
- 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x44cc,
- 0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43,
- 0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348,
- 0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06,
- 0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008, 0x0446,
- 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x58df, 0x000b, 0x3efe,
- 0x0008, 0x7f4f, 0x0002, 0x08e6, 0x000b, 0x8000, 0x0000, 0x0001,
- 0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074,
- 0x0000, 0x2020, 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d,
- 0x0003, 0x2b24, 0x0008, 0x2b24, 0x0008, 0x58ef, 0x000b, 0x8054,
- 0x0008, 0x0002, 0x0000, 0x1242, 0x0002, 0x093d, 0x0003, 0x3a45,
- 0x000a, 0x092c, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945,
- 0x000a, 0x08fc, 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10,
- 0x000a, 0x7f3c, 0x0000, 0x0927, 0x000b, 0x1d00, 0x0002, 0x7f3a,
- 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
- 0x0008, 0x4505, 0x0003, 0x00fe, 0x0000, 0x3524, 0x000b, 0x1c60,
- 0x0000, 0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009,
- 0x0008, 0x450d, 0x000b, 0x00fe, 0x0000, 0x320c, 0x0003, 0x0038,
- 0x0000, 0x0060, 0x0008, 0x8062, 0x0008, 0x001a, 0x0000, 0x8066,
- 0x0000, 0x0009, 0x0008, 0x4516, 0x000b, 0x80c0, 0x0009, 0x00ff,
- 0x0008, 0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80,
- 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4520,
- 0x000b, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x0101, 0x000b, 0x0036,
- 0x0008, 0x00c8, 0x000c, 0x013d, 0x000b, 0x8074, 0x0000, 0x2000,
- 0x0000, 0x8072, 0x0000, 0x2000, 0x0000, 0x013d, 0x000b, 0x3a44,
- 0x0002, 0x0a35, 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072,
- 0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3609,
- 0x000b, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700,
- 0x0008, 0x00d0, 0x0009, 0x0d4f, 0x000b, 0x8074, 0x0000, 0x4040,
- 0x0008, 0x593d, 0x0003, 0x50eb, 0x000b, 0x3a46, 0x000a, 0x0d4f,
- 0x000b, 0x3a47, 0x0002, 0x094a, 0x0003, 0x8054, 0x0008, 0x0004,
- 0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000,
- 0x0008, 0x0192, 0x000b, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a,
- 0x0003, 0x1246, 0x000a, 0x0e06, 0x0003, 0x1a60, 0x0000, 0x8062,
- 0x0008, 0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4554,
- 0x000b, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102,
- 0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306,
- 0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a,
- 0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e,
- 0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912,
- 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066,
- 0x0000, 0x0052, 0x0000, 0x456e, 0x000b, 0x92c0, 0x0009, 0x0780,
- 0x0008, 0x0e1f, 0x000b, 0x124b, 0x0002, 0x0977, 0x000b, 0x2e4d,
- 0x0002, 0x2e4d, 0x0002, 0x0a09, 0x000b, 0x3a46, 0x000a, 0x0d84,
- 0x0003, 0x5979, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243,
- 0x000a, 0x098e, 0x000b, 0x8010, 0x0008, 0x000d, 0x0000, 0x01fa,
- 0x000c, 0x1810, 0x0000, 0x01fa, 0x000c, 0x018e, 0x0003, 0x194d,
- 0x000a, 0x0988, 0x000b, 0x1243, 0x000a, 0x0a13, 0x0003, 0x5988,
- 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x01ef, 0x0004, 0x1810,
- 0x0000, 0x01fa, 0x000c, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,
- 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0d98,
- 0x000b, 0x15fe, 0x0008, 0x3451, 0x000b, 0x000a, 0x000b, 0x8074,
- 0x0000, 0x0501, 0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa,
- 0x000c, 0x000a, 0x000b, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0dae,
- 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x15fe,
- 0x0008, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x01ea, 0x0004, 0x8076,
- 0x0008, 0x0040, 0x0000, 0x01e7, 0x0003, 0x8076, 0x0008, 0x0041,
- 0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dcc,
- 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0dab, 0x000b, 0x8076,
- 0x0008, 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d,
- 0x0000, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706,
- 0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a,
- 0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x45c3, 0x0003, 0x01ef,
- 0x0004, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000,
- 0x0008, 0x8072, 0x0000, 0xb000, 0x0000, 0x0192, 0x000b, 0xbbe0,
- 0x0009, 0x0038, 0x0000, 0x0dde, 0x0003, 0x18fe, 0x0000, 0x3ce0,
- 0x0009, 0x09db, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0da7,
- 0x000b, 0x01ea, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072,
- 0x0000, 0x8000, 0x0000, 0x022c, 0x000b, 0x8076, 0x0008, 0x0042,
- 0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0de7,
- 0x0003, 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000,
- 0x0000, 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000,
- 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80,
- 0x0001, 0x0007, 0x0000, 0x01f3, 0x0003, 0x1930, 0x000a, 0x7f00,
- 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400,
- 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x45f8,
- 0x000b, 0x4000, 0x000f, 0x21fa, 0x000b, 0x0870, 0x0008, 0x4000,
- 0x000f, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a03, 0x000b, 0x8074,
- 0x0000, 0x0706, 0x0000, 0x0205, 0x0003, 0x8074, 0x0000, 0x0703,
- 0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x023a,
- 0x0003, 0x8010, 0x0008, 0x0022, 0x0008, 0x023a, 0x0003, 0x01ef,
- 0x0004, 0x8010, 0x0008, 0x0007, 0x0000, 0x01fa, 0x000c, 0x1810,
- 0x0000, 0x01fa, 0x000c, 0x0246, 0x000b, 0x01ef, 0x0004, 0x8010,
- 0x0008, 0x001b, 0x0008, 0x01fa, 0x000c, 0x1810, 0x0000, 0x01fa,
- 0x000c, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000,
- 0x0008, 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009,
- 0x0008, 0x023a, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
- 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44,
- 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x023a, 0x0003, 0x8010,
- 0x0008, 0x0003, 0x0008, 0x023e, 0x000b, 0x8010, 0x0008, 0x000b,
- 0x0000, 0x023e, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x023e,
- 0x000b, 0x3a47, 0x0002, 0x0d3d, 0x000b, 0x8010, 0x0008, 0x0006,
- 0x0008, 0x023e, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,
- 0x0000, 0x3000, 0x0008, 0x01fa, 0x000c, 0x01fd, 0x0004, 0x3a40,
- 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa,
- 0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072,
- 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
- 0x0002, 0x0a51, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a,
- 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44,
- 0x0002, 0x0c0a, 0x000b, 0x022f, 0x000b, 0xf8aa, 0xf3d5, 0x0001,
- 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100,
- 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x5d31
+ 0x0002, 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e,
+ 0x008e, 0x903e, 0x080c, 0x9d8e, 0x080c, 0xdbbe, 0x005e, 0x007e,
+ 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
+ 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,
+ 0x64fc, 0x1180, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001,
+ 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+ 0x9d8e, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc4d, 0x0036,
+ 0x2508, 0x2029, 0x0003, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce,
+ 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, 0x0056,
+ 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048,
+ 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+ 0x9d8e, 0x2c20, 0x080c, 0xdbbe, 0x005e, 0x007e, 0x00be, 0x0005,
+ 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9,
+ 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x64fc, 0x1190, 0x0086,
+ 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xdf55, 0x004e,
+ 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+ 0x9d8e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc9a, 0x0036, 0x2029,
+ 0x0002, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e,
+ 0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c, 0xc1cb, 0x0198,
+ 0xa868, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d,
+ 0x0138, 0xa803, 0x0000, 0xab86, 0x080c, 0x6c02, 0x2f48, 0x0cb0,
+ 0xab86, 0x080c, 0x6c02, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d,
+ 0x0130, 0xa803, 0x0000, 0x080c, 0x6c02, 0x2f48, 0x0cb8, 0x080c,
+ 0x6c02, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005,
+ 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8,
+ 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008,
+ 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140,
+ 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40,
+ 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005,
+ 0x0096, 0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xaae6,
+ 0xa86b, 0x010d, 0xa892, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x2001,
+ 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87e,
+ 0x9186, 0x0020, 0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883,
+ 0x0000, 0x2001, 0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e,
+ 0xa88e, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x009e,
+ 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140,
+ 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001,
+ 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0,
+ 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016,
+ 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff,
+ 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005,
+ 0x2001, 0x1963, 0x2004, 0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158,
+ 0xd0cc, 0x0118, 0x080c, 0xc4fe, 0x0030, 0x080c, 0xdf7c, 0x080c,
+ 0x86d8, 0x080c, 0xa39d, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084,
+ 0x000f, 0x0002, 0xdda8, 0xdda8, 0xdda8, 0xddaa, 0xdda8, 0xddaa,
+ 0xddaa, 0xdda8, 0xddaa, 0xdda8, 0xdda8, 0xdda8, 0xdda8, 0xdda8,
+ 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004,
+ 0x9084, 0x000f, 0x0002, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1,
+ 0xddc1, 0xddce, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1,
+ 0xddc1, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003,
+ 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x00c6,
+ 0x2260, 0x080c, 0xdf7c, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4,
+ 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007,
+ 0x1904, 0xde27, 0x6814, 0x9005, 0x0138, 0x2048, 0xa880, 0xd0fc,
+ 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001,
+ 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186,
+ 0x0002, 0x1904, 0xde96, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086,
+ 0x0007, 0x190c, 0x0dc3, 0x0804, 0xde96, 0x2048, 0x080c, 0xc1cd,
+ 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048,
+ 0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa880, 0xc0dc,
+ 0xc0f4, 0xa882, 0xa884, 0xc0fc, 0xa886, 0x2009, 0x0043, 0x080c,
+ 0xd6b9, 0x0804, 0xde96, 0x2009, 0x0041, 0x0804, 0xde90, 0x9186,
+ 0x0005, 0x15a0, 0x6814, 0x2048, 0xa880, 0xd0bc, 0x1120, 0x00de,
+ 0x009e, 0x0804, 0xddc1, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dc3,
+ 0x0804, 0xdde2, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x88a1,
+ 0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120,
+ 0x9186, 0x0004, 0x1904, 0xde96, 0x6814, 0x2048, 0xa980, 0xc1f4,
+ 0xc1dc, 0xa982, 0xa984, 0xc1fc, 0xc1bc, 0xa986, 0x00f6, 0x2c78,
+ 0x080c, 0x16c1, 0x00fe, 0x2009, 0x0042, 0x0490, 0x0036, 0x080c,
+ 0x100d, 0x090c, 0x0dc3, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e,
+ 0xa88e, 0x2d18, 0xab92, 0xa88b, 0x0045, 0x2c00, 0xa896, 0x6038,
+ 0xa8a6, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058,
+ 0xb8a0, 0x00be, 0x6354, 0xab7e, 0xa87a, 0x9006, 0xa882, 0xa886,
+ 0xad9e, 0xae9a, 0xa8a3, 0x0001, 0x080c, 0x6c02, 0x2019, 0x0045,
+ 0x6008, 0x2068, 0x080c, 0xd861, 0x2d00, 0x600a, 0x003e, 0x0038,
+ 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xd6b9, 0x00ce, 0x00de,
+ 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,
+ 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x8d2c, 0x0036,
+ 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x009e,
+ 0x003e, 0x080c, 0x8e38, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c,
+ 0xa434, 0x0005, 0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7,
+ 0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0x080c,
+ 0x0dc3, 0x080c, 0x8d2c, 0x6003, 0x000c, 0x080c, 0x8e38, 0x0005,
+ 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c,
+ 0xa434, 0x0005, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee9, 0xdf09,
+ 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0x080c,
+ 0x0dc3, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01b0, 0x6003, 0x0001,
+ 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f,
+ 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004,
+ 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x080c, 0xa39d, 0x00de,
+ 0x0005, 0x080c, 0xa39d, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058,
+ 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x187e, 0x210c,
+ 0xd1ec, 0x05d0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc,
+ 0x0150, 0x2001, 0x1964, 0x2004, 0x6042, 0x2009, 0x187e, 0x210c,
+ 0xd1f4, 0x1540, 0x00a0, 0x2009, 0x187e, 0x210c, 0xd1f4, 0x0128,
+ 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00f8, 0x2001, 0x1964, 0x200c,
+ 0x2001, 0x1962, 0x2004, 0x9100, 0x9080, 0x000a, 0x6042, 0x6010,
+ 0x00b6, 0x2058, 0xb8ac, 0x9005, 0x1130, 0x2c00, 0xb8ae, 0x0038,
+ 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x00be,
+ 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6,
+ 0x6154, 0xb8ac, 0x9005, 0x01e0, 0x2060, 0x9006, 0x2070, 0xb8ae,
+ 0x8cff, 0x01b0, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1148, 0x600c,
+ 0x8eff, 0x0108, 0x2072, 0x080c, 0x86d8, 0x080c, 0xa39d, 0x0030,
+ 0x8eff, 0x1110, 0x2c00, 0xb8ae, 0x9cf0, 0x0003, 0x2e64, 0x0c40,
+ 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058,
+ 0xb8ac, 0x9c06, 0x1118, 0x600c, 0xb8ae, 0x0048, 0xb8ac, 0x906d,
+ 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be,
+ 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182b, 0x2204,
+ 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x96b4, 0x00ff, 0x9636,
+ 0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0,
+ 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
+ 0x000a, 0x080c, 0xb448, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9,
+ 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xb448,
+ 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071,
+ 0x1800, 0x080c, 0x5f46, 0x080c, 0x2ed6, 0x00ee, 0x0005, 0x00e6,
+ 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011,
+ 0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886, 0x0005, 0x00e6, 0x00d6,
+ 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126,
+ 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424,
+ 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x9606, 0x0578,
+ 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500,
+ 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xdd49, 0x01b8,
+ 0x080c, 0xdd59, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
+ 0x080c, 0x1998, 0x001e, 0x080c, 0xc3c0, 0x1110, 0x080c, 0x312b,
+ 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf, 0x9ce0,
+ 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e,
+ 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
+ 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006,
+ 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036,
+ 0x0046, 0x080c, 0xc8ce, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128,
+ 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c,
+ 0x4d24, 0x004e, 0x003e, 0x000e, 0x0005, 0x6004, 0x9086, 0x0001,
+ 0x1128, 0x080c, 0x9e54, 0x080c, 0xa3cf, 0x9006, 0x0005, 0x00e6,
+ 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7450,
+ 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000,
+ 0x9086, 0x0000, 0x0148, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1120,
+ 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x1819,
+ 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006,
+ 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
+ 0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0138, 0x2001,
+ 0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085, 0x0001, 0x0005, 0x9006,
+ 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
+ 0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000, 0x7056, 0xd5b4, 0x0118,
+ 0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007,
+ 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005,
+ 0x0118, 0x2071, 0x184a, 0x0469, 0x001e, 0x00ee, 0x000e, 0x012e,
+ 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1842,
+ 0x0401, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6,
+ 0x2091, 0x8000, 0x2071, 0x1840, 0x706c, 0x8000, 0x706e, 0x00ee,
+ 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
+ 0x2071, 0x1840, 0x7070, 0x8000, 0x7072, 0x00ee, 0x000e, 0x012e,
+ 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000,
+ 0x2072, 0x0005, 0x00e6, 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005,
+ 0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006,
+ 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7064, 0x8000, 0x7066,
+ 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003, 0x000b, 0x04ca, 0x0000,
+ 0xc000, 0x0001, 0x8064, 0x0008, 0x0010, 0x0000, 0x8066, 0x0000,
+ 0x0101, 0x0008, 0x4407, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000,
+ 0x580d, 0x000b, 0x79a6, 0x0003, 0x50f3, 0x000b, 0x4c0a, 0x0003,
+ 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a, 0x000b, 0x15fe, 0x0008,
+ 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffa0, 0x0001,
+ 0x2000, 0x0000, 0x1639, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000,
+ 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000,
+ 0x0821, 0x0003, 0x4022, 0x0000, 0x0022, 0x000b, 0x4122, 0x0008,
+ 0x4447, 0x0002, 0x0e61, 0x000b, 0x0bfe, 0x0008, 0x11a0, 0x0001,
+ 0x123f, 0x000b, 0x0ca0, 0x0001, 0x123f, 0x000b, 0x9180, 0x0001,
+ 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008,
+ 0x8066, 0x0000, 0x0009, 0x0008, 0x4430, 0x000b, 0x808c, 0x0008,
+ 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000,
+ 0x8066, 0x0000, 0x0411, 0x0000, 0x4438, 0x0003, 0x03fe, 0x0000,
+ 0x43e0, 0x0001, 0x0e3c, 0x0003, 0xc2c0, 0x0009, 0x00ff, 0x0008,
+ 0x02e0, 0x0001, 0x0e3c, 0x0003, 0x9180, 0x0001, 0x0005, 0x0008,
+ 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
+ 0x0019, 0x0000, 0x4447, 0x000b, 0x0240, 0x0002, 0x0a39, 0x000b,
+ 0x00fe, 0x0000, 0x323c, 0x0003, 0x112a, 0x0000, 0x002e, 0x0008,
+ 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008,
+ 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0008,
+ 0x8066, 0x0000, 0x0011, 0x0008, 0x4458, 0x0003, 0x01fe, 0x0008,
+ 0x42e0, 0x0009, 0x0e2f, 0x000b, 0x00fe, 0x0000, 0x43e0, 0x0001,
+ 0x0e2f, 0x000b, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632, 0x0008,
+ 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x8060, 0x0000,
+ 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x1e0a, 0x0008,
+ 0x446a, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008, 0x1a60, 0x0000,
+ 0x8062, 0x0008, 0x0002, 0x0000, 0x5870, 0x000b, 0x8066, 0x0000,
+ 0x3679, 0x0000, 0x4473, 0x0003, 0x5874, 0x0003, 0x3efe, 0x0008,
+ 0x7f4f, 0x0002, 0x087a, 0x000b, 0x0d00, 0x0000, 0x0082, 0x0004,
+ 0x8054, 0x0008, 0x0011, 0x0008, 0x8074, 0x0000, 0x1010, 0x0008,
+ 0x1efe, 0x0000, 0x300a, 0x000b, 0x00d0, 0x000c, 0x000a, 0x000b,
+ 0x00fe, 0x0000, 0x348a, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008,
+ 0x0007, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x4489, 0x0003,
+ 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cc4, 0x0003, 0x82c0, 0x0001,
+ 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400, 0x0000, 0x08a2, 0x000b,
+ 0x14cc, 0x000b, 0x01fe, 0x0008, 0x0580, 0x0009, 0x7f06, 0x0000,
+ 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c, 0x0000, 0x02fe, 0x0008,
+ 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680, 0x0009, 0x10a2, 0x000b,
+ 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00, 0x0008, 0x08c4, 0x000b,
+ 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cb3, 0x0003, 0x8060, 0x0000,
+ 0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6, 0x0001, 0x7f62, 0x0008,
+ 0x8066, 0x0000, 0x0409, 0x0000, 0x44ac, 0x000b, 0x80fe, 0x0008,
+ 0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x040a, 0x0000,
+ 0x44b2, 0x000b, 0x00fe, 0x0000, 0x34ba, 0x000b, 0x8072, 0x0000,
+ 0x1010, 0x0008, 0x3944, 0x0002, 0x08b5, 0x000b, 0x00be, 0x000b,
+ 0x8072, 0x0000, 0x2020, 0x0008, 0x3945, 0x000a, 0x08ba, 0x000b,
+ 0x3946, 0x000a, 0x0ccb, 0x0003, 0x0000, 0x0007, 0x3943, 0x000a,
+ 0x08cb, 0x000b, 0x00be, 0x000b, 0x00fe, 0x0000, 0x34c9, 0x0003,
+ 0x8072, 0x0000, 0x1000, 0x0000, 0x00cb, 0x0003, 0x8072, 0x0000,
+ 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0, 0x0009, 0xfc00, 0x0008,
+ 0x08c4, 0x000b, 0x00a2, 0x0003, 0x1c60, 0x0000, 0x1b62, 0x0000,
+ 0x8066, 0x0000, 0x0231, 0x0008, 0x44d4, 0x000b, 0x58d5, 0x000b,
+ 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, 0x0002, 0x0ce3, 0x0003,
+ 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a, 0x0008,
+ 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06, 0x0000, 0x0d08, 0x0008,
+ 0x00e7, 0x000b, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548, 0x0008,
+ 0x064a, 0x0000, 0x58e7, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002,
+ 0x08ee, 0x0003, 0x8000, 0x0000, 0x0001, 0x0000, 0x0082, 0x0004,
+ 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008,
+ 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24, 0x0008,
+ 0x2b24, 0x0008, 0x58f7, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000,
+ 0x1242, 0x0002, 0x0945, 0x0003, 0x3a45, 0x000a, 0x0934, 0x0003,
+ 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x0904, 0x0003,
+ 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c, 0x0000,
+ 0x092f, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60, 0x0000,
+ 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x450d, 0x000b,
+ 0x00fe, 0x0000, 0x352c, 0x0003, 0x1c60, 0x0000, 0x8062, 0x0008,
+ 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4515, 0x000b,
+ 0x00fe, 0x0000, 0x3219, 0x000b, 0x0038, 0x0000, 0x0060, 0x0008,
+ 0x8062, 0x0008, 0x001a, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008,
+ 0x451e, 0x0003, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e, 0x0008,
+ 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62, 0x0008,
+ 0x8066, 0x0000, 0x0009, 0x0008, 0x4528, 0x0003, 0x003a, 0x0008,
+ 0x1dfe, 0x0000, 0x0109, 0x0003, 0x0036, 0x0008, 0x00d0, 0x000c,
+ 0x0145, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072, 0x0000,
+ 0x2000, 0x0000, 0x0145, 0x000b, 0x3a44, 0x0002, 0x0a42, 0x000b,
+ 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000, 0x0000,
+ 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3616, 0x0003, 0x26fe, 0x0008,
+ 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0, 0x0009,
+ 0x0d57, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008, 0x5945, 0x0003,
+ 0x50f3, 0x000b, 0x3a46, 0x000a, 0x0d57, 0x000b, 0x3a47, 0x0002,
+ 0x0952, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000,
+ 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x019a, 0x0003,
+ 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246, 0x000a,
+ 0x0e13, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000,
+ 0x8066, 0x0000, 0x362a, 0x0000, 0x455c, 0x0003, 0x2000, 0x0000,
+ 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000, 0x2204, 0x0000,
+ 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000, 0x2408, 0x0000,
+ 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000, 0x260c, 0x0000,
+ 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000, 0x2810, 0x0000,
+ 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000, 0x1a60, 0x0000,
+ 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0052, 0x0000,
+ 0x4576, 0x000b, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e2c, 0x000b,
+ 0x124b, 0x0002, 0x097f, 0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
+ 0x0a16, 0x0003, 0x3a46, 0x000a, 0x0d8c, 0x000b, 0x5981, 0x000b,
+ 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x0996, 0x000b,
+ 0x8010, 0x0008, 0x000d, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000,
+ 0x0207, 0x0004, 0x0196, 0x0003, 0x194d, 0x000a, 0x0990, 0x000b,
+ 0x1243, 0x000a, 0x0a20, 0x0003, 0x5990, 0x000b, 0x8054, 0x0008,
+ 0x0004, 0x0000, 0x01fc, 0x000c, 0x1810, 0x0000, 0x0207, 0x0004,
+ 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008,
+ 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0da0, 0x0003, 0x15fe, 0x0008,
+ 0x3451, 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000,
+ 0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004, 0x000a, 0x000b,
+ 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0db6, 0x000b, 0x18fe, 0x0000,
+ 0x3ce0, 0x0009, 0x09b3, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009,
+ 0x09b3, 0x0003, 0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000,
+ 0x01f4, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x01f4, 0x000b,
+ 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0dbb, 0x0003, 0x3c1e, 0x0008,
+ 0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dd9, 0x000b,
+ 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0db3, 0x000b, 0x8076, 0x0008,
+ 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d, 0x0000,
+ 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706, 0x0008,
+ 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a, 0x0000,
+ 0x8066, 0x0000, 0x0422, 0x0000, 0x45d0, 0x000b, 0x01fc, 0x000c,
+ 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000, 0x0008,
+ 0x8072, 0x0000, 0xb000, 0x0000, 0x019a, 0x0003, 0xbbe0, 0x0009,
+ 0x0038, 0x0000, 0x0deb, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009,
+ 0x09e8, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0daf, 0x0003,
+ 0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072, 0x0000,
+ 0x8000, 0x0000, 0x0239, 0x0003, 0x8076, 0x0008, 0x0042, 0x0008,
+ 0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0df4, 0x000b,
+ 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,
+ 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,
+ 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80, 0x0001,
+ 0x0007, 0x0000, 0x0200, 0x0003, 0x1930, 0x000a, 0x7f00, 0x0000,
+ 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000,
+ 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x4605, 0x0003,
+ 0x4000, 0x000f, 0x2207, 0x0003, 0x0870, 0x0008, 0x4000, 0x000f,
+ 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a10, 0x0003, 0x8074, 0x0000,
+ 0x0706, 0x0000, 0x0212, 0x0003, 0x8074, 0x0000, 0x0703, 0x0000,
+ 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x0247, 0x0003,
+ 0x8010, 0x0008, 0x0022, 0x0008, 0x0247, 0x0003, 0x01fc, 0x000c,
+ 0x8010, 0x0008, 0x0007, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000,
+ 0x0207, 0x0004, 0x0253, 0x0003, 0x01fc, 0x000c, 0x8010, 0x0008,
+ 0x001b, 0x0008, 0x0207, 0x0004, 0x1810, 0x0000, 0x0207, 0x0004,
+ 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,
+ 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008,
+ 0x0247, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010, 0x0008,
+ 0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44, 0x0002,
+ 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0247, 0x0003, 0x8010, 0x0008,
+ 0x0003, 0x0008, 0x024b, 0x0003, 0x8010, 0x0008, 0x000b, 0x0000,
+ 0x024b, 0x0003, 0x8010, 0x0008, 0x0002, 0x0000, 0x024b, 0x0003,
+ 0x3a47, 0x0002, 0x0d45, 0x000b, 0x8010, 0x0008, 0x0006, 0x0008,
+ 0x024b, 0x0003, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000,
+ 0x3000, 0x0008, 0x0207, 0x0004, 0x020a, 0x000c, 0x3a40, 0x000a,
+ 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004,
+ 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000,
+ 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
+ 0x0a5e, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b,
+ 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44, 0x0002,
+ 0x0c0a, 0x000b, 0x023c, 0x0003, 0x6c3e, 0xf40f, 0x0001, 0x0002,
+ 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,
+ 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x0e6c
};
#ifdef ISP_2300_RISC_CODE
#undef ISP_2300_RISC_CODE
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/md/md.c
--- a/head/sys/dev/md/md.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/md/md.c Fri Aug 10 14:19:25 2012 +0300
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning=
Kamp
* -----------------------------------------------------------------------=
-----
*
- * $FreeBSD: head/sys/dev/md/md.c 238215 2012-07-07 20:32:21Z trasz $
+ * $FreeBSD: head/sys/dev/md/md.c 239065 2012-08-05 14:11:42Z kib $
*
*/
=20
@@ -84,14 +84,13 @@
#include <geom/geom.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pager.h>
#include <vm/swap_pager.h>
#include <vm/uma.h>
=20
-#include <machine/vmparam.h>
-
#define MD_MODVER 1
=20
#define MD_SHUTDOWN 0x10000 /* Tell worker thread to terminate. */
@@ -725,12 +724,6 @@
/* Actions on further pages start at offset 0 */
p +=3D PAGE_SIZE - offs;
offs =3D 0;
-#if 0
-if (bootverbose || bp->bio_offset / PAGE_SIZE < 17)
-printf("wire_count %d busy %d flags %x hold_count %d act_count %d queue %d=
valid %d dirty %d @ %d\n",
- m->wire_count, m->busy,
- m->flags, m->hold_count, m->act_count, m->queue, m->valid, m->dirty, i=
);
-#endif
}
vm_object_pip_subtract(sc->object, 1);
VM_OBJECT_UNLOCK(sc->object);
@@ -1090,7 +1083,7 @@
case MD_VNODE:
break;
case MD_SWAP:
- if (mdio->md_mediasize =3D=3D 0 ||
+ if (mdio->md_mediasize <=3D 0 ||
(mdio->md_mediasize % PAGE_SIZE) !=3D 0)
return (EDOM);
oldpages =3D OFF_TO_IDX(round_page(sc->mediasize));
@@ -1148,7 +1141,7 @@
* Range check. Disallow negative sizes or any size less then the
* size of a page. Then round to a page.
*/
- if (sc->mediasize =3D=3D 0 || (sc->mediasize % PAGE_SIZE) !=3D 0)
+ if (sc->mediasize <=3D 0 || (sc->mediasize % PAGE_SIZE) !=3D 0)
return (EDOM);
=20
/*
@@ -1189,6 +1182,7 @@
struct md_ioctl *mdio;
struct md_s *sc;
int error, i;
+ unsigned sectsize;
=20
if (md_debug)
printf("mdctlioctl(%s %lx %p %x %p)\n",
@@ -1217,6 +1211,12 @@
default:
return (EINVAL);
}
+ if (mdio->md_sectorsize =3D=3D 0)
+ sectsize =3D DEV_BSIZE;
+ else
+ sectsize =3D mdio->md_sectorsize;
+ if (sectsize > MAXPHYS || mdio->md_mediasize < sectsize)
+ return (EINVAL);
if (mdio->md_options & MD_AUTOUNIT)
sc =3D mdnew(-1, &error, mdio->md_type);
else {
@@ -1229,10 +1229,7 @@
if (mdio->md_options & MD_AUTOUNIT)
mdio->md_unit =3D sc->unit;
sc->mediasize =3D mdio->md_mediasize;
- if (mdio->md_sectorsize =3D=3D 0)
- sc->sectorsize =3D DEV_BSIZE;
- else
- sc->sectorsize =3D mdio->md_sectorsize;
+ sc->sectorsize =3D sectsize;
error =3D EDOOFUS;
switch (sc->type) {
case MD_MALLOC:
@@ -1282,6 +1279,8 @@
sc =3D mdfind(mdio->md_unit);
if (sc =3D=3D NULL)
return (ENOENT);
+ if (mdio->md_mediasize < sc->sectorsize)
+ return (EINVAL);
if (mdio->md_mediasize < sc->mediasize &&
!(sc->flags & MD_FORCE) &&
!(mdio->md_options & MD_FORCE))
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mge/if_mge.c
--- a/head/sys/dev/mge/if_mge.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mge/if_mge.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
#endif
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mge/if_mge.c 232874 2012-03-12 18:15:08Z =
scottl $");
+__FBSDID("$FreeBSD: head/sys/dev/mge/if_mge.c 238873 2012-07-28 21:56:24Z =
hrs $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -258,7 +258,9 @@
uint32_t d, r;
=20
soc_id(&d, &r);
- if (d =3D=3D MV_DEV_88F6281 || d =3D=3D MV_DEV_MV78100 ||
+ if (d =3D=3D MV_DEV_88F6281 ||
+ d =3D=3D MV_DEV_88F6282 ||
+ d =3D=3D MV_DEV_MV78100 ||
d =3D=3D MV_DEV_MV78100_Z0) {
sc->mge_ver =3D 2;
sc->mge_mtu =3D 0x4e8;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mii/e1000phy.c
--- a/head/sys/dev/mii/e1000phy.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mii/e1000phy.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mii/e1000phy.c 227908 2011-11-23 20:27:26=
Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/mii/e1000phy.c 238874 2012-07-28 21:59:12=
Z hrs $");
=20
/*
* driver for the Marvell 88E1000 series external 1000/100/10-BT PHY.
@@ -106,6 +106,7 @@
MII_PHY_DESC(xxMARVELL, E1111),
MII_PHY_DESC(xxMARVELL, E1116),
MII_PHY_DESC(xxMARVELL, E1116R),
+ MII_PHY_DESC(xxMARVELL, E1116R_29),
MII_PHY_DESC(xxMARVELL, E1118),
MII_PHY_DESC(xxMARVELL, E1149R),
MII_PHY_DESC(xxMARVELL, E3016),
@@ -208,6 +209,7 @@
case MII_MODEL_xxMARVELL_E1111:
case MII_MODEL_xxMARVELL_E1112:
case MII_MODEL_xxMARVELL_E1116:
+ case MII_MODEL_xxMARVELL_E1116R_29:
case MII_MODEL_xxMARVELL_E1118:
case MII_MODEL_xxMARVELL_E1149:
case MII_MODEL_xxMARVELL_E1149R:
@@ -215,7 +217,8 @@
/* Disable energy detect mode. */
reg &=3D ~E1000_SCR_EN_DETECT_MASK;
reg |=3D E1000_SCR_AUTO_X_MODE;
- if (sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116)
+ if (sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116 ||
+ sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116R_29)
reg &=3D ~E1000_SCR_POWER_DOWN;
reg |=3D E1000_SCR_ASSERT_CRS_ON_TX;
break;
@@ -243,6 +246,7 @@
PHY_WRITE(sc, E1000_SCR, reg);
=20
if (sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116 ||
+ sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116R_29 ||
sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1149 ||
sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1149R) {
PHY_WRITE(sc, E1000_EADR, 2);
@@ -259,6 +263,7 @@
case MII_MODEL_xxMARVELL_E1118:
break;
case MII_MODEL_xxMARVELL_E1116:
+ case MII_MODEL_xxMARVELL_E1116R_29:
page =3D PHY_READ(sc, E1000_EADR);
/* Select page 3, LED control register. */
PHY_WRITE(sc, E1000_EADR, 3);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mlx/mlxvar.h
--- a/head/sys/dev/mlx/mlxvar.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mlx/mlxvar.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: head/sys/dev/mlx/mlxvar.h 238997 2012-08-03 00:11:13Z delphij=
$
*/
=20
/*
@@ -47,7 +47,7 @@
* making that fit cleanly without crossing page boundaries requires round=
ing up
* to the next power of two.
*/
-#define MLX_MAXPHYS (128 * 124)
+#define MLX_MAXPHYS (128 * 1024)
#define MLX_NSEG 64
=20
#define MLX_NSLOTS 256 /* max number of command slots */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps.c
--- a/head/sys/dev/mps/mps.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,11 +26,11 @@
*
* LSI MPT-Fusion Host Adapter FreeBSD
*
- * $FreeBSD: head/sys/dev/mps/mps.c 237683 2012-06-28 03:48:54Z ken $
+ * $FreeBSD: head/sys/dev/mps/mps.c 238974 2012-08-01 17:31:31Z mav $
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps.c 237683 2012-06-28 03:48:54Z ken=
$");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps.c 238974 2012-08-01 17:31:31Z mav=
$");
=20
/* Communications core for LSI MPT2 */
=20
@@ -924,7 +924,7 @@
NULL, NULL, /* filter, filterarg */
BUS_SPACE_MAXSIZE_32BIT,/* maxsize */
nsegs, /* nsegments */
- BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */
+ BUS_SPACE_MAXSIZE_24BIT,/* maxsegsize */
BUS_DMA_ALLOCNOW, /* flags */
busdma_lock_mutex, /* lockfunc */
&sc->mps_mtx, /* lockarg */
@@ -2014,7 +2014,6 @@
MPI2_SGE_SIMPLE64 *sge =3D sgep;
int error, type;
uint32_t saved_buf_len, saved_address_low, saved_address_high;
- u32 sge_flags;
=20
type =3D (tc->Flags & MPI2_SGE_FLAGS_ELEMENT_MASK);
=20
@@ -2034,14 +2033,12 @@
break;
case MPI2_SGE_FLAGS_SIMPLE_ELEMENT:
/* Driver only uses 64-bit SGE simple elements */
- sge =3D sgep;
if (len !=3D MPS_SGE64_SIZE)
panic("SGE simple %p length %u or %zu?", sge,
MPS_SGE64_SIZE, len);
- if (((sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT) &
+ if (((le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT) &
MPI2_SGE_FLAGS_ADDRESS_SIZE) =3D=3D 0)
- panic("SGE simple %p flags %02x not marked 64-bit?",
- sge, sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT);
+ panic("SGE simple %p not marked 64-bit?", sge);
=20
break;
default:
@@ -2073,8 +2070,8 @@
* Mark as last element in this chain if necessary.
*/
if (type =3D=3D MPI2_SGE_FLAGS_SIMPLE_ELEMENT) {
- sge->FlagsLength |=3D
- (MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT);
+ sge->FlagsLength |=3D htole32(
+ MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT);
}
=20
/*
@@ -2083,11 +2080,6 @@
* understanding the code.
*/
cm->cm_sglsize -=3D len;
- /* Endian Safe code */
- sge_flags =3D sge->FlagsLength;
- sge->FlagsLength =3D htole32(sge_flags);
- sge->Address.High =3D htole32(sge->Address.High);=09
- sge->Address.Low =3D htole32(sge->Address.Low);
bcopy(sgep, cm->cm_sge, len);
cm->cm_sge =3D (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len);
return (mps_add_chain(cm));
@@ -2127,27 +2119,22 @@
* 2 SGL's for a bi-directional request, they both use the same
* DMA buffer (same cm command).
*/
- saved_buf_len =3D sge->FlagsLength & 0x00FFFFFF;
+ saved_buf_len =3D le32toh(sge->FlagsLength) & 0x00FFFFFF;
saved_address_low =3D sge->Address.Low;
saved_address_high =3D sge->Address.High;
if (cm->cm_out_len) {
- sge->FlagsLength =3D cm->cm_out_len |
+ sge->FlagsLength =3D htole32(cm->cm_out_len |
((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
MPI2_SGE_FLAGS_END_OF_BUFFER |
MPI2_SGE_FLAGS_HOST_TO_IOC |
MPI2_SGE_FLAGS_64_BIT_ADDRESSING) <<
- MPI2_SGE_FLAGS_SHIFT);
+ MPI2_SGE_FLAGS_SHIFT));
cm->cm_sglsize -=3D len;
- /* Endian Safe code */
- sge_flags =3D sge->FlagsLength;
- sge->FlagsLength =3D htole32(sge_flags);
- sge->Address.High =3D htole32(sge->Address.High);=09
- sge->Address.Low =3D htole32(sge->Address.Low);
bcopy(sgep, cm->cm_sge, len);
cm->cm_sge =3D (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge
+ len);
}
- sge->FlagsLength =3D saved_buf_len |
+ saved_buf_len |=3D
((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
MPI2_SGE_FLAGS_END_OF_BUFFER |
MPI2_SGE_FLAGS_LAST_ELEMENT |
@@ -2155,24 +2142,20 @@
MPI2_SGE_FLAGS_64_BIT_ADDRESSING) <<
MPI2_SGE_FLAGS_SHIFT);
if (cm->cm_flags & MPS_CM_FLAGS_DATAIN) {
- sge->FlagsLength |=3D
+ saved_buf_len |=3D
((uint32_t)(MPI2_SGE_FLAGS_IOC_TO_HOST) <<
MPI2_SGE_FLAGS_SHIFT);
} else {
- sge->FlagsLength |=3D
+ saved_buf_len |=3D
((uint32_t)(MPI2_SGE_FLAGS_HOST_TO_IOC) <<
MPI2_SGE_FLAGS_SHIFT);
}
+ sge->FlagsLength =3D htole32(saved_buf_len);
sge->Address.Low =3D saved_address_low;
sge->Address.High =3D saved_address_high;
}
=20
cm->cm_sglsize -=3D len;
- /* Endian Safe code */
- sge_flags =3D sge->FlagsLength;
- sge->FlagsLength =3D htole32(sge_flags);
- sge->Address.High =3D htole32(sge->Address.High);=09
- sge->Address.Low =3D htole32(sge->Address.Low);
bcopy(sgep, cm->cm_sge, len);
cm->cm_sge =3D (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len);
return (0);
@@ -2190,10 +2173,10 @@
/*
* This driver always uses 64-bit address elements for simplicity.
*/
+ bzero(&sge, sizeof(sge));
flags |=3D MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
MPI2_SGE_FLAGS_64_BIT_ADDRESSING;
- /* Set Endian safe macro in mps_push_sge */
- sge.FlagsLength =3D len | (flags << MPI2_SGE_FLAGS_SHIFT);
+ sge.FlagsLength =3D htole32(len | (flags << MPI2_SGE_FLAGS_SHIFT));
mps_from_u64(pa, &sge.Address);
=20
return (mps_push_sge(cm, &sge, sizeof sge, segsleft));
@@ -2290,7 +2273,6 @@
int
mps_map_command(struct mps_softc *sc, struct mps_command *cm)
{
- MPI2_SGE_SIMPLE32 *sge;
int error =3D 0;
=20
if (cm->cm_flags & MPS_CM_FLAGS_USE_UIO) {
@@ -2301,15 +2283,8 @@
cm->cm_data, cm->cm_length, mps_data_cb, cm, 0);
} else {
/* Add a zero-length element as needed */
- if (cm->cm_sge !=3D NULL) {
- sge =3D (MPI2_SGE_SIMPLE32 *)cm->cm_sge;
- sge->FlagsLength =3D htole32((MPI2_SGE_FLAGS_LAST_ELEMENT |
- MPI2_SGE_FLAGS_END_OF_BUFFER |
- MPI2_SGE_FLAGS_END_OF_LIST |
- MPI2_SGE_FLAGS_SIMPLE_ELEMENT) <<
- MPI2_SGE_FLAGS_SHIFT);
- sge->Address =3D 0;
- }
+ if (cm->cm_sge !=3D NULL)
+ mps_add_dmaseg(cm, 0, 0, 0, 1);
mps_enqueue_request(sc, cm);=09
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps_sas.c
--- a/head/sys/dev/mps/mps_sas.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps_sas.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,11 +26,11 @@
*
* LSI MPT-Fusion Host Adapter FreeBSD
*
- * $FreeBSD: head/sys/dev/mps/mps_sas.c 237800 2012-06-29 17:00:52Z ken $
+ * $FreeBSD: head/sys/dev/mps/mps_sas.c 238969 2012-08-01 12:24:13Z mav $
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps_sas.c 237800 2012-06-29 17:00:52Z=
ken $");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps_sas.c 238969 2012-08-01 12:24:13Z=
mav $");
=20
/* Communications core for LSI MPT2 */
=20
@@ -3003,6 +3003,7 @@
tm->cm_desc.HighPriority.RequestFlags =3D MPI2_REQ_DESCRIPT_FLAGS_HIGH_PR=
IORITY;
tm->cm_complete =3D mpssas_resetdev_complete;
tm->cm_complete_data =3D ccb;
+ tm->cm_targ =3D targ;
mps_map_command(sc, tm);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps_table.c
--- a/head/sys/dev/mps/mps_table.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps_table.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps_table.c 230592 2012-01-26 18:17:2=
1Z ken $");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps_table.c 238974 2012-08-01 17:31:3=
1Z mav $");
=20
/* Debugging tables for MPT2 */
=20
@@ -463,10 +463,12 @@
sge =3D (MPI2_SGE_SIMPLE64 *)&frame[offset * 4];
printf("SGL for command %p\n", cm);
=20
+ hexdump(frame, 128, NULL, 0);
while (frame !=3D NULL) {
- flags =3D sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT;
- printf("seg%d flags=3D0x%x len=3D0x%x addr=3D0x%jx\n", i, flags,
- sge->FlagsLength & 0xffffff, mps_to_u64(&sge->Address));
+ flags =3D le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT;
+ printf("seg%d flags=3D0x%02x len=3D0x%06x addr=3D0x%016jx\n",
+ i, flags, le32toh(sge->FlagsLength) & 0xffffff,
+ mps_to_u64(&sge->Address));
if (flags & (MPI2_SGE_FLAGS_END_OF_LIST |
MPI2_SGE_FLAGS_END_OF_BUFFER))
break;
@@ -475,8 +477,8 @@
if (flags & MPI2_SGE_FLAGS_LAST_ELEMENT) {
sgc =3D (MPI2_SGE_CHAIN32 *)sge;
printf("chain flags=3D0x%x len=3D0x%x Offset=3D0x%x "
- "Address=3D0x%x\n", sgc->Flags, sgc->Length,
- sgc->NextChainOffset, sgc->Address);
+ "Address=3D0x%x\n", sgc->Flags, le16toh(sgc->Length),
+ sgc->NextChainOffset, le32toh(sgc->Address));
if (chain =3D=3D NULL)
chain =3D TAILQ_FIRST(&cm->cm_chain_list);
else
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps_user.c
--- a/head/sys/dev/mps/mps_user.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps_user.c Fri Aug 10 14:19:25 2012 +0300
@@ -56,11 +56,11 @@
*
* LSI MPT-Fusion Host Adapter FreeBSD
*
- * $FreeBSD: head/sys/dev/mps/mps_user.c 237683 2012-06-28 03:48:54Z ken $
+ * $FreeBSD: head/sys/dev/mps/mps_user.c 238974 2012-08-01 17:31:31Z mav $
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps_user.c 237683 2012-06-28 03:48:54=
Z ken $");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps_user.c 238974 2012-08-01 17:31:31=
Z mav $");
=20
#include "opt_compat.h"
=20
@@ -534,11 +534,6 @@
return (EINVAL);
=20
mpi_init_sge(cm, req, &req->SGL);
- if (cmd->len =3D=3D 0) {
- /* Perhaps just asking what the size of the fw is? */
- return (0);
- }
-
bzero(&tc, sizeof tc);
=20
/*
@@ -554,6 +549,8 @@
tc.ImageOffset =3D 0;
tc.ImageSize =3D cmd->len;
=20
+ cm->cm_flags |=3D MPS_CM_FLAGS_DATAIN;
+
return (mps_push_sge(cm, &tc, sizeof tc, 0));
}
=20
@@ -692,13 +689,6 @@
mps_dprint(sc, MPS_INFO, "mps_user_command: Function %02X "
"MsgFlags %02X\n", hdr->Function, hdr->MsgFlags );
=20
- err =3D mps_user_setup_request(cm, cmd);
- if (err !=3D 0) {
- mps_printf(sc, "mps_user_command: unsupported function 0x%X\n",
- hdr->Function );
- goto RetFreeUnlocked;
- }
-
if (cmd->len > 0) {
buf =3D malloc(cmd->len, M_MPSUSER, M_WAITOK|M_ZERO);
if(!buf) {
@@ -716,8 +706,15 @@
cm->cm_flags =3D MPS_CM_FLAGS_SGE_SIMPLE;
cm->cm_desc.Default.RequestFlags =3D MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE;
=20
+ err =3D mps_user_setup_request(cm, cmd);
+ if (err !=3D 0) {
+ mps_printf(sc, "mps_user_command: unsupported function 0x%X\n",
+ hdr->Function );
+ goto RetFreeUnlocked;
+ }
+
mps_lock(sc);
- err =3D mps_wait_command(sc, cm, 30);
+ err =3D mps_wait_command(sc, cm, 60);
=20
if (err) {
mps_printf(sc, "%s: invalid request: error %d\n",
@@ -726,7 +723,10 @@
}
=20
rpl =3D (MPI2_DEFAULT_REPLY *)cm->cm_reply;
- sz =3D rpl->MsgLength * 4;
+ if (rpl !=3D NULL)
+ sz =3D rpl->MsgLength * 4;
+ else
+ sz =3D 0;
=09
if (sz > cmd->rpl_len) {
mps_printf(sc,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mpsvar.h
--- a/head/sys/dev/mps/mpsvar.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mpsvar.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,13 +26,13 @@
*
* LSI MPT-Fusion Host Adapter FreeBSD
*
- * $FreeBSD: head/sys/dev/mps/mpsvar.h 237683 2012-06-28 03:48:54Z ken $
+ * $FreeBSD: head/sys/dev/mps/mpsvar.h 238974 2012-08-01 17:31:31Z mav $
*/
=20
#ifndef _MPSVAR_H
#define _MPSVAR_H
=20
-#define MPS_DRIVER_VERSION "14.00.00.01-fbsd"
+#define MPS_DRIVER_VERSION "14.00.00.02-fbsd"
=20
#define MPS_DB_MAX_WAIT 2500
=20
@@ -627,15 +627,15 @@
static __inline void
mps_from_u64(uint64_t data, U64 *mps)
{
- (mps)->High =3D (uint32_t)((data) >> 32);
- (mps)->Low =3D (uint32_t)((data) & 0xffffffff);
+ (mps)->High =3D htole32((uint32_t)((data) >> 32));
+ (mps)->Low =3D htole32((uint32_t)((data) & 0xffffffff));
}
=20
static __inline uint64_t
mps_to_u64(U64 *data)
{
=20
- return (((uint64_t)data->High << 32) | data->Low);
+ return (((uint64_t)le32toh(data->High) << 32) | le32toh(data->Low));
}
=20
static __inline void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mvs/mvs_soc.c
--- a/head/sys/dev/mvs/mvs_soc.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mvs/mvs_soc.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mvs/mvs_soc.c 236952 2012-06-12 11:08:51Z=
mav $");
+__FBSDID("$FreeBSD: head/sys/dev/mvs/mvs_soc.c 238873 2012-07-28 21:56:24Z=
hrs $");
=20
#include <sys/param.h>
#include <sys/module.h>
@@ -63,6 +63,7 @@
} mvs_ids[] =3D {
{MV_DEV_88F5182, 0x00, "Marvell 88F5182", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{MV_DEV_88F6281, 0x00, "Marvell 88F6281", 2, MVS_Q_GENIIE|MVS_Q_SOC},
+ {MV_DEV_88F6282, 0x00, "Marvell 88F6282", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{MV_DEV_MV78100, 0x00, "Marvell MV78100", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{MV_DEV_MV78100_Z0, 0x00,"Marvell MV78100", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{0, 0x00, NULL, 0, 0}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/if_em_netmap.h
--- a/head/sys/dev/netmap/if_em_netmap.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/if_em_netmap.h Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
/*
- * $FreeBSD: head/sys/dev/netmap/if_em_netmap.h 232238 2012-02-27 19:05:01=
Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/if_em_netmap.h 238985 2012-08-02 11:59:43=
Z luigi $
* $Id: if_em_netmap.h 10627 2012-02-23 19:37:15Z luigi $
*
* netmap support for em.
@@ -171,7 +171,7 @@
u_int j, k, l, n =3D 0, lim =3D kring->nkr_num_slots - 1;
=20
/* generate an interrupt approximately every half ring */
- int report_frequency =3D kring->nkr_num_slots >> 1;
+ u_int report_frequency =3D kring->nkr_num_slots >> 1;
=20
k =3D ring->cur;
if (k > lim)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/if_igb_netmap.h
--- a/head/sys/dev/netmap/if_igb_netmap.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/if_igb_netmap.h Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
/*
- * $FreeBSD: head/sys/dev/netmap/if_igb_netmap.h 232238 2012-02-27 19:05:0=
1Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/if_igb_netmap.h 238985 2012-08-02 11:59:4=
3Z luigi $
* $Id: if_igb_netmap.h 10627 2012-02-23 19:37:15Z luigi $
*
* Netmap support for igb, partly contributed by Ahmed Kooli
@@ -125,7 +125,7 @@
u_int j, k, l, n =3D 0, lim =3D kring->nkr_num_slots - 1;
=20
/* generate an interrupt approximately every half ring */
- int report_frequency =3D kring->nkr_num_slots >> 1;
+ u_int report_frequency =3D kring->nkr_num_slots >> 1;
=20
k =3D ring->cur;
if (k > lim)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/ixgbe_netmap.h
--- a/head/sys/dev/netmap/ixgbe_netmap.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/ixgbe_netmap.h Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
/*
- * $FreeBSD: head/sys/dev/netmap/ixgbe_netmap.h 234229 2012-04-13 16:42:54=
Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/ixgbe_netmap.h 238985 2012-08-02 11:59:43=
Z luigi $
* $Id: ixgbe_netmap.h 10627 2012-02-23 19:37:15Z luigi $
*
* netmap modifications for ixgbe
@@ -233,7 +233,7 @@
* seems very expensive, so we interrupt once every half ring,
* or when requested with NS_REPORT
*/
- int report_frequency =3D kring->nkr_num_slots >> 1;
+ u_int report_frequency =3D kring->nkr_num_slots >> 1;
=20
if (k > lim)
return netmap_ring_reinit(kring);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/netmap.c
--- a/head/sys/dev/netmap/netmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/netmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011 Matteo Landi, Luigi Rizzo. All rights reserved.
+ * Copyright (C) 2011-2012 Matteo Landi, Luigi Rizzo. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,6 +23,8 @@
* SUCH DAMAGE.
*/
=20
+#define NM_BRIDGE
+
/*
* This module supports memory mapped access to network devices,
* see netmap(4).
@@ -52,8 +54,18 @@
* transmit or receive queues (or all queues for a given interface).
*/
=20
+#ifdef linux
+#include "bsd_glue.h"
+static netdev_tx_t linux_netmap_start(struct sk_buff *skb, struct net_devi=
ce *dev);
+#endif /* linux */
+
+#ifdef __APPLE__
+#include "osx_glue.h"
+#endif /* __APPLE__ */
+
+#ifdef __FreeBSD__
#include <sys/cdefs.h> /* prerequisite */
-__FBSDID("$FreeBSD: head/sys/dev/netmap/netmap.c 234986 2012-05-03 21:16:5=
3Z luigi $");
+__FBSDID("$FreeBSD: head/sys/dev/netmap/netmap.c 239149 2012-08-09 14:46:5=
2Z emaste $");
=20
#include <sys/types.h>
#include <sys/module.h>
@@ -78,11 +90,13 @@
#include <net/if.h>
#include <net/bpf.h> /* BIOCIMMEDIATE */
#include <net/vnet.h>
-#include <net/netmap.h>
-#include <dev/netmap/netmap_kern.h>
#include <machine/bus.h> /* bus_dmamap_* */
=20
MALLOC_DEFINE(M_NETMAP, "netmap", "Network memory map");
+#endif /* __FreeBSD__ */
+
+#include <net/netmap.h>
+#include <dev/netmap/netmap_kern.h>
=20
/*
* lock and unlock for the netmap memory allocator
@@ -105,8 +119,8 @@
CTLFLAG_RW, &netmap_verbose, 0, "Verbose mode");
SYSCTL_INT(_dev_netmap, OID_AUTO, no_timestamp,
CTLFLAG_RW, &netmap_no_timestamp, 0, "no_timestamp");
-int netmap_buf_size =3D 2048;
-TUNABLE_INT("hw.netmap.buf_size", &netmap_buf_size);
+u_int netmap_buf_size =3D 2048;
+TUNABLE_INT("hw.netmap.buf_size", (u_int *)&netmap_buf_size);
SYSCTL_INT(_dev_netmap, OID_AUTO, buf_size,
CTLFLAG_RD, &netmap_buf_size, 0, "Size of packet buffers");
int netmap_mitigate =3D 1;
@@ -115,6 +129,162 @@
SYSCTL_INT(_dev_netmap, OID_AUTO, no_pendintr,
CTLFLAG_RW, &netmap_no_pendintr, 0, "Always look for new received pack=
ets.");
=20
+int netmap_drop =3D 0; /* debugging */
+int netmap_flags =3D 0; /* debug flags */
+int netmap_copy =3D 0; /* debugging, copy content */
+
+SYSCTL_INT(_dev_netmap, OID_AUTO, drop, CTLFLAG_RW, &netmap_drop, 0 , "");
+SYSCTL_INT(_dev_netmap, OID_AUTO, flags, CTLFLAG_RW, &netmap_flags, 0 , ""=
);
+SYSCTL_INT(_dev_netmap, OID_AUTO, copy, CTLFLAG_RW, &netmap_copy, 0 , "");
+
+#ifdef NM_BRIDGE /* support for netmap bridge */
+
+/*
+ * system parameters.
+ *
+ * All switched ports have prefix NM_NAME.
+ * The switch has a max of NM_BDG_MAXPORTS ports (often stored in a bitmap,
+ * so a practical upper bound is 64).
+ * Each tx ring is read-write, whereas rx rings are readonly (XXX not done=
yet).
+ * The virtual interfaces use per-queue lock instead of core lock.
+ * In the tx loop, we aggregate traffic in batches to make all operations
+ * faster. The batch size is NM_BDG_BATCH
+ */
+#define NM_NAME "vale" /* prefix for the interface */
+#define NM_BDG_MAXPORTS 16 /* up to 64 ? */
+#define NM_BRIDGE_RINGSIZE 1024 /* in the device */
+#define NM_BDG_HASH 1024 /* forwarding table entries */
+#define NM_BDG_BATCH 1024 /* entries in the forwarding buffer */
+#define NM_BRIDGES 4 /* number of bridges */
+int netmap_bridge =3D NM_BDG_BATCH; /* bridge batch size */
+SYSCTL_INT(_dev_netmap, OID_AUTO, bridge, CTLFLAG_RW, &netmap_bridge, 0 , =
"");
+
+#ifdef linux
+#define ADD_BDG_REF(ifp) (NA(ifp)->if_refcount++)
+#define DROP_BDG_REF(ifp) (NA(ifp)->if_refcount-- <=3D 1)
+#else /* !linux */
+#define ADD_BDG_REF(ifp) (ifp)->if_refcount++
+#define DROP_BDG_REF(ifp) refcount_release(&(ifp)->if_refcount)
+#ifdef __FreeBSD__
+#include <sys/endian.h>
+#include <sys/refcount.h>
+#endif /* __FreeBSD__ */
+#define prefetch(x) __builtin_prefetch(x)
+#endif /* !linux */
+
+static void bdg_netmap_attach(struct ifnet *ifp);
+static int bdg_netmap_reg(struct ifnet *ifp, int onoff);
+/* per-tx-queue entry */
+struct nm_bdg_fwd { /* forwarding entry for a bridge */
+ void *buf;
+ uint64_t dst; /* dst mask */
+ uint32_t src; /* src index ? */
+ uint16_t len; /* src len */
+};
+
+struct nm_hash_ent {
+ uint64_t mac; /* the top 2 bytes are the epoch */
+ uint64_t ports;
+};
+
+/*
+ * Interfaces for a bridge are all in ports[].
+ * The array has fixed size, an empty entry does not terminate
+ * the search.
+ */
+struct nm_bridge {
+ struct ifnet *bdg_ports[NM_BDG_MAXPORTS];
+ int n_ports;
+ uint64_t act_ports;
+ int freelist; /* first buffer index */
+ NM_SELINFO_T si; /* poll/select wait queue */
+ NM_LOCK_T bdg_lock; /* protect the selinfo ? */
+
+ /* the forwarding table, MAC+ports */
+ struct nm_hash_ent ht[NM_BDG_HASH];
+
+ int namelen; /* 0 means free */
+ char basename[IFNAMSIZ];
+};
+
+struct nm_bridge nm_bridges[NM_BRIDGES];
+
+#define BDG_LOCK(b) mtx_lock(&(b)->bdg_lock)
+#define BDG_UNLOCK(b) mtx_unlock(&(b)->bdg_lock)
+
+/*
+ * NA(ifp)->bdg_port port index
+ */
+
+// XXX only for multiples of 64 bytes, non overlapped.
+static inline void
+pkt_copy(void *_src, void *_dst, int l)
+{
+ uint64_t *src =3D _src;
+ uint64_t *dst =3D _dst;
+ if (unlikely(l >=3D 1024)) {
+ bcopy(src, dst, l);
+ return;
+ }
+ for (; likely(l > 0); l-=3D64) {
+ *dst++ =3D *src++;
+ *dst++ =3D *src++;
+ *dst++ =3D *src++;
+ *dst++ =3D *src++;
+ *dst++ =3D *src++;
+ *dst++ =3D *src++;
+ *dst++ =3D *src++;
+ *dst++ =3D *src++;
+ }
+}
+
+/*
+ * locate a bridge among the existing ones.
+ * a ':' in the name terminates the bridge name. Otherwise, just NM_NAME.
+ * We assume that this is called with a name of at least NM_NAME chars.
+ */
+static struct nm_bridge *
+nm_find_bridge(const char *name)
+{
+ int i, l, namelen, e;
+ struct nm_bridge *b =3D NULL;
+
+ namelen =3D strlen(NM_NAME); /* base length */
+ l =3D strlen(name); /* actual length */
+ for (i =3D namelen + 1; i < l; i++) {
+ if (name[i] =3D=3D ':') {
+ namelen =3D i;
+ break;
+ }
+ }
+ if (namelen >=3D IFNAMSIZ)
+ namelen =3D IFNAMSIZ;
+ ND("--- prefix is '%.*s' ---", namelen, name);
+
+ /* use the first entry for locking */
+ BDG_LOCK(nm_bridges); // XXX do better
+ for (e =3D -1, i =3D 1; i < NM_BRIDGES; i++) {
+ b =3D nm_bridges + i;
+ if (b->namelen =3D=3D 0)
+ e =3D i; /* record empty slot */
+ else if (strncmp(name, b->basename, namelen) =3D=3D 0) {
+ ND("found '%.*s' at %d", namelen, name, i);
+ break;
+ }
+ }
+ if (i =3D=3D NM_BRIDGES) { /* all full */
+ if (e =3D=3D -1) { /* no empty slot */
+ b =3D NULL;
+ } else {
+ b =3D nm_bridges + e;
+ strncpy(b->basename, name, namelen);
+ b->namelen =3D namelen;
+ }
+ }
+ BDG_UNLOCK(nm_bridges);
+ return b;
+}
+#endif /* NM_BRIDGE */
=20
/*------------- memory allocator -----------------*/
#ifdef NETMAP_MEM2
@@ -186,13 +356,20 @@
lim =3D na->tx_rings[i].nkr_num_slots;
for (j =3D 0; j < lim; j++)
netmap_free_buf(nifp, ring->slot[j].buf_idx);
+ /* knlist_destroy(&na->tx_rings[i].si.si_note); */
+ mtx_destroy(&na->tx_rings[i].q_lock);
}
for (i =3D 0; i < na->num_rx_rings + 1; i++) {
struct netmap_ring *ring =3D na->rx_rings[i].ring;
lim =3D na->rx_rings[i].nkr_num_slots;
for (j =3D 0; j < lim; j++)
netmap_free_buf(nifp, ring->slot[j].buf_idx);
+ /* knlist_destroy(&na->rx_rings[i].si.si_note); */
+ mtx_destroy(&na->rx_rings[i].q_lock);
}
+ /* XXX kqueue(9) needed; these will mirror knlist_init. */
+ /* knlist_destroy(&na->tx_si.si_note); */
+ /* knlist_destroy(&na->rx_si.si_note); */
NMA_UNLOCK();
netmap_free_rings(na);
wakeup(na);
@@ -200,6 +377,46 @@
netmap_if_free(nifp);
}
=20
+static void
+nm_if_rele(struct ifnet *ifp)
+{
+#ifndef NM_BRIDGE
+ if_rele(ifp);
+#else /* NM_BRIDGE */
+ int i, full;
+ struct nm_bridge *b;
+
+ if (strncmp(ifp->if_xname, NM_NAME, sizeof(NM_NAME) - 1)) {
+ if_rele(ifp);
+ return;
+ }
+ if (!DROP_BDG_REF(ifp))
+ return;
+ b =3D ifp->if_bridge;
+ BDG_LOCK(nm_bridges);
+ BDG_LOCK(b);
+ ND("want to disconnect %s from the bridge", ifp->if_xname);
+ full =3D 0;
+ for (i =3D 0; i < NM_BDG_MAXPORTS; i++) {
+ if (b->bdg_ports[i] =3D=3D ifp) {
+ b->bdg_ports[i] =3D NULL;
+ bzero(ifp, sizeof(*ifp));
+ free(ifp, M_DEVBUF);
+ break;
+ }=20
+ else if (b->bdg_ports[i] !=3D NULL)
+ full =3D 1;
+ }
+ BDG_UNLOCK(b);
+ if (full =3D=3D 0) {
+ ND("freeing bridge %d", b - nm_bridges);
+ b->namelen =3D 0;
+ }
+ BDG_UNLOCK(nm_bridges);
+ if (i =3D=3D NM_BDG_MAXPORTS)
+ D("ouch, cannot find ifp to remove");
+#endif /* NM_BRIDGE */
+}
=20
static void
netmap_dtor(void *data)
@@ -212,7 +429,7 @@
netmap_dtor_locked(data);
na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0);
=20
- if_rele(ifp);
+ nm_if_rele(ifp);
bzero(priv, sizeof(*priv)); /* XXX for safety */
free(priv, M_DEVBUF);
}
@@ -228,6 +445,7 @@
* Return 0 on success, -1 otherwise.
*/
=20
+#ifdef __FreeBSD__
static int
netmap_mmap(__unused struct cdev *dev,
#if __FreeBSD_version < 900000
@@ -246,6 +464,7 @@
=20
return (0);
}
+#endif /* __FreeBSD__ */
=20
=20
/*
@@ -316,15 +535,19 @@
*
* This routine also does the selrecord if called from the poll handler
* (we know because td !=3D NULL).
+ *
+ * NOTE: on linux, selrecord() is defined as a macro and uses pwait
+ * as an additional hidden argument.
*/
static void
-netmap_sync_from_host(struct netmap_adapter *na, struct thread *td)
+netmap_sync_from_host(struct netmap_adapter *na, struct thread *td, void *=
pwait)
{
struct netmap_kring *kring =3D &na->rx_rings[na->num_rx_rings];
struct netmap_ring *ring =3D kring->ring;
u_int j, n, lim =3D kring->nkr_num_slots;
u_int k =3D ring->cur, resvd =3D ring->reserved;
=20
+ (void)pwait; /* disable unused warnings */
na->nm_lock(na->ifp, NETMAP_CORE_LOCK, 0);
if (k >=3D lim) {
netmap_ring_reinit(kring);
@@ -363,6 +586,64 @@
static int
get_ifp(const char *name, struct ifnet **ifp)
{
+#ifdef NM_BRIDGE
+ struct ifnet *iter =3D NULL;
+
+ do {
+ struct nm_bridge *b;
+ int i, l, cand =3D -1;
+
+ if (strncmp(name, NM_NAME, sizeof(NM_NAME) - 1))
+ break;
+ b =3D nm_find_bridge(name);
+ if (b =3D=3D NULL) {
+ D("no bridges available for '%s'", name);
+ return (ENXIO);
+ }
+ /* XXX locking */
+ BDG_LOCK(b);
+ /* lookup in the local list of ports */
+ for (i =3D 0; i < NM_BDG_MAXPORTS; i++) {
+ iter =3D b->bdg_ports[i];
+ if (iter =3D=3D NULL) {
+ if (cand =3D=3D -1)
+ cand =3D i; /* potential insert point */
+ continue;
+ }
+ if (!strcmp(iter->if_xname, name)) {
+ ADD_BDG_REF(iter);
+ ND("found existing interface");
+ BDG_UNLOCK(b);
+ break;
+ }
+ }
+ if (i < NM_BDG_MAXPORTS) /* already unlocked */
+ break;
+ if (cand =3D=3D -1) {
+ D("bridge full, cannot create new port");
+no_port:
+ BDG_UNLOCK(b);
+ *ifp =3D NULL;
+ return EINVAL;
+ }
+ ND("create new bridge port %s", name);
+ /* space for forwarding list after the ifnet */
+ l =3D sizeof(*iter) +
+ sizeof(struct nm_bdg_fwd)*NM_BDG_BATCH ;
+ iter =3D malloc(l, M_DEVBUF, M_NOWAIT | M_ZERO);
+ if (!iter)
+ goto no_port;
+ strcpy(iter->if_xname, name);
+ bdg_netmap_attach(iter);
+ b->bdg_ports[cand] =3D iter;
+ iter->if_bridge =3D b;
+ ADD_BDG_REF(iter);
+ BDG_UNLOCK(b);
+ ND("attaching virtual bridge %p", b);
+ } while (0);
+ *ifp =3D iter;
+ if (! *ifp)
+#endif /* NM_BRIDGE */
*ifp =3D ifunit_ref(name);
if (*ifp =3D=3D NULL)
return (ENXIO);
@@ -371,7 +652,7 @@
*/
if ((*ifp)->if_capabilities & IFCAP_NETMAP && NA(*ifp))
return 0; /* valid pointer, we hold the refcount */
- if_rele(*ifp);
+ nm_if_rele(*ifp);
return EINVAL; // not NETMAP capable
}
=20
@@ -491,8 +772,8 @@
* Return 0 on success, errno otherwise.
*/
static int
-netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
- __unused int fflag, struct thread *td)
+netmap_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
+ int fflag, struct thread *td)
{
struct netmap_priv_d *priv =3D NULL;
struct ifnet *ifp;
@@ -502,6 +783,23 @@
u_int i, lim;
struct netmap_if *nifp;
=20
+ (void)dev; /* UNUSED */
+ (void)fflag; /* UNUSED */
+#ifdef linux
+#define devfs_get_cdevpriv(pp) \
+ ({ *(struct netmap_priv_d **)pp =3D ((struct file *)td)->private_data; \
+ (*pp ? 0 : ENOENT); })
+
+/* devfs_set_cdevpriv cannot fail on linux */
+#define devfs_set_cdevpriv(p, fn) \
+ ({ ((struct file *)td)->private_data =3D p; (p ? 0 : EINVAL); })
+
+
+#define devfs_clear_cdevpriv() do { \
+ netmap_dtor(priv); ((struct file *)td)->private_data =3D 0; \
+ } while (0)
+#endif /* linux */
+
CURVNET_SET(TD_TO_VNET(td));
=20
error =3D devfs_get_cdevpriv((void **)&priv);
@@ -511,6 +809,7 @@
}
=20
error =3D 0; /* Could be ENOENT */
+ nmr->nr_name[sizeof(nmr->nr_name) - 1] =3D '\0'; /* truncate name */
switch (cmd) {
case NIOCGINFO: /* return capabilities etc */
/* memsize is always valid */
@@ -535,7 +834,7 @@
nmr->nr_tx_rings =3D na->num_tx_rings;
nmr->nr_rx_slots =3D na->num_rx_desc;
nmr->nr_tx_slots =3D na->num_tx_desc;
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
break;
=20
case NIOCREGIF:
@@ -561,7 +860,7 @@
M_NOWAIT | M_ZERO);
if (priv =3D=3D NULL) {
error =3D ENOMEM;
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
break;
}
=20
@@ -576,7 +875,7 @@
D("too many NIOCREGIF attempts, give up");
error =3D EINVAL;
free(priv, M_DEVBUF);
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
break;
}
=20
@@ -593,6 +892,11 @@
/* Otherwise set the card in netmap mode
* and make it use the shared buffers.
*/
+ for (i =3D 0 ; i < na->num_tx_rings + 1; i++)
+ mtx_init(&na->tx_rings[i].q_lock, "nm_txq_lock", MTX_NETWORK_LOCK, MTX=
_DEF);
+ for (i =3D 0 ; i < na->num_rx_rings + 1; i++) {
+ mtx_init(&na->rx_rings[i].q_lock, "nm_rxq_lock", MTX_NETWORK_LOCK, MTX=
_DEF);
+ }
error =3D na->nm_register(ifp, 1); /* mode on */
if (error)
netmap_dtor_locked(priv);
@@ -601,7 +905,7 @@
if (error) { /* reg. failed, release priv and ref */
error:
na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0);
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
bzero(priv, sizeof(*priv));
free(priv, M_DEVBUF);
break;
@@ -650,7 +954,7 @@
if (cmd =3D=3D NIOCTXSYNC)
netmap_sync_to_host(na);
else
- netmap_sync_from_host(na, NULL);
+ netmap_sync_from_host(na, NULL, NULL);
break;
}
/* find the last ring to scan */
@@ -679,6 +983,7 @@
=20
break;
=20
+#ifdef __FreeBSD__
case BIOCIMMEDIATE:
case BIOCGHDRCMPLT:
case BIOCSHDRCMPLT:
@@ -696,9 +1001,14 @@
so.so_vnet =3D ifp->if_vnet;
// so->so_proto not null.
error =3D ifioctl(&so, cmd, data, td);
- if_rele(ifp);
+ nm_if_rele(ifp);
break;
}
+
+#else /* linux */
+ default:
+ error =3D EOPNOTSUPP;
+#endif /* linux */
}
=20
CURVNET_RESTORE();
@@ -715,9 +1025,13 @@
* selfd or on the global one.
* Device-dependent parts (locking and sync of tx/rx rings)
* are done through callbacks.
+ *
+ * On linux, arguments are really pwait, the poll table, and 'td' is struc=
t file *
+ * The first one is remapped to pwait as selrecord() uses the name as an
+ * hidden argument.
*/
static int
-netmap_poll(__unused struct cdev *dev, int events, struct thread *td)
+netmap_poll(struct cdev *dev, int events, struct thread *td)
{
struct netmap_priv_d *priv =3D NULL;
struct netmap_adapter *na;
@@ -726,6 +1040,9 @@
u_int core_lock, i, check_all, want_tx, want_rx, revents =3D 0;
u_int lim_tx, lim_rx;
enum {NO_CL, NEED_CL, LOCKED_CL }; /* see below */
+ void *pwait =3D dev; /* linux compatibility */
+
+ (void)pwait;
=20
if (devfs_get_cdevpriv((void **)&priv) !=3D 0 || priv =3D=3D NULL)
return POLLERR;
@@ -755,7 +1072,7 @@
if (want_rx) {
kring =3D &na->rx_rings[lim_rx];
if (kring->ring->avail =3D=3D 0)
- netmap_sync_from_host(na, td);
+ netmap_sync_from_host(na, td, dev);
if (kring->ring->avail > 0) {
revents |=3D want_rx;
}
@@ -801,6 +1118,13 @@
* LOCKED_CL core lock is set, so we need to release it.
*/
core_lock =3D (check_all || !na->separate_locks) ? NEED_CL : NO_CL;
+#ifdef NM_BRIDGE
+ /* the bridge uses separate locks */
+ if (na->nm_register =3D=3D bdg_netmap_reg) {
+ ND("not using core lock for %s", ifp->if_xname);
+ core_lock =3D NO_CL;
+ }
+#endif /* NM_BRIDGE */
if (priv->np_qlast !=3D NETMAP_HW_RING) {
lim_tx =3D lim_rx =3D priv->np_qlast;
}
@@ -965,12 +1289,14 @@
* kring N+1 is only used for the selinfo for all queues.
* Return 0 on success, ENOMEM otherwise.
*
- * na->num_tx_rings can be set for cards with different tx/rx setups
+ * By default the receive and transmit adapter ring counts are both initia=
lized
+ * to num_queues. na->num_tx_rings can be set for cards with different tx=
/rx
+ * setups.
*/
int
netmap_attach(struct netmap_adapter *na, int num_queues)
{
- int i, n, size;
+ int n, size;
void *buf;
struct ifnet *ifp =3D na->ifp;
=20
@@ -999,19 +1325,23 @@
ifp->if_capabilities |=3D IFCAP_NETMAP;
=20
na =3D buf;
- if (na->nm_lock =3D=3D NULL)
+ /* Core lock initialized here. Others are initialized after
+ * netmap_if_new.
+ */
+ mtx_init(&na->core_lock, "netmap core lock", MTX_NETWORK_LOCK,
+ MTX_DEF);
+ if (na->nm_lock =3D=3D NULL) {
+ ND("using default locks for %s", ifp->if_xname);
na->nm_lock =3D netmap_lock_wrapper;
- mtx_init(&na->core_lock, "netmap core lock", NULL, MTX_DEF);
- for (i =3D 0 ; i < na->num_tx_rings + 1; i++)
- mtx_init(&na->tx_rings[i].q_lock, "netmap txq lock", NULL, MTX_DEF);
- for (i =3D 0 ; i < na->num_rx_rings + 1; i++)
- mtx_init(&na->rx_rings[i].q_lock, "netmap rxq lock", NULL, MTX_DEF);
+ }
}
#ifdef linux
- D("netdev_ops %p", ifp->netdev_ops);
- /* prepare a clone of the netdev ops */
- na->nm_ndo =3D *ifp->netdev_ops;
- na->nm_ndo.ndo_start_xmit =3D netmap_start_linux;
+ if (ifp->netdev_ops) {
+ D("netdev_ops %p", ifp->netdev_ops);
+ /* prepare a clone of the netdev ops */
+ na->nm_ndo =3D *ifp->netdev_ops;
+ }
+ na->nm_ndo.ndo_start_xmit =3D linux_netmap_start;
#endif
D("%s for %s", buf ? "ok" : "failed", ifp->if_xname);
=20
@@ -1026,22 +1356,13 @@
void
netmap_detach(struct ifnet *ifp)
{
- u_int i;
struct netmap_adapter *na =3D NA(ifp);
=20
if (!na)
return;
=20
- for (i =3D 0; i < na->num_tx_rings + 1; i++) {
- knlist_destroy(&na->tx_rings[i].si.si_note);
- mtx_destroy(&na->tx_rings[i].q_lock);
- }
- for (i =3D 0; i < na->num_rx_rings + 1; i++) {
- knlist_destroy(&na->rx_rings[i].si.si_note);
- mtx_destroy(&na->rx_rings[i].q_lock);
- }
- knlist_destroy(&na->tx_si.si_note);
- knlist_destroy(&na->rx_si.si_note);
+ mtx_destroy(&na->core_lock);
+
bzero(na, sizeof(*na));
WNA(ifp) =3D NULL;
free(na, M_DEVBUF);
@@ -1059,7 +1380,7 @@
struct netmap_adapter *na =3D NA(ifp);
struct netmap_kring *kring =3D &na->rx_rings[na->num_rx_rings];
u_int i, len =3D MBUF_LEN(m);
- int error =3D EBUSY, lim =3D kring->nkr_num_slots - 1;
+ u_int error =3D EBUSY, lim =3D kring->nkr_num_slots - 1;
struct netmap_slot *slot;
=20
if (netmap_verbose & NM_VERB_HOST)
@@ -1137,6 +1458,16 @@
kring->nkr_hwofs, na->ifp->if_xname,
tx =3D=3D NR_TX ? "TX" : "RX", n);
=20
+#if 0 // def linux
+ /* XXX check that the mappings are correct */
+ /* need ring_nr, adapter->pdev, direction */
+ buffer_info->dma =3D dma_map_single(&pdev->dev, addr, adapter->rx_buffer_=
len, DMA_FROM_DEVICE);
+ if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) {
+ D("error mapping rx netmap buffer %d", i);
+ // XXX fix error handling
+ }
+
+#endif /* linux */
/*
* Wakeup on the individual and global lock
* We do the wakeup here, but the ring is not yet reconfigured.
@@ -1201,6 +1532,154 @@
}
=20
=20
+#ifdef linux /* linux-specific routines */
+
+/*
+ * Remap linux arguments into the FreeBSD call.
+ * - pwait is the poll table, passed as 'dev';
+ * If pwait =3D=3D NULL someone else already woke up before. We can repo=
rt
+ * events but they are filtered upstream.
+ * If pwait !=3D NULL, then pwait->key contains the list of events.
+ * - events is computed from pwait as above.
+ * - file is passed as 'td';
+ */
+static u_int
+linux_netmap_poll(struct file * file, struct poll_table_struct *pwait)
+{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
+ int events =3D pwait ? pwait->key : POLLIN | POLLOUT;
+#else /* in 3.4.0 field 'key' was renamed to '_key' */
+ int events =3D pwait ? pwait->_key : POLLIN | POLLOUT;
+#endif
+ return netmap_poll((void *)pwait, events, (void *)file);
+}
+
+static int
+linux_netmap_mmap(struct file *f, struct vm_area_struct *vma)
+{
+ int lut_skip, i, j;
+ int user_skip =3D 0;
+ struct lut_entry *l_entry;
+ const struct netmap_obj_pool *p[] =3D {
+ nm_mem->nm_if_pool,
+ nm_mem->nm_ring_pool,
+ nm_mem->nm_buf_pool };
+ /*
+ * vma->vm_start: start of mapping user address space
+ * vma->vm_end: end of the mapping user address space
+ */
+
+ (void)f; /* UNUSED */
+ // XXX security checks
+
+ for (i =3D 0; i < 3; i++) { /* loop through obj_pools */
+ /*
+ * In each pool memory is allocated in clusters
+ * of size _clustsize , each containing clustentries
+ * entries. For each object k we already store the
+ * vtophys malling in lut[k] so we use that, scanning
+ * the lut[] array in steps of clustentries,
+ * and we map each cluster (not individual pages,
+ * it would be overkill).
+ */
+ for (lut_skip =3D 0, j =3D 0; j < p[i]->_numclusters; j++) {
+ l_entry =3D &p[i]->lut[lut_skip];
+ if (remap_pfn_range(vma, vma->vm_start + user_skip,
+ l_entry->paddr >> PAGE_SHIFT, p[i]->_clustsize,
+ vma->vm_page_prot))
+ return -EAGAIN; // XXX check return value
+ lut_skip +=3D p[i]->clustentries;
+ user_skip +=3D p[i]->_clustsize;
+ }
+ }
+
+ return 0;
+}
+
+static netdev_tx_t
+linux_netmap_start(struct sk_buff *skb, struct net_device *dev)
+{
+ netmap_start(dev, skb);
+ return (NETDEV_TX_OK);
+}
+
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) // XXX was 38
+#define LIN_IOCTL_NAME .ioctl
+int
+linux_netmap_ioctl(struct inode *inode, struct file *file, u_int cmd, u_lo=
ng data /* arg */)
+#else
+#define LIN_IOCTL_NAME .unlocked_ioctl
+long
+linux_netmap_ioctl(struct file *file, u_int cmd, u_long data /* arg */)
+#endif
+{
+ int ret;
+ struct nmreq nmr;
+ bzero(&nmr, sizeof(nmr));
+
+ if (data && copy_from_user(&nmr, (void *)data, sizeof(nmr) ) !=3D 0)
+ return -EFAULT;
+ ret =3D netmap_ioctl(NULL, cmd, (caddr_t)&nmr, 0, (void *)file);
+ if (data && copy_to_user((void*)data, &nmr, sizeof(nmr) ) !=3D 0)
+ return -EFAULT;
+ return -ret;
+}
+
+
+static int
+netmap_release(struct inode *inode, struct file *file)
+{
+ (void)inode; /* UNUSED */
+ if (file->private_data)
+ netmap_dtor(file->private_data);
+ return (0);
+}
+
+
+static struct file_operations netmap_fops =3D {
+ .mmap =3D linux_netmap_mmap,
+ LIN_IOCTL_NAME =3D linux_netmap_ioctl,
+ .poll =3D linux_netmap_poll,
+ .release =3D netmap_release,
+};
+
+static struct miscdevice netmap_cdevsw =3D { /* same name as FreeBSD */
+ MISC_DYNAMIC_MINOR,
+ "netmap",
+ &netmap_fops,
+};
+
+static int netmap_init(void);
+static void netmap_fini(void);
+
+/* Errors have negative values on linux */
+static int linux_netmap_init(void)
+{
+ return -netmap_init();
+}
+
+module_init(linux_netmap_init);
+module_exit(netmap_fini);
+/* export certain symbols to other modules */
+EXPORT_SYMBOL(netmap_attach); // driver attach routines
+EXPORT_SYMBOL(netmap_detach); // driver detach routines
+EXPORT_SYMBOL(netmap_ring_reinit); // ring init on error
+EXPORT_SYMBOL(netmap_buffer_lut);
+EXPORT_SYMBOL(netmap_total_buffers); // index check
+EXPORT_SYMBOL(netmap_buffer_base);
+EXPORT_SYMBOL(netmap_reset); // ring init routines
+EXPORT_SYMBOL(netmap_buf_size);
+EXPORT_SYMBOL(netmap_rx_irq); // default irq handler
+EXPORT_SYMBOL(netmap_no_pendintr); // XXX mitigation - should go away
+
+
+MODULE_AUTHOR("http://info.iet.unipi.it/~luigi/netmap/");
+MODULE_DESCRIPTION("The netmap packet I/O framework");
+MODULE_LICENSE("Dual BSD/GPL"); /* the code here is all BSD. */
+
+#else /* __FreeBSD__ */
+
static struct cdevsw netmap_cdevsw =3D {
.d_version =3D D_VERSION,
.d_name =3D "netmap",
@@ -1208,7 +1687,345 @@
.d_ioctl =3D netmap_ioctl,
.d_poll =3D netmap_poll,
};
+#endif /* __FreeBSD__ */
=20
+#ifdef NM_BRIDGE
+/*
+ *---- support for virtual bridge -----
+ */
+
+/* ----- FreeBSD if_bridge hash function ------- */
+
+/*
+ * The following hash function is adapted from "Hash Functions" by Bob Jen=
kins
+ * ("Algorithm Alley", Dr. Dobbs Journal, September 1997).
+ *
+ * http://www.burtleburtle.net/bob/hash/spooky.html
+ */
+#define mix(a, b, c) \
+do { \
+ a -=3D b; a -=3D c; a ^=3D (c >> 13); =
\
+ b -=3D c; b -=3D a; b ^=3D (a << 8); =
\
+ c -=3D a; c -=3D b; c ^=3D (b >> 13); =
\
+ a -=3D b; a -=3D c; a ^=3D (c >> 12); =
\
+ b -=3D c; b -=3D a; b ^=3D (a << 16); =
\
+ c -=3D a; c -=3D b; c ^=3D (b >> 5); =
\
+ a -=3D b; a -=3D c; a ^=3D (c >> 3); =
\
+ b -=3D c; b -=3D a; b ^=3D (a << 10); =
\
+ c -=3D a; c -=3D b; c ^=3D (b >> 15); =
\
+} while (/*CONSTCOND*/0)
+
+static __inline uint32_t
+nm_bridge_rthash(const uint8_t *addr)
+{
+ uint32_t a =3D 0x9e3779b9, b =3D 0x9e3779b9, c =3D 0; // hask key
+
+ b +=3D addr[5] << 8;
+ b +=3D addr[4];
+ a +=3D addr[3] << 24;
+ a +=3D addr[2] << 16;
+ a +=3D addr[1] << 8;
+ a +=3D addr[0];
+
+ mix(a, b, c);
+#define BRIDGE_RTHASH_MASK (NM_BDG_HASH-1)
+ return (c & BRIDGE_RTHASH_MASK);
+}
+
+#undef mix
+
+
+static int
+bdg_netmap_reg(struct ifnet *ifp, int onoff)
+{
+ int i, err =3D 0;
+ struct nm_bridge *b =3D ifp->if_bridge;
+
+ BDG_LOCK(b);
+ if (onoff) {
+ /* the interface must be already in the list.
+ * only need to mark the port as active
+ */
+ ND("should attach %s to the bridge", ifp->if_xname);
+ for (i=3D0; i < NM_BDG_MAXPORTS; i++)
+ if (b->bdg_ports[i] =3D=3D ifp)
+ break;
+ if (i =3D=3D NM_BDG_MAXPORTS) {
+ D("no more ports available");
+ err =3D EINVAL;
+ goto done;
+ }
+ ND("setting %s in netmap mode", ifp->if_xname);
+ ifp->if_capenable |=3D IFCAP_NETMAP;
+ NA(ifp)->bdg_port =3D i;
+ b->act_ports |=3D (1<<i);
+ b->bdg_ports[i] =3D ifp;
+ } else {
+ /* should be in the list, too -- remove from the mask */
+ ND("removing %s from netmap mode", ifp->if_xname);
+ ifp->if_capenable &=3D ~IFCAP_NETMAP;
+ i =3D NA(ifp)->bdg_port;
+ b->act_ports &=3D ~(1<<i);
+ }
+done:
+ BDG_UNLOCK(b);
+ return err;
+}
+
+
+static int
+nm_bdg_flush(struct nm_bdg_fwd *ft, int n, struct ifnet *ifp)
+{
+ int i, ifn;
+ uint64_t all_dst, dst;
+ uint32_t sh, dh;
+ uint64_t mysrc =3D 1 << NA(ifp)->bdg_port;
+ uint64_t smac, dmac;
+ struct netmap_slot *slot;
+ struct nm_bridge *b =3D ifp->if_bridge;
+
+ ND("prepare to send %d packets, act_ports 0x%x", n, b->act_ports);
+ /* only consider valid destinations */
+ all_dst =3D (b->act_ports & ~mysrc);
+ /* first pass: hash and find destinations */
+ for (i =3D 0; likely(i < n); i++) {
+ uint8_t *buf =3D ft[i].buf;
+ dmac =3D le64toh(*(uint64_t *)(buf)) & 0xffffffffffff;
+ smac =3D le64toh(*(uint64_t *)(buf + 4));
+ smac >>=3D 16;
+ if (unlikely(netmap_verbose)) {
+ uint8_t *s =3D buf+6, *d =3D buf;
+ D("%d len %4d %02x:%02x:%02x:%02x:%02x:%02x -> %02x:%02x:%02x:%02x:%=
02x:%02x",
+ i,
+ ft[i].len,
+ s[0], s[1], s[2], s[3], s[4], s[5],
+ d[0], d[1], d[2], d[3], d[4], d[5]);
+ }
+ /*
+ * The hash is somewhat expensive, there might be some
+ * worthwhile optimizations here.
+ */
+ if ((buf[6] & 1) =3D=3D 0) { /* valid src */
+ uint8_t *s =3D buf+6;
+ sh =3D nm_bridge_rthash(buf+6); // XXX hash of source
+ /* update source port forwarding entry */
+ b->ht[sh].mac =3D smac; /* XXX expire ? */
+ b->ht[sh].ports =3D mysrc;
+ if (netmap_verbose)
+ D("src %02x:%02x:%02x:%02x:%02x:%02x on port %d",
+ s[0], s[1], s[2], s[3], s[4], s[5], NA(ifp)->bdg_port);
+ }
+ dst =3D 0;
+ if ( (buf[0] & 1) =3D=3D 0) { /* unicast */
+ uint8_t *d =3D buf;
+ dh =3D nm_bridge_rthash(buf); // XXX hash of dst
+ if (b->ht[dh].mac =3D=3D dmac) { /* found dst */
+ dst =3D b->ht[dh].ports;
+ if (netmap_verbose)
+ D("dst %02x:%02x:%02x:%02x:%02x:%02x to port %x",
+ d[0], d[1], d[2], d[3], d[4], d[5], (uint32_t)(dst >> 16));
+ }
+ }
+ if (dst =3D=3D 0)
+ dst =3D all_dst;
+ dst &=3D all_dst; /* only consider valid ports */
+ if (unlikely(netmap_verbose))
+ D("pkt goes to ports 0x%x", (uint32_t)dst);
+ ft[i].dst =3D dst;
+ }
+
+ /* second pass, scan interfaces and forward */
+ all_dst =3D (b->act_ports & ~mysrc);
+ for (ifn =3D 0; all_dst; ifn++) {
+ struct ifnet *dst_ifp =3D b->bdg_ports[ifn];
+ struct netmap_adapter *na;
+ struct netmap_kring *kring;
+ struct netmap_ring *ring;
+ int j, lim, sent, locked;
+
+ if (!dst_ifp)
+ continue;
+ ND("scan port %d %s", ifn, dst_ifp->if_xname);
+ dst =3D 1 << ifn;
+ if ((dst & all_dst) =3D=3D 0) /* skip if not set */
+ continue;
+ all_dst &=3D ~dst; /* clear current node */
+ na =3D NA(dst_ifp);
+
+ ring =3D NULL;
+ kring =3D NULL;
+ lim =3D sent =3D locked =3D 0;
+ /* inside, scan slots */
+ for (i =3D 0; likely(i < n); i++) {
+ if ((ft[i].dst & dst) =3D=3D 0)
+ continue; /* not here */
+ if (!locked) {
+ kring =3D &na->rx_rings[0];
+ ring =3D kring->ring;
+ lim =3D kring->nkr_num_slots - 1;
+ na->nm_lock(dst_ifp, NETMAP_RX_LOCK, 0);
+ locked =3D 1;
+ }
+ if (unlikely(kring->nr_hwavail >=3D lim)) {
+ if (netmap_verbose)
+ D("rx ring full on %s", ifp->if_xname);
+ break;
+ }
+ j =3D kring->nr_hwcur + kring->nr_hwavail;
+ if (j > lim)
+ j -=3D kring->nkr_num_slots;
+ slot =3D &ring->slot[j];
+ ND("send %d %d bytes at %s:%d", i, ft[i].len, dst_ifp->if_xname, j);
+ pkt_copy(ft[i].buf, NMB(slot), ft[i].len);
+ slot->len =3D ft[i].len;
+ kring->nr_hwavail++;
+ sent++;
+ }
+ if (locked) {
+ ND("sent %d on %s", sent, dst_ifp->if_xname);
+ if (sent)
+ selwakeuppri(&kring->si, PI_NET);
+ na->nm_lock(dst_ifp, NETMAP_RX_UNLOCK, 0);
+ }
+ }
+ return 0;
+}
+
+/*
+ * main dispatch routine
+ */
+static int
+bdg_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
+{
+ struct netmap_adapter *na =3D NA(ifp);
+ struct netmap_kring *kring =3D &na->tx_rings[ring_nr];
+ struct netmap_ring *ring =3D kring->ring;
+ int i, j, k, lim =3D kring->nkr_num_slots - 1;
+ struct nm_bdg_fwd *ft =3D (struct nm_bdg_fwd *)(ifp + 1);
+ int ft_i; /* position in the forwarding table */
+
+ k =3D ring->cur;
+ if (k > lim)
+ return netmap_ring_reinit(kring);
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_TX_LOCK, ring_nr);
+
+ if (netmap_bridge <=3D 0) { /* testing only */
+ j =3D k; // used all
+ goto done;
+ }
+ if (netmap_bridge > NM_BDG_BATCH)
+ netmap_bridge =3D NM_BDG_BATCH;
+
+ ft_i =3D 0; /* start from 0 */
+ for (j =3D kring->nr_hwcur; likely(j !=3D k); j =3D unlikely(j =3D=3D lim=
) ? 0 : j+1) {
+ struct netmap_slot *slot =3D &ring->slot[j];
+ int len =3D ft[ft_i].len =3D slot->len;
+ char *buf =3D ft[ft_i].buf =3D NMB(slot);
+
+ prefetch(buf);
+ if (unlikely(len < 14))
+ continue;
+ if (unlikely(++ft_i =3D=3D netmap_bridge))
+ ft_i =3D nm_bdg_flush(ft, ft_i, ifp);
+ }
+ if (ft_i)
+ ft_i =3D nm_bdg_flush(ft, ft_i, ifp);
+ /* count how many packets we sent */
+ i =3D k - j;
+ if (i < 0)
+ i +=3D kring->nkr_num_slots;
+ kring->nr_hwavail =3D kring->nkr_num_slots - 1 - i;
+ if (j !=3D k)
+ D("early break at %d/ %d, avail %d", j, k, kring->nr_hwavail);
+
+done:
+ kring->nr_hwcur =3D j;
+ ring->avail =3D kring->nr_hwavail;
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_TX_UNLOCK, ring_nr);
+
+ if (netmap_verbose)
+ D("%s ring %d lock %d", ifp->if_xname, ring_nr, do_lock);
+ return 0;
+}
+
+static int
+bdg_netmap_rxsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
+{
+ struct netmap_adapter *na =3D NA(ifp);
+ struct netmap_kring *kring =3D &na->rx_rings[ring_nr];
+ struct netmap_ring *ring =3D kring->ring;
+ u_int j, n, lim =3D kring->nkr_num_slots - 1;
+ u_int k =3D ring->cur, resvd =3D ring->reserved;
+
+ ND("%s ring %d lock %d avail %d",
+ ifp->if_xname, ring_nr, do_lock, kring->nr_hwavail);
+
+ if (k > lim)
+ return netmap_ring_reinit(kring);
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_RX_LOCK, ring_nr);
+
+ /* skip past packets that userspace has released */
+ j =3D kring->nr_hwcur; /* netmap ring index */
+ if (resvd > 0) {
+ if (resvd + ring->avail >=3D lim + 1) {
+ D("XXX invalid reserve/avail %d %d", resvd, ring->avail);
+ ring->reserved =3D resvd =3D 0; // XXX panic...
+ }
+ k =3D (k >=3D resvd) ? k - resvd : k + lim + 1 - resvd;
+ }
+
+ if (j !=3D k) { /* userspace has released some packets. */
+ n =3D k - j;
+ if (n < 0)
+ n +=3D kring->nkr_num_slots;
+ ND("userspace releases %d packets", n);
+ for (n =3D 0; likely(j !=3D k); n++) {
+ struct netmap_slot *slot =3D &ring->slot[j];
+ void *addr =3D NMB(slot);
+
+ if (addr =3D=3D netmap_buffer_base) { /* bad buf */
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_RX_UNLOCK,=
ring_nr);
+ return netmap_ring_reinit(kring);
+ }
+ /* decrease refcount for buffer */
+
+ slot->flags &=3D ~NS_BUF_CHANGED;
+ j =3D unlikely(j =3D=3D lim) ? 0 : j + 1;
+ }
+ kring->nr_hwavail -=3D n;
+ kring->nr_hwcur =3D k;
+ }
+ /* tell userspace that there are new packets */
+ ring->avail =3D kring->nr_hwavail - resvd;
+
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_RX_UNLOCK, ring_nr);
+ return 0;
+}
+
+static void
+bdg_netmap_attach(struct ifnet *ifp)
+{
+ struct netmap_adapter na;
+
+ ND("attaching virtual bridge");
+ bzero(&na, sizeof(na));
+
+ na.ifp =3D ifp;
+ na.separate_locks =3D 1;
+ na.num_tx_desc =3D NM_BRIDGE_RINGSIZE;
+ na.num_rx_desc =3D NM_BRIDGE_RINGSIZE;
+ na.nm_txsync =3D bdg_netmap_txsync;
+ na.nm_rxsync =3D bdg_netmap_rxsync;
+ na.nm_register =3D bdg_netmap_reg;
+ netmap_attach(&na, 1);
+}
+
+#endif /* NM_BRIDGE */
=20
static struct cdev *netmap_dev; /* /dev/netmap character device. */
=20
@@ -1228,13 +2045,21 @@
=20
error =3D netmap_memory_init();
if (error !=3D 0) {
- printf("netmap: unable to initialize the memory allocator.");
+ printf("netmap: unable to initialize the memory allocator.\n");
return (error);
}
printf("netmap: loaded module with %d Mbytes\n",
(int)(nm_mem->nm_totalsize >> 20));
netmap_dev =3D make_dev(&netmap_cdevsw, 0, UID_ROOT, GID_WHEEL, 0660,
"netmap");
+
+#ifdef NM_BRIDGE
+ {
+ int i;
+ for (i =3D 0; i < NM_BRIDGES; i++)
+ mtx_init(&nm_bridges[i].bdg_lock, "bdg lock", "bdg_lock", MTX_DEF);
+ }
+#endif
return (error);
}
=20
@@ -1253,6 +2078,7 @@
}
=20
=20
+#ifdef __FreeBSD__
/*
* Kernel entry point.
*
@@ -1284,3 +2110,4 @@
=20
=20
DEV_MODULE(netmap, netmap_loader, NULL);
+#endif /* __FreeBSD__ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/netmap_kern.h
--- a/head/sys/dev/netmap/netmap_kern.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/netmap_kern.h Fri Aug 10 14:19:25 2012 +0300
@@ -24,8 +24,8 @@
*/
=20
/*
- * $FreeBSD: head/sys/dev/netmap/netmap_kern.h 234227 2012-04-13 16:03:07Z=
luigi $
- * $Id: netmap_kern.h 10602 2012-02-21 16:47:55Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/netmap_kern.h 239140 2012-08-08 15:27:01Z=
emaste $
+ * $Id: netmap_kern.h 11343 2012-07-03 09:08:38Z luigi $
*
* The header contains the definitions of constants and function
* prototypes used only in kernelspace.
@@ -37,6 +37,9 @@
#define NETMAP_MEM2 // use the new memory allocator
=20
#if defined(__FreeBSD__)
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+
#define NM_LOCK_T struct mtx
#define NM_SELINFO_T struct selinfo
#define MBUF_LEN(m) ((m)->m_pkthdr.len)
@@ -46,14 +49,37 @@
#define NM_SELINFO_T wait_queue_head_t
#define MBUF_LEN(m) ((m)->len)
#define NM_SEND_UP(ifp, m) netif_rx(m)
+
+#ifndef DEV_NETMAP
+#define DEV_NETMAP
+#endif
+
+/*
+ * IFCAP_NETMAP goes into net_device's flags (if_capabilities)
+ * and priv_flags (if_capenable). The latter used to be 16 bits
+ * up to linux 2.6.36, so we need to use a 16 bit value on older
+ * platforms and tolerate the clash with IFF_DYNAMIC and IFF_BRIDGE_PORT.
+ * For the 32-bit value, 0x100000 (bit 20) has no clashes up to 3.3.1
+ */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)
+#define IFCAP_NETMAP 0x8000
+#else
+#define IFCAP_NETMAP 0x100000
+#endif
+
+#elif defined (__APPLE__)
+#warning apple support is experimental
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#define NM_LOCK_T IOLock *
+#define NM_SELINFO_T struct selinfo
+#define MBUF_LEN(m) ((m)->m_pkthdr.len)
+#define NM_SEND_UP(ifp, m) ((ifp)->if_input)(ifp, m)
+
#else
#error unsupported platform
#endif
=20
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_NETMAP);
-#endif
-
#define ND(format, ...)
#define D(format, ...) \
do { \
@@ -118,8 +144,8 @@
int separate_locks; /* set if the interface suports different
locks for rx, tx and core. */
=20
- u_int num_rx_rings; /* number of tx/rx ring pairs */
- u_int num_tx_rings; // if nonzero, overrides num_rx_rings
+ u_int num_rx_rings; /* number of adapter receive rings */
+ u_int num_tx_rings; /* number of adapter transmit rings */
=20
u_int num_tx_desc; /* number of descriptor in each queue */
u_int num_rx_desc;
@@ -150,8 +176,11 @@
void (*nm_lock)(struct ifnet *, int what, u_int ringid);
int (*nm_txsync)(struct ifnet *, u_int ring, int lock);
int (*nm_rxsync)(struct ifnet *, u_int ring, int lock);
+
+ int bdg_port;
#ifdef linux
struct net_device_ops nm_ndo;
+ int if_refcount; // XXX additions for bridge
#endif /* linux */
};
=20
@@ -212,7 +241,7 @@
enum txrx tx, int n, u_int new_cur);
int netmap_ring_reinit(struct netmap_kring *);
=20
-extern int netmap_buf_size;
+extern u_int netmap_buf_size;
#define NETMAP_BUF_SIZE netmap_buf_size
extern int netmap_mitigate;
extern int netmap_no_pendintr;
@@ -240,6 +269,7 @@
#define NA(_ifp) ((struct netmap_adapter *)WNA(_ifp))
=20
=20
+#ifdef __FreeBSD__
/* Callback invoked by the dma machinery after a successfull dmamap_load */
static void netmap_dmamap_cb(__unused void *arg,
__unused bus_dma_segment_t * segs, __unused int nseg, __unused int err=
or)
@@ -267,6 +297,48 @@
netmap_dmamap_cb, NULL, BUS_DMA_NOWAIT);
}
}
+#else /* linux */
+
+/*
+ * XXX How do we redefine these functions:
+ *
+ * on linux we need
+ * dma_map_single(&pdev->dev, virt_addr, len, direction)
+ * dma_unmap_single(&adapter->pdev->dev, phys_addr, len, direction
+ * The len can be implicit (on netmap it is NETMAP_BUF_SIZE)
+ * unfortunately the direction is not, so we need to change
+ * something to have a cross API
+ */
+#define netmap_load_map(_t, _m, _b)
+#define netmap_reload_map(_t, _m, _b)
+#if 0
+ struct e1000_buffer *buffer_info =3D &tx_ring->buffer_info[l];
+ /* set time_stamp *before* dma to help avoid a possible race */
+ buffer_info->time_stamp =3D jiffies;
+ buffer_info->mapped_as_page =3D false;
+ buffer_info->length =3D len;
+ //buffer_info->next_to_watch =3D l;
+ /* reload dma map */
+ dma_unmap_single(&adapter->pdev->dev, buffer_info->dma,
+ NETMAP_BUF_SIZE, DMA_TO_DEVICE);
+ buffer_info->dma =3D dma_map_single(&adapter->pdev->dev,
+ addr, NETMAP_BUF_SIZE, DMA_TO_DEVICE);
+
+ if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) {
+ D("dma mapping error");
+ /* goto dma_error; See e1000_put_txbuf() */
+ /* XXX reset */
+ }
+ tx_desc->buffer_addr =3D htole64(buffer_info->dma); //XXX
+
+#endif
+
+/*
+ * The bus_dmamap_sync() can be one of wmb() or rmb() depending on directi=
on.
+ */
+#define bus_dmamap_sync(_a, _b, _c)
+
+#endif /* linux */
=20
/*
* functions to map NIC to KRING indexes (n2k) and vice versa (k2n)
@@ -322,7 +394,7 @@
NMB(struct netmap_slot *slot)
{
uint32_t i =3D slot->buf_idx;
- return (i >=3D netmap_total_buffers) ? NMB_VA(0) : NMB_VA(i);
+ return (unlikely(i >=3D netmap_total_buffers)) ? NMB_VA(0) : NMB_VA(i);
}
=20
static inline void *
@@ -341,4 +413,6 @@
/* default functions to handle rx/tx interrupts */
int netmap_rx_irq(struct ifnet *, int, int *);
#define netmap_tx_irq(_n, _q) netmap_rx_irq(_n, _q, NULL)
+
+extern int netmap_copy;
#endif /* _NET_NETMAP_KERN_H_ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/netmap_mem2.c
--- a/head/sys/dev/netmap/netmap_mem2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/netmap_mem2.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,8 +24,8 @@
*/
=20
/*
- * $FreeBSD: head/sys/dev/netmap/netmap_mem2.c 234290 2012-04-14 16:44:18Z=
luigi $
- * $Id: netmap_mem2.c 10830 2012-03-22 18:06:01Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/netmap_mem2.c 238912 2012-07-30 18:21:48Z=
luigi $
+ * $Id: netmap_mem2.c 11445 2012-07-30 10:49:07Z luigi $
*
* New memory allocator for netmap
*/
@@ -300,12 +300,13 @@
=20
=20
static void
-netmap_new_bufs(struct netmap_if *nifp __unused,
+netmap_new_bufs(struct netmap_if *nifp,
struct netmap_slot *slot, u_int n)
{
struct netmap_obj_pool *p =3D nm_mem->nm_buf_pool;
uint32_t i =3D 0; /* slot counter */
=20
+ (void)nifp; /* UNUSED */
for (i =3D 0; i < n; i++) {
void *vaddr =3D netmap_buf_malloc();
if (vaddr =3D=3D NULL) {
@@ -679,11 +680,11 @@
#ifdef linux
// XXX initialize the selrecord structs.
for (i =3D 0; i < ntx; i++)
+ init_waitqueue_head(&na->tx_rings[i].si);
+ for (i =3D 0; i < nrx; i++)
init_waitqueue_head(&na->rx_rings[i].si);
- for (i =3D 0; i < nrx; i++)
- init_waitqueue_head(&na->tx_rings[i].si);
+ init_waitqueue_head(&na->tx_si);
init_waitqueue_head(&na->rx_si);
- init_waitqueue_head(&na->tx_si);
#endif
final:
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/pccbb/pccbb_pci.c
--- a/head/sys/dev/pccbb/pccbb_pci.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/pccbb/pccbb_pci.c Fri Aug 10 14:19:25 2012 +0300
@@ -72,7 +72,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/pccbb/pccbb_pci.c 227843 2011-11-22 21:28=
:20Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/pccbb/pccbb_pci.c 238954 2012-07-31 18:47=
:17Z adrian $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -465,6 +465,11 @@
if (pci_read_config(sc->dev, PCIR_LATTIMER, 1) < 0x20)
pci_write_config(sc->dev, PCIR_LATTIMER, 0x20, 1);
=20
+ /* Restore bus configuration */
+ pci_write_config(sc->dev, PCIR_PRIBUS_2, sc->pribus, 1);
+ pci_write_config(sc->dev, PCIR_SECBUS_2, sc->secbus, 1);
+ pci_write_config(sc->dev, PCIR_SUBBUS_2, sc->subbus, 1);
+
/* Enable memory access */
PCI_MASK_CONFIG(sc->dev, PCIR_COMMAND,
| PCIM_CMD_MEMEN
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/pci/pci_pci.c
--- a/head/sys/dev/pci/pci_pci.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/pci/pci_pci.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/pci/pci_pci.c 237673 2012-06-27 22:17:52Z=
marius $");
+__FBSDID("$FreeBSD: head/sys/dev/pci/pci_pci.c 239103 2012-08-06 19:49:57Z=
jhb $");
=20
/*
* PCI:PCI bridge support.
@@ -683,6 +683,13 @@
* would be more widely routed than absolutely necessary. We could
* then do a walk of the tree later and fix it.
*/
+
+ /*
+ * Always enable busmastering on bridges so that transactions
+ * initiated on the secondary bus are passed through to the
+ * primary bus.
+ */
+ pci_enable_busmaster(dev);
}
=20
int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/puc/puc_cfg.h
--- a/head/sys/dev/puc/puc_cfg.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/puc/puc_cfg.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/sys/dev/puc/puc_cfg.h 237350 2012-06-21 03:10:48Z fjoe $
+ * $FreeBSD: head/sys/dev/puc/puc_cfg.h 238933 2012-07-31 05:23:23Z fjoe $
*/
=20
#ifndef _DEV_PUC_CFG_H_
@@ -79,7 +79,7 @@
int8_t ports;
int8_t rid; /* Rid of first port */
int8_t d_rid; /* Delta rid of next ports */
- int16_t d_ofs; /* Delta offset of next ports */
+ int8_t d_ofs; /* Delta offset of next ports */
puc_config_f *config_function;
};
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/puc/pucdata.c
--- a/head/sys/dev/puc/pucdata.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/puc/pucdata.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/puc/pucdata.c 237357 2012-06-21 04:57:59Z=
fjoe $");
+__FBSDID("$FreeBSD: head/sys/dev/puc/pucdata.c 239076 2012-08-05 19:37:18Z=
eadler $");
=20
/*
* PCI "universal" communications card driver configuration data (used to
@@ -510,13 +510,15 @@
{ 0x1393, 0x1024, 0xffff, 0,
"Moxa Technologies, Smartio CP-102E/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_2S, 0x14, 0, 0x200
+ PUC_PORT_2S, 0x14, 0, -1,
+ .config_function =3D puc_config_moxa
},
=20
{ 0x1393, 0x1025, 0xffff, 0,
"Moxa Technologies, Smartio CP-102EL/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_2S, 0x14, 0, 0x200,
+ PUC_PORT_2S, 0x14, 0, -1,
+ .config_function =3D puc_config_moxa
},
=20
{ 0x1393, 0x1040, 0xffff, 0,
@@ -572,7 +574,8 @@
{ 0x1393, 0x1182, 0xffff, 0,
"Moxa Technologies, Smartio CP-118EL-A/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_8S, 0x14, 0, 0x200,
+ PUC_PORT_8S, 0x14, 0, -1,
+ .config_function =3D puc_config_moxa
},
=20
{ 0x1393, 0x1680, 0xffff, 0,
@@ -596,7 +599,8 @@
{ 0x1393, 0x1683, 0xffff, 0,
"Moxa Technologies, Smartio CP-168EL-A/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_8S, 0x14, 0, 0x200,
+ PUC_PORT_8S, 0x14, 0, -1,
+ .config_function =3D puc_config_moxa
},
=20
{ 0x13a8, 0x0152, 0xffff, 0,
@@ -733,6 +737,12 @@
PUC_PORT_2S, 0x10, 0, 8,
},
=20
+ { 0x1415, 0x950a, 0x131f, 0x2032,
+ "SIIG Cyber Serial Dual PCI 16C850",
+ DEFAULT_RCLK * 10,
+ PUC_PORT_4S, 0x10, 0, 8,
+ },
+
{ 0x1415, 0x950a, 0xffff, 0,
"Oxford Semiconductor OX16PCI954 UARTs",
DEFAULT_RCLK,
@@ -764,11 +774,36 @@
*/
=20
{ 0x155f, 0x0331, 0xffff, 0,
+ "Perle Ultraport4 Express",
+ DEFAULT_RCLK * 8,
+ PUC_PORT_4S, 0x10, 0, 8,
+ },
+
+ { 0x155f, 0xB012, 0xffff, 0,
+ "Perle Speed2 LE",
+ DEFAULT_RCLK * 8,
+ PUC_PORT_2S, 0x10, 0, 8,
+ },
+
+ { 0x155f, 0xB022, 0xffff, 0,
+ "Perle Speed2 LE",
+ DEFAULT_RCLK * 8,
+ PUC_PORT_2S, 0x10, 0, 8,
+ },
+
+ { 0x155f, 0xB004, 0xffff, 0,
"Perle Speed4 LE",
DEFAULT_RCLK * 8,
PUC_PORT_4S, 0x10, 0, 8,
},
=20
+ { 0x155f, 0xB008, 0xffff, 0,
+ "Perle Speed8 LE",
+ DEFAULT_RCLK * 8,
+ PUC_PORT_8S, 0x10, 0, 8,
+ },
+
+
/*
* Oxford Semiconductor PCI Express Expresso family
*
@@ -1159,7 +1194,12 @@
intptr_t *res)
{
if (cmd =3D=3D PUC_CFG_GET_OFS) {
- *res =3D ((port =3D=3D 3) ? 7 : port) * 0x200;
+ const struct puc_cfg *cfg =3D sc->sc_cfg;
+
+ if (port =3D=3D 3 && (cfg->device =3D=3D 0x1045 || cfg->device =3D=3D 0x=
1144))
+ port =3D 7;
+ *res =3D port * 0x200;
+
return 0;
}
return (ENXIO);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/sdhci/sdhci.c
--- a/head/sys/dev/sdhci/sdhci.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/sdhci/sdhci.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/sdhci/sdhci.c 238672 2012-07-21 14:07:43Z=
glebius $");
+__FBSDID("$FreeBSD: head/sys/dev/sdhci/sdhci.c 238898 2012-07-30 08:56:56Z=
glebius $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -364,7 +364,7 @@
=20
/*
* Some SD/MMC cards don't work with the default base
- * clock frequency of 200MHz. Lower it to 50MHz.
+ * clock frequency of 200MHz. Lower it to 50MHz.
*/
pci_write_config(dev, SDHC_PCI_BASE_FREQ_KEY, 0x01, 1);
pci_write_config(dev, SDHC_PCI_BASE_FREQ, 50, 1);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/spibus/spi.h
--- a/head/sys/dev/spibus/spi.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/spibus/spi.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,7 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/spibus/spi.h 238965 2012-08-01 01:18:36Z imp $ */
=20
struct spi_command {
+ int cs;
void *tx_cmd;
uint32_t tx_cmd_sz;
void *rx_cmd;
@@ -10,3 +11,5 @@
void *rx_data;
uint32_t rx_data_sz;
};
+
+#define SPI_CHIP_SELECT_HIGH 0x1 /* Chip select high (else low) */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/spibus/spibus.c
--- a/head/sys/dev/spibus/spibus.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/spibus/spibus.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/spibus/spibus.c 227843 2011-11-22 21:28:2=
0Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/spibus/spibus.c 238965 2012-08-01 01:18:3=
6Z imp $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -165,6 +165,9 @@
static int
spibus_transfer_impl(device_t dev, device_t child, struct spi_command *cmd)
{
+ /* Maybe set flags too? spi mode? */
+ spibus_get_cs(dev, &cmd->cs);
+
return (SPIBUS_TRANSFER(device_get_parent(dev), child, cmd));
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/controller/at91dci_at=
melarm.c
--- a/head/sys/dev/usb/controller/at91dci_atmelarm.c Mon Jul 30 11:44:18 20=
12 +0300
+++ b/head/sys/dev/usb/controller/at91dci_atmelarm.c Fri Aug 10 14:19:25 20=
12 +0300
@@ -1,5 +1,5 @@
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/controller/at91dci_atmelarm.c 228483 =
2011-12-14 00:28:54Z hselasky $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/controller/at91dci_atmelarm.c 238848 =
2012-07-27 17:28:11Z imp $");
=20
/*-
* Copyright (c) 2007-2008 Hans Petter Selasky. All rights reserved.
@@ -61,12 +61,12 @@
=20
#include <arm/at91/at91_pmcvar.h>
#include <arm/at91/at91rm92reg.h>
-#include <arm/at91/at91_pio_rm9200.h>
+#include <arm/at91/at91_pioreg.h>
#include <arm/at91/at91_piovar.h>
=20
#define MEM_RID 0
=20
-/* Pin Definitions - do they belong here or somewhere else ? */
+/* Pin Definitions - do they belong here or somewhere else ? -- YES! */
=20
#define VBUS_MASK AT91C_PIO_PB24
#define VBUS_BASE AT91RM92_PIOB_BASE
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/controller/ohci_atmel=
arm.c
--- a/head/sys/dev/usb/controller/ohci_atmelarm.c Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/sys/dev/usb/controller/ohci_atmelarm.c Fri Aug 10 14:19:25 2012 =
+0300
@@ -23,7 +23,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/controller/ohci_atmelarm.c 228483 201=
1-12-14 00:28:54Z hselasky $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/controller/ohci_atmelarm.c 238819 201=
2-07-27 05:24:09Z imp $");
=20
#include <sys/stdint.h>
#include <sys/stddef.h>
@@ -76,6 +76,7 @@
static int
ohci_atmelarm_probe(device_t dev)
{
+
device_set_desc(dev, "AT91 integrated OHCI controller");
return (BUS_PROBE_DEFAULT);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/serial/uftdi.c
--- a/head/sys/dev/usb/serial/uftdi.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/serial/uftdi.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uftdi.c 237236 2012-06-18 19:1=
8:31Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uftdi.c 239055 2012-08-05 11:5=
0:56Z hselasky $");
=20
/*
* NOTE: all function names beginning like "uftdi_cfg_" can only
@@ -209,32 +209,228 @@
static const STRUCT_USB_HOST_ID uftdi_devs[] =3D {
#define UFTDI_DEV(v, p, i) \
{ USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
+ UFTDI_DEV(ACTON, SPECTRAPRO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ALTI2, N3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ANALOGDEVICES, GNICE, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(ANALOGDEVICES, GNICEPLUS, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
UFTDI_DEV(ATMEL, STK541, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(BAYER, CONTOUR_CABLE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, 232USB9M, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, 485USB9F_2W, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, 485USB9F_4W, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, 485USBTB_2W, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, 485USBTB_4W, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, TTL3USB9M, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, TTL5USB9M, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, USO9ML2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, USO9ML2DR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, USO9ML2DR_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, USOPTL4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, USOPTL4DR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, USOPTL4DR2, UFTDI_TYPE_AUTO),
UFTDI_DEV(BBELECTRONICS, USOTL4, UFTDI_TYPE_8U232AM),
- UFTDI_DEV(DRESDENELEKTRONIK, SENSORTERMINALBOARD,
- UFTDI_TYPE_8U232AM),
- UFTDI_DEV(DRESDENELEKTRONIK, WIRELESSHANDHELDTERMINAL,
- UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(BBELECTRONICS, USPTL4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, USTL4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(BBELECTRONICS, ZZ_PROG1_USB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(CONTEC, COM1USBH, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(DRESDENELEKTRONIK, SENSORTERMINALBOARD, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(DRESDENELEKTRONIK, WIRELESSHANDHELDTERMINAL, UFTDI_TYPE_8U232AM=
),
+ UFTDI_DEV(ELEKTOR, FT323R, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(EVOLUTION, ER1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(EVOLUTION, HYBRID, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(EVOLUTION, RCM4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FALCOM, SAMBA, UFTDI_TYPE_AUTO),
UFTDI_DEV(FALCOM, TWIST, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FIC, NEO1973_DEBUG, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FIC, NEO1973_DEBUG, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, 232H, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, 232RL, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, 4N_GALAXY_DE_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, 4N_GALAXY_DE_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, 4N_GALAXY_DE_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, 8U232AM_ALT, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ACCESSO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ACG_HFDUAL, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ACTIVE_ROBOTS, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ACTZWAVE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, AMC232, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ARTEMIS, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ASK_RDR400, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ATIK_ATK16, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ATIK_ATK16C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ATIK_ATK16HR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ATIK_ATK16HRC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ATIK_ATK16IC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, BCS_SE923, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, BEAGLEBONE, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, CANDAPTER, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CANUSB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CCSICDU20_0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CCSICDU40_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CCSICDU64_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CCSLOAD_N_GO_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CCSMACHX_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CCSPRIME8_5, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, CFA_631, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, CFA_632, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, CFA_633, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, CFA_634, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, CFA_635, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, CHAMSYS_24_MASTER_WING, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CHAMSYS_MAXI_WING, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CHAMSYS_MEDIA_WING, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CHAMSYS_MIDI_TIMECODE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CHAMSYS_MINI_WING, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CHAMSYS_PC_WING, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CHAMSYS_USB_DMX, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CHAMSYS_WING, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, COM4SM, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, CONVERTER_7, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, CTI_USB_MINI_485, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, CTI_USB_NANO_485, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, DMX4ALL, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, DOMINTELL_DGQG, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, DOMINTELL_DUSB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, DOTEC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ECLO_COM_1WIRE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ECO_PRO_CDS, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, EISCOU, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, ELSTER_UNICOM, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_ALC8500, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_CLI7000, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_CSI8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_EC3000, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_EM1000DL, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_EM1010PC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_FEM, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_FHZ1000PC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_FHZ1300PC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_FM3RX, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_FS20SIG, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_HS485, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_KL100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_MSM1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_PCD200, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_PCK100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_PPS7330, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_RFP500, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_T1100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_TFD128, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_TFM100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_TWS550, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UAD8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UDA7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UDF77, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UIO88, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_ULA200, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UM100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UMS100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UO100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UR100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_USI2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_USR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_UTP8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_WS300PC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_WS444PC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_WS500, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_WS550, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_WS777, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, ELV_WS888, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, EMCU2D, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, EMCU2H, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, FUTURE_0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, FUTURE_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, FUTURE_2, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, GAMMASCOUT, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, GENERIC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E808, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E809, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E80A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E80B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E80C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E80D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E80E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E80F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E88D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E88E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, GUDEADS_E88F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, HD_RADIO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, HO720, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, HO730, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, HO820, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, HO870, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_APP70, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_PCMCIA, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_PEDO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_PICPRO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_PK1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_PROD, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_RS232MON, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IBS_US485, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IPLUS, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IPLUS2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, IRTRANS, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, KBS, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, LENZ_LIUSB, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, LK202, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, LK204, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, LM3S_DEVEL_BOARD, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, LM3S_EVAL_BOARD, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, MASTERDEVEL2, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, MAXSTREAM, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, MHAM_DB9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MHAM_IC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MHAM_KW, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MHAM_RS232, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MHAM_Y6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MHAM_Y8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MHAM_Y9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MHAM_YS, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MICRO_CHAMELEON, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MTXORB_5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, MTXORB_6, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, MX2_3, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, MX4_5, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, NXTCAM, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, OCEANIC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, OOCDLINK, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, OPENDCC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, OPENDCC_GATEWAY, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, OPENDCC_GBM, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, OPENDCC_SNIFFER, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, OPENDCC_THROTTLE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, PCDJ_DAC2, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, PCMSFU, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, PERLE_ULTRAPORT, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, PHI_FISCO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, PIEGROUP, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, PROPOX_JTAGCABLEII, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, R2000KU_TRUE_RNG, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, R2X0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, RELAIS, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, REU_TINY, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, RMP200, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, RM_CANVIEW, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, RRCIRKITS_LOCOBUFFER, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCIENCESCOPE_HS_LOGBOOK, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCIENCESCOPE_LOGBOOKML, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCIENCESCOPE_LS_LOGBOOK, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SCS_DEVICE_7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SDMUSBQSS, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, SEMC_DSS20, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, SERIAL_2232C, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, SERIAL_2232D, UFTDI_TYPE_8U232AM),
@@ -242,20 +438,405 @@
UFTDI_DEV(FTDI, SERIAL_8U100AX, UFTDI_TYPE_SIO),
UFTDI_DEV(FTDI, SERIAL_8U232AM, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, SERIAL_8U232AM4, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, SIGNALYZER_SH2, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, SIGNALYZER_SH4, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, SIGNALYZER_SLITE, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, SIGNALYZER_ST, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(FTDI, SPECIAL_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SPECIAL_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SPECIAL_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SPROG_II, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SR_RADIO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, SUUNTO_SPORTS, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13M, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13S, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13U, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, TAVIR_STK500, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, TERATRONIK_D2XX, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, TERATRONIK_VCP, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, THORLABS, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, TNC_X, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, TTUSB, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, TURTELIZER2, UFTDI_TYPE_8U232AM | UFTDI_FLAG_JTAG),
UFTDI_DEV(FTDI, UOPTBR, UFTDI_TYPE_8U232AM),
UFTDI_DEV(FTDI, USBSERIAL, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, USBX_707, UFTDI_TYPE_AUTO),
UFTDI_DEV(FTDI, USB_UIRT, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(FTDI, USINT_CAT, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, USINT_RS232, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, USINT_WKEY, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, VARDAAN, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, VNHCPCUSB_D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, WESTREX_MODEL_777, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, WESTREX_MODEL_8900F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, XF_547, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, XF_640, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, XF_642, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, XM_RADIO, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(FTDI, YEI_SERVOCENTER31, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(GNOTOMETRICS, USB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, SP1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, OPC_U_UC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP2C1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP2C2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP2D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP2KVR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP2KVT, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP2VR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP2VT, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP4KVR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(ICOM, RP4KVT, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(IDTECH, IDT1221U, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(INTERBIOMETRICS, IOBOARD, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(INTERBIOMETRICS, MINI_IOBOARD, UFTDI_TYPE_AUTO),
UFTDI_DEV(INTREPIDCS, NEOVI, UFTDI_TYPE_8U232AM),
UFTDI_DEV(INTREPIDCS, VALUECAN, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(IONICS, PLUGCOMPUTER, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(JETI, SPC1201, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(KOBIL, CONV_B1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(KOBIL, CONV_KAAN, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(LARSENBRUSGAARD, ALTITRACK, UFTDI_TYPE_AUTO),
UFTDI_DEV(MARVELL, SHEEVAPLUG, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0100, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0101, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0102, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0103, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0104, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0105, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0106, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0107, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0108, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0109, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0110, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0111, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0112, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0113, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0114, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0115, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0116, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0117, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0118, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0119, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0120, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0121, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0122, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0123, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0124, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0125, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0126, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0128, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0129, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0130, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0131, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0132, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0133, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0134, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0135, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0136, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0137, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0138, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0139, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0140, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0141, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0142, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0143, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0144, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0145, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0146, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0147, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0148, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0149, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0150, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0151, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0152, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0159, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0160, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0161, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0162, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0163, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0164, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0165, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0166, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0167, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0168, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0169, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0170, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0171, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0172, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0173, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0174, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0175, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0176, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0177, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0178, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0179, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0180, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0181, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0182, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0183, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0184, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0185, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0186, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0187, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0188, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0189, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0190, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0191, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0192, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0193, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0194, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0195, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0196, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0197, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0198, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0199, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019A, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019D, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019E, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019F, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AA, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AD, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AF, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BA, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BD, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BF, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CA, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CD, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CF, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DA, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DD, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DF, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EA, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01ED, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EF, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F0, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F9, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FA, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FD, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FF, UFTDI_TYPE_AUTO),
UFTDI_DEV(MATRIXORBITAL, MOUA, UFTDI_TYPE_8U232AM),
UFTDI_DEV(MELCO, PCOPRS1, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(METAGEEK, TELLSTICK, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(MOBILITY, USB_SERIAL, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(OLIMEX, ARM_USB_OCD, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(OLIMEX, ARM_USB_OCD_H, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+ UFTDI_DEV(PAPOUCH, AD4USB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, AP485, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, AP485_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, DRAK5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, DRAK6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, GMSR, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, GMUX, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, IRAMP, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, LEC, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, MU, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO10X1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO2X16, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO2X2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO30X3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO3X32, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO4X4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO60X3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, QUIDO8X8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SB232, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SB422, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SB422_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SB485, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SB485C, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SB485S, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SB485_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, SIMUKEY, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, TMU, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(PAPOUCH, UPSUSB, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(POSIFLEX, PP7000, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(QIHARDWARE, JTAGSERIAL, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
UFTDI_DEV(RATOC, REXUSB60F, UFTDI_TYPE_8U232AM),
- UFTDI_DEV(SIIG2, US2308, UFTDI_TYPE_8U232AM)
+ UFTDI_DEV(RTSYSTEMS, CT29B, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(RTSYSTEMS, SERIAL_VX7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2101, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2102, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2103, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2104, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2106, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2201_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2201_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2202_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2202_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2203_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2203_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2401_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2401_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2401_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2401_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2402_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2402_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2402_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2402_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2403_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2403_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2403_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2403_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2801_8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2802_8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_1, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_2, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_3, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_4, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_5, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_6, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_7, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SEALEVEL, 2803_8, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SIIG2, DK201, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(SIIG2, US2308, UFTDI_TYPE_8U232AM),
+ UFTDI_DEV(TESTO, USB_INTERFACE, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(TML, USB_SERIAL, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(TTI, QL355P, UFTDI_TYPE_AUTO),
+ UFTDI_DEV(UNKNOWN4, NF_RIC, UFTDI_TYPE_AUTO),
#undef UFTDI_DEV
};
=20
@@ -314,6 +895,17 @@
sc->sc_type =3D USB_GET_DRIVER_INFO(uaa) & UFTDI_TYPE_MASK;
=20
switch (sc->sc_type) {
+ case UFTDI_TYPE_AUTO:
+ /* simplified type check */
+ if (uaa->info.bcdDevice >=3D 0x0200 ||
+ usbd_get_iface(uaa->device, 1) !=3D NULL) {
+ sc->sc_type =3D UFTDI_TYPE_8U232AM;
+ sc->sc_hdrlen =3D 0;
+ } else {
+ sc->sc_type =3D UFTDI_TYPE_SIO;
+ sc->sc_hdrlen =3D 1;
+ }
+ break;
case UFTDI_TYPE_SIO:
sc->sc_hdrlen =3D 1;
break;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/serial/uftdi_reg.h
--- a/head/sys/dev/usb/serial/uftdi_reg.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/serial/uftdi_reg.h Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
/* $NetBSD: uftdireg.h,v 1.6 2002/07/11 21:14:28 augustss Exp $ */
-/* $FreeBSD: head/sys/dev/usb/serial/uftdi_reg.h 237236 2012-06-18 19:18:3=
1Z marius $ */
+/* $FreeBSD: head/sys/dev/usb/serial/uftdi_reg.h 239055 2012-08-05 11:50:5=
6Z hselasky $ */
=20
/*
* Definitions for the FTDI USB Single Port Serial Converter -
@@ -39,6 +39,7 @@
#define UFTDI_TYPE_MASK 0x000000ff
#define UFTDI_TYPE_SIO 0x00000001
#define UFTDI_TYPE_8U232AM 0x00000002
+#define UFTDI_TYPE_AUTO (UFTDI_TYPE_SIO | UFTDI_TYPE_8U232AM)
#define UFTDI_FLAG_MASK 0x0000ff00
#define UFTDI_FLAG_JTAG 0x00000100
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/serial/uslcom.c
--- a/head/sys/dev/usb/serial/uslcom.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/serial/uslcom.c Fri Aug 10 14:19:25 2012 +0300
@@ -1,7 +1,7 @@
/* $OpenBSD: uslcom.c,v 1.17 2007/11/24 10:52:12 jsg Exp $ */
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uslcom.c 227463 2011-11-12 08:=
40:52Z hselasky $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uslcom.c 239050 2012-08-05 08:=
56:29Z hselasky $");
=20
/*
* Copyright (c) 2006 Jonathan Gray <jsg at openbsd.org>
@@ -60,7 +60,6 @@
=20
#define USLCOM_BULK_BUF_SIZE 1024
#define USLCOM_CONFIG_INDEX 0
-#define USLCOM_IFACE_INDEX 0
=20
#define USLCOM_SET_DATA_BITS(x) ((x) << 8)
=20
@@ -70,12 +69,13 @@
=20
/* Request codes */
#define USLCOM_UART 0x00
-#define USLCOM_BAUD_RATE 0x01=09
+#define USLCOM_SET_BAUD_DIV 0x01=09
#define USLCOM_DATA 0x03
#define USLCOM_BREAK 0x05
#define USLCOM_CTRL 0x07
#define USLCOM_RCTRL 0x08
#define USLCOM_SET_FLOWCTRL 0x13
+#define USLCOM_SET_BAUD_RATE 0x1e=09
#define USLCOM_VENDOR_SPECIFIC 0xff
=20
/* USLCOM_UART values */
@@ -92,8 +92,8 @@
#define USLCOM_CTRL_RI 0x0040
#define USLCOM_CTRL_DCD 0x0080
=20
-/* USLCOM_BAUD_RATE values */
-#define USLCOM_BAUD_REF 0x384000
+/* USLCOM_SET_BAUD_DIV values */
+#define USLCOM_BAUD_REF 3686400 /* 3.6864 MHz */
=20
/* USLCOM_DATA values */
#define USLCOM_STOP_BITS_1 0x00
@@ -102,8 +102,6 @@
#define USLCOM_PARITY_ODD 0x10
#define USLCOM_PARITY_EVEN 0x20
=20
-#define USLCOM_PORT_NO 0x0000
-
/* USLCOM_BREAK values */
#define USLCOM_BREAK_OFF 0x00
#define USLCOM_BREAK_ON 0x01
@@ -137,6 +135,7 @@
=20
uint8_t sc_msr;
uint8_t sc_lsr;
+ uint8_t sc_iface_no;
};
=20
static device_probe_t uslcom_probe;
@@ -213,7 +212,13 @@
static const STRUCT_USB_HOST_ID uslcom_devs[] =3D {
#define USLCOM_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
USLCOM_DEV(BALTECH, CARDREADER),
+ USLCOM_DEV(CLIPSAL, 5000CT2),
+ USLCOM_DEV(CLIPSAL, 5500PACA),
USLCOM_DEV(CLIPSAL, 5500PCU),
+ USLCOM_DEV(CLIPSAL, 560884),
+ USLCOM_DEV(CLIPSAL, 5800PC),
+ USLCOM_DEV(CLIPSAL, C5000CT2),
+ USLCOM_DEV(CLIPSAL, L51xx),
USLCOM_DEV(DATAAPEX, MULTICOM),
USLCOM_DEV(DELL, DW700),
USLCOM_DEV(DIGIANSWER, ZIGBEE802154),
@@ -221,17 +226,27 @@
USLCOM_DEV(DYNASTREAM, ANTDEVBOARD2),
USLCOM_DEV(DYNASTREAM, ANT2USB),
USLCOM_DEV(ELV, USBI2C),
+ USLCOM_DEV(FESTO, CMSP),
+ USLCOM_DEV(FESTO, CPX_USB),
USLCOM_DEV(FOXCONN, PIRELLI_DP_L10),
USLCOM_DEV(FOXCONN, TCOM_TC_300),
USLCOM_DEV(GEMALTO, PROXPU),
USLCOM_DEV(JABLOTRON, PC60B),
+ USLCOM_DEV(KAMSTRUP, OPTICALEYE),
+ USLCOM_DEV(KAMSTRUP, MBUS_250D),
+ USLCOM_DEV(LINKINSTRUMENTS, MSO19),
+ USLCOM_DEV(LINKINSTRUMENTS, MSO28),
+ USLCOM_DEV(LINKINSTRUMENTS, MSO28_2),
USLCOM_DEV(MEI, CASHFLOW_SC),
USLCOM_DEV(MEI, S2000),
- USLCOM_DEV(JABLOTRON, PC60B),
USLCOM_DEV(OWEN, AC4),
USLCOM_DEV(PHILIPS, ACE1001),
USLCOM_DEV(PLX, CA42),
USLCOM_DEV(RENESAS, RX610),
+ USLCOM_DEV(SILABS, AC_SERV_CAN),
+ USLCOM_DEV(SILABS, AC_SERV_CIS),
+ USLCOM_DEV(SILABS, AC_SERV_IBUS),
+ USLCOM_DEV(SILABS, AC_SERV_OBD),
USLCOM_DEV(SILABS, AEROCOMM),
USLCOM_DEV(SILABS, AMBER_AMB2560),
USLCOM_DEV(SILABS, ARGUSISP),
@@ -247,16 +262,21 @@
USLCOM_DEV(SILABS, C2_EDGE_MODEM),
USLCOM_DEV(SILABS, CP2102),
USLCOM_DEV(SILABS, CP210X_2),
+ USLCOM_DEV(SILABS, CP210X_3),
+ USLCOM_DEV(SILABS, CP210X_4),
USLCOM_DEV(SILABS, CRUMB128),
USLCOM_DEV(SILABS, CYGNAL),
USLCOM_DEV(SILABS, CYGNAL_DEBUG),
USLCOM_DEV(SILABS, CYGNAL_GPS),
USLCOM_DEV(SILABS, DEGREE),
+ USLCOM_DEV(SILABS, DEKTEK_DTAPLUS),
USLCOM_DEV(SILABS, EMS_C1007),
+ USLCOM_DEV(SILABS, HAMLINKUSB),
USLCOM_DEV(SILABS, HELICOM),
USLCOM_DEV(SILABS, IMS_USB_RS422),
USLCOM_DEV(SILABS, INFINITY_MIC),
USLCOM_DEV(SILABS, INSYS_MODEM),
+ USLCOM_DEV(SILABS, IRZ_SG10),
USLCOM_DEV(SILABS, KYOCERA_GPS),
USLCOM_DEV(SILABS, LIPOWSKY_HARP),
USLCOM_DEV(SILABS, LIPOWSKY_JTAG),
@@ -264,12 +284,14 @@
USLCOM_DEV(SILABS, MC35PU),
USLCOM_DEV(SILABS, MJS_TOSLINK),
USLCOM_DEV(SILABS, MSD_DASHHAWK),
+ USLCOM_DEV(SILABS, MULTIPLEX_RC),
+ USLCOM_DEV(SILABS, OPTRIS_MSPRO),
USLCOM_DEV(SILABS, POLOLU),
USLCOM_DEV(SILABS, PROCYON_AVS),
USLCOM_DEV(SILABS, SB_PARAMOUNT_ME),
USLCOM_DEV(SILABS, SUUNTO),
USLCOM_DEV(SILABS, TAMSMASTER),
- USLCOM_DEV(SILABS, TELEGESYS_ETRX2),
+ USLCOM_DEV(SILABS, TELEGESIS_ETRX2),
USLCOM_DEV(SILABS, TRACIENT),
USLCOM_DEV(SILABS, TRAQMATE),
USLCOM_DEV(SILABS, USBCOUNT50),
@@ -343,9 +365,6 @@
if (uaa->info.bConfigIndex !=3D USLCOM_CONFIG_INDEX) {
return (ENXIO);
}
- if (uaa->info.bIfaceIndex !=3D USLCOM_IFACE_INDEX) {
- return (ENXIO);
- }
return (usbd_lookup_id_by_uaa(uslcom_devs, sizeof(uslcom_devs), uaa));
}
=20
@@ -363,6 +382,8 @@
usb_callout_init_mtx(&sc->sc_watchdog, &sc->sc_mtx, 0);
=20
sc->sc_udev =3D uaa->device;
+ /* use the interface number from the USB interface descriptor */
+ sc->sc_iface_no =3D uaa->info.bIfaceNum;
=20
error =3D usbd_transfer_setup(uaa->device,
&uaa->info.bIfaceIndex, sc->sc_xfer, uslcom_config,
@@ -417,7 +438,7 @@
req.bmRequestType =3D USLCOM_WRITE;
req.bRequest =3D USLCOM_UART;
USETW(req.wValue, USLCOM_UART_ENABLE);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, 0);
=20
if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -441,7 +462,7 @@
req.bmRequestType =3D USLCOM_WRITE;
req.bRequest =3D USLCOM_UART;
USETW(req.wValue, USLCOM_UART_DISABLE);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, 0);
=20
if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -465,7 +486,7 @@
req.bmRequestType =3D USLCOM_WRITE;
req.bRequest =3D USLCOM_CTRL;
USETW(req.wValue, ctl);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, 0);
=20
if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -489,7 +510,7 @@
req.bmRequestType =3D USLCOM_WRITE;
req.bRequest =3D USLCOM_CTRL;
USETW(req.wValue, ctl);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, 0);
=20
if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -511,19 +532,20 @@
{
struct uslcom_softc *sc =3D ucom->sc_parent;
struct usb_device_request req;
- uint32_t flowctrl[4];
+ uint32_t baudrate, flowctrl[4];
uint16_t data;
=20
DPRINTF("\n");
=20
+ baudrate =3D t->c_ospeed;
req.bmRequestType =3D USLCOM_WRITE;
- req.bRequest =3D USLCOM_BAUD_RATE;
- USETW(req.wValue, USLCOM_BAUD_REF / t->c_ospeed);
- USETW(req.wIndex, USLCOM_PORT_NO);
- USETW(req.wLength, 0);
+ req.bRequest =3D USLCOM_SET_BAUD_RATE;
+ USETW(req.wValue, 0);
+ USETW(req.wIndex, sc->sc_iface_no);
+ USETW(req.wLength, sizeof(baudrate));
=20
- if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
- &req, NULL, 0, 1000)) {
+ if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
+ &req, &baudrate, 0, 1000)) {
DPRINTF("Set baudrate failed (ignored)\n");
}
=20
@@ -556,7 +578,7 @@
req.bmRequestType =3D USLCOM_WRITE;
req.bRequest =3D USLCOM_DATA;
USETW(req.wValue, data);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, 0);
=20
if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -578,7 +600,7 @@
req.bmRequestType =3D USLCOM_WRITE;
req.bRequest =3D USLCOM_SET_FLOWCTRL;
USETW(req.wValue, 0);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, sizeof(flowctrl));
=20
if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -608,7 +630,7 @@
req.bmRequestType =3D USLCOM_WRITE;
req.bRequest =3D USLCOM_BREAK;
USETW(req.wValue, brk);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, 0);
=20
if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -762,7 +784,7 @@
req.bmRequestType =3D USLCOM_READ;
req.bRequest =3D USLCOM_RCTRL;
USETW(req.wValue, 0);
- USETW(req.wIndex, USLCOM_PORT_NO);
+ USETW(req.wIndex, sc->sc_iface_no);
USETW(req.wLength, sizeof(buf));
=20
usbd_xfer_set_frames(xfer, 2);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/usbdevs
--- a/head/sys/dev/usb/usbdevs Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/usbdevs Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-$FreeBSD: head/sys/dev/usb/usbdevs 238766 2012-07-25 11:33:43Z gavin $
+$FreeBSD: head/sys/dev/usb/usbdevs 239055 2012-08-05 11:50:56Z hselasky $
/* $NetBSD: usbdevs,v 1.392 2004/12/29 08:38:44 imp Exp $ */
=20
/*-
@@ -322,6 +322,7 @@
vendor GUNZE 0x0637 Gunze Electronics USA
vendor AVISION 0x0638 Avision
vendor TEAC 0x0644 TEAC
+vendor ACTON 0x0647 Acton Research Corp.
vendor SGI 0x065e Silicon Graphics
vendor SANWASUPPLY 0x0663 Sanwa Supply
vendor MEGATEC 0x0665 Megatec
@@ -346,6 +347,7 @@
vendor ASIAMD 0x06be Asia Microelectronic Development
vendor BIZLINK 0x06c4 Bizlink International
vendor KEYSPAN 0x06cd Keyspan / InnoSys Inc.
+vendor CONTEC 0x06ce Contec products
vendor AASHIMA 0x06d6 Aashima Technology
vendor LIEBERT 0x06da Liebert
vendor MULTITECH 0x06e0 MultiTech
@@ -488,7 +490,8 @@
vendor MEDELI 0x0a67 Medeli
vendor GEOCAST 0x0a79 Geocast Network Systems
vendor EGO 0x0a92 EGO systems
-vendor IDQUANTIQUE 0x0aba id Quantique
+vendor IDQUANTIQUE 0x0aba ID Quantique
+vendor IDTECH 0x0acd ID TECH
vendor ZYDAS 0x0ace Zydas Technology Corporation
vendor NEODIO 0x0aec Neodio
vendor OPTION 0x0af0 Option N.V.
@@ -515,14 +518,20 @@
vendor FSC 0x0bf8 Fujitsu Siemens Computers
vendor AGATE 0x0c08 Agate Technologies
vendor DMI 0x0c0b DMI
+vendor ICOM 0x0c26 Icom Inc.
+vendor GNOTOMETRICS 0x0c33 GN Otometrics
vendor CHICONY2 0x0c45 Chicony
vendor REINERSCT 0x0c4b Reiner-SCT
vendor SEALEVEL 0x0c52 Sealevel System
+vendor JETI 0x0c6c Jeti
vendor LUWEN 0x0c76 Luwen
+vendor ELEKTOR 0x0c7d ELEKTOR Electronics
vendor KYOCERA2 0x0c88 Kyocera Wireless Corp.
vendor ZCOM 0x0cde Z-Com
vendor ATHEROS2 0x0cf3 Atheros Communications
+vendor POSIFLEX 0x0d3a POSIFLEX
vendor TANGTOP 0x0d3d Tangtop
+vendor KOBIL 0x0d46 KOBIL
vendor SMC3 0x0d5c Standard Microsystems
vendor ADDON 0x0d7d Add-on Technology
vendor ACDC 0x0d7e American Computer & Digital Components
@@ -531,6 +540,7 @@
vendor SKANHEX 0x0d96 Skanhex Technology, Inc.
vendor MSI 0x0db0 Micro Star International
vendor ELCON 0x0db7 ELCON Systemtechnik
+vendor UNKNOWN4 0x0dcd Unknown vendor
vendor NETAC 0x0dd8 Netac
vendor SITECOMEU 0x0df6 Sitecom Europe
vendor MOBILEACTION 0x0df7 Mobile Action
@@ -554,6 +564,7 @@
vendor FALCOM 0x0f94 Falcom Wireless Communications GmbH
vendor RIM 0x0fca Research In Motion
vendor DYNASTREAM 0x0fcf Dynastream Innovations
+vendor LARSENBRUSGAARD 0x0fd8 Larsen and Brusgaard
vendor KONTRON 0x0fe6 Kontron AG
vendor QUALCOMM 0x1004 Qualcomm
vendor APACER 0x1005 Apacer
@@ -561,6 +572,7 @@
vendor AIRPLUS 0x1011 Airplus
vendor DESKNOTE 0x1019 Desknote
vendor NEC3 0x1033 NEC
+vendor TTI 0x103e Thurlby Thandar Instruments
vendor GIGABYTE 0x1044 GIGABYTE
vendor WESTERN 0x1058 Western Digital
vendor MOTOROLA 0x1063 Motorola
@@ -589,12 +601,14 @@
vendor SIEMENS3 0x11f5 Siemens
vendor NETINDEX 0x11f6 NetIndex
vendor ALCATEL 0x11f7 Alcatel
+vendor INTERBIOMETRICS 0x1209 Interbiometrics
vendor UNKNOWN3 0x1233 Unknown vendor
vendor TSUNAMI 0x1241 Tsunami
vendor PHEENET 0x124a Pheenet
vendor TARGUS 0x1267 Targus
vendor TWINMOS 0x126f TwinMOS
vendor TENDA 0x1286 Tenda
+vendor TESTO 0x128d Testo products
vendor CREATIVE2 0x1292 Creative Labs
vendor BELKIN2 0x1293 Belkin Components
vendor CYBERTAN 0x129b CyberTAN Technology
@@ -616,6 +630,7 @@
vendor REDOCTANE 0x1430 RedOctane
vendor WISTRONNEWEB 0x1435 Wistron NeWeb
vendor RADIOSHACK 0x1453 Radio Shack
+vendor FIC 0x1457 FIC / OpenMoko
vendor HUAWEI3COM 0x1472 Huawei-3Com
vendor ABOCOM2 0x1482 AboCom Systems
vendor SILICOM 0x1485 Silicom
@@ -634,6 +649,7 @@
vendor UMEDIA 0x157e U-MEDIA Communications
vendor FIBERLINE 0x1582 Fiberline
vendor SPARKLAN 0x15a9 SparkLAN
+vendor OLIMEX 0x15ba Olimex
vendor SOUNDGRAPH 0x15c2 Soundgraph, Inc.
vendor AMIT2 0x15c5 AMIT
vendor TEXTECH 0x15ca Textech International Ltd.
@@ -659,6 +675,7 @@
vendor ASUS2 0x1761 ASUS
vendor SWEEX2 0x177f Sweex
vendor METAGEEK 0x1781 MetaGeek
+vendor KAMSTRUP 0x17a8 Kamstrup A/S
vendor WAVESENSE 0x17f4 WaveSense
vendor VAISALA 0x1843 Vaisala
vendor AMIT 0x18c5 AMIT
@@ -667,13 +684,18 @@
vendor ELV 0x18ef ELV
vendor LINKSYS3 0x1915 Linksys
vendor QUALCOMMINC 0x19d2 Qualcomm, Incorporated
+vendor BAYER 0x1a79 Bayer
vendor WCH2 0x1a86 QinHeng Electronics
vendor STELERA 0x1a8d Stelera Wireless
vendor MATRIXORBITAL 0x1b3d Matrix Orbital
vendor OVISLINK 0x1b75 OvisLink
+vendor TML 0x1b91 The Mobility Lab
vendor TCTMOBILE 0x1bbb TCT Mobile
+vendor ALTI2 0x1bc9 Alti-2 products
+vendor SUNPLUS 0x1bcf Sunplus Innovation Technology Inc.
vendor WAGO 0x1be3 WAGO Kontakttechnik GmbH.
vendor TELIT 0x1bc7 Telit
+vendor IONICS 0x1c0c Ionics PlugComputer
vendor LONGCHEER 0x1c9e Longcheer Holdings, Ltd.
vendor MPMAN 0x1cae MpMan
vendor DRESDENELEKTRONIK 0x1cf1 dresden elektronik
@@ -683,22 +705,27 @@
vendor METAGEEK2 0x1dd5 MetaGeek
vendor ALINK 0x1e0e Alink
vendor AIRTIES 0x1eda AirTies
+vendor FESTO 0x1e29 Festo
vendor VERTEX 0x1fe7 Vertex Wireless Co., Ltd.
vendor DLINK 0x2001 D-Link
vendor PLANEX2 0x2019 Planex Communications
vendor HAUPPAUGE2 0x2040 Hauppauge Computer Works
vendor TLAYTECH 0x20b9 Tlay Tech
vendor ENCORE 0x203d Encore
+vendor QIHARDWARE 0x20b7 QI-hardware
vendor PARA 0x20b8 PARA Industrial
vendor SIMTEC 0x20df Simtec Electronics
+vendor RTSYSTEMS 0x2100 RTSYSTEMS
vendor VIALABS 0x2109 VIA Labs
vendor ERICSSON 0x2282 Ericsson
vendor MOTOROLA2 0x22b8 Motorola
+vendor WETELECOM 0x22de WeTelecom Incorporated
vendor TRIPPLITE 0x2478 Tripp-Lite
vendor HIROSE 0x2631 Hirose Electric
vendor NHJ 0x2770 NHJ
vendor PLANEX 0x2c02 Planex Communications
vendor VIDZMEDIA 0x3275 VidzMedia Pte Ltd
+vendor LINKINSTRUMENTS 0x3195 Link Instruments Inc.
vendor AEI 0x3334 AEI
vendor HANK 0x3353 Hank Connection
vendor PQI 0x3538 PQI
@@ -710,6 +737,7 @@
vendor DELL 0x413c Dell
vendor WCH 0x4348 QinHeng Electronics
vendor ACEECA 0x4766 Aceeca
+vendor PAPOUCH 0x5050 Papouch products
vendor AVERATEC 0x50c2 Averatec
vendor SWEEX 0x5173 Sweex
vendor PROLIFIC2 0x5372 Prolific Technologies
@@ -726,6 +754,7 @@
vendor MOSCHIP 0x9710 MosChip Semiconductor
vendor MARVELL 0x9e88 Marvell Technology Group Ltd.
vendor 3COM3 0xa727 3Com
+vendor EVOLUTION 0xdeee Evolution Robotics products
vendor DATAAPEX 0xdaae DataApex
vendor HP2 0xf003 Hewlett Packard
vendor LOGILINK 0xfc08 LogiLink
@@ -782,6 +811,9 @@
product ABOCOM RT2573_4 0xb21e RT2573
product ABOCOM WUG2700 0xb21f WUG2700
=20
+/* Acton Research Corp. */
+product ACTON SPECTRAPRO 0x0100 FTDI compatible adapter
+
/* Accton products */
product ACCTON USB320_EC 0x1046 USB320-EC Ethernet Adapter
product ACCTON 2664W 0x3501 2664W
@@ -945,6 +977,9 @@
product ALTEC ADA70 0x0070 ADA70 Speakers
product ALTEC ASC495 0xff05 ASC495 Speakers
=20
+/* Alti-2 products */
+product ALTI2 N3 0x6001 FTDI compatible adapter
+
/* Allied Telesyn International products */
product ALLIEDTELESYN ATUSB100 0xb100 AT-USB100
=20
@@ -991,6 +1026,10 @@
/* AMIT(2) products */
product AMIT2 RT2870 0x0008 RT2870
=20
+/* Analog Devices products */
+product ANALOGDEVICES GNICE 0xf000 FTDI compatible adapter
+product ANALOGDEVICES GNICEPLUS 0xf001 FTDI compatible adapter
+
/* Anchor products */
product ANCHOR SERIAL 0x2008 Serial
product ANCHOR EZUSB 0x2131 EZUSB
@@ -1125,8 +1164,27 @@
/* Baltech products */
product BALTECH CARDREADER 0x9999 Card reader
=20
+/* Bayer products */
+product BAYER CONTOUR_CABLE 0x6001 FTDI compatible adapter
+
/* B&B Electronics products */
product BBELECTRONICS USOTL4 0xAC01 RS-422/485
+product BBELECTRONICS 232USB9M 0xac27 FTDI compatible adapter
+product BBELECTRONICS 485USB9F_2W 0xac25 FTDI compatible adapter
+product BBELECTRONICS 485USB9F_4W 0xac26 FTDI compatible adapter
+product BBELECTRONICS 485USBTB_2W 0xac33 FTDI compatible adapter
+product BBELECTRONICS 485USBTB_4W 0xac34 FTDI compatible adapter
+product BBELECTRONICS TTL3USB9M 0xac50 FTDI compatible adapter
+product BBELECTRONICS TTL5USB9M 0xac49 FTDI compatible adapter
+product BBELECTRONICS USO9ML2 0xac03 FTDI compatible adapter
+product BBELECTRONICS USO9ML2DR 0xac17 FTDI compatible adapter
+product BBELECTRONICS USO9ML2DR_2 0xac16 FTDI compatible adapter
+product BBELECTRONICS USOPTL4 0xac11 FTDI compatible adapter
+product BBELECTRONICS USOPTL4DR 0xac19 FTDI compatible adapter
+product BBELECTRONICS USOPTL4DR2 0xac18 FTDI compatible adapter
+product BBELECTRONICS USPTL4 0xac12 FTDI compatible adapter
+product BBELECTRONICS USTL4 0xac02 FTDI compatible adapter
+product BBELECTRONICS ZZ_PROG1_USB 0xba02 FTDI compatible adapter
=20
/* Belkin products */
/*product BELKIN F5U111 0x???? F5U111 Ethernet*/
@@ -1245,7 +1303,13 @@
product CISCOLINKSYS3 RT3070 0x0101 RT3070
=20
/* Clipsal products */
-product CLIPSAL 5500PCU 0x0303 5500PCU C-Bus
+product CLIPSAL 560884 0x0101 560884 C-Bus Audio Matrix Switch
+product CLIPSAL 5500PACA 0x0201 5500PACA C-Bus Pascal Automation Controller
+product CLIPSAL 5800PC 0x0301 5800PC C-Bus Wireless Interface
+product CLIPSAL 5500PCU 0x0303 5500PCU C-Bus Interface
+product CLIPSAL 5000CT2 0x0304 5000CT2 C-Bus Touch Screen
+product CLIPSAL C5000CT2 0x0305 C5000CT2 C-Bus Touch Screen
+product CLIPSAL L51xx 0x0401 L51xx C-Bus Dimmer
=20
/* CMOTECH products */
product CMOTECH CNU510 0x5141 CDMA Technologies USB modem
@@ -1287,6 +1351,9 @@
/* Connectix products */
product CONNECTIX QUICKCAM 0x0001 QuickCam
=20
+/* Conect products */
+product CONTEC COM1USBH 0x8311 FTDI compatible adapter
+
/* Corega products */
product COREGA ETHER_USB_T 0x0001 Ether USB-T
product COREGA FETHER_USB_TX 0x0004 FEther USB-TX
@@ -1504,6 +1571,9 @@
product ELECOM UCSGT0 0x5004 UC-SGT
product ELECOM LDUSBTX3 0xabc1 LD-USB/TX
=20
+/* Elektor products */
+product ELEKTOR FT323R 0x0005 FTDI compatible adapter
+
/* Elsa products */
product ELSA MODEM1 0x2265 ELSA Modem Board
product ELSA USB2ETHERNET 0x3000 Microlink USB2Ethernet
@@ -1581,20 +1651,33 @@
/* e-TEK Labs products */
product ETEK 1COM 0x8007 Serial
=20
+/* Evolution products */
+product EVOLUTION ER1 0x0300 FTDI compatible adapter
+product EVOLUTION HYBRID 0x0302 FTDI compatible adapter
+product EVOLUTION RCM4 0x0303 FTDI compatible adapter
+
/* Extended Systems products */
product EXTENDED XTNDACCESS 0x0100 XTNDAccess IrDA
=20
/* Falcom products */
product FALCOM TWIST 0x0001 USB GSM/GPRS Modem
+product FALCOM SAMBA 0x0005 FTDI compatible adapter
=20
/* FEIYA products */
product FEIYA DUMMY 0x0000 Dummy product
product FEIYA 5IN1 0x1132 5-in-1 Card Reader
product FEIYA AC110 0x6300 AC-110 Card Reader
=20
+/* Festo */
+product FESTO CPX_USB 0x0102 CPX-USB
+product FESTO CMSP 0x0501 CMSP
+
/* Fiberline */
product FIBERLINE WL430U 0x6003 WL-430U
=20
+/* FIC / OpenMoko */
+product FIC NEO1973_DEBUG 0x5118 FTDI compatible adapter
+
/* Fossil, Inc products */
product FOSSIL WRISTPDA 0x0002 Wrist PDA
=20
@@ -1614,6 +1697,7 @@
product FTDI SERIAL_8U232AM 0x6001 8U232AM Serial
product FTDI SERIAL_8U232AM4 0x6004 8U232AM Serial
product FTDI SERIAL_2232C 0x6010 FT2232C Dual port Serial
+product FTDI 232H 0x6014 FTDI compatible adapter
product FTDI SERIAL_2232D 0x9e90 FT2232D Dual port Serial
product FTDI SERIAL_4232H 0x6011 FT4232H Quad port Serial
product FTDI BEAGLEBONE 0xa6d0 BeagleBone
@@ -1645,6 +1729,204 @@
/* Commerzielle und Technische Informationssysteme GmbH products */
product FTDI CTI_USB_NANO_485 0xf60b CTI USB-Nano 485
product FTDI CTI_USB_MINI_485 0xf608 CTI USB-Mini 485
+/* Other products */
+product FTDI 232RL 0xfbfa FTDI compatible adapter
+product FTDI 4N_GALAXY_DE_1 0xf3c0 FTDI compatible adapter
+product FTDI 4N_GALAXY_DE_2 0xf3c1 FTDI compatible adapter
+product FTDI 4N_GALAXY_DE_3 0xf3c2 FTDI compatible adapter
+product FTDI 8U232AM_ALT 0x6006 FTDI compatible adapter
+product FTDI ACCESSO 0xfad0 FTDI compatible adapter
+product FTDI ACG_HFDUAL 0xdd20 FTDI compatible adapter
+product FTDI ACTIVE_ROBOTS 0xe548 FTDI compatible adapter
+product FTDI ACTZWAVE 0xf2d0 FTDI compatible adapter
+product FTDI AMC232 0xff00 FTDI compatible adapter
+product FTDI ARTEMIS 0xdf28 FTDI compatible adapter
+product FTDI ASK_RDR400 0xc991 FTDI compatible adapter
+product FTDI ATIK_ATK16 0xdf30 FTDI compatible adapter
+product FTDI ATIK_ATK16C 0xdf32 FTDI compatible adapter
+product FTDI ATIK_ATK16HR 0xdf31 FTDI compatible adapter
+product FTDI ATIK_ATK16HRC 0xdf33 FTDI compatible adapter
+product FTDI ATIK_ATK16IC 0xdf35 FTDI compatible adapter
+product FTDI BCS_SE923 0xfb99 FTDI compatible adapter
+product FTDI CANDAPTER 0x9f80 FTDI compatible adapter
+product FTDI CANUSB 0xffa8 FTDI compatible adapter
+product FTDI CCSICDU20_0 0xf9d0 FTDI compatible adapter
+product FTDI CCSICDU40_1 0xf9d1 FTDI compatible adapter
+product FTDI CCSICDU64_4 0xf9d4 FTDI compatible adapter
+product FTDI CCSLOAD_N_GO_3 0xf9d3 FTDI compatible adapter
+product FTDI CCSMACHX_2 0xf9d2 FTDI compatible adapter
+product FTDI CCSPRIME8_5 0xf9d5 FTDI compatible adapter
+product FTDI CHAMSYS_24_MASTER_WING 0xdaf8 FTDI compatible adapter
+product FTDI CHAMSYS_MAXI_WING 0xdafd FTDI compatible adapter
+product FTDI CHAMSYS_MEDIA_WING 0xdafe FTDI compatible adapter
+product FTDI CHAMSYS_MIDI_TIMECODE 0xdafb FTDI compatible adapter
+product FTDI CHAMSYS_MINI_WING 0xdafc FTDI compatible adapter
+product FTDI CHAMSYS_PC_WING 0xdaf9 FTDI compatible adapter
+product FTDI CHAMSYS_USB_DMX 0xdafa FTDI compatible adapter
+product FTDI CHAMSYS_WING 0xdaff FTDI compatible adapter
+product FTDI COM4SM 0xd578 FTDI compatible adapter
+product FTDI CONVERTER_0 0xd388 FTDI compatible adapter
+product FTDI CONVERTER_1 0xd389 FTDI compatible adapter
+product FTDI CONVERTER_2 0xd38a FTDI compatible adapter
+product FTDI CONVERTER_3 0xd38b FTDI compatible adapter
+product FTDI CONVERTER_4 0xd38c FTDI compatible adapter
+product FTDI CONVERTER_5 0xd38d FTDI compatible adapter
+product FTDI CONVERTER_6 0xd38e FTDI compatible adapter
+product FTDI CONVERTER_7 0xd38f FTDI compatible adapter
+product FTDI DMX4ALL 0xc850 FTDI compatible adapter
+product FTDI DOMINTELL_DGQG 0xef50 FTDI compatible adapter
+product FTDI DOMINTELL_DUSB 0xef51 FTDI compatible adapter
+product FTDI DOTEC 0x9868 FTDI compatible adapter
+product FTDI ECLO_COM_1WIRE 0xea90 FTDI compatible adapter
+product FTDI ECO_PRO_CDS 0xe520 FTDI compatible adapter
+product FTDI ELSTER_UNICOM 0xe700 FTDI compatible adapter
+product FTDI ELV_ALC8500 0xf06e FTDI compatible adapter
+product FTDI ELV_CLI7000 0xfb59 FTDI compatible adapter
+product FTDI ELV_CSI8 0xe0f0 FTDI compatible adapter
+product FTDI ELV_EC3000 0xe006 FTDI compatible adapter
+product FTDI ELV_EM1000DL 0xe0f1 FTDI compatible adapter
+product FTDI ELV_EM1010PC 0xe0ef FTDI compatible adapter
+product FTDI ELV_FEM 0xe00a FTDI compatible adapter
+product FTDI ELV_FHZ1000PC 0xf06f FTDI compatible adapter
+product FTDI ELV_FHZ1300PC 0xe0e8 FTDI compatible adapter
+product FTDI ELV_FM3RX 0xe0ed FTDI compatible adapter
+product FTDI ELV_FS20SIG 0xe0f4 FTDI compatible adapter
+product FTDI ELV_HS485 0xe0ea FTDI compatible adapter
+product FTDI ELV_KL100 0xe002 FTDI compatible adapter
+product FTDI ELV_MSM1 0xe001 FTDI compatible adapter
+product FTDI ELV_PCD200 0xf06c FTDI compatible adapter
+product FTDI ELV_PCK100 0xe0f2 FTDI compatible adapter
+product FTDI ELV_PPS7330 0xfb5c FTDI compatible adapter
+product FTDI ELV_RFP500 0xe0f3 FTDI compatible adapter
+product FTDI ELV_T1100 0xf06b FTDI compatible adapter
+product FTDI ELV_TFD128 0xe0ec FTDI compatible adapter
+product FTDI ELV_TFM100 0xfb5d FTDI compatible adapter
+product FTDI ELV_TWS550 0xe009 FTDI compatible adapter
+product FTDI ELV_UAD8 0xf068 FTDI compatible adapter
+product FTDI ELV_UDA7 0xf069 FTDI compatible adapter
+product FTDI ELV_UDF77 0xfb5e FTDI compatible adapter
+product FTDI ELV_UIO88 0xfb5f FTDI compatible adapter
+product FTDI ELV_ULA200 0xf06d FTDI compatible adapter
+product FTDI ELV_UM100 0xfb5a FTDI compatible adapter
+product FTDI ELV_UMS100 0xe0eb FTDI compatible adapter
+product FTDI ELV_UO100 0xfb5b FTDI compatible adapter
+product FTDI ELV_UR100 0xfb58 FTDI compatible adapter
+product FTDI ELV_USI2 0xf06a FTDI compatible adapter
+product FTDI ELV_USR 0xe000 FTDI compatible adapter
+product FTDI ELV_UTP8 0xe0f5 FTDI compatible adapter
+product FTDI ELV_WS300PC 0xe0f6 FTDI compatible adapter
+product FTDI ELV_WS444PC 0xe0f7 FTDI compatible adapter
+product FTDI ELV_WS500 0xe0e9 FTDI compatible adapter
+product FTDI ELV_WS550 0xe004 FTDI compatible adapter
+product FTDI ELV_WS777 0xe0ee FTDI compatible adapter
+product FTDI ELV_WS888 0xe008 FTDI compatible adapter
+product FTDI FUTURE_0 0xf44a FTDI compatible adapter
+product FTDI FUTURE_1 0xf44b FTDI compatible adapter
+product FTDI FUTURE_2 0xf44c FTDI compatible adapter
+product FTDI GENERIC 0x9378 FTDI compatible adapter
+product FTDI GUDEADS_E808 0xe808 FTDI compatible adapter
+product FTDI GUDEADS_E809 0xe809 FTDI compatible adapter
+product FTDI GUDEADS_E80A 0xe80a FTDI compatible adapter
+product FTDI GUDEADS_E80B 0xe80b FTDI compatible adapter
+product FTDI GUDEADS_E80C 0xe80c FTDI compatible adapter
+product FTDI GUDEADS_E80D 0xe80d FTDI compatible adapter
+product FTDI GUDEADS_E80E 0xe80e FTDI compatible adapter
+product FTDI GUDEADS_E80F 0xe80f FTDI compatible adapter
+product FTDI GUDEADS_E88D 0xe88d FTDI compatible adapter
+product FTDI GUDEADS_E88E 0xe88e FTDI compatible adapter
+product FTDI GUDEADS_E88F 0xe88f FTDI compatible adapter
+product FTDI HD_RADIO 0x937c FTDI compatible adapter
+product FTDI HO720 0xed72 FTDI compatible adapter
+product FTDI HO730 0xed73 FTDI compatible adapter
+product FTDI HO820 0xed74 FTDI compatible adapter
+product FTDI HO870 0xed71 FTDI compatible adapter
+product FTDI IBS_APP70 0xff3d FTDI compatible adapter
+product FTDI IBS_PCMCIA 0xff3a FTDI compatible adapter
+product FTDI IBS_PEDO 0xff3e FTDI compatible adapter
+product FTDI IBS_PICPRO 0xff39 FTDI compatible adapter
+product FTDI IBS_PK1 0xff3b FTDI compatible adapter
+product FTDI IBS_PROD 0xff3f FTDI compatible adapter
+product FTDI IBS_RS232MON 0xff3c FTDI compatible adapter
+product FTDI IBS_US485 0xff38 FTDI compatible adapter
+product FTDI IPLUS 0xd070 FTDI compatible adapter
+product FTDI IPLUS2 0xd071 FTDI compatible adapter
+product FTDI IRTRANS 0xfc60 FTDI compatible adapter
+product FTDI LENZ_LIUSB 0xd780 FTDI compatible adapter
+product FTDI LM3S_DEVEL_BOARD 0xbcd8 FTDI compatible adapter
+product FTDI LM3S_EVAL_BOARD 0xbcd9 FTDI compatible adapter
+product FTDI MASTERDEVEL2 0xf449 FTDI compatible adapter
+product FTDI MHAM_DB9 0xeeed FTDI compatible adapter
+product FTDI MHAM_IC 0xeeec FTDI compatible adapter
+product FTDI MHAM_KW 0xeee8 FTDI compatible adapter
+product FTDI MHAM_RS232 0xeeee FTDI compatible adapter
+product FTDI MHAM_Y6 0xeeea FTDI compatible adapter
+product FTDI MHAM_Y8 0xeeeb FTDI compatible adapter
+product FTDI MHAM_Y9 0xeeef FTDI compatible adapter
+product FTDI MHAM_YS 0xeee9 FTDI compatible adapter
+product FTDI MICRO_CHAMELEON 0xcaa0 FTDI compatible adapter
+product FTDI MTXORB_5 0xfa05 FTDI compatible adapter
+product FTDI MTXORB_6 0xfa06 FTDI compatible adapter
+product FTDI NXTCAM 0xabb8 FTDI compatible adapter
+product FTDI OCEANIC 0xf460 FTDI compatible adapter
+product FTDI OOCDLINK 0xbaf8 FTDI compatible adapter
+product FTDI OPENDCC 0xbfd8 FTDI compatible adapter
+product FTDI OPENDCC_GATEWAY 0xbfdb FTDI compatible adapter
+product FTDI OPENDCC_GBM 0xbfdc FTDI compatible adapter
+product FTDI OPENDCC_SNIFFER 0xbfd9 FTDI compatible adapter
+product FTDI OPENDCC_THROTTLE 0xbfda FTDI compatible adapter
+product FTDI PCDJ_DAC2 0xfa88 FTDI compatible adapter
+product FTDI PERLE_ULTRAPORT 0xf0c0 FTDI compatible adapter
+product FTDI PHI_FISCO 0xe40b FTDI compatible adapter
+product FTDI PIEGROUP 0xf208 FTDI compatible adapter
+product FTDI PROPOX_JTAGCABLEII 0xd738 FTDI compatible adapter
+product FTDI R2000KU_TRUE_RNG 0xfb80 FTDI compatible adapter
+product FTDI R2X0 0xfc71 FTDI compatible adapter
+product FTDI RELAIS 0xfa10 FTDI compatible adapter
+product FTDI REU_TINY 0xed22 FTDI compatible adapter
+product FTDI RMP200 0xe729 FTDI compatible adapter
+product FTDI RM_CANVIEW 0xfd60 FTDI compatible adapter
+product FTDI RRCIRKITS_LOCOBUFFER 0xc7d0 FTDI compatible adapter
+product FTDI SCIENCESCOPE_HS_LOGBOOK 0xff1d FTDI compatible adapter
+product FTDI SCIENCESCOPE_LOGBOOKML 0xff18 FTDI compatible adapter
+product FTDI SCIENCESCOPE_LS_LOGBOOK 0xff1c FTDI compatible adapter
+product FTDI SCS_DEVICE_0 0xd010 FTDI compatible adapter
+product FTDI SCS_DEVICE_1 0xd011 FTDI compatible adapter
+product FTDI SCS_DEVICE_2 0xd012 FTDI compatible adapter
+product FTDI SCS_DEVICE_3 0xd013 FTDI compatible adapter
+product FTDI SCS_DEVICE_4 0xd014 FTDI compatible adapter
+product FTDI SCS_DEVICE_5 0xd015 FTDI compatible adapter
+product FTDI SCS_DEVICE_6 0xd016 FTDI compatible adapter
+product FTDI SCS_DEVICE_7 0xd017 FTDI compatible adapter
+product FTDI SDMUSBQSS 0xf448 FTDI compatible adapter
+product FTDI SIGNALYZER_SH2 0xbca2 FTDI compatible adapter
+product FTDI SIGNALYZER_SH4 0xbca4 FTDI compatible adapter
+product FTDI SIGNALYZER_SLITE 0xbca1 FTDI compatible adapter
+product FTDI SIGNALYZER_ST 0xbca0 FTDI compatible adapter
+product FTDI SPECIAL_1 0xfc70 FTDI compatible adapter
+product FTDI SPECIAL_3 0xfc72 FTDI compatible adapter
+product FTDI SPECIAL_4 0xfc73 FTDI compatible adapter
+product FTDI SPROG_II 0xf0c8 FTDI compatible adapter
+product FTDI SR_RADIO 0x9379 FTDI compatible adapter
+product FTDI SUUNTO_SPORTS 0xf680 FTDI compatible adapter
+product FTDI TAVIR_STK500 0xfa33 FTDI compatible adapter
+product FTDI TERATRONIK_D2XX 0xec89 FTDI compatible adapter
+product FTDI TERATRONIK_VCP 0xec88 FTDI compatible adapter
+product FTDI THORLABS 0xfaf0 FTDI compatible adapter
+product FTDI TNC_X 0xebe0 FTDI compatible adapter
+product FTDI TTUSB 0xff20 FTDI compatible adapter
+product FTDI USBX_707 0xf857 FTDI compatible adapter
+product FTDI USINT_CAT 0xb810 FTDI compatible adapter
+product FTDI USINT_RS232 0xb812 FTDI compatible adapter
+product FTDI USINT_WKEY 0xb811 FTDI compatible adapter
+product FTDI VARDAAN 0xf070 FTDI compatible adapter
+product FTDI VNHCPCUSB_D 0xfe38 FTDI compatible adapter
+product FTDI WESTREX_MODEL_777 0xdc00 FTDI compatible adapter
+product FTDI WESTREX_MODEL_8900F 0xdc01 FTDI compatible adapter
+product FTDI XF_547 0xfc0a FTDI compatible adapter
+product FTDI XF_640 0xfc0e FTDI compatible adapter
+product FTDI XF_642 0xfc0f FTDI compatible adapter
+product FTDI XM_RADIO 0x937a FTDI compatible adapter
+product FTDI YEI_SERVOCENTER31 0xe050 FTDI compatible adapter
=20
/* Fuji photo products */
product FUJIPHOTO MASS0100 0x0100 Mass Storage
@@ -1659,7 +1941,7 @@
product GARMIN IQUE_3600 0x0004 iQue 3600
=20
/* Gemalto products */
-product GEMALTO PROXPU 0x5501 Prox-PU/CU
+product GEMALTO PROXPU 0x5501 Prox-PU/CU RFID Card Reader
=20
/* General Instruments (Motorola) products */
product GENERALINSTMNTS SB5100 0x5100 SURFboard SB5100 Cable modem
@@ -1707,6 +1989,9 @@
/* G.Mate, Inc products */
product GMATE YP3X00 0x1001 YP3X00 PDA
=20
+/* GN Otometrics */
+product GNOTOMETRICS USB 0x0010 FTDI compatible adapter
+
/* GoHubs products */
product GOHUBS GOCOM232 0x1001 GoCOM232 Serial
=20
@@ -1909,6 +2194,22 @@
/* IBM Corporation */
product IBM USBCDROMDRIVE 0x4427 USB CD-ROM Drive
=20
+/* Icom products */
+product ICOM SP1 0x0004 FTDI compatible adapter
+product ICOM OPC_U_UC 0x0018 FTDI compatible adapter
+product ICOM RP2C1 0x0009 FTDI compatible adapter
+product ICOM RP2C2 0x000a FTDI compatible adapter
+product ICOM RP2D 0x000b FTDI compatible adapter
+product ICOM RP2KVR 0x0013 FTDI compatible adapter
+product ICOM RP2KVT 0x0012 FTDI compatible adapter
+product ICOM RP2VR 0x000d FTDI compatible adapter
+product ICOM RP2VT 0x000c FTDI compatible adapter
+product ICOM RP4KVR 0x0011 FTDI compatible adapter
+product ICOM RP4KVT 0x0010 FTDI compatible adapter
+
+/* ID-tech products */
+product IDTECH IDT1221U 0x0300 FTDI compatible adapter
+
/* Imagination Technologies products */
product IMAGINATION DBX1 0x2107 DBX1 DSP core
=20
@@ -1933,6 +2234,10 @@
product INTEL2 IRMH 0x0020 Integrated Rate Matching Hub
product INTEL2 IRMH2 0x0024 Integrated Rate Matching Hub
=20
+/* Interbiometric products */
+product INTERBIOMETRICS IOBOARD 0x1002 FTDI compatible adapter
+product INTERBIOMETRICS MINI_IOBOARD 0x1006 FTDI compatible adapter
+
/* Intersil products */
product INTERSIL PRISM_GT 0x1000 PrismGT USB 2.0 WLAN
product INTERSIL PRISM_2X 0x3642 Prism2.x or Atmel WLAN
@@ -1964,6 +2269,9 @@
product IOMEGA ZIP100 0x0001 Zip 100
product IOMEGA ZIP250 0x0030 Zip 250
=20
+/* Ionic products */
+product IONICS PLUGCOMPUTER 0x0102 FTDI compatible adapter
+
/* Integrated System Solution Corp. products */
product ISSC ISSCBTA 0x1001 Bluetooth USB Adapter
=20
@@ -1981,6 +2289,9 @@
/* Jaton products */
product JATON EDA 0x5704 Ethernet
=20
+/* Jeti products */
+product JETI SPC1201 0x04b2 FTDI compatible adapter
+
/* JMicron products */
product JMICRON JM20336 0x2336 USB to SATA Bridge
product JMICRON JM20337 0x2338 USB to ATA/ATAPI Bridge
@@ -1992,6 +2303,10 @@
/* JRC products */
product JRC AH_J3001V_J3002V 0x0001 AirH PHONE AH-J3001V/J3002V
=20
+/* Kamstrrup products */
+product KAMSTRUP OPTICALEYE 0x0001 Optical Eye/3-wire
+product KAMSTRUP MBUS_250D 0x0005 M-Bus Master MultiPort 250D
+
/* Kawatsu products */
product KAWATSU MH4000P 0x0003 MiniHub 4000P
=20
@@ -2040,6 +2355,10 @@
product KLSI DUH3E10BT 0x0008 USB Ethernet
product KLSI DUH3E10BTN 0x0009 USB Ethernet
=20
+/* Kobil products */
+product KOBIL CONV_B1 0x2020 FTDI compatible adapter
+product KOBIL CONV_KAAN 0x2021 FTDI compatible adapter
+
/* Kodak products */
product KODAK DC220 0x0100 Digital Science DC220
product KODAK DC260 0x0110 Digital Science DC260
@@ -2074,6 +2393,9 @@
product LACIE HD 0xa601 Hard Disk
product LACIE CDRW 0xa602 CD R/W
=20
+/* Larsen and Brusgaard products */
+product LARSENBRUSGAARD ALTITRACK 0x0001 FTDI compatible adapter
+
/* Leadtek products */
product LEADTEK 9531 0x2101 9531 GPS
=20
@@ -2087,6 +2409,11 @@
/* Liebert products */
product LIEBERT POWERSURE_PXT 0xffff PowerSure Personal XT
=20
+/* Link Instruments Inc. products */
+product LINKINSTRUMENTS MSO19 0xf190 Link Instruments MSO-19
+product LINKINSTRUMENTS MSO28 0xf280 Link Instruments MSO-28
+product LINKINSTRUMENTS MSO28_2 0xf281 Link Instruments MSO-28
+
/* Linksys products */
product LINKSYS MAUSB2 0x0105 Camedia MAUSB-2
product LINKSYS USB10TX1 0x200c USB10TX
@@ -2167,7 +2494,255 @@
product MARVELL SHEEVAPLUG 0x9e8f SheevaPlug serial interface
=20
/* Matrix Orbital products */
+product MATRIXORBITAL FTDI_RANGE_0100 0x0100 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0101 0x0101 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0102 0x0102 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0103 0x0103 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0104 0x0104 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0105 0x0105 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0106 0x0106 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0107 0x0107 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0108 0x0108 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0109 0x0109 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010A 0x010a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010B 0x010b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010C 0x010c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010D 0x010d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010E 0x010e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010F 0x010f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0110 0x0110 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0111 0x0111 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0112 0x0112 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0113 0x0113 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0114 0x0114 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0115 0x0115 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0116 0x0116 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0117 0x0117 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0118 0x0118 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0119 0x0119 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011A 0x011a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011B 0x011b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011C 0x011c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011D 0x011d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011E 0x011e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011F 0x011f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0120 0x0120 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0121 0x0121 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0122 0x0122 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0123 0x0123 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0124 0x0124 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0125 0x0125 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0126 0x0126 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0128 0x0128 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0129 0x0129 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012A 0x012a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012B 0x012b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012D 0x012d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012E 0x012e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012F 0x012f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0130 0x0130 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0131 0x0131 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0132 0x0132 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0133 0x0133 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0134 0x0134 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0135 0x0135 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0136 0x0136 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0137 0x0137 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0138 0x0138 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0139 0x0139 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013A 0x013a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013B 0x013b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013C 0x013c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013D 0x013d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013E 0x013e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013F 0x013f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0140 0x0140 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0141 0x0141 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0142 0x0142 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0143 0x0143 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0144 0x0144 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0145 0x0145 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0146 0x0146 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0147 0x0147 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0148 0x0148 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0149 0x0149 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014A 0x014a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014B 0x014b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014C 0x014c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014D 0x014d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014E 0x014e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014F 0x014f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0150 0x0150 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0151 0x0151 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0152 0x0152 FTDI compatible adapter
product MATRIXORBITAL MOUA 0x0153 Martrix Orbital MOU-Axxxx LCD displays
+product MATRIXORBITAL FTDI_RANGE_0159 0x0159 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015A 0x015a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015B 0x015b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015C 0x015c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015D 0x015d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015E 0x015e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015F 0x015f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0160 0x0160 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0161 0x0161 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0162 0x0162 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0163 0x0163 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0164 0x0164 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0165 0x0165 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0166 0x0166 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0167 0x0167 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0168 0x0168 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0169 0x0169 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016A 0x016a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016B 0x016b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016C 0x016c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016D 0x016d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016E 0x016e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016F 0x016f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0170 0x0170 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0171 0x0171 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0172 0x0172 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0173 0x0173 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0174 0x0174 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0175 0x0175 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0176 0x0176 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0177 0x0177 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0178 0x0178 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0179 0x0179 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017A 0x017a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017B 0x017b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017C 0x017c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017D 0x017d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017E 0x017e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017F 0x017f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0180 0x0180 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0181 0x0181 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0182 0x0182 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0183 0x0183 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0184 0x0184 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0185 0x0185 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0186 0x0186 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0187 0x0187 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0188 0x0188 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0189 0x0189 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018A 0x018a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018B 0x018b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018C 0x018c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018D 0x018d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018E 0x018e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018F 0x018f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0190 0x0190 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0191 0x0191 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0192 0x0192 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0193 0x0193 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0194 0x0194 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0195 0x0195 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0196 0x0196 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0197 0x0197 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0198 0x0198 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0199 0x0199 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019A 0x019a FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019B 0x019b FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019C 0x019c FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019D 0x019d FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019E 0x019e FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019F 0x019f FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A0 0x01a0 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A1 0x01a1 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A2 0x01a2 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A3 0x01a3 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A4 0x01a4 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A5 0x01a5 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A6 0x01a6 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A7 0x01a7 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A8 0x01a8 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A9 0x01a9 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AA 0x01aa FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AB 0x01ab FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AC 0x01ac FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AD 0x01ad FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AE 0x01ae FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AF 0x01af FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B0 0x01b0 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B1 0x01b1 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B2 0x01b2 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B3 0x01b3 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B4 0x01b4 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B5 0x01b5 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B6 0x01b6 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B7 0x01b7 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B8 0x01b8 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B9 0x01b9 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BA 0x01ba FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BB 0x01bb FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BC 0x01bc FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BD 0x01bd FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BE 0x01be FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BF 0x01bf FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C0 0x01c0 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C1 0x01c1 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C2 0x01c2 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C3 0x01c3 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C4 0x01c4 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C5 0x01c5 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C6 0x01c6 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C7 0x01c7 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C8 0x01c8 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C9 0x01c9 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CA 0x01ca FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CB 0x01cb FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CC 0x01cc FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CD 0x01cd FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CE 0x01ce FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CF 0x01cf FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D0 0x01d0 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D1 0x01d1 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D2 0x01d2 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D3 0x01d3 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D4 0x01d4 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D5 0x01d5 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D6 0x01d6 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D7 0x01d7 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D8 0x01d8 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D9 0x01d9 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DA 0x01da FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DB 0x01db FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DC 0x01dc FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DD 0x01dd FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DE 0x01de FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DF 0x01df FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E0 0x01e0 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E1 0x01e1 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E2 0x01e2 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E3 0x01e3 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E4 0x01e4 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E5 0x01e5 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E6 0x01e6 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E7 0x01e7 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E8 0x01e8 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E9 0x01e9 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EA 0x01ea FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EB 0x01eb FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EC 0x01ec FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01ED 0x01ed FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EE 0x01ee FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EF 0x01ef FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F0 0x01f0 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F1 0x01f1 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F2 0x01f2 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F3 0x01f3 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F4 0x01f4 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F5 0x01f5 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F6 0x01f6 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F7 0x01f7 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F8 0x01f8 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F9 0x01f9 FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FA 0x01fa FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FB 0x01fb FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FC 0x01fc FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FD 0x01fd FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FE 0x01fe FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FF 0x01ff FTDI compatible adapter
=20
/* MCT Corp. */
product MCT HUB0100 0x0100 Hub
@@ -2217,6 +2792,7 @@
product MERLIN V620 0x1110 Merlin V620
=20
/* MetaGeek products */
+product METAGEEK TELLSTICK 0x0c30 FTDI compatible adapter
product METAGEEK WISPY1B 0x083e MetaGeek Wi-Spy
product METAGEEK WISPY24X 0x083f MetaGeek Wi-Spy 2.4x
product METAGEEK2 WISPYDBX 0x5000 MetaGeek Wi-Spy DBx
@@ -2230,7 +2806,7 @@
=20
/* MEI products */
product MEI CASHFLOW_SC 0x1100 Cashflow-SC Cash Acceptor
-product MEI S2000 0x1101 Seies 2000 Combo Acceptor
+product MEI S2000 0x1101 Series 2000 Combo Acceptor
=20
/* Micro Star International products */
product MSI BT_DONGLE 0x1967 Bluetooth USB dongle
@@ -2321,6 +2897,7 @@
product MOBILEACTION MA620 0x0620 MA-620 Infrared Adapter
=20
/* Mobility products */
+product MOBILITY USB_SERIAL 0x0202 FTDI compatible adapter
product MOBILITY EA 0x0204 Ethernet
product MOBILITY EASIDOCK 0x0304 EasiDock Ethernet
=20
@@ -2343,6 +2920,10 @@
product MOTOROLA4 RT2770 0x9031 RT2770
product MOTOROLA4 RT3070 0x9032 RT3070
=20
+/* MpMan products */
+product MPMAN MPF400_2 0x25a8 MPF400 Music Player 2Go
+product MPMAN MPF400_1 0x36d0 MPF400 Music Player 1Go
+
/* MultiTech products */
product MULTITECH ATLAS 0xf101 MT5634ZBA-USB modem
=20
@@ -2468,6 +3049,10 @@
product O2MICRO OZ776_HUB 0x7761 OZ776 hub
product O2MICRO OZ776_CCID_SC 0x7772 OZ776 CCID SC Reader
=20
+/* Olimex products */
+product OLIMEX ARM_USB_OCD 0x0003 FTDI compatible adapter
+product OLIMEX ARM_USB_OCD_H 0x002b FTDI compatible adapter
+
/* Olympus products */
product OLYMPUS C1 0x0102 C-1 Digital Camera
product OLYMPUS C700 0x0105 C-700 Ultra Zoom
@@ -2570,6 +3155,36 @@
product PANASONIC SDCAAE 0x1b00 MultiMediaCard
product PANASONIC TYTP50P6S 0x3900 TY-TP50P6-S 50in Touch Panel
=20
+/* Papouch products */
+product PAPOUCH AD4USB 0x8003 FTDI compatible adapter
+product PAPOUCH AP485 0x0101 FTDI compatible adapter
+product PAPOUCH AP485_2 0x0104 FTDI compatible adapter
+product PAPOUCH DRAK5 0x0700 FTDI compatible adapter
+product PAPOUCH DRAK6 0x1000 FTDI compatible adapter
+product PAPOUCH GMSR 0x8005 FTDI compatible adapter
+product PAPOUCH GMUX 0x8004 FTDI compatible adapter
+product PAPOUCH IRAMP 0x0500 FTDI compatible adapter
+product PAPOUCH LEC 0x0300 FTDI compatible adapter
+product PAPOUCH MU 0x8001 FTDI compatible adapter
+product PAPOUCH QUIDO10X1 0x0b00 FTDI compatible adapter
+product PAPOUCH QUIDO2X16 0x0e00 FTDI compatible adapter
+product PAPOUCH QUIDO2X2 0x0a00 FTDI compatible adapter
+product PAPOUCH QUIDO30X3 0x0c00 FTDI compatible adapter
+product PAPOUCH QUIDO3X32 0x0f00 FTDI compatible adapter
+product PAPOUCH QUIDO4X4 0x0900 FTDI compatible adapter
+product PAPOUCH QUIDO60X3 0x0d00 FTDI compatible adapter
+product PAPOUCH QUIDO8X8 0x0800 FTDI compatible adapter
+product PAPOUCH SB232 0x0301 FTDI compatible adapter
+product PAPOUCH SB422 0x0102 FTDI compatible adapter
+product PAPOUCH SB422_2 0x0105 FTDI compatible adapter
+product PAPOUCH SB485 0x0100 FTDI compatible adapter
+product PAPOUCH SB485C 0x0107 FTDI compatible adapter
+product PAPOUCH SB485S 0x0106 FTDI compatible adapter
+product PAPOUCH SB485_2 0x0103 FTDI compatible adapter
+product PAPOUCH SIMUKEY 0x8002 FTDI compatible adapter
+product PAPOUCH TMU 0x0400 FTDI compatible adapter
+product PAPOUCH UPSUSB 0x8000 FTDI compatible adapter
+
/* PARA Industrial products */
product PARA RT3070 0x8888 RT3070
=20
@@ -2647,6 +3262,9 @@
/* Portsmith products */
product PORTSMITH EEA 0x3003 Express Ethernet
=20
+/* Posiflex products */
+product POSIFLEX PP7000 0x0300 FTDI compatible adapter
+
/* Primax products */
product PRIMAX G2X300 0x0300 G2-200 scanner
product PRIMAX G2E300 0x0301 G2E-300 scanner
@@ -2695,6 +3313,9 @@
product QCOM RT2573_3 0x6238 RT2573
product QCOM RT2870 0x6259 RT2870
=20
+/* QI-hardware */
+product QIHARDWARE JTAGSERIAL 0x0713 FTDI compatible adapter
+
/* Qisda products */
product QISDA H21_1 0x4512 3G modem
product QISDA H21_2 0x4523 3G modem
@@ -2884,6 +3505,10 @@
product RATOC REXUSB60 0xb000 REX-USB60
product RATOC REXUSB60F 0xb020 REX-USB60F
=20
+/* RT system products */
+product RTSYSTEMS CT29B 0x9e54 FTDI compatible adapter
+product RTSYSTEMS SERIAL_VX7 0x9e52 FTDI compatible adapter
+
/* Sagem products */
product SAGEM USBSERIAL 0x0027 USB-Serial Controller
product SAGEM XG760A 0x004a XG-760A
@@ -2922,6 +3547,55 @@
product SCANLOGIC SL11R 0x0002 SL11R IDE Adapter
product SCANLOGIC 336CX 0x0300 Phantom 336CX - C3 scanner
=20
+/* Sealevel products */
+product SEALEVEL 2101 0x2101 FTDI compatible adapter
+product SEALEVEL 2102 0x2102 FTDI compatible adapter
+product SEALEVEL 2103 0x2103 FTDI compatible adapter
+product SEALEVEL 2104 0x2104 FTDI compatible adapter
+product SEALEVEL 2106 0x9020 FTDI compatible adapter
+product SEALEVEL 2201_1 0x2211 FTDI compatible adapter
+product SEALEVEL 2201_2 0x2221 FTDI compatible adapter
+product SEALEVEL 2202_1 0x2212 FTDI compatible adapter
+product SEALEVEL 2202_2 0x2222 FTDI compatible adapter
+product SEALEVEL 2203_1 0x2213 FTDI compatible adapter
+product SEALEVEL 2203_2 0x2223 FTDI compatible adapter
+product SEALEVEL 2401_1 0x2411 FTDI compatible adapter
+product SEALEVEL 2401_2 0x2421 FTDI compatible adapter
+product SEALEVEL 2401_3 0x2431 FTDI compatible adapter
+product SEALEVEL 2401_4 0x2441 FTDI compatible adapter
+product SEALEVEL 2402_1 0x2412 FTDI compatible adapter
+product SEALEVEL 2402_2 0x2422 FTDI compatible adapter
+product SEALEVEL 2402_3 0x2432 FTDI compatible adapter
+product SEALEVEL 2402_4 0x2442 FTDI compatible adapter
+product SEALEVEL 2403_1 0x2413 FTDI compatible adapter
+product SEALEVEL 2403_2 0x2423 FTDI compatible adapter
+product SEALEVEL 2403_3 0x2433 FTDI compatible adapter
+product SEALEVEL 2403_4 0x2443 FTDI compatible adapter
+product SEALEVEL 2801_1 0x2811 FTDI compatible adapter
+product SEALEVEL 2801_2 0x2821 FTDI compatible adapter
+product SEALEVEL 2801_3 0x2831 FTDI compatible adapter
+product SEALEVEL 2801_4 0x2841 FTDI compatible adapter
+product SEALEVEL 2801_5 0x2851 FTDI compatible adapter
+product SEALEVEL 2801_6 0x2861 FTDI compatible adapter
+product SEALEVEL 2801_7 0x2871 FTDI compatible adapter
+product SEALEVEL 2801_8 0x2881 FTDI compatible adapter
+product SEALEVEL 2802_1 0x2812 FTDI compatible adapter
+product SEALEVEL 2802_2 0x2822 FTDI compatible adapter
+product SEALEVEL 2802_3 0x2832 FTDI compatible adapter
+product SEALEVEL 2802_4 0x2842 FTDI compatible adapter
+product SEALEVEL 2802_5 0x2852 FTDI compatible adapter
+product SEALEVEL 2802_6 0x2862 FTDI compatible adapter
+product SEALEVEL 2802_7 0x2872 FTDI compatible adapter
+product SEALEVEL 2802_8 0x2882 FTDI compatible adapter
+product SEALEVEL 2803_1 0x2813 FTDI compatible adapter
+product SEALEVEL 2803_2 0x2823 FTDI compatible adapter
+product SEALEVEL 2803_3 0x2833 FTDI compatible adapter
+product SEALEVEL 2803_4 0x2843 FTDI compatible adapter
+product SEALEVEL 2803_5 0x2853 FTDI compatible adapter
+product SEALEVEL 2803_6 0x2863 FTDI compatible adapter
+product SEALEVEL 2803_7 0x2873 FTDI compatible adapter
+product SEALEVEL 2803_8 0x2883 FTDI compatible adapter
+
/* Senao products */
product SENAO RT2870_3 0x0605 RT2870
product SENAO RT2870_4 0x0615 RT2870
@@ -3050,6 +3724,7 @@
/* Also: Omnidirectional Control Technology products */
product SIIG DIGIFILMREADER 0x0004 DigiFilm-Combo Reader
product SIIG WINTERREADER 0x0330 WINTERREADER Reader
+product SIIG2 DK201 0x0103 FTDI compatible adapter
product SIIG2 USBTOETHER 0x0109 USB TO Ethernet
product SIIG2 US2308 0x0421 Serial
=20
@@ -3058,10 +3733,10 @@
product SILICOM GPE 0x0002 Psion Gold Port Ethernet
=20
/* SI Labs */
-product SILABS VSTABI 0x0f91 Vstabi
+product SILABS VSTABI 0x0f91 VStabi Controller
product SILABS ARKHAM_DS101_M 0x1101 Arkham DS101 Monitor
product SILABS ARKHAM_DS101_A 0x1601 Arkham DS101 Adapter
-product SILABS BSM7DUSB 0x800a BSM7-D-USB
+product SILABS BSM7DUSB 0x800a SPORTident BSM7-D USB
product SILABS POLOLU 0x803b Pololu Serial
product SILABS CYGNAL_DEBUG 0x8044 Cygnal Debug Adapter
product SILABS SB_PARAMOUNT_ME 0x8043 Software Bisque Paramount ME
@@ -3070,6 +3745,7 @@
product SILABS ARGUSISP 0x8066 Argussoft ISP
product SILABS IMS_USB_RS422 0x806f IMS USB-RS422
product SILABS CRUMB128 0x807a Crumb128 board
+product SILABS OPTRIS_MSPRO 0x80c4 Optris MSpro LT Thermometer
product SILABS DEGREE 0x80ca Degree Controls Inc
product SILABS TRACIENT 0x80dd Tracient RFID
product SILABS TRAQMATE 0x80ed Track Systems Traqmate
@@ -3082,9 +3758,11 @@
product SILABS WMRRIGTALK 0x814b WMR RIGtalk RT1
product SILABS B_G_H3000 0x8156 B&G H3000 Data Cable
product SILABS HELICOM 0x815e Helicomm IP-Link 1220-DVM
+product SILABS HAMLINKUSB 0x815f Timewave HamLinkUSB
product SILABS AVIT_USB_TTL 0x818b AVIT Research USB-TTL
-product SILABS MJS_TOSLINK 0x819f MJS USB-TOSLINk
+product SILABS MJS_TOSLINK 0x819f MJS USB-TOSLINK
product SILABS WAVIT 0x81a6 ThinkOptics WavIt
+product SILABS MULTIPLEX_RC 0x81a9 Multiplex RC adapter
product SILABS MSD_DASHHAWK 0x81ac MSD DashHawk
product SILABS INSYS_MODEM 0x81ad INSYS Modem
product SILABS LIPOWSKY_JTAG 0x81c8 Lipowsky Baby-JTAG
@@ -3095,16 +3773,24 @@
product SILABS LIPOWSKY_HARP 0x8218 Lipowsky HARP-1
product SILABS C2_EDGE_MODEM 0x822b Commander 2 EDGE(GSM) Modem
product SILABS CYGNAL_GPS 0x826b Cygnal Fasttrax GPS
-product SILABS TELEGESYS_ETRX2 0x8293 Telegesys ETRX2USB
+product SILABS TELEGESIS_ETRX2 0x8293 Telegesis ETRX2USB
product SILABS PROCYON_AVS 0x82f9 Procyon AVS
product SILABS MC35PU 0x8341 MC35pu
product SILABS CYGNAL 0x8382 Cygnal
product SILABS AMBER_AMB2560 0x83a8 Amber Wireless AMB2560
+product SILABS DEKTEK_DTAPLUS 0x83d8 DekTec DTA Plus VHF/UHF Booster
product SILABS KYOCERA_GPS 0x8411 Kyocera GPS
+product SILABS IRZ_SG10 0x8418 IRZ SG-10 GSM/GPRS Modem
product SILABS BEI_VCP 0x846e BEI USB Sensor (VCP)
product SILABS BALLUFF_RFID 0x8477 Balluff RFID reader
+product SILABS AC_SERV_IBUS 0x85ea AC-Services IBUS Interface
+product SILABS AC_SERV_CIS 0x85eb AC-Services CIS-IBUS
+product SILABS AC_SERV_CAN 0x8664 AC-Services CAN Interface
+product SILABS AC_SERV_OBD 0x8665 AC-Services OBD Interface
product SILABS CP2102 0xea60 SILABS USB UART
product SILABS CP210X_2 0xea61 CP210x Serial
+product SILABS CP210X_3 0xea70 CP210x Serial
+product SILABS CP210X_4 0xea80 CP210x Serial
product SILABS INFINITY_MIC 0xea71 Infinity GPS-MIC-1 Radio Monophone
product SILABS USBSCOPE50 0xf001 USBscope50
product SILABS USBWAVE12 0xf002 USBwave12
@@ -3244,10 +3930,6 @@
product STELERA E1011 0x1011 3G modem
product STELERA E1012 0x1012 3G modem
=20
-/* MpMan products */
-product MPMAN MPF400_1 0x36d0 MPF400 Music Player 1Go
-product MPMAN MPF400_2 0x25a8 MPF400 Music Player 2Go
-
/* STMicroelectronics products */
product STMICRO BIOCPU 0x2016 Biometric Coprocessor
product STMICRO COMMUNICATOR 0x7554 USB Communicator
@@ -3270,6 +3952,9 @@
product SUN MOUSE 0x0100 Type 6 USB mouse
product SUN KBD_HUB 0x100e Kbd Hub
=20
+/* Sunplus Innovation Technology Inc. products */
+product SUNPLUS USBMOUSE 0x0007 USB Optical Mouse
+
/* Super Top products */
product SUPERTOP IDE 0x6600 USB-IDE
=20
@@ -3280,11 +3965,20 @@
/* Teclast products */
product TECLAST TLC300 0x3203 USB Media Player
=20
+/* Testo products */
+product TESTO USB_INTERFACE 0x0001 FTDI compatible adapter
+
/* TexTech products */
product TEXTECH DUMMY 0x0000 Dummy product
product TEXTECH U2M_1 0x0101 Textech USB MIDI cable
product TEXTECH U2M_2 0x1806 Textech USB MIDI cable
=20
+/* The Mobility Lab products */
+product TML USB_SERIAL 0x0064 FTDI compatible adapter
+
+/* Thurlby Thandar Instrument products */
+product TTI QL355P 0x03e8 FTDI compatible adapter
+
/* Supra products */
product DIAMOND2 SUPRAEXPRESS56K 0x07da Supra Express 56K modem
product DIAMOND2 SUPRA2890 0x0b4a SupraMax 2890 56K Modem
@@ -3409,6 +4103,9 @@
/* Universal Access products */
product UNIACCESS PANACHE 0x0101 Panache Surf USB ISDN Adapter
=20
+/* Unknown products */
+product UNKNOWN4 NF_RIC 0x0001 FTDI compatible adapter
+
/* USI products */
product USI MC60 0x10c5 MC60 Serial
=20
@@ -3476,6 +4173,10 @@
product WESTERN MYBOOK 0x0901 MyBook External HDD
product WESTERN MYPASSWORD 0x0704 MyPassword External HDD
=20
+/* WeTelecom Incorporated */
+product WETELECOM WM_D300 0x6801 Wetelecom CDMA 450 EVDO Rev.B Mobile
+product WETELECOM ZEROCD 0x6803 Wetelecom Mobile Products
+
/* WIENER Plein & Baus GmbH products */
product WIENERPLEINBAUS PL512 0x0010 PL512 PSU
product WIENERPLEINBAUS RCM 0x0011 RCM Remote Control
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/wtap/if_wtap.c
--- a/head/sys/dev/wtap/if_wtap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/wtap/if_wtap.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/sys/dev/wtap/if_wtap.c 233184 2012-03-19 13:54:15Z adria=
n $
+ * $FreeBSD: head/sys/dev/wtap/if_wtap.c 238938 2012-07-31 07:22:50Z month=
adar $
*/
#include "if_wtapvar.h"
#include <sys/uio.h> /* uio struct */
@@ -230,8 +230,10 @@
struct ieee80211vap *vap =3D arg;
struct mbuf *m;
=20
- KASSERT(vap->iv_state >=3D IEEE80211_S_RUN,
- ("not running, state %d", vap->iv_state));
+ if (vap->iv_state < IEEE80211_S_RUN) {
+ DWTAP_PRINTF("Skip beacon, not running, state %d", vap->iv_state);
+ return ;
+ }
DWTAP_PRINTF("[%d] beacon intrp\n", avp->id); //burst mode
/*
* Update dynamic beacon contents. If this returns
@@ -289,6 +291,8 @@
default:
goto bad;
}
+ } else if (nstate =3D=3D IEEE80211_S_INIT) {
+ callout_stop(&avp->av_swba);
}
return 0;
bad:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/fifofs/fifo_vnops.c
--- a/head/sys/fs/fifofs/fifo_vnops.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/fifofs/fifo_vnops.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*
* @(#)fifo_vnops.c 8.10 (Berkeley) 5/27/95
- * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 232823 2012-03-11 15:58:27Z k=
ib $
+ * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 238936 2012-07-31 05:48:35Z d=
avidxu $
*/
=20
#include <sys/param.h>
@@ -59,23 +59,13 @@
* Notes about locking:
* - fi_pipe is invariant since init time.
* - fi_readers and fi_writers are protected by the vnode lock.
- * - fi_wgen and fi_seqcount are protected by the pipe mutex.
*/
struct fifoinfo {
struct pipe *fi_pipe;
long fi_readers;
long fi_writers;
- int fi_wgen;
- int fi_seqcount;
};
=20
-#define FIFO_UPDWGEN(fip, pip) do { \
- if ((fip)->fi_wgen =3D=3D (fip)->fi_seqcount) \
- (pip)->pipe_state |=3D PIPE_SAMEWGEN; \
- else \
- (pip)->pipe_state &=3D ~PIPE_SAMEWGEN; \
-} while (0)
-
static vop_print_t fifo_print;
static vop_open_t fifo_open;
static vop_close_t fifo_close;
@@ -161,7 +151,7 @@
return (error);
fip =3D malloc(sizeof(*fip), M_VNODE, M_WAITOK);
fip->fi_pipe =3D fpipe;
- fip->fi_wgen =3D fip->fi_readers =3D fip->fi_writers =3D 0;
+ fpipe->pipe_wgen =3D fip->fi_readers =3D fip->fi_writers =3D 0;
KASSERT(vp->v_fifoinfo =3D=3D NULL, ("fifo_open: v_fifoinfo race"));
vp->v_fifoinfo =3D fip;
}
@@ -181,8 +171,7 @@
if (fip->fi_writers > 0)
wakeup(&fip->fi_writers);
}
- fip->fi_seqcount =3D fip->fi_wgen - fip->fi_writers;
- FIFO_UPDWGEN(fip, fpipe);
+ fp->f_seqcount =3D fpipe->pipe_wgen - fip->fi_writers;
}
if (ap->a_mode & FWRITE) {
if ((ap->a_mode & O_NONBLOCK) && fip->fi_readers =3D=3D 0) {
@@ -235,8 +224,7 @@
fpipe->pipe_state |=3D PIPE_EOF;
if (fpipe->pipe_state & PIPE_WANTR)
wakeup(fpipe);
- fip->fi_wgen++;
- FIFO_UPDWGEN(fip, fpipe);
+ fpipe->pipe_wgen++;
PIPE_UNLOCK(fpipe);
fifo_cleanup(vp);
}
@@ -283,8 +271,11 @@
if (fip->fi_readers =3D=3D 0) {
PIPE_LOCK(cpipe);
cpipe->pipe_state |=3D PIPE_EOF;
- if (cpipe->pipe_state & PIPE_WANTW)
+ if ((cpipe->pipe_state & PIPE_WANTW)) {
+ cpipe->pipe_state &=3D ~PIPE_WANTW;
wakeup(cpipe);
+ }
+ pipeselwakeup(cpipe);
PIPE_UNLOCK(cpipe);
}
}
@@ -293,10 +284,12 @@
if (fip->fi_writers =3D=3D 0) {
PIPE_LOCK(cpipe);
cpipe->pipe_state |=3D PIPE_EOF;
- if (cpipe->pipe_state & PIPE_WANTR)
+ if ((cpipe->pipe_state & PIPE_WANTR)) {
+ cpipe->pipe_state &=3D ~PIPE_WANTR;
wakeup(cpipe);
- fip->fi_wgen++;
- FIFO_UPDWGEN(fip, cpipe);
+ }
+ cpipe->pipe_wgen++;
+ pipeselwakeup(cpipe);
PIPE_UNLOCK(cpipe);
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/nfs/nfs_commonport.c
--- a/head/sys/fs/nfs/nfs_commonport.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/nfs/nfs_commonport.c Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/nfs/nfs_commonport.c 231805 2012-02-16 02:=
19:53Z rmacklem $");
+__FBSDID("$FreeBSD: head/sys/fs/nfs/nfs_commonport.c 239039 2012-08-04 18:=
12:54Z kib $");
=20
/*
* Functions that need to be different for different versions of BSD
@@ -49,7 +49,6 @@
#include <vm/vm_kern.h>
#include <vm/vm_extern.h>
#include <vm/uma.h>
-#include <vm/uma_int.h>
=20
extern int nfscl_ticks;
extern int nfsrv_nfsuserd;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/nfsclient/nfs_clbio.c
--- a/head/sys/fs/nfsclient/nfs_clbio.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/nfsclient/nfs_clbio.c Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/nfsclient/nfs_clbio.c 237987 2012-07-02 09=
:53:08Z kib $");
+__FBSDID("$FreeBSD: head/sys/fs/nfsclient/nfs_clbio.c 239065 2012-08-05 14=
:11:42Z kib $");
=20
#include "opt_kdtrace.h"
=20
@@ -47,6 +47,7 @@
#include <sys/vnode.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_extern.h>
#include <vm/vm_page.h>
#include <vm/vm_object.h>
@@ -223,36 +224,8 @@
*/
;
}
- if (i !=3D ap->a_reqpage) {
- /*
- * Whether or not to leave the page activated is up in
- * the air, but we should put the page on a page queue
- * somewhere (it already is in the object). Result:
- * It appears that emperical results show that
- * deactivating pages is best.
- */
-
- /*
- * Just in case someone was asking for this page we
- * now tell them that it is ok to use.
- */
- if (!error) {
- if (m->oflags & VPO_WANTED) {
- vm_page_lock(m);
- vm_page_activate(m);
- vm_page_unlock(m);
- } else {
- vm_page_lock(m);
- vm_page_deactivate(m);
- vm_page_unlock(m);
- }
- vm_page_wakeup(m);
- } else {
- vm_page_lock(m);
- vm_page_free(m);
- vm_page_unlock(m);
- }
- }
+ if (i !=3D ap->a_reqpage)
+ vm_page_readahead_finish(m, error);
}
VM_OBJECT_UNLOCK(object);
return (0);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/nwfs/nwfs_io.c
--- a/head/sys/fs/nwfs/nwfs_io.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/nwfs/nwfs_io.c Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/fs/nwfs/nwfs_io.c 228156 2011-11-30 17:39:00Z kib $
+ * $FreeBSD: head/sys/fs/nwfs/nwfs_io.c 239065 2012-08-05 14:11:42Z kib $
*
*/
#include <sys/param.h>
@@ -38,6 +38,7 @@
#include <sys/sysctl.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_page.h>
#include <vm/vm_extern.h>
#include <vm/vm_object.h>
@@ -457,36 +458,8 @@
("nwfs_getpages: page %p is dirty", m));
}
=20
- if (i !=3D ap->a_reqpage) {
- /*
- * Whether or not to leave the page activated is up in
- * the air, but we should put the page on a page queue
- * somewhere (it already is in the object). Result:
- * It appears that emperical results show that
- * deactivating pages is best.
- */
-
- /*
- * Just in case someone was asking for this page we
- * now tell them that it is ok to use.
- */
- if (!error) {
- if (m->oflags & VPO_WANTED) {
- vm_page_lock(m);
- vm_page_activate(m);
- vm_page_unlock(m);
- } else {
- vm_page_lock(m);
- vm_page_deactivate(m);
- vm_page_unlock(m);
- }
- vm_page_wakeup(m);
- } else {
- vm_page_lock(m);
- vm_page_free(m);
- vm_page_unlock(m);
- }
- }
+ if (i !=3D ap->a_reqpage)
+ vm_page_readahead_finish(m, error);
}
VM_OBJECT_UNLOCK(object);
return 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/smbfs/smbfs_io.c
--- a/head/sys/fs/smbfs/smbfs_io.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/smbfs/smbfs_io.c Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/fs/smbfs/smbfs_io.c 228156 2011-11-30 17:39:00Z kib $
+ * $FreeBSD: head/sys/fs/smbfs/smbfs_io.c 239065 2012-08-05 14:11:42Z kib $
*
*/
#include <sys/param.h>
@@ -41,6 +41,7 @@
#include <sys/vmmeter.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_page.h>
#include <vm/vm_extern.h>
#include <vm/vm_object.h>
@@ -521,36 +522,8 @@
;
}
=20
- if (i !=3D reqpage) {
- /*
- * Whether or not to leave the page activated is up in
- * the air, but we should put the page on a page queue
- * somewhere (it already is in the object). Result:
- * It appears that emperical results show that
- * deactivating pages is best.
- */
-
- /*
- * Just in case someone was asking for this page we
- * now tell them that it is ok to use.
- */
- if (!error) {
- if (m->oflags & VPO_WANTED) {
- vm_page_lock(m);
- vm_page_activate(m);
- vm_page_unlock(m);
- } else {
- vm_page_lock(m);
- vm_page_deactivate(m);
- vm_page_unlock(m);
- }
- vm_page_wakeup(m);
- } else {
- vm_page_lock(m);
- vm_page_free(m);
- vm_page_unlock(m);
- }
- }
+ if (i !=3D reqpage)
+ vm_page_readahead_finish(m, error);
}
VM_OBJECT_UNLOCK(object);
return 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/tmpfs/tmpfs_subr.c
--- a/head/sys/fs/tmpfs/tmpfs_subr.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/tmpfs/tmpfs_subr.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
* Efficient memory file system supporting functions.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_subr.c 234422 2012-04-18 15:22=
:08Z jh $");
+__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_subr.c 239065 2012-08-05 14:11=
:42Z kib $");
=20
#include <sys/param.h>
#include <sys/namei.h>
@@ -47,6 +47,7 @@
#include <sys/vmmeter.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/tmpfs/tmpfs_vnops.c
--- a/head/sys/fs/tmpfs/tmpfs_vnops.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/tmpfs/tmpfs_vnops.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
* tmpfs vnode interface.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_vnops.c 234607 2012-04-23 14:1=
0:34Z trasz $");
+__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_vnops.c 239065 2012-08-05 14:1=
1:42Z kib $");
=20
#include <sys/param.h>
#include <sys/fcntl.h>
@@ -51,6 +51,7 @@
#include <sys/vnode.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pager.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/gate/g_gate.c
--- a/head/sys/geom/gate/g_gate.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/gate/g_gate.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/gate/g_gate.c 238119 2012-07-04 20:16:28=
Z pjd $");
+__FBSDID("$FreeBSD: head/sys/geom/gate/g_gate.c 239131 2012-08-07 18:50:33=
Z trociny $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -398,7 +398,9 @@
sc =3D gp->softc;
if (sc =3D=3D NULL || pp !=3D NULL || cp !=3D NULL)
return;
- g_gate_hold(sc->sc_unit, NULL);
+ sc =3D g_gate_hold(sc->sc_unit, NULL);
+ if (sc =3D=3D NULL)
+ return;
if ((sc->sc_flags & G_GATE_FLAG_READONLY) !=3D 0) {
sbuf_printf(sb, "%s<access>%s</access>\n", indent, "read-only");
} else if ((sc->sc_flags & G_GATE_FLAG_WRITEONLY) !=3D 0) {
@@ -470,31 +472,6 @@
return (EINVAL);
}
=20
- g_topology_lock();
-
- if (ggio->gctl_readprov[0] =3D=3D '\0') {
- ropp =3D NULL;
- } else {
- ropp =3D g_provider_by_name(ggio->gctl_readprov);
- if (ropp =3D=3D NULL) {
- g_topology_unlock();
- G_GATE_DEBUG(1, "Provider %s doesn't exist.",
- ggio->gctl_readprov);
- return (EINVAL);
- }
- if ((ggio->gctl_readoffset % ggio->gctl_sectorsize) !=3D 0) {
- g_topology_unlock();
- G_GATE_DEBUG(1, "Invalid read offset.");
- return (EINVAL);
- }
- if (ggio->gctl_mediasize + ggio->gctl_readoffset >
- ropp->mediasize) {
- g_topology_unlock();
- G_GATE_DEBUG(1, "Invalid read offset or media size.");
- return (EINVAL);
- }
- }
-
sc =3D malloc(sizeof(*sc), M_GATE, M_WAITOK | M_ZERO);
sc->sc_flags =3D (ggio->gctl_flags & G_GATE_USERFLAGS);
strlcpy(sc->sc_info, ggio->gctl_info, sizeof(sc->sc_info));
@@ -509,6 +486,55 @@
sc->sc_timeout =3D ggio->gctl_timeout;
callout_init(&sc->sc_callout, CALLOUT_MPSAFE);
=20
+ mtx_lock(&g_gate_units_lock);
+ sc->sc_unit =3D g_gate_getunit(ggio->gctl_unit, &error);
+ if (sc->sc_unit < 0)
+ goto fail1;
+ if (ggio->gctl_unit =3D=3D G_GATE_NAME_GIVEN)
+ snprintf(name, sizeof(name), "%s", ggio->gctl_name);
+ else {
+ snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME,
+ sc->sc_unit);
+ }
+ /* Check for name collision. */
+ for (unit =3D 0; unit < g_gate_maxunits; unit++) {
+ if (g_gate_units[unit] =3D=3D NULL)
+ continue;
+ if (strcmp(name, g_gate_units[unit]->sc_name) !=3D 0)
+ continue;
+ error =3D EEXIST;
+ goto fail1;
+ }
+ sc->sc_name =3D name;
+ g_gate_units[sc->sc_unit] =3D sc;
+ g_gate_nunits++;
+ mtx_unlock(&g_gate_units_lock);
+
+ g_topology_lock();
+
+ if (ggio->gctl_readprov[0] =3D=3D '\0') {
+ ropp =3D NULL;
+ } else {
+ ropp =3D g_provider_by_name(ggio->gctl_readprov);
+ if (ropp =3D=3D NULL) {
+ G_GATE_DEBUG(1, "Provider %s doesn't exist.",
+ ggio->gctl_readprov);
+ error =3D EINVAL;
+ goto fail2;
+ }
+ if ((ggio->gctl_readoffset % ggio->gctl_sectorsize) !=3D 0) {
+ G_GATE_DEBUG(1, "Invalid read offset.");
+ error =3D EINVAL;
+ goto fail2;
+ }
+ if (ggio->gctl_mediasize + ggio->gctl_readoffset >
+ ropp->mediasize) {
+ G_GATE_DEBUG(1, "Invalid read offset or media size.");
+ error =3D EINVAL;
+ goto fail2;
+ }
+ }
+
gp =3D g_new_geomf(&g_gate_class, "%s", name);
gp->start =3D g_gate_start;
gp->access =3D g_gate_access;
@@ -521,70 +547,18 @@
error =3D g_attach(cp, ropp);
if (error !=3D 0) {
G_GATE_DEBUG(1, "Unable to attach to %s.", ropp->name);
- } else {
- error =3D g_access(cp, 1, 0, 0);
- if (error !=3D 0) {
- G_GATE_DEBUG(1, "Unable to access %s.",
- ropp->name);
- g_detach(cp);
- }
+ goto fail3;
}
+ error =3D g_access(cp, 1, 0, 0);
if (error !=3D 0) {
- g_destroy_consumer(cp);
- g_destroy_geom(gp);
- g_topology_unlock();
- mtx_destroy(&sc->sc_queue_mtx);
- free(sc, M_GATE);
- return (error);
+ G_GATE_DEBUG(1, "Unable to access %s.", ropp->name);
+ g_detach(cp);
+ goto fail3;
}
sc->sc_readcons =3D cp;
sc->sc_readoffset =3D ggio->gctl_readoffset;
}
=20
- mtx_lock(&g_gate_units_lock);
- sc->sc_unit =3D g_gate_getunit(ggio->gctl_unit, &error);
- if (sc->sc_unit < 0) {
- mtx_unlock(&g_gate_units_lock);
- if (sc->sc_readcons !=3D NULL) {
- (void)g_access(sc->sc_readcons, -1, 0, 0);
- g_detach(sc->sc_readcons);
- g_destroy_consumer(sc->sc_readcons);
- }
- g_destroy_geom(gp);
- g_topology_unlock();
- mtx_destroy(&sc->sc_queue_mtx);
- free(sc, M_GATE);
- return (error);
- }
- if (ggio->gctl_unit =3D=3D G_GATE_NAME_GIVEN)
- snprintf(name, sizeof(name), "%s", ggio->gctl_name);
- else {
- snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME,
- sc->sc_unit);
- }
- /* Check for name collision. */
- for (unit =3D 0; unit < g_gate_maxunits; unit++) {
- if (g_gate_units[unit] =3D=3D NULL)
- continue;
- if (strcmp(name, g_gate_units[unit]->sc_name) !=3D 0)
- continue;
- mtx_unlock(&g_gate_units_lock);
- if (sc->sc_readcons !=3D NULL) {
- (void)g_access(sc->sc_readcons, -1, 0, 0);
- g_detach(sc->sc_readcons);
- g_destroy_consumer(sc->sc_readcons);
- }
- g_destroy_geom(gp);
- g_topology_unlock();
- mtx_destroy(&sc->sc_queue_mtx);
- free(sc, M_GATE);
- return (EEXIST);
- }
- sc->sc_name =3D name;
- g_gate_units[sc->sc_unit] =3D sc;
- g_gate_nunits++;
- mtx_unlock(&g_gate_units_lock);
-
ggio->gctl_unit =3D sc->sc_unit;
=20
pp =3D g_new_providerf(gp, "%s", name);
@@ -604,6 +578,20 @@
g_gate_guard, sc);
}
return (0);
+fail3:
+ g_destroy_consumer(cp);
+ g_destroy_geom(gp);
+fail2:
+ g_topology_unlock();
+ mtx_lock(&g_gate_units_lock);
+ g_gate_units[sc->sc_unit] =3D NULL;
+ KASSERT(g_gate_nunits > 0, ("negative g_gate_nunits?"));
+ g_gate_nunits--;
+fail1:
+ mtx_unlock(&g_gate_units_lock);
+ mtx_destroy(&sc->sc_queue_mtx);
+ free(sc, M_GATE);
+ return (error);
}
=20
static int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom.h
--- a/head/sys/geom/geom.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom.h Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/geom/geom.h 238559 2012-07-17 22:16:10Z ken $
+ * $FreeBSD: head/sys/geom/geom.h 238886 2012-07-29 11:51:48Z mav $
*/
=20
#ifndef _GEOM_GEOM_H_
@@ -174,7 +174,9 @@
struct g_provider *provider;
LIST_ENTRY(g_consumer) consumers; /* XXX: better name */
int acr, acw, ace;
- int spoiled;
+ int flags;
+#define G_CF_SPOILED 0x1
+#define G_CF_ORPHAN 0x4
struct devstat *stat;
u_int nstart, nend;
=20
@@ -247,6 +249,8 @@
int g_waitfor_event(g_event_t *func, void *arg, int flag, ...);
void g_cancel_event(void *ref);
int g_attr_changed(struct g_provider *pp, const char *attr, int flag);
+int g_media_changed(struct g_provider *pp, int flag);
+int g_media_gone(struct g_provider *pp, int flag);
void g_orphan_provider(struct g_provider *pp, int error);
void g_waitidlelock(void);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_dev.c
--- a/head/sys/geom/geom_dev.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_dev.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_dev.c 238171 2012-07-06 15:46:38Z t=
rasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_dev.c 238886 2012-07-29 11:51:48Z m=
av $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -43,6 +43,7 @@
#include <sys/conf.h>
#include <sys/ctype.h>
#include <sys/bio.h>
+#include <sys/bus.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
@@ -105,6 +106,21 @@
static void
g_dev_attrchanged(struct g_consumer *cp, const char *attr)
{
+ struct cdev *dev;
+ char buf[SPECNAMELEN + 6];
+
+ if (strcmp(attr, "GEOM::media") =3D=3D 0) {
+ dev =3D cp->geom->softc;
+ snprintf(buf, sizeof(buf), "cdev=3D%s", dev->si_name);
+ devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf, M_WAITOK);
+ dev =3D cp->cp_alias_dev;
+ if (dev !=3D NULL) {
+ snprintf(buf, sizeof(buf), "cdev=3D%s", dev->si_name);
+ devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf,
+ M_WAITOK);
+ }
+ return;
+ }
=20
if (strcmp(attr, "GEOM::physpath") !=3D 0)
return;
@@ -119,7 +135,6 @@
g_io_getattr("GEOM::physpath", cp, &physpath_len, physpath);
g_access(cp, -1, 0, 0);
if (error =3D=3D 0 && strlen(physpath) !=3D 0) {
- struct cdev *dev;
struct cdev *old_alias_dev;
struct cdev **alias_devp;
=20
@@ -161,9 +176,6 @@
=20
g_trace(G_T_TOPOLOGY, "dev_taste(%s,%s)", mp->name, pp->name);
g_topology_assert();
- LIST_FOREACH(cp, &pp->consumers, consumers)
- if (cp->geom->class =3D=3D mp)
- return (NULL);
gp =3D g_new_geomf(mp, pp->name);
cp =3D g_new_consumer(gp);
error =3D g_attach(cp, pp);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_disk.c
--- a/head/sys/geom/geom_disk.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_disk.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 238216 2012-07-07 21:28:31Z =
trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 238886 2012-07-29 11:51:48Z =
mav $");
=20
#include "opt_geom.h"
=20
@@ -660,6 +660,32 @@
}
=20
void
+disk_media_changed(struct disk *dp, int flag)
+{
+ struct g_geom *gp;
+ struct g_provider *pp;
+
+ gp =3D dp->d_geom;
+ if (gp !=3D NULL) {
+ LIST_FOREACH(pp, &gp->provider, provider)
+ g_media_changed(pp, flag);
+ }
+}
+
+void
+disk_media_gone(struct disk *dp, int flag)
+{
+ struct g_geom *gp;
+ struct g_provider *pp;
+
+ gp =3D dp->d_geom;
+ if (gp !=3D NULL) {
+ LIST_FOREACH(pp, &gp->provider, provider)
+ g_media_gone(pp, flag);
+ }
+}
+
+void
disk_resize(struct disk *dp)
{
struct g_geom *gp;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_disk.h
--- a/head/sys/geom/geom_disk.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_disk.h Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/geom/geom_disk.h 238216 2012-07-07 21:28:31Z trasz $
+ * $FreeBSD: head/sys/geom/geom_disk.h 238886 2012-07-29 11:51:48Z mav $
*/
=20
#ifndef _GEOM_GEOM_DISK_H_
@@ -109,6 +109,8 @@
void disk_destroy(struct disk *disk);
void disk_gone(struct disk *disk);
void disk_attr_changed(struct disk *dp, const char *attr, int flag);
+void disk_media_changed(struct disk *dp, int flag);
+void disk_media_gone(struct disk *dp, int flag);
void disk_resize(struct disk *dp);
=20
#define DISK_VERSION_00 0x58561059
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_event.c
--- a/head/sys/geom/geom_event.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_event.c Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_event.c 226985 2011-11-01 08:57:49Z=
mav $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_event.c 238886 2012-07-29 11:51:48Z=
mav $");
=20
#include <sys/param.h>
#include <sys/malloc.h>
@@ -202,14 +202,12 @@
* Tell all consumers the bad news.
* Don't be surprised if they self-destruct.
*/
- cp =3D LIST_FIRST(&pp->consumers);
- while (cp !=3D NULL) {
- cp2 =3D LIST_NEXT(cp, consumers);
+ LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) {
KASSERT(cp->geom->orphan !=3D NULL,
("geom %s has no orphan, class %s",
cp->geom->name, cp->geom->class->name));
+ cp->flags |=3D G_CF_ORPHAN;
cp->geom->orphan(cp);
- cp =3D cp2;
}
if (LIST_EMPTY(&pp->consumers) && wf)
g_destroy_provider(pp);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_io.c
--- a/head/sys/geom/geom_io.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_io.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/geom/geom_io.c 239132 2012-08-07 20:16:10Z ji=
mharris $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -177,6 +177,12 @@
if (bp2 !=3D NULL) {
bp2->bio_parent =3D bp;
bp2->bio_cmd =3D bp->bio_cmd;
+ /*
+ * BIO_ORDERED flag may be used by disk drivers to enforce
+ * ordering restrictions, so this flag needs to be cloned.
+ * Other bio flags are not suitable for cloning.
+ */
+ bp2->bio_flags =3D bp->bio_flags & BIO_ORDERED;
bp2->bio_length =3D bp->bio_length;
bp2->bio_offset =3D bp->bio_offset;
bp2->bio_data =3D bp->bio_data;
@@ -305,6 +311,8 @@
/* if provider is marked for error, don't disturb. */
if (pp->error)
return (pp->error);
+ if (cp->flags & G_CF_ORPHAN)
+ return (ENXIO);
=20
switch(bp->bio_cmd) {
case BIO_READ:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_slice.c
--- a/head/sys/geom/geom_slice.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_slice.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_slice.c 238198 2012-07-07 17:09:44Z=
trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_slice.c 238886 2012-07-29 11:51:48Z=
mav $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -466,6 +466,7 @@
g_topology_assert();
gp =3D cp->geom;
g_trace(G_T_TOPOLOGY, "g_slice_spoiled(%p/%s)", cp, gp->name);
+ cp->flags |=3D G_CF_ORPHAN;
gsp =3D gp->softc;
gp->softc =3D NULL;
g_slice_free(gsp);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_subr.c
--- a/head/sys/geom/geom_subr.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_subr.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_subr.c 238565 2012-07-18 07:26:20Z =
trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_subr.c 238886 2012-07-29 11:51:48Z =
mav $");
=20
#include "opt_ddb.h"
=20
@@ -262,10 +262,11 @@
static void
g_retaste_event(void *arg, int flag)
{
- struct g_class *cp, *mp;
- struct g_geom *gp, *gp2;
+ struct g_class *mp, *mp2;
+ struct g_geom *gp;
struct g_hh00 *hh;
struct g_provider *pp;
+ struct g_consumer *cp;
=20
g_topology_assert();
if (flag =3D=3D EV_CANCEL) /* XXX: can't happen ? */
@@ -282,17 +283,20 @@
}
g_trace(G_T_TOPOLOGY, "g_retaste(%s)", mp->name);
=20
- LIST_FOREACH(cp, &g_classes, class) {
- LIST_FOREACH(gp, &cp->geom, geom) {
+ LIST_FOREACH(mp2, &g_classes, class) {
+ LIST_FOREACH(gp, &mp2->geom, geom) {
LIST_FOREACH(pp, &gp->provider, provider) {
if (pp->acr || pp->acw || pp->ace)
continue;
- LIST_FOREACH(gp2, &mp->geom, geom) {
- if (!strcmp(pp->name, gp2->name))
+ LIST_FOREACH(cp, &pp->consumers, consumers) {
+ if (cp->geom->class =3D=3D mp &&
+ (cp->flags & G_CF_ORPHAN) =3D=3D 0)
break;
}
- if (gp2 !=3D NULL)
- g_wither_geom(gp2, ENXIO);
+ if (cp !=3D NULL) {
+ cp->flags |=3D G_CF_ORPHAN;
+ g_wither_geom(cp->geom, ENXIO);
+ }
mp->taste(mp, pp, 0);
g_topology_assert();
}
@@ -534,7 +538,7 @@
{
struct g_class *mp;
struct g_provider *pp;
- struct g_consumer *cp;
+ struct g_consumer *cp, *next_cp;
=20
g_topology_assert();
if (flag =3D=3D EV_CANCEL)
@@ -545,11 +549,17 @@
G_VALID_PROVIDER(pp);
KASSERT(!(pp->flags & G_PF_WITHER),
("g_new_provider_event but withered"));
+ LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, next_cp) {
+ if ((cp->flags & G_CF_ORPHAN) =3D=3D 0 &&
+ cp->geom->attrchanged !=3D NULL)
+ cp->geom->attrchanged(cp, "GEOM::media");
+ }
LIST_FOREACH(mp, &g_classes, class) {
if (mp->taste =3D=3D NULL)
continue;
LIST_FOREACH(cp, &pp->consumers, consumers)
- if (cp->geom->class =3D=3D mp)
+ if (cp->geom->class =3D=3D mp &&
+ (cp->flags & G_CF_ORPHAN) =3D=3D 0)
break;
if (cp !=3D NULL)
continue;
@@ -628,8 +638,10 @@
=20
LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) {
gp =3D cp->geom;
- if (gp->resize =3D=3D NULL && size < pp->mediasize)
+ if (gp->resize =3D=3D NULL && size < pp->mediasize) {
+ cp->flags |=3D G_CF_ORPHAN;
cp->geom->orphan(cp);
+ }
}
=20
pp->mediasize =3D size;
@@ -648,7 +660,8 @@
if (mp->taste =3D=3D NULL)
continue;
LIST_FOREACH(cp, &pp->consumers, consumers)
- if (cp->geom->class =3D=3D mp)
+ if (cp->geom->class =3D=3D mp &&
+ (cp->flags & G_CF_ORPHAN) =3D=3D 0)
break;
if (cp !=3D NULL)
continue;
@@ -867,7 +880,7 @@
* are probably just ahead of the event telling us that. Fail
* now rather than having to unravel this later.
*/
- if (cp->geom->spoiled !=3D NULL && cp->spoiled &&
+ if (cp->geom->spoiled !=3D NULL && (cp->flags & G_CF_SPOILED) &&
(dcr > 0 || dcw > 0 || dce > 0))
return (ENXIO);
=20
@@ -1017,6 +1030,7 @@
g_topology_assert();
G_VALID_CONSUMER(cp);
g_trace(G_T_TOPOLOGY, "g_std_spoiled(%p)", cp);
+ cp->flags |=3D G_CF_ORPHAN;
g_detach(cp);
gp =3D cp->geom;
LIST_FOREACH(pp, &gp->provider, provider)
@@ -1052,9 +1066,9 @@
G_VALID_PROVIDER(pp);
for (cp =3D LIST_FIRST(&pp->consumers); cp !=3D NULL; cp =3D cp2) {
cp2 =3D LIST_NEXT(cp, consumers);
- if (!cp->spoiled)
+ if ((cp->flags & G_CF_SPOILED) =3D=3D 0)
continue;
- cp->spoiled =3D 0;
+ cp->flags &=3D ~G_CF_SPOILED;
if (cp->geom->spoiled =3D=3D NULL)
continue;
cp->geom->spoiled(cp);
@@ -1079,11 +1093,54 @@
KASSERT(cp2->acw =3D=3D 0, ("spoiling cp->acw =3D %d", cp2->acw));
*/
KASSERT(cp2->ace =3D=3D 0, ("spoiling cp->ace =3D %d", cp2->ace));
- cp2->spoiled++;
+ cp2->flags |=3D G_CF_SPOILED;
}
g_post_event(g_spoil_event, pp, M_WAITOK, pp, NULL);
}
=20
+static void
+g_media_changed_event(void *arg, int flag)
+{
+ struct g_provider *pp;
+ int retaste;
+
+ g_topology_assert();
+ if (flag =3D=3D EV_CANCEL)
+ return;
+ pp =3D arg;
+ G_VALID_PROVIDER(pp);
+
+ /*
+ * If provider was not open for writing, queue retaste after spoiling.
+ * If it was, retaste will happen automatically on close.
+ */
+ retaste =3D (pp->acw =3D=3D 0 && pp->error =3D=3D 0 &&
+ !(pp->geom->flags & G_GEOM_WITHER));
+ g_spoil_event(arg, flag);
+ if (retaste)
+ g_post_event(g_new_provider_event, pp, M_WAITOK, pp, NULL);
+}
+
+int
+g_media_changed(struct g_provider *pp, int flag)
+{
+ struct g_consumer *cp;
+
+ LIST_FOREACH(cp, &pp->consumers, consumers)
+ cp->flags |=3D G_CF_SPOILED;
+ return (g_post_event(g_media_changed_event, pp, flag, pp, NULL));
+}
+
+int
+g_media_gone(struct g_provider *pp, int flag)
+{
+ struct g_consumer *cp;
+
+ LIST_FOREACH(cp, &pp->consumers, consumers)
+ cp->flags |=3D G_CF_SPOILED;
+ return (g_post_event(g_spoil_event, pp, flag, pp, NULL));
+}
+
int
g_getattr__(const char *attr, struct g_consumer *cp, void *var, int len)
{
@@ -1239,15 +1296,15 @@
cp->provider);
}
gprintln(" access: r%dw%de%d", cp->acr, cp->acw, cp->ace);
- gprintln(" spoiled: %d", cp->spoiled);
+ gprintln(" flags: 0x%04x", cp->flags);
gprintln(" nstart: %u", cp->nstart);
gprintln(" nend: %u", cp->nend);
} else {
gprintf("consumer: %p (%s), access=3Dr%dw%de%d", cp,
cp->provider !=3D NULL ? cp->provider->name : "none",
cp->acr, cp->acw, cp->ace);
- if (cp->spoiled)
- db_printf(", spoiled=3D%d", cp->spoiled);
+ if (cp->flags)
+ db_printf(", flags=3D0x%04x", cp->flags);
db_printf("\n");
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_vfs.c
--- a/head/sys/geom/geom_vfs.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_vfs.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_vfs.c 234026 2012-04-08 06:20:21Z m=
ckusick $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_vfs.c 238892 2012-07-29 20:04:09Z m=
av $");
=20
#include <sys/param.h>
#include <sys/systm.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/multipath/g_multipath.c
--- a/head/sys/geom/multipath/g_multipath.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/multipath/g_multipath.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/multipath/g_multipath.c 236619 2012-06-0=
5 16:46:34Z mav $");
+__FBSDID("$FreeBSD: head/sys/geom/multipath/g_multipath.c 239012 2012-08-0=
3 14:55:35Z thomas $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
@@ -849,6 +849,78 @@
}
=20
static void
+g_multipath_ctl_prefer(struct gctl_req *req, struct g_class *mp)
+{
+ struct g_geom *gp;
+ struct g_multipath_softc *sc;
+ struct g_consumer *cp;
+ const char *name, *mpname;
+ static const char devpf[6] =3D "/dev/";
+ int *nargs;
+
+ g_topology_assert();
+
+ mpname =3D gctl_get_asciiparam(req, "arg0");
+ if (mpname =3D=3D NULL) {
+ gctl_error(req, "No 'arg0' argument");
+ return;
+ }
+ gp =3D g_multipath_find_geom(mp, mpname);
+ if (gp =3D=3D NULL) {
+ gctl_error(req, "Device %s is invalid", mpname);
+ return;
+ }
+ sc =3D gp->softc;
+
+ nargs =3D gctl_get_paraml(req, "nargs", sizeof(*nargs));
+ if (nargs =3D=3D NULL) {
+ gctl_error(req, "No 'nargs' argument");
+ return;
+ }
+ if (*nargs !=3D 2) {
+ gctl_error(req, "missing device");
+ return;
+ }
+
+ name =3D gctl_get_asciiparam(req, "arg1");
+ if (name =3D=3D NULL) {
+ gctl_error(req, "No 'arg1' argument");
+ return;
+ }
+ if (strncmp(name, devpf, 5) =3D=3D 0) {
+ name +=3D 5;
+ }
+
+ LIST_FOREACH(cp, &gp->consumer, consumer) {
+ if (cp->provider !=3D NULL
+ && strcmp(cp->provider->name, name) =3D=3D 0)
+ break;
+ }
+
+ if (cp =3D=3D NULL) {
+ gctl_error(req, "Provider %s not found", name);
+ return;
+ }
+
+ mtx_lock(&sc->sc_mtx);
+
+ if (cp->index & MP_BAD) {
+ gctl_error(req, "Consumer %s is invalid", name);
+ mtx_unlock(&sc->sc_mtx);
+ return;
+ }
+
+ /* Here when the consumer is present and in good shape */
+
+ sc->sc_active =3D cp;
+ if (!sc->sc_active_active)
+ printf("GEOM_MULTIPATH: %s now active path in %s\n",
+ sc->sc_active->provider->name, sc->sc_name);
+
+ mtx_unlock(&sc->sc_mtx);
+}
+
+static void
g_multipath_ctl_add(struct gctl_req *req, struct g_class *mp)
{
struct g_multipath_softc *sc;
@@ -1278,6 +1350,8 @@
gctl_error(req, "Userland and kernel parts are out of sync");
} else if (strcmp(verb, "add") =3D=3D 0) {
g_multipath_ctl_add(req, mp);
+ } else if (strcmp(verb, "prefer") =3D=3D 0) {
+ g_multipath_ctl_prefer(req, mp);
} else if (strcmp(verb, "create") =3D=3D 0) {
g_multipath_ctl_create(req, mp);
} else if (strcmp(verb, "configure") =3D=3D 0) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/part/g_part.c
--- a/head/sys/geom/part/g_part.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/part/g_part.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/part/g_part.c 238657 2012-07-20 17:51:20=
Z trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/part/g_part.c 238886 2012-07-29 11:51:48=
Z mav $");
=20
#include <sys/param.h>
#include <sys/bio.h>
@@ -2055,6 +2055,7 @@
G_PART_TRACE((G_T_TOPOLOGY, "%s(%s)", __func__, cp->provider->name));
g_topology_assert();
=20
+ cp->flags |=3D G_CF_ORPHAN;
g_part_wither(cp->geom, ENXIO);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/virstor/g_virstor.c
--- a/head/sys/geom/virstor/g_virstor.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/virstor/g_virstor.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/virstor/g_virstor.c 227309 2011-11-07 15=
:43:11Z ed $");
+__FBSDID("$FreeBSD: head/sys/geom/virstor/g_virstor.c 239021 2012-08-03 20=
:24:16Z jimharris $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -235,6 +235,12 @@
return;
}
sc =3D virstor_find_geom(cp, name);
+ if (sc =3D=3D NULL) {
+ gctl_error(req, "Don't know anything about '%s'", name);
+ g_topology_unlock();
+ return;
+ }
+
LOG_MSG(LVL_INFO, "Stopping %s by the userland command",
sc->geom->name);
update_metadata(sc);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/gnu/fs/reiserfs/reiserfs_vfso=
ps.c
--- a/head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c Fri Aug 10 14:19:25 2012 +=
0300
@@ -4,7 +4,7 @@
*=20
* Ported to FreeBSD by Jean-S=C3=A9bastien P=C3=A9dron <jspedron at club-int=
ernet.fr>
*=20
- * $FreeBSD: head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c 233575 2012-03-27 =
20:36:03Z dumbbell $
+ * $FreeBSD: head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c 238980 2012-08-01 =
23:05:57Z avatar $
*/
=20
#include <gnu/fs/reiserfs/reiserfs_fs.h>
@@ -227,7 +227,7 @@
=20
DROP_GIANT();
g_topology_lock();
- g_wither_geom_close(rmp->rm_cp->geom, ENXIO);
+ g_vfs_close(rmp->rm_cp);
g_topology_unlock();
PICKUP_GIANT();
vrele(rmp->rm_devvp);
@@ -611,7 +611,7 @@
if (cp !=3D NULL) {
DROP_GIANT();
g_topology_lock();
- g_wither_geom_close(cp->geom, ENXIO);
+ g_vfs_close(cp);
g_topology_unlock();
PICKUP_GIANT();
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/machdep.c
--- a/head/sys/i386/i386/machdep.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/machdep.c Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/machdep.c 238310 2012-07-09 20:42:0=
8Z jhb $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/machdep.c 238792 2012-07-26 09:11:3=
7Z kib $");
=20
#include "opt_apic.h"
#include "opt_atalk.h"
@@ -1606,7 +1606,7 @@
pcb->pcb_dr3 =3D 0;
pcb->pcb_dr6 =3D 0;
pcb->pcb_dr7 =3D 0;
- if (pcb =3D=3D PCPU_GET(curpcb)) {
+ if (pcb =3D=3D curpcb) {
/*
* Clear the debug registers on the running
* CPU, otherwise they will end up affecting
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/pmap.c
--- a/head/sys/i386/i386/pmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/pmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -75,7 +75,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/pmap.c 237623 2012-06-27 03:45:25Z =
alc $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/pmap.c 238792 2012-07-26 09:11:37Z =
kib $");
=20
/*
* Manages physical address maps.
@@ -1962,7 +1962,7 @@
(*ipi_lazypmap_counts[PCPU_GET(cpuid)])++;
#endif
if (rcr3() =3D=3D lazyptd)
- load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+ load_cr3(curpcb->pcb_cr3);
CPU_CLR_ATOMIC(PCPU_GET(cpuid), lazymask);
atomic_store_rel_int(&lazywait, 1);
}
@@ -1972,7 +1972,7 @@
{
=20
if (rcr3() =3D=3D lazyptd)
- load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+ load_cr3(curpcb->pcb_cr3);
CPU_CLR_ATOMIC(cpuid, lazymask);
}
=20
@@ -2039,7 +2039,7 @@
=20
cr3 =3D vtophys(pmap->pm_pdir);
if (cr3 =3D=3D rcr3()) {
- load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+ load_cr3(curpcb->pcb_cr3);
CPU_CLR(PCPU_GET(cpuid), &pmap->pm_active);
}
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/trap.c
--- a/head/sys/i386/i386/trap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/trap.c Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/trap.c 238678 2012-07-21 21:52:48Z =
kib $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/trap.c 238792 2012-07-26 09:11:37Z =
kib $");
=20
/*
* 386 Trap and System call handling
@@ -344,7 +344,7 @@
=20
if ((ISPL(frame->tf_cs) =3D=3D SEL_UPL) ||
((frame->tf_eflags & PSL_VM) &&=20
- !(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL))) {
+ !(curpcb->pcb_flags & PCB_VM86CALL))) {
/* user trap */
=20
td->td_pticks =3D 0;
@@ -593,7 +593,7 @@
/* FALL THROUGH */
=20
case T_SEGNPFLT: /* segment not present fault */
- if (PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL)
+ if (curpcb->pcb_flags & PCB_VM86CALL)
break;
=20
/*
@@ -606,7 +606,7 @@
* a signal.
*/
if (frame->tf_eip =3D=3D (int)cpu_switch_load_gs) {
- PCPU_GET(curpcb)->pcb_gs =3D 0;
+ curpcb->pcb_gs =3D 0;
#if 0 =09
PROC_LOCK(p);
kern_psignal(p, SIGBUS);
@@ -644,9 +644,9 @@
frame->tf_eip =3D (int)doreti_popl_fs_fault;
goto out;
}
- if (PCPU_GET(curpcb)->pcb_onfault !=3D NULL) {
+ if (curpcb->pcb_onfault !=3D NULL) {
frame->tf_eip =3D
- (int)PCPU_GET(curpcb)->pcb_onfault;
+ (int)curpcb->pcb_onfault;
goto out;
}
break;
@@ -696,7 +696,7 @@
* debugging the kernel.
*/
if (user_dbreg_trap() &&=20
- !(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL)) {
+ !(curpcb->pcb_flags & PCB_VM86CALL)) {
/*
* Reset breakpoint bits because the
* processor doesn't
@@ -877,7 +877,7 @@
* it normally, and panic immediately.
*/
if (!usermode && (td->td_intr_nesting_level !=3D 0 ||
- PCPU_GET(curpcb)->pcb_onfault =3D=3D NULL)) {
+ curpcb->pcb_onfault =3D=3D NULL)) {
trap_fatal(frame, eva);
return (-1);
}
@@ -935,8 +935,8 @@
nogo:
if (!usermode) {
if (td->td_intr_nesting_level =3D=3D 0 &&
- PCPU_GET(curpcb)->pcb_onfault !=3D NULL) {
- frame->tf_eip =3D (int)PCPU_GET(curpcb)->pcb_onfault;
+ curpcb->pcb_onfault !=3D NULL) {
+ frame->tf_eip =3D (int)curpcb->pcb_onfault;
return (0);
}
trap_fatal(frame, eva);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/vm86.c
--- a/head/sys/i386/i386/vm86.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/vm86.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/vm86.c 237924 2012-07-01 12:59:00Z =
brueffer $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/vm86.c 238792 2012-07-26 09:11:37Z =
kib $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -143,9 +143,9 @@
* the extension is not present. (This check should not be needed,
* as we can't enter vm86 mode until we set up an extension area)
*/
- if (PCPU_GET(curpcb)->pcb_ext =3D=3D 0)
+ if (curpcb->pcb_ext =3D=3D 0)
return (SIGBUS);
- vm86 =3D &PCPU_GET(curpcb)->pcb_ext->ext_vm86;
+ vm86 =3D &curpcb->pcb_ext->ext_vm86;
=20
if (vmf->vmf_eflags & PSL_T)
retcode =3D SIGTRAP;
@@ -535,7 +535,7 @@
vmf->kernel_fs =3D vmf->kernel_es =3D vmf->kernel_ds =3D 0;
vmf->vmf_eflags =3D PSL_VIF | PSL_VM | PSL_USER;
=20
- vm86 =3D &PCPU_GET(curpcb)->pcb_ext->ext_vm86;
+ vm86 =3D &curpcb->pcb_ext->ext_vm86;
if (!vm86->vm86_has_vme)=20
vm86->vm86_eflags =3D vmf->vmf_eflags; /* save VIF, VIP */
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/vm_machdep.c
--- a/head/sys/i386/i386/vm_machdep.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/vm_machdep.c Fri Aug 10 14:19:25 2012 +0300
@@ -41,7 +41,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/vm_machdep.c 223758 2011-07-04 12:0=
4:52Z attilio $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/vm_machdep.c 238792 2012-07-26 09:1=
1:37Z kib $");
=20
#include "opt_isa.h"
#include "opt_npx.h"
@@ -106,6 +106,10 @@
#define NSFBUFS (512 + maxusers * 16)
#endif
=20
+CTASSERT((struct thread **)OFFSETOF_CURTHREAD =3D=3D
+ &((struct pcpu *)NULL)->pc_curthread);
+CTASSERT((struct pcb **)OFFSETOF_CURPCB =3D=3D &((struct pcpu *)NULL)->pc_=
curpcb);
+
static void cpu_reset_real(void);
#ifdef SMP
static void cpu_reset_proxy(void);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/include/cpufunc.h
--- a/head/sys/i386/include/cpufunc.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/include/cpufunc.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/i386/include/cpufunc.h 238311 2012-07-09 20:55:39Z j=
hb $
+ * $FreeBSD: head/sys/i386/include/cpufunc.h 238972 2012-08-01 17:24:53Z k=
ib $
*/
=20
/*
@@ -155,6 +155,13 @@
}
=20
static __inline void
+lfence(void)
+{
+
+ __asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
mfence(void)
{
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/include/pcpu.h
--- a/head/sys/i386/include/pcpu.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/include/pcpu.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: head/sys/i386/include/pcpu.h 238792 2012-07-26 09:11:37Z kib $
*/
=20
#ifndef _MACHINE_PCPU_H_
@@ -236,16 +236,36 @@
#define PCPU_PTR(member) __PCPU_PTR(pc_ ## member)
#define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val)
=20
+#define OFFSETOF_CURTHREAD 0
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnull-dereference"
+#endif
static __inline __pure2 struct thread *
__curthread(void)
{
struct thread *td;
=20
- __asm("movl %%fs:0,%0" : "=3Dr" (td));
+ __asm("movl %%fs:%1,%0" : "=3Dr" (td)
+ : "m" (*(char *)OFFSETOF_CURTHREAD));
return (td);
}
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
#define curthread (__curthread())
=20
+#define OFFSETOF_CURPCB 16
+static __inline __pure2 struct pcb *
+__curpcb(void)
+{
+ struct pcb *pcb;
+
+ __asm("movl %%fs:%1,%0" : "=3Dr" (pcb) : "m" (*(char *)OFFSETOF_CURPCB));
+ return (pcb);
+}
+#define curpcb (__curpcb())
+
#else /* !lint || defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) =
*/
=20
#error "this file needs to be ported to your compiler"
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/isa/npx.c
--- a/head/sys/i386/isa/npx.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/isa/npx.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/isa/npx.c 238678 2012-07-21 21:52:48Z ki=
b $");
+__FBSDID("$FreeBSD: head/sys/i386/isa/npx.c 238914 2012-07-30 19:26:02Z ki=
b $");
=20
#include "opt_cpu.h"
#include "opt_isa.h"
@@ -114,7 +114,7 @@
#ifdef CPU_ENABLE_SSE
void fxsave(caddr_t addr);
void fxrstor(caddr_t addr);
-void stmxcsr(u_int csr);
+void stmxcsr(u_int *csr);
#endif
=20
#endif /* __GNUCLIKE_ASM && !lint */
@@ -378,7 +378,7 @@
=20
critical_enter();
if (curthread =3D=3D PCPU_GET(fpcurthread))
- npxsave(PCPU_GET(curpcb)->pcb_save);
+ npxsave(curpcb->pcb_save);
critical_exit();
#ifdef NPX_DEBUG
if (hw_float) {
@@ -663,7 +663,6 @@
int
npxdna(void)
{
- struct pcb *pcb;
=20
if (!hw_float)
return (0);
@@ -687,25 +686,24 @@
* Record new context early in case frstor causes an IRQ13.
*/
PCPU_SET(fpcurthread, curthread);
- pcb =3D PCPU_GET(curpcb);
=20
#ifdef CPU_ENABLE_SSE
if (cpu_fxsr)
fpu_clean_state();
#endif
=20
- if ((pcb->pcb_flags & PCB_NPXINITDONE) =3D=3D 0) {
+ if ((curpcb->pcb_flags & PCB_NPXINITDONE) =3D=3D 0) {
/*
* This is the first time this thread has used the FPU or
* the PCB doesn't contain a clean FPU state. Explicitly
* load an initial state.
*/
fpurstor(&npx_initialstate);
- if (pcb->pcb_initial_npxcw !=3D __INITIAL_NPXCW__)
- fldcw(pcb->pcb_initial_npxcw);
- pcb->pcb_flags |=3D PCB_NPXINITDONE;
- if (PCB_USER_FPU(pcb))
- pcb->pcb_flags |=3D PCB_NPXUSERINITDONE;
+ if (curpcb->pcb_initial_npxcw !=3D __INITIAL_NPXCW__)
+ fldcw(curpcb->pcb_initial_npxcw);
+ curpcb->pcb_flags |=3D PCB_NPXINITDONE;
+ if (PCB_USER_FPU(curpcb))
+ curpcb->pcb_flags |=3D PCB_NPXUSERINITDONE;
} else {
/*
* The following fpurstor() may cause an IRQ13 when the
@@ -721,7 +719,7 @@
* fnclex if it is the first FPU instruction after a context
* switch.
*/
- fpurstor(pcb->pcb_save);
+ fpurstor(curpcb->pcb_save);
}
critical_exit();
=20
@@ -1099,13 +1097,14 @@
{
struct pcb *pcb;
=20
- pcb =3D PCPU_GET(curpcb);
+ pcb =3D curpcb;
KASSERT((curthread->td_pflags & TDP_KTHREAD) !=3D 0,
("Only kthread may use fpu_kern_thread"));
- KASSERT(pcb->pcb_save =3D=3D &pcb->pcb_user_save, ("mangled pcb_save"));
- KASSERT(PCB_USER_FPU(pcb), ("recursive call"));
+ KASSERT(curpcb->pcb_save =3D=3D &curpcb->pcb_user_save,
+ ("mangled pcb_save"));
+ KASSERT(PCB_USER_FPU(curpcb), ("recursive call"));
=20
- pcb->pcb_flags |=3D PCB_KERNNPX;
+ curpcb->pcb_flags |=3D PCB_KERNNPX;
return (0);
}
=20
@@ -1115,5 +1114,5 @@
=20
if ((curthread->td_pflags & TDP_KTHREAD) =3D=3D 0)
return (0);
- return ((PCPU_GET(curpcb)->pcb_flags & PCB_KERNNPX) !=3D 0);
+ return ((curpcb->pcb_flags & PCB_KERNNPX) !=3D 0);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_proto.h
--- a/head/sys/i386/linux/linux_proto.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_proto.h Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
* System call prototypes.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_proto.h 234360 2012-04-16 23:17:29Z=
jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_proto.h 238918 2012-07-30 20:45:17Z=
jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
*/
=20
#ifndef _LINUX_SYSPROTO_H_
@@ -261,7 +261,7 @@
};
struct linux_lstat_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char up_l_[PADL_(struct ostat *)]; struct ostat * up; char up_r_[PADR_(st=
ruct ostat *)];
+ char up_l_[PADL_(struct l_stat *)]; struct l_stat * up; char up_r_[PADR_(=
struct l_stat *)];
};
struct linux_readlink_args {
char name_l_[PADL_(char *)]; char * name; char name_r_[PADR_(char *)];
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_syscall.h
--- a/head/sys/i386/linux/linux_syscall.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_syscall.h Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
* System call numbers.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_syscall.h 234360 2012-04-16 23:17:2=
9Z jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_syscall.h 238918 2012-07-30 20:45:1=
7Z jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
*/
=20
#define LINUX_SYS_exit 1
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_syscalls.c
--- a/head/sys/i386/linux/linux_syscalls.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_syscalls.c Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
* System call names.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_syscalls.c 234360 2012-04-16 23:17:=
29Z jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_syscalls.c 238918 2012-07-30 20:45:=
17Z jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
*/
=20
const char *linux_syscallnames[] =3D {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_sysent.c
--- a/head/sys/i386/linux/linux_sysent.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_sysent.c Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
* System call switch table.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_sysent.c 234360 2012-04-16 23:17:29=
Z jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_sysent.c 238918 2012-07-30 20:45:17=
Z jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
*/
=20
#include <sys/param.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_systrace_arg=
s.c
--- a/head/sys/i386/linux/linux_systrace_args.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/sys/i386/linux/linux_systrace_args.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -2,7 +2,7 @@
* System call argument to DTrace register array converstion.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_systrace_args.c 234360 2012-04-16 2=
3:17:29Z jkim $
+ * $FreeBSD: head/sys/i386/linux/linux_systrace_args.c 238918 2012-07-30 2=
0:45:17Z jhb $
* This file is part of the DTrace syscall provider.
*/
=20
@@ -570,7 +570,7 @@
case 84: {
struct linux_lstat_args *p =3D params;
uarg[0] =3D (intptr_t) p->path; /* char * */
- uarg[1] =3D (intptr_t) p->up; /* struct ostat * */
+ uarg[1] =3D (intptr_t) p->up; /* struct l_stat * */
*n_args =3D 2;
break;
}
@@ -3192,7 +3192,7 @@
p =3D "char *";
break;
case 1:
- p =3D "struct ostat *";
+ p =3D "struct l_stat *";
break;
default:
break;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/syscalls.master
--- a/head/sys/i386/linux/syscalls.master Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/syscalls.master Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
- $FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z=
jkim $
+ $FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z=
jhb $
=20
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
; System call name/number master file (or rather, slave, from LINUX).
@@ -158,7 +158,7 @@
struct l_old_select_argv *ptr); }
83 AUE_SYMLINK STD { int linux_symlink(char *path, char *to); }
; 84: oldlstat
-84 AUE_LSTAT STD { int linux_lstat(char *path, struct ostat *up); }
+84 AUE_LSTAT STD { int linux_lstat(char *path, struct l_stat *up); }
85 AUE_READLINK STD { int linux_readlink(char *name, char *buf, \
l_int count); }
86 AUE_USELIB STD { int linux_uselib(char *library); }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/xen/pmap.c
--- a/head/sys/i386/xen/pmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/xen/pmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -75,7 +75,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/xen/pmap.c 236534 2012-06-04 03:51:08Z a=
lc $");
+__FBSDID("$FreeBSD: head/sys/i386/xen/pmap.c 239171 2012-08-10 05:47:04Z a=
lc $");
=20
/*
* Manages physical address maps.
@@ -965,9 +965,7 @@
mtx_lock(&PMAP2mutex);
newpf =3D *pde & PG_FRAME;
if ((*PMAP2 & PG_FRAME) !=3D newpf) {
- vm_page_lock_queues();
PT_SET_MA(PADDR2, newpf | PG_V | PG_A | PG_M);
- vm_page_unlock_queues();
CTR3(KTR_PMAP, "pmap_pte: pmap=3D%p va=3D0x%x newpte=3D0x%08x",
pmap, va, (*PMAP2 & 0xffffffff));
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/ia64/ia64/pmap.c
--- a/head/sys/ia64/ia64/pmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/ia64/ia64/pmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -46,7 +46,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/ia64/ia64/pmap.c 238190 2012-07-07 05:17:43Z =
marcel $");
+__FBSDID("$FreeBSD: head/sys/ia64/ia64/pmap.c 239065 2012-08-05 14:11:42Z =
kib $");
=20
#include <sys/param.h>
#include <sys/kernel.h>
@@ -59,6 +59,7 @@
#include <sys/systm.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
#include <vm/vm_object.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_clocksource.c
--- a/head/sys/kern/kern_clocksource.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_clocksource.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_clocksource.c 232919 2012-03-13 10:=
21:08Z mav $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_clocksource.c 239036 2012-08-04 08:=
06:37Z mav $");
=20
/*
* Common routines to manage event timers hardware.
@@ -168,8 +168,8 @@
state =3D DPCPU_PTR(timerstate);
now =3D state->now;
CTR4(KTR_SPARE2, "ipi at %d: now %d.%08x%08x",
- curcpu, now.sec, (unsigned int)(now.frac >> 32),
- (unsigned int)(now.frac & 0xffffffff));
+ curcpu, now.sec, (u_int)(now.frac >> 32),
+ (u_int)(now.frac & 0xffffffff));
done =3D handleevents(&now, 0);
return (done ? FILTER_HANDLED : FILTER_STRAY);
}
@@ -188,8 +188,8 @@
int done, runs;
=20
CTR4(KTR_SPARE2, "handle at %d: now %d.%08x%08x",
- curcpu, now->sec, (unsigned int)(now->frac >> 32),
- (unsigned int)(now->frac & 0xffffffff));
+ curcpu, now->sec, (u_int)(now->frac >> 32),
+ (u_int)(now->frac & 0xffffffff));
done =3D 0;
if (fake) {
frame =3D NULL;
@@ -205,19 +205,21 @@
=20
runs =3D 0;
while (bintime_cmp(now, &state->nexthard, >=3D)) {
- bintime_add(&state->nexthard, &hardperiod);
+ bintime_addx(&state->nexthard, hardperiod.frac);
runs++;
}
- if ((timer->et_flags & ET_FLAGS_PERCPU) =3D=3D 0 &&
- bintime_cmp(&state->nexthard, &nexthard, >))
- nexthard =3D state->nexthard;
- if (runs && fake < 2) {
- hardclock_cnt(runs, usermode);
- done =3D 1;
+ if (runs) {
+ if ((timer->et_flags & ET_FLAGS_PERCPU) =3D=3D 0 &&
+ bintime_cmp(&state->nexthard, &nexthard, >))
+ nexthard =3D state->nexthard;
+ if (fake < 2) {
+ hardclock_cnt(runs, usermode);
+ done =3D 1;
+ }
}
runs =3D 0;
while (bintime_cmp(now, &state->nextstat, >=3D)) {
- bintime_add(&state->nextstat, &statperiod);
+ bintime_addx(&state->nextstat, statperiod.frac);
runs++;
}
if (runs && fake < 2) {
@@ -227,7 +229,7 @@
if (profiling) {
runs =3D 0;
while (bintime_cmp(now, &state->nextprof, >=3D)) {
- bintime_add(&state->nextprof, &profperiod);
+ bintime_addx(&state->nextprof, profperiod.frac);
runs++;
}
if (runs && !fake) {
@@ -330,8 +332,8 @@
*event =3D nexthard;
}
CTR5(KTR_SPARE2, "next at %d: next %d.%08x%08x by %d",
- curcpu, event->sec, (unsigned int)(event->frac >> 32),
- (unsigned int)(event->frac & 0xffffffff), c);
+ curcpu, event->sec, (u_int)(event->frac >> 32),
+ (u_int)(event->frac & 0xffffffff), c);
}
=20
/* Hardware timer callback function. */
@@ -354,17 +356,16 @@
next =3D &state->nexttick;
} else
next =3D &nexttick;
- if (periodic) {
- now =3D *next; /* Ex-next tick time becomes present time. */
- bintime_add(next, &timerperiod); /* Next tick in 1 period. */
- } else {
- binuptime(&now); /* Get present time from hardware. */
- next->sec =3D -1; /* Next tick is not scheduled yet. */
- }
+ binuptime(&now);=20
+ if (periodic) {=20
+ *next =3D now;
+ bintime_addx(next, timerperiod.frac); /* Next tick in 1 period. */
+ } else
+ next->sec =3D -1; /* Next tick is not scheduled yet. */
state->now =3D now;
CTR4(KTR_SPARE2, "intr at %d: now %d.%08x%08x",
- curcpu, now.sec, (unsigned int)(now.frac >> 32),
- (unsigned int)(now.frac & 0xffffffff));
+ curcpu, (int)(now.sec), (u_int)(now.frac >> 32),
+ (u_int)(now.frac & 0xffffffff));
=20
#ifdef SMP
/* Prepare broadcasting to other CPUs for non-per-CPU timers. */
@@ -433,10 +434,10 @@
new.sec =3D 0;
new.frac =3D timerperiod.frac - tmp;
if (new.frac < tmp) /* Left less then passed. */
- bintime_add(&new, &timerperiod);
+ bintime_addx(&new, timerperiod.frac);
CTR5(KTR_SPARE2, "load p at %d: now %d.%08x first in %d.%08x",
- curcpu, now->sec, (unsigned int)(now->frac >> 32),
- new.sec, (unsigned int)(new.frac >> 32));
+ curcpu, now->sec, (u_int)(now->frac >> 32),
+ new.sec, (u_int)(new.frac >> 32));
*next =3D new;
bintime_add(next, now);
et_start(timer, &new, &timerperiod);
@@ -445,8 +446,8 @@
getnextevent(&new);
eq =3D bintime_cmp(&new, next, =3D=3D);
CTR5(KTR_SPARE2, "load at %d: next %d.%08x%08x eq %d",
- curcpu, new.sec, (unsigned int)(new.frac >> 32),
- (unsigned int)(new.frac & 0xffffffff),
+ curcpu, new.sec, (u_int)(new.frac >> 32),
+ (u_int)(new.frac & 0xffffffff),
eq);
if (!eq) {
*next =3D new;
@@ -531,7 +532,7 @@
if (start) {
/* Initialize time machine parameters. */
next =3D now;
- bintime_add(&next, &timerperiod);
+ bintime_addx(&next, timerperiod.frac);
if (periodic)
nexttick =3D next;
else
@@ -712,11 +713,7 @@
state =3D DPCPU_PTR(timerstate);
binuptime(&now);
ET_HW_LOCK(state);
- if ((timer->et_flags & ET_FLAGS_PERCPU) =3D=3D 0 && periodic) {
- state->now =3D nexttick;
- bintime_sub(&state->now, &timerperiod);
- } else
- state->now =3D now;
+ state->now =3D now;
hardclock_sync(curcpu);
handleevents(&state->now, 2);
if (timer->et_flags & ET_FLAGS_PERCPU)
@@ -780,8 +777,8 @@
else
binuptime(&now);
CTR4(KTR_SPARE2, "idle at %d: now %d.%08x%08x",
- curcpu, now.sec, (unsigned int)(now.frac >> 32),
- (unsigned int)(now.frac & 0xffffffff));
+ curcpu, now.sec, (u_int)(now.frac >> 32),
+ (u_int)(now.frac & 0xffffffff));
getnextcpuevent(&t, 1);
ET_HW_LOCK(state);
state->idle =3D 1;
@@ -809,8 +806,8 @@
else
binuptime(&now);
CTR4(KTR_SPARE2, "active at %d: now %d.%08x%08x",
- curcpu, now.sec, (unsigned int)(now.frac >> 32),
- (unsigned int)(now.frac & 0xffffffff));
+ curcpu, now.sec, (u_int)(now.frac >> 32),
+ (u_int)(now.frac & 0xffffffff));
spinlock_enter();
td =3D curthread;
td->td_intr_nesting_level++;
@@ -833,11 +830,11 @@
binuptime(&now);
=20
CTR4(KTR_SPARE2, "set_cyc at %d: now %d.%08x%08x",
- curcpu, now.sec, (unsigned int)(now.frac >> 32),
- (unsigned int)(now.frac & 0xffffffff));
+ curcpu, now.sec, (u_int)(now.frac >> 32),
+ (u_int)(now.frac & 0xffffffff));
CTR4(KTR_SPARE2, "set_cyc at %d: t %d.%08x%08x",
- curcpu, t->sec, (unsigned int)(t->frac >> 32),
- (unsigned int)(t->frac & 0xffffffff));
+ curcpu, t->sec, (u_int)(t->frac >> 32),
+ (u_int)(t->frac & 0xffffffff));
=20
ET_HW_LOCK(state);
if (bintime_cmp(t, &state->nextcyc, =3D=3D)) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_descrip.c
--- a/head/sys/kern/kern_descrip.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_descrip.c Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_descrip.c 238667 2012-07-21 13:02:1=
1Z kib $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_descrip.c 238834 2012-07-27 10:41:1=
0Z kib $");
=20
#include "opt_capsicum.h"
#include "opt_compat.h"
@@ -491,6 +491,12 @@
error =3D do_dup(td, DUP_FIXED, fd, tmp, td->td_retval);
break;
=20
+ case F_DUP2FD_CLOEXEC:
+ tmp =3D arg;
+ error =3D do_dup(td, DUP_FIXED | DUP_CLOEXEC, fd, tmp,
+ td->td_retval);
+ break;
+
case F_GETFD:
FILEDESC_SLOCK(fdp);
if ((fp =3D fget_locked(fdp, fd)) =3D=3D NULL) {
@@ -849,6 +855,8 @@
}
if (flags & DUP_FIXED && old =3D=3D new) {
*retval =3D new;
+ if (flags & DUP_CLOEXEC)
+ fdp->fd_ofileflags[new] |=3D UF_EXCLOSE;
FILEDESC_XUNLOCK(fdp);
return (0);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_intr.c
--- a/head/sys/kern/kern_intr.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_intr.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_intr.c 232751 2012-03-09 22:30:54Z =
jmallett $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_intr.c 239095 2012-08-06 16:37:43Z =
kan $");
=20
#include "opt_ddb.h"
=20
@@ -545,17 +545,6 @@
}
}
=20
- /* Add the new handler to the event in priority order. */
- TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
- if (temp_ih->ih_pri > ih->ih_pri)
- break;
- }
- if (temp_ih =3D=3D NULL)
- TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
- else
- TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
- intr_event_update(ie);
-
/* Create a thread if we need one. */
while (ie->ie_thread =3D=3D NULL && handler !=3D NULL) {
if (ie->ie_flags & IE_ADDING_THREAD)
@@ -572,6 +561,18 @@
wakeup(ie);
}
}
+
+ /* Add the new handler to the event in priority order. */
+ TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
+ if (temp_ih->ih_pri > ih->ih_pri)
+ break;
+ }
+ if (temp_ih =3D=3D NULL)
+ TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
+ else
+ TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
+ intr_event_update(ie);
+
CTR3(KTR_INTR, "%s: added %s to %s", __func__, ih->ih_name,
ie->ie_name);
mtx_unlock(&ie->ie_lock);
@@ -618,23 +619,12 @@
}
}
=20
- /* Add the new handler to the event in priority order. */
- TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
- if (temp_ih->ih_pri > ih->ih_pri)
- break;
- }
- if (temp_ih =3D=3D NULL)
- TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
- else
- TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
- intr_event_update(ie);
-
/* For filtered handlers, create a private ithread to run on. */
- if (filter !=3D NULL && handler !=3D NULL) {=20
+ if (filter !=3D NULL && handler !=3D NULL) {
mtx_unlock(&ie->ie_lock);
- it =3D ithread_create("intr: newborn", ih); =09
+ it =3D ithread_create("intr: newborn", ih);
mtx_lock(&ie->ie_lock);
- it->it_event =3D ie;=20
+ it->it_event =3D ie;
ih->ih_thread =3D it;
ithread_update(it); /* XXX - do we really need this?!?!? */
} else { /* Create the global per-event thread if we need one. */
@@ -654,6 +644,18 @@
}
}
}
+
+ /* Add the new handler to the event in priority order. */
+ TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
+ if (temp_ih->ih_pri > ih->ih_pri)
+ break;
+ }
+ if (temp_ih =3D=3D NULL)
+ TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
+ else
+ TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
+ intr_event_update(ie);
+
CTR3(KTR_INTR, "%s: added %s to %s", __func__, ih->ih_name,
ie->ie_name);
mtx_unlock(&ie->ie_lock);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_ktr.c
--- a/head/sys/kern/kern_ktr.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_ktr.c Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_ktr.c 229272 2012-01-02 12:12:10Z e=
d $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_ktr.c 238925 2012-07-30 22:46:42Z d=
avide $");
=20
#include "opt_ddb.h"
#include "opt_ktr.h"
@@ -283,7 +283,7 @@
{
do {
saveindex =3D ktr_idx;
- newindex =3D (saveindex + 1) & (KTR_ENTRIES - 1);
+ newindex =3D (saveindex + 1) % KTR_ENTRIES;
} while (atomic_cmpset_rel_int(&ktr_idx, saveindex, newindex) =3D=3D 0);
entry =3D &ktr_buf[saveindex];
}
@@ -338,7 +338,7 @@
DB_SHOW_COMMAND(ktr, db_ktr_all)
{
=09
- tstate.cur =3D (ktr_idx - 1) & (KTR_ENTRIES - 1);
+ tstate.cur =3D (ktr_idx - 1) % KTR_ENTRIES;
tstate.first =3D -1;
db_ktr_verbose =3D 0;
db_ktr_verbose |=3D (strchr(modif, 'v') !=3D NULL) ? 2 : 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_proc.c
--- a/head/sys/kern/kern_proc.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_proc.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_proc.c 238527 2012-07-16 09:38:19Z =
pgj $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_proc.c 239065 2012-08-05 14:11:42Z =
kib $");
=20
#include "opt_compat.h"
#include "opt_ddb.h"
@@ -77,6 +77,7 @@
#endif
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_extern.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sched_4bsd.c
--- a/head/sys/kern/sched_4bsd.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sched_4bsd.c Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sched_4bsd.c 235471 2012-05-15 10:58:17Z=
pluknet $");
+__FBSDID("$FreeBSD: head/sys/kern/sched_4bsd.c 239157 2012-08-09 19:26:13Z=
mav $");
=20
#include "opt_hwpmc_hooks.h"
#include "opt_sched.h"
@@ -94,6 +94,7 @@
fixpt_t ts_pctcpu; /* (j) %cpu during p_swtime. */
int ts_cpticks; /* (j) Ticks of cpu time. */
int ts_slptime; /* (j) Seconds !RUNNING. */
+ int ts_slice; /* Remaining part of time slice. */
int ts_flags;
struct runq *ts_runq; /* runq the thread is currently on */
#ifdef KTR
@@ -104,6 +105,7 @@
/* flags kept in td_flags */
#define TDF_DIDRUN TDF_SCHED0 /* thread actually ran. */
#define TDF_BOUND TDF_SCHED1 /* Bound to one CPU. */
+#define TDF_SLICEEND TDF_SCHED2 /* Thread time slice is over. */
=20
/* flags kept in ts_flags */
#define TSF_AFFINITY 0x0001 /* Has a non-"full" CPU set. */
@@ -117,9 +119,9 @@
static struct td_sched td_sched0;
struct mtx sched_lock;
=20
+static int realstathz; /* stathz is sometimes 0 and run off of hz. */
static int sched_tdcnt; /* Total runnable threads in the system. */
-static int sched_quantum; /* Roundrobin scheduling quantum in ticks. */
-#define SCHED_QUANTUM (hz / 10) /* Default sched quantum */
+static int sched_slice =3D 1; /* Thread run time before rescheduling. */
=20
static void setup_runqs(void);
static void schedcpu(void);
@@ -145,6 +147,10 @@
&sched_kp);
SYSINIT(sched_setup, SI_SUB_RUN_QUEUE, SI_ORDER_FIRST, sched_setup, NULL);
=20
+static void sched_initticks(void *dummy);
+SYSINIT(sched_initticks, SI_SUB_CLOCKS, SI_ORDER_THIRD, sched_initticks,
+ NULL);
+
/*
* Global run queue.
*/
@@ -179,31 +185,12 @@
runq_init(&runq);
}
=20
-static int
-sysctl_kern_quantum(SYSCTL_HANDLER_ARGS)
-{
- int error, new_val;
-
- new_val =3D sched_quantum * tick;
- error =3D sysctl_handle_int(oidp, &new_val, 0, req);
- if (error !=3D 0 || req->newptr =3D=3D NULL)
- return (error);
- if (new_val < tick)
- return (EINVAL);
- sched_quantum =3D new_val / tick;
- hogticks =3D 2 * sched_quantum;
- return (0);
-}
-
SYSCTL_NODE(_kern, OID_AUTO, sched, CTLFLAG_RD, 0, "Scheduler");
=20
SYSCTL_STRING(_kern_sched, OID_AUTO, name, CTLFLAG_RD, "4BSD", 0,
"Scheduler name");
-
-SYSCTL_PROC(_kern_sched, OID_AUTO, quantum, CTLTYPE_INT | CTLFLAG_RW,
- 0, sizeof sched_quantum, sysctl_kern_quantum, "I",
- "Roundrobin scheduling quantum in microseconds");
-
+SYSCTL_INT(_kern_sched, OID_AUTO, slice, CTLFLAG_RW, &sched_slice, 0,
+ "Slice size for timeshare threads");
#ifdef SMP
/* Enable forwarding of wakeups to all other cpus */
static SYSCTL_NODE(_kern_sched, OID_AUTO, ipiwakeup, CTLFLAG_RD, NULL,
@@ -471,9 +458,8 @@
struct thread *td;
struct proc *p;
struct td_sched *ts;
- int awake, realstathz;
+ int awake;
=20
- realstathz =3D stathz ? stathz : hz;
sx_slock(&allproc_lock);
FOREACH_PROC_IN_SYSTEM(p) {
PROC_LOCK(p);
@@ -645,14 +631,28 @@
{
setup_runqs();
=20
- if (sched_quantum =3D=3D 0)
- sched_quantum =3D SCHED_QUANTUM;
- hogticks =3D 2 * sched_quantum;
+ /*
+ * To avoid divide-by-zero, we set realstathz a dummy value
+ * in case which sched_clock() called before sched_initticks().
+ */
+ realstathz =3D hz;
+ sched_slice =3D realstathz / 10; /* ~100ms */
=20
/* Account for thread0. */
sched_load_add();
}
=20
+/*
+ * This routine determines the sched_slice after stathz and hz are setup.
+ */
+static void
+sched_initticks(void *dummy)
+{
+
+ realstathz =3D stathz ? stathz : hz;
+ sched_slice =3D realstathz / 10; /* ~100ms */
+}
+
/* External interfaces start here */
=20
/*
@@ -670,6 +670,7 @@
proc0.p_sched =3D NULL; /* XXX */
thread0.td_sched =3D &td_sched0;
thread0.td_lock =3D &sched_lock;
+ td_sched0.ts_slice =3D sched_slice;
mtx_init(&sched_lock, "sched lock", NULL, MTX_SPIN | MTX_RECURSE);
}
=20
@@ -686,9 +687,9 @@
int
sched_rr_interval(void)
{
- if (sched_quantum =3D=3D 0)
- sched_quantum =3D SCHED_QUANTUM;
- return (sched_quantum);
+
+ /* Convert sched_slice from stathz to hz. */
+ return (hz / (realstathz / sched_slice));
}
=20
/*
@@ -725,9 +726,10 @@
* Force a context switch if the current thread has used up a full
* quantum (default quantum is 100ms).
*/
- if (!TD_IS_IDLETHREAD(td) &&
- ticks - PCPU_GET(switchticks) >=3D sched_quantum)
- td->td_flags |=3D TDF_NEEDRESCHED;
+ if (!TD_IS_IDLETHREAD(td) && (--ts->ts_slice <=3D 0)) {
+ ts->ts_slice =3D sched_slice;
+ td->td_flags |=3D TDF_NEEDRESCHED | TDF_SLICEEND;
+ }
=20
stat =3D DPCPU_PTR(idlestat);
stat->oldidlecalls =3D stat->idlecalls;
@@ -781,6 +783,7 @@
ts =3D childtd->td_sched;
bzero(ts, sizeof(*ts));
ts->ts_flags |=3D (td->td_sched->ts_flags & TSF_AFFINITY);
+ ts->ts_slice =3D 1;
}
=20
void
@@ -941,6 +944,7 @@
struct mtx *tmtx;
struct td_sched *ts;
struct proc *p;
+ int preempted;
=20
tmtx =3D NULL;
ts =3D td->td_sched;
@@ -962,8 +966,8 @@
sched_load_rem();
=20
td->td_lastcpu =3D td->td_oncpu;
- if (!(flags & SW_PREEMPT))
- td->td_flags &=3D ~TDF_NEEDRESCHED;
+ preempted =3D !(td->td_flags & TDF_SLICEEND);
+ td->td_flags &=3D ~(TDF_NEEDRESCHED | TDF_SLICEEND);
td->td_owepreempt =3D 0;
td->td_oncpu =3D NOCPU;
=20
@@ -981,7 +985,7 @@
} else {
if (TD_IS_RUNNING(td)) {
/* Put us back on the run queue. */
- sched_add(td, (flags & SW_PREEMPT) ?
+ sched_add(td, preempted ?
SRQ_OURSELF|SRQ_YIELDING|SRQ_PREEMPTED :
SRQ_OURSELF|SRQ_YIELDING);
}
@@ -1077,6 +1081,7 @@
}
td->td_slptick =3D 0;
ts->ts_slptime =3D 0;
+ ts->ts_slice =3D sched_slice;
sched_add(td, SRQ_BORING);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sched_ule.c
--- a/head/sys/kern/sched_ule.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sched_ule.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sched_ule.c 236141 2012-05-27 10:25:20Z =
raj $");
+__FBSDID("$FreeBSD: head/sys/kern/sched_ule.c 239157 2012-08-09 19:26:13Z =
mav $");
=20
#include "opt_hwpmc_hooks.h"
#include "opt_kdtrace.h"
@@ -189,6 +189,9 @@
#define SCHED_INTERACT_HALF (SCHED_INTERACT_MAX / 2)
#define SCHED_INTERACT_THRESH (30)
=20
+/* Flags kept in td_flags. */
+#define TDF_SLICEEND TDF_SCHED2 /* Thread time slice is over. */
+
/*
* tickincr: Converts a stathz tick into a hz domain scaled by
* the shift factor. Without the shift the error rate
@@ -1841,7 +1844,7 @@
struct td_sched *ts;
struct mtx *mtx;
int srqflag;
- int cpuid;
+ int cpuid, preempted;
=20
THREAD_LOCK_ASSERT(td, MA_OWNED);
KASSERT(newtd =3D=3D NULL, ("sched_switch: Unsupported newtd argument"));
@@ -1854,8 +1857,8 @@
ts->ts_rltick =3D ticks;
td->td_lastcpu =3D td->td_oncpu;
td->td_oncpu =3D NOCPU;
- if (!(flags & SW_PREEMPT))
- td->td_flags &=3D ~TDF_NEEDRESCHED;
+ preempted =3D !(td->td_flags & TDF_SLICEEND);
+ td->td_flags &=3D ~(TDF_NEEDRESCHED | TDF_SLICEEND);
td->td_owepreempt =3D 0;
tdq->tdq_switchcnt++;
/*
@@ -1867,7 +1870,7 @@
TD_SET_CAN_RUN(td);
} else if (TD_IS_RUNNING(td)) {
MPASS(td->td_lock =3D=3D TDQ_LOCKPTR(tdq));
- srqflag =3D (flags & SW_PREEMPT) ?
+ srqflag =3D preempted ?
SRQ_OURSELF|SRQ_YIELDING|SRQ_PREEMPTED :
SRQ_OURSELF|SRQ_YIELDING;
#ifdef SMP
@@ -2237,7 +2240,7 @@
* We're out of time, force a requeue at userret().
*/
ts->ts_slice =3D sched_slice;
- td->td_flags |=3D TDF_NEEDRESCHED;
+ td->td_flags |=3D TDF_NEEDRESCHED | TDF_SLICEEND;
}
=20
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/subr_uio.c
--- a/head/sys/kern/subr_uio.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/subr_uio.c Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/subr_uio.c 233291 2012-03-22 04:52:51Z a=
lc $");
+__FBSDID("$FreeBSD: head/sys/kern/subr_uio.c 239065 2012-08-05 14:11:42Z k=
ib $");
=20
#include "opt_zero.h"
=20
@@ -53,11 +53,11 @@
#include <sys/vnode.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_extern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
#ifdef ZERO_COPY_SOCKETS
-#include <vm/vm_param.h>
#include <vm/vm_object.h>
#endif
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sys_pipe.c
--- a/head/sys/kern/sys_pipe.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sys_pipe.c Fri Aug 10 14:19:25 2012 +0300
@@ -90,7 +90,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sys_pipe.c 234352 2012-04-16 21:22:02Z j=
kim $");
+__FBSDID("$FreeBSD: head/sys/kern/sys_pipe.c 238936 2012-07-31 05:48:35Z d=
avidxu $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -227,7 +227,6 @@
static int pipe_paircreate(struct thread *td, struct pipepair **p_pp);
static __inline int pipelock(struct pipe *cpipe, int catch);
static __inline void pipeunlock(struct pipe *cpipe);
-static __inline void pipeselwakeup(struct pipe *cpipe);
#ifndef PIPE_NODIRECT
static int pipe_build_write_buffer(struct pipe *wpipe, struct uio *uio);
static void pipe_destroy_write_buffer(struct pipe *wpipe);
@@ -607,7 +606,7 @@
}
}
=20
-static __inline void
+void
pipeselwakeup(cpipe)
struct pipe *cpipe;
{
@@ -738,7 +737,7 @@
rpipe->pipe_map.pos +=3D size;
rpipe->pipe_map.cnt -=3D size;
if (rpipe->pipe_map.cnt =3D=3D 0) {
- rpipe->pipe_state &=3D ~PIPE_DIRECTW;
+ rpipe->pipe_state &=3D ~(PIPE_DIRECTW|PIPE_WANTW);
wakeup(rpipe);
}
#endif
@@ -1001,6 +1000,7 @@
wakeup(wpipe);
}
pipeselwakeup(wpipe);
+ wpipe->pipe_state |=3D PIPE_WANTW;
pipeunlock(wpipe);
error =3D msleep(wpipe, PIPE_MTX(wpipe), PRIBIO | PCATCH,
"pipdwt", 0);
@@ -1442,7 +1442,7 @@
levents =3D events &
(POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND);
if (rpipe->pipe_state & PIPE_NAMED && fp->f_flag & FREAD && levents &&
- rpipe->pipe_state & PIPE_SAMEWGEN)
+ fp->f_seqcount =3D=3D rpipe->pipe_wgen)
events |=3D POLLINIGNEOF;
=20
if ((events & POLLINIGNEOF) =3D=3D 0) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sys_process.c
--- a/head/sys/kern/sys_process.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sys_process.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sys_process.c 238287 2012-07-09 09:24:46=
Z davidxu $");
+__FBSDID("$FreeBSD: head/sys/kern/sys_process.c 239135 2012-08-08 00:20:30=
Z kib $");
=20
#include "opt_compat.h"
=20
@@ -1112,6 +1112,7 @@
#endif
pl =3D addr;
pl->pl_lwpid =3D td2->td_tid;
+ pl->pl_event =3D PL_EVENT_NONE;
pl->pl_flags =3D 0;
if (td2->td_dbgflags & TDB_XSIG) {
pl->pl_event =3D PL_EVENT_SIGNAL;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/uipc_syscalls.c
--- a/head/sys/kern/uipc_syscalls.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/uipc_syscalls.c Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/uipc_syscalls.c 236891 2012-06-11 16:08:=
03Z pjd $");
+__FBSDID("$FreeBSD: head/sys/kern/uipc_syscalls.c 239065 2012-08-05 14:11:=
42Z kib $");
=20
#include "opt_capsicum.h"
#include "opt_inet.h"
@@ -82,6 +82,7 @@
#include <security/mac/mac_framework.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/vfs_syscalls.c
--- a/head/sys/kern/vfs_syscalls.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/vfs_syscalls.c Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/vfs_syscalls.c 238029 2012-07-02 21:01:0=
3Z kib $");
+__FBSDID("$FreeBSD: head/sys/kern/vfs_syscalls.c 238952 2012-07-31 18:25:0=
0Z jhb $");
=20
#include "opt_capsicum.h"
#include "opt_compat.h"
@@ -1093,8 +1093,7 @@
struct file *fp;
struct vnode *vp;
int cmode;
- int type, indx =3D -1, error;
- struct flock lf;
+ int indx =3D -1, error;
struct nameidata nd;
int vfslocked;
cap_rights_t rights_needed =3D CAP_LOOKUP;
@@ -1180,26 +1179,11 @@
if (fp->f_ops =3D=3D &badfileops) {
KASSERT(vp->v_type !=3D VFIFO, ("Unexpected fifo."));
fp->f_seqcount =3D 1;
- finit(fp, flags & FMASK, DTYPE_VNODE, vp, &vnops);
+ finit(fp, (flags & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE,
+ vp, &vnops);
}
=20
VOP_UNLOCK(vp, 0);
- if (fp->f_type =3D=3D DTYPE_VNODE && (flags & (O_EXLOCK | O_SHLOCK)) !=3D=
0) {
- lf.l_whence =3D SEEK_SET;
- lf.l_start =3D 0;
- lf.l_len =3D 0;
- if (flags & O_EXLOCK)
- lf.l_type =3D F_WRLCK;
- else
- lf.l_type =3D F_RDLCK;
- type =3D F_FLOCK;
- if ((flags & FNONBLOCK) =3D=3D 0)
- type |=3D F_WAIT;
- if ((error =3D VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf,
- type)) !=3D 0)
- goto bad;
- atomic_set_int(&fp->f_flag, FHASLOCK);
- }
if (flags & O_TRUNC) {
error =3D fo_truncate(fp, 0, td->td_ucred, td);
if (error)
@@ -4483,9 +4467,8 @@
struct mount *mp;
struct vnode *vp;
struct fhandle fhp;
- struct flock lf;
struct file *fp;
- int fmode, error, type;
+ int fmode, error;
int vfslocked;
int indx;
=20
@@ -4542,24 +4525,9 @@
#endif
fp->f_vnode =3D vp;
fp->f_seqcount =3D 1;
- finit(fp, fmode & FMASK, DTYPE_VNODE, vp, &vnops);
+ finit(fp, (fmode & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE, vp,
+ &vnops);
VOP_UNLOCK(vp, 0);
- if (fmode & (O_EXLOCK | O_SHLOCK)) {
- lf.l_whence =3D SEEK_SET;
- lf.l_start =3D 0;
- lf.l_len =3D 0;
- if (fmode & O_EXLOCK)
- lf.l_type =3D F_WRLCK;
- else
- lf.l_type =3D F_RDLCK;
- type =3D F_FLOCK;
- if ((fmode & FNONBLOCK) =3D=3D 0)
- type |=3D F_WAIT;
- if ((error =3D VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf,
- type)) !=3D 0)
- goto bad;
- atomic_set_int(&fp->f_flag, FHASLOCK);
- }
if (fmode & O_TRUNC) {
error =3D fo_truncate(fp, 0, td->td_ucred, td);
if (error)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/vfs_vnops.c
--- a/head/sys/kern/vfs_vnops.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/vfs_vnops.c Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/vfs_vnops.c 238029 2012-07-02 21:01:03Z =
kib $");
+__FBSDID("$FreeBSD: head/sys/kern/vfs_vnops.c 238952 2012-07-31 18:25:00Z =
jhb $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -229,8 +229,10 @@
vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred,
struct thread *td, struct file *fp)
{
+ struct mount *mp;
accmode_t accmode;
- int error;
+ struct flock lf;
+ int error, have_flock, lock_flags, type;
=20
VFS_ASSERT_GIANT(vp->v_mount);
if (vp->v_type =3D=3D VLNK)
@@ -271,6 +273,51 @@
if ((error =3D VOP_OPEN(vp, fmode, cred, td, fp)) !=3D 0)
return (error);
=20
+ if (fmode & (O_EXLOCK | O_SHLOCK)) {
+ KASSERT(fp !=3D NULL, ("open with flock requires fp"));
+ lock_flags =3D VOP_ISLOCKED(vp);
+ VOP_UNLOCK(vp, 0);
+ lf.l_whence =3D SEEK_SET;
+ lf.l_start =3D 0;
+ lf.l_len =3D 0;
+ if (fmode & O_EXLOCK)
+ lf.l_type =3D F_WRLCK;
+ else
+ lf.l_type =3D F_RDLCK;
+ type =3D F_FLOCK;
+ if ((fmode & FNONBLOCK) =3D=3D 0)
+ type |=3D F_WAIT;
+ error =3D VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf, type);
+ have_flock =3D (error =3D=3D 0);
+ vn_lock(vp, lock_flags | LK_RETRY);
+ if (error =3D=3D 0 && vp->v_iflag & VI_DOOMED)
+ error =3D ENOENT;
+ /*
+ * Another thread might have used this vnode as an
+ * executable while the vnode lock was dropped.
+ * Ensure the vnode is still able to be opened for
+ * writing after the lock has been obtained.
+ */
+ if (error =3D=3D 0 && accmode & VWRITE)
+ error =3D vn_writechk(vp);
+ if (error) {
+ VOP_UNLOCK(vp, 0);
+ if (have_flock) {
+ lf.l_whence =3D SEEK_SET;
+ lf.l_start =3D 0;
+ lf.l_len =3D 0;
+ lf.l_type =3D F_UNLCK;
+ (void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf,
+ F_FLOCK);
+ }
+ vn_start_write(vp, &mp, V_WAIT);
+ vn_lock(vp, lock_flags | LK_RETRY);
+ (void)VOP_CLOSE(vp, fmode, cred, td);
+ vn_finished_write(mp);
+ return (error);
+ }
+ fp->f_flag |=3D FHASLOCK;
+ }
if (fmode & FWRITE) {
vp->v_writecount++;
CTR3(KTR_VFS, "%s: vp %p v_writecount increased to %d",
@@ -1400,19 +1447,22 @@
int error;
=20
vp =3D fp->f_vnode;
+ fp->f_ops =3D &badfileops;
=20
vfslocked =3D VFS_LOCK_GIANT(vp->v_mount);
+ if (fp->f_type =3D=3D DTYPE_VNODE && fp->f_flag & FHASLOCK)
+ vref(vp);
+
+ error =3D vn_close(vp, fp->f_flag, fp->f_cred, td);
+
if (fp->f_type =3D=3D DTYPE_VNODE && fp->f_flag & FHASLOCK) {
lf.l_whence =3D SEEK_SET;
lf.l_start =3D 0;
lf.l_len =3D 0;
lf.l_type =3D F_UNLCK;
(void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf, F_FLOCK);
+ vrele(vp);
}
-
- fp->f_ops =3D &badfileops;
-
- error =3D vn_close(vp, fp->f_flag, fp->f_cred, td);
VFS_UNLOCK_GIANT(vfslocked);
return (error);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/mips/include/pmap.h
--- a/head/sys/mips/include/pmap.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/mips/include/pmap.h Fri Aug 10 14:19:25 2012 +0300
@@ -40,7 +40,7 @@
* from: @(#)pmap.h 7.4 (Berkeley) 5/12/91
* from: src/sys/i386/include/pmap.h,v 1.65.2.2 2000/11/30 01:54:42 peter
* JNPR: pmap.h,v 1.7.2.1 2007/09/10 07:44:12 girish
- * $FreeBSD: head/sys/mips/include/pmap.h 237168 2012-06-16 18:56:19Z=
alc $
+ * $FreeBSD: head/sys/mips/include/pmap.h 239152 2012-08-09 16:38:17Z=
alc $
*/
=20
#ifndef _MACHINE_PMAP_H_
@@ -90,7 +90,6 @@
u_int32_t gen:ASIDGEN_BITS; /* its generation number */
} pm_asid[MAXSMPCPU];
struct pmap_statistics pm_stats; /* pmap statistics */
- struct vm_page *pm_ptphint; /* pmap ptp hint */
struct mtx pm_mtx;
};
=20
@@ -126,7 +125,6 @@
vm_offset_t pv_va; /* virtual address for mapping */
TAILQ_ENTRY(pv_entry) pv_list;
TAILQ_ENTRY(pv_entry) pv_plist;
- vm_page_t pv_ptem; /* VM page for pte */
} *pv_entry_t;
=20
/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/mips/mips/pmap.c
--- a/head/sys/mips/mips/pmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/mips/mips/pmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -66,7 +66,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/mips/mips/pmap.c 238561 2012-07-18 05:21:34Z =
alc $");
+__FBSDID("$FreeBSD: head/sys/mips/mips/pmap.c 239170 2012-08-10 05:00:50Z =
alc $");
=20
#include "opt_ddb.h"
=20
@@ -164,7 +164,8 @@
static __inline void pmap_changebit(vm_page_t m, int bit, boolean_t setem);
static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va,
vm_page_t m, vm_prot_t prot, vm_page_t mpte);
-static int pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t=
va);
+static int pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t=
va,
+ pd_entry_t pde);
static void pmap_remove_page(struct pmap *pmap, vm_offset_t va);
static void pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t =
va);
static boolean_t pmap_try_insert_pv_entry(pmap_t pmap, vm_page_t mpte,
@@ -176,7 +177,7 @@
=20
static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags);
static vm_page_t _pmap_allocpte(pmap_t pmap, unsigned ptepindex, int flags=
);
-static int pmap_unuse_pt(pmap_t, vm_offset_t, vm_page_t);
+static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t);
static pt_entry_t init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t pro=
t);
=20
#ifdef SMP
@@ -973,8 +974,6 @@
pmap_unwire_pte_hold(pmap, va, pdpg);
}
#endif
- if (pmap->pm_ptphint =3D=3D m)
- pmap->pm_ptphint =3D NULL;
=20
/*
* If the page is finally unwired, simply free it.
@@ -989,25 +988,14 @@
* conditionally free the page, and manage the hold/wire counts.
*/
static int
-pmap_unuse_pt(pmap_t pmap, vm_offset_t va, vm_page_t mpte)
+pmap_unuse_pt(pmap_t pmap, vm_offset_t va, pd_entry_t pde)
{
- unsigned ptepindex;
- pd_entry_t pteva;
+ vm_page_t mpte;
=20
if (va >=3D VM_MAXUSER_ADDRESS)
return (0);
-
- if (mpte =3D=3D NULL) {
- ptepindex =3D pmap_pde_pindex(va);
- if (pmap->pm_ptphint &&
- (pmap->pm_ptphint->pindex =3D=3D ptepindex)) {
- mpte =3D pmap->pm_ptphint;
- } else {
- pteva =3D *pmap_pde(pmap, va);
- mpte =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(pteva));
- pmap->pm_ptphint =3D mpte;
- }
- }
+ KASSERT(pde !=3D 0, ("pmap_unuse_pt: pde !=3D 0"));
+ mpte =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(pde));
return (pmap_unwire_pte_hold(pmap, va, mpte));
}
=20
@@ -1019,7 +1007,6 @@
PMAP_LOCK_INIT(pmap);
pmap->pm_segtab =3D kernel_segmap;
CPU_ZERO(&pmap->pm_active);
- pmap->pm_ptphint =3D NULL;
for (i =3D 0; i < MAXCPU; i++) {
pmap->pm_asid[i].asid =3D PMAP_ASID_RESERVED;
pmap->pm_asid[i].gen =3D 0;
@@ -1079,7 +1066,6 @@
ptdva =3D MIPS_PHYS_TO_DIRECT(VM_PAGE_TO_PHYS(ptdpg));
pmap->pm_segtab =3D (pd_entry_t *)ptdva;
CPU_ZERO(&pmap->pm_active);
- pmap->pm_ptphint =3D NULL;
for (i =3D 0; i < MAXCPU; i++) {
pmap->pm_asid[i].asid =3D PMAP_ASID_RESERVED;
pmap->pm_asid[i].gen =3D 0;
@@ -1156,17 +1142,11 @@
/* Next level entry */
pde =3D (pd_entry_t *)*pdep;
pde[pdeindex] =3D (pd_entry_t)pageva;
- pmap->pm_ptphint =3D m;
}
#else
pmap->pm_segtab[ptepindex] =3D (pd_entry_t)pageva;
#endif
pmap->pm_stats.resident_count++;
-
- /*
- * Set the page table hint
- */
- pmap->pm_ptphint =3D m;
return (m);
}
=20
@@ -1196,16 +1176,7 @@
* count, and activate it.
*/
if (pde !=3D NULL && *pde !=3D NULL) {
- /*
- * In order to get the page table page, try the hint first.
- */
- if (pmap->pm_ptphint &&
- (pmap->pm_ptphint->pindex =3D=3D ptepindex)) {
- m =3D pmap->pm_ptphint;
- } else {
- m =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(*pde));
- pmap->pm_ptphint =3D m;
- }
+ m =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(*pde));
m->wire_count++;
} else {
/*
@@ -1351,6 +1322,7 @@
static const struct timeval printinterval =3D { 60, 0 };
static struct timeval lastprint;
struct vpgqueues *vpq;
+ pd_entry_t *pde;
pt_entry_t *pte, oldpte;
pmap_t pmap;
pv_entry_t allocated_pv, next_pv, pv;
@@ -1389,8 +1361,10 @@
else if (pmap !=3D locked_pmap && !PMAP_TRYLOCK(pmap))
continue;
pmap->pm_stats.resident_count--;
- pte =3D pmap_pte(pmap, va);
- KASSERT(pte !=3D NULL, ("pte"));
+ pde =3D pmap_pde(pmap, va);
+ KASSERT(pde !=3D NULL && *pde !=3D 0,
+ ("get_pv_entry: pde"));
+ pte =3D pmap_pde_to_pte(pde, va);
oldpte =3D *pte;
if (is_kernel_pmap(pmap))
*pte =3D PTE_G;
@@ -1406,7 +1380,7 @@
TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
m->md.pv_list_count--;
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
- pmap_unuse_pt(pmap, va, pv->pv_ptem);
+ pmap_unuse_pt(pmap, va, *pde);
if (pmap !=3D locked_pmap)
PMAP_UNLOCK(pmap);
if (allocated_pv =3D=3D NULL)
@@ -1513,7 +1487,6 @@
pv_entry_count++;
pv->pv_va =3D va;
pv->pv_pmap =3D pmap;
- pv->pv_ptem =3D mpte;
TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist);
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
m->md.pv_list_count++;
@@ -1526,7 +1499,8 @@
* pmap_remove_pte: do the things to unmap a page in a process
*/
static int
-pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t va)
+pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t va,=20
+ pd_entry_t pde)
{
pt_entry_t oldpte;
vm_page_t m;
@@ -1561,7 +1535,7 @@
=20
pmap_remove_entry(pmap, m, va);
}
- return (pmap_unuse_pt(pmap, va, NULL));
+ return (pmap_unuse_pt(pmap, va, pde));
}
=20
/*
@@ -1570,16 +1544,20 @@
static void
pmap_remove_page(struct pmap *pmap, vm_offset_t va)
{
+ pd_entry_t *pde;
pt_entry_t *ptq;
=20
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
- ptq =3D pmap_pte(pmap, va);
+ pde =3D pmap_pde(pmap, va);
+ if (pde =3D=3D NULL || *pde =3D=3D 0)
+ return;
+ ptq =3D pmap_pde_to_pte(pde, va);
=20
/*
* if there is no pte for this address, just skip it!!!
*/
- if (!ptq || !pte_test(ptq, PTE_V)) {
+ if (!pte_test(ptq, PTE_V)) {
return;
}
=20
@@ -1591,7 +1569,7 @@
/*
* get a local va for mappings for this pmap.
*/
- (void)pmap_remove_pte(pmap, ptq, va);
+ (void)pmap_remove_pte(pmap, ptq, va, *pde);
pmap_invalidate_page(pmap, va);
=20
return;
@@ -1610,9 +1588,6 @@
pd_entry_t *pde, *pdpe;
pt_entry_t *pte;
=20
- if (pmap =3D=3D NULL)
- return;
-
if (pmap->pm_stats.resident_count =3D=3D 0)
return;
=20
@@ -1673,6 +1648,7 @@
pmap_remove_all(vm_page_t m)
{
pv_entry_t pv;
+ pd_entry_t *pde;
pt_entry_t *pte, tpte;
=20
KASSERT((m->oflags & VPO_UNMANAGED) =3D=3D 0,
@@ -1694,7 +1670,9 @@
=20
pv->pv_pmap->pm_stats.resident_count--;
=20
- pte =3D pmap_pte(pv->pv_pmap, pv->pv_va);
+ pde =3D pmap_pde(pv->pv_pmap, pv->pv_va);
+ KASSERT(pde !=3D NULL && *pde !=3D 0, ("pmap_remove_all: pde"));
+ pte =3D pmap_pde_to_pte(pde, pv->pv_va);
=20
tpte =3D *pte;
if (is_kernel_pmap(pv->pv_pmap))
@@ -1719,7 +1697,7 @@
TAILQ_REMOVE(&pv->pv_pmap->pm_pvlist, pv, pv_plist);
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
m->md.pv_list_count--;
- pmap_unuse_pt(pv->pv_pmap, pv->pv_va, pv->pv_ptem);
+ pmap_unuse_pt(pv->pv_pmap, pv->pv_va, *pde);
PMAP_UNLOCK(pv->pv_pmap);
free_pv_entry(pv);
}
@@ -1740,9 +1718,6 @@
pd_entry_t *pde, *pdpe;
vm_offset_t va_next;
=20
- if (pmap =3D=3D NULL)
- return;
-
if ((prot & VM_PROT_READ) =3D=3D VM_PROT_NONE) {
pmap_remove(pmap, sva, eva);
return;
@@ -1825,9 +1800,6 @@
vm_page_t mpte, om;
pt_entry_t rw =3D 0;
=20
- if (pmap =3D=3D NULL)
- return;
-
va &=3D ~PAGE_MASK;
KASSERT(va <=3D VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig"));
KASSERT((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) !=3D 0,
@@ -1925,7 +1897,6 @@
pv =3D get_pv_entry(pmap);
pv->pv_va =3D va;
pv->pv_pmap =3D pmap;
- pv->pv_ptem =3D mpte;
TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist);
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
m->md.pv_list_count++;
@@ -2063,14 +2034,8 @@
* increment the hold count, and activate it.
*/
if (pde && *pde !=3D 0) {
- if (pmap->pm_ptphint &&
- (pmap->pm_ptphint->pindex =3D=3D ptepindex)) {
- mpte =3D pmap->pm_ptphint;
- } else {
- mpte =3D PHYS_TO_VM_PAGE(
- MIPS_DIRECT_TO_PHYS(*pde));
- pmap->pm_ptphint =3D mpte;
- }
+ mpte =3D PHYS_TO_VM_PAGE(
+ MIPS_DIRECT_TO_PHYS(*pde));
mpte->wire_count++;
} else {
mpte =3D _pmap_allocpte(pmap, ptepindex,
@@ -2277,9 +2242,6 @@
{
pt_entry_t *pte;
=20
- if (pmap =3D=3D NULL)
- return;
-
PMAP_LOCK(pmap);
pte =3D pmap_pte(pmap, va);
=20
@@ -2458,6 +2420,7 @@
void
pmap_remove_pages(pmap_t pmap)
{
+ pd_entry_t *pde;
pt_entry_t *pte, tpte;
pv_entry_t pv, npv;
vm_page_t m;
@@ -2470,7 +2433,9 @@
PMAP_LOCK(pmap);
for (pv =3D TAILQ_FIRST(&pmap->pm_pvlist); pv !=3D NULL; pv =3D npv) {
=20
- pte =3D pmap_pte(pv->pv_pmap, pv->pv_va);
+ pde =3D pmap_pde(pmap, pv->pv_va);
+ KASSERT(pde !=3D NULL && *pde !=3D 0, ("pmap_remove_pages: pde"));
+ pte =3D pmap_pde_to_pte(pde, pv->pv_va);
if (!pte_test(pte, PTE_V))
panic("pmap_remove_pages: page on pm_pvlist has no pte");
tpte =3D *pte;
@@ -2488,7 +2453,7 @@
KASSERT(m !=3D NULL,
("pmap_remove_pages: bad tpte %#jx", (uintmax_t)tpte));
=20
- pv->pv_pmap->pm_stats.resident_count--;
+ pmap->pm_stats.resident_count--;
=20
/*
* Update the vm_page_t clean and reference bits.
@@ -2497,14 +2462,14 @@
vm_page_dirty(m);
}
npv =3D TAILQ_NEXT(pv, pv_plist);
- TAILQ_REMOVE(&pv->pv_pmap->pm_pvlist, pv, pv_plist);
+ TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
=20
m->md.pv_list_count--;
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
if (TAILQ_FIRST(&m->md.pv_list) =3D=3D NULL) {
vm_page_aflag_clear(m, PGA_WRITEABLE);
}
- pmap_unuse_pt(pv->pv_pmap, pv->pv_va, pv->pv_ptem);
+ pmap_unuse_pt(pmap, pv->pv_va, *pde);
free_pv_entry(pv);
}
pmap_invalidate_all(pmap);
@@ -3146,16 +3111,16 @@
pt_entry_t rw;
=20
if (!(prot & VM_PROT_WRITE))
- rw =3D PTE_V | PTE_RO | PTE_C_CACHE;
+ rw =3D PTE_V | PTE_RO;
else if ((m->oflags & VPO_UNMANAGED) =3D=3D 0) {
if ((m->md.pv_flags & PV_TABLE_MOD) !=3D 0)
- rw =3D PTE_V | PTE_D | PTE_C_CACHE;
+ rw =3D PTE_V | PTE_D;
else
- rw =3D PTE_V | PTE_C_CACHE;
+ rw =3D PTE_V;
vm_page_aflag_set(m, PGA_WRITEABLE);
} else
/* Needn't emulate a modified bit for unmanaged pages. */
- rw =3D PTE_V | PTE_D | PTE_C_CACHE;
+ rw =3D PTE_V | PTE_D;
return (rw);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/mips/mips/trap.c
--- a/head/sys/mips/mips/trap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/mips/mips/trap.c Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
* JNPR: trap.c,v 1.13.2.2 2007/08/29 10:03:49 girish
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/mips/mips/trap.c 233638 2012-03-29 02:04:15Z =
jmallett $");
+__FBSDID("$FreeBSD: head/sys/mips/mips/trap.c 239126 2012-08-07 08:37:35Z =
imp $");
=20
#include "opt_compat.h"
#include "opt_ddb.h"
@@ -302,7 +302,7 @@
static int emulate_fp =3D 0;
#endif
SYSCTL_INT(_machdep, OID_AUTO, emulate_fp, CTLFLAG_RW,
- &allow_unaligned_acc, 0, "Emulate unimplemented FPU instructions");
+ &emulate_fp, 0, "Emulate unimplemented FPU instructions");
=20
static int emulate_unaligned_access(struct trapframe *frame, int mode);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/modules/ahci/Makefile
--- a/head/sys/modules/ahci/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/modules/ahci/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,8 +1,8 @@
-# $FreeBSD$
+# $FreeBSD: head/sys/modules/ahci/Makefile 238805 2012-07-26 13:44:48Z mav=
$
=20
.PATH: ${.CURDIR}/../../dev/ahci
=20
KMOD=3D ahci
-SRCS=3D ahci.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h
+SRCS=3D ahci.c ahciem.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h
=20
.include <bsd.kmod.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/modules/cam/Makefile
--- a/head/sys/modules/cam/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/modules/cam/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/modules/cam/Makefile 235911 2012-05-24 14:07:44Z mav $
+# $FreeBSD: head/sys/modules/cam/Makefile 238894 2012-07-30 03:00:58Z bz $
=20
S=3D ${.CURDIR}/../..
=20
@@ -14,7 +14,6 @@
SRCS+=3D opt_cd.h
SRCS+=3D opt_pt.h
SRCS+=3D opt_sa.h
-SRCS+=3D opt_enc.h
SRCS+=3D device_if.h bus_if.h vnode_if.h
SRCS+=3D cam.c
.if exists($S/${MACHINE}/${MACHINE}/cam_machdep.c)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/bpf_zerocopy.c
--- a/head/sys/net/bpf_zerocopy.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/bpf_zerocopy.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/bpf_zerocopy.c 235745 2012-05-21 22:17:29=
Z melifaro $");
+__FBSDID("$FreeBSD: head/sys/net/bpf_zerocopy.c 239065 2012-08-05 14:11:42=
Z kib $");
=20
#include "opt_bpf.h"
=20
@@ -50,6 +50,7 @@
#include <net/bpfdesc.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/pmap.h>
#include <vm/vm_extern.h>
#include <vm/vm_map.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/flowtable.c
--- a/head/sys/net/flowtable.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/flowtable.c Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
#include "opt_inet6.h"
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/flowtable.c 238092 2012-07-04 07:37:53Z g=
lebius $");
+__FBSDID("$FreeBSD: head/sys/net/flowtable.c 238989 2012-08-02 13:20:44Z g=
lebius $");
=20
#include <sys/param.h> =20
#include <sys/types.h>
@@ -1258,7 +1258,7 @@
=09
else
l3addr =3D (struct sockaddr_storage *)&ro->ro_dst;
- llentry_update(&lle, LLTABLE6(ifp), l3addr, ifp);
+ lle =3D llentry_alloc(ifp, LLTABLE6(ifp), l3addr);
}
#endif=09
#ifdef INET
@@ -1267,7 +1267,7 @@
l3addr =3D (struct sockaddr_storage *)rt->rt_gateway;
else
l3addr =3D (struct sockaddr_storage *)&ro->ro_dst;
- llentry_update(&lle, LLTABLE(ifp), l3addr, ifp);=09
+ lle =3D llentry_alloc(ifp, LLTABLE(ifp), l3addr);=09
}
=09
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_llatbl.c
--- a/head/sys/net/if_llatbl.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_llatbl.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/if_llatbl.c 230598 2012-01-26 20:02:40Z k=
macy $");
+__FBSDID("$FreeBSD: head/sys/net/if_llatbl.c 238990 2012-08-02 13:57:49Z g=
lebius $");
=20
#include "opt_ddb.h"
#include "opt_inet.h"
@@ -106,10 +106,19 @@
size_t pkts_dropped;
struct mbuf *next;
=20
+ IF_AFDATA_WLOCK_ASSERT(lle->lle_tbl->llt_ifp);
+ LLE_WLOCK_ASSERT(lle);
+
+ /* XXX: guard against race with other llentry_free(). */
+ if (!(lle->la_flags & LLE_LINKED)) {
+ LLE_FREE_LOCKED(lle);
+ return (0);
+ }
+
+ LIST_REMOVE(lle, lle_next);
+ lle->la_flags &=3D ~(LLE_VALID | LLE_LINKED);
+
pkts_dropped =3D 0;
- LLE_WLOCK_ASSERT(lle);
- LIST_REMOVE(lle, lle_next);
-
while ((lle->la_numheld > 0) && (lle->la_hold !=3D NULL)) {
next =3D lle->la_hold->m_nextpkt;
m_freem(lle->la_hold);
@@ -118,53 +127,43 @@
pkts_dropped++;
}
=20
- KASSERT(lle->la_numheld =3D=3D 0,=20
- ("%s: la_numheld %d > 0, pkts_droped %zd", __func__,=20
+ KASSERT(lle->la_numheld =3D=3D 0,
+ ("%s: la_numheld %d > 0, pkts_droped %zd", __func__,
lle->la_numheld, pkts_dropped));
=20
- lle->la_flags &=3D ~LLE_VALID;
LLE_FREE_LOCKED(lle);
=20
return (pkts_dropped);
}
=20
/*
- * Update an llentry for address dst (equivalent to rtalloc for new-arp)
- * Caller must pass in a valid struct llentry * (or NULL)
+ * (al)locate an llentry for address dst (equivalent to rtalloc for new-ar=
p).
*
- * if found the llentry * is returned referenced and unlocked
+ * If found the llentry * is returned referenced and unlocked.
*/
-int
-llentry_update(struct llentry **llep, struct lltable *lt,
- struct sockaddr_storage *dst, struct ifnet *ifp)
+struct llentry *
+llentry_alloc(struct ifnet *ifp, struct lltable *lt,
+ struct sockaddr_storage *dst)
{
struct llentry *la;
=20
- IF_AFDATA_RLOCK(ifp);=09
- la =3D lla_lookup(lt, LLE_EXCLUSIVE,
- (struct sockaddr *)dst);
+ IF_AFDATA_RLOCK(ifp);
+ la =3D lla_lookup(lt, LLE_EXCLUSIVE, (struct sockaddr *)dst);
IF_AFDATA_RUNLOCK(ifp);
- if ((la =3D=3D NULL) &&=20
+ if ((la =3D=3D NULL) &&
(ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) =3D=3D 0) {
IF_AFDATA_WLOCK(ifp);
- la =3D lla_lookup(lt,
- (LLE_CREATE | LLE_EXCLUSIVE),
+ la =3D lla_lookup(lt, (LLE_CREATE | LLE_EXCLUSIVE),
(struct sockaddr *)dst);
- IF_AFDATA_WUNLOCK(ifp);=09
+ IF_AFDATA_WUNLOCK(ifp);
}
- if (la !=3D NULL && (*llep !=3D la)) {
- if (*llep !=3D NULL)
- LLE_FREE(*llep);
+
+ if (la !=3D NULL) {
LLE_ADDREF(la);
LLE_WUNLOCK(la);
- *llep =3D la;
- } else if (la !=3D NULL)
- LLE_WUNLOCK(la);
+ }
=20
- if (la =3D=3D NULL)
- return (ENOENT);
-
- return (0);
+ return (la);
}
=20
/*
@@ -182,17 +181,16 @@
SLIST_REMOVE(&V_lltables, llt, lltable, llt_link);
LLTABLE_WUNLOCK();
=20
- for (i=3D0; i < LLTBL_HASHTBL_SIZE; i++) {
+ IF_AFDATA_WLOCK(llt->llt_ifp);
+ for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
- int canceled;
-
- canceled =3D callout_drain(&lle->la_timer);
LLE_WLOCK(lle);
- if (canceled)
+ if (callout_stop(&lle->la_timer))
LLE_REMREF(lle);
llentry_free(lle);
}
}
+ IF_AFDATA_WUNLOCK(llt->llt_ifp);
=20
free(llt, M_LLTABLE);
}
@@ -227,7 +225,7 @@
=20
void
lltable_prefix_free(int af, struct sockaddr *prefix, struct sockaddr *mask,
- u_int flags)
+ u_int flags)
{
struct lltable *llt;
=20
@@ -297,7 +295,7 @@
if (rtm->rtm_flags & RTF_ANNOUNCE) {
flags |=3D LLE_PUB;
#ifdef INET
- if (dst->sa_family =3D=3D AF_INET &&=20
+ if (dst->sa_family =3D=3D AF_INET &&
((struct sockaddr_inarp *)dst)->sin_other !=3D 0) {
struct rtentry *rt;
((struct sockaddr_inarp *)dst)->sin_other =3D 0;
@@ -342,7 +340,7 @@
=20
if (flags & LLE_CREATE)
flags |=3D LLE_EXCLUSIVE;
-=09
+
IF_AFDATA_LOCK(ifp);
lle =3D lla_lookup(llt, flags, dst);
IF_AFDATA_UNLOCK(ifp);
@@ -378,7 +376,7 @@
#ifdef INET
/* gratuitous ARP */
if ((laflags & LLE_PUB) && dst->sa_family =3D=3D AF_INET) {
- arprequest(ifp,=20
+ arprequest(ifp,
&((struct sockaddr_in *)dst)->sin_addr,
&((struct sockaddr_in *)dst)->sin_addr,
((laflags & LLE_PROXY) ?
@@ -451,7 +449,7 @@
=20
sin =3D (struct sockaddr_in *)&la->l3_addr;
inet_ntoa_r(sin->sin_addr, l3s);
- db_printf(" l3_addr=3D%s\n", l3s);=09
+ db_printf(" l3_addr=3D%s\n", l3s);
break;
}
#endif
@@ -463,7 +461,7 @@
=20
sin6 =3D (struct sockaddr_in6 *)&la->l3_addr;
ip6_sprintf(l3s, &sin6->sin6_addr);
- db_printf(" l3_addr=3D%s\n", l3s);=09
+ db_printf(" l3_addr=3D%s\n", l3s);
break;
}
#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_llatbl.h
--- a/head/sys/net/if_llatbl.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_llatbl.h Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/if_llatbl.h 232054 2012-02-23 18:21:37Z k=
macy $");
+__FBSDID("$FreeBSD: head/sys/net/if_llatbl.h 238990 2012-08-02 13:57:49Z g=
lebius $");
=20
#ifndef _NET_IF_LLATBL_H_
#define _NET_IF_LLATBL_H_
@@ -61,17 +61,17 @@
struct llentries *lle_head;
void (*lle_free)(struct lltable *, struct llentry *);
struct mbuf *la_hold;
- int la_numheld; /* # of packets currently held */
+ int la_numheld; /* # of packets currently held */
time_t la_expire;
- uint16_t la_flags; =20
+ uint16_t la_flags;
uint16_t la_asked;
uint16_t la_preempt;
uint16_t ln_byhint;
int16_t ln_state; /* IPv6 has ND6_LLINFO_NOSTATE =3D=3D -2 */
- uint16_t ln_router;=20
+ uint16_t ln_router;
time_t ln_ntick;
int lle_refcnt;
- =20
+
union {
uint64_t mac_aligned;
uint16_t mac16[3];
@@ -103,25 +103,28 @@
#define LLE_ADDREF(lle) do { \
LLE_WLOCK_ASSERT(lle); \
KASSERT((lle)->lle_refcnt >=3D 0, \
- ("negative refcnt %d", (lle)->lle_refcnt)); \
+ ("negative refcnt %d on lle %p", \
+ (lle)->lle_refcnt, (lle))); \
(lle)->lle_refcnt++; \
} while (0)
+
#define LLE_REMREF(lle) do { \
LLE_WLOCK_ASSERT(lle); \
- KASSERT((lle)->lle_refcnt > 1, \
- ("bogus refcnt %d", (lle)->lle_refcnt)); \
+ KASSERT((lle)->lle_refcnt > 0, \
+ ("bogus refcnt %d on lle %p", \
+ (lle)->lle_refcnt, (lle))); \
(lle)->lle_refcnt--; \
} while (0)
=20
#define LLE_FREE_LOCKED(lle) do { \
- if ((lle)->lle_refcnt <=3D 1) \
- (lle)->lle_free((lle)->lle_tbl, (lle));\
+ if ((lle)->lle_refcnt =3D=3D 1) \
+ (lle)->lle_free((lle)->lle_tbl, (lle)); \
else { \
- (lle)->lle_refcnt--; \
+ LLE_REMREF(lle); \
LLE_WUNLOCK(lle); \
} \
/* guard against invalid refs */ \
- lle =3D NULL; \
+ (lle) =3D NULL; \
} while (0)
=20
#define LLE_FREE(lle) do { \
@@ -158,7 +161,7 @@
struct llentry * (*llt_lookup)(struct lltable *, u_int flags,
const struct sockaddr *l3addr);
int (*llt_dump)(struct lltable *,
- struct sysctl_req *);
+ struct sysctl_req *);
};
MALLOC_DECLARE(M_LLTABLE);
=20
@@ -171,25 +174,26 @@
#define LLE_VALID 0x0008 /* ll_addr is valid */
#define LLE_PROXY 0x0010 /* proxy entry ??? */
#define LLE_PUB 0x0020 /* publish entry ??? */
+#define LLE_LINKED 0x0040 /* linked to lookup structure */
+#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */
#define LLE_CREATE 0x8000 /* create on a lookup miss */
-#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
=20
#define LLATBL_HASH(key, mask) \
(((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask)
=20
struct lltable *lltable_init(struct ifnet *, int);
void lltable_free(struct lltable *);
-void lltable_prefix_free(int, struct sockaddr *,=20
- struct sockaddr *, u_int);
+void lltable_prefix_free(int, struct sockaddr *,
+ struct sockaddr *, u_int);
#if 0
void lltable_drain(int);
#endif
int lltable_sysctl_dumparp(int, struct sysctl_req *);
=20
size_t llentry_free(struct llentry *);
-int llentry_update(struct llentry **, struct lltable *,
- struct sockaddr_storage *, struct ifnet *);
+struct llentry *llentry_alloc(struct ifnet *, struct lltable *,
+ struct sockaddr_storage *);
=20
/*
* Generic link layer address lookup function.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_loop.c
--- a/head/sys/net/if_loop.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_loop.c Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
* SUCH DAMAGE.
*
* @(#)if_loop.c 8.2 (Berkeley) 1/9/95
- * $FreeBSD: head/sys/net/if_loop.c 236332 2012-05-30 20:56:07Z tuexen $
+ * $FreeBSD: head/sys/net/if_loop.c 238871 2012-07-28 20:31:39Z bz $
*/
=20
/*
@@ -257,10 +257,20 @@
m->m_pkthdr.csum_flags &=3D ~LO_CSUM_FEATURES;
break;
case AF_INET6:
+#if 0
+ /*
+ * XXX-BZ for now always claim the checksum is good despite
+ * any interface flags. This is a workaround for 9.1-R and
+ * a proper solution ought to be sought later.
+ */
if (ifp->if_capenable & IFCAP_RXCSUM_IPV6) {
m->m_pkthdr.csum_data =3D 0xffff;
m->m_pkthdr.csum_flags =3D LO_CSUM_SET;
}
+#else
+ m->m_pkthdr.csum_data =3D 0xffff;
+ m->m_pkthdr.csum_flags =3D LO_CSUM_SET;
+#endif
m->m_pkthdr.csum_flags &=3D ~LO_CSUM_FEATURES6;
break;
case AF_IPX:
@@ -446,15 +456,29 @@
ifp->if_capenable ^=3D IFCAP_RXCSUM;
if ((mask & IFCAP_TXCSUM) !=3D 0)
ifp->if_capenable ^=3D IFCAP_TXCSUM;
- if ((mask & IFCAP_RXCSUM_IPV6) !=3D 0)
+ if ((mask & IFCAP_RXCSUM_IPV6) !=3D 0) {
+#if 0
ifp->if_capenable ^=3D IFCAP_RXCSUM_IPV6;
- if ((mask & IFCAP_TXCSUM_IPV6) !=3D 0)
+#else
+ error =3D EOPNOTSUPP;
+ break;
+#endif
+ }
+ if ((mask & IFCAP_TXCSUM_IPV6) !=3D 0) {
+#if 0
ifp->if_capenable ^=3D IFCAP_TXCSUM_IPV6;
+#else
+ error =3D EOPNOTSUPP;
+ break;
+#endif
+ }
ifp->if_hwassist =3D 0;
if (ifp->if_capenable & IFCAP_TXCSUM)
ifp->if_hwassist =3D LO_CSUM_FEATURES;
+#if 0
if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
ifp->if_hwassist |=3D LO_CSUM_FEATURES6;
+#endif
break;
=20
default:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_var.h
--- a/head/sys/net/if_var.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_var.h Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
* SUCH DAMAGE.
*
* From: @(#)if.h 8.1 (Berkeley) 6/10/93
- * $FreeBSD: head/sys/net/if_var.h 237263 2012-06-19 07:34:13Z np $
+ * $FreeBSD: head/sys/net/if_var.h 238990 2012-08-02 13:57:49Z glebius $
*/
=20
#ifndef _NET_IF_VAR_H_
@@ -415,6 +415,8 @@
#define IF_AFDATA_DESTROY(ifp) rw_destroy(&(ifp)->if_afdata_lock)
=20
#define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LO=
CKED)
+#define IF_AFDATA_RLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_R=
LOCKED)
+#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_W=
LOCKED)
#define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_=
UNLOCKED)
=20
int if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net80211/ieee80211.h
--- a/head/sys/net80211/ieee80211.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net80211/ieee80211.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: head/sys/net80211/ieee80211.h 234892 2012-05-01 16:14:18Z mon=
thadar $
+ * $FreeBSD: head/sys/net80211/ieee80211.h 239142 2012-08-08 17:16:06Z adr=
ian $
*/
#ifndef _NET80211_IEEE80211_H_
#define _NET80211_IEEE80211_H_
@@ -772,7 +772,7 @@
(sizeof(struct ieee80211_country_ie) + 3*(IEEE80211_COUNTRY_MAX_BANDS-1))
=20
/*
- * 802.11h Channel Switch Announcement (CSA).
+ * 802.11h Quiet Time Element.
*/
struct ieee80211_quiet_ie {
uint8_t quiet_ie; /* IEEE80211_ELEMID_QUIET */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net80211/ieee80211_hwmp.c
--- a/head/sys/net80211/ieee80211_hwmp.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net80211/ieee80211_hwmp.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/=20
#include <sys/cdefs.h>
#ifdef __FreeBSD__
-__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_hwmp.c 234896 2012-05-01 1=
6:18:38Z monthadar $");
+__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_hwmp.c 238942 2012-07-31 0=
8:05:40Z monthadar $");
#endif
=20
/*
@@ -840,7 +840,7 @@
IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, vap->iv_bss,
"%s", "send broadcast PREQ");
=20
- preq.preq_flags =3D IEEE80211_MESHPREQ_FLAGS_AM;
+ preq.preq_flags =3D 0;
if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE)
preq.preq_flags |=3D IEEE80211_MESHPREQ_FLAGS_GATE;
if (hs->hs_rootmode =3D=3D IEEE80211_HWMP_ROOTMODE_PROACTIVE)
@@ -912,6 +912,7 @@
struct ieee80211_hwmp_state *hs =3D vap->iv_hwmp;
struct ieee80211_meshprep_ie prep;
ieee80211_hwmp_seq preqid; /* last seen preqid for orig */
+ uint32_t metric =3D 0;
=20
if (ni =3D=3D vap->iv_bss ||
ni->ni_mlstate !=3D IEEE80211_NODE_MESH_ESTABLISHED)
@@ -951,7 +952,7 @@
hrtarg =3D IEEE80211_MESH_ROUTE_PRIV(rttarg,
struct ieee80211_hwmp_route);
/* Address mode: ucast */
- if((preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM) =3D=3D 0 &&
+ if(preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM &&
rttarg =3D=3D NULL &&
!IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0))) {
IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_HWMP,
@@ -985,13 +986,13 @@
/* Data creation and update of forwarding information
* according to Table 11C-8 for originator mesh STA.
*/
+ metric =3D preq->preq_metric + ms->ms_pmetric->mpm_metric(ni);
if (HWMP_SEQ_GT(preq->preq_origseq, hrorig->hr_seq) ||
(HWMP_SEQ_EQ(preq->preq_origseq, hrorig->hr_seq) &&
- preq->preq_metric < rtorig->rt_metric)) {
+ metric < rtorig->rt_metric)) {
hrorig->hr_seq =3D preq->preq_origseq;
IEEE80211_ADDR_COPY(rtorig->rt_nexthop, wh->i_addr2);
- rtorig->rt_metric =3D preq->preq_metric +
- ms->ms_pmetric->mpm_metric(ni);
+ rtorig->rt_metric =3D metric;
rtorig->rt_nhops =3D preq->preq_hopcount + 1;
ieee80211_mesh_rt_update(rtorig, preq->preq_lifetime);
/* path to orig is valid now */
@@ -1029,6 +1030,8 @@
hs->hs_seq =3D HWMP_SEQ_MAX(hs->hs_seq, PREQ_TSEQ(0)) + 1;
=20
prep.prep_flags =3D 0;
+ prep.prep_hopcount =3D 0;
+ IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr);
if (rttarg !=3D NULL && /* if NULL it means we are the target */
rttarg->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) {
IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni,
@@ -1038,13 +1041,13 @@
rttarg->rt_dest);
/* update proxy seqno to HWMP seqno */
rttarg->rt_ext_seq =3D hs->hs_seq;
+ prep.prep_hopcount =3D rttarg->rt_nhops;
+ IEEE80211_ADDR_COPY(prep.prep_targetaddr, rttarg->rt_mesh_gate);
}
/*
* Build and send a PREP frame.
*/
- prep.prep_hopcount =3D 0;
prep.prep_ttl =3D ms->ms_ttl;
- IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr);
prep.prep_targetseq =3D hs->hs_seq;
prep.prep_lifetime =3D preq->preq_lifetime;
prep.prep_metric =3D IEEE80211_MESHLMETRIC_INITIALVAL;
@@ -1286,7 +1289,7 @@
IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni,
"discard PREP from %6D, new metric %u > %u",
prep->prep_targetaddr, ":",
- prep->prep_metric, rt->rt_metric);
+ metric, rt->rt_metric);
return;
}
}
@@ -1296,7 +1299,7 @@
rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ?
"prefer" : "update",
prep->prep_targetaddr, ":",
- rt->rt_nhops, prep->prep_hopcount,
+ rt->rt_nhops, prep->prep_hopcount + 1,
rt->rt_metric, metric);
=20
hr->hr_seq =3D prep->prep_targetseq;
@@ -1368,7 +1371,7 @@
rtext->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ?
"prefer" : "update",
prep->prep_target_ext_addr, ":",
- rtext->rt_nhops, prep->prep_hopcount,
+ rtext->rt_nhops, prep->prep_hopcount + 1,
rtext->rt_metric, metric);
=20
rtext->rt_flags =3D IEEE80211_MESHRT_FLAGS_PROXY |
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netgraph/ng_ether.c
--- a/head/sys/netgraph/ng_ether.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netgraph/ng_ether.c Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
* Authors: Archie Cobbs <archie at freebsd.org>
* Julian Elischer <julian at freebsd.org>
*
- * $FreeBSD: head/sys/netgraph/ng_ether.c 224307 2011-07-25 09:12:48Z avg $
+ * $FreeBSD: head/sys/netgraph/ng_ether.c 238844 2012-07-27 13:57:28Z emas=
te $
*/
=20
/*
@@ -71,6 +71,8 @@
#include <netgraph/ng_parse.h>
#include <netgraph/ng_ether.h>
=20
+MODULE_VERSION(ng_ether, 1);
+
#define IFP2NG(ifp) (IFP2AC((ifp))->ac_netgraph)
=20
/* Per-node private data */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netgraph/ng_pptpgre.c
--- a/head/sys/netgraph/ng_pptpgre.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netgraph/ng_pptpgre.c Fri Aug 10 14:19:25 2012 +0300
@@ -37,7 +37,7 @@
*
* Author: Archie Cobbs <archie at freebsd.org>
*
- * $FreeBSD: head/sys/netgraph/ng_pptpgre.c 220768 2011-04-18 09:12:27Z gl=
ebius $
+ * $FreeBSD: head/sys/netgraph/ng_pptpgre.c 239007 2012-08-03 12:55:31Z ma=
v $
* $Whistle: ng_pptpgre.c,v 1.7 1999/12/08 00:10:06 archie Exp $
*/
=20
@@ -562,7 +562,7 @@
}
=20
/* Sanity check frame length */
- if (m !=3D NULL && m->m_pkthdr.len > PPTP_MAX_PAYLOAD) {
+ if (m->m_pkthdr.len > PPTP_MAX_PAYLOAD) {
priv->stats.xmitTooBig++;
ERROUT(EMSGSIZE);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/if_ether.c
--- a/head/sys/netinet/if_ether.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/if_ether.c Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/if_ether.c 237263 2012-06-19 07:34:13=
Z np $");
+__FBSDID("$FreeBSD: head/sys/netinet/if_ether.c 238990 2012-08-02 13:57:49=
Z glebius $");
=20
#include "opt_inet.h"
=20
@@ -87,8 +87,8 @@
VNET_DEFINE(int, useloopback) =3D 1; /* use loopback interface for
* local traffic */
static VNET_DEFINE(int, arp_proxyall) =3D 0;
-static VNET_DEFINE(int, arpt_down) =3D 20; /* keep incomplete entries=
for
- * 20 seconds */
+static VNET_DEFINE(int, arpt_down) =3D 20; /* keep incomplete entries for
+ * 20 seconds */
VNET_DEFINE(struct arpstat, arpstat); /* ARP statistics, see if_arp.h */
=20
static VNET_DEFINE(int, arp_maxhold) =3D 1;
@@ -119,7 +119,7 @@
&VNET_NAME(arpstat), arpstat,
"ARP statistics (struct arpstat, net/if_arp.h)");
SYSCTL_VNET_INT(_net_link_ether_inet, OID_AUTO, maxhold, CTLFLAG_RW,
- &VNET_NAME(arp_maxhold), 0,=20
+ &VNET_NAME(arp_maxhold), 0,
"Number of packets to hold per ARP entry");
=20
static void arp_init(void);
@@ -163,49 +163,40 @@
static void
arptimer(void *arg)
{
+ struct llentry *lle =3D (struct llentry *)arg;
struct ifnet *ifp;
- struct llentry *lle;
- int pkts_dropped;
+ size_t pkts_dropped;
=20
- KASSERT(arg !=3D NULL, ("%s: arg NULL", __func__));
- lle =3D (struct llentry *)arg;
+ if (lle->la_flags & LLE_STATIC) {
+ LLE_WUNLOCK(lle);
+ return;
+ }
+
ifp =3D lle->lle_tbl->llt_ifp;
CURVNET_SET(ifp->if_vnet);
+
+ if (lle->la_flags !=3D LLE_DELETED) {
+ int evt;
+
+ if (lle->la_flags & LLE_VALID)
+ evt =3D LLENTRY_EXPIRED;
+ else
+ evt =3D LLENTRY_TIMEDOUT;
+ EVENTHANDLER_INVOKE(lle_event, lle, evt);
+ }
+
+ callout_stop(&lle->la_timer);
+
+ /* XXX: LOR avoidance. We still have ref on lle. */
+ LLE_WUNLOCK(lle);
IF_AFDATA_LOCK(ifp);
LLE_WLOCK(lle);
- if (lle->la_flags & LLE_STATIC)
- LLE_WUNLOCK(lle);
- else {
- if (!callout_pending(&lle->la_timer) &&
- callout_active(&lle->la_timer)) {
- callout_stop(&lle->la_timer);
- LLE_REMREF(lle);
=20
- if (lle->la_flags !=3D LLE_DELETED) {
- int evt;
-
- if (lle->la_flags & LLE_VALID)
- evt =3D LLENTRY_EXPIRED;
- else
- evt =3D LLENTRY_TIMEDOUT;
- EVENTHANDLER_INVOKE(lle_event, lle, evt);
- }
-
- pkts_dropped =3D llentry_free(lle);
- ARPSTAT_ADD(dropped, pkts_dropped);
- ARPSTAT_INC(timeouts);
- } else {
-#ifdef DIAGNOSTIC
- struct sockaddr *l3addr =3D L3_ADDR(lle);
- log(LOG_INFO,=20
- "arptimer issue: %p, IPv4 address: \"%s\"\n", lle,
- inet_ntoa(
- ((const struct sockaddr_in *)l3addr)->sin_addr));
-#endif
- LLE_WUNLOCK(lle);
- }
- }
+ LLE_REMREF(lle);
+ pkts_dropped =3D llentry_free(lle);
IF_AFDATA_UNLOCK(ifp);
+ ARPSTAT_ADD(dropped, pkts_dropped);
+ ARPSTAT_INC(timeouts);
CURVNET_RESTORE();
}
=20
@@ -250,7 +241,7 @@
break; /* found it. */
}
IF_ADDR_RUNLOCK(ifp);
- if (sip =3D=3D NULL) { =20
+ if (sip =3D=3D NULL) {
printf("%s: cannot find matching address\n", __func__);
return;
}
@@ -322,15 +313,15 @@
}
}
retry:
- IF_AFDATA_RLOCK(ifp);=09
+ IF_AFDATA_RLOCK(ifp);
la =3D lla_lookup(LLTABLE(ifp), flags, dst);
- IF_AFDATA_RUNLOCK(ifp);=09
+ IF_AFDATA_RUNLOCK(ifp);
if ((la =3D=3D NULL) && ((flags & LLE_EXCLUSIVE) =3D=3D 0)
- && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) =3D=3D 0)) { =09
+ && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) =3D=3D 0)) {
flags |=3D (LLE_CREATE | LLE_EXCLUSIVE);
- IF_AFDATA_WLOCK(ifp);=09
+ IF_AFDATA_WLOCK(ifp);
la =3D lla_lookup(LLTABLE(ifp), flags, dst);
- IF_AFDATA_WUNLOCK(ifp);=09
+ IF_AFDATA_WUNLOCK(ifp);
}
if (la =3D=3D NULL) {
if (flags & LLE_CREATE)
@@ -339,7 +330,7 @@
inet_ntoa(SIN(dst)->sin_addr));
m_freem(m);
return (EINVAL);
- }=20
+ }
=20
if ((la->la_flags & LLE_VALID) &&
((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) {
@@ -354,12 +345,12 @@
arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL);
la->la_preempt--;
}
- =09
+
*lle =3D la;
error =3D 0;
goto done;
- }=20
- =20
+ }
+
if (la->la_flags & LLE_STATIC) { /* should not happen! */
log(LOG_DEBUG, "arpresolve: ouch, empty static llinfo for %s\n",
inet_ntoa(SIN(dst)->sin_addr));
@@ -389,20 +380,20 @@
la->la_numheld--;
ARPSTAT_INC(dropped);
}
- }=20
+ }
if (la->la_hold !=3D NULL) {
curr =3D la->la_hold;
while (curr->m_nextpkt !=3D NULL)
curr =3D curr->m_nextpkt;
curr->m_nextpkt =3D m;
- } else=20
+ } else
la->la_hold =3D m;
la->la_numheld++;
if (renew =3D=3D 0 && (flags & LLE_EXCLUSIVE)) {
flags &=3D ~LLE_EXCLUSIVE;
LLE_DOWNGRADE(la);
}
- =09
+
}
/*
* Return EWOULDBLOCK if we have tried less than arp_maxtries. It
@@ -510,11 +501,11 @@
&log_arp_wrong_iface, 0,
"log arp packets arriving on the wrong interface");
SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_movements, CTLFLAG_RW,
- &log_arp_movements, 0,
- "log arp replies from MACs different than the one in the cache");
+ &log_arp_movements, 0,
+ "log arp replies from MACs different than the one in the cache");
SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_permanent_modify, CTLFL=
AG_RW,
- &log_arp_permanent_modify, 0,
- "log arp replies from MACs different than the one in the permanent=
arp entry");
+ &log_arp_permanent_modify, 0,
+ "log arp replies from MACs different than the one in the permanent arp en=
try");
=20
=20
static void
@@ -550,7 +541,7 @@
}
=20
ah =3D mtod(m, struct arphdr *);
- /*=20
+ /*
* ARP is only for IPv4 so we can reject packets with
* a protocol length not equal to an IPv4 address.
*/
@@ -686,7 +677,7 @@
sin.sin_addr =3D isaddr;
flags =3D (itaddr.s_addr =3D=3D myaddr.s_addr) ? LLE_CREATE : 0;
flags |=3D LLE_EXCLUSIVE;
- IF_AFDATA_LOCK(ifp);=20
+ IF_AFDATA_LOCK(ifp);
la =3D lla_lookup(LLTABLE(ifp), flags, (struct sockaddr *)&sin);
IF_AFDATA_UNLOCK(ifp);
if (la !=3D NULL) {
@@ -716,7 +707,7 @@
goto reply;
}
if (log_arp_movements) {
- log(LOG_INFO, "arp: %s moved from %*D "
+ log(LOG_INFO, "arp: %s moved from %*D "
"to %*D on %s\n",
inet_ntoa(isaddr),
ifp->if_addrlen,
@@ -725,7 +716,7 @@
ifp->if_xname);
}
}
- =20
+
if (ifp->if_addrlen !=3D ah->ar_hln) {
LLE_WUNLOCK(la);
log(LOG_WARNING, "arp from %*D: addr len: new %d, "
@@ -751,7 +742,7 @@
}
la->la_asked =3D 0;
la->la_preempt =3D V_arp_maxtries;
- /*=20
+ /*
* The packets are all freed within the call to the output
* routine.
*
@@ -787,7 +778,7 @@
struct llentry *lle =3D NULL;
=20
sin.sin_addr =3D itaddr;
- IF_AFDATA_LOCK(ifp);=20
+ IF_AFDATA_LOCK(ifp);
lle =3D lla_lookup(LLTABLE(ifp), 0, (struct sockaddr *)&sin);
IF_AFDATA_UNLOCK(ifp);
=20
@@ -802,7 +793,7 @@
=20
if (!V_arp_proxyall)
goto drop;
- =09
+
sin.sin_addr =3D itaddr;
/* XXX MRT use table 0 for arp reply */
rt =3D in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
@@ -830,7 +821,7 @@
* wrong network.
*/
sin.sin_addr =3D isaddr;
- =09
+
/* XXX MRT use table 0 for arp checks */
rt =3D in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
if (!rt)
@@ -846,8 +837,7 @@
RTFREE_LOCKED(rt);
=20
#ifdef DEBUG_PROXY
- printf("arp: proxying for %s\n",
- inet_ntoa(itaddr));
+ printf("arp: proxying for %s\n", inet_ntoa(itaddr));
#endif
}
}
@@ -869,8 +859,8 @@
(void)memcpy(ar_spa(ah), &itaddr, ah->ar_pln);
ah->ar_op =3D htons(ARPOP_REPLY);
ah->ar_pro =3D htons(ETHERTYPE_IP); /* let's be sure! */
- m->m_len =3D sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln); =20
- m->m_pkthdr.len =3D m->m_len; =20
+ m->m_len =3D sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln);
+ m->m_pkthdr.len =3D m->m_len;
m->m_pkthdr.rcvif =3D NULL;
sa.sa_family =3D AF_ARP;
sa.sa_len =3D 2;
@@ -894,7 +884,7 @@
if (ntohl(IA_SIN(ifa)->sin_addr.s_addr) !=3D INADDR_ANY) {
arprequest(ifp, &IA_SIN(ifa)->sin_addr,
&IA_SIN(ifa)->sin_addr, IF_LLADDR(ifp));
- /*=20
+ /*
* interface address is considered static entry
* because the output of the arp utility shows
* that L2 entry as permanent
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/in.c
--- a/head/sys/netinet/in.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/in.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/in.c 237263 2012-06-19 07:34:13Z np $=
");
+__FBSDID("$FreeBSD: head/sys/netinet/in.c 238990 2012-08-02 13:57:49Z gleb=
ius $");
=20
#include "opt_mpath.h"
=20
@@ -489,20 +489,20 @@
ia->ia_addr.sin_addr.s_addr)
hostIsNew =3D 0;
if (ifra->ifra_mask.sin_len) {
- /*=20
+ /*
* QL: XXX
* Need to scrub the prefix here in case
* the issued command is SIOCAIFADDR with
* the same address, but with a different
* prefix length. And if the prefix length
- * is the same as before, then the call is=20
+ * is the same as before, then the call is
* un-necessarily executed here.
*/
in_ifscrub(ifp, ia, LLE_STATIC);
ia->ia_sockmask =3D ifra->ifra_mask;
ia->ia_sockmask.sin_family =3D AF_INET;
ia->ia_subnetmask =3D
- ntohl(ia->ia_sockmask.sin_addr.s_addr);
+ ntohl(ia->ia_sockmask.sin_addr.s_addr);
maskIsNew =3D 1;
}
if ((ifp->if_flags & IFF_POINTOPOINT) &&
@@ -886,8 +886,8 @@
RT_ADDREF(ia_ro.ro_rt);
RTFREE_LOCKED(ia_ro.ro_rt);
} else
- error =3D ifa_add_loopback_route((struct ifaddr *)ia,=20
- (struct sockaddr *)&ia->ia_addr);
+ error =3D ifa_add_loopback_route((struct ifaddr *)ia,
+ (struct sockaddr *)&ia->ia_addr);
if (error =3D=3D 0)
ia->ia_flags |=3D IFA_RTSELF;
if (ia_ro.ro_rt !=3D NULL)
@@ -902,10 +902,10 @@
? RTF_HOST : 0)
=20
/*
- * Generate a routing message when inserting or deleting=20
+ * Generate a routing message when inserting or deleting
* an interface address alias.
*/
-static void in_addralias_rtmsg(int cmd, struct in_addr *prefix,=20
+static void in_addralias_rtmsg(int cmd, struct in_addr *prefix,
struct in_ifaddr *target)
{
struct route pfx_ro;
@@ -928,16 +928,13 @@
=20
/* QL: XXX
* Point the gateway to the new interface
- * address as if a new prefix route entry has=20
- * been added through the new address alias.=20
- * All other parts of the rtentry is accurate,=20
+ * address as if a new prefix route entry has
+ * been added through the new address alias.
+ * All other parts of the rtentry is accurate,
* e.g., rt_key, rt_mask, rt_ifp etc.
*/
- msg_rt.rt_gateway =3D=20
- (struct sockaddr *)&target->ia_addr;
- rt_newaddrmsg(cmd,=20
- (struct ifaddr *)target,
- 0, &msg_rt);
+ msg_rt.rt_gateway =3D (struct sockaddr *)&target->ia_addr;
+ rt_newaddrmsg(cmd, (struct ifaddr *)target, 0, &msg_rt);
RTFREE(pfx_ro.ro_rt);
}
return;
@@ -985,7 +982,7 @@
*/
if (ia->ia_flags & IFA_ROUTE) {
#ifdef RADIX_MPATH
- if (ia->ia_addr.sin_addr.s_addr =3D=3D=20
+ if (ia->ia_addr.sin_addr.s_addr =3D=3D
target->ia_addr.sin_addr.s_addr) {
IN_IFADDR_RUNLOCK();
return (EEXIST);
@@ -1058,7 +1055,7 @@
}
if (freeit && (flags & LLE_STATIC)) {
error =3D ifa_del_loopback_route((struct ifaddr *)target,
- (struct sockaddr *)&target->ia_addr);
+ (struct sockaddr *)&target->ia_addr);
if (error =3D=3D 0)
target->ia_flags &=3D ~IFA_RTSELF;
}
@@ -1141,8 +1138,8 @@
mask0.sin_len =3D sizeof(mask0);
mask0.sin_family =3D AF_INET;
mask0.sin_addr.s_addr =3D target->ia_subnetmask;
- lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0,=20
- (struct sockaddr *)&mask0, flags);
+ lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0,
+ (struct sockaddr *)&mask0, flags);
=20
/*
* As no-one seem to have this prefix, we can remove the route.
@@ -1184,14 +1181,14 @@
* Check for old-style (host 0) broadcast, but
* taking into account that RFC 3021 obsoletes it.
*/
- (ia->ia_subnetmask !=3D IN_RFC3021_MASK &&
- t =3D=3D ia->ia_subnet)) &&
+ (ia->ia_subnetmask !=3D IN_RFC3021_MASK &&
+ t =3D=3D ia->ia_subnet)) &&
/*
* Check for an all one subnetmask. These
* only exist when an interface gets a secondary
* address.
*/
- ia->ia_subnetmask !=3D (u_long)0xffffffff)
+ ia->ia_subnetmask !=3D (u_long)0xffffffff)
return (1);
return (0);
#undef ia
@@ -1283,7 +1280,6 @@
if (lle =3D=3D NULL) /* NB: caller generates msg */
return NULL;
=20
- callout_init(&lle->base.la_timer, CALLOUT_MPSAFE);
/*
* For IPv4 this will trigger "arpresolve" to generate
* an ARP request.
@@ -1293,45 +1289,44 @@
lle->base.lle_refcnt =3D 1;
lle->base.lle_free =3D in_lltable_free;
LLE_LOCK_INIT(&lle->base);
- return &lle->base;
+ callout_init_rw(&lle->base.la_timer, &lle->base.lle_lock,
+ CALLOUT_RETURNUNLOCKED);
+
+ return (&lle->base);
}
=20
#define IN_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \
(((ntohl((d)->sin_addr.s_addr) ^ (a)->sin_addr.s_addr) & (m)->sin_add=
r.s_addr)) =3D=3D 0 )
=20
static void
-in_lltable_prefix_free(struct lltable *llt,=20
- const struct sockaddr *prefix,
- const struct sockaddr *mask,
- u_int flags)
+in_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix,
+ const struct sockaddr *mask, u_int flags)
{
const struct sockaddr_in *pfx =3D (const struct sockaddr_in *)prefix;
const struct sockaddr_in *msk =3D (const struct sockaddr_in *)mask;
struct llentry *lle, *next;
- register int i;
+ int i;
size_t pkts_dropped;
=20
- for (i=3D0; i < LLTBL_HASHTBL_SIZE; i++) {
+ IF_AFDATA_WLOCK(llt->llt_ifp);
+ for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
-
- /*=20
+ /*
* (flags & LLE_STATIC) means deleting all entries
- * including static ARP entries
+ * including static ARP entries.
*/
- if (IN_ARE_MASKED_ADDR_EQUAL((struct sockaddr_in *)L3_ADDR(lle),=20
- pfx, msk) &&
- ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) {
- int canceled;
-
- canceled =3D callout_drain(&lle->la_timer);
+ if (IN_ARE_MASKED_ADDR_EQUAL(satosin(L3_ADDR(lle)),
+ pfx, msk) && ((flags & LLE_STATIC) ||
+ !(lle->la_flags & LLE_STATIC))) {
LLE_WLOCK(lle);
- if (canceled)
+ if (callout_stop(&lle->la_timer))
LLE_REMREF(lle);
pkts_dropped =3D llentry_free(lle);
ARPSTAT_ADD(dropped, pkts_dropped);
}
}
}
+ IF_AFDATA_WUNLOCK(llt->llt_ifp);
}
=20
=20
@@ -1357,19 +1352,18 @@
*/
if (rt->rt_flags & RTF_GATEWAY) {
if (!(rt->rt_flags & RTF_HOST) || !rt->rt_ifp ||
- rt->rt_ifp->if_type !=3D IFT_ETHER ||
- (rt->rt_ifp->if_flags &=20
- (IFF_NOARP | IFF_STATICARP)) !=3D 0 ||
- memcmp(rt->rt_gateway->sa_data, l3addr->sa_data,
- sizeof(in_addr_t)) !=3D 0) {
+ rt->rt_ifp->if_type !=3D IFT_ETHER ||
+ (rt->rt_ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) !=3D 0 ||
+ memcmp(rt->rt_gateway->sa_data, l3addr->sa_data,
+ sizeof(in_addr_t)) !=3D 0) {
RTFREE_LOCKED(rt);
return (EINVAL);
}
}
=20
/*
- * Make sure that at least the destination address is covered=20
- * by the route. This is for handling the case where 2 or more=20
+ * Make sure that at least the destination address is covered
+ * by the route. This is for handling the case where 2 or more
* interfaces have the same prefix. An incoming packet arrives
* on one interface and the corresponding outgoing packet leaves
* another interface.
@@ -1429,7 +1423,7 @@
hashkey =3D sin->sin_addr.s_addr;
lleh =3D &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)];
LIST_FOREACH(lle, lleh, lle_next) {
- struct sockaddr_in *sa2 =3D (struct sockaddr_in *)L3_ADDR(lle);
+ struct sockaddr_in *sa2 =3D satosin(L3_ADDR(lle));
if (lle->la_flags & LLE_DELETED)
continue;
if (sa2->sin_addr.s_addr =3D=3D sin->sin_addr.s_addr)
@@ -1438,7 +1432,7 @@
if (lle =3D=3D NULL) {
#ifdef DIAGNOSTIC
if (flags & LLE_DELETE)
- log(LOG_INFO, "interface address is missing from cache =3D %p in delet=
e\n", lle);=09
+ log(LOG_INFO, "interface address is missing from cache =3D %p in delet=
e\n", lle);
#endif
if (!(flags & LLE_CREATE))
return (NULL);
@@ -1464,19 +1458,20 @@
=20
lle->lle_tbl =3D llt;
lle->lle_head =3D lleh;
+ lle->la_flags |=3D LLE_LINKED;
LIST_INSERT_HEAD(lleh, lle, lle_next);
} else if (flags & LLE_DELETE) {
if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
LLE_WLOCK(lle);
- lle->la_flags =3D LLE_DELETED;
+ lle->la_flags |=3D LLE_DELETED;
EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED);
LLE_WUNLOCK(lle);
#ifdef DIAGNOSTIC
- log(LOG_INFO, "ifaddr cache =3D %p is deleted\n", lle);=09
+ log(LOG_INFO, "ifaddr cache =3D %p is deleted\n", lle);
#endif
}
lle =3D (void *)-1;
- =09
+
}
if (LLE_IS_VALID(lle)) {
if (flags & LLE_EXCLUSIVE)
@@ -1508,7 +1503,7 @@
for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH(lle, &llt->lle_head[i], lle_next) {
struct sockaddr_dl *sdl;
- =09
+
/* skip deleted entries */
if ((lle->la_flags & LLE_DELETED) =3D=3D LLE_DELETED)
continue;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/in_cksum.c
--- a/head/sys/netinet/in_cksum.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/in_cksum.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/netinet/in_cksum.c 238941 2012-07-31 08:04:49=
Z luigi $");
=20
#include <sys/param.h>
#include <sys/mbuf.h>
@@ -88,7 +88,7 @@
/*
* Force to even boundary.
*/
- if ((1 & (int) w) && (mlen > 0)) {
+ if ((1 & (uintptr_t) w) && (mlen > 0)) {
REDUCE;
sum <<=3D 8;
s_util.c[0] =3D *(u_char *)w;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ip_dummynet.h
--- a/head/sys/netinet/ip_dummynet.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ip_dummynet.h Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: head/sys/netinet/ip_dummynet.h 239124 2012-08-07 07:52:25Z lu=
igi $
*/
=20
#ifndef _IP_DUMMYNET_H
@@ -171,8 +171,8 @@
struct ipfw_flow_id fid;
uint64_t tot_pkts; /* statistics counters */
uint64_t tot_bytes;
- uint32_t length; /* Queue lenght, in packets */
- uint32_t len_bytes; /* Queue lenght, in bytes */
+ uint32_t length; /* Queue length, in packets */
+ uint32_t len_bytes; /* Queue length, in bytes */
uint32_t drops;
};
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/dummynet.txt
--- a/head/sys/netinet/ipfw/dummynet.txt Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/dummynet.txt Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
#
-# $FreeBSD: head/sys/netinet/ipfw/dummynet.txt 227458 2011-11-11 22:27:09Z=
eadler $
+# $FreeBSD: head/sys/netinet/ipfw/dummynet.txt 239124 2012-08-07 07:52:25Z=
luigi $
#
=20
Notes on the internal structure of dummynet (2010 version)
@@ -839,7 +839,7 @@
=20
The struct scheduler represent the scheduler descriptor that is passed to
dummynet when a scheduler module is loaded.
-This struct contains the type of scheduler, the lenght of all structs and
+This struct contains the type of scheduler, the length of all structs and
all function pointers.
If a function is not implemented should be initialize to NULL. Some functi=
ons
are mandatory, other are mandatory if some memory should be freed.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_dn_io.c
--- a/head/sys/netinet/ipfw/ip_dn_io.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_dn_io.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
* Dummynet portions related to packet handling.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dn_io.c 227309 2011-11-07 15:=
43:11Z ed $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dn_io.c 239093 2012-08-06 11:=
02:23Z luigi $");
=20
#include "opt_inet6.h"
=20
@@ -98,17 +98,11 @@
=20
#ifdef SYSCTL_NODE
=20
-SYSBEGIN(f4)
-
-SYSCTL_DECL(_net_inet);
-SYSCTL_DECL(_net_inet_ip);
-static SYSCTL_NODE(_net_inet_ip, OID_AUTO, dummynet, CTLFLAG_RW, 0, "Dummy=
net");
-
-/* wrapper to pass dn_cfg fields to SYSCTL_* */
-//#define DC(x) (&(VNET_NAME(_base_dn_cfg).x))
-#define DC(x) (&(dn_cfg.x))
-/* parameters */
-
+/*
+ * Because of the way the SYSBEGIN/SYSEND macros work on other
+ * platforms, there should not be functions between them.
+ * So keep the handlers outside the block.
+ */
static int
sysctl_hash_size(SYSCTL_HANDLER_ARGS)
{
@@ -124,10 +118,6 @@
return (0);
}
=20
-SYSCTL_PROC(_net_inet_ip_dummynet, OID_AUTO, hash_size,
- CTLTYPE_INT | CTLFLAG_RW, 0, 0, sysctl_hash_size,
- "I", "Default hash table size");
-
static int
sysctl_limits(SYSCTL_HANDLER_ARGS)
{
@@ -154,6 +144,23 @@
return (0);
}
=20
+SYSBEGIN(f4)
+
+SYSCTL_DECL(_net_inet);
+SYSCTL_DECL(_net_inet_ip);
+static SYSCTL_NODE(_net_inet_ip, OID_AUTO, dummynet, CTLFLAG_RW, 0, "Dummy=
net");
+
+/* wrapper to pass dn_cfg fields to SYSCTL_* */
+//#define DC(x) (&(VNET_NAME(_base_dn_cfg).x))
+#define DC(x) (&(dn_cfg.x))
+/* parameters */
+
+
+SYSCTL_PROC(_net_inet_ip_dummynet, OID_AUTO, hash_size,
+ CTLTYPE_INT | CTLFLAG_RW, 0, 0, sysctl_hash_size,
+ "I", "Default hash table size");
+
+
SYSCTL_PROC(_net_inet_ip_dummynet, OID_AUTO, pipe_slot_limit,
CTLTYPE_LONG | CTLFLAG_RW, 0, 1, sysctl_limits,
"L", "Upper limit in slots for pipe queue.");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_dummynet.c
--- a/head/sys/netinet/ipfw/ip_dummynet.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_dummynet.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dummynet.c 238063 2012-07-03 =
08:42:48Z issyl0 $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dummynet.c 238988 2012-08-02 =
12:45:13Z luigi $");
=20
/*
* Configuration and internal object management for dummynet.
@@ -77,9 +77,10 @@
static struct taskqueue *dn_tq =3D NULL;
=20
static void
-dummynet(void * __unused unused)
+dummynet(void *arg)
{
=20
+ (void)arg; /* UNUSED */
taskqueue_enqueue(dn_tq, &dn_task);
}
=20
@@ -1286,7 +1287,7 @@
}
if (nfs->flags & DN_HAVE_MASK) {
/* make sure we have some buckets */
- ipdn_bound_var(&nfs->buckets, dn_cfg.hash_size,
+ ipdn_bound_var((int *)&nfs->buckets, dn_cfg.hash_size,
1, dn_cfg.max_hash_size, "flowset buckets");
} else {
nfs->buckets =3D 1; /* we only need 1 */
@@ -1371,7 +1372,7 @@
return EINVAL;
/* make sure we have some buckets */
if (a.sch->flags & DN_HAVE_MASK)
- ipdn_bound_var(&a.sch->buckets, dn_cfg.hash_size,
+ ipdn_bound_var((int *)&a.sch->buckets, dn_cfg.hash_size,
1, dn_cfg.max_hash_size, "sched buckets");
/* XXX other sanity checks */
bzero(&p, sizeof(p));
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_fw2.c
--- a/head/sys/netinet/ipfw/ip_fw2.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_fw2.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw2.c 233478 2012-03-25 20:37=
:59Z melifaro $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw2.c 238977 2012-08-01 18:49=
:00Z luigi $");
=20
/*
* The FreeBSD IP packet firewall, main file
@@ -176,7 +176,7 @@
&default_to_accept, 0,
"Make the default rule accept all packets.");
TUNABLE_INT("net.inet.ip.fw.default_to_accept", &default_to_accept);
-TUNABLE_INT("net.inet.ip.fw.tables_max", &default_fw_tables);
+TUNABLE_INT("net.inet.ip.fw.tables_max", (int *)&default_fw_tables);
SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, static_count,
CTLFLAG_RD, &VNET_NAME(layer3_chain.n_rules), 0,
"Number of static rules");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_fw_dynamic.c
--- a/head/sys/netinet/ipfw/ip_fw_dynamic.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_fw_dynamic.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_dynamic.c 232273 2012-02-2=
8 22:00:41Z oleg $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_dynamic.c 238978 2012-08-0=
1 18:52:07Z luigi $");
=20
#define DEB(x)
#define DDB(x) x
@@ -275,9 +275,9 @@
#endif
{
da.s_addr =3D htonl(id->src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src, sizeof(src));
da.s_addr =3D htonl(id->dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst, sizeof(dst));
}
printf("ipfw: unlink entry %s %d -> %s %d, %d left\n",
src, id->src_port, dst, id->dst_port, V_dyn_count - 1);
@@ -656,9 +656,9 @@
#endif
{
da.s_addr =3D htonl(r->id.src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src, sizeof(src));
da.s_addr =3D htonl(r->id.dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst, sizeof(dst));
}
printf("ipfw: add dyn entry ty %d %s %d -> %s %d, total %d\n",
dyn_type, src, r->id.src_port, dst, r->id.dst_port,
@@ -740,9 +740,9 @@
#endif
{
da.s_addr =3D htonl(args->f_id.src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src, sizeof(src));
da.s_addr =3D htonl(args->f_id.dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst, sizeof(dst));
}
printf("ipfw: %s: type %d %s %u -> %s %u\n",
__func__, cmd->o.opcode, src, args->f_id.src_port,
@@ -850,10 +850,12 @@
{
da.s_addr =3D
htonl(args->f_id.src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src,
+ sizeof(src));
da.s_addr =3D
htonl(args->f_id.dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst,
+ sizeof(dst));
}
log(LOG_SECURITY | LOG_DEBUG,
"ipfw: %d %s %s:%u -> %s:%u, %s\n",
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_fw_log.c
--- a/head/sys/netinet/ipfw/ip_fw_log.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_fw_log.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_log.c 238277 2012-07-09 07=
:16:19Z hrs $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_log.c 239092 2012-08-06 10=
:50:43Z luigi $");
=20
/*
* Logging support for ipfw
@@ -115,7 +115,7 @@
struct sockaddr *dst, struct route *ro)
{
if (m !=3D NULL)
- m_freem(m);
+ FREE_PKT(m);
return EINVAL;
}
=20
@@ -450,8 +450,8 @@
tcp =3D L3HDR(struct tcphdr, ip);
udp =3D L3HDR(struct udphdr, ip);
=20
- inet_ntoa_r(ip->ip_src, src);
- inet_ntoa_r(ip->ip_dst, dst);
+ inet_ntop(AF_INET, &ip->ip_src, src, sizeof(src));
+ inet_ntop(AF_INET, &ip->ip_dst, dst, sizeof(dst));
}
=20
switch (args->f_id.proto) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_bsd_addr.c
--- a/head/sys/netinet/sctp_bsd_addr.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_bsd_addr.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_bsd_addr.c 237540 2012-06-24 21:=
25:54Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_bsd_addr.c 239035 2012-08-04 08:=
03:30Z tuexen $");
=20
#include <netinet/sctp_os.h>
#include <netinet/sctp_var.h>
@@ -152,12 +152,12 @@
=20
=20
static uint32_t
-sctp_is_desired_interface_type(struct ifaddr *ifa)
+sctp_is_desired_interface_type(struct ifnet *ifn)
{
int result;
=20
/* check the interface type to see if it's one we care about */
- switch (ifa->ifa_ifp->if_type) {
+ switch (ifn->if_type) {
case IFT_ETHER:
case IFT_ISO88023:
case IFT_ISO88024:
@@ -216,6 +216,10 @@
=20
IFNET_RLOCK();
TAILQ_FOREACH(ifn, &MODULE_GLOBAL(ifnet), if_list) {
+ if (sctp_is_desired_interface_type(ifn) =3D=3D 0) {
+ /* non desired type */
+ continue;
+ }
IF_ADDR_RLOCK(ifn);
TAILQ_FOREACH(ifa, &ifn->if_addrlist, ifa_list) {
if (ifa->ifa_addr =3D=3D NULL) {
@@ -240,10 +244,6 @@
default:
continue;
}
- if (sctp_is_desired_interface_type(ifa) =3D=3D 0) {
- /* non desired type */
- continue;
- }
switch (ifa->ifa_addr->sa_family) {
#ifdef INET
case AF_INET:
@@ -317,6 +317,10 @@
if (ifa->ifa_addr =3D=3D NULL) {
return;
}
+ if (sctp_is_desired_interface_type(ifa->ifa_ifp) =3D=3D 0) {
+ /* non desired type */
+ return;
+ }
switch (ifa->ifa_addr->sa_family) {
#ifdef INET
case AF_INET:
@@ -338,22 +342,16 @@
/* non inet/inet6 skip */
return;
}
-
- if (sctp_is_desired_interface_type(ifa) =3D=3D 0) {
- /* non desired type */
- return;
- }
if (cmd =3D=3D RTM_ADD) {
(void)sctp_add_addr_to_vrf(SCTP_DEFAULT_VRFID, (void *)ifa->ifa_ifp,
- ifa->ifa_ifp->if_index, ifa->ifa_ifp->if_type,
- ifa->ifa_ifp->if_xname,
+ ifa->ifa_ifp->if_index, ifa->ifa_ifp->if_type, ifa->ifa_ifp->if_xnam=
e,
(void *)ifa, ifa->ifa_addr, ifa_flags, 1);
} else {
=20
sctp_del_addr_from_vrf(SCTP_DEFAULT_VRFID, ifa->ifa_addr,
ifa->ifa_ifp->if_index,
- ifa->ifa_ifp->if_xname
- );
+ ifa->ifa_ifp->if_xname);
+
/*
* We don't bump refcount here so when it completes the
* final delete will happen.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_input.c
--- a/head/sys/netinet/sctp_input.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_input.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_input.c 238454 2012-07-14 19:44:=
39Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_input.c 239091 2012-08-06 10:50:=
23Z tuexen $");
=20
#include <netinet/sctp_os.h>
#include <netinet/sctp_var.h>
@@ -5600,7 +5600,7 @@
struct mbuf *m =3D *mm;
int un_sent;
int cnt_ctrl_ready =3D 0;
- struct sctp_inpcb *inp, *inp_decr =3D NULL;
+ struct sctp_inpcb *inp =3D NULL, *inp_decr =3D NULL;
struct sctp_tcb *stcb =3D NULL;
struct sctp_nets *net =3D NULL;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_pcb.c
--- a/head/sys/netinet/sctp_pcb.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_pcb.c Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_pcb.c 238550 2012-07-17 13:03:47=
Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_pcb.c 239052 2012-08-05 10:47:18=
Z tuexen $");
=20
#include <netinet/sctp_os.h>
#include <sys/proc.h>
@@ -2055,8 +2055,6 @@
struct sctp_nets *net;
struct sctp_tcb *stcb;
=20
- *netp =3D NULL;
- *inp_p =3D NULL;
SCTP_INP_INFO_RLOCK();
head =3D &SCTP_BASE_INFO(sctp_asochash)[SCTP_PCBHASH_ASOC(vtag,
SCTP_BASE_INFO(hashasocmark))];
@@ -2310,10 +2308,9 @@
if (zero_address) {
stcb =3D sctp_findassoc_by_vtag(NULL, dst, ntohl(sh->v_tag), inp_p,
netp, sh->src_port, sh->dest_port, 1, vrf_id, 0);
- /*
- * SCTP_PRINTF("findassociation_ep_asconf: zero lookup
- * address finds stcb 0x%x\n", (uint32_t)stcb);
- */
+ if (stcb !=3D NULL) {
+ SCTP_INP_DECR_REF(*inp_p);
+ }
} else {
stcb =3D sctp_findassociation_ep_addr(inp_p,
(struct sockaddr *)&remote_store, netp,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_uio.h
--- a/head/sys/netinet/sctp_uio.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_uio.h Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_uio.h 238501 2012-07-15 20:16:17=
Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_uio.h 238790 2012-07-26 08:10:29=
Z tuexen $");
=20
#ifndef _NETINET_SCTP_UIO_H_
#define _NETINET_SCTP_UIO_H_
@@ -1124,12 +1124,8 @@
#define SCTP_STAT_DECR_GAUGE32(_x) SCTP_STAT_DECR(_x)
=20
union sctp_sockstore {
-#if defined(INET)
struct sockaddr_in sin;
-#endif
-#if defined(INET6)
struct sockaddr_in6 sin6;
-#endif
struct sockaddr sa;
};
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/tcp_timer.c
--- a/head/sys/netinet/tcp_timer.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/tcp_timer.c Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/tcp_timer.c 237263 2012-06-19 07:34:1=
3Z np $");
+__FBSDID("$FreeBSD: head/sys/netinet/tcp_timer.c 239075 2012-08-05 17:30:1=
7Z trociny $");
=20
#include "opt_inet6.h"
#include "opt_tcpdebug.h"
@@ -183,13 +183,18 @@
return;
}
INP_WLOCK(inp);
- if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_d=
elack)
- || !callout_active(&tp->t_timers->tt_delack)) {
+ if (callout_pending(&tp->t_timers->tt_delack) ||
+ !callout_active(&tp->t_timers->tt_delack)) {
INP_WUNLOCK(inp);
CURVNET_RESTORE();
return;
}
callout_deactivate(&tp->t_timers->tt_delack);
+ if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+ INP_WUNLOCK(inp);
+ CURVNET_RESTORE();
+ return;
+ }
=20
tp->t_flags |=3D TF_ACKNOW;
TCPSTAT_INC(tcps_delack);
@@ -229,7 +234,7 @@
}
INP_WLOCK(inp);
tcp_free_sackholes(tp);
- if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_2=
msl) ||
+ if (callout_pending(&tp->t_timers->tt_2msl) ||
!callout_active(&tp->t_timers->tt_2msl)) {
INP_WUNLOCK(tp->t_inpcb);
INP_INFO_WUNLOCK(&V_tcbinfo);
@@ -237,6 +242,12 @@
return;
}
callout_deactivate(&tp->t_timers->tt_2msl);
+ if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+ INP_WUNLOCK(inp);
+ INP_INFO_WUNLOCK(&V_tcbinfo);
+ CURVNET_RESTORE();
+ return;
+ }
/*
* 2 MSL timeout in shutdown went off. If we're closed but
* still waiting for peer to close and connection has been idle
@@ -300,14 +311,20 @@
return;
}
INP_WLOCK(inp);
- if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_k=
eep)
- || !callout_active(&tp->t_timers->tt_keep)) {
+ if (callout_pending(&tp->t_timers->tt_keep) ||
+ !callout_active(&tp->t_timers->tt_keep)) {
INP_WUNLOCK(inp);
INP_INFO_WUNLOCK(&V_tcbinfo);
CURVNET_RESTORE();
return;
}
callout_deactivate(&tp->t_timers->tt_keep);
+ if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+ INP_WUNLOCK(inp);
+ INP_INFO_WUNLOCK(&V_tcbinfo);
+ CURVNET_RESTORE();
+ return;
+ }
/*
* Keep-alive timer went off; send something
* or drop connection if idle for too long.
@@ -397,14 +414,20 @@
return;
}
INP_WLOCK(inp);
- if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_p=
ersist)
- || !callout_active(&tp->t_timers->tt_persist)) {
+ if (callout_pending(&tp->t_timers->tt_persist) ||
+ !callout_active(&tp->t_timers->tt_persist)) {
INP_WUNLOCK(inp);
INP_INFO_WUNLOCK(&V_tcbinfo);
CURVNET_RESTORE();
return;
}
callout_deactivate(&tp->t_timers->tt_persist);
+ if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+ INP_WUNLOCK(inp);
+ INP_INFO_WUNLOCK(&V_tcbinfo);
+ CURVNET_RESTORE();
+ return;
+ }
/*
* Persistance timer into zero window.
* Force a byte to be output, if possible.
@@ -469,14 +492,20 @@
return;
}
INP_WLOCK(inp);
- if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_r=
exmt)
- || !callout_active(&tp->t_timers->tt_rexmt)) {
+ if (callout_pending(&tp->t_timers->tt_rexmt) ||
+ !callout_active(&tp->t_timers->tt_rexmt)) {
INP_WUNLOCK(inp);
INP_INFO_RUNLOCK(&V_tcbinfo);
CURVNET_RESTORE();
return;
}
callout_deactivate(&tp->t_timers->tt_rexmt);
+ if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+ INP_WUNLOCK(inp);
+ INP_INFO_RUNLOCK(&V_tcbinfo);
+ CURVNET_RESTORE();
+ return;
+ }
tcp_free_sackholes(tp);
/*
* Retransmission timer went off. Message has not
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet6/in6.c
--- a/head/sys/netinet6/in6.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet6/in6.c Fri Aug 10 14:19:25 2012 +0300
@@ -61,7 +61,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet6/in6.c 238222 2012-07-08 08:49:37Z bz=
$");
+__FBSDID("$FreeBSD: head/sys/netinet6/in6.c 238990 2012-08-02 13:57:49Z gl=
ebius $");
=20
#include "opt_compat.h"
#include "opt_inet.h"
@@ -257,10 +257,10 @@
=20
#ifdef COMPAT_FREEBSD32
struct in6_ndifreq32 {
- char ifname[IFNAMSIZ];
- uint32_t ifindex;
+ char ifname[IFNAMSIZ];
+ uint32_t ifindex;
};
-#define SIOCGDEFIFACE32_IN6 _IOWR('i', 86, struct in6_ndifreq32)
+#define SIOCGDEFIFACE32_IN6 _IOWR('i', 86, struct in6_ndifreq32)
#endif
=20
int
@@ -284,7 +284,7 @@
switch (cmd) {
case SIOCGETSGCNT_IN6:
case SIOCGETMIFCNT_IN6:
- /*=09
+ /*
* XXX mrt_ioctl has a 3rd, unused, FIB argument in route.c.
* We cannot see how that would be needed, so do not adjust the
* KPI blindly; more likely should clean up the IPv4 variant.
@@ -485,7 +485,7 @@
}
=20
if (td !=3D NULL) {
- error =3D priv_check(td, (cmd =3D=3D SIOCDIFADDR_IN6) ?=20
+ error =3D priv_check(td, (cmd =3D=3D SIOCDIFADDR_IN6) ?
PRIV_NET_DELIFADDR : PRIV_NET_ADDIFADDR);
if (error)
goto out;
@@ -1365,7 +1365,7 @@
bzero(&sin6, sizeof(sin6));
sin6.sin6_len =3D sizeof(sin6);
sin6.sin6_family =3D AF_INET6;
- memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr,=20
+ memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr,
sizeof(sin6.sin6_addr));
error =3D in6_setscope(&sin6.sin6_addr, ifa0->ifa_ifp, NULL);
if (error !=3D 0)
@@ -1374,16 +1374,17 @@
=20
rt =3D in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB);
if (rt !=3D NULL && rt->rt_gateway !=3D NULL &&
- (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,=20
+ (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
&ia->ia_addr.sin6_addr,
sizeof(ia->ia_addr.sin6_addr)) =3D=3D 0)) {
- /*=20
+ /*
* If no more IPv6 address exists on this interface then
* remove the multicast address route.
*/
if (ifa0 =3D=3D NULL) {
- memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr,=20
- sizeof(mltaddr.sin6_addr));
+ memcpy(&mltaddr.sin6_addr,
+ &satosin6(rt_key(rt))->sin6_addr,
+ sizeof(mltaddr.sin6_addr));
RTFREE_LOCKED(rt);
error =3D in6_rtrequest(RTM_DELETE,
(struct sockaddr *)&mltaddr,
@@ -1415,16 +1416,17 @@
=20
rt =3D in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB);
if (rt !=3D NULL && rt->rt_gateway !=3D NULL &&
- (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,=20
+ (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
&ia->ia_addr.sin6_addr,
sizeof(ia->ia_addr.sin6_addr)) =3D=3D 0)) {
- /*=20
+ /*
* If no more IPv6 address exists on this interface then
* remove the multicast address route.
*/
if (ifa0 =3D=3D NULL) {
- memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr,=20
- sizeof(mltaddr.sin6_addr));
+ memcpy(&mltaddr.sin6_addr,
+ &satosin6(rt_key(rt))->sin6_addr,
+ sizeof(mltaddr.sin6_addr));
=20
RTFREE_LOCKED(rt);
error =3D in6_rtrequest(RTM_DELETE,
@@ -1471,8 +1473,7 @@
TAILQ_FOREACH(ifa0, &ifp->if_addrhead, ifa_link) {
if ((ifa0->ifa_addr->sa_family !=3D AF_INET6) ||
memcmp(&satosin6(ifa0->ifa_addr)->sin6_addr,
- &ia->ia_addr.sin6_addr,=20
- sizeof(struct in6_addr)) =3D=3D 0)
+ &ia->ia_addr.sin6_addr, sizeof(struct in6_addr)) =3D=3D 0)
continue;
else
break;
@@ -1483,12 +1484,12 @@
=20
/*
* Remove the loopback route to the interface address.
- * The check for the current setting of "nd6_useloopback"=20
+ * The check for the current setting of "nd6_useloopback"
* is not needed.
*/
if (ia->ia_flags & IFA_RTSELF) {
error =3D ifa_del_loopback_route((struct ifaddr *)ia,
- (struct sockaddr *)&ia->ia_addr);
+ (struct sockaddr *)&ia->ia_addr);
if (error =3D=3D 0)
ia->ia_flags &=3D ~IFA_RTSELF;
}
@@ -1890,7 +1891,7 @@
* Special case:
* If a new destination address is specified for a point-to-point
* interface, install a route to the destination as an interface
- * direct route.=20
+ * direct route.
* XXX: the logic below rejects assigning multiple addresses on a p2p
* interface that share the same destination.
*/
@@ -1914,7 +1915,7 @@
*/
if (!(ia->ia_flags & IFA_RTSELF) && V_nd6_useloopback) {
error =3D ifa_add_loopback_route((struct ifaddr *)ia,
- (struct sockaddr *)&ia->ia_addr);
+ (struct sockaddr *)&ia->ia_addr);
if (error =3D=3D 0)
ia->ia_flags |=3D IFA_RTSELF;
}
@@ -1941,7 +1942,7 @@
continue;
if (IN6_IS_ADDR_LINKLOCAL(IFA_IN6(ifa))) {
if ((((struct in6_ifaddr *)ifa)->ia6_flags &
- ignoreflags) !=3D 0)
+ ignoreflags) !=3D 0)
continue;
ifa_ref(ifa);
break;
@@ -2108,7 +2109,7 @@
IN6_IFADDR_RLOCK();
TAILQ_FOREACH(ia, &V_in6_ifaddrhead, ia_link) {
if (IN6_ARE_ADDR_EQUAL(&ia->ia_addr.sin6_addr,
- &sa6->sin6_addr) &&
+ &sa6->sin6_addr) &&
(ia->ia6_flags & IN6_IFF_DEPRECATED) !=3D 0) {
IN6_IFADDR_RUNLOCK();
return (1); /* true */
@@ -2379,7 +2380,7 @@
maxmtu =3D IN6_LINKMTU(ifp);
}
IFNET_RUNLOCK_NOSLEEP();
- if (maxmtu) /* update only when maxmtu is positive */
+ if (maxmtu) /* update only when maxmtu is positive */
V_in6_maxmtu =3D maxmtu;
}
=20
@@ -2469,8 +2470,7 @@
{
struct in6_llentry *lle;
=20
- lle =3D malloc(sizeof(struct in6_llentry), M_LLTABLE,
- M_DONTWAIT | M_ZERO);
+ lle =3D malloc(sizeof(struct in6_llentry), M_LLTABLE, M_NOWAIT | M_ZERO);
if (lle =3D=3D NULL) /* NB: caller generates msg */
return NULL;
=20
@@ -2481,46 +2481,43 @@
callout_init_rw(&lle->base.ln_timer_ch, &lle->base.lle_lock,
CALLOUT_RETURNUNLOCKED);
=20
- return &lle->base;
+ return (&lle->base);
}
=20
static void
-in6_lltable_prefix_free(struct lltable *llt,=20
- const struct sockaddr *prefix,
- const struct sockaddr *mask,
- u_int flags)
+in6_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix,
+ const struct sockaddr *mask, u_int flags)
{
const struct sockaddr_in6 *pfx =3D (const struct sockaddr_in6 *)prefix;
const struct sockaddr_in6 *msk =3D (const struct sockaddr_in6 *)mask;
struct llentry *lle, *next;
- register int i;
+ int i;
=20
/*
- * (flags & LLE_STATIC) means deleting all entries=20
- * including static ND6 entries
+ * (flags & LLE_STATIC) means deleting all entries
+ * including static ND6 entries.
*/
- for (i=3D0; i < LLTBL_HASHTBL_SIZE; i++) {
+ IF_AFDATA_WLOCK(llt->llt_ifp);
+ for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
if (IN6_ARE_MASKED_ADDR_EQUAL(
- &((struct sockaddr_in6 *)L3_ADDR(lle))->sin6_addr,=20
- &pfx->sin6_addr,=20
- &msk->sin6_addr) &&
- ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) {
- int canceled;
-
- canceled =3D callout_drain(&lle->la_timer);
+ &satosin6(L3_ADDR(lle))->sin6_addr,
+ &pfx->sin6_addr, &msk->sin6_addr) &&
+ ((flags & LLE_STATIC) ||
+ !(lle->la_flags & LLE_STATIC))) {
LLE_WLOCK(lle);
- if (canceled)
+ if (callout_stop(&lle->la_timer))
LLE_REMREF(lle);
llentry_free(lle);
}
}
}
+ IF_AFDATA_WUNLOCK(llt->llt_ifp);
}
=20
static int
-in6_lltable_rtcheck(struct ifnet *ifp,=20
- u_int flags,=20
+in6_lltable_rtcheck(struct ifnet *ifp,
+ u_int flags,
const struct sockaddr *l3addr)
{
struct rtentry *rt;
@@ -2535,8 +2532,8 @@
RT_DEFAULT_FIB);
if (rt =3D=3D NULL || (rt->rt_flags & RTF_GATEWAY) || rt->rt_ifp !=3D ifp=
) {
struct ifaddr *ifa;
- /*=20
- * Create an ND6 cache for an IPv6 neighbor=20
+ /*
+ * Create an ND6 cache for an IPv6 neighbor
* that is not covered by our own prefix.
*/
/* XXX ifaof_ifpforaddr should take a const param */
@@ -2577,8 +2574,8 @@
struct sockaddr_in6 *sa6 =3D (struct sockaddr_in6 *)L3_ADDR(lle);
if (lle->la_flags & LLE_DELETED)
continue;
- if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr,=20
- sizeof(struct in6_addr)) =3D=3D 0)
+ if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr,
+ sizeof(struct in6_addr)) =3D=3D 0)
break;
}
=20
@@ -2607,15 +2604,16 @@
=20
lle->lle_tbl =3D llt;
lle->lle_head =3D lleh;
+ lle->la_flags |=3D LLE_LINKED;
LIST_INSERT_HEAD(lleh, lle, lle_next);
} else if (flags & LLE_DELETE) {
if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
LLE_WLOCK(lle);
- lle->la_flags =3D LLE_DELETED;
+ lle->la_flags |=3D LLE_DELETED;
LLE_WUNLOCK(lle);
#ifdef DIAGNOSTIC
- log(LOG_INFO, "ifaddr cache =3D %p is deleted\n", lle);=09
-#endif=09
+ log(LOG_INFO, "ifaddr cache =3D %p is deleted\n", lle);
+#endif
}
lle =3D (void *)-1;
}
@@ -2801,8 +2799,7 @@
struct sockaddr_in *sin_p;
struct sockaddr_in6 *sin6_p;
=20
- sin6_p =3D malloc(sizeof *sin6_p, M_SONAME,
- M_WAITOK);
+ sin6_p =3D malloc(sizeof *sin6_p, M_SONAME, M_WAITOK);
sin_p =3D (struct sockaddr_in *)*nam;
in6_sin_2_v4mapsin6(sin_p, sin6_p);
free(*nam, M_SONAME);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet6/ip6_ipsec.c
--- a/head/sys/netinet6/ip6_ipsec.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet6/ip6_ipsec.c Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet6/ip6_ipsec.c 236170 2012-05-28 09:30:=
13Z bz $");
+__FBSDID("$FreeBSD: head/sys/netinet6/ip6_ipsec.c 238935 2012-07-31 05:44:=
03Z bz $");
=20
#include "opt_inet.h"
#include "opt_inet6.h"
@@ -263,7 +263,7 @@
mtag->m_tag_id !=3D PACKET_TAG_IPSEC_OUT_CRYPTO_NEEDED)
continue;
/*
- * Check if policy has an SA associated with it.
+ * Check if policy has no SA associated with it.
* This can happen when an SP has yet to acquire
* an SA; e.g. on first reference. If it occurs,
* then we let ipsec4_process_packet do its thing.
@@ -291,16 +291,16 @@
/*
* Do delayed checksums now because we send before
* this is done in the normal processing path.
- * XXX-BZ CSUM_DELAY_DATA_IPV6?
+ * For IPv6 we do delayed checksums in ip6_output.c.
*/
+#ifdef INET
if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
ipseclog((LOG_DEBUG,
"%s: we do not support IPv4 over IPv6", __func__));
-#ifdef INET
in_delayed_cksum(*m);
-#endif
(*m)->m_pkthdr.csum_flags &=3D ~CSUM_DELAY_DATA;
}
+#endif
=20
/*
* Preserve KAME behaviour: ENOENT can be returned
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet6/ip6_output.c
--- a/head/sys/netinet6/ip6_output.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet6/ip6_output.c Fri Aug 10 14:19:25 2012 +0300
@@ -61,7 +61,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet6/ip6_output.c 238092 2012-07-04 07:37=
:53Z glebius $");
+__FBSDID("$FreeBSD: head/sys/netinet6/ip6_output.c 238960 2012-07-31 23:34=
:06Z bz $");
=20
#include "opt_inet.h"
#include "opt_inet6.h"
@@ -195,8 +195,9 @@
offset +=3D m->m_pkthdr.csum_data; /* checksum offset */
=20
if (offset + sizeof(u_short) > m->m_len) {
- printf("%s: delayed m_pullup, m->len: %d off: %d\n",
- __func__, m->m_len, offset);
+ printf("%s: delayed m_pullup, m->len: %d plen %u off %u "
+ "csum_flags=3D0x%04x\n", __func__, m->m_len, plen, offset,
+ m->m_pkthdr.csum_flags);
/*
* XXX this should not happen, but if it does, the correct
* behavior may be to insert the checksum in the appropriate
@@ -294,17 +295,31 @@
MAKE_EXTHDR(opt->ip6po_dest2, &exthdrs.ip6e_dest2);
}
=20
+#ifdef IPSEC
/*
* IPSec checking which handles several cases.
* FAST IPSEC: We re-injected the packet.
*/
-#ifdef IPSEC
switch(ip6_ipsec_output(&m, inp, &flags, &error, &ifp, &sp))
{
case 1: /* Bad packet */
goto freehdrs;
case -1: /* Do IPSec */
needipsec =3D 1;
+ /*
+ * Do delayed checksums now, as we may send before returning.
+ */
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
+ plen =3D m->m_pkthdr.len - sizeof(*ip6);
+ in6_delayed_cksum(m, plen, sizeof(struct ip6_hdr));
+ m->m_pkthdr.csum_flags &=3D ~CSUM_DELAY_DATA_IPV6;
+ }
+#ifdef SCTP
+ if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) {
+ sctp_delayed_cksum(m, sizeof(struct ip6_hdr));
+ m->m_pkthdr.csum_flags &=3D ~CSUM_SCTP_IPV6;
+ }
+#endif
case 0: /* No IPSec */
default:
break;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/nfsclient/nfs_bio.c
--- a/head/sys/nfsclient/nfs_bio.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/nfsclient/nfs_bio.c Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_bio.c 235332 2012-05-12 12:02:5=
1Z rmacklem $");
+__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_bio.c 239065 2012-08-05 14:11:4=
2Z kib $");
=20
#include "opt_kdtrace.h"
=20
@@ -49,6 +49,7 @@
#include <sys/vnode.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_extern.h>
#include <vm/vm_page.h>
#include <vm/vm_object.h>
@@ -217,36 +218,8 @@
*/
;
}
- if (i !=3D ap->a_reqpage) {
- /*
- * Whether or not to leave the page activated is up in
- * the air, but we should put the page on a page queue
- * somewhere (it already is in the object). Result:
- * It appears that emperical results show that
- * deactivating pages is best.
- */
-
- /*
- * Just in case someone was asking for this page we
- * now tell them that it is ok to use.
- */
- if (!error) {
- if (m->oflags & VPO_WANTED) {
- vm_page_lock(m);
- vm_page_activate(m);
- vm_page_unlock(m);
- } else {
- vm_page_lock(m);
- vm_page_deactivate(m);
- vm_page_unlock(m);
- }
- vm_page_wakeup(m);
- } else {
- vm_page_lock(m);
- vm_page_free(m);
- vm_page_unlock(m);
- }
- }
+ if (i !=3D ap->a_reqpage)
+ vm_page_readahead_finish(m, error);
}
VM_OBJECT_UNLOCK(object);
return (0);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/ofed/include/linux/gfp.h
--- a/head/sys/ofed/include/linux/gfp.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/ofed/include/linux/gfp.h Fri Aug 10 14:19:25 2012 +0300
@@ -34,6 +34,7 @@
=20
#include <linux/page.h>
=20
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_extern.h>
#include <vm/vm_kern.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/conf/GENERIC
--- a/head/sys/powerpc/conf/GENERIC Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/powerpc/conf/GENERIC Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
# If you are in doubt as to the purpose or necessity of a line, check firs=
t=20
# in NOTES.
#
-# $FreeBSD: head/sys/powerpc/conf/GENERIC 238034 2012-07-02 21:25:24Z marc=
el $
+# $FreeBSD: head/sys/powerpc/conf/GENERIC 239027 2012-08-04 03:05:01Z jhib=
bits $
=20
cpu AIM
ident GENERIC
@@ -197,6 +197,7 @@
device smu # Apple System Management Unit
device windtunnel # Apple G4 MDD fan controller
device atibl # ATI-based backlight driver for PowerBooks/iBooks
+device nvbl # nVidia-based backlight driver for PowerBooks/iBooks
=20
# ADB support
device adb
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/conf/GENERIC64
--- a/head/sys/powerpc/conf/GENERIC64 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/powerpc/conf/GENERIC64 Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
# If you are in doubt as to the purpose or necessity of a line, check firs=
t=20
# in NOTES.
#
-# $FreeBSD: head/sys/powerpc/conf/GENERIC64 238034 2012-07-02 21:25:24Z ma=
rcel $
+# $FreeBSD: head/sys/powerpc/conf/GENERIC64 239027 2012-08-04 03:05:01Z jh=
ibbits $
=20
cpu AIM
ident GENERIC
@@ -194,6 +194,7 @@
device powermac_nvram # Open Firmware configuration NVRAM
device smu # Apple System Management Unit
device atibl # ATI-based backlight driver for PowerBooks/iBooks
+device nvbl # nVidia-based backlight driver for PowerBooks/iBooks
=20
# ADB support
device adb
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/powermac/nvbl.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/powerpc/powermac/nvbl.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,197 @@
+/*-
+ * Copyright (c) 2012 Justin Hibbits
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/powerpc/powermac/nvbl.c 239027 2012-08-04 03:=
05:01Z jhibbits $");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/systm.h>
+#include <sys/module.h>
+#include <sys/kernel.h>
+#include <sys/rman.h>
+#include <sys/sysctl.h>
+
+#include <machine/bus.h>
+
+#include <dev/ofw/openfirm.h>
+
+#define NVIDIA_BRIGHT_MIN (0x0ec)
+#define NVIDIA_BRIGHT_MAX (0x538)
+#define NVIDIA_BRIGHT_SCALE ((NVIDIA_BRIGHT_MAX - NVIDIA_BRIGHT_MIN)/100)
+/* nVidia's MMIO registers are at PCI BAR[0] */
+#define NVIDIA_MMIO_PMC (0x0)
+#define NVIDIA_PMC_OFF (NVIDIA_MMIO_PMC + 0x10f0)
+#define NVIDIA_PMC_BL_SHIFT (16)
+#define NVIDIA_PMC_BL_EN (1 << 31)
+
+
+struct nvbl_softc {
+ device_t dev;
+ struct resource *sc_memr;
+};
+
+static void nvbl_identify(driver_t *driver, device_t parent);
+static int nvbl_probe(device_t dev);
+static int nvbl_attach(device_t dev);
+static int nvbl_setlevel(struct nvbl_softc *sc, int newlevel);
+static int nvbl_getlevel(struct nvbl_softc *sc);
+static int nvbl_sysctl(SYSCTL_HANDLER_ARGS);
+
+static device_method_t nvbl_methods[] =3D {
+ /* Device interface */
+ DEVMETHOD(device_identify, nvbl_identify),
+ DEVMETHOD(device_probe, nvbl_probe),
+ DEVMETHOD(device_attach, nvbl_attach),
+ {0, 0},
+};
+
+static driver_t nvbl_driver =3D {
+ "backlight",
+ nvbl_methods,
+ sizeof(struct nvbl_softc)
+};
+
+static devclass_t nvbl_devclass;
+
+DRIVER_MODULE(nvbl, vgapci, nvbl_driver, nvbl_devclass, 0, 0);
+
+static void
+nvbl_identify(driver_t *driver, device_t parent)
+{
+ if (device_find_child(parent, "backlight", -1) =3D=3D NULL)
+ device_add_child(parent, "backlight", -1);
+}
+
+static int
+nvbl_probe(device_t dev)
+{
+ char control[8];
+ phandle_t handle;
+
+ handle =3D OF_finddevice("mac-io/backlight");
+
+ if (handle <=3D 0)
+ return (ENXIO);
+
+ if (OF_getprop(handle, "backlight-control", &control, sizeof(control)) < =
0)
+ return (ENXIO);
+
+ if (strcmp(control, "mnca") !=3D 0)
+ return (ENXIO);
+
+ device_set_desc(dev, "PowerBook backlight for nVidia graphics");
+
+ return (0);
+}
+
+static int
+nvbl_attach(device_t dev)
+{
+ struct nvbl_softc *sc;
+ struct sysctl_ctx_list *ctx;
+ struct sysctl_oid *tree;
+ int rid;
+
+ sc =3D device_get_softc(dev);
+
+ rid =3D 0x10; /* BAR[0], for the MMIO register */
+ sc->sc_memr =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+ RF_ACTIVE | RF_SHAREABLE);
+ if (sc->sc_memr =3D=3D NULL) {
+ device_printf(dev, "Could not alloc mem resource!\n");
+ return (ENXIO);
+ }
+
+ /* Turn on big-endian mode */
+ if (!(bus_read_stream_4(sc->sc_memr, NVIDIA_MMIO_PMC + 4) & 0x01000001)) {
+ bus_write_stream_4(sc->sc_memr, NVIDIA_MMIO_PMC + 4, 0x01000001);
+ mb();
+ }
+
+ ctx =3D device_get_sysctl_ctx(dev);
+ tree =3D device_get_sysctl_tree(dev);
+
+ SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+ "level", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
+ nvbl_sysctl, "I", "Backlight level (0-100)");
+
+ return (0);
+}
+
+static int
+nvbl_setlevel(struct nvbl_softc *sc, int newlevel)
+{
+ uint32_t pmc_reg;
+
+ if (newlevel > 100)
+ newlevel =3D 100;
+
+ if (newlevel < 0)
+ newlevel =3D 0;
+
+ if (newlevel > 0)
+ newlevel =3D (newlevel * NVIDIA_BRIGHT_SCALE) + NVIDIA_BRIGHT_MIN;
+
+ pmc_reg =3D bus_read_stream_4(sc->sc_memr, NVIDIA_PMC_OFF) & 0xffff;
+ pmc_reg |=3D NVIDIA_PMC_BL_EN | (newlevel << NVIDIA_PMC_BL_SHIFT);
+ bus_write_stream_4(sc->sc_memr, NVIDIA_PMC_OFF, pmc_reg);
+
+ return (0);
+}
+
+static int
+nvbl_getlevel(struct nvbl_softc *sc)
+{
+ uint16_t level;
+
+ level =3D bus_read_stream_2(sc->sc_memr, NVIDIA_PMC_OFF) & 0x7fff;
+
+ if (level < NVIDIA_BRIGHT_MIN)
+ return 0;
+
+ level =3D (level - NVIDIA_BRIGHT_MIN) / NVIDIA_BRIGHT_SCALE;
+
+ return (level);
+}
+
+static int
+nvbl_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ struct nvbl_softc *sc;
+ int newlevel, error;
+
+ sc =3D arg1;
+
+ newlevel =3D nvbl_getlevel(sc);
+
+ error =3D sysctl_handle_int(oidp, &newlevel, 0, req);
+
+ if (error || !req->newptr)
+ return (error);
+
+ return (nvbl_setlevel(sc, newlevel));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/powerpc/busdma_machde=
p.c
--- a/head/sys/powerpc/powerpc/busdma_machdep.c Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/sys/powerpc/powerpc/busdma_machdep.c Fri Aug 10 14:19:25 2012 +0=
300
@@ -29,7 +29,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/powerpc/powerpc/busdma_machdep.c 232356 2012-=
03-01 19:58:34Z jhb $");
+__FBSDID("$FreeBSD: head/sys/powerpc/powerpc/busdma_machdep.c 239008 2012-=
08-03 13:50:29Z jhb $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -46,6 +46,8 @@
#include <sys/sysctl.h>
=20
#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
=20
@@ -130,6 +132,7 @@
bus_dmamap_callback_t *callback;
void *callback_arg;
STAILQ_ENTRY(bus_dmamap) links;
+ int contigalloc;
};
=20
static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
@@ -489,6 +492,7 @@
bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
bus_dmamap_t *mapp)
{
+ vm_memattr_t attr;
int mflags;
=20
if (flags & BUS_DMA_NOWAIT)
@@ -500,6 +504,12 @@
=20
if (flags & BUS_DMA_ZERO)
mflags |=3D M_ZERO;
+#ifdef NOTYET
+ if (flags & BUS_DMA_NOCACHE)
+ attr =3D VM_MEMATTR_UNCACHEABLE;
+ else
+#endif
+ attr =3D VM_MEMATTR_DEFAULT;
=20
/*=20
* XXX:
@@ -511,7 +521,8 @@
*/
if ((dmat->maxsize <=3D PAGE_SIZE) &&
(dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem)) {
+ dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem) &&
+ attr =3D=3D VM_MEMATTR_DEFAULT) {
*vaddr =3D malloc(dmat->maxsize, M_DEVBUF, mflags);
} else {
/*
@@ -520,9 +531,10 @@
* multi-seg allocations yet though.
* XXX Certain AGP hardware does.
*/
- *vaddr =3D contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
- 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
- dmat->boundary);
+ *vaddr =3D (void *)kmem_alloc_contig(kernel_map, dmat->maxsize,
+ mflags, 0ul, dmat->lowaddr, dmat->alignment ?
+ dmat->alignment : 1ul, dmat->boundary, attr);
+ (*mapp)->contigalloc =3D 1;
}
if (*vaddr =3D=3D NULL) {
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
@@ -531,11 +543,6 @@
} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
printf("bus_dmamem_alloc failed to align memory properly.\n");
}
-#ifdef NOTYET
- if (flags & BUS_DMA_NOCACHE)
- pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize,
- VM_MEMATTR_UNCACHEABLE);
-#endif
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
__func__, dmat, dmat->flags, 0);
return (0);
@@ -548,18 +555,12 @@
void
bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
{
+
+ if (!map->contigalloc)
+ free(vaddr, M_DEVBUF);
+ else
+ kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize);
bus_dmamap_destroy(dmat, map);
-
-#ifdef NOTYET
- pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, VM_MEMATTR_DEFAULT);
-#endif
- if ((dmat->maxsize <=3D PAGE_SIZE) &&
- (dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem))
- free(vaddr, M_DEVBUF);
- else {
- contigfree(vaddr, dmat->maxsize, M_DEVBUF);
- }
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sparc64/include/pmap.h
--- a/head/sys/sparc64/include/pmap.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sparc64/include/pmap.h Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
* from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90
* from: @(#)pmap.h 7.4 (Berkeley) 5/12/91
* from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30
- * $FreeBSD: head/sys/sparc64/include/pmap.h 237168 2012-06-16 18:56:19Z a=
lc $
+ * $FreeBSD: head/sys/sparc64/include/pmap.h 239079 2012-08-05 22:03:13Z m=
arius $
*/
=20
#ifndef _MACHINE_PMAP_H_
@@ -68,6 +68,11 @@
struct pmap_statistics pm_stats;
};
=20
+struct tte_list_lock {
+ struct rwlock lock;
+ char padding[CACHE_LINE_SIZE - sizeof(struct rwlock)];
+};
+
#define PMAP_LOCK(pmap) mtx_lock(&(pmap)->pm_mtx)
#define PMAP_LOCK_ASSERT(pmap, type) \
mtx_assert(&(pmap)->pm_mtx, (type))
@@ -103,7 +108,8 @@
=20
extern struct pmap kernel_pmap_store;
#define kernel_pmap (&kernel_pmap_store)
-extern struct rwlock tte_list_global_lock;
+extern struct tte_list_lock tte_list_global;
+#define tte_list_global_lock tte_list_global.lock
extern vm_paddr_t phys_avail[];
extern vm_offset_t virtual_avail;
extern vm_offset_t virtual_end;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sparc64/sparc64/pmap.c
--- a/head/sys/sparc64/sparc64/pmap.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sparc64/sparc64/pmap.c Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/sparc64/sparc64/pmap.c 237623 2012-06-27 03:4=
5:25Z alc $");
+__FBSDID("$FreeBSD: head/sys/sparc64/sparc64/pmap.c 239079 2012-08-05 22:0=
3:13Z marius $");
=20
/*
* Manages physical address maps.
@@ -135,9 +135,11 @@
struct pmap kernel_pmap_store;
=20
/*
- * Global tte list lock
+ * Isolate the global TTE list lock from data and other locks to prevent
+ * false sharing within the cache (see also the declaration of struct
+ * tte_list_lock).
*/
-struct rwlock tte_list_global_lock;
+struct tte_list_lock tte_list_global __aligned(CACHE_LINE_SIZE);
=20
/*
* Allocate physical memory for use in pmap_bootstrap.
@@ -672,7 +674,7 @@
pm->pm_context[i] =3D TLB_CTX_KERNEL;
CPU_FILL(&pm->pm_active);
=20
- /*
+ /*
* Initialize the global tte list lock, which is more commonly
* known as the pmap pv global lock.
*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/bus.h
--- a/head/sys/sys/bus.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/bus.h Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/sys/bus.h 234152 2012-04-11 20:57:41Z jhb $
+ * $FreeBSD: head/sys/sys/bus.h 239046 2012-08-05 06:15:12Z andreast $
*/
=20
#ifndef _SYS_BUS_H_
@@ -560,7 +560,7 @@
* is for drivers that wish to have a generic form and a specialized form,
* like is done with the pci bus and the acpi pci bus. BUS_PROBE_HOOVER is
* for those busses that implement a generic device place-holder for devic=
es on
- * the bus that have no more specific river for them (aka ugen).
+ * the bus that have no more specific driver for them (aka ugen).
* BUS_PROBE_NOWILDCARD or lower means that the device isn't really bidding
* for a device node, but accepts only devices that its parent has told it
* use this driver.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/fcntl.h
--- a/head/sys/sys/fcntl.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/fcntl.h Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
* SUCH DAMAGE.
*
* @(#)fcntl.h 8.3 (Berkeley) 1/21/94
- * $FreeBSD: head/sys/sys/fcntl.h 238667 2012-07-21 13:02:11Z kib $
+ * $FreeBSD: head/sys/sys/fcntl.h 238834 2012-07-27 10:41:10Z kib $
*/
=20
#ifndef _SYS_FCNTL_H_
@@ -232,6 +232,9 @@
#if __BSD_VISIBLE || __POSIX_VISIBLE >=3D 200809
#define F_DUPFD_CLOEXEC 17 /* Like F_DUPFD, but FD_CLOEXEC is set */
#endif
+#if __BSD_VISIBLE
+#define F_DUP2FD_CLOEXEC 18 /* Like F_DUP2FD, but FD_CLOEXEC is set */
+#endif
=20
/* file descriptor flags (F_GETFD, F_SETFD) */
#define FD_CLOEXEC 1 /* close-on-exec flag */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/pipe.h
--- a/head/sys/sys/pipe.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/pipe.h Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
* 5. Modifications may be freely made to this file if the above conditions
* are met.
*
- * $FreeBSD: head/sys/sys/pipe.h 232641 2012-03-07 07:31:50Z kib $
+ * $FreeBSD: head/sys/sys/pipe.h 238936 2012-07-31 05:48:35Z davidxu $
*/
=20
#ifndef _SYS_PIPE_H_
@@ -96,7 +96,6 @@
#define PIPE_DIRECTW 0x400 /* Pipe direct write active. */
#define PIPE_DIRECTOK 0x800 /* Direct mode ok. */
#define PIPE_NAMED 0x1000 /* Is a named pipe. */
-#define PIPE_SAMEWGEN 0x2000 /* same write generation for named pipes. */
=20
/*
* Per-pipe data structure.
@@ -115,6 +114,7 @@
u_int pipe_state; /* pipe status info */
int pipe_busy; /* busy flag, mostly to handle rundown sanely */
int pipe_present; /* still present? */
+ int pipe_wgen; /* writer generation for named pipe */
ino_t pipe_ino; /* fake inode for stat(2) */
};
=20
@@ -143,5 +143,5 @@
=20
void pipe_dtor(struct pipe *dpipe);
int pipe_named_ctor(struct pipe **ppipe, struct thread *td);
-
+void pipeselwakeup(struct pipe *cpipe);
#endif /* !_SYS_PIPE_H_ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/refcount.h
--- a/head/sys/sys/refcount.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/refcount.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,12 +26,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: head/sys/sys/refcount.h 238828 2012-07-27 09:16:48Z glebius $
*/
=20
#ifndef __SYS_REFCOUNT_H__
#define __SYS_REFCOUNT_H__
=20
+#include <sys/limits.h>
#include <machine/atomic.h>
=20
#ifdef _KERNEL
@@ -51,6 +52,7 @@
refcount_acquire(volatile u_int *count)
{
=20
+ KASSERT(*count < UINT_MAX, ("refcount %p overflowed", count));
atomic_add_acq_int(count, 1);=09
}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/ufs/ffs/ffs_vnops.c
--- a/head/sys/ufs/ffs/ffs_vnops.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/ufs/ffs/ffs_vnops.c Fri Aug 10 14:19:25 2012 +0300
@@ -62,7 +62,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_vnops.c 237366 2012-06-21 09:20:0=
7Z kib $");
+__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_vnops.c 239065 2012-08-05 14:11:4=
2Z kib $");
=20
#include <sys/param.h>
#include <sys/bio.h>
@@ -80,6 +80,7 @@
#include <sys/vnode.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_extern.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/device_pager.c
--- a/head/sys/vm/device_pager.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/device_pager.c Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/device_pager.c 235603 2012-05-18 10:23:47Z=
kib $");
+__FBSDID("$FreeBSD: head/sys/vm/device_pager.c 239065 2012-08-05 14:11:42Z=
kib $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -47,6 +47,7 @@
#include <sys/sx.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pager.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/sg_pager.c
--- a/head/sys/vm/sg_pager.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/sg_pager.c Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/vm/sg_pager.c 239065 2012-08-05 14:11:42Z kib=
$");
=20
/*
* This pager manages OBJT_SG objects. These objects are backed by
@@ -38,6 +38,7 @@
#include <sys/mutex.h>
#include <sys/sglist.h>
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pager.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vm_page.c
--- a/head/sys/vm/vm_page.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vm_page.c Fri Aug 10 14:19:25 2012 +0300
@@ -77,7 +77,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/vm_page.c 238543 2012-07-17 02:36:59Z alc =
$");
+__FBSDID("$FreeBSD: head/sys/vm/vm_page.c 239040 2012-08-04 18:16:43Z kib =
$");
=20
#include "opt_vm.h"
=20
@@ -450,63 +450,6 @@
return (vaddr);
}
=20
-
-CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) =3D=3D 0);
-
-void
-vm_page_aflag_set(vm_page_t m, uint8_t bits)
-{
- uint32_t *addr, val;
-
- /*
- * The PGA_WRITEABLE flag can only be set if the page is managed and
- * VPO_BUSY. Currently, this flag is only set by pmap_enter().
- */
- KASSERT((bits & PGA_WRITEABLE) =3D=3D 0 ||
- (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) =3D=3D VPO_BUSY,
- ("PGA_WRITEABLE and !VPO_BUSY"));
-
- /*
- * We want to use atomic updates for m->aflags, which is a
- * byte wide. Not all architectures provide atomic operations
- * on the single-byte destination. Punt and access the whole
- * 4-byte word with an atomic update. Parallel non-atomic
- * updates to the fields included in the update by proximity
- * are handled properly by atomics.
- */
- addr =3D (void *)&m->aflags;
- MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0);
- val =3D bits;
-#if BYTE_ORDER =3D=3D BIG_ENDIAN
- val <<=3D 24;
-#endif
- atomic_set_32(addr, val);
-}=20
-
-void
-vm_page_aflag_clear(vm_page_t m, uint8_t bits)
-{
- uint32_t *addr, val;
-
- /*
- * The PGA_REFERENCED flag can only be cleared if the object
- * containing the page is locked.
- */
- KASSERT((bits & PGA_REFERENCED) =3D=3D 0 || VM_OBJECT_LOCKED(m->object),
- ("PGA_REFERENCED and !VM_OBJECT_LOCKED"));
-
- /*
- * See the comment in vm_page_aflag_set().
- */
- addr =3D (void *)&m->aflags;
- MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0);
- val =3D bits;
-#if BYTE_ORDER =3D=3D BIG_ENDIAN
- val <<=3D 24;
-#endif
- atomic_clear_32(addr, val);
-}
-
void
vm_page_reference(vm_page_t m)
{
@@ -752,6 +695,39 @@
}
=20
/*
+ * Unbusy and handle the page queueing for a page from the VOP_GETPAGES()
+ * array which is not the request page.
+ */
+void
+vm_page_readahead_finish(vm_page_t m, int error)
+{
+
+ if (error =3D=3D 0) {
+ /*
+ * Since the page is not the requested page, whether
+ * it should be activated or deactivated is not
+ * obvious. Empirical results have shown that
+ * deactivating the page is usually the best choice,
+ * unless the page is wanted by another thread.
+ */
+ if (m->oflags & VPO_WANTED) {
+ vm_page_lock(m);
+ vm_page_activate(m);
+ vm_page_unlock(m);
+ } else {
+ vm_page_lock(m);
+ vm_page_deactivate(m);
+ vm_page_unlock(m);
+ }
+ vm_page_wakeup(m);
+ } else {
+ vm_page_lock(m);
+ vm_page_free(m);
+ vm_page_unlock(m);
+ }
+}
+
+/*
* vm_page_sleep:
*
* Sleep and release the page and page queues locks.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vm_page.h
--- a/head/sys/vm/vm_page.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vm_page.h Fri Aug 10 14:19:25 2012 +0300
@@ -57,7 +57,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $FreeBSD: head/sys/vm/vm_page.h 237346 2012-06-20 23:25:47Z alc $
+ * $FreeBSD: head/sys/vm/vm_page.h 239065 2012-08-05 14:11:42Z kib $
*/
=20
/*
@@ -239,13 +239,14 @@
#define vm_page_queue_free_mtx vm_page_queue_free_lock.data
=20
/*
- * These are the flags defined for vm_page.
- *
- * aflags are updated by atomic accesses. Use the vm_page_aflag_set()
- * and vm_page_aflag_clear() functions to set and clear the flags.
+ * The vm_page's aflags are updated using atomic operations. To set or cl=
ear
+ * these flags, the functions vm_page_aflag_set() and vm_page_aflag_clear()
+ * must be used. Neither these flags nor these functions are part of the =
KBI.
*
* PGA_REFERENCED may be cleared only if the object containing the page is
- * locked. It is set by both the MI and MD VM layers.
+ * locked. It is set by both the MI and MD VM layers. However, kernel
+ * loadable modules should not directly set this flag. They should call
+ * vm_page_reference() instead.
*
* PGA_WRITEABLE is set exclusively on managed pages by pmap_enter(). Whe=
n it
* does so, the page must be VPO_BUSY. The MI VM layer must never access =
this
@@ -281,7 +282,9 @@
=20
#ifdef _KERNEL
=20
-#include <vm/vm_param.h>
+#include <sys/systm.h>
+
+#include <machine/atomic.h>
=20
/*
* Each pageable resident page falls into one of five lists:
@@ -310,7 +313,6 @@
*
*/
=20
-struct vnode;
extern int vm_page_zero_count;
=20
extern vm_page_t vm_page_array; /* First resident page in table */
@@ -350,8 +352,6 @@
#define VM_ALLOC_COUNT_SHIFT 16
#define VM_ALLOC_COUNT(count) ((count) << VM_ALLOC_COUNT_SHIFT)
=20
-void vm_page_aflag_set(vm_page_t m, uint8_t bits);
-void vm_page_aflag_clear(vm_page_t m, uint8_t bits);
void vm_page_busy(vm_page_t m);
void vm_page_flash(vm_page_t m);
void vm_page_io_start(vm_page_t m);
@@ -388,6 +388,7 @@
int vm_page_pa_tryrelock(pmap_t, vm_paddr_t, vm_paddr_t *);
vm_page_t vm_page_prev(vm_page_t m);
void vm_page_putfake(vm_page_t m);
+void vm_page_readahead_finish(vm_page_t m, int error);
void vm_page_reference(vm_page_t m);
void vm_page_remove (vm_page_t);
void vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t);
@@ -429,6 +430,75 @@
#endif
=20
/*
+ * We want to use atomic updates for the aflags field, which is 8 bits wid=
e.
+ * However, not all architectures support atomic operations on 8-bit
+ * destinations. In order that we can easily use a 32-bit operation, we
+ * require that the aflags field be 32-bit aligned.
+ */
+CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) =3D=3D 0);
+
+/*
+ * Clear the given bits in the specified page.
+ */
+static inline void
+vm_page_aflag_clear(vm_page_t m, uint8_t bits)
+{
+ uint32_t *addr, val;
+
+ /*
+ * The PGA_REFERENCED flag can only be cleared if the object
+ * containing the page is locked.
+ */
+ if ((bits & PGA_REFERENCED) !=3D 0)
+ VM_PAGE_OBJECT_LOCK_ASSERT(m);
+
+ /*
+ * Access the whole 32-bit word containing the aflags field with an
+ * atomic update. Parallel non-atomic updates to the other fields
+ * within this word are handled properly by the atomic update.
+ */
+ addr =3D (void *)&m->aflags;
+ KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0,
+ ("vm_page_aflag_clear: aflags is misaligned"));
+ val =3D bits;
+#if BYTE_ORDER =3D=3D BIG_ENDIAN
+ val <<=3D 24;
+#endif
+ atomic_clear_32(addr, val);
+}
+
+/*
+ * Set the given bits in the specified page.
+ */
+static inline void
+vm_page_aflag_set(vm_page_t m, uint8_t bits)
+{
+ uint32_t *addr, val;
+
+ /*
+ * The PGA_WRITEABLE flag can only be set if the page is managed and
+ * VPO_BUSY. Currently, this flag is only set by pmap_enter().
+ */
+ KASSERT((bits & PGA_WRITEABLE) =3D=3D 0 ||
+ (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) =3D=3D VPO_BUSY,
+ ("vm_page_aflag_set: PGA_WRITEABLE and !VPO_BUSY"));
+
+ /*
+ * Access the whole 32-bit word containing the aflags field with an
+ * atomic update. Parallel non-atomic updates to the other fields
+ * within this word are handled properly by the atomic update.
+ */
+ addr =3D (void *)&m->aflags;
+ KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0,
+ ("vm_page_aflag_set: aflags is misaligned"));
+ val =3D bits;
+#if BYTE_ORDER =3D=3D BIG_ENDIAN
+ val <<=3D 24;
+#endif
+ atomic_set_32(addr, val);
+}=20
+
+/*
* vm_page_dirty:
*
* Set all bits in the page's dirty field.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vm_pageout.c
--- a/head/sys/vm/vm_pageout.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vm_pageout.c Fri Aug 10 14:19:25 2012 +0300
@@ -73,7 +73,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/vm_pageout.c 238732 2012-07-24 02:35:30Z a=
lc $");
+__FBSDID("$FreeBSD: head/sys/vm/vm_pageout.c 239121 2012-08-07 04:48:14Z a=
lc $");
=20
#include "opt_vm.h"
#include <sys/param.h>
@@ -586,23 +586,14 @@
continue;
}
object =3D m->object;
- if (!VM_OBJECT_TRYLOCK(object) &&
+ if ((!VM_OBJECT_TRYLOCK(object) &&
(!vm_pageout_fallback_object_lock(m, &next) ||
- m->hold_count !=3D 0)) {
+ m->hold_count !=3D 0)) || (m->oflags & VPO_BUSY) !=3D 0 ||
+ m->busy !=3D 0) {
vm_page_unlock(m);
VM_OBJECT_UNLOCK(object);
continue;
}
- if ((m->oflags & VPO_BUSY) !=3D 0 || m->busy !=3D 0) {
- if (tries =3D=3D 0) {
- vm_page_unlock(m);
- VM_OBJECT_UNLOCK(object);
- continue;
- }
- vm_page_sleep(m, "vpctw0");
- VM_OBJECT_UNLOCK(object);
- return (FALSE);
- }
vm_page_test_dirty(m);
if (m->dirty =3D=3D 0)
pmap_remove_all(m);
@@ -889,6 +880,12 @@
*/
uma_reclaim();
=20
+ /*
+ * The addl_page_shortage is the the number of temporarily
+ * stuck pages in the inactive queue. In other words, the
+ * number of pages from cnt.v_inactive_count that should be
+ * discounted in setting the target for the active queue scan.
+ */
addl_page_shortage =3D atomic_readandclear_int(&vm_pageout_deficit);
=20
/*
@@ -945,38 +942,31 @@
("Unmanaged page %p cannot be in inactive queue", m));
=20
/*
- * Lock the page.
+ * The page or object lock acquisitions fail if the
+ * page was removed from the queue or moved to a
+ * different position within the queue. In either
+ * case, addl_page_shortage should not be incremented.
*/
if (!vm_pageout_page_lock(m, &next)) {
vm_page_unlock(m);
- addl_page_shortage++;
+ continue;
+ }
+ object =3D m->object;
+ if (!VM_OBJECT_TRYLOCK(object) &&
+ !vm_pageout_fallback_object_lock(m, &next)) {
+ vm_page_unlock(m);
+ VM_OBJECT_UNLOCK(object);
continue;
}
=20
/*
- * A held page may be undergoing I/O, so skip it.
+ * Don't mess with busy pages, keep them at at the
+ * front of the queue, most likely they are being
+ * paged out. Increment addl_page_shortage for busy
+ * pages, because they may leave the inactive queue
+ * shortly after page scan is finished.
*/
- if (m->hold_count) {
- vm_page_unlock(m);
- vm_page_requeue(m);
- addl_page_shortage++;
- continue;
- }
-
- /*
- * Don't mess with busy pages, keep in the front of the
- * queue, most likely are being paged out.
- */
- object =3D m->object;
- if (!VM_OBJECT_TRYLOCK(object) &&
- (!vm_pageout_fallback_object_lock(m, &next) ||
- m->hold_count !=3D 0)) {
- VM_OBJECT_UNLOCK(object);
- vm_page_unlock(m);
- addl_page_shortage++;
- continue;
- }
- if (m->busy || (m->oflags & VPO_BUSY)) {
+ if (m->busy !=3D 0 || (m->oflags & VPO_BUSY) !=3D 0) {
vm_page_unlock(m);
VM_OBJECT_UNLOCK(object);
addl_page_shortage++;
@@ -1036,6 +1026,21 @@
goto relock_queues;
}
=20
+ if (m->hold_count !=3D 0) {
+ vm_page_unlock(m);
+ VM_OBJECT_UNLOCK(object);
+
+ /*
+ * Held pages are essentially stuck in the
+ * queue. So, they ought to be discounted
+ * from cnt.v_inactive_count. See the
+ * calculation of the page_shortage for the
+ * loop over the active queue below.
+ */
+ addl_page_shortage++;
+ goto relock_queues;
+ }
+
/*
* If the upper level VM system does not believe that the page
* is fully dirty, but it is mapped for write access, then we
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vnode_pager.c
--- a/head/sys/vm/vnode_pager.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vnode_pager.c Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/vnode_pager.c 237172 2012-06-16 21:39:00Z =
attilio $");
+__FBSDID("$FreeBSD: head/sys/vm/vnode_pager.c 239065 2012-08-05 14:11:42Z =
kib $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -68,6 +68,7 @@
#include <machine/atomic.h>
=20
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pager.h>
@@ -985,37 +986,8 @@
mt));
}
=09
- if (i !=3D reqpage) {
-
- /*
- * whether or not to leave the page activated is up in
- * the air, but we should put the page on a page queue
- * somewhere. (it already is in the object). Result:
- * It appears that empirical results show that
- * deactivating pages is best.
- */
-
- /*
- * just in case someone was asking for this page we
- * now tell them that it is ok to use
- */
- if (!error) {
- if (mt->oflags & VPO_WANTED) {
- vm_page_lock(mt);
- vm_page_activate(mt);
- vm_page_unlock(mt);
- } else {
- vm_page_lock(mt);
- vm_page_deactivate(mt);
- vm_page_unlock(mt);
- }
- vm_page_wakeup(mt);
- } else {
- vm_page_lock(mt);
- vm_page_free(mt);
- vm_page_unlock(mt);
- }
- }
+ if (i !=3D reqpage)
+ vm_page_readahead_finish(mt, error);
}
VM_OBJECT_UNLOCK(object);
if (error) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/x86/x86/busdma_machdep.c
--- a/head/sys/x86/x86/busdma_machdep.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/x86/x86/busdma_machdep.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/x86/busdma_machdep.c 233036 2012-03-16 16=
:12:10Z jhb $");
+__FBSDID("$FreeBSD: head/sys/x86/x86/busdma_machdep.c 239020 2012-08-03 18=
:40:44Z jhb $");
=20
#include <sys/param.h>
#include <sys/systm.h>
@@ -42,6 +42,8 @@
#include <sys/sysctl.h>
=20
#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
=20
@@ -131,7 +133,7 @@
=20
static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
static STAILQ_HEAD(, bus_dmamap) bounce_map_callbacklist;
-static struct bus_dmamap nobounce_dmamap;
+static struct bus_dmamap nobounce_dmamap, contig_dmamap;
=20
static void init_bounce_pages(void *dummy);
static int alloc_bounce_zone(bus_dma_tag_t dmat);
@@ -465,7 +467,7 @@
int
bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
{
- if (map !=3D NULL && map !=3D &nobounce_dmamap) {
+ if (map !=3D NULL && map !=3D &nobounce_dmamap && map !=3D &contig_dmamap=
) {
if (STAILQ_FIRST(&map->bpages) !=3D NULL) {
CTR3(KTR_BUSDMA, "%s: tag %p error %d",
__func__, dmat, EBUSY);
@@ -490,6 +492,7 @@
bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
bus_dmamap_t *mapp)
{
+ vm_memattr_t attr;
int mflags;
=20
if (flags & BUS_DMA_NOWAIT)
@@ -512,6 +515,10 @@
}
if (flags & BUS_DMA_ZERO)
mflags |=3D M_ZERO;
+ if (flags & BUS_DMA_NOCACHE)
+ attr =3D VM_MEMATTR_UNCACHEABLE;
+ else
+ attr =3D VM_MEMATTR_DEFAULT;
=20
/*=20
* XXX:
@@ -523,7 +530,8 @@
*/
if ((dmat->maxsize <=3D PAGE_SIZE) &&
(dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem)) {
+ dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem) &&
+ attr =3D=3D VM_MEMATTR_DEFAULT) {
*vaddr =3D malloc(dmat->maxsize, M_DEVBUF, mflags);
} else {
/*
@@ -532,9 +540,10 @@
* multi-seg allocations yet though.
* XXX Certain AGP hardware does.
*/
- *vaddr =3D contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
- 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
- dmat->boundary);
+ *vaddr =3D (void *)kmem_alloc_contig(kernel_map, dmat->maxsize,
+ mflags, 0ul, dmat->lowaddr, dmat->alignment ?
+ dmat->alignment : 1ul, dmat->boundary, attr);
+ *mapp =3D &contig_dmamap;
}
if (*vaddr =3D=3D NULL) {
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
@@ -543,9 +552,6 @@
} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
printf("bus_dmamem_alloc failed to align memory properly.\n");
}
- if (flags & BUS_DMA_NOCACHE)
- pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize,
- PAT_UNCACHEABLE);
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
__func__, dmat, dmat->flags, 0);
return (0);
@@ -560,18 +566,15 @@
{
/*
* dmamem does not need to be bounced, so the map should be
- * NULL
+ * NULL if malloc() was used and contig_dmamap if
+ * kmem_alloc_contig() was used.
*/
- if (map !=3D NULL)
+ if (!(map =3D=3D NULL || map =3D=3D &contig_dmamap))
panic("bus_dmamem_free: Invalid map freed\n");
- pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, PAT_WRITE_BACK);
- if ((dmat->maxsize <=3D PAGE_SIZE) &&
- (dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem))
+ if (map =3D=3D NULL)
free(vaddr, M_DEVBUF);
- else {
- contigfree(vaddr, dmat->maxsize, M_DEVBUF);
- }
+ else
+ kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
=20
@@ -662,7 +665,7 @@
vm_offset_t vaddr;
int seg, error;
=20
- if (map =3D=3D NULL)
+ if (map =3D=3D NULL || map =3D=3D &contig_dmamap)
map =3D &nobounce_dmamap;
=20
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) !=3D 0) {
@@ -1139,7 +1142,7 @@
struct bounce_page *bpage;
=20
KASSERT(dmat->bounce_zone !=3D NULL, ("no bounce zone in dma tag"));
- KASSERT(map !=3D NULL && map !=3D &nobounce_dmamap,
+ KASSERT(map !=3D NULL && map !=3D &nobounce_dmamap && map !=3D &contig_dm=
amap,
("add_bounce_page: bad map %p", map));
=20
bz =3D dmat->bounce_zone;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/x86/x86/local_apic.c
--- a/head/sys/x86/x86/local_apic.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/x86/x86/local_apic.c Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/x86/local_apic.c 232232 2012-02-27 17:33:=
16Z jhb $");
+__FBSDID("$FreeBSD: head/sys/x86/x86/local_apic.c 239013 2012-08-03 15:19:=
59Z mav $");
=20
#include "opt_atpic.h"
#include "opt_hwpmc_hooks.h"
@@ -119,6 +119,7 @@
u_long *la_timer_count;
u_long la_timer_period;
u_int la_timer_mode;
+ uint32_t lvt_timer_cache;
/* Include IDT_SYSCALL to make indexing easier. */
int la_ioint_irqs[APIC_NUM_IOINTS + 1];
} static lapics[MAX_APIC_ID + 1];
@@ -160,9 +161,11 @@
=20
static void lapic_enable(void);
static void lapic_resume(struct pic *pic);
-static void lapic_timer_oneshot(u_int count, int enable_int);
-static void lapic_timer_periodic(u_int count, int enable_int);
-static void lapic_timer_stop(void);
+static void lapic_timer_oneshot(struct lapic *,
+ u_int count, int enable_int);
+static void lapic_timer_periodic(struct lapic *,
+ u_int count, int enable_int);
+static void lapic_timer_stop(struct lapic *);
static void lapic_timer_set_divisor(u_int divisor);
static uint32_t lvt_mode(struct lapic *la, u_int pin, uint32_t value);
static int lapic_et_start(struct eventtimer *et,
@@ -370,7 +373,8 @@
lapic->lvt_pcint =3D lvt_mode(la, LVT_PMC, lapic->lvt_pcint);
=20
/* Program timer LVT and setup handler. */
- lapic->lvt_timer =3D lvt_mode(la, LVT_TIMER, lapic->lvt_timer);
+ la->lvt_timer_cache =3D lapic->lvt_timer =3D
+ lvt_mode(la, LVT_TIMER, lapic->lvt_timer);
if (boot) {
snprintf(buf, sizeof(buf), "cpu%d:timer", PCPU_GET(cpuid));
intrcnt_add(buf, &la->la_timer_count);
@@ -382,9 +386,9 @@
lapic_id()));
lapic_timer_set_divisor(lapic_timer_divisor);
if (la->la_timer_mode =3D=3D 1)
- lapic_timer_periodic(la->la_timer_period, 1);
+ lapic_timer_periodic(la, la->la_timer_period, 1);
else
- lapic_timer_oneshot(la->la_timer_period, 1);
+ lapic_timer_oneshot(la, la->la_timer_period, 1);
}
=20
/* Program error LVT and clear any existing errors. */
@@ -489,13 +493,14 @@
struct lapic *la;
u_long value;
=20
+ la =3D &lapics[PCPU_GET(apic_id)];
if (et->et_frequency =3D=3D 0) {
/* Start off with a divisor of 2 (power on reset default). */
lapic_timer_divisor =3D 2;
/* Try to calibrate the local APIC timer. */
do {
lapic_timer_set_divisor(lapic_timer_divisor);
- lapic_timer_oneshot(APIC_TIMER_MAX_COUNT, 0);
+ lapic_timer_oneshot(la, APIC_TIMER_MAX_COUNT, 0);
DELAY(1000000);
value =3D APIC_TIMER_MAX_COUNT - lapic->ccr_timer;
if (value !=3D APIC_TIMER_MAX_COUNT)
@@ -515,22 +520,22 @@
et->et_max_period.frac =3D
((0xfffffffeLLU << 32) / et->et_frequency) << 32;
}
- lapic_timer_set_divisor(lapic_timer_divisor);
- la =3D &lapics[lapic_id()];
+ if (la->la_timer_mode =3D=3D 0)
+ lapic_timer_set_divisor(lapic_timer_divisor);
if (period !=3D NULL) {
la->la_timer_mode =3D 1;
la->la_timer_period =3D
(et->et_frequency * (period->frac >> 32)) >> 32;
if (period->sec !=3D 0)
la->la_timer_period +=3D et->et_frequency * period->sec;
- lapic_timer_periodic(la->la_timer_period, 1);
+ lapic_timer_periodic(la, la->la_timer_period, 1);
} else {
la->la_timer_mode =3D 2;
la->la_timer_period =3D
(et->et_frequency * (first->frac >> 32)) >> 32;
if (first->sec !=3D 0)
la->la_timer_period +=3D et->et_frequency * first->sec;
- lapic_timer_oneshot(la->la_timer_period, 1);
+ lapic_timer_oneshot(la, la->la_timer_period, 1);
}
return (0);
}
@@ -538,10 +543,10 @@
static int
lapic_et_stop(struct eventtimer *et)
{
- struct lapic *la =3D &lapics[lapic_id()];
+ struct lapic *la =3D &lapics[PCPU_GET(apic_id)];
=20
la->la_timer_mode =3D 0;
- lapic_timer_stop();
+ lapic_timer_stop(la);
return (0);
}
=20
@@ -835,11 +840,11 @@
}
=20
static void
-lapic_timer_oneshot(u_int count, int enable_int)
+lapic_timer_oneshot(struct lapic *la, u_int count, int enable_int)
{
u_int32_t value;
=20
- value =3D lapic->lvt_timer;
+ value =3D la->lvt_timer_cache;
value &=3D ~APIC_LVTT_TM;
value |=3D APIC_LVTT_TM_ONE_SHOT;
if (enable_int)
@@ -849,11 +854,11 @@
}
=20
static void
-lapic_timer_periodic(u_int count, int enable_int)
+lapic_timer_periodic(struct lapic *la, u_int count, int enable_int)
{
u_int32_t value;
=20
- value =3D lapic->lvt_timer;
+ value =3D la->lvt_timer_cache;
value &=3D ~APIC_LVTT_TM;
value |=3D APIC_LVTT_TM_PERIODIC;
if (enable_int)
@@ -863,11 +868,11 @@
}
=20
static void
-lapic_timer_stop(void)
+lapic_timer_stop(struct lapic *la)
{
u_int32_t value;
=20
- value =3D lapic->lvt_timer;
+ value =3D la->lvt_timer_cache;
value &=3D ~APIC_LVTT_TM;
value |=3D APIC_LVT_M;
lapic->lvt_timer =3D value;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/x86/x86/tsc.c
--- a/head/sys/x86/x86/tsc.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/x86/x86/tsc.c Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/x86/tsc.c 238755 2012-07-24 22:10:11Z jim=
harris $");
+__FBSDID("$FreeBSD: head/sys/x86/x86/tsc.c 239133 2012-08-07 23:16:11Z jim=
harris $");
=20
#include "opt_compat.h"
#include "opt_clock.h"
@@ -82,7 +82,11 @@
static void tsc_freq_changing(void *arg, const struct cf_level *level,
int *status);
static unsigned tsc_get_timecount(struct timecounter *tc);
-static unsigned tsc_get_timecount_low(struct timecounter *tc);
+static inline unsigned tsc_get_timecount_low(struct timecounter *tc);
+static unsigned tsc_get_timecount_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_mfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_mfence(struct timecounter *tc);
static void tsc_levels_changed(void *arg, int unit);
=20
static struct timecounter tsc_timecounter =3D {
@@ -262,6 +266,10 @@
(vm_guest =3D=3D VM_GUEST_NO &&
CPUID_TO_FAMILY(cpu_id) >=3D 0x10))
tsc_is_invariant =3D 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =3D
+ tsc_get_timecount_mfence;
+ }
break;
case CPU_VENDOR_INTEL:
if ((amd_pminfo & AMDPM_TSC_INVARIANT) !=3D 0 ||
@@ -271,6 +279,10 @@
(CPUID_TO_FAMILY(cpu_id) =3D=3D 0xf &&
CPUID_TO_MODEL(cpu_id) >=3D 0x3))))
tsc_is_invariant =3D 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =3D
+ tsc_get_timecount_lfence;
+ }
break;
case CPU_VENDOR_CENTAUR:
if (vm_guest =3D=3D VM_GUEST_NO &&
@@ -278,6 +290,10 @@
CPUID_TO_MODEL(cpu_id) >=3D 0xf &&
(rdmsr(0x1203) & 0x100000000ULL) =3D=3D 0)
tsc_is_invariant =3D 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =3D
+ tsc_get_timecount_lfence;
+ }
break;
}
=20
@@ -328,16 +344,30 @@
=20
#ifdef SMP
=20
-/* rmb is required here because rdtsc is not a serializing instruction. */
-#define TSC_READ(x) \
-static void \
-tsc_read_##x(void *arg) \
-{ \
- uint32_t *tsc =3D arg; \
- u_int cpu =3D PCPU_GET(cpuid); \
- \
- rmb(); \
- tsc[cpu * 3 + x] =3D rdtsc32(); \
+/*
+ * RDTSC is not a serializing instruction, and does not drain
+ * instruction stream, so we need to drain the stream before executing
+ * it. It could be fixed by use of RDTSCP, except the instruction is
+ * not available everywhere.
+ *
+ * Use CPUID for draining in the boot-time SMP constistency test. The
+ * timecounters use MFENCE for AMD CPUs, and LFENCE for others (Intel
+ * and VIA) when SSE2 is present, and nothing on older machines which
+ * also do not issue RDTSC prematurely. There, testing for SSE2 and
+ * vendor is too cumbersome, and we learn about TSC presence from CPUID.
+ *
+ * Do not use do_cpuid(), since we do not need CPUID results, which
+ * have to be written into memory with do_cpuid().
+ */
+#define TSC_READ(x) \
+static void \
+tsc_read_##x(void *arg) \
+{ \
+ uint64_t *tsc =3D arg; \
+ u_int cpu =3D PCPU_GET(cpuid); \
+ \
+ __asm __volatile("cpuid" : : : "eax", "ebx", "ecx", "edx"); \
+ tsc[cpu * 3 + x] =3D rdtsc(); \
}
TSC_READ(0)
TSC_READ(1)
@@ -349,8 +379,8 @@
static void
comp_smp_tsc(void *arg)
{
- uint32_t *tsc;
- int32_t d1, d2;
+ uint64_t *tsc;
+ int64_t d1, d2;
u_int cpu =3D PCPU_GET(cpuid);
u_int i, j, size;
=20
@@ -371,7 +401,7 @@
static int
test_smp_tsc(void)
{
- uint32_t *data, *tsc;
+ uint64_t *data, *tsc;
u_int i, size;
=20
if (!smp_tsc && !tsc_is_invariant)
@@ -487,7 +517,16 @@
for (shift =3D 0; shift < 31 && (tsc_freq >> shift) > max_freq; shift++)
;
if (shift > 0) {
- tsc_timecounter.tc_get_timecount =3D tsc_get_timecount_low;
+ if (cpu_feature & CPUID_SSE2) {
+ if (cpu_vendor_id =3D=3D CPU_VENDOR_AMD) {
+ tsc_timecounter.tc_get_timecount =3D
+ tsc_get_timecount_low_mfence;
+ } else {
+ tsc_timecounter.tc_get_timecount =3D
+ tsc_get_timecount_low_lfence;
+ }
+ } else
+ tsc_timecounter.tc_get_timecount =3D tsc_get_timecount_low;
tsc_timecounter.tc_name =3D "TSC-low";
if (bootverbose)
printf("TSC timecounter discards lower %d bit(s)\n",
@@ -599,16 +638,48 @@
return (rdtsc32());
}
=20
-static u_int
+static inline u_int
tsc_get_timecount_low(struct timecounter *tc)
{
uint32_t rv;
=20
__asm __volatile("rdtsc; shrd %%cl, %%edx, %0"
- : "=3Da" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
+ : "=3Da" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
return (rv);
}
=20
+static u_int
+tsc_get_timecount_lfence(struct timecounter *tc __unused)
+{
+
+ lfence();
+ return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_lfence(struct timecounter *tc)
+{
+
+ lfence();
+ return (tsc_get_timecount_low(tc));
+}
+
+static u_int
+tsc_get_timecount_mfence(struct timecounter *tc __unused)
+{
+
+ mfence();
+ return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_mfence(struct timecounter *tc)
+{
+
+ mfence();
+ return (tsc_get_timecount_low(tc));
+}
+
uint32_t
cpu_fill_vdso_timehands(struct vdso_timehands *vdso_th)
{
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/regression/lib/libc/gen/Mak=
efile
--- a/head/tools/regression/lib/libc/gen/Makefile Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/tools/regression/lib/libc/gen/Makefile Fri Aug 10 14:19:25 2012 =
+0300
@@ -1,7 +1,7 @@
-# $FreeBSD: head/tools/regression/lib/libc/gen/Makefile 231984 2012-02-21 =
23:46:41Z jilles $
+# $FreeBSD: head/tools/regression/lib/libc/gen/Makefile 239160 2012-08-09 =
22:05:40Z jilles $
=20
TESTS=3D test-arc4random test-fmtcheck test-fmtmsg test-fnmatch \
- test-fpclassify test-posix_spawn test-wordexp
+ test-fpclassify test-ftw test-posix_spawn test-wordexp
=20
.PHONY: tests
tests: ${TESTS}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/regression/lib/libc/gen/tes=
t-ftw.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/regression/lib/libc/gen/test-ftw.c Fri Aug 10 14:19:25 201=
2 +0300
@@ -0,0 +1,141 @@
+/*-
+ * Copyright (c) 2012 Jilles Tjoelker
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Limited test program for nftw() as specified by IEEE Std. 1003.1-2008.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/tools/regression/lib/libc/gen/test-ftw.c 239160 2=
012-08-09 22:05:40Z jilles $");
+
+#include <sys/wait.h>
+
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ftw.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <spawn.h>
+
+extern char **environ;
+
+static char dir[] =3D "/tmp/testftw.XXXXXXXXXX";
+static int failures;
+static int ftwflags;
+
+static void
+cleanup(int ustatus __unused)
+{
+ int error, status;
+ pid_t pid, waitres;
+ const char *myargs[5];
+
+ err_set_exit(NULL);
+ myargs[0] =3D "rm";
+ myargs[1] =3D "-rf";
+ myargs[2] =3D "--";
+ myargs[3] =3D dir;
+ myargs[4] =3D NULL;
+ error =3D posix_spawnp(&pid, myargs[0], NULL, NULL,
+ __DECONST(char **, myargs), environ);
+ if (error !=3D 0)
+ warn("posix_spawnp rm");
+ else {
+ waitres =3D waitpid(pid, &status, 0);
+ if (waitres !=3D pid)
+ warnx("waitpid rm failed");
+ else if (status !=3D 0)
+ warnx("rm failed");
+ }
+}
+
+static int
+cb(const char *path, const struct stat *st, int type, struct FTW *f)
+{
+
+ switch (type) {
+ case FTW_D:
+ if ((ftwflags & FTW_DEPTH) =3D=3D 0)
+ return (0);
+ break;
+ case FTW_DP:
+ if ((ftwflags & FTW_DEPTH) !=3D 0)
+ return (0);
+ break;
+ case FTW_SL:
+ if ((ftwflags & FTW_PHYS) !=3D 0)
+ return (0);
+ break;
+ }
+ warnx("unexpected path=3D%s type=3D%d f.level=3D%d\n",
+ path, type, f->level);
+ failures++;
+ return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ int fd;
+
+ if (!mkdtemp(dir))
+ err(2, "mkdtemp");
+
+ err_set_exit(cleanup);
+
+ fd =3D open(dir, O_DIRECTORY | O_RDONLY);
+ if (fd =3D=3D -1)
+ err(2, "open %s", dir);
+
+ if (mkdirat(fd, "d1", 0777) =3D=3D -1)
+ err(2, "mkdirat d1");
+
+ if (symlinkat(dir, fd, "d1/looper") =3D=3D -1)
+ err(2, "symlinkat looper");
+
+ ftwflags =3D FTW_PHYS;
+ if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+ err(2, "nftw FTW_PHYS");
+ ftwflags =3D FTW_PHYS | FTW_DEPTH;
+ if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+ err(2, "nftw FTW_PHYS | FTW_DEPTH");
+ ftwflags =3D 0;
+ if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+ err(2, "nftw 0");
+ ftwflags =3D FTW_DEPTH;
+ if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+ err(2, "nftw FTW_DEPTH");
+
+ close(fd);
+
+ printf("PASS nftw()\n");
+
+ cleanup(failures !=3D 0);
+
+ return (failures !=3D 0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/ath_prom_read/Mak=
efile
--- a/head/tools/tools/ath/ath_prom_read/Makefile Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/tools/tools/ath/ath_prom_read/Makefile Fri Aug 10 14:19:25 2012 =
+0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/tools/tools/ath/ath_prom_read/Makefile 217739 2011-01-22 =
23:44:56Z adrian $
+# $FreeBSD: head/tools/tools/ath/ath_prom_read/Makefile 239161 2012-08-09 =
23:04:20Z adrian $
=20
PROG=3D ath_prom_read
=20
@@ -20,3 +20,4 @@
echo 'typedef void *HAL_SOFTC;' >ah_osdep.h
echo 'typedef int HAL_BUS_TAG;' >>ah_osdep.h
echo 'typedef void *HAL_BUS_HANDLE;' >>ah_osdep.h
+ echo 'typedef uint32_t HAL_DMA_ADDR;' >>ah_osdep.h
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/athaggrstats/Make=
file
--- a/head/tools/tools/ath/athaggrstats/Makefile Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/tools/tools/ath/athaggrstats/Makefile Fri Aug 10 14:19:25 2012 +=
0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/tools/tools/ath/athaggrstats/Makefile 236834 2012-06-10 0=
6:44:04Z adrian $
+# $FreeBSD: head/tools/tools/ath/athaggrstats/Makefile 239161 2012-08-09 2=
3:04:20Z adrian $
=20
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
=20
@@ -22,5 +22,6 @@
echo 'typedef void *HAL_SOFTC;' >ah_osdep.h
echo 'typedef int HAL_BUS_TAG;' >>ah_osdep.h
echo 'typedef void *HAL_BUS_HANDLE;' >>ah_osdep.h
+ echo 'typedef uint32_t HAL_DMA_ADDR;' >>ah_osdep.h
=20
.include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/athratestats/main=
.c
--- a/head/tools/tools/ath/athratestats/main.c Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/tools/tools/ath/athratestats/main.c Fri Aug 10 14:19:25 2012 +03=
00
@@ -26,7 +26,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/tools/tools/ath/athratestats/main.c 238646 2012-07-20 06=
:11:26Z adrian $
+ * $FreeBSD: head/tools/tools/ath/athratestats/main.c 238893 2012-07-30 01=
:42:22Z adrian $
*/
=20
#include "opt_ah.h"
@@ -170,69 +170,14 @@
err(1, "ioctl");
}
=20
-int
-main(int argc, char *argv[])
+static int
+rate_node_stats(struct ath_ratestats *r, struct ether_addr *e)
{
- struct ath_ratestats r;
- struct ether_addr *e;
- uint8_t *buf;
struct ath_rateioctl_tlv *av;
struct sample_node *sn =3D NULL;
struct ath_rateioctl_rt *rt =3D NULL;
- char const *ifname =3D NULL, *macaddr =3D NULL;
- int c;
- int do_all =3D 0;
-
- ifname =3D getenv("ATH");
- if (ifname =3D=3D NULL)
- ifname =3D "ath0";
-
- while ((c =3D getopt(argc, argv, "ahi:m:")) !=3D -1) {
- switch (c) {
- case 'a':
- do_all =3D 1;
- break;
- case 'i':
- ifname =3D optarg;
- break;
- case 'm':
- macaddr =3D optarg;
- break;
- =09
- default:
- errx(1,
- "usage: %s [-h] [-i ifname] [-a] [-m macaddr]\n",
- argv[0]);
- /* NOTREACHED */
- }
- }
-
- buf =3D calloc(1, STATS_BUF_SIZE);
- if (buf =3D=3D NULL)
- err(1, "calloc");
-
- bzero(&r, sizeof(r));
- r.s =3D socket(AF_INET, SOCK_DGRAM, 0);
- if (r.s < 0) {
- err(1, "socket");
- }
- /* XXX error check */
- ath_setifname(&r, ifname);
-
- if (macaddr =3D=3D NULL) {
- errx(1, "%s: macaddress wasn't supplied and no -a given\n",
- argv[0]);
- /* NOTREACHED */
- }
- e =3D ether_aton(macaddr);
- if (e =3D=3D NULL)
- err(1, "ether_aton");
-
- r.re.buf =3D buf;
- r.re.len =3D STATS_BUF_SIZE;
-
- ath_setsta(&r, e->octet);
- ath_rate_ioctl(&r);
+ int error =3D 0;
+ uint8_t *buf =3D r->re.buf;
=20
/*
* For now, hard-code the TLV order and contents. Ew!
@@ -275,6 +220,87 @@
sizeof(struct ath_rateioctl_rt) +
sizeof(struct ath_rateioctl_tlv));
=20
- ath_sample_stats(&r, rt, sn);
+ ath_sample_stats(r, rt, sn);
}
=20
+
+int
+main(int argc, char *argv[])
+{
+ char const *ifname =3D NULL, *macaddr =3D NULL;
+ int c;
+ int do_all =3D 0;
+ struct ether_addr *e;
+ struct ath_ratestats r;
+ uint8_t *buf;
+
+ ifname =3D getenv("ATH");
+ if (ifname =3D=3D NULL)
+ ifname =3D "ath0";
+
+ while ((c =3D getopt(argc, argv, "ahi:m:")) !=3D -1) {
+ switch (c) {
+ case 'a':
+ do_all =3D 1;
+ break;
+ case 'i':
+ ifname =3D optarg;
+ break;
+ case 'm':
+ macaddr =3D optarg;
+ break;
+ =09
+ default:
+ errx(1,
+ "usage: %s [-h] [-i ifname] [-a] [-m macaddr]\n",
+ argv[0]);
+ /* NOTREACHED */
+ }
+ }
+
+ if (macaddr =3D=3D NULL) {
+ errx(1, "%s: macaddress wasn't supplied and no -a given\n",
+ argv[0]);
+ /* NOTREACHED */
+ }
+ e =3D ether_aton(macaddr);
+ if (e =3D=3D NULL)
+ err(1, "ether_aton");
+
+ bzero(&r, sizeof(r));
+
+ /*
+ * Persistent buffer for each lookup
+ */
+ buf =3D malloc(STATS_BUF_SIZE);
+ if (buf =3D=3D NULL)
+ err(1, "calloc");
+
+ r.re.buf =3D buf;
+ r.re.len =3D STATS_BUF_SIZE;
+
+ r.s =3D socket(AF_INET, SOCK_DGRAM, 0);
+ if (r.s < 0) {
+ err(1, "socket");
+ }
+ /* XXX error check */
+ ath_setifname(&r, ifname);
+
+ /* Zero the buffer before it's passed in */
+ memset(buf, '\0', STATS_BUF_SIZE);
+
+ /*
+ * Set the station address for this lookup.
+ */
+ ath_setsta(&r, e->octet);
+
+ /*
+ * Fetch the data from the driver.
+ */
+ ath_rate_ioctl(&r);
+
+ /*
+ * Decode and parse statistics.
+ */
+ rate_node_stats(&r, e);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/athstats/Makefile
--- a/head/tools/tools/ath/athstats/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/tools/tools/ath/athstats/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/tools/tools/ath/athstats/Makefile 217738 2011-01-22 23:37=
:42Z adrian $
+# $FreeBSD: head/tools/tools/ath/athstats/Makefile 239161 2012-08-09 23:04=
:20Z adrian $
=20
.PATH: ${.CURDIR}/../../../../sys/dev/ath/ath_hal
=20
@@ -22,5 +22,6 @@
echo 'typedef void *HAL_SOFTC;' >ah_osdep.h
echo 'typedef int HAL_BUS_TAG;' >>ah_osdep.h
echo 'typedef void *HAL_BUS_HANDLE;' >>ah_osdep.h
+ echo 'typedef uint32_t HAL_DMA_ADDR;' >>ah_osdep.h
=20
.include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/common/ah_osdep.h
--- a/head/tools/tools/ath/common/ah_osdep.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/tools/tools/ath/common/ah_osdep.h Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: head/tools/tools/ath/common/ah_osdep.h 185743 2008-12-07 19:1=
7:33Z sam $
+ * $FreeBSD: head/tools/tools/ath/common/ah_osdep.h 239162 2012-08-09 23:0=
8:22Z adrian $
*/
#ifndef _ATH_AH_OSDEP_H_
#define _ATH_AH_OSDEP_H_
@@ -41,6 +41,7 @@
typedef void *HAL_SOFTC;
typedef int HAL_BUS_TAG;
typedef void *HAL_BUS_HANDLE;
+typedef uint32_t HAL_DMA_ADDR;
=20
#define OS_DELAY(_n) DELAY(_n)
#define OS_INLINE __inline
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/bootparttest/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/tools/bootparttest/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,19 @@
+# $FreeBSD: head/tools/tools/bootparttest/Makefile 239070 2012-08-05 15:40=
:16Z ae $
+
+.PATH: ${.CURDIR}/../../../sys/boot/common
+
+BINDIR?=3D /usr/bin
+
+PROG=3D bootparttest
+NO_MAN=3D
+
+SRCS=3D bootparttest.c crc32.c malloc.c part.c
+
+CFLAGS=3D -I${.CURDIR}/../../../sys/boot/common -I. \
+ -DLOADER_GPT_SUPPORT -DLOADER_MBR_SUPPORT -DPART_DEBUG
+
+DPADD+=3D ${LIBGEOM} ${LIBUTIL}
+LDADD+=3D ${LIBGEOM} ${LIBUTIL}
+LDFLAGS+=3D -lgeom -lutil
+
+.include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/bootparttest/bootpart=
test.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/tools/bootparttest/bootparttest.c Fri Aug 10 14:19:25 2012=
+0300
@@ -0,0 +1,172 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/tools/tools/bootparttest/bootparttest.c 239087 20=
12-08-06 08:39:29Z ae $");
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <libgeom.h>
+#include <libutil.h>
+#include <part.h>
+#include <stdio.h>
+#include <unistd.h>
+
+struct disk {
+ const char *name;
+ uint64_t mediasize;
+ uint16_t sectorsize;
+
+ int fd;
+ int file;
+ off_t offset;
+};
+
+static int
+diskread(void *arg, void *buf, size_t blocks, off_t offset)
+{
+ struct disk *dp;
+
+ dp =3D (struct disk *)arg;
+ printf("%s: read %d blocks from the offset %jd [+%jd]\n", dp->name,
+ blocks, offset, dp->offset);
+ if (offset >=3D dp->mediasize / dp->sectorsize)
+ return (-1);
+
+ return (pread(dp->fd, buf, blocks * dp->sectorsize,
+ (offset + dp->offset) * dp->sectorsize) !=3D blocks * dp->sectorsize);
+}
+
+static const char*
+ptable_type2str(const struct ptable *table)
+{
+
+ switch (ptable_gettype(table)) {
+ case PTABLE_NONE:
+ return ("None");
+ case PTABLE_BSD:
+ return ("BSD");
+ case PTABLE_MBR:
+ return ("MBR");
+ case PTABLE_GPT:
+ return ("GPT");
+ case PTABLE_VTOC8:
+ return ("VTOC8");
+ };
+ return ("Unknown");
+}
+
+#define PWIDTH 35
+static void
+ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
+{
+ struct ptable *table;
+ struct disk *dp, bsd;
+ char line[80], size[6];
+
+ dp =3D (struct disk *)arg;
+ sprintf(line, " %s%s: %s", dp->file ? "disk0": dp->name, pname,
+ parttype2str(part->type));
+ humanize_number(size, sizeof(size),
+ (part->end - part->start + 1) * dp->sectorsize, "",
+ HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
+ printf("%-*s%s\n", PWIDTH, line, size);
+ if (part->type =3D=3D PART_FREEBSD) {
+ sprintf(line, "%s%s", dp->file ? "disk0": dp->name, pname);
+ bsd.name =3D line;
+ bsd.fd =3D dp->fd;
+ bsd.file =3D 0; /* to use dp->name in the next sprintf */
+ bsd.offset =3D dp->offset + part->start;
+ bsd.sectorsize =3D dp->sectorsize;
+ bsd.mediasize =3D (part->end - part->start + 1) * dp->sectorsize;
+ table =3D ptable_open(&bsd, bsd.mediasize / bsd.sectorsize,
+ bsd.sectorsize, diskread);
+ if (table =3D=3D NULL)
+ return;
+ ptable_iterate(table, &bsd, ptable_print);
+ ptable_close(table);
+ }
+}
+#undef PWIDTH
+
+static void
+inspect_disk(struct disk *dp)
+{
+ struct ptable *table;
+
+ table =3D ptable_open(dp, dp->mediasize / dp->sectorsize,
+ dp->sectorsize, diskread);
+ if (table =3D=3D NULL) {
+ printf("ptable_open failed\n");
+ return;
+ }
+ printf("Partition table detected: %s\n", ptable_type2str(table));
+ ptable_iterate(table, dp, ptable_print);
+ ptable_close(table);
+}
+
+int
+main(int argc, char **argv)
+{
+ struct stat sb;
+ struct disk d;
+
+ if (argc < 2)
+ errx(1, "Usage: %s <GEOM provider name> | "
+ "<disk image file name>", argv[0]);
+ d.name =3D argv[1];
+ if (stat(d.name, &sb) =3D=3D 0 && S_ISREG(sb.st_mode)) {
+ d.fd =3D open(d.name, O_RDONLY);
+ if (d.fd < 0)
+ err(1, "open %s", d.name);
+ d.mediasize =3D sb.st_size;
+ d.sectorsize =3D 512;
+ d.file =3D 1;
+ } else {
+ d.fd =3D g_open(d.name, 0);
+ if (d.fd < 0)
+ err(1, "g_open %s", d.name);
+ d.mediasize =3D g_mediasize(d.fd);
+ d.sectorsize =3D g_sectorsize(d.fd);
+ d.file =3D 0;
+ }
+ d.offset =3D 0;
+ printf("%s \"%s\" opened\n", d.file ? "Disk image": "GEOM provider",
+ d.name);
+ printf("Mediasize: %ju Bytes (%ju sectors)\nSectorsize: %u Bytes\n",
+ d.mediasize, d.mediasize / d.sectorsize, d.sectorsize);
+
+ inspect_disk(&d);
+
+ if (d.file)
+ close(d.fd);
+ else
+ g_close(d.fd);
+ return (0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/bootparttest/malloc.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/tools/bootparttest/malloc.c Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,44 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURP=
OSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/tools/tools/bootparttest/malloc.c 239070 2012-08-=
05 15:40:16Z ae $");
+
+#include <stdlib.h>
+
+void*
+Malloc(size_t size, const char *file, int line)
+{
+
+ return (malloc(size));
+}
+
+void
+Free(void *ptr, const char *file, int line)
+{
+
+ return (free(ptr));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/netmap/pkt-gen.c
--- a/head/tools/tools/netmap/pkt-gen.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/tools/tools/netmap/pkt-gen.c Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
*/
=20
/*
- * $FreeBSD: head/tools/tools/netmap/pkt-gen.c 238175 2012-07-06 17:03:43Z=
emaste $
+ * $FreeBSD: head/tools/tools/netmap/pkt-gen.c 239145 2012-08-08 19:15:01Z=
emaste $
* $Id: pkt-gen.c 10967 2012-05-03 11:29:23Z luigi $
*
* Example program to show how to build a multithreaded packet
@@ -468,13 +468,14 @@
sender_body(void *data)
{
struct targ *targ =3D (struct targ *) data;
-
struct pollfd fds[1];
struct netmap_if *nifp =3D targ->nifp;
struct netmap_ring *txring;
int i, pkts_per_td =3D targ->g->npackets / targ->g->nthreads, sent =3D 0;
int continuous =3D 0;
int options =3D targ->g->options | OPT_COPY;
+ int retval;
+
D("start");
if (pkts_per_td =3D=3D 0) {
continuous =3D 1;
@@ -508,10 +509,14 @@
/*
* wait for available room in the send queue(s)
*/
- if (poll(fds, 1, 2000) <=3D 0) {
+ if ((retval =3D poll(fds, 1, 2000)) <=3D 0) {
if (targ->cancel)
break;
- D("poll error/timeout on queue %d\n", targ->me);
+ if (retval =3D=3D 0)
+ D("poll timeout on queue %d\n", targ->me);
+ else
+ D("poll error on queue %d: %s\n", targ->me,
+ strerror(errno));
goto quit;
}
/*
@@ -1076,7 +1081,7 @@
pps =3D toc.tv_sec* 1000000 + toc.tv_usec;
if (pps < 10000)
continue;
- pps =3D (my_count - prev)*1000000 / pps;
+ pps =3D ((my_count - prev) * 1000000 + pps / 2) / pps;
D("%" PRIu64 " pps", pps);
prev =3D my_count;
toc =3D now;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/calendar/calendars/calend=
ar.freebsd
--- a/head/usr.bin/calendar/calendars/calendar.freebsd Mon Jul 30 11:44:18 =
2012 +0300
+++ b/head/usr.bin/calendar/calendars/calendar.freebsd Fri Aug 10 14:19:25 =
2012 +0300
@@ -1,7 +1,7 @@
/*
* FreeBSD
*
- * $FreeBSD: head/usr.bin/calendar/calendars/calendar.freebsd 238058 2012-=
07-03 07:28:57Z zeising $
+ * $FreeBSD: head/usr.bin/calendar/calendars/calendar.freebsd 238976 2012-=
08-01 17:48:38Z bdrewery $
*/
=20
#ifndef _calendar_freebsd_
@@ -285,6 +285,7 @@
09/18 Matthew Fleming <mdf at FreeBSD.org> born in Cleveland, Ohio, United St=
ates, 1975
09/20 Kevin Lo <kevlo at FreeBSD.org> born in Taipei, Taiwan, Republic of Chi=
na, 1972
09/21 Gleb Kurtsou <gleb at FreeBSD.org> born in Minsk, Belarus, 1984
+09/22 Bryan Drewery <bdrewery at FreeBSD.org> born in San Diego, California, =
United States, 1984
09/27 Neil Blakey-Milner <nbm at FreeBSD.org> born in Port Elizabeth, South A=
frica, 1978
09/27 Renato Botelho <garga at FreeBSD.org> born in Araras, Sao Paulo, Brazil=
, 1979
09/28 Greg Lehey <grog at FreeBSD.org> born in Melbourne, Victoria, Australia=
, 1948
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/cpio/Makefile
--- a/head/usr.bin/cpio/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/cpio/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/usr.bin/cpio/Makefile 232153 2012-02-25 10:58:02Z mm $
+# $FreeBSD: head/usr.bin/cpio/Makefile 238856 2012-07-28 06:38:44Z mm $
=20
.include <bsd.own.mk>
=20
@@ -6,13 +6,13 @@
LIBARCHIVECONFDIR=3D ${.CURDIR}/../../lib/libarchive
=20
PROG=3D bsdcpio
-BSDCPIO_VERSION_STRING=3D 3.0.3
+BSDCPIO_VERSION_STRING=3D 3.0.4
=20
.PATH: ${LIBARCHIVEDIR}/cpio
SRCS=3D cpio.c cmdline.c
=20
.PATH: ${LIBARCHIVEDIR}/libarchive_fe
-SRCS+=3D err.c line_reader.c matching.c pathmatch.c
+SRCS+=3D err.c line_reader.c
=20
CFLAGS+=3D -DBSDCPIO_VERSION_STRING=3D\"${BSDCPIO_VERSION_STRING}\"
CFLAGS+=3D -DPLATFORM_CONFIG_H=3D\"${LIBARCHIVECONFDIR}/config_freebsd.h\"
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/cpio/test/Makefile
--- a/head/usr.bin/cpio/test/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/cpio/test/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/usr.bin/cpio/test/Makefile 232153 2012-02-25 10:58:02Z mm=
$
+# $FreeBSD: head/usr.bin/cpio/test/Makefile 238856 2012-07-28 06:38:44Z mm=
$
=20
LIBARCHIVEDIR=3D ${.CURDIR}/../../../contrib/libarchive
=20
@@ -6,7 +6,7 @@
CPIO_SRCS=3D cmdline.c
=20
.PATH: ${LIBARCHIVEDIR}/libarchive_fe
-CPIO_SRCS+=3D err.c pathmatch.c
+CPIO_SRCS+=3D err.c
=20
.PATH: ${LIBARCHIVEDIR}/cpio/test
TESTS=3D \
@@ -35,8 +35,7 @@
test_option_z.c \
test_owner_parse.c \
test_passthrough_dotdot.c \
- test_passthrough_reverse.c \
- test_pathmatch.c
+ test_passthrough_reverse.c
=20
# Build the test program
SRCS=3D list.h \
@@ -50,8 +49,8 @@
=20
PROG=3Dbsdcpio_test
DPADD=3D${LIBARCHIVE} ${LIBBZ2} ${LIBZ} ${LIBLZMA}
-CFLAGS+=3D -DPLATFORM_CONFIG_H=3D\"${.CURDIR}/../config_freebsd.h\"
-CFLAGS+=3D -I${.CURDIR}/..
+CFLAGS+=3D -DPLATFORM_CONFIG_H=3D\"${.CURDIR}/../../../lib/libarchive/conf=
ig_freebsd.h\"
+CFLAGS+=3D -I${.CURDIR}/../../../lib/libarchive -I${.OBJDIR}
LDADD=3D -larchive -lz -lbz2 -llzma
#CFLAGS+=3D -static -g -O2 -Wall
CFLAGS+=3D -g -O2 -Wall
@@ -74,6 +73,6 @@
rm -f ${CLEANFILES}
rm -f *~
-chmod -R +w /tmp/bsdcpio_test.*
- rm -rf /tmp/bsdcpio_test
+ rm -rf /tmp/bsdcpio_test.*
=20
.include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/du/du.c
--- a/head/usr.bin/du/du.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/du/du.c Fri Aug 10 14:19:25 2012 +0300
@@ -42,7 +42,7 @@
#endif
#endif /* not lint */
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/du/du.c 238602 2012-07-18 19:28:22Z des $=
");
+__FBSDID("$FreeBSD: head/usr.bin/du/du.c 238817 2012-07-26 20:41:36Z plukn=
et $");
=20
#include <sys/param.h>
#include <sys/queue.h>
@@ -493,7 +493,7 @@
usage(void)
{
(void)fprintf(stderr,
- "usage: du [-Aclnx] [-H | -L | -P] [-h | -k | -m ] "
+ "usage: du [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] "
"[-a | -s | -d depth] [-B blocksize] [-I mask] "
"[-t threshold] [file ...]\n");
exit(EX_USAGE);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/extern.h
--- a/head/usr.bin/find/extern.h Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/extern.h Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
* SUCH DAMAGE.
*
* @(#)extern.h 8.3 (Berkeley) 4/16/94
- * $FreeBSD$
+ * $FreeBSD: head/usr.bin/find/extern.h 238780 2012-07-25 21:59:10Z jilles=
$
*/
=20
#include <sys/cdefs.h>
@@ -58,6 +58,7 @@
creat_f c_follow;
creat_f c_fstype;
creat_f c_group;
+creat_f c_ignore_readdir_race;
creat_f c_inum;
creat_f c_links;
creat_f c_ls;
@@ -111,7 +112,8 @@
exec_f f_type;
exec_f f_user;
=20
-extern int ftsoptions, isdeprecated, isdepth, isoutput, issort, isxargs;
+extern int ftsoptions, ignore_readdir_race, isdeprecated, isdepth, isoutpu=
t;
+extern int issort, isxargs;
extern int mindepth, maxdepth;
extern int regexp_flags;
extern time_t now;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/find.1
--- a/head/usr.bin/find/find.1 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/find.1 Fri Aug 10 14:19:25 2012 +0300
@@ -29,9 +29,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)find.1 8.7 (Berkeley) 5/9/95
-.\" $FreeBSD: head/usr.bin/find/find.1 237035 2012-06-13 21:53:40Z jilles $
+.\" $FreeBSD: head/usr.bin/find/find.1 238780 2012-07-25 21:59:10Z jilles $
.\"
-.Dd June 13, 2012
+.Dd July 25, 2012
.Dt FIND 1
.Os
.Sh NAME
@@ -470,7 +470,9 @@
.Ar gname
is treated as a group ID.
.It Ic -ignore_readdir_race
-This option is for GNU find compatibility and is ignored.
+Ignore errors because a file or a directory is deleted
+after reading the name from a directory.
+This option does not affect errors occurring on starting points.
.It Ic -ilname Ar pattern
Like
.Ic -lname ,
@@ -618,7 +620,9 @@
.It Ic -nogroup
True if the file belongs to an unknown group.
.It Ic -noignore_readdir_race
-This option is for GNU find compatibility and is ignored.
+Turn off the effect of
+.Ic -ignore_readdir_race .
+This is default behaviour.
.It Ic -noleaf
This option is for GNU find compatibility.
In GNU find it disables an optimization not relevant to
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/find.c
--- a/head/usr.bin/find/find.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/find.c Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
#endif /* not lint */
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/usr.bin/find/find.c 238780 2012-07-25 21:59:10Z j=
illes $");
=20
#include <sys/types.h>
#include <sys/stat.h>
@@ -197,8 +197,12 @@
continue;
break;
case FTS_DNR:
+ case FTS_NS:
+ if (ignore_readdir_race &&
+ entry->fts_errno =3D=3D ENOENT && entry->fts_level > 0)
+ continue;
+ /* FALLTHROUGH */
case FTS_ERR:
- case FTS_NS:
(void)fflush(stdout);
warnx("%s: %s",
entry->fts_path, strerror(entry->fts_errno));
@@ -228,7 +232,7 @@
for (p =3D plan; p && (p->execute)(p, entry); p =3D p->next);
}
finish_execplus();
- if (errno)
+ if (errno && (!ignore_readdir_race || errno !=3D ENOENT))
err(1, "fts_read");
return (rval);
}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/function.c
--- a/head/usr.bin/find/function.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/function.c Fri Aug 10 14:19:25 2012 +0300
@@ -37,7 +37,7 @@
#endif /* not lint */
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/find/function.c 223035 2011-06-13 05:22:0=
7Z avatar $");
+__FBSDID("$FreeBSD: head/usr.bin/find/function.c 238780 2012-07-25 21:59:1=
0Z jilles $");
=20
#include <sys/param.h>
#include <sys/ucred.h>
@@ -975,6 +975,25 @@
}
=20
/*
+ * -ignore_readdir_race functions --
+ *
+ * Always true. Ignore errors which occur if a file or a directory
+ * in a starting point gets deleted between reading the name and calling
+ * stat on it while find is traversing the starting point.
+ */
+
+PLAN *
+c_ignore_readdir_race(OPTION *option, char ***argvp __unused)
+{
+ if (strcmp(option->name, "-ignore_readdir_race") =3D=3D 0)
+ ignore_readdir_race =3D 1;
+ else
+ ignore_readdir_race =3D 0;
+
+ return palloc(option);
+}
+
+/*
* -inum n functions --
*
* True if the file has inode # n.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/main.c
--- a/head/usr.bin/find/main.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/main.c Fri Aug 10 14:19:25 2012 +0300
@@ -43,7 +43,7 @@
#endif /* not lint */
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/find/main.c 228394 2011-12-10 18:11:06Z e=
d $");
+__FBSDID("$FreeBSD: head/usr.bin/find/main.c 238948 2012-07-31 16:55:41Z j=
illes $");
=20
#include <sys/types.h>
#include <sys/stat.h>
@@ -64,6 +64,7 @@
time_t now; /* time find was run */
int dotfd; /* starting directory */
int ftsoptions; /* options for the ftsopen(3) call */
+int ignore_readdir_race; /* ignore readdir race */
int isdeprecated; /* using deprecated syntax */
int isdepth; /* do directories on post-order visit */
int isoutput; /* user specified output operator */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/option.c
--- a/head/usr.bin/find/option.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/option.c Fri Aug 10 14:19:25 2012 +0300
@@ -37,7 +37,7 @@
#endif /* not lint */
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/find/option.c 222390 2011-05-27 22:14:49Z=
jilles $");
+__FBSDID("$FreeBSD: head/usr.bin/find/option.c 238780 2012-07-25 21:59:10Z=
jilles $");
=20
#include <sys/types.h>
#include <sys/stat.h>
@@ -88,7 +88,7 @@
{ "-fstype", c_fstype, f_fstype, 0 },
{ "-gid", c_group, f_group, 0 },
{ "-group", c_group, f_group, 0 },
- { "-ignore_readdir_race",c_simple, f_always_true,0 },
+ { "-ignore_readdir_race",c_ignore_readdir_race, f_always_true,0 },
{ "-ilname", c_name, f_name, F_LINK | F_IGNCASE },
{ "-iname", c_name, f_name, F_IGNCASE },
{ "-inum", c_inum, f_inum, 0 },
@@ -127,7 +127,7 @@
{ "-newermm", c_newer, f_newer, 0 },
{ "-newermt", c_newer, f_newer, F_TIME2_T },
{ "-nogroup", c_nogroup, f_nogroup, 0 },
- { "-noignore_readdir_race",c_simple, f_always_true,0 },
+ { "-noignore_readdir_race",c_ignore_readdir_race, f_always_true,0 },
{ "-noleaf", c_simple, f_always_true, 0 },
{ "-not", c_simple, f_not, 0 },
{ "-nouser", c_nouser, f_nouser, 0 },
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/make/var.c
--- a/head/usr.bin/make/var.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/make/var.c Fri Aug 10 14:19:25 2012 +0300
@@ -40,7 +40,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/make/var.c 236346 2012-05-31 00:36:56Z ob=
rien $");
+__FBSDID("$FreeBSD: head/usr.bin/make/var.c 239071 2012-08-05 15:55:36Z di=
m $");
=20
/**
* var.c --
@@ -1765,7 +1765,7 @@
if ((vp->ptr[0] =3D=3D 's') &&
(vp->ptr[1] =3D=3D 'h') &&
(vp->ptr[2] =3D=3D endc || vp->ptr[2] =3D=3D ':')) {
- const char *error;
+ const char *error =3D NULL;
=20
if (vp->execute) {
newStr =3D Buf_Peel(
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/script/script.1
--- a/head/usr.bin/script/script.1 Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/script/script.1 Fri Aug 10 14:19:25 2012 +0300
@@ -26,9 +26,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)script.1 8.1 (Berkeley) 6/6/93
-.\" $FreeBSD: head/usr.bin/script/script.1 225857 2011-09-29 02:29:32Z gjb=
$
+.\" $FreeBSD: head/usr.bin/script/script.1 238897 2012-07-30 08:06:00Z bri=
an $
.\"
-.Dd September 28, 2011
+.Dd July 30, 2012
.Dt SCRIPT 1
.Os
.Sh NAME
@@ -36,7 +36,7 @@
.Nd make typescript of terminal session
.Sh SYNOPSIS
.Nm
-.Op Fl akq
+.Op Fl adkpqr
.Op Fl t Ar time
.Op Ar file Op Ar command ...
.Sh DESCRIPTION
@@ -72,10 +72,20 @@
or
.Pa typescript ,
retaining the prior contents.
+.It Fl d
+When playing back a session with the
+.Fl p
+flag, don't sleep between records when playing back a timestamped session.
.It Fl k
Log keys sent to the program as well as output.
+.It Fl p
+Play back a session recorded with the
+.Fl r
+flag in real time.
.It Fl q
-Run in quiet mode, omit the start and stop status messages.
+Run in quiet mode, omit the start, stop and command status messages.
+.It Fl r
+Record a session with input, output, and timestamping.
.It Fl t Ar time
Specify the interval at which the script output file will be flushed
to disk, in seconds.
@@ -151,6 +161,16 @@
.Nm
command appeared in
.Bx 3.0 .
+.Pp
+The
+.Fl d ,
+.Fl p
+and
+.Fl r
+options first appeared in
+.Nx 2.0
+and were ported to
+.Fx 10 .
.Sh BUGS
The
.Nm
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/script/script.c
--- a/head/usr.bin/script/script.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/script/script.c Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
=20
#include <sys/cdefs.h>
=20
-__FBSDID("$FreeBSD: head/usr.bin/script/script.c 226403 2011-10-15 19:08:2=
2Z trociny $");
+__FBSDID("$FreeBSD: head/usr.bin/script/script.c 238896 2012-07-30 07:13:0=
6Z brian $");
=20
#ifndef lint
static const char copyright[] =3D
@@ -46,6 +46,9 @@
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/endian.h>
+#include <sys/param.h>
=20
#include <err.h>
#include <errno.h>
@@ -59,11 +62,21 @@
#include <termios.h>
#include <unistd.h>
=20
+#define DEF_BUF 65536
+
+struct stamp {
+ uint64_t scr_len; /* amount of data */
+ uint64_t scr_sec; /* time it arrived in seconds... */
+ uint32_t scr_usec; /* ...and microseconds */
+ uint32_t scr_direction; /* 'i', 'o', etc (also indicates endianness) */
+};
+
static FILE *fscript;
static int master, slave;
static int child;
static const char *fname;
static int qflg, ttyflg;
+static int usesleep, rawout;
=20
static struct termios tt;
=20
@@ -71,6 +84,9 @@
static void doshell(char **);
static void fail(void);
static void finish(void);
+static void record(FILE *, char *, size_t, int);
+static void consume(FILE *, off_t, char *, int);
+static void playback(FILE *) __dead2;
static void usage(void);
=20
int
@@ -79,7 +95,7 @@
int cc;
struct termios rtt, stt;
struct winsize win;
- int aflg, kflg, ch, n;
+ int aflg, kflg, pflg, ch, n;
struct timeval tv, *tvp;
time_t tvec, start;
char obuf[BUFSIZ];
@@ -87,18 +103,31 @@
fd_set rfd;
int flushtime =3D 30;
int readstdin;
+ int k;
=20
- aflg =3D kflg =3D 0;
- while ((ch =3D getopt(argc, argv, "aqkt:")) !=3D -1)
+ aflg =3D kflg =3D pflg =3D 0;
+ usesleep =3D 1;
+ rawout =3D 0;
+
+ while ((ch =3D getopt(argc, argv, "adkpqrt:")) !=3D -1)
switch(ch) {
case 'a':
aflg =3D 1;
break;
+ case 'd':
+ usesleep =3D 0;
+ break;
+ case 'k':
+ kflg =3D 1;
+ break;
+ case 'p':
+ pflg =3D 1;
+ break;
case 'q':
qflg =3D 1;
break;
- case 'k':
- kflg =3D 1;
+ case 'r':
+ rawout =3D 1;
break;
case 't':
flushtime =3D atoi(optarg);
@@ -119,9 +148,12 @@
} else
fname =3D "typescript";
=20
- if ((fscript =3D fopen(fname, aflg ? "a" : "w")) =3D=3D NULL)
+ if ((fscript =3D fopen(fname, pflg ? "r" : aflg ? "a" : "w")) =3D=3D NULL)
err(1, "%s", fname);
=20
+ if (pflg)
+ playback(fscript);
+
if ((ttyflg =3D isatty(STDIN_FILENO)) !=3D 0) {
if (tcgetattr(STDIN_FILENO, &tt) =3D=3D -1)
err(1, "tcgetattr");
@@ -134,10 +166,23 @@
err(1, "openpty");
}
=20
+ if (rawout)
+ record(fscript, NULL, 0, 's');
+
if (!qflg) {
tvec =3D time(NULL);
(void)printf("Script started, output file is %s\n", fname);
- (void)fprintf(fscript, "Script started on %s", ctime(&tvec));
+ if (!rawout) {
+ (void)fprintf(fscript, "Script started on %s",
+ ctime(&tvec));
+ if (argv[0]) {
+ fprintf(fscript, "command: ");
+ for (k =3D 0 ; argv[k] ; ++k)
+ fprintf(fscript, "%s%s", k ? " " : "",
+ argv[k]);
+ fprintf(fscript, "\n");
+ }
+ }
fflush(fscript);
}
if (ttyflg) {
@@ -163,15 +208,12 @@
FD_SET(master, &rfd);
if (readstdin)
FD_SET(STDIN_FILENO, &rfd);
- if (!readstdin && ttyflg) {
- tv.tv_sec =3D 1;
+ if ((!readstdin && ttyflg) || flushtime > 0) {
+ tv.tv_sec =3D !readstdin && ttyflg ? 1 :
+ flushtime - (tvec - start);
tv.tv_usec =3D 0;
tvp =3D &tv;
readstdin =3D 1;
- } else if (flushtime > 0) {
- tv.tv_sec =3D flushtime - (tvec - start);
- tv.tv_usec =3D 0;
- tvp =3D &tv;
} else {
tvp =3D NULL;
}
@@ -190,6 +232,8 @@
readstdin =3D 0;
}
if (cc > 0) {
+ if (rawout)
+ record(fscript, ibuf, cc, 'i');
(void)write(master, ibuf, cc);
if (kflg && tcgetattr(master, &stt) >=3D 0 &&
((stt.c_lflag & ECHO) =3D=3D 0)) {
@@ -202,7 +246,10 @@
if (cc <=3D 0)
break;
(void)write(STDOUT_FILENO, obuf, cc);
- (void)fwrite(obuf, 1, cc, fscript);
+ if (rawout)
+ record(fscript, obuf, cc, 'o');
+ else
+ (void)fwrite(obuf, 1, cc, fscript);
}
tvec =3D time(0);
if (tvec - start >=3D flushtime) {
@@ -218,7 +265,7 @@
usage(void)
{
(void)fprintf(stderr,
- "usage: script [-akq] [-t time] [file [command ...]]\n");
+ "usage: script [-adkpqr] [-t time] [file [command ...]]\n");
exit(1);
}
=20
@@ -242,17 +289,11 @@
doshell(char **av)
{
const char *shell;
- int k;
=20
shell =3D getenv("SHELL");
if (shell =3D=3D NULL)
shell =3D _PATH_BSHELL;
=20
- if (av[0])
- for (k =3D 0 ; av[k] ; ++k)
- fprintf(fscript, "%s%s", k ? " " : "", av[k]);
- fprintf(fscript, "\r\n");
-
(void)close(master);
(void)fclose(fscript);
login_tty(slave);
@@ -282,11 +323,144 @@
if (ttyflg)
(void)tcsetattr(STDIN_FILENO, TCSAFLUSH, &tt);
tvec =3D time(NULL);
+ if (rawout)
+ record(fscript, NULL, 0, 'e');
if (!qflg) {
- (void)fprintf(fscript,"\nScript done on %s", ctime(&tvec));
+ if (!rawout)
+ (void)fprintf(fscript,"\nScript done on %s",
+ ctime(&tvec));
(void)printf("\nScript done, output file is %s\n", fname);
}
(void)fclose(fscript);
(void)close(master);
exit(eno);
}
+
+static void
+record(FILE *fp, char *buf, size_t cc, int direction)
+{
+ struct iovec iov[2];
+ struct stamp stamp;
+ struct timeval tv;
+
+ (void)gettimeofday(&tv, NULL);
+ stamp.scr_len =3D cc;
+ stamp.scr_sec =3D tv.tv_sec;
+ stamp.scr_usec =3D tv.tv_usec;
+ stamp.scr_direction =3D direction;
+ iov[0].iov_len =3D sizeof(stamp);
+ iov[0].iov_base =3D &stamp;
+ iov[1].iov_len =3D cc;
+ iov[1].iov_base =3D buf;
+ if (writev(fileno(fp), &iov[0], 2) =3D=3D -1)
+ err(1, "writev");
+}
+
+static void
+consume(FILE *fp, off_t len, char *buf, int reg)
+{
+ size_t l;
+
+ if (reg) {
+ if (fseeko(fp, len, SEEK_CUR) =3D=3D -1)
+ err(1, NULL);
+ }
+ else {
+ while (len > 0) {
+ l =3D MIN(DEF_BUF, len);
+ if (fread(buf, sizeof(char), l, fp) !=3D l)
+ err(1, "cannot read buffer");
+ len -=3D l;
+ }
+ }
+}
+
+#define swapstamp(stamp) do { \
+ if (stamp.scr_direction > 0xff) { \
+ stamp.scr_len =3D bswap64(stamp.scr_len); \
+ stamp.scr_sec =3D bswap64(stamp.scr_sec); \
+ stamp.scr_usec =3D bswap32(stamp.scr_usec); \
+ stamp.scr_direction =3D bswap32(stamp.scr_direction); \
+ } \
+} while (0/*CONSTCOND*/)
+
+static void
+playback(FILE *fp)
+{
+ struct timespec tsi, tso;
+ struct stamp stamp;
+ struct stat pst;
+ char buf[DEF_BUF];
+ off_t nread, save_len;
+ size_t l;
+ time_t tclock;
+ int reg;
+
+ if (fstat(fileno(fp), &pst) =3D=3D -1)
+ err(1, "fstat failed");
+
+ reg =3D S_ISREG(pst.st_mode);
+
+ for (nread =3D 0; !reg || nread < pst.st_size; nread +=3D save_len) {
+ if (fread(&stamp, sizeof(stamp), 1, fp) !=3D 1) {
+ if (reg)
+ err(1, "reading playback header");
+ else
+ break;
+ }
+ swapstamp(stamp);
+ save_len =3D sizeof(stamp);
+
+ if (reg && stamp.scr_len >
+ (uint64_t)(pst.st_size - save_len) - nread)
+ errx(1, "invalid stamp");
+
+ save_len +=3D stamp.scr_len;
+ tclock =3D stamp.scr_sec;
+ tso.tv_sec =3D stamp.scr_sec;
+ tso.tv_nsec =3D stamp.scr_usec * 1000;
+
+ switch (stamp.scr_direction) {
+ case 's':
+ if (!qflg)
+ (void)printf("Script started on %s",
+ ctime(&tclock));
+ tsi =3D tso;
+ (void)consume(fp, stamp.scr_len, buf, reg);
+ break;
+ case 'e':
+ if (!qflg)
+ (void)printf("\nScript done on %s",
+ ctime(&tclock));
+ (void)consume(fp, stamp.scr_len, buf, reg);
+ break;
+ case 'i':
+ /* throw input away */
+ (void)consume(fp, stamp.scr_len, buf, reg);
+ break;
+ case 'o':
+ tsi.tv_sec =3D tso.tv_sec - tsi.tv_sec;
+ tsi.tv_nsec =3D tso.tv_nsec - tsi.tv_nsec;
+ if (tsi.tv_nsec < 0) {
+ tsi.tv_sec -=3D 1;
+ tsi.tv_nsec +=3D 1000000000;
+ }
+ if (usesleep)
+ (void)nanosleep(&tsi, NULL);
+ tsi =3D tso;
+ while (stamp.scr_len > 0) {
+ l =3D MIN(DEF_BUF, stamp.scr_len);
+ if (fread(buf, sizeof(char), l, fp) !=3D l)
+ err(1, "cannot read buffer");
+
+ (void)write(STDOUT_FILENO, buf, l);
+ stamp.scr_len -=3D l;
+ }
+ break;
+ default:
+ errx(1, "invalid direction");
+ }
+ }
+ (void)fclose(fp);
+ exit(0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/tar/Makefile
--- a/head/usr.bin/tar/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/tar/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,26 +1,22 @@
-# $FreeBSD: head/usr.bin/tar/Makefile 232153 2012-02-25 10:58:02Z mm $
+# $FreeBSD: head/usr.bin/tar/Makefile 238856 2012-07-28 06:38:44Z mm $
.include <bsd.own.mk>
=20
LIBARCHIVEDIR=3D ${.CURDIR}/../../contrib/libarchive
=20
PROG=3D bsdtar
-BSDTAR_VERSION_STRING=3D 3.0.3
+BSDTAR_VERSION_STRING=3D 3.0.4
=20
.PATH: ${LIBARCHIVEDIR}/tar
SRCS=3D bsdtar.c \
cmdline.c \
- getdate.c \
read.c \
subst.c \
- tree.c \
util.c \
write.c
=20
.PATH: ${LIBARCHIVEDIR}/libarchive_fe
SRCS+=3D err.c \
- line_reader.c \
- matching.c \
- pathmatch.c
+ line_reader.c
=20
DPADD=3D ${LIBARCHIVE} ${LIBBZ2} ${LIBZ} ${LIBLZMA} ${LIBBSDXML}
LDADD=3D -larchive -lbz2 -lz -llzma -lbsdxml
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/tar/test/Makefile
--- a/head/usr.bin/tar/test/Makefile Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/tar/test/Makefile Fri Aug 10 14:19:25 2012 +0300
@@ -1,19 +1,14 @@
-# $FreeBSD: head/usr.bin/tar/test/Makefile 232153 2012-02-25 10:58:02Z mm $
+# $FreeBSD: head/usr.bin/tar/test/Makefile 238856 2012-07-28 06:38:44Z mm $
=20
LIBARCHIVEDIR=3D ${.CURDIR}/../../../contrib/libarchive
=20
-.PATH: ${LIBARCHIVEDIR}/tar
-# Some tar sources are pulled in for white-box tests
-TAR_SRCS=3D \
- getdate.c
-
.PATH: ${LIBARCHIVEDIR}/tar/test
TESTS=3D \
test_0.c \
test_basic.c \
test_copy.c \
test_empty_mtree.c \
- test_getdate.c \
+ test_format_newc.c \
test_help.c \
test_option_C_upper.c \
test_option_H_upper.c \
@@ -28,6 +23,7 @@
test_option_k.c \
test_option_keep_newer_files.c \
test_option_n.c \
+ test_option_nodump.c \
test_option_newer_than.c \
test_option_q.c \
test_option_r.c \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.sbin/ctladm/ctladm.c
--- a/head/usr.sbin/ctladm/ctladm.c Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.sbin/ctladm/ctladm.c Fri Aug 10 14:19:25 2012 +0300
@@ -41,7 +41,7 @@
*/
=20
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.sbin/ctladm/ctladm.c 237255 2012-06-19 06:10:=
24Z eadler $");
+__FBSDID("$FreeBSD: head/usr.sbin/ctladm/ctladm.c 239074 2012-08-05 17:23:=
47Z dim $");
=20
#include <sys/ioctl.h>
#include <sys/types.h>
@@ -1026,7 +1026,7 @@
cctl_error_inject(int fd, uint32_t target, uint32_t lun, int argc, char **=
argv,=20
char *combinedopt)
{
- int retval;
+ int retval =3D 0;
struct ctl_error_desc err_desc;
uint64_t lba =3D 0;
uint32_t len =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.sbin/portsnap/portsnap/portsn=
ap.8
--- a/head/usr.sbin/portsnap/portsnap/portsnap.8 Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/usr.sbin/portsnap/portsnap/portsnap.8 Fri Aug 10 14:19:25 2012 +=
0300
@@ -23,9 +23,9 @@
.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $FreeBSD$
+.\" $FreeBSD: head/usr.sbin/portsnap/portsnap/portsnap.8 239078 2012-08-05=
21:13:21Z eadler $
.\"
-.Dd September 15, 2008
+.Dd August 5, 2012
.Dt PORTSNAP 8
.Os FreeBSD
.Sh NAME
@@ -110,6 +110,12 @@
.Ar sysutils/port
would extract sysutils/portsman, sysutils/portsnap,
sysutils/portupgrade, etc.)
+.It Fl Fl interactive
+override auto-detection of calling process.
+Only use this when calling portsnap from an
+.Sy interactive, non-terminal application.
+(Cron jobs are particularly bad since they cause
+load spikes on the Portsnap mirrors.)
.El
.Sh COMMANDS
The
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.sbin/portsnap/portsnap/portsn=
ap.sh
--- a/head/usr.sbin/portsnap/portsnap/portsnap.sh Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/usr.sbin/portsnap/portsnap/portsnap.sh Fri Aug 10 14:19:25 2012 =
+0300
@@ -25,7 +25,7 @@
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
=20
-# $FreeBSD: head/usr.sbin/portsnap/portsnap/portsnap.sh 235208 2012-05-09 =
21:56:10Z eadler $
+# $FreeBSD: head/usr.sbin/portsnap/portsnap/portsnap.sh 239078 2012-08-05 =
21:13:21Z eadler $
=20
#### Usage function -- called from command-line handling code.
=20
@@ -48,6 +48,9 @@
(default: /usr/ports/)
-s server -- Server from which to fetch updates.
(default: portsnap.FreeBSD.org)
+ --interactive -- interactive: override auto-detection of calling process
+ (use this when calling portsnap from an interactive, non-
+ terminal application AND NEVER ELSE).
path -- Extract only parts of the tree starting with the given
string. (extract command only)
Commands:
@@ -84,6 +87,7 @@
SERVERNAME=3D""
REFUSE=3D""
LOCALDESC=3D""
+ INTERACTIVE=3D""
}
=20
# Parse the command line
@@ -103,6 +107,9 @@
XARGST=3D"-t"
DDSTATS=3D".."
;;
+ --interactive)
+ INTERACTIVE=3D"YES"
+ ;;
-f)
if [ $# -eq 1 ]; then usage; fi
if [ ! -z "${CONFFILE}" ]; then usage; fi
@@ -228,6 +235,13 @@
eval ${X}=3D${__}
fi
done
+ if [ -z "${INTERACTIVE}" ]; then
+ if [ -t 0 ]; then
+ INTERACTIVE=3D"YES"
+ else
+ INTERACTIVE=3D"NO"
+ fi
+ fi
}
=20
# Perform sanity checks and set some final parameters
@@ -1023,10 +1037,10 @@
# Fetch command. Make sure that we're being called
# interactively, then run fetch_check_params and fetch_run
cmd_fetch() {
- if [ ! -t 0 ]; then
+ if [ "${INTERACTIVE}" !=3D "YES" ]; then
echo -n "`basename $0` fetch should not "
echo "be run non-interactively."
- echo "Run `basename $0` cron instead."
+ echo "Run `basename $0` cron instead"
exit 1
fi
fetch_check_params
@@ -1069,7 +1083,7 @@
# whether stdin is a terminal; then run 'update' or
# 'extract' depending on whether ${PORTSDIR} exists.
cmd_alfred() {
- if [ -t 0 ]; then
+ if [ "${INTERACTIVE}" =3D "YES" ]; then
cmd_fetch
else
cmd_cron
More information about the Zrouter-src-freebsd
mailing list