summaryrefslogtreecommitdiff
authorTanguy Pruvot <tanguy.pruvot@gmail.com>2012-04-27 22:24:09 (GMT)
committer Tanguy Pruvot <tanguy.pruvot@gmail.com>2012-04-27 22:24:09 (GMT)
commit8a6c2c22300b567db5b1ce2ea9ce9282e60bc0c5 (patch)
tree39c7f9c8c6c11e8da6f4d000d342b805311e3c6c
parent2d546e621ec4d0f8174d8de4e4d1f1700fe39b10 (diff)
downloadbusybox-8a6c2c22300b567db5b1ce2ea9ce9282e60bc0c5.zip
busybox-8a6c2c22300b567db5b1ce2ea9ce9282e60bc0c5.tar.gz
busybox-8a6c2c22300b567db5b1ce2ea9ce9282e60bc0c5.tar.bz2
Busybox 1.20.0 squashed commit for ICS
Diffstat
-rw-r--r--.config-full33
-rw-r--r--.config-minimal31
-rw-r--r--Android.mk69
-rw-r--r--CleanSpec.mk3
-rw-r--r--Config.in44
-rw-r--r--INSTALL5
-rw-r--r--Makefile4
-rw-r--r--Makefile.flags35
-rw-r--r--TODO2
-rw-r--r--android/librpc/xdr_rec.c2
-rw-r--r--android/reboot.c22
-rw-r--r--applets/applet_tables.c9
-rw-r--r--applets_sh/README5
-rwxr-xr-xapplets_sh/dos2unix5
-rwxr-xr-xapplets_sh/nologin4
-rwxr-xr-xapplets_sh/tac7
-rwxr-xr-xapplets_sh/unix2dos5
-rw-r--r--archival/Config.src23
-rw-r--r--archival/ar.c2
-rw-r--r--archival/bbunzip.c81
-rw-r--r--archival/bzip2.c8
-rw-r--r--archival/cpio.c3
-rw-r--r--archival/dpkg.c2
-rw-r--r--archival/dpkg_deb.c2
-rw-r--r--archival/gzip.c14
-rw-r--r--archival/libarchive/Kbuild.src23
-rw-r--r--archival/libarchive/bz/blocksort.c8
-rw-r--r--archival/libarchive/bz/bzlib_private.h2
-rw-r--r--archival/libarchive/bz/compress.c8
-rw-r--r--archival/libarchive/bz/huffman.c2
-rw-r--r--archival/libarchive/data_align.c2
-rw-r--r--archival/libarchive/data_extract_all.c10
-rw-r--r--archival/libarchive/data_extract_to_command.c10
-rw-r--r--archival/libarchive/data_extract_to_stdout.c2
-rw-r--r--archival/libarchive/data_skip.c2
-rw-r--r--archival/libarchive/decompress_bunzip2.c29
-rw-r--r--archival/libarchive/decompress_gunzip.c (renamed from archival/libarchive/decompress_unzip.c)71
-rw-r--r--archival/libarchive/decompress_uncompress.c17
-rw-r--r--archival/libarchive/decompress_unlzma.c4
-rw-r--r--archival/libarchive/decompress_unxz.c14
-rw-r--r--archival/libarchive/filter_accept_all.c2
-rw-r--r--archival/libarchive/filter_accept_list.c2
-rw-r--r--archival/libarchive/filter_accept_list_reassign.c2
-rw-r--r--archival/libarchive/filter_accept_reject_list.c2
-rw-r--r--archival/libarchive/find_list_entry.c2
-rw-r--r--archival/libarchive/get_header_ar.c2
-rw-r--r--archival/libarchive/get_header_cpio.c2
-rw-r--r--archival/libarchive/get_header_tar.c110
-rw-r--r--archival/libarchive/get_header_tar_bz2.c4
-rw-r--r--archival/libarchive/get_header_tar_gz.c19
-rw-r--r--archival/libarchive/get_header_tar_lzma.c4
-rw-r--r--archival/libarchive/header_list.c2
-rw-r--r--archival/libarchive/header_skip.c2
-rw-r--r--archival/libarchive/header_verbose_list.c2
-rw-r--r--archival/libarchive/init_handle.c2
-rw-r--r--archival/libarchive/open_transformer.c193
-rw-r--r--archival/libarchive/seek_by_jump.c2
-rw-r--r--archival/libarchive/seek_by_read.c2
-rw-r--r--archival/libarchive/unpack_ar_archive.c2
-rw-r--r--archival/lzop.c15
-rw-r--r--archival/rpm.c4
-rw-r--r--archival/rpm2cpio.c54
-rw-r--r--archival/tar.c103
-rw-r--r--archival/unzip.c17
-rw-r--r--busybox-full.sources18
-rw-r--r--busybox-minimal.sources10
-rw-r--r--configs/TEST_nommu_defconfig2
-rw-r--r--configs/TEST_noprintf_defconfig2
-rw-r--r--configs/TEST_rh9_defconfig2
-rw-r--r--configs/android2_defconfig997
-rw-r--r--configs/android_defconfig233
-rw-r--r--configs/android_ndk_defconfig1016
-rw-r--r--configs/cygwin_defconfig2
-rw-r--r--configs/freebsd_defconfig2
-rw-r--r--coreutils/Config.src7
-rw-r--r--coreutils/Kbuild.src2
-rw-r--r--coreutils/chroot.c1
-rw-r--r--coreutils/cp.c4
-rw-r--r--coreutils/date.c3
-rw-r--r--coreutils/du.c27
-rw-r--r--coreutils/expr.c3
-rw-r--r--coreutils/hostid.c13
-rw-r--r--coreutils/ln.c4
-rw-r--r--coreutils/mkdir.c7
-rw-r--r--coreutils/printf.c26
-rw-r--r--coreutils/pwd.c52
-rw-r--r--coreutils/stty.c12
-rw-r--r--coreutils/tail.c3
-rw-r--r--coreutils/test.c15
-rw-r--r--coreutils/touch.c26
-rw-r--r--coreutils/uudecode.c7
-rw-r--r--coreutils/uuencode.c4
-rw-r--r--coreutils/who.c1
-rw-r--r--debianutils/mktemp.c23
-rw-r--r--debianutils/run_parts.c3
-rw-r--r--debianutils/start_stop_daemon.c31
-rw-r--r--docs/ctty.htm3
-rw-r--r--docs/mdev.txt12
-rw-r--r--e2fsprogs/e2fs_lib.h2
-rw-r--r--e2fsprogs/old_e2fsprogs/blkid/probe.c9
-rw-r--r--e2fsprogs/old_e2fsprogs/e2fsck.c6
-rw-r--r--e2fsprogs/old_e2fsprogs/e2p/feature.c2
-rw-r--r--e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h2
-rw-r--r--e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h2
-rw-r--r--e2fsprogs/old_e2fsprogs/ext2fs/initialize.c2
-rw-r--r--e2fsprogs/old_e2fsprogs/mke2fs.c8
-rw-r--r--e2fsprogs/tune2fs.c2
-rw-r--r--editors/awk.c94
-rw-r--r--editors/diff.c1
-rw-r--r--editors/patch.c18
-rw-r--r--editors/sed.c43
-rw-r--r--editors/vi.c389
-rwxr-xr-xexamples/android-build5
-rwxr-xr-xexamples/depmod.pl2
-rw-r--r--examples/udhcp/udhcpd.conf6
-rw-r--r--findutils/grep.c12
-rw-r--r--include-full/NUM_APPLETS.h2
-rw-r--r--include-full/applet_tables.h286
-rw-r--r--include-full/applets.h6
-rw-r--r--include-full/autoconf.h120
-rw-r--r--include-full/bbconfigopts.h29
-rw-r--r--include-full/bbconfigopts_bz2.h648
-rw-r--r--include-full/usage_compressed.h5770
-rw-r--r--include-minimal/NUM_APPLETS.h2
-rw-r--r--include-minimal/applet_tables.h173
-rw-r--r--include-minimal/applets.h6
-rw-r--r--include-minimal/autoconf.h112
-rw-r--r--include-minimal/bbconfigopts.h27
-rw-r--r--include-minimal/bbconfigopts_bz2.h639
-rw-r--r--include-minimal/usage_compressed.h5463
-rw-r--r--include/.gitignore1
-rw-r--r--include/android.h3
-rw-r--r--include/applets.src.h2
-rw-r--r--include/bb_archive.h (renamed from include/archive.h)71
-rw-r--r--include/bb_e2fs_defs.h (renamed from e2fsprogs/e2fs_defs.h)2
-rw-r--r--include/grp_.h2
-rw-r--r--include/libbb.h188
-rw-r--r--include/platform.h2
-rw-r--r--include/pwd_.h2
-rw-r--r--include/volume_id.h2
-rw-r--r--include/xatonum.h9
-rw-r--r--init/bootchartd.c41
-rw-r--r--init/init.c68
-rw-r--r--libbb/Config.src15
-rw-r--r--libbb/Kbuild.src7
-rw-r--r--libbb/android.c3
-rw-r--r--libbb/appletlib.c11
-rw-r--r--libbb/bb_askpass.c22
-rw-r--r--libbb/bb_strtonum.c59
-rw-r--r--libbb/dump.c25
-rw-r--r--libbb/find_mount_point.c3
-rw-r--r--libbb/hash_md5_sha.c32
-rw-r--r--libbb/hash_md5prime.c26
-rw-r--r--libbb/inet_cksum.c36
-rw-r--r--libbb/inet_common.c1
-rw-r--r--libbb/isdirectory.c15
-rw-r--r--libbb/lineedit.c130
-rw-r--r--libbb/loop.c10
-rw-r--r--libbb/parse_config.c2
-rw-r--r--libbb/percent_decode.c69
-rw-r--r--libbb/procps.c16
-rw-r--r--libbb/read_key.c11
-rw-r--r--libbb/read_printf.c139
-rw-r--r--libbb/uuencode.c155
-rw-r--r--libbb/vdprintf.c4
-rw-r--r--libbb/vfork_daemon_rexec.c10
-rw-r--r--libbb/xconnect.c16
-rw-r--r--libbb/xfuncs_printf.c1
-rw-r--r--libpwdgrp/pwd_grp.c105
-rw-r--r--loginutils/Config.src18
-rw-r--r--loginutils/README70
-rw-r--r--loginutils/chpasswd.c2
-rw-r--r--loginutils/cryptpw.c2
-rw-r--r--loginutils/getty.c262
-rw-r--r--loginutils/login.c113
-rw-r--r--loginutils/passwd.c2
-rw-r--r--mailutils/mail.c13
-rw-r--r--mailutils/mail.h7
-rw-r--r--mailutils/makemime.c36
-rw-r--r--mailutils/reformime.c1
-rw-r--r--mailutils/sendmail.c106
-rw-r--r--miscutils/bbconfig.c2
-rw-r--r--miscutils/conspy.c116
-rw-r--r--miscutils/fbsplash.c119
-rw-r--r--miscutils/fbsplash.cfg4
-rw-r--r--miscutils/hdparm.c3
-rw-r--r--miscutils/inotifyd.c21
-rw-r--r--miscutils/less.c13
-rw-r--r--miscutils/man.c41
-rw-r--r--miscutils/nandwrite.c16
-rw-r--r--miscutils/runlevel.c2
-rw-r--r--miscutils/rx.c22
-rw-r--r--miscutils/ubi_tools.c4
-rw-r--r--modutils/modprobe-small.c2
-rw-r--r--modutils/modprobe.c15
-rw-r--r--modutils/modutils-24.c1
-rw-r--r--networking/Config.src16
-rw-r--r--networking/ftpd.c3
-rw-r--r--networking/ftpgetput.c34
-rw-r--r--networking/hostname.c2
-rw-r--r--networking/httpd.c356
-rw-r--r--networking/httpd_indexcgi.c27
-rw-r--r--networking/ifupdown.c54
-rw-r--r--networking/inetd.c53
-rw-r--r--networking/interface.c1
-rw-r--r--networking/ip.c13
-rw-r--r--networking/nc_bloaty.c46
-rw-r--r--networking/ntpd.c302
-rw-r--r--networking/ping.c37
-rw-r--r--networking/route.c1
-rw-r--r--networking/tftp.c5
-rw-r--r--networking/traceroute.c35
-rw-r--r--networking/udhcp/arpping.c9
-rw-r--r--networking/udhcp/common.c94
-rw-r--r--networking/udhcp/common.h13
-rw-r--r--networking/udhcp/d6_common.h127
-rw-r--r--networking/udhcp/d6_dhcpc.c1483
-rw-r--r--networking/udhcp/d6_packet.c172
-rw-r--r--networking/udhcp/d6_socket.c34
-rw-r--r--networking/udhcp/dhcpc.c353
-rw-r--r--networking/udhcp/dhcpd.c4
-rw-r--r--networking/udhcp/packet.c91
-rw-r--r--networking/vconfig.c102
-rw-r--r--networking/wget.c13
-rw-r--r--networking/zcip.c2
-rw-r--r--procps/Config.src10
-rw-r--r--procps/kill.c17
-rw-r--r--procps/lsof.c76
-rw-r--r--procps/nmeter.c50
-rw-r--r--procps/ps.c108
-rw-r--r--procps/smemcap.c2
-rw-r--r--procps/sysctl.c4
-rw-r--r--procps/top.c2
-rw-r--r--runit/chpst.c17
-rw-r--r--runit/runsvdir.c3
-rw-r--r--scripts/basic/docproc.c1
-rw-r--r--scripts/basic/fixdep.c1
-rwxr-xr-xscripts/bloat-o-meter23
-rwxr-xr-xscripts/gen_build_files.sh61
-rwxr-xr-xscripts/randomtest.loop12
-rw-r--r--shell/ash.c24
-rw-r--r--shell/cttyhack.c74
-rw-r--r--shell/hush.c51
-rw-r--r--shell/shell_common.c8
-rwxr-xr-xtestsuite/awk.tests3
-rwxr-xr-xtestsuite/bzcat.tests30
-rwxr-xr-xtestsuite/grep.tests18
-rwxr-xr-xtestsuite/patch.tests30
-rwxr-xr-xtestsuite/tar.tests19
-rwxr-xr-xtestsuite/uncompress.tests20
-rwxr-xr-xtestsuite/uuencode.tests101
-rw-r--r--util-linux/Config.src69
-rw-r--r--util-linux/Kbuild.src1
-rw-r--r--util-linux/acpid.c62
-rw-r--r--util-linux/blkid.c9
-rw-r--r--util-linux/fdisk.c8
-rw-r--r--util-linux/getopt.c51
-rw-r--r--util-linux/hwclock.c2
-rw-r--r--util-linux/losetup.c16
-rw-r--r--util-linux/mdev.c681
-rw-r--r--util-linux/mkfs_ext2.c12
-rw-r--r--util-linux/more.c14
-rw-r--r--util-linux/mount.c124
-rw-r--r--util-linux/pivot_root.c1
-rw-r--r--util-linux/rdev.c4
-rw-r--r--util-linux/swaponoff.c3
-rw-r--r--util-linux/switch_root.c2
-rw-r--r--util-linux/umount.c24
-rw-r--r--util-linux/volume_id/get_devname.c57
-rw-r--r--util-linux/volume_id/util.c2
270 files changed, 15737 insertions, 9617 deletions
diff --git a/.config-full b/.config-full
index 65cd287..16313e1 100644
--- a/.config-full
+++ b/.config-full
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.19.4-cm9
-# Sat Mar 17 17:50:09 2012
+# Busybox version: 1.20.0-ics
+# Mon Apr 23 18:24:42 2012
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -62,7 +62,10 @@ CONFIG_FEATURE_HAVE_RPC=y
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
# CONFIG_LFS is not set
CONFIG_CROSS_COMPILER_PREFIX="arm-eabi-"
+CONFIG_SYSROOT=""
CONFIG_EXTRA_CFLAGS="-Os -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
+CONFIG_EXTRA_LDFLAGS=""
+CONFIG_EXTRA_LDLIBS=""
#
# Debugging Options
@@ -92,7 +95,7 @@ CONFIG_PREFIX="./_install"
# CONFIG_FEATURE_SYSTEMD is not set
CONFIG_FEATURE_RTMINMAX=y
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
@@ -101,6 +104,7 @@ CONFIG_FEATURE_EDITING_MAX_LEN=1024
CONFIG_FEATURE_EDITING_VI=y
CONFIG_FEATURE_EDITING_HISTORY=256
CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
CONFIG_FEATURE_REVERSE_SEARCH=y
CONFIG_FEATURE_TAB_COMPLETION=y
# CONFIG_FEATURE_USERNAME_COMPLETION is not set
@@ -140,6 +144,7 @@ CONFIG_FEATURE_CPIO_P=y
CONFIG_GUNZIP=y
CONFIG_GZIP=y
CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
+CONFIG_GZIP_FAST=2
CONFIG_LZOP=y
# CONFIG_LZOP_COMPR_HIGH is not set
# CONFIG_RPM2CPIO is not set
@@ -173,11 +178,13 @@ CONFIG_DATE=y
CONFIG_FEATURE_DATE_ISOFMT=y
# CONFIG_FEATURE_DATE_NANO is not set
CONFIG_FEATURE_DATE_COMPAT=y
+# CONFIG_HOSTID is not set
CONFIG_ID=y
CONFIG_GROUPS=y
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
# CONFIG_FEATURE_TR_EQUIV is not set
@@ -220,7 +227,6 @@ CONFIG_FOLD=y
CONFIG_FSYNC=y
CONFIG_HEAD=y
CONFIG_FEATURE_FANCY_HEAD=y
-# CONFIG_HOSTID is not set
CONFIG_INSTALL=y
CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y
CONFIG_LN=y
@@ -457,6 +463,7 @@ CONFIG_LAST_SYSTEM_ID=0
# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
# CONFIG_GETTY is not set
# CONFIG_LOGIN is not set
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
# CONFIG_PAM is not set
# CONFIG_LOGIN_SCRIPTS is not set
# CONFIG_FEATURE_NOLOGIN is not set
@@ -465,6 +472,7 @@ CONFIG_LAST_SYSTEM_ID=0
# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
# CONFIG_CRYPTPW is not set
# CONFIG_CHPASSWD is not set
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
# CONFIG_SU is not set
# CONFIG_FEATURE_SU_SYSLOG is not set
# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
@@ -513,6 +521,12 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_RENAME is not set
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
CONFIG_REV=y
# CONFIG_ACPID is not set
# CONFIG_FEATURE_ACPID_COMPAT is not set
@@ -556,12 +570,6 @@ CONFIG_FEATURE_HEXDUMP_REVERSE=y
CONFIG_LOSETUP=y
# CONFIG_LSPCI is not set
CONFIG_LSUSB=y
-# CONFIG_MDEV is not set
-# CONFIG_FEATURE_MDEV_CONF is not set
-# CONFIG_FEATURE_MDEV_RENAME is not set
-# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
-# CONFIG_FEATURE_MDEV_EXEC is not set
-# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
CONFIG_MKSWAP=y
# CONFIG_FEATURE_MKSWAP_UUID is not set
CONFIG_MORE=y
@@ -670,7 +678,7 @@ CONFIG_FEATURE_DC_LIBM=y
CONFIG_DEVMEM=y
# CONFIG_EJECT is not set
# CONFIG_FEATURE_EJECT_SCSI is not set
-# CONFIG_FBSPLASH is not set
+CONFIG_FBSPLASH=y
CONFIG_FLASHCP=y
CONFIG_FLASH_LOCK=y
CONFIG_FLASH_UNLOCK=y
@@ -830,6 +838,7 @@ CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
# CONFIG_TUNCTL is not set
# CONFIG_FEATURE_TUNCTL_UG is not set
+# CONFIG_UDHCPC6 is not set
# CONFIG_UDHCPD is not set
# CONFIG_DHCPRELAY is not set
# CONFIG_DUMPLEASES is not set
@@ -876,6 +885,7 @@ CONFIG_FEATURE_MIME_CHARSET=""
# Process Utilities
#
CONFIG_IOSTAT=y
+CONFIG_LSOF=y
CONFIG_MPSTAT=y
# CONFIG_NMETER is not set
CONFIG_PMAP=y
@@ -897,6 +907,7 @@ CONFIG_FEATURE_PIDOF_OMIT=y
CONFIG_PKILL=y
CONFIG_PS=y
CONFIG_FEATURE_PS_WIDE=y
+CONFIG_FEATURE_PS_LONG=y
# CONFIG_FEATURE_PS_TIME is not set
# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
diff --git a/.config-minimal b/.config-minimal
index 1bf60c6..e6ce197 100644
--- a/.config-minimal
+++ b/.config-minimal
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.19.4-cm9
-# Sun Feb 5 18:41:17 2012
+# Busybox version: 1.20.0-ics
+# Mon Apr 23 17:54:47 2012
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -62,7 +62,10 @@ CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
# CONFIG_LFS is not set
CONFIG_CROSS_COMPILER_PREFIX="arm-eabi-"
+CONFIG_SYSROOT=""
CONFIG_EXTRA_CFLAGS="-Os"
+CONFIG_EXTRA_LDFLAGS=""
+CONFIG_EXTRA_LDLIBS=""
#
# Debugging Options
@@ -92,7 +95,7 @@ CONFIG_PREFIX="/system/xbin/bb"
# CONFIG_FEATURE_SYSTEMD is not set
# CONFIG_FEATURE_RTMINMAX is not set
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=0
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
@@ -101,6 +104,7 @@ CONFIG_FEATURE_EDITING_MAX_LEN=1024
CONFIG_FEATURE_EDITING_VI=y
CONFIG_FEATURE_EDITING_HISTORY=256
CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+CONFIG_FEATURE_EDITING_SAVE_ON_EXIT=y
CONFIG_FEATURE_REVERSE_SEARCH=y
CONFIG_FEATURE_TAB_COMPLETION=y
# CONFIG_FEATURE_USERNAME_COMPLETION is not set
@@ -140,6 +144,7 @@ CONFIG_FEATURE_CPIO_O=y
CONFIG_GUNZIP=y
CONFIG_GZIP=y
CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
+CONFIG_GZIP_FAST=2
CONFIG_LZOP=y
# CONFIG_LZOP_COMPR_HIGH is not set
# CONFIG_RPM2CPIO is not set
@@ -173,11 +178,13 @@ CONFIG_DATE=y
CONFIG_FEATURE_DATE_ISOFMT=y
# CONFIG_FEATURE_DATE_NANO is not set
CONFIG_FEATURE_DATE_COMPAT=y
+# CONFIG_HOSTID is not set
CONFIG_ID=y
CONFIG_GROUPS=y
CONFIG_TEST=y
# CONFIG_FEATURE_TEST_64 is not set
CONFIG_TOUCH=y
+# CONFIG_FEATURE_TOUCH_SUSV3 is not set
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
# CONFIG_FEATURE_TR_EQUIV is not set
@@ -220,7 +227,6 @@ CONFIG_FOLD=y
# CONFIG_FSYNC is not set
CONFIG_HEAD=y
# CONFIG_FEATURE_FANCY_HEAD is not set
-# CONFIG_HOSTID is not set
CONFIG_INSTALL=y
# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
CONFIG_LN=y
@@ -457,6 +463,7 @@ CONFIG_LAST_SYSTEM_ID=0
# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
# CONFIG_GETTY is not set
# CONFIG_LOGIN is not set
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
# CONFIG_PAM is not set
# CONFIG_LOGIN_SCRIPTS is not set
# CONFIG_FEATURE_NOLOGIN is not set
@@ -465,6 +472,7 @@ CONFIG_LAST_SYSTEM_ID=0
# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
# CONFIG_CRYPTPW is not set
# CONFIG_CHPASSWD is not set
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
# CONFIG_SU is not set
# CONFIG_FEATURE_SU_SYSLOG is not set
# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
@@ -513,6 +521,12 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_RENAME is not set
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
CONFIG_REV=y
# CONFIG_ACPID is not set
# CONFIG_FEATURE_ACPID_COMPAT is not set
@@ -556,12 +570,6 @@ CONFIG_HEXDUMP=y
CONFIG_LOSETUP=y
CONFIG_LSPCI=y
CONFIG_LSUSB=y
-# CONFIG_MDEV is not set
-# CONFIG_FEATURE_MDEV_CONF is not set
-# CONFIG_FEATURE_MDEV_RENAME is not set
-# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
-# CONFIG_FEATURE_MDEV_EXEC is not set
-# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
CONFIG_MKSWAP=y
# CONFIG_FEATURE_MKSWAP_UUID is not set
CONFIG_MORE=y
@@ -826,6 +834,7 @@ CONFIG_IFUPDOWN_IFSTATE_PATH=""
# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
# CONFIG_TUNCTL is not set
# CONFIG_FEATURE_TUNCTL_UG is not set
+# CONFIG_UDHCPC6 is not set
# CONFIG_UDHCPD is not set
# CONFIG_DHCPRELAY is not set
# CONFIG_DUMPLEASES is not set
@@ -872,6 +881,7 @@ CONFIG_FEATURE_MIME_CHARSET=""
# Process Utilities
#
# CONFIG_IOSTAT is not set
+CONFIG_LSOF=y
# CONFIG_MPSTAT is not set
# CONFIG_NMETER is not set
# CONFIG_PMAP is not set
@@ -893,6 +903,7 @@ CONFIG_FEATURE_PIDOF_OMIT=y
CONFIG_PKILL=y
CONFIG_PS=y
CONFIG_FEATURE_PS_WIDE=y
+CONFIG_FEATURE_PS_LONG=y
# CONFIG_FEATURE_PS_TIME is not set
# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
diff --git a/Android.mk b/Android.mk
index 2e6a184..bf7bd02 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,5 +1,5 @@
LOCAL_PATH := $(call my-dir)
-
+BB_PATH := $(LOCAL_PATH)
# Bionic Branches Switches (CM7/AOSP/ICS)
BIONIC_ICS := true
@@ -8,47 +8,61 @@ BIONIC_ICS := true
# Make a static library for regex.
include $(CLEAR_VARS)
LOCAL_SRC_FILES := android/regex/regex.c
-LOCAL_C_INCLUDES := android/regex
+LOCAL_C_INCLUDES := $(BB_PATH)/android/regex
LOCAL_MODULE := libclearsilverregex
include $(BUILD_STATIC_LIBRARY)
# Make a static library for RPC library (coming from uClibc).
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(shell cat $(LOCAL_PATH)/android/librpc.sources)
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/android/librpc
+LOCAL_SRC_FILES := $(shell cat $(BB_PATH)/android/librpc.sources)
+LOCAL_C_INCLUDES := $(BB_PATH)/android/librpc
LOCAL_MODULE := libuclibcrpc
include $(BUILD_STATIC_LIBRARY)
+LOCAL_PATH := $(BB_PATH)
+include $(CLEAR_VARS)
+
+# Each profile require a compressed usage/config, outside the source tree for git history
+# We keep the uncompressed headers in local include-<profile> to track config changes.
+
+BB_INCLUDES_OUT := $(TARGET_OUT_INTERMEDIATES)/include
+$(BB_INCLUDES_OUT):
+ mkdir -p $(ANDROID_BUILD_TOP)/$(BB_INCLUDES_OUT)
+
# Execute make clean, make prepare and copy profiles required for normal & static busybox (recovery)
-include $(CLEAR_VARS)
KERNEL_MODULES_DIR ?= /system/lib/modules
BUSYBOX_CONFIG := minimal full
$(BUSYBOX_CONFIG):
- @echo GENERATE INCLUDES FOR BUSYBOX $@
- @cd $(LOCAL_PATH) && make clean
- cp $(LOCAL_PATH)/.config-$@ $(LOCAL_PATH)/.config
- cd $(LOCAL_PATH) && make prepare
- @#cp $(LOCAL_PATH)/.config $(LOCAL_PATH)/.config-$@
- @mkdir -p $(LOCAL_PATH)/include-$@
- cp $(LOCAL_PATH)/include/*.h $(LOCAL_PATH)/include-$@/
- @rm $(LOCAL_PATH)/include/usage_compressed.h
- @rm -f $(LOCAL_PATH)/.config-old
+ @echo -e ${CL_PFX}"prepare config for busybox $@ profile"${CL_RST}
+ @cd $(BB_PATH) && make clean
+ @cd $(BB_PATH) && git clean -f -- ./include-$@/
+ cp $(BB_PATH)/.config-$@ $(BB_PATH)/.config
+ cd $(BB_PATH) && make prepare
+ @#cp $(BB_PATH)/.config $(BB_PATH)/.config-$@
+ @mkdir -p $(BB_PATH)/include-$@
+ cp $(BB_PATH)/include/*.h $(BB_PATH)/include-$@/
+ @mkdir -p $(BB_INCLUDES_OUT)/busybox-$@
+ @cp $(BB_PATH)/include/*.h $(BB_INCLUDES_OUT)/busybox-$@/
+ @rm $(BB_PATH)/include/usage_compressed.h
+ @rm $(BB_PATH)/include/autoconf.h
+ @rm -f $(BB_PATH)/.config-old
busybox_prepare: $(BUSYBOX_CONFIG)
LOCAL_MODULE := busybox_prepare
-LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_TAGS := eng debug
include $(BUILD_STATIC_LIBRARY)
+LOCAL_PATH := $(BB_PATH)
include $(CLEAR_VARS)
KERNEL_MODULES_DIR ?= /system/lib/modules
-SUBMAKE := make -s -C $(LOCAL_PATH) CC=$(CC)
+SUBMAKE := make -s -C $(BB_PATH) CC=$(CC)
-BUSYBOX_SRC_FILES = $(shell cat $(LOCAL_PATH)/busybox-$(BUSYBOX_CONFIG).sources) \
+BUSYBOX_SRC_FILES = $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).sources) \
libbb/android.c
ifeq ($(TARGET_ARCH),arm)
@@ -72,14 +86,15 @@ ifeq ($(TARGET_ARCH),mips)
endif
BUSYBOX_C_INCLUDES = \
- $(LOCAL_PATH)/include-$(BUSYBOX_CONFIG) \
- $(LOCAL_PATH)/include $(LOCAL_PATH)/libbb \
+ $(BB_INCLUDES_OUT)/busybox-$(BUSYBOX_CONFIG) \
+ $(BB_PATH)/include-$(BUSYBOX_CONFIG) \
+ $(BB_PATH)/include $(BB_PATH)/libbb \
bionic/libc/private \
bionic/libm/include \
bionic/libm \
libc/kernel/common \
- $(LOCAL_PATH)/android/regex \
- $(LOCAL_PATH)/android/librpc
+ $(BB_PATH)/android/regex \
+ $(BB_PATH)/android/librpc
BUSYBOX_CFLAGS = \
-Werror=implicit \
@@ -111,7 +126,7 @@ LOCAL_CFLAGS += \
-Dgetmntent_r=busybox_getmntent_r \
-Dgenerate_uuid=busybox_generate_uuid
LOCAL_MODULE := libbusybox
-LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_TAGS := eng debug
LOCAL_STATIC_LIBRARIES := libcutils libc libm
$(LOCAL_MODULE): busybox_prepare
include $(BUILD_STATIC_LIBRARY)
@@ -119,7 +134,9 @@ include $(BUILD_STATIC_LIBRARY)
# Bionic Busybox /system/xbin
+LOCAL_PATH := $(BB_PATH)
include $(CLEAR_VARS)
+
BUSYBOX_CONFIG:=full
BUSYBOX_SUFFIX:=bionic
LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
@@ -129,14 +146,14 @@ endif
LOCAL_C_INCLUDES := $(BUSYBOX_C_INCLUDES)
LOCAL_CFLAGS := $(BUSYBOX_CFLAGS)
LOCAL_MODULE := busybox
-LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_TAGS := eng debug
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_SHARED_LIBRARIES := libc libcutils libm
LOCAL_STATIC_LIBRARIES := libclearsilverregex libuclibcrpc
$(LOCAL_MODULE): busybox_prepare
include $(BUILD_EXECUTABLE)
-BUSYBOX_LINKS := $(shell cat $(LOCAL_PATH)/busybox-$(BUSYBOX_CONFIG).links)
+BUSYBOX_LINKS := $(shell cat $(BB_PATH)/busybox-$(BUSYBOX_CONFIG).links)
# nc is provided by external/netcat
exclude := nc
SYMLINKS := $(addprefix $(TARGET_OUT_OPTIONAL_EXECUTABLES)/,$(filter-out $(exclude),$(notdir $(BUSYBOX_LINKS))))
@@ -157,7 +174,9 @@ ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \
# Static Busybox
+LOCAL_PATH := $(BB_PATH)
include $(CLEAR_VARS)
+
BUSYBOX_CONFIG:=full
BUSYBOX_SUFFIX:=static
LOCAL_SRC_FILES := $(BUSYBOX_SRC_FILES)
@@ -173,11 +192,11 @@ LOCAL_CFLAGS += \
-Dgenerate_uuid=busybox_generate_uuid
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE := static_busybox
+LOCAL_MODULE_STEM := busybox
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_LIBRARIES := libclearsilverregex libc libcutils libm libuclibcrpc
LOCAL_MODULE_CLASS := UTILITY_EXECUTABLES
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/utilities
LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
-LOCAL_MODULE_STEM := busybox
$(LOCAL_MODULE): busybox_prepare
include $(BUILD_EXECUTABLE)
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 4a661cf..d270287 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -38,7 +38,8 @@
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/busybox_prepare)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/busybox_prepare_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/include/busybox-*)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/EXECUTABLES/busybox_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libbusybox_intermediates)
diff --git a/Config.in b/Config.in
index 1e71812..17bdc89 100644
--- a/Config.in
+++ b/Config.in
@@ -83,20 +83,21 @@ config FEATURE_BUFFERS_GO_IN_BSS
endchoice
config SHOW_USAGE
- bool "Show terse applet usage messages"
+ bool "Show applet usage messages"
default y
help
- All BusyBox applets will show help messages when invoked with
- wrong arguments. You can turn off printing these terse usage
- messages if you say no here.
- This will save you up to 7k.
+ Enabling this option, BusyBox applets will show terse help messages
+ when invoked with wrong arguments.
+ If you do not want to show any (helpful) usage message when
+ issuing wrong command syntax, you can say 'N' here,
+ saving approximately 7k.
config FEATURE_VERBOSE_USAGE
bool "Show verbose applet usage messages"
default y
depends on SHOW_USAGE
help
- All BusyBox applets will show more verbose help messages when
+ All BusyBox applets will show verbose help messages when
busybox is invoked with --help. This will add a lot of text to the
busybox binary. In the default configuration, this will add about
13k, but it can add much more depending on your configuration.
@@ -106,8 +107,8 @@ config FEATURE_COMPRESS_USAGE
default y
depends on SHOW_USAGE
help
- Store usage messages in compressed form, uncompress them on-the-fly
- when <applet> --help is called.
+ Store usage messages in .bz compressed form, uncompress them
+ on-the-fly when <applet> --help is called.
If you have a really tiny busybox with few applets enabled (and
bunzip2 isn't one of them), the overhead of the decompressor might
@@ -599,12 +600,39 @@ config CROSS_COMPILER_PREFIX
Native builds leave this empty.
+config SYSROOT
+ string "Path to sysroot"
+ default ""
+ help
+ If you want to build BusyBox with a cross compiler, then you
+ might also need to specify where /usr/include and /usr/lib
+ will be found.
+
+ For example, BusyBox can be built against an installed
+ Android NDK, platform version 9, for ARM ABI with
+
+ CONFIG_SYSROOT=/opt/android-ndk/platforms/android-9/arch-arm
+
+ Native builds leave this empty.
+
config EXTRA_CFLAGS
string "Additional CFLAGS"
default ""
help
Additional CFLAGS to pass to the compiler verbatim.
+config EXTRA_LDFLAGS
+ string "Additional LDFLAGS"
+ default ""
+ help
+ Additional LDFLAGS to pass to the linker verbatim.
+
+config EXTRA_LDLIBS
+ string "Additional LDLIBS"
+ default ""
+ help
+ Additional LDLIBS to pass to the linker with -l.
+
endmenu
menu 'Debugging Options'
diff --git a/INSTALL b/INSTALL
index f93e5fb..750cfc4 100644
--- a/INSTALL
+++ b/INSTALL
@@ -47,8 +47,11 @@ the only commands busybox can find are the built-in ones.
Note that the standalone shell requires CONFIG_BUSYBOX_EXEC_PATH
to be set appropriately, depending on whether or not /proc/self/exe is
-available or not. If you do not have /proc, then point that config option
+available. If you do not have /proc, then point that config option
to the location of your busybox binary, usually /bin/busybox.
+Another solution is to patch the kernel (see
+examples/linux-*_proc_self_exe.patch) to make exec("/proc/self/exe")
+always work.
Configuring Busybox:
====================
diff --git a/Makefile b/Makefile
index 0d90962..33e049a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
VERSION = 1
-PATCHLEVEL = 19
-SUBLEVEL = 4
+PATCHLEVEL = 20
+SUBLEVEL = 0
EXTRAVERSION = -cm9
NAME = bionic
diff --git a/Makefile.flags b/Makefile.flags
index b3e1371..c43c8dc 100644
--- a/Makefile.flags
+++ b/Makefile.flags
@@ -97,10 +97,33 @@ CFLAGS += $(strip $(subst ",,$(CONFIG_EXTRA_CFLAGS)))
#"))
endif
+# Note: both "" (string consisting of two quote chars) and empty string
+# are possible, and should be skipped below.
+ifneq ($(subst "",,$(CONFIG_SYSROOT)),)
+CFLAGS += --sysroot=$(CONFIG_SYSROOT)
+export SYSROOT=$(CONFIG_SYSROOT)
+endif
+
+# Android has no separate crypt library
+# gcc-4.2.1 fails if we try to feed C source on stdin:
+# echo 'int main(void){return 0;}' | $(CC) $(CFLAGS) -lcrypt -o /dev/null -xc -
+# fall back to using a temp file:
+CRYPT_AVAILABLE := $(shell echo 'int main(void){return 0;}' >crypttest.c; $(CC) $(CFLAGS) -lcrypt -o /dev/null crypttest.c >/dev/null 2>&1 && echo "y"; rm crypttest.c)
+ifeq ($(CRYPT_AVAILABLE),y)
LDLIBS += m crypt
+else
+LDLIBS += m
+endif
ifeq ($(CONFIG_PAM),y)
-LDLIBS += pam pam_misc
+# libpam uses libpthread, so for static builds busybox must be linked to
+# libpthread. On some platforms that requires an explicit -lpthread, so
+# it should be in LDLIBS. For non-static builds, scripts/trylink will
+# take care of removing -lpthread if possible. (Not bothering to check
+# CONFIG_STATIC because even in a non-static build it could be that the
+# only libpam available is libpam.a, so -lpthread could still be
+# needed.)
+LDLIBS += pam pam_misc pthread
endif
ifeq ($(CONFIG_SELINUX),y)
@@ -125,6 +148,16 @@ ifneq (,$(findstring $(W_ELF2FLT),$(LDFLAGS) $(CFLAGS_busybox)))
SKIP_STRIP = y
endif
+ifneq ($(CONFIG_EXTRA_LDFLAGS),)
+EXTRA_LDFLAGS += $(strip $(subst ",,$(CONFIG_EXTRA_LDFLAGS)))
+#"))
+endif
+
+ifneq ($(CONFIG_EXTRA_LDLIBS),)
+LDLIBS += $(strip $(subst ",,$(CONFIG_EXTRA_LDLIBS)))
+#"))
+endif
+
# Busybox is a stack-fatty so make sure we increase default size
# TODO: use "make stksizes" to find & fix big stack users
# (we stole scripts/checkstack.pl from the kernel... thanks guys!)
diff --git a/TODO b/TODO
index 8b9f87f..4436469 100644
--- a/TODO
+++ b/TODO
@@ -2,6 +2,8 @@ Busybox TODO
Harvest patches from
http://git.openembedded.org/cgit.cgi/openembedded/tree/recipes/busybox/
+https://dev.openwrt.org/browser/trunk/package/busybox/patches/
+
Stuff that needs to be done. This is organized by who plans to get around to
doing it eventually, but that doesn't mean they "own" the item. If you want to
diff --git a/android/librpc/xdr_rec.c b/android/librpc/xdr_rec.c
index 1e02e7f..d0123aa 100644
--- a/android/librpc/xdr_rec.c
+++ b/android/librpc/xdr_rec.c
@@ -422,7 +422,7 @@ xdrrec_inline (XDR *xdrs, u_int len)
break;
case XDR_DECODE:
- if ((len <= rstrm->fbtbc) &&
+ if ((len <= (u_int) rstrm->fbtbc) &&
((rstrm->in_finger + len) <= rstrm->in_boundry))
{
buf = (int32_t *) rstrm->in_finger;
diff --git a/android/reboot.c b/android/reboot.c
index 2d07728..f8546de 100644
--- a/android/reboot.c
+++ b/android/reboot.c
@@ -1,7 +1,7 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
-#include <sys/reboot.h>
+#include <cutils/android_reboot.h>
#include <unistd.h>
int reboot_main(int argc, char *argv[])
@@ -9,6 +9,7 @@ int reboot_main(int argc, char *argv[])
int ret;
int nosync = 0;
int poweroff = 0;
+ int flags = 0;
opterr = 0;
do {
@@ -38,19 +39,16 @@ int reboot_main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
- if(!nosync)
- sync();
+ if(nosync)
+ /* also set NO_REMOUNT_RO as remount ro includes an implicit sync */
+ flags = ANDROID_RB_FLAG_NO_SYNC | ANDROID_RB_FLAG_NO_REMOUNT_RO;
if(poweroff)
- ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_POWER_OFF, NULL);
- else if(argc > optind) {
-#ifdef RECOVERY_PRE_COMMAND
- if (!strncmp(argv[optind],"recovery",8))
- system( RECOVERY_PRE_COMMAND );
-#endif
- ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, argv[optind]);
- } else
- ret = reboot(RB_AUTOBOOT);
+ ret = android_reboot(ANDROID_RB_POWEROFF, flags, 0);
+ else if(argc > optind)
+ ret = android_reboot(ANDROID_RB_RESTART2, flags, argv[optind]);
+ else
+ ret = android_reboot(ANDROID_RB_RESTART, flags, 0);
if(ret < 0) {
perror("reboot");
exit(EXIT_FAILURE);
diff --git a/applets/applet_tables.c b/applets/applet_tables.c
index a475747..152d5f4 100644
--- a/applets/applet_tables.c
+++ b/applets/applet_tables.c
@@ -80,15 +80,8 @@ int main(int argc, char **argv)
printf("#define NUM_APPLETS %u\n", NUM_APPLETS);
if (NUM_APPLETS == 1) {
- char *dash_to_underscore, *p;
printf("#define SINGLE_APPLET_STR \"%s\"\n", applets[0].name);
- /* Example: "ether-wake" -> "ether_wake" */
- p = dash_to_underscore = strdup(applets[0].name);
- p--;
- while (*++p)
- if (*p == '-')
- *p = '_';
- printf("#define SINGLE_APPLET_MAIN %s_main\n", dash_to_underscore);
+ printf("#define SINGLE_APPLET_MAIN %s_main\n", applets[0].main);
}
printf("\n");
diff --git a/applets_sh/README b/applets_sh/README
new file mode 100644
index 0000000..9dcd38a
--- a/dev/null
+++ b/applets_sh/README
@@ -0,0 +1,5 @@
+This directory contains examples of applets implemented as shell scripts.
+
+So far these scripts are not hooked to the build system and are not
+installed by "make install". If you want to use them,
+you need to install them by hand.
diff --git a/applets_sh/dos2unix b/applets_sh/dos2unix
new file mode 100755
index 0000000..0fd5206
--- a/dev/null
+++ b/applets_sh/dos2unix
@@ -0,0 +1,5 @@
+#!/bin/sh
+# TODO: use getopt to avoid parsing options as filenames,
+# and to support -- and --help
+[ $# -ne 0 ] && DASH_I=-i
+sed $DASH_I -e 's/\r$//' "$@"
diff --git a/applets_sh/nologin b/applets_sh/nologin
new file mode 100755
index 0000000..3768eaa
--- a/dev/null
+++ b/applets_sh/nologin
@@ -0,0 +1,4 @@
+#!/bin/sh
+cat /etc/nologin.txt 2>/dev/null || echo "This account is not available"
+sleep 5
+exit 1
diff --git a/applets_sh/tac b/applets_sh/tac
new file mode 100755
index 0000000..c5a8e39
--- a/dev/null
+++ b/applets_sh/tac
@@ -0,0 +1,7 @@
+#!/bin/sh
+# TODO: use getopt to avoid parsing options as filenames,
+# and to support -- and --help
+for i in "$@"
+do
+sed -e '1!G;h;$!d' "$i"
+done
diff --git a/applets_sh/unix2dos b/applets_sh/unix2dos
new file mode 100755
index 0000000..70e0429
--- a/dev/null
+++ b/applets_sh/unix2dos
@@ -0,0 +1,5 @@
+#!/bin/sh
+# TODO: use getopt to avoid parsing options as filenames,
+# and to support -- and --help
+[ $# -ne 0 ] && DASH_I=-i
+sed $DASH_I -e 's/$/\r/' "$@"
diff --git a/archival/Config.src b/archival/Config.src
index 81788ec..ae1afc5 100644
--- a/archival/Config.src
+++ b/archival/Config.src
@@ -32,10 +32,10 @@ config FEATURE_SEAMLESS_GZ
Make tar, rpm, modprobe etc understand .gz data.
config FEATURE_SEAMLESS_Z
- bool "Make tar and gunzip understand .Z data"
+ bool "tar, rpm, modprobe etc understand .Z data"
default n
help
- Make tar and gunzip understand .Z data.
+ Make tar, rpm, modprobe etc understand .Z data.
config AR
bool "ar"
@@ -187,6 +187,18 @@ config FEATURE_GZIP_LONG_OPTIONS
help
Enable use of long options, increases size by about 106 Bytes
+config GZIP_FAST
+ int "Trade memory for gzip speed (0:small,slow - 2:fast,big)"
+ default 0
+ range 0 2
+ depends on GZIP
+ help
+ Enable big memory options for gzip.
+ 0: small buffers, small hash-tables
+ 1: larger buffers, larger hash-tables
+ 2: larger buffers, largest hash-tables
+ Larger models may give slightly better compression
+
config LZOP
bool "lzop"
default y
@@ -330,15 +342,12 @@ config UNLZMA
is generally considerably better than that achieved by the bzip2
compressors.
- The BusyBox unlzma applet is limited to de-compression only.
+ The BusyBox unlzma applet is limited to decompression only.
On an x86 system, this applet adds about 4K.
- Unless you have a specific application which requires unlzma, you
- should probably say N here.
-
config FEATURE_LZMA_FAST
bool "Optimize unlzma for speed"
- default y
+ default n
depends on UNLZMA
help
This option reduces decompression time by about 25% at the cost of
diff --git a/archival/ar.c b/archival/ar.c
index acad20f..88236e8 100644
--- a/archival/ar.c
+++ b/archival/ar.c
@@ -28,7 +28,7 @@
//usage: "\n -v Verbose"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#include "ar.h"
#if ENABLE_FEATURE_AR_CREATE
diff --git a/archival/bbunzip.c b/archival/bbunzip.c
index bb1ec0e..94d8a81 100644
--- a/archival/bbunzip.c
+++ b/archival/bbunzip.c
@@ -5,7 +5,7 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
enum {
OPT_STDOUT = 1 << 0,
@@ -33,7 +33,7 @@ char* FAST_FUNC append_ext(char *filename, const char *expected_ext)
}
int FAST_FUNC bbunpack(char **argv,
- IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(unpack_info_t *info),
+ IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(transformer_aux_data_t *aux),
char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext),
const char *expected_ext
)
@@ -42,7 +42,7 @@ int FAST_FUNC bbunpack(char **argv,
IF_DESKTOP(long long) int status;
char *filename, *new_name;
smallint exitcode = 0;
- unpack_info_t info;
+ transformer_aux_data_t aux;
do {
/* NB: new_name is *maybe* malloc'ed! */
@@ -98,21 +98,23 @@ int FAST_FUNC bbunpack(char **argv,
"use -f to force it");
}
- /* memset(&info, 0, sizeof(info)); */
- info.mtime = 0; /* so far it has one member only */
- status = unpacker(&info);
+ init_transformer_aux_data(&aux);
+ aux.check_signature = 1;
+ status = unpacker(&aux);
if (status < 0)
exitcode = 1;
- xclose(STDOUT_FILENO); /* with error check! */
+
+ if (!(option_mask32 & OPT_STDOUT))
+ xclose(STDOUT_FILENO); /* with error check! */
if (filename) {
char *del = new_name;
if (status >= 0) {
/* TODO: restore other things? */
- if (info.mtime) {
+ if (aux.mtime != 0) {
struct timeval times[2];
- times[1].tv_sec = times[0].tv_sec = info.mtime;
+ times[1].tv_sec = times[0].tv_sec = aux.mtime;
times[1].tv_usec = times[0].tv_usec = 0;
/* Note: we closed it first.
* On some systems calling utimes
@@ -143,6 +145,9 @@ int FAST_FUNC bbunpack(char **argv,
}
} while (*argv && *++argv);
+ if (option_mask32 & OPT_STDOUT)
+ xclose(STDOUT_FILENO); /* with error check! */
+
return exitcode;
}
@@ -177,16 +182,9 @@ char* FAST_FUNC make_new_name_generic(char *filename, const char *expected_ext)
#if ENABLE_UNCOMPRESS
static
-IF_DESKTOP(long long) int FAST_FUNC unpack_uncompress(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_uncompress(transformer_aux_data_t *aux)
{
- IF_DESKTOP(long long) int status = -1;
-
- if ((xread_char(STDIN_FILENO) != 0x1f) || (xread_char(STDIN_FILENO) != 0x9d)) {
- bb_error_msg("invalid magic");
- } else {
- status = unpack_Z_stream(STDIN_FILENO, STDOUT_FILENO);
- }
- return status;
+ return unpack_Z_stream(aux, STDIN_FILENO, STDOUT_FILENO);
}
int uncompress_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int uncompress_main(int argc UNUSED_PARAM, char **argv)
@@ -274,31 +272,9 @@ char* FAST_FUNC make_new_name_gunzip(char *filename, const char *expected_ext UN
return filename;
}
static
-IF_DESKTOP(long long) int FAST_FUNC unpack_gunzip(unpack_info_t *info)
+IF_DESKTOP(long long) int FAST_FUNC unpack_gunzip(transformer_aux_data_t *aux)
{
- IF_DESKTOP(long long) int status = -1;
-
- /* do the decompression, and cleanup */
- if (xread_char(STDIN_FILENO) == 0x1f) {
- unsigned char magic2;
-
- magic2 = xread_char(STDIN_FILENO);
- if (ENABLE_FEATURE_SEAMLESS_Z && magic2 == 0x9d) {
- status = unpack_Z_stream(STDIN_FILENO, STDOUT_FILENO);
- } else if (magic2 == 0x8b) {
- status = unpack_gz_stream_with_info(STDIN_FILENO, STDOUT_FILENO, info);
- } else {
- goto bad_magic;
- }
- if (status < 0) {
- bb_error_msg("error inflating");
- }
- } else {
- bad_magic:
- bb_error_msg("invalid magic");
- /* status is still == -1 */
- }
- return status;
+ return unpack_gz_stream(aux, STDIN_FILENO, STDOUT_FILENO);
}
/*
* Linux kernel build uses gzip -d -n. We accept and ignore it.
@@ -347,9 +323,9 @@ int gunzip_main(int argc UNUSED_PARAM, char **argv)
//applet:IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
#if ENABLE_BUNZIP2
static
-IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_bunzip2(transformer_aux_data_t *aux)
{
- return unpack_bz2_stream_prime(STDIN_FILENO, STDOUT_FILENO);
+ return unpack_bz2_stream(aux, STDIN_FILENO, STDOUT_FILENO);
}
int bunzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int bunzip2_main(int argc UNUSED_PARAM, char **argv)
@@ -415,9 +391,9 @@ int bunzip2_main(int argc UNUSED_PARAM, char **argv)
#if ENABLE_UNLZMA
static
-IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_unlzma(transformer_aux_data_t *aux)
{
- return unpack_lzma_stream(STDIN_FILENO, STDOUT_FILENO);
+ return unpack_lzma_stream(aux, STDIN_FILENO, STDOUT_FILENO);
}
int unlzma_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int unlzma_main(int argc UNUSED_PARAM, char **argv)
@@ -440,18 +416,9 @@ int unlzma_main(int argc UNUSED_PARAM, char **argv)
#if ENABLE_UNXZ
static
-IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC unpack_unxz(transformer_aux_data_t *aux)
{
- struct {
- uint32_t v1;
- uint16_t v2;
- } magic;
- xread(STDIN_FILENO, &magic, 6);
- if (magic.v1 != XZ_MAGIC1a || magic.v2 != XZ_MAGIC2a) {
- bb_error_msg("invalid magic");
- return -1;
- }
- return unpack_xz_stream(STDIN_FILENO, STDOUT_FILENO);
+ return unpack_xz_stream(aux, STDIN_FILENO, STDOUT_FILENO);
}
int unxz_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int unxz_main(int argc UNUSED_PARAM, char **argv)
diff --git a/archival/bzip2.c b/archival/bzip2.c
index e39d7f7..dd77c8e 100644
--- a/archival/bzip2.c
+++ b/archival/bzip2.c
@@ -17,9 +17,9 @@
//usage: "\n -f Force"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
-#define CONFIG_BZIP2_FEATURE_SPEED 1
+#define CONFIG_BZIP2_FAST 1
/* Speed test:
* Compiled with gcc 4.2.1, run on Athlon 64 1800 MHz (512K L2 cache).
@@ -27,7 +27,7 @@
* (time to compress gcc-4.2.1.tar is 126.4% compared to bbox).
* At SPEED 5 difference is 32.7%.
*
- * Test run of all CONFIG_BZIP2_FEATURE_SPEED values on a 11Mb text file:
+ * Test run of all CONFIG_BZIP2_FAST values on a 11Mb text file:
* Size Time (3 runs)
* 0: 10828 4.145 4.146 4.148
* 1: 11097 3.845 3.860 3.861
@@ -111,7 +111,7 @@ IF_DESKTOP(long long) int bz_write(bz_stream *strm, void* rbuf, ssize_t rlen, vo
}
static
-IF_DESKTOP(long long) int FAST_FUNC compressStream(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC compressStream(transformer_aux_data_t *aux UNUSED_PARAM)
{
IF_DESKTOP(long long) int total;
ssize_t count;
diff --git a/archival/cpio.c b/archival/cpio.c
index cb1cb79..7df59a8 100644
--- a/archival/cpio.c
+++ b/archival/cpio.c
@@ -12,7 +12,7 @@
*
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
//usage:#define cpio_trivial_usage
//usage: "[-dmvu] [-F FILE]" IF_FEATURE_CPIO_O(" [-H newc]")
@@ -384,6 +384,7 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
goto dump;
}
/* parent */
+ USE_FOR_NOMMU(argv[-optind][0] &= 0x7f); /* undo fork_or_rexec() damage */
xchdir(*argv++);
close(pp.wr);
xmove_fd(pp.rd, STDIN_FILENO);
diff --git a/archival/dpkg.c b/archival/dpkg.c
index 2a6a7b3..bf9e999 100644
--- a/archival/dpkg.c
+++ b/archival/dpkg.c
@@ -57,7 +57,7 @@
#include "libbb.h"
#include <fnmatch.h>
-#include "archive.h"
+#include "bb_archive.h"
/* note: if you vary hash_prime sizes be aware,
* 1) tweaking these will have a big effect on how much memory this program uses.
diff --git a/archival/dpkg_deb.c b/archival/dpkg_deb.c
index 5d814d7..a04ec94 100644
--- a/archival/dpkg_deb.c
+++ b/archival/dpkg_deb.c
@@ -19,7 +19,7 @@
//usage: "$ dpkg-deb -X ./busybox_0.48-1_i386.deb /tmp\n"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#define DPKG_DEB_OPT_CONTENTS 1
#define DPKG_DEB_OPT_CONTROL 2
diff --git a/archival/gzip.c b/archival/gzip.c
index 403eb4d..80db4f9 100644
--- a/archival/gzip.c
+++ b/archival/gzip.c
@@ -55,7 +55,7 @@ aa: 85.1% -- replaced with aa.gz
//usage: "-rw-rw-r-- 1 andersen andersen 554058 Apr 14 17:49 /tmp/busybox.tar.gz\n"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* ===========================================================================
@@ -81,7 +81,15 @@ aa: 85.1% -- replaced with aa.gz
/* ===========================================================================
*/
-#define SMALL_MEM
+#if CONFIG_GZIP_FAST == 0
+# define SMALL_MEM
+#elif CONFIG_GZIP_FAST == 1
+# define MEDIUM_MEM
+#elif CONFIG_GZIP_FAST == 2
+# define BIG_MEM
+#else
+# error "Invalid CONFIG_GZIP_FAST value"
+#endif
#ifndef INBUFSIZ
# ifdef SMALL_MEM
@@ -2007,7 +2015,7 @@ static void zip(ulg time_stamp)
/* ======================================================================== */
static
-IF_DESKTOP(long long) int FAST_FUNC pack_gzip(unpack_info_t *info UNUSED_PARAM)
+IF_DESKTOP(long long) int FAST_FUNC pack_gzip(transformer_aux_data_t *aux UNUSED_PARAM)
{
struct stat s;
diff --git a/archival/libarchive/Kbuild.src b/archival/libarchive/Kbuild.src
index b0bc4e5..9592217 100644
--- a/archival/libarchive/Kbuild.src
+++ b/archival/libarchive/Kbuild.src
@@ -28,10 +28,13 @@ COMMON_FILES:= \
init_handle.o
DPKG_FILES:= \
- get_header_ar.o \
unpack_ar_archive.o \
+ filter_accept_list_reassign.o \
+ get_header_ar.o \
get_header_tar.o \
- filter_accept_list_reassign.o
+ get_header_tar_gz.o \
+ get_header_tar_bz2.o \
+ get_header_tar_lzma.o \
INSERT
@@ -42,18 +45,20 @@ lib-$(CONFIG_UNXZ) += decompress_unxz.o
lib-$(CONFIG_CPIO) += get_header_cpio.o
lib-$(CONFIG_DPKG) += $(DPKG_FILES)
lib-$(CONFIG_DPKG_DEB) += $(DPKG_FILES)
-lib-$(CONFIG_GUNZIP) += decompress_unzip.o
-lib-$(CONFIG_RPM2CPIO) += decompress_unzip.o get_header_cpio.o
-lib-$(CONFIG_RPM) += open_transformer.o decompress_unzip.o get_header_cpio.o
+lib-$(CONFIG_GUNZIP) += decompress_gunzip.o
+lib-$(CONFIG_RPM2CPIO) += decompress_gunzip.o get_header_cpio.o
+lib-$(CONFIG_RPM) += open_transformer.o decompress_gunzip.o get_header_cpio.o
lib-$(CONFIG_TAR) += get_header_tar.o
lib-$(CONFIG_UNCOMPRESS) += decompress_uncompress.o
-lib-$(CONFIG_UNZIP) += decompress_unzip.o
+lib-$(CONFIG_UNZIP) += decompress_gunzip.o
lib-$(CONFIG_LZOP) += lzo1x_1.o lzo1x_1o.o lzo1x_d.o
lib-$(CONFIG_LZOP_COMPR_HIGH) += lzo1x_9x.o
+lib-$(CONFIG_MODINFO) += open_transformer.o
+lib-$(CONFIG_INSMOD) += open_transformer.o
lib-$(CONFIG_FEATURE_SEAMLESS_Z) += open_transformer.o decompress_uncompress.o
-lib-$(CONFIG_FEATURE_SEAMLESS_GZ) += open_transformer.o decompress_unzip.o get_header_tar_gz.o
-lib-$(CONFIG_FEATURE_SEAMLESS_BZ2) += open_transformer.o decompress_bunzip2.o get_header_tar_bz2.o
-lib-$(CONFIG_FEATURE_SEAMLESS_LZMA) += open_transformer.o decompress_unlzma.o get_header_tar_lzma.o
+lib-$(CONFIG_FEATURE_SEAMLESS_GZ) += open_transformer.o decompress_gunzip.o
+lib-$(CONFIG_FEATURE_SEAMLESS_BZ2) += open_transformer.o decompress_bunzip2.o
+lib-$(CONFIG_FEATURE_SEAMLESS_LZMA) += open_transformer.o decompress_unlzma.o
lib-$(CONFIG_FEATURE_SEAMLESS_XZ) += open_transformer.o decompress_unxz.o
lib-$(CONFIG_FEATURE_COMPRESS_USAGE) += decompress_bunzip2.o
lib-$(CONFIG_FEATURE_COMPRESS_BBCONFIG) += decompress_bunzip2.o
diff --git a/archival/libarchive/bz/blocksort.c b/archival/libarchive/bz/blocksort.c
index f70c370..e600cb7 100644
--- a/archival/libarchive/bz/blocksort.c
+++ b/archival/libarchive/bz/blocksort.c
@@ -385,7 +385,7 @@ int mainGtU(
* but speeds up compression 10% overall
*/
-#if CONFIG_BZIP2_FEATURE_SPEED >= 1
+#if CONFIG_BZIP2_FAST >= 1
#define TIMES_8(code) \
code; code; code; code; \
@@ -496,7 +496,7 @@ void mainSimpleSort(uint32_t* ptr,
i++;
/* 1.5% overall speedup, +290 bytes */
-#if CONFIG_BZIP2_FEATURE_SPEED >= 3
+#if CONFIG_BZIP2_FAST >= 3
/*-- copy 2 --*/
if (i > hi) break;
v = ptr[i];
@@ -750,7 +750,7 @@ void mainSort(EState* state,
j = block[0] << 8;
i = nblock - 1;
/* 3%, +300 bytes */
-#if CONFIG_BZIP2_FEATURE_SPEED >= 2
+#if CONFIG_BZIP2_FAST >= 2
for (; i >= 3; i -= 4) {
quadrant[i] = 0;
j = (j >> 8) | (((uint16_t)block[i]) << 8);
@@ -787,7 +787,7 @@ void mainSort(EState* state,
s = block[0] << 8;
i = nblock - 1;
-#if CONFIG_BZIP2_FEATURE_SPEED >= 2
+#if CONFIG_BZIP2_FAST >= 2
for (; i >= 3; i -= 4) {
s = (s >> 8) | (block[i] << 8);
j = ftab[s] - 1;
diff --git a/archival/libarchive/bz/bzlib_private.h b/archival/libarchive/bz/bzlib_private.h
index 6430ce4..43e674b 100644
--- a/archival/libarchive/bz/bzlib_private.h
+++ b/archival/libarchive/bz/bzlib_private.h
@@ -183,7 +183,7 @@ typedef struct EState {
/* stack-saving measures: these can be local, but they are too big */
int32_t sendMTFValues__code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
int32_t sendMTFValues__rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
-#if CONFIG_BZIP2_FEATURE_SPEED >= 5
+#if CONFIG_BZIP2_FAST >= 5
/* second dimension: only 3 needed; 4 makes index calculations faster */
uint32_t sendMTFValues__len_pack[BZ_MAX_ALPHA_SIZE][4];
#endif
diff --git a/archival/libarchive/bz/compress.c b/archival/libarchive/bz/compress.c
index f936717..e9f1afd 100644
--- a/archival/libarchive/bz/compress.c
+++ b/archival/libarchive/bz/compress.c
@@ -61,7 +61,7 @@ void bsFinishWrite(EState* s)
/*---------------------------------------------------*/
static
/* Helps only on level 5, on other levels hurts. ? */
-#if CONFIG_BZIP2_FEATURE_SPEED >= 5
+#if CONFIG_BZIP2_FAST >= 5
ALWAYS_INLINE
#endif
void bsW(EState* s, int32_t n, uint32_t v)
@@ -331,7 +331,7 @@ void sendMTFValues(EState* s)
for (v = 0; v < alphaSize; v++)
s->rfreq[t][v] = 0;
-#if CONFIG_BZIP2_FEATURE_SPEED >= 5
+#if CONFIG_BZIP2_FAST >= 5
/*
* Set up an auxiliary length table which is used to fast-track
* the common case (nGroups == 6).
@@ -361,7 +361,7 @@ void sendMTFValues(EState* s)
*/
for (t = 0; t < nGroups; t++)
cost[t] = 0;
-#if CONFIG_BZIP2_FEATURE_SPEED >= 5
+#if CONFIG_BZIP2_FAST >= 5
if (nGroups == 6 && 50 == ge-gs+1) {
/*--- fast track the common case ---*/
register uint32_t cost01, cost23, cost45;
@@ -420,7 +420,7 @@ void sendMTFValues(EState* s)
* Increment the symbol frequencies for the selected table.
*/
/* 1% faster compress. +800 bytes */
-#if CONFIG_BZIP2_FEATURE_SPEED >= 4
+#if CONFIG_BZIP2_FAST >= 4
if (nGroups == 6 && 50 == ge-gs+1) {
/*--- fast track the common case ---*/
#define BZ_ITUR(nn) s->rfreq[bt][mtfv[gs + (nn)]]++
diff --git a/archival/libarchive/bz/huffman.c b/archival/libarchive/bz/huffman.c
index 676b1af..bbec11a 100644
--- a/archival/libarchive/bz/huffman.c
+++ b/archival/libarchive/bz/huffman.c
@@ -48,7 +48,7 @@ in the file LICENSE.
/* 90 bytes, 0.3% of overall compress speed */
-#if CONFIG_BZIP2_FEATURE_SPEED >= 1
+#if CONFIG_BZIP2_FAST >= 1
/* macro works better than inline (gcc 4.2.1) */
#define DOWNHEAP1(heap, weight, Heap) \
diff --git a/archival/libarchive/data_align.c b/archival/libarchive/data_align.c
index 2e56fa8..a6b84a4 100644
--- a/archival/libarchive/data_align.c
+++ b/archival/libarchive/data_align.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC data_align(archive_handle_t *archive_handle, unsigned boundary)
{
diff --git a/archival/libarchive/data_extract_all.c b/archival/libarchive/data_extract_all.c
index 1b25c8b..3f67b83 100644
--- a/archival/libarchive/data_extract_all.c
+++ b/archival/libarchive/data_extract_all.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC data_extract_all(archive_handle_t *archive_handle)
{
@@ -13,13 +13,13 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle)
int res;
#if ENABLE_FEATURE_TAR_SELINUX
- char *sctx = archive_handle->tar__next_file_sctx;
+ char *sctx = archive_handle->tar__sctx[PAX_NEXT_FILE];
if (!sctx)
- sctx = archive_handle->tar__global_sctx;
+ sctx = archive_handle->tar__sctx[PAX_GLOBAL];
if (sctx) { /* setfscreatecon is 4 syscalls, avoid if possible */
setfscreatecon(sctx);
- free(archive_handle->tar__next_file_sctx);
- archive_handle->tar__next_file_sctx = NULL;
+ free(archive_handle->tar__sctx[PAX_NEXT_FILE]);
+ archive_handle->tar__sctx[PAX_NEXT_FILE] = NULL;
}
#endif
diff --git a/archival/libarchive/data_extract_to_command.c b/archival/libarchive/data_extract_to_command.c
index 31a13a2..354e958 100644
--- a/archival/libarchive/data_extract_to_command.c
+++ b/archival/libarchive/data_extract_to_command.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
enum {
//TAR_FILETYPE,
@@ -64,13 +64,13 @@ void FAST_FUNC data_extract_to_command(archive_handle_t *archive_handle)
file_header_t *file_header = archive_handle->file_header;
#if 0 /* do we need this? ENABLE_FEATURE_TAR_SELINUX */
- char *sctx = archive_handle->tar__next_file_sctx;
+ char *sctx = archive_handle->tar__sctx[PAX_NEXT_FILE];
if (!sctx)
- sctx = archive_handle->tar__global_sctx;
+ sctx = archive_handle->tar__sctx[PAX_GLOBAL];
if (sctx) { /* setfscreatecon is 4 syscalls, avoid if possible */
setfscreatecon(sctx);
- free(archive_handle->tar__next_file_sctx);
- archive_handle->tar__next_file_sctx = NULL;
+ free(archive_handle->tar__sctx[PAX_NEXT_FILE]);
+ archive_handle->tar__sctx[PAX_NEXT_FILE] = NULL;
}
#endif
diff --git a/archival/libarchive/data_extract_to_stdout.c b/archival/libarchive/data_extract_to_stdout.c
index 91f3f35..f849f3b 100644
--- a/archival/libarchive/data_extract_to_stdout.c
+++ b/archival/libarchive/data_extract_to_stdout.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC data_extract_to_stdout(archive_handle_t *archive_handle)
{
diff --git a/archival/libarchive/data_skip.c b/archival/libarchive/data_skip.c
index a055424..588167f 100644
--- a/archival/libarchive/data_skip.c
+++ b/archival/libarchive/data_skip.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC data_skip(archive_handle_t *archive_handle)
{
diff --git a/archival/libarchive/decompress_bunzip2.c b/archival/libarchive/decompress_bunzip2.c
index 4e46e68..dc252bb 100644
--- a/archival/libarchive/decompress_bunzip2.c
+++ b/archival/libarchive/decompress_bunzip2.c
@@ -40,7 +40,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* Constants for Huffman coding */
#define MAX_GROUPS 6
@@ -721,7 +721,7 @@ void FAST_FUNC dealloc_bunzip(bunzip_data *bd)
/* Decompress src_fd to dst_fd. Stops at end of bzip data, not end of file. */
IF_DESKTOP(long long) int FAST_FUNC
-unpack_bz2_stream(int src_fd, int dst_fd)
+unpack_bz2_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
{
IF_DESKTOP(long long total_written = 0;)
bunzip_data *bd;
@@ -729,6 +729,9 @@ unpack_bz2_stream(int src_fd, int dst_fd)
int i;
unsigned len;
+ if (check_signature16(aux, src_fd, BZIP2_MAGIC))
+ return -1;
+
outbuf = xmalloc(IOBUF_SIZE);
len = 0;
while (1) { /* "Process one BZ... stream" loop */
@@ -752,7 +755,14 @@ unpack_bz2_stream(int src_fd, int dst_fd)
}
}
- if (i != RETVAL_LAST_BLOCK) {
+ if (i != RETVAL_LAST_BLOCK
+ /* Observed case when i == RETVAL_OK:
+ * "bzcat z.bz2", where "z.bz2" is a bzipped zero-length file
+ * (to be exact, z.bz2 is exactly these 14 bytes:
+ * 42 5a 68 39 17 72 45 38 50 90 00 00 00 00).
+ */
+ && i != RETVAL_OK
+ ) {
bb_error_msg("bunzip error %d", i);
break;
}
@@ -787,17 +797,6 @@ unpack_bz2_stream(int src_fd, int dst_fd)
return i ? i : IF_DESKTOP(total_written) + 0;
}
-IF_DESKTOP(long long) int FAST_FUNC
-unpack_bz2_stream_prime(int src_fd, int dst_fd)
-{
- uint16_t magic2;
- xread(src_fd, &magic2, 2);
- if (magic2 != BZIP2_MAGIC) {
- bb_error_msg_and_die("invalid magic");
- }
- return unpack_bz2_stream(src_fd, dst_fd);
-}
-
#ifdef TESTING
static char *const bunzip_errors[] = {
@@ -812,7 +811,7 @@ int main(int argc, char **argv)
int i;
char c;
- int i = unpack_bz2_stream_prime(0, 1);
+ int i = unpack_bz2_stream(0, 1);
if (i < 0)
fprintf(stderr, "%s\n", bunzip_errors[-i]);
else if (read(STDIN_FILENO, &c, 1))
diff --git a/archival/libarchive/decompress_unzip.c b/archival/libarchive/decompress_gunzip.c
index a29eef8..2d5ab3e 100644
--- a/archival/libarchive/decompress_unzip.c
+++ b/archival/libarchive/decompress_gunzip.c
@@ -35,7 +35,7 @@
#include <setjmp.h>
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
typedef struct huft_t {
unsigned char e; /* number of extra bits or operation */
@@ -1034,22 +1034,22 @@ inflate_unzip_internal(STATE_PARAM int in, int out)
/* For unzip */
IF_DESKTOP(long long) int FAST_FUNC
-inflate_unzip(inflate_unzip_result *res, off_t compr_size, int in, int out)
+inflate_unzip(transformer_aux_data_t *aux, int in, int out)
{
IF_DESKTOP(long long) int n;
DECLARE_STATE;
ALLOC_STATE;
- to_read = compr_size;
+ to_read = aux->bytes_in;
// bytebuffer_max = 0x8000;
bytebuffer_offset = 4;
bytebuffer = xmalloc(bytebuffer_max);
n = inflate_unzip_internal(PASS_STATE in, out);
free(bytebuffer);
- res->crc = gunzip_crc;
- res->bytes_out = gunzip_bytes_out;
+ aux->crc32 = gunzip_crc;
+ aux->bytes_out = gunzip_bytes_out;
DEALLOC_STATE;
return n;
}
@@ -1107,7 +1107,7 @@ static uint32_t buffer_read_le_u32(STATE_PARAM_ONLY)
return res;
}
-static int check_header_gzip(STATE_PARAM unpack_info_t *info)
+static int check_header_gzip(STATE_PARAM transformer_aux_data_t *aux)
{
union {
unsigned char raw[8];
@@ -1169,8 +1169,8 @@ static int check_header_gzip(STATE_PARAM unpack_info_t *info)
}
}
- if (info)
- info->mtime = SWAP_LE32(header.formatted.mtime);
+ if (aux)
+ aux->mtime = SWAP_LE32(header.formatted.mtime);
/* Read the header checksum */
if (header.formatted.flags & 0x02) {
@@ -1182,33 +1182,58 @@ static int check_header_gzip(STATE_PARAM unpack_info_t *info)
}
IF_DESKTOP(long long) int FAST_FUNC
-unpack_gz_stream_with_info(int in, int out, unpack_info_t *info)
+unpack_gz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
{
uint32_t v32;
- IF_DESKTOP(long long) int n;
+ IF_DESKTOP(long long) int total, n;
DECLARE_STATE;
- n = 0;
+#if !ENABLE_FEATURE_SEAMLESS_Z
+ if (check_signature16(aux, src_fd, GZIP_MAGIC))
+ return -1;
+#else
+ if (aux && aux->check_signature) {
+ uint16_t magic2;
+
+ if (full_read(src_fd, &magic2, 2) != 2) {
+ bad_magic:
+ bb_error_msg("invalid magic");
+ return -1;
+ }
+ if (magic2 == COMPRESS_MAGIC) {
+ aux->check_signature = 0;
+ return unpack_Z_stream(aux, src_fd, dst_fd);
+ }
+ if (magic2 != GZIP_MAGIC)
+ goto bad_magic;
+ }
+#endif
+
+ total = 0;
ALLOC_STATE;
to_read = -1;
// bytebuffer_max = 0x8000;
bytebuffer = xmalloc(bytebuffer_max);
- gunzip_src_fd = in;
+ gunzip_src_fd = src_fd;
again:
- if (!check_header_gzip(PASS_STATE info)) {
+ if (!check_header_gzip(PASS_STATE aux)) {
bb_error_msg("corrupted data");
- n = -1;
+ total = -1;
goto ret;
}
- n += inflate_unzip_internal(PASS_STATE in, out);
- if (n < 0)
+
+ n = inflate_unzip_internal(PASS_STATE src_fd, dst_fd);
+ if (n < 0) {
+ total = -1;
goto ret;
+ }
+ total += n;
if (!top_up(PASS_STATE 8)) {
bb_error_msg("corrupted data");
- n = -1;
+ total = -1;
goto ret;
}
@@ -1216,7 +1241,7 @@ unpack_gz_stream_with_info(int in, int out, unpack_info_t *info)
v32 = buffer_read_le_u32(PASS_STATE_ONLY);
if ((~gunzip_crc) != v32) {
bb_error_msg("crc error");
- n = -1;
+ total = -1;
goto ret;
}
@@ -1224,7 +1249,7 @@ unpack_gz_stream_with_info(int in, int out, unpack_info_t *info)
v32 = buffer_read_le_u32(PASS_STATE_ONLY);
if ((uint32_t)gunzip_bytes_out != v32) {
bb_error_msg("incorrect length");
- n = -1;
+ total = -1;
}
if (!top_up(PASS_STATE 2))
@@ -1242,11 +1267,5 @@ unpack_gz_stream_with_info(int in, int out, unpack_info_t *info)
ret:
free(bytebuffer);
DEALLOC_STATE;
- return n;
-}
-
-IF_DESKTOP(long long) int FAST_FUNC
-unpack_gz_stream(int in, int out)
-{
- return unpack_gz_stream_with_info(in, out, NULL);
+ return total;
}
diff --git a/archival/libarchive/decompress_uncompress.c b/archival/libarchive/decompress_uncompress.c
index d1061a2..e9bbfb9 100644
--- a/archival/libarchive/decompress_uncompress.c
+++ b/archival/libarchive/decompress_uncompress.c
@@ -25,7 +25,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* Default input buffer size */
@@ -73,7 +73,7 @@
*/
IF_DESKTOP(long long) int FAST_FUNC
-unpack_Z_stream(int fd_in, int fd_out)
+unpack_Z_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
{
IF_DESKTOP(long long total_written = 0;)
IF_DESKTOP(long long) int retval = -1;
@@ -103,16 +103,19 @@ unpack_Z_stream(int fd_in, int fd_out)
/* block compress mode -C compatible with 2.0 */
int block_mode; /* = BLOCK_MODE; */
+ if (check_signature16(aux, src_fd, COMPRESS_MAGIC))
+ return -1;
+
inbuf = xzalloc(IBUFSIZ + 64);
outbuf = xzalloc(OBUFSIZ + 2048);
- htab = xzalloc(HSIZE); /* wsn't zeroed out before, maybe can xmalloc? */
+ htab = xzalloc(HSIZE); /* wasn't zeroed out before, maybe can xmalloc? */
codetab = xzalloc(HSIZE * sizeof(codetab[0]));
insize = 0;
/* xread isn't good here, we have to return - caller may want
* to do some cleanup (e.g. delete incomplete unpacked file etc) */
- if (full_read(fd_in, inbuf, 1) != 1) {
+ if (full_read(src_fd, inbuf, 1) != 1) {
bb_error_msg("short read");
goto err;
}
@@ -162,7 +165,7 @@ unpack_Z_stream(int fd_in, int fd_out)
}
if (insize < (int) (IBUFSIZ + 64) - IBUFSIZ) {
- rsize = safe_read(fd_in, inbuf + insize, IBUFSIZ);
+ rsize = safe_read(src_fd, inbuf + insize, IBUFSIZ);
if (rsize < 0)
bb_error_msg_and_die(bb_msg_read_error);
insize += rsize;
@@ -268,7 +271,7 @@ unpack_Z_stream(int fd_in, int fd_out)
}
if (outpos >= OBUFSIZ) {
- xwrite(fd_out, outbuf, outpos);
+ xwrite(dst_fd, outbuf, outpos);
IF_DESKTOP(total_written += outpos;)
outpos = 0;
}
@@ -296,7 +299,7 @@ unpack_Z_stream(int fd_in, int fd_out)
} while (rsize > 0);
if (outpos > 0) {
- xwrite(fd_out, outbuf, outpos);
+ xwrite(dst_fd, outbuf, outpos);
IF_DESKTOP(total_written += outpos;)
}
diff --git a/archival/libarchive/decompress_unlzma.c b/archival/libarchive/decompress_unlzma.c
index a047143..cfde8ea 100644
--- a/archival/libarchive/decompress_unlzma.c
+++ b/archival/libarchive/decompress_unlzma.c
@@ -9,7 +9,7 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#if ENABLE_FEATURE_LZMA_FAST
# define speed_inline ALWAYS_INLINE
@@ -213,7 +213,7 @@ enum {
IF_DESKTOP(long long) int FAST_FUNC
-unpack_lzma_stream(int src_fd, int dst_fd)
+unpack_lzma_stream(transformer_aux_data_t *aux UNUSED_PARAM, int src_fd, int dst_fd)
{
IF_DESKTOP(long long total_written = 0;)
lzma_header_t header;
diff --git a/archival/libarchive/decompress_unxz.c b/archival/libarchive/decompress_unxz.c
index e90dfb0..79b48a1 100644
--- a/archival/libarchive/decompress_unxz.c
+++ b/archival/libarchive/decompress_unxz.c
@@ -10,7 +10,7 @@
* Licensed under GPLv2, see file LICENSE in this source tree.
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#define XZ_FUNC FAST_FUNC
#define XZ_EXTERN static
@@ -38,7 +38,7 @@ static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
#include "unxz/xz_dec_stream.c"
IF_DESKTOP(long long) int FAST_FUNC
-unpack_xz_stream(int src_fd, int dst_fd)
+unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd)
{
struct xz_buf iobuf;
struct xz_dec *state;
@@ -49,13 +49,17 @@ unpack_xz_stream(int src_fd, int dst_fd)
global_crc32_table = crc32_filltable(NULL, /*endian:*/ 0);
memset(&iobuf, 0, sizeof(iobuf));
- /* Preload XZ file signature */
- membuf = (void*) strcpy(xmalloc(2 * BUFSIZ), HEADER_MAGIC);
+ membuf = xmalloc(2 * BUFSIZ);
iobuf.in = membuf;
- iobuf.in_size = HEADER_MAGIC_SIZE;
iobuf.out = membuf + BUFSIZ;
iobuf.out_size = BUFSIZ;
+ if (!aux || aux->check_signature == 0) {
+ /* Preload XZ file signature */
+ strcpy((char*)membuf, HEADER_MAGIC);
+ iobuf.in_size = HEADER_MAGIC_SIZE;
+ } /* else: let xz code read & check it */
+
/* Limit memory usage to about 64 MiB. */
state = xz_dec_init(XZ_DYNALLOC, 64*1024*1024);
diff --git a/archival/libarchive/filter_accept_all.c b/archival/libarchive/filter_accept_all.c
index e69deb6..c33f7d3 100644
--- a/archival/libarchive/filter_accept_all.c
+++ b/archival/libarchive/filter_accept_all.c
@@ -6,7 +6,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* Accept any non-null name, its not really a filter at all */
char FAST_FUNC filter_accept_all(archive_handle_t *archive_handle)
diff --git a/archival/libarchive/filter_accept_list.c b/archival/libarchive/filter_accept_list.c
index a7640af..a2d4b23 100644
--- a/archival/libarchive/filter_accept_list.c
+++ b/archival/libarchive/filter_accept_list.c
@@ -6,7 +6,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/*
* Accept names that are in the accept list, ignoring reject list.
diff --git a/archival/libarchive/filter_accept_list_reassign.c b/archival/libarchive/filter_accept_list_reassign.c
index d80f716..3d19abe 100644
--- a/archival/libarchive/filter_accept_list_reassign.c
+++ b/archival/libarchive/filter_accept_list_reassign.c
@@ -6,7 +6,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* Built and used only if ENABLE_DPKG || ENABLE_DPKG_DEB */
diff --git a/archival/libarchive/filter_accept_reject_list.c b/archival/libarchive/filter_accept_reject_list.c
index 3e86cca..39c8113 100644
--- a/archival/libarchive/filter_accept_reject_list.c
+++ b/archival/libarchive/filter_accept_reject_list.c
@@ -6,7 +6,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/*
* Accept names that are in the accept list and not in the reject list
diff --git a/archival/libarchive/find_list_entry.c b/archival/libarchive/find_list_entry.c
index 5efd1af..56032c6 100644
--- a/archival/libarchive/find_list_entry.c
+++ b/archival/libarchive/find_list_entry.c
@@ -7,7 +7,7 @@
#include <fnmatch.h>
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* Find a string in a shell pattern list */
const llist_t* FAST_FUNC find_list_entry(const llist_t *list, const char *filename)
diff --git a/archival/libarchive/get_header_ar.c b/archival/libarchive/get_header_ar.c
index df603b1..23c4124 100644
--- a/archival/libarchive/get_header_ar.c
+++ b/archival/libarchive/get_header_ar.c
@@ -5,7 +5,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#include "ar.h"
static unsigned read_num(const char *str, int base)
diff --git a/archival/libarchive/get_header_cpio.c b/archival/libarchive/get_header_cpio.c
index 3d99b49..1a0058b 100644
--- a/archival/libarchive/get_header_cpio.c
+++ b/archival/libarchive/get_header_cpio.c
@@ -5,7 +5,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
typedef struct hardlinks_t {
struct hardlinks_t *next;
diff --git a/archival/libarchive/get_header_tar.c b/archival/libarchive/get_header_tar.c
index 79caff5..80a7091 100644
--- a/archival/libarchive/get_header_tar.c
+++ b/archival/libarchive/get_header_tar.c
@@ -12,7 +12,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
typedef uint32_t aliased_uint32_t FIX_ALIASING;
typedef off_t aliased_off_t FIX_ALIASING;
@@ -79,10 +79,10 @@ static unsigned long long getOctal(char *str, int len)
*
* NB: tarballs with NEGATIVE unix times encoded that way were seen!
*/
- v = first;
- /* Sign-extend using 6th bit: */
- v <<= sizeof(unsigned long long)*8 - 7;
- v = (long long)v >> (sizeof(unsigned long long)*8 - 7);
+ /* Sign-extend 7bit 'first' to 64bit 'v' (that is, using 6th bit as sign): */
+ first <<= 1;
+ first >>= 1; /* now 7th bit = 6th bit */
+ v = first; /* sign-extend 8 bits to 64 */
while (--len != 0)
v = (v << 8) + (unsigned char) *str++;
}
@@ -90,23 +90,20 @@ static unsigned long long getOctal(char *str, int len)
}
#define GET_OCTAL(a) getOctal((a), sizeof(a))
-#if ENABLE_FEATURE_TAR_SELINUX
-/* Scan a PAX header for SELinux contexts, via "RHT.security.selinux" keyword.
- * This is what Red Hat's patched version of tar uses.
- */
-# define SELINUX_CONTEXT_KEYWORD "RHT.security.selinux"
-static char *get_selinux_sctx_from_pax_hdr(archive_handle_t *archive_handle, unsigned sz)
+/* "global" is 0 or 1 */
+static void process_pax_hdr(archive_handle_t *archive_handle, unsigned sz, int global)
{
char *buf, *p;
- char *result;
+ unsigned blk_sz;
+
+ blk_sz = (sz + 511) & (~511);
+ p = buf = xmalloc(blk_sz + 1);
+ xread(archive_handle->src_fd, buf, blk_sz);
+ archive_handle->offset += blk_sz;
- p = buf = xmalloc(sz + 1);
/* prevent bb_strtou from running off the buffer */
buf[sz] = '\0';
- xread(archive_handle->src_fd, buf, sz);
- archive_handle->offset += sz;
- result = NULL;
while (sz != 0) {
char *end, *value;
unsigned len;
@@ -133,19 +130,33 @@ static char *get_selinux_sctx_from_pax_hdr(archive_handle_t *archive_handle, uns
* (we do not bother to check that it *was* a newline)
*/
p[-1] = '\0';
- /* Is it selinux security context? */
value = end + 1;
+
+#if ENABLE_FEATURE_TAR_GNU_EXTENSIONS
+ if (!global && strncmp(value, "path=", sizeof("path=") - 1) == 0) {
+ value += sizeof("path=") - 1;
+ free(archive_handle->tar__longname);
+ archive_handle->tar__longname = xstrdup(value);
+ continue;
+ }
+#endif
+
+#if ENABLE_FEATURE_TAR_SELINUX
+ /* Scan for SELinux contexts, via "RHT.security.selinux" keyword.
+ * This is what Red Hat's patched version of tar uses.
+ */
+# define SELINUX_CONTEXT_KEYWORD "RHT.security.selinux"
if (strncmp(value, SELINUX_CONTEXT_KEYWORD"=", sizeof(SELINUX_CONTEXT_KEYWORD"=") - 1) == 0) {
value += sizeof(SELINUX_CONTEXT_KEYWORD"=") - 1;
- result = xstrdup(value);
- break;
+ free(archive_handle->tar__sctx[global]);
+ archive_handle->tar__sctx[global] = xstrdup(value);
+ continue;
}
+#endif
}
free(buf);
- return result;
}
-#endif
char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
{
@@ -224,43 +235,18 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
|| memcmp(tar.magic, "\0\0\0\0", 5) != 0)
) {
#if ENABLE_FEATURE_TAR_AUTODETECT
- char FAST_FUNC (*get_header_ptr)(archive_handle_t *);
- uint16_t magic2;
-
autodetect:
- magic2 = *(bb__aliased_uint16_t*)tar.name;
- /* tar gz/bz autodetect: check for gz/bz2 magic.
- * If we see the magic, and it is the very first block,
- * we can switch to get_header_tar_gz/bz2/lzma().
- * Needs seekable fd. I wish recv(MSG_PEEK) works
- * on any fd... */
-# if ENABLE_FEATURE_SEAMLESS_GZ
- if (magic2 == GZIP_MAGIC) {
- get_header_ptr = get_header_tar_gz;
- } else
-# endif
-# if ENABLE_FEATURE_SEAMLESS_BZ2
- if (magic2 == BZIP2_MAGIC
- && tar.name[2] == 'h' && isdigit(tar.name[3])
- ) { /* bzip2 */
- get_header_ptr = get_header_tar_bz2;
- } else
-# endif
-# if ENABLE_FEATURE_SEAMLESS_XZ
- //TODO: if (magic2 == XZ_MAGIC1)...
- //else
-# endif
- goto err;
/* Two different causes for lseek() != 0:
* unseekable fd (would like to support that too, but...),
* or not first block (false positive, it's not .gz/.bz2!) */
if (lseek(archive_handle->src_fd, -i, SEEK_CUR) != 0)
goto err;
- while (get_header_ptr(archive_handle) == EXIT_SUCCESS)
- continue;
- return EXIT_FAILURE;
+ if (setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_detected:*/ 0) != 0)
err:
-#endif /* FEATURE_TAR_AUTODETECT */
+ bb_error_msg_and_die("invalid tar magic");
+ archive_handle->offset = 0;
+ goto again_after_align;
+#endif
bb_error_msg_and_die("invalid tar magic");
}
@@ -418,12 +404,14 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
case 'S': /* Sparse file */
case 'V': /* Volume header */
#endif
-#if !ENABLE_FEATURE_TAR_SELINUX
case 'g': /* pax global header */
- case 'x': /* pax extended header */
-#else
+ case 'x': { /* pax extended header */
+ if ((uoff_t)file_header->size > 0xfffff) /* paranoia */
+ goto skip_ext_hdr;
+ process_pax_hdr(archive_handle, file_header->size, (tar.typeflag == 'g'));
+ goto again_after_align;
+ }
skip_ext_hdr:
-#endif
{
off_t sz;
bb_error_msg("warning: skipping header '%c'", tar.typeflag);
@@ -435,18 +423,6 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
/* return get_header_tar(archive_handle); */
goto again_after_align;
}
-#if ENABLE_FEATURE_TAR_SELINUX
- case 'g': /* pax global header */
- case 'x': { /* pax extended header */
- char **pp;
- if ((uoff_t)file_header->size > 0xfffff) /* paranoia */
- goto skip_ext_hdr;
- pp = (tar.typeflag == 'g') ? &archive_handle->tar__global_sctx : &archive_handle->tar__next_file_sctx;
- free(*pp);
- *pp = get_selinux_sctx_from_pax_hdr(archive_handle, file_header->size);
- goto again;
- }
-#endif
default:
bb_error_msg_and_die("unknown typeflag: 0x%x", tar.typeflag);
}
diff --git a/archival/libarchive/get_header_tar_bz2.c b/archival/libarchive/get_header_tar_bz2.c
index 60d3206..0ee00df 100644
--- a/archival/libarchive/get_header_tar_bz2.c
+++ b/archival/libarchive/get_header_tar_bz2.c
@@ -4,14 +4,14 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
char FAST_FUNC get_header_tar_bz2(archive_handle_t *archive_handle)
{
/* Can't lseek over pipes */
archive_handle->seek = seek_by_read;
- open_transformer(archive_handle->src_fd, unpack_bz2_stream_prime, "bunzip2");
+ open_transformer_with_sig(archive_handle->src_fd, unpack_bz2_stream, "bunzip2");
archive_handle->offset = 0;
while (get_header_tar(archive_handle) == EXIT_SUCCESS)
continue;
diff --git a/archival/libarchive/get_header_tar_gz.c b/archival/libarchive/get_header_tar_gz.c
index 889fed0..0328434 100644
--- a/archival/libarchive/get_header_tar_gz.c
+++ b/archival/libarchive/get_header_tar_gz.c
@@ -4,29 +4,14 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
char FAST_FUNC get_header_tar_gz(archive_handle_t *archive_handle)
{
-#if BB_MMU
- uint16_t magic;
-#endif
-
/* Can't lseek over pipes */
archive_handle->seek = seek_by_read;
- /* Check gzip magic only if open_transformer will invoke unpack_gz_stream (MMU case).
- * Otherwise, it will invoke an external helper "gunzip -cf" (NOMMU case) which will
- * need the header. */
-#if BB_MMU
- xread(archive_handle->src_fd, &magic, 2);
- /* Can skip this check, but error message will be less clear */
- if (magic != GZIP_MAGIC) {
- bb_error_msg_and_die("invalid gzip magic");
- }
-#endif
-
- open_transformer(archive_handle->src_fd, unpack_gz_stream, "gunzip");
+ open_transformer_with_sig(archive_handle->src_fd, unpack_gz_stream, "gunzip");
archive_handle->offset = 0;
while (get_header_tar(archive_handle) == EXIT_SUCCESS)
continue;
diff --git a/archival/libarchive/get_header_tar_lzma.c b/archival/libarchive/get_header_tar_lzma.c
index da08e0c..d565a21 100644
--- a/archival/libarchive/get_header_tar_lzma.c
+++ b/archival/libarchive/get_header_tar_lzma.c
@@ -7,14 +7,14 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
char FAST_FUNC get_header_tar_lzma(archive_handle_t *archive_handle)
{
/* Can't lseek over pipes */
archive_handle->seek = seek_by_read;
- open_transformer(archive_handle->src_fd, unpack_lzma_stream, "unlzma");
+ open_transformer_with_sig(archive_handle->src_fd, unpack_lzma_stream, "unlzma");
archive_handle->offset = 0;
while (get_header_tar(archive_handle) == EXIT_SUCCESS)
continue;
diff --git a/archival/libarchive/header_list.c b/archival/libarchive/header_list.c
index c4fc75f..0621aa4 100644
--- a/archival/libarchive/header_list.c
+++ b/archival/libarchive/header_list.c
@@ -3,7 +3,7 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC header_list(const file_header_t *file_header)
{
diff --git a/archival/libarchive/header_skip.c b/archival/libarchive/header_skip.c
index 2bfc525..f5987bf 100644
--- a/archival/libarchive/header_skip.c
+++ b/archival/libarchive/header_skip.c
@@ -3,7 +3,7 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC header_skip(const file_header_t *file_header UNUSED_PARAM)
{
diff --git a/archival/libarchive/header_verbose_list.c b/archival/libarchive/header_verbose_list.c
index bc4e415..87dd821 100644
--- a/archival/libarchive/header_verbose_list.c
+++ b/archival/libarchive/header_verbose_list.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC header_verbose_list(const file_header_t *file_header)
{
diff --git a/archival/libarchive/init_handle.c b/archival/libarchive/init_handle.c
index 6644ea1..cbae06a 100644
--- a/archival/libarchive/init_handle.c
+++ b/archival/libarchive/init_handle.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
archive_handle_t* FAST_FUNC init_handle(void)
{
diff --git a/archival/libarchive/open_transformer.c b/archival/libarchive/open_transformer.c
index 26ae565..dae04aa 100644
--- a/archival/libarchive/open_transformer.c
+++ b/archival/libarchive/open_transformer.c
@@ -4,16 +4,64 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
+
+void FAST_FUNC init_transformer_aux_data(transformer_aux_data_t *aux)
+{
+ memset(aux, 0, sizeof(*aux));
+}
+
+int FAST_FUNC check_signature16(transformer_aux_data_t *aux, int src_fd, unsigned magic16)
+{
+ if (aux && aux->check_signature) {
+ uint16_t magic2;
+ if (full_read(src_fd, &magic2, 2) != 2 || magic2 != magic16) {
+ bb_error_msg("invalid magic");
+#if 0 /* possible future extension */
+ if (aux->check_signature > 1)
+ xfunc_die();
+#endif
+ return -1;
+ }
+ }
+ return 0;
+}
+
+void check_errors_in_children(int signo)
+{
+ int status;
+
+ if (!signo) {
+ /* block waiting for any child */
+ if (wait(&status) < 0)
+ return; /* probably there are no children */
+ goto check_status;
+ }
+
+ /* Wait for any child without blocking */
+ for (;;) {
+ if (wait_any_nohang(&status) < 0)
+ /* wait failed?! I'm confused... */
+ return;
+ check_status:
+ if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
+ /* this child exited with 0 */
+ continue;
+ /* Cannot happen?
+ if (!WIFSIGNALED(status) && !WIFEXITED(status)) ???; */
+ bb_got_signal = 1;
+ }
+}
/* transformer(), more than meets the eye */
-/*
- * On MMU machine, the transform_prog is removed by macro magic
- * in include/archive.h. On NOMMU, transformer is removed.
- */
+#if BB_MMU
void FAST_FUNC open_transformer(int fd,
- IF_DESKTOP(long long) int FAST_FUNC (*transformer)(int src_fd, int dst_fd),
- const char *transform_prog)
+ int check_signature,
+ IF_DESKTOP(long long) int FAST_FUNC (*transformer)(transformer_aux_data_t *aux, int src_fd, int dst_fd)
+)
+#else
+void FAST_FUNC open_transformer(int fd, const char *transform_prog)
+#endif
{
struct fd_pair fd_pipe;
int pid;
@@ -25,13 +73,18 @@ void FAST_FUNC open_transformer(int fd,
close(fd_pipe.rd); /* we don't want to read from the parent */
// FIXME: error check?
#if BB_MMU
- transformer(fd, fd_pipe.wr);
- if (ENABLE_FEATURE_CLEAN_UP) {
- close(fd_pipe.wr); /* send EOF */
- close(fd);
+ {
+ transformer_aux_data_t aux;
+ init_transformer_aux_data(&aux);
+ aux.check_signature = check_signature;
+ transformer(&aux, fd, fd_pipe.wr);
+ if (ENABLE_FEATURE_CLEAN_UP) {
+ close(fd_pipe.wr); /* send EOF */
+ close(fd);
+ }
+ /* must be _exit! bug was actually seen here */
+ _exit(EXIT_SUCCESS);
}
- /* must be _exit! bug was actually seen here */
- _exit(EXIT_SUCCESS);
#else
{
char *argv[4];
@@ -52,3 +105,117 @@ void FAST_FUNC open_transformer(int fd,
close(fd_pipe.wr); /* don't want to write to the child */
xmove_fd(fd_pipe.rd, fd);
}
+
+
+#if SEAMLESS_COMPRESSION
+
+/* Used by e.g. rpm which gives us a fd without filename,
+ * thus we can't guess the format from filename's extension.
+ */
+int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_detected)
+{
+ union {
+ uint8_t b[4];
+ uint16_t b16[2];
+ uint32_t b32[1];
+ } magic;
+ int offset = -2;
+ USE_FOR_MMU(IF_DESKTOP(long long) int FAST_FUNC (*xformer)(transformer_aux_data_t *aux, int src_fd, int dst_fd);)
+ USE_FOR_NOMMU(const char *xformer_prog;)
+
+ /* .gz and .bz2 both have 2-byte signature, and their
+ * unpack_XXX_stream wants this header skipped. */
+ xread(fd, magic.b16, sizeof(magic.b16[0]));
+ if (ENABLE_FEATURE_SEAMLESS_GZ
+ && magic.b16[0] == GZIP_MAGIC
+ ) {
+ USE_FOR_MMU(xformer = unpack_gz_stream;)
+ USE_FOR_NOMMU(xformer_prog = "gunzip";)
+ goto found_magic;
+ }
+ if (ENABLE_FEATURE_SEAMLESS_BZ2
+ && magic.b16[0] == BZIP2_MAGIC
+ ) {
+ USE_FOR_MMU(xformer = unpack_bz2_stream;)
+ USE_FOR_NOMMU(xformer_prog = "bunzip2";)
+ goto found_magic;
+ }
+ if (ENABLE_FEATURE_SEAMLESS_XZ
+ && magic.b16[0] == XZ_MAGIC1
+ ) {
+ offset = -6;
+ xread(fd, magic.b32, sizeof(magic.b32[0]));
+ if (magic.b32[0] == XZ_MAGIC2) {
+ USE_FOR_MMU(xformer = unpack_xz_stream;)
+ USE_FOR_NOMMU(xformer_prog = "unxz";)
+ goto found_magic;
+ }
+ }
+
+ /* No known magic seen */
+ if (fail_if_not_detected)
+ bb_error_msg_and_die("no gzip"
+ IF_FEATURE_SEAMLESS_BZ2("/bzip2")
+ IF_FEATURE_SEAMLESS_XZ("/xz")
+ " magic");
+ xlseek(fd, offset, SEEK_CUR);
+ return 1;
+
+ found_magic:
+# if BB_MMU
+ open_transformer_with_no_sig(fd, xformer);
+# else
+ /* NOMMU version of open_transformer execs
+ * an external unzipper that wants
+ * file position at the start of the file */
+ xlseek(fd, offset, SEEK_CUR);
+ open_transformer_with_sig(fd, xformer, xformer_prog);
+# endif
+ return 0;
+}
+
+int FAST_FUNC open_zipped(const char *fname)
+{
+ char *sfx;
+ int fd;
+
+ fd = open(fname, O_RDONLY);
+ if (fd < 0)
+ return fd;
+
+ sfx = strrchr(fname, '.');
+ if (sfx) {
+ sfx++;
+ if (ENABLE_FEATURE_SEAMLESS_LZMA && strcmp(sfx, "lzma") == 0)
+ /* .lzma has no header/signature, just trust it */
+ open_transformer_with_sig(fd, unpack_lzma_stream, "unlzma");
+ else
+ if ((ENABLE_FEATURE_SEAMLESS_GZ && strcmp(sfx, "gz") == 0)
+ || (ENABLE_FEATURE_SEAMLESS_BZ2 && strcmp(sfx, "bz2") == 0)
+ || (ENABLE_FEATURE_SEAMLESS_XZ && strcmp(sfx, "xz") == 0)
+ ) {
+ setup_unzip_on_fd(fd, /*fail_if_not_detected:*/ 1);
+ }
+ }
+
+ return fd;
+}
+
+#endif /* SEAMLESS_COMPRESSION */
+
+void* FAST_FUNC xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p)
+{
+ int fd;
+ char *image;
+
+ fd = open_zipped(fname);
+ if (fd < 0)
+ return NULL;
+
+ image = xmalloc_read(fd, maxsz_p);
+ if (!image)
+ bb_perror_msg("read error from '%s'", fname);
+ close(fd);
+
+ return image;
+}
diff --git a/archival/libarchive/seek_by_jump.c b/archival/libarchive/seek_by_jump.c
index 7c2c52a..4fcd99a 100644
--- a/archival/libarchive/seek_by_jump.c
+++ b/archival/libarchive/seek_by_jump.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
void FAST_FUNC seek_by_jump(int fd, off_t amount)
{
diff --git a/archival/libarchive/seek_by_read.c b/archival/libarchive/seek_by_read.c
index ad931a8..c0fde96 100644
--- a/archival/libarchive/seek_by_read.c
+++ b/archival/libarchive/seek_by_read.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* If we are reading through a pipe, or from stdin then we can't lseek,
* we must read and discard the data to skip over it.
diff --git a/archival/libarchive/unpack_ar_archive.c b/archival/libarchive/unpack_ar_archive.c
index 18dbfd5..214d17e 100644
--- a/archival/libarchive/unpack_ar_archive.c
+++ b/archival/libarchive/unpack_ar_archive.c
@@ -4,7 +4,7 @@
*/
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#include "ar.h"
void FAST_FUNC unpack_ar_archive(archive_handle_t *ar_archive)
diff --git a/archival/lzop.c b/archival/lzop.c
index 1326bd7..fbe0841 100644
--- a/archival/lzop.c
+++ b/archival/lzop.c
@@ -51,7 +51,7 @@
//usage: "\n -F Don't store or verify checksum"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#include "liblzo_interface.h"
/* lzo-2.03/src/lzo_ptr.h */
@@ -201,7 +201,7 @@ static NOINLINE int lzo1x_optimize(uint8_t *in, unsigned in_len,
/* remove short run */
*litp &= ~3;
/* copy over the 2 literals that replace the match */
- copy2(ip-3+1,m_pos,pd(op,m_pos));
+ copy2(ip-3+1, m_pos, pd(op, m_pos));
/* move literals 1 byte ahead */
litp += 2;
if (lit > 0)
@@ -211,7 +211,8 @@ static NOINLINE int lzo1x_optimize(uint8_t *in, unsigned in_len,
*litp = (unsigned char)(lit - 3);
o_m1_b++;
- *op++ = *m_pos++; *op++ = *m_pos++;
+ *op++ = *m_pos++;
+ *op++ = *m_pos++;
goto copy_literal_run;
}
copy_m1:
@@ -240,7 +241,7 @@ static NOINLINE int lzo1x_optimize(uint8_t *in, unsigned in_len,
) {
t = *ip++;
/* copy over the 3 literals that replace the match */
- copy3(ip-1-2,m_pos,pd(op,m_pos));
+ copy3(ip-1-2, m_pos, pd(op, m_pos));
/* set new length of previous literal run */
lit += 3 + t + 3;
*litp = (unsigned char)(lit - 3);
@@ -289,7 +290,7 @@ static NOINLINE int lzo1x_optimize(uint8_t *in, unsigned in_len,
lit += 3;
*litp = (unsigned char)((*litp & ~3) | lit);
/* copy over the 3 literals that replace the match */
- copy3(ip-3,m_pos,pd(op,m_pos));
+ copy3(ip-3, m_pos, pd(op, m_pos));
o_m3_a++;
}
/* test if a literal run follows */
@@ -300,7 +301,7 @@ static NOINLINE int lzo1x_optimize(uint8_t *in, unsigned in_len,
/* remove short run */
*litp &= ~3;
/* copy over the 3 literals that replace the match */
- copy3(ip-4+1,m_pos,pd(op,m_pos));
+ copy3(ip-4+1, m_pos, pd(op, m_pos));
/* move literals 1 byte ahead */
litp += 2;
if (lit > 0)
@@ -1076,7 +1077,7 @@ static char* FAST_FUNC make_new_name_lzop(char *filename, const char *expected_e
return xasprintf("%s.lzo", filename);
}
-static IF_DESKTOP(long long) int FAST_FUNC pack_lzop(unpack_info_t *info UNUSED_PARAM)
+static IF_DESKTOP(long long) int FAST_FUNC pack_lzop(transformer_aux_data_t *aux UNUSED_PARAM)
{
if (option_mask32 & OPT_DECOMPRESS)
return do_lzo_decompress();
diff --git a/archival/rpm.c b/archival/rpm.c
index 8174f48..6757a6c 100644
--- a/archival/rpm.c
+++ b/archival/rpm.c
@@ -20,7 +20,7 @@
//usage: "\n -c List config files"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#include "rpm.h"
#define RPM_CHAR_TYPE 1
@@ -236,7 +236,7 @@ static void extract_cpio(int fd, const char *source_rpm)
archive_handle->src_fd = fd;
/*archive_handle->offset = 0; - init_handle() did it */
- setup_unzip_on_fd(archive_handle->src_fd /*, fail_if_not_detected: 1*/);
+ setup_unzip_on_fd(archive_handle->src_fd, /*fail_if_not_detected:*/ 1);
while (get_header_cpio(archive_handle) == EXIT_SUCCESS)
continue;
}
diff --git a/archival/rpm2cpio.c b/archival/rpm2cpio.c
index ff4a0d1..f3dfa51 100644
--- a/archival/rpm2cpio.c
+++ b/archival/rpm2cpio.c
@@ -13,7 +13,7 @@
//usage: "Output a cpio archive of the rpm file"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
#include "rpm.h"
enum { rpm_fd = STDIN_FILENO };
@@ -66,54 +66,22 @@ int rpm2cpio_main(int argc UNUSED_PARAM, char **argv)
/* Skip the main header */
skip_header();
-#if 0
+ //if (SEAMLESS_COMPRESSION)
+ // /* We need to know whether child (gzip/bzip/etc) exits abnormally */
+ // signal(SIGCHLD, check_errors_in_children);
+
/* This works, but doesn't report uncompress errors (they happen in child) */
- setup_unzip_on_fd(rpm_fd /*fail_if_not_detected: 1*/);
+ setup_unzip_on_fd(rpm_fd, /*fail_if_not_detected:*/ 1);
if (bb_copyfd_eof(rpm_fd, STDOUT_FILENO) < 0)
bb_error_msg_and_die("error unpacking");
-#else
- /* BLOAT */
- {
- union {
- uint8_t b[4];
- uint16_t b16[2];
- uint32_t b32[1];
- } magic;
- IF_DESKTOP(long long) int FAST_FUNC (*unpack)(int src_fd, int dst_fd);
-
- xread(rpm_fd, magic.b16, sizeof(magic.b16[0]));
- if (magic.b16[0] == GZIP_MAGIC) {
- unpack = unpack_gz_stream;
- } else
- if (ENABLE_FEATURE_SEAMLESS_BZ2
- && magic.b16[0] == BZIP2_MAGIC
- ) {
- unpack = unpack_bz2_stream;
- } else
- if (ENABLE_FEATURE_SEAMLESS_XZ
- && magic.b16[0] == XZ_MAGIC1
- ) {
- xread(rpm_fd, magic.b32, sizeof(magic.b32[0]));
- if (magic.b32[0] != XZ_MAGIC2)
- goto no_magic;
- /* unpack_xz_stream wants fd at position 6, no need to seek */
- //xlseek(rpm_fd, -6, SEEK_CUR);
- unpack = unpack_xz_stream;
- } else {
- no_magic:
- bb_error_msg_and_die("no gzip"
- IF_FEATURE_SEAMLESS_BZ2("/bzip2")
- IF_FEATURE_SEAMLESS_XZ("/xz")
- " magic");
- }
- if (unpack(rpm_fd, STDOUT_FILENO) < 0)
- bb_error_msg_and_die("error unpacking");
- }
-#endif
if (ENABLE_FEATURE_CLEAN_UP) {
close(rpm_fd);
}
- return 0;
+ if (SEAMLESS_COMPRESSION) {
+ check_errors_in_children(0);
+ return bb_got_signal;
+ }
+ return EXIT_SUCCESS;
}
diff --git a/archival/tar.c b/archival/tar.c
index 5b37c41..3aa6dce 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -44,7 +44,7 @@
#include <fnmatch.h>
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
/* FIXME: Stop using this non-standard feature */
#ifndef FNM_LEADING_DIR
# define FNM_LEADING_DIR 0
@@ -689,54 +689,6 @@ static llist_t *append_file_list_to_list(llist_t *list)
# define append_file_list_to_list(x) 0
#endif
-#if ENABLE_FEATURE_SEAMLESS_Z
-static char FAST_FUNC get_header_tar_Z(archive_handle_t *archive_handle)
-{
- /* Can't lseek over pipes */
- archive_handle->seek = seek_by_read;
-
- /* do the decompression, and cleanup */
- if (xread_char(archive_handle->src_fd) != 0x1f
- || xread_char(archive_handle->src_fd) != 0x9d
- ) {
- bb_error_msg_and_die("invalid magic");
- }
-
- open_transformer(archive_handle->src_fd, unpack_Z_stream, "uncompress");
- archive_handle->offset = 0;
- while (get_header_tar(archive_handle) == EXIT_SUCCESS)
- continue;
-
- /* Can only do one file at a time */
- return EXIT_FAILURE;
-}
-#else
-# define get_header_tar_Z NULL
-#endif
-
-#ifdef CHECK_FOR_CHILD_EXITCODE
-/* Looks like it isn't needed - tar detects malformed (truncated)
- * archive if e.g. bunzip2 fails */
-static int child_error;
-
-static void handle_SIGCHLD(int status)
-{
- /* Actually, 'status' is a signo. We reuse it for other needs */
-
- /* Wait for any child without blocking */
- if (wait_any_nohang(&status) < 0)
- /* wait failed?! I'm confused... */
- return;
-
- if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
- /* child exited with 0 */
- return;
- /* Cannot happen?
- if (!WIFSIGNALED(status) && !WIFEXITED(status)) return; */
- child_error = 1;
-}
-#endif
-
//usage:#define tar_trivial_usage
//usage: "-[" IF_FEATURE_TAR_CREATE("c") "xt"
//usage: IF_FEATURE_SEAMLESS_Z("Z")
@@ -842,6 +794,8 @@ enum {
OPT_NUMERIC_OWNER = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NUMERIC_OWNER )) + 0, // numeric-owner
OPT_NOPRESERVE_PERM = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_NOPRESERVE_PERM)) + 0, // no-same-permissions
OPT_OVERWRITE = IF_FEATURE_TAR_LONG_OPTIONS((1 << OPTBIT_OVERWRITE )) + 0, // overwrite
+
+ OPT_ANY_COMPRESS = (OPT_BZIP2 | OPT_LZMA | OPT_GZIP | OPT_COMPRESS),
};
#if ENABLE_FEATURE_TAR_LONG_OPTIONS
static const char tar_longopts[] ALIGN1 =
@@ -900,7 +854,6 @@ static const char tar_longopts[] ALIGN1 =
int tar_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int tar_main(int argc UNUSED_PARAM, char **argv)
{
- char FAST_FUNC (*get_header_ptr)(archive_handle_t *) = get_header_tar;
archive_handle_t *tar_handle;
char *base_dir = NULL;
const char *tar_filename = "-";
@@ -1016,18 +969,6 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
tar_handle->ah_flags |= ARCHIVE_O_TRUNC;
}
- if (opt & OPT_GZIP)
- get_header_ptr = get_header_tar_gz;
-
- if (opt & OPT_BZIP2)
- get_header_ptr = get_header_tar_bz2;
-
- if (opt & OPT_LZMA)
- get_header_ptr = get_header_tar_lzma;
-
- if (opt & OPT_COMPRESS)
- get_header_ptr = get_header_tar_Z;
-
if (opt & OPT_NOPRESERVE_TIME)
tar_handle->ah_flags &= ~ARCHIVE_RESTORE_DATE;
@@ -1080,7 +1021,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
} else {
if (ENABLE_FEATURE_TAR_AUTODETECT
&& flags == O_RDONLY
- && get_header_ptr == get_header_tar
+ && !(opt & OPT_ANY_COMPRESS)
) {
tar_handle->src_fd = open_zipped(tar_filename);
if (tar_handle->src_fd < 0)
@@ -1094,10 +1035,9 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
if (base_dir)
xchdir(base_dir);
-#ifdef CHECK_FOR_CHILD_EXITCODE
- /* We need to know whether child (gzip/bzip/etc) exits abnormally */
- signal(SIGCHLD, handle_SIGCHLD);
-#endif
+ //if (SEAMLESS_COMPRESSION || OPT_COMPRESS)
+ // /* We need to know whether child (gzip/bzip/etc) exits abnormally */
+ // signal(SIGCHLD, check_errors_in_children);
/* Create an archive */
if (opt & OPT_CREATE) {
@@ -1114,7 +1054,30 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
tar_handle->reject, zipMode);
}
- while (get_header_ptr(tar_handle) == EXIT_SUCCESS)
+ if (opt & OPT_ANY_COMPRESS) {
+ USE_FOR_MMU(IF_DESKTOP(long long) int FAST_FUNC (*xformer)(transformer_aux_data_t *aux, int src_fd, int dst_fd);)
+ USE_FOR_NOMMU(const char *xformer_prog;)
+
+ if (opt & OPT_COMPRESS)
+ USE_FOR_MMU(xformer = unpack_Z_stream;)
+ USE_FOR_NOMMU(xformer_prog = "uncompress";)
+ if (opt & OPT_GZIP)
+ USE_FOR_MMU(xformer = unpack_gz_stream;)
+ USE_FOR_NOMMU(xformer_prog = "gunzip";)
+ if (opt & OPT_BZIP2)
+ USE_FOR_MMU(xformer = unpack_bz2_stream;)
+ USE_FOR_NOMMU(xformer_prog = "bunzip2";)
+ if (opt & OPT_LZMA)
+ USE_FOR_MMU(xformer = unpack_lzma_stream;)
+ USE_FOR_NOMMU(xformer_prog = "unlzma";)
+
+ open_transformer_with_sig(tar_handle->src_fd, xformer, xformer_prog);
+ /* Can't lseek over pipes */
+ tar_handle->seek = seek_by_read;
+ /*tar_handle->offset = 0; - already is */
+ }
+
+ while (get_header_tar(tar_handle) == EXIT_SUCCESS)
continue;
/* Check that every file that should have been extracted was */
@@ -1130,5 +1093,9 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
if (ENABLE_FEATURE_CLEAN_UP /* && tar_handle->src_fd != STDIN_FILENO */)
close(tar_handle->src_fd);
+ if (SEAMLESS_COMPRESSION || OPT_COMPRESS) {
+ check_errors_in_children(0);
+ return bb_got_signal;
+ }
return EXIT_SUCCESS;
}
diff --git a/archival/unzip.c b/archival/unzip.c
index 4fa7293..3c76cda 100644
--- a/archival/unzip.c
+++ b/archival/unzip.c
@@ -32,7 +32,7 @@
//usage: "\n -d DIR Extract files into DIR"
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
enum {
#if BB_BIG_ENDIAN
@@ -235,7 +235,7 @@ static void unzip_create_leading_dirs(const char *fn)
/* Create all leading directories */
char *name = xstrdup(fn);
if (bb_make_directory(dirname(name), 0777, FILEUTILS_RECUR)) {
- bb_error_msg_and_die("exiting"); /* bb_make_directory is noisy */
+ xfunc_die(); /* bb_make_directory is noisy */
}
free(name);
}
@@ -249,15 +249,17 @@ static void unzip_extract(zip_header_t *zip_header, int dst_fd)
bb_copyfd_exact_size(zip_fd, dst_fd, size);
} else {
/* Method 8 - inflate */
- inflate_unzip_result res;
- if (inflate_unzip(&res, zip_header->formatted.cmpsize, zip_fd, dst_fd) < 0)
+ transformer_aux_data_t aux;
+ init_transformer_aux_data(&aux);
+ aux.bytes_in = zip_header->formatted.cmpsize;
+ if (inflate_unzip(&aux, zip_fd, dst_fd) < 0)
bb_error_msg_and_die("inflate error");
/* Validate decompression - crc */
- if (zip_header->formatted.crc32 != (res.crc ^ 0xffffffffL)) {
+ if (zip_header->formatted.crc32 != (aux.crc32 ^ 0xffffffffL)) {
bb_error_msg_and_die("crc error");
}
/* Validate decompression - size */
- if (zip_header->formatted.ucmpsize != res.bytes_out) {
+ if (zip_header->formatted.ucmpsize != aux.bytes_out) {
/* Don't die. Who knows, maybe len calculation
* was botched somewhere. After all, crc matched! */
bb_error_msg("bad length");
@@ -595,7 +597,7 @@ int unzip_main(int argc, char **argv)
}
unzip_create_leading_dirs(dst_fn);
if (bb_make_directory(dst_fn, dir_mode, 0)) {
- bb_error_msg_and_die("exiting");
+ xfunc_die();
}
} else {
if (!S_ISDIR(stat_buf.st_mode)) {
@@ -619,6 +621,7 @@ int unzip_main(int argc, char **argv)
i = 'y';
} else {
printf("replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ", dst_fn);
+ fflush_all();
if (!fgets(key_buf, sizeof(key_buf), stdin)) {
bb_perror_msg_and_die("can't read input");
}
diff --git a/busybox-full.sources b/busybox-full.sources
index 2e5e388..6d6f4c8 100644
--- a/busybox-full.sources
+++ b/busybox-full.sources
@@ -1,6 +1,6 @@
archival/bbunzip.c archival/bzip2.c archival/cpio.c archival/gzip.c archival/libarchive/lzo1x_1.c archival/libarchive/lzo1x_1o.c archival/libarchive/lzo1x_d.c archival/lzop.c archival/tar.c archival/unzip.c
-archival/libarchive/data_align.c archival/libarchive/data_extract_all.c archival/libarchive/data_extract_to_command.c archival/libarchive/data_extract_to_stdout.c archival/libarchive/data_skip.c archival/libarchive/decompress_bunzip2.c archival/libarchive/decompress_unlzma.c archival/libarchive/decompress_unxz.c archival/libarchive/decompress_unzip.c archival/libarchive/decompress_uncompress.c archival/libarchive/filter_accept_all.c archival/libarchive/filter_accept_list.c archival/libarchive/filter_accept_reject_list.c archival/libarchive/find_list_entry.c archival/libarchive/get_header_cpio.c archival/libarchive/get_header_tar.c archival/libarchive/get_header_tar_bz2.c archival/libarchive/get_header_tar_gz.c archival/libarchive/get_header_tar_lzma.c archival/libarchive/header_list.c archival/libarchive/header_skip.c archival/libarchive/header_verbose_list.c archival/libarchive/init_handle.c archival/libarchive/open_transformer.c archival/libarchive/seek_by_jump.c archival/libarchive/seek_by_read.c
+archival/libarchive/data_align.c archival/libarchive/data_extract_all.c archival/libarchive/data_extract_to_command.c archival/libarchive/data_extract_to_stdout.c archival/libarchive/data_skip.c archival/libarchive/decompress_bunzip2.c archival/libarchive/decompress_unlzma.c archival/libarchive/decompress_unxz.c archival/libarchive/decompress_gunzip.c archival/libarchive/decompress_uncompress.c archival/libarchive/filter_accept_all.c archival/libarchive/filter_accept_list.c archival/libarchive/filter_accept_reject_list.c archival/libarchive/find_list_entry.c archival/libarchive/get_header_cpio.c archival/libarchive/get_header_tar.c archival/libarchive/get_header_tar_bz2.c archival/libarchive/get_header_tar_gz.c archival/libarchive/get_header_tar_lzma.c archival/libarchive/header_list.c archival/libarchive/header_skip.c archival/libarchive/header_verbose_list.c archival/libarchive/init_handle.c archival/libarchive/open_transformer.c archival/libarchive/seek_by_jump.c archival/libarchive/seek_by_read.c
console-tools/clear.c console-tools/reset.c console-tools/resize.c console-tools/setconsole.c
@@ -17,26 +17,24 @@ findutils/find.c findutils/grep.c findutils/xargs.c
init/halt.c init/mesg.c
-libbb/appletlib.c libbb/ask_confirmation.c libbb/bb_askpass.c libbb/bb_do_delay.c libbb/bb_pwd.c libbb/bb_qsort.c libbb/bb_strtonum.c libbb/change_identity.c libbb/chomp.c libbb/compare_string_array.c libbb/concat_path_file.c libbb/concat_subpath_file.c libbb/copy_file.c libbb/copyfd.c libbb/crc32.c libbb/create_icmp6_socket.c libbb/create_icmp_socket.c libbb/default_error_retval.c libbb/device_open.c libbb/dump.c libbb/execable.c libbb/fclose_nonstdin.c libbb/fflush_stdout_and_exit.c libbb/fgets_str.c libbb/find_mount_point.c libbb/find_pid_by_name.c libbb/find_root_device.c libbb/full_write.c libbb/get_console.c libbb/get_last_path_component.c libbb/get_line_from_file.c libbb/get_volsize.c libbb/getopt32.c libbb/getpty.c libbb/herror_msg.c libbb/human_readable.c libbb/inet_common.c libbb/info_msg.c libbb/inode_hash.c libbb/isdirectory.c libbb/kernel_version.c libbb/last_char_is.c libbb/lineedit.c libbb/lineedit_ptr_hack.c libbb/llist.c libbb/login.c libbb/loop.c libbb/make_directory.c libbb/makedev.c libbb/match_fstype.c libbb/hash_md5_sha.c libbb/bb_bswap_64.c libbb/messages.c libbb/mode_string.c libbb/mtab.c libbb/parse_config.c libbb/parse_mode.c libbb/perror_msg.c libbb/perror_nomsg.c libbb/perror_nomsg_and_die.c libbb/pidfile.c libbb/platform.c libbb/print_flags.c libbb/printable.c libbb/printable_string.c libbb/process_escape_sequence.c libbb/procps.c libbb/progress.c libbb/ptr_to_globals.c libbb/read.c libbb/read_key.c libbb/read_printf.c libbb/recursive_action.c libbb/remove_file.c libbb/run_shell.c libbb/safe_gethostname.c libbb/safe_poll.c libbb/safe_strncpy.c libbb/safe_write.c libbb/setup_environment.c libbb/signals.c libbb/simplify_path.c libbb/single_argv.c libbb/skip_whitespace.c libbb/speed_table.c libbb/str_tolower.c libbb/strrstr.c libbb/time.c libbb/trim.c libbb/u_signal_names.c libbb/udp_io.c libbb/unicode.c libbb/uuencode.c libbb/vdprintf.c libbb/verror_msg.c libbb/vfork_daemon_rexec.c libbb/warn_ignoring_args.c libbb/wfopen.c libbb/wfopen_input.c libbb/write.c libbb/xatonum.c libbb/xconnect.c libbb/xfunc_die.c libbb/xfuncs.c libbb/xfuncs_printf.c libbb/xgetcwd.c libbb/xgethostbyname.c libbb/xreadlink.c libbb/xrealloc_vector.c libbb/xregcomp.c
+libbb/appletlib.c libbb/ask_confirmation.c libbb/bb_askpass.c libbb/bb_do_delay.c libbb/bb_pwd.c libbb/bb_qsort.c libbb/bb_strtonum.c libbb/change_identity.c libbb/chomp.c libbb/compare_string_array.c libbb/concat_path_file.c libbb/concat_subpath_file.c libbb/copy_file.c libbb/copyfd.c libbb/crc32.c libbb/create_icmp6_socket.c libbb/create_icmp_socket.c libbb/percent_decode.c libbb/default_error_retval.c libbb/device_open.c libbb/dump.c libbb/execable.c libbb/fclose_nonstdin.c libbb/fflush_stdout_and_exit.c libbb/fgets_str.c libbb/find_mount_point.c libbb/find_pid_by_name.c libbb/find_root_device.c libbb/full_write.c libbb/get_console.c libbb/get_last_path_component.c libbb/get_line_from_file.c libbb/get_volsize.c libbb/getopt32.c libbb/getpty.c libbb/herror_msg.c libbb/human_readable.c libbb/inet_cksum.c libbb/inet_common.c libbb/info_msg.c libbb/inode_hash.c libbb/isdirectory.c libbb/kernel_version.c libbb/last_char_is.c libbb/lineedit.c libbb/lineedit_ptr_hack.c libbb/llist.c libbb/login.c libbb/loop.c libbb/make_directory.c libbb/makedev.c libbb/match_fstype.c libbb/hash_md5_sha.c libbb/bb_bswap_64.c libbb/messages.c libbb/mode_string.c libbb/mtab.c libbb/parse_config.c libbb/parse_mode.c libbb/perror_msg.c libbb/perror_nomsg.c libbb/perror_nomsg_and_die.c libbb/pidfile.c libbb/platform.c libbb/print_flags.c libbb/printable.c libbb/printable_string.c libbb/process_escape_sequence.c libbb/procps.c libbb/progress.c libbb/ptr_to_globals.c libbb/read.c libbb/read_key.c libbb/read_printf.c libbb/recursive_action.c libbb/remove_file.c libbb/run_shell.c libbb/safe_gethostname.c libbb/safe_poll.c libbb/safe_strncpy.c libbb/safe_write.c libbb/setup_environment.c libbb/signals.c libbb/simplify_path.c libbb/single_argv.c libbb/skip_whitespace.c libbb/speed_table.c libbb/str_tolower.c libbb/strrstr.c libbb/time.c libbb/trim.c libbb/u_signal_names.c libbb/udp_io.c libbb/unicode.c libbb/uuencode.c libbb/vdprintf.c libbb/verror_msg.c libbb/vfork_daemon_rexec.c libbb/warn_ignoring_args.c libbb/wfopen.c libbb/wfopen_input.c libbb/write.c libbb/xatonum.c libbb/xconnect.c libbb/xfunc_die.c libbb/xfuncs.c libbb/xfuncs_printf.c libbb/xgetcwd.c libbb/xgethostbyname.c libbb/xreadlink.c libbb/xrealloc_vector.c libbb/xregcomp.c libbb/get_cpu_count.c libbb/get_shell_name.c
+
libpwdgrp/uidgid_get.c
-libbb/get_cpu_count.c
-libbb/get_shell_name.c
miscutils/adjtimex.c miscutils/bbconfig.c miscutils/crond.c miscutils/crontab.c miscutils/dc.c miscutils/devmem.c miscutils/less.c miscutils/man.c
-miscutils/flash_lock_unlock.c miscutils/flashcp.c miscutils/mountpoint.c miscutils/nandwrite.c
+miscutils/fbsplash.c miscutils/flash_lock_unlock.c miscutils/flashcp.c miscutils/mountpoint.c miscutils/nandwrite.c
miscutils/rx.c miscutils/setserial.c miscutils/setsid.c miscutils/strings.c miscutils/taskset.c miscutils/time.c miscutils/timeout.c miscutils/ttysize.c
modutils/modinfo.c modutils/modprobe-small.c modutils/modutils.c
modutils/lsmod.c modutils/depmod.c modutils/rmmod.c modutils/insmod.c
-networking/arp.c networking/brctl.c networking/dnsd.c networking/ifconfig.c networking/interface.c networking/ip.c networking/nc.c networking/netstat.c networking/nslookup.c networking/ntpd.c networking/ping.c networking/route.c networking/telnet.c networking/telnetd.c networking/tftp.c networking/traceroute.c networking/wget.c
-networking/libiproute/ip_parse_common_args.c networking/libiproute/ipaddress.c networking/libiproute/iplink.c networking/libiproute/iproute.c networking/libiproute/iprule.c networking/libiproute/libnetlink.c networking/libiproute/ll_addr.c networking/libiproute/ll_map.c networking/libiproute/ll_proto.c networking/libiproute/ll_types.c networking/libiproute/rt_names.c networking/libiproute/rtm_map.c networking/libiproute/utils.c
-networking/nbd-client.c
-networking/ifupdown.c networking/ftpgetput.c
+networking/arp.c networking/brctl.c networking/dnsd.c networking/ifconfig.c networking/interface.c networking/ip.c networking/nc.c networking/netstat.c networking/ntpd.c networking/ping.c networking/route.c networking/telnet.c networking/telnetd.c networking/tftp.c networking/traceroute.c networking/wget.c
+networking/libiproute/ip_parse_common_args.c networking/libiproute/ipaddress.c networking/libiproute/iplink.c networking/libiproute/iproute.c networking/libiproute/iprule.c networking/libiproute/libnetlink.c networking/libiproute/ll_addr.c networking/libiproute/ll_map.c networking/libiproute/ll_proto.c networking/libiproute/ll_types.c networking/libiproute/rt_names.c networking/libiproute/rtm_map.c networking/libiproute/utils.c networking/nbd-client.c networking/ifupdown.c networking/ftpgetput.c
+networking/nslookup.c
procps/free.c procps/fuser.c procps/kill.c procps/pgrep.c procps/pidof.c procps/ps.c procps/renice.c procps/sysctl.c procps/top.c procps/uptime.c procps/watch.c
procps/pmap.c procps/iostat.c procps/mpstat.c
-procps/pstree.c procps/pwdx.c
+procps/lsof.c procps/pstree.c procps/pwdx.c
shell/ash.c shell/ash_ptr_hack.c shell/math.c shell/random.c shell/shell_common.c
diff --git a/busybox-minimal.sources b/busybox-minimal.sources
index c17a56c..651ce63 100644
--- a/busybox-minimal.sources
+++ b/busybox-minimal.sources
@@ -1,6 +1,6 @@
archival/bbunzip.c archival/bzip2.c archival/cpio.c archival/gzip.c archival/libarchive/lzo1x_1.c archival/libarchive/lzo1x_1o.c archival/libarchive/lzo1x_d.c archival/lzop.c archival/tar.c archival/unzip.c
-archival/libarchive/data_align.c archival/libarchive/data_extract_all.c archival/libarchive/data_extract_to_stdout.c archival/libarchive/data_skip.c archival/libarchive/decompress_bunzip2.c archival/libarchive/decompress_unzip.c archival/libarchive/filter_accept_all.c archival/libarchive/filter_accept_list.c archival/libarchive/filter_accept_reject_list.c archival/libarchive/find_list_entry.c archival/libarchive/get_header_cpio.c archival/libarchive/get_header_tar.c archival/libarchive/get_header_tar_bz2.c archival/libarchive/get_header_tar_gz.c archival/libarchive/header_list.c archival/libarchive/header_skip.c archival/libarchive/header_verbose_list.c archival/libarchive/init_handle.c archival/libarchive/open_transformer.c archival/libarchive/seek_by_jump.c archival/libarchive/seek_by_read.c archival/libarchive/decompress_unlzma.c archival/libarchive/decompress_unxz.c
+archival/libarchive/data_align.c archival/libarchive/data_extract_all.c archival/libarchive/data_extract_to_stdout.c archival/libarchive/data_skip.c archival/libarchive/decompress_bunzip2.c archival/libarchive/decompress_gunzip.c archival/libarchive/filter_accept_all.c archival/libarchive/filter_accept_list.c archival/libarchive/filter_accept_reject_list.c archival/libarchive/find_list_entry.c archival/libarchive/get_header_cpio.c archival/libarchive/get_header_tar.c archival/libarchive/get_header_tar_bz2.c archival/libarchive/get_header_tar_gz.c archival/libarchive/header_list.c archival/libarchive/header_skip.c archival/libarchive/header_verbose_list.c archival/libarchive/init_handle.c archival/libarchive/open_transformer.c archival/libarchive/seek_by_jump.c archival/libarchive/seek_by_read.c archival/libarchive/decompress_unlzma.c archival/libarchive/decompress_unxz.c
console-tools/clear.c console-tools/reset.c console-tools/resize.c console-tools/setconsole.c
@@ -16,16 +16,12 @@ findutils/find.c findutils/grep.c findutils/xargs.c
libbb/appletlib.c libbb/ask_confirmation.c libbb/bb_askpass.c libbb/bb_do_delay.c libbb/bb_pwd.c libbb/bb_qsort.c libbb/bb_strtonum.c libbb/change_identity.c libbb/chomp.c libbb/compare_string_array.c libbb/concat_path_file.c libbb/concat_subpath_file.c libbb/copy_file.c libbb/copyfd.c libbb/crc32.c libbb/create_icmp6_socket.c libbb/create_icmp_socket.c libbb/default_error_retval.c libbb/device_open.c libbb/dump.c libbb/execable.c libbb/fclose_nonstdin.c libbb/fflush_stdout_and_exit.c libbb/fgets_str.c libbb/find_mount_point.c libbb/find_pid_by_name.c libbb/find_root_device.c libbb/full_write.c libbb/get_console.c libbb/get_last_path_component.c libbb/get_line_from_file.c libbb/get_shell_name.c libbb/get_volsize.c libbb/getopt32.c libbb/getpty.c libbb/herror_msg.c libbb/human_readable.c libbb/inet_common.c libbb/info_msg.c libbb/inode_hash.c libbb/isdirectory.c libbb/kernel_version.c libbb/last_char_is.c libbb/lineedit.c libbb/lineedit_ptr_hack.c libbb/llist.c libbb/login.c libbb/loop.c libbb/make_directory.c libbb/makedev.c libbb/match_fstype.c libbb/hash_md5_sha.c libbb/bb_bswap_64.c libbb/messages.c libbb/mode_string.c libbb/mtab.c libbb/parse_config.c libbb/parse_mode.c libbb/perror_msg.c libbb/perror_nomsg.c libbb/perror_nomsg_and_die.c libbb/pidfile.c libbb/platform.c libbb/print_flags.c libbb/printable.c libbb/printable_string.c libbb/process_escape_sequence.c libbb/procps.c libbb/progress.c libbb/ptr_to_globals.c libbb/read.c libbb/read_key.c libbb/read_printf.c libbb/recursive_action.c libbb/remove_file.c libbb/run_shell.c libbb/safe_gethostname.c libbb/safe_poll.c libbb/safe_strncpy.c libbb/safe_write.c libbb/setup_environment.c libbb/signals.c libbb/simplify_path.c libbb/single_argv.c libbb/skip_whitespace.c libbb/speed_table.c libbb/str_tolower.c libbb/strrstr.c libbb/time.c libbb/trim.c libbb/u_signal_names.c libbb/udp_io.c libbb/uuencode.c libbb/vdprintf.c libbb/verror_msg.c libbb/vfork_daemon_rexec.c libbb/warn_ignoring_args.c libbb/wfopen.c libbb/wfopen_input.c libbb/write.c libbb/xatonum.c libbb/xconnect.c libbb/xfunc_die.c libbb/xfuncs.c libbb/xfuncs_printf.c libbb/xgetcwd.c libbb/xgethostbyname.c libbb/xreadlink.c libbb/xrealloc_vector.c libbb/xregcomp.c libbb/unicode.c
libpwdgrp/uidgid_get.c
-
miscutils/bbconfig.c miscutils/dc.c miscutils/devmem.c miscutils/less.c miscutils/makedevs.c miscutils/mountpoint.c miscutils/nandwrite.c
miscutils/setserial.c miscutils/setsid.c miscutils/strings.c miscutils/time.c miscutils/ttysize.c
modutils/modinfo.c modutils/modprobe-small.c modutils/modutils.c
-
-
-
-procps/free.c procps/fuser.c procps/kill.c procps/pgrep.c procps/pidof.c procps/ps.c procps/pstree.c procps/renice.c procps/sysctl.c procps/top.c procps/uptime.c procps/watch.c
-
+procps/free.c procps/fuser.c procps/kill.c procps/lsof.c procps/pgrep.c procps/pidof.c procps/ps.c procps/pstree.c
+procps/renice.c procps/sysctl.c procps/top.c procps/uptime.c procps/watch.c
shell/ash.c shell/ash_ptr_hack.c shell/math.c shell/random.c shell/shell_common.c
diff --git a/configs/TEST_nommu_defconfig b/configs/TEST_nommu_defconfig
index 905f652..15e12b1 100644
--- a/configs/TEST_nommu_defconfig
+++ b/configs/TEST_nommu_defconfig
@@ -79,7 +79,7 @@ CONFIG_PREFIX="./_install"
# Busybox Library Tuning
#
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
CONFIG_FEATURE_FAST_TOP=y
CONFIG_FEATURE_ETC_NETWORKS=y
CONFIG_FEATURE_EDITING=y
diff --git a/configs/TEST_noprintf_defconfig b/configs/TEST_noprintf_defconfig
index b72e128..f4338df 100644
--- a/configs/TEST_noprintf_defconfig
+++ b/configs/TEST_noprintf_defconfig
@@ -89,7 +89,7 @@ CONFIG_PREFIX="./_install"
# Busybox Library Tuning
#
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_EDITING=y
diff --git a/configs/TEST_rh9_defconfig b/configs/TEST_rh9_defconfig
index 23094e3..193d8f6 100644
--- a/configs/TEST_rh9_defconfig
+++ b/configs/TEST_rh9_defconfig
@@ -88,7 +88,7 @@ CONFIG_PREFIX="./_install"
# Busybox Library Tuning
#
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_EDITING=y
diff --git a/configs/android2_defconfig b/configs/android2_defconfig
new file mode 100644
index 0000000..b5166e0
--- a/dev/null
+++ b/configs/android2_defconfig
@@ -0,0 +1,997 @@
+# Run "make android2_defconfig", then "make".
+#
+# Tested with the standalone toolchain from ndk r6:
+# android-ndk-r6/build/tools/make-standalone-toolchain.sh --platform=android-8
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_DESKTOP is not set
+# CONFIG_EXTRA_COMPAT is not set
+# CONFIG_INCLUDE_SUSv2 is not set
+# CONFIG_USE_PORTABLE_CODE is not set
+CONFIG_PLATFORM_LINUX=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+# CONFIG_SHOW_USAGE is not set
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_INSTALL_NO_USR is not set
+# CONFIG_LOCALE_SUPPORT is not set
+# CONFIG_UNICODE_SUPPORT is not set
+# CONFIG_UNICODE_USING_LOCALE is not set
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
+CONFIG_SUBST_WCHAR=0
+CONFIG_LAST_SUPPORTED_WCHAR=0
+# CONFIG_UNICODE_COMBINING_WCHARS is not set
+# CONFIG_UNICODE_WIDE_WCHARS is not set
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
+# CONFIG_UNICODE_PRESERVE_BROKEN is not set
+# CONFIG_LONG_OPTS is not set
+# CONFIG_FEATURE_DEVPTS is not set
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_UTMP is not set
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_FEATURE_PIDFILE is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+CONFIG_FEATURE_SYSLOG=y
+# CONFIG_FEATURE_HAVE_RPC is not set
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+# CONFIG_LFS is not set
+CONFIG_CROSS_COMPILER_PREFIX="arm-linux-androideabi-"
+CONFIG_EXTRA_CFLAGS=""
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+
+#
+# Installation Options ("make install" behavior)
+#
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+# CONFIG_FEATURE_SYSTEMD is not set
+# CONFIG_FEATURE_RTMINMAX is not set
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SMALL=1
+# CONFIG_FEATURE_FAST_TOP is not set
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+CONFIG_FEATURE_USE_TERMIOS=y
+# CONFIG_FEATURE_EDITING is not set
+CONFIG_FEATURE_EDITING_MAX_LEN=0
+# CONFIG_FEATURE_EDITING_VI is not set
+CONFIG_FEATURE_EDITING_HISTORY=0
+# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
+# CONFIG_FEATURE_TAB_COMPLETION is not set
+# CONFIG_FEATURE_USERNAME_COMPLETION is not set
+# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set
+# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
+# CONFIG_FEATURE_NON_POSIX_CP is not set
+# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
+CONFIG_FEATURE_COPYBUF_KB=4
+# CONFIG_FEATURE_SKIP_ROOTFS is not set
+# CONFIG_MONOTONIC_SYSCALL is not set
+# CONFIG_IOCTL_HEX2STR_ERROR is not set
+# CONFIG_FEATURE_HWIB is not set
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_FEATURE_SEAMLESS_XZ=y
+CONFIG_FEATURE_SEAMLESS_LZMA=y
+CONFIG_FEATURE_SEAMLESS_BZ2=y
+CONFIG_FEATURE_SEAMLESS_GZ=y
+CONFIG_FEATURE_SEAMLESS_Z=y
+CONFIG_AR=y
+CONFIG_FEATURE_AR_LONG_FILENAMES=y
+CONFIG_FEATURE_AR_CREATE=y
+CONFIG_BUNZIP2=y
+CONFIG_BZIP2=y
+CONFIG_CPIO=y
+CONFIG_FEATURE_CPIO_O=y
+CONFIG_FEATURE_CPIO_P=y
+CONFIG_DPKG=y
+CONFIG_DPKG_DEB=y
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+CONFIG_GZIP=y
+# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
+CONFIG_LZOP=y
+CONFIG_LZOP_COMPR_HIGH=y
+CONFIG_RPM2CPIO=y
+CONFIG_RPM=y
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_FEATURE_TAR_TO_COMMAND is not set
+CONFIG_FEATURE_TAR_UNAME_GNAME=y
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
+# CONFIG_FEATURE_TAR_SELINUX is not set
+CONFIG_UNCOMPRESS=y
+CONFIG_UNLZMA=y
+CONFIG_FEATURE_LZMA_FAST=y
+CONFIG_LZMA=y
+CONFIG_UNXZ=y
+CONFIG_XZ=y
+CONFIG_UNZIP=y
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+CONFIG_CAT=y
+# CONFIG_DATE is not set
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+# CONFIG_FEATURE_DATE_NANO is not set
+# CONFIG_FEATURE_DATE_COMPAT is not set
+# CONFIG_ID is not set
+# CONFIG_GROUPS is not set
+CONFIG_TEST=y
+CONFIG_FEATURE_TEST_64=y
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+CONFIG_FEATURE_TR_EQUIV=y
+CONFIG_BASE64=y
+CONFIG_CAL=y
+CONFIG_CATV=y
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
+CONFIG_CHROOT=y
+CONFIG_CKSUM=y
+CONFIG_COMM=y
+CONFIG_CP=y
+# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
+CONFIG_CUT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
+CONFIG_FEATURE_DD_IBS_OBS=y
+# CONFIG_DF is not set
+# CONFIG_FEATURE_DF_FANCY is not set
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+# CONFIG_ENV is not set
+# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
+CONFIG_EXPAND=y
+# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
+# CONFIG_EXPR is not set
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+CONFIG_FOLD=y
+# CONFIG_FSYNC is not set
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+# CONFIG_HOSTID is not set
+CONFIG_INSTALL=y
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+CONFIG_LN=y
+# CONFIG_LOGNAME is not set
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+# CONFIG_FEATURE_LS_COLOR is not set
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+CONFIG_OD=y
+CONFIG_PRINTENV=y
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+CONFIG_SEQ=y
+CONFIG_SHA1SUM=y
+CONFIG_SHA256SUM=y
+CONFIG_SHA512SUM=y
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_FEATURE_FLOAT_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+CONFIG_SPLIT=y
+CONFIG_FEATURE_SPLIT_FANCY=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+CONFIG_SUM=y
+CONFIG_SYNC=y
+CONFIG_TAC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TRUE=y
+# CONFIG_TTY is not set
+CONFIG_UNAME=y
+CONFIG_UNEXPAND=y
+# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNIQ=y
+# CONFIG_USLEEP is not set
+CONFIG_UUDECODE=y
+CONFIG_UUENCODE=y
+CONFIG_WC=y
+CONFIG_FEATURE_WC_LARGE=y
+# CONFIG_WHO is not set
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum, sha256sum, sha512sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_FGCONSOLE=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+# CONFIG_KBD_MODE is not set
+# CONFIG_LOADFONT is not set
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_RESIZE=y
+CONFIG_FEATURE_RESIZE_PRINT=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETFONT is not set
+# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
+CONFIG_DEFAULT_SETFONT_DIR=""
+CONFIG_SETKEYCODES=y
+CONFIG_SETLOGCONS=y
+CONFIG_SHOWKEY=y
+# CONFIG_FEATURE_LOADFONT_PSF2 is not set
+# CONFIG_FEATURE_LOADFONT_RAW is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+CONFIG_PIPE_PROGRESS=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_FEATURE_RUN_PARTS_FANCY=y
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_PATCH=y
+# CONFIG_VI is not set
+CONFIG_FEATURE_VI_MAX_LEN=0
+# CONFIG_FEATURE_VI_8BIT is not set
+# CONFIG_FEATURE_VI_COLON is not set
+# CONFIG_FEATURE_VI_YANKMARK is not set
+# CONFIG_FEATURE_VI_SEARCH is not set
+# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
+# CONFIG_FEATURE_VI_USE_SIGNALS is not set
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+# CONFIG_FEATURE_VI_WIN_RESIZE is not set
+# CONFIG_FEATURE_VI_ASK_TERMINAL is not set
+# CONFIG_FEATURE_VI_OPTIMIZE_CURSOR is not set
+# CONFIG_AWK is not set
+# CONFIG_FEATURE_AWK_LIBM is not set
+CONFIG_CMP=y
+CONFIG_DIFF=y
+# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_ED is not set
+# CONFIG_SED is not set
+# CONFIG_FEATURE_ALLOW_EXEC is not set
+
+#
+# Finding Utilities
+#
+# CONFIG_FIND is not set
+# CONFIG_FEATURE_FIND_PRINT0 is not set
+# CONFIG_FEATURE_FIND_MTIME is not set
+# CONFIG_FEATURE_FIND_MMIN is not set
+# CONFIG_FEATURE_FIND_PERM is not set
+# CONFIG_FEATURE_FIND_TYPE is not set
+# CONFIG_FEATURE_FIND_XDEV is not set
+# CONFIG_FEATURE_FIND_MAXDEPTH is not set
+# CONFIG_FEATURE_FIND_NEWER is not set
+# CONFIG_FEATURE_FIND_INUM is not set
+# CONFIG_FEATURE_FIND_EXEC is not set
+# CONFIG_FEATURE_FIND_USER is not set
+# CONFIG_FEATURE_FIND_GROUP is not set
+# CONFIG_FEATURE_FIND_NOT is not set
+# CONFIG_FEATURE_FIND_DEPTH is not set
+# CONFIG_FEATURE_FIND_PAREN is not set
+# CONFIG_FEATURE_FIND_SIZE is not set
+# CONFIG_FEATURE_FIND_PRUNE is not set
+# CONFIG_FEATURE_FIND_DELETE is not set
+# CONFIG_FEATURE_FIND_PATH is not set
+# CONFIG_FEATURE_FIND_REGEX is not set
+# CONFIG_FEATURE_FIND_CONTEXT is not set
+# CONFIG_FEATURE_FIND_LINKS is not set
+# CONFIG_GREP is not set
+# CONFIG_FEATURE_GREP_EGREP_ALIAS is not set
+# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set
+# CONFIG_FEATURE_GREP_CONTEXT is not set
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+# CONFIG_BOOTCHARTD is not set
+# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
+# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
+CONFIG_HALT=y
+# CONFIG_FEATURE_CALL_TELINIT is not set
+CONFIG_TELINIT_PATH=""
+CONFIG_INIT=y
+CONFIG_FEATURE_USE_INITTAB=y
+# CONFIG_FEATURE_KILL_REMOVED is not set
+CONFIG_FEATURE_KILL_DELAY=0
+CONFIG_FEATURE_INIT_SCTTY=y
+CONFIG_FEATURE_INIT_SYSLOG=y
+CONFIG_FEATURE_EXTRA_QUIET=y
+CONFIG_FEATURE_INIT_COREDUMPS=y
+CONFIG_FEATURE_INITRD=y
+CONFIG_INIT_TERMINAL_TYPE="linux"
+CONFIG_MESG=y
+CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_ADD_SHELL is not set
+# CONFIG_REMOVE_SHELL is not set
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_CRYPT is not set
+# CONFIG_USE_BB_CRYPT_SHA is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
+# CONFIG_FEATURE_CHECK_NAMES is not set
+CONFIG_FIRST_SYSTEM_ID=0
+CONFIG_LAST_SYSTEM_ID=0
+# CONFIG_ADDGROUP is not set
+# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
+# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
+# CONFIG_DELUSER is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
+# CONFIG_GETTY is not set
+# CONFIG_LOGIN is not set
+# CONFIG_PAM is not set
+# CONFIG_LOGIN_SCRIPTS is not set
+# CONFIG_FEATURE_NOLOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
+# CONFIG_CRYPTPW is not set
+# CONFIG_CHPASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_FEATURE_SU_SYSLOG is not set
+# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+# CONFIG_FSCK is not set
+CONFIG_LSATTR=y
+CONFIG_TUNE2FS=y
+
+#
+# Linux Module Utilities
+#
+CONFIG_MODINFO=y
+CONFIG_MODPROBE_SMALL=y
+CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
+CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
+# CONFIG_INSMOD is not set
+# CONFIG_RMMOD is not set
+# CONFIG_LSMOD is not set
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+# CONFIG_MODPROBE is not set
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+# CONFIG_DEPMOD is not set
+
+#
+# Options common to multiple modutils
+#
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
+# CONFIG_FEATURE_MODUTILS_ALIAS is not set
+# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+
+#
+# Linux System Utilities
+#
+CONFIG_BLOCKDEV=y
+CONFIG_REV=y
+# CONFIG_ACPID is not set
+# CONFIG_FEATURE_ACPID_COMPAT is not set
+CONFIG_BLKID=y
+# CONFIG_FEATURE_BLKID_TYPE is not set
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+CONFIG_FDFLUSH=y
+CONFIG_FDFORMAT=y
+CONFIG_FDISK=y
+CONFIG_FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_GPT_LABEL is not set
+CONFIG_FEATURE_FDISK_ADVANCED=y
+CONFIG_FINDFS=y
+CONFIG_FLOCK=y
+CONFIG_FREERAMDISK=y
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_EXT2 is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+# CONFIG_MKFS_REISER is not set
+# CONFIG_MKFS_VFAT is not set
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
+CONFIG_HEXDUMP=y
+CONFIG_FEATURE_HEXDUMP_REVERSE=y
+CONFIG_HD=y
+# CONFIG_HWCLOCK is not set
+# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
+# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_RENAME is not set
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
+CONFIG_MKSWAP=y
+CONFIG_FEATURE_MKSWAP_UUID=y
+CONFIG_MORE=y
+# CONFIG_MOUNT is not set
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+# CONFIG_FEATURE_MOUNT_HELPERS is not set
+# CONFIG_FEATURE_MOUNT_LABEL is not set
+# CONFIG_FEATURE_MOUNT_NFS is not set
+# CONFIG_FEATURE_MOUNT_CIFS is not set
+# CONFIG_FEATURE_MOUNT_FLAGS is not set
+# CONFIG_FEATURE_MOUNT_FSTAB is not set
+# CONFIG_PIVOT_ROOT is not set
+# CONFIG_RDATE is not set
+CONFIG_RDEV=y
+CONFIG_READPROFILE=y
+CONFIG_RTCWAKE=y
+CONFIG_SCRIPT=y
+CONFIG_SCRIPTREPLAY=y
+# CONFIG_SETARCH is not set
+# CONFIG_SWAPONOFF is not set
+# CONFIG_FEATURE_SWAPON_PRI is not set
+# CONFIG_SWITCH_ROOT is not set
+# CONFIG_UMOUNT is not set
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+# CONFIG_FEATURE_MOUNT_LOOP is not set
+# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+CONFIG_VOLUMEID=y
+
+#
+# Filesystem/Volume identification
+#
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
+CONFIG_FEATURE_VOLUMEID_REISERFS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
+CONFIG_FEATURE_VOLUMEID_HFS=y
+CONFIG_FEATURE_VOLUMEID_JFS=y
+CONFIG_FEATURE_VOLUMEID_XFS=y
+CONFIG_FEATURE_VOLUMEID_NTFS=y
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
+CONFIG_FEATURE_VOLUMEID_UDF=y
+CONFIG_FEATURE_VOLUMEID_LUKS=y
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+CONFIG_FEATURE_VOLUMEID_CRAMFS=y
+CONFIG_FEATURE_VOLUMEID_ROMFS=y
+CONFIG_FEATURE_VOLUMEID_SYSV=y
+CONFIG_FEATURE_VOLUMEID_OCFS2=y
+CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_CONSPY is not set
+# CONFIG_NANDWRITE is not set
+CONFIG_NANDDUMP=y
+CONFIG_SETSERIAL=y
+# CONFIG_UBIATTACH is not set
+# CONFIG_UBIDETACH is not set
+# CONFIG_UBIMKVOL is not set
+# CONFIG_UBIRMVOL is not set
+# CONFIG_UBIRSVOL is not set
+# CONFIG_UBIUPDATEVOL is not set
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
+CONFIG_BEEP=y
+CONFIG_FEATURE_BEEP_FREQ=4000
+CONFIG_FEATURE_BEEP_LENGTH_MS=30
+CONFIG_CHAT=y
+CONFIG_FEATURE_CHAT_NOFAIL=y
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
+CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
+CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
+CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
+CONFIG_FEATURE_CHAT_CLR_ABORT=y
+CONFIG_CHRT=y
+# CONFIG_CROND is not set
+# CONFIG_FEATURE_CROND_D is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+CONFIG_FEATURE_CROND_DIR=""
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+CONFIG_FEATURE_DC_LIBM=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+CONFIG_DEVMEM=y
+# CONFIG_EJECT is not set
+# CONFIG_FEATURE_EJECT_SCSI is not set
+CONFIG_FBSPLASH=y
+CONFIG_FLASHCP=y
+CONFIG_FLASH_LOCK=y
+CONFIG_FLASH_UNLOCK=y
+# CONFIG_FLASH_ERASEALL is not set
+# CONFIG_IONICE is not set
+CONFIG_INOTIFYD=y
+# CONFIG_LAST is not set
+# CONFIG_FEATURE_LAST_SMALL is not set
+# CONFIG_FEATURE_LAST_FANCY is not set
+# CONFIG_LESS is not set
+CONFIG_FEATURE_LESS_MAXLINES=0
+# CONFIG_FEATURE_LESS_BRACKETS is not set
+# CONFIG_FEATURE_LESS_FLAGS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_FEATURE_LESS_WINCH is not set
+# CONFIG_FEATURE_LESS_DASHCMD is not set
+# CONFIG_FEATURE_LESS_LINENUMS is not set
+CONFIG_HDPARM=y
+CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
+CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y
+CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
+CONFIG_MAKEDEVS=y
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+CONFIG_MAN=y
+# CONFIG_MICROCOM is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+CONFIG_RAIDAUTORUN=y
+# CONFIG_READAHEAD is not set
+# CONFIG_RFKILL is not set
+# CONFIG_RUNLEVEL is not set
+CONFIG_RX=y
+CONFIG_SETSID=y
+CONFIG_STRINGS=y
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_TIME=y
+CONFIG_TIMEOUT=y
+CONFIG_TTYSIZE=y
+CONFIG_VOLNAME=y
+# CONFIG_WALL is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+# CONFIG_NAMEIF is not set
+# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
+CONFIG_NBDCLIENT=y
+CONFIG_NC=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+# CONFIG_NC_110_COMPAT is not set
+# CONFIG_PING is not set
+# CONFIG_PING6 is not set
+# CONFIG_FEATURE_FANCY_PING is not set
+CONFIG_WHOIS=y
+# CONFIG_FEATURE_IPV6 is not set
+# CONFIG_FEATURE_UNIX_LOCAL is not set
+# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+CONFIG_ARP=y
+# CONFIG_ARPING is not set
+# CONFIG_BRCTL is not set
+# CONFIG_FEATURE_BRCTL_FANCY is not set
+# CONFIG_FEATURE_BRCTL_SHOW is not set
+CONFIG_DNSD=y
+# CONFIG_ETHER_WAKE is not set
+CONFIG_FAKEIDENTD=y
+CONFIG_FTPD=y
+CONFIG_FEATURE_FTP_WRITE=y
+CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
+CONFIG_FTPGET=y
+CONFIG_FTPPUT=y
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+# CONFIG_HOSTNAME is not set
+CONFIG_HTTPD=y
+CONFIG_FEATURE_HTTPD_RANGES=y
+CONFIG_FEATURE_HTTPD_USE_SENDFILE=y
+CONFIG_FEATURE_HTTPD_SETUID=y
+CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+CONFIG_FEATURE_HTTPD_CGI=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
+CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
+CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
+CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
+CONFIG_FEATURE_HTTPD_PROXY=y
+CONFIG_FEATURE_HTTPD_GZIP=y
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
+CONFIG_FEATURE_IFCONFIG_HW=y
+CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
+# CONFIG_IFENSLAVE is not set
+# CONFIG_IFPLUGD is not set
+CONFIG_IFUPDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+CONFIG_FEATURE_IFUPDOWN_IP=y
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+CONFIG_FEATURE_IP_RULE=y
+CONFIG_FEATURE_IP_SHORT_FORMS=y
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
+CONFIG_IPADDR=y
+CONFIG_IPLINK=y
+CONFIG_IPROUTE=y
+CONFIG_IPTUNNEL=y
+CONFIG_IPRULE=y
+CONFIG_IPCALC=y
+CONFIG_FEATURE_IPCALC_FANCY=y
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+CONFIG_NETSTAT=y
+CONFIG_FEATURE_NETSTAT_WIDE=y
+CONFIG_FEATURE_NETSTAT_PRG=y
+# CONFIG_NSLOOKUP is not set
+# CONFIG_NTPD is not set
+# CONFIG_FEATURE_NTPD_SERVER is not set
+CONFIG_PSCAN=y
+CONFIG_ROUTE=y
+# CONFIG_SLATTACH is not set
+CONFIG_TCPSVD=y
+# CONFIG_TELNET is not set
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
+# CONFIG_TFTP is not set
+# CONFIG_TFTPD is not set
+# CONFIG_FEATURE_TFTP_GET is not set
+# CONFIG_FEATURE_TFTP_PUT is not set
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
+# CONFIG_TFTP_DEBUG is not set
+# CONFIG_TRACEROUTE is not set
+# CONFIG_TRACEROUTE6 is not set
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+CONFIG_TUNCTL=y
+CONFIG_FEATURE_TUNCTL_UG=y
+# CONFIG_UDHCPD is not set
+# CONFIG_DHCPRELAY is not set
+# CONFIG_DUMPLEASES is not set
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
+CONFIG_DHCPD_LEASES_FILE=""
+CONFIG_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+# CONFIG_FEATURE_UDHCP_PORT is not set
+CONFIG_UDHCP_DEBUG=9
+CONFIG_FEATURE_UDHCP_RFC3397=y
+CONFIG_FEATURE_UDHCP_8021Q=y
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
+# CONFIG_UDPSVD is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
+CONFIG_FEATURE_WGET_TIMEOUT=y
+# CONFIG_ZCIP is not set
+
+#
+# Print Utilities
+#
+CONFIG_LPD=y
+CONFIG_LPR=y
+CONFIG_LPQ=y
+
+#
+# Mail Utilities
+#
+CONFIG_MAKEMIME=y
+CONFIG_FEATURE_MIME_CHARSET="us-ascii"
+CONFIG_POPMAILDIR=y
+CONFIG_FEATURE_POPMAILDIR_DELIVERY=y
+CONFIG_REFORMIME=y
+CONFIG_FEATURE_REFORMIME_COMPAT=y
+CONFIG_SENDMAIL=y
+
+#
+# Process Utilities
+#
+CONFIG_IOSTAT=y
+CONFIG_MPSTAT=y
+CONFIG_NMETER=y
+CONFIG_PMAP=y
+CONFIG_POWERTOP=y
+CONFIG_PSTREE=y
+CONFIG_PWDX=y
+CONFIG_SMEMCAP=y
+# CONFIG_FREE is not set
+CONFIG_FUSER=y
+# CONFIG_KILL is not set
+# CONFIG_KILLALL is not set
+# CONFIG_KILLALL5 is not set
+# CONFIG_PGREP is not set
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+# CONFIG_PKILL is not set
+# CONFIG_PS is not set
+# CONFIG_FEATURE_PS_WIDE is not set
+# CONFIG_FEATURE_PS_TIME is not set
+# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+CONFIG_FEATURE_TOP_SMP_CPU=y
+CONFIG_FEATURE_TOP_DECIMALS=y
+CONFIG_FEATURE_TOP_SMP_PROCESS=y
+CONFIG_FEATURE_TOPMEM=y
+CONFIG_FEATURE_SHOW_THREADS=y
+# CONFIG_UPTIME is not set
+CONFIG_WATCH=y
+
+#
+# Runit Utilities
+#
+CONFIG_RUNSV=y
+CONFIG_RUNSVDIR=y
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
+CONFIG_SV=y
+CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service"
+CONFIG_SVLOGD=y
+CONFIG_CHPST=y
+CONFIG_SETUIDGID=y
+CONFIG_ENVUIDGID=y
+CONFIG_ENVDIR=y
+CONFIG_SOFTLIMIT=y
+# CONFIG_CHCON is not set
+# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RESTORECON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SETENFORCE is not set
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_SETSEBOOL is not set
+# CONFIG_SESTATUS is not set
+
+#
+# Shells
+#
+# CONFIG_ASH is not set
+# CONFIG_ASH_BASH_COMPAT is not set
+# CONFIG_ASH_IDLE_TIMEOUT is not set
+# CONFIG_ASH_JOB_CONTROL is not set
+# CONFIG_ASH_ALIAS is not set
+# CONFIG_ASH_GETOPTS is not set
+# CONFIG_ASH_BUILTIN_ECHO is not set
+# CONFIG_ASH_BUILTIN_PRINTF is not set
+# CONFIG_ASH_BUILTIN_TEST is not set
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+# CONFIG_ASH_EXPAND_PRMT is not set
+CONFIG_CTTYHACK=y
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_BASH_COMPAT is not set
+# CONFIG_HUSH_BRACE_EXPANSION is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_SAVEHISTORY is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS is not set
+# CONFIG_HUSH_CASE is not set
+# CONFIG_HUSH_FUNCTIONS is not set
+# CONFIG_HUSH_LOCAL is not set
+# CONFIG_HUSH_RANDOM_SUPPORT is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_HUSH_MODE_X is not set
+# CONFIG_MSH is not set
+# CONFIG_FEATURE_SH_IS_ASH is not set
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+CONFIG_FEATURE_SH_IS_NONE=y
+# CONFIG_FEATURE_BASH_IS_ASH is not set
+# CONFIG_FEATURE_BASH_IS_HUSH is not set
+CONFIG_FEATURE_BASH_IS_NONE=y
+# CONFIG_SH_MATH_SUPPORT is not set
+# CONFIG_SH_MATH_SUPPORT_64 is not set
+# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
+# CONFIG_FEATURE_SH_STANDALONE is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+# CONFIG_FEATURE_SH_HISTFILESIZE is not set
+
+#
+# System Logging Utilities
+#
+# CONFIG_SYSLOGD is not set
+# CONFIG_FEATURE_ROTATE_LOGFILE is not set
+# CONFIG_FEATURE_REMOTE_LOG is not set
+# CONFIG_FEATURE_SYSLOGD_DUP is not set
+# CONFIG_FEATURE_SYSLOGD_CFG is not set
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
+# CONFIG_FEATURE_IPC_SYSLOG is not set
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
+# CONFIG_LOGREAD is not set
+# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
+CONFIG_KLOGD=y
+CONFIG_FEATURE_KLOGD_KLOGCTL=y
+# CONFIG_LOGGER is not set
diff --git a/configs/android_defconfig b/configs/android_defconfig
index 7e5232a..a9a8d5e 100644
--- a/configs/android_defconfig
+++ b/configs/android_defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Busybox version: 1.19.0.git
-# Wed Jun 29 12:01:57 2011
+# Busybox version: 1.20.0.git
+# Sun Nov 6 07:51:38 2011
#
CONFIG_HAVE_DOT_CONFIG=y
@@ -12,7 +12,7 @@ CONFIG_HAVE_DOT_CONFIG=y
#
# General Configuration
#
-# CONFIG_DESKTOP is not set
+CONFIG_DESKTOP=y
# CONFIG_EXTRA_COMPAT is not set
# CONFIG_INCLUDE_SUSv2 is not set
# CONFIG_USE_PORTABLE_CODE is not set
@@ -70,6 +70,8 @@ CONFIG_CROSS_COMPILER_PREFIX="arm-eabi-"
# -Werror=sequence-point -Wstrict-aliasing=2 -Wno-undef -Wno-shadow
# bbox already adds these:
# -ffunction-sections -fomit-frame-pointer
+# enabled implicitly by -Os:
+# -frerun-cse-after-loop
# should be not needed, or even increases code size:
# -finline-functions -fno-inline-functions-called-once -finline-limit=64
# -fstack-protector -fno-strict-aliasing -fno-exceptions -funwind-tables
@@ -77,9 +79,8 @@ CONFIG_CROSS_COMPILER_PREFIX="arm-eabi-"
# todo: do we need these? -
# -fno-short-enums
# -fgcse-after-reload
-# -frerun-cse-after-loop
# -frename-registers
-CONFIG_EXTRA_CFLAGS="-I$A/system/core/include -I$A/bionic/libc/arch-arm/include -I$A/bionic/libc/include -I$A/bionic/libc/kernel/common -I$A/bionic/libc/kernel/arch-arm -I$A/bionic/libm/include -I$A/bionic/libm/include/arch/arm -include $A/system/core/include/arch/linux-arm/AndroidConfig.h -I$A/system/core/include/arch/linux-arm/ -DANDROID -DSK_RELEASE -nostdlib -march=armv7-a -msoft-float -mfloat-abi=softfp -mfpu=neon -mthumb -mthumb-interwork -fpic -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
+CONFIG_EXTRA_CFLAGS="-I$A/system/core/include -I$A/bionic/libc/arch-arm/include -I$A/bionic/libc/include -I$A/bionic/libc/kernel/common -I$A/bionic/libc/kernel/arch-arm -I$A/bionic/libm/include -I$A/bionic/libm/include/arch/arm -include $A/system/core/include/arch/linux-arm/AndroidConfig.h -I$A/system/core/include/arch/linux-arm/ -D__ANDROID__ -DSK_RELEASE -nostdlib -march=armv7-a -msoft-float -mfloat-abi=softfp -mfpu=neon -mthumb -mthumb-interwork -fpic -fno-short-enums -fgcse-after-reload -frename-registers"
#
# Debugging Options
@@ -109,7 +110,7 @@ CONFIG_PREFIX="./_install"
# CONFIG_FEATURE_SYSTEMD is not set
# CONFIG_FEATURE_RTMINMAX is not set
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
# CONFIG_FEATURE_FAST_TOP is not set
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
@@ -118,6 +119,8 @@ CONFIG_FEATURE_EDITING_MAX_LEN=0
# CONFIG_FEATURE_EDITING_VI is not set
CONFIG_FEATURE_EDITING_HISTORY=0
# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
+# CONFIG_FEATURE_REVERSE_SEARCH is not set
# CONFIG_FEATURE_TAB_COMPLETION is not set
# CONFIG_FEATURE_USERNAME_COMPLETION is not set
# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set
@@ -156,6 +159,7 @@ CONFIG_DPKG_DEB=y
CONFIG_GUNZIP=y
CONFIG_GZIP=y
# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
+CONFIG_GZIP_FAST=0
CONFIG_LZOP=y
CONFIG_LZOP_COMPR_HIGH=y
CONFIG_RPM2CPIO=y
@@ -189,15 +193,19 @@ CONFIG_CAT=y
# CONFIG_FEATURE_DATE_ISOFMT is not set
# CONFIG_FEATURE_DATE_NANO is not set
# CONFIG_FEATURE_DATE_COMPAT is not set
+# CONFIG_HOSTID is not set
# CONFIG_ID is not set
# CONFIG_GROUPS is not set
CONFIG_TEST=y
CONFIG_FEATURE_TEST_64=y
CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
CONFIG_FEATURE_TR_EQUIV=y
CONFIG_BASE64=y
+# CONFIG_WHO is not set
+# CONFIG_USERS is not set
CONFIG_CAL=y
CONFIG_CATV=y
CONFIG_CHGRP=y
@@ -223,18 +231,17 @@ CONFIG_DU=y
CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
CONFIG_ECHO=y
CONFIG_FEATURE_FANCY_ECHO=y
-# CONFIG_ENV is not set
+CONFIG_ENV=y
# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
CONFIG_EXPAND=y
# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
-# CONFIG_EXPR is not set
-# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_EXPR=y
+CONFIG_EXPR_MATH_SUPPORT_64=y
CONFIG_FALSE=y
CONFIG_FOLD=y
-# CONFIG_FSYNC is not set
+CONFIG_FSYNC=y
CONFIG_HEAD=y
CONFIG_FEATURE_FANCY_HEAD=y
-# CONFIG_HOSTID is not set
CONFIG_INSTALL=y
# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
CONFIG_LN=y
@@ -294,12 +301,11 @@ CONFIG_UNAME=y
CONFIG_UNEXPAND=y
# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
CONFIG_UNIQ=y
-# CONFIG_USLEEP is not set
+CONFIG_USLEEP=y
CONFIG_UUDECODE=y
CONFIG_UUENCODE=y
CONFIG_WC=y
CONFIG_FEATURE_WC_LARGE=y
-# CONFIG_WHO is not set
CONFIG_WHOAMI=y
CONFIG_YES=y
@@ -366,61 +372,61 @@ CONFIG_WHICH=y
# Editors
#
CONFIG_PATCH=y
-# CONFIG_VI is not set
-CONFIG_FEATURE_VI_MAX_LEN=0
-# CONFIG_FEATURE_VI_8BIT is not set
-# CONFIG_FEATURE_VI_COLON is not set
-# CONFIG_FEATURE_VI_YANKMARK is not set
-# CONFIG_FEATURE_VI_SEARCH is not set
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=4096
+CONFIG_FEATURE_VI_8BIT=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
-# CONFIG_FEATURE_VI_USE_SIGNALS is not set
-# CONFIG_FEATURE_VI_DOT_CMD is not set
-# CONFIG_FEATURE_VI_READONLY is not set
-# CONFIG_FEATURE_VI_SETOPTS is not set
-# CONFIG_FEATURE_VI_SET is not set
-# CONFIG_FEATURE_VI_WIN_RESIZE is not set
-# CONFIG_FEATURE_VI_ASK_TERMINAL is not set
-# CONFIG_FEATURE_VI_OPTIMIZE_CURSOR is not set
-# CONFIG_AWK is not set
-# CONFIG_FEATURE_AWK_LIBM is not set
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_ASK_TERMINAL=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_LIBM=y
CONFIG_CMP=y
CONFIG_DIFF=y
# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
CONFIG_FEATURE_DIFF_DIR=y
-# CONFIG_ED is not set
-# CONFIG_SED is not set
-# CONFIG_FEATURE_ALLOW_EXEC is not set
+CONFIG_ED=y
+CONFIG_SED=y
+CONFIG_FEATURE_ALLOW_EXEC=y
#
# Finding Utilities
#
-# CONFIG_FIND is not set
-# CONFIG_FEATURE_FIND_PRINT0 is not set
-# CONFIG_FEATURE_FIND_MTIME is not set
-# CONFIG_FEATURE_FIND_MMIN is not set
-# CONFIG_FEATURE_FIND_PERM is not set
-# CONFIG_FEATURE_FIND_TYPE is not set
-# CONFIG_FEATURE_FIND_XDEV is not set
-# CONFIG_FEATURE_FIND_MAXDEPTH is not set
-# CONFIG_FEATURE_FIND_NEWER is not set
-# CONFIG_FEATURE_FIND_INUM is not set
-# CONFIG_FEATURE_FIND_EXEC is not set
-# CONFIG_FEATURE_FIND_USER is not set
-# CONFIG_FEATURE_FIND_GROUP is not set
-# CONFIG_FEATURE_FIND_NOT is not set
-# CONFIG_FEATURE_FIND_DEPTH is not set
-# CONFIG_FEATURE_FIND_PAREN is not set
-# CONFIG_FEATURE_FIND_SIZE is not set
-# CONFIG_FEATURE_FIND_PRUNE is not set
-# CONFIG_FEATURE_FIND_DELETE is not set
-# CONFIG_FEATURE_FIND_PATH is not set
-# CONFIG_FEATURE_FIND_REGEX is not set
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+CONFIG_FEATURE_FIND_DELETE=y
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
-# CONFIG_FEATURE_FIND_LINKS is not set
-# CONFIG_GREP is not set
-# CONFIG_FEATURE_GREP_EGREP_ALIAS is not set
-# CONFIG_FEATURE_GREP_FGREP_ALIAS is not set
-# CONFIG_FEATURE_GREP_CONTEXT is not set
+CONFIG_FEATURE_FIND_LINKS=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
CONFIG_XARGS=y
CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
@@ -430,9 +436,9 @@ CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
#
# Init Utilities
#
-# CONFIG_BOOTCHARTD is not set
-# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
-# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
+CONFIG_BOOTCHARTD=y
+CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER=y
+CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE=y
CONFIG_HALT=y
# CONFIG_FEATURE_CALL_TELINIT is not set
CONFIG_TELINIT_PATH=""
@@ -472,6 +478,7 @@ CONFIG_LAST_SYSTEM_ID=0
# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
# CONFIG_GETTY is not set
# CONFIG_LOGIN is not set
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
# CONFIG_PAM is not set
# CONFIG_LOGIN_SCRIPTS is not set
# CONFIG_FEATURE_NOLOGIN is not set
@@ -529,11 +536,17 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
+CONFIG_FEATURE_MDEV_EXEC=y
+CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
CONFIG_REV=y
# CONFIG_ACPID is not set
# CONFIG_FEATURE_ACPID_COMPAT is not set
CONFIG_BLKID=y
-# CONFIG_FEATURE_BLKID_TYPE is not set
+CONFIG_FEATURE_BLKID_TYPE=y
CONFIG_DMESG=y
CONFIG_FEATURE_DMESG_PRETTY=y
CONFIG_FBSET=y
@@ -564,7 +577,7 @@ CONFIG_FEATURE_GETOPT_LONG=y
CONFIG_HEXDUMP=y
CONFIG_FEATURE_HEXDUMP_REVERSE=y
CONFIG_HD=y
-# CONFIG_HWCLOCK is not set
+CONFIG_HWCLOCK=y
# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
# CONFIG_IPCRM is not set
@@ -572,12 +585,6 @@ CONFIG_HD=y
CONFIG_LOSETUP=y
CONFIG_LSPCI=y
CONFIG_LSUSB=y
-# CONFIG_MDEV is not set
-# CONFIG_FEATURE_MDEV_CONF is not set
-# CONFIG_FEATURE_MDEV_RENAME is not set
-# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
-# CONFIG_FEATURE_MDEV_EXEC is not set
-# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
CONFIG_MKSWAP=y
CONFIG_FEATURE_MKSWAP_UUID=y
CONFIG_MORE=y
@@ -600,7 +607,7 @@ CONFIG_SCRIPTREPLAY=y
# CONFIG_SETARCH is not set
# CONFIG_SWAPONOFF is not set
# CONFIG_FEATURE_SWAPON_PRI is not set
-# CONFIG_SWITCH_ROOT is not set
+CONFIG_SWITCH_ROOT=y
# CONFIG_UMOUNT is not set
# CONFIG_FEATURE_UMOUNT_ALL is not set
# CONFIG_FEATURE_MOUNT_LOOP is not set
@@ -633,6 +640,16 @@ CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
# Miscellaneous Utilities
#
# CONFIG_CONSPY is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+CONFIG_FEATURE_LESS_MARKS=y
+CONFIG_FEATURE_LESS_REGEXP=y
+CONFIG_FEATURE_LESS_WINCH=y
+CONFIG_FEATURE_LESS_ASK_TERMINAL=y
+CONFIG_FEATURE_LESS_DASHCMD=y
+CONFIG_FEATURE_LESS_LINENUMS=y
# CONFIG_NANDWRITE is not set
CONFIG_NANDDUMP=y
CONFIG_SETSERIAL=y
@@ -657,11 +674,11 @@ CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
CONFIG_FEATURE_CHAT_CLR_ABORT=y
CONFIG_CHRT=y
-# CONFIG_CROND is not set
-# CONFIG_FEATURE_CROND_D is not set
-# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
-CONFIG_FEATURE_CROND_DIR=""
-# CONFIG_CRONTAB is not set
+CONFIG_CROND=y
+CONFIG_FEATURE_CROND_D=y
+CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
+CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
+CONFIG_CRONTAB=y
CONFIG_DC=y
CONFIG_FEATURE_DC_LIBM=y
# CONFIG_DEVFSD is not set
@@ -682,15 +699,6 @@ CONFIG_INOTIFYD=y
# CONFIG_LAST is not set
# CONFIG_FEATURE_LAST_SMALL is not set
# CONFIG_FEATURE_LAST_FANCY is not set
-# CONFIG_LESS is not set
-CONFIG_FEATURE_LESS_MAXLINES=0
-# CONFIG_FEATURE_LESS_BRACKETS is not set
-# CONFIG_FEATURE_LESS_FLAGS is not set
-# CONFIG_FEATURE_LESS_MARKS is not set
-# CONFIG_FEATURE_LESS_REGEXP is not set
-# CONFIG_FEATURE_LESS_WINCH is not set
-# CONFIG_FEATURE_LESS_DASHCMD is not set
-# CONFIG_FEATURE_LESS_LINENUMS is not set
CONFIG_HDPARM=y
CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y
@@ -731,9 +739,9 @@ CONFIG_NC=y
CONFIG_NC_SERVER=y
CONFIG_NC_EXTRA=y
# CONFIG_NC_110_COMPAT is not set
-# CONFIG_PING is not set
+CONFIG_PING=y
# CONFIG_PING6 is not set
-# CONFIG_FEATURE_FANCY_PING is not set
+CONFIG_FEATURE_FANCY_PING=y
CONFIG_WHOIS=y
# CONFIG_FEATURE_IPV6 is not set
# CONFIG_FEATURE_UNIX_LOCAL is not set
@@ -783,7 +791,7 @@ CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
CONFIG_FEATURE_IFUPDOWN_IPV4=y
# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
CONFIG_FEATURE_IFUPDOWN_MAPPING=y
-# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
+CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y
# CONFIG_INETD is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
@@ -817,26 +825,31 @@ CONFIG_PSCAN=y
CONFIG_ROUTE=y
# CONFIG_SLATTACH is not set
CONFIG_TCPSVD=y
-# CONFIG_TELNET is not set
-# CONFIG_FEATURE_TELNET_TTYPE is not set
-# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set
-# CONFIG_TELNETD is not set
-# CONFIG_FEATURE_TELNETD_STANDALONE is not set
-# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
-# CONFIG_TFTP is not set
-# CONFIG_TFTPD is not set
-# CONFIG_FEATURE_TFTP_GET is not set
-# CONFIG_FEATURE_TFTP_PUT is not set
-# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
-# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_TELNETD=y
+CONFIG_FEATURE_TELNETD_STANDALONE=y
+CONFIG_FEATURE_TELNETD_INETD_WAIT=y
+CONFIG_TFTP=y
+CONFIG_TFTPD=y
+
+#
+# Common options for tftp/tftpd
+#
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
# CONFIG_TFTP_DEBUG is not set
-# CONFIG_TRACEROUTE is not set
+CONFIG_TRACEROUTE=y
# CONFIG_TRACEROUTE6 is not set
-# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
CONFIG_TUNCTL=y
CONFIG_FEATURE_TUNCTL_UG=y
+# CONFIG_UDHCPC6 is not set
# CONFIG_UDHCPD is not set
# CONFIG_DHCPRELAY is not set
# CONFIG_DUMPLEASES is not set
@@ -845,15 +858,15 @@ CONFIG_FEATURE_TUNCTL_UG=y
CONFIG_DHCPD_LEASES_FILE=""
CONFIG_UDHCPC=y
CONFIG_FEATURE_UDHCPC_ARPING=y
-# CONFIG_FEATURE_UDHCP_PORT is not set
+CONFIG_FEATURE_UDHCP_PORT=y
CONFIG_UDHCP_DEBUG=9
CONFIG_FEATURE_UDHCP_RFC3397=y
CONFIG_FEATURE_UDHCP_8021Q=y
CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
-# CONFIG_UDPSVD is not set
-# CONFIG_VCONFIG is not set
+CONFIG_UDPSVD=y
+CONFIG_VCONFIG=y
CONFIG_WGET=y
CONFIG_FEATURE_WGET_STATUSBAR=y
CONFIG_FEATURE_WGET_AUTHENTICATION=y
@@ -890,7 +903,9 @@ CONFIG_POWERTOP=y
CONFIG_PSTREE=y
CONFIG_PWDX=y
CONFIG_SMEMCAP=y
-# CONFIG_FREE is not set
+CONFIG_UPTIME=y
+# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
+CONFIG_FREE=y
CONFIG_FUSER=y
# CONFIG_KILL is not set
# CONFIG_KILLALL is not set
@@ -900,10 +915,11 @@ CONFIG_PIDOF=y
CONFIG_FEATURE_PIDOF_SINGLE=y
CONFIG_FEATURE_PIDOF_OMIT=y
# CONFIG_PKILL is not set
-# CONFIG_PS is not set
+CONFIG_PS=y
# CONFIG_FEATURE_PS_WIDE is not set
-# CONFIG_FEATURE_PS_TIME is not set
-# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
+# CONFIG_FEATURE_PS_LONG is not set
+CONFIG_FEATURE_PS_TIME=y
+CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
CONFIG_RENICE=y
CONFIG_BB_SYSCTL=y
@@ -915,7 +931,6 @@ CONFIG_FEATURE_TOP_DECIMALS=y
CONFIG_FEATURE_TOP_SMP_PROCESS=y
CONFIG_FEATURE_TOPMEM=y
CONFIG_FEATURE_SHOW_THREADS=y
-# CONFIG_UPTIME is not set
CONFIG_WATCH=y
#
diff --git a/configs/android_ndk_defconfig b/configs/android_ndk_defconfig
new file mode 100644
index 0000000..bf8827a
--- a/dev/null
+++ b/configs/android_ndk_defconfig
@@ -0,0 +1,1016 @@
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.20.0.git
+# Fri Mar 2 16:53:26 2012
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+CONFIG_DESKTOP=y
+# CONFIG_EXTRA_COMPAT is not set
+# CONFIG_INCLUDE_SUSv2 is not set
+# CONFIG_USE_PORTABLE_CODE is not set
+CONFIG_PLATFORM_LINUX=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+# CONFIG_SHOW_USAGE is not set
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_INSTALL_NO_USR is not set
+# CONFIG_LOCALE_SUPPORT is not set
+# CONFIG_UNICODE_SUPPORT is not set
+# CONFIG_UNICODE_USING_LOCALE is not set
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
+CONFIG_SUBST_WCHAR=0
+CONFIG_LAST_SUPPORTED_WCHAR=0
+# CONFIG_UNICODE_COMBINING_WCHARS is not set
+# CONFIG_UNICODE_WIDE_WCHARS is not set
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
+# CONFIG_UNICODE_PRESERVE_BROKEN is not set
+# CONFIG_LONG_OPTS is not set
+# CONFIG_FEATURE_DEVPTS is not set
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_UTMP is not set
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_FEATURE_PIDFILE is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+CONFIG_FEATURE_SYSLOG=y
+# CONFIG_FEATURE_HAVE_RPC is not set
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+# CONFIG_LFS is not set
+CONFIG_CROSS_COMPILER_PREFIX="arm-linux-androideabi-"
+CONFIG_SYSROOT="/opt/android-ndk/platforms/android-9/arch-arm"
+CONFIG_EXTRA_CFLAGS="-DANDROID -D__ANDROID__ -DSK_RELEASE -nostdlib -march=armv7-a -msoft-float -mfloat-abi=softfp -mfpu=neon -mthumb -mthumb-interwork -fpic -fno-short-enums -fgcse-after-reload -frename-registers"
+CONFIG_EXTRA_LDFLAGS="-Xlinker -z -Xlinker muldefs -nostdlib -Bdynamic -Xlinker -dynamic-linker -Xlinker /system/bin/linker -Xlinker -z -Xlinker nocopyreloc -Xlinker --no-undefined ${SYSROOT}/usr/lib/crtbegin_dynamic.o ${SYSROOT}/usr/lib/crtend_android.o"
+CONFIG_EXTRA_LDLIBS="dl m c gcc"
+
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+
+#
+# Installation Options ("make install" behavior)
+#
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+# CONFIG_FEATURE_SYSTEMD is not set
+# CONFIG_FEATURE_RTMINMAX is not set
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SMALL=1
+# CONFIG_FEATURE_FAST_TOP is not set
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+CONFIG_FEATURE_USE_TERMIOS=y
+# CONFIG_FEATURE_EDITING is not set
+CONFIG_FEATURE_EDITING_MAX_LEN=0
+# CONFIG_FEATURE_EDITING_VI is not set
+CONFIG_FEATURE_EDITING_HISTORY=0
+# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
+# CONFIG_FEATURE_REVERSE_SEARCH is not set
+# CONFIG_FEATURE_TAB_COMPLETION is not set
+# CONFIG_FEATURE_USERNAME_COMPLETION is not set
+# CONFIG_FEATURE_EDITING_FANCY_PROMPT is not set
+# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
+# CONFIG_FEATURE_NON_POSIX_CP is not set
+# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
+CONFIG_FEATURE_COPYBUF_KB=4
+# CONFIG_FEATURE_SKIP_ROOTFS is not set
+# CONFIG_MONOTONIC_SYSCALL is not set
+# CONFIG_IOCTL_HEX2STR_ERROR is not set
+# CONFIG_FEATURE_HWIB is not set
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_FEATURE_SEAMLESS_XZ=y
+CONFIG_FEATURE_SEAMLESS_LZMA=y
+CONFIG_FEATURE_SEAMLESS_BZ2=y
+CONFIG_FEATURE_SEAMLESS_GZ=y
+CONFIG_FEATURE_SEAMLESS_Z=y
+CONFIG_AR=y
+CONFIG_FEATURE_AR_LONG_FILENAMES=y
+CONFIG_FEATURE_AR_CREATE=y
+CONFIG_BUNZIP2=y
+CONFIG_BZIP2=y
+CONFIG_CPIO=y
+CONFIG_FEATURE_CPIO_O=y
+CONFIG_FEATURE_CPIO_P=y
+CONFIG_DPKG=y
+CONFIG_DPKG_DEB=y
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+CONFIG_GZIP=y
+# CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
+CONFIG_GZIP_FAST=0
+CONFIG_LZOP=y
+CONFIG_LZOP_COMPR_HIGH=y
+CONFIG_RPM2CPIO=y
+CONFIG_RPM=y
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_FEATURE_TAR_TO_COMMAND is not set
+CONFIG_FEATURE_TAR_UNAME_GNAME=y
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
+# CONFIG_FEATURE_TAR_SELINUX is not set
+CONFIG_UNCOMPRESS=y
+CONFIG_UNLZMA=y
+CONFIG_FEATURE_LZMA_FAST=y
+CONFIG_LZMA=y
+CONFIG_UNXZ=y
+CONFIG_XZ=y
+CONFIG_UNZIP=y
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+CONFIG_CAT=y
+# CONFIG_DATE is not set
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+# CONFIG_FEATURE_DATE_NANO is not set
+# CONFIG_FEATURE_DATE_COMPAT is not set
+# CONFIG_HOSTID is not set
+# CONFIG_ID is not set
+# CONFIG_GROUPS is not set
+CONFIG_TEST=y
+CONFIG_FEATURE_TEST_64=y
+CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_SUSV3=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+CONFIG_FEATURE_TR_EQUIV=y
+CONFIG_BASE64=y
+# CONFIG_WHO is not set
+# CONFIG_USERS is not set
+CONFIG_CAL=y
+CONFIG_CATV=y
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
+CONFIG_CHROOT=y
+CONFIG_CKSUM=y
+CONFIG_COMM=y
+CONFIG_CP=y
+# CONFIG_FEATURE_CP_LONG_OPTIONS is not set
+CONFIG_CUT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
+CONFIG_FEATURE_DD_IBS_OBS=y
+# CONFIG_DF is not set
+# CONFIG_FEATURE_DF_FANCY is not set
+CONFIG_DIRNAME=y
+CONFIG_DOS2UNIX=y
+CONFIG_UNIX2DOS=y
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+# CONFIG_FEATURE_ENV_LONG_OPTIONS is not set
+CONFIG_EXPAND=y
+# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
+CONFIG_EXPR=y
+CONFIG_EXPR_MATH_SUPPORT_64=y
+CONFIG_FALSE=y
+CONFIG_FOLD=y
+CONFIG_FSYNC=y
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+CONFIG_INSTALL=y
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+CONFIG_LN=y
+# CONFIG_LOGNAME is not set
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+# CONFIG_FEATURE_LS_COLOR is not set
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+# CONFIG_FEATURE_MKDIR_LONG_OPTIONS is not set
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+CONFIG_OD=y
+CONFIG_PRINTENV=y
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set
+CONFIG_SEQ=y
+CONFIG_SHA1SUM=y
+CONFIG_SHA256SUM=y
+CONFIG_SHA512SUM=y
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_FEATURE_FLOAT_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+CONFIG_SPLIT=y
+CONFIG_FEATURE_SPLIT_FANCY=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+CONFIG_SUM=y
+CONFIG_SYNC=y
+CONFIG_TAC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TRUE=y
+# CONFIG_TTY is not set
+CONFIG_UNAME=y
+CONFIG_UNEXPAND=y
+# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+CONFIG_UUDECODE=y
+CONFIG_UUENCODE=y
+CONFIG_WC=y
+CONFIG_FEATURE_WC_LARGE=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+CONFIG_FEATURE_PRESERVE_HARDLINKS=y
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum, sha256sum, sha512sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_FGCONSOLE=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+# CONFIG_KBD_MODE is not set
+# CONFIG_LOADFONT is not set
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_RESIZE=y
+CONFIG_FEATURE_RESIZE_PRINT=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETFONT is not set
+# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
+CONFIG_DEFAULT_SETFONT_DIR=""
+CONFIG_SETKEYCODES=y
+CONFIG_SETLOGCONS=y
+CONFIG_SHOWKEY=y
+# CONFIG_FEATURE_LOADFONT_PSF2 is not set
+# CONFIG_FEATURE_LOADFONT_RAW is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+CONFIG_PIPE_PROGRESS=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_FEATURE_RUN_PARTS_FANCY=y
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_PATCH=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=4096
+CONFIG_FEATURE_VI_8BIT=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+# CONFIG_FEATURE_VI_REGEX_SEARCH is not set
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+CONFIG_FEATURE_VI_READONLY=y
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_ASK_TERMINAL=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_LIBM=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+# CONFIG_FEATURE_DIFF_LONG_OPTIONS is not set
+CONFIG_FEATURE_DIFF_DIR=y
+CONFIG_ED=y
+CONFIG_SED=y
+CONFIG_FEATURE_ALLOW_EXEC=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+CONFIG_FEATURE_FIND_DELETE=y
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT is not set
+CONFIG_FEATURE_FIND_LINKS=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+CONFIG_BOOTCHARTD=y
+CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER=y
+CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE=y
+CONFIG_HALT=y
+# CONFIG_FEATURE_CALL_TELINIT is not set
+CONFIG_TELINIT_PATH=""
+CONFIG_INIT=y
+CONFIG_FEATURE_USE_INITTAB=y
+# CONFIG_FEATURE_KILL_REMOVED is not set
+CONFIG_FEATURE_KILL_DELAY=0
+CONFIG_FEATURE_INIT_SCTTY=y
+CONFIG_FEATURE_INIT_SYSLOG=y
+CONFIG_FEATURE_EXTRA_QUIET=y
+CONFIG_FEATURE_INIT_COREDUMPS=y
+CONFIG_FEATURE_INITRD=y
+CONFIG_INIT_TERMINAL_TYPE="linux"
+CONFIG_MESG=y
+CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_ADD_SHELL is not set
+# CONFIG_REMOVE_SHELL is not set
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_CRYPT is not set
+# CONFIG_USE_BB_CRYPT_SHA is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
+# CONFIG_FEATURE_CHECK_NAMES is not set
+CONFIG_FIRST_SYSTEM_ID=0
+CONFIG_LAST_SYSTEM_ID=0
+# CONFIG_ADDGROUP is not set
+# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
+# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
+# CONFIG_DELUSER is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
+# CONFIG_GETTY is not set
+# CONFIG_LOGIN is not set
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
+# CONFIG_PAM is not set
+# CONFIG_LOGIN_SCRIPTS is not set
+# CONFIG_FEATURE_NOLOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
+# CONFIG_CRYPTPW is not set
+# CONFIG_CHPASSWD is not set
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
+# CONFIG_SU is not set
+# CONFIG_FEATURE_SU_SYSLOG is not set
+# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+# CONFIG_FSCK is not set
+CONFIG_LSATTR=y
+CONFIG_TUNE2FS=y
+
+#
+# Linux Module Utilities
+#
+CONFIG_MODINFO=y
+CONFIG_MODPROBE_SMALL=y
+CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
+CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
+# CONFIG_INSMOD is not set
+# CONFIG_RMMOD is not set
+# CONFIG_LSMOD is not set
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+# CONFIG_MODPROBE is not set
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+# CONFIG_DEPMOD is not set
+
+#
+# Options common to multiple modutils
+#
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
+# CONFIG_FEATURE_MODUTILS_ALIAS is not set
+# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+
+#
+# Linux System Utilities
+#
+CONFIG_BLOCKDEV=y
+CONFIG_MDEV=y
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
+CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
+CONFIG_FEATURE_MDEV_EXEC=y
+CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
+CONFIG_REV=y
+# CONFIG_ACPID is not set
+# CONFIG_FEATURE_ACPID_COMPAT is not set
+CONFIG_BLKID=y
+CONFIG_FEATURE_BLKID_TYPE=y
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+CONFIG_FDFLUSH=y
+CONFIG_FDFORMAT=y
+CONFIG_FDISK=y
+CONFIG_FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_GPT_LABEL is not set
+CONFIG_FEATURE_FDISK_ADVANCED=y
+CONFIG_FINDFS=y
+CONFIG_FLOCK=y
+CONFIG_FREERAMDISK=y
+# CONFIG_FSCK_MINIX is not set
+# CONFIG_MKFS_EXT2 is not set
+# CONFIG_MKFS_MINIX is not set
+# CONFIG_FEATURE_MINIX2 is not set
+# CONFIG_MKFS_REISER is not set
+# CONFIG_MKFS_VFAT is not set
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
+CONFIG_HEXDUMP=y
+CONFIG_FEATURE_HEXDUMP_REVERSE=y
+CONFIG_HD=y
+CONFIG_HWCLOCK=y
+# CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set
+# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+CONFIG_LSPCI=y
+CONFIG_LSUSB=y
+CONFIG_MKSWAP=y
+CONFIG_FEATURE_MKSWAP_UUID=y
+CONFIG_MORE=y
+# CONFIG_MOUNT is not set
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+# CONFIG_FEATURE_MOUNT_HELPERS is not set
+# CONFIG_FEATURE_MOUNT_LABEL is not set
+# CONFIG_FEATURE_MOUNT_NFS is not set
+# CONFIG_FEATURE_MOUNT_CIFS is not set
+# CONFIG_FEATURE_MOUNT_FLAGS is not set
+# CONFIG_FEATURE_MOUNT_FSTAB is not set
+# CONFIG_PIVOT_ROOT is not set
+# CONFIG_RDATE is not set
+CONFIG_RDEV=y
+CONFIG_READPROFILE=y
+CONFIG_RTCWAKE=y
+CONFIG_SCRIPT=y
+CONFIG_SCRIPTREPLAY=y
+# CONFIG_SETARCH is not set
+# CONFIG_SWAPONOFF is not set
+# CONFIG_FEATURE_SWAPON_PRI is not set
+CONFIG_SWITCH_ROOT=y
+# CONFIG_UMOUNT is not set
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+# CONFIG_FEATURE_MOUNT_LOOP is not set
+# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+CONFIG_VOLUMEID=y
+
+#
+# Filesystem/Volume identification
+#
+CONFIG_FEATURE_VOLUMEID_EXT=y
+CONFIG_FEATURE_VOLUMEID_BTRFS=y
+CONFIG_FEATURE_VOLUMEID_REISERFS=y
+CONFIG_FEATURE_VOLUMEID_FAT=y
+CONFIG_FEATURE_VOLUMEID_HFS=y
+CONFIG_FEATURE_VOLUMEID_JFS=y
+CONFIG_FEATURE_VOLUMEID_XFS=y
+CONFIG_FEATURE_VOLUMEID_NTFS=y
+CONFIG_FEATURE_VOLUMEID_ISO9660=y
+CONFIG_FEATURE_VOLUMEID_UDF=y
+CONFIG_FEATURE_VOLUMEID_LUKS=y
+CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
+CONFIG_FEATURE_VOLUMEID_CRAMFS=y
+CONFIG_FEATURE_VOLUMEID_ROMFS=y
+CONFIG_FEATURE_VOLUMEID_SYSV=y
+CONFIG_FEATURE_VOLUMEID_OCFS2=y
+CONFIG_FEATURE_VOLUMEID_LINUXRAID=y
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_CONSPY is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+CONFIG_FEATURE_LESS_MARKS=y
+CONFIG_FEATURE_LESS_REGEXP=y
+CONFIG_FEATURE_LESS_WINCH=y
+CONFIG_FEATURE_LESS_ASK_TERMINAL=y
+CONFIG_FEATURE_LESS_DASHCMD=y
+CONFIG_FEATURE_LESS_LINENUMS=y
+# CONFIG_NANDWRITE is not set
+CONFIG_NANDDUMP=y
+CONFIG_SETSERIAL=y
+# CONFIG_UBIATTACH is not set
+# CONFIG_UBIDETACH is not set
+# CONFIG_UBIMKVOL is not set
+# CONFIG_UBIRMVOL is not set
+# CONFIG_UBIRSVOL is not set
+# CONFIG_UBIUPDATEVOL is not set
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
+CONFIG_BEEP=y
+CONFIG_FEATURE_BEEP_FREQ=4000
+CONFIG_FEATURE_BEEP_LENGTH_MS=30
+CONFIG_CHAT=y
+CONFIG_FEATURE_CHAT_NOFAIL=y
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
+CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
+CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
+CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
+CONFIG_FEATURE_CHAT_CLR_ABORT=y
+CONFIG_CHRT=y
+CONFIG_CROND=y
+CONFIG_FEATURE_CROND_D=y
+CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
+CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
+CONFIG_CRONTAB=y
+CONFIG_DC=y
+CONFIG_FEATURE_DC_LIBM=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+CONFIG_DEVMEM=y
+# CONFIG_EJECT is not set
+# CONFIG_FEATURE_EJECT_SCSI is not set
+CONFIG_FBSPLASH=y
+CONFIG_FLASHCP=y
+CONFIG_FLASH_LOCK=y
+CONFIG_FLASH_UNLOCK=y
+# CONFIG_FLASH_ERASEALL is not set
+# CONFIG_IONICE is not set
+CONFIG_INOTIFYD=y
+# CONFIG_LAST is not set
+# CONFIG_FEATURE_LAST_SMALL is not set
+# CONFIG_FEATURE_LAST_FANCY is not set
+CONFIG_HDPARM=y
+CONFIG_FEATURE_HDPARM_GET_IDENTITY=y
+CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET=y
+CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF=y
+CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA=y
+CONFIG_MAKEDEVS=y
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+CONFIG_FEATURE_MAKEDEVS_TABLE=y
+CONFIG_MAN=y
+# CONFIG_MICROCOM is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+CONFIG_RAIDAUTORUN=y
+# CONFIG_READAHEAD is not set
+# CONFIG_RFKILL is not set
+# CONFIG_RUNLEVEL is not set
+CONFIG_RX=y
+CONFIG_SETSID=y
+CONFIG_STRINGS=y
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_TIME=y
+CONFIG_TIMEOUT=y
+CONFIG_TTYSIZE=y
+CONFIG_VOLNAME=y
+# CONFIG_WALL is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+# CONFIG_NAMEIF is not set
+# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
+CONFIG_NBDCLIENT=y
+CONFIG_NC=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+# CONFIG_NC_110_COMPAT is not set
+CONFIG_PING=y
+# CONFIG_PING6 is not set
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_WHOIS=y
+# CONFIG_FEATURE_IPV6 is not set
+# CONFIG_FEATURE_UNIX_LOCAL is not set
+# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+CONFIG_ARP=y
+# CONFIG_ARPING is not set
+# CONFIG_BRCTL is not set
+# CONFIG_FEATURE_BRCTL_FANCY is not set
+# CONFIG_FEATURE_BRCTL_SHOW is not set
+CONFIG_DNSD=y
+# CONFIG_ETHER_WAKE is not set
+CONFIG_FAKEIDENTD=y
+CONFIG_FTPD=y
+CONFIG_FEATURE_FTP_WRITE=y
+CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST=y
+CONFIG_FTPGET=y
+CONFIG_FTPPUT=y
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+# CONFIG_HOSTNAME is not set
+CONFIG_HTTPD=y
+CONFIG_FEATURE_HTTPD_RANGES=y
+CONFIG_FEATURE_HTTPD_USE_SENDFILE=y
+CONFIG_FEATURE_HTTPD_SETUID=y
+CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+CONFIG_FEATURE_HTTPD_CGI=y
+CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
+CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y
+CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
+CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
+CONFIG_FEATURE_HTTPD_PROXY=y
+CONFIG_FEATURE_HTTPD_GZIP=y
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
+CONFIG_FEATURE_IFCONFIG_HW=y
+CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
+# CONFIG_IFENSLAVE is not set
+# CONFIG_IFPLUGD is not set
+CONFIG_IFUPDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+CONFIG_FEATURE_IFUPDOWN_IP=y
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+CONFIG_FEATURE_IP_RULE=y
+CONFIG_FEATURE_IP_SHORT_FORMS=y
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
+CONFIG_IPADDR=y
+CONFIG_IPLINK=y
+CONFIG_IPROUTE=y
+CONFIG_IPTUNNEL=y
+CONFIG_IPRULE=y
+CONFIG_IPCALC=y
+CONFIG_FEATURE_IPCALC_FANCY=y
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+CONFIG_NETSTAT=y
+CONFIG_FEATURE_NETSTAT_WIDE=y
+CONFIG_FEATURE_NETSTAT_PRG=y
+# CONFIG_NSLOOKUP is not set
+# CONFIG_NTPD is not set
+# CONFIG_FEATURE_NTPD_SERVER is not set
+CONFIG_PSCAN=y
+CONFIG_ROUTE=y
+# CONFIG_SLATTACH is not set
+CONFIG_TCPSVD=y
+CONFIG_TELNET=y
+CONFIG_FEATURE_TELNET_TTYPE=y
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+CONFIG_TELNETD=y
+CONFIG_FEATURE_TELNETD_STANDALONE=y
+CONFIG_FEATURE_TELNETD_INETD_WAIT=y
+CONFIG_TFTP=y
+CONFIG_TFTPD=y
+
+#
+# Common options for tftp/tftpd
+#
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
+# CONFIG_TFTP_DEBUG is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_TRACEROUTE6 is not set
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+CONFIG_TUNCTL=y
+CONFIG_FEATURE_TUNCTL_UG=y
+# CONFIG_UDHCPC6 is not set
+# CONFIG_UDHCPD is not set
+# CONFIG_DHCPRELAY is not set
+# CONFIG_DUMPLEASES is not set
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
+CONFIG_DHCPD_LEASES_FILE=""
+CONFIG_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+CONFIG_FEATURE_UDHCP_PORT=y
+CONFIG_UDHCP_DEBUG=9
+CONFIG_FEATURE_UDHCP_RFC3397=y
+CONFIG_FEATURE_UDHCP_8021Q=y
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
+CONFIG_UDPSVD=y
+CONFIG_VCONFIG=y
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+# CONFIG_FEATURE_WGET_LONG_OPTIONS is not set
+CONFIG_FEATURE_WGET_TIMEOUT=y
+# CONFIG_ZCIP is not set
+
+#
+# Print Utilities
+#
+CONFIG_LPD=y
+CONFIG_LPR=y
+CONFIG_LPQ=y
+
+#
+# Mail Utilities
+#
+CONFIG_MAKEMIME=y
+CONFIG_FEATURE_MIME_CHARSET="us-ascii"
+CONFIG_POPMAILDIR=y
+CONFIG_FEATURE_POPMAILDIR_DELIVERY=y
+CONFIG_REFORMIME=y
+CONFIG_FEATURE_REFORMIME_COMPAT=y
+CONFIG_SENDMAIL=y
+
+#
+# Process Utilities
+#
+CONFIG_IOSTAT=y
+CONFIG_MPSTAT=y
+CONFIG_NMETER=y
+CONFIG_PMAP=y
+CONFIG_POWERTOP=y
+CONFIG_PSTREE=y
+CONFIG_PWDX=y
+CONFIG_SMEMCAP=y
+CONFIG_UPTIME=y
+# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
+CONFIG_FREE=y
+CONFIG_FUSER=y
+# CONFIG_KILL is not set
+# CONFIG_KILLALL is not set
+# CONFIG_KILLALL5 is not set
+# CONFIG_PGREP is not set
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+# CONFIG_PKILL is not set
+CONFIG_PS=y
+# CONFIG_FEATURE_PS_WIDE is not set
+# CONFIG_FEATURE_PS_LONG is not set
+CONFIG_FEATURE_PS_TIME=y
+CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+CONFIG_FEATURE_TOP_SMP_CPU=y
+CONFIG_FEATURE_TOP_DECIMALS=y
+CONFIG_FEATURE_TOP_SMP_PROCESS=y
+CONFIG_FEATURE_TOPMEM=y
+CONFIG_FEATURE_SHOW_THREADS=y
+CONFIG_WATCH=y
+
+#
+# Runit Utilities
+#
+CONFIG_RUNSV=y
+CONFIG_RUNSVDIR=y
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
+CONFIG_SV=y
+CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service"
+CONFIG_SVLOGD=y
+CONFIG_CHPST=y
+CONFIG_SETUIDGID=y
+CONFIG_ENVUIDGID=y
+CONFIG_ENVDIR=y
+CONFIG_SOFTLIMIT=y
+# CONFIG_CHCON is not set
+# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RESTORECON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SETENFORCE is not set
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_SETSEBOOL is not set
+# CONFIG_SESTATUS is not set
+
+#
+# Shells
+#
+# CONFIG_ASH is not set
+# CONFIG_ASH_BASH_COMPAT is not set
+# CONFIG_ASH_IDLE_TIMEOUT is not set
+# CONFIG_ASH_JOB_CONTROL is not set
+# CONFIG_ASH_ALIAS is not set
+# CONFIG_ASH_GETOPTS is not set
+# CONFIG_ASH_BUILTIN_ECHO is not set
+# CONFIG_ASH_BUILTIN_PRINTF is not set
+# CONFIG_ASH_BUILTIN_TEST is not set
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+# CONFIG_ASH_EXPAND_PRMT is not set
+CONFIG_CTTYHACK=y
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_BASH_COMPAT is not set
+# CONFIG_HUSH_BRACE_EXPANSION is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_SAVEHISTORY is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS is not set
+# CONFIG_HUSH_CASE is not set
+# CONFIG_HUSH_FUNCTIONS is not set
+# CONFIG_HUSH_LOCAL is not set
+# CONFIG_HUSH_RANDOM_SUPPORT is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_HUSH_MODE_X is not set
+# CONFIG_MSH is not set
+# CONFIG_FEATURE_SH_IS_ASH is not set
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+CONFIG_FEATURE_SH_IS_NONE=y
+# CONFIG_FEATURE_BASH_IS_ASH is not set
+# CONFIG_FEATURE_BASH_IS_HUSH is not set
+CONFIG_FEATURE_BASH_IS_NONE=y
+# CONFIG_SH_MATH_SUPPORT is not set
+# CONFIG_SH_MATH_SUPPORT_64 is not set
+# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
+# CONFIG_FEATURE_SH_STANDALONE is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+# CONFIG_FEATURE_SH_HISTFILESIZE is not set
+
+#
+# System Logging Utilities
+#
+# CONFIG_SYSLOGD is not set
+# CONFIG_FEATURE_ROTATE_LOGFILE is not set
+# CONFIG_FEATURE_REMOTE_LOG is not set
+# CONFIG_FEATURE_SYSLOGD_DUP is not set
+# CONFIG_FEATURE_SYSLOGD_CFG is not set
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0
+# CONFIG_FEATURE_IPC_SYSLOG is not set
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
+# CONFIG_LOGREAD is not set
+# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set
+CONFIG_KLOGD=y
+CONFIG_FEATURE_KLOGD_KLOGCTL=y
+# CONFIG_LOGGER is not set
diff --git a/configs/cygwin_defconfig b/configs/cygwin_defconfig
index cc2d643..bdd0d66 100644
--- a/configs/cygwin_defconfig
+++ b/configs/cygwin_defconfig
@@ -92,7 +92,7 @@ CONFIG_PREFIX="./_install"
# CONFIG_FEATURE_SYSTEMD is not set
CONFIG_FEATURE_RTMINMAX=y
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
diff --git a/configs/freebsd_defconfig b/configs/freebsd_defconfig
index 5f2985b..dcb5d95 100644
--- a/configs/freebsd_defconfig
+++ b/configs/freebsd_defconfig
@@ -90,7 +90,7 @@ CONFIG_PREFIX="./_install"
# Busybox Library Tuning
#
CONFIG_PASSWORD_MINLEN=6
-CONFIG_MD5_SIZE_VS_SPEED=2
+CONFIG_MD5_SMALL=1
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
diff --git a/coreutils/Config.src b/coreutils/Config.src
index 65165d7..a28449b 100644
--- a/coreutils/Config.src
+++ b/coreutils/Config.src
@@ -269,13 +269,6 @@ config FEATURE_FANCY_HEAD
help
This enables the head options (-c, -q, and -v).
-config HOSTID
- bool "hostid"
- default y
- help
- hostid prints the numeric identifier (in hexadecimal) for
- the current host.
-
config INSTALL
bool "install"
default y
diff --git a/coreutils/Kbuild.src b/coreutils/Kbuild.src
index 733e298..5850f60 100644
--- a/coreutils/Kbuild.src
+++ b/coreutils/Kbuild.src
@@ -36,8 +36,6 @@ lib-$(CONFIG_FALSE) += false.o
lib-$(CONFIG_FOLD) += fold.o
lib-$(CONFIG_FSYNC) += fsync.o
lib-$(CONFIG_HEAD) += head.o
-lib-$(CONFIG_HOSTID) += hostid.o
-lib-$(CONFIG_ID) += id.o
lib-$(CONFIG_INSTALL) += install.o
#lib-$(CONFIG_LENGTH) += length.o
lib-$(CONFIG_LN) += ln.o
diff --git a/coreutils/chroot.c b/coreutils/chroot.c
index ab8beb0..633e66b 100644
--- a/coreutils/chroot.c
+++ b/coreutils/chroot.c
@@ -31,7 +31,6 @@ int chroot_main(int argc UNUSED_PARAM, char **argv)
if (!*argv)
bb_show_usage();
xchroot(*argv);
- xchdir("/");
++argv;
if (!*argv) { /* no 2nd param (PROG), use shell */
diff --git a/coreutils/cp.c b/coreutils/cp.c
index e48e21c..de2e512 100644
--- a/coreutils/cp.c
+++ b/coreutils/cp.c
@@ -16,9 +16,9 @@
*/
//usage:#define cp_trivial_usage
-//usage: "[OPTIONS] SOURCE DEST"
+//usage: "[OPTIONS] SOURCE... DEST"
//usage:#define cp_full_usage "\n\n"
-//usage: "Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY\n"
+//usage: "Copy SOURCE(s) to DEST\n"
//usage: "\n -a Same as -dpR"
//usage: IF_SELINUX(
//usage: "\n -c Preserve security context"
diff --git a/coreutils/date.c b/coreutils/date.c
index 6a7d5fa..767e0d4 100644
--- a/coreutils/date.c
+++ b/coreutils/date.c
@@ -129,6 +129,9 @@
//usage: "\n [YYYY.]MM.DD-hh:mm[:ss]"
//usage: "\n YYYY-MM-DD hh:mm[:ss]"
//usage: "\n [[[[[YY]YY]MM]DD]hh]mm[.ss]"
+//usage: IF_FEATURE_DATE_COMPAT(
+//usage: "\n 'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead"
+//usage: )
//usage:
//usage:#define date_example_usage
//usage: "$ date\n"
diff --git a/coreutils/du.c b/coreutils/du.c
index b8bbe3d..19a0319 100644
--- a/coreutils/du.c
+++ b/coreutils/du.c
@@ -26,11 +26,7 @@
//usage:#define du_trivial_usage
//usage: "[-aHLdclsx" IF_FEATURE_HUMAN_READABLE("hm") "k] [FILE]..."
//usage:#define du_full_usage "\n\n"
-//usage: "Summarize disk space used for each FILE and/or directory.\n"
-//usage: "Disk space is printed in units of "
-//usage: IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("1024")
-//usage: IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("512")
-//usage: " bytes.\n"
+//usage: "Summarize disk space used for each FILE and/or directory\n"
//usage: "\n -a Show file sizes too"
//usage: "\n -L Follow all symlinks"
//usage: "\n -H Follow symlinks on command line"
@@ -40,11 +36,13 @@
//usage: "\n -s Display only a total for each argument"
//usage: "\n -x Skip directories on different filesystems"
//usage: IF_FEATURE_HUMAN_READABLE(
-//usage: "\n -h Sizes in human readable format (e.g., 1K 243M 2G )"
+//usage: "\n -h Sizes in human readable format (e.g., 1K 243M 2G)"
//usage: "\n -m Sizes in megabytes"
//usage: )
-//usage: "\n -k Sizes in kilobytes"
-//usage: IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(" (default)")
+//usage: "\n -k Sizes in kilobytes" IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(" (default)")
+//usage: IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(
+//usage: "\n Default unit is 512 bytes"
+//usage: )
//usage:
//usage:#define du_example_usage
//usage: "$ du\n"
@@ -88,9 +86,10 @@ struct globals {
dev_t dir_dev;
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
+#define INIT_G() do { } while (0)
-static void print(unsigned long size, const char *filename)
+static void print(unsigned long long size, const char *filename)
{
/* TODO - May not want to defer error checking here. */
#if ENABLE_FEATURE_HUMAN_READABLE
@@ -104,15 +103,15 @@ static void print(unsigned long size, const char *filename)
size++;
size >>= 1;
}
- printf("%lu\t%s\n", size, filename);
+ printf("%llu\t%s\n", size, filename);
#endif
}
/* tiny recursive du */
-static unsigned long du(const char *filename)
+static unsigned long long du(const char *filename)
{
struct stat statbuf;
- unsigned long sum;
+ unsigned long long sum;
if (lstat(filename, &statbuf) != 0) {
bb_simple_perror_msg(filename);
@@ -189,10 +188,12 @@ static unsigned long du(const char *filename)
int du_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int du_main(int argc UNUSED_PARAM, char **argv)
{
- unsigned long total;
+ unsigned long long total;
int slink_depth_save;
unsigned opt;
+ INIT_G();
+
#if ENABLE_FEATURE_HUMAN_READABLE
IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(G.disp_hr = 1024;)
IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(G.disp_hr = 512;)
diff --git a/coreutils/expr.c b/coreutils/expr.c
index 24e75b5..c986f93 100644
--- a/coreutils/expr.c
+++ b/coreutils/expr.c
@@ -100,6 +100,7 @@ struct globals {
char **args;
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
+#define INIT_G() do { } while (0)
/* forward declarations */
static VALUE *eval(void);
@@ -519,6 +520,8 @@ int expr_main(int argc UNUSED_PARAM, char **argv)
{
VALUE *v;
+ INIT_G();
+
xfunc_error_retval = 2; /* coreutils compat */
G.args = argv + 1;
if (*G.args == NULL) {
diff --git a/coreutils/hostid.c b/coreutils/hostid.c
index 49409b9..5c1a4e0 100644
--- a/coreutils/hostid.c
+++ b/coreutils/hostid.c
@@ -9,6 +9,17 @@
/* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
+//config:config HOSTID
+//config: bool "hostid"
+//config: default y
+//config: help
+//config: hostid prints the numeric identifier (in hexadecimal) for
+//config: the current host.
+
+//applet:IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
+
+//kbuild:lib-$(CONFIG_HOSTID) += hostid.o
+
//usage:#define hostid_trivial_usage
//usage: ""
//usage:#define hostid_full_usage "\n\n"
@@ -25,7 +36,7 @@ int hostid_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
bb_show_usage();
}
- printf("%lx\n", gethostid());
+ printf("%08lx\n", gethostid());
return fflush_all();
}
diff --git a/coreutils/ln.c b/coreutils/ln.c
index 88a9a8f..0eb3e65 100644
--- a/coreutils/ln.c
+++ b/coreutils/ln.c
@@ -69,8 +69,8 @@ int ln_main(int argc, char **argv)
src = last;
if (is_directory(src,
- (opts & LN_NODEREFERENCE) ^ LN_NODEREFERENCE,
- NULL)
+ (opts & LN_NODEREFERENCE) ^ LN_NODEREFERENCE
+ )
) {
src_name = xstrdup(*argv);
src = concat_path_file(src, bb_get_last_path_component_strip(src_name));
diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c
index a4429b1..b33b6bb 100644
--- a/coreutils/mkdir.c
+++ b/coreutils/mkdir.c
@@ -54,7 +54,7 @@ static const char mkdir_longopts[] ALIGN1 =
int mkdir_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int mkdir_main(int argc UNUSED_PARAM, char **argv)
{
- mode_t mode = (mode_t)(-1);
+ long mode = -1;
int status = EXIT_SUCCESS;
int flags = 0;
unsigned opt;
@@ -68,10 +68,11 @@ int mkdir_main(int argc UNUSED_PARAM, char **argv)
#endif
opt = getopt32(argv, "m:p" IF_SELINUX("Z:"), &smode IF_SELINUX(,&scontext));
if (opt & 1) {
- mode = 0777;
- if (!bb_parse_mode(smode, &mode)) {
+ mode_t mmode = 0777;
+ if (!bb_parse_mode(smode, &mmode)) {
bb_error_msg_and_die("invalid mode '%s'", smode);
}
+ mode = mmode;
}
if (opt & 2)
flags |= FILEUTILS_RECUR;
diff --git a/coreutils/printf.c b/coreutils/printf.c
index f53aa47..3dd43a9 100644
--- a/coreutils/printf.c
+++ b/coreutils/printf.c
@@ -36,13 +36,12 @@
David MacKenzie <djm@gnu.ai.mit.edu>
*/
-// 19990508 Busy Boxed! Dave Cinege
+/* 19990508 Busy Boxed! Dave Cinege */
//usage:#define printf_trivial_usage
-//usage: "FORMAT [ARGUMENT]..."
+//usage: "FORMAT [ARG]..."
//usage:#define printf_full_usage "\n\n"
-//usage: "Format and print ARGUMENT(s) according to FORMAT,\n"
-//usage: "where FORMAT controls the output exactly as in C printf"
+//usage: "Format and print ARG(s) according to FORMAT (a-la C printf)"
//usage:
//usage:#define printf_example_usage
//usage: "$ printf \"Val=%d\\n\" 5\n"
@@ -132,13 +131,28 @@ static double my_xstrtod(const char *arg)
return result;
}
+/* Handles %b */
static void print_esc_string(const char *str)
{
char c;
while ((c = *str) != '\0') {
str++;
- if (c == '\\')
- c = bb_process_escape_sequence(&str);
+ if (c == '\\') {
+ /* %b also accepts 4-digit octals of the form \0### */
+ if (*str == '0') {
+ if ((unsigned char)(str[1] - '0') < 8) {
+ /* 2nd char is 0..7: skip leading '0' */
+ str++;
+ }
+ }
+ {
+ /* optimization: don't force arg to be on-stack,
+ * use another variable for that. */
+ const char *z = str;
+ c = bb_process_escape_sequence(&z);
+ str = z;
+ }
+ }
putchar(c);
}
}
diff --git a/coreutils/pwd.c b/coreutils/pwd.c
index 739b835..bb3ad04 100644
--- a/coreutils/pwd.c
+++ b/coreutils/pwd.c
@@ -20,13 +20,63 @@
/* This is a NOFORK applet. Be very careful! */
+static int logical_getcwd(void)
+{
+ struct stat st1;
+ struct stat st2;
+ char *wd;
+ char *p;
+
+ wd = getenv("PWD");
+ if (!wd || wd[0] != '/')
+ return 0;
+
+ p = wd;
+ while (*p) {
+ /* doing strstr(p, "/.") by hand is smaller and faster... */
+ if (*p++ != '/')
+ continue;
+ if (*p != '.')
+ continue;
+ /* we found "/.", skip to next char */
+ p++;
+ if (*p == '.')
+ p++; /* we found "/.." */
+ if (*p == '\0' || *p == '/')
+ return 0; /* "/./" or "/../" component: bad */
+ }
+
+ if (stat(wd, &st1) != 0)
+ return 0;
+ if (stat(".", &st2) != 0)
+ return 0;
+ if (st1.st_ino != st2.st_ino)
+ return 0;
+ if (st1.st_dev != st2.st_dev)
+ return 0;
+
+ puts(wd);
+ return 1;
+}
+
int pwd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int pwd_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
{
char *buf;
+ if (ENABLE_DESKTOP) {
+ /* TODO: assume -L if $POSIXLY_CORRECT? (coreutils does that)
+ * Rationale:
+ * POSIX requires a default of -L, but most scripts expect -P
+ */
+ unsigned opt = getopt32(argv, "LP");
+ if ((opt & 1) && logical_getcwd())
+ return fflush_all();
+ }
+
buf = xrealloc_getcwd_or_warn(NULL);
- if (buf != NULL) {
+
+ if (buf) {
puts(buf);
free(buf);
return fflush_all();
diff --git a/coreutils/stty.c b/coreutils/stty.c
index 7f057ea..0668cf7 100644
--- a/coreutils/stty.c
+++ b/coreutils/stty.c
@@ -1404,13 +1404,15 @@ int stty_main(int argc UNUSED_PARAM, char **argv)
/* Specifying both -a and -g is an error */
if ((stty_state & (STTY_verbose_output | STTY_recoverable_output)) ==
- (STTY_verbose_output | STTY_recoverable_output))
- bb_error_msg_and_die("verbose and stty-readable output styles are mutually exclusive");
+ (STTY_verbose_output | STTY_recoverable_output)
+ ) {
+ bb_error_msg_and_die("-a and -g are mutually exclusive");
+ }
/* Specifying -a or -g with non-options is an error */
- if (!(stty_state & STTY_noargs)
- && (stty_state & (STTY_verbose_output | STTY_recoverable_output))
+ if ((stty_state & (STTY_verbose_output | STTY_recoverable_output))
+ && !(stty_state & STTY_noargs)
) {
- bb_error_msg_and_die("modes may not be set when specifying an output style");
+ bb_error_msg_and_die("modes may not be set when -a or -g is used");
}
/* Now it is safe to start doing things */
diff --git a/coreutils/tail.c b/coreutils/tail.c
index 43cecbd..b376ec8 100644
--- a/coreutils/tail.c
+++ b/coreutils/tail.c
@@ -62,6 +62,7 @@ struct globals {
bool exitcode;
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
+#define INIT_G() do { } while (0)
static void tail_xprint_header(const char *fmt, const char *filename)
{
@@ -120,6 +121,8 @@ int tail_main(int argc, char **argv)
int *fds;
const char *fmt;
+ INIT_G();
+
#if ENABLE_INCLUDE_SUSv2 || ENABLE_FEATURE_FANCY_TAIL
/* Allow legacy syntax of an initial numeric option without -n. */
if (argv[1] && (argv[1][0] == '+' || argv[1][0] == '-')
diff --git a/coreutils/test.c b/coreutils/test.c
index b3dba16..e13986f 100644
--- a/coreutils/test.c
+++ b/coreutils/test.c
@@ -710,7 +710,8 @@ static number_t nexpr(enum token n)
if (n == EOI) {
/* special case: [ ! ], [ a -a ! ] are valid */
/* IOW, "! ARG" may miss ARG */
- unnest_msg("<nexpr:1 (!EOI)\n");
+ args--;
+ unnest_msg("<nexpr:1 (!EOI), args:%s(%p)\n", args[0], &args[0]);
return 1;
}
res = !nexpr(n);
@@ -729,15 +730,15 @@ static number_t aexpr(enum token n)
nest_msg(">aexpr(%s)\n", TOKSTR[n]);
res = nexpr(n);
- dbg_msg("aexpr: nexpr:%lld, next args:%s\n", res, args[1]);
+ dbg_msg("aexpr: nexpr:%lld, next args:%s(%p)\n", res, args[1], &args[1]);
if (check_operator(*++args) == BAND) {
- dbg_msg("aexpr: arg is AND, next args:%s\n", args[1]);
+ dbg_msg("aexpr: arg is AND, next args:%s(%p)\n", args[1], &args[1]);
res = aexpr(check_operator(*++args)) && res;
unnest_msg("<aexpr:%lld\n", res);
return res;
}
args--;
- unnest_msg("<aexpr:%lld, args:%s\n", res, args[0]);
+ unnest_msg("<aexpr:%lld, args:%s(%p)\n", res, args[0], &args[0]);
return res;
}
@@ -748,15 +749,15 @@ static number_t oexpr(enum token n)
nest_msg(">oexpr(%s)\n", TOKSTR[n]);
res = aexpr(n);
- dbg_msg("oexpr: aexpr:%lld, next args:%s\n", res, args[1]);
+ dbg_msg("oexpr: aexpr:%lld, next args:%s(%p)\n", res, args[1], &args[1]);
if (check_operator(*++args) == BOR) {
- dbg_msg("oexpr: next arg is OR, next args:%s\n", args[1]);
+ dbg_msg("oexpr: next arg is OR, next args:%s(%p)\n", args[1], &args[1]);
res = oexpr(check_operator(*++args)) || res;
unnest_msg("<oexpr:%lld\n", res);
return res;
}
args--;
- unnest_msg("<oexpr:%lld, args:%s\n", res, args[0]);
+ unnest_msg("<oexpr:%lld, args:%s(%p)\n", res, args[0], &args[0]);
return res;
}
diff --git a/coreutils/touch.c b/coreutils/touch.c
index 0f980fd..1216ca2 100644
--- a/coreutils/touch.c
+++ b/coreutils/touch.c
@@ -7,7 +7,7 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
-/* BB_AUDIT SUSv3 _NOT_ compliant -- options -a, -m, -r, -t not supported. */
+/* BB_AUDIT SUSv3 _NOT_ compliant -- options -a, -m not supported. */
/* http://www.opengroup.org/onlinepubs/007904975/utilities/touch.html */
/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
@@ -25,18 +25,26 @@
//config: help
//config: touch is used to create or change the access and/or
//config: modification timestamp of specified files.
+//config:
+//config:config FEATURE_TOUCH_SUSV3
+//config: bool "Add support for SUSV3 features (-d -t -r)"
+//config: default y
+//config: depends on TOUCH
+//config: help
+//config: Enable touch to use a reference file or a given date/time argument.
//applet:IF_TOUCH(APPLET_NOFORK(touch, touch, BB_DIR_BIN, BB_SUID_DROP, touch))
//kbuild:lib-$(CONFIG_TOUCH) += touch.o
//usage:#define touch_trivial_usage
-//usage: "[-c]" IF_DESKTOP(" [-d DATE] [-r FILE]") " FILE [FILE]..."
+//usage: "[-c]" IF_FEATURE_TOUCH_SUSV3(" [-d DATE] [-t DATE] [-r FILE]") " FILE..."
//usage:#define touch_full_usage "\n\n"
//usage: "Update the last-modified date on the given FILE[s]\n"
//usage: "\n -c Don't create files"
-//usage: IF_DESKTOP(
+//usage: IF_FEATURE_TOUCH_SUSV3(
//usage: "\n -d DT Date/time to use"
+//usage: "\n -t DT Date/time to use"
//usage: "\n -r FILE Use FILE's date/time"
//usage: )
//usage:
@@ -71,7 +79,7 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
int fd;
int status = EXIT_SUCCESS;
int opts;
-#if ENABLE_DESKTOP
+#if ENABLE_FEATURE_TOUCH_SUSV3
# if ENABLE_LONG_OPTS
static const char touch_longopts[] ALIGN1 =
/* name, has_arg, val */
@@ -90,17 +98,17 @@ int touch_main(int argc UNUSED_PARAM, char **argv)
# define timebuf ((struct timeval*)NULL)
#endif
-#if ENABLE_DESKTOP && ENABLE_LONG_OPTS
+#if ENABLE_FEATURE_TOUCH_SUSV3 && ENABLE_LONG_OPTS
applet_long_options = touch_longopts;
#endif
/* -d and -t both set time. In coreutils,
* accepted data format differs a bit between -d and -t.
* We accept the same formats for both */
- opts = getopt32(argv, "c" IF_DESKTOP("r:d:t:")
+ opts = getopt32(argv, "c" IF_FEATURE_TOUCH_SUSV3("r:d:t:")
/*ignored:*/ "fma"
- IF_DESKTOP(, &reference_file)
- IF_DESKTOP(, &date_str)
- IF_DESKTOP(, &date_str)
+ IF_FEATURE_TOUCH_SUSV3(, &reference_file)
+ IF_FEATURE_TOUCH_SUSV3(, &date_str)
+ IF_FEATURE_TOUCH_SUSV3(, &date_str)
);
opts &= 1; /* only -c bit is left */
diff --git a/coreutils/uudecode.c b/coreutils/uudecode.c
index 6ecfe6c..b298fcb 100644
--- a/coreutils/uudecode.c
+++ b/coreutils/uudecode.c
@@ -15,7 +15,7 @@
//usage: "[-o OUTFILE] [INFILE]"
//usage:#define uudecode_full_usage "\n\n"
//usage: "Uudecode a file\n"
-//usage: "Finds outfile name in uuencoded source unless -o is given"
+//usage: "Finds OUTFILE in uuencoded source unless -o is given"
//usage:
//usage:#define uudecode_example_usage
//usage: "$ uudecode -o busybox busybox.uu\n"
@@ -125,10 +125,11 @@ int uudecode_main(int argc UNUSED_PARAM, char **argv)
mode = bb_strtou(line_ptr, NULL, 8);
if (outname == NULL) {
outname = strchr(line_ptr, ' ');
- if ((outname == NULL) || (*outname == '\0')) {
+ if (!outname)
break;
- }
outname++;
+ if (!outname[0])
+ break;
}
dst_stream = stdout;
if (NOT_LONE_DASH(outname)) {
diff --git a/coreutils/uuencode.c b/coreutils/uuencode.c
index 84a489a..673ef36 100644
--- a/coreutils/uuencode.c
+++ b/coreutils/uuencode.c
@@ -9,9 +9,9 @@
*/
//usage:#define uuencode_trivial_usage
-//usage: "[-m] [INFILE] STORED_FILENAME"
+//usage: "[-m] [FILE] STORED_FILENAME"
//usage:#define uuencode_full_usage "\n\n"
-//usage: "Uuencode a file to stdout\n"
+//usage: "Uuencode FILE (or stdin) to stdout\n"
//usage: "\n -m Use base64 encoding per RFC1521"
//usage:
//usage:#define uuencode_example_usage
diff --git a/coreutils/who.c b/coreutils/who.c
index c6c9252..f955ce6 100644
--- a/coreutils/who.c
+++ b/coreutils/who.c
@@ -48,6 +48,7 @@
//usage:#define who_full_usage "\n\n"
//usage: "Show who is logged on\n"
//usage: "\n -a Show all"
+//usage: "\n -H Print column headers"
#include "libbb.h"
diff --git a/debianutils/mktemp.c b/debianutils/mktemp.c
index 007cb1c..dbe4309 100644
--- a/debianutils/mktemp.c
+++ b/debianutils/mktemp.c
@@ -41,6 +41,7 @@
////usage: "\n -q Fail silently on errors" - we ignore this opt
//usage: "\n -t Prepend base directory name to TEMPLATE"
//usage: "\n -p DIR Use DIR as a base directory (implies -t)"
+//usage: "\n -u Do not create anything; print a name"
//usage: "\n"
//usage: "\nBase directory is: -p DIR, else $TMPDIR, else /tmp"
//usage:
@@ -63,6 +64,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
OPT_q = 1 << 1,
OPT_t = 1 << 2,
OPT_p = 1 << 3,
+ OPT_u = 1 << 4,
};
path = getenv("TMPDIR");
@@ -71,7 +73,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
/* -q is ignored */
opt_complementary = "?1"; /* 1 argument max */
- opts = getopt32(argv, "dqtp:", &path);
+ opts = getopt32(argv, "dqtp:u", &path);
chp = argv[optind];
if (!chp) {
@@ -81,6 +83,22 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
chp = xstrdup("tmp.XXXXXX");
opts |= OPT_t;
}
+
+ if (opts & OPT_u) {
+ /* Remove (up to) 6 X's */
+ unsigned len = strlen(chp);
+ int cnt = len > 6 ? 6 : len;
+ while (--cnt >= 0 && chp[--len] == 'X')
+ chp[len] = '\0';
+
+ chp = tempnam(opts & (OPT_t|OPT_p) ? path : "./", chp);
+ if (!chp)
+ return EXIT_FAILURE;
+ if (!(opts & (OPT_t|OPT_p)))
+ chp += 2;
+ goto ret;
+ }
+
if (opts & (OPT_t|OPT_p))
chp = concat_path_file(path, chp);
@@ -91,8 +109,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
if (mkstemp(chp) < 0)
return EXIT_FAILURE;
}
-
+ ret:
puts(chp);
-
return EXIT_SUCCESS;
}
diff --git a/debianutils/run_parts.c b/debianutils/run_parts.c
index 65cbfc3..8f08f6d 100644
--- a/debianutils/run_parts.c
+++ b/debianutils/run_parts.c
@@ -66,6 +66,7 @@ struct globals {
#define names (G.names)
#define cur (G.cur )
#define cmd (G.cmd )
+#define INIT_G() do { } while (0)
enum { NUM_CMD = (COMMON_BUFSIZE - sizeof(G)) / sizeof(cmd[0]) - 1 };
@@ -143,6 +144,8 @@ int run_parts_main(int argc UNUSED_PARAM, char **argv)
unsigned n;
int ret;
+ INIT_G();
+
#if ENABLE_FEATURE_RUN_PARTS_LONG_OPTIONS
applet_long_options = runparts_longopts;
#endif
diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c
index bc61959..7dadc3c 100644
--- a/debianutils/start_stop_daemon.c
+++ b/debianutils/start_stop_daemon.c
@@ -31,7 +31,8 @@ Options controlling process matching
[TODO: can PROCESS_NAME be a full pathname? Should we require full match then
with /proc/$PID/exe or argv[0] (comm can't be matched, it never contains path)]
-x,--exec EXECUTABLE Look for processes that were started with this
- command in /proc/$PID/cmdline.
+ command in /proc/$PID/exe and /proc/$PID/cmdline
+ (/proc/$PID/cmdline is a bbox extension)
Unlike -n, we match against the full path:
"ntpd" != "./ntpd" != "/path/to/ntpd"
-p,--pidfile PID_FILE Look for processes with PID from this file
@@ -68,7 +69,7 @@ Misc options:
//usage: "\n -n,--name NAME Match processes with NAME"
//usage: "\n in comm field in /proc/PID/stat"
//usage: "\n -x,--exec EXECUTABLE Match processes with this command"
-//usage: "\n in /proc/PID/cmdline"
+//usage: "\n in /proc/PID/{exe,cmdline}"
//usage: "\n -p,--pidfile FILE Match a process with PID from the file"
//usage: "\n All specified conditions must match"
//usage: "\n-S only:"
@@ -198,8 +199,18 @@ static int pid_is_exec(pid_t pid)
{
ssize_t bytes;
char buf[sizeof("/proc/%u/cmdline") + sizeof(int)*3];
+ char *procname, *exelink;
+ int match;
- sprintf(buf, "/proc/%u/cmdline", (unsigned)pid);
+ procname = buf + sprintf(buf, "/proc/%u/exe", (unsigned)pid) - 3;
+
+ exelink = xmalloc_readlink(buf);
+ match = (exelink && strcmp(execname, exelink) == 0);
+ free(exelink);
+ if (match)
+ return match;
+
+ strcpy(procname, "cmdline");
bytes = open_read_close(buf, G.execname_cmpbuf, G.execname_sizeof);
if (bytes > 0) {
G.execname_cmpbuf[bytes] = '\0';
@@ -474,7 +485,7 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
*--argv = startas;
if (opt & OPT_BACKGROUND) {
#if BB_MMU
- bb_daemonize(DAEMON_DEVNULL_STDIO + DAEMON_CLOSE_EXTRA_FDS);
+ bb_daemonize(DAEMON_DEVNULL_STDIO + DAEMON_CLOSE_EXTRA_FDS + DAEMON_DOUBLE_FORK);
/* DAEMON_DEVNULL_STDIO is superfluous -
* it's always done by bb_daemonize() */
#else
@@ -502,8 +513,16 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
if (opt & OPT_c) {
struct bb_uidgid_t ugid = { -1, -1 };
parse_chown_usergroup_or_die(&ugid, chuid);
- if (ugid.gid != (gid_t) -1) xsetgid(ugid.gid);
- if (ugid.uid != (uid_t) -1) xsetuid(ugid.uid);
+ if (ugid.uid != (uid_t) -1) {
+ struct passwd *pw = xgetpwuid(ugid.uid);
+ if (ugid.gid != (gid_t) -1)
+ pw->pw_gid = ugid.gid;
+ /* initgroups, setgid, setuid: */
+ change_identity(pw);
+ } else if (ugid.gid != (gid_t) -1) {
+ xsetgid(ugid.gid);
+ setgroups(1, &ugid.gid);
+ }
}
#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
if (opt & OPT_NICELEVEL) {
diff --git a/docs/ctty.htm b/docs/ctty.htm
index 8f466cd..3cb2dd2 100644
--- a/docs/ctty.htm
+++ b/docs/ctty.htm
@@ -9,6 +9,8 @@
<p>Before looking at the Linux implementation, first a general Unix
description of threads, processes, process groups and sessions.
+</p><p>
+(See also <a href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap11.html">General Terminal Interface</a>)
</p><p>A session contains a number of process groups, and a process group
contains a number of processes, and a process contains a number
of threads.
@@ -277,6 +279,7 @@ and inspect it by
Again, if TOSTOP is set but the background process ignores or blocks
the SIGTTOU signal, or if its process group is orphaned (see below),
then the write() returns an EIO error, and no signal is sent.
+[vda: correction. SUS says that if SIGTTOU is blocked/ignored, write succeeds. ]
<p>
</p><h3>Orphaned process groups</h3>
diff --git a/docs/mdev.txt b/docs/mdev.txt
index 2d03bd8..61f93c9 100644
--- a/docs/mdev.txt
+++ b/docs/mdev.txt
@@ -51,19 +51,25 @@ device nodes if your system needs something more than the default root/root
660 permissions.
The file has the format:
- <device regex> <uid>:<gid> <permissions>
- or @<maj[,min1[-min2]]> <uid>:<gid> <permissions>
+ [-]<device regex> <uid>:<gid> <permissions>
+or
+ @<maj[,min1[-min2]]> <uid>:<gid> <permissions>
+or
+ $envvar=<regex> <uid>:<gid> <permissions>
For example:
- hd[a-z][0-9]* 0:3 660
+ hd[a-z][0-9]* 0:3 660
The config file parsing stops at the first matching line. If no line is
matched, then the default of 0:0 660 is used. To set your own default, simply
create your own total match like so:
+
.* 1:1 777
You can rename/move device nodes by using the next optional field.
+
<device regex> <uid>:<gid> <permissions> [=path]
+
So if you want to place the device node into a subdirectory, make sure the path
has a trailing /. If you want to rename the device node, just place the name.
hda 0:3 660 =drives/
diff --git a/e2fsprogs/e2fs_lib.h b/e2fsprogs/e2fs_lib.h
index 3905ee7..f2ae56f 100644
--- a/e2fsprogs/e2fs_lib.h
+++ b/e2fsprogs/e2fs_lib.h
@@ -7,7 +7,7 @@
*/
/* Constants and structures */
-#include "e2fs_defs.h"
+#include "bb_e2fs_defs.h"
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
diff --git a/e2fsprogs/old_e2fsprogs/blkid/probe.c b/e2fsprogs/old_e2fsprogs/blkid/probe.c
index 77bfc73..651193b 100644
--- a/e2fsprogs/old_e2fsprogs/blkid/probe.c
+++ b/e2fsprogs/old_e2fsprogs/blkid/probe.c
@@ -575,8 +575,12 @@ blkid_dev blkid_verify(blkid_cache cache, blkid_dev dev)
printf("need to revalidate %s (time since last check %lu)\n",
dev->bid_name, diff));
- if (((fd = open(dev->bid_name, O_RDONLY)) < 0) ||
- (fstat(fd, &st) < 0)) {
+ fd = open(dev->bid_name, O_RDONLY);
+ if (fd < 0
+ || fstat(fd, &st) < 0
+ ) {
+ if (fd >= 0)
+ close(fd);
if (errno == ENXIO || errno == ENODEV || errno == ENOENT) {
blkid_free_dev(dev);
return NULL;
@@ -653,6 +657,7 @@ try_again:
if (!dev->bid_type) {
blkid_free_dev(dev);
+ close(fd);
return NULL;
}
diff --git a/e2fsprogs/old_e2fsprogs/e2fsck.c b/e2fsprogs/old_e2fsprogs/e2fsck.c
index 8fffa7f..373e8ce 100644
--- a/e2fsprogs/old_e2fsprogs/e2fsck.c
+++ b/e2fsprogs/old_e2fsprogs/e2fsck.c
@@ -11577,7 +11577,7 @@ static void check_resize_inode(e2fsck_t ctx)
* s_reserved_gdt_blocks must be zero.
*/
if (!(fs->super->s_feature_compat &
- EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
+ EXT2_FEATURE_COMPAT_RESIZE_INO)) {
if (fs->super->s_reserved_gdt_blocks) {
pctx.num = fs->super->s_reserved_gdt_blocks;
if (fix_problem(ctx, PR_0_NONZERO_RESERVED_GDT_BLOCKS,
@@ -11593,7 +11593,7 @@ static void check_resize_inode(e2fsck_t ctx)
retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
if (retval) {
if (fs->super->s_feature_compat &
- EXT2_FEATURE_COMPAT_RESIZE_INODE)
+ EXT2_FEATURE_COMPAT_RESIZE_INO)
ctx->flags |= E2F_FLAG_RESIZE_INODE;
return;
}
@@ -11603,7 +11603,7 @@ static void check_resize_inode(e2fsck_t ctx)
* the resize inode is cleared; then we're done.
*/
if (!(fs->super->s_feature_compat &
- EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
+ EXT2_FEATURE_COMPAT_RESIZE_INO)) {
for (i=0; i < EXT2_N_BLOCKS; i++) {
if (inode.i_block[i])
break;
diff --git a/e2fsprogs/old_e2fsprogs/e2p/feature.c b/e2fsprogs/old_e2fsprogs/e2p/feature.c
index b45754f..2102ed8 100644
--- a/e2fsprogs/old_e2fsprogs/e2p/feature.c
+++ b/e2fsprogs/old_e2fsprogs/e2p/feature.c
@@ -34,7 +34,7 @@ static const struct feature feature_list[] = {
"ext_attr" },
{ E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_DIR_INDEX,
"dir_index" },
- { E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_RESIZE_INODE,
+ { E2P_FEATURE_COMPAT, EXT2_FEATURE_COMPAT_RESIZE_INO,
"resize_inode" },
{ E2P_FEATURE_RO_INCOMPAT, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER,
"sparse_super" },
diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h b/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
index 6f4f708..80ea2cb 100644
--- a/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
+++ b/e2fsprogs/old_e2fsprogs/ext2fs/ext2_fs.h
@@ -475,7 +475,7 @@ struct ext2_super_block {
#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
-#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
+#define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010
#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h b/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
index 9f77201..39fb116 100644
--- a/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
+++ b/e2fsprogs/old_e2fsprogs/ext2fs/ext2fs.h
@@ -383,7 +383,7 @@ typedef struct ext2_icount *ext2_icount_t;
#define EXT2_LIB_FEATURE_COMPAT_SUPP (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\
EXT2_FEATURE_COMPAT_IMAGIC_INODES|\
EXT3_FEATURE_COMPAT_HAS_JOURNAL|\
- EXT2_FEATURE_COMPAT_RESIZE_INODE|\
+ EXT2_FEATURE_COMPAT_RESIZE_INO|\
EXT2_FEATURE_COMPAT_DIR_INDEX|\
EXT2_FEATURE_COMPAT_EXT_ATTR)
diff --git a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
index ef1d343..da2d151 100644
--- a/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
+++ b/e2fsprogs/old_e2fsprogs/ext2fs/initialize.c
@@ -284,7 +284,7 @@ retry:
/*
* check the number of reserved group descriptor table blocks
*/
- if (super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)
+ if (super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INO)
rsv_gdt = calc_reserved_gdt_blocks(fs);
else
rsv_gdt = 0;
diff --git a/e2fsprogs/old_e2fsprogs/mke2fs.c b/e2fsprogs/old_e2fsprogs/mke2fs.c
index 7555650..35d717a 100644
--- a/e2fsprogs/old_e2fsprogs/mke2fs.c
+++ b/e2fsprogs/old_e2fsprogs/mke2fs.c
@@ -757,7 +757,7 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
if (rsv_gdb > 0) {
sb_param->s_feature_compat |=
- EXT2_FEATURE_COMPAT_RESIZE_INODE;
+ EXT2_FEATURE_COMPAT_RESIZE_INO;
sb_param->s_reserved_gdt_blocks = rsv_gdb;
}
@@ -778,7 +778,7 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
static __u32 ok_features[3] = {
EXT3_FEATURE_COMPAT_HAS_JOURNAL |
- EXT2_FEATURE_COMPAT_RESIZE_INODE |
+ EXT2_FEATURE_COMPAT_RESIZE_INO |
EXT2_FEATURE_COMPAT_DIR_INDEX, /* Compat */
EXT2_FEATURE_INCOMPAT_FILETYPE| /* Incompat */
EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
@@ -1123,7 +1123,7 @@ static int PRS(int argc, char **argv)
/* Since sparse_super is the default, we would only have a problem
* here if it was explicitly disabled.
*/
- if ((param.s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
+ if ((param.s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INO) &&
!(param.s_feature_ro_compat&EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)) {
bb_error_msg_and_die("reserved online resize blocks not supported "
"on non-sparse filesystem");
@@ -1312,7 +1312,7 @@ int mke2fs_main (int argc, char **argv)
reserve_inodes(fs);
create_bad_block_inode(fs, bb_list);
if (fs->super->s_feature_compat &
- EXT2_FEATURE_COMPAT_RESIZE_INODE) {
+ EXT2_FEATURE_COMPAT_RESIZE_INO) {
retval = ext2fs_create_resize_inode(fs);
mke2fs_error_msg_and_die(retval, "reserve blocks for online resize");
}
diff --git a/e2fsprogs/tune2fs.c b/e2fsprogs/tune2fs.c
index bf26e29..119460a 100644
--- a/e2fsprogs/tune2fs.c
+++ b/e2fsprogs/tune2fs.c
@@ -8,7 +8,7 @@
*/
#include "libbb.h"
#include <linux/fs.h>
-#include <linux/ext2_fs.h>
+#include "bb_e2fs_defs.h"
// storage helpers
char BUG_wrong_field_size(void);
diff --git a/editors/awk.c b/editors/awk.c
index 7685546..71abca2 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -25,6 +25,7 @@
* to perform debug printfs to stderr: */
#define debug_printf_walker(...) do {} while (0)
#define debug_printf_eval(...) do {} while (0)
+#define debug_printf_parse(...) do {} while (0)
#ifndef debug_printf_walker
# define debug_printf_walker(...) (fprintf(stderr, __VA_ARGS__))
@@ -32,6 +33,9 @@
#ifndef debug_printf_eval
# define debug_printf_eval(...) (fprintf(stderr, __VA_ARGS__))
#endif
+#ifndef debug_printf_parse
+# define debug_printf_parse(...) (fprintf(stderr, __VA_ARGS__))
+#endif
@@ -238,6 +242,9 @@ typedef struct tsplitter_s {
* For builtins it has different meaning: n n s3 s2 s1 v3 v2 v1,
* n - min. number of args, vN - resolve Nth arg to var, sN - resolve to string
*/
+#undef P
+#undef PRIMASK
+#undef PRIMASK2
#define P(x) (x << 24)
#define PRIMASK 0x7F000000
#define PRIMASK2 0x7E000000
@@ -432,13 +439,13 @@ struct globals {
smallint nextrec;
smallint nextfile;
smallint is_f0_split;
+ smallint t_rollback;
};
struct globals2 {
uint32_t t_info; /* often used */
uint32_t t_tclass;
char *t_string;
int t_lineno;
- int t_rollback;
var *intvar[NUM_INTERNAL_VARS]; /* often used */
@@ -496,11 +503,11 @@ struct globals2 {
#define nextrec (G1.nextrec )
#define nextfile (G1.nextfile )
#define is_f0_split (G1.is_f0_split )
+#define t_rollback (G1.t_rollback )
#define t_info (G.t_info )
#define t_tclass (G.t_tclass )
#define t_string (G.t_string )
#define t_lineno (G.t_lineno )
-#define t_rollback (G.t_rollback )
#define intvar (G.intvar )
#define fsplitter (G.fsplitter )
#define rsplitter (G.rsplitter )
@@ -1008,6 +1015,7 @@ static uint32_t next_token(uint32_t expected)
if (*p == '\0') {
tc = TC_EOF;
+ debug_printf_parse("%s: token found: TC_EOF\n", __func__);
} else if (*p == '\"') {
/* it's a string */
@@ -1023,6 +1031,7 @@ static uint32_t next_token(uint32_t expected)
p++;
*s = '\0';
tc = TC_STRING;
+ debug_printf_parse("%s: token found:'%s' TC_STRING\n", __func__, t_string);
} else if ((expected & TC_REGEXP) && *p == '/') {
/* it's regexp */
@@ -1045,6 +1054,7 @@ static uint32_t next_token(uint32_t expected)
p++;
*s = '\0';
tc = TC_REGEXP;
+ debug_printf_parse("%s: token found:'%s' TC_REGEXP\n", __func__, t_string);
} else if (*p == '.' || isdigit(*p)) {
/* it's a number */
@@ -1054,6 +1064,7 @@ static uint32_t next_token(uint32_t expected)
if (*p == '.')
syntax_error(EMSG_UNEXP_TOKEN);
tc = TC_NUMBER;
+ debug_printf_parse("%s: token found:%f TC_NUMBER\n", __func__, t_double);
} else {
/* search for something known */
@@ -1076,6 +1087,7 @@ static uint32_t next_token(uint32_t expected)
) {
/* then this is what we are looking for */
t_info = *ti;
+ debug_printf_parse("%s: token found:'%.*s' t_info:%x\n", __func__, l, p, t_info);
p += l;
goto token_found;
}
@@ -1099,14 +1111,17 @@ static uint32_t next_token(uint32_t expected)
p = skip_spaces(p);
if (*p == '(') {
tc = TC_FUNCTION;
+ debug_printf_parse("%s: token found:'%s' TC_FUNCTION\n", __func__, t_string);
} else {
if (*p == '[') {
p++;
tc = TC_ARRAY;
- }
+ debug_printf_parse("%s: token found:'%s' TC_ARRAY\n", __func__, t_string);
+ } else
+ debug_printf_parse("%s: token found:'%s' TC_VARIABLE\n", __func__, t_string);
}
- token_found: ;
}
+ token_found:
g_pos = p;
/* skipping newlines in some cases */
@@ -1178,6 +1193,8 @@ static node *parse_expr(uint32_t iexp)
uint32_t tc, xtc;
var *v;
+ debug_printf_parse("%s(%x)\n", __func__, iexp);
+
sn.info = PRIMASK;
sn.r.n = glptr = NULL;
xtc = TC_OPERAND | TC_UOPPRE | TC_REGEXP | iexp;
@@ -1186,12 +1203,14 @@ static node *parse_expr(uint32_t iexp)
if (glptr && (t_info == (OC_COMPARE | VV | P(39) | 2))) {
/* input redirection (<) attached to glptr node */
+ debug_printf_parse("%s: input redir\n", __func__);
cn = glptr->l.n = new_node(OC_CONCAT | SS | P(37));
cn->a.n = glptr;
xtc = TC_OPERAND | TC_UOPPRE;
glptr = NULL;
} else if (tc & (TC_BINOP | TC_UOPPOST)) {
+ debug_printf_parse("%s: TC_BINOP | TC_UOPPOST\n", __func__);
/* for binary and postfix-unary operators, jump back over
* previous operators with higher priority */
vn = cn;
@@ -1221,6 +1240,7 @@ static node *parse_expr(uint32_t iexp)
vn->a.n = cn;
} else {
+ debug_printf_parse("%s: other\n", __func__);
/* for operands and prefix-unary operators, attach them
* to last node */
vn = cn;
@@ -1228,12 +1248,14 @@ static node *parse_expr(uint32_t iexp)
cn->a.n = vn;
xtc = TC_OPERAND | TC_UOPPRE | TC_REGEXP;
if (tc & (TC_OPERAND | TC_REGEXP)) {
+ debug_printf_parse("%s: TC_OPERAND | TC_REGEXP\n", __func__);
xtc = TC_UOPPRE | TC_UOPPOST | TC_BINOP | TC_OPERAND | iexp;
/* one should be very careful with switch on tclass -
* only simple tclasses should be used! */
switch (tc) {
case TC_VARIABLE:
case TC_ARRAY:
+ debug_printf_parse("%s: TC_VARIABLE | TC_ARRAY\n", __func__);
cn->info = OC_VAR;
v = hash_search(ahash, t_string);
if (v != NULL) {
@@ -1250,6 +1272,7 @@ static node *parse_expr(uint32_t iexp)
case TC_NUMBER:
case TC_STRING:
+ debug_printf_parse("%s: TC_NUMBER | TC_STRING\n", __func__);
cn->info = OC_VAR;
v = cn->l.v = xzalloc(sizeof(var));
if (tc & TC_NUMBER)
@@ -1259,32 +1282,41 @@ static node *parse_expr(uint32_t iexp)
break;
case TC_REGEXP:
+ debug_printf_parse("%s: TC_REGEXP\n", __func__);
mk_re_node(t_string, cn, xzalloc(sizeof(regex_t)*2));
break;
case TC_FUNCTION:
+ debug_printf_parse("%s: TC_FUNCTION\n", __func__);
cn->info = OC_FUNC;
cn->r.f = newfunc(t_string);
cn->l.n = condition();
break;
case TC_SEQSTART:
+ debug_printf_parse("%s: TC_SEQSTART\n", __func__);
cn = vn->r.n = parse_expr(TC_SEQTERM);
+ if (!cn)
+ syntax_error("Empty sequence");
cn->a.n = vn;
break;
case TC_GETLINE:
+ debug_printf_parse("%s: TC_GETLINE\n", __func__);
glptr = cn;
xtc = TC_OPERAND | TC_UOPPRE | TC_BINOP | iexp;
break;
case TC_BUILTIN:
+ debug_printf_parse("%s: TC_BUILTIN\n", __func__);
cn->l.n = condition();
break;
}
}
}
}
+
+ debug_printf_parse("%s() returns %p\n", __func__, sn.r.n);
return sn.r.n;
}
@@ -1353,18 +1385,25 @@ static void chain_group(void)
} while (c & TC_NEWLINE);
if (c & TC_GRPSTART) {
+ debug_printf_parse("%s: TC_GRPSTART\n", __func__);
while (next_token(TC_GRPSEQ | TC_GRPTERM) != TC_GRPTERM) {
+ debug_printf_parse("%s: !TC_GRPTERM\n", __func__);
if (t_tclass & TC_NEWLINE)
continue;
rollback_token();
chain_group();
}
+ debug_printf_parse("%s: TC_GRPTERM\n", __func__);
} else if (c & (TC_OPSEQ | TC_OPTERM)) {
+ debug_printf_parse("%s: TC_OPSEQ | TC_OPTERM\n", __func__);
rollback_token();
chain_expr(OC_EXEC | Vx);
- } else { /* TC_STATEMNT */
+ } else {
+ /* TC_STATEMNT */
+ debug_printf_parse("%s: TC_STATEMNT(?)\n", __func__);
switch (t_info & OPCLSMASK) {
case ST_IF:
+ debug_printf_parse("%s: ST_IF\n", __func__);
n = chain_node(OC_BR | Vx);
n->l.n = condition();
chain_group();
@@ -1379,12 +1418,14 @@ static void chain_group(void)
break;
case ST_WHILE:
+ debug_printf_parse("%s: ST_WHILE\n", __func__);
n2 = condition();
n = chain_loop(NULL);
n->l.n = n2;
break;
case ST_DO:
+ debug_printf_parse("%s: ST_DO\n", __func__);
n2 = chain_node(OC_EXEC);
n = chain_loop(NULL);
n2->a.n = n->a.n;
@@ -1393,6 +1434,7 @@ static void chain_group(void)
break;
case ST_FOR:
+ debug_printf_parse("%s: ST_FOR\n", __func__);
next_token(TC_SEQSTART);
n2 = parse_expr(TC_SEMICOL | TC_SEQTERM);
if (t_tclass & TC_SEQTERM) { /* for-in */
@@ -1418,6 +1460,7 @@ static void chain_group(void)
case OC_PRINT:
case OC_PRINTF:
+ debug_printf_parse("%s: OC_PRINT[F]\n", __func__);
n = chain_node(t_info);
n->l.n = parse_expr(TC_OPTERM | TC_OUTRDR | TC_GRPTERM);
if (t_tclass & TC_OUTRDR) {
@@ -1429,17 +1472,20 @@ static void chain_group(void)
break;
case OC_BREAK:
+ debug_printf_parse("%s: OC_BREAK\n", __func__);
n = chain_node(OC_EXEC);
n->a.n = break_ptr;
break;
case OC_CONTINUE:
+ debug_printf_parse("%s: OC_CONTINUE\n", __func__);
n = chain_node(OC_EXEC);
n->a.n = continue_ptr;
break;
/* delete, next, nextfile, return, exit */
default:
+ debug_printf_parse("%s: default\n", __func__);
chain_expr(t_info);
}
}
@@ -1457,19 +1503,24 @@ static void parse_program(char *p)
while ((tclass = next_token(TC_EOF | TC_OPSEQ | TC_GRPSTART |
TC_OPTERM | TC_BEGIN | TC_END | TC_FUNCDECL)) != TC_EOF) {
- if (tclass & TC_OPTERM)
+ if (tclass & TC_OPTERM) {
+ debug_printf_parse("%s: TC_OPTERM\n", __func__);
continue;
+ }
seq = &mainseq;
if (tclass & TC_BEGIN) {
+ debug_printf_parse("%s: TC_BEGIN\n", __func__);
seq = &beginseq;
chain_group();
} else if (tclass & TC_END) {
+ debug_printf_parse("%s: TC_END\n", __func__);
seq = &endseq;
chain_group();
} else if (tclass & TC_FUNCDECL) {
+ debug_printf_parse("%s: TC_FUNCDECL\n", __func__);
next_token(TC_FUNCTION);
g_pos++;
f = newfunc(t_string);
@@ -1487,22 +1538,27 @@ static void parse_program(char *p)
clear_array(ahash);
} else if (tclass & TC_OPSEQ) {
+ debug_printf_parse("%s: TC_OPSEQ\n", __func__);
rollback_token();
cn = chain_node(OC_TEST);
cn->l.n = parse_expr(TC_OPTERM | TC_EOF | TC_GRPSTART);
if (t_tclass & TC_GRPSTART) {
+ debug_printf_parse("%s: TC_GRPSTART\n", __func__);
rollback_token();
chain_group();
} else {
+ debug_printf_parse("%s: !TC_GRPSTART\n", __func__);
chain_node(OC_PRINT);
}
cn->r.n = mainseq.last;
} else /* if (tclass & TC_GRPSTART) */ {
+ debug_printf_parse("%s: TC_GRPSTART(?)\n", __func__);
rollback_token();
chain_group();
}
}
+ debug_printf_parse("%s: TC_EOF\n", __func__);
}
@@ -2627,7 +2683,7 @@ static var *evaluate(node *op, var *res)
rsm = iF;
}
- if (!rsm->F) {
+ if (!rsm || !rsm->F) {
setvar_i(intvar[ERRNO], errno);
setvar_i(res, -1);
break;
@@ -2961,7 +3017,7 @@ static rstream *next_input_file(void)
#define rsm (G.next_input_file__rsm)
#define files_happen (G.next_input_file__files_happen)
- FILE *F = NULL;
+ FILE *F;
const char *fname, *ind;
if (rsm.F)
@@ -2969,19 +3025,21 @@ static rstream *next_input_file(void)
rsm.F = NULL;
rsm.pos = rsm.adv = 0;
- do {
+ for (;;) {
if (getvar_i(intvar[ARGIND])+1 >= getvar_i(intvar[ARGC])) {
if (files_happen)
return NULL;
fname = "-";
F = stdin;
- } else {
- ind = getvar_s(incvar(intvar[ARGIND]));
- fname = getvar_s(findvar(iamarray(intvar[ARGV]), ind));
- if (fname && *fname && !is_assignment(fname))
- F = xfopen_stdin(fname);
+ break;
}
- } while (!F);
+ ind = getvar_s(incvar(intvar[ARGIND]));
+ fname = getvar_s(findvar(iamarray(intvar[ARGV]), ind));
+ if (fname && *fname && !is_assignment(fname)) {
+ F = xfopen_stdin(fname);
+ break;
+ }
+ }
files_happen = TRUE;
setvar_s(intvar[FILENAME], fname);
@@ -2995,7 +3053,7 @@ int awk_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int awk_main(int argc, char **argv)
{
unsigned opt;
- char *opt_F, *opt_W;
+ char *opt_F;
llist_t *list_v = NULL;
llist_t *list_f = NULL;
int i, j;
@@ -3057,7 +3115,7 @@ int awk_main(int argc, char **argv)
}
}
opt_complementary = "v::f::"; /* -v and -f can occur multiple times */
- opt = getopt32(argv, "F:v:f:W:", &opt_F, &list_v, &list_f, &opt_W);
+ opt = getopt32(argv, "F:v:f:W:", &opt_F, &list_v, &list_f, NULL);
argv += optind;
argc -= optind;
if (opt & 0x1)
@@ -3091,7 +3149,7 @@ int awk_main(int argc, char **argv)
parse_program(*argv++);
}
if (opt & 0x8) // -W
- bb_error_msg("warning: unrecognized option '-W %s' ignored", opt_W);
+ bb_error_msg("warning: option -W is ignored");
/* fill in ARGV array */
setvar_i(intvar[ARGC], argc);
diff --git a/editors/diff.c b/editors/diff.c
index 80eb97e..2a89806 100644
--- a/editors/diff.c
+++ b/editors/diff.c
@@ -716,6 +716,7 @@ static int diffreg(char *file[2])
#endif
"/tmp/difXXXXXX";
int fd_tmp = xmkstemp(name);
+
unlink(name);
if (bb_copyfd_eof(fd, fd_tmp) < 0)
xfunc_die();
diff --git a/editors/patch.c b/editors/patch.c
index d2bf433..4cdc394 100644
--- a/editors/patch.c
+++ b/editors/patch.c
@@ -474,19 +474,21 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
// We're deleting oldname if new file is /dev/null (before -p)
// or if new hunk is empty (zero context) after patching
- if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum))
- {
+ if (!strcmp(name, "/dev/null") || !(reverse ? oldsum : newsum)) {
name = reverse ? newname : oldname;
empty++;
}
// handle -p path truncation.
- for (i=0, s = name; *s;) {
- if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i) break;
- if (*(s++)=='/') {
- name = s;
- i++;
- }
+ for (i = 0, s = name; *s;) {
+ if ((option_mask32 & FLAG_PATHLEN) && TT.prefix == i)
+ break;
+ if (*s++ != '/')
+ continue;
+ while (*s == '/')
+ s++;
+ i++;
+ name = s;
}
if (empty) {
diff --git a/editors/sed.c b/editors/sed.c
index 1552cf3..4e9babb 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -26,7 +26,7 @@
* add_input_file() adds a FILE* to the list of input files. We need to
* know all input sources ahead of time to find the last line for the $ match.
*
- * process_files() does actual sedding, reading data lines from each input FILE *
+ * process_files() does actual sedding, reading data lines from each input FILE*
* (which could be stdin) and applying the sed command list (sed_cmd_head) to
* each of the resulting lines.
*
@@ -57,7 +57,8 @@
*/
//usage:#define sed_trivial_usage
-//usage: "[-efinr] SED_CMD [FILE]..."
+//usage: "[-inr] [-f FILE]... [-e CMD]... [FILE]...\n"
+//usage: "or: sed [-inr] CMD [FILE]..."
//usage:#define sed_full_usage "\n\n"
//usage: " -e CMD Add CMD to sed commands to be executed"
//usage: "\n -f FILE Add FILE contents to sed commands to be executed"
@@ -281,7 +282,7 @@ static int index_of_next_unescaped_regexp_delim(int delimiter, const char *str)
static int parse_regex_delim(const char *cmdstr, char **match, char **replace)
{
const char *cmdstr_ptr = cmdstr;
- char delimiter;
+ unsigned char delimiter;
int idx = 0;
/* verify that the 's' or 'y' is followed by something. That something
@@ -296,7 +297,7 @@ static int parse_regex_delim(const char *cmdstr, char **match, char **replace)
/* save the replacement string */
cmdstr_ptr += idx + 1;
- idx = index_of_next_unescaped_regexp_delim(-delimiter, cmdstr_ptr);
+ idx = index_of_next_unescaped_regexp_delim(- (int)delimiter, cmdstr_ptr);
*replace = copy_parsing_escapes(cmdstr_ptr, idx);
return ((cmdstr_ptr - cmdstr) + idx);
@@ -321,10 +322,11 @@ static int get_address(const char *my_str, int *linenum, regex_t ** regex)
char *temp;
delimiter = '/';
- if (*my_str == '\\') delimiter = *++pos;
+ if (*my_str == '\\')
+ delimiter = *++pos;
next = index_of_next_unescaped_regexp_delim(delimiter, ++pos);
temp = copy_parsing_escapes(pos, next);
- *regex = xmalloc(sizeof(regex_t));
+ *regex = xzalloc(sizeof(regex_t));
xregcomp(*regex, temp, G.regex_type|REG_NEWLINE);
free(temp);
/* Move position to next character after last delimiter */
@@ -433,8 +435,10 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr)
/* compile the match string into a regex */
if (*match != '\0') {
/* If match is empty, we use last regex used at runtime */
- sed_cmd->sub_match = xmalloc(sizeof(regex_t));
+ sed_cmd->sub_match = xzalloc(sizeof(regex_t));
+ dbg("xregcomp('%s',%x)", match, cflags);
xregcomp(sed_cmd->sub_match, match, cflags);
+ dbg("regcomp ok");
}
free(match);
@@ -716,8 +720,12 @@ static int do_subst_command(sed_cmd_t *sed_cmd, char **line_p)
G.previous_regex_ptr = current_regex;
/* Find the first match */
- if (REG_NOMATCH == regexec(current_regex, line, 10, G.regmatch, 0))
+ dbg("matching '%s'", line);
+ if (REG_NOMATCH == regexec(current_regex, line, 10, G.regmatch, 0)) {
+ dbg("no match");
return 0;
+ }
+ dbg("match");
/* Initialize temporary output buffer. */
G.pipeline.buf = xmalloc(PIPE_GROW);
@@ -729,9 +737,10 @@ static int do_subst_command(sed_cmd_t *sed_cmd, char **line_p)
int i;
/* Work around bug in glibc regexec, demonstrated by:
- echo " a.b" | busybox sed 's [^ .]* x g'
- The match_count check is so not to break
- echo "hi" | busybox sed 's/^/!/g' */
+ * echo " a.b" | busybox sed 's [^ .]* x g'
+ * The match_count check is so not to break
+ * echo "hi" | busybox sed 's/^/!/g'
+ */
if (!G.regmatch[0].rm_so && !G.regmatch[0].rm_eo && match_count) {
pipe_putc(*line++);
continue;
@@ -762,11 +771,14 @@ static int do_subst_command(sed_cmd_t *sed_cmd, char **line_p)
altered++;
/* if we're not doing this globally, get out now */
- if (sed_cmd->which_match)
+ if (sed_cmd->which_match != 0)
+ break;
+
+ if (*line == '\0')
break;
//maybe (G.regmatch[0].rm_eo ? REG_NOTBOL : 0) instead of unconditional REG_NOTBOL?
- } while (*line && regexec(current_regex, line, 10, G.regmatch, REG_NOTBOL) != REG_NOMATCH);
+ } while (regexec(current_regex, line, 10, G.regmatch, REG_NOTBOL) != REG_NOMATCH);
/* Copy rest of string into output pipeline */
while (1) {
@@ -1066,8 +1078,8 @@ static void process_files(void)
}
/* actual sedding */
- //bb_error_msg("pattern_space:'%s' next_line:'%s' cmd:%c",
- //pattern_space, next_line, sed_cmd->cmd);
+ dbg("pattern_space:'%s' next_line:'%s' cmd:%c",
+ pattern_space, next_line, sed_cmd->cmd);
switch (sed_cmd->cmd) {
/* Print line number */
@@ -1114,6 +1126,7 @@ static void process_files(void)
case 's':
if (!do_subst_command(sed_cmd, &pattern_space))
break;
+ dbg("do_subst_command succeeeded:'%s'", pattern_space);
substituted |= 1;
/* handle p option */
diff --git a/editors/vi.c b/editors/vi.c
index 96a0c8d..b4ad12e 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -278,7 +278,6 @@ struct globals {
smallint cmd_mode; // 0=command 1=insert 2=replace
int file_modified; // buffer contents changed (counter, not flag!)
int last_file_modified; // = -1;
- int fn_start; // index of first cmd line file name
int save_argc; // how many file names on cmd line
int cmdcnt; // repetition count
unsigned rows, columns; // the terminal screen is this size
@@ -363,7 +362,6 @@ struct globals {
#define cmd_mode (G.cmd_mode )
#define file_modified (G.file_modified )
#define last_file_modified (G.last_file_modified )
-#define fn_start (G.fn_start )
#define save_argc (G.save_argc )
#define cmdcnt (G.cmdcnt )
#define rows (G.rows )
@@ -599,9 +597,10 @@ int vi_main(int argc, char **argv)
}
// The argv array can be used by the ":next" and ":rewind" commands
- // save optind.
- fn_start = optind; // remember first file name for :next and :rew
+ argv += optind;
+ argc -= optind;
save_argc = argc;
+ optind = 0;
//----- This is the main file handling loop --------------
while (1) {
@@ -1021,7 +1020,7 @@ static void colon(char *buf)
} else if (strncmp(cmd, "edit", i) == 0) { // Edit a file
// don't edit, if the current file has been modified
if (file_modified && !useforce) {
- status_line_bold("No write since last change (:edit! overrides)");
+ status_line_bold("No write since last change (:%s! overrides)", cmd);
goto ret;
}
if (args[0]) {
@@ -1040,13 +1039,13 @@ static void colon(char *buf)
goto ret;
#if ENABLE_FEATURE_VI_YANKMARK
- if (Ureg >= 0 && Ureg < 28 && reg[Ureg] != 0) {
+ if (Ureg >= 0 && Ureg < 28) {
free(reg[Ureg]); // free orig line reg- for 'U'
- reg[Ureg]= 0;
+ reg[Ureg] = NULL;
}
- if (YDreg >= 0 && YDreg < 28 && reg[YDreg] != 0) {
+ if (YDreg >= 0 && YDreg < 28) {
free(reg[YDreg]); // free default yank/delete register
- reg[YDreg]= 0;
+ reg[YDreg] = NULL;
}
#endif
// how many lines in text[]?
@@ -1111,11 +1110,12 @@ static void colon(char *buf)
Hit_Return();
} else if (strncmp(cmd, "quit", i) == 0 // quit
|| strncmp(cmd, "next", i) == 0 // edit next file
+ || strncmp(cmd, "prev", i) == 0 // edit previous file
) {
int n;
if (useforce) {
- // force end of argv list
if (*cmd == 'q') {
+ // force end of argv list
optind = save_argc;
}
editing = 0;
@@ -1123,8 +1123,7 @@ static void colon(char *buf)
}
// don't exit if the file been modified
if (file_modified) {
- status_line_bold("No write since last change (:%s! overrides)",
- (*cmd == 'q' ? "quit" : "next"));
+ status_line_bold("No write since last change (:%s! overrides)", cmd);
goto ret;
}
// are there other file to edit
@@ -1137,6 +1136,14 @@ static void colon(char *buf)
status_line_bold("No more files to edit");
goto ret;
}
+ if (*cmd == 'p') {
+ // are there previous files to edit
+ if (optind < 1) {
+ status_line_bold("No previous files to edit");
+ goto ret;
+ }
+ optind -= 2;
+ }
editing = 0;
} else if (strncmp(cmd, "read", i) == 0) { // read file into text[]
fn = args;
@@ -1172,10 +1179,10 @@ static void colon(char *buf)
}
} else if (strncmp(cmd, "rewind", i) == 0) { // rewind cmd line args
if (file_modified && !useforce) {
- status_line_bold("No write since last change (:rewind! overrides)");
+ status_line_bold("No write since last change (:%s! overrides)", cmd);
} else {
// reset the filenames to edit
- optind = fn_start - 1;
+ optind = -1; /* start from 0th file */
editing = 0;
}
#if ENABLE_FEATURE_VI_SET
@@ -1225,51 +1232,53 @@ static void colon(char *buf)
#endif /* FEATURE_VI_SET */
#if ENABLE_FEATURE_VI_SEARCH
} else if (cmd[0] == 's') { // substitute a pattern with a replacement pattern
- char *ls, *F, *R;
- int gflag;
+ char *F, *R, *flags;
+ size_t len_F, len_R;
+ int gflag; // global replace flag
// F points to the "find" pattern
// R points to the "replace" pattern
- // replace the cmd line delimiters "/" with NULLs
- gflag = 0; // global replace flag
+ // replace the cmd line delimiters "/" with NULs
c = orig_buf[1]; // what is the delimiter
F = orig_buf + 2; // start of "find"
R = strchr(F, c); // middle delimiter
if (!R)
goto colon_s_fail;
+ len_F = R - F;
*R++ = '\0'; // terminate "find"
- buf1 = strchr(R, c);
- if (!buf1)
+ flags = strchr(R, c);
+ if (!flags)
goto colon_s_fail;
- *buf1++ = '\0'; // terminate "replace"
- if (*buf1 == 'g') { // :s/foo/bar/g
- buf1++;
- gflag++; // turn on gflag
- }
+ len_R = flags - R;
+ *flags++ = '\0'; // terminate "replace"
+ gflag = *flags;
+
q = begin_line(q);
if (b < 0) { // maybe :s/foo/bar/
- q = begin_line(dot); // start with cur line
- b = count_lines(text, q); // cur line number
+ q = begin_line(dot); // start with cur line
+ b = count_lines(text, q); // cur line number
}
if (e < 0)
e = b; // maybe :.s/foo/bar/
+
for (i = b; i <= e; i++) { // so, :20,23 s \0 find \0 replace \0
- ls = q; // orig line start
+ char *ls = q; // orig line start
+ char *found;
vc4:
- buf1 = char_search(q, F, FORWARD, LIMITED); // search cur line only for "find"
- if (buf1) {
+ found = char_search(q, F, FORWARD, LIMITED); // search cur line only for "find"
+ if (found) {
uintptr_t bias;
// we found the "find" pattern - delete it
- text_hole_delete(buf1, buf1 + strlen(F) - 1);
+ text_hole_delete(found, found + len_F - 1);
// inset the "replace" patern
- bias = string_insert(buf1, R); // insert the string
- buf1 += bias;
+ bias = string_insert(found, R); // insert the string
+ found += bias;
ls += bias;
/*q += bias; - recalculated anyway */
// check for "global" :s/foo/bar/g
- if (gflag == 1) {
- if ((buf1 + strlen(R)) < end_line(ls)) {
- q = buf1 + strlen(R);
+ if (gflag == 'g') {
+ if ((found + len_R) < end_line(ls)) {
+ q = found + len_R;
goto vc4; // don't let q move past cur line
}
}
@@ -2073,6 +2082,14 @@ static uintptr_t text_hole_make(char *p, int size) // at "p", make a 'size' byte
dot += bias;
end += bias;
p += bias;
+#if ENABLE_FEATURE_VI_YANKMARK
+ {
+ int i;
+ for (i = 0; i < ARRAY_SIZE(mark); i++)
+ if (mark[i])
+ mark[i] += bias;
+ }
+#endif
text = new_text;
}
memmove(p + size, p, end - size - p);
@@ -2304,7 +2321,7 @@ static void rawmode(void)
{
tcgetattr(0, &term_orig);
term_vi = term_orig;
- term_vi.c_lflag &= (~ICANON & ~ECHO); // leave ISIG ON- allow intr's
+ term_vi.c_lflag &= (~ICANON & ~ECHO); // leave ISIG on - allow intr's
term_vi.c_iflag &= (~IXON & ~ICRNL);
term_vi.c_oflag &= (~ONLCR);
term_vi.c_cc[VMIN] = 1;
@@ -3063,7 +3080,6 @@ static void refresh(int full_screen)
//----- Execute a Vi Command -----------------------------------
static void do_cmd(int c)
{
- const char *msg = msg; // for compiler
char *p, *q, *save_dot;
char buf[12];
int dir;
@@ -3072,8 +3088,8 @@ static void do_cmd(int c)
// c1 = c; // quiet the compiler
// cnt = yf = 0; // quiet the compiler
-// msg = p = q = save_dot = buf; // quiet the compiler
- memset(buf, '\0', 12);
+// p = q = save_dot = buf; // quiet the compiler
+ memset(buf, '\0', sizeof(buf));
show_status_line();
@@ -3189,19 +3205,18 @@ static void do_cmd(int c)
case KEYCODE_LEFT: // cursor key Left
case 8: // ctrl-H- move left (This may be ERASE char)
case 0x7f: // DEL- move left (This may be ERASE char)
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- dot_left();
+ do {
+ dot_left();
+ } while (--cmdcnt > 0);
break;
case 10: // Newline ^J
case 'j': // j- goto next line, same col
case KEYCODE_DOWN: // cursor key Down
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- dot_next(); // go to next B-o-l
- dot = move_to_col(dot, ccol + offset); // try stay in same col
+ do {
+ dot_next(); // go to next B-o-l
+ // try stay in same col
+ dot = move_to_col(dot, ccol + offset);
+ } while (--cmdcnt > 0);
break;
case 12: // ctrl-L force redraw whole screen
case 18: // ctrl-R force redraw
@@ -3214,11 +3229,10 @@ static void do_cmd(int c)
break;
case 13: // Carriage Return ^M
case '+': // +- goto next line
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- dot_next();
- dot_skip_over_ws();
+ do {
+ dot_next();
+ dot_skip_over_ws();
+ } while (--cmdcnt > 0);
break;
case 21: // ctrl-U scroll up half screen
dot_scroll((rows - 2) / 2, -1);
@@ -3236,10 +3250,9 @@ static void do_cmd(int c)
case ' ': // move right
case 'l': // move right
case KEYCODE_RIGHT: // Cursor Key Right
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- dot_right();
+ do {
+ dot_right();
+ } while (--cmdcnt > 0);
break;
#if ENABLE_FEATURE_VI_YANKMARK
case '"': // "- name a register to use for Delete/Yank
@@ -3309,7 +3322,7 @@ static void do_cmd(int c)
end_cmd_q(); // stop adding to q
break;
case 'U': // U- Undo; replace current line with original version
- if (reg[Ureg] != 0) {
+ if (reg[Ureg] != NULL) {
p = begin_line(dot);
q = end_line(dot);
p = text_hole_delete(p, q); // delete cur line
@@ -3321,11 +3334,12 @@ static void do_cmd(int c)
#endif /* FEATURE_VI_YANKMARK */
case '$': // $- goto end of line
case KEYCODE_END: // Cursor Key End
- if (--cmdcnt > 0) {
+ for (;;) {
+ dot = end_line(dot);
+ if (--cmdcnt <= 0)
+ break;
dot_next();
- do_cmd(c);
}
- dot = end_line(dot);
break;
case '%': // %- find matching char of pair () [] {}
for (q = dot; q < end && *q != '\n'; q++) {
@@ -3350,38 +3364,35 @@ static void do_cmd(int c)
//
//**** fall through to ... ';'
case ';': // ;- look at rest of line for last forward char
- if (--cmdcnt > 0) {
- do_cmd(';');
- }
- if (last_forward_char == 0)
- break;
- q = dot + 1;
- while (q < end - 1 && *q != '\n' && *q != last_forward_char) {
- q++;
- }
- if (*q == last_forward_char)
- dot = q;
+ do {
+ if (last_forward_char == 0)
+ break;
+ q = dot + 1;
+ while (q < end - 1 && *q != '\n' && *q != last_forward_char) {
+ q++;
+ }
+ if (*q == last_forward_char)
+ dot = q;
+ } while (--cmdcnt > 0);
break;
case ',': // repeat latest 'f' in opposite direction
- if (--cmdcnt > 0) {
- do_cmd(',');
- }
if (last_forward_char == 0)
break;
- q = dot - 1;
- while (q >= text && *q != '\n' && *q != last_forward_char) {
- q--;
- }
- if (q >= text && *q == last_forward_char)
- dot = q;
+ do {
+ q = dot - 1;
+ while (q >= text && *q != '\n' && *q != last_forward_char) {
+ q--;
+ }
+ if (q >= text && *q == last_forward_char)
+ dot = q;
+ } while (--cmdcnt > 0);
break;
case '-': // -- goto prev line
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- dot_prev();
- dot_skip_over_ws();
+ do {
+ dot_prev();
+ dot_skip_over_ws();
+ } while (--cmdcnt > 0);
break;
#if ENABLE_FEATURE_VI_DOT_CMD
case '.': // .- repeat the last modifying command
@@ -3413,9 +3424,6 @@ static void do_cmd(int c)
// user changed mind and erased the "/"- do nothing
break;
case 'N': // N- backward search for last pattern
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
dir = BACK; // assume BACKWARD search
p = dot - 1;
if (last_search_pattern[0] == '?') {
@@ -3427,41 +3435,41 @@ static void do_cmd(int c)
case 'n': // n- repeat search for last pattern
// search rest of text[] starting at next char
// if search fails return orignal "p" not the "p+1" address
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
+ do {
+ const char *msg;
dc3:
- dir = FORWARD; // assume FORWARD search
- p = dot + 1;
- if (last_search_pattern[0] == '?') {
- dir = BACK;
- p = dot - 1;
- }
+ dir = FORWARD; // assume FORWARD search
+ p = dot + 1;
+ if (last_search_pattern[0] == '?') {
+ dir = BACK;
+ p = dot - 1;
+ }
dc4:
- q = char_search(p, last_search_pattern + 1, dir, FULL);
- if (q != NULL) {
- dot = q; // good search, update "dot"
- msg = "";
- goto dc2;
- }
- // no pattern found between "dot" and "end"- continue at top
- p = text;
- if (dir == BACK) {
- p = end - 1;
- }
- q = char_search(p, last_search_pattern + 1, dir, FULL);
- if (q != NULL) { // found something
- dot = q; // found new pattern- goto it
- msg = "search hit BOTTOM, continuing at TOP";
+ q = char_search(p, last_search_pattern + 1, dir, FULL);
+ if (q != NULL) {
+ dot = q; // good search, update "dot"
+ msg = NULL;
+ goto dc2;
+ }
+ // no pattern found between "dot" and "end"- continue at top
+ p = text;
if (dir == BACK) {
- msg = "search hit TOP, continuing at BOTTOM";
+ p = end - 1;
+ }
+ q = char_search(p, last_search_pattern + 1, dir, FULL);
+ if (q != NULL) { // found something
+ dot = q; // found new pattern- goto it
+ msg = "search hit BOTTOM, continuing at TOP";
+ if (dir == BACK) {
+ msg = "search hit TOP, continuing at BOTTOM";
+ }
+ } else {
+ msg = "Pattern not found";
}
- } else {
- msg = "Pattern not found";
- }
dc2:
- if (*msg)
- status_line_bold("%s", msg);
+ if (msg)
+ status_line_bold("%s", msg);
+ } while (--cmdcnt > 0);
break;
case '{': // {- move backward paragraph
q = char_search(dot, "\n\n", BACK, FULL);
@@ -3506,7 +3514,7 @@ static void do_cmd(int c)
|| strncmp(p, "q!", cnt) == 0 // delete lines
) {
if (file_modified && p[1] != '!') {
- status_line_bold("No write since last change (:quit! overrides)");
+ status_line_bold("No write since last change (:%s! overrides)", p);
} else {
editing = 0;
}
@@ -3580,18 +3588,17 @@ static void do_cmd(int c)
case 'B': // B- back a blank-delimited Word
case 'E': // E- end of a blank-delimited word
case 'W': // W- forward a blank-delimited word
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
dir = FORWARD;
if (c == 'B')
dir = BACK;
- if (c == 'W' || isspace(dot[dir])) {
- dot = skip_thing(dot, 1, dir, S_TO_WS);
- dot = skip_thing(dot, 2, dir, S_OVER_WS);
- }
- if (c != 'W')
- dot = skip_thing(dot, 1, dir, S_BEFORE_WS);
+ do {
+ if (c == 'W' || isspace(dot[dir])) {
+ dot = skip_thing(dot, 1, dir, S_TO_WS);
+ dot = skip_thing(dot, 2, dir, S_OVER_WS);
+ }
+ if (c != 'W')
+ dot = skip_thing(dot, 1, dir, S_BEFORE_WS);
+ } while (--cmdcnt > 0);
break;
case 'C': // C- Change to e-o-l
case 'D': // D- delete to e-o-l
@@ -3642,20 +3649,19 @@ static void do_cmd(int c)
case 'i': // i- insert before current char
case KEYCODE_INSERT: // Cursor Key Insert
dc_i:
- cmd_mode = 1; // start insrting
+ cmd_mode = 1; // start inserting
break;
case 'J': // J- join current and next lines together
- if (--cmdcnt > 1) {
- do_cmd(c);
- }
- dot_end(); // move to NL
- if (dot < end - 1) { // make sure not last char in text[]
- *dot++ = ' '; // replace NL with space
- file_modified++;
- while (isblank(*dot)) { // delete leading WS
- dot_delete();
+ do {
+ dot_end(); // move to NL
+ if (dot < end - 1) { // make sure not last char in text[]
+ *dot++ = ' '; // replace NL with space
+ file_modified++;
+ while (isblank(*dot)) { // delete leading WS
+ dot_delete();
+ }
}
- }
+ } while (--cmdcnt > 0);
end_cmd_q(); // stop adding to q
break;
case 'L': // L- goto bottom line on screen
@@ -3699,20 +3705,19 @@ static void do_cmd(int c)
case 'X': // X- delete char before dot
case 'x': // x- delete the current char
case 's': // s- substitute the current char
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
dir = 0;
if (c == 'X')
dir = -1;
- if (dot[dir] != '\n') {
- if (c == 'X')
- dot--; // delete prev char
- dot = yank_delete(dot, dot, 0, YANKDEL); // delete char
- }
- if (c == 's')
- goto dc_i; // start insrting
+ do {
+ if (dot[dir] != '\n') {
+ if (c == 'X')
+ dot--; // delete prev char
+ dot = yank_delete(dot, dot, 0, YANKDEL); // delete char
+ }
+ } while (--cmdcnt > 0);
end_cmd_q(); // stop adding to q
+ if (c == 's')
+ goto dc_i; // start inserting
break;
case 'Z': // Z- if modified, {write}; exit
// ZZ means to save file (if necessary), then exit
@@ -3743,23 +3748,22 @@ static void do_cmd(int c)
break;
case 'b': // b- back a word
case 'e': // e- end of word
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
dir = FORWARD;
if (c == 'b')
dir = BACK;
- if ((dot + dir) < text || (dot + dir) > end - 1)
- break;
- dot += dir;
- if (isspace(*dot)) {
- dot = skip_thing(dot, (c == 'e') ? 2 : 1, dir, S_OVER_WS);
- }
- if (isalnum(*dot) || *dot == '_') {
- dot = skip_thing(dot, 1, dir, S_END_ALNUM);
- } else if (ispunct(*dot)) {
- dot = skip_thing(dot, 1, dir, S_END_PUNCT);
- }
+ do {
+ if ((dot + dir) < text || (dot + dir) > end - 1)
+ break;
+ dot += dir;
+ if (isspace(*dot)) {
+ dot = skip_thing(dot, (c == 'e') ? 2 : 1, dir, S_OVER_WS);
+ }
+ if (isalnum(*dot) || *dot == '_') {
+ dot = skip_thing(dot, 1, dir, S_END_ALNUM);
+ } else if (ispunct(*dot)) {
+ dot = skip_thing(dot, 1, dir, S_END_PUNCT);
+ }
+ } while (--cmdcnt > 0);
break;
case 'c': // c- change something
case 'd': // d- delete something
@@ -3844,11 +3848,10 @@ static void do_cmd(int c)
}
case 'k': // k- goto prev line, same col
case KEYCODE_UP: // cursor key Up
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- dot_prev();
- dot = move_to_col(dot, ccol + offset); // try stay in same col
+ do {
+ dot_prev();
+ dot = move_to_col(dot, ccol + offset); // try stay in same col
+ } while (--cmdcnt > 0);
break;
case 'r': // r- replace the current char with user input
c1 = get_one_char(); // get the replacement char
@@ -3866,19 +3869,18 @@ static void do_cmd(int c)
last_forward_char = 0;
break;
case 'w': // w- forward a word
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- if (isalnum(*dot) || *dot == '_') { // we are on ALNUM
- dot = skip_thing(dot, 1, FORWARD, S_END_ALNUM);
- } else if (ispunct(*dot)) { // we are on PUNCT
- dot = skip_thing(dot, 1, FORWARD, S_END_PUNCT);
- }
- if (dot < end - 1)
- dot++; // move over word
- if (isspace(*dot)) {
- dot = skip_thing(dot, 2, FORWARD, S_OVER_WS);
- }
+ do {
+ if (isalnum(*dot) || *dot == '_') { // we are on ALNUM
+ dot = skip_thing(dot, 1, FORWARD, S_END_ALNUM);
+ } else if (ispunct(*dot)) { // we are on PUNCT
+ dot = skip_thing(dot, 1, FORWARD, S_END_PUNCT);
+ }
+ if (dot < end - 1)
+ dot++; // move over word
+ if (isspace(*dot)) {
+ dot = skip_thing(dot, 2, FORWARD, S_OVER_WS);
+ }
+ } while (--cmdcnt > 0);
break;
case 'z': // z-
c1 = get_one_char(); // get the replacement char
@@ -3894,17 +3896,16 @@ static void do_cmd(int c)
dot = move_to_col(dot, cmdcnt - 1); // try to move to column
break;
case '~': // ~- flip the case of letters a-z -> A-Z
- if (--cmdcnt > 0) {
- do_cmd(c);
- }
- if (islower(*dot)) {
- *dot = toupper(*dot);
- file_modified++;
- } else if (isupper(*dot)) {
- *dot = tolower(*dot);
- file_modified++;
- }
- dot_right();
+ do {
+ if (islower(*dot)) {
+ *dot = toupper(*dot);
+ file_modified++;
+ } else if (isupper(*dot)) {
+ *dot = tolower(*dot);
+ file_modified++;
+ }
+ dot_right();
+ } while (--cmdcnt > 0);
end_cmd_q(); // stop adding to q
break;
//----- The Cursor and Function Keys -----------------------------
diff --git a/examples/android-build b/examples/android-build
index f5fe49b..89f3b63 100755
--- a/examples/android-build
+++ b/examples/android-build
@@ -2,9 +2,10 @@
# Build Busybox against Android's bionic
# Originally by Dan Fandrich
#
-# Configure with android_defconfig
+# Configure with "make android_defconfig"
+#
# This file has been tested on Android Froyo (the lack of ttyname_r in
-# the must be patched around) and Gingerbread.
+# the android libc must be patched around) and Gingerbread.
# Point this to the Android root directory; it's used in the defconfig CFLAGS
export A="$HOME/android"
diff --git a/examples/depmod.pl b/examples/depmod.pl
index f324b12..809dc08 100755
--- a/examples/depmod.pl
+++ b/examples/depmod.pl
@@ -199,7 +199,7 @@ if ($stdout == 0) {
open(STDOUT, ">$basedir/modules.dep")
or die "cannot open $basedir/modules.dep: $!";
}
-my $kseries = $basedir =~ m,/2\.6\.[^/]*, ? '2.6' : '2.4';
+my $kseries = $basedir =~ m,/2\.4\.[^/]*, ? '2.4' : 'others';
foreach my $module ( keys %$mod ) {
if($kseries eq '2.4') {
diff --git a/examples/udhcp/udhcpd.conf b/examples/udhcp/udhcpd.conf
index cd2957c..eca44c0 100644
--- a/examples/udhcp/udhcpd.conf
+++ b/examples/udhcp/udhcpd.conf
@@ -68,6 +68,8 @@ opt wins 192.168.10.10
option dns 129.219.13.81 # appended to above DNS servers for a total of 3
option domain local
option lease 864000 # default: 10 days
+option msstaticroutes 10.0.0.0/8 10.127.0.1 # single static route
+option staticroutes 10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1
# Arbitrary option in hex form:
option 0x08 01020304 # option 8: "cookie server IP addr: 1.2.3.4"
@@ -101,6 +103,8 @@ option 0x08 01020304 # option 8: "cookie server IP addr: 1.2.3.4"
#opt swapsrv IP
# Options specifying routes
#opt routes IP_PAIR_LIST
+#opt staticroutes STATIC_ROUTES # RFC 3442 classless static route option
+#opt msstaticroutes STATIC_ROUTES # same, using MS option number
# Obsolete options, no longer supported
#opt logsrv IP_LIST # 704/UDP log server (not syslog!)
#opt namesrv IP_LIST # IEN 116 name server, obsolete (August 1979!!!)
@@ -109,5 +113,3 @@ option 0x08 01020304 # option 8: "cookie server IP addr: 1.2.3.4"
# TODO: in development
#opt userclass STRING # RFC 3004. set of LASCII strings. "I am a printer" etc
#opt sipserv STRING LIST # RFC 3361. flag byte, then: 0: domain names, 1: IP addrs
-#opt staticroutes STATIC_ROUTES
-#opt msstaticroutes STATIC_ROUTES
diff --git a/findutils/grep.c b/findutils/grep.c
index 5f42242..f14d6e6 100644
--- a/findutils/grep.c
+++ b/findutils/grep.c
@@ -85,6 +85,7 @@
//usage: "\n -r Recurse"
//usage: "\n -i Ignore case"
//usage: "\n -w Match whole words only"
+//usage: "\n -x Match whole lines only"
//usage: "\n -F PATTERN is a literal (not regexp)"
//usage: IF_FEATURE_GREP_EGREP_ALIAS(
//usage: "\n -E PATTERN is an extended regexp"
@@ -113,7 +114,7 @@
//usage:#define fgrep_full_usage ""
#define OPTSTR_GREP \
- "lnqvscFiHhe:f:Lorm:w" \
+ "lnqvscFiHhe:f:Lorm:wx" \
IF_FEATURE_GREP_CONTEXT("A:B:C:") \
IF_FEATURE_GREP_EGREP_ALIAS("E") \
IF_EXTRA_COMPAT("z") \
@@ -138,6 +139,7 @@ enum {
OPTBIT_r, /* recurse dirs */
OPTBIT_m, /* -m MAX_MATCHES */
OPTBIT_w, /* -w whole word match */
+ OPTBIT_x, /* -x whole line match */
IF_FEATURE_GREP_CONTEXT( OPTBIT_A ,) /* -A NUM: after-match context */
IF_FEATURE_GREP_CONTEXT( OPTBIT_B ,) /* -B NUM: before-match context */
IF_FEATURE_GREP_CONTEXT( OPTBIT_C ,) /* -C NUM: -A and -B combined */
@@ -160,6 +162,7 @@ enum {
OPT_r = 1 << OPTBIT_r,
OPT_m = 1 << OPTBIT_m,
OPT_w = 1 << OPTBIT_w,
+ OPT_x = 1 << OPTBIT_x,
OPT_A = IF_FEATURE_GREP_CONTEXT( (1 << OPTBIT_A)) + 0,
OPT_B = IF_FEATURE_GREP_CONTEXT( (1 << OPTBIT_B)) + 0,
OPT_C = IF_FEATURE_GREP_CONTEXT( (1 << OPTBIT_C)) + 0,
@@ -370,9 +373,12 @@ static int grep_file(FILE *file)
&gl->matched_range) >= 0
#endif
) {
- if (!(option_mask32 & OPT_w))
+ if (option_mask32 & OPT_x) {
+ found = (gl->matched_range.rm_so == 0
+ && line[gl->matched_range.rm_eo] == '\0');
+ } else if (!(option_mask32 & OPT_w)) {
found = 1;
- else {
+ } else {
char c = ' ';
if (gl->matched_range.rm_so)
c = line[gl->matched_range.rm_so - 1];
diff --git a/include-full/NUM_APPLETS.h b/include-full/NUM_APPLETS.h
index 59ac16f..54463db 100644
--- a/include-full/NUM_APPLETS.h
+++ b/include-full/NUM_APPLETS.h
@@ -1 +1 @@
-#define NUM_APPLETS 212
+#define NUM_APPLETS 214
diff --git a/include-full/applet_tables.h b/include-full/applet_tables.h
index 66958e5..1adb16a 100644
--- a/include-full/applet_tables.h
+++ b/include-full/applet_tables.h
@@ -1,6 +1,6 @@
/* This is a generated file, don't edit */
-#define NUM_APPLETS 212
+#define NUM_APPLETS 214
const char applet_names[] ALIGN1 = ""
"[" "\0"
@@ -52,6 +52,7 @@ const char applet_names[] ALIGN1 = ""
"expand" "\0"
"expr" "\0"
"false" "\0"
+"fbsplash" "\0"
"fdisk" "\0"
"fgrep" "\0"
"find" "\0"
@@ -89,6 +90,7 @@ const char applet_names[] ALIGN1 = ""
"ls" "\0"
"lsattr" "\0"
"lsmod" "\0"
+"lsof" "\0"
"lsusb" "\0"
"lzcat" "\0"
"lzma" "\0"
@@ -268,6 +270,7 @@ env_main,
expand_main,
expr_main,
false_main,
+fbsplash_main,
fdisk_main,
grep_main,
find_main,
@@ -305,6 +308,7 @@ losetup_main,
ls_main,
lsattr_main,
lsmod_main,
+lsof_main,
lsusb_main,
unlzma_main,
unlzma_main,
@@ -485,168 +489,170 @@ const uint16_t applet_nameofs[] ALIGN2 = {
0x0105,
0x010a,
0x0110,
-0x0116,
-0x011c,
-0x0121,
-0x012c,
-0x0139,
-0x0141,
-0x0147,
-0x014c,
-0x0151,
-0x015d,
-0x0163,
-0x016a,
-0x0171,
-0x0177,
-0x017e,
-0x0183,
-0x018a,
-0x0191,
-0x0196,
-0x019b,
-0x01a0,
-0x01a8,
-0x01ab,
+0x0119,
+0x011f,
+0x0125,
+0x012a,
+0x0135,
+0x0142,
+0x014a,
+0x0150,
+0x0155,
+0x015a,
+0x0166,
+0x016c,
+0x0173,
+0x017a,
+0x0180,
+0x0187,
+0x018c,
+0x0193,
+0x019a,
+0x019f,
+0x01a4,
+0x01a9,
+0x01b1,
0x01b4,
-0x01bb,
-0x01c3,
-0x01ca,
-0x01cd,
-0x01d2,
-0x01da,
+0x01bd,
+0x01c4,
+0x01cc,
+0x01d3,
+0x01d6,
+0x01db,
0x01e3,
-0x01e8,
-0x01eb,
-0x01f3,
-0x01f6,
-0x01fd,
-0x0203,
-0x0209,
-0x020f,
-0x0214,
-0x0219,
-0x0221,
-0x0225,
-0x022c,
-0x0231,
-0x0237,
+0x01ec,
+0x01f1,
+0x01f4,
+0x01fc,
+0x01ff,
+0x0206,
+0x020c,
+0x0211,
+0x0217,
+0x021d,
+0x0222,
+0x0227,
+0x022f,
+0x0233,
+0x023a,
0x023f,
-0x0246,
+0x0245,
0x024d,
-0x0257,
-0x0261,
-0x0267,
-0x026e,
+0x0254,
+0x025b,
+0x0265,
+0x026f,
0x0275,
-0x027d,
-0x0286,
+0x027c,
+0x0283,
0x028b,
-0x0291,
-0x029c,
-0x02a3,
-0x02a6,
-0x02af,
-0x02b9,
-0x02c4,
+0x0294,
+0x0299,
+0x029f,
+0x02aa,
+0x02b1,
+0x02b4,
+0x02bd,
0x02c7,
-0x02cf,
-0x02d4,
-0x02da,
-0x02e3,
+0x02d2,
+0x02d5,
+0x02dd,
+0x02e2,
0x02e8,
-0x02eb,
0x02f1,
-0x02f7,
-0x42fd,
-0x0302,
+0x02f6,
+0x02f9,
+0x02ff,
+0x0305,
+0x430b,
0x0310,
-0x0316,
-0x031b,
+0x031e,
0x0324,
-0x032d,
-0x0334,
-0x0337,
-0x033e,
+0x0329,
+0x0332,
+0x033b,
0x0342,
-0x0347,
+0x0345,
0x034c,
+0x0350,
0x0355,
-0x035e,
-0x0365,
+0x035a,
+0x0363,
0x036c,
-0x0372,
-0x0379,
-0x037d,
+0x0373,
+0x037a,
0x0380,
-0x0386,
-0x038c,
-0x0392,
-0x039c,
-0x039f,
-0x03a3,
-0x03a7,
-0x03b2,
-0x03bc,
-0x03c3,
-0x03c6,
-0x03ce,
-0x03d8,
-0x03e2,
-0x03e8,
-0x03ed,
-0x03f3,
-0x03f8,
-0x0400,
-0x0405,
-0x0409,
-0x0411,
-0x0418,
-0x041d,
-0x0424,
-0x0428,
-0x042d,
-0x0431,
-0x0439,
-0x043d,
-0x0444,
-0x044c,
-0x0451,
-0x0456,
-0x045c,
-0x0461,
-0x0469,
-0x046d,
-0x0473,
-0x4476,
+0x0387,
+0x038b,
+0x038e,
+0x0394,
+0x039a,
+0x03a0,
+0x03aa,
+0x03ad,
+0x03b1,
+0x03b5,
+0x03c0,
+0x03ca,
+0x03d1,
+0x03d4,
+0x03dc,
+0x03e6,
+0x03f0,
+0x03f6,
+0x03fb,
+0x0401,
+0x0406,
+0x040e,
+0x0413,
+0x0417,
+0x041f,
+0x0426,
+0x042b,
+0x0432,
+0x0436,
+0x043b,
+0x043f,
+0x0447,
+0x044b,
+0x0452,
+0x045a,
+0x045f,
+0x0464,
+0x046a,
+0x046f,
+0x0477,
+0x047b,
0x0481,
-0x0486,
-0x048e,
-0x0496,
-0x049d,
-0x04a3,
-0x04ae,
-0x04b7,
+0x4484,
+0x048f,
+0x0494,
+0x049c,
+0x04a4,
+0x04ab,
+0x04b1,
0x04bc,
0x04c5,
-0x04cc,
+0x04ca,
0x04d3,
-0x04d8,
-0x04de,
-0x04e5,
+0x04da,
+0x04e1,
+0x04e6,
0x04ec,
-0x04f5,
-0x04fe,
-0x0501,
-0x0507,
-0x050a,
+0x04f3,
+0x04fa,
+0x0503,
+0x050c,
0x050f,
0x0515,
-0x051c,
-0x0522,
-0x0525,
-0x052b,
-0x052f,
+0x0518,
+0x051d,
+0x0523,
+0x052a,
+0x0530,
+0x0533,
+0x0539,
+0x053d,
};
diff --git a/include-full/applets.h b/include-full/applets.h
index d3e9770..fd4d93d 100644
--- a/include-full/applets.h
+++ b/include-full/applets.h
@@ -70,6 +70,7 @@ s - suid type:
IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
IF_DATE(APPLET(date, BB_DIR_BIN, BB_SUID_DROP))
+IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
IF_GROUPS(APPLET_NOEXEC(groups, id, BB_DIR_USR_BIN, BB_SUID_DROP, groups))
IF_ID( APPLET_NOEXEC(id, id, BB_DIR_USR_BIN, BB_SUID_DROP, id ))
IF_TOUCH(APPLET_NOFORK(touch, touch, BB_DIR_BIN, BB_SUID_DROP, touch))
@@ -118,6 +119,7 @@ IF_PING(APPLET(ping, BB_DIR_BIN, BB_SUID_MAYBE))
IF_PING6(APPLET(ping6, BB_DIR_BIN, BB_SUID_MAYBE))
IF_WHOIS(APPLET(whois, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_IOSTAT(APPLET(iostat, BB_DIR_BIN, BB_SUID_DROP))
+IF_LSOF(APPLET(lsof, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_MPSTAT(APPLET(mpstat, BB_DIR_BIN, BB_SUID_DROP))
IF_NMETER(APPLET(nmeter, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_PMAP(APPLET(pmap, BB_DIR_USR_BIN, BB_SUID_DROP))
@@ -134,7 +136,9 @@ IF_MSH(APPLET(msh, BB_DIR_BIN, BB_SUID_DROP))
IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, BB_DIR_BIN, BB_SUID_DROP, sh))
IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, BB_DIR_BIN, BB_SUID_DROP, bash))
IF_BLOCKDEV(APPLET(blockdev, BB_DIR_SBIN, BB_SUID_DROP))
+IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
IF_REV(APPLET(rev, BB_DIR_BIN, BB_SUID_DROP))
+IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_TEST(APPLET_NOFORK([, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
IF_ACPID(APPLET(acpid, BB_DIR_SBIN, BB_SUID_DROP))
@@ -244,7 +248,6 @@ IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hexdump))
-IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
IF_HOSTNAME(APPLET(hostname, BB_DIR_BIN, BB_SUID_DROP))
IF_HTTPD(APPLET(httpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_HWCLOCK(APPLET(hwclock, BB_DIR_SBIN, BB_SUID_DROP))
@@ -308,7 +311,6 @@ IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
-IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
diff --git a/include-full/autoconf.h b/include-full/autoconf.h
index 966739d..27a07da 100644
--- a/include-full/autoconf.h
+++ b/include-full/autoconf.h
@@ -1,8 +1,8 @@
/*
* Automatically generated C config: don't edit
- * Busybox version: 1.19.4-cm9
+ * Busybox version: 1.20.0-ics
*/
-#define AUTOCONF_TIMESTAMP "2012-03-17 17:50 +0100"
+#define AUTOCONF_TIMESTAMP "2012-04-23 18:24 +0200"
#define CONFIG_HAVE_DOT_CONFIG 1
#define ENABLE_HAVE_DOT_CONFIG 1
@@ -204,10 +204,22 @@
#define ENABLE_CROSS_COMPILER_PREFIX 1
#define IF_CROSS_COMPILER_PREFIX(...) __VA_ARGS__
#define IF_NOT_CROSS_COMPILER_PREFIX(...)
+#define CONFIG_SYSROOT ""
+#define ENABLE_SYSROOT 1
+#define IF_SYSROOT(...) __VA_ARGS__
+#define IF_NOT_SYSROOT(...)
#define CONFIG_EXTRA_CFLAGS "-Os -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers"
#define ENABLE_EXTRA_CFLAGS 1
#define IF_EXTRA_CFLAGS(...) __VA_ARGS__
#define IF_NOT_EXTRA_CFLAGS(...)
+#define CONFIG_EXTRA_LDFLAGS ""
+#define ENABLE_EXTRA_LDFLAGS 1
+#define IF_EXTRA_LDFLAGS(...) __VA_ARGS__
+#define IF_NOT_EXTRA_LDFLAGS(...)
+#define CONFIG_EXTRA_LDLIBS ""
+#define ENABLE_EXTRA_LDLIBS 1
+#define IF_EXTRA_LDLIBS(...) __VA_ARGS__
+#define IF_NOT_EXTRA_LDLIBS(...)
/*
* Debugging Options
@@ -288,10 +300,10 @@
#define ENABLE_PASSWORD_MINLEN 1
#define IF_PASSWORD_MINLEN(...) __VA_ARGS__
#define IF_NOT_PASSWORD_MINLEN(...)
-#define CONFIG_MD5_SIZE_VS_SPEED 2
-#define ENABLE_MD5_SIZE_VS_SPEED 1
-#define IF_MD5_SIZE_VS_SPEED(...) __VA_ARGS__
-#define IF_NOT_MD5_SIZE_VS_SPEED(...)
+#define CONFIG_MD5_SMALL 1
+#define ENABLE_MD5_SMALL 1
+#define IF_MD5_SMALL(...) __VA_ARGS__
+#define IF_NOT_MD5_SMALL(...)
#define CONFIG_FEATURE_FAST_TOP 1
#define ENABLE_FEATURE_FAST_TOP 1
#define IF_FEATURE_FAST_TOP(...) __VA_ARGS__
@@ -324,6 +336,10 @@
#define ENABLE_FEATURE_EDITING_SAVEHISTORY 1
#define IF_FEATURE_EDITING_SAVEHISTORY(...) __VA_ARGS__
#define IF_NOT_FEATURE_EDITING_SAVEHISTORY(...)
+#undef CONFIG_FEATURE_EDITING_SAVE_ON_EXIT
+#define ENABLE_FEATURE_EDITING_SAVE_ON_EXIT 0
+#define IF_FEATURE_EDITING_SAVE_ON_EXIT(...)
+#define IF_NOT_FEATURE_EDITING_SAVE_ON_EXIT(...) __VA_ARGS__
#define CONFIG_FEATURE_REVERSE_SEARCH 1
#define ENABLE_FEATURE_REVERSE_SEARCH 1
#define IF_FEATURE_REVERSE_SEARCH(...) __VA_ARGS__
@@ -456,6 +472,10 @@
#define ENABLE_FEATURE_GZIP_LONG_OPTIONS 1
#define IF_FEATURE_GZIP_LONG_OPTIONS(...) __VA_ARGS__
#define IF_NOT_FEATURE_GZIP_LONG_OPTIONS(...)
+#define CONFIG_GZIP_FAST 2
+#define ENABLE_GZIP_FAST 1
+#define IF_GZIP_FAST(...) __VA_ARGS__
+#define IF_NOT_GZIP_FAST(...)
#define CONFIG_LZOP 1
#define ENABLE_LZOP 1
#define IF_LZOP(...) __VA_ARGS__
@@ -576,6 +596,10 @@
#define ENABLE_FEATURE_DATE_COMPAT 1
#define IF_FEATURE_DATE_COMPAT(...) __VA_ARGS__
#define IF_NOT_FEATURE_DATE_COMPAT(...)
+#undef CONFIG_HOSTID
+#define ENABLE_HOSTID 0
+#define IF_HOSTID(...)
+#define IF_NOT_HOSTID(...) __VA_ARGS__
#define CONFIG_ID 1
#define ENABLE_ID 1
#define IF_ID(...) __VA_ARGS__
@@ -596,6 +620,10 @@
#define ENABLE_TOUCH 1
#define IF_TOUCH(...) __VA_ARGS__
#define IF_NOT_TOUCH(...)
+#define CONFIG_FEATURE_TOUCH_SUSV3 1
+#define ENABLE_FEATURE_TOUCH_SUSV3 1
+#define IF_FEATURE_TOUCH_SUSV3(...) __VA_ARGS__
+#define IF_NOT_FEATURE_TOUCH_SUSV3(...)
#define CONFIG_TR 1
#define ENABLE_TR 1
#define IF_TR(...) __VA_ARGS__
@@ -764,10 +792,6 @@
#define ENABLE_FEATURE_FANCY_HEAD 1
#define IF_FEATURE_FANCY_HEAD(...) __VA_ARGS__
#define IF_NOT_FEATURE_FANCY_HEAD(...)
-#undef CONFIG_HOSTID
-#define ENABLE_HOSTID 0
-#define IF_HOSTID(...)
-#define IF_NOT_HOSTID(...) __VA_ARGS__
#define CONFIG_INSTALL 1
#define ENABLE_INSTALL 1
#define IF_INSTALL(...) __VA_ARGS__
@@ -1592,6 +1616,10 @@
#define ENABLE_LOGIN 0
#define IF_LOGIN(...)
#define IF_NOT_LOGIN(...) __VA_ARGS__
+#undef CONFIG_LOGIN_SESSION_AS_CHILD
+#define ENABLE_LOGIN_SESSION_AS_CHILD 0
+#define IF_LOGIN_SESSION_AS_CHILD(...)
+#define IF_NOT_LOGIN_SESSION_AS_CHILD(...) __VA_ARGS__
#undef CONFIG_PAM
#define ENABLE_PAM 0
#define IF_PAM(...)
@@ -1624,6 +1652,10 @@
#define ENABLE_CHPASSWD 0
#define IF_CHPASSWD(...)
#define IF_NOT_CHPASSWD(...) __VA_ARGS__
+#define CONFIG_FEATURE_DEFAULT_PASSWD_ALGO ""
+#define ENABLE_FEATURE_DEFAULT_PASSWD_ALGO 1
+#define IF_FEATURE_DEFAULT_PASSWD_ALGO(...) __VA_ARGS__
+#define IF_NOT_FEATURE_DEFAULT_PASSWD_ALGO(...)
#undef CONFIG_SU
#define ENABLE_SU 0
#define IF_SU(...)
@@ -1768,6 +1800,30 @@
#define ENABLE_BLOCKDEV 1
#define IF_BLOCKDEV(...) __VA_ARGS__
#define IF_NOT_BLOCKDEV(...)
+#undef CONFIG_MDEV
+#define ENABLE_MDEV 0
+#define IF_MDEV(...)
+#define IF_NOT_MDEV(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_CONF
+#define ENABLE_FEATURE_MDEV_CONF 0
+#define IF_FEATURE_MDEV_CONF(...)
+#define IF_NOT_FEATURE_MDEV_CONF(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_RENAME
+#define ENABLE_FEATURE_MDEV_RENAME 0
+#define IF_FEATURE_MDEV_RENAME(...)
+#define IF_NOT_FEATURE_MDEV_RENAME(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_RENAME_REGEXP
+#define ENABLE_FEATURE_MDEV_RENAME_REGEXP 0
+#define IF_FEATURE_MDEV_RENAME_REGEXP(...)
+#define IF_NOT_FEATURE_MDEV_RENAME_REGEXP(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_EXEC
+#define ENABLE_FEATURE_MDEV_EXEC 0
+#define IF_FEATURE_MDEV_EXEC(...)
+#define IF_NOT_FEATURE_MDEV_EXEC(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
+#define ENABLE_FEATURE_MDEV_LOAD_FIRMWARE 0
+#define IF_FEATURE_MDEV_LOAD_FIRMWARE(...)
+#define IF_NOT_FEATURE_MDEV_LOAD_FIRMWARE(...) __VA_ARGS__
#define CONFIG_REV 1
#define ENABLE_REV 1
#define IF_REV(...) __VA_ARGS__
@@ -1940,30 +1996,6 @@
#define ENABLE_LSUSB 1
#define IF_LSUSB(...) __VA_ARGS__
#define IF_NOT_LSUSB(...)
-#undef CONFIG_MDEV
-#define ENABLE_MDEV 0
-#define IF_MDEV(...)
-#define IF_NOT_MDEV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_CONF
-#define ENABLE_FEATURE_MDEV_CONF 0
-#define IF_FEATURE_MDEV_CONF(...)
-#define IF_NOT_FEATURE_MDEV_CONF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME
-#define ENABLE_FEATURE_MDEV_RENAME 0
-#define IF_FEATURE_MDEV_RENAME(...)
-#define IF_NOT_FEATURE_MDEV_RENAME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME_REGEXP
-#define ENABLE_FEATURE_MDEV_RENAME_REGEXP 0
-#define IF_FEATURE_MDEV_RENAME_REGEXP(...)
-#define IF_NOT_FEATURE_MDEV_RENAME_REGEXP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_EXEC
-#define ENABLE_FEATURE_MDEV_EXEC 0
-#define IF_FEATURE_MDEV_EXEC(...)
-#define IF_NOT_FEATURE_MDEV_EXEC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
-#define ENABLE_FEATURE_MDEV_LOAD_FIRMWARE 0
-#define IF_FEATURE_MDEV_LOAD_FIRMWARE(...)
-#define IF_NOT_FEATURE_MDEV_LOAD_FIRMWARE(...) __VA_ARGS__
#define CONFIG_MKSWAP 1
#define ENABLE_MKSWAP 1
#define IF_MKSWAP(...) __VA_ARGS__
@@ -2360,10 +2392,10 @@
#define ENABLE_FEATURE_EJECT_SCSI 0
#define IF_FEATURE_EJECT_SCSI(...)
#define IF_NOT_FEATURE_EJECT_SCSI(...) __VA_ARGS__
-#undef CONFIG_FBSPLASH
-#define ENABLE_FBSPLASH 0
-#define IF_FBSPLASH(...)
-#define IF_NOT_FBSPLASH(...) __VA_ARGS__
+#define CONFIG_FBSPLASH 1
+#define ENABLE_FBSPLASH 1
+#define IF_FBSPLASH(...) __VA_ARGS__
+#define IF_NOT_FBSPLASH(...)
#define CONFIG_FLASHCP 1
#define ENABLE_FLASHCP 1
#define IF_FLASHCP(...) __VA_ARGS__
@@ -2976,6 +3008,10 @@
#define ENABLE_FEATURE_TUNCTL_UG 0
#define IF_FEATURE_TUNCTL_UG(...)
#define IF_NOT_FEATURE_TUNCTL_UG(...) __VA_ARGS__
+#undef CONFIG_UDHCPC6
+#define ENABLE_UDHCPC6 0
+#define IF_UDHCPC6(...)
+#define IF_NOT_UDHCPC6(...) __VA_ARGS__
#undef CONFIG_UDHCPD
#define ENABLE_UDHCPD 0
#define IF_UDHCPD(...)
@@ -3124,6 +3160,10 @@
#define ENABLE_IOSTAT 1
#define IF_IOSTAT(...) __VA_ARGS__
#define IF_NOT_IOSTAT(...)
+#define CONFIG_LSOF 1
+#define ENABLE_LSOF 1
+#define IF_LSOF(...) __VA_ARGS__
+#define IF_NOT_LSOF(...)
#define CONFIG_MPSTAT 1
#define ENABLE_MPSTAT 1
#define IF_MPSTAT(...) __VA_ARGS__
@@ -3208,6 +3248,10 @@
#define ENABLE_FEATURE_PS_WIDE 1
#define IF_FEATURE_PS_WIDE(...) __VA_ARGS__
#define IF_NOT_FEATURE_PS_WIDE(...)
+#define CONFIG_FEATURE_PS_LONG 1
+#define ENABLE_FEATURE_PS_LONG 1
+#define IF_FEATURE_PS_LONG(...) __VA_ARGS__
+#define IF_NOT_FEATURE_PS_LONG(...)
#undef CONFIG_FEATURE_PS_TIME
#define ENABLE_FEATURE_PS_TIME 0
#define IF_FEATURE_PS_TIME(...)
diff --git a/include-full/bbconfigopts.h b/include-full/bbconfigopts.h
index e583cbc..0a457be 100644
--- a/include-full/bbconfigopts.h
+++ b/include-full/bbconfigopts.h
@@ -56,7 +56,10 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_SHARED_BUSYBOX is not set\n"
"# CONFIG_LFS is not set\n"
"CONFIG_CROSS_COMPILER_PREFIX=\"arm-eabi-\"\n"
+"CONFIG_SYSROOT=\"\"\n"
"CONFIG_EXTRA_CFLAGS=\"-Os -fno-short-enums -fgcse-after-reload -frerun-cse-after-loop -frename-registers\"\n"
+"CONFIG_EXTRA_LDFLAGS=\"\"\n"
+"CONFIG_EXTRA_LDLIBS=\"\"\n"
"# CONFIG_DEBUG is not set\n"
"# CONFIG_DEBUG_PESSIMIZE is not set\n"
"# CONFIG_WERROR is not set\n"
@@ -74,7 +77,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_SYSTEMD is not set\n"
"CONFIG_FEATURE_RTMINMAX=y\n"
"CONFIG_PASSWORD_MINLEN=6\n"
-"CONFIG_MD5_SIZE_VS_SPEED=2\n"
+"CONFIG_MD5_SMALL=1\n"
"CONFIG_FEATURE_FAST_TOP=y\n"
"# CONFIG_FEATURE_ETC_NETWORKS is not set\n"
"CONFIG_FEATURE_USE_TERMIOS=y\n"
@@ -83,6 +86,7 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_FEATURE_EDITING_VI=y\n"
"CONFIG_FEATURE_EDITING_HISTORY=256\n"
"CONFIG_FEATURE_EDITING_SAVEHISTORY=y\n"
+"# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set\n"
"CONFIG_FEATURE_REVERSE_SEARCH=y\n"
"CONFIG_FEATURE_TAB_COMPLETION=y\n"
"# CONFIG_FEATURE_USERNAME_COMPLETION is not set\n"
@@ -114,6 +118,7 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_GUNZIP=y\n"
"CONFIG_GZIP=y\n"
"CONFIG_FEATURE_GZIP_LONG_OPTIONS=y\n"
+"CONFIG_GZIP_FAST=2\n"
"CONFIG_LZOP=y\n"
"# CONFIG_LZOP_COMPR_HIGH is not set\n"
"# CONFIG_RPM2CPIO is not set\n"
@@ -143,11 +148,13 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_FEATURE_DATE_ISOFMT=y\n"
"# CONFIG_FEATURE_DATE_NANO is not set\n"
"CONFIG_FEATURE_DATE_COMPAT=y\n"
+"# CONFIG_HOSTID is not set\n"
"CONFIG_ID=y\n"
"CONFIG_GROUPS=y\n"
"CONFIG_TEST=y\n"
"# CONFIG_FEATURE_TEST_64 is not set\n"
"CONFIG_TOUCH=y\n"
+"CONFIG_FEATURE_TOUCH_SUSV3=y\n"
"CONFIG_TR=y\n"
"CONFIG_FEATURE_TR_CLASSES=y\n"
"# CONFIG_FEATURE_TR_EQUIV is not set\n"
@@ -190,7 +197,6 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_FSYNC=y\n"
"CONFIG_HEAD=y\n"
"CONFIG_FEATURE_FANCY_HEAD=y\n"
-"# CONFIG_HOSTID is not set\n"
"CONFIG_INSTALL=y\n"
"CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y\n"
"CONFIG_LN=y\n"
@@ -387,6 +393,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set\n"
"# CONFIG_GETTY is not set\n"
"# CONFIG_LOGIN is not set\n"
+"# CONFIG_LOGIN_SESSION_AS_CHILD is not set\n"
"# CONFIG_PAM is not set\n"
"# CONFIG_LOGIN_SCRIPTS is not set\n"
"# CONFIG_FEATURE_NOLOGIN is not set\n"
@@ -395,6 +402,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set\n"
"# CONFIG_CRYPTPW is not set\n"
"# CONFIG_CHPASSWD is not set\n"
+"CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=\"\"\n"
"# CONFIG_SU is not set\n"
"# CONFIG_FEATURE_SU_SYSLOG is not set\n"
"# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set\n"
@@ -427,6 +435,12 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_FEATURE_MODUTILS_SYMBOLS=y\n"
"CONFIG_DEFAULT_DEPMOD_FILE=\"modules.dep\"\n"
"CONFIG_BLOCKDEV=y\n"
+"# CONFIG_MDEV is not set\n"
+"# CONFIG_FEATURE_MDEV_CONF is not set\n"
+"# CONFIG_FEATURE_MDEV_RENAME is not set\n"
+"# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set\n"
+"# CONFIG_FEATURE_MDEV_EXEC is not set\n"
+"# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set\n"
"CONFIG_REV=y\n"
"# CONFIG_ACPID is not set\n"
"# CONFIG_FEATURE_ACPID_COMPAT is not set\n"
@@ -470,12 +484,6 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_LOSETUP=y\n"
"# CONFIG_LSPCI is not set\n"
"CONFIG_LSUSB=y\n"
-"# CONFIG_MDEV is not set\n"
-"# CONFIG_FEATURE_MDEV_CONF is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set\n"
-"# CONFIG_FEATURE_MDEV_EXEC is not set\n"
-"# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set\n"
"CONFIG_MKSWAP=y\n"
"# CONFIG_FEATURE_MKSWAP_UUID is not set\n"
"CONFIG_MORE=y\n"
@@ -572,7 +580,7 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_DEVMEM=y\n"
"# CONFIG_EJECT is not set\n"
"# CONFIG_FEATURE_EJECT_SCSI is not set\n"
-"# CONFIG_FBSPLASH is not set\n"
+"CONFIG_FBSPLASH=y\n"
"CONFIG_FLASHCP=y\n"
"CONFIG_FLASH_LOCK=y\n"
"CONFIG_FLASH_UNLOCK=y\n"
@@ -724,6 +732,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set\n"
"# CONFIG_TUNCTL is not set\n"
"# CONFIG_FEATURE_TUNCTL_UG is not set\n"
+"# CONFIG_UDHCPC6 is not set\n"
"# CONFIG_UDHCPD is not set\n"
"# CONFIG_DHCPRELAY is not set\n"
"# CONFIG_DUMPLEASES is not set\n"
@@ -758,6 +767,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_REFORMIME_COMPAT is not set\n"
"# CONFIG_SENDMAIL is not set\n"
"CONFIG_IOSTAT=y\n"
+"CONFIG_LSOF=y\n"
"CONFIG_MPSTAT=y\n"
"# CONFIG_NMETER is not set\n"
"CONFIG_PMAP=y\n"
@@ -779,6 +789,7 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_PKILL=y\n"
"CONFIG_PS=y\n"
"CONFIG_FEATURE_PS_WIDE=y\n"
+"CONFIG_FEATURE_PS_LONG=y\n"
"# CONFIG_FEATURE_PS_TIME is not set\n"
"# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set\n"
"# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set\n"
diff --git a/include-full/bbconfigopts_bz2.h b/include-full/bbconfigopts_bz2.h
index 8e41387..cc3a76d 100644
--- a/include-full/bbconfigopts_bz2.h
+++ b/include-full/bbconfigopts_bz2.h
@@ -9,328 +9,332 @@
* Do not edit.
*/
static const char bbconfig_config_bz2[] ALIGN1 = {
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x5e,0x65,0xa7,0xf4,0x00,0x0a,0x93,0x5f,
+0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x1c,0x33,0xb2,0xc6,0x00,0x0a,0xb4,0x5f,
0x80,0x00,0x10,0x58,0x03,0xff,0xe2,0x3f,0xff,0xff,0xf0,0xbf,0xe7,0xdf,0x60,0x60,
-0x1a,0x9c,0x00,0x3d,0x80,0xfb,0x37,0xa2,0x2b,0xa4,0x34,0x1e,0x00,0x0b,0x95,0xc8,
-0x58,0xb1,0xf7,0x01,0xd6,0xdb,0xd0,0xf4,0x1d,0x1e,0x81,0xd0,0xa1,0xaa,0x07,0x76,
-0xd6,0xae,0xc1,0x9d,0x6b,0xd6,0x75,0x8a,0x82,0xd8,0xc9,0x34,0x92,0xf6,0x5d,0xce,
-0xed,0x80,0x3b,0xe0,0x1a,0x69,0x32,0x00,0x20,0x46,0xaa,0x7b,0x50,0xa6,0x23,0xd4,
-0x1a,0x7a,0x47,0xa4,0x34,0xc2,0x34,0x00,0xd3,0x20,0x81,0x01,0x21,0xa1,0x12,0x35,
-0x18,0x00,0x00,0xd0,0x04,0x60,0x4a,0x62,0x44,0x94,0xf6,0xa9,0x91,0xea,0x7a,0x26,
-0x20,0x00,0x00,0xc8,0xd0,0x00,0x00,0x93,0xd5,0x29,0x48,0xa0,0x1e,0x88,0x68,0x03,
-0x26,0x26,0x83,0x40,0x0c,0x86,0x4d,0x06,0x98,0x49,0x21,0xa9,0xa0,0x4c,0xa3,0x48,
-0x01,0xa0,0xd9,0x46,0x8d,0xa4,0xfd,0x13,0x14,0xf2,0x9b,0x35,0x4f,0xd5,0x1e,0xa0,
-0x90,0x91,0x34,0xd1,0x32,0x68,0x11,0x26,0xa9,0xa6,0x80,0x00,0x00,0x1a,0x68,0x03,
-0xff,0xfd,0x7f,0xfb,0xc6,0x87,0x2b,0xa4,0xbd,0x5d,0xba,0x52,0x51,0x25,0x8a,0x2a,
-0x4b,0x42,0x44,0x53,0x36,0xd2,0x17,0x35,0xbc,0x6b,0xc9,0x73,0xa5,0x7b,0x5d,0xda,
-0x2a,0x52,0x2c,0x63,0x05,0x88,0x92,0x8b,0xd3,0xb9,0x44,0x2d,0xe9,0xdb,0xa5,0x36,
-0x0c,0xca,0x13,0x6d,0x78,0xb9,0x5a,0x33,0xce,0xdd,0x33,0x01,0x34,0xbc,0x75,0x1a,
-0x8d,0xae,0x57,0x62,0x6e,0x57,0x43,0x5c,0x77,0x9e,0x70,0xa0,0xcc,0xc8,0xa4,0x8d,
-0xe7,0x6e,0x22,0x82,0x73,0xb4,0xc2,0x2a,0xee,0xba,0x97,0x9d,0xb9,0x8c,0x95,0x8b,
-0xd3,0xd9,0xd5,0xe2,0xfb,0x8b,0x85,0x8b,0x50,0x26,0x42,0xd8,0x8b,0x16,0x8d,0x1a,
-0x17,0x9d,0x77,0xad,0xd4,0x6d,0x14,0x63,0xd4,0xb6,0xe2,0x6a,0x48,0x23,0x42,0x65,
-0xeb,0x73,0x13,0x7b,0x3c,0xf3,0xc9,0x84,0xbd,0x3d,0x5e,0x5e,0x44,0xc1,0x93,0x11,
-0xb1,0x33,0x11,0x26,0x82,0x34,0x59,0x13,0x13,0x2c,0x19,0xca,0xe6,0x69,0x28,0x99,
-0xb2,0x3f,0x9b,0xf3,0x00,0x84,0x2f,0x5e,0xcd,0x5e,0x2d,0x87,0xc6,0x0d,0xf5,0xee,
-0xf1,0xd5,0x21,0x9a,0x2f,0xb3,0x44,0x87,0xd3,0x2e,0xf8,0x77,0xbb,0xd5,0x80,0xce,
-0xee,0x21,0x6f,0xb6,0x76,0x9b,0xfc,0x95,0xcd,0x27,0x55,0xfb,0x27,0x93,0x8a,0x3c,
-0x97,0xed,0xf9,0x07,0x8a,0xea,0x3f,0xbf,0x5f,0x3d,0xa7,0xa8,0xdd,0xa0,0x37,0xdb,
-0x5b,0x8f,0xae,0x1f,0x4f,0xdc,0xd4,0x1f,0x3b,0x0a,0xf1,0x8b,0x43,0x9b,0x79,0x76,
-0xf3,0x3f,0x34,0x68,0x3f,0xc5,0x61,0xdf,0x55,0xac,0x33,0xb2,0xc6,0xd3,0x97,0x51,
-0x94,0x48,0x7d,0xdc,0xb6,0x26,0x9d,0x77,0x38,0xeb,0x88,0x9f,0x6c,0x2b,0x44,0x3e,
-0xa1,0x6f,0x94,0x6f,0x36,0xe3,0x7e,0x20,0x03,0x3e,0xe2,0x17,0x6a,0xae,0xdb,0x4a,
-0x25,0xb6,0x79,0x4a,0x35,0x7d,0x4b,0x9b,0x46,0x0b,0x5a,0x41,0x85,0x43,0x4a,0x0c,
-0x7a,0xe6,0x2e,0xf2,0xda,0x9d,0x35,0x62,0x33,0x59,0xd6,0x7e,0xff,0xba,0x3c,0xda,
-0xf7,0xa6,0xd1,0xf1,0x6c,0x86,0x6c,0xae,0x3b,0xea,0xac,0xfe,0x21,0x31,0xc9,0x6a,
-0x51,0xdc,0x4a,0x2b,0x57,0x5c,0x7a,0x95,0xa3,0x95,0x16,0x48,0xd3,0x14,0x8e,0xd6,
-0xbd,0xa8,0x4c,0x52,0x6b,0x9a,0xbb,0x8e,0x97,0xa9,0x35,0x95,0x77,0x7f,0x4d,0xa8,
-0xd9,0xce,0xb1,0xea,0xd3,0x8f,0x8b,0xe4,0xd3,0x65,0x78,0x29,0x87,0x79,0xcc,0x65,
-0xe2,0x77,0x28,0x1c,0xd8,0x34,0x7a,0xdb,0x57,0x0c,0xd8,0xde,0x54,0x7e,0x3c,0x2d,
-0xbc,0xd2,0x1e,0xfb,0x75,0x45,0x2f,0x28,0xa8,0xcc,0xb5,0xb9,0xe6,0x53,0xfa,0x3a,
-0xda,0xb6,0xc7,0xaf,0x5f,0x2e,0x79,0xeb,0x8a,0xed,0xcf,0x55,0xad,0xaf,0xfc,0x00,
-0x21,0x0b,0xf8,0x80,0x42,0x13,0xd3,0xc9,0x85,0xa7,0x4f,0x87,0x09,0x1e,0x49,0x2d,
-0x40,0x21,0x0b,0x94,0x64,0x63,0x8d,0xba,0xc3,0x27,0x6c,0xa7,0x3b,0xf6,0xf3,0xaf,
-0x1a,0x22,0xd7,0x08,0xe3,0xc7,0xf1,0xed,0x84,0x9b,0x96,0xd6,0xc3,0x58,0xfb,0x3b,
-0x7e,0x9f,0xee,0x23,0x94,0x59,0xa0,0xfd,0x78,0x53,0xa1,0xaf,0xb2,0xe3,0xab,0xcb,
-0xaf,0xf7,0x9e,0xfc,0x28,0x06,0x9f,0xe7,0x79,0xbc,0x93,0xe6,0xe9,0x47,0x14,0xa7,
-0xd9,0xaa,0x35,0x92,0x0b,0xfe,0x23,0x27,0x81,0x1f,0xde,0x9f,0xd0,0x79,0xfe,0xa2,
-0xbc,0x18,0x2f,0x4e,0xea,0xfa,0x7f,0x9c,0x36,0x35,0xfb,0xa6,0xbf,0x81,0xb2,0xfb,
-0x8d,0x4f,0x7f,0x50,0xb7,0xbe,0xbe,0x9f,0x74,0x0b,0xc4,0x66,0xea,0xd2,0x77,0xfa,
-0x5f,0x30,0xb1,0x7e,0x6d,0x71,0xfc,0x6f,0x30,0xde,0xcf,0x08,0x25,0x08,0xf8,0x1e,
-0x6c,0x1b,0xea,0xcb,0x86,0x15,0x53,0xee,0x5e,0x6a,0xe4,0xfd,0x3b,0xf3,0x93,0x2b,
-0xd4,0x35,0x28,0x39,0x5f,0x87,0xb5,0xff,0x51,0xf3,0x19,0x77,0xcb,0xe3,0xbf,0xa3,
-0x78,0x0e,0xf6,0x88,0x30,0xfb,0xee,0xcf,0x4c,0xf6,0xc2,0x5c,0x67,0x10,0xdc,0xd3,
-0x4f,0xce,0x7b,0x12,0x5a,0xf0,0x54,0x47,0x8f,0x6b,0x37,0x9c,0xed,0x01,0x0b,0xaa,
-0xe6,0x7a,0xf3,0xcd,0x68,0x2e,0xbe,0x0d,0x9e,0xdc,0x93,0xf8,0xae,0xdf,0x83,0xf8,
-0x95,0x8d,0xb5,0x39,0xef,0x2b,0xfb,0x77,0x33,0xd6,0x65,0xdf,0xdf,0xb8,0xac,0x8d,
-0x22,0x78,0x37,0x5b,0xbc,0x7a,0xca,0x0f,0xab,0xbb,0x12,0x3e,0x55,0xf9,0x42,0x06,
-0x48,0xcd,0xcc,0x72,0x65,0xd7,0xa5,0x0d,0xbd,0xb0,0xe3,0x5f,0x1f,0x5e,0xf4,0x3a,
-0xd5,0xde,0xee,0x7a,0x77,0x09,0x12,0xb9,0xf3,0x35,0x35,0x41,0x47,0x9e,0xa7,0x1c,
-0xcf,0x2f,0x6f,0x5a,0x9c,0xbc,0x38,0x45,0x7a,0xef,0x8d,0x8d,0xe5,0xcd,0x3c,0xd7,
-0xac,0xc6,0xd9,0x22,0xd9,0x89,0x7e,0x4f,0x92,0xe7,0x4a,0x52,0x9d,0x5d,0xab,0x61,
-0xde,0x7e,0xa8,0x0a,0x57,0xbd,0x77,0x56,0xf6,0x8c,0x69,0xb3,0xe0,0x9a,0xdf,0xe0,
-0xe2,0xa5,0xb3,0xd4,0xcb,0x6c,0x29,0xa3,0x89,0xc6,0x93,0xb7,0x8a,0xf1,0x37,0xe0,
-0xfc,0xfc,0x75,0xb5,0x66,0x96,0x2b,0xde,0x79,0x20,0x69,0x34,0xb6,0xe1,0x8b,0x75,
-0xe5,0x1f,0xb4,0x21,0x25,0x50,0x64,0x18,0x98,0x2c,0x43,0xad,0xc4,0xe9,0x70,0xc8,
-0xc1,0xd3,0x08,0x38,0x1a,0x0c,0xa6,0x50,0x3d,0x93,0xe1,0xb0,0x6c,0x70,0xd3,0x81,
-0xe7,0x4d,0x60,0x41,0xf3,0xa2,0x22,0x18,0x9c,0xfc,0xfb,0x0e,0x7a,0x48,0x16,0x17,
-0x02,0xaa,0xeb,0x6c,0xcd,0x3b,0xc0,0xa9,0xa8,0x02,0x08,0x34,0x98,0xec,0x2a,0xa6,
-0xfa,0xe9,0x36,0xdf,0x61,0xe1,0xfa,0x48,0x00,0x0f,0x79,0x61,0xbe,0xfa,0xf8,0xd9,
-0x25,0x9a,0x77,0x33,0xdb,0x62,0x59,0x4f,0xba,0xac,0xe3,0x66,0x11,0xf4,0x39,0x0c,
-0x15,0xdc,0x07,0x53,0xbe,0xc6,0x37,0xa7,0x16,0xb6,0x5a,0x3c,0xe7,0xc5,0x3f,0xb4,
-0x6e,0x6b,0xa2,0x5b,0xad,0x05,0x16,0xc1,0xdd,0xd9,0xa6,0xd2,0xf4,0x1d,0xb8,0xec,
-0xf2,0x9e,0x9d,0x99,0xea,0x41,0x51,0x22,0x89,0xc6,0x9c,0xd4,0xa5,0x5b,0x21,0xf8,
-0x79,0x6a,0x57,0x66,0xb8,0x6d,0xe2,0xcf,0x47,0x2a,0x77,0x8e,0xfb,0xee,0xdb,0xf3,
-0x0d,0x1b,0x6f,0x6c,0x0b,0x44,0xca,0xcd,0x5b,0x9d,0xfd,0xec,0x20,0x40,0xb0,0x18,
-0xb4,0x20,0x9a,0x94,0x5b,0x84,0xc2,0x0b,0x9a,0xd0,0x44,0x69,0x85,0xd0,0x3a,0x45,
-0x84,0x08,0xb7,0x76,0xc7,0xa3,0x66,0x0d,0x58,0x14,0x42,0xcd,0x1e,0x0f,0x78,0xd2,
-0xcb,0x02,0x81,0xf4,0x51,0x82,0x6e,0xcf,0xe3,0x76,0xd1,0x26,0x95,0xcb,0x9b,0x94,
-0xac,0x76,0x17,0xda,0xa0,0x33,0xe0,0x26,0x73,0x05,0x7d,0x54,0x63,0x05,0xc3,0x0c,
-0xeb,0x45,0x99,0x4e,0xba,0xb7,0xbd,0x74,0x9b,0x69,0xf2,0xbc,0xe0,0xf0,0xb1,0xa1,
-0xbe,0x8a,0x1e,0x68,0x67,0x4c,0x9a,0xbd,0xde,0x3a,0xa7,0x98,0x3e,0xa8,0xf9,0x74,
-0x6d,0xa4,0xb6,0x0b,0x3a,0x55,0xf3,0x58,0xb4,0xd6,0xdc,0x98,0x63,0x89,0xa4,0x36,
-0x91,0xc8,0x35,0x18,0x3e,0x65,0x7e,0x31,0x36,0xdd,0xd4,0xe6,0xd0,0x2d,0x24,0x66,
-0x95,0x1d,0x42,0xd4,0x16,0x5c,0xec,0xa7,0x1f,0x56,0xa0,0xcb,0x34,0xbf,0xbb,0x0a,
-0x32,0xcb,0x2d,0xb5,0xb7,0x8d,0xf5,0xb9,0xeb,0xf2,0xfc,0x5f,0x83,0x9e,0xe7,0xf3,
-0xaf,0xec,0x15,0x21,0xb2,0x1d,0xce,0xb7,0x0c,0x8c,0xc6,0x92,0x99,0x23,0x4c,0x46,
-0x44,0x91,0x90,0x8a,0x4b,0x12,0x4c,0xc9,0x16,0x81,0x64,0xc5,0x25,0x25,0x40,0x59,
-0x89,0x8d,0x50,0x1a,0x58,0xac,0x51,0x16,0xd1,0x19,0x44,0x8a,0x29,0x4c,0x8d,0x91,
-0xa4,0x25,0x46,0x82,0x14,0x92,0x64,0xc8,0x4b,0x2a,0x42,0x99,0x8b,0x10,0xd9,0x96,
-0x10,0xb3,0x25,0x49,0x44,0xdb,0x24,0x20,0xd9,0x45,0x3d,0x3b,0x91,0x64,0x30,0x96,
-0x49,0xb5,0x78,0xe9,0x93,0x09,0x93,0x09,0xa9,0x93,0x0d,0x49,0x98,0xcc,0x27,0x77,
-0x32,0x58,0xd2,0x14,0x50,0x53,0x29,0x23,0x25,0x1b,0xce,0xb8,0x13,0x05,0x36,0x48,
-0xc4,0x59,0x18,0x93,0xce,0xba,0x1d,0xd7,0x04,0x82,0x8d,0x8d,0x10,0x36,0x41,0x4c,
-0x8d,0x85,0x32,0x20,0x10,0xf3,0xb7,0x77,0xe7,0xbe,0xfd,0xc1,0x9d,0xa1,0x18,0xc4,
-0x78,0x3f,0x5d,0x2a,0xbc,0x50,0x63,0x1a,0x3c,0xa5,0xef,0xaa,0x41,0x2b,0xb9,0x9c,
-0xbd,0xbe,0xae,0x7b,0x30,0xf7,0xab,0x32,0x15,0xaa,0x03,0x24,0x06,0xca,0x21,0x7c,
-0xfb,0x7b,0x2a,0xc4,0xd5,0x88,0xdd,0x6b,0x68,0x70,0x2d,0xb3,0xb9,0x7d,0xed,0xf3,
-0x7d,0xdf,0x55,0xcb,0xf9,0xc5,0xaa,0xde,0x56,0x33,0xa0,0xf1,0x00,0x38,0x75,0xbf,
-0x7c,0xe6,0xb3,0x16,0xee,0xa0,0xc1,0xe6,0xcb,0x17,0xf0,0xf3,0x85,0xc3,0x95,0x9f,
-0x09,0xea,0x4e,0x5e,0xcd,0x5d,0x97,0xfa,0xde,0x8a,0x4b,0x0d,0x46,0xcc,0xad,0x06,
-0x44,0x1f,0x89,0x97,0x01,0xa4,0x11,0xf6,0x17,0xa5,0x0a,0xd9,0xaf,0xb2,0x99,0xb6,
-0x69,0x61,0x41,0xb2,0x45,0xc8,0x53,0x98,0xf9,0xd3,0x17,0x88,0x1a,0xdc,0x42,0x48,
-0x84,0x92,0x01,0x49,0xcf,0xca,0x08,0xf4,0x1c,0x0c,0x5d,0x59,0x99,0x98,0xdd,0x4a,
-0x61,0x12,0xd8,0xc5,0x90,0xca,0x1a,0x62,0x0e,0x28,0xc0,0xa4,0x0c,0x53,0x0c,0x19,
-0x87,0x64,0x2f,0x01,0x01,0x74,0x48,0x24,0x90,0x43,0x6b,0x23,0x1e,0x5b,0x7b,0x39,
-0xe2,0xe3,0xc5,0xe4,0x43,0xa7,0x68,0x0a,0xdb,0xe1,0x6c,0x07,0xae,0x5f,0x35,0xef,
-0x52,0x28,0xa8,0x44,0x08,0x70,0x83,0x8f,0x39,0xbc,0x62,0xb1,0x6d,0x66,0x9c,0x67,
-0x16,0xde,0x64,0x43,0x5d,0xc3,0xe4,0x2e,0xcf,0x9d,0xe9,0xda,0x87,0xa2,0x6b,0x5d,
-0x0c,0x93,0xa8,0x7a,0x1b,0x4b,0x6e,0x21,0xf6,0x2c,0x26,0x2e,0xa4,0x9a,0xd4,0x56,
-0xb8,0x9a,0xb7,0xb6,0x1f,0x9c,0xe1,0x70,0xc0,0xc7,0xd2,0x3e,0xb3,0x5f,0x01,0xed,
-0x37,0xcb,0xe6,0x71,0x83,0x69,0xd7,0x6f,0x30,0x29,0x2e,0xb3,0x2f,0x5b,0xbe,0xf1,
-0x83,0x90,0x66,0x95,0x78,0xb2,0xbd,0xa7,0x38,0xa4,0x68,0x7b,0x50,0xbb,0x8a,0xbd,
-0xa0,0xf3,0x5d,0x55,0xce,0x6e,0xb3,0x8e,0xf1,0xa8,0xae,0x1b,0x52,0xc4,0x25,0x31,
-0x51,0x1f,0x28,0x41,0x28,0x05,0xb8,0xab,0xda,0x22,0xc3,0x5f,0x22,0xa5,0xf8,0x10,
-0x20,0x57,0xb8,0xc5,0xf6,0xb4,0x09,0xaa,0x07,0xa7,0xfc,0x72,0xf1,0x58,0xe7,0x6f,
-0x3a,0xf7,0xc4,0xdf,0xca,0x69,0x65,0x6f,0x96,0xa1,0xeb,0xe6,0xe0,0xca,0xb6,0xa2,
-0xc5,0x24,0x3d,0xcf,0x1b,0x34,0x82,0xc5,0x8c,0x23,0xc9,0xa4,0xb6,0x16,0xa7,0x65,
-0x3a,0x54,0x26,0x43,0x21,0x5b,0x7e,0x16,0x02,0x8b,0x33,0xb7,0xc6,0xad,0xa7,0x8e,
-0x6b,0x7b,0xcf,0x5e,0x5e,0x91,0x00,0x88,0xc5,0x63,0xdf,0x39,0xd1,0x5e,0x2a,0x92,
-0x3c,0x91,0x9d,0x93,0xa4,0xb8,0x20,0xd0,0x0a,0x2a,0x08,0x03,0x99,0x11,0x3e,0xbe,
-0x3a,0x8d,0xb6,0xf2,0xe2,0xa3,0x38,0x70,0xd4,0x24,0x4a,0x2c,0xc8,0x69,0x87,0xbb,
-0xde,0xcd,0x54,0x6c,0x07,0x86,0x98,0x66,0x77,0x54,0x96,0x50,0x5d,0xf3,0x7d,0xc5,
-0x4f,0x0a,0x7b,0x8a,0x8f,0xa6,0x77,0xed,0x85,0xc0,0x94,0xd8,0x3d,0x10,0xe4,0x45,
-0xdd,0xc1,0x0c,0x09,0x6b,0x08,0xc4,0x3c,0x38,0x1e,0x80,0x93,0xad,0x91,0x07,0x25,
-0xb5,0x0c,0xc2,0xa2,0x67,0x05,0x85,0x48,0x42,0x01,0x26,0xf8,0xe0,0x96,0x95,0xb6,
-0x22,0x54,0xbb,0x72,0x21,0x10,0x63,0x1a,0x14,0x36,0x61,0x55,0xb1,0x95,0xb5,0x20,
-0xb7,0x3a,0x6d,0x0d,0x82,0x87,0x66,0xda,0x34,0x63,0x68,0x1d,0x6c,0x79,0xc8,0x96,
-0xe0,0xcd,0xbe,0xe5,0x30,0xf2,0xc3,0xb3,0x42,0xe3,0x4a,0xd9,0xd8,0x5a,0x35,0xab,
-0x42,0xeb,0x79,0x96,0x85,0x4d,0x23,0x46,0x92,0x2e,0xc2,0x34,0x59,0x80,0xb1,0x88,
-0x08,0x6d,0x23,0x56,0x94,0x68,0xa6,0x86,0xd2,0x18,0xf2,0xc1,0x53,0x42,0x54,0xcb,
-0x35,0x66,0x56,0x60,0x5e,0xa1,0x77,0xaf,0x51,0x2c,0xbc,0xbc,0x35,0xb5,0x41,0x14,
-0xdb,0x14,0x60,0x47,0xba,0x79,0x60,0x6f,0xb1,0x04,0x2b,0xb4,0x69,0x68,0x24,0x5a,
-0xd3,0xde,0x90,0xb3,0xcd,0x44,0x01,0xbd,0xa2,0x1b,0x6c,0x3c,0x2f,0xbf,0x12,0xcf,
-0x3e,0xf5,0xb4,0xfd,0x29,0xfa,0x42,0x39,0xe0,0x50,0x37,0xca,0x50,0x04,0x81,0x54,
-0xc2,0x83,0x34,0xaf,0xb4,0x33,0xc6,0x81,0x3d,0xf0,0x20,0x49,0x0b,0xb7,0xbd,0x66,
-0x81,0xc0,0x34,0x0a,0xec,0xdc,0xed,0x2a,0x51,0x23,0x28,0xd5,0x92,0x6e,0x48,0x2c,
-0x1e,0x0d,0x30,0x5c,0x88,0x94,0x1e,0x29,0xc0,0xf6,0xeb,0x76,0xf6,0xb6,0x73,0x6b,
-0xfa,0x38,0x14,0x07,0x67,0xe0,0x3a,0xbd,0x36,0x0d,0x0d,0x58,0x43,0x7e,0x9e,0xde,
-0xbd,0xdb,0x05,0x6b,0x37,0x31,0x08,0x32,0xd2,0x5e,0x5d,0xb6,0x66,0x0d,0x18,0x72,
-0x70,0xcb,0xca,0x0c,0xa0,0xe3,0xc2,0x05,0xc6,0xf4,0xd7,0xb5,0xcc,0xc1,0x2a,0x69,
-0x57,0x20,0x12,0x8c,0xc5,0x2d,0xc6,0x83,0x20,0x96,0x6f,0x69,0x07,0x58,0x90,0x14,
-0x1b,0xe6,0x70,0x46,0x05,0xfa,0x50,0x14,0xf7,0x84,0xcd,0x88,0x3b,0x74,0xc3,0xb0,
-0x91,0x4d,0x23,0x2c,0x10,0x78,0x63,0x68,0x4b,0x96,0x91,0x66,0x21,0x20,0x4d,0x55,
-0x1a,0xaa,0xf6,0xd5,0xcd,0xb4,0x55,0xaf,0x62,0xba,0xac,0xaf,0x1a,0xde,0x80,0x41,
-0x4d,0x20,0x49,0xb0,0x1b,0x48,0x87,0x96,0x67,0xc2,0x89,0xd2,0x91,0xc0,0x88,0x6c,
-0x88,0xfc,0xb3,0x72,0x86,0xa4,0x00,0x84,0x96,0x7d,0xe9,0x89,0x58,0x54,0xd2,0xe5,
-0xa8,0x82,0xca,0x17,0x18,0x57,0xa8,0x53,0xf2,0xdd,0x8b,0x34,0xcb,0xd8,0x65,0x0c,
-0x6a,0xec,0xe2,0xc2,0x5d,0xd8,0x82,0x98,0x17,0x49,0x05,0xdb,0x61,0x4e,0x36,0x9a,
-0xbe,0xfd,0x5f,0xd9,0xf8,0xaf,0x61,0xf9,0xed,0x0d,0x86,0x6f,0x0f,0x2b,0x5f,0x97,
-0xb5,0xee,0x06,0x23,0x77,0xeb,0x71,0xe7,0xcf,0x9c,0x9c,0x83,0xe8,0xb1,0x7e,0x04,
-0x47,0x2f,0x8b,0x07,0x87,0x68,0xe6,0x9e,0x82,0x0c,0xd9,0x21,0xf7,0x86,0xa5,0x6c,
-0x20,0xf6,0xba,0xf5,0x5e,0x9a,0x47,0x7d,0x2c,0x2e,0x34,0xee,0x50,0x24,0x24,0x2e,
-0xe0,0x6f,0x00,0xe1,0xa3,0x43,0x94,0xb2,0x5c,0x46,0xf1,0x79,0x1a,0x06,0x33,0xbe,
-0xd0,0xc7,0x10,0xf0,0x1a,0x23,0xab,0x6e,0x36,0x24,0x6a,0x10,0x0e,0xb8,0xe1,0xb6,
-0x16,0xce,0xfe,0xa2,0x8d,0x7a,0xe3,0x3a,0x34,0xda,0xec,0xa2,0x36,0x62,0x85,0x24,
-0x1a,0x9e,0xfc,0x4a,0x18,0xee,0x27,0x94,0x37,0xcf,0x78,0x70,0x59,0x71,0x42,0x8d,
-0x01,0x1a,0x06,0xf6,0xad,0xcb,0x8d,0x6b,0x5d,0x7e,0x51,0x1b,0x02,0xed,0x6e,0x0d,
-0xa6,0x95,0x33,0xa6,0x1d,0x6a,0x83,0xd7,0x9f,0x2e,0xaf,0x2a,0x83,0xcb,0xf6,0x31,
-0x1c,0x60,0x5b,0x7a,0x00,0xc8,0x9a,0xb0,0x8d,0x61,0xcc,0xf9,0x28,0x6a,0x00,0x90,
-0xe2,0x61,0x78,0x55,0x02,0x9d,0x3f,0x4f,0x49,0xf5,0x30,0x79,0x1e,0x9d,0xa4,0x38,
-0x60,0x31,0x9f,0x03,0xc3,0x4b,0x56,0xbc,0x9e,0x15,0x1d,0x2e,0xcc,0xca,0x61,0xaf,
-0xf2,0xbf,0x36,0x2f,0x73,0x03,0xdc,0xec,0x07,0xb2,0xb1,0xe2,0xe8,0xe9,0x78,0x3c,
-0x66,0x98,0x60,0xec,0xe2,0xae,0x78,0x35,0x7c,0x79,0x86,0xb5,0x08,0x6a,0xae,0x6b,
-0x25,0x71,0x2a,0x9f,0x3a,0x43,0x96,0x16,0x6d,0x37,0xf8,0xf0,0x77,0x63,0xc4,0xea,
-0x55,0x6d,0x6a,0x20,0x35,0x86,0xad,0xe2,0x49,0x0b,0x58,0xc5,0x98,0xb1,0x84,0xbd,
-0x4a,0xe2,0xd9,0xba,0xb2,0x59,0xba,0x06,0xb2,0x89,0x83,0x6b,0x7b,0x2d,0xcd,0xc6,
-0xe3,0x3a,0x74,0xcd,0xc6,0x3a,0xa9,0x3d,0xe7,0x63,0x30,0xbe,0xc1,0x17,0x7c,0xce,
-0x21,0x96,0x52,0xe9,0x8d,0xb6,0x0c,0x9c,0x65,0x46,0x96,0x33,0xd9,0xf1,0xe7,0x3a,
-0xd0,0x40,0xc6,0x9c,0x75,0x6c,0x3f,0xcc,0xd4,0xed,0x35,0xbc,0x29,0xf9,0xa9,0x72,
-0x36,0x75,0xf7,0x31,0xdc,0x77,0xe4,0xe6,0x37,0x69,0xd3,0x14,0x06,0x1d,0xc6,0x59,
-0xa2,0x9a,0x6d,0x18,0xb5,0x85,0xb5,0x08,0xc7,0xaf,0x5e,0x8b,0x07,0x9f,0xaf,0x75,
-0xa6,0x23,0x2e,0xde,0x9d,0x16,0x19,0xef,0xc6,0x5d,0x26,0xec,0x70,0xfa,0x90,0x2a,
-0x77,0x28,0x42,0xa6,0xa8,0x7a,0x87,0x7b,0xd4,0x64,0xda,0xe5,0xea,0x5a,0x36,0xc3,
-0xa6,0x26,0xcd,0x6a,0x84,0x44,0x69,0xe2,0xfa,0x24,0x13,0x5e,0x6b,0xe7,0x41,0xa2,
-0x37,0x46,0xed,0xf7,0x6e,0x46,0x36,0x46,0xaf,0x41,0x17,0xbc,0x12,0xfa,0x17,0xc8,
-0x8e,0xaa,0x17,0xac,0x45,0x22,0x07,0xa7,0xc3,0x6c,0x10,0xc0,0x40,0x76,0x1d,0x21,
-0xda,0xc5,0x97,0x91,0xd6,0x21,0x4f,0x23,0x07,0xd4,0x0d,0xb8,0xfd,0x0e,0x3d,0x3b,
-0x84,0x4c,0x58,0x3a,0xa3,0x82,0x31,0x8d,0xb1,0x8d,0x8d,0xf0,0x20,0x66,0xfe,0xf8,
-0xef,0x9c,0x2d,0x0e,0xa8,0x6e,0xbb,0xb5,0x66,0xc6,0xf9,0x76,0xed,0xc4,0x9d,0x30,
-0x81,0xe6,0x63,0x0d,0x59,0x21,0xe1,0x1d,0x16,0x2c,0x5e,0x77,0xe3,0xf4,0xe7,0x77,
-0xce,0xa8,0x57,0xa4,0xb8,0xa6,0x6d,0xb5,0x50,0xf2,0xdb,0x11,0x0e,0x0f,0x05,0xa9,
-0xf6,0x10,0xc6,0x72,0xc2,0x73,0x8a,0xd8,0xb6,0xb9,0x9a,0xe8,0x37,0x5f,0x21,0xcb,
-0xa6,0x64,0xdc,0xb0,0xa0,0x50,0x47,0x21,0x24,0x44,0xa9,0x76,0x47,0xdf,0x4f,0x4d,
-0x1e,0x62,0x66,0x65,0x8b,0x26,0xf7,0x7c,0x27,0xb7,0x6d,0x6d,0x57,0x26,0x76,0x2c,
-0xed,0x55,0x41,0xdd,0xb9,0xbe,0x48,0x5c,0x54,0x92,0xba,0xda,0x5d,0xa2,0xe4,0x24,
-0x1a,0xaa,0x6c,0x75,0x02,0x86,0x81,0xb1,0x51,0x72,0x10,0xf4,0x43,0x66,0xc6,0xd8,
-0xb0,0x10,0x65,0xcb,0x82,0x12,0x42,0xb6,0x0b,0x41,0x15,0x88,0x59,0x94,0xd3,0x01,
-0x34,0xe5,0xae,0x05,0x5a,0x30,0x4d,0x34,0x5d,0x81,0x0a,0x4e,0x5a,0x16,0xf9,0x57,
-0x68,0x2f,0x22,0xbc,0x5c,0xb0,0x17,0xac,0x6a,0x69,0x84,0xae,0x0a,0xa8,0xd2,0x98,
-0x3a,0x65,0xc4,0x40,0x62,0x2e,0x08,0xbb,0x8c,0x68,0x05,0x4a,0xe3,0x65,0x70,0x50,
-0x14,0x14,0x58,0x91,0x13,0xbb,0xc4,0x15,0xaf,0x65,0x4d,0xd2,0x85,0xee,0xc8,0xcb,
-0x57,0xba,0x7c,0x79,0xf3,0x0b,0xd5,0xc9,0xd6,0xdc,0xd9,0x45,0xa3,0xb6,0xae,0x8c,
-0xc8,0x54,0x8c,0x2b,0x7c,0xcc,0xdc,0x1b,0x72,0xeb,0x88,0x34,0x54,0x10,0x11,0xe6,
-0xe6,0xbd,0xa3,0xa3,0x54,0xd8,0x91,0x61,0xdb,0xe7,0x6b,0x1d,0x2f,0xa0,0x9d,0xf8,
-0x36,0x58,0xa2,0xfa,0xf1,0xc2,0xfc,0x37,0x61,0x04,0xc3,0xcb,0x79,0x86,0x18,0x05,
-0x1c,0x10,0xe7,0xbc,0x1a,0xee,0xd5,0xc3,0x4a,0x1d,0x81,0x09,0x21,0x41,0x0a,0xdb,
-0xeb,0xab,0xe3,0x37,0x4b,0x0d,0x20,0x60,0xf8,0xd1,0xed,0x65,0x02,0xd8,0x7a,0x58,
-0x75,0xb6,0xb3,0x6e,0x06,0x5d,0xe5,0x52,0x7b,0xaf,0xc7,0x79,0x8d,0x49,0x9b,0x13,
-0x37,0x42,0x51,0xb3,0x6c,0x42,0xec,0x5a,0x9b,0x73,0xc1,0xeb,0x6d,0x33,0x6b,0x31,
-0x63,0x8e,0x10,0x6a,0xc6,0xc6,0xc5,0xe1,0xd3,0x46,0xa1,0xa6,0xd8,0x9d,0x1d,0x61,
-0x5d,0xae,0xfa,0xe2,0xf9,0x39,0x5d,0x5a,0x2f,0x7d,0x12,0xd6,0x7b,0x9e,0x79,0xd0,
-0x4a,0xe0,0x77,0xf8,0xa2,0x0e,0x2c,0x63,0x7e,0xfc,0xe6,0xaa,0xd1,0xa4,0xca,0x28,
-0x51,0xa1,0x32,0xf7,0xd2,0x93,0xe5,0x49,0x0e,0x43,0x7d,0xfb,0xae,0xea,0x18,0x77,
-0xeb,0x4c,0x09,0xc7,0x97,0x89,0x7a,0xaf,0x0d,0x87,0x42,0xf3,0xe2,0x64,0x5c,0xcb,
-0xaa,0xab,0xd5,0xec,0x44,0xc1,0xcd,0xc5,0x3d,0x0a,0xa0,0x78,0x31,0x91,0x70,0xc7,
-0xb6,0x62,0x1e,0x3e,0xa1,0xaa,0x4d,0x1c,0xda,0x8d,0xf8,0x32,0xbd,0xb2,0x81,0x8f,
-0xb1,0x86,0x70,0x90,0xca,0x62,0x6c,0x4f,0xd0,0x11,0xd7,0x8b,0xa1,0x9e,0xf1,0x6a,
-0xd0,0x2d,0x08,0x04,0xde,0x77,0x10,0x46,0x00,0x8d,0x21,0x7b,0xae,0xf0,0x49,0x00,
-0x0d,0x1c,0xfb,0xd3,0x27,0x24,0x7a,0x9b,0xd7,0x03,0x36,0x4d,0xa1,0xb1,0x1e,0x59,
-0x1b,0x29,0x23,0xa4,0x22,0xfd,0x65,0xe3,0x40,0x39,0x23,0x3c,0x32,0x0c,0x39,0x60,
-0x49,0x03,0x92,0x4b,0xd1,0x92,0xf9,0x23,0xb7,0x56,0xba,0xa2,0xd7,0x1d,0xd4,0x0e,
-0x46,0x48,0x09,0x5a,0xf1,0xbf,0xb6,0x4b,0xbf,0xaa,0xbd,0x19,0xcf,0x8e,0x8a,0x2c,
-0x12,0xcb,0xd6,0x2f,0x7c,0x9a,0x4b,0x57,0x68,0x28,0x95,0x0d,0xe2,0x15,0x6f,0x48,
-0x93,0x69,0x0e,0x9d,0x01,0x60,0xea,0xd3,0x9f,0x1f,0x5c,0x8a,0xd9,0x91,0x22,0xc7,
-0x37,0xbd,0x0e,0x9e,0x26,0x5d,0x6a,0x89,0x52,0xae,0x59,0x9e,0x07,0x9b,0x46,0x70,
-0xa0,0xea,0xb9,0x46,0xf7,0xea,0xe6,0xb2,0xbb,0x22,0x8a,0xc2,0x0b,0x23,0x3a,0xc8,
-0x65,0x3b,0xe8,0x45,0xa6,0xd2,0x79,0xb2,0x5e,0xfe,0x4a,0x7d,0x95,0xe0,0xf4,0xfa,
-0xcb,0xe8,0x2e,0x2f,0xb6,0x46,0x17,0x6b,0x53,0x46,0x8d,0x2e,0xac,0x2f,0x25,0xa9,
-0xb2,0x9f,0x2e,0x28,0x00,0x01,0x86,0x20,0x41,0x0c,0x77,0xbd,0xc0,0x72,0xa2,0x37,
-0x4a,0x74,0x19,0xed,0x86,0xcc,0xbd,0x35,0x33,0x73,0xbc,0x21,0x48,0x8e,0x6d,0x63,
-0x41,0x55,0xa9,0x9d,0x5c,0x58,0x6a,0x1b,0xf1,0x9b,0x4b,0xa2,0x8e,0x9f,0xb0,0xa9,
-0x7e,0xe0,0x49,0x98,0x30,0x8e,0xbb,0x3b,0x10,0x65,0x6e,0xd1,0xd9,0x96,0x6d,0xb6,
-0x70,0x58,0x8a,0xcb,0x66,0x83,0x4d,0x14,0x25,0xa9,0x50,0x81,0x20,0x16,0x2d,0xb6,
-0x25,0xc8,0x45,0x9a,0x59,0x8b,0xa2,0x32,0xd3,0xdd,0xa4,0xcc,0x21,0x84,0x14,0x1b,
-0xa1,0xcd,0x54,0xc1,0x42,0x53,0x44,0x22,0x12,0x44,0xf6,0x6c,0x51,0x06,0x6f,0xed,
-0x3e,0xe6,0x68,0x76,0xc1,0x58,0xf3,0xdf,0xd7,0x3d,0xc8,0xb9,0x86,0xa3,0x2a,0x85,
-0xa8,0x96,0xb8,0x6f,0x37,0x89,0x31,0x3c,0x6d,0x83,0x19,0x41,0xf8,0x5a,0x45,0xe7,
-0xc5,0xf1,0xa6,0x9e,0x25,0x78,0x07,0xea,0xf0,0x15,0x84,0xef,0x91,0x60,0xad,0x84,
-0x7c,0x4f,0x03,0x88,0x8c,0x64,0x83,0x73,0x4f,0x55,0x77,0x68,0x07,0x06,0x6e,0x9f,
-0xb3,0xc0,0x19,0xf6,0x43,0xf1,0x8a,0xdf,0xd6,0xe5,0x01,0x77,0x36,0x6b,0xbf,0x71,
-0x9e,0x37,0xad,0x00,0xe8,0x68,0x8d,0x1d,0x8d,0x98,0xed,0x19,0xdb,0x4c,0x53,0x4e,
-0xee,0x87,0x73,0x8e,0xe5,0xcb,0x00,0x35,0x8a,0x93,0x18,0x61,0x24,0x5c,0x85,0x74,
-0xcb,0x93,0x81,0x46,0xf4,0xf5,0xb7,0xde,0xed,0xe9,0x52,0x54,0x6f,0x38,0xc6,0x9c,
-0xe7,0x77,0x4e,0x87,0x01,0x41,0x14,0x89,0x45,0x7a,0x1d,0x40,0xd8,0xcf,0x43,0x43,
-0x3b,0xea,0x81,0xed,0x04,0xe5,0x72,0x09,0xd0,0x74,0x13,0x17,0x35,0x6b,0x2f,0x08,
-0x2a,0x23,0xa8,0x86,0xc8,0x5c,0x71,0x63,0x6a,0x0b,0xbe,0x99,0x7d,0x74,0xb3,0x16,
-0x5b,0x43,0x46,0xec,0x14,0xeb,0x62,0x8a,0xf1,0x9c,0xa4,0x5a,0x1e,0x18,0x63,0xac,
-0xe7,0x5b,0xe1,0x85,0xce,0x42,0xe6,0x85,0x95,0xe0,0x8b,0x23,0xef,0x2d,0x64,0x1a,
-0x38,0x6c,0x94,0x1b,0x7d,0x7e,0xbe,0x35,0x71,0xe4,0x84,0x41,0xd1,0x4d,0xba,0x5d,
-0x05,0x0b,0x92,0x2d,0xee,0x51,0x3e,0x82,0x3e,0x54,0x0a,0xf9,0x10,0x1a,0xed,0xe8,
-0xc2,0x3d,0x51,0x0a,0xad,0x3e,0x4b,0xdd,0xee,0x4d,0x0f,0xce,0xf5,0x86,0xb5,0x91,
-0xeb,0xc6,0x26,0x77,0x7c,0x7c,0x81,0xbb,0xba,0x46,0x96,0xd6,0x88,0x6d,0xbc,0xed,
-0x57,0x7f,0x9e,0x5a,0xdb,0xda,0xaa,0xc6,0x07,0xcf,0xce,0xb1,0x38,0xb6,0x8a,0x7f,
-0x47,0x7e,0x23,0x5a,0x5b,0x56,0x88,0x8b,0xe7,0x56,0xad,0xb2,0x66,0x35,0xb5,0xdf,
-0x07,0x23,0x33,0x4f,0x0f,0x19,0x4a,0xa2,0x75,0xbe,0x5a,0x5d,0x0a,0x34,0x31,0x75,
-0x55,0x26,0x33,0xe2,0xd5,0xe8,0x2b,0x4b,0x73,0x43,0x16,0xb4,0x32,0x0c,0xc5,0xd0,
-0x09,0x82,0x68,0xe1,0xa0,0xdc,0x89,0x99,0xb9,0x7c,0xc6,0xf0,0xe0,0xd0,0x5b,0x73,
-0x4a,0x70,0x6c,0x65,0x54,0xbd,0xf4,0x0c,0x2f,0xe0,0xb6,0xd6,0x06,0x91,0x96,0x67,
-0x51,0x98,0x6b,0xc0,0x49,0xb1,0x09,0x8e,0x5a,0x45,0xf3,0x74,0x05,0x45,0x5d,0x9b,
-0x16,0x5c,0x0f,0xe3,0x2b,0x17,0x27,0xad,0xee,0x2c,0xdf,0x6d,0xb0,0x7c,0xb2,0xdf,
-0xa8,0x8f,0xd6,0x52,0xf4,0x6e,0x93,0x02,0x70,0x76,0x2d,0x41,0xe9,0xa1,0x1b,0x71,
-0x5a,0x30,0xf9,0x20,0x78,0xfd,0x5a,0x1d,0x75,0x07,0xee,0xfd,0xd6,0xa0,0xcd,0x13,
-0x4f,0x46,0xa4,0x6b,0x27,0xcd,0xe1,0x10,0x46,0xa1,0x1d,0xb4,0xed,0x42,0xc6,0x98,
-0x7f,0x22,0x1e,0x18,0x73,0x7c,0x7d,0xcd,0x36,0x61,0x2d,0xb3,0x1b,0x37,0xbc,0xa0,
-0x28,0xc7,0x47,0xea,0x42,0x65,0xbc,0x33,0x39,0xa8,0x53,0xde,0x11,0x65,0xcd,0x12,
-0x42,0x04,0xf8,0xcb,0x6c,0x6d,0x58,0x6e,0xa2,0xd8,0xce,0xf6,0x2b,0xce,0x62,0x2d,
-0x9f,0x05,0x6c,0x69,0x7c,0x0d,0xeb,0x69,0x58,0xa4,0xe0,0x97,0xbc,0x18,0x41,0x73,
-0x30,0x20,0xce,0xf6,0xbb,0xc4,0x9a,0x19,0xca,0x17,0xbd,0xa0,0x65,0x62,0xb0,0xc9,
-0xdc,0x54,0x01,0x6a,0x33,0x41,0x5c,0x33,0x2c,0x43,0xf4,0xdd,0xb1,0xc4,0x32,0x10,
-0xc3,0x19,0xc3,0x84,0x4a,0x43,0x74,0x48,0x10,0xc5,0x26,0xd3,0xfc,0x54,0x3f,0x85,
-0x5d,0x21,0xe9,0xa9,0xb1,0xef,0x4e,0x44,0xfb,0xb4,0x7b,0xc2,0x41,0xc1,0x81,0x5e,
-0xfa,0xd9,0x33,0x5d,0xd4,0xa0,0x5f,0x97,0x19,0x43,0x8b,0xb8,0x94,0x38,0x7f,0x9d,
-0x4b,0xae,0x74,0x5b,0xe9,0x0d,0x5f,0xdf,0x3f,0x38,0x11,0xb2,0x11,0x7c,0x0c,0xfa,
-0xd4,0x40,0x81,0x54,0x3a,0xa2,0x82,0xf2,0xb6,0xb6,0x18,0x41,0x82,0xac,0x88,0x22,
-0xeb,0xba,0xc6,0xbb,0x7b,0x3a,0x41,0x06,0x1e,0x1b,0x43,0x59,0x0e,0x04,0x79,0xa8,
-0x6d,0x06,0xc1,0xb9,0x87,0x2a,0x5c,0x70,0xea,0x00,0x81,0xa8,0x5e,0x52,0xb5,0xc5,
-0x9a,0x0d,0xf2,0x72,0x85,0xbc,0x0b,0x06,0x28,0x29,0x78,0x29,0x4b,0xc4,0xb0,0x21,
-0x4a,0x66,0x6a,0x8e,0xf2,0xef,0x64,0x82,0xf1,0x47,0xcf,0x5b,0x95,0xa3,0x26,0x21,
-0xcf,0x6e,0xd8,0x66,0x4c,0xbc,0x8b,0x58,0x95,0xd3,0xa3,0x0d,0x8e,0x6a,0xf0,0xd0,
-0x5d,0xa9,0x14,0x2c,0xf5,0xb3,0x68,0x55,0xcc,0xb0,0x72,0xc8,0x8e,0xdf,0x52,0xaa,
-0x99,0x96,0x3b,0xb7,0xbf,0x33,0x4c,0x1c,0xc8,0x69,0x4e,0xec,0xc1,0xc1,0x0c,0xd6,
-0x81,0xc5,0x39,0xa0,0x65,0x63,0x83,0xee,0x54,0x15,0xda,0xd3,0xa2,0xa9,0x47,0x29,
-0xe2,0x58,0xca,0x83,0xae,0x1a,0xd7,0xf4,0x8a,0x96,0x62,0xc2,0xec,0x82,0x21,0x9b,
-0x0a,0xf8,0x2b,0x9a,0x71,0xe0,0x89,0xf5,0x0c,0x24,0x32,0x10,0x12,0x82,0x1b,0x39,
-0x52,0x6a,0x12,0x59,0x1e,0xbb,0xc2,0x1d,0xeb,0x81,0x9a,0xcc,0x9d,0xbe,0x32,0x66,
-0x04,0x7b,0x85,0xe6,0x05,0x6a,0x27,0x1c,0x58,0x92,0x4d,0xc7,0x06,0x85,0xc2,0x0c,
-0xc4,0xed,0x18,0xdb,0x0a,0xd4,0x6c,0x84,0xe0,0x43,0x28,0x87,0x00,0x82,0xd2,0x51,
-0x85,0xa8,0x87,0x22,0xa9,0xdc,0x13,0x1c,0xd9,0xd8,0xc5,0xcd,0xcd,0x01,0x76,0x2a,
-0x4c,0xc8,0x59,0x3c,0x04,0x39,0x34,0x76,0x05,0x10,0x9c,0x76,0xdd,0xe9,0xea,0x44,
-0x90,0x94,0x16,0x38,0x82,0xc0,0x5e,0x79,0x67,0xd4,0xc5,0x20,0xdd,0xe6,0x9a,0x7f,
-0x8c,0x17,0x37,0xac,0x3c,0x11,0xc7,0xaa,0xec,0x50,0xe1,0x5a,0x31,0x7f,0xa2,0x22,
-0x01,0xd0,0x86,0x8f,0x0c,0x5d,0xd0,0x8b,0x12,0x51,0x99,0x6c,0x3c,0x36,0x52,0x25,
-0x8b,0x40,0xe5,0x05,0x3b,0x3f,0x8d,0xd7,0x79,0x5b,0x1c,0x9d,0xe1,0x39,0x60,0x49,
-0x94,0xc8,0x41,0x8f,0x98,0xde,0x25,0xc2,0x28,0xfa,0x3a,0x07,0x84,0xd6,0x7d,0xec,
-0x3e,0x24,0x43,0x31,0xe4,0xa3,0x56,0xa7,0x68,0xdb,0x82,0xd1,0x0c,0xf9,0x87,0xbb,
-0x96,0x79,0x92,0xa2,0xf1,0xd7,0x15,0xe3,0x99,0x0a,0x53,0x88,0x02,0xf1,0x5a,0xd3,
-0x98,0x09,0xa4,0x88,0xf0,0x6f,0x06,0x20,0x49,0x2a,0xa0,0xa0,0xae,0xc4,0x93,0x64,
-0x6d,0x10,0xaa,0x23,0x99,0x61,0x68,0xe4,0xbb,0x1d,0xd9,0x5e,0x02,0x12,0x44,0x12,
-0x4c,0x6e,0xe8,0x84,0xeb,0xd0,0xfb,0xf7,0x17,0xc8,0x52,0x5a,0xab,0xdb,0x69,0x26,
-0x92,0xa3,0xc6,0xc1,0xdc,0x9b,0x30,0x28,0x35,0x95,0x6a,0xad,0x15,0x35,0x9b,0x48,
-0x12,0xc1,0xb0,0x89,0x60,0x02,0x68,0x3d,0x59,0x64,0x4e,0x6e,0x1d,0xe5,0x03,0x1a,
-0x62,0x54,0x2b,0x4d,0x22,0xb2,0xdd,0x0a,0x91,0x49,0x20,0x48,0x31,0x77,0xae,0x38,
-0x6f,0x45,0x86,0xac,0x31,0x8c,0x26,0x5d,0x0d,0xa5,0x31,0x35,0x29,0x85,0x33,0xad,
-0x02,0xe5,0xa4,0x98,0xb6,0x3d,0x7d,0x37,0x26,0x73,0x04,0x65,0x68,0xd2,0x1c,0x45,
-0xd0,0x02,0x1e,0x58,0x98,0x8b,0x68,0x8b,0x4b,0x63,0x40,0xcb,0xe5,0x42,0xea,0xea,
-0x16,0x0f,0xb1,0x64,0x07,0x30,0xb1,0xc5,0x83,0xe5,0x62,0x63,0x6a,0x6d,0xaa,0xcb,
-0x89,0x42,0x46,0x57,0x8e,0x0a,0xa2,0x5c,0x82,0x00,0x6a,0x42,0x04,0x6a,0x93,0x82,
-0x4c,0xe6,0x55,0x45,0x5c,0xc4,0x47,0x70,0xae,0x41,0x60,0x41,0xd2,0x53,0xc2,0xb4,
-0x22,0xcc,0x4f,0x4e,0x69,0x1a,0xb4,0x87,0xca,0xc8,0x08,0xa1,0x5a,0x1d,0xb7,0xc0,
-0xde,0x8c,0x68,0xa4,0x75,0xd6,0x31,0x62,0xcb,0xb3,0x40,0xb7,0x8b,0x64,0x85,0x2d,
-0xcc,0x59,0xa2,0x37,0xa4,0xa3,0x99,0xcb,0x56,0xc4,0x00,0x16,0x28,0x89,0x7e,0xd6,
-0xbf,0x0a,0x65,0xa5,0xc2,0x2d,0x10,0x78,0xea,0x5f,0x2a,0x43,0x92,0x0b,0x78,0x20,
-0x51,0x83,0x1c,0x91,0x77,0x40,0xe1,0x05,0x35,0x30,0xf0,0xe5,0x54,0x1b,0x27,0x10,
-0x28,0xb8,0x12,0x87,0xc7,0xc2,0x32,0xba,0x16,0xa8,0x81,0x82,0x2e,0xfd,0xbd,0x1f,
-0x09,0x4a,0x2f,0x05,0xde,0x77,0xaf,0x60,0x60,0x8b,0xa0,0x86,0x11,0x4c,0x8d,0xad,
-0x99,0x90,0x66,0x5d,0x31,0x74,0x8b,0x12,0x41,0x83,0xd1,0xa3,0x68,0x70,0x24,0x36,
-0xbc,0xaa,0x1d,0x15,0xb2,0xa3,0xae,0xfb,0x88,0xc1,0x16,0x20,0x97,0x48,0x39,0x6a,
-0x25,0xe1,0xfe,0xd2,0x3c,0x43,0x4f,0x7d,0x6a,0xa4,0xa6,0x4c,0x10,0x2d,0x3e,0x77,
-0x65,0x88,0xde,0x86,0xfb,0x23,0x0c,0xb2,0x08,0xd3,0x82,0x97,0x5d,0x66,0x20,0x16,
-0xb3,0xba,0x6d,0xe0,0x07,0x62,0x3e,0xd5,0xf3,0xde,0x9f,0xbc,0xa9,0xc3,0x8c,0xb0,
-0xdb,0xe0,0xb5,0x36,0x9a,0x8a,0x2e,0x1c,0x2e,0x70,0xff,0x47,0xa9,0x2c,0x8f,0x12,
-0x31,0x77,0x8a,0x1d,0x65,0x3b,0x30,0x24,0x83,0x09,0x90,0x1e,0xd0,0xd7,0x73,0x1d,
-0xbb,0xb8,0x44,0xb6,0x3e,0x78,0xad,0x4d,0x1b,0x27,0x49,0xc3,0x1f,0x57,0x29,0x9d,
-0xb2,0xb0,0xe1,0x49,0x25,0x1e,0xe3,0x62,0xe1,0x89,0x8c,0x26,0x4c,0x48,0x30,0x51,
-0xb9,0x08,0x8d,0x8b,0x32,0xd2,0xce,0x90,0xb9,0x90,0xe7,0x6e,0x75,0x11,0x3a,0x20,
-0x26,0x75,0x1e,0x20,0xac,0xc2,0x1c,0x73,0x34,0x96,0x29,0xd6,0x28,0xa1,0x26,0x98,
-0x82,0xb9,0xa0,0x97,0x96,0x2a,0x10,0x18,0x3c,0xa3,0x0a,0x65,0x22,0xea,0x67,0x31,
-0xd8,0x20,0x4e,0x33,0x68,0x34,0xf9,0xee,0xdb,0xa0,0xdf,0xbb,0x0c,0x62,0xf3,0xa3,
-0x27,0xde,0x3f,0x4e,0x07,0x09,0xf1,0x8b,0x56,0xd1,0xf3,0x8a,0x8f,0x37,0x01,0x08,
-0x56,0x90,0xa0,0x2c,0x3c,0xfa,0xa8,0xfe,0xeb,0xdc,0x02,0x10,0xba,0xea,0xe9,0x3a,
-0x9a,0xbb,0x61,0x1e,0xc7,0x33,0xcb,0x35,0x60,0x21,0x0b,0x18,0xfa,0x6c,0xaf,0xb1,
-0xa1,0x4f,0x47,0x01,0x08,0x50,0xa3,0x3b,0x17,0x16,0x17,0x65,0x93,0xcd,0xad,0xee,
-0xb8,0x04,0x21,0x5d,0x2a,0x0b,0x2f,0x01,0x08,0x56,0xe6,0xe9,0x4b,0xcc,0x04,0x21,
-0x58,0x02,0x10,0xaa,0xf5,0x45,0xaf,0x1b,0xd9,0x53,0xf6,0xd1,0x90,0x84,0x81,0x51,
-0xff,0x17,0x72,0x45,0x38,0x50,0x90,0x5e,0x65,0xa7,0xf4,
+0x1a,0xfc,0x00,0x3d,0x9d,0x06,0x40,0xc9,0xf3,0x6d,0xdd,0xba,0xc9,0xe0,0x00,0xb7,
+0x68,0xca,0x7b,0x98,0xef,0xbb,0xd0,0xb9,0xde,0xef,0xbe,0x7a,0xfb,0xd8,0x07,0x4f,
+0xa2,0x8f,0x66,0x75,0x6c,0x04,0xf7,0xb9,0xc8,0x13,0x59,0xf4,0x75,0x3b,0x50,0x4f,
+0x77,0x3a,0x2b,0x69,0x1b,0xed,0x8e,0xdd,0x68,0x53,0xae,0x78,0x0d,0x34,0x10,0x02,
+0x13,0x41,0x32,0x84,0x26,0x8f,0x50,0xf5,0x32,0x6d,0x08,0xf5,0x01,0xa0,0x06,0x99,
+0x04,0x10,0x05,0x30,0xa0,0xa0,0x00,0x00,0x00,0x0d,0x00,0x25,0x31,0x24,0xd4,0xa7,
+0xa4,0xf2,0x9a,0x79,0x4d,0x1a,0x64,0xd0,0x00,0x00,0x32,0x68,0x34,0x00,0x49,0xea,
+0x94,0xa4,0x44,0x0f,0xd5,0x34,0x3d,0x40,0x03,0x10,0x00,0x00,0x32,0x03,0x4c,0x22,
+0x51,0x1a,0x23,0x08,0x8c,0x94,0xfd,0x22,0x34,0x1e,0x28,0x31,0xa1,0xa8,0xd1,0x93,
+0x69,0xa9,0xfa,0xa3,0xd4,0x12,0x12,0x09,0xa2,0x68,0xd0,0x45,0x34,0x44,0x68,0x00,
+0x00,0x00,0x34,0x07,0xff,0xf7,0xff,0xef,0x1a,0x1c,0xae,0x92,0xf6,0x76,0xe9,0x49,
+0x44,0x9a,0x28,0xa9,0x2d,0x09,0x01,0x4c,0xdb,0x48,0x5c,0xd6,0xf1,0xaf,0x25,0xce,
+0x95,0xf5,0x7b,0xb4,0x54,0xa4,0x58,0xc6,0x0b,0x11,0x25,0x17,0xa7,0x72,0x88,0x5b,
+0xd3,0xb7,0x4a,0x6c,0x19,0x94,0x26,0xda,0xf1,0x72,0xb4,0x53,0xce,0xdd,0x33,0x01,
+0x34,0xbc,0x75,0x1a,0x8d,0xae,0x57,0x62,0xee,0x8a,0xe8,0x6b,0x93,0xbc,0xf3,0x85,
+0x06,0x66,0x45,0x24,0x6f,0x3b,0x71,0x14,0x13,0x9d,0xa6,0x11,0x57,0x6e,0xdd,0x4b,
+0xce,0xdc,0xc6,0x4d,0x1b,0x17,0xa7,0xaf,0x57,0x8b,0xe9,0xae,0x16,0x2d,0x40,0x99,
+0x0b,0x62,0x2c,0x5a,0x28,0x34,0x2f,0x3a,0xef,0x6b,0xa8,0xda,0x34,0x63,0xd8,0xb6,
+0xe2,0x6a,0x30,0x46,0x89,0x26,0xf6,0xba,0x44,0xde,0xbe,0x79,0xe4,0xc8,0xf5,0xeb,
+0xd9,0xed,0xf4,0xbc,0x91,0x83,0x26,0x23,0x62,0x66,0x22,0x43,0x04,0x68,0xb2,0x27,
+0x2e,0x4c,0xb0,0x67,0x2b,0x9a,0x24,0x20,0x48,0x46,0x3c,0xcf,0xf3,0xf9,0xd4,0x44,
+0x47,0x97,0x87,0xb7,0xbe,0x7b,0xfe,0xfa,0x4f,0xcf,0xb3,0xbf,0xdb,0x71,0x25,0x6f,
+0xf0,0xed,0xb8,0x47,0xec,0x73,0xfb,0x5d,0xe9,0xf8,0x03,0x11,0x01,0xad,0xf7,0xfc,
+0xaf,0x48,0xfb,0x96,0x0d,0x69,0x65,0xf9,0x53,0x47,0x35,0x89,0xaf,0xdf,0xf7,0x08,
+0x92,0xed,0x2f,0xdd,0xb7,0xcf,0x7a,0x6d,0x2c,0x3b,0x0e,0x37,0xdb,0x81,0xf6,0xb7,
+0xd7,0xf8,0xbd,0x47,0xce,0xe2,0xdd,0x33,0x76,0xe6,0xfd,0xe1,0xfb,0xd3,0xbd,0x5d,
+0xa3,0xed,0x56,0xf1,0xd6,0xd6,0x6d,0x72,0xab,0x4b,0xdb,0xc5,0x5a,0x88,0x9e,0xa4,
+0xc6,0xd7,0x6f,0x1e,0xef,0x5c,0x77,0x47,0xe7,0xb2,0x8a,0x13,0xc3,0xe9,0xfa,0x6b,
+0x5b,0xc7,0x7d,0x76,0xe0,0x44,0x70,0x1b,0x0f,0x65,0xdf,0x79,0xc8,0xbe,0xf1,0x39,
+0xca,0xd1,0xb4,0xf9,0xbc,0x99,0x6d,0x56,0x71,0x60,0xf3,0x67,0x3d,0x79,0x94,0x44,
+0xf7,0xaf,0x57,0xb4,0x86,0xad,0x9a,0xde,0xbe,0xff,0xc6,0x7c,0xe3,0x39,0xad,0x25,
+0xda,0xda,0x18,0x7d,0x2c,0xbc,0x75,0xb3,0xc7,0x66,0xa0,0xe4,0xbd,0x6b,0x10,0x27,
+0x25,0xb1,0xcf,0xa9,0x5e,0x34,0xa2,0xe9,0x2f,0x35,0xd5,0xa7,0xc6,0x73,0x8b,0x13,
+0x24,0xa2,0xed,0x78,0x81,0xd9,0x7b,0x4d,0xee,0xab,0xd2,0x3d,0x74,0x8e,0x27,0x89,
+0x1d,0xf6,0xdb,0x8c,0xd6,0x7d,0xb5,0xb9,0xb5,0x56,0x19,0x4c,0x9f,0xc6,0xda,0x9d,
+0x3b,0x57,0x04,0x25,0x43,0x47,0x6b,0x6f,0xb2,0xbb,0xe7,0xa4,0xeb,0x1c,0xf2,0xb7,
+0xef,0x5f,0x7d,0xfa,0xd5,0x4b,0xca,0x6a,0x34,0xae,0xeb,0xad,0x33,0x9e,0xe3,0xa5,
+0x9a,0xd3,0xe7,0x9e,0xd0,0x3a,0x6f,0x96,0xc6,0xb7,0x6a,0x3c,0x7e,0xa0,0x82,0x23,
+0xda,0x22,0x23,0xdc,0x78,0xc5,0xee,0xee,0xa5,0xf3,0xe5,0x3b,0xe7,0xee,0xa1,0xde,
+0x22,0x23,0xe3,0x5b,0xcf,0x2f,0x2c,0xfc,0x03,0x9d,0xf3,0x9e,0x18,0x67,0xf1,0xfa,
+0xed,0xf2,0xb5,0x66,0xa2,0x7c,0xfe,0x5e,0xbf,0x45,0x2e,0x27,0x8f,0xf1,0x3d,0xff,
+0x02,0xff,0x0f,0x57,0xe5,0xff,0x7c,0xcb,0xcb,0x65,0xda,0x7f,0x5f,0xc2,0x9f,0xac,
+0xed,0x7d,0x0d,0xff,0x2e,0x3f,0xb7,0xe1,0xce,0xeb,0x20,0x0c,0xff,0x8f,0x14,0x89,
+0xa7,0xce,0x12,0xb0,0x2b,0x5b,0x7c,0xb6,0xb4,0x61,0x19,0x7f,0xc4,0xe9,0x0c,0x47,
+0xd2,0xdb,0x7e,0x43,0xbf,0xe7,0x06,0xf0,0xe5,0x55,0x7a,0xca,0x16,0x37,0x8f,0x9b,
+0x6e,0x65,0xf8,0xc4,0xb9,0xfc,0xef,0x55,0xfa,0x1a,0x4f,0xa7,0xb8,0x2c,0xeb,0x8f,
+0x5f,0x47,0x14,0x77,0xb5,0x16,0x70,0x75,0xed,0x4b,0x3a,0xd7,0x35,0xde,0x95,0x1f,
+0xca,0xb0,0xe9,0xbc,0x33,0x25,0xaa,0xbf,0x03,0xce,0x04,0x7d,0x9b,0x40,0x71,0x75,
+0x3e,0xe5,0xeb,0x78,0x27,0xeb,0xe9,0xd7,0x63,0x38,0xa8,0x7a,0x50,0x76,0x5f,0x87,
+0xb4,0xfe,0xa3,0xcf,0xb5,0x29,0xcc,0x63,0xc7,0xb6,0xec,0x3c,0x6f,0x20,0x5b,0xf9,
+0xe1,0xe2,0xba,0xee,0xe2,0x7d,0x35,0x96,0xe0,0xd7,0x68,0xf1,0xaf,0x02,0x6b,0x6e,
+0x85,0x44,0xba,0x79,0xbb,0xf7,0xd6,0xec,0x1b,0x0a,0xba,0xa6,0xdd,0xf9,0xb5,0x46,
+0x17,0xb1,0xbc,0x5f,0x92,0x7f,0xaa,0xef,0xfd,0x23,0xb4,0xee,0x6f,0xb5,0x29,0xc4,
+0xf1,0xe7,0xc5,0x0e,0xf6,0x86,0x6f,0x1c,0x3c,0xac,0x2e,0xa4,0xe8,0xd1,0x72,0xd1,
+0xe2,0x50,0x7d,0x2e,0xec,0x48,0xf9,0xab,0xf0,0x84,0x0c,0x91,0x9b,0x98,0xe0,0xcb,
+0xaf,0x8a,0x47,0x5b,0xa1,0x9f,0x97,0xd7,0x9c,0x8e,0x31,0x77,0xbb,0x9e,0x1d,0xc2,
+0x44,0xad,0xfc,0xcd,0xad,0x56,0xb0,0x53,0xe7,0x89,0xb6,0xf3,0xed,0xed,0xe2,0xa7,
+0x2f,0x0e,0x11,0x5e,0x2b,0x6c,0x6a,0x6b,0x26,0x33,0x68,0x59,0xf5,0x71,0x8b,0x91,
+0x17,0x7a,0x0d,0x9f,0xbf,0x95,0x73,0x8e,0xd3,0x57,0xb6,0x24,0xf8,0xc8,0xf6,0xdf,
+0xec,0x61,0x5b,0x7b,0x71,0x9b,0x3f,0xa9,0x57,0x87,0xc9,0x36,0xc7,0xc2,0x05,0x4b,
+0xeb,0xb5,0x0b,0xee,0x2b,0xa3,0x8a,0x4a,0xb1,0xf5,0x75,0x97,0x31,0x4d,0x1f,0x77,
+0xad,0xf1,0x2e,0x24,0xb5,0xc7,0xe7,0x7e,0x98,0x71,0x15,0xd7,0x71,0x35,0xe7,0xf1,
+0x1f,0xec,0x21,0x77,0x30,0x28,0x19,0x99,0x2c,0x43,0xae,0x04,0xe9,0x72,0xc8,0xc1,
+0xd3,0x08,0x38,0x18,0x19,0x4c,0xa0,0x7b,0xa7,0xca,0xd3,0xcb,0xd0,0x5f,0x47,0xdf,
+0x0b,0x23,0x0f,0xad,0x08,0x88,0x62,0x73,0xf5,0xf4,0x38,0xe5,0x20,0x58,0x5d,0x85,
+0x55,0xd6,0xa7,0x33,0x50,0xf0,0x2a,0x6a,0x00,0x82,0x0d,0x24,0x38,0x12,0x94,0x52,
+0xfb,0xaa,0x63,0xd1,0xd3,0x6e,0xaa,0x00,0x07,0x8b,0x20,0xce,0x6f,0xe7,0x08,0x89,
+0x56,0x30,0x2b,0x8b,0x05,0x74,0x5f,0xc5,0x56,0xb3,0xbb,0x08,0xfa,0x1c,0x86,0x4a,
+0xf0,0x03,0xa9,0xe3,0x73,0x3c,0x53,0x8b,0x6b,0x2c,0x3d,0x6b,0xcd,0x3f,0xc9,0x1c,
+0x18,0xd9,0x72,0x6c,0x34,0x76,0x86,0xe9,0x74,0x64,0x5e,0x01,0x9e,0x99,0xcd,0x8c,
+0xb3,0x9f,0x09,0x41,0xa9,0x4a,0x34,0x62,0x2c,0x55,0xc3,0xb3,0xe4,0x31,0xe8,0x1c,
+0x16,0x51,0x1a,0x96,0xd8,0x93,0x69,0x4a,0xc5,0xcf,0x10,0x67,0x4d,0x09,0x3d,0xa1,
+0x86,0xdb,0xe3,0x22,0xc2,0x65,0x6a,0xad,0xdf,0x8f,0x9b,0x89,0x08,0x16,0x43,0x36,
+0x8c,0x6f,0x76,0xa7,0x64,0xb9,0x47,0x63,0x6a,0x89,0x13,0xb3,0x8c,0x20,0x84,0x93,
+0x86,0x20,0x5f,0xc5,0xf3,0xee,0x2c,0x2e,0xf6,0x52,0x88,0x1c,0xa0,0xe0,0x75,0x9c,
+0x9d,0x26,0x28,0x1f,0x65,0x19,0x27,0x0c,0xfe,0x27,0x6c,0x24,0xd2,0xb9,0x73,0x82,
+0x95,0x8e,0xc2,0xfc,0x95,0x01,0x8d,0x79,0x0a,0xd4,0x20,0xd3,0x76,0x44,0x10,0x1b,
+0x62,0x06,0x2e,0xe2,0x08,0x72,0xfc,0xc7,0x8b,0xd2,0xc9,0xaf,0x2b,0xbb,0x0e,0x9a,
+0xd4,0x34,0xa6,0x43,0xb7,0x04,0x72,0x42,0xb9,0xd0,0xdb,0x97,0x38,0x40,0xf2,0xe3,
+0xcc,0xb0,0xcd,0x28,0xb0,0x82,0xec,0xfe,0x6e,0xae,0x45,0xa3,0x73,0x2c,0x71,0x34,
+0x86,0xc1,0x77,0x06,0xa3,0x07,0x8e,0xf5,0x6f,0xc6,0x66,0xfc,0x3a,0x9d,0xed,0x02,
+0xd2,0x46,0x62,0xa3,0xa8,0x5a,0x82,0xcb,0xbf,0x0a,0x73,0xf7,0x6a,0x0d,0x33,0x17,
+0xf9,0x61,0x46,0x59,0x69,0xb6,0x92,0xa6,0xb3,0x1e,0x3c,0xbe,0xdf,0xd9,0xe7,0xbb,
+0xf8,0x57,0xf3,0x0a,0x90,0xd9,0x0e,0xe7,0x5b,0x86,0x46,0x63,0x49,0x4c,0x91,0xa6,
+0x23,0x22,0x48,0xc8,0x20,0x49,0x62,0x49,0x99,0x22,0xd0,0x2c,0x98,0xd2,0x52,0x6c,
+0x01,0x66,0x26,0x35,0x40,0x69,0x62,0xb1,0x44,0x5b,0x44,0x65,0x12,0x28,0xa5,0x32,
+0x36,0x46,0x90,0x95,0x1a,0x08,0x52,0x48,0x49,0x90,0x96,0x54,0x85,0x33,0x16,0x21,
+0xb3,0x2c,0x21,0x61,0x25,0x49,0x44,0xdb,0x24,0x20,0xd9,0x45,0x3d,0x3b,0x91,0x64,
+0x30,0x9b,0x24,0xda,0xbc,0x74,0xc9,0x84,0xc9,0x84,0xd4,0xc9,0x85,0xa4,0xca,0x33,
+0x09,0xdd,0xcc,0x96,0x34,0x85,0x14,0x14,0xca,0x48,0xc9,0x46,0xf3,0xae,0x04,0xc1,
+0x4d,0x92,0x31,0x16,0x46,0x24,0xf3,0xae,0x87,0x75,0xc1,0x20,0xd1,0xb1,0xa2,0x05,
+0x48,0x29,0x91,0xb0,0xa6,0x44,0x02,0x1e,0x76,0xee,0xfc,0x37,0xba,0x81,0xad,0xe1,
+0x18,0xd2,0x3c,0x9f,0xb2,0x95,0x5e,0x28,0x31,0x8d,0x1e,0x92,0xf9,0xd5,0x20,0x95,
+0xe0,0xd6,0x9e,0xff,0x72,0x7a,0x30,0xf7,0xab,0x32,0x15,0xa5,0x01,0x92,0x03,0x65,
+0x10,0xbe,0x7e,0x7c,0xaa,0xc4,0xd5,0x88,0xd9,0x69,0xac,0x38,0x16,0xd5,0xdc,0xb6,
+0x67,0xe6,0x99,0x6b,0xcb,0x66,0xef,0x5d,0x52,0x7d,0xea,0xb6,0xc6,0x0b,0x43,0x80,
+0xc0,0xeb,0x8d,0xef,0x0d,0x3e,0x22,0xe5,0xce,0xf3,0x5a,0xd3,0x97,0xad,0xb6,0x5c,
+0xba,0xb5,0xbc,0xa7,0xb1,0x3b,0xbd,0xda,0xbb,0x2f,0xf7,0xc5,0x14,0x96,0x5a,0x8d,
+0x9a,0x58,0x19,0x10,0x7b,0x44,0x32,0x04,0x80,0x47,0xbc,0xb4,0x95,0xd6,0x7e,0xfb,
+0xce,0x48,0x98,0x48,0x41,0x20,0x96,0x22,0x84,0x2c,0x59,0xf5,0xe7,0x08,0x5e,0x20,
+0x47,0x01,0xa6,0x00,0x24,0x90,0x0a,0x52,0x9d,0xd0,0x4b,0xa8,0x80,0x36,0xc2,0xbb,
+0xbb,0xb9,0xc2,0x94,0xc8,0x02,0xf9,0xcd,0xd0,0xda,0x8f,0xb4,0x10,0x73,0x67,0x05,
+0x18,0xcd,0x32,0xe1,0xdc,0x78,0x21,0x7a,0x04,0x06,0x11,0x19,0x26,0x81,0xb7,0xc2,
+0x39,0xe6,0x36,0xd2,0x4e,0xf7,0x1d,0xde,0x44,0x3a,0x76,0x80,0xad,0xb6,0x16,0xa8,
+0xb7,0x8c,0xc6,0x6b,0xdd,0x48,0xa2,0xa1,0x10,0x21,0xc2,0x0e,0x3d,0x66,0xf1,0x8a,
+0xc5,0xb4,0xcd,0x38,0xce,0x2d,0xb4,0xc8,0x86,0xbb,0x87,0xc8,0x5d,0x1f,0x5b,0x53,
+0xb5,0x0f,0x84,0xd6,0xba,0x19,0x26,0xee,0xd2,0x18,0x84,0xc8,0x76,0xc1,0x41,0x0f,
+0x45,0x82,0x65,0x77,0x95,0xf5,0x12,0x9f,0x6a,0xb6,0xd6,0xaa,0xe9,0x01,0x7f,0x4f,
+0xee,0x89,0x7b,0x07,0xb4,0xdf,0x2f,0x99,0xc6,0x0d,0xa7,0x4e,0x9e,0x60,0x52,0x58,
+0x8e,0x5e,0xb6,0x8d,0xa3,0x07,0x20,0xcd,0x2a,0xee,0xca,0xa3,0x37,0x94,0x64,0x79,
+0xa1,0xac,0x8c,0x4e,0x5e,0x6e,0xb8,0xcc,0x9d,0xf7,0x46,0xf5,0xd5,0x64,0x67,0x68,
+0xe2,0xdb,0x3d,0xae,0x30,0x2b,0xd3,0x10,0x4b,0x06,0x5d,0x3b,0x6f,0xba,0x89,0x71,
+0x1e,0xaa,0x35,0x7a,0xc5,0x10,0x6f,0xbc,0x83,0xc9,0xb0,0x53,0x14,0x25,0xbe,0xba,
+0xcc,0x2b,0x3d,0xf7,0xf5,0xb6,0x1e,0xfe,0x93,0x03,0x65,0xbe,0xcd,0x43,0xeb,0x40,
+0xc9,0x59,0x4b,0x14,0x90,0xf4,0x78,0xd3,0x48,0x2c,0x58,0xca,0x3a,0x31,0x2d,0x95,
+0xb1,0xc2,0x9d,0xd5,0x09,0x90,0xd0,0x56,0xff,0x85,0x90,0xa2,0xcc,0xed,0xf1,0xab,
+0x63,0xc7,0x77,0xd2,0x57,0x5e,0xa7,0x14,0x01,0x15,0x4a,0xbd,0xf7,0xbf,0x05,0x77,
+0x96,0xb1,0xf6,0x46,0xfc,0xb7,0xa6,0xd4,0x10,0x70,0x06,0x13,0x07,0x07,0x7b,0x11,
+0x3e,0x3b,0xe6,0x35,0xd7,0xd3,0x8a,0x8c,0xe1,0xc3,0x50,0x91,0x28,0xb3,0x21,0xa3,
+0x0f,0x6f,0x7b,0x35,0x51,0xb0,0x1d,0xb4,0xc3,0x33,0xba,0xa4,0xb2,0x82,0xeb,0x8b,
+0xec,0x2a,0x77,0x53,0xd4,0x54,0x7d,0x33,0xb7,0x4c,0x2e,0x04,0xa6,0xc1,0xe4,0x87,
+0x22,0x2f,0x87,0x70,0x42,0x02,0x52,0x82,0x1d,0xd9,0xd8,0x0e,0x41,0x26,0xf8,0x52,
+0x0d,0x8a,0x5d,0xd1,0x04,0x9e,0x22,0xa5,0x04,0xa0,0x32,0xc4,0x8d,0xf1,0xc1,0x2c,
+0xd6,0xb8,0x89,0x52,0xed,0xc8,0x84,0x41,0x8c,0x68,0x50,0xd5,0x85,0x56,0xc8,0x2d,
+0xda,0x0b,0x77,0xc6,0xf0,0xdd,0x14,0x3b,0x36,0xd1,0x86,0x36,0x90,0xeb,0x73,0xd6,
+0x84,0xb8,0x06,0x6f,0xca,0x95,0x81,0xd3,0x03,0x38,0x8e,0x96,0xae,0xd9,0x70,0xda,
+0x38,0xc1,0x77,0xe5,0x4d,0x90,0x5a,0xc5,0x2d,0x15,0x2e,0xc2,0x34,0x59,0x80,0xb3,
+0x98,0x08,0x6d,0x23,0x66,0x94,0x68,0xa6,0x86,0xd2,0x18,0xf4,0xc1,0x53,0x42,0x54,
+0xcb,0x35,0x6b,0xc2,0xda,0x81,0x8a,0x86,0x1e,0xdd,0x40,0x34,0xf6,0x79,0x6b,0x7a,
+0x82,0x29,0xb6,0x28,0xc0,0x8f,0x84,0xf4,0xc0,0xe3,0x72,0x08,0x57,0x68,0xc5,0xa2,
+0x48,0xb5,0xa7,0xcc,0x42,0xcf,0x55,0x10,0x05,0x34,0x36,0xd8,0x79,0x5f,0x97,0x99,
+0x67,0xb7,0xcc,0xda,0x7e,0x65,0x3f,0x62,0x47,0x3d,0x92,0x81,0xc6,0x92,0x80,0x94,
+0x1a,0xd3,0x06,0x84,0x2d,0x5e,0x49,0x0d,0xf6,0x0a,0x71,0xd1,0x15,0x51,0xcf,0x8e,
+0x34,0xb0,0x68,0x11,0x04,0x82,0x2e,0x30,0xb1,0x65,0x44,0x59,0xca,0xce,0x94,0x82,
+0x41,0x71,0x0c,0xf4,0x06,0x08,0x91,0x41,0xda,0xbc,0x0f,0x3c,0xf0,0xfe,0x6f,0xad,
+0x5f,0x1e,0x8e,0x45,0x40,0x2e,0x78,0x03,0x78,0x62,0x40,0x28,0x0a,0x38,0x40,0x4f,
+0x26,0xdc,0xf5,0x79,0x86,0xa2,0xdc,0x4d,0x46,0x22,0xdb,0xc4,0xbb,0x6c,0xd2,0x53,
+0x46,0x1c,0x9b,0x65,0xe8,0x83,0x44,0x1c,0x58,0x40,0xb8,0x9e,0x78,0x39,0x38,0xd8,
+0x09,0x64,0x4b,0x7b,0x02,0xd5,0x71,0x8d,0x3b,0xe0,0x40,0x6b,0x6f,0xae,0x96,0x12,
+0xa8,0xf8,0x2c,0xe0,0xed,0xc6,0x1d,0xa0,0x1a,0xa4,0x14,0x9c,0xb4,0x0d,0x72,0x81,
+0x2e,0xdf,0x13,0x31,0x4a,0xc5,0x36,0x40,0x43,0xa2,0x12,0x22,0xeb,0x11,0xf4,0x5b,
+0x6d,0x58,0xd5,0x46,0xaa,0xbe,0x05,0x73,0x56,0x2a,0xd7,0xaa,0xba,0xa4,0xc2,0x9a,
+0x15,0x98,0x20,0xa1,0xa1,0x09,0x36,0x03,0x69,0x10,0xf4,0xcd,0x79,0x50,0x74,0xa4,
+0x70,0x22,0x23,0x8e,0x23,0xf4,0x67,0x05,0x0d,0x48,0x01,0x09,0x2c,0xfc,0x53,0x49,
+0x58,0x54,0xd2,0xee,0xe9,0xd0,0x5d,0x33,0x02,0x09,0xbd,0x8e,0x3d,0xc9,0x42,0xd5,
+0x23,0x16,0x22,0x08,0x55,0x84,0x6c,0xb2,0xab,0xc3,0x10,0x53,0x02,0xe9,0x20,0xbb,
+0x6c,0x29,0xc6,0xd4,0x85,0xf8,0xea,0xad,0xf0,0xfc,0x5b,0xe0,0x7e,0x7d,0xa1,0xb8,
+0x52,0xea,0x3a,0x25,0x3b,0x43,0xc4,0x00,0x2a,0xf7,0x6d,0xf2,0x3b,0xf7,0xef,0x63,
+0x60,0x79,0x5a,0xd3,0x41,0xdf,0x66,0xac,0xc3,0x3b,0x23,0xed,0x6a,0xd8,0xa0,0xbb,
+0x61,0x5d,0x2e,0x6c,0xdd,0x82,0x1c,0x5d,0xfc,0x2b,0xc2,0x29,0xba,0xd7,0x0e,0x96,
+0xdc,0x55,0x51,0x51,0x78,0x15,0x33,0x8a,0x03,0x96,0x8c,0x1d,0xd2,0xd1,0x71,0x1c,
+0x45,0xe8,0x68,0x18,0xcf,0x1c,0x43,0x3c,0xc3,0xc8,0x61,0x1d,0x5b,0x81,0xb1,0x23,
+0x60,0x80,0x75,0xcf,0x2d,0xb0,0xb6,0xb8,0xf7,0x14,0x61,0xef,0x9d,0x61,0xa6,0xd7,
+0x65,0x11,0xbb,0x14,0x29,0x20,0xd8,0xf9,0xe6,0x50,0xc7,0x71,0x3d,0x21,0xbe,0xfe,
+0x08,0x72,0x59,0x73,0x42,0x8d,0x01,0x1a,0x06,0x3d,0xeb,0x82,0xe3,0x5b,0x57,0x5f,
+0xa2,0x23,0x60,0x5d,0xae,0x01,0xb4,0xc5,0x4d,0xb3,0xa6,0x1d,0x6c,0x83,0xdf,0xaf,
+0x4e,0xaf,0x2a,0x83,0xd3,0xf8,0x31,0x5c,0xe4,0xe3,0xce,0x82,0xc9,0x78,0xe3,0xf3,
+0x79,0xe2,0xdf,0x35,0xf1,0xa7,0xc2,0x0c,0x9e,0xf6,0x27,0xb9,0x03,0x5f,0x57,0xfa,
+0xbe,0xb6,0xfa,0xd8,0x3d,0x8f,0x1d,0xa4,0x39,0x60,0x31,0xfd,0x87,0xa6,0x96,0xcd,
+0x7b,0x3d,0x2a,0x3a,0x5d,0x99,0xa4,0xc3,0x6f,0xe4,0x7e,0xac,0x5e,0xe6,0x47,0xc1,
+0xd8,0x0f,0xa2,0xb3,0xe6,0xe8,0xe9,0x79,0x3c,0xea,0x98,0x64,0xec,0xe2,0xae,0xfc,
+0x9b,0x3e,0x7d,0x43,0x6a,0x84,0x36,0x57,0x36,0x92,0xb9,0x95,0x4f,0xbe,0x21,0xdd,
+0x85,0x9b,0x49,0x77,0x7b,0x27,0x61,0x0b,0x2f,0x85,0xc9,0xae,0xe0,0xc1,0x2c,0x35,
+0x6f,0x12,0x42,0x16,0xb1,0x8b,0x31,0x63,0x09,0x7c,0x0b,0xe6,0xde,0x43,0x05,0x8f,
+0x34,0x1c,0x52,0x2a,0xe6,0xf1,0xee,0xb7,0xe3,0x0e,0x12,0x4a,0x67,0x4e,0x99,0xc0,
+0xc7,0x55,0x27,0xcc,0x6e,0x6a,0x17,0xdc,0x22,0xf1,0xa9,0xcc,0x34,0xca,0x5d,0x31,
+0xb6,0xc1,0x93,0x9d,0x28,0xd2,0xce,0xbb,0x1d,0xbb,0xc2,0xb9,0x01,0x00,0xf6,0xad,
+0xb9,0x99,0x3e,0x55,0xc6,0xaa,0xf2,0x83,0x9e,0xdd,0x48,0x44,0x8e,0x7d,0xab,0x70,
+0x0c,0xee,0x77,0x8d,0xda,0x74,0xd2,0x80,0xc3,0xc0,0xcb,0x34,0x53,0x4d,0xa3,0x36,
+0xb0,0xb7,0xa1,0x19,0xf7,0xef,0xd9,0x60,0xf5,0xf7,0xf2,0xb1,0x98,0xcb,0xb7,0x8e,
+0x8b,0x0c,0xf9,0xe7,0x4e,0x93,0x76,0x39,0x7d,0x48,0x8a,0x9e,0x0a,0x48,0x54,0xd5,
+0x0f,0x60,0xf1,0x7a,0x8c,0x9b,0xdc,0xbd,0x4b,0x46,0xda,0x3a,0x62,0x6c,0xda,0xa8,
+0x44,0x16,0x3c,0xdf,0x09,0x04,0xdb,0x77,0xf3,0xc8,0x14,0xc3,0x46,0x1a,0x13,0xc1,
+0x29,0x10,0x48,0x45,0xa5,0xc2,0x2f,0x78,0x25,0xf4,0x17,0xc8,0x8e,0x6a,0x17,0x8b,
+0x5b,0x11,0x87,0xbf,0xc2,0xec,0x43,0x44,0x0f,0x2a,0xa4,0x3c,0xcd,0x66,0x7a,0x1d,
+0x66,0x14,0xf4,0x30,0x7d,0x40,0xdf,0x9f,0xcc,0xe7,0xdb,0xb8,0x44,0xc5,0x93,0xaa,
+0x39,0x23,0x18,0xdb,0x18,0xd8,0xdf,0x22,0x06,0x71,0xf3,0x9f,0x1a,0xca,0xc1,0xd5,
+0x0d,0xd7,0x86,0xac,0xd8,0xdf,0x77,0x6e,0xdc,0xc9,0xd3,0x08,0x1e,0xa6,0x72,0xd5,
+0x92,0x1e,0x51,0xd1,0x61,0xc4,0x2e,0xd9,0xf3,0xab,0x9d,0x51,0x02,0x43,0x22,0x65,
+0x88,0xb5,0x99,0x81,0xa9,0x24,0x20,0x51,0x91,0xc0,0x76,0x38,0x08,0x08,0x23,0x72,
+0x02,0xde,0xcf,0x91,0x17,0xc2,0xbd,0x02,0x5f,0xca,0x1b,0x97,0x26,0x4d,0xcb,0x0a,
+0x05,0x04,0x72,0x12,0x44,0x4a,0x97,0x64,0x7d,0xe8,0xf4,0xd1,0xea,0x26,0x66,0x58,
+0xb2,0x6f,0x6f,0x84,0xf1,0xad,0xe1,0xe4,0x2c,0x64,0x41,0x87,0x77,0x03,0x86,0xe7,
+0x1a,0x21,0x71,0x52,0x4a,0xeb,0x79,0x76,0x8b,0x90,0x90,0x6a,0xa9,0xb1,0xd4,0x0a,
+0x1a,0x06,0xc5,0x45,0xc8,0x43,0xd9,0x0d,0xdb,0x1b,0x62,0xc8,0x41,0x97,0x2e,0x92,
+0x49,0x21,0x5b,0x25,0xa0,0xa9,0x02,0xcb,0x2d,0x11,0x52,0x02,0x90,0x27,0x78,0x02,
+0x5b,0x41,0x4a,0x95,0x18,0x40,0x32,0x52,0x96,0x85,0xbe,0xaa,0xed,0x05,0xe4,0x57,
+0x8b,0xbb,0x01,0x7b,0xce,0xc6,0x32,0x95,0xc1,0xa4,0x65,0x40,0x8a,0x16,0x88,0x80,
+0xc4,0x5c,0x11,0x77,0x18,0xd0,0x0a,0x95,0xc6,0xca,0xd8,0x40,0x20,0x5d,0x88,0x6d,
+0x82,0x1c,0x1b,0x20,0xd1,0x30,0xce,0x4b,0xb2,0x13,0x25,0x91,0x10,0xfe,0x1c,0xed,
+0xde,0x3b,0x81,0x3a,0x27,0x7e,0x3a,0x48,0x31,0x66,0x7e,0xa7,0x64,0x62,0xa8,0x55,
+0x50,0x17,0xba,0xc5,0x79,0x0e,0x31,0x17,0xc0,0xcb,0x41,0x01,0x1e,0xb9,0xc1,0xa9,
+0x1d,0x1b,0x26,0xd2,0x45,0x87,0x6f,0xae,0xd6,0x3c,0xaf,0xb0,0x9e,0x39,0x37,0x59,
+0xa2,0xfb,0x73,0xca,0xfc,0x37,0x61,0x04,0xcb,0xd3,0x7a,0x86,0x58,0x05,0x1c,0x90,
+0xef,0xe2,0x0d,0x78,0x6a,0xe1,0x8a,0x1d,0x92,0x49,0x24,0x28,0x90,0xad,0xc6,0xdb,
+0x3e,0x75,0x74,0xb2,0xd2,0x06,0x0f,0x9c,0x3d,0xec,0xa0,0x58,0xcb,0x78,0xb0,0xe6,
+0xfb,0x4d,0xf9,0x19,0x77,0xa0,0xa4,0xf8,0x5f,0x8f,0x13,0x3b,0x13,0x56,0x26,0xae,
+0x84,0xa3,0x66,0xf9,0x85,0xd8,0xb6,0x37,0xef,0xc9,0xf3,0x7c,0x6a,0xd6,0x62,0xcf,
+0x3c,0xa0,0xd9,0x8d,0x8d,0x8b,0xcb,0xa6,0x8d,0x83,0x1b,0xe6,0x74,0x75,0x95,0x76,
+0xbc,0x6d,0x9b,0xe8,0xee,0x1d,0x5a,0x2f,0xae,0x89,0x6b,0x3e,0x0f,0x5d,0xcc,0x09,
+0x5c,0x0f,0x1f,0x6a,0x20,0xe6,0xc6,0x78,0xf1,0xdf,0x55,0x56,0x8d,0x26,0xd4,0x21,
+0xe0,0x5c,0xce,0xbc,0x22,0x7c,0xa2,0x44,0x91,0x1f,0xcb,0xa5,0xd2,0x10,0x3d,0xfd,
+0x38,0x80,0x4e,0xde,0xa6,0x8c,0xe5,0x77,0x18,0x74,0x2f,0x3d,0xcc,0x8b,0x99,0x75,
+0x55,0x7a,0xbd,0x88,0x98,0x39,0xb8,0xa7,0xa1,0x54,0x0e,0xe6,0x32,0x2e,0x18,0xf4,
+0xcc,0x40,0xeb,0xd2,0x6b,0xac,0x4d,0x6e,0xa9,0x96,0x92,0x6c,0x78,0xc2,0xa1,0x09,
+0x99,0x84,0x34,0x52,0x15,0x83,0x20,0xcf,0x48,0x6e,0xea,0xcd,0x0c,0xf8,0x87,0xad,
+0x02,0xd0,0x80,0x4e,0x29,0x80,0xc8,0xe0,0x11,0xb2,0x18,0xca,0xf0,0xc9,0x30,0x01,
+0xac,0x0f,0x12,0xa8,0xd0,0x8f,0x63,0x8a,0xe4,0x66,0xe9,0xb4,0x36,0x23,0xd3,0x23,
+0x65,0x24,0x74,0x84,0x5f,0xad,0x3c,0xe0,0x3c,0x33,0x7e,0xea,0x08,0xf0,0x86,0xd8,
+0x78,0x6d,0xd6,0x1d,0xdd,0x6e,0xcf,0x35,0x33,0xb4,0x30,0xd6,0xc7,0x9c,0x58,0xf0,
+0x68,0x80,0x9a,0x25,0x13,0xec,0x85,0x27,0xd3,0xcb,0x8c,0x63,0xae,0x43,0x88,0x01,
+0x43,0x7c,0x5a,0x67,0x02,0x94,0x3e,0xa8,0x34,0x4a,0x89,0x23,0xb9,0x4f,0xb5,0x22,
+0x4d,0xa4,0x3a,0x74,0x05,0x83,0xab,0x4e,0x7b,0xfa,0xe4,0x56,0xac,0x89,0x16,0x39,
+0xbd,0xe8,0x72,0xa5,0xea,0x2e,0x19,0x4a,0x95,0xaa,0xc6,0x39,0x98,0xb3,0x31,0x77,
+0x44,0x4b,0xf0,0x49,0xef,0x89,0x5c,0x52,0xfb,0x1d,0x3b,0x0a,0x0b,0x43,0x3a,0xd0,
+0x69,0x3b,0xe0,0x8b,0x1b,0xc9,0xea,0xc9,0x7c,0xfa,0x94,0xfb,0x2b,0xc1,0xe3,0xef,
+0x4f,0xa0,0xb8,0xbf,0x26,0x46,0x17,0x6b,0x63,0x0d,0x18,0xba,0xb0,0xbd,0x16,0xa6,
+0xca,0x7d,0xdc,0x50,0x40,0x01,0x96,0x08,0x41,0x0c,0xf8,0xbd,0xc0,0x72,0xa2,0x38,
+0x4a,0x74,0x1a,0xed,0x96,0xcd,0x3c,0x6c,0x6a,0xe7,0x88,0x42,0x91,0x1c,0xde,0xc6,
+0x05,0x56,0xa6,0x75,0x71,0x65,0xa8,0x71,0xce,0xad,0x2e,0x8a,0x3d,0x79,0x9f,0x02,
+0xd3,0x1d,0x01,0x26,0xf0,0x61,0x1d,0x72,0xec,0x41,0x95,0xd9,0xa3,0x96,0x59,0xb6,
+0xd9,0xdc,0xb1,0x15,0x96,0xed,0x06,0x30,0xa1,0x2d,0x4a,0x84,0x36,0x01,0x62,0xdb,
+0x62,0x5c,0x84,0x59,0xa5,0x98,0xba,0x23,0x2d,0x3d,0xda,0x4c,0xc2,0x18,0x41,0x41,
+0xba,0x1c,0xd5,0x4c,0x14,0x25,0x34,0x42,0x21,0x24,0x4f,0x66,0xc5,0x10,0x66,0xfe,
+0x67,0xd9,0x9a,0x1d,0xb0,0x56,0x3c,0x75,0xf5,0xcf,0x52,0x2e,0x5f,0x8a,0x9d,0x82,
+0xd8,0x4f,0x6e,0x8f,0xce,0x24,0x4c,0x8f,0x4d,0xf2,0x65,0x36,0x8e,0x9d,0x5a,0xc2,
+0x72,0xaf,0x39,0xd6,0xef,0x4d,0x4f,0x2c,0x22,0xf8,0x61,0x2c,0x27,0x7c,0x8b,0x05,
+0x6c,0x23,0xdc,0xee,0x37,0x88,0xc6,0x48,0x37,0x34,0xf5,0x57,0x76,0x80,0x70,0x66,
+0xe9,0xfa,0x3b,0x81,0x9f,0x0a,0x1f,0x8c,0xd7,0x1e,0xf8,0x28,0x0b,0xb9,0xbb,0x5e,
+0x3c,0x0c,0xf3,0xc5,0x60,0x0e,0x86,0x88,0xd1,0xd8,0xdd,0x8e,0xd1,0x52,0xe1,0x38,
+0xaf,0xcd,0x10,0xf3,0x7d,0x79,0xbd,0x34,0x07,0x1a,0xc5,0xdd,0xb4,0x8b,0xb3,0x66,
+0x4d,0xa2,0x9e,0x1e,0x8c,0x3b,0xd3,0xda,0xdf,0x5f,0xb7,0xa5,0x49,0x51,0xbc,0xe3,
+0x1a,0x73,0x9d,0xdd,0x3a,0x1c,0x0e,0x11,0xc8,0xdc,0x73,0xdb,0xe2,0xc7,0x67,0x7e,
+0x8a,0xe0,0xdf,0x9e,0x32,0x3f,0x30,0x94,0xfc,0x14,0xf8,0x2a,0x11,0x3a,0x34,0xd6,
+0xef,0x28,0x2a,0x0b,0xa8,0x86,0xc8,0x5e,0x9c,0xa5,0x9d,0xe8,0x2f,0xd4,0x2f,0xb6,
+0xd9,0xbb,0x16,0x98,0xc4,0xd1,0xc3,0x05,0x3a,0xe0,0x94,0x3f,0x3b,0xee,0x91,0x68,
+0x79,0x61,0x9e,0xb5,0xad,0xaf,0x96,0x17,0x38,0x0b,0x98,0x1d,0x21,0x91,0x66,0x7d,
+0xe5,0xee,0x83,0x63,0x97,0xd1,0x41,0xbf,0xdb,0xeb,0xe3,0x68,0x1d,0xc8,0x44,0x1d,
+0x48,0x1b,0xf5,0x5b,0x6c,0x18,0x36,0x89,0xdb,0xf5,0x42,0x7d,0xa2,0x3c,0xa8,0x15,
+0xf5,0x04,0x1b,0x6f,0xec,0xca,0x3d,0xfb,0xb1,0x45,0xad,0x9f,0xa9,0x7b,0xbe,0xc4,
+0xc1,0xfa,0x61,0xad,0x45,0x4a,0xc8,0x76,0xda,0xd1,0x1a,0x6f,0x20,0x55,0x6e,0xaa,
+0x64,0xb8,0x9b,0xba,0x63,0x58,0x95,0x1b,0xce,0xc9,0x3c,0xce,0x52,0x99,0x71,0xe7,
+0xcd,0xeb,0x15,0x9d,0xca,0xb7,0x37,0x77,0xd4,0x63,0x0b,0x29,0x5c,0x87,0xa5,0x9e,
+0xf6,0xa3,0x62,0xe6,0x4f,0x18,0xa3,0x0a,0x9b,0x0b,0x44,0x9e,0x1e,0x32,0x95,0x44,
+0xe9,0xb6,0x5a,0x5d,0x0a,0x34,0x31,0x7a,0xa9,0x2f,0x9e,0xea,0xbe,0x05,0x68,0xb6,
+0x34,0x31,0x6b,0x43,0x20,0xc9,0xd4,0x08,0x84,0xd1,0xcb,0x41,0xc1,0x13,0x35,0x72,
+0xfa,0x8d,0xe5,0xc1,0xa0,0xb7,0x06,0x29,0xc1,0xb0,0x43,0xba,0x99,0xa0,0xc2,0xfd,
+0x96,0xd6,0xc0,0xd2,0x32,0xcc,0xea,0x33,0x0d,0x78,0x09,0x36,0x21,0x31,0xcb,0x48,
+0xbe,0x6f,0x03,0x16,0xc6,0xc9,0x66,0xcb,0x91,0xfd,0x32,0xb3,0x72,0x7b,0xe2,0xe2,
+0xd5,0xf7,0xdf,0x27,0xd5,0x97,0x1d,0x44,0x7e,0xe9,0x4b,0xd9,0xc0,0x0c,0x09,0xc9,
+0xd8,0xb5,0x07,0xb6,0x84,0x6f,0xcd,0x61,0x87,0xd4,0x81,0xe7,0xf5,0xe0,0xeb,0xa8,
+0x3f,0x97,0xf0,0xb6,0x06,0x61,0x34,0xf0,0xd4,0x23,0x5a,0x3e,0xb8,0x84,0x41,0x1a,
+0x84,0x76,0xc7,0x6a,0x16,0x71,0x97,0xf5,0x10,0xf2,0xc5,0xde,0xf9,0xfc,0xa6,0x37,
+0x61,0x2d,0xbb,0x1b,0x38,0xbc,0xa0,0x28,0xcf,0x47,0xeb,0x42,0x65,0xbc,0xb3,0x5a,
+0xa8,0x53,0xe2,0x11,0x69,0xcc,0x24,0x24,0x09,0xf3,0xa6,0xd8,0xda,0xb0,0xdd,0x45,
+0xb9,0xae,0x2c,0x57,0xad,0x44,0x5b,0x5e,0x4a,0xdc,0xa9,0xb0,0x26,0xf0,0x9e,0xd4,
+0x9c,0x12,0xf7,0x83,0x08,0x2e,0x26,0x04,0x19,0xdb,0x17,0xc4,0x4d,0x1b,0x0c,0xd9,
+0x0b,0xde,0xd0,0x32,0xb1,0x58,0x64,0xee,0x29,0xc1,0x8c,0x44,0x3a,0x91,0x10,0xa8,
+0x4f,0x88,0xf7,0x07,0x67,0xdc,0x31,0x7d,0x86,0xfb,0x4b,0x33,0x62,0xbd,0x0b,0x58,
+0x5d,0x1c,0x6e,0xc7,0xae,0xb4,0x3b,0x1b,0xd4,0x96,0xc4,0xda,0x71,0xb6,0xab,0x37,
+0x44,0xe3,0x82,0x86,0x86,0x03,0x11,0x47,0x42,0x29,0x74,0x56,0x01,0x3d,0x15,0x21,
+0x81,0x54,0xd8,0x22,0x28,0xc9,0xf5,0x41,0x09,0xa9,0x25,0xe4,0xa2,0x87,0xc6,0xbb,
+0x72,0x23,0x74,0x22,0xf9,0x19,0xf7,0xb0,0x90,0x81,0x54,0x3a,0xa2,0x82,0xf2,0xb7,
+0xb6,0x58,0x41,0x82,0xad,0x08,0x22,0xeb,0x3e,0x16,0xd3,0x7f,0x8f,0x88,0x41,0x1e,
+0x97,0x07,0x1b,0x94,0x16,0xfb,0xc5,0x97,0x02,0xd3,0xd9,0xda,0x9c,0xbd,0x0d,0xdd,
+0x08,0x02,0x1b,0x48,0x5e,0x95,0xae,0x2c,0xce,0x6f,0x93,0x94,0x2f,0xd8,0xb0,0x62,
+0x82,0x97,0x82,0x51,0x97,0x89,0x61,0x92,0xf1,0x25,0x8b,0x79,0xde,0xaa,0xc9,0x05,
+0xe0,0x77,0xeb,0x82,0xb0,0xc9,0x98,0x77,0xed,0xdb,0x2c,0xdc,0xd3,0xd0,0xb6,0x89,
+0x5d,0x3a,0x32,0xdb,0x6e,0x6c,0xf2,0xd0,0x5d,0xa9,0x14,0x2c,0xf6,0xb3,0x68,0x55,
+0xde,0x58,0x3b,0xb2,0x23,0xb7,0xdc,0xaa,0xa6,0x69,0x8e,0xee,0xb6,0xf1,0x7c,0x22,
+0x9d,0xc5,0x79,0x29,0xa4,0x50,0xc0,0x33,0x63,0xbe,0x29,0xe0,0x19,0x58,0xdc,0xfb,
+0x2a,0x0a,0xe9,0x68,0xe8,0xaa,0x51,0xc2,0x78,0x12,0xd2,0x60,0xe9,0xbb,0x5a,0xff,
+0x11,0x52,0xcc,0x58,0x5d,0xa1,0x1a,0x4b,0x53,0x6d,0x39,0xe3,0x14,0x7d,0x33,0x6f,
+0x95,0xca,0xae,0xe2,0x1b,0x0a,0xea,0xee,0x36,0x6e,0x2c,0xf7,0x3f,0x4f,0xcb,0x28,
+0x78,0xb6,0x46,0xad,0x42,0x77,0xf8,0xcd,0xdc,0x11,0xe0,0x2c,0xbb,0xc0,0x9d,0xe2,
+0x55,0xd4,0xc9,0x24,0xd4,0x68,0xc8,0x50,0x28,0x46,0x27,0x5e,0x27,0x3a,0xe5,0x5e,
+0xc6,0xe8,0x4e,0x44,0x32,0x88,0x70,0x08,0x2d,0x25,0x18,0x5a,0xc4,0x39,0x15,0x4e,
+0xe0,0x97,0xac,0xd9,0x0b,0xd0,0xd0,0xc8,0x0a,0x21,0x58,0x34,0x21,0x67,0x0c,0x1b,
+0x93,0x58,0x70,0x51,0x09,0xcf,0x87,0xf1,0xb4,0x58,0x89,0xa9,0x0a,0x50,0x5c,0xe5,
+0x95,0x86,0x29,0xa7,0x8d,0xa8,0x2a,0xcf,0xe3,0x55,0xda,0x3e,0x2c,0xba,0xc5,0x9b,
+0xb1,0x1d,0x3d,0x5b,0x72,0x87,0x2a,0xf5,0x53,0xf2,0xa0,0xe2,0x58,0x88,0xae,0xe0,
+0xcc,0xb1,0x16,0x24,0xa3,0x32,0xd8,0x78,0x6c,0xa4,0x4b,0x16,0x81,0xc2,0x0a,0x75,
+0x79,0xef,0x67,0xeb,0x2b,0x53,0x47,0x68,0x4e,0x58,0x12,0x65,0x32,0x10,0x63,0xe7,
+0x1b,0x44,0xb8,0x45,0x1f,0x87,0x40,0xee,0x9a,0xcf,0xb5,0x87,0xca,0x44,0x00,0x0f,
+0x05,0x1a,0xb5,0x3b,0x46,0xbd,0x98,0xa1,0x13,0xbb,0xfd,0x7e,0x2a,0x6a,0xe4,0xa1,
+0xad,0xb8,0xee,0xdd,0xfc,0x64,0x35,0xaf,0x54,0x3b,0xe2,0x6f,0xaf,0x74,0x6c,0xb2,
+0xcf,0x3f,0x53,0x9b,0x41,0x83,0x6d,0xa4,0x84,0x0a,0xd5,0x55,0xb5,0x36,0x88,0x55,
+0x11,0xcd,0x18,0x5a,0x3b,0x97,0x63,0xbb,0x34,0xdc,0x33,0x08,0xb4,0x92,0xbd,0x91,
+0xa1,0xc7,0xbc,0xfb,0xea,0x2f,0x90,0xa4,0xb5,0x57,0x9d,0x64,0x9a,0x48,0x51,0xdf,
+0x50,0xee,0x4d,0x98,0x14,0x18,0xda,0xb4,0xab,0x4d,0x4d,0x66,0xd7,0x0b,0xa1,0x6a,
+0x36,0x80,0x8a,0xcf,0xac,0xcd,0xcb,0xef,0xb1,0x2d,0x86,0x10,0x8e,0x0d,0xa1,0xd9,
+0xc6,0xc5,0x89,0x10,0xd3,0x13,0x6c,0x1b,0x0b,0xda,0xdc,0x5f,0xbd,0xb0,0xb2,0xd5,
+0x86,0x31,0x84,0xd3,0xa1,0xb4,0xa6,0x66,0xc5,0x30,0xa6,0x75,0x80,0xb9,0x69,0x26,
+0x6d,0x9f,0x7f,0x76,0xf6,0xf6,0xd8,0x67,0xb3,0xc5,0x6f,0x7d,0x8f,0x79,0xba,0x02,
+0x22,0x9a,0xa0,0x93,0xee,0x46,0x27,0xc1,0xa8,0x75,0xee,0xa1,0x77,0xc2,0x85,0x68,
+0xe0,0xb8,0x43,0x7d,0x3e,0x0e,0x70,0x25,0xa5,0x91,0xad,0x73,0xd6,0x73,0x6a,0xf8,
+0x7b,0x1b,0x6b,0x5b,0x14,0xcd,0xa9,0x62,0x00,0x8c,0x3b,0x91,0xa5,0x27,0x04,0x99,
+0xc4,0xaa,0x8a,0xb9,0xbb,0xbd,0xd6,0xf5,0x21,0x50,0x85,0xc0,0xde,0x36,0xbc,0xdb,
+0x55,0x49,0x70,0xc3,0x31,0xab,0x48,0x7c,0x6c,0x80,0x8a,0x06,0x08,0x50,0x96,0xc9,
+0x59,0x04,0x43,0x11,0xc9,0x99,0x80,0x69,0x41,0xc0,0x5a,0xd4,0x6e,0x42,0x31,0xe2,
+0xa2,0x28,0x71,0x59,0xc8,0xea,0x93,0xda,0xf9,0x60,0x05,0xca,0x22,0x63,0xc2,0xd7,
+0xe1,0x5d,0x3c,0xfa,0x22,0xea,0x6a,0x0a,0xef,0x0d,0x65,0x80,0xc4,0x82,0xdd,0x90,
+0x28,0xc1,0x8e,0x08,0xbb,0xa0,0x70,0x82,0x9a,0x98,0x78,0x72,0xaa,0x0d,0x93,0x88,
+0x14,0x5d,0x84,0xa1,0xf2,0xf6,0x8c,0xae,0x45,0xaa,0x20,0x60,0x8b,0xbf,0x4f,0x47,
+0xb4,0xa5,0x17,0x82,0xef,0x3b,0x57,0x90,0x60,0x8b,0xa0,0x86,0x11,0x4c,0x8d,0xad,
+0x99,0x90,0x66,0x5d,0x31,0x74,0x8b,0x12,0x41,0x82,0x39,0x34,0x6d,0x0e,0x04,0x86,
+0xd3,0xd2,0xa1,0xc9,0x5a,0xaa,0x3a,0x75,0xd4,0x69,0x39,0x22,0xe4,0x13,0x09,0x07,
+0x2d,0x62,0x5e,0x1f,0xee,0x91,0xdc,0x34,0xf5,0xce,0xb5,0x25,0x32,0x60,0x81,0x48,
+0xef,0xa4,0x56,0xd4,0x0d,0x61,0x4b,0xe0,0x86,0xb0,0x22,0xec,0x14,0xeb,0x7b,0x3b,
+0x82,0x94,0x66,0x54,0xcb,0x80,0xc8,0x47,0xd6,0xbe,0x7d,0x68,0xfd,0x65,0x4e,0x1c,
+0x65,0x86,0xbf,0x22,0xcf,0x4d,0xa3,0x51,0x46,0x03,0x85,0xce,0x1f,0xe8,0xf5,0x25,
+0x92,0x5b,0xc8,0xcd,0xde,0x24,0x75,0xa2,0x76,0x60,0x49,0x06,0x13,0x20,0x3c,0xc3,
+0x5d,0xcc,0x74,0xee,0xe1,0x12,0xd8,0xf9,0xef,0x5a,0x4d,0x1b,0x27,0x52,0x84,0xdf,
+0xca,0x74,0xa9,0x6f,0x35,0x44,0xbb,0x6e,0x3f,0x36,0xec,0xe8,0x4d,0x96,0xd4,0x51,
+0x36,0x3b,0x38,0xf6,0x21,0x11,0xa9,0x66,0x5a,0x2c,0xe8,0x85,0xcc,0x87,0x3a,0xf1,
+0xa4,0x44,0xe8,0x40,0x4c,0xea,0x3b,0x80,0xf8,0x41,0x0d,0xb7,0x54,0xec,0x8a,0x66,
+0x10,0xaa,0x54,0xa8,0x09,0xb6,0x03,0xc3,0xb2,0x31,0x82,0x09,0x88,0xb5,0x5d,0x9b,
+0x75,0x67,0x26,0x10,0x33,0x33,0x29,0xac,0xf5,0x73,0xfc,0xfc,0x87,0x47,0x3f,0xbf,
+0xf3,0x31,0x9d,0x3f,0x78,0xe8,0x31,0xfe,0xe9,0x3a,0x73,0xf5,0x8b,0x5a,0x9f,0x79,
+0x53,0xab,0x02,0x22,0x39,0x94,0xb0,0x64,0x7d,0x37,0xdb,0xfd,0xf8,0x7c,0x44,0x44,
+0x7a,0x36,0x79,0xe1,0xb2,0x6d,0xce,0x95,0xe1,0x79,0xd3,0x76,0x9b,0x44,0x44,0x7c,
+0xab,0xd5,0x96,0xde,0x12,0x98,0xf9,0xde,0x22,0x23,0x4b,0x74,0xc3,0x53,0x23,0x5e,
+0x7c,0xef,0xc2,0x67,0xd9,0xa8,0x88,0x8e,0xb7,0x58,0xcb,0x70,0x88,0x8e,0x7a,0x79,
+0xe3,0x7e,0x02,0x22,0x39,0x08,0x88,0xec,0xfb,0x2b,0x37,0x13,0xaf,0x65,0xfe,0xab,
+0x73,0x15,0x41,0xb7,0xfe,0x2e,0xe4,0x8a,0x70,0xa1,0x20,0x38,0x67,0x65,0x8c,
};
#endif
diff --git a/include-full/usage_compressed.h b/include-full/usage_compressed.h
index 9bbcf4b..1f2e4d6 100644
--- a/include-full/usage_compressed.h
+++ b/include-full/usage_compressed.h
@@ -283,999 +283,1033 @@
"\x2d\x33\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x6c\x69\x6e\x65" \
"\x73\x20\x63\x6f\x6d\x6d\x6f\x6e\x20\x74\x6f\x20\x62\x6f\x74\x68" \
"\x20\x66\x69\x6c\x65\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d" \
-"\x20\x53\x4f\x55\x52\x43\x45\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f" \
-"\x70\x79\x20\x53\x4f\x55\x52\x43\x45\x20\x74\x6f\x20\x44\x45\x53" \
-"\x54\x2c\x20\x6f\x72\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x53" \
-"\x4f\x55\x52\x43\x45\x28\x73\x29\x20\x74\x6f\x20\x44\x49\x52\x45" \
-"\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x61\x09\x53\x61\x6d\x65\x20" \
-"\x61\x73\x20\x2d\x64\x70\x52\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52" \
-"\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x64\x2c\x2d\x50\x09\x50\x72" \
-"\x65\x73\x65\x72\x76\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x69\x66\x20\x2d\x52\x29\x0a" \
-"\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73" \
-"\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c" \
-"\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63" \
-"\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x70\x09" \
-"\x50\x72\x65\x73\x65\x72\x76\x65\x20\x66\x69\x6c\x65\x20\x61\x74" \
-"\x74\x72\x69\x62\x75\x74\x65\x73\x20\x69\x66\x20\x70\x6f\x73\x73" \
-"\x69\x62\x6c\x65\x0a\x09\x2d\x66\x09\x4f\x76\x65\x72\x77\x72\x69" \
-"\x74\x65\x0a\x09\x2d\x69\x09\x50\x72\x6f\x6d\x70\x74\x20\x62\x65" \
-"\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09" \
-"\x2d\x6c\x2c\x2d\x73\x09\x43\x72\x65\x61\x74\x65\x20\x28\x73\x79" \
-"\x6d\x29\x6c\x69\x6e\x6b\x73\x00\x5b\x2d\x64\x6d\x76\x75\x5d\x20" \
-"\x5b\x2d\x46\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x48\x20\x6e\x65" \
-"\x77\x63\x5d\x20\x5b\x2d\x74\x69\x6f\x5d\x20\x5b\x2d\x70\x20\x44" \
-"\x49\x52\x5d\x20\x5b\x45\x58\x54\x52\x5f\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x6f\x72\x20\x6c" \
-"\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d\x20\x61" \
-"\x20\x63\x70\x69\x6f\x20\x61\x72\x63\x68\x69\x76\x65\x2c\x20\x6f" \
-"\x72\x0a\x63\x72\x65\x61\x74\x65\x20\x61\x6e\x20\x61\x72\x63\x68" \
-"\x69\x76\x65\x20\x28\x2d\x6f\x29\x20\x6f\x72\x20\x63\x6f\x70\x79" \
-"\x20\x66\x69\x6c\x65\x73\x20\x28\x2d\x70\x29\x20\x75\x73\x69\x6e" \
-"\x67\x20\x66\x69\x6c\x65\x20\x6c\x69\x73\x74\x20\x6f\x6e\x20\x73" \
-"\x74\x64\x69\x6e\x0a\x0a\x4d\x61\x69\x6e\x20\x6f\x70\x65\x72\x61" \
-"\x74\x69\x6f\x6e\x20\x6d\x6f\x64\x65\x3a\x0a\x09\x2d\x74\x09\x4c" \
-"\x69\x73\x74\x0a\x09\x2d\x69\x09\x45\x78\x74\x72\x61\x63\x74\x20" \
-"\x45\x58\x54\x52\x5f\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x61" \
-"\x6c\x6c\x29\x0a\x09\x2d\x6f\x09\x43\x72\x65\x61\x74\x65\x20\x28" \
-"\x72\x65\x71\x75\x69\x72\x65\x73\x20\x2d\x48\x20\x6e\x65\x77\x63" \
-"\x29\x0a\x09\x2d\x70\x20\x44\x49\x52\x09\x43\x6f\x70\x79\x20\x66" \
-"\x69\x6c\x65\x73\x20\x74\x6f\x20\x44\x49\x52\x0a\x09\x2d\x64\x09" \
-"\x4d\x61\x6b\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x64\x69\x72" \
-"\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x6d\x09\x50\x72\x65" \
-"\x73\x65\x72\x76\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09\x2d\x76\x09" \
-"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x09\x4f\x76\x65\x72" \
-"\x77\x72\x69\x74\x65\x0a\x09\x2d\x46\x20\x46\x49\x4c\x45\x09\x49" \
-"\x6e\x70\x75\x74\x20\x28\x2d\x74\x2c\x2d\x69\x2c\x2d\x70\x29\x20" \
-"\x6f\x72\x20\x6f\x75\x74\x70\x75\x74\x20\x28\x2d\x6f\x29\x20\x66" \
-"\x69\x6c\x65\x0a\x09\x2d\x48\x20\x6e\x65\x77\x63\x09\x41\x72\x63" \
-"\x68\x69\x76\x65\x20\x66\x6f\x72\x6d\x61\x74\x00\x2d\x66\x62\x53" \
-"\x20\x2d\x6c\x20\x4e\x20\x2d\x4c\x20\x4c\x4f\x47\x46\x49\x4c\x45" \
-"\x20\x2d\x63\x20\x44\x49\x52\x0a\x0a\x09\x2d\x66\x09\x46\x6f\x72" \
-"\x65\x67\x72\x6f\x75\x6e\x64\x0a\x09\x2d\x62\x09\x42\x61\x63\x6b" \
-"\x67\x72\x6f\x75\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29" \
-"\x0a\x09\x2d\x53\x09\x4c\x6f\x67\x20\x74\x6f\x20\x73\x79\x73\x6c" \
-"\x6f\x67\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x6c" \
-"\x09\x53\x65\x74\x20\x6c\x6f\x67\x20\x6c\x65\x76\x65\x6c\x2e\x20" \
-"\x30\x20\x69\x73\x20\x74\x68\x65\x20\x6d\x6f\x73\x74\x20\x76\x65" \
-"\x72\x62\x6f\x73\x65\x2c\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x38" \
-"\x0a\x09\x2d\x4c\x09\x4c\x6f\x67\x20\x74\x6f\x20\x66\x69\x6c\x65" \
-"\x0a\x09\x2d\x63\x09\x57\x6f\x72\x6b\x69\x6e\x67\x20\x64\x69\x72" \
-"\x00\x5b\x2d\x63\x20\x44\x49\x52\x5d\x20\x5b\x2d\x75\x20\x55\x53" \
-"\x45\x52\x5d\x20\x5b\x2d\x6c\x65\x72\x5d\x7c\x5b\x46\x49\x4c\x45" \
-"\x5d\x0a\x0a\x09\x2d\x63\x09\x43\x72\x6f\x6e\x74\x61\x62\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x09\x2d\x75\x09\x55\x73\x65" \
-"\x72\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x63\x72\x6f\x6e\x74" \
-"\x61\x62\x0a\x09\x2d\x65\x09\x45\x64\x69\x74\x20\x63\x72\x6f\x6e" \
-"\x74\x61\x62\x0a\x09\x2d\x72\x09\x44\x65\x6c\x65\x74\x65\x20\x63" \
-"\x72\x6f\x6e\x74\x61\x62\x0a\x09\x46\x49\x4c\x45\x09\x52\x65\x70" \
-"\x6c\x61\x63\x65\x20\x63\x72\x6f\x6e\x74\x61\x62\x20\x62\x79\x20" \
-"\x46\x49\x4c\x45\x20\x28\x27\x2d\x27\x3a\x20\x73\x74\x64\x69\x6e" \
-"\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c" \
-"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x73\x65\x6c" \
-"\x65\x63\x74\x65\x64\x20\x66\x69\x65\x6c\x64\x73\x20\x66\x72\x6f" \
-"\x6d\x20\x65\x61\x63\x68\x20\x69\x6e\x70\x75\x74\x20\x46\x49\x4c" \
-"\x45\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62" \
-"\x20\x4c\x49\x53\x54\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c" \
-"\x79\x20\x62\x79\x74\x65\x73\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53" \
-"\x54\x0a\x09\x2d\x63\x20\x4c\x49\x53\x54\x09\x4f\x75\x74\x70\x75" \
-"\x74\x20\x6f\x6e\x6c\x79\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72" \
-"\x73\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53\x54\x0a\x09\x2d\x64\x20" \
-"\x43\x48\x41\x52\x09\x55\x73\x65\x20\x43\x48\x41\x52\x20\x69\x6e" \
-"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x61\x62\x20\x61\x73\x20" \
-"\x74\x68\x65\x20\x66\x69\x65\x6c\x64\x20\x64\x65\x6c\x69\x6d\x69" \
-"\x74\x65\x72\x0a\x09\x2d\x73\x09\x4f\x75\x74\x70\x75\x74\x20\x6f" \
-"\x6e\x6c\x79\x20\x74\x68\x65\x20\x6c\x69\x6e\x65\x73\x20\x63\x6f" \
-"\x6e\x74\x61\x69\x6e\x69\x6e\x67\x20\x64\x65\x6c\x69\x6d\x69\x74" \
-"\x65\x72\x0a\x09\x2d\x66\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x6f" \
-"\x6e\x6c\x79\x20\x74\x68\x65\x73\x65\x20\x66\x69\x65\x6c\x64\x73" \
-"\x0a\x09\x2d\x6e\x09\x49\x67\x6e\x6f\x72\x65\x64\x00\x5b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2b\x46\x4d\x54\x5d\x20\x5b\x54" \
-"\x49\x4d\x45\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x69" \
-"\x6d\x65\x20\x28\x75\x73\x69\x6e\x67\x20\x2b\x46\x4d\x54\x29\x2c" \
-"\x20\x6f\x72\x20\x73\x65\x74\x20\x74\x69\x6d\x65\x0a\x0a\x09\x5b" \
-"\x2d\x73\x2c\x2d\x2d\x73\x65\x74\x5d\x20\x54\x49\x4d\x45\x09\x53" \
-"\x65\x74\x20\x74\x69\x6d\x65\x20\x74\x6f\x20\x54\x49\x4d\x45\x0a" \
-"\x09\x2d\x75\x2c\x2d\x2d\x75\x74\x63\x09\x57\x6f\x72\x6b\x20\x69" \
-"\x6e\x20\x55\x54\x43\x20\x28\x64\x6f\x6e\x27\x74\x20\x63\x6f\x6e" \
-"\x76\x65\x72\x74\x20\x74\x6f\x20\x6c\x6f\x63\x61\x6c\x20\x74\x69" \
-"\x6d\x65\x29\x0a\x09\x2d\x52\x2c\x2d\x2d\x72\x66\x63\x2d\x32\x38" \
-"\x32\x32\x09\x4f\x75\x74\x70\x75\x74\x20\x52\x46\x43\x2d\x32\x38" \
-"\x32\x32\x20\x63\x6f\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64\x61\x74" \
-"\x65\x20\x73\x74\x72\x69\x6e\x67\x0a\x09\x2d\x49\x5b\x53\x50\x45" \
-"\x43\x5d\x09\x4f\x75\x74\x70\x75\x74\x20\x49\x53\x4f\x2d\x38\x36" \
-"\x30\x31\x20\x63\x6f\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64\x61\x74" \
-"\x65\x20\x73\x74\x72\x69\x6e\x67\x0a\x09\x09\x09\x53\x50\x45\x43" \
-"\x3d\x27\x64\x61\x74\x65\x27\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x29\x20\x66\x6f\x72\x20\x64\x61\x74\x65\x20\x6f\x6e\x6c\x79\x2c" \
-"\x0a\x09\x09\x09\x27\x68\x6f\x75\x72\x73\x27\x2c\x20\x27\x6d\x69" \
-"\x6e\x75\x74\x65\x73\x27\x2c\x20\x6f\x72\x20\x27\x73\x65\x63\x6f" \
-"\x6e\x64\x73\x27\x20\x66\x6f\x72\x20\x64\x61\x74\x65\x20\x61\x6e" \
-"\x64\x0a\x09\x09\x09\x74\x69\x6d\x65\x20\x74\x6f\x20\x74\x68\x65" \
-"\x20\x69\x6e\x64\x69\x63\x61\x74\x65\x64\x20\x70\x72\x65\x63\x69" \
-"\x73\x69\x6f\x6e\x0a\x09\x2d\x72\x2c\x2d\x2d\x72\x65\x66\x65\x72" \
-"\x65\x6e\x63\x65\x20\x46\x49\x4c\x45\x09\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x6c\x61\x73\x74\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74" \
-"\x69\x6f\x6e\x20\x74\x69\x6d\x65\x20\x6f\x66\x20\x46\x49\x4c\x45" \
-"\x0a\x09\x2d\x64\x2c\x2d\x2d\x64\x61\x74\x65\x20\x54\x49\x4d\x45" \
-"\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x54\x49\x4d\x45\x2c\x20\x6e" \
-"\x6f\x74\x20\x27\x6e\x6f\x77\x27\x0a\x09\x2d\x44\x20\x46\x4d\x54" \
-"\x09\x09\x55\x73\x65\x20\x46\x4d\x54\x20\x66\x6f\x72\x20\x2d\x64" \
-"\x20\x54\x49\x4d\x45\x20\x63\x6f\x6e\x76\x65\x72\x73\x69\x6f\x6e" \
-"\x0a\x0a\x52\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\x20\x54\x49\x4d" \
-"\x45\x20\x66\x6f\x72\x6d\x61\x74\x73\x3a\x0a\x09\x68\x68\x3a\x6d" \
-"\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x5b\x59\x59\x59\x59\x2e\x5d\x4d" \
-"\x4d\x2e\x44\x44\x2d\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a" \
-"\x09\x59\x59\x59\x59\x2d\x4d\x4d\x2d\x44\x44\x20\x68\x68\x3a\x6d" \
-"\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x5b\x5b\x5b\x5b\x5b\x59\x59\x5d" \
-"\x59\x59\x5d\x4d\x4d\x5d\x44\x44\x5d\x68\x68\x5d\x6d\x6d\x5b\x2e" \
-"\x73\x73\x5d\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x2e\x2e" \
-"\x2e\x0a\x0a\x54\x69\x6e\x79\x20\x52\x50\x4e\x20\x63\x61\x6c\x63" \
-"\x75\x6c\x61\x74\x6f\x72\x2e\x20\x4f\x70\x65\x72\x61\x74\x69\x6f" \
-"\x6e\x73\x3a\x0a\x2b\x2c\x20\x61\x64\x64\x2c\x20\x2d\x2c\x20\x73" \
-"\x75\x62\x2c\x20\x2a\x2c\x20\x6d\x75\x6c\x2c\x20\x2f\x2c\x20\x64" \
-"\x69\x76\x2c\x20\x25\x2c\x20\x6d\x6f\x64\x2c\x20\x2a\x2a\x2c\x20" \
-"\x65\x78\x70\x2c\x20\x61\x6e\x64\x2c\x20\x6f\x72\x2c\x20\x6e\x6f" \
-"\x74\x2c\x20\x65\x6f\x72\x2c\x0a\x70\x20\x2d\x20\x70\x72\x69\x6e" \
-"\x74\x20\x74\x6f\x70\x20\x6f\x66\x20\x74\x68\x65\x20\x73\x74\x61" \
-"\x63\x6b\x20\x28\x77\x69\x74\x68\x6f\x75\x74\x20\x70\x6f\x70\x70" \
-"\x69\x6e\x67\x29\x2c\x0a\x66\x20\x2d\x20\x70\x72\x69\x6e\x74\x20" \
-"\x65\x6e\x74\x69\x72\x65\x20\x73\x74\x61\x63\x6b\x2c\x0a\x6f\x20" \
-"\x2d\x20\x70\x6f\x70\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20" \
-"\x61\x6e\x64\x20\x73\x65\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x72" \
-"\x61\x64\x69\x78\x20\x28\x6d\x75\x73\x74\x20\x62\x65\x20\x31\x30" \
-"\x2c\x20\x31\x36\x2c\x20\x38\x20\x6f\x72\x20\x32\x29\x2e\x0a\x45" \
-"\x78\x61\x6d\x70\x6c\x65\x73\x3a\x20\x27\x64\x63\x20\x32\x20\x32" \
-"\x20\x61\x64\x64\x20\x70\x27\x20\x2d\x3e\x20\x34\x2c\x20\x27\x64" \
-"\x63\x20\x38\x20\x38\x20\x2a\x20\x32\x20\x32\x20\x2b\x20\x2f\x20" \
-"\x70\x27\x20\x2d\x3e\x20\x31\x36\x00\x5b\x69\x66\x3d\x46\x49\x4c" \
-"\x45\x5d\x20\x5b\x6f\x66\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x69\x62" \
-"\x73\x3d\x4e\x5d\x20\x5b\x6f\x62\x73\x3d\x4e\x5d\x20\x5b\x62\x73" \
-"\x3d\x4e\x5d\x20\x5b\x63\x6f\x75\x6e\x74\x3d\x4e\x5d\x20\x5b\x73" \
-"\x6b\x69\x70\x3d\x4e\x5d\x0a\x09\x5b\x73\x65\x65\x6b\x3d\x4e\x5d" \
-"\x20\x5b\x63\x6f\x6e\x76\x3d\x6e\x6f\x74\x72\x75\x6e\x63\x7c\x6e" \
-"\x6f\x65\x72\x72\x6f\x72\x7c\x73\x79\x6e\x63\x7c\x66\x73\x79\x6e" \
-"\x63\x5d\x0a\x0a\x43\x6f\x70\x79\x20\x61\x20\x66\x69\x6c\x65\x20" \
-"\x77\x69\x74\x68\x20\x63\x6f\x6e\x76\x65\x72\x74\x69\x6e\x67\x20" \
-"\x61\x6e\x64\x20\x66\x6f\x72\x6d\x61\x74\x74\x69\x6e\x67\x0a\x0a" \
-"\x09\x69\x66\x3d\x46\x49\x4c\x45\x09\x09\x52\x65\x61\x64\x20\x66" \
-"\x72\x6f\x6d\x20\x46\x49\x4c\x45\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x73\x74\x64\x69\x6e\x0a\x09\x6f\x66\x3d\x46\x49" \
-"\x4c\x45\x09\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x46\x49\x4c" \
-"\x45\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x09\x62\x73\x3d\x4e\x09\x09\x52\x65\x61\x64\x20" \
-"\x61\x6e\x64\x20\x77\x72\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65" \
-"\x73\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x09\x69\x62\x73" \
-"\x3d\x4e\x09\x09\x52\x65\x61\x64\x20\x4e\x20\x62\x79\x74\x65\x73" \
-"\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x09\x6f\x62\x73\x3d" \
-"\x4e\x09\x09\x57\x72\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73" \
-"\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x09\x63\x6f\x75\x6e" \
-"\x74\x3d\x4e\x09\x09\x43\x6f\x70\x79\x20\x6f\x6e\x6c\x79\x20\x4e" \
-"\x20\x69\x6e\x70\x75\x74\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73" \
-"\x6b\x69\x70\x3d\x4e\x09\x09\x53\x6b\x69\x70\x20\x4e\x20\x69\x6e" \
-"\x70\x75\x74\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73\x65\x65\x6b" \
-"\x3d\x4e\x09\x09\x53\x6b\x69\x70\x20\x4e\x20\x6f\x75\x74\x70\x75" \
-"\x74\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x6e" \
-"\x6f\x74\x72\x75\x6e\x63\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x75" \
-"\x6e\x63\x61\x74\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c" \
-"\x65\x0a\x09\x63\x6f\x6e\x76\x3d\x6e\x6f\x65\x72\x72\x6f\x72\x09" \
-"\x43\x6f\x6e\x74\x69\x6e\x75\x65\x20\x61\x66\x74\x65\x72\x20\x72" \
-"\x65\x61\x64\x20\x65\x72\x72\x6f\x72\x73\x0a\x09\x63\x6f\x6e\x76" \
-"\x3d\x73\x79\x6e\x63\x09\x50\x61\x64\x20\x62\x6c\x6f\x63\x6b\x73" \
-"\x20\x77\x69\x74\x68\x20\x7a\x65\x72\x6f\x73\x0a\x09\x63\x6f\x6e" \
-"\x76\x3d\x66\x73\x79\x6e\x63\x09\x50\x68\x79\x73\x69\x63\x61\x6c" \
-"\x6c\x79\x20\x77\x72\x69\x74\x65\x20\x64\x61\x74\x61\x20\x6f\x75" \
-"\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x66\x69\x6e\x69\x73\x68\x69" \
-"\x6e\x67\x0a\x0a\x4e\x75\x6d\x62\x65\x72\x73\x20\x6d\x61\x79\x20" \
-"\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79\x20\x63" \
-"\x20\x28\x78\x31\x29\x2c\x20\x77\x20\x28\x78\x32\x29\x2c\x20\x62" \
-"\x20\x28\x78\x35\x31\x32\x29\x2c\x20\x6b\x44\x20\x28\x78\x31\x30" \
-"\x30\x30\x29\x2c\x20\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x0a" \
-"\x4d\x44\x20\x28\x78\x31\x30\x30\x30\x30\x30\x30\x29\x2c\x20\x4d" \
-"\x20\x28\x78\x31\x30\x34\x38\x35\x37\x36\x29\x2c\x20\x47\x44\x20" \
-"\x28\x78\x31\x30\x30\x30\x30\x30\x30\x30\x30\x30\x29\x20\x6f\x72" \
-"\x20\x47\x20\x28\x78\x31\x30\x37\x33\x37\x34\x31\x38\x32\x34\x29" \
-"\x00\x5b\x2d\x6e\x5d\x20\x5b\x4d\x4f\x44\x46\x49\x4c\x45\x53\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x47\x65\x6e\x65\x72\x61\x74\x65\x20\x6d\x6f" \
-"\x64\x75\x6c\x65\x73\x2e\x64\x65\x70\x2c\x20\x61\x6c\x69\x61\x73" \
-"\x2c\x20\x61\x6e\x64\x20\x73\x79\x6d\x62\x6f\x6c\x73\x20\x66\x69" \
-"\x6c\x65\x73\x0a\x0a\x09\x2d\x6e\x09\x44\x72\x79\x20\x72\x75\x6e" \
-"\x3a\x20\x70\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x73\x20\x74\x6f" \
-"\x20\x73\x74\x64\x6f\x75\x74\x00\x41\x44\x44\x52\x45\x53\x53\x20" \
-"\x5b\x57\x49\x44\x54\x48\x20\x5b\x56\x41\x4c\x55\x45\x5d\x5d\x0a" \
-"\x0a\x52\x65\x61\x64\x2f\x77\x72\x69\x74\x65\x20\x66\x72\x6f\x6d" \
-"\x20\x70\x68\x79\x73\x69\x63\x61\x6c\x20\x61\x64\x64\x72\x65\x73" \
-"\x73\x0a\x0a\x09\x41\x44\x44\x52\x45\x53\x53\x09\x41\x64\x64\x72" \
-"\x65\x73\x73\x20\x74\x6f\x20\x61\x63\x74\x20\x75\x70\x6f\x6e\x0a" \
-"\x09\x57\x49\x44\x54\x48\x09\x57\x69\x64\x74\x68\x20\x28\x38\x2f" \
-"\x31\x36\x2f\x2e\x2e\x2e\x29\x0a\x09\x56\x41\x4c\x55\x45\x09\x44" \
-"\x61\x74\x61\x20\x74\x6f\x20\x62\x65\x20\x77\x72\x69\x74\x74\x65" \
-"\x6e\x00\x5b\x2d\x50\x6b\x6d\x68\x61\x69\x5d\x20\x5b\x2d\x42\x20" \
-"\x53\x49\x5a\x45\x5d\x20\x5b\x46\x49\x4c\x45\x53\x59\x53\x54\x45" \
-"\x4d\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x6c" \
-"\x65\x73\x79\x73\x74\x65\x6d\x20\x75\x73\x61\x67\x65\x20\x73\x74" \
-"\x61\x74\x69\x73\x74\x69\x63\x73\x0a\x0a\x09\x2d\x50\x09\x50\x4f" \
-"\x53\x49\x58\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x6f\x72\x6d\x61" \
-"\x74\x0a\x09\x2d\x6b\x09\x31\x30\x32\x34\x2d\x62\x79\x74\x65\x20" \
-"\x62\x6c\x6f\x63\x6b\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29" \
-"\x0a\x09\x2d\x6d\x09\x31\x4d\x2d\x62\x79\x74\x65\x20\x62\x6c\x6f" \
-"\x63\x6b\x73\x0a\x09\x2d\x68\x09\x48\x75\x6d\x61\x6e\x20\x72\x65" \
-"\x61\x64\x61\x62\x6c\x65\x20\x28\x65\x2e\x67\x2e\x20\x31\x4b\x20" \
-"\x32\x34\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x61\x09\x53\x68\x6f" \
-"\x77\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x73\x0a\x09\x2d\x69\x09\x49\x6e\x6f\x64\x65\x73\x0a\x09\x2d\x42" \
-"\x20\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x73\x69\x7a\x65\x00" \
-"\x5b\x2d\x61\x62\x42\x64\x69\x4e\x71\x72\x54\x73\x74\x77\x5d\x20" \
-"\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x5b\x2d\x53\x20\x46" \
-"\x49\x4c\x45\x5d\x20\x5b\x2d\x55\x20\x4c\x49\x4e\x45\x53\x5d\x20" \
-"\x46\x49\x4c\x45\x31\x20\x46\x49\x4c\x45\x32\x0a\x0a\x43\x6f\x6d" \
-"\x70\x61\x72\x65\x20\x66\x69\x6c\x65\x73\x20\x6c\x69\x6e\x65\x20" \
-"\x62\x79\x20\x6c\x69\x6e\x65\x20\x61\x6e\x64\x20\x6f\x75\x74\x70" \
-"\x75\x74\x20\x74\x68\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63" \
-"\x65\x73\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x74\x68\x65\x6d\x2e" \
-"\x0a\x54\x68\x69\x73\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x61" \
-"\x74\x69\x6f\x6e\x20\x73\x75\x70\x70\x6f\x72\x74\x73\x20\x75\x6e" \
-"\x69\x66\x69\x65\x64\x20\x64\x69\x66\x66\x73\x20\x6f\x6e\x6c\x79" \
-"\x2e\x0a\x0a\x09\x2d\x61\x09\x54\x72\x65\x61\x74\x20\x61\x6c\x6c" \
-"\x20\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x74\x65\x78\x74\x0a\x09" \
-"\x2d\x62\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65" \
-"\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x61\x6d\x6f\x75\x6e\x74\x20" \
-"\x6f\x66\x20\x77\x68\x69\x74\x65\x73\x70\x61\x63\x65\x0a\x09\x2d" \
-"\x42\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73" \
-"\x20\x77\x68\x6f\x73\x65\x20\x6c\x69\x6e\x65\x73\x20\x61\x72\x65" \
-"\x20\x61\x6c\x6c\x20\x62\x6c\x61\x6e\x6b\x0a\x09\x2d\x64\x09\x54" \
-"\x72\x79\x20\x68\x61\x72\x64\x20\x74\x6f\x20\x66\x69\x6e\x64\x20" \
-"\x61\x20\x73\x6d\x61\x6c\x6c\x65\x72\x20\x73\x65\x74\x20\x6f\x66" \
-"\x20\x63\x68\x61\x6e\x67\x65\x73\x0a\x09\x2d\x69\x09\x49\x67\x6e" \
-"\x6f\x72\x65\x20\x63\x61\x73\x65\x20\x64\x69\x66\x66\x65\x72\x65" \
-"\x6e\x63\x65\x73\x0a\x09\x2d\x4c\x09\x55\x73\x65\x20\x4c\x41\x42" \
-"\x45\x4c\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x68" \
-"\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x69\x6e\x20\x74\x68" \
-"\x65\x20\x75\x6e\x69\x66\x69\x65\x64\x20\x68\x65\x61\x64\x65\x72" \
-"\x0a\x09\x2d\x4e\x09\x54\x72\x65\x61\x74\x20\x61\x62\x73\x65\x6e" \
-"\x74\x20\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x65\x6d\x70\x74\x79" \
-"\x0a\x09\x2d\x71\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79" \
-"\x20\x77\x68\x65\x74\x68\x65\x72\x20\x66\x69\x6c\x65\x73\x20\x64" \
-"\x69\x66\x66\x65\x72\x0a\x09\x2d\x72\x09\x52\x65\x63\x75\x72\x73" \
-"\x65\x0a\x09\x2d\x53\x09\x53\x74\x61\x72\x74\x20\x77\x69\x74\x68" \
-"\x20\x46\x49\x4c\x45\x20\x77\x68\x65\x6e\x20\x63\x6f\x6d\x70\x61" \
-"\x72\x69\x6e\x67\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73" \
-"\x0a\x09\x2d\x54\x09\x4d\x61\x6b\x65\x20\x74\x61\x62\x73\x20\x6c" \
-"\x69\x6e\x65\x20\x75\x70\x20\x62\x79\x20\x70\x72\x65\x66\x69\x78" \
-"\x69\x6e\x67\x20\x61\x20\x74\x61\x62\x20\x77\x68\x65\x6e\x20\x6e" \
-"\x65\x63\x65\x73\x73\x61\x72\x79\x0a\x09\x2d\x73\x09\x52\x65\x70" \
-"\x6f\x72\x74\x20\x77\x68\x65\x6e\x20\x74\x77\x6f\x20\x66\x69\x6c" \
-"\x65\x73\x20\x61\x72\x65\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x0a" \
-"\x09\x2d\x74\x09\x45\x78\x70\x61\x6e\x64\x20\x74\x61\x62\x73\x20" \
-"\x74\x6f\x20\x73\x70\x61\x63\x65\x73\x20\x69\x6e\x20\x6f\x75\x74" \
-"\x70\x75\x74\x0a\x09\x2d\x55\x09\x4f\x75\x74\x70\x75\x74\x20\x4c" \
-"\x49\x4e\x45\x53\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x63\x6f" \
-"\x6e\x74\x65\x78\x74\x0a\x09\x2d\x77\x09\x49\x67\x6e\x6f\x72\x65" \
-"\x20\x61\x6c\x6c\x20\x77\x68\x69\x74\x65\x73\x70\x61\x63\x65\x00" \
-"\x46\x49\x4c\x45\x4e\x41\x4d\x45\x0a\x0a\x53\x74\x72\x69\x70\x20" \
-"\x6e\x6f\x6e\x2d\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x73\x75" \
-"\x66\x66\x69\x78\x20\x66\x72\x6f\x6d\x20\x46\x49\x4c\x45\x4e\x41" \
-"\x4d\x45\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x6e\x20\x4c\x45\x56\x45" \
-"\x4c\x5d\x20\x5b\x2d\x72\x5d\x20\x5b\x2d\x73\x20\x53\x49\x5a\x45" \
-"\x5d\x20\x5b\x2d\x43\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72" \
-"\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x20\x74\x68\x65\x20\x6b\x65\x72" \
-"\x6e\x65\x6c\x20\x72\x69\x6e\x67\x20\x62\x75\x66\x66\x65\x72\x0a" \
-"\x0a\x09\x2d\x63\x09\x09\x43\x6c\x65\x61\x72\x20\x72\x69\x6e\x67" \
-"\x20\x62\x75\x66\x66\x65\x72\x20\x61\x66\x74\x65\x72\x20\x70\x72" \
-"\x69\x6e\x74\x69\x6e\x67\x0a\x09\x2d\x6e\x20\x4c\x45\x56\x45\x4c" \
-"\x09\x53\x65\x74\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x20\x6c\x6f\x67" \
-"\x67\x69\x6e\x67\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d\x72\x09\x09" \
-"\x53\x68\x6f\x77\x20\x6c\x65\x76\x65\x6c\x20\x70\x72\x65\x66\x69" \
-"\x78\x0a\x09\x2d\x73\x20\x53\x49\x5a\x45\x09\x09\x42\x75\x66\x66" \
-"\x65\x72\x20\x73\x69\x7a\x65\x0a\x09\x2d\x43\x09\x09\x43\x6f\x6c" \
-"\x6f\x72\x65\x64\x20\x6f\x75\x74\x70\x75\x74\x00\x5b\x2d\x64\x76" \
-"\x73\x5d\x20\x5b\x2d\x63\x20\x43\x4f\x4e\x46\x46\x49\x4c\x45\x5d" \
-"\x20\x5b\x2d\x74\x20\x54\x54\x4c\x5f\x53\x45\x43\x5d\x20\x5b\x2d" \
-"\x70\x20\x50\x4f\x52\x54\x5d\x20\x5b\x2d\x69\x20\x41\x44\x44\x52" \
-"\x5d\x0a\x0a\x53\x6d\x61\x6c\x6c\x20\x73\x74\x61\x74\x69\x63\x20" \
-"\x44\x4e\x53\x20\x73\x65\x72\x76\x65\x72\x20\x64\x61\x65\x6d\x6f" \
-"\x6e\x0a\x0a\x09\x2d\x63\x20\x46\x49\x4c\x45\x09\x43\x6f\x6e\x66" \
-"\x69\x67\x20\x66\x69\x6c\x65\x0a\x09\x2d\x74\x20\x53\x45\x43\x09" \
-"\x54\x54\x4c\x0a\x09\x2d\x70\x20\x50\x4f\x52\x54\x09\x4c\x69\x73" \
-"\x74\x65\x6e\x20\x6f\x6e\x20\x50\x4f\x52\x54\x0a\x09\x2d\x69\x20" \
-"\x41\x44\x44\x52\x09\x4c\x69\x73\x74\x65\x6e\x20\x6f\x6e\x20\x41" \
-"\x44\x44\x52\x0a\x09\x2d\x64\x09\x44\x61\x65\x6d\x6f\x6e\x69\x7a" \
-"\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d" \
-"\x73\x09\x53\x65\x6e\x64\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75" \
-"\x6c\x20\x72\x65\x70\x6c\x69\x65\x73\x20\x6f\x6e\x6c\x79\x2e\x20" \
-"\x55\x73\x65\x20\x74\x68\x69\x73\x20\x69\x66\x20\x79\x6f\x75\x20" \
-"\x77\x61\x6e\x74\x0a\x09\x09\x74\x6f\x20\x75\x73\x65\x20\x2f\x65" \
-"\x74\x63\x2f\x72\x65\x73\x6f\x6c\x76\x2e\x63\x6f\x6e\x66\x20\x77" \
-"\x69\x74\x68\x20\x74\x77\x6f\x20\x6e\x61\x6d\x65\x73\x65\x72\x76" \
-"\x65\x72\x20\x6c\x69\x6e\x65\x73\x3a\x0a\x09\x09\x09\x6e\x61\x6d" \
-"\x65\x73\x65\x72\x76\x65\x72\x20\x44\x4e\x53\x44\x5f\x53\x45\x52" \
-"\x56\x45\x52\x0a\x09\x09\x09\x6e\x61\x6d\x65\x73\x65\x72\x76\x65" \
-"\x72\x20\x4e\x4f\x52\x4d\x41\x4c\x5f\x44\x4e\x53\x5f\x53\x45\x52" \
-"\x56\x45\x52\x00\x5b\x2d\x75\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20\x46\x49\x4c\x45\x20\x69" \
-"\x6e\x2d\x70\x6c\x61\x63\x65\x20\x66\x72\x6f\x6d\x20\x44\x4f\x53" \
-"\x20\x74\x6f\x20\x55\x6e\x69\x78\x20\x66\x6f\x72\x6d\x61\x74\x2e" \
-"\x0a\x57\x68\x65\x6e\x20\x6e\x6f\x20\x66\x69\x6c\x65\x20\x69\x73" \
-"\x20\x67\x69\x76\x65\x6e\x2c\x20\x75\x73\x65\x20\x73\x74\x64\x69" \
-"\x6e\x2f\x73\x74\x64\x6f\x75\x74\x2e\x0a\x0a\x09\x2d\x75\x09\x64" \
-"\x6f\x73\x32\x75\x6e\x69\x78\x0a\x09\x2d\x64\x09\x75\x6e\x69\x78" \
-"\x32\x64\x6f\x73\x00\x5b\x2d\x61\x48\x4c\x64\x63\x6c\x73\x78\x68" \
-"\x6d\x6b\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53" \
-"\x75\x6d\x6d\x61\x72\x69\x7a\x65\x20\x64\x69\x73\x6b\x20\x73\x70" \
-"\x61\x63\x65\x20\x75\x73\x65\x64\x20\x66\x6f\x72\x20\x65\x61\x63" \
-"\x68\x20\x46\x49\x4c\x45\x20\x61\x6e\x64\x2f\x6f\x72\x20\x64\x69" \
-"\x72\x65\x63\x74\x6f\x72\x79\x2e\x0a\x44\x69\x73\x6b\x20\x73\x70" \
-"\x61\x63\x65\x20\x69\x73\x20\x70\x72\x69\x6e\x74\x65\x64\x20\x69" \
-"\x6e\x20\x75\x6e\x69\x74\x73\x20\x6f\x66\x20\x31\x30\x32\x34\x20" \
-"\x62\x79\x74\x65\x73\x2e\x0a\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77" \
-"\x20\x66\x69\x6c\x65\x20\x73\x69\x7a\x65\x73\x20\x74\x6f\x6f\x0a" \
-"\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73" \
-"\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c" \
-"\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63" \
-"\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64\x20" \
-"\x4e\x09\x4c\x69\x6d\x69\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x74" \
-"\x6f\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x28\x61" \
-"\x6e\x64\x20\x66\x69\x6c\x65\x73\x20\x77\x69\x74\x68\x20\x2d\x61" \
-"\x29\x20\x6f\x66\x20\x64\x65\x70\x74\x68\x20\x3c\x20\x4e\x0a\x09" \
-"\x2d\x63\x09\x53\x68\x6f\x77\x20\x67\x72\x61\x6e\x64\x20\x74\x6f" \
-"\x74\x61\x6c\x0a\x09\x2d\x6c\x09\x43\x6f\x75\x6e\x74\x20\x73\x69" \
-"\x7a\x65\x73\x20\x6d\x61\x6e\x79\x20\x74\x69\x6d\x65\x73\x20\x69" \
-"\x66\x20\x68\x61\x72\x64\x20\x6c\x69\x6e\x6b\x65\x64\x0a\x09\x2d" \
-"\x73\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x6f\x6e\x6c\x79\x20\x61" \
-"\x20\x74\x6f\x74\x61\x6c\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20" \
-"\x61\x72\x67\x75\x6d\x65\x6e\x74\x0a\x09\x2d\x78\x09\x53\x6b\x69" \
-"\x70\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x6f\x6e" \
-"\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x73" \
-"\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x68\x09\x53\x69\x7a\x65\x73" \
-"\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62" \
-"\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x28\x65\x2e\x67\x2e\x2c" \
-"\x20\x31\x4b\x20\x32\x34\x33\x4d\x20\x32\x47\x20\x29\x0a\x09\x2d" \
-"\x6d\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x6d\x65\x67\x61\x62" \
-"\x79\x74\x65\x73\x0a\x09\x2d\x6b\x09\x53\x69\x7a\x65\x73\x20\x69" \
-"\x6e\x20\x6b\x69\x6c\x6f\x62\x79\x74\x65\x73\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x29\x00\x5b\x2d\x6e\x65\x45\x5d\x20\x5b\x41\x52" \
-"\x47\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65" \
-"\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x41\x52\x47\x73\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x6e\x09\x53" \
-"\x75\x70\x70\x72\x65\x73\x73\x20\x74\x72\x61\x69\x6c\x69\x6e\x67" \
-"\x20\x6e\x65\x77\x6c\x69\x6e\x65\x0a\x09\x2d\x65\x09\x49\x6e\x74" \
-"\x65\x72\x70\x72\x65\x74\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68" \
-"\x20\x65\x73\x63\x61\x70\x65\x73\x20\x28\x69\x2e\x65\x2e\x2c\x20" \
-"\x5c\x74\x3d\x74\x61\x62\x29\x0a\x09\x2d\x45\x09\x44\x6f\x6e\x27" \
-"\x74\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x62\x61\x63\x6b" \
-"\x73\x6c\x61\x73\x68\x20\x65\x73\x63\x61\x70\x65\x73\x20\x28\x64" \
-"\x65\x66\x61\x75\x6c\x74\x29\x00\x00\x08\x00\x5b\x2d\x69\x75\x5d" \
-"\x20\x5b\x2d\x5d\x20\x5b\x6e\x61\x6d\x65\x3d\x76\x61\x6c\x75\x65" \
-"\x5d\x2e\x2e\x2e\x20\x5b\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x5d" \
-"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x63\x75\x72\x72" \
-"\x65\x6e\x74\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20" \
-"\x6f\x72\x20\x72\x75\x6e\x20\x50\x52\x4f\x47\x20\x61\x66\x74\x65" \
-"\x72\x20\x73\x65\x74\x74\x69\x6e\x67\x20\x75\x70\x0a\x74\x68\x65" \
-"\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x65\x6e\x76\x69\x72" \
-"\x6f\x6e\x6d\x65\x6e\x74\x0a\x0a\x09\x2d\x2c\x20\x2d\x69\x09\x53" \
-"\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x61\x6e\x20\x65\x6d\x70" \
-"\x74\x79\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x0a\x09" \
-"\x2d\x75\x09\x52\x65\x6d\x6f\x76\x65\x20\x76\x61\x72\x69\x61\x62" \
-"\x6c\x65\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x65\x6e\x76\x69" \
-"\x72\x6f\x6e\x6d\x65\x6e\x74\x00\x5b\x2d\x69\x5d\x20\x5b\x2d\x74" \
-"\x20\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43" \
-"\x6f\x6e\x76\x65\x72\x74\x20\x74\x61\x62\x73\x20\x74\x6f\x20\x73" \
-"\x70\x61\x63\x65\x73\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74" \
-"\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x69\x2c\x2d\x2d" \
-"\x69\x6e\x69\x74\x69\x61\x6c\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f" \
-"\x6e\x76\x65\x72\x74\x20\x74\x61\x62\x73\x20\x61\x66\x74\x65\x72" \
-"\x20\x6e\x6f\x6e\x20\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x74\x2c" \
-"\x2d\x2d\x74\x61\x62\x73\x3d\x4e\x09\x54\x61\x62\x73\x74\x6f\x70" \
-"\x73\x20\x65\x76\x65\x72\x79\x20\x4e\x20\x63\x68\x61\x72\x73\x00" \
-"\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x0a\x0a\x50\x72\x69\x6e" \
-"\x74\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45" \
-"\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x0a\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20" \
-"\x6d\x61\x79\x20\x62\x65\x3a\x0a\x09\x41\x52\x47\x31\x20\x7c\x20" \
-"\x41\x52\x47\x32\x09\x41\x52\x47\x31\x20\x69\x66\x20\x69\x74\x20" \
-"\x69\x73\x20\x6e\x65\x69\x74\x68\x65\x72\x20\x6e\x75\x6c\x6c\x20" \
-"\x6e\x6f\x72\x20\x30\x2c\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65" \
-"\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x26\x20\x41\x52" \
-"\x47\x32\x09\x41\x52\x47\x31\x20\x69\x66\x20\x6e\x65\x69\x74\x68" \
-"\x65\x72\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x69\x73\x20\x6e" \
-"\x75\x6c\x6c\x20\x6f\x72\x20\x30\x2c\x20\x6f\x74\x68\x65\x72\x77" \
-"\x69\x73\x65\x20\x30\x0a\x09\x41\x52\x47\x31\x20\x3c\x20\x41\x52" \
-"\x47\x32\x09\x31\x20\x69\x66\x20\x41\x52\x47\x31\x20\x69\x73\x20" \
-"\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x41\x52\x47\x32\x2c\x20" \
-"\x65\x6c\x73\x65\x20\x30\x2e\x20\x53\x69\x6d\x69\x6c\x61\x72\x6c" \
-"\x79\x3a\x0a\x09\x41\x52\x47\x31\x20\x3c\x3d\x20\x41\x52\x47\x32" \
-"\x0a\x09\x41\x52\x47\x31\x20\x3d\x20\x41\x52\x47\x32\x0a\x09\x41" \
-"\x52\x47\x31\x20\x21\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47" \
-"\x31\x20\x3e\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20" \
-"\x3e\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2b\x20\x41" \
-"\x52\x47\x32\x09\x53\x75\x6d\x20\x6f\x66\x20\x41\x52\x47\x31\x20" \
-"\x61\x6e\x64\x20\x41\x52\x47\x32\x2e\x20\x53\x69\x6d\x69\x6c\x61" \
-"\x72\x6c\x79\x3a\x0a\x09\x41\x52\x47\x31\x20\x2d\x20\x41\x52\x47" \
-"\x32\x0a\x09\x41\x52\x47\x31\x20\x2a\x20\x41\x52\x47\x32\x0a\x09" \
-"\x41\x52\x47\x31\x20\x2f\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47" \
-"\x31\x20\x25\x20\x41\x52\x47\x32\x0a\x09\x53\x54\x52\x49\x4e\x47" \
-"\x20\x3a\x20\x52\x45\x47\x45\x58\x50\x09\x09\x41\x6e\x63\x68\x6f" \
-"\x72\x65\x64\x20\x70\x61\x74\x74\x65\x72\x6e\x20\x6d\x61\x74\x63" \
-"\x68\x20\x6f\x66\x20\x52\x45\x47\x45\x58\x50\x20\x69\x6e\x20\x53" \
-"\x54\x52\x49\x4e\x47\x0a\x09\x6d\x61\x74\x63\x68\x20\x53\x54\x52" \
-"\x49\x4e\x47\x20\x52\x45\x47\x45\x58\x50\x09\x53\x61\x6d\x65\x20" \
-"\x61\x73\x20\x53\x54\x52\x49\x4e\x47\x20\x3a\x20\x52\x45\x47\x45" \
-"\x58\x50\x0a\x09\x73\x75\x62\x73\x74\x72\x20\x53\x54\x52\x49\x4e" \
-"\x47\x20\x50\x4f\x53\x20\x4c\x45\x4e\x47\x54\x48\x20\x53\x75\x62" \
-"\x73\x74\x72\x69\x6e\x67\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47" \
-"\x2c\x20\x50\x4f\x53\x20\x63\x6f\x75\x6e\x74\x65\x64\x20\x66\x72" \
-"\x6f\x6d\x20\x31\x0a\x09\x69\x6e\x64\x65\x78\x20\x53\x54\x52\x49" \
-"\x4e\x47\x20\x43\x48\x41\x52\x53\x09\x49\x6e\x64\x65\x78\x20\x69" \
-"\x6e\x20\x53\x54\x52\x49\x4e\x47\x20\x77\x68\x65\x72\x65\x20\x61" \
-"\x6e\x79\x20\x43\x48\x41\x52\x53\x20\x69\x73\x20\x66\x6f\x75\x6e" \
-"\x64\x2c\x20\x6f\x72\x20\x30\x0a\x09\x6c\x65\x6e\x67\x74\x68\x20" \
-"\x53\x54\x52\x49\x4e\x47\x09\x09\x4c\x65\x6e\x67\x74\x68\x20\x6f" \
-"\x66\x20\x53\x54\x52\x49\x4e\x47\x0a\x09\x71\x75\x6f\x74\x65\x20" \
-"\x54\x4f\x4b\x45\x4e\x09\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74" \
-"\x20\x54\x4f\x4b\x45\x4e\x20\x61\x73\x20\x61\x20\x73\x74\x72\x69" \
-"\x6e\x67\x2c\x20\x65\x76\x65\x6e\x20\x69\x66\x0a\x09\x09\x09\x09" \
-"\x69\x74\x20\x69\x73\x20\x61\x20\x6b\x65\x79\x77\x6f\x72\x64\x20" \
-"\x6c\x69\x6b\x65\x20\x27\x6d\x61\x74\x63\x68\x27\x20\x6f\x72\x20" \
-"\x61\x6e\x0a\x09\x09\x09\x09\x6f\x70\x65\x72\x61\x74\x6f\x72\x20" \
-"\x6c\x69\x6b\x65\x20\x27\x2f\x27\x0a\x09\x28\x45\x58\x50\x52\x45" \
-"\x53\x53\x49\x4f\x4e\x29\x09\x09\x56\x61\x6c\x75\x65\x20\x6f\x66" \
-"\x20\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x0a\x0a\x42\x65\x77" \
-"\x61\x72\x65\x20\x74\x68\x61\x74\x20\x6d\x61\x6e\x79\x20\x6f\x70" \
-"\x65\x72\x61\x74\x6f\x72\x73\x20\x6e\x65\x65\x64\x20\x74\x6f\x20" \
-"\x62\x65\x20\x65\x73\x63\x61\x70\x65\x64\x20\x6f\x72\x20\x71\x75" \
-"\x6f\x74\x65\x64\x20\x66\x6f\x72\x20\x73\x68\x65\x6c\x6c\x73\x2e" \
-"\x0a\x43\x6f\x6d\x70\x61\x72\x69\x73\x6f\x6e\x73\x20\x61\x72\x65" \
-"\x20\x61\x72\x69\x74\x68\x6d\x65\x74\x69\x63\x20\x69\x66\x20\x62" \
-"\x6f\x74\x68\x20\x41\x52\x47\x73\x20\x61\x72\x65\x20\x6e\x75\x6d" \
-"\x62\x65\x72\x73\x2c\x20\x65\x6c\x73\x65\x0a\x6c\x65\x78\x69\x63" \
-"\x6f\x67\x72\x61\x70\x68\x69\x63\x61\x6c\x2e\x20\x50\x61\x74\x74" \
-"\x65\x72\x6e\x20\x6d\x61\x74\x63\x68\x65\x73\x20\x72\x65\x74\x75" \
-"\x72\x6e\x20\x74\x68\x65\x20\x73\x74\x72\x69\x6e\x67\x20\x6d\x61" \
-"\x74\x63\x68\x65\x64\x20\x62\x65\x74\x77\x65\x65\x6e\x0a\x5c\x28" \
-"\x20\x61\x6e\x64\x20\x5c\x29\x20\x6f\x72\x20\x6e\x75\x6c\x6c\x3b" \
-"\x20\x69\x66\x20\x5c\x28\x20\x61\x6e\x64\x20\x5c\x29\x20\x61\x72" \
-"\x65\x20\x6e\x6f\x74\x20\x75\x73\x65\x64\x2c\x20\x74\x68\x65\x79" \
-"\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x0a\x6f\x66\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73" \
-"\x20\x6d\x61\x74\x63\x68\x65\x64\x20\x6f\x72\x20\x30\x2e\x00\x0a" \
-"\x0a\x52\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x65\x78\x69\x74\x20" \
-"\x63\x6f\x64\x65\x20\x6f\x66\x20\x46\x41\x4c\x53\x45\x20\x28\x31" \
-"\x29\x00\x5b\x2d\x75\x6c\x5d\x20\x5b\x2d\x43\x20\x43\x59\x4c\x49" \
-"\x4e\x44\x45\x52\x53\x5d\x20\x5b\x2d\x48\x20\x48\x45\x41\x44\x53" \
-"\x5d\x20\x5b\x2d\x53\x20\x53\x45\x43\x54\x4f\x52\x53\x5d\x20\x5b" \
-"\x2d\x62\x20\x53\x53\x5a\x5d\x20\x44\x49\x53\x4b\x0a\x0a\x43\x68" \
-"\x61\x6e\x67\x65\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74" \
-"\x61\x62\x6c\x65\x0a\x0a\x09\x2d\x75\x09\x09\x53\x74\x61\x72\x74" \
-"\x20\x61\x6e\x64\x20\x45\x6e\x64\x20\x61\x72\x65\x20\x69\x6e\x20" \
-"\x73\x65\x63\x74\x6f\x72\x73\x20\x28\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x63\x79\x6c\x69\x6e\x64\x65\x72\x73\x29\x0a\x09" \
-"\x2d\x6c\x09\x09\x53\x68\x6f\x77\x20\x70\x61\x72\x74\x69\x74\x69" \
-"\x6f\x6e\x20\x74\x61\x62\x6c\x65\x20\x66\x6f\x72\x20\x65\x61\x63" \
-"\x68\x20\x44\x49\x53\x4b\x2c\x20\x74\x68\x65\x6e\x20\x65\x78\x69" \
-"\x74\x0a\x09\x2d\x62\x20\x32\x30\x34\x38\x09\x09\x28\x66\x6f\x72" \
-"\x20\x63\x65\x72\x74\x61\x69\x6e\x20\x4d\x4f\x20\x64\x69\x73\x6b" \
-"\x73\x29\x20\x75\x73\x65\x20\x32\x30\x34\x38\x2d\x62\x79\x74\x65" \
-"\x20\x73\x65\x63\x74\x6f\x72\x73\x0a\x09\x2d\x43\x20\x43\x59\x4c" \
-"\x49\x4e\x44\x45\x52\x53\x09\x53\x65\x74\x20\x6e\x75\x6d\x62\x65" \
-"\x72\x20\x6f\x66\x20\x63\x79\x6c\x69\x6e\x64\x65\x72\x73\x2f\x68" \
-"\x65\x61\x64\x73\x2f\x73\x65\x63\x74\x6f\x72\x73\x0a\x09\x2d\x48" \
-"\x20\x48\x45\x41\x44\x53\x0a\x09\x2d\x53\x20\x53\x45\x43\x54\x4f" \
-"\x52\x53\x00\x08\x00\x5b\x50\x41\x54\x48\x5d\x2e\x2e\x2e\x20\x5b" \
-"\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x41\x43\x54\x49\x4f\x4e" \
-"\x53\x5d\x0a\x0a\x53\x65\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x66" \
-"\x69\x6c\x65\x73\x20\x61\x6e\x64\x20\x70\x65\x72\x66\x6f\x72\x6d" \
-"\x20\x61\x63\x74\x69\x6f\x6e\x73\x20\x6f\x6e\x20\x74\x68\x65\x6d" \
-"\x2e\x0a\x46\x69\x72\x73\x74\x20\x66\x61\x69\x6c\x65\x64\x20\x61" \
-"\x63\x74\x69\x6f\x6e\x20\x73\x74\x6f\x70\x73\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x69\x6e\x67\x20\x6f\x66\x20\x63\x75\x72\x72\x65\x6e" \
-"\x74\x20\x66\x69\x6c\x65\x2e\x0a\x44\x65\x66\x61\x75\x6c\x74\x73" \
-"\x3a\x20\x50\x41\x54\x48\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6e" \
-"\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x61\x63\x74" \
-"\x69\x6f\x6e\x20\x69\x73\x20\x27\x2d\x70\x72\x69\x6e\x74\x27\x0a" \
-"\x0a\x09\x2d\x66\x6f\x6c\x6c\x6f\x77\x09\x09\x46\x6f\x6c\x6c\x6f" \
-"\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x78\x64\x65" \
-"\x76\x09\x09\x44\x6f\x6e\x27\x74\x20\x64\x65\x73\x63\x65\x6e\x64" \
-"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x6f\x6e\x20" \
-"\x6f\x74\x68\x65\x72\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x73\x0a\x09\x2d\x6d\x61\x78\x64\x65\x70\x74\x68\x20\x4e\x09\x44" \
-"\x65\x73\x63\x65\x6e\x64\x20\x61\x74\x20\x6d\x6f\x73\x74\x20\x4e" \
-"\x20\x6c\x65\x76\x65\x6c\x73\x2e\x20\x2d\x6d\x61\x78\x64\x65\x70" \
-"\x74\x68\x20\x30\x20\x61\x70\x70\x6c\x69\x65\x73\x0a\x09\x09\x09" \
-"\x61\x63\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x63\x6f\x6d\x6d\x61" \
-"\x6e\x64\x20\x6c\x69\x6e\x65\x20\x61\x72\x67\x75\x6d\x65\x6e\x74" \
-"\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6d\x69\x6e\x64\x65\x70\x74" \
-"\x68\x20\x4e\x09\x44\x6f\x6e\x27\x74\x20\x61\x63\x74\x20\x6f\x6e" \
-"\x20\x66\x69\x72\x73\x74\x20\x4e\x20\x6c\x65\x76\x65\x6c\x73\x0a" \
-"\x09\x2d\x64\x65\x70\x74\x68\x09\x09\x41\x63\x74\x20\x6f\x6e\x20" \
-"\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x2a\x61\x66\x74\x65\x72" \
-"\x2a\x20\x74\x72\x61\x76\x65\x72\x73\x69\x6e\x67\x20\x69\x74\x0a" \
-"\x0a\x41\x63\x74\x69\x6f\x6e\x73\x3a\x0a\x09\x28\x20\x41\x43\x54" \
-"\x49\x4f\x4e\x53\x20\x29\x09\x47\x72\x6f\x75\x70\x20\x61\x63\x74" \
-"\x69\x6f\x6e\x73\x20\x66\x6f\x72\x20\x2d\x6f\x20\x2f\x20\x2d\x61" \
-"\x0a\x09\x21\x20\x41\x43\x54\x09\x09\x49\x6e\x76\x65\x72\x74\x20" \
-"\x41\x43\x54\x27\x73\x20\x73\x75\x63\x63\x65\x73\x73\x2f\x66\x61" \
-"\x69\x6c\x75\x72\x65\x0a\x09\x41\x43\x54\x31\x20\x5b\x2d\x61\x5d" \
-"\x20\x41\x43\x54\x32\x09\x49\x66\x20\x41\x43\x54\x31\x20\x66\x61" \
-"\x69\x6c\x73\x2c\x20\x73\x74\x6f\x70\x2c\x20\x65\x6c\x73\x65\x20" \
-"\x64\x6f\x20\x41\x43\x54\x32\x0a\x09\x41\x43\x54\x31\x20\x2d\x6f" \
-"\x20\x41\x43\x54\x32\x09\x49\x66\x20\x41\x43\x54\x31\x20\x73\x75" \
-"\x63\x63\x65\x65\x64\x73\x2c\x20\x73\x74\x6f\x70\x2c\x20\x65\x6c" \
-"\x73\x65\x20\x64\x6f\x20\x41\x43\x54\x32\x0a\x09\x09\x09\x4e\x6f" \
-"\x74\x65\x3a\x20\x2d\x61\x20\x68\x61\x73\x20\x68\x69\x67\x68\x65" \
-"\x72\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x20\x74\x68\x61\x6e\x20" \
-"\x2d\x6f\x0a\x09\x2d\x6e\x61\x6d\x65\x20\x50\x41\x54\x54\x45\x52" \
-"\x4e\x09\x4d\x61\x74\x63\x68\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d" \
-"\x65\x20\x28\x77\x2f\x6f\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79" \
-"\x20\x6e\x61\x6d\x65\x29\x20\x74\x6f\x20\x50\x41\x54\x54\x45\x52" \
-"\x4e\x0a\x09\x2d\x69\x6e\x61\x6d\x65\x20\x50\x41\x54\x54\x45\x52" \
-"\x4e\x09\x43\x61\x73\x65\x20\x69\x6e\x73\x65\x6e\x73\x69\x74\x69" \
-"\x76\x65\x20\x2d\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x61\x74\x68\x20" \
-"\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20\x70\x61" \
-"\x74\x68\x20\x74\x6f\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d" \
-"\x69\x70\x61\x74\x68\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x43\x61" \
-"\x73\x65\x20\x69\x6e\x73\x65\x6e\x73\x69\x74\x69\x76\x65\x20\x2d" \
-"\x70\x61\x74\x68\x0a\x09\x2d\x72\x65\x67\x65\x78\x20\x50\x41\x54" \
-"\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x74\x68\x20" \
-"\x74\x6f\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e" \
-"\x0a\x09\x2d\x74\x79\x70\x65\x20\x58\x09\x09\x46\x69\x6c\x65\x20" \
-"\x74\x79\x70\x65\x20\x69\x73\x20\x58\x20\x28\x6f\x6e\x65\x20\x6f" \
-"\x66\x3a\x20\x66\x2c\x64\x2c\x6c\x2c\x62\x2c\x63\x2c\x2e\x2e\x2e" \
-"\x29\x0a\x09\x2d\x70\x65\x72\x6d\x20\x4d\x41\x53\x4b\x09\x41\x74" \
-"\x20\x6c\x65\x61\x73\x74\x20\x6f\x6e\x65\x20\x6d\x61\x73\x6b\x20" \
-"\x62\x69\x74\x20\x28\x2b\x4d\x41\x53\x4b\x29\x2c\x20\x61\x6c\x6c" \
-"\x20\x62\x69\x74\x73\x20\x28\x2d\x4d\x41\x53\x4b\x29\x2c\x0a\x09" \
-"\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x4d\x41\x53" \
-"\x4b\x20\x62\x69\x74\x73\x20\x61\x72\x65\x20\x73\x65\x74\x20\x69" \
-"\x6e\x20\x66\x69\x6c\x65\x27\x73\x20\x6d\x6f\x64\x65\x0a\x09\x2d" \
-"\x6d\x74\x69\x6d\x65\x20\x44\x41\x59\x53\x09\x6d\x74\x69\x6d\x65" \
-"\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6e" \
-"\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e" \
-"\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61" \
-"\x63\x74\x6c\x79\x20\x4e\x20\x64\x61\x79\x73\x20\x69\x6e\x20\x74" \
-"\x68\x65\x20\x70\x61\x73\x74\x0a\x09\x2d\x6d\x6d\x69\x6e\x20\x4d" \
-"\x49\x4e\x53\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x67\x72\x65" \
-"\x61\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x28\x2b\x4e\x29\x2c\x20" \
-"\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x28\x2d\x4e\x29\x2c\x0a" \
-"\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x4e\x20" \
-"\x6d\x69\x6e\x75\x74\x65\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x70" \
-"\x61\x73\x74\x0a\x09\x2d\x6e\x65\x77\x65\x72\x20\x46\x49\x4c\x45" \
-"\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x6d\x6f\x72\x65\x20\x72" \
-"\x65\x63\x65\x6e\x74\x20\x74\x68\x61\x6e\x20\x46\x49\x4c\x45\x27" \
-"\x73\x0a\x09\x2d\x75\x73\x65\x72\x20\x4e\x41\x4d\x45\x2f\x49\x44" \
-"\x09\x46\x69\x6c\x65\x20\x69\x73\x20\x6f\x77\x6e\x65\x64\x20\x62" \
-"\x79\x20\x67\x69\x76\x65\x6e\x20\x75\x73\x65\x72\x0a\x09\x2d\x67" \
-"\x72\x6f\x75\x70\x20\x4e\x41\x4d\x45\x2f\x49\x44\x09\x46\x69\x6c" \
-"\x65\x20\x69\x73\x20\x6f\x77\x6e\x65\x64\x20\x62\x79\x20\x67\x69" \
-"\x76\x65\x6e\x20\x67\x72\x6f\x75\x70\x0a\x09\x2d\x73\x69\x7a\x65" \
-"\x20\x4e\x5b\x62\x63\x6b\x5d\x09\x46\x69\x6c\x65\x20\x73\x69\x7a" \
-"\x65\x20\x69\x73\x20\x4e\x20\x28\x63\x3a\x62\x79\x74\x65\x73\x2c" \
-"\x6b\x3a\x6b\x62\x79\x74\x65\x73\x2c\x62\x3a\x35\x31\x32\x20\x62" \
-"\x79\x74\x65\x73\x28\x64\x65\x66\x2e\x29\x29\x0a\x09\x09\x09\x2b" \
-"\x2f\x2d\x4e\x3a\x20\x66\x69\x6c\x65\x20\x73\x69\x7a\x65\x20\x69" \
-"\x73\x20\x62\x69\x67\x67\x65\x72\x2f\x73\x6d\x61\x6c\x6c\x65\x72" \
-"\x20\x74\x68\x61\x6e\x20\x4e\x0a\x09\x2d\x6c\x69\x6e\x6b\x73\x20" \
-"\x4e\x09\x4e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x6c\x69\x6e\x6b" \
-"\x73\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61" \
-"\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20\x74\x68\x61" \
-"\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78" \
-"\x61\x63\x74\x6c\x79\x20\x4e\x0a\x09\x2d\x70\x72\x75\x6e\x65\x09" \
-"\x09\x49\x66\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x66\x69\x6c\x65" \
-"\x20\x69\x73\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x64" \
-"\x6f\x6e\x27\x74\x20\x64\x65\x73\x63\x65\x6e\x64\x20\x69\x6e\x74" \
-"\x6f\x20\x69\x74\x0a\x49\x66\x20\x6e\x6f\x6e\x65\x20\x6f\x66\x20" \
-"\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x63" \
-"\x74\x69\x6f\x6e\x73\x20\x69\x73\x20\x73\x70\x65\x63\x69\x66\x69" \
-"\x65\x64\x2c\x20\x2d\x70\x72\x69\x6e\x74\x20\x69\x73\x20\x61\x73" \
-"\x73\x75\x6d\x65\x64\x0a\x09\x2d\x70\x72\x69\x6e\x74\x09\x09\x50" \
-"\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x0a\x09" \
-"\x2d\x70\x72\x69\x6e\x74\x30\x09\x09\x50\x72\x69\x6e\x74\x20\x66" \
-"\x69\x6c\x65\x20\x6e\x61\x6d\x65\x2c\x20\x4e\x55\x4c\x20\x74\x65" \
-"\x72\x6d\x69\x6e\x61\x74\x65\x64\x0a\x09\x2d\x65\x78\x65\x63\x20" \
-"\x43\x4d\x44\x20\x41\x52\x47\x20\x3b\x09\x52\x75\x6e\x20\x43\x4d" \
-"\x44\x20\x77\x69\x74\x68\x20\x61\x6c\x6c\x20\x69\x6e\x73\x74\x61" \
-"\x6e\x63\x65\x73\x20\x6f\x66\x20\x7b\x7d\x20\x72\x65\x70\x6c\x61" \
-"\x63\x65\x64\x20\x62\x79\x0a\x09\x09\x09\x66\x69\x6c\x65\x20\x6e" \
-"\x61\x6d\x65\x2e\x20\x46\x61\x69\x6c\x73\x20\x69\x66\x20\x43\x4d" \
-"\x44\x20\x65\x78\x69\x74\x73\x20\x77\x69\x74\x68\x20\x6e\x6f\x6e" \
-"\x7a\x65\x72\x6f\x00\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x20" \
-"\x4f\x46\x46\x53\x45\x54\x20\x53\x45\x43\x54\x4f\x52\x53\x0a\x0a" \
-"\x4c\x6f\x63\x6b\x20\x70\x61\x72\x74\x20\x6f\x72\x20\x61\x6c\x6c" \
-"\x20\x6f\x66\x20\x61\x6e\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63" \
-"\x65\x2e\x20\x49\x66\x20\x53\x45\x43\x54\x4f\x52\x53\x20\x69\x73" \
-"\x20\x2d\x31\x2c\x20\x74\x68\x65\x6e\x20\x61\x6c\x6c\x20\x73\x65" \
-"\x63\x74\x6f\x72\x73\x0a\x77\x69\x6c\x6c\x20\x62\x65\x20\x6c\x6f" \
-"\x63\x6b\x65\x64\x2c\x20\x72\x65\x67\x61\x72\x64\x6c\x65\x73\x73" \
-"\x20\x6f\x66\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x6f\x66" \
-"\x20\x4f\x46\x46\x53\x45\x54\x00\x4d\x54\x44\x5f\x44\x45\x56\x49" \
-"\x43\x45\x0a\x0a\x55\x6e\x6c\x6f\x63\x6b\x20\x61\x6e\x20\x4d\x54" \
-"\x44\x20\x64\x65\x76\x69\x63\x65\x00\x2d\x76\x20\x46\x49\x4c\x45" \
-"\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x0a\x0a\x43\x6f\x70" \
-"\x79\x20\x61\x6e\x20\x69\x6d\x61\x67\x65\x20\x74\x6f\x20\x4d\x54" \
-"\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x76\x09\x56\x65" \
-"\x72\x62\x6f\x73\x65\x00\x5b\x2d\x73\x78\x75\x6e\x5d\x20\x46\x44" \
-"\x7c\x7b\x46\x49\x4c\x45\x20\x5b\x2d\x63\x5d\x20\x50\x52\x4f\x47" \
-"\x20\x41\x52\x47\x53\x7d\x0a\x0a\x5b\x55\x6e\x5d\x6c\x6f\x63\x6b" \
-"\x20\x66\x69\x6c\x65\x20\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72" \
-"\x2c\x20\x6f\x72\x20\x6c\x6f\x63\x6b\x20\x46\x49\x4c\x45\x2c\x20" \
-"\x72\x75\x6e\x20\x50\x52\x4f\x47\x0a\x0a\x09\x2d\x73\x09\x53\x68" \
-"\x61\x72\x65\x64\x20\x6c\x6f\x63\x6b\x0a\x09\x2d\x78\x09\x45\x78" \
-"\x63\x6c\x75\x73\x69\x76\x65\x20\x6c\x6f\x63\x6b\x20\x28\x64\x65" \
-"\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x75\x09\x55\x6e\x6c\x6f\x63" \
-"\x6b\x20\x46\x44\x0a\x09\x2d\x6e\x09\x46\x61\x69\x6c\x20\x72\x61" \
-"\x74\x68\x65\x72\x20\x74\x68\x61\x6e\x20\x77\x61\x69\x74\x00\x5b" \
-"\x2d\x62\x73\x5d\x20\x5b\x2d\x77\x20\x57\x49\x44\x54\x48\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x57\x72\x61\x70\x20" \
-"\x69\x6e\x70\x75\x74\x20\x6c\x69\x6e\x65\x73\x20\x69\x6e\x20\x65" \
-"\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64" \
-"\x69\x6e\x29\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20" \
-"\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62\x09\x43\x6f\x75\x6e" \
-"\x74\x20\x62\x79\x74\x65\x73\x20\x72\x61\x74\x68\x65\x72\x20\x74" \
-"\x68\x61\x6e\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x09\x2d\x73\x09" \
-"\x42\x72\x65\x61\x6b\x20\x61\x74\x20\x73\x70\x61\x63\x65\x73\x0a" \
-"\x09\x2d\x77\x09\x55\x73\x65\x20\x57\x49\x44\x54\x48\x20\x63\x6f" \
-"\x6c\x75\x6d\x6e\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66" \
-"\x20\x38\x30\x00\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68" \
-"\x65\x20\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x66\x20\x66\x72\x65\x65" \
-"\x20\x61\x6e\x64\x20\x75\x73\x65\x64\x20\x73\x79\x73\x74\x65\x6d" \
-"\x20\x6d\x65\x6d\x6f\x72\x79\x00\x44\x45\x56\x49\x43\x45\x0a\x0a" \
-"\x46\x72\x65\x65\x20\x61\x6c\x6c\x20\x6d\x65\x6d\x6f\x72\x79\x20" \
-"\x75\x73\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x73\x70\x65\x63" \
-"\x69\x66\x69\x65\x64\x20\x72\x61\x6d\x64\x69\x73\x6b\x00\x5b\x2d" \
-"\x64\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x57\x72\x69\x74" \
-"\x65\x20\x66\x69\x6c\x65\x73\x27\x20\x62\x75\x66\x66\x65\x72\x65" \
-"\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20\x64\x69\x73\x6b" \
-"\x0a\x0a\x09\x2d\x64\x09\x41\x76\x6f\x69\x64\x20\x73\x79\x6e\x63" \
-"\x69\x6e\x67\x20\x6d\x65\x74\x61\x64\x61\x74\x61\x00\x5b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x48\x4f\x53\x54\x20\x5b\x4c\x4f\x43" \
-"\x41\x4c\x5f\x46\x49\x4c\x45\x5d\x20\x52\x45\x4d\x4f\x54\x45\x5f" \
-"\x46\x49\x4c\x45\x0a\x0a\x52\x65\x74\x72\x69\x65\x76\x65\x20\x61" \
-"\x20\x72\x65\x6d\x6f\x74\x65\x20\x66\x69\x6c\x65\x20\x76\x69\x61" \
-"\x20\x46\x54\x50\x0a\x0a\x09\x2d\x63\x2c\x2d\x2d\x63\x6f\x6e\x74" \
-"\x69\x6e\x75\x65\x09\x43\x6f\x6e\x74\x69\x6e\x75\x65\x20\x70\x72" \
-"\x65\x76\x69\x6f\x75\x73\x20\x74\x72\x61\x6e\x73\x66\x65\x72\x0a" \
-"\x09\x2d\x76\x2c\x2d\x2d\x76\x65\x72\x62\x6f\x73\x65\x09\x56\x65" \
-"\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x73\x65\x72" \
-"\x6e\x61\x6d\x65\x09\x55\x73\x65\x72\x6e\x61\x6d\x65\x0a\x09\x2d" \
-"\x70\x2c\x2d\x2d\x70\x61\x73\x73\x77\x6f\x72\x64\x09\x50\x61\x73" \
+"\x20\x53\x4f\x55\x52\x43\x45\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a" \
+"\x0a\x43\x6f\x70\x79\x20\x53\x4f\x55\x52\x43\x45\x28\x73\x29\x20" \
+"\x74\x6f\x20\x44\x45\x53\x54\x0a\x0a\x09\x2d\x61\x09\x53\x61\x6d" \
+"\x65\x20\x61\x73\x20\x2d\x64\x70\x52\x0a\x09\x2d\x52\x2c\x2d\x72" \
+"\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x64\x2c\x2d\x50\x09" \
+"\x50\x72\x65\x73\x65\x72\x76\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b" \
+"\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x69\x66\x20\x2d\x52" \
+"\x29\x0a\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x61\x6c\x6c" \
+"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f" \
+"\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e" \
+"\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d" \
+"\x70\x09\x50\x72\x65\x73\x65\x72\x76\x65\x20\x66\x69\x6c\x65\x20" \
+"\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x20\x69\x66\x20\x70\x6f" \
+"\x73\x73\x69\x62\x6c\x65\x0a\x09\x2d\x66\x09\x4f\x76\x65\x72\x77" \
+"\x72\x69\x74\x65\x0a\x09\x2d\x69\x09\x50\x72\x6f\x6d\x70\x74\x20" \
+"\x62\x65\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65" \
+"\x0a\x09\x2d\x6c\x2c\x2d\x73\x09\x43\x72\x65\x61\x74\x65\x20\x28" \
+"\x73\x79\x6d\x29\x6c\x69\x6e\x6b\x73\x00\x5b\x2d\x64\x6d\x76\x75" \
+"\x5d\x20\x5b\x2d\x46\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x48\x20" \
+"\x6e\x65\x77\x63\x5d\x20\x5b\x2d\x74\x69\x6f\x5d\x20\x5b\x2d\x70" \
+"\x20\x44\x49\x52\x5d\x20\x5b\x45\x58\x54\x52\x5f\x46\x49\x4c\x45" \
+"\x5d\x2e\x2e\x2e\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x6f\x72" \
+"\x20\x6c\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d" \
+"\x20\x61\x20\x63\x70\x69\x6f\x20\x61\x72\x63\x68\x69\x76\x65\x2c" \
+"\x20\x6f\x72\x0a\x63\x72\x65\x61\x74\x65\x20\x61\x6e\x20\x61\x72" \
+"\x63\x68\x69\x76\x65\x20\x28\x2d\x6f\x29\x20\x6f\x72\x20\x63\x6f" \
+"\x70\x79\x20\x66\x69\x6c\x65\x73\x20\x28\x2d\x70\x29\x20\x75\x73" \
+"\x69\x6e\x67\x20\x66\x69\x6c\x65\x20\x6c\x69\x73\x74\x20\x6f\x6e" \
+"\x20\x73\x74\x64\x69\x6e\x0a\x0a\x4d\x61\x69\x6e\x20\x6f\x70\x65" \
+"\x72\x61\x74\x69\x6f\x6e\x20\x6d\x6f\x64\x65\x3a\x0a\x09\x2d\x74" \
+"\x09\x4c\x69\x73\x74\x0a\x09\x2d\x69\x09\x45\x78\x74\x72\x61\x63" \
+"\x74\x20\x45\x58\x54\x52\x5f\x46\x49\x4c\x45\x73\x20\x28\x6f\x72" \
+"\x20\x61\x6c\x6c\x29\x0a\x09\x2d\x6f\x09\x43\x72\x65\x61\x74\x65" \
+"\x20\x28\x72\x65\x71\x75\x69\x72\x65\x73\x20\x2d\x48\x20\x6e\x65" \
+"\x77\x63\x29\x0a\x09\x2d\x70\x20\x44\x49\x52\x09\x43\x6f\x70\x79" \
+"\x20\x66\x69\x6c\x65\x73\x20\x74\x6f\x20\x44\x49\x52\x0a\x09\x2d" \
+"\x64\x09\x4d\x61\x6b\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x64" \
+"\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x6d\x09\x50" \
+"\x72\x65\x73\x65\x72\x76\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09\x2d" \
+"\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x09\x4f\x76" \
+"\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x46\x20\x46\x49\x4c\x45" \
+"\x09\x49\x6e\x70\x75\x74\x20\x28\x2d\x74\x2c\x2d\x69\x2c\x2d\x70" \
+"\x29\x20\x6f\x72\x20\x6f\x75\x74\x70\x75\x74\x20\x28\x2d\x6f\x29" \
+"\x20\x66\x69\x6c\x65\x0a\x09\x2d\x48\x20\x6e\x65\x77\x63\x09\x41" \
+"\x72\x63\x68\x69\x76\x65\x20\x66\x6f\x72\x6d\x61\x74\x00\x2d\x66" \
+"\x62\x53\x20\x2d\x6c\x20\x4e\x20\x2d\x4c\x20\x4c\x4f\x47\x46\x49" \
+"\x4c\x45\x20\x2d\x63\x20\x44\x49\x52\x0a\x0a\x09\x2d\x66\x09\x46" \
+"\x6f\x72\x65\x67\x72\x6f\x75\x6e\x64\x0a\x09\x2d\x62\x09\x42\x61" \
+"\x63\x6b\x67\x72\x6f\x75\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c" \
+"\x74\x29\x0a\x09\x2d\x53\x09\x4c\x6f\x67\x20\x74\x6f\x20\x73\x79" \
+"\x73\x6c\x6f\x67\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09" \
+"\x2d\x6c\x09\x53\x65\x74\x20\x6c\x6f\x67\x20\x6c\x65\x76\x65\x6c" \
+"\x2e\x20\x30\x20\x69\x73\x20\x74\x68\x65\x20\x6d\x6f\x73\x74\x20" \
+"\x76\x65\x72\x62\x6f\x73\x65\x2c\x20\x64\x65\x66\x61\x75\x6c\x74" \
+"\x20\x38\x0a\x09\x2d\x4c\x09\x4c\x6f\x67\x20\x74\x6f\x20\x66\x69" \
+"\x6c\x65\x0a\x09\x2d\x63\x09\x57\x6f\x72\x6b\x69\x6e\x67\x20\x64" \
+"\x69\x72\x00\x5b\x2d\x63\x20\x44\x49\x52\x5d\x20\x5b\x2d\x75\x20" \
+"\x55\x53\x45\x52\x5d\x20\x5b\x2d\x6c\x65\x72\x5d\x7c\x5b\x46\x49" \
+"\x4c\x45\x5d\x0a\x0a\x09\x2d\x63\x09\x43\x72\x6f\x6e\x74\x61\x62" \
+"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x09\x2d\x75\x09\x55" \
+"\x73\x65\x72\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x63\x72\x6f" \
+"\x6e\x74\x61\x62\x0a\x09\x2d\x65\x09\x45\x64\x69\x74\x20\x63\x72" \
+"\x6f\x6e\x74\x61\x62\x0a\x09\x2d\x72\x09\x44\x65\x6c\x65\x74\x65" \
+"\x20\x63\x72\x6f\x6e\x74\x61\x62\x0a\x09\x46\x49\x4c\x45\x09\x52" \
+"\x65\x70\x6c\x61\x63\x65\x20\x63\x72\x6f\x6e\x74\x61\x62\x20\x62" \
+"\x79\x20\x46\x49\x4c\x45\x20\x28\x27\x2d\x27\x3a\x20\x73\x74\x64" \
+"\x69\x6e\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x73" \
+"\x65\x6c\x65\x63\x74\x65\x64\x20\x66\x69\x65\x6c\x64\x73\x20\x66" \
+"\x72\x6f\x6d\x20\x65\x61\x63\x68\x20\x69\x6e\x70\x75\x74\x20\x46" \
+"\x49\x4c\x45\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09" \
+"\x2d\x62\x20\x4c\x49\x53\x54\x09\x4f\x75\x74\x70\x75\x74\x20\x6f" \
+"\x6e\x6c\x79\x20\x62\x79\x74\x65\x73\x20\x66\x72\x6f\x6d\x20\x4c" \
+"\x49\x53\x54\x0a\x09\x2d\x63\x20\x4c\x49\x53\x54\x09\x4f\x75\x74" \
+"\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x63\x68\x61\x72\x61\x63\x74" \
+"\x65\x72\x73\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53\x54\x0a\x09\x2d" \
+"\x64\x20\x43\x48\x41\x52\x09\x55\x73\x65\x20\x43\x48\x41\x52\x20" \
+"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x61\x62\x20\x61" \
+"\x73\x20\x74\x68\x65\x20\x66\x69\x65\x6c\x64\x20\x64\x65\x6c\x69" \
+"\x6d\x69\x74\x65\x72\x0a\x09\x2d\x73\x09\x4f\x75\x74\x70\x75\x74" \
+"\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65\x20\x6c\x69\x6e\x65\x73\x20" \
+"\x63\x6f\x6e\x74\x61\x69\x6e\x69\x6e\x67\x20\x64\x65\x6c\x69\x6d" \
+"\x69\x74\x65\x72\x0a\x09\x2d\x66\x20\x4e\x09\x50\x72\x69\x6e\x74" \
+"\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65\x73\x65\x20\x66\x69\x65\x6c" \
+"\x64\x73\x0a\x09\x2d\x6e\x09\x49\x67\x6e\x6f\x72\x65\x64\x00\x5b" \
+"\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2b\x46\x4d\x54\x5d\x20" \
+"\x5b\x54\x49\x4d\x45\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20" \
+"\x74\x69\x6d\x65\x20\x28\x75\x73\x69\x6e\x67\x20\x2b\x46\x4d\x54" \
+"\x29\x2c\x20\x6f\x72\x20\x73\x65\x74\x20\x74\x69\x6d\x65\x0a\x0a" \
+"\x09\x5b\x2d\x73\x2c\x2d\x2d\x73\x65\x74\x5d\x20\x54\x49\x4d\x45" \
+"\x09\x53\x65\x74\x20\x74\x69\x6d\x65\x20\x74\x6f\x20\x54\x49\x4d" \
+"\x45\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x74\x63\x09\x57\x6f\x72\x6b" \
+"\x20\x69\x6e\x20\x55\x54\x43\x20\x28\x64\x6f\x6e\x27\x74\x20\x63" \
+"\x6f\x6e\x76\x65\x72\x74\x20\x74\x6f\x20\x6c\x6f\x63\x61\x6c\x20" \
+"\x74\x69\x6d\x65\x29\x0a\x09\x2d\x52\x2c\x2d\x2d\x72\x66\x63\x2d" \
+"\x32\x38\x32\x32\x09\x4f\x75\x74\x70\x75\x74\x20\x52\x46\x43\x2d" \
+"\x32\x38\x32\x32\x20\x63\x6f\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64" \
+"\x61\x74\x65\x20\x73\x74\x72\x69\x6e\x67\x0a\x09\x2d\x49\x5b\x53" \
+"\x50\x45\x43\x5d\x09\x4f\x75\x74\x70\x75\x74\x20\x49\x53\x4f\x2d" \
+"\x38\x36\x30\x31\x20\x63\x6f\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64" \
+"\x61\x74\x65\x20\x73\x74\x72\x69\x6e\x67\x0a\x09\x09\x09\x53\x50" \
+"\x45\x43\x3d\x27\x64\x61\x74\x65\x27\x20\x28\x64\x65\x66\x61\x75" \
+"\x6c\x74\x29\x20\x66\x6f\x72\x20\x64\x61\x74\x65\x20\x6f\x6e\x6c" \
+"\x79\x2c\x0a\x09\x09\x09\x27\x68\x6f\x75\x72\x73\x27\x2c\x20\x27" \
+"\x6d\x69\x6e\x75\x74\x65\x73\x27\x2c\x20\x6f\x72\x20\x27\x73\x65" \
+"\x63\x6f\x6e\x64\x73\x27\x20\x66\x6f\x72\x20\x64\x61\x74\x65\x20" \
+"\x61\x6e\x64\x0a\x09\x09\x09\x74\x69\x6d\x65\x20\x74\x6f\x20\x74" \
+"\x68\x65\x20\x69\x6e\x64\x69\x63\x61\x74\x65\x64\x20\x70\x72\x65" \
+"\x63\x69\x73\x69\x6f\x6e\x0a\x09\x2d\x72\x2c\x2d\x2d\x72\x65\x66" \
+"\x65\x72\x65\x6e\x63\x65\x20\x46\x49\x4c\x45\x09\x44\x69\x73\x70" \
+"\x6c\x61\x79\x20\x6c\x61\x73\x74\x20\x6d\x6f\x64\x69\x66\x69\x63" \
+"\x61\x74\x69\x6f\x6e\x20\x74\x69\x6d\x65\x20\x6f\x66\x20\x46\x49" \
+"\x4c\x45\x0a\x09\x2d\x64\x2c\x2d\x2d\x64\x61\x74\x65\x20\x54\x49" \
+"\x4d\x45\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x54\x49\x4d\x45\x2c" \
+"\x20\x6e\x6f\x74\x20\x27\x6e\x6f\x77\x27\x0a\x09\x2d\x44\x20\x46" \
+"\x4d\x54\x09\x09\x55\x73\x65\x20\x46\x4d\x54\x20\x66\x6f\x72\x20" \
+"\x2d\x64\x20\x54\x49\x4d\x45\x20\x63\x6f\x6e\x76\x65\x72\x73\x69" \
+"\x6f\x6e\x0a\x0a\x52\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\x20\x54" \
+"\x49\x4d\x45\x20\x66\x6f\x72\x6d\x61\x74\x73\x3a\x0a\x09\x68\x68" \
+"\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x5b\x59\x59\x59\x59\x2e" \
+"\x5d\x4d\x4d\x2e\x44\x44\x2d\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73" \
+"\x5d\x0a\x09\x59\x59\x59\x59\x2d\x4d\x4d\x2d\x44\x44\x20\x68\x68" \
+"\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x5b\x5b\x5b\x5b\x5b\x59" \
+"\x59\x5d\x59\x59\x5d\x4d\x4d\x5d\x44\x44\x5d\x68\x68\x5d\x6d\x6d" \
+"\x5b\x2e\x73\x73\x5d\x0a\x09\x27\x64\x61\x74\x65\x20\x54\x49\x4d" \
+"\x45\x27\x20\x66\x6f\x72\x6d\x20\x61\x63\x63\x65\x70\x74\x73\x20" \
+"\x4d\x4d\x44\x44\x68\x68\x6d\x6d\x5b\x5b\x59\x59\x5d\x59\x59\x5d" \
+"\x5b\x2e\x73\x73\x5d\x20\x69\x6e\x73\x74\x65\x61\x64\x00\x45\x58" \
+"\x50\x52\x45\x53\x53\x49\x4f\x4e\x2e\x2e\x2e\x0a\x0a\x54\x69\x6e" \
+"\x79\x20\x52\x50\x4e\x20\x63\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72" \
+"\x2e\x20\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x73\x3a\x0a\x2b\x2c" \
+"\x20\x61\x64\x64\x2c\x20\x2d\x2c\x20\x73\x75\x62\x2c\x20\x2a\x2c" \
+"\x20\x6d\x75\x6c\x2c\x20\x2f\x2c\x20\x64\x69\x76\x2c\x20\x25\x2c" \
+"\x20\x6d\x6f\x64\x2c\x20\x2a\x2a\x2c\x20\x65\x78\x70\x2c\x20\x61" \
+"\x6e\x64\x2c\x20\x6f\x72\x2c\x20\x6e\x6f\x74\x2c\x20\x65\x6f\x72" \
+"\x2c\x0a\x70\x20\x2d\x20\x70\x72\x69\x6e\x74\x20\x74\x6f\x70\x20" \
+"\x6f\x66\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6b\x20\x28\x77\x69" \
+"\x74\x68\x6f\x75\x74\x20\x70\x6f\x70\x70\x69\x6e\x67\x29\x2c\x0a" \
+"\x66\x20\x2d\x20\x70\x72\x69\x6e\x74\x20\x65\x6e\x74\x69\x72\x65" \
+"\x20\x73\x74\x61\x63\x6b\x2c\x0a\x6f\x20\x2d\x20\x70\x6f\x70\x20" \
+"\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x61\x6e\x64\x20\x73\x65" \
+"\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x72\x61\x64\x69\x78\x20\x28" \
+"\x6d\x75\x73\x74\x20\x62\x65\x20\x31\x30\x2c\x20\x31\x36\x2c\x20" \
+"\x38\x20\x6f\x72\x20\x32\x29\x2e\x0a\x45\x78\x61\x6d\x70\x6c\x65" \
+"\x73\x3a\x20\x27\x64\x63\x20\x32\x20\x32\x20\x61\x64\x64\x20\x70" \
+"\x27\x20\x2d\x3e\x20\x34\x2c\x20\x27\x64\x63\x20\x38\x20\x38\x20" \
+"\x2a\x20\x32\x20\x32\x20\x2b\x20\x2f\x20\x70\x27\x20\x2d\x3e\x20" \
+"\x31\x36\x00\x5b\x69\x66\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x6f\x66" \
+"\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x69\x62\x73\x3d\x4e\x5d\x20\x5b" \
+"\x6f\x62\x73\x3d\x4e\x5d\x20\x5b\x62\x73\x3d\x4e\x5d\x20\x5b\x63" \
+"\x6f\x75\x6e\x74\x3d\x4e\x5d\x20\x5b\x73\x6b\x69\x70\x3d\x4e\x5d" \
+"\x0a\x09\x5b\x73\x65\x65\x6b\x3d\x4e\x5d\x20\x5b\x63\x6f\x6e\x76" \
+"\x3d\x6e\x6f\x74\x72\x75\x6e\x63\x7c\x6e\x6f\x65\x72\x72\x6f\x72" \
+"\x7c\x73\x79\x6e\x63\x7c\x66\x73\x79\x6e\x63\x5d\x0a\x0a\x43\x6f" \
+"\x70\x79\x20\x61\x20\x66\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x63" \
+"\x6f\x6e\x76\x65\x72\x74\x69\x6e\x67\x20\x61\x6e\x64\x20\x66\x6f" \
+"\x72\x6d\x61\x74\x74\x69\x6e\x67\x0a\x0a\x09\x69\x66\x3d\x46\x49" \
+"\x4c\x45\x09\x09\x52\x65\x61\x64\x20\x66\x72\x6f\x6d\x20\x46\x49" \
+"\x4c\x45\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74" \
+"\x64\x69\x6e\x0a\x09\x6f\x66\x3d\x46\x49\x4c\x45\x09\x09\x57\x72" \
+"\x69\x74\x65\x20\x74\x6f\x20\x46\x49\x4c\x45\x20\x69\x6e\x73\x74" \
+"\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x62" \
+"\x73\x3d\x4e\x09\x09\x52\x65\x61\x64\x20\x61\x6e\x64\x20\x77\x72" \
+"\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61" \
+"\x20\x74\x69\x6d\x65\x0a\x09\x69\x62\x73\x3d\x4e\x09\x09\x52\x65" \
+"\x61\x64\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
+"\x74\x69\x6d\x65\x0a\x09\x6f\x62\x73\x3d\x4e\x09\x09\x57\x72\x69" \
+"\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
+"\x74\x69\x6d\x65\x0a\x09\x63\x6f\x75\x6e\x74\x3d\x4e\x09\x09\x43" \
+"\x6f\x70\x79\x20\x6f\x6e\x6c\x79\x20\x4e\x20\x69\x6e\x70\x75\x74" \
+"\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73\x6b\x69\x70\x3d\x4e\x09" \
+"\x09\x53\x6b\x69\x70\x20\x4e\x20\x69\x6e\x70\x75\x74\x20\x62\x6c" \
+"\x6f\x63\x6b\x73\x0a\x09\x73\x65\x65\x6b\x3d\x4e\x09\x09\x53\x6b" \
+"\x69\x70\x20\x4e\x20\x6f\x75\x74\x70\x75\x74\x20\x62\x6c\x6f\x63" \
+"\x6b\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x6e\x6f\x74\x72\x75\x6e\x63" \
+"\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x75\x6e\x63\x61\x74\x65\x20" \
+"\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x0a\x09\x63\x6f\x6e" \
+"\x76\x3d\x6e\x6f\x65\x72\x72\x6f\x72\x09\x43\x6f\x6e\x74\x69\x6e" \
+"\x75\x65\x20\x61\x66\x74\x65\x72\x20\x72\x65\x61\x64\x20\x65\x72" \
+"\x72\x6f\x72\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x73\x79\x6e\x63\x09" \
+"\x50\x61\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x77\x69\x74\x68\x20" \
+"\x7a\x65\x72\x6f\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x66\x73\x79\x6e" \
+"\x63\x09\x50\x68\x79\x73\x69\x63\x61\x6c\x6c\x79\x20\x77\x72\x69" \
+"\x74\x65\x20\x64\x61\x74\x61\x20\x6f\x75\x74\x20\x62\x65\x66\x6f" \
+"\x72\x65\x20\x66\x69\x6e\x69\x73\x68\x69\x6e\x67\x0a\x0a\x4e\x75" \
+"\x6d\x62\x65\x72\x73\x20\x6d\x61\x79\x20\x62\x65\x20\x73\x75\x66" \
+"\x66\x69\x78\x65\x64\x20\x62\x79\x20\x63\x20\x28\x78\x31\x29\x2c" \
+"\x20\x77\x20\x28\x78\x32\x29\x2c\x20\x62\x20\x28\x78\x35\x31\x32" \
+"\x29\x2c\x20\x6b\x44\x20\x28\x78\x31\x30\x30\x30\x29\x2c\x20\x6b" \
+"\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x0a\x4d\x44\x20\x28\x78\x31" \
+"\x30\x30\x30\x30\x30\x30\x29\x2c\x20\x4d\x20\x28\x78\x31\x30\x34" \
+"\x38\x35\x37\x36\x29\x2c\x20\x47\x44\x20\x28\x78\x31\x30\x30\x30" \
+"\x30\x30\x30\x30\x30\x30\x29\x20\x6f\x72\x20\x47\x20\x28\x78\x31" \
+"\x30\x37\x33\x37\x34\x31\x38\x32\x34\x29\x00\x5b\x2d\x6e\x5d\x20" \
+"\x5b\x4d\x4f\x44\x46\x49\x4c\x45\x53\x5d\x2e\x2e\x2e\x0a\x0a\x47" \
+"\x65\x6e\x65\x72\x61\x74\x65\x20\x6d\x6f\x64\x75\x6c\x65\x73\x2e" \
+"\x64\x65\x70\x2c\x20\x61\x6c\x69\x61\x73\x2c\x20\x61\x6e\x64\x20" \
+"\x73\x79\x6d\x62\x6f\x6c\x73\x20\x66\x69\x6c\x65\x73\x0a\x0a\x09" \
+"\x2d\x6e\x09\x44\x72\x79\x20\x72\x75\x6e\x3a\x20\x70\x72\x69\x6e" \
+"\x74\x20\x66\x69\x6c\x65\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
+"\x74\x00\x41\x44\x44\x52\x45\x53\x53\x20\x5b\x57\x49\x44\x54\x48" \
+"\x20\x5b\x56\x41\x4c\x55\x45\x5d\x5d\x0a\x0a\x52\x65\x61\x64\x2f" \
+"\x77\x72\x69\x74\x65\x20\x66\x72\x6f\x6d\x20\x70\x68\x79\x73\x69" \
+"\x63\x61\x6c\x20\x61\x64\x64\x72\x65\x73\x73\x0a\x0a\x09\x41\x44" \
+"\x44\x52\x45\x53\x53\x09\x41\x64\x64\x72\x65\x73\x73\x20\x74\x6f" \
+"\x20\x61\x63\x74\x20\x75\x70\x6f\x6e\x0a\x09\x57\x49\x44\x54\x48" \
+"\x09\x57\x69\x64\x74\x68\x20\x28\x38\x2f\x31\x36\x2f\x2e\x2e\x2e" \
+"\x29\x0a\x09\x56\x41\x4c\x55\x45\x09\x44\x61\x74\x61\x20\x74\x6f" \
+"\x20\x62\x65\x20\x77\x72\x69\x74\x74\x65\x6e\x00\x5b\x2d\x50\x6b" \
+"\x6d\x68\x61\x69\x5d\x20\x5b\x2d\x42\x20\x53\x49\x5a\x45\x5d\x20" \
+"\x5b\x46\x49\x4c\x45\x53\x59\x53\x54\x45\x4d\x5d\x2e\x2e\x2e\x0a" \
+"\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
+"\x6d\x20\x75\x73\x61\x67\x65\x20\x73\x74\x61\x74\x69\x73\x74\x69" \
+"\x63\x73\x0a\x0a\x09\x2d\x50\x09\x50\x4f\x53\x49\x58\x20\x6f\x75" \
+"\x74\x70\x75\x74\x20\x66\x6f\x72\x6d\x61\x74\x0a\x09\x2d\x6b\x09" \
+"\x31\x30\x32\x34\x2d\x62\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b\x73" \
+"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x6d\x09\x31" \
+"\x4d\x2d\x62\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x2d" \
+"\x68\x09\x48\x75\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65" \
+"\x20\x28\x65\x2e\x67\x2e\x20\x31\x4b\x20\x32\x34\x33\x4d\x20\x32" \
+"\x47\x29\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20\x61\x6c\x6c\x20" \
+"\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x69\x09" \
+"\x49\x6e\x6f\x64\x65\x73\x0a\x09\x2d\x42\x20\x53\x49\x5a\x45\x09" \
+"\x42\x6c\x6f\x63\x6b\x73\x69\x7a\x65\x00\x5b\x2d\x61\x62\x42\x64" \
+"\x69\x4e\x71\x72\x54\x73\x74\x77\x5d\x20\x5b\x2d\x4c\x20\x4c\x41" \
+"\x42\x45\x4c\x5d\x20\x5b\x2d\x53\x20\x46\x49\x4c\x45\x5d\x20\x5b" \
+"\x2d\x55\x20\x4c\x49\x4e\x45\x53\x5d\x20\x46\x49\x4c\x45\x31\x20" \
+"\x46\x49\x4c\x45\x32\x0a\x0a\x43\x6f\x6d\x70\x61\x72\x65\x20\x66" \
+"\x69\x6c\x65\x73\x20\x6c\x69\x6e\x65\x20\x62\x79\x20\x6c\x69\x6e" \
+"\x65\x20\x61\x6e\x64\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x68\x65" \
+"\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63\x65\x73\x20\x62\x65\x74" \
+"\x77\x65\x65\x6e\x20\x74\x68\x65\x6d\x2e\x0a\x54\x68\x69\x73\x20" \
+"\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x73" \
+"\x75\x70\x70\x6f\x72\x74\x73\x20\x75\x6e\x69\x66\x69\x65\x64\x20" \
+"\x64\x69\x66\x66\x73\x20\x6f\x6e\x6c\x79\x2e\x0a\x0a\x09\x2d\x61" \
+"\x09\x54\x72\x65\x61\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73" \
+"\x20\x61\x73\x20\x74\x65\x78\x74\x0a\x09\x2d\x62\x09\x49\x67\x6e" \
+"\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20\x69\x6e\x20\x74" \
+"\x68\x65\x20\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x66\x20\x77\x68\x69" \
+"\x74\x65\x73\x70\x61\x63\x65\x0a\x09\x2d\x42\x09\x49\x67\x6e\x6f" \
+"\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20\x77\x68\x6f\x73\x65" \
+"\x20\x6c\x69\x6e\x65\x73\x20\x61\x72\x65\x20\x61\x6c\x6c\x20\x62" \
+"\x6c\x61\x6e\x6b\x0a\x09\x2d\x64\x09\x54\x72\x79\x20\x68\x61\x72" \
+"\x64\x20\x74\x6f\x20\x66\x69\x6e\x64\x20\x61\x20\x73\x6d\x61\x6c" \
+"\x6c\x65\x72\x20\x73\x65\x74\x20\x6f\x66\x20\x63\x68\x61\x6e\x67" \
+"\x65\x73\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x61" \
+"\x73\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63\x65\x73\x0a\x09" \
+"\x2d\x4c\x09\x55\x73\x65\x20\x4c\x41\x42\x45\x4c\x20\x69\x6e\x73" \
+"\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65" \
+"\x6e\x61\x6d\x65\x20\x69\x6e\x20\x74\x68\x65\x20\x75\x6e\x69\x66" \
+"\x69\x65\x64\x20\x68\x65\x61\x64\x65\x72\x0a\x09\x2d\x4e\x09\x54" \
+"\x72\x65\x61\x74\x20\x61\x62\x73\x65\x6e\x74\x20\x66\x69\x6c\x65" \
+"\x73\x20\x61\x73\x20\x65\x6d\x70\x74\x79\x0a\x09\x2d\x71\x09\x4f" \
+"\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x77\x68\x65\x74\x68" \
+"\x65\x72\x20\x66\x69\x6c\x65\x73\x20\x64\x69\x66\x66\x65\x72\x0a" \
+"\x09\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x53\x09" \
+"\x53\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x46\x49\x4c\x45\x20" \
+"\x77\x68\x65\x6e\x20\x63\x6f\x6d\x70\x61\x72\x69\x6e\x67\x20\x64" \
+"\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x54\x09\x4d" \
+"\x61\x6b\x65\x20\x74\x61\x62\x73\x20\x6c\x69\x6e\x65\x20\x75\x70" \
+"\x20\x62\x79\x20\x70\x72\x65\x66\x69\x78\x69\x6e\x67\x20\x61\x20" \
+"\x74\x61\x62\x20\x77\x68\x65\x6e\x20\x6e\x65\x63\x65\x73\x73\x61" \
+"\x72\x79\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x77\x68" \
+"\x65\x6e\x20\x74\x77\x6f\x20\x66\x69\x6c\x65\x73\x20\x61\x72\x65" \
+"\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x0a\x09\x2d\x74\x09\x45\x78" \
+"\x70\x61\x6e\x64\x20\x74\x61\x62\x73\x20\x74\x6f\x20\x73\x70\x61" \
+"\x63\x65\x73\x20\x69\x6e\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d" \
+"\x55\x09\x4f\x75\x74\x70\x75\x74\x20\x4c\x49\x4e\x45\x53\x20\x6c" \
+"\x69\x6e\x65\x73\x20\x6f\x66\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a" \
+"\x09\x2d\x77\x09\x49\x67\x6e\x6f\x72\x65\x20\x61\x6c\x6c\x20\x77" \
+"\x68\x69\x74\x65\x73\x70\x61\x63\x65\x00\x46\x49\x4c\x45\x4e\x41" \
+"\x4d\x45\x0a\x0a\x53\x74\x72\x69\x70\x20\x6e\x6f\x6e\x2d\x64\x69" \
+"\x72\x65\x63\x74\x6f\x72\x79\x20\x73\x75\x66\x66\x69\x78\x20\x66" \
+"\x72\x6f\x6d\x20\x46\x49\x4c\x45\x4e\x41\x4d\x45\x00\x5b\x2d\x63" \
+"\x5d\x20\x5b\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x5d\x20\x5b\x2d\x72" \
+"\x5d\x20\x5b\x2d\x73\x20\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x43\x5d" \
+"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x6f\x6e\x74\x72" \
+"\x6f\x6c\x20\x74\x68\x65\x20\x6b\x65\x72\x6e\x65\x6c\x20\x72\x69" \
+"\x6e\x67\x20\x62\x75\x66\x66\x65\x72\x0a\x0a\x09\x2d\x63\x09\x09" \
+"\x43\x6c\x65\x61\x72\x20\x72\x69\x6e\x67\x20\x62\x75\x66\x66\x65" \
+"\x72\x20\x61\x66\x74\x65\x72\x20\x70\x72\x69\x6e\x74\x69\x6e\x67" \
+"\x0a\x09\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x09\x53\x65\x74\x20\x63" \
+"\x6f\x6e\x73\x6f\x6c\x65\x20\x6c\x6f\x67\x67\x69\x6e\x67\x20\x6c" \
+"\x65\x76\x65\x6c\x0a\x09\x2d\x72\x09\x09\x53\x68\x6f\x77\x20\x6c" \
+"\x65\x76\x65\x6c\x20\x70\x72\x65\x66\x69\x78\x0a\x09\x2d\x73\x20" \
+"\x53\x49\x5a\x45\x09\x09\x42\x75\x66\x66\x65\x72\x20\x73\x69\x7a" \
+"\x65\x0a\x09\x2d\x43\x09\x09\x43\x6f\x6c\x6f\x72\x65\x64\x20\x6f" \
+"\x75\x74\x70\x75\x74\x00\x5b\x2d\x64\x76\x73\x5d\x20\x5b\x2d\x63" \
+"\x20\x43\x4f\x4e\x46\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x74\x20\x54" \
+"\x54\x4c\x5f\x53\x45\x43\x5d\x20\x5b\x2d\x70\x20\x50\x4f\x52\x54" \
+"\x5d\x20\x5b\x2d\x69\x20\x41\x44\x44\x52\x5d\x0a\x0a\x53\x6d\x61" \
+"\x6c\x6c\x20\x73\x74\x61\x74\x69\x63\x20\x44\x4e\x53\x20\x73\x65" \
+"\x72\x76\x65\x72\x20\x64\x61\x65\x6d\x6f\x6e\x0a\x0a\x09\x2d\x63" \
+"\x20\x46\x49\x4c\x45\x09\x43\x6f\x6e\x66\x69\x67\x20\x66\x69\x6c" \
+"\x65\x0a\x09\x2d\x74\x20\x53\x45\x43\x09\x54\x54\x4c\x0a\x09\x2d" \
+"\x70\x20\x50\x4f\x52\x54\x09\x4c\x69\x73\x74\x65\x6e\x20\x6f\x6e" \
+"\x20\x50\x4f\x52\x54\x0a\x09\x2d\x69\x20\x41\x44\x44\x52\x09\x4c" \
+"\x69\x73\x74\x65\x6e\x20\x6f\x6e\x20\x41\x44\x44\x52\x0a\x09\x2d" \
+"\x64\x09\x44\x61\x65\x6d\x6f\x6e\x69\x7a\x65\x0a\x09\x2d\x76\x09" \
+"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x73\x09\x53\x65\x6e\x64" \
+"\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x20\x72\x65\x70\x6c" \
+"\x69\x65\x73\x20\x6f\x6e\x6c\x79\x2e\x20\x55\x73\x65\x20\x74\x68" \
+"\x69\x73\x20\x69\x66\x20\x79\x6f\x75\x20\x77\x61\x6e\x74\x0a\x09" \
+"\x09\x74\x6f\x20\x75\x73\x65\x20\x2f\x65\x74\x63\x2f\x72\x65\x73" \
+"\x6f\x6c\x76\x2e\x63\x6f\x6e\x66\x20\x77\x69\x74\x68\x20\x74\x77" \
+"\x6f\x20\x6e\x61\x6d\x65\x73\x65\x72\x76\x65\x72\x20\x6c\x69\x6e" \
+"\x65\x73\x3a\x0a\x09\x09\x09\x6e\x61\x6d\x65\x73\x65\x72\x76\x65" \
+"\x72\x20\x44\x4e\x53\x44\x5f\x53\x45\x52\x56\x45\x52\x0a\x09\x09" \
+"\x09\x6e\x61\x6d\x65\x73\x65\x72\x76\x65\x72\x20\x4e\x4f\x52\x4d" \
+"\x41\x4c\x5f\x44\x4e\x53\x5f\x53\x45\x52\x56\x45\x52\x00\x5b\x2d" \
+"\x75\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x43\x6f\x6e\x76" \
+"\x65\x72\x74\x20\x46\x49\x4c\x45\x20\x69\x6e\x2d\x70\x6c\x61\x63" \
+"\x65\x20\x66\x72\x6f\x6d\x20\x44\x4f\x53\x20\x74\x6f\x20\x55\x6e" \
+"\x69\x78\x20\x66\x6f\x72\x6d\x61\x74\x2e\x0a\x57\x68\x65\x6e\x20" \
+"\x6e\x6f\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x67\x69\x76\x65\x6e" \
+"\x2c\x20\x75\x73\x65\x20\x73\x74\x64\x69\x6e\x2f\x73\x74\x64\x6f" \
+"\x75\x74\x2e\x0a\x0a\x09\x2d\x75\x09\x64\x6f\x73\x32\x75\x6e\x69" \
+"\x78\x0a\x09\x2d\x64\x09\x75\x6e\x69\x78\x32\x64\x6f\x73\x00\x5b" \
+"\x2d\x61\x48\x4c\x64\x63\x6c\x73\x78\x68\x6d\x6b\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x75\x6d\x6d\x61\x72\x69" \
+"\x7a\x65\x20\x64\x69\x73\x6b\x20\x73\x70\x61\x63\x65\x20\x75\x73" \
+"\x65\x64\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45" \
+"\x20\x61\x6e\x64\x2f\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
+"\x79\x0a\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20\x66\x69\x6c\x65" \
+"\x20\x73\x69\x7a\x65\x73\x20\x74\x6f\x6f\x0a\x09\x2d\x4c\x09\x46" \
+"\x6f\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e" \
+"\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79" \
+"\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e" \
+"\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64\x20\x4e\x09\x4c\x69\x6d" \
+"\x69\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x64\x69\x72" \
+"\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x28\x61\x6e\x64\x20\x66\x69" \
+"\x6c\x65\x73\x20\x77\x69\x74\x68\x20\x2d\x61\x29\x20\x6f\x66\x20" \
+"\x64\x65\x70\x74\x68\x20\x3c\x20\x4e\x0a\x09\x2d\x63\x09\x53\x68" \
+"\x6f\x77\x20\x67\x72\x61\x6e\x64\x20\x74\x6f\x74\x61\x6c\x0a\x09" \
+"\x2d\x6c\x09\x43\x6f\x75\x6e\x74\x20\x73\x69\x7a\x65\x73\x20\x6d" \
+"\x61\x6e\x79\x20\x74\x69\x6d\x65\x73\x20\x69\x66\x20\x68\x61\x72" \
+"\x64\x20\x6c\x69\x6e\x6b\x65\x64\x0a\x09\x2d\x73\x09\x44\x69\x73" \
+"\x70\x6c\x61\x79\x20\x6f\x6e\x6c\x79\x20\x61\x20\x74\x6f\x74\x61" \
+"\x6c\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x61\x72\x67\x75\x6d" \
+"\x65\x6e\x74\x0a\x09\x2d\x78\x09\x53\x6b\x69\x70\x20\x64\x69\x72" \
+"\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x6f\x6e\x20\x64\x69\x66\x66" \
+"\x65\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
+"\x73\x0a\x09\x2d\x68\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x68" \
+"\x75\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66\x6f" \
+"\x72\x6d\x61\x74\x20\x28\x65\x2e\x67\x2e\x2c\x20\x31\x4b\x20\x32" \
+"\x34\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x6d\x09\x53\x69\x7a\x65" \
+"\x73\x20\x69\x6e\x20\x6d\x65\x67\x61\x62\x79\x74\x65\x73\x0a\x09" \
+"\x2d\x6b\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x6b\x69\x6c\x6f" \
+"\x62\x79\x74\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x00" \
+"\x5b\x2d\x6e\x65\x45\x5d\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a" \
+"\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69" \
+"\x66\x69\x65\x64\x20\x41\x52\x47\x73\x20\x74\x6f\x20\x73\x74\x64" \
+"\x6f\x75\x74\x0a\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72\x65\x73" \
+"\x73\x20\x74\x72\x61\x69\x6c\x69\x6e\x67\x20\x6e\x65\x77\x6c\x69" \
+"\x6e\x65\x0a\x09\x2d\x65\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74" \
+"\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68\x20\x65\x73\x63\x61\x70" \
+"\x65\x73\x20\x28\x69\x2e\x65\x2e\x2c\x20\x5c\x74\x3d\x74\x61\x62" \
+"\x29\x0a\x09\x2d\x45\x09\x44\x6f\x6e\x27\x74\x20\x69\x6e\x74\x65" \
+"\x72\x70\x72\x65\x74\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68\x20" \
+"\x65\x73\x63\x61\x70\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
+"\x29\x00\x00\x08\x00\x5b\x2d\x69\x75\x5d\x20\x5b\x2d\x5d\x20\x5b" \
+"\x6e\x61\x6d\x65\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x20\x5b" \
+"\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x50\x72\x69\x6e" \
+"\x74\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x6e" \
+"\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x6f\x72\x20\x72\x75\x6e" \
+"\x20\x50\x52\x4f\x47\x20\x61\x66\x74\x65\x72\x20\x73\x65\x74\x74" \
+"\x69\x6e\x67\x20\x75\x70\x0a\x74\x68\x65\x20\x73\x70\x65\x63\x69" \
+"\x66\x69\x65\x64\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74" \
+"\x0a\x0a\x09\x2d\x2c\x20\x2d\x69\x09\x53\x74\x61\x72\x74\x20\x77" \
+"\x69\x74\x68\x20\x61\x6e\x20\x65\x6d\x70\x74\x79\x20\x65\x6e\x76" \
+"\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x0a\x09\x2d\x75\x09\x52\x65\x6d" \
+"\x6f\x76\x65\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x66\x72\x6f" \
+"\x6d\x20\x74\x68\x65\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e" \
+"\x74\x00\x5b\x2d\x69\x5d\x20\x5b\x2d\x74\x20\x4e\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74" \
+"\x20\x74\x61\x62\x73\x20\x74\x6f\x20\x73\x70\x61\x63\x65\x73\x2c" \
+"\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f" \
+"\x75\x74\x0a\x0a\x09\x2d\x69\x2c\x2d\x2d\x69\x6e\x69\x74\x69\x61" \
+"\x6c\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20" \
+"\x74\x61\x62\x73\x20\x61\x66\x74\x65\x72\x20\x6e\x6f\x6e\x20\x62" \
+"\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x74\x2c\x2d\x2d\x74\x61\x62\x73" \
+"\x3d\x4e\x09\x54\x61\x62\x73\x74\x6f\x70\x73\x20\x65\x76\x65\x72" \
+"\x79\x20\x4e\x20\x63\x68\x61\x72\x73\x00\x45\x58\x50\x52\x45\x53" \
+"\x53\x49\x4f\x4e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20" \
+"\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53" \
+"\x49\x4f\x4e\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x45" \
+"\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x6d\x61\x79\x20\x62\x65" \
+"\x3a\x0a\x09\x41\x52\x47\x31\x20\x7c\x20\x41\x52\x47\x32\x09\x41" \
+"\x52\x47\x31\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6e\x65\x69" \
+"\x74\x68\x65\x72\x20\x6e\x75\x6c\x6c\x20\x6e\x6f\x72\x20\x30\x2c" \
+"\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x41\x52\x47\x32\x0a" \
+"\x09\x41\x52\x47\x31\x20\x26\x20\x41\x52\x47\x32\x09\x41\x52\x47" \
+"\x31\x20\x69\x66\x20\x6e\x65\x69\x74\x68\x65\x72\x20\x61\x72\x67" \
+"\x75\x6d\x65\x6e\x74\x20\x69\x73\x20\x6e\x75\x6c\x6c\x20\x6f\x72" \
+"\x20\x30\x2c\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x30\x0a" \
+"\x09\x41\x52\x47\x31\x20\x3c\x20\x41\x52\x47\x32\x09\x31\x20\x69" \
+"\x66\x20\x41\x52\x47\x31\x20\x69\x73\x20\x6c\x65\x73\x73\x20\x74" \
+"\x68\x61\x6e\x20\x41\x52\x47\x32\x2c\x20\x65\x6c\x73\x65\x20\x30" \
+"\x2e\x20\x53\x69\x6d\x69\x6c\x61\x72\x6c\x79\x3a\x0a\x09\x41\x52" \
+"\x47\x31\x20\x3c\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31" \
+"\x20\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x21\x3d" \
+"\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3e\x3d\x20\x41" \
+"\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3e\x20\x41\x52\x47\x32" \
+"\x0a\x09\x41\x52\x47\x31\x20\x2b\x20\x41\x52\x47\x32\x09\x53\x75" \
+"\x6d\x20\x6f\x66\x20\x41\x52\x47\x31\x20\x61\x6e\x64\x20\x41\x52" \
+"\x47\x32\x2e\x20\x53\x69\x6d\x69\x6c\x61\x72\x6c\x79\x3a\x0a\x09" \
+"\x41\x52\x47\x31\x20\x2d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47" \
+"\x31\x20\x2a\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2f" \
+"\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x25\x20\x41\x52" \
+"\x47\x32\x0a\x09\x53\x54\x52\x49\x4e\x47\x20\x3a\x20\x52\x45\x47" \
+"\x45\x58\x50\x09\x09\x41\x6e\x63\x68\x6f\x72\x65\x64\x20\x70\x61" \
+"\x74\x74\x65\x72\x6e\x20\x6d\x61\x74\x63\x68\x20\x6f\x66\x20\x52" \
+"\x45\x47\x45\x58\x50\x20\x69\x6e\x20\x53\x54\x52\x49\x4e\x47\x0a" \
+"\x09\x6d\x61\x74\x63\x68\x20\x53\x54\x52\x49\x4e\x47\x20\x52\x45" \
+"\x47\x45\x58\x50\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x53\x54\x52" \
+"\x49\x4e\x47\x20\x3a\x20\x52\x45\x47\x45\x58\x50\x0a\x09\x73\x75" \
+"\x62\x73\x74\x72\x20\x53\x54\x52\x49\x4e\x47\x20\x50\x4f\x53\x20" \
+"\x4c\x45\x4e\x47\x54\x48\x20\x53\x75\x62\x73\x74\x72\x69\x6e\x67" \
+"\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x2c\x20\x50\x4f\x53\x20" \
+"\x63\x6f\x75\x6e\x74\x65\x64\x20\x66\x72\x6f\x6d\x20\x31\x0a\x09" \
+"\x69\x6e\x64\x65\x78\x20\x53\x54\x52\x49\x4e\x47\x20\x43\x48\x41" \
+"\x52\x53\x09\x49\x6e\x64\x65\x78\x20\x69\x6e\x20\x53\x54\x52\x49" \
+"\x4e\x47\x20\x77\x68\x65\x72\x65\x20\x61\x6e\x79\x20\x43\x48\x41" \
+"\x52\x53\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x6f\x72\x20" \
+"\x30\x0a\x09\x6c\x65\x6e\x67\x74\x68\x20\x53\x54\x52\x49\x4e\x47" \
+"\x09\x09\x4c\x65\x6e\x67\x74\x68\x20\x6f\x66\x20\x53\x54\x52\x49" \
+"\x4e\x47\x0a\x09\x71\x75\x6f\x74\x65\x20\x54\x4f\x4b\x45\x4e\x09" \
+"\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x54\x4f\x4b\x45\x4e" \
+"\x20\x61\x73\x20\x61\x20\x73\x74\x72\x69\x6e\x67\x2c\x20\x65\x76" \
+"\x65\x6e\x20\x69\x66\x0a\x09\x09\x09\x09\x69\x74\x20\x69\x73\x20" \
+"\x61\x20\x6b\x65\x79\x77\x6f\x72\x64\x20\x6c\x69\x6b\x65\x20\x27" \
+"\x6d\x61\x74\x63\x68\x27\x20\x6f\x72\x20\x61\x6e\x0a\x09\x09\x09" \
+"\x09\x6f\x70\x65\x72\x61\x74\x6f\x72\x20\x6c\x69\x6b\x65\x20\x27" \
+"\x2f\x27\x0a\x09\x28\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x29" \
+"\x09\x09\x56\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45" \
+"\x53\x53\x49\x4f\x4e\x0a\x0a\x42\x65\x77\x61\x72\x65\x20\x74\x68" \
+"\x61\x74\x20\x6d\x61\x6e\x79\x20\x6f\x70\x65\x72\x61\x74\x6f\x72" \
+"\x73\x20\x6e\x65\x65\x64\x20\x74\x6f\x20\x62\x65\x20\x65\x73\x63" \
+"\x61\x70\x65\x64\x20\x6f\x72\x20\x71\x75\x6f\x74\x65\x64\x20\x66" \
+"\x6f\x72\x20\x73\x68\x65\x6c\x6c\x73\x2e\x0a\x43\x6f\x6d\x70\x61" \
+"\x72\x69\x73\x6f\x6e\x73\x20\x61\x72\x65\x20\x61\x72\x69\x74\x68" \
+"\x6d\x65\x74\x69\x63\x20\x69\x66\x20\x62\x6f\x74\x68\x20\x41\x52" \
+"\x47\x73\x20\x61\x72\x65\x20\x6e\x75\x6d\x62\x65\x72\x73\x2c\x20" \
+"\x65\x6c\x73\x65\x0a\x6c\x65\x78\x69\x63\x6f\x67\x72\x61\x70\x68" \
+"\x69\x63\x61\x6c\x2e\x20\x50\x61\x74\x74\x65\x72\x6e\x20\x6d\x61" \
+"\x74\x63\x68\x65\x73\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x65" \
+"\x20\x73\x74\x72\x69\x6e\x67\x20\x6d\x61\x74\x63\x68\x65\x64\x20" \
+"\x62\x65\x74\x77\x65\x65\x6e\x0a\x5c\x28\x20\x61\x6e\x64\x20\x5c" \
+"\x29\x20\x6f\x72\x20\x6e\x75\x6c\x6c\x3b\x20\x69\x66\x20\x5c\x28" \
+"\x20\x61\x6e\x64\x20\x5c\x29\x20\x61\x72\x65\x20\x6e\x6f\x74\x20" \
+"\x75\x73\x65\x64\x2c\x20\x74\x68\x65\x79\x20\x72\x65\x74\x75\x72" \
+"\x6e\x20\x74\x68\x65\x20\x6e\x75\x6d\x62\x65\x72\x0a\x6f\x66\x20" \
+"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x6d\x61\x74\x63\x68" \
+"\x65\x64\x20\x6f\x72\x20\x30\x2e\x00\x0a\x0a\x52\x65\x74\x75\x72" \
+"\x6e\x20\x61\x6e\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x20\x6f" \
+"\x66\x20\x46\x41\x4c\x53\x45\x20\x28\x31\x29\x00\x2d\x73\x20\x49" \
+"\x4d\x47\x46\x49\x4c\x45\x20\x5b\x2d\x63\x5d\x20\x5b\x2d\x64\x20" \
+"\x44\x45\x56\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x49\x46\x49\x4c\x45" \
+"\x5d\x20\x5b\x2d\x66\x20\x43\x4d\x44\x5d\x0a\x0a\x09\x2d\x73\x09" \
+"\x49\x6d\x61\x67\x65\x0a\x09\x2d\x63\x09\x48\x69\x64\x65\x20\x63" \
+"\x75\x72\x73\x6f\x72\x0a\x09\x2d\x64\x09\x46\x72\x61\x6d\x65\x62" \
+"\x75\x66\x66\x65\x72\x20\x64\x65\x76\x69\x63\x65\x20\x28\x64\x65" \
+"\x66\x61\x75\x6c\x74\x20\x2f\x64\x65\x76\x2f\x66\x62\x30\x29\x0a" \
+"\x09\x2d\x69\x09\x43\x6f\x6e\x66\x69\x67\x20\x66\x69\x6c\x65\x20" \
+"\x28\x76\x61\x72\x3d\x76\x61\x6c\x75\x65\x29\x3a\x0a\x09\x09\x09" \
+"\x42\x41\x52\x5f\x4c\x45\x46\x54\x2c\x42\x41\x52\x5f\x54\x4f\x50" \
+"\x2c\x42\x41\x52\x5f\x57\x49\x44\x54\x48\x2c\x42\x41\x52\x5f\x48" \
+"\x45\x49\x47\x48\x54\x0a\x09\x09\x09\x42\x41\x52\x5f\x52\x2c\x42" \
+"\x41\x52\x5f\x47\x2c\x42\x41\x52\x5f\x42\x0a\x09\x2d\x66\x09\x43" \
+"\x6f\x6e\x74\x72\x6f\x6c\x20\x70\x69\x70\x65\x20\x28\x65\x6c\x73" \
+"\x65\x20\x65\x78\x69\x74\x20\x61\x66\x74\x65\x72\x20\x64\x72\x61" \
+"\x77\x69\x6e\x67\x20\x69\x6d\x61\x67\x65\x29\x0a\x09\x09\x09\x63" \
+"\x6f\x6d\x6d\x61\x6e\x64\x73\x3a\x20\x27\x4e\x4e\x27\x20\x28\x25" \
+"\x20\x66\x6f\x72\x20\x70\x72\x6f\x67\x72\x65\x73\x73\x20\x62\x61" \
+"\x72\x29\x20\x6f\x72\x20\x27\x65\x78\x69\x74\x27\x00\x5b\x2d\x75" \
+"\x6c\x5d\x20\x5b\x2d\x43\x20\x43\x59\x4c\x49\x4e\x44\x45\x52\x53" \
+"\x5d\x20\x5b\x2d\x48\x20\x48\x45\x41\x44\x53\x5d\x20\x5b\x2d\x53" \
+"\x20\x53\x45\x43\x54\x4f\x52\x53\x5d\x20\x5b\x2d\x62\x20\x53\x53" \
+"\x5a\x5d\x20\x44\x49\x53\x4b\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20" \
+"\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c\x65\x0a" \
+"\x0a\x09\x2d\x75\x09\x09\x53\x74\x61\x72\x74\x20\x61\x6e\x64\x20" \
+"\x45\x6e\x64\x20\x61\x72\x65\x20\x69\x6e\x20\x73\x65\x63\x74\x6f" \
+"\x72\x73\x20\x28\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x63" \
+"\x79\x6c\x69\x6e\x64\x65\x72\x73\x29\x0a\x09\x2d\x6c\x09\x09\x53" \
+"\x68\x6f\x77\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74\x61" \
+"\x62\x6c\x65\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x44\x49\x53" \
+"\x4b\x2c\x20\x74\x68\x65\x6e\x20\x65\x78\x69\x74\x0a\x09\x2d\x62" \
+"\x20\x32\x30\x34\x38\x09\x09\x28\x66\x6f\x72\x20\x63\x65\x72\x74" \
+"\x61\x69\x6e\x20\x4d\x4f\x20\x64\x69\x73\x6b\x73\x29\x20\x75\x73" \
+"\x65\x20\x32\x30\x34\x38\x2d\x62\x79\x74\x65\x20\x73\x65\x63\x74" \
+"\x6f\x72\x73\x0a\x09\x2d\x43\x20\x43\x59\x4c\x49\x4e\x44\x45\x52" \
+"\x53\x09\x53\x65\x74\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
+"\x63\x79\x6c\x69\x6e\x64\x65\x72\x73\x2f\x68\x65\x61\x64\x73\x2f" \
+"\x73\x65\x63\x74\x6f\x72\x73\x0a\x09\x2d\x48\x20\x48\x45\x41\x44" \
+"\x53\x0a\x09\x2d\x53\x20\x53\x45\x43\x54\x4f\x52\x53\x00\x08\x00" \
+"\x5b\x50\x41\x54\x48\x5d\x2e\x2e\x2e\x20\x5b\x4f\x50\x54\x49\x4f" \
+"\x4e\x53\x5d\x20\x5b\x41\x43\x54\x49\x4f\x4e\x53\x5d\x0a\x0a\x53" \
+"\x65\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x66\x69\x6c\x65\x73\x20" \
+"\x61\x6e\x64\x20\x70\x65\x72\x66\x6f\x72\x6d\x20\x61\x63\x74\x69" \
+"\x6f\x6e\x73\x20\x6f\x6e\x20\x74\x68\x65\x6d\x2e\x0a\x46\x69\x72" \
+"\x73\x74\x20\x66\x61\x69\x6c\x65\x64\x20\x61\x63\x74\x69\x6f\x6e" \
+"\x20\x73\x74\x6f\x70\x73\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e" \
+"\x67\x20\x6f\x66\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x66\x69\x6c" \
+"\x65\x2e\x0a\x44\x65\x66\x61\x75\x6c\x74\x73\x3a\x20\x50\x41\x54" \
+"\x48\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x64\x69\x72" \
+"\x65\x63\x74\x6f\x72\x79\x2c\x20\x61\x63\x74\x69\x6f\x6e\x20\x69" \
+"\x73\x20\x27\x2d\x70\x72\x69\x6e\x74\x27\x0a\x0a\x09\x2d\x66\x6f" \
+"\x6c\x6c\x6f\x77\x09\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d" \
+"\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x78\x64\x65\x76\x09\x09\x44\x6f" \
+"\x6e\x27\x74\x20\x64\x65\x73\x63\x65\x6e\x64\x20\x64\x69\x72\x65" \
+"\x63\x74\x6f\x72\x69\x65\x73\x20\x6f\x6e\x20\x6f\x74\x68\x65\x72" \
+"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x6d" \
+"\x61\x78\x64\x65\x70\x74\x68\x20\x4e\x09\x44\x65\x73\x63\x65\x6e" \
+"\x64\x20\x61\x74\x20\x6d\x6f\x73\x74\x20\x4e\x20\x6c\x65\x76\x65" \
+"\x6c\x73\x2e\x20\x2d\x6d\x61\x78\x64\x65\x70\x74\x68\x20\x30\x20" \
+"\x61\x70\x70\x6c\x69\x65\x73\x0a\x09\x09\x09\x61\x63\x74\x69\x6f" \
+"\x6e\x73\x20\x74\x6f\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69" \
+"\x6e\x65\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x20\x6f\x6e\x6c" \
+"\x79\x0a\x09\x2d\x6d\x69\x6e\x64\x65\x70\x74\x68\x20\x4e\x09\x44" \
+"\x6f\x6e\x27\x74\x20\x61\x63\x74\x20\x6f\x6e\x20\x66\x69\x72\x73" \
+"\x74\x20\x4e\x20\x6c\x65\x76\x65\x6c\x73\x0a\x09\x2d\x64\x65\x70" \
+"\x74\x68\x09\x09\x41\x63\x74\x20\x6f\x6e\x20\x64\x69\x72\x65\x63" \
+"\x74\x6f\x72\x79\x20\x2a\x61\x66\x74\x65\x72\x2a\x20\x74\x72\x61" \
+"\x76\x65\x72\x73\x69\x6e\x67\x20\x69\x74\x0a\x0a\x41\x63\x74\x69" \
+"\x6f\x6e\x73\x3a\x0a\x09\x28\x20\x41\x43\x54\x49\x4f\x4e\x53\x20" \
+"\x29\x09\x47\x72\x6f\x75\x70\x20\x61\x63\x74\x69\x6f\x6e\x73\x20" \
+"\x66\x6f\x72\x20\x2d\x6f\x20\x2f\x20\x2d\x61\x0a\x09\x21\x20\x41" \
+"\x43\x54\x09\x09\x49\x6e\x76\x65\x72\x74\x20\x41\x43\x54\x27\x73" \
+"\x20\x73\x75\x63\x63\x65\x73\x73\x2f\x66\x61\x69\x6c\x75\x72\x65" \
+"\x0a\x09\x41\x43\x54\x31\x20\x5b\x2d\x61\x5d\x20\x41\x43\x54\x32" \
+"\x09\x49\x66\x20\x41\x43\x54\x31\x20\x66\x61\x69\x6c\x73\x2c\x20" \
+"\x73\x74\x6f\x70\x2c\x20\x65\x6c\x73\x65\x20\x64\x6f\x20\x41\x43" \
+"\x54\x32\x0a\x09\x41\x43\x54\x31\x20\x2d\x6f\x20\x41\x43\x54\x32" \
+"\x09\x49\x66\x20\x41\x43\x54\x31\x20\x73\x75\x63\x63\x65\x65\x64" \
+"\x73\x2c\x20\x73\x74\x6f\x70\x2c\x20\x65\x6c\x73\x65\x20\x64\x6f" \
+"\x20\x41\x43\x54\x32\x0a\x09\x09\x09\x4e\x6f\x74\x65\x3a\x20\x2d" \
+"\x61\x20\x68\x61\x73\x20\x68\x69\x67\x68\x65\x72\x20\x70\x72\x69" \
+"\x6f\x72\x69\x74\x79\x20\x74\x68\x61\x6e\x20\x2d\x6f\x0a\x09\x2d" \
+"\x6e\x61\x6d\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74" \
+"\x63\x68\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x77\x2f" \
+"\x6f\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x61\x6d\x65" \
+"\x29\x20\x74\x6f\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x69" \
+"\x6e\x61\x6d\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x43\x61\x73" \
+"\x65\x20\x69\x6e\x73\x65\x6e\x73\x69\x74\x69\x76\x65\x20\x2d\x6e" \
+"\x61\x6d\x65\x0a\x09\x2d\x70\x61\x74\x68\x20\x50\x41\x54\x54\x45" \
+"\x52\x4e\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x74\x68\x20\x74\x6f" \
+"\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x69\x70\x61\x74\x68" \
+"\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x43\x61\x73\x65\x20\x69\x6e" \
+"\x73\x65\x6e\x73\x69\x74\x69\x76\x65\x20\x2d\x70\x61\x74\x68\x0a" \
+"\x09\x2d\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x09" \
+"\x4d\x61\x74\x63\x68\x20\x70\x61\x74\x68\x20\x74\x6f\x20\x72\x65" \
+"\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x74\x79" \
+"\x70\x65\x20\x58\x09\x09\x46\x69\x6c\x65\x20\x74\x79\x70\x65\x20" \
+"\x69\x73\x20\x58\x20\x28\x6f\x6e\x65\x20\x6f\x66\x3a\x20\x66\x2c" \
+"\x64\x2c\x6c\x2c\x62\x2c\x63\x2c\x2e\x2e\x2e\x29\x0a\x09\x2d\x70" \
+"\x65\x72\x6d\x20\x4d\x41\x53\x4b\x09\x41\x74\x20\x6c\x65\x61\x73" \
+"\x74\x20\x6f\x6e\x65\x20\x6d\x61\x73\x6b\x20\x62\x69\x74\x20\x28" \
+"\x2b\x4d\x41\x53\x4b\x29\x2c\x20\x61\x6c\x6c\x20\x62\x69\x74\x73" \
+"\x20\x28\x2d\x4d\x41\x53\x4b\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20" \
+"\x65\x78\x61\x63\x74\x6c\x79\x20\x4d\x41\x53\x4b\x20\x62\x69\x74" \
+"\x73\x20\x61\x72\x65\x20\x73\x65\x74\x20\x69\x6e\x20\x66\x69\x6c" \
+"\x65\x27\x73\x20\x6d\x6f\x64\x65\x0a\x09\x2d\x6d\x74\x69\x6d\x65" \
+"\x20\x44\x41\x59\x53\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x67" \
+"\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x28\x2b\x4e\x29" \
+"\x2c\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x28\x2d\x4e\x29" \
+"\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20" \
+"\x4e\x20\x64\x61\x79\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x70\x61" \
+"\x73\x74\x0a\x09\x2d\x6d\x6d\x69\x6e\x20\x4d\x49\x4e\x53\x09\x6d" \
+"\x74\x69\x6d\x65\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20" \
+"\x74\x68\x61\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20" \
+"\x74\x68\x61\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72" \
+"\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x4e\x20\x6d\x69\x6e\x75\x74" \
+"\x65\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x70\x61\x73\x74\x0a\x09" \
+"\x2d\x6e\x65\x77\x65\x72\x20\x46\x49\x4c\x45\x09\x6d\x74\x69\x6d" \
+"\x65\x20\x69\x73\x20\x6d\x6f\x72\x65\x20\x72\x65\x63\x65\x6e\x74" \
+"\x20\x74\x68\x61\x6e\x20\x46\x49\x4c\x45\x27\x73\x0a\x09\x2d\x75" \
+"\x73\x65\x72\x20\x4e\x41\x4d\x45\x2f\x49\x44\x09\x46\x69\x6c\x65" \
+"\x20\x69\x73\x20\x6f\x77\x6e\x65\x64\x20\x62\x79\x20\x67\x69\x76" \
+"\x65\x6e\x20\x75\x73\x65\x72\x0a\x09\x2d\x67\x72\x6f\x75\x70\x20" \
+"\x4e\x41\x4d\x45\x2f\x49\x44\x09\x46\x69\x6c\x65\x20\x69\x73\x20" \
+"\x6f\x77\x6e\x65\x64\x20\x62\x79\x20\x67\x69\x76\x65\x6e\x20\x67" \
+"\x72\x6f\x75\x70\x0a\x09\x2d\x73\x69\x7a\x65\x20\x4e\x5b\x62\x63" \
+"\x6b\x5d\x09\x46\x69\x6c\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20" \
+"\x4e\x20\x28\x63\x3a\x62\x79\x74\x65\x73\x2c\x6b\x3a\x6b\x62\x79" \
+"\x74\x65\x73\x2c\x62\x3a\x35\x31\x32\x20\x62\x79\x74\x65\x73\x28" \
+"\x64\x65\x66\x2e\x29\x29\x0a\x09\x09\x09\x2b\x2f\x2d\x4e\x3a\x20" \
+"\x66\x69\x6c\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20\x62\x69\x67" \
+"\x67\x65\x72\x2f\x73\x6d\x61\x6c\x6c\x65\x72\x20\x74\x68\x61\x6e" \
+"\x20\x4e\x0a\x09\x2d\x6c\x69\x6e\x6b\x73\x20\x4e\x09\x4e\x75\x6d" \
+"\x62\x65\x72\x20\x6f\x66\x20\x6c\x69\x6e\x6b\x73\x20\x69\x73\x20" \
+"\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x28\x2b\x4e" \
+"\x29\x2c\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x28\x2d\x4e" \
+"\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79" \
+"\x20\x4e\x0a\x09\x2d\x70\x72\x75\x6e\x65\x09\x09\x49\x66\x20\x63" \
+"\x75\x72\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x64" \
+"\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x64\x6f\x6e\x27\x74\x20" \
+"\x64\x65\x73\x63\x65\x6e\x64\x20\x69\x6e\x74\x6f\x20\x69\x74\x0a" \
+"\x49\x66\x20\x6e\x6f\x6e\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x66" \
+"\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x63\x74\x69\x6f\x6e\x73" \
+"\x20\x69\x73\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x2c\x20\x2d" \
+"\x70\x72\x69\x6e\x74\x20\x69\x73\x20\x61\x73\x73\x75\x6d\x65\x64" \
+"\x0a\x09\x2d\x70\x72\x69\x6e\x74\x09\x09\x50\x72\x69\x6e\x74\x20" \
+"\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x72\x69\x6e" \
+"\x74\x30\x09\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x20\x6e" \
+"\x61\x6d\x65\x2c\x20\x4e\x55\x4c\x20\x74\x65\x72\x6d\x69\x6e\x61" \
+"\x74\x65\x64\x0a\x09\x2d\x65\x78\x65\x63\x20\x43\x4d\x44\x20\x41" \
+"\x52\x47\x20\x3b\x09\x52\x75\x6e\x20\x43\x4d\x44\x20\x77\x69\x74" \
+"\x68\x20\x61\x6c\x6c\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x73\x20" \
+"\x6f\x66\x20\x7b\x7d\x20\x72\x65\x70\x6c\x61\x63\x65\x64\x20\x62" \
+"\x79\x0a\x09\x09\x09\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x2e\x20" \
+"\x46\x61\x69\x6c\x73\x20\x69\x66\x20\x43\x4d\x44\x20\x65\x78\x69" \
+"\x74\x73\x20\x77\x69\x74\x68\x20\x6e\x6f\x6e\x7a\x65\x72\x6f\x00" \
+"\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x20\x4f\x46\x46\x53\x45" \
+"\x54\x20\x53\x45\x43\x54\x4f\x52\x53\x0a\x0a\x4c\x6f\x63\x6b\x20" \
+"\x70\x61\x72\x74\x20\x6f\x72\x20\x61\x6c\x6c\x20\x6f\x66\x20\x61" \
+"\x6e\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x2e\x20\x49\x66" \
+"\x20\x53\x45\x43\x54\x4f\x52\x53\x20\x69\x73\x20\x2d\x31\x2c\x20" \
+"\x74\x68\x65\x6e\x20\x61\x6c\x6c\x20\x73\x65\x63\x74\x6f\x72\x73" \
+"\x0a\x77\x69\x6c\x6c\x20\x62\x65\x20\x6c\x6f\x63\x6b\x65\x64\x2c" \
+"\x20\x72\x65\x67\x61\x72\x64\x6c\x65\x73\x73\x20\x6f\x66\x20\x74" \
+"\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x4f\x46\x46\x53" \
+"\x45\x54\x00\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x0a\x0a\x55" \
+"\x6e\x6c\x6f\x63\x6b\x20\x61\x6e\x20\x4d\x54\x44\x20\x64\x65\x76" \
+"\x69\x63\x65\x00\x2d\x76\x20\x46\x49\x4c\x45\x20\x4d\x54\x44\x5f" \
+"\x44\x45\x56\x49\x43\x45\x0a\x0a\x43\x6f\x70\x79\x20\x61\x6e\x20" \
+"\x69\x6d\x61\x67\x65\x20\x74\x6f\x20\x4d\x54\x44\x20\x64\x65\x76" \
+"\x69\x63\x65\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65" \
+"\x00\x5b\x2d\x73\x78\x75\x6e\x5d\x20\x46\x44\x7c\x7b\x46\x49\x4c" \
+"\x45\x20\x5b\x2d\x63\x5d\x20\x50\x52\x4f\x47\x20\x41\x52\x47\x53" \
+"\x7d\x0a\x0a\x5b\x55\x6e\x5d\x6c\x6f\x63\x6b\x20\x66\x69\x6c\x65" \
+"\x20\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x2c\x20\x6f\x72\x20" \
+"\x6c\x6f\x63\x6b\x20\x46\x49\x4c\x45\x2c\x20\x72\x75\x6e\x20\x50" \
+"\x52\x4f\x47\x0a\x0a\x09\x2d\x73\x09\x53\x68\x61\x72\x65\x64\x20" \
+"\x6c\x6f\x63\x6b\x0a\x09\x2d\x78\x09\x45\x78\x63\x6c\x75\x73\x69" \
+"\x76\x65\x20\x6c\x6f\x63\x6b\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
+"\x29\x0a\x09\x2d\x75\x09\x55\x6e\x6c\x6f\x63\x6b\x20\x46\x44\x0a" \
+"\x09\x2d\x6e\x09\x46\x61\x69\x6c\x20\x72\x61\x74\x68\x65\x72\x20" \
+"\x74\x68\x61\x6e\x20\x77\x61\x69\x74\x00\x5b\x2d\x62\x73\x5d\x20" \
+"\x5b\x2d\x77\x20\x57\x49\x44\x54\x48\x5d\x20\x5b\x46\x49\x4c\x45" \
+"\x5d\x2e\x2e\x2e\x0a\x0a\x57\x72\x61\x70\x20\x69\x6e\x70\x75\x74" \
+"\x20\x6c\x69\x6e\x65\x73\x20\x69\x6e\x20\x65\x61\x63\x68\x20\x46" \
+"\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x2c\x20" \
+"\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
+"\x74\x0a\x0a\x09\x2d\x62\x09\x43\x6f\x75\x6e\x74\x20\x62\x79\x74" \
+"\x65\x73\x20\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61\x6e\x20\x63" \
+"\x6f\x6c\x75\x6d\x6e\x73\x0a\x09\x2d\x73\x09\x42\x72\x65\x61\x6b" \
+"\x20\x61\x74\x20\x73\x70\x61\x63\x65\x73\x0a\x09\x2d\x77\x09\x55" \
+"\x73\x65\x20\x57\x49\x44\x54\x48\x20\x63\x6f\x6c\x75\x6d\x6e\x73" \
+"\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x38\x30\x00\x0a" \
+"\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x61\x6d\x6f" \
+"\x75\x6e\x74\x20\x6f\x66\x20\x66\x72\x65\x65\x20\x61\x6e\x64\x20" \
+"\x75\x73\x65\x64\x20\x73\x79\x73\x74\x65\x6d\x20\x6d\x65\x6d\x6f" \
+"\x72\x79\x00\x44\x45\x56\x49\x43\x45\x0a\x0a\x46\x72\x65\x65\x20" \
+"\x61\x6c\x6c\x20\x6d\x65\x6d\x6f\x72\x79\x20\x75\x73\x65\x64\x20" \
+"\x62\x79\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64" \
+"\x20\x72\x61\x6d\x64\x69\x73\x6b\x00\x5b\x2d\x64\x5d\x20\x46\x49" \
+"\x4c\x45\x2e\x2e\x2e\x0a\x0a\x57\x72\x69\x74\x65\x20\x66\x69\x6c" \
+"\x65\x73\x27\x20\x62\x75\x66\x66\x65\x72\x65\x64\x20\x62\x6c\x6f" \
+"\x63\x6b\x73\x20\x74\x6f\x20\x64\x69\x73\x6b\x0a\x0a\x09\x2d\x64" \
+"\x09\x41\x76\x6f\x69\x64\x20\x73\x79\x6e\x63\x69\x6e\x67\x20\x6d" \
+"\x65\x74\x61\x64\x61\x74\x61\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
+"\x5d\x20\x48\x4f\x53\x54\x20\x5b\x4c\x4f\x43\x41\x4c\x5f\x46\x49" \
+"\x4c\x45\x5d\x20\x52\x45\x4d\x4f\x54\x45\x5f\x46\x49\x4c\x45\x0a" \
+"\x0a\x44\x6f\x77\x6e\x6c\x6f\x61\x64\x20\x61\x20\x66\x69\x6c\x65" \
+"\x20\x76\x69\x61\x20\x46\x54\x50\x0a\x0a\x09\x2d\x63\x2c\x2d\x2d" \
+"\x63\x6f\x6e\x74\x69\x6e\x75\x65\x09\x09\x43\x6f\x6e\x74\x69\x6e" \
+"\x75\x65\x20\x70\x72\x65\x76\x69\x6f\x75\x73\x20\x74\x72\x61\x6e" \
+"\x73\x66\x65\x72\x0a\x09\x2d\x76\x2c\x2d\x2d\x76\x65\x72\x62\x6f" \
+"\x73\x65\x09\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x2c" \
+"\x2d\x2d\x75\x73\x65\x72\x6e\x61\x6d\x65\x20\x55\x53\x45\x52\x09" \
+"\x55\x73\x65\x72\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x2c\x2d\x2d\x70" \
+"\x61\x73\x73\x77\x6f\x72\x64\x20\x50\x41\x53\x53\x09\x50\x61\x73" \
"\x73\x77\x6f\x72\x64\x0a\x09\x2d\x50\x2c\x2d\x2d\x70\x6f\x72\x74" \
-"\x09\x50\x6f\x72\x74\x20\x6e\x75\x6d\x62\x65\x72\x00\x5b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x48\x4f\x53\x54\x20\x5b\x52\x45\x4d" \
-"\x4f\x54\x45\x5f\x46\x49\x4c\x45\x5d\x20\x4c\x4f\x43\x41\x4c\x5f" \
-"\x46\x49\x4c\x45\x0a\x0a\x53\x74\x6f\x72\x65\x20\x61\x20\x6c\x6f" \
-"\x63\x61\x6c\x20\x66\x69\x6c\x65\x20\x6f\x6e\x20\x61\x20\x72\x65" \
-"\x6d\x6f\x74\x65\x20\x6d\x61\x63\x68\x69\x6e\x65\x20\x76\x69\x61" \
-"\x20\x46\x54\x50\x0a\x0a\x09\x2d\x76\x2c\x2d\x2d\x76\x65\x72\x62" \
-"\x6f\x73\x65\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x2c" \
-"\x2d\x2d\x75\x73\x65\x72\x6e\x61\x6d\x65\x09\x55\x73\x65\x72\x6e" \
-"\x61\x6d\x65\x0a\x09\x2d\x70\x2c\x2d\x2d\x70\x61\x73\x73\x77\x6f" \
-"\x72\x64\x09\x50\x61\x73\x73\x77\x6f\x72\x64\x0a\x09\x2d\x50\x2c" \
-"\x2d\x2d\x70\x6f\x72\x74\x09\x50\x6f\x72\x74\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c" \
-"\x45\x20\x6f\x72\x20\x50\x4f\x52\x54\x2f\x50\x52\x4f\x54\x4f\x0a" \
-"\x0a\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20" \
-"\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20\x46\x49\x4c\x45\x73\x20" \
-"\x6f\x72\x20\x50\x4f\x52\x54\x73\x0a\x0a\x09\x2d\x6d\x09\x46\x69" \
-"\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x77\x68\x69" \
-"\x63\x68\x20\x75\x73\x65\x20\x73\x61\x6d\x65\x20\x66\x73\x20\x61" \
-"\x73\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x34\x2c\x2d\x36\x09\x53" \
-"\x65\x61\x72\x63\x68\x20\x6f\x6e\x6c\x79\x20\x49\x50\x76\x34\x2f" \
-"\x49\x50\x76\x36\x20\x73\x70\x61\x63\x65\x0a\x09\x2d\x73\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x50\x49\x44" \
-"\x73\x0a\x09\x2d\x6b\x09\x4b\x69\x6c\x6c\x20\x66\x6f\x75\x6e\x64" \
-"\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x09\x2d\x53\x49\x47" \
-"\x4e\x41\x4c\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x6f\x20\x73\x65" \
-"\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x4b\x49\x4c" \
-"\x4c\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x0a\x0a\x09\x2d" \
-"\x61\x2c\x2d\x2d\x61\x6c\x74\x65\x72\x6e\x61\x74\x69\x76\x65\x09" \
-"\x09\x41\x6c\x6c\x6f\x77\x20\x6c\x6f\x6e\x67\x20\x6f\x70\x74\x69" \
-"\x6f\x6e\x73\x20\x73\x74\x61\x72\x74\x69\x6e\x67\x20\x77\x69\x74" \
-"\x68\x20\x73\x69\x6e\x67\x6c\x65\x20\x2d\x0a\x09\x2d\x6c\x2c\x2d" \
-"\x2d\x6c\x6f\x6e\x67\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x6c\x6f\x6e" \
-"\x67\x6f\x70\x74\x73\x09\x4c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f" \
-"\x6e\x73\x20\x74\x6f\x20\x62\x65\x20\x72\x65\x63\x6f\x67\x6e\x69" \
-"\x7a\x65\x64\x0a\x09\x2d\x6e\x2c\x2d\x2d\x6e\x61\x6d\x65\x3d\x70" \
-"\x72\x6f\x67\x6e\x61\x6d\x65\x09\x09\x54\x68\x65\x20\x6e\x61\x6d" \
-"\x65\x20\x75\x6e\x64\x65\x72\x20\x77\x68\x69\x63\x68\x20\x65\x72" \
-"\x72\x6f\x72\x73\x20\x61\x72\x65\x20\x72\x65\x70\x6f\x72\x74\x65" \
-"\x64\x0a\x09\x2d\x6f\x2c\x2d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x3d" \
-"\x6f\x70\x74\x73\x74\x72\x69\x6e\x67\x09\x09\x53\x68\x6f\x72\x74" \
-"\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x62\x65\x20\x72" \
-"\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\x0a\x09\x2d\x71\x2c\x2d\x2d" \
-"\x71\x75\x69\x65\x74\x09\x09\x09\x44\x69\x73\x61\x62\x6c\x65\x20" \
-"\x65\x72\x72\x6f\x72\x20\x72\x65\x70\x6f\x72\x74\x69\x6e\x67\x20" \
-"\x62\x79\x20\x67\x65\x74\x6f\x70\x74\x28\x33\x29\x0a\x09\x2d\x51" \
-"\x2c\x2d\x2d\x71\x75\x69\x65\x74\x2d\x6f\x75\x74\x70\x75\x74\x09" \
-"\x09\x4e\x6f\x20\x6e\x6f\x72\x6d\x61\x6c\x20\x6f\x75\x74\x70\x75" \
-"\x74\x0a\x09\x2d\x73\x2c\x2d\x2d\x73\x68\x65\x6c\x6c\x3d\x73\x68" \
-"\x65\x6c\x6c\x09\x09\x53\x65\x74\x20\x73\x68\x65\x6c\x6c\x20\x71" \
-"\x75\x6f\x74\x69\x6e\x67\x20\x63\x6f\x6e\x76\x65\x6e\x74\x69\x6f" \
-"\x6e\x73\x0a\x09\x2d\x54\x2c\x2d\x2d\x74\x65\x73\x74\x09\x09\x09" \
-"\x54\x65\x73\x74\x20\x66\x6f\x72\x20\x67\x65\x74\x6f\x70\x74\x28" \
-"\x31\x29\x20\x76\x65\x72\x73\x69\x6f\x6e\x0a\x09\x2d\x75\x2c\x2d" \
-"\x2d\x75\x6e\x71\x75\x6f\x74\x65\x64\x09\x09\x09\x44\x6f\x6e\x27" \
-"\x74\x20\x71\x75\x6f\x74\x65\x20\x74\x68\x65\x20\x6f\x75\x74\x70" \
-"\x75\x74\x00\x5b\x2d\x48\x68\x6e\x6c\x4c\x6f\x71\x76\x73\x72\x69" \
-"\x77\x46\x45\x5d\x20\x5b\x2d\x6d\x20\x4e\x5d\x20\x5b\x2d\x41\x2f" \
-"\x42\x2f\x43\x20\x4e\x5d\x20\x50\x41\x54\x54\x45\x52\x4e\x2f\x2d" \
-"\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x2e\x2e\x2e\x2f\x2d\x66\x20" \
-"\x46\x49\x4c\x45\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x53\x65\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x50\x41\x54\x54\x45" \
-"\x52\x4e\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20" \
-"\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x48\x09\x41\x64\x64\x20" \
-"\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72\x65\x66" \
-"\x69\x78\x0a\x09\x2d\x68\x09\x44\x6f\x20\x6e\x6f\x74\x20\x61\x64" \
-"\x64\x20\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72" \
-"\x65\x66\x69\x78\x0a\x09\x2d\x6e\x09\x41\x64\x64\x20\x27\x6c\x69" \
-"\x6e\x65\x5f\x6e\x6f\x3a\x27\x20\x70\x72\x65\x66\x69\x78\x0a\x09" \
-"\x2d\x6c\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6e\x61\x6d" \
-"\x65\x73\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x74\x68\x61\x74" \
-"\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x4c\x09\x53\x68\x6f\x77\x20" \
-"\x6f\x6e\x6c\x79\x20\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x66\x69" \
-"\x6c\x65\x73\x20\x74\x68\x61\x74\x20\x64\x6f\x6e\x27\x74\x20\x6d" \
-"\x61\x74\x63\x68\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20\x6f\x6e" \
-"\x6c\x79\x20\x63\x6f\x75\x6e\x74\x20\x6f\x66\x20\x6d\x61\x74\x63" \
-"\x68\x69\x6e\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x6f\x09\x53" \
-"\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65\x20\x6d\x61\x74" \
-"\x63\x68\x69\x6e\x67\x20\x70\x61\x72\x74\x20\x6f\x66\x20\x6c\x69" \
-"\x6e\x65\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x2e\x20\x52\x65" \
-"\x74\x75\x72\x6e\x20\x30\x20\x69\x66\x20\x50\x41\x54\x54\x45\x52" \
-"\x4e\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x31\x20\x6f\x74" \
-"\x68\x65\x72\x77\x69\x73\x65\x0a\x09\x2d\x76\x09\x53\x65\x6c\x65" \
-"\x63\x74\x20\x6e\x6f\x6e\x2d\x6d\x61\x74\x63\x68\x69\x6e\x67\x20" \
-"\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x73\x09\x53\x75\x70\x70\x72\x65" \
-"\x73\x73\x20\x6f\x70\x65\x6e\x20\x61\x6e\x64\x20\x72\x65\x61\x64" \
-"\x20\x65\x72\x72\x6f\x72\x73\x0a\x09\x2d\x72\x09\x52\x65\x63\x75" \
-"\x72\x73\x65\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20\x63" \
-"\x61\x73\x65\x0a\x09\x2d\x77\x09\x4d\x61\x74\x63\x68\x20\x77\x68" \
-"\x6f\x6c\x65\x20\x77\x6f\x72\x64\x73\x20\x6f\x6e\x6c\x79\x0a\x09" \
-"\x2d\x46\x09\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x61\x20" \
-"\x6c\x69\x74\x65\x72\x61\x6c\x20\x28\x6e\x6f\x74\x20\x72\x65\x67" \
-"\x65\x78\x70\x29\x0a\x09\x2d\x45\x09\x50\x41\x54\x54\x45\x52\x4e" \
-"\x20\x69\x73\x20\x61\x6e\x20\x65\x78\x74\x65\x6e\x64\x65\x64\x20" \
-"\x72\x65\x67\x65\x78\x70\x0a\x09\x2d\x6d\x20\x4e\x09\x4d\x61\x74" \
-"\x63\x68\x20\x75\x70\x20\x74\x6f\x20\x4e\x20\x74\x69\x6d\x65\x73" \
-"\x20\x70\x65\x72\x20\x66\x69\x6c\x65\x0a\x09\x2d\x41\x20\x4e\x09" \
-"\x50\x72\x69\x6e\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66" \
-"\x20\x74\x72\x61\x69\x6c\x69\x6e\x67\x20\x63\x6f\x6e\x74\x65\x78" \
-"\x74\x0a\x09\x2d\x42\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x4e\x20" \
-"\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x6c\x65\x61\x64\x69\x6e\x67" \
-"\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a\x09\x2d\x43\x20\x4e\x09\x53" \
-"\x61\x6d\x65\x20\x61\x73\x20\x27\x2d\x41\x20\x4e\x20\x2d\x42\x20" \
-"\x4e\x27\x0a\x09\x2d\x65\x20\x50\x54\x52\x4e\x09\x50\x61\x74\x74" \
-"\x65\x72\x6e\x20\x74\x6f\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x66" \
-"\x20\x46\x49\x4c\x45\x09\x52\x65\x61\x64\x20\x70\x61\x74\x74\x65" \
-"\x72\x6e\x20\x66\x72\x6f\x6d\x20\x66\x69\x6c\x65\x00\x5b\x55\x53" \
-"\x45\x52\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x67" \
-"\x72\x6f\x75\x70\x20\x6d\x65\x6d\x62\x65\x72\x73\x68\x69\x70\x73" \
-"\x20\x6f\x66\x20\x55\x53\x45\x52\x20\x6f\x72\x20\x66\x6f\x72\x20" \
-"\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x00\x5b\x2d\x63\x66\x74\x5d\x20\x5b\x46\x49\x4c\x45" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e" \
-"\x29\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20" \
+"\x20\x4e\x55\x4d\x09\x09\x50\x6f\x72\x74\x00\x5b\x4f\x50\x54\x49" \
+"\x4f\x4e\x53\x5d\x20\x48\x4f\x53\x54\x20\x5b\x52\x45\x4d\x4f\x54" \
+"\x45\x5f\x46\x49\x4c\x45\x5d\x20\x4c\x4f\x43\x41\x4c\x5f\x46\x49" \
+"\x4c\x45\x0a\x0a\x55\x70\x6c\x6f\x61\x64\x20\x61\x20\x66\x69\x6c" \
+"\x65\x20\x74\x6f\x20\x61\x20\x46\x54\x50\x20\x73\x65\x72\x76\x65" \
+"\x72\x0a\x0a\x09\x2d\x76\x2c\x2d\x2d\x76\x65\x72\x62\x6f\x73\x65" \
+"\x09\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x2c\x2d\x2d" \
+"\x75\x73\x65\x72\x6e\x61\x6d\x65\x20\x55\x53\x45\x52\x09\x55\x73" \
+"\x65\x72\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x2c\x2d\x2d\x70\x61\x73" \
+"\x73\x77\x6f\x72\x64\x20\x50\x41\x53\x53\x09\x50\x61\x73\x73\x77" \
+"\x6f\x72\x64\x0a\x09\x2d\x50\x2c\x2d\x2d\x70\x6f\x72\x74\x20\x4e" \
+"\x55\x4d\x09\x09\x50\x6f\x72\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
+"\x53\x5d\x20\x46\x49\x4c\x45\x20\x6f\x72\x20\x50\x4f\x52\x54\x2f" \
+"\x50\x52\x4f\x54\x4f\x0a\x0a\x46\x69\x6e\x64\x20\x70\x72\x6f\x63" \
+"\x65\x73\x73\x65\x73\x20\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20" \
+"\x46\x49\x4c\x45\x73\x20\x6f\x72\x20\x50\x4f\x52\x54\x73\x0a\x0a" \
+"\x09\x2d\x6d\x09\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73" \
+"\x65\x73\x20\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20\x73\x61\x6d" \
+"\x65\x20\x66\x73\x20\x61\x73\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d" \
+"\x34\x2c\x2d\x36\x09\x53\x65\x61\x72\x63\x68\x20\x6f\x6e\x6c\x79" \
+"\x20\x49\x50\x76\x34\x2f\x49\x50\x76\x36\x20\x73\x70\x61\x63\x65" \
+"\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x64\x69\x73\x70\x6c" \
+"\x61\x79\x20\x50\x49\x44\x73\x0a\x09\x2d\x6b\x09\x4b\x69\x6c\x6c" \
+"\x20\x66\x6f\x75\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73" \
+"\x0a\x09\x2d\x53\x49\x47\x4e\x41\x4c\x09\x53\x69\x67\x6e\x61\x6c" \
+"\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c" \
+"\x74\x3a\x20\x4b\x49\x4c\x4c\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
+"\x53\x5d\x20\x5b\x2d\x2d\x5d\x20\x4f\x50\x54\x53\x54\x52\x49\x4e" \
+"\x47\x20\x50\x41\x52\x41\x4d\x53\x0a\x0a\x09\x2d\x61\x2c\x2d\x2d" \
+"\x61\x6c\x74\x65\x72\x6e\x61\x74\x69\x76\x65\x09\x09\x41\x6c\x6c" \
+"\x6f\x77\x20\x6c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20" \
+"\x73\x74\x61\x72\x74\x69\x6e\x67\x20\x77\x69\x74\x68\x20\x73\x69" \
+"\x6e\x67\x6c\x65\x20\x2d\x0a\x09\x2d\x6c\x2c\x2d\x2d\x6c\x6f\x6e" \
+"\x67\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x4c\x4f\x50\x54\x5b\x2c\x2e" \
+"\x2e\x2e\x5d\x09\x4c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73" \
+"\x20\x74\x6f\x20\x62\x65\x20\x72\x65\x63\x6f\x67\x6e\x69\x7a\x65" \
+"\x64\x0a\x09\x2d\x6e\x2c\x2d\x2d\x6e\x61\x6d\x65\x3d\x50\x52\x4f" \
+"\x47\x4e\x41\x4d\x45\x09\x09\x54\x68\x65\x20\x6e\x61\x6d\x65\x20" \
+"\x75\x6e\x64\x65\x72\x20\x77\x68\x69\x63\x68\x20\x65\x72\x72\x6f" \
+"\x72\x73\x20\x61\x72\x65\x20\x72\x65\x70\x6f\x72\x74\x65\x64\x0a" \
+"\x09\x2d\x6f\x2c\x2d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x4f\x50" \
+"\x54\x53\x54\x52\x49\x4e\x47\x09\x09\x53\x68\x6f\x72\x74\x20\x6f" \
+"\x70\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x62\x65\x20\x72\x65\x63" \
+"\x6f\x67\x6e\x69\x7a\x65\x64\x0a\x09\x2d\x71\x2c\x2d\x2d\x71\x75" \
+"\x69\x65\x74\x09\x09\x09\x44\x69\x73\x61\x62\x6c\x65\x20\x65\x72" \
+"\x72\x6f\x72\x20\x72\x65\x70\x6f\x72\x74\x69\x6e\x67\x20\x62\x79" \
+"\x20\x67\x65\x74\x6f\x70\x74\x28\x33\x29\x0a\x09\x2d\x51\x2c\x2d" \
+"\x2d\x71\x75\x69\x65\x74\x2d\x6f\x75\x74\x70\x75\x74\x09\x09\x4e" \
+"\x6f\x20\x6e\x6f\x72\x6d\x61\x6c\x20\x6f\x75\x74\x70\x75\x74\x0a" \
+"\x09\x2d\x73\x2c\x2d\x2d\x73\x68\x65\x6c\x6c\x3d\x53\x48\x45\x4c" \
+"\x4c\x09\x09\x53\x65\x74\x20\x73\x68\x65\x6c\x6c\x20\x71\x75\x6f" \
+"\x74\x69\x6e\x67\x20\x63\x6f\x6e\x76\x65\x6e\x74\x69\x6f\x6e\x73" \
+"\x0a\x09\x2d\x54\x2c\x2d\x2d\x74\x65\x73\x74\x09\x09\x09\x54\x65" \
+"\x73\x74\x20\x66\x6f\x72\x20\x67\x65\x74\x6f\x70\x74\x28\x31\x29" \
+"\x20\x76\x65\x72\x73\x69\x6f\x6e\x0a\x09\x2d\x75\x2c\x2d\x2d\x75" \
+"\x6e\x71\x75\x6f\x74\x65\x64\x09\x09\x09\x44\x6f\x6e\x27\x74\x20" \
+"\x71\x75\x6f\x74\x65\x20\x74\x68\x65\x20\x6f\x75\x74\x70\x75\x74" \
+"\x0a\x0a\x45\x78\x61\x6d\x70\x6c\x65\x3a\x0a\x0a\x4f\x3d\x60\x67" \
+"\x65\x74\x6f\x70\x74\x20\x2d\x6c\x20\x62\x62\x3a\x20\x2d\x2d\x20" \
+"\x61\x62\x3a\x63\x3a\x3a\x20\x22\x24\x40\x22\x60\x20\x7c\x7c\x20" \
+"\x65\x78\x69\x74\x20\x31\x0a\x65\x76\x61\x6c\x20\x73\x65\x74\x20" \
+"\x2d\x2d\x20\x22\x24\x4f\x22\x0a\x77\x68\x69\x6c\x65\x20\x74\x72" \
+"\x75\x65\x3b\x20\x64\x6f\x0a\x09\x63\x61\x73\x65\x20\x22\x24\x31" \
+"\x22\x20\x69\x6e\x0a\x09\x2d\x61\x29\x09\x65\x63\x68\x6f\x20\x41" \
+"\x3b\x20\x73\x68\x69\x66\x74\x3b\x3b\x0a\x09\x2d\x62\x7c\x2d\x2d" \
+"\x62\x62\x29\x20\x65\x63\x68\x6f\x20\x22\x42\x3a\x27\x24\x32\x27" \
+"\x22\x3b\x20\x73\x68\x69\x66\x74\x20\x32\x3b\x3b\x0a\x09\x2d\x63" \
+"\x29\x09\x63\x61\x73\x65\x20\x22\x24\x32\x22\x20\x69\x6e\x0a\x09" \
+"\x09\x22\x22\x29\x09\x65\x63\x68\x6f\x20\x43\x3b\x20\x73\x68\x69" \
+"\x66\x74\x20\x32\x3b\x3b\x0a\x09\x09\x2a\x29\x09\x65\x63\x68\x6f" \
+"\x20\x22\x43\x3a\x27\x24\x32\x27\x22\x3b\x20\x73\x68\x69\x66\x74" \
+"\x20\x32\x3b\x3b\x0a\x09\x09\x65\x73\x61\x63\x3b\x3b\x0a\x09\x2d" \
+"\x2d\x29\x09\x73\x68\x69\x66\x74\x3b\x20\x62\x72\x65\x61\x6b\x3b" \
+"\x3b\x0a\x09\x2a\x29\x09\x65\x63\x68\x6f\x20\x45\x72\x72\x6f\x72" \
+"\x3b\x20\x65\x78\x69\x74\x20\x31\x3b\x3b\x0a\x09\x65\x73\x61\x63" \
+"\x0a\x64\x6f\x6e\x65\x00\x5b\x2d\x48\x68\x6e\x6c\x4c\x6f\x71\x76" \
+"\x73\x72\x69\x77\x46\x45\x5d\x20\x5b\x2d\x6d\x20\x4e\x5d\x20\x5b" \
+"\x2d\x41\x2f\x42\x2f\x43\x20\x4e\x5d\x20\x50\x41\x54\x54\x45\x52" \
+"\x4e\x2f\x2d\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x2e\x2e\x2e\x2f" \
+"\x2d\x66\x20\x46\x49\x4c\x45\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
+"\x2e\x0a\x0a\x53\x65\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x50\x41" \
+"\x54\x54\x45\x52\x4e\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x20\x28" \
+"\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x48\x09\x41" \
+"\x64\x64\x20\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70" \
+"\x72\x65\x66\x69\x78\x0a\x09\x2d\x68\x09\x44\x6f\x20\x6e\x6f\x74" \
+"\x20\x61\x64\x64\x20\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27" \
+"\x20\x70\x72\x65\x66\x69\x78\x0a\x09\x2d\x6e\x09\x41\x64\x64\x20" \
+"\x27\x6c\x69\x6e\x65\x5f\x6e\x6f\x3a\x27\x20\x70\x72\x65\x66\x69" \
+"\x78\x0a\x09\x2d\x6c\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20" \
+"\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x74" \
+"\x68\x61\x74\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x4c\x09\x53\x68" \
+"\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6e\x61\x6d\x65\x73\x20\x6f\x66" \
+"\x20\x66\x69\x6c\x65\x73\x20\x74\x68\x61\x74\x20\x64\x6f\x6e\x27" \
+"\x74\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77" \
+"\x20\x6f\x6e\x6c\x79\x20\x63\x6f\x75\x6e\x74\x20\x6f\x66\x20\x6d" \
+"\x61\x74\x63\x68\x69\x6e\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d" \
+"\x6f\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65\x20" \
+"\x6d\x61\x74\x63\x68\x69\x6e\x67\x20\x70\x61\x72\x74\x20\x6f\x66" \
+"\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x2e" \
+"\x20\x52\x65\x74\x75\x72\x6e\x20\x30\x20\x69\x66\x20\x50\x41\x54" \
+"\x54\x45\x52\x4e\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x31" \
+"\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x0a\x09\x2d\x76\x09\x53" \
+"\x65\x6c\x65\x63\x74\x20\x6e\x6f\x6e\x2d\x6d\x61\x74\x63\x68\x69" \
+"\x6e\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x73\x09\x53\x75\x70" \
+"\x70\x72\x65\x73\x73\x20\x6f\x70\x65\x6e\x20\x61\x6e\x64\x20\x72" \
+"\x65\x61\x64\x20\x65\x72\x72\x6f\x72\x73\x0a\x09\x2d\x72\x09\x52" \
+"\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72" \
+"\x65\x20\x63\x61\x73\x65\x0a\x09\x2d\x77\x09\x4d\x61\x74\x63\x68" \
+"\x20\x77\x68\x6f\x6c\x65\x20\x77\x6f\x72\x64\x73\x20\x6f\x6e\x6c" \
+"\x79\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c" \
+"\x65\x20\x6c\x69\x6e\x65\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x46" \
+"\x09\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x61\x20\x6c\x69" \
+"\x74\x65\x72\x61\x6c\x20\x28\x6e\x6f\x74\x20\x72\x65\x67\x65\x78" \
+"\x70\x29\x0a\x09\x2d\x45\x09\x50\x41\x54\x54\x45\x52\x4e\x20\x69" \
+"\x73\x20\x61\x6e\x20\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65" \
+"\x67\x65\x78\x70\x0a\x09\x2d\x6d\x20\x4e\x09\x4d\x61\x74\x63\x68" \
+"\x20\x75\x70\x20\x74\x6f\x20\x4e\x20\x74\x69\x6d\x65\x73\x20\x70" \
+"\x65\x72\x20\x66\x69\x6c\x65\x0a\x09\x2d\x41\x20\x4e\x09\x50\x72" \
+"\x69\x6e\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x74" \
+"\x72\x61\x69\x6c\x69\x6e\x67\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a" \
+"\x09\x2d\x42\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x4e\x20\x6c\x69" \
+"\x6e\x65\x73\x20\x6f\x66\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63" \
+"\x6f\x6e\x74\x65\x78\x74\x0a\x09\x2d\x43\x20\x4e\x09\x53\x61\x6d" \
+"\x65\x20\x61\x73\x20\x27\x2d\x41\x20\x4e\x20\x2d\x42\x20\x4e\x27" \
+"\x0a\x09\x2d\x65\x20\x50\x54\x52\x4e\x09\x50\x61\x74\x74\x65\x72" \
+"\x6e\x20\x74\x6f\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x66\x20\x46" \
+"\x49\x4c\x45\x09\x52\x65\x61\x64\x20\x70\x61\x74\x74\x65\x72\x6e" \
+"\x20\x66\x72\x6f\x6d\x20\x66\x69\x6c\x65\x00\x5b\x55\x53\x45\x52" \
+"\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x67\x72\x6f" \
+"\x75\x70\x20\x6d\x65\x6d\x62\x65\x72\x73\x68\x69\x70\x73\x20\x6f" \
+"\x66\x20\x55\x53\x45\x52\x20\x6f\x72\x20\x66\x6f\x72\x20\x74\x68" \
+"\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73" \
+"\x73\x00\x5b\x2d\x63\x66\x74\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
+"\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46" \
+"\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a" \
+"\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74" \
+"\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09" \
+"\x2d\x74\x09\x54\x65\x73\x74\x20\x66\x69\x6c\x65\x20\x69\x6e\x74" \
+"\x65\x67\x72\x69\x74\x79\x00\x5b\x2d\x63\x66\x64\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6d\x70\x72\x65\x73" \
+"\x73\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69" \
+"\x6e\x29\x0a\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65" \
+"\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20" \
"\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65" \
-"\x0a\x09\x2d\x74\x09\x54\x65\x73\x74\x20\x66\x69\x6c\x65\x20\x69" \
-"\x6e\x74\x65\x67\x72\x69\x74\x79\x00\x5b\x2d\x63\x66\x64\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6d\x70\x72" \
-"\x65\x73\x73\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74" \
-"\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70" \
-"\x72\x65\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74" \
-"\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72" \
-"\x63\x65\x00\x5b\x2d\x64\x20\x44\x45\x4c\x41\x59\x5d\x20\x5b\x2d" \
-"\x6e\x5d\x20\x5b\x2d\x66\x5d\x0a\x0a\x48\x61\x6c\x74\x20\x74\x68" \
-"\x65\x20\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x64\x20\x53\x45" \
-"\x43\x09\x44\x65\x6c\x61\x79\x20\x69\x6e\x74\x65\x72\x76\x61\x6c" \
-"\x0a\x09\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74\x20\x73\x79\x6e\x63" \
-"\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x28\x64\x6f\x6e\x27" \
-"\x74\x20\x67\x6f\x20\x74\x68\x72\x6f\x75\x67\x68\x20\x69\x6e\x69" \
-"\x74\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69" \
-"\x72\x73\x74\x20\x31\x30\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20" \
-"\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74" \
-"\x64\x69\x6e\x29\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a" \
-"\x57\x69\x74\x68\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f" \
-"\x6e\x65\x20\x46\x49\x4c\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65" \
-"\x20\x65\x61\x63\x68\x20\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c" \
-"\x65\x6e\x61\x6d\x65\x20\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09" \
-"\x2d\x6e\x20\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20" \
-"\x66\x69\x72\x73\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d" \
-"\x63\x20\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66" \
-"\x69\x72\x73\x74\x20\x4e\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x71" \
-"\x09\x09\x4e\x65\x76\x65\x72\x20\x70\x72\x69\x6e\x74\x20\x68\x65" \
-"\x61\x64\x65\x72\x73\x0a\x09\x2d\x76\x09\x09\x41\x6c\x77\x61\x79" \
-"\x73\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a" \
-"\x0a\x4e\x20\x6d\x61\x79\x20\x62\x65\x20\x73\x75\x66\x66\x69\x78" \
-"\x65\x64\x20\x62\x79\x20\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c" \
-"\x20\x62\x20\x28\x78\x35\x31\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20" \
-"\x28\x78\x31\x30\x32\x34\x5e\x32\x29\x2e\x00\x5b\x2d\x62\x63\x43" \
-"\x64\x65\x66\x6e\x6f\x73\x76\x78\x52\x5d\x20\x5b\x46\x49\x4c\x45" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x46\x49" \
-"\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x69" \
-"\x6e\x20\x61\x20\x75\x73\x65\x72\x20\x73\x70\x65\x63\x69\x66\x69" \
-"\x65\x64\x20\x66\x6f\x72\x6d\x61\x74\x0a\x0a\x09\x2d\x62\x09\x09" \
-"\x4f\x6e\x65\x2d\x62\x79\x74\x65\x20\x6f\x63\x74\x61\x6c\x20\x64" \
-"\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x63\x09\x09\x4f\x6e\x65\x2d" \
-"\x62\x79\x74\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x20\x64" \
-"\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x43\x09\x09\x43\x61\x6e\x6f" \
-"\x6e\x69\x63\x61\x6c\x20\x68\x65\x78\x2b\x41\x53\x43\x49\x49\x2c" \
-"\x20\x31\x36\x20\x62\x79\x74\x65\x73\x20\x70\x65\x72\x20\x6c\x69" \
-"\x6e\x65\x0a\x09\x2d\x64\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65" \
-"\x20\x64\x65\x63\x69\x6d\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79" \
-"\x0a\x09\x2d\x65\x20\x46\x4f\x52\x4d\x41\x54\x5f\x53\x54\x52\x49" \
-"\x4e\x47\x0a\x09\x2d\x66\x20\x46\x4f\x52\x4d\x41\x54\x5f\x46\x49" \
-"\x4c\x45\x0a\x09\x2d\x6e\x20\x4c\x45\x4e\x47\x54\x48\x09\x49\x6e" \
-"\x74\x65\x72\x70\x72\x65\x74\x20\x6f\x6e\x6c\x79\x20\x4c\x45\x4e" \
-"\x47\x54\x48\x20\x62\x79\x74\x65\x73\x20\x6f\x66\x20\x69\x6e\x70" \
-"\x75\x74\x0a\x09\x2d\x6f\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65" \
-"\x20\x6f\x63\x74\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09" \
-"\x2d\x73\x20\x4f\x46\x46\x53\x45\x54\x09\x53\x6b\x69\x70\x20\x4f" \
-"\x46\x46\x53\x45\x54\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x76\x09" \
-"\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x61\x6c\x6c\x20\x69\x6e\x70" \
-"\x75\x74\x20\x64\x61\x74\x61\x0a\x09\x2d\x78\x09\x09\x54\x77\x6f" \
-"\x2d\x62\x79\x74\x65\x20\x68\x65\x78\x61\x64\x65\x63\x69\x6d\x61" \
-"\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x52\x09\x09\x52" \
-"\x65\x76\x65\x72\x73\x65\x20\x6f\x66\x20\x27\x68\x65\x78\x64\x75" \
-"\x6d\x70\x20\x2d\x43\x76\x27\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
-"\x5d\x20\x5b\x55\x53\x45\x52\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20" \
-"\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x20\x61\x62\x6f\x75" \
-"\x74\x20\x55\x53\x45\x52\x20\x6f\x72\x20\x74\x68\x65\x20\x63\x75" \
-"\x72\x72\x65\x6e\x74\x20\x75\x73\x65\x72\x0a\x0a\x09\x2d\x75\x09" \
-"\x55\x73\x65\x72\x20\x49\x44\x0a\x09\x2d\x67\x09\x47\x72\x6f\x75" \
-"\x70\x20\x49\x44\x0a\x09\x2d\x47\x09\x53\x75\x70\x70\x6c\x65\x6d" \
-"\x65\x6e\x74\x61\x72\x79\x20\x67\x72\x6f\x75\x70\x20\x49\x44\x73" \
-"\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73" \
-"\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x73\x0a\x09\x2d\x72\x09\x50\x72\x69\x6e\x74\x20\x72\x65" \
-"\x61\x6c\x20\x49\x44\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66" \
-"\x20\x65\x66\x66\x65\x63\x74\x69\x76\x65\x20\x49\x44\x00\x5b\x2d" \
-"\x61\x5d\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x20\x5b\x61\x64" \
-"\x64\x72\x65\x73\x73\x5d\x0a\x0a\x43\x6f\x6e\x66\x69\x67\x75\x72" \
-"\x65\x20\x61\x20\x6e\x65\x74\x77\x6f\x72\x6b\x20\x69\x6e\x74\x65" \
-"\x72\x66\x61\x63\x65\x0a\x0a\x09\x5b\x61\x64\x64\x20\x41\x44\x44" \
-"\x52\x45\x53\x53\x5b\x2f\x50\x52\x45\x46\x49\x58\x4c\x45\x4e\x5d" \
-"\x5d\x0a\x09\x5b\x64\x65\x6c\x20\x41\x44\x44\x52\x45\x53\x53\x5b" \
-"\x2f\x50\x52\x45\x46\x49\x58\x4c\x45\x4e\x5d\x5d\x0a\x09\x5b\x5b" \
-"\x2d\x5d\x62\x72\x6f\x61\x64\x63\x61\x73\x74\x20\x5b\x41\x44\x44" \
-"\x52\x45\x53\x53\x5d\x5d\x20\x5b\x5b\x2d\x5d\x70\x6f\x69\x6e\x74" \
-"\x6f\x70\x6f\x69\x6e\x74\x20\x5b\x41\x44\x44\x52\x45\x53\x53\x5d" \
-"\x5d\x0a\x09\x5b\x6e\x65\x74\x6d\x61\x73\x6b\x20\x41\x44\x44\x52" \
-"\x45\x53\x53\x5d\x20\x5b\x64\x73\x74\x61\x64\x64\x72\x20\x41\x44" \
-"\x44\x52\x45\x53\x53\x5d\x0a\x09\x5b\x68\x77\x20\x65\x74\x68\x65" \
-"\x72\x20\x41\x44\x44\x52\x45\x53\x53\x5d\x20\x5b\x6d\x65\x74\x72" \
-"\x69\x63\x20\x4e\x4e\x5d\x20\x5b\x6d\x74\x75\x20\x4e\x4e\x5d\x0a" \
-"\x09\x5b\x5b\x2d\x5d\x74\x72\x61\x69\x6c\x65\x72\x73\x5d\x20\x5b" \
-"\x5b\x2d\x5d\x61\x72\x70\x5d\x20\x5b\x5b\x2d\x5d\x61\x6c\x6c\x6d" \
-"\x75\x6c\x74\x69\x5d\x0a\x09\x5b\x6d\x75\x6c\x74\x69\x63\x61\x73" \
-"\x74\x5d\x20\x5b\x5b\x2d\x5d\x70\x72\x6f\x6d\x69\x73\x63\x5d\x20" \
-"\x5b\x74\x78\x71\x75\x65\x75\x65\x6c\x65\x6e\x20\x4e\x4e\x5d\x20" \
-"\x5b\x5b\x2d\x5d\x64\x79\x6e\x61\x6d\x69\x63\x5d\x0a\x09\x5b\x75" \
-"\x70\x7c\x64\x6f\x77\x6e\x5d\x20\x2e\x2e\x2e\x00\x46\x49\x4c\x45" \
-"\x20\x5b\x53\x59\x4d\x42\x4f\x4c\x3d\x56\x41\x4c\x55\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x4c\x6f\x61\x64\x20\x74\x68\x65\x20\x73\x70\x65" \
-"\x63\x69\x66\x69\x65\x64\x20\x6b\x65\x72\x6e\x65\x6c\x20\x6d\x6f" \
-"\x64\x75\x6c\x65\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x6b" \
-"\x65\x72\x6e\x65\x6c\x00\x5b\x2d\x63\x64\x44\x73\x70\x5d\x20\x5b" \
-"\x2d\x6f\x20\x55\x53\x45\x52\x5d\x20\x5b\x2d\x67\x20\x47\x52\x50" \
-"\x5d\x20\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x5b\x53\x4f\x55" \
-"\x52\x43\x45\x5d\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f" \
-"\x70\x79\x20\x66\x69\x6c\x65\x73\x20\x61\x6e\x64\x20\x73\x65\x74" \
-"\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x0a\x0a\x09\x2d\x63" \
-"\x09\x4a\x75\x73\x74\x20\x63\x6f\x70\x79\x20\x28\x64\x65\x66\x61" \
-"\x75\x6c\x74\x29\x0a\x09\x2d\x64\x09\x43\x72\x65\x61\x74\x65\x20" \
-"\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x44\x09" \
-"\x43\x72\x65\x61\x74\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x74" \
-"\x61\x72\x67\x65\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65" \
-"\x73\x0a\x09\x2d\x73\x09\x53\x74\x72\x69\x70\x20\x73\x79\x6d\x62" \
-"\x6f\x6c\x20\x74\x61\x62\x6c\x65\x0a\x09\x2d\x70\x09\x50\x72\x65" \
-"\x73\x65\x72\x76\x65\x20\x64\x61\x74\x65\x0a\x09\x2d\x6f\x20\x55" \
-"\x53\x45\x52\x09\x53\x65\x74\x20\x6f\x77\x6e\x65\x72\x73\x68\x69" \
-"\x70\x0a\x09\x2d\x67\x20\x47\x52\x50\x09\x53\x65\x74\x20\x67\x72" \
-"\x6f\x75\x70\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70\x0a\x09\x2d" \
-"\x6d\x20\x4d\x4f\x44\x45\x09\x53\x65\x74\x20\x70\x65\x72\x6d\x69" \
-"\x73\x73\x69\x6f\x6e\x73\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x64\x5d" \
-"\x20\x5b\x2d\x74\x5d\x20\x5b\x2d\x7a\x5d\x20\x5b\x2d\x6b\x7c\x2d" \
-"\x6d\x5d\x20\x5b\x41\x4c\x4c\x7c\x42\x4c\x4f\x43\x4b\x44\x45\x56" \
-"\x2e\x2e\x2e\x5d\x20\x5b\x49\x4e\x54\x45\x52\x56\x41\x4c\x20\x5b" \
-"\x43\x4f\x55\x4e\x54\x5d\x5d\x0a\x0a\x52\x65\x70\x6f\x72\x74\x20" \
-"\x43\x50\x55\x20\x61\x6e\x64\x20\x49\x2f\x4f\x20\x73\x74\x61\x74" \
-"\x69\x73\x74\x69\x63\x73\x0a\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77" \
-"\x20\x43\x50\x55\x20\x75\x74\x69\x6c\x69\x7a\x61\x74\x69\x6f\x6e" \
-"\x0a\x09\x2d\x64\x09\x53\x68\x6f\x77\x20\x64\x65\x76\x69\x63\x65" \
-"\x20\x75\x74\x69\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x74" \
-"\x09\x50\x72\x69\x6e\x74\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x74" \
-"\x69\x6d\x65\x0a\x09\x2d\x7a\x09\x4f\x6d\x69\x74\x20\x64\x65\x76" \
-"\x69\x63\x65\x73\x20\x77\x69\x74\x68\x20\x6e\x6f\x20\x61\x63\x74" \
-"\x69\x76\x69\x74\x79\x0a\x09\x2d\x6b\x09\x55\x73\x65\x20\x6b\x62" \
-"\x2f\x73\x0a\x09\x2d\x6d\x09\x55\x73\x65\x20\x4d\x62\x2f\x73\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x7b\x61\x64\x64\x72\x65" \
-"\x73\x73\x20\x7c\x20\x72\x6f\x75\x74\x65\x20\x7c\x20\x6c\x69\x6e" \
-"\x6b\x20\x7c\x20\x72\x75\x6c\x65\x7d\x20\x7b\x43\x4f\x4d\x4d\x41" \
-"\x4e\x44\x7d\x0a\x0a\x69\x70\x20\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
-"\x5d\x20\x4f\x42\x4a\x45\x43\x54\x20\x7b\x43\x4f\x4d\x4d\x41\x4e" \
-"\x44\x7d\x0a\x77\x68\x65\x72\x65\x20\x4f\x42\x4a\x45\x43\x54\x20" \
-"\x3a\x3d\x20\x7b\x61\x64\x64\x72\x65\x73\x73\x20\x7c\x20\x72\x6f" \
-"\x75\x74\x65\x20\x7c\x20\x6c\x69\x6e\x6b\x20\x7c\x20\x72\x75\x6c" \
-"\x65\x7d\x0a\x4f\x50\x54\x49\x4f\x4e\x53\x20\x3a\x3d\x20\x7b\x20" \
-"\x2d\x66\x5b\x61\x6d\x69\x6c\x79\x5d\x20\x7b\x20\x69\x6e\x65\x74" \
-"\x20\x7c\x20\x69\x6e\x65\x74\x36\x20\x7c\x20\x6c\x69\x6e\x6b\x20" \
-"\x7d\x20\x7c\x20\x2d\x6f\x5b\x6e\x65\x6c\x69\x6e\x65\x5d\x20\x7d" \
-"\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x49\x44" \
-"\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69\x67\x6e" \
-"\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x54\x45\x52" \
-"\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65\x6e\x20\x50\x49\x44\x73" \
-"\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73" \
-"\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20" \
-"\x6e\x75\x6d\x62\x65\x72\x73\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x71" \
-"\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x52\x4f\x43\x45\x53\x53" \
-"\x5f\x4e\x41\x4d\x45\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61" \
-"\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65\x6e" \
-"\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x0a\x09\x2d\x6c\x09" \
-"\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c\x20" \
-"\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75\x6d\x62\x65\x72" \
-"\x73\x0a\x09\x2d\x71\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6d\x70" \
-"\x6c\x61\x69\x6e\x20\x69\x66\x20\x6e\x6f\x20\x70\x72\x6f\x63\x65" \
-"\x73\x73\x65\x73\x20\x77\x65\x72\x65\x20\x6b\x69\x6c\x6c\x65\x64" \
-"\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x5b\x2d\x6f" \
-"\x20\x50\x49\x44\x5d\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61" \
-"\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x61\x6c\x6c\x20\x70" \
-"\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x6f\x75\x74\x73\x69\x64\x65" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x73\x65\x73\x73\x69\x6f\x6e" \
-"\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73" \
-"\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20" \
-"\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d\x6f\x20\x50\x49\x44\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x68\x69" \
-"\x73\x20\x50\x49\x44\x00\x5b\x2d\x45\x4d\x4e\x6d\x68\x7e\x49\x3f" \
-"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65" \
-"\x77\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e" \
-"\x29\x20\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20" \
-"\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x0a\x09\x2d\x45\x09\x51" \
-"\x75\x69\x74\x20\x6f\x6e\x63\x65\x20\x74\x68\x65\x20\x65\x6e\x64" \
-"\x20\x6f\x66\x20\x61\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x72\x65" \
-"\x61\x63\x68\x65\x64\x0a\x09\x2d\x4d\x2c\x2d\x6d\x09\x44\x69\x73" \
-"\x70\x6c\x61\x79\x20\x73\x74\x61\x74\x75\x73\x20\x6c\x69\x6e\x65" \
-"\x20\x77\x69\x74\x68\x20\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62\x65" \
-"\x72\x73\x0a\x09\x09\x61\x6e\x64\x20\x70\x65\x72\x63\x65\x6e\x74" \
-"\x61\x67\x65\x20\x74\x68\x72\x6f\x75\x67\x68\x20\x74\x68\x65\x20" \
-"\x66\x69\x6c\x65\x0a\x09\x2d\x4e\x09\x50\x72\x65\x66\x69\x78\x20" \
-"\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x74\x6f\x20\x65" \
-"\x61\x63\x68\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x49\x09\x49\x67\x6e" \
-"\x6f\x72\x65\x20\x63\x61\x73\x65\x20\x69\x6e\x20\x61\x6c\x6c\x20" \
-"\x73\x65\x61\x72\x63\x68\x65\x73\x0a\x09\x2d\x7e\x09\x53\x75\x70" \
-"\x70\x72\x65\x73\x73\x20\x7e\x73\x20\x64\x69\x73\x70\x6c\x61\x79" \
-"\x65\x64\x20\x70\x61\x73\x74\x20\x74\x68\x65\x20\x65\x6e\x64\x20" \
-"\x6f\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x54\x41\x52\x47\x45\x54\x2e\x2e\x2e\x20" \
-"\x4c\x49\x4e\x4b\x7c\x44\x49\x52\x0a\x0a\x43\x72\x65\x61\x74\x65" \
-"\x20\x61\x20\x6c\x69\x6e\x6b\x20\x4c\x49\x4e\x4b\x20\x6f\x72\x20" \
-"\x44\x49\x52\x2f\x54\x41\x52\x47\x45\x54\x20\x74\x6f\x20\x74\x68" \
-"\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x54\x41\x52\x47" \
-"\x45\x54\x28\x73\x29\x0a\x0a\x09\x2d\x73\x09\x4d\x61\x6b\x65\x20" \
-"\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x68\x61\x72\x64\x6c\x69\x6e\x6b\x73\x0a\x09\x2d" \
-"\x66\x09\x52\x65\x6d\x6f\x76\x65\x20\x65\x78\x69\x73\x74\x69\x6e" \
-"\x67\x20\x64\x65\x73\x74\x69\x6e\x61\x74\x69\x6f\x6e\x73\x0a\x09" \
-"\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x64\x65\x72\x65\x66\x65\x72" \
-"\x65\x6e\x63\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x2d\x20" \
-"\x74\x72\x65\x61\x74\x20\x6c\x69\x6b\x65\x20\x6e\x6f\x72\x6d\x61" \
-"\x6c\x20\x66\x69\x6c\x65\x0a\x09\x2d\x62\x09\x4d\x61\x6b\x65\x20" \
-"\x61\x20\x62\x61\x63\x6b\x75\x70\x20\x6f\x66\x20\x74\x68\x65\x20" \
-"\x74\x61\x72\x67\x65\x74\x20\x28\x69\x66\x20\x65\x78\x69\x73\x74" \
-"\x73\x29\x20\x62\x65\x66\x6f\x72\x65\x20\x6c\x69\x6e\x6b\x20\x6f" \
-"\x70\x65\x72\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x53\x20\x73\x75\x66" \
-"\x09\x55\x73\x65\x20\x73\x75\x66\x66\x69\x78\x20\x69\x6e\x73\x74" \
-"\x65\x61\x64\x20\x6f\x66\x20\x7e\x20\x77\x68\x65\x6e\x20\x6d\x61" \
-"\x6b\x69\x6e\x67\x20\x62\x61\x63\x6b\x75\x70\x20\x66\x69\x6c\x65" \
-"\x73\x00\x5b\x2d\x6f\x20\x4f\x46\x53\x5d\x20\x4c\x4f\x4f\x50\x44" \
-"\x45\x56\x20\x46\x49\x4c\x45\x20\x2d\x20\x61\x73\x73\x6f\x63\x69" \
-"\x61\x74\x65\x20\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x73" \
-"\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x2d\x64\x20\x4c\x4f\x4f" \
-"\x50\x44\x45\x56\x20\x2d\x20\x64\x69\x73\x61\x73\x73\x6f\x63\x69" \
-"\x61\x74\x65\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x5b\x2d\x66" \
-"\x5d\x20\x2d\x20\x73\x68\x6f\x77\x0a\x0a\x09\x2d\x6f\x20\x4f\x46" \
-"\x53\x09\x53\x74\x61\x72\x74\x20\x4f\x46\x53\x20\x62\x79\x74\x65" \
-"\x73\x20\x69\x6e\x74\x6f\x20\x46\x49\x4c\x45\x0a\x09\x2d\x66\x09" \
+"\x00\x5b\x2d\x64\x20\x44\x45\x4c\x41\x59\x5d\x20\x5b\x2d\x6e\x5d" \
+"\x20\x5b\x2d\x66\x5d\x0a\x0a\x48\x61\x6c\x74\x20\x74\x68\x65\x20" \
+"\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x64\x20\x53\x45\x43\x09" \
+"\x44\x65\x6c\x61\x79\x20\x69\x6e\x74\x65\x72\x76\x61\x6c\x0a\x09" \
+"\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74\x20\x73\x79\x6e\x63\x0a\x09" \
+"\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x28\x64\x6f\x6e\x27\x74\x20" \
+"\x67\x6f\x20\x74\x68\x72\x6f\x75\x67\x68\x20\x69\x6e\x69\x74\x29" \
+"\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45" \
+"\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73" \
+"\x74\x20\x31\x30\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x65\x61" \
+"\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69" \
+"\x6e\x29\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a\x57\x69" \
+"\x74\x68\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x65" \
+"\x20\x46\x49\x4c\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65\x20\x65" \
+"\x61\x63\x68\x20\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c\x65\x6e" \
+"\x61\x6d\x65\x20\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09\x2d\x6e" \
+"\x20\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66\x69" \
+"\x72\x73\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x63\x20" \
+"\x4e\x5b\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x72" \
+"\x73\x74\x20\x4e\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x71\x09\x09" \
+"\x4e\x65\x76\x65\x72\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64" \
+"\x65\x72\x73\x0a\x09\x2d\x76\x09\x09\x41\x6c\x77\x61\x79\x73\x20" \
+"\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a\x0a\x4e" \
+"\x20\x6d\x61\x79\x20\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64" \
+"\x20\x62\x79\x20\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x20\x62" \
+"\x20\x28\x78\x35\x31\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78" \
+"\x31\x30\x32\x34\x5e\x32\x29\x2e\x00\x5b\x2d\x62\x63\x43\x64\x65" \
+"\x66\x6e\x6f\x73\x76\x78\x52\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
+"\x2e\x2e\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x46\x49\x4c\x45" \
+"\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x69\x6e\x20" \
+"\x61\x20\x75\x73\x65\x72\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64" \
+"\x20\x66\x6f\x72\x6d\x61\x74\x0a\x0a\x09\x2d\x62\x09\x09\x4f\x6e" \
+"\x65\x2d\x62\x79\x74\x65\x20\x6f\x63\x74\x61\x6c\x20\x64\x69\x73" \
+"\x70\x6c\x61\x79\x0a\x09\x2d\x63\x09\x09\x4f\x6e\x65\x2d\x62\x79" \
+"\x74\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x20\x64\x69\x73" \
+"\x70\x6c\x61\x79\x0a\x09\x2d\x43\x09\x09\x43\x61\x6e\x6f\x6e\x69" \
+"\x63\x61\x6c\x20\x68\x65\x78\x2b\x41\x53\x43\x49\x49\x2c\x20\x31" \
+"\x36\x20\x62\x79\x74\x65\x73\x20\x70\x65\x72\x20\x6c\x69\x6e\x65" \
+"\x0a\x09\x2d\x64\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x64" \
+"\x65\x63\x69\x6d\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09" \
+"\x2d\x65\x20\x46\x4f\x52\x4d\x41\x54\x5f\x53\x54\x52\x49\x4e\x47" \
+"\x0a\x09\x2d\x66\x20\x46\x4f\x52\x4d\x41\x54\x5f\x46\x49\x4c\x45" \
+"\x0a\x09\x2d\x6e\x20\x4c\x45\x4e\x47\x54\x48\x09\x49\x6e\x74\x65" \
+"\x72\x70\x72\x65\x74\x20\x6f\x6e\x6c\x79\x20\x4c\x45\x4e\x47\x54" \
+"\x48\x20\x62\x79\x74\x65\x73\x20\x6f\x66\x20\x69\x6e\x70\x75\x74" \
+"\x0a\x09\x2d\x6f\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x6f" \
+"\x63\x74\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x73" \
+"\x20\x4f\x46\x46\x53\x45\x54\x09\x53\x6b\x69\x70\x20\x4f\x46\x46" \
+"\x53\x45\x54\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x76\x09\x09\x44" \
+"\x69\x73\x70\x6c\x61\x79\x20\x61\x6c\x6c\x20\x69\x6e\x70\x75\x74" \
+"\x20\x64\x61\x74\x61\x0a\x09\x2d\x78\x09\x09\x54\x77\x6f\x2d\x62" \
+"\x79\x74\x65\x20\x68\x65\x78\x61\x64\x65\x63\x69\x6d\x61\x6c\x20" \
+"\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x52\x09\x09\x52\x65\x76" \
+"\x65\x72\x73\x65\x20\x6f\x66\x20\x27\x68\x65\x78\x64\x75\x6d\x70" \
+"\x20\x2d\x43\x76\x27\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
+"\x5b\x55\x53\x45\x52\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x69\x6e" \
+"\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x20\x61\x62\x6f\x75\x74\x20" \
+"\x55\x53\x45\x52\x20\x6f\x72\x20\x74\x68\x65\x20\x63\x75\x72\x72" \
+"\x65\x6e\x74\x20\x75\x73\x65\x72\x0a\x0a\x09\x2d\x75\x09\x55\x73" \
+"\x65\x72\x20\x49\x44\x0a\x09\x2d\x67\x09\x47\x72\x6f\x75\x70\x20" \
+"\x49\x44\x0a\x09\x2d\x47\x09\x53\x75\x70\x70\x6c\x65\x6d\x65\x6e" \
+"\x74\x61\x72\x79\x20\x67\x72\x6f\x75\x70\x20\x49\x44\x73\x0a\x09" \
+"\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20\x69" \
+"\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x6e\x75\x6d\x62\x65\x72" \
+"\x73\x0a\x09\x2d\x72\x09\x50\x72\x69\x6e\x74\x20\x72\x65\x61\x6c" \
+"\x20\x49\x44\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x65" \
+"\x66\x66\x65\x63\x74\x69\x76\x65\x20\x49\x44\x00\x5b\x2d\x61\x5d" \
+"\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x20\x5b\x61\x64\x64\x72" \
+"\x65\x73\x73\x5d\x0a\x0a\x43\x6f\x6e\x66\x69\x67\x75\x72\x65\x20" \
+"\x61\x20\x6e\x65\x74\x77\x6f\x72\x6b\x20\x69\x6e\x74\x65\x72\x66" \
+"\x61\x63\x65\x0a\x0a\x09\x5b\x61\x64\x64\x20\x41\x44\x44\x52\x45" \
+"\x53\x53\x5b\x2f\x50\x52\x45\x46\x49\x58\x4c\x45\x4e\x5d\x5d\x0a" \
+"\x09\x5b\x64\x65\x6c\x20\x41\x44\x44\x52\x45\x53\x53\x5b\x2f\x50" \
+"\x52\x45\x46\x49\x58\x4c\x45\x4e\x5d\x5d\x0a\x09\x5b\x5b\x2d\x5d" \
+"\x62\x72\x6f\x61\x64\x63\x61\x73\x74\x20\x5b\x41\x44\x44\x52\x45" \
+"\x53\x53\x5d\x5d\x20\x5b\x5b\x2d\x5d\x70\x6f\x69\x6e\x74\x6f\x70" \
+"\x6f\x69\x6e\x74\x20\x5b\x41\x44\x44\x52\x45\x53\x53\x5d\x5d\x0a" \
+"\x09\x5b\x6e\x65\x74\x6d\x61\x73\x6b\x20\x41\x44\x44\x52\x45\x53" \
+"\x53\x5d\x20\x5b\x64\x73\x74\x61\x64\x64\x72\x20\x41\x44\x44\x52" \
+"\x45\x53\x53\x5d\x0a\x09\x5b\x68\x77\x20\x65\x74\x68\x65\x72\x20" \
+"\x41\x44\x44\x52\x45\x53\x53\x5d\x20\x5b\x6d\x65\x74\x72\x69\x63" \
+"\x20\x4e\x4e\x5d\x20\x5b\x6d\x74\x75\x20\x4e\x4e\x5d\x0a\x09\x5b" \
+"\x5b\x2d\x5d\x74\x72\x61\x69\x6c\x65\x72\x73\x5d\x20\x5b\x5b\x2d" \
+"\x5d\x61\x72\x70\x5d\x20\x5b\x5b\x2d\x5d\x61\x6c\x6c\x6d\x75\x6c" \
+"\x74\x69\x5d\x0a\x09\x5b\x6d\x75\x6c\x74\x69\x63\x61\x73\x74\x5d" \
+"\x20\x5b\x5b\x2d\x5d\x70\x72\x6f\x6d\x69\x73\x63\x5d\x20\x5b\x74" \
+"\x78\x71\x75\x65\x75\x65\x6c\x65\x6e\x20\x4e\x4e\x5d\x20\x5b\x5b" \
+"\x2d\x5d\x64\x79\x6e\x61\x6d\x69\x63\x5d\x0a\x09\x5b\x75\x70\x7c" \
+"\x64\x6f\x77\x6e\x5d\x20\x2e\x2e\x2e\x00\x46\x49\x4c\x45\x20\x5b" \
+"\x53\x59\x4d\x42\x4f\x4c\x3d\x56\x41\x4c\x55\x45\x5d\x2e\x2e\x2e" \
+"\x0a\x0a\x4c\x6f\x61\x64\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69" \
+"\x66\x69\x65\x64\x20\x6b\x65\x72\x6e\x65\x6c\x20\x6d\x6f\x64\x75" \
+"\x6c\x65\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x6b\x65\x72" \
+"\x6e\x65\x6c\x00\x5b\x2d\x63\x64\x44\x73\x70\x5d\x20\x5b\x2d\x6f" \
+"\x20\x55\x53\x45\x52\x5d\x20\x5b\x2d\x67\x20\x47\x52\x50\x5d\x20" \
+"\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x5b\x53\x4f\x55\x52\x43" \
+"\x45\x5d\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f\x70\x79" \
+"\x20\x66\x69\x6c\x65\x73\x20\x61\x6e\x64\x20\x73\x65\x74\x20\x61" \
+"\x74\x74\x72\x69\x62\x75\x74\x65\x73\x0a\x0a\x09\x2d\x63\x09\x4a" \
+"\x75\x73\x74\x20\x63\x6f\x70\x79\x20\x28\x64\x65\x66\x61\x75\x6c" \
+"\x74\x29\x0a\x09\x2d\x64\x09\x43\x72\x65\x61\x74\x65\x20\x64\x69" \
+"\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x44\x09\x43\x72" \
+"\x65\x61\x74\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x74\x61\x72" \
+"\x67\x65\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a" \
+"\x09\x2d\x73\x09\x53\x74\x72\x69\x70\x20\x73\x79\x6d\x62\x6f\x6c" \
+"\x20\x74\x61\x62\x6c\x65\x0a\x09\x2d\x70\x09\x50\x72\x65\x73\x65" \
+"\x72\x76\x65\x20\x64\x61\x74\x65\x0a\x09\x2d\x6f\x20\x55\x53\x45" \
+"\x52\x09\x53\x65\x74\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70\x0a" \
+"\x09\x2d\x67\x20\x47\x52\x50\x09\x53\x65\x74\x20\x67\x72\x6f\x75" \
+"\x70\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70\x0a\x09\x2d\x6d\x20" \
+"\x4d\x4f\x44\x45\x09\x53\x65\x74\x20\x70\x65\x72\x6d\x69\x73\x73" \
+"\x69\x6f\x6e\x73\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x64\x5d\x20\x5b" \
+"\x2d\x74\x5d\x20\x5b\x2d\x7a\x5d\x20\x5b\x2d\x6b\x7c\x2d\x6d\x5d" \
+"\x20\x5b\x41\x4c\x4c\x7c\x42\x4c\x4f\x43\x4b\x44\x45\x56\x2e\x2e" \
+"\x2e\x5d\x20\x5b\x49\x4e\x54\x45\x52\x56\x41\x4c\x20\x5b\x43\x4f" \
+"\x55\x4e\x54\x5d\x5d\x0a\x0a\x52\x65\x70\x6f\x72\x74\x20\x43\x50" \
+"\x55\x20\x61\x6e\x64\x20\x49\x2f\x4f\x20\x73\x74\x61\x74\x69\x73" \
+"\x74\x69\x63\x73\x0a\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20\x43" \
+"\x50\x55\x20\x75\x74\x69\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x0a\x09" \
+"\x2d\x64\x09\x53\x68\x6f\x77\x20\x64\x65\x76\x69\x63\x65\x20\x75" \
+"\x74\x69\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x74\x09\x50" \
+"\x72\x69\x6e\x74\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x74\x69\x6d" \
+"\x65\x0a\x09\x2d\x7a\x09\x4f\x6d\x69\x74\x20\x64\x65\x76\x69\x63" \
+"\x65\x73\x20\x77\x69\x74\x68\x20\x6e\x6f\x20\x61\x63\x74\x69\x76" \
+"\x69\x74\x79\x0a\x09\x2d\x6b\x09\x55\x73\x65\x20\x6b\x62\x2f\x73" \
+"\x0a\x09\x2d\x6d\x09\x55\x73\x65\x20\x4d\x62\x2f\x73\x00\x5b\x4f" \
+"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x7b\x61\x64\x64\x72\x65\x73\x73" \
+"\x20\x7c\x20\x72\x6f\x75\x74\x65\x20\x7c\x20\x6c\x69\x6e\x6b\x20" \
+"\x7c\x20\x72\x75\x6c\x65\x7d\x20\x7b\x43\x4f\x4d\x4d\x41\x4e\x44" \
+"\x7d\x0a\x0a\x69\x70\x20\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
+"\x4f\x42\x4a\x45\x43\x54\x20\x7b\x43\x4f\x4d\x4d\x41\x4e\x44\x7d" \
+"\x0a\x77\x68\x65\x72\x65\x20\x4f\x42\x4a\x45\x43\x54\x20\x3a\x3d" \
+"\x20\x7b\x61\x64\x64\x72\x65\x73\x73\x20\x7c\x20\x72\x6f\x75\x74" \
+"\x65\x20\x7c\x20\x6c\x69\x6e\x6b\x20\x7c\x20\x72\x75\x6c\x65\x7d" \
+"\x0a\x4f\x50\x54\x49\x4f\x4e\x53\x20\x3a\x3d\x20\x7b\x20\x2d\x66" \
+"\x5b\x61\x6d\x69\x6c\x79\x5d\x20\x7b\x20\x69\x6e\x65\x74\x20\x7c" \
+"\x20\x69\x6e\x65\x74\x36\x20\x7c\x20\x6c\x69\x6e\x6b\x20\x7d\x20" \
+"\x7c\x20\x2d\x6f\x5b\x6e\x65\x6c\x69\x6e\x65\x5d\x20\x7d\x00\x5b" \
+"\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x49\x44\x2e\x2e" \
+"\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c" \
+"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x54\x45\x52\x4d\x29" \
+"\x20\x74\x6f\x20\x67\x69\x76\x65\x6e\x20\x50\x49\x44\x73\x0a\x0a" \
+"\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67" \
+"\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75" \
+"\x6d\x62\x65\x72\x73\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x71\x5d\x20" \
+"\x5b\x2d\x53\x49\x47\x5d\x20\x50\x52\x4f\x43\x45\x53\x53\x5f\x4e" \
+"\x41\x4d\x45\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73" \
+"\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20" \
+"\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65\x6e\x20\x70" \
+"\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x0a\x09\x2d\x6c\x09\x4c\x69" \
+"\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61" \
+"\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a" \
+"\x09\x2d\x71\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6d\x70\x6c\x61" \
+"\x69\x6e\x20\x69\x66\x20\x6e\x6f\x20\x70\x72\x6f\x63\x65\x73\x73" \
+"\x65\x73\x20\x77\x65\x72\x65\x20\x6b\x69\x6c\x6c\x65\x64\x00\x5b" \
+"\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x5b\x2d\x6f\x20\x50" \
+"\x49\x44\x5d\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73" \
+"\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20" \
+"\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x61\x6c\x6c\x20\x70\x72\x6f" \
+"\x63\x65\x73\x73\x65\x73\x20\x6f\x75\x74\x73\x69\x64\x65\x20\x63" \
+"\x75\x72\x72\x65\x6e\x74\x20\x73\x65\x73\x73\x69\x6f\x6e\x0a\x0a" \
+"\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67" \
+"\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75" \
+"\x6d\x62\x65\x72\x73\x0a\x09\x2d\x6f\x20\x50\x49\x44\x09\x44\x6f" \
+"\x6e\x27\x74\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x68\x69\x73\x20" \
+"\x50\x49\x44\x00\x5b\x2d\x45\x4e\x68\x7e\x49\x3f\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77\x20\x46\x49" \
+"\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x6f\x6e" \
+"\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x61\x74\x20\x61" \
+"\x20\x74\x69\x6d\x65\x0a\x0a\x09\x2d\x45\x09\x51\x75\x69\x74\x20" \
+"\x6f\x6e\x63\x65\x20\x74\x68\x65\x20\x65\x6e\x64\x20\x6f\x66\x20" \
+"\x61\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65" \
+"\x64\x0a\x09\x2d\x4e\x09\x50\x72\x65\x66\x69\x78\x20\x6c\x69\x6e" \
+"\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x74\x6f\x20\x65\x61\x63\x68" \
+"\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x49\x09\x49\x67\x6e\x6f\x72\x65" \
+"\x20\x63\x61\x73\x65\x20\x69\x6e\x20\x61\x6c\x6c\x20\x73\x65\x61" \
+"\x72\x63\x68\x65\x73\x0a\x09\x2d\x7e\x09\x53\x75\x70\x70\x72\x65" \
+"\x73\x73\x20\x7e\x73\x20\x64\x69\x73\x70\x6c\x61\x79\x65\x64\x20" \
+"\x70\x61\x73\x74\x20\x45\x4f\x46\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
+"\x53\x5d\x20\x54\x41\x52\x47\x45\x54\x2e\x2e\x2e\x20\x4c\x49\x4e" \
+"\x4b\x7c\x44\x49\x52\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20" \
+"\x6c\x69\x6e\x6b\x20\x4c\x49\x4e\x4b\x20\x6f\x72\x20\x44\x49\x52" \
+"\x2f\x54\x41\x52\x47\x45\x54\x20\x74\x6f\x20\x74\x68\x65\x20\x73" \
+"\x70\x65\x63\x69\x66\x69\x65\x64\x20\x54\x41\x52\x47\x45\x54\x28" \
+"\x73\x29\x0a\x0a\x09\x2d\x73\x09\x4d\x61\x6b\x65\x20\x73\x79\x6d" \
+"\x6c\x69\x6e\x6b\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66" \
+"\x20\x68\x61\x72\x64\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x66\x09\x52" \
+"\x65\x6d\x6f\x76\x65\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x64" \
+"\x65\x73\x74\x69\x6e\x61\x74\x69\x6f\x6e\x73\x0a\x09\x2d\x6e\x09" \
+"\x44\x6f\x6e\x27\x74\x20\x64\x65\x72\x65\x66\x65\x72\x65\x6e\x63" \
+"\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x2d\x20\x74\x72\x65" \
+"\x61\x74\x20\x6c\x69\x6b\x65\x20\x6e\x6f\x72\x6d\x61\x6c\x20\x66" \
+"\x69\x6c\x65\x0a\x09\x2d\x62\x09\x4d\x61\x6b\x65\x20\x61\x20\x62" \
+"\x61\x63\x6b\x75\x70\x20\x6f\x66\x20\x74\x68\x65\x20\x74\x61\x72" \
+"\x67\x65\x74\x20\x28\x69\x66\x20\x65\x78\x69\x73\x74\x73\x29\x20" \
+"\x62\x65\x66\x6f\x72\x65\x20\x6c\x69\x6e\x6b\x20\x6f\x70\x65\x72" \
+"\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x53\x20\x73\x75\x66\x09\x55\x73" \
+"\x65\x20\x73\x75\x66\x66\x69\x78\x20\x69\x6e\x73\x74\x65\x61\x64" \
+"\x20\x6f\x66\x20\x7e\x20\x77\x68\x65\x6e\x20\x6d\x61\x6b\x69\x6e" \
+"\x67\x20\x62\x61\x63\x6b\x75\x70\x20\x66\x69\x6c\x65\x73\x00\x5b" \
+"\x2d\x72\x5d\x20\x5b\x2d\x6f\x20\x4f\x46\x53\x5d\x20\x4c\x4f\x4f" \
+"\x50\x44\x45\x56\x20\x46\x49\x4c\x45\x20\x2d\x20\x61\x73\x73\x6f" \
+"\x63\x69\x61\x74\x65\x20\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63" \
+"\x65\x73\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x2d\x64\x20\x4c" \
+"\x4f\x4f\x50\x44\x45\x56\x20\x2d\x20\x64\x69\x73\x61\x73\x73\x6f" \
+"\x63\x69\x61\x74\x65\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x5b" \
+"\x2d\x66\x5d\x20\x2d\x20\x73\x68\x6f\x77\x0a\x0a\x09\x2d\x6f\x20" \
+"\x4f\x46\x53\x09\x53\x74\x61\x72\x74\x20\x4f\x46\x53\x20\x62\x79" \
+"\x74\x65\x73\x20\x69\x6e\x74\x6f\x20\x46\x49\x4c\x45\x0a\x09\x2d" \
+"\x72\x09\x52\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x0a\x09\x2d\x66\x09" \
"\x53\x68\x6f\x77\x20\x66\x69\x72\x73\x74\x20\x66\x72\x65\x65\x20" \
"\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x00\x5b\x2d\x31\x41" \
"\x61\x43\x78\x64\x4c\x48\x52\x46\x70\x6c\x69\x6e\x73\x65\x68\x72" \
@@ -1348,654 +1382,660 @@
"\x6e\x75\x6d\x62\x65\x72\x00\x0a\x0a\x4c\x69\x73\x74\x20\x74\x68" \
"\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x6c\x79\x20\x6c\x6f\x61\x64" \
"\x65\x64\x20\x6b\x65\x72\x6e\x65\x6c\x20\x6d\x6f\x64\x75\x6c\x65" \
-"\x73\x00\x08\x00\x46\x49\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70" \
-"\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x00\x2d" \
-"\x64\x20\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49" \
-"\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09" \
-"\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d" \
-"\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
-"\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d\x63\x66" \
-"\x76\x64\x31\x32\x33\x34\x35\x36\x37\x38\x39\x43\x46\x5d\x20\x5b" \
-"\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x31\x2e\x2e\x39" \
-"\x09\x43\x6f\x6d\x70\x72\x65\x73\x73\x69\x6f\x6e\x20\x6c\x65\x76" \
-"\x65\x6c\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73" \
-"\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a" \
-"\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x46\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72\x65\x20\x6f\x72\x20\x76" \
-"\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x0a\x09" \
-"\x2d\x43\x09\x41\x6c\x73\x6f\x20\x77\x72\x69\x74\x65\x20\x63\x68" \
-"\x65\x63\x6b\x73\x75\x6d\x20\x6f\x66\x20\x63\x6f\x6d\x70\x72\x65" \
-"\x73\x73\x65\x64\x20\x62\x6c\x6f\x63\x6b\x00\x5b\x2d\x76\x43\x46" \
-"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x76" \
-"\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x73\x74\x6f\x72\x65\x20\x6f\x72\x20\x76\x65\x72\x69" \
-"\x66\x79\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x00\x5b\x2d\x61\x77" \
-"\x5d\x20\x5b\x4d\x41\x4e\x50\x41\x47\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x46\x6f\x72\x6d\x61\x74\x20\x61\x6e\x64\x20\x64\x69\x73\x70\x6c" \
-"\x61\x79\x20\x6d\x61\x6e\x75\x61\x6c\x20\x70\x61\x67\x65\x0a\x0a" \
-"\x09\x2d\x61\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x61\x6c\x6c\x20" \
-"\x70\x61\x67\x65\x73\x0a\x09\x2d\x77\x09\x53\x68\x6f\x77\x20\x70" \
-"\x61\x67\x65\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x73\x00\x5b\x2d" \
-"\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b" \
-"\x20\x4d\x44\x35\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a" \
-"\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73\x20\x61" \
-"\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e\x20\x46" \
-"\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f" \
-"\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20" \
-"\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68\x6f\x77" \
-"\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09\x57\x61" \
-"\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f\x70\x65" \
-"\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20\x63\x68" \
-"\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b\x79\x7c" \
-"\x6e\x5d\x0a\x0a\x43\x6f\x6e\x74\x72\x6f\x6c\x20\x77\x72\x69\x74" \
-"\x65\x20\x61\x63\x63\x65\x73\x73\x20\x74\x6f\x20\x79\x6f\x75\x72" \
-"\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x0a\x09\x79\x09\x41\x6c\x6c" \
+"\x73\x00\x0a\x0a\x53\x68\x6f\x77\x20\x61\x6c\x6c\x20\x6f\x70\x65" \
+"\x6e\x20\x66\x69\x6c\x65\x73\x00\x08\x00\x46\x49\x4c\x45\x0a\x0a" \
+"\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74" \
+"\x64\x6f\x75\x74\x00\x2d\x64\x20\x5b\x2d\x63\x66\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72" \
+"\x65\x73\x73\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64" \
+"\x69\x6e\x29\x0a\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72" \
+"\x65\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f" \
+"\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63" \
+"\x65\x00\x5b\x2d\x63\x66\x76\x64\x31\x32\x33\x34\x35\x36\x37\x38" \
+"\x39\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
+"\x09\x2d\x31\x2e\x2e\x39\x09\x43\x6f\x6d\x70\x72\x65\x73\x73\x69" \
+"\x6f\x6e\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d\x64\x09\x44\x65\x63" \
+"\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74" \
+"\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09" \
+"\x46\x6f\x72\x63\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73" \
+"\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72" \
+"\x65\x20\x6f\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63" \
+"\x6b\x73\x75\x6d\x0a\x09\x2d\x43\x09\x41\x6c\x73\x6f\x20\x77\x72" \
+"\x69\x74\x65\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6f\x66\x20" \
+"\x63\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20\x62\x6c\x6f\x63\x6b" \
+"\x00\x5b\x2d\x76\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
+"\x2e\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09" \
+"\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72\x65\x20\x6f" \
+"\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63\x6b\x73\x75" \
+"\x6d\x00\x5b\x2d\x61\x77\x5d\x20\x5b\x4d\x41\x4e\x50\x41\x47\x45" \
+"\x5d\x2e\x2e\x2e\x0a\x0a\x46\x6f\x72\x6d\x61\x74\x20\x61\x6e\x64" \
+"\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x6d\x61\x6e\x75\x61\x6c\x20" \
+"\x70\x61\x67\x65\x0a\x0a\x09\x2d\x61\x09\x44\x69\x73\x70\x6c\x61" \
+"\x79\x20\x61\x6c\x6c\x20\x70\x61\x67\x65\x73\x0a\x09\x2d\x77\x09" \
+"\x53\x68\x6f\x77\x20\x70\x61\x67\x65\x20\x6c\x6f\x63\x61\x74\x69" \
+"\x6f\x6e\x73\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49" \
+"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72" \
+"\x20\x63\x68\x65\x63\x6b\x20\x4d\x44\x35\x20\x63\x68\x65\x63\x6b" \
+"\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20" \
+"\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73" \
+"\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44" \
+"\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74" \
+"\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64" \
+"\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a" \
+"\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69" \
+"\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74" \
+"\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e" \
+"\x65\x73\x00\x5b\x79\x7c\x6e\x5d\x0a\x0a\x43\x6f\x6e\x74\x72\x6f" \
+"\x6c\x20\x77\x72\x69\x74\x65\x20\x61\x63\x63\x65\x73\x73\x20\x74" \
+"\x6f\x20\x79\x6f\x75\x72\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x0a" \
+"\x09\x79\x09\x41\x6c\x6c\x6f\x77\x20\x77\x72\x69\x74\x65\x20\x61" \
+"\x63\x63\x65\x73\x73\x20\x74\x6f\x20\x79\x6f\x75\x72\x20\x74\x65" \
+"\x72\x6d\x69\x6e\x61\x6c\x0a\x09\x6e\x09\x44\x69\x73\x61\x6c\x6c" \
"\x6f\x77\x20\x77\x72\x69\x74\x65\x20\x61\x63\x63\x65\x73\x73\x20" \
"\x74\x6f\x20\x79\x6f\x75\x72\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c" \
-"\x0a\x09\x6e\x09\x44\x69\x73\x61\x6c\x6c\x6f\x77\x20\x77\x72\x69" \
-"\x74\x65\x20\x61\x63\x63\x65\x73\x73\x20\x74\x6f\x20\x79\x6f\x75" \
-"\x72\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x00\x5b\x4f\x50\x54\x49" \
-"\x4f\x4e\x53\x5d\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e" \
-"\x2e\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x44\x49\x52\x45\x43\x54" \
-"\x4f\x52\x59\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x4d\x6f" \
-"\x64\x65\x0a\x09\x2d\x70\x09\x4e\x6f\x20\x65\x72\x72\x6f\x72\x20" \
-"\x69\x66\x20\x65\x78\x69\x73\x74\x73\x3b\x20\x6d\x61\x6b\x65\x20" \
-"\x70\x61\x72\x65\x6e\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69" \
-"\x65\x73\x20\x61\x73\x20\x6e\x65\x65\x64\x65\x64\x00\x5b\x2d\x76" \
-"\x5d\x20\x5b\x2d\x6e\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f" \
+"\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x44\x49\x52\x45\x43" \
+"\x54\x4f\x52\x59\x2e\x2e\x2e\x0a\x0a\x43\x72\x65\x61\x74\x65\x20" \
+"\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x6d\x20\x4d" \
+"\x4f\x44\x45\x09\x4d\x6f\x64\x65\x0a\x09\x2d\x70\x09\x4e\x6f\x20" \
+"\x65\x72\x72\x6f\x72\x20\x69\x66\x20\x65\x78\x69\x73\x74\x73\x3b" \
+"\x20\x6d\x61\x6b\x65\x20\x70\x61\x72\x65\x6e\x74\x20\x64\x69\x72" \
+"\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x61\x73\x20\x6e\x65\x65\x64" \
+"\x65\x64\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e\x20\x4c\x41\x42\x45" \
+"\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59" \
+"\x54\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20\x61\x20\x46\x41\x54" \
+"\x33\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09" \
+"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x20\x4c" \
+"\x42\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x00" \
+"\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49" \
+"\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x4f\x44\x45\x5f\x52\x41" \
+"\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49\x4e\x4f\x44\x45\x5f\x53" \
+"\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52\x45\x53\x45\x52\x56\x45" \
+"\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c" \
+"\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b" \
+"\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09\x2d\x62\x20\x42\x4c\x4b" \
+"\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x20\x73\x69\x7a\x65" \
+"\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x46\x09\x09\x46\x6f\x72" \
+"\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54\x49\x4f\x09\x4d\x61\x78" \
+"\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x69\x6c\x65\x73" \
+"\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x5f\x73" \
+"\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49\x4f\x0a\x09\x2d\x49\x20" \
+"\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64\x65\x20\x73\x69\x7a\x65" \
+"\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29\x0a\x09\x2d\x4c\x20\x4c" \
+"\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c" \
+"\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45\x4e\x54\x09\x50\x65\x72" \
+"\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74" \
+"\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66\x6f\x72\x20\x61\x64" \
+"\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44\x72\x79\x20\x72\x75\x6e" \
+"\x00\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x4e\x41\x4d\x45\x0a" \
+"\x0a\x43\x72\x65\x61\x74\x65\x20\x6e\x61\x6d\x65\x64\x20\x70\x69" \
+"\x70\x65\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x4d\x6f\x64" \
+"\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x61\x3d\x72\x77\x29" \
+"\x00\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20\x42\x4c\x4b\x5f\x53" \
+"\x49\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x4f\x44\x45\x5f\x52" \
+"\x41\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49\x4e\x4f\x44\x45\x5f" \
+"\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52\x45\x53\x45\x52\x56" \
+"\x45\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d\x20\x5b\x2d\x4c\x20" \
+"\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20" \
+"\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09\x2d\x62\x20\x42\x4c" \
+"\x4b\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x20\x73\x69\x7a" \
+"\x65\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x46\x09\x09\x46\x6f" \
+"\x72\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54\x49\x4f\x09\x4d\x61" \
+"\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x69\x6c\x65" \
+"\x73\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x5f" \
+"\x73\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49\x4f\x0a\x09\x2d\x49" \
+"\x20\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64\x65\x20\x73\x69\x7a" \
+"\x65\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29\x0a\x09\x2d\x4c\x20" \
+"\x4c\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65" \
+"\x6c\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45\x4e\x54\x09\x50\x65" \
+"\x72\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c\x6f\x63\x6b\x73\x20" \
+"\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66\x6f\x72\x20\x61" \
+"\x64\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44\x72\x79\x20\x72\x75" \
+"\x6e\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e\x20\x4c\x41\x42\x45\x4c" \
+"\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54" \
+"\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20\x61\x20\x46\x41\x54\x33" \
+"\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d" \
+"\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x20\x4c\x42" \
+"\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x00\x5b" \
+"\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x4e\x41\x4d\x45\x20\x54\x59" \
+"\x50\x45\x20\x4d\x41\x4a\x4f\x52\x20\x4d\x49\x4e\x4f\x52\x0a\x0a" \
+"\x43\x72\x65\x61\x74\x65\x20\x61\x20\x73\x70\x65\x63\x69\x61\x6c" \
+"\x20\x66\x69\x6c\x65\x20\x28\x62\x6c\x6f\x63\x6b\x2c\x20\x63\x68" \
+"\x61\x72\x61\x63\x74\x65\x72\x2c\x20\x6f\x72\x20\x70\x69\x70\x65" \
+"\x29\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x43\x72\x65\x61" \
+"\x74\x69\x6f\x6e\x20\x6d\x6f\x64\x65\x20\x28\x64\x65\x66\x61\x75" \
+"\x6c\x74\x20\x61\x3d\x72\x77\x29\x0a\x54\x59\x50\x45\x3a\x0a\x09" \
+"\x62\x09\x42\x6c\x6f\x63\x6b\x20\x64\x65\x76\x69\x63\x65\x0a\x09" \
+"\x63\x20\x6f\x72\x20\x75\x09\x43\x68\x61\x72\x61\x63\x74\x65\x72" \
+"\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x70\x09\x4e\x61\x6d\x65\x64" \
+"\x20\x70\x69\x70\x65\x20\x28\x4d\x41\x4a\x4f\x52\x20\x61\x6e\x64" \
+"\x20\x4d\x49\x4e\x4f\x52\x20\x61\x72\x65\x20\x69\x67\x6e\x6f\x72" \
+"\x65\x64\x29\x00\x5b\x2d\x4c\x20\x4c\x42\x4c\x5d\x20\x42\x4c\x4f" \
"\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a" \
-"\x4d\x61\x6b\x65\x20\x61\x20\x46\x41\x54\x33\x32\x20\x66\x69\x6c" \
-"\x65\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72" \
-"\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x20\x4c\x42\x4c\x09\x56\x6f\x6c" \
-"\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x00\x5b\x2d\x46\x6e\x5d\x20" \
-"\x5b\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d" \
-"\x69\x20\x49\x4e\x4f\x44\x45\x5f\x52\x41\x54\x49\x4f\x5d\x20\x5b" \
-"\x2d\x49\x20\x49\x4e\x4f\x44\x45\x5f\x53\x49\x5a\x45\x5d\x20\x5b" \
-"\x2d\x6d\x20\x52\x45\x53\x45\x52\x56\x45\x44\x5f\x50\x45\x52\x43" \
-"\x45\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20" \
-"\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53" \
-"\x5d\x0a\x0a\x09\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x09" \
-"\x42\x6c\x6f\x63\x6b\x20\x73\x69\x7a\x65\x2c\x20\x62\x79\x74\x65" \
-"\x73\x0a\x09\x2d\x46\x09\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x69" \
-"\x20\x52\x41\x54\x49\x4f\x09\x4d\x61\x78\x20\x6e\x75\x6d\x62\x65" \
-"\x72\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x69\x73\x20\x66\x69" \
-"\x6c\x65\x73\x79\x73\x74\x65\x6d\x5f\x73\x69\x7a\x65\x20\x2f\x20" \
-"\x52\x41\x54\x49\x4f\x0a\x09\x2d\x49\x20\x42\x59\x54\x45\x53\x09" \
-"\x49\x6e\x6f\x64\x65\x20\x73\x69\x7a\x65\x20\x28\x6d\x69\x6e\x20" \
-"\x31\x32\x38\x29\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x09\x56\x6f" \
-"\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x0a\x09\x2d\x6d\x20\x50" \
-"\x45\x52\x43\x45\x4e\x54\x09\x50\x65\x72\x63\x65\x6e\x74\x20\x6f" \
-"\x66\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20\x72\x65\x73\x65" \
-"\x72\x76\x65\x20\x66\x6f\x72\x20\x61\x64\x6d\x69\x6e\x0a\x09\x2d" \
-"\x6e\x09\x09\x44\x72\x79\x20\x72\x75\x6e\x00\x5b\x2d\x6d\x20\x4d" \
-"\x4f\x44\x45\x5d\x20\x4e\x41\x4d\x45\x0a\x0a\x43\x72\x65\x61\x74" \
-"\x65\x20\x6e\x61\x6d\x65\x64\x20\x70\x69\x70\x65\x0a\x0a\x09\x2d" \
-"\x6d\x20\x4d\x4f\x44\x45\x09\x4d\x6f\x64\x65\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x20\x61\x3d\x72\x77\x29\x00\x5b\x2d\x46\x6e\x5d" \
-"\x20\x5b\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x5d\x20\x5b" \
-"\x2d\x69\x20\x49\x4e\x4f\x44\x45\x5f\x52\x41\x54\x49\x4f\x5d\x20" \
-"\x5b\x2d\x49\x20\x49\x4e\x4f\x44\x45\x5f\x53\x49\x5a\x45\x5d\x20" \
-"\x5b\x2d\x6d\x20\x52\x45\x53\x45\x52\x56\x45\x44\x5f\x50\x45\x52" \
-"\x43\x45\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d" \
-"\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45" \
-"\x53\x5d\x0a\x0a\x09\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45" \
-"\x09\x42\x6c\x6f\x63\x6b\x20\x73\x69\x7a\x65\x2c\x20\x62\x79\x74" \
-"\x65\x73\x0a\x09\x2d\x46\x09\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d" \
-"\x69\x20\x52\x41\x54\x49\x4f\x09\x4d\x61\x78\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x69\x73\x20\x66" \
-"\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x5f\x73\x69\x7a\x65\x20\x2f" \
-"\x20\x52\x41\x54\x49\x4f\x0a\x09\x2d\x49\x20\x42\x59\x54\x45\x53" \
-"\x09\x49\x6e\x6f\x64\x65\x20\x73\x69\x7a\x65\x20\x28\x6d\x69\x6e" \
-"\x20\x31\x32\x38\x29\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x09\x56" \
-"\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x0a\x09\x2d\x6d\x20" \
-"\x50\x45\x52\x43\x45\x4e\x54\x09\x50\x65\x72\x63\x65\x6e\x74\x20" \
-"\x6f\x66\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20\x72\x65\x73" \
-"\x65\x72\x76\x65\x20\x66\x6f\x72\x20\x61\x64\x6d\x69\x6e\x0a\x09" \
-"\x2d\x6e\x09\x09\x44\x72\x79\x20\x72\x75\x6e\x00\x5b\x2d\x76\x5d" \
-"\x20\x5b\x2d\x6e\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43" \
-"\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x4d" \
-"\x61\x6b\x65\x20\x61\x20\x46\x41\x54\x33\x32\x20\x66\x69\x6c\x65" \
-"\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62" \
-"\x6f\x73\x65\x0a\x09\x2d\x6e\x20\x4c\x42\x4c\x09\x56\x6f\x6c\x75" \
-"\x6d\x65\x20\x6c\x61\x62\x65\x6c\x00\x5b\x2d\x6d\x20\x4d\x4f\x44" \
-"\x45\x5d\x20\x4e\x41\x4d\x45\x20\x54\x59\x50\x45\x20\x4d\x41\x4a" \
-"\x4f\x52\x20\x4d\x49\x4e\x4f\x52\x0a\x0a\x43\x72\x65\x61\x74\x65" \
-"\x20\x61\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x66\x69\x6c\x65\x20" \
-"\x28\x62\x6c\x6f\x63\x6b\x2c\x20\x63\x68\x61\x72\x61\x63\x74\x65" \
-"\x72\x2c\x20\x6f\x72\x20\x70\x69\x70\x65\x29\x0a\x0a\x09\x2d\x6d" \
-"\x20\x4d\x4f\x44\x45\x09\x43\x72\x65\x61\x74\x69\x6f\x6e\x20\x6d" \
-"\x6f\x64\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x61\x3d\x72" \
-"\x77\x29\x0a\x54\x59\x50\x45\x3a\x0a\x09\x62\x09\x42\x6c\x6f\x63" \
-"\x6b\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x63\x20\x6f\x72\x20\x75" \
-"\x09\x43\x68\x61\x72\x61\x63\x74\x65\x72\x20\x64\x65\x76\x69\x63" \
-"\x65\x0a\x09\x70\x09\x4e\x61\x6d\x65\x64\x20\x70\x69\x70\x65\x20" \
-"\x28\x4d\x41\x4a\x4f\x52\x20\x61\x6e\x64\x20\x4d\x49\x4e\x4f\x52" \
-"\x20\x61\x72\x65\x20\x69\x67\x6e\x6f\x72\x65\x64\x29\x00\x5b\x2d" \
-"\x4c\x20\x4c\x42\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20" \
-"\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x50\x72\x65\x70\x61\x72" \
-"\x65\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x74\x6f\x20\x62\x65" \
-"\x20\x75\x73\x65\x64\x20\x61\x73\x20\x73\x77\x61\x70\x20\x70\x61" \
-"\x72\x74\x69\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x4c\x20\x4c\x42\x4c" \
-"\x09\x4c\x61\x62\x65\x6c\x00\x5b\x2d\x64\x74\x5d\x20\x5b\x2d\x70" \
-"\x20\x44\x49\x52\x5d\x20\x5b\x54\x45\x4d\x50\x4c\x41\x54\x45\x5d" \
-"\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20\x74\x65\x6d\x70\x6f" \
-"\x72\x61\x72\x79\x20\x66\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x6e" \
-"\x61\x6d\x65\x20\x62\x61\x73\x65\x64\x20\x6f\x6e\x20\x54\x45\x4d" \
-"\x50\x4c\x41\x54\x45\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20" \
-"\x69\x74\x73\x20\x6e\x61\x6d\x65\x2e\x0a\x54\x45\x4d\x50\x4c\x41" \
-"\x54\x45\x20\x6d\x75\x73\x74\x20\x65\x6e\x64\x20\x77\x69\x74\x68" \
-"\x20\x58\x58\x58\x58\x58\x58\x20\x28\x65\x2e\x67\x2e\x20\x5b\x2f" \
-"\x64\x69\x72\x2f\x5d\x6e\x61\x6d\x65\x58\x58\x58\x58\x58\x58\x29" \
-"\x2e\x0a\x57\x69\x74\x68\x6f\x75\x74\x20\x54\x45\x4d\x50\x4c\x41" \
-"\x54\x45\x2c\x20\x2d\x74\x20\x74\x6d\x70\x2e\x58\x58\x58\x58\x58" \
-"\x58\x20\x69\x73\x20\x61\x73\x73\x75\x6d\x65\x64\x2e\x0a\x0a\x09" \
-"\x2d\x64\x09\x4d\x61\x6b\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x79\x2c\x20\x6e\x6f\x74\x20\x66\x69\x6c\x65\x0a\x09\x2d\x74\x09" \
-"\x50\x72\x65\x70\x65\x6e\x64\x20\x62\x61\x73\x65\x20\x64\x69\x72" \
-"\x65\x63\x74\x6f\x72\x79\x20\x6e\x61\x6d\x65\x20\x74\x6f\x20\x54" \
-"\x45\x4d\x50\x4c\x41\x54\x45\x0a\x09\x2d\x70\x20\x44\x49\x52\x09" \
-"\x55\x73\x65\x20\x44\x49\x52\x20\x61\x73\x20\x61\x20\x62\x61\x73" \
-"\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x28\x69\x6d\x70" \
-"\x6c\x69\x65\x73\x20\x2d\x74\x29\x0a\x0a\x42\x61\x73\x65\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x69\x73\x3a\x20\x2d\x70\x20" \
-"\x44\x49\x52\x2c\x20\x65\x6c\x73\x65\x20\x24\x54\x4d\x50\x44\x49" \
-"\x52\x2c\x20\x65\x6c\x73\x65\x20\x2f\x74\x6d\x70\x00\x5b\x2d\x61" \
-"\x64\x6c\x70\x30\x5d\x20\x5b\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72" \
-"\x64\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x0a\x0a\x09\x2d\x61\x09\x09" \
+"\x50\x72\x65\x70\x61\x72\x65\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56" \
+"\x20\x74\x6f\x20\x62\x65\x20\x75\x73\x65\x64\x20\x61\x73\x20\x73" \
+"\x77\x61\x70\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x0a\x0a\x09" \
+"\x2d\x4c\x20\x4c\x42\x4c\x09\x4c\x61\x62\x65\x6c\x00\x5b\x2d\x64" \
+"\x74\x5d\x20\x5b\x2d\x70\x20\x44\x49\x52\x5d\x20\x5b\x54\x45\x4d" \
+"\x50\x4c\x41\x54\x45\x5d\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61" \
+"\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x79\x20\x66\x69\x6c\x65\x20" \
+"\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x20\x62\x61\x73\x65\x64\x20" \
+"\x6f\x6e\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x20\x61\x6e\x64\x20" \
+"\x70\x72\x69\x6e\x74\x20\x69\x74\x73\x20\x6e\x61\x6d\x65\x2e\x0a" \
+"\x54\x45\x4d\x50\x4c\x41\x54\x45\x20\x6d\x75\x73\x74\x20\x65\x6e" \
+"\x64\x20\x77\x69\x74\x68\x20\x58\x58\x58\x58\x58\x58\x20\x28\x65" \
+"\x2e\x67\x2e\x20\x5b\x2f\x64\x69\x72\x2f\x5d\x6e\x61\x6d\x65\x58" \
+"\x58\x58\x58\x58\x58\x29\x2e\x0a\x57\x69\x74\x68\x6f\x75\x74\x20" \
+"\x54\x45\x4d\x50\x4c\x41\x54\x45\x2c\x20\x2d\x74\x20\x74\x6d\x70" \
+"\x2e\x58\x58\x58\x58\x58\x58\x20\x69\x73\x20\x61\x73\x73\x75\x6d" \
+"\x65\x64\x2e\x0a\x0a\x09\x2d\x64\x09\x4d\x61\x6b\x65\x20\x64\x69" \
+"\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x6e\x6f\x74\x20\x66\x69\x6c" \
+"\x65\x0a\x09\x2d\x74\x09\x50\x72\x65\x70\x65\x6e\x64\x20\x62\x61" \
+"\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x61\x6d" \
+"\x65\x20\x74\x6f\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x0a\x09\x2d" \
+"\x70\x20\x44\x49\x52\x09\x55\x73\x65\x20\x44\x49\x52\x20\x61\x73" \
+"\x20\x61\x20\x62\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
+"\x79\x20\x28\x69\x6d\x70\x6c\x69\x65\x73\x20\x2d\x74\x29\x0a\x09" \
+"\x2d\x75\x09\x44\x6f\x20\x6e\x6f\x74\x20\x63\x72\x65\x61\x74\x65" \
+"\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x3b\x20\x70\x72\x69\x6e\x74" \
+"\x20\x61\x20\x6e\x61\x6d\x65\x0a\x0a\x42\x61\x73\x65\x20\x64\x69" \
+"\x72\x65\x63\x74\x6f\x72\x79\x20\x69\x73\x3a\x20\x2d\x70\x20\x44" \
+"\x49\x52\x2c\x20\x65\x6c\x73\x65\x20\x24\x54\x4d\x50\x44\x49\x52" \
+"\x2c\x20\x65\x6c\x73\x65\x20\x2f\x74\x6d\x70\x00\x5b\x2d\x61\x64" \
+"\x6c\x70\x30\x5d\x20\x5b\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72\x64" \
+"\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x0a\x0a\x09\x2d\x61\x09\x09\x53" \
+"\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20" \
+"\x61\x75\x74\x68\x6f\x72\x27\x0a\x09\x2d\x64\x09\x09\x53\x68\x6f" \
+"\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x64\x65" \
+"\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x27\x0a\x09\x2d\x6c\x09\x09" \
"\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46" \
-"\x20\x61\x75\x74\x68\x6f\x72\x27\x0a\x09\x2d\x64\x09\x09\x53\x68" \
-"\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x64" \
-"\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x27\x0a\x09\x2d\x6c\x09" \
-"\x09\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d" \
-"\x46\x20\x6c\x69\x63\x65\x6e\x73\x65\x27\x0a\x09\x2d\x70\x09\x09" \
-"\x53\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46" \
-"\x20\x70\x61\x72\x6d\x27\x0a\x09\x2d\x46\x20\x6b\x65\x79\x77\x6f" \
-"\x72\x64\x09\x4b\x65\x79\x77\x6f\x72\x64\x20\x74\x6f\x20\x6c\x6f" \
-"\x6f\x6b\x20\x66\x6f\x72\x0a\x09\x2d\x30\x09\x09\x53\x65\x70\x61" \
-"\x72\x61\x74\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x77\x69\x74\x68" \
-"\x20\x4e\x55\x4c\x73\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20" \
-"\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76" \
-"\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61" \
-"\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63" \
-"\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46" \
-"\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f" \
-"\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70" \
-"\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69" \
-"\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72" \
-"\x00\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77" \
-"\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29" \
-"\x20\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x61" \
-"\x74\x20\x61\x20\x74\x69\x6d\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e" \
-"\x53\x5d\x20\x5b\x2d\x6f\x20\x4f\x50\x54\x53\x5d\x20\x44\x45\x56" \
-"\x49\x43\x45\x20\x4e\x4f\x44\x45\x0a\x0a\x4d\x6f\x75\x6e\x74\x20" \
-"\x61\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2e\x20\x46\x69" \
-"\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x61\x75\x74\x6f\x64\x65\x74" \
-"\x65\x63\x74\x69\x6f\x6e\x20\x72\x65\x71\x75\x69\x72\x65\x73\x20" \
-"\x2f\x70\x72\x6f\x63\x2e\x0a\x0a\x09\x2d\x61\x09\x09\x4d\x6f\x75" \
-"\x6e\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x73\x20\x69\x6e\x20\x66\x73\x74\x61\x62\x0a\x09\x2d\x66\x09" \
-"\x09\x44\x72\x79\x20\x72\x75\x6e\x0a\x09\x2d\x72\x09\x09\x52\x65" \
-"\x61\x64\x2d\x6f\x6e\x6c\x79\x20\x6d\x6f\x75\x6e\x74\x0a\x09\x2d" \
-"\x77\x09\x09\x52\x65\x61\x64\x2d\x77\x72\x69\x74\x65\x20\x6d\x6f" \
-"\x75\x6e\x74\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d" \
-"\x74\x20\x46\x53\x54\x59\x50\x45\x09\x46\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x20\x74\x79\x70\x65\x0a\x09\x2d\x4f\x20\x4f\x50\x54" \
-"\x09\x09\x4d\x6f\x75\x6e\x74\x20\x6f\x6e\x6c\x79\x20\x66\x69\x6c" \
-"\x65\x73\x79\x73\x74\x65\x6d\x73\x20\x77\x69\x74\x68\x20\x6f\x70" \
-"\x74\x69\x6f\x6e\x20\x4f\x50\x54\x20\x28\x2d\x61\x20\x6f\x6e\x6c" \
-"\x79\x29\x0a\x2d\x6f\x20\x4f\x50\x54\x3a\x0a\x09\x6c\x6f\x6f\x70" \
-"\x09\x09\x49\x67\x6e\x6f\x72\x65\x64\x20\x28\x6c\x6f\x6f\x70\x20" \
-"\x64\x65\x76\x69\x63\x65\x73\x20\x61\x72\x65\x20\x61\x75\x74\x6f" \
-"\x64\x65\x74\x65\x63\x74\x65\x64\x29\x0a\x09\x5b\x61\x5d\x73\x79" \
-"\x6e\x63\x09\x09\x57\x72\x69\x74\x65\x73\x20\x61\x72\x65\x20\x5b" \
-"\x61\x5d\x73\x79\x6e\x63\x68\x72\x6f\x6e\x6f\x75\x73\x0a\x09\x5b" \
-"\x6e\x6f\x5d\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c\x65" \
-"\x2f\x65\x6e\x61\x62\x6c\x65\x20\x75\x70\x64\x61\x74\x65\x73\x20" \
-"\x74\x6f\x20\x69\x6e\x6f\x64\x65\x20\x61\x63\x63\x65\x73\x73\x20" \
-"\x74\x69\x6d\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x64\x69\x72\x61\x74" \
-"\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62" \
-"\x6c\x65\x20\x61\x74\x69\x6d\x65\x20\x75\x70\x64\x61\x74\x65\x73" \
-"\x20\x74\x6f\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a" \
-"\x09\x5b\x6e\x6f\x5d\x72\x65\x6c\x61\x74\x69\x6d\x65\x09\x44\x69" \
-"\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61\x74\x69" \
-"\x6d\x65\x20\x75\x70\x64\x61\x74\x65\x73\x20\x72\x65\x6c\x61\x74" \
-"\x69\x76\x65\x20\x74\x6f\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74" \
-"\x69\x6f\x6e\x20\x74\x69\x6d\x65\x0a\x09\x5b\x6e\x6f\x5d\x64\x65" \
-"\x76\x09\x09\x28\x44\x69\x73\x29\x61\x6c\x6c\x6f\x77\x20\x75\x73" \
-"\x65\x20\x6f\x66\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x64\x65\x76" \
-"\x69\x63\x65\x20\x66\x69\x6c\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x65" \
-"\x78\x65\x63\x09\x28\x44\x69\x73\x29\x61\x6c\x6c\x6f\x77\x20\x75" \
-"\x73\x65\x20\x6f\x66\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65" \
-"\x20\x66\x69\x6c\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x73\x75\x69\x64" \
-"\x09\x28\x44\x69\x73\x29\x61\x6c\x6c\x6f\x77\x20\x73\x65\x74\x2d" \
-"\x75\x73\x65\x72\x2d\x69\x64\x2d\x72\x6f\x6f\x74\x20\x70\x72\x6f" \
-"\x67\x72\x61\x6d\x73\x0a\x09\x5b\x72\x5d\x73\x68\x61\x72\x65\x64" \
-"\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73" \
-"\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x20\x73\x68\x61\x72" \
-"\x65\x64\x20\x73\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x72\x5d\x73" \
-"\x6c\x61\x76\x65\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72\x65" \
-"\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x20" \
-"\x73\x6c\x61\x76\x65\x20\x73\x75\x62\x74\x72\x65\x65\x0a\x09\x5b" \
-"\x72\x5d\x70\x72\x69\x76\x61\x74\x65\x09\x43\x6f\x6e\x76\x65\x72" \
-"\x74\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20" \
-"\x74\x6f\x20\x61\x20\x70\x72\x69\x76\x61\x74\x65\x20\x73\x75\x62" \
-"\x74\x72\x65\x65\x0a\x09\x5b\x75\x6e\x5d\x62\x69\x6e\x64\x61\x62" \
-"\x6c\x65\x09\x4d\x61\x6b\x65\x20\x6d\x6f\x75\x6e\x74\x20\x70\x6f" \
-"\x69\x6e\x74\x20\x5b\x75\x6e\x5d\x61\x62\x6c\x65\x20\x74\x6f\x20" \
-"\x62\x65\x20\x62\x69\x6e\x64\x20\x6d\x6f\x75\x6e\x74\x65\x64\x0a" \
-"\x09\x5b\x72\x5d\x62\x69\x6e\x64\x09\x09\x42\x69\x6e\x64\x20\x61" \
-"\x20\x66\x69\x6c\x65\x20\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x79\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d" \
-"\x20\x74\x6f\x20\x61\x6e\x6f\x74\x68\x65\x72\x20\x6c\x6f\x63\x61" \
-"\x74\x69\x6f\x6e\x0a\x09\x6d\x6f\x76\x65\x09\x09\x52\x65\x6c\x6f" \
-"\x63\x61\x74\x65\x20\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e\x67" \
-"\x20\x6d\x6f\x75\x6e\x74\x20\x70\x6f\x69\x6e\x74\x0a\x09\x72\x65" \
-"\x6d\x6f\x75\x6e\x74\x09\x09\x52\x65\x6d\x6f\x75\x6e\x74\x20\x61" \
-"\x20\x6d\x6f\x75\x6e\x74\x65\x64\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x2c\x20\x63\x68\x61\x6e\x67\x69\x6e\x67\x20\x66\x6c" \
-"\x61\x67\x73\x0a\x09\x72\x6f\x2f\x72\x77\x09\x09\x53\x61\x6d\x65" \
-"\x20\x61\x73\x20\x2d\x72\x2f\x2d\x77\x0a\x0a\x54\x68\x65\x72\x65" \
-"\x20\x61\x72\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2d" \
-"\x73\x70\x65\x63\x69\x66\x69\x63\x20\x2d\x6f\x20\x66\x6c\x61\x67" \
-"\x73\x2e\x00\x5b\x2d\x71\x5d\x20\x3c\x5b\x2d\x64\x6e\x5d\x20\x44" \
-"\x49\x52\x20\x7c\x20\x2d\x78\x20\x44\x45\x56\x49\x43\x45\x3e\x0a" \
-"\x0a\x43\x68\x65\x63\x6b\x20\x69\x66\x20\x74\x68\x65\x20\x64\x69" \
-"\x72\x65\x63\x74\x6f\x72\x79\x20\x69\x73\x20\x61\x20\x6d\x6f\x75" \
-"\x6e\x74\x70\x6f\x69\x6e\x74\x0a\x0a\x09\x2d\x71\x09\x51\x75\x69" \
-"\x65\x74\x0a\x09\x2d\x64\x09\x50\x72\x69\x6e\x74\x20\x6d\x61\x6a" \
-"\x6f\x72\x2f\x6d\x69\x6e\x6f\x72\x20\x64\x65\x76\x69\x63\x65\x20" \
-"\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69" \
-"\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x09\x2d\x6e\x09\x50\x72\x69" \
-"\x6e\x74\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x61\x6d\x65\x20\x6f" \
+"\x20\x6c\x69\x63\x65\x6e\x73\x65\x27\x0a\x09\x2d\x70\x09\x09\x53" \
+"\x68\x6f\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20" \
+"\x70\x61\x72\x6d\x27\x0a\x09\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72" \
+"\x64\x09\x4b\x65\x79\x77\x6f\x72\x64\x20\x74\x6f\x20\x6c\x6f\x6f" \
+"\x6b\x20\x66\x6f\x72\x0a\x09\x2d\x30\x09\x09\x53\x65\x70\x61\x72" \
+"\x61\x74\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x77\x69\x74\x68\x20" \
+"\x4e\x55\x4c\x73\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20\x4d" \
+"\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76\x61" \
+"\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65\x6d" \
+"\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61\x63" \
+"\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63\x6c" \
+"\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d" \
+"\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46\x6f" \
+"\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f\x72" \
+"\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f" \
+"\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69\x6e" \
+"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72\x00" \
+"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77\x20" \
+"\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20" \
+"\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x61\x74" \
+"\x20\x61\x20\x74\x69\x6d\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
+"\x5d\x20\x5b\x2d\x6f\x20\x4f\x50\x54\x53\x5d\x20\x44\x45\x56\x49" \
+"\x43\x45\x20\x4e\x4f\x44\x45\x0a\x0a\x4d\x6f\x75\x6e\x74\x20\x61" \
+"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2e\x20\x46\x69\x6c" \
+"\x65\x73\x79\x73\x74\x65\x6d\x20\x61\x75\x74\x6f\x64\x65\x74\x65" \
+"\x63\x74\x69\x6f\x6e\x20\x72\x65\x71\x75\x69\x72\x65\x73\x20\x2f" \
+"\x70\x72\x6f\x63\x2e\x0a\x0a\x09\x2d\x61\x09\x09\x4d\x6f\x75\x6e" \
+"\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
+"\x73\x20\x69\x6e\x20\x66\x73\x74\x61\x62\x0a\x09\x2d\x66\x09\x09" \
+"\x44\x72\x79\x20\x72\x75\x6e\x0a\x09\x2d\x72\x09\x09\x52\x65\x61" \
+"\x64\x2d\x6f\x6e\x6c\x79\x20\x6d\x6f\x75\x6e\x74\x0a\x09\x2d\x77" \
+"\x09\x09\x52\x65\x61\x64\x2d\x77\x72\x69\x74\x65\x20\x6d\x6f\x75" \
+"\x6e\x74\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x74" \
+"\x20\x46\x53\x54\x59\x50\x45\x5b\x2c\x2e\x2e\x2e\x5d\x09\x46\x69" \
+"\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x74\x79\x70\x65\x28\x73\x29" \
+"\x0a\x09\x2d\x4f\x20\x4f\x50\x54\x09\x09\x4d\x6f\x75\x6e\x74\x20" \
+"\x6f\x6e\x6c\x79\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73" \
+"\x20\x77\x69\x74\x68\x20\x6f\x70\x74\x69\x6f\x6e\x20\x4f\x50\x54" \
+"\x20\x28\x2d\x61\x20\x6f\x6e\x6c\x79\x29\x0a\x2d\x6f\x20\x4f\x50" \
+"\x54\x3a\x0a\x09\x6c\x6f\x6f\x70\x09\x09\x49\x67\x6e\x6f\x72\x65" \
+"\x64\x20\x28\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x73\x20" \
+"\x61\x72\x65\x20\x61\x75\x74\x6f\x64\x65\x74\x65\x63\x74\x65\x64" \
+"\x29\x0a\x09\x5b\x61\x5d\x73\x79\x6e\x63\x09\x09\x57\x72\x69\x74" \
+"\x65\x73\x20\x61\x72\x65\x20\x5b\x61\x5d\x73\x79\x6e\x63\x68\x72" \
+"\x6f\x6e\x6f\x75\x73\x0a\x09\x5b\x6e\x6f\x5d\x61\x74\x69\x6d\x65" \
+"\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20" \
+"\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x69\x6e\x6f\x64\x65" \
+"\x20\x61\x63\x63\x65\x73\x73\x20\x74\x69\x6d\x65\x73\x0a\x09\x5b" \
+"\x6e\x6f\x5d\x64\x69\x72\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61" \
+"\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61\x74\x69\x6d\x65" \
+"\x20\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x64\x69\x72\x65" \
+"\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x72\x65\x6c" \
+"\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e" \
+"\x61\x62\x6c\x65\x20\x61\x74\x69\x6d\x65\x20\x75\x70\x64\x61\x74" \
+"\x65\x73\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x20\x74\x6f\x20\x6d" \
+"\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20\x74\x69\x6d\x65" \
+"\x0a\x09\x5b\x6e\x6f\x5d\x64\x65\x76\x09\x09\x28\x44\x69\x73\x29" \
+"\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66\x20\x73\x70\x65" \
+"\x63\x69\x61\x6c\x20\x64\x65\x76\x69\x63\x65\x20\x66\x69\x6c\x65" \
+"\x73\x0a\x09\x5b\x6e\x6f\x5d\x65\x78\x65\x63\x09\x28\x44\x69\x73" \
+"\x29\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66\x20\x65\x78" \
+"\x65\x63\x75\x74\x61\x62\x6c\x65\x20\x66\x69\x6c\x65\x73\x0a\x09" \
+"\x5b\x6e\x6f\x5d\x73\x75\x69\x64\x09\x28\x44\x69\x73\x29\x61\x6c" \
+"\x6c\x6f\x77\x20\x73\x65\x74\x2d\x75\x73\x65\x72\x2d\x69\x64\x2d" \
+"\x72\x6f\x6f\x74\x20\x70\x72\x6f\x67\x72\x61\x6d\x73\x0a\x09\x5b" \
+"\x72\x5d\x73\x68\x61\x72\x65\x64\x09\x43\x6f\x6e\x76\x65\x72\x74" \
+"\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74" \
+"\x6f\x20\x61\x20\x73\x68\x61\x72\x65\x64\x20\x73\x75\x62\x74\x72" \
+"\x65\x65\x0a\x09\x5b\x72\x5d\x73\x6c\x61\x76\x65\x09\x43\x6f\x6e" \
+"\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c" \
+"\x79\x5d\x20\x74\x6f\x20\x61\x20\x73\x6c\x61\x76\x65\x20\x73\x75" \
+"\x62\x74\x72\x65\x65\x0a\x09\x5b\x72\x5d\x70\x72\x69\x76\x61\x74" \
+"\x65\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72" \
+"\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x20\x70\x72\x69" \
+"\x76\x61\x74\x65\x20\x73\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x75" \
+"\x6e\x5d\x62\x69\x6e\x64\x61\x62\x6c\x65\x09\x4d\x61\x6b\x65\x20" \
+"\x6d\x6f\x75\x6e\x74\x20\x70\x6f\x69\x6e\x74\x20\x5b\x75\x6e\x5d" \
+"\x61\x62\x6c\x65\x20\x74\x6f\x20\x62\x65\x20\x62\x69\x6e\x64\x20" \
+"\x6d\x6f\x75\x6e\x74\x65\x64\x0a\x09\x5b\x72\x5d\x62\x69\x6e\x64" \
+"\x09\x09\x42\x69\x6e\x64\x20\x61\x20\x66\x69\x6c\x65\x20\x6f\x72" \
+"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x5b\x72\x65\x63\x75" \
+"\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x6e\x6f\x74" \
+"\x68\x65\x72\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x0a\x09\x6d\x6f" \
+"\x76\x65\x09\x09\x52\x65\x6c\x6f\x63\x61\x74\x65\x20\x61\x6e\x20" \
+"\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x6d\x6f\x75\x6e\x74\x20\x70" \
+"\x6f\x69\x6e\x74\x0a\x09\x72\x65\x6d\x6f\x75\x6e\x74\x09\x09\x52" \
+"\x65\x6d\x6f\x75\x6e\x74\x20\x61\x20\x6d\x6f\x75\x6e\x74\x65\x64" \
+"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2c\x20\x63\x68\x61" \
+"\x6e\x67\x69\x6e\x67\x20\x66\x6c\x61\x67\x73\x0a\x09\x72\x6f\x2f" \
+"\x72\x77\x09\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x2d\x72\x2f\x2d" \
+"\x77\x0a\x0a\x54\x68\x65\x72\x65\x20\x61\x72\x65\x20\x66\x69\x6c" \
+"\x65\x73\x79\x73\x74\x65\x6d\x2d\x73\x70\x65\x63\x69\x66\x69\x63" \
+"\x20\x2d\x6f\x20\x66\x6c\x61\x67\x73\x2e\x00\x5b\x2d\x71\x5d\x20" \
+"\x3c\x5b\x2d\x64\x6e\x5d\x20\x44\x49\x52\x20\x7c\x20\x2d\x78\x20" \
+"\x44\x45\x56\x49\x43\x45\x3e\x0a\x0a\x43\x68\x65\x63\x6b\x20\x69" \
+"\x66\x20\x74\x68\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20" \
+"\x69\x73\x20\x61\x20\x6d\x6f\x75\x6e\x74\x70\x6f\x69\x6e\x74\x0a" \
+"\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x64\x09\x50" \
+"\x72\x69\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e\x6f\x72" \
+"\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f" \
"\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x0a\x09\x2d\x78\x09\x50\x72\x69\x6e\x74\x20\x6d\x61\x6a\x6f\x72" \
-"\x2f\x6d\x69\x6e\x6f\x72\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x75" \
-"\x6d\x62\x65\x72\x20\x6f\x66\x20\x74\x68\x65\x20\x62\x6c\x6f\x63" \
-"\x6b\x64\x65\x76\x69\x63\x65\x00\x5b\x2d\x41\x5d\x20\x5b\x2d\x49" \
-"\x20\x53\x55\x4d\x7c\x43\x50\x55\x7c\x41\x4c\x4c\x7c\x53\x43\x50" \
-"\x55\x5d\x20\x5b\x2d\x75\x5d\x20\x5b\x2d\x50\x20\x6e\x75\x6d\x7c" \
-"\x41\x4c\x4c\x5d\x20\x5b\x49\x4e\x54\x45\x52\x56\x41\x4c\x20\x5b" \
-"\x43\x4f\x55\x4e\x54\x5d\x5d\x0a\x0a\x50\x65\x72\x2d\x70\x72\x6f" \
-"\x63\x65\x73\x73\x6f\x72\x20\x73\x74\x61\x74\x69\x73\x74\x69\x63" \
-"\x73\x0a\x0a\x09\x2d\x41\x09\x09\x09\x53\x61\x6d\x65\x20\x61\x73" \
-"\x20\x2d\x49\x20\x41\x4c\x4c\x20\x2d\x75\x20\x2d\x50\x20\x41\x4c" \
-"\x4c\x0a\x09\x2d\x49\x20\x53\x55\x4d\x7c\x43\x50\x55\x7c\x41\x4c" \
-"\x4c\x7c\x53\x43\x50\x55\x09\x52\x65\x70\x6f\x72\x74\x20\x69\x6e" \
-"\x74\x65\x72\x72\x75\x70\x74\x20\x73\x74\x61\x74\x69\x73\x74\x69" \
-"\x63\x73\x0a\x09\x2d\x50\x20\x6e\x75\x6d\x7c\x41\x4c\x4c\x09\x09" \
-"\x50\x72\x6f\x63\x65\x73\x73\x6f\x72\x20\x74\x6f\x20\x6d\x6f\x6e" \
-"\x69\x74\x6f\x72\x0a\x09\x2d\x75\x09\x09\x09\x52\x65\x70\x6f\x72" \
-"\x74\x20\x43\x50\x55\x20\x75\x74\x69\x6c\x69\x7a\x61\x74\x69\x6f" \
-"\x6e\x00\x5b\x2d\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43\x45\x20" \
-"\x44\x45\x53\x54\x0a\x6f\x72\x3a\x20\x6d\x76\x20\x5b\x2d\x66\x69" \
-"\x6e\x5d\x20\x53\x4f\x55\x52\x43\x45\x2e\x2e\x2e\x20\x44\x49\x52" \
-"\x45\x43\x54\x4f\x52\x59\x0a\x0a\x52\x65\x6e\x61\x6d\x65\x20\x53" \
-"\x4f\x55\x52\x43\x45\x20\x74\x6f\x20\x44\x45\x53\x54\x2c\x20\x6f" \
-"\x72\x20\x6d\x6f\x76\x65\x20\x53\x4f\x55\x52\x43\x45\x28\x73\x29" \
-"\x20\x74\x6f\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09" \
-"\x2d\x66\x09\x44\x6f\x6e\x27\x74\x20\x70\x72\x6f\x6d\x70\x74\x20" \
-"\x62\x65\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x69" \
-"\x6e\x67\x0a\x09\x2d\x69\x09\x49\x6e\x74\x65\x72\x61\x63\x74\x69" \
-"\x76\x65\x2c\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72" \
-"\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x6e\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x20" \
-"\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x66\x69\x6c\x65" \
-"\x00\x5b\x2d\x6f\x5d\x20\x5b\x2d\x62\x5d\x20\x5b\x2d\x73\x20\x41" \
-"\x44\x44\x52\x5d\x20\x5b\x2d\x66\x20\x46\x49\x4c\x45\x5d\x20\x4d" \
-"\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x0a\x0a\x44\x75\x6d\x70\x20" \
-"\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x4d\x54" \
-"\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x6f\x09\x4f\x6d" \
-"\x69\x74\x20\x6f\x6f\x62\x20\x64\x61\x74\x61\x0a\x09\x2d\x62\x09" \
-"\x4f\x6d\x69\x74\x20\x62\x61\x64\x20\x62\x6c\x6f\x63\x6b\x20\x66" \
-"\x72\x6f\x6d\x20\x74\x68\x65\x20\x64\x75\x6d\x70\x0a\x09\x2d\x73" \
-"\x20\x41\x44\x44\x52\x09\x53\x74\x61\x72\x74\x20\x61\x64\x64\x72" \
-"\x65\x73\x73\x0a\x09\x2d\x6c\x20\x4c\x45\x4e\x09\x4c\x65\x6e\x67" \
-"\x74\x68\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x44\x75\x6d\x70" \
-"\x20\x74\x6f\x20\x66\x69\x6c\x65\x20\x28\x27\x2d\x27\x20\x66\x6f" \
-"\x72\x20\x73\x74\x64\x6f\x75\x74\x29\x00\x5b\x2d\x70\x5d\x20\x5b" \
-"\x2d\x73\x20\x41\x44\x44\x52\x5d\x20\x4d\x54\x44\x5f\x44\x45\x56" \
-"\x49\x43\x45\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x57\x72\x69\x74" \
-"\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69" \
-"\x65\x64\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a\x09" \
-"\x2d\x70\x09\x50\x61\x64\x20\x74\x6f\x20\x70\x61\x67\x65\x20\x73" \
-"\x69\x7a\x65\x0a\x09\x2d\x73\x20\x41\x44\x44\x52\x09\x53\x74\x61" \
-"\x72\x74\x20\x61\x64\x64\x72\x65\x73\x73\x00\x48\x4f\x53\x54\x20" \
-"\x50\x4f\x52\x54\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x0a\x0a\x43" \
-"\x6f\x6e\x6e\x65\x63\x74\x20\x74\x6f\x20\x48\x4f\x53\x54\x20\x61" \
-"\x6e\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x20\x61\x20\x6e\x65\x74" \
-"\x77\x6f\x72\x6b\x20\x62\x6c\x6f\x63\x6b\x20\x64\x65\x76\x69\x63" \
-"\x65\x20\x6f\x6e\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x00\x5b\x2d" \
-"\x69\x4e\x5d\x20\x5b\x2d\x77\x4e\x5d\x20\x5b\x2d\x6c\x5d\x20\x5b" \
-"\x2d\x70\x20\x50\x4f\x52\x54\x5d\x20\x5b\x2d\x66\x20\x46\x49\x4c" \
-"\x45\x7c\x49\x50\x41\x44\x44\x52\x20\x50\x4f\x52\x54\x5d\x20\x5b" \
-"\x2d\x65\x20\x50\x52\x4f\x47\x5d\x0a\x0a\x4f\x70\x65\x6e\x20\x61" \
-"\x20\x70\x69\x70\x65\x20\x74\x6f\x20\x49\x50\x3a\x50\x4f\x52\x54" \
-"\x20\x6f\x72\x20\x46\x49\x4c\x45\x0a\x0a\x09\x2d\x65\x20\x50\x52" \
-"\x4f\x47\x09\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x61\x66\x74\x65" \
-"\x72\x20\x63\x6f\x6e\x6e\x65\x63\x74\x0a\x09\x2d\x6c\x09\x4c\x69" \
-"\x73\x74\x65\x6e\x20\x6d\x6f\x64\x65\x2c\x20\x66\x6f\x72\x20\x69" \
-"\x6e\x62\x6f\x75\x6e\x64\x20\x63\x6f\x6e\x6e\x65\x63\x74\x73\x0a" \
-"\x09\x09\x28\x75\x73\x65\x20\x2d\x6c\x20\x74\x77\x69\x63\x65\x20" \
-"\x77\x69\x74\x68\x20\x2d\x65\x20\x66\x6f\x72\x20\x70\x65\x72\x73" \
-"\x69\x73\x74\x65\x6e\x74\x20\x73\x65\x72\x76\x65\x72\x29\x0a\x09" \
-"\x2d\x70\x20\x50\x4f\x52\x54\x09\x4c\x6f\x63\x61\x6c\x20\x70\x6f" \
-"\x72\x74\x0a\x09\x2d\x77\x20\x53\x45\x43\x09\x54\x69\x6d\x65\x6f" \
-"\x75\x74\x20\x66\x6f\x72\x20\x63\x6f\x6e\x6e\x65\x63\x74\x0a\x09" \
-"\x2d\x69\x20\x53\x45\x43\x09\x44\x65\x6c\x61\x79\x20\x69\x6e\x74" \
-"\x65\x72\x76\x61\x6c\x20\x66\x6f\x72\x20\x6c\x69\x6e\x65\x73\x20" \
-"\x73\x65\x6e\x74\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x55\x73" \
-"\x65\x20\x66\x69\x6c\x65\x20\x28\x61\x6c\x61\x20\x2f\x64\x65\x76" \
-"\x2f\x74\x74\x79\x53\x30\x29\x20\x69\x6e\x73\x74\x65\x61\x64\x20" \
-"\x6f\x66\x20\x6e\x65\x74\x77\x6f\x72\x6b\x00\x5b\x2d\x72\x61\x6c" \
-"\x5d\x20\x5b\x2d\x74\x75\x77\x78\x5d\x20\x5b\x2d\x65\x6e\x57\x70" \
-"\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x6e\x65\x74\x77\x6f" \
-"\x72\x6b\x69\x6e\x67\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f" \
-"\x6e\x0a\x0a\x09\x2d\x72\x09\x52\x6f\x75\x74\x69\x6e\x67\x20\x74" \
-"\x61\x62\x6c\x65\x0a\x09\x2d\x61\x09\x41\x6c\x6c\x20\x73\x6f\x63" \
-"\x6b\x65\x74\x73\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x65\x6e\x69" \
-"\x6e\x67\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x09\x45\x6c\x73" \
-"\x65\x3a\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x20\x73\x6f\x63" \
-"\x6b\x65\x74\x73\x0a\x09\x2d\x74\x09\x54\x43\x50\x20\x73\x6f\x63" \
-"\x6b\x65\x74\x73\x0a\x09\x2d\x75\x09\x55\x44\x50\x20\x73\x6f\x63" \
-"\x6b\x65\x74\x73\x0a\x09\x2d\x77\x09\x52\x61\x77\x20\x73\x6f\x63" \
-"\x6b\x65\x74\x73\x0a\x09\x2d\x78\x09\x55\x6e\x69\x78\x20\x73\x6f" \
-"\x63\x6b\x65\x74\x73\x0a\x09\x09\x45\x6c\x73\x65\x3a\x20\x61\x6c" \
-"\x6c\x20\x73\x6f\x63\x6b\x65\x74\x20\x74\x79\x70\x65\x73\x0a\x09" \
-"\x2d\x65\x09\x4f\x74\x68\x65\x72\x2f\x6d\x6f\x72\x65\x20\x69\x6e" \
-"\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x6e\x09\x44\x6f" \
-"\x6e\x27\x74\x20\x72\x65\x73\x6f\x6c\x76\x65\x20\x6e\x61\x6d\x65" \
-"\x73\x0a\x09\x2d\x57\x09\x57\x69\x64\x65\x20\x64\x69\x73\x70\x6c" \
-"\x61\x79\x0a\x09\x2d\x70\x09\x53\x68\x6f\x77\x20\x50\x49\x44\x2f" \
-"\x70\x72\x6f\x67\x72\x61\x6d\x20\x6e\x61\x6d\x65\x20\x66\x6f\x72" \
-"\x20\x73\x6f\x63\x6b\x65\x74\x73\x00\x5b\x2d\x6e\x20\x41\x44\x4a" \
-"\x55\x53\x54\x5d\x20\x5b\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x5d" \
-"\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73\x63\x68\x65\x64\x75\x6c" \
-"\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x2c\x20\x72\x75" \
-"\x6e\x20\x50\x52\x4f\x47\x0a\x0a\x09\x2d\x6e\x20\x41\x44\x4a\x55" \
-"\x53\x54\x09\x41\x64\x6a\x75\x73\x74\x20\x70\x72\x69\x6f\x72\x69" \
-"\x74\x79\x20\x62\x79\x20\x41\x44\x4a\x55\x53\x54\x00\x50\x52\x4f" \
-"\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47" \
-"\x20\x69\x6d\x6d\x75\x6e\x65\x20\x74\x6f\x20\x68\x61\x6e\x67\x75" \
-"\x70\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x75\x74\x70\x75\x74\x20" \
-"\x74\x6f\x20\x61\x20\x6e\x6f\x6e\x2d\x74\x74\x79\x00\x5b\x48\x4f" \
-"\x53\x54\x5d\x20\x5b\x53\x45\x52\x56\x45\x52\x5d\x0a\x0a\x51\x75" \
-"\x65\x72\x79\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x73\x65\x72\x76" \
-"\x65\x72\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x49\x50\x20\x61\x64" \
-"\x64\x72\x65\x73\x73\x20\x6f\x66\x20\x74\x68\x65\x20\x67\x69\x76" \
-"\x65\x6e\x20\x48\x4f\x53\x54\x0a\x6f\x70\x74\x69\x6f\x6e\x61\x6c" \
-"\x6c\x79\x20\x75\x73\x69\x6e\x67\x20\x61\x20\x73\x70\x65\x63\x69" \
-"\x66\x69\x65\x64\x20\x44\x4e\x53\x20\x73\x65\x72\x76\x65\x72\x00" \
-"\x5b\x2d\x64\x6e\x71\x4e\x77\x5d\x20\x5b\x2d\x53\x20\x50\x52\x4f" \
-"\x47\x5d\x20\x5b\x2d\x70\x20\x50\x45\x45\x52\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x4e\x54\x50\x20\x63\x6c\x69\x65\x6e\x74\x2f\x73\x65\x72\x76" \
-"\x65\x72\x0a\x0a\x09\x2d\x64\x09\x56\x65\x72\x62\x6f\x73\x65\x0a" \
-"\x09\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74\x20\x64\x61\x65\x6d\x6f" \
-"\x6e\x69\x7a\x65\x0a\x09\x2d\x71\x09\x51\x75\x69\x74\x20\x61\x66" \
-"\x74\x65\x72\x20\x63\x6c\x6f\x63\x6b\x20\x69\x73\x20\x73\x65\x74" \
-"\x0a\x09\x2d\x4e\x09\x52\x75\x6e\x20\x61\x74\x20\x68\x69\x67\x68" \
-"\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x0a\x09\x2d\x77\x09\x44\x6f" \
-"\x20\x6e\x6f\x74\x20\x73\x65\x74\x20\x74\x69\x6d\x65\x20\x28\x6f" \
-"\x6e\x6c\x79\x20\x71\x75\x65\x72\x79\x20\x70\x65\x65\x72\x73\x29" \
-"\x2c\x20\x69\x6d\x70\x6c\x69\x65\x73\x20\x2d\x6e\x0a\x09\x2d\x53" \
-"\x20\x50\x52\x4f\x47\x09\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x61" \
-"\x66\x74\x65\x72\x20\x73\x74\x65\x70\x70\x69\x6e\x67\x20\x74\x69" \
-"\x6d\x65\x2c\x20\x73\x74\x72\x61\x74\x75\x6d\x20\x63\x68\x61\x6e" \
-"\x67\x65\x2c\x20\x61\x6e\x64\x20\x65\x76\x65\x72\x79\x20\x31\x31" \
-"\x20\x6d\x69\x6e\x73\x0a\x09\x2d\x70\x20\x50\x45\x45\x52\x09\x4f" \
-"\x62\x74\x61\x69\x6e\x20\x74\x69\x6d\x65\x20\x66\x72\x6f\x6d\x20" \
-"\x50\x45\x45\x52\x20\x28\x6d\x61\x79\x20\x62\x65\x20\x72\x65\x70" \
-"\x65\x61\x74\x65\x64\x29\x00\x5b\x2d\x61\x42\x62\x63\x44\x64\x65" \
-"\x46\x66\x48\x68\x49\x69\x4c\x6c\x4f\x6f\x76\x58\x78\x5d\x20\x5b" \
-"\x46\x49\x4c\x45\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x46\x49\x4c" \
-"\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x75\x6e\x61" \
-"\x6d\x62\x69\x67\x75\x6f\x75\x73\x6c\x79\x2c\x20\x61\x73\x20\x6f" \
-"\x63\x74\x61\x6c\x20\x62\x79\x74\x65\x73\x20\x62\x79\x20\x64\x65" \
-"\x66\x61\x75\x6c\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
-"\x5b\x4f\x52\x49\x47\x46\x49\x4c\x45\x20\x5b\x50\x41\x54\x43\x48" \
-"\x46\x49\x4c\x45\x5d\x5d\x0a\x0a\x09\x2d\x70\x2c\x2d\x2d\x73\x74" \
-"\x72\x69\x70\x20\x4e\x09\x09\x53\x74\x72\x69\x70\x20\x4e\x20\x6c" \
-"\x65\x61\x64\x69\x6e\x67\x20\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74" \
-"\x73\x20\x66\x72\x6f\x6d\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65" \
-"\x73\x0a\x09\x2d\x69\x2c\x2d\x2d\x69\x6e\x70\x75\x74\x20\x44\x49" \
-"\x46\x46\x09\x09\x52\x65\x61\x64\x20\x44\x49\x46\x46\x20\x69\x6e" \
-"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x69\x6e\x0a\x09" \
-"\x2d\x52\x2c\x2d\x2d\x72\x65\x76\x65\x72\x73\x65\x09\x09\x52\x65" \
-"\x76\x65\x72\x73\x65\x20\x70\x61\x74\x63\x68\x0a\x09\x2d\x4e\x2c" \
-"\x2d\x2d\x66\x6f\x72\x77\x61\x72\x64\x09\x09\x49\x67\x6e\x6f\x72" \
-"\x65\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x61\x70\x70\x6c\x69\x65" \
-"\x64\x20\x70\x61\x74\x63\x68\x65\x73\x0a\x09\x2d\x45\x2c\x2d\x2d" \
-"\x72\x65\x6d\x6f\x76\x65\x2d\x65\x6d\x70\x74\x79\x2d\x66\x69\x6c" \
-"\x65\x73\x09\x52\x65\x6d\x6f\x76\x65\x20\x6f\x75\x74\x70\x75\x74" \
-"\x20\x66\x69\x6c\x65\x73\x20\x69\x66\x20\x74\x68\x65\x79\x20\x62" \
-"\x65\x63\x6f\x6d\x65\x20\x65\x6d\x70\x74\x79\x00\x5b\x2d\x66\x6c" \
-"\x6e\x6f\x76\x78\x5d\x20\x5b\x2d\x73\x20\x53\x49\x44\x7c\x2d\x50" \
-"\x20\x50\x50\x49\x44\x7c\x50\x41\x54\x54\x45\x52\x4e\x5d\x0a\x0a" \
-"\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x6f\x63\x65\x73\x73\x28" \
-"\x65\x73\x29\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x62\x79\x20" \
-"\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x0a\x09" \
-"\x2d\x6c\x09\x53\x68\x6f\x77\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20" \
-"\x6e\x61\x6d\x65\x20\x74\x6f\x6f\x0a\x09\x2d\x66\x09\x4d\x61\x74" \
-"\x63\x68\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x65\x6e\x74\x69\x72" \
-"\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09" \
-"\x2d\x6e\x09\x53\x68\x6f\x77\x20\x74\x68\x65\x20\x6e\x65\x77\x65" \
-"\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a" \
-"\x09\x2d\x6f\x09\x53\x68\x6f\x77\x20\x74\x68\x65\x20\x6f\x6c\x64" \
-"\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79" \
-"\x0a\x09\x2d\x76\x09\x4e\x65\x67\x61\x74\x65\x20\x74\x68\x65\x20" \
-"\x6d\x61\x74\x63\x68\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63\x68\x20" \
-"\x77\x68\x6f\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x6e\x6f\x74\x20" \
-"\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x29\x0a\x09\x2d\x73\x09\x4d" \
-"\x61\x74\x63\x68\x20\x73\x65\x73\x73\x69\x6f\x6e\x20\x49\x44\x20" \
-"\x28\x30\x20\x66\x6f\x72\x20\x63\x75\x72\x72\x65\x6e\x74\x29\x0a" \
-"\x09\x2d\x50\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x72\x65\x6e\x74" \
-"\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x49\x44\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x5b\x4e\x41\x4d\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x4c\x69\x73\x74\x20\x50\x49\x44\x73\x20\x6f\x66\x20\x61\x6c" \
-"\x6c\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x77\x69\x74\x68" \
-"\x20\x6e\x61\x6d\x65\x73\x20\x74\x68\x61\x74\x20\x6d\x61\x74\x63" \
-"\x68\x20\x4e\x41\x4d\x45\x73\x0a\x0a\x09\x2d\x73\x09\x53\x68\x6f" \
-"\x77\x20\x6f\x6e\x6c\x79\x20\x6f\x6e\x65\x20\x50\x49\x44\x0a\x09" \
-"\x2d\x6f\x20\x50\x49\x44\x09\x4f\x6d\x69\x74\x20\x67\x69\x76\x65" \
-"\x6e\x20\x70\x69\x64\x0a\x09\x09\x55\x73\x65\x20\x25\x50\x50\x49" \
-"\x44\x20\x74\x6f\x20\x6f\x6d\x69\x74\x20\x70\x69\x64\x20\x6f\x66" \
-"\x20\x70\x69\x64\x6f\x66\x27\x73\x20\x70\x61\x72\x65\x6e\x74\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x48\x4f\x53\x54\x0a\x0a" \
-"\x53\x65\x6e\x64\x20\x49\x43\x4d\x50\x20\x45\x43\x48\x4f\x5f\x52" \
-"\x45\x51\x55\x45\x53\x54\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x74" \
-"\x6f\x20\x6e\x65\x74\x77\x6f\x72\x6b\x20\x68\x6f\x73\x74\x73\x0a" \
-"\x0a\x09\x2d\x34\x2c\x2d\x36\x09\x09\x46\x6f\x72\x63\x65\x20\x49" \
-"\x50\x20\x6f\x72\x20\x49\x50\x76\x36\x20\x6e\x61\x6d\x65\x20\x72" \
-"\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x0a\x09\x2d\x63\x20\x43\x4e" \
-"\x54\x09\x09\x53\x65\x6e\x64\x20\x6f\x6e\x6c\x79\x20\x43\x4e\x54" \
-"\x20\x70\x69\x6e\x67\x73\x0a\x09\x2d\x73\x20\x53\x49\x5a\x45\x09" \
-"\x09\x53\x65\x6e\x64\x20\x53\x49\x5a\x45\x20\x64\x61\x74\x61\x20" \
-"\x62\x79\x74\x65\x73\x20\x69\x6e\x20\x70\x61\x63\x6b\x65\x74\x73" \
-"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x35\x36\x29\x0a\x09\x2d" \
-"\x74\x20\x54\x54\x4c\x09\x09\x53\x65\x74\x20\x54\x54\x4c\x0a\x09" \
-"\x2d\x49\x20\x49\x46\x41\x43\x45\x2f\x49\x50\x09\x55\x73\x65\x20" \
-"\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x20\x6f\x72\x20\x49\x50\x20" \
-"\x61\x64\x64\x72\x65\x73\x73\x20\x61\x73\x20\x73\x6f\x75\x72\x63" \
-"\x65\x0a\x09\x2d\x57\x20\x53\x45\x43\x09\x09\x53\x65\x63\x6f\x6e" \
-"\x64\x73\x20\x74\x6f\x20\x77\x61\x69\x74\x20\x66\x6f\x72\x20\x74" \
-"\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x73\x70\x6f\x6e\x73" \
-"\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x31\x30\x29\x0a\x09" \
-"\x09\x09\x28\x61\x66\x74\x65\x72\x20\x61\x6c\x6c\x20\x2d\x63\x20" \
-"\x43\x4e\x54\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x61\x72\x65\x20" \
-"\x73\x65\x6e\x74\x29\x0a\x09\x2d\x77\x20\x53\x45\x43\x09\x09\x53" \
-"\x65\x63\x6f\x6e\x64\x73\x20\x75\x6e\x74\x69\x6c\x20\x70\x69\x6e" \
-"\x67\x20\x65\x78\x69\x74\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x3a\x69\x6e\x66\x69\x6e\x69\x74\x65\x29\x0a\x09\x09\x09\x28\x63" \
-"\x61\x6e\x20\x65\x78\x69\x74\x20\x65\x61\x72\x6c\x69\x65\x72\x20" \
-"\x77\x69\x74\x68\x20\x2d\x63\x20\x43\x4e\x54\x29\x0a\x09\x2d\x71" \
-"\x09\x09\x51\x75\x69\x65\x74\x2c\x20\x6f\x6e\x6c\x79\x20\x64\x69" \
-"\x73\x70\x6c\x61\x79\x73\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x74" \
-"\x20\x73\x74\x61\x72\x74\x0a\x09\x09\x09\x61\x6e\x64\x20\x77\x68" \
-"\x65\x6e\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x00\x08\x00\x5b\x2d" \
-"\x6c\x7c\x2d\x53\x49\x47\x4e\x41\x4c\x5d\x20\x5b\x2d\x66\x6e\x6f" \
-"\x76\x78\x5d\x20\x5b\x2d\x73\x20\x53\x49\x44\x7c\x2d\x50\x20\x50" \
-"\x50\x49\x44\x7c\x50\x41\x54\x54\x45\x52\x4e\x5d\x0a\x0a\x53\x65" \
-"\x6e\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x6f\x20\x70" \
-"\x72\x6f\x63\x65\x73\x73\x28\x65\x73\x29\x20\x73\x65\x6c\x65\x63" \
-"\x74\x65\x64\x20\x62\x79\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54" \
-"\x54\x45\x52\x4e\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61" \
-"\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c\x73\x0a\x09\x2d\x66\x09\x4d" \
-"\x61\x74\x63\x68\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x65\x6e\x74" \
-"\x69\x72\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65" \
-"\x0a\x09\x2d\x6e\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x68\x65\x20" \
-"\x6e\x65\x77\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f" \
-"\x6e\x6c\x79\x0a\x09\x2d\x6f\x09\x53\x69\x67\x6e\x61\x6c\x20\x74" \
-"\x68\x65\x20\x6f\x6c\x64\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73" \
-"\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x76\x09\x4e\x65\x67\x61\x74" \
-"\x65\x20\x74\x68\x65\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x78\x09" \
-"\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20\x6e\x61\x6d\x65" \
-"\x20\x28\x6e\x6f\x74\x20\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x29" \
-"\x0a\x09\x2d\x73\x09\x4d\x61\x74\x63\x68\x20\x73\x65\x73\x73\x69" \
-"\x6f\x6e\x20\x49\x44\x20\x28\x30\x20\x66\x6f\x72\x20\x63\x75\x72" \
-"\x72\x65\x6e\x74\x29\x0a\x09\x2d\x50\x09\x4d\x61\x74\x63\x68\x20" \
-"\x70\x61\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x49" \
-"\x44\x00\x5b\x2d\x78\x71\x5d\x20\x50\x49\x44\x0a\x0a\x44\x69\x73" \
-"\x70\x6c\x61\x79\x20\x64\x65\x74\x61\x69\x6c\x65\x64\x20\x70\x72" \
-"\x6f\x63\x65\x73\x73\x20\x6d\x65\x6d\x6f\x72\x79\x20\x75\x73\x61" \
-"\x67\x65\x0a\x0a\x09\x2d\x78\x09\x53\x68\x6f\x77\x20\x64\x65\x74" \
-"\x61\x69\x6c\x73\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x00\x5b" \
-"\x2d\x64\x20\x44\x45\x4c\x41\x59\x5d\x20\x5b\x2d\x6e\x5d\x20\x5b" \
-"\x2d\x66\x5d\x0a\x0a\x48\x61\x6c\x74\x20\x61\x6e\x64\x20\x73\x68" \
-"\x75\x74\x20\x6f\x66\x66\x20\x70\x6f\x77\x65\x72\x0a\x0a\x09\x2d" \
-"\x64\x20\x53\x45\x43\x09\x44\x65\x6c\x61\x79\x20\x69\x6e\x74\x65" \
-"\x72\x76\x61\x6c\x0a\x09\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74\x20" \
-"\x73\x79\x6e\x63\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x28" \
-"\x64\x6f\x6e\x27\x74\x20\x67\x6f\x20\x74\x68\x72\x6f\x75\x67\x68" \
-"\x20\x69\x6e\x69\x74\x29\x00\x5b\x56\x41\x52\x49\x41\x42\x4c\x45" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x65\x6e\x76\x69" \
-"\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x56\x41\x52\x49\x41\x42\x4c\x45" \
-"\x73\x2e\x0a\x49\x66\x20\x6e\x6f\x20\x56\x41\x52\x49\x41\x42\x4c" \
-"\x45\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x2c\x20\x70\x72\x69" \
-"\x6e\x74\x20\x61\x6c\x6c\x2e\x00\x46\x4f\x52\x4d\x41\x54\x20\x5b" \
-"\x41\x52\x47\x55\x4d\x45\x4e\x54\x5d\x2e\x2e\x2e\x0a\x0a\x46\x6f" \
-"\x72\x6d\x61\x74\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20\x41" \
-"\x52\x47\x55\x4d\x45\x4e\x54\x28\x73\x29\x20\x61\x63\x63\x6f\x72" \
-"\x64\x69\x6e\x67\x20\x74\x6f\x20\x46\x4f\x52\x4d\x41\x54\x2c\x0a" \
-"\x77\x68\x65\x72\x65\x20\x46\x4f\x52\x4d\x41\x54\x20\x63\x6f\x6e" \
-"\x74\x72\x6f\x6c\x73\x20\x74\x68\x65\x20\x6f\x75\x74\x70\x75\x74" \
-"\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x61\x73\x20\x69\x6e\x20\x43" \
-"\x20\x70\x72\x69\x6e\x74\x66\x00\x0a\x0a\x53\x68\x6f\x77\x20\x6c" \
-"\x69\x73\x74\x20\x6f\x66\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73" \
-"\x0a\x0a\x09\x77\x09\x57\x69\x64\x65\x20\x6f\x75\x74\x70\x75\x74" \
-"\x00\x5b\x2d\x70\x5d\x20\x5b\x50\x49\x44\x7c\x55\x53\x45\x52\x5d" \
-"\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x6f\x63\x65\x73" \
-"\x73\x20\x74\x72\x65\x65\x2c\x20\x6f\x70\x74\x69\x6f\x6e\x61\x6c" \
-"\x6c\x79\x20\x73\x74\x61\x72\x74\x20\x66\x72\x6f\x6d\x20\x55\x53" \
-"\x45\x52\x20\x6f\x72\x20\x50\x49\x44\x0a\x0a\x09\x2d\x70\x09\x53" \
-"\x68\x6f\x77\x20\x70\x69\x64\x73\x00\x0a\x0a\x50\x72\x69\x6e\x74" \
-"\x20\x74\x68\x65\x20\x66\x75\x6c\x6c\x20\x66\x69\x6c\x65\x6e\x61" \
-"\x6d\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e" \
-"\x74\x20\x77\x6f\x72\x6b\x69\x6e\x67\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x00\x50\x49\x44\x2e\x2e\x2e\x0a\x0a\x53\x68\x6f\x77" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x79\x20\x66\x6f\x72\x20\x50\x49\x44\x73\x0a\x00\x0a\x0a\x50" \
-"\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x64\x65\x76\x69\x63\x65\x20" \
-"\x6e\x6f\x64\x65\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20" \
-"\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x20\x6d\x6f\x75\x6e\x74\x65\x64\x20\x61\x74\x20\x27" \
-"\x2f\x27\x00\x5b\x2d\x66\x6e\x76\x5d\x20\x46\x49\x4c\x45\x0a\x0a" \
-"\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x76\x61\x6c\x75" \
-"\x65\x20\x6f\x66\x20\x61\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x0a\x0a" \
-"\x09\x2d\x66\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x69\x7a\x65" \
-"\x20\x62\x79\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x6c" \
-"\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x6e\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x61\x64\x64\x20\x6e\x65\x77\x6c\x69\x6e\x65" \
-"\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x00\x46\x49\x4c" \
-"\x45\x2e\x2e\x2e\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x74\x68\x65" \
-"\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x20\x70\x61\x74\x68\x6e\x61" \
-"\x6d\x65\x73\x20\x6f\x66\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c" \
-"\x45\x00\x5b\x2d\x64\x20\x44\x45\x4c\x41\x59\x5d\x20\x5b\x2d\x6e" \
-"\x5d\x20\x5b\x2d\x66\x5d\x0a\x0a\x52\x65\x62\x6f\x6f\x74\x20\x74" \
-"\x68\x65\x20\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x64\x20\x53" \
-"\x45\x43\x09\x44\x65\x6c\x61\x79\x20\x69\x6e\x74\x65\x72\x76\x61" \
-"\x6c\x0a\x09\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74\x20\x73\x79\x6e" \
-"\x63\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x28\x64\x6f\x6e" \
-"\x27\x74\x20\x67\x6f\x20\x74\x68\x72\x6f\x75\x67\x68\x20\x69\x6e" \
-"\x69\x74\x29\x00\x7b\x7b\x2d\x6e\x20\x49\x4e\x43\x52\x45\x4d\x45" \
-"\x4e\x54\x7d\x20\x7c\x20\x50\x52\x49\x4f\x52\x49\x54\x59\x7d\x20" \
-"\x5b\x5b\x2d\x70\x20\x7c\x20\x2d\x67\x20\x7c\x20\x2d\x75\x5d\x20" \
-"\x49\x44\x2e\x2e\x2e\x5d\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73" \
-"\x63\x68\x65\x64\x75\x6c\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69" \
-"\x74\x79\x20\x66\x6f\x72\x20\x61\x20\x72\x75\x6e\x6e\x69\x6e\x67" \
-"\x20\x70\x72\x6f\x63\x65\x73\x73\x0a\x0a\x09\x2d\x6e\x09\x41\x64" \
-"\x6a\x75\x73\x74\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x6e\x69\x63" \
-"\x65\x20\x76\x61\x6c\x75\x65\x20\x28\x73\x6d\x61\x6c\x6c\x65\x72" \
-"\x20\x69\x73\x20\x66\x61\x73\x74\x65\x72\x29\x0a\x09\x2d\x70\x09" \
-"\x50\x72\x6f\x63\x65\x73\x73\x20\x69\x64\x28\x73\x29\x20\x28\x64" \
-"\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x67\x09\x50\x72\x6f\x63" \
-"\x65\x73\x73\x20\x67\x72\x6f\x75\x70\x20\x69\x64\x28\x73\x29\x0a" \
-"\x09\x2d\x75\x09\x50\x72\x6f\x63\x65\x73\x73\x20\x75\x73\x65\x72" \
-"\x20\x6e\x61\x6d\x65\x28\x73\x29\x20\x61\x6e\x64\x2f\x6f\x72\x20" \
-"\x69\x64\x28\x73\x29\x00\x0a\x0a\x52\x65\x73\x65\x74\x20\x74\x68" \
-"\x65\x20\x73\x63\x72\x65\x65\x6e\x00\x0a\x0a\x52\x65\x73\x69\x7a" \
-"\x65\x20\x74\x68\x65\x20\x73\x63\x72\x65\x65\x6e\x00\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x52\x65\x76\x65\x72\x73\x65\x20" \
-"\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x46\x49\x4c\x45\x00\x5b\x2d" \
-"\x69\x72\x66\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x28\x75\x6e\x6c\x69\x6e\x6b\x29\x20\x46\x49" \
-"\x4c\x45\x73\x0a\x0a\x09\x2d\x69\x09\x41\x6c\x77\x61\x79\x73\x20" \
-"\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x65" \
-"\x6d\x6f\x76\x69\x6e\x67\x0a\x09\x2d\x66\x09\x4e\x65\x76\x65\x72" \
-"\x20\x70\x72\x6f\x6d\x70\x74\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52" \
-"\x65\x63\x75\x72\x73\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d" \
-"\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e\x2e\x0a\x0a\x52" \
-"\x65\x6d\x6f\x76\x65\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x20" \
-"\x69\x66\x20\x69\x74\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0a\x0a" \
-"\x09\x2d\x70\x7c\x2d\x2d\x70\x61\x72\x65\x6e\x74\x73\x09\x49\x6e" \
-"\x63\x6c\x75\x64\x65\x20\x70\x61\x72\x65\x6e\x74\x73\x0a\x09\x2d" \
-"\x2d\x69\x67\x6e\x6f\x72\x65\x2d\x66\x61\x69\x6c\x2d\x6f\x6e\x2d" \
-"\x6e\x6f\x6e\x2d\x65\x6d\x70\x74\x79\x00\x5b\x2d\x77\x66\x61\x5d" \
-"\x20\x5b\x4d\x4f\x44\x55\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x55\x6e" \
-"\x6c\x6f\x61\x64\x20\x6b\x65\x72\x6e\x65\x6c\x20\x6d\x6f\x64\x75" \
-"\x6c\x65\x73\x0a\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x75\x6e" \
-"\x74\x69\x6c\x20\x74\x68\x65\x20\x6d\x6f\x64\x75\x6c\x65\x20\x69" \
-"\x73\x20\x6e\x6f\x20\x6c\x6f\x6e\x67\x65\x72\x20\x75\x73\x65\x64" \
-"\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x75\x6e\x6c\x6f\x61" \
-"\x64\x0a\x09\x2d\x61\x09\x52\x65\x6d\x6f\x76\x65\x20\x61\x6c\x6c" \
-"\x20\x75\x6e\x75\x73\x65\x64\x20\x6d\x6f\x64\x75\x6c\x65\x73\x20" \
-"\x28\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x29\x00\x5b\x7b" \
-"\x61\x64\x64\x7c\x64\x65\x6c\x7c\x64\x65\x6c\x65\x74\x65\x7d\x5d" \
-"\x0a\x0a\x45\x64\x69\x74\x20\x6b\x65\x72\x6e\x65\x6c\x20\x72\x6f" \
-"\x75\x74\x69\x6e\x67\x20\x74\x61\x62\x6c\x65\x73\x0a\x0a\x09\x2d" \
-"\x6e\x09\x44\x6f\x6e\x27\x74\x20\x72\x65\x73\x6f\x6c\x76\x65\x20" \
-"\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x65\x09\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x6f\x74\x68\x65\x72\x2f\x6d\x6f\x72\x65\x20\x69\x6e\x66" \
-"\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x41\x20\x69\x6e\x65" \
-"\x74\x7b\x36\x7d\x09\x53\x65\x6c\x65\x63\x74\x20\x61\x64\x64\x72" \
-"\x65\x73\x73\x20\x66\x61\x6d\x69\x6c\x79\x00\x5b\x2d\x74\x5d\x20" \
-"\x5b\x2d\x6c\x5d\x20\x5b\x2d\x61\x20\x41\x52\x47\x5d\x20\x5b\x2d" \
-"\x75\x20\x4d\x41\x53\x4b\x5d\x20\x44\x49\x52\x45\x43\x54\x4f\x52" \
-"\x59\x0a\x0a\x52\x75\x6e\x20\x61\x20\x62\x75\x6e\x63\x68\x20\x6f" \
-"\x66\x20\x73\x63\x72\x69\x70\x74\x73\x20\x69\x6e\x20\x44\x49\x52" \
-"\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x74\x09\x50\x72\x69\x6e" \
-"\x74\x20\x77\x68\x61\x74\x20\x77\x6f\x75\x6c\x64\x20\x62\x65\x20" \
-"\x72\x75\x6e\x2c\x20\x62\x75\x74\x20\x64\x6f\x6e\x27\x74\x20\x61" \
-"\x63\x74\x75\x61\x6c\x6c\x79\x20\x72\x75\x6e\x20\x61\x6e\x79\x74" \
-"\x68\x69\x6e\x67\x0a\x09\x2d\x61\x20\x41\x52\x47\x09\x50\x61\x73" \
-"\x73\x20\x41\x52\x47\x20\x61\x73\x20\x61\x72\x67\x75\x6d\x65\x6e" \
-"\x74\x20\x66\x6f\x72\x20\x65\x76\x65\x72\x79\x20\x70\x72\x6f\x67" \
-"\x72\x61\x6d\x0a\x09\x2d\x75\x20\x4d\x41\x53\x4b\x09\x53\x65\x74" \
-"\x20\x74\x68\x65\x20\x75\x6d\x61\x73\x6b\x20\x74\x6f\x20\x4d\x41" \
-"\x53\x4b\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x75\x6e\x6e\x69\x6e" \
-"\x67\x20\x65\x76\x65\x72\x79\x20\x70\x72\x6f\x67\x72\x61\x6d\x0a" \
-"\x09\x2d\x6c\x09\x50\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20" \
-"\x6f\x66\x20\x61\x6c\x6c\x20\x6d\x61\x74\x63\x68\x69\x6e\x67\x20" \
-"\x66\x69\x6c\x65\x73\x20\x65\x76\x65\x6e\x20\x69\x66\x20\x74\x68" \
-"\x65\x79\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x65\x78\x65\x63\x75" \
-"\x74\x61\x62\x6c\x65\x00\x46\x49\x4c\x45\x0a\x0a\x52\x65\x63\x65" \
-"\x69\x76\x65\x20\x61\x20\x66\x69\x6c\x65\x20\x75\x73\x69\x6e\x67" \
-"\x20\x74\x68\x65\x20\x78\x6d\x6f\x64\x65\x6d\x20\x70\x72\x6f\x74" \
-"\x6f\x63\x6f\x6c\x00\x5b\x2d\x65\x66\x69\x6e\x72\x5d\x20\x53\x45" \
-"\x44\x5f\x43\x4d\x44\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
+"\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x64\x65\x76\x69\x63" \
+"\x65\x20\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69" \
+"\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x09\x2d\x78\x09\x50\x72\x69" \
+"\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e\x6f\x72\x20\x64" \
+"\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
+"\x74\x68\x65\x20\x62\x6c\x6f\x63\x6b\x64\x65\x76\x69\x63\x65\x00" \
+"\x5b\x2d\x41\x5d\x20\x5b\x2d\x49\x20\x53\x55\x4d\x7c\x43\x50\x55" \
+"\x7c\x41\x4c\x4c\x7c\x53\x43\x50\x55\x5d\x20\x5b\x2d\x75\x5d\x20" \
+"\x5b\x2d\x50\x20\x6e\x75\x6d\x7c\x41\x4c\x4c\x5d\x20\x5b\x49\x4e" \
+"\x54\x45\x52\x56\x41\x4c\x20\x5b\x43\x4f\x55\x4e\x54\x5d\x5d\x0a" \
+"\x0a\x50\x65\x72\x2d\x70\x72\x6f\x63\x65\x73\x73\x6f\x72\x20\x73" \
+"\x74\x61\x74\x69\x73\x74\x69\x63\x73\x0a\x0a\x09\x2d\x41\x09\x09" \
+"\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x2d\x49\x20\x41\x4c\x4c\x20" \
+"\x2d\x75\x20\x2d\x50\x20\x41\x4c\x4c\x0a\x09\x2d\x49\x20\x53\x55" \
+"\x4d\x7c\x43\x50\x55\x7c\x41\x4c\x4c\x7c\x53\x43\x50\x55\x09\x52" \
+"\x65\x70\x6f\x72\x74\x20\x69\x6e\x74\x65\x72\x72\x75\x70\x74\x20" \
+"\x73\x74\x61\x74\x69\x73\x74\x69\x63\x73\x0a\x09\x2d\x50\x20\x6e" \
+"\x75\x6d\x7c\x41\x4c\x4c\x09\x09\x50\x72\x6f\x63\x65\x73\x73\x6f" \
+"\x72\x20\x74\x6f\x20\x6d\x6f\x6e\x69\x74\x6f\x72\x0a\x09\x2d\x75" \
+"\x09\x09\x09\x52\x65\x70\x6f\x72\x74\x20\x43\x50\x55\x20\x75\x74" \
+"\x69\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x00\x5b\x2d\x66\x69\x6e\x5d" \
+"\x20\x53\x4f\x55\x52\x43\x45\x20\x44\x45\x53\x54\x0a\x6f\x72\x3a" \
+"\x20\x6d\x76\x20\x5b\x2d\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43" \
+"\x45\x2e\x2e\x2e\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a" \
+"\x52\x65\x6e\x61\x6d\x65\x20\x53\x4f\x55\x52\x43\x45\x20\x74\x6f" \
+"\x20\x44\x45\x53\x54\x2c\x20\x6f\x72\x20\x6d\x6f\x76\x65\x20\x53" \
+"\x4f\x55\x52\x43\x45\x28\x73\x29\x20\x74\x6f\x20\x44\x49\x52\x45" \
+"\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x66\x09\x44\x6f\x6e\x27\x74" \
+"\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x6f" \
+"\x76\x65\x72\x77\x72\x69\x74\x69\x6e\x67\x0a\x09\x2d\x69\x09\x49" \
+"\x6e\x74\x65\x72\x61\x63\x74\x69\x76\x65\x2c\x20\x70\x72\x6f\x6d" \
+"\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72" \
+"\x69\x74\x65\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x6f\x76" \
+"\x65\x72\x77\x72\x69\x74\x65\x20\x61\x6e\x20\x65\x78\x69\x73\x74" \
+"\x69\x6e\x67\x20\x66\x69\x6c\x65\x00\x5b\x2d\x6f\x5d\x20\x5b\x2d" \
+"\x62\x5d\x20\x5b\x2d\x73\x20\x41\x44\x44\x52\x5d\x20\x5b\x2d\x66" \
+"\x20\x46\x49\x4c\x45\x5d\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43" \
+"\x45\x0a\x0a\x44\x75\x6d\x70\x20\x74\x68\x65\x20\x73\x70\x65\x63" \
+"\x69\x66\x69\x65\x64\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65" \
+"\x0a\x0a\x09\x2d\x6f\x09\x4f\x6d\x69\x74\x20\x6f\x6f\x62\x20\x64" \
+"\x61\x74\x61\x0a\x09\x2d\x62\x09\x4f\x6d\x69\x74\x20\x62\x61\x64" \
+"\x20\x62\x6c\x6f\x63\x6b\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20" \
+"\x64\x75\x6d\x70\x0a\x09\x2d\x73\x20\x41\x44\x44\x52\x09\x53\x74" \
+"\x61\x72\x74\x20\x61\x64\x64\x72\x65\x73\x73\x0a\x09\x2d\x6c\x20" \
+"\x4c\x45\x4e\x09\x4c\x65\x6e\x67\x74\x68\x0a\x09\x2d\x66\x20\x46" \
+"\x49\x4c\x45\x09\x44\x75\x6d\x70\x20\x74\x6f\x20\x66\x69\x6c\x65" \
+"\x20\x28\x27\x2d\x27\x20\x66\x6f\x72\x20\x73\x74\x64\x6f\x75\x74" \
+"\x29\x00\x5b\x2d\x70\x5d\x20\x5b\x2d\x73\x20\x41\x44\x44\x52\x5d" \
+"\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x20\x5b\x46\x49\x4c" \
+"\x45\x5d\x0a\x0a\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x74\x68\x65" \
+"\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x4d\x54\x44\x20\x64" \
+"\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x70\x09\x50\x61\x64\x20\x74" \
+"\x6f\x20\x70\x61\x67\x65\x20\x73\x69\x7a\x65\x0a\x09\x2d\x73\x20" \
+"\x41\x44\x44\x52\x09\x53\x74\x61\x72\x74\x20\x61\x64\x64\x72\x65" \
+"\x73\x73\x00\x48\x4f\x53\x54\x20\x50\x4f\x52\x54\x20\x42\x4c\x4f" \
+"\x43\x4b\x44\x45\x56\x0a\x0a\x43\x6f\x6e\x6e\x65\x63\x74\x20\x74" \
+"\x6f\x20\x48\x4f\x53\x54\x20\x61\x6e\x64\x20\x70\x72\x6f\x76\x69" \
+"\x64\x65\x20\x61\x20\x6e\x65\x74\x77\x6f\x72\x6b\x20\x62\x6c\x6f" \
+"\x63\x6b\x20\x64\x65\x76\x69\x63\x65\x20\x6f\x6e\x20\x42\x4c\x4f" \
+"\x43\x4b\x44\x45\x56\x00\x5b\x2d\x69\x4e\x5d\x20\x5b\x2d\x77\x4e" \
+"\x5d\x20\x5b\x2d\x6c\x5d\x20\x5b\x2d\x70\x20\x50\x4f\x52\x54\x5d" \
+"\x20\x5b\x2d\x66\x20\x46\x49\x4c\x45\x7c\x49\x50\x41\x44\x44\x52" \
+"\x20\x50\x4f\x52\x54\x5d\x20\x5b\x2d\x65\x20\x50\x52\x4f\x47\x5d" \
+"\x0a\x0a\x4f\x70\x65\x6e\x20\x61\x20\x70\x69\x70\x65\x20\x74\x6f" \
+"\x20\x49\x50\x3a\x50\x4f\x52\x54\x20\x6f\x72\x20\x46\x49\x4c\x45" \
+"\x0a\x0a\x09\x2d\x65\x20\x50\x52\x4f\x47\x09\x52\x75\x6e\x20\x50" \
+"\x52\x4f\x47\x20\x61\x66\x74\x65\x72\x20\x63\x6f\x6e\x6e\x65\x63" \
+"\x74\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x65\x6e\x20\x6d\x6f\x64" \
+"\x65\x2c\x20\x66\x6f\x72\x20\x69\x6e\x62\x6f\x75\x6e\x64\x20\x63" \
+"\x6f\x6e\x6e\x65\x63\x74\x73\x0a\x09\x09\x28\x75\x73\x65\x20\x2d" \
+"\x6c\x20\x74\x77\x69\x63\x65\x20\x77\x69\x74\x68\x20\x2d\x65\x20" \
+"\x66\x6f\x72\x20\x70\x65\x72\x73\x69\x73\x74\x65\x6e\x74\x20\x73" \
+"\x65\x72\x76\x65\x72\x29\x0a\x09\x2d\x70\x20\x50\x4f\x52\x54\x09" \
+"\x4c\x6f\x63\x61\x6c\x20\x70\x6f\x72\x74\x0a\x09\x2d\x77\x20\x53" \
+"\x45\x43\x09\x54\x69\x6d\x65\x6f\x75\x74\x20\x66\x6f\x72\x20\x63" \
+"\x6f\x6e\x6e\x65\x63\x74\x0a\x09\x2d\x69\x20\x53\x45\x43\x09\x44" \
+"\x65\x6c\x61\x79\x20\x69\x6e\x74\x65\x72\x76\x61\x6c\x20\x66\x6f" \
+"\x72\x20\x6c\x69\x6e\x65\x73\x20\x73\x65\x6e\x74\x0a\x09\x2d\x66" \
+"\x20\x46\x49\x4c\x45\x09\x55\x73\x65\x20\x66\x69\x6c\x65\x20\x28" \
+"\x61\x6c\x61\x20\x2f\x64\x65\x76\x2f\x74\x74\x79\x53\x30\x29\x20" \
+"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x6e\x65\x74\x77\x6f" \
+"\x72\x6b\x00\x5b\x2d\x72\x61\x6c\x5d\x20\x5b\x2d\x74\x75\x77\x78" \
+"\x5d\x20\x5b\x2d\x65\x6e\x57\x70\x5d\x0a\x0a\x44\x69\x73\x70\x6c" \
+"\x61\x79\x20\x6e\x65\x74\x77\x6f\x72\x6b\x69\x6e\x67\x20\x69\x6e" \
+"\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x72\x09\x52" \
+"\x6f\x75\x74\x69\x6e\x67\x20\x74\x61\x62\x6c\x65\x0a\x09\x2d\x61" \
+"\x09\x41\x6c\x6c\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x6c" \
+"\x09\x4c\x69\x73\x74\x65\x6e\x69\x6e\x67\x20\x73\x6f\x63\x6b\x65" \
+"\x74\x73\x0a\x09\x09\x45\x6c\x73\x65\x3a\x20\x63\x6f\x6e\x6e\x65" \
+"\x63\x74\x65\x64\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x74" \
+"\x09\x54\x43\x50\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x75" \
+"\x09\x55\x44\x50\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x77" \
+"\x09\x52\x61\x77\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x2d\x78" \
+"\x09\x55\x6e\x69\x78\x20\x73\x6f\x63\x6b\x65\x74\x73\x0a\x09\x09" \
+"\x45\x6c\x73\x65\x3a\x20\x61\x6c\x6c\x20\x73\x6f\x63\x6b\x65\x74" \
+"\x20\x74\x79\x70\x65\x73\x0a\x09\x2d\x65\x09\x4f\x74\x68\x65\x72" \
+"\x2f\x6d\x6f\x72\x65\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f" \
+"\x6e\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x72\x65\x73\x6f" \
+"\x6c\x76\x65\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x57\x09\x57\x69" \
+"\x64\x65\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x70\x09\x53" \
+"\x68\x6f\x77\x20\x50\x49\x44\x2f\x70\x72\x6f\x67\x72\x61\x6d\x20" \
+"\x6e\x61\x6d\x65\x20\x66\x6f\x72\x20\x73\x6f\x63\x6b\x65\x74\x73" \
+"\x00\x5b\x2d\x6e\x20\x41\x44\x4a\x55\x53\x54\x5d\x20\x5b\x50\x52" \
+"\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x43\x68\x61\x6e\x67\x65" \
+"\x20\x73\x63\x68\x65\x64\x75\x6c\x69\x6e\x67\x20\x70\x72\x69\x6f" \
+"\x72\x69\x74\x79\x2c\x20\x72\x75\x6e\x20\x50\x52\x4f\x47\x0a\x0a" \
+"\x09\x2d\x6e\x20\x41\x44\x4a\x55\x53\x54\x09\x41\x64\x6a\x75\x73" \
+"\x74\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x20\x62\x79\x20\x41\x44" \
+"\x4a\x55\x53\x54\x00\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a" \
+"\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x69\x6d\x6d\x75\x6e\x65\x20" \
+"\x74\x6f\x20\x68\x61\x6e\x67\x75\x70\x73\x2c\x20\x77\x69\x74\x68" \
+"\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x61\x20\x6e\x6f\x6e" \
+"\x2d\x74\x74\x79\x00\x5b\x48\x4f\x53\x54\x5d\x20\x5b\x53\x45\x52" \
+"\x56\x45\x52\x5d\x0a\x0a\x51\x75\x65\x72\x79\x20\x74\x68\x65\x20" \
+"\x6e\x61\x6d\x65\x73\x65\x72\x76\x65\x72\x20\x66\x6f\x72\x20\x74" \
+"\x68\x65\x20\x49\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20\x6f\x66" \
+"\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x48\x4f\x53\x54\x0a" \
+"\x6f\x70\x74\x69\x6f\x6e\x61\x6c\x6c\x79\x20\x75\x73\x69\x6e\x67" \
+"\x20\x61\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x44\x4e\x53" \
+"\x20\x73\x65\x72\x76\x65\x72\x00\x5b\x2d\x64\x6e\x71\x4e\x77\x5d" \
+"\x20\x5b\x2d\x53\x20\x50\x52\x4f\x47\x5d\x20\x5b\x2d\x70\x20\x50" \
+"\x45\x45\x52\x5d\x2e\x2e\x2e\x0a\x0a\x4e\x54\x50\x20\x63\x6c\x69" \
+"\x65\x6e\x74\x2f\x73\x65\x72\x76\x65\x72\x0a\x0a\x09\x2d\x64\x09" \
+"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x09\x44\x6f\x20\x6e" \
+"\x6f\x74\x20\x64\x61\x65\x6d\x6f\x6e\x69\x7a\x65\x0a\x09\x2d\x71" \
+"\x09\x51\x75\x69\x74\x20\x61\x66\x74\x65\x72\x20\x63\x6c\x6f\x63" \
+"\x6b\x20\x69\x73\x20\x73\x65\x74\x0a\x09\x2d\x4e\x09\x52\x75\x6e" \
+"\x20\x61\x74\x20\x68\x69\x67\x68\x20\x70\x72\x69\x6f\x72\x69\x74" \
+"\x79\x0a\x09\x2d\x77\x09\x44\x6f\x20\x6e\x6f\x74\x20\x73\x65\x74" \
+"\x20\x74\x69\x6d\x65\x20\x28\x6f\x6e\x6c\x79\x20\x71\x75\x65\x72" \
+"\x79\x20\x70\x65\x65\x72\x73\x29\x2c\x20\x69\x6d\x70\x6c\x69\x65" \
+"\x73\x20\x2d\x6e\x0a\x09\x2d\x53\x20\x50\x52\x4f\x47\x09\x52\x75" \
+"\x6e\x20\x50\x52\x4f\x47\x20\x61\x66\x74\x65\x72\x20\x73\x74\x65" \
+"\x70\x70\x69\x6e\x67\x20\x74\x69\x6d\x65\x2c\x20\x73\x74\x72\x61" \
+"\x74\x75\x6d\x20\x63\x68\x61\x6e\x67\x65\x2c\x20\x61\x6e\x64\x20" \
+"\x65\x76\x65\x72\x79\x20\x31\x31\x20\x6d\x69\x6e\x73\x0a\x09\x2d" \
+"\x70\x20\x50\x45\x45\x52\x09\x4f\x62\x74\x61\x69\x6e\x20\x74\x69" \
+"\x6d\x65\x20\x66\x72\x6f\x6d\x20\x50\x45\x45\x52\x20\x28\x6d\x61" \
+"\x79\x20\x62\x65\x20\x72\x65\x70\x65\x61\x74\x65\x64\x29\x00\x5b" \
+"\x2d\x61\x42\x62\x63\x44\x64\x65\x46\x66\x48\x68\x49\x69\x4c\x6c" \
+"\x4f\x6f\x76\x58\x78\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x50" \
+"\x72\x69\x6e\x74\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74" \
+"\x64\x69\x6e\x29\x20\x75\x6e\x61\x6d\x62\x69\x67\x75\x6f\x75\x73" \
+"\x6c\x79\x2c\x20\x61\x73\x20\x6f\x63\x74\x61\x6c\x20\x62\x79\x74" \
+"\x65\x73\x20\x62\x79\x20\x64\x65\x66\x61\x75\x6c\x74\x00\x5b\x4f" \
+"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4f\x52\x49\x47\x46\x49\x4c" \
+"\x45\x20\x5b\x50\x41\x54\x43\x48\x46\x49\x4c\x45\x5d\x5d\x0a\x0a" \
+"\x09\x2d\x70\x2c\x2d\x2d\x73\x74\x72\x69\x70\x20\x4e\x09\x09\x53" \
+"\x74\x72\x69\x70\x20\x4e\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63" \
+"\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x20\x66\x72\x6f\x6d\x20\x66" \
+"\x69\x6c\x65\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x69\x2c\x2d\x2d" \
+"\x69\x6e\x70\x75\x74\x20\x44\x49\x46\x46\x09\x09\x52\x65\x61\x64" \
+"\x20\x44\x49\x46\x46\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66" \
+"\x20\x73\x74\x64\x69\x6e\x0a\x09\x2d\x52\x2c\x2d\x2d\x72\x65\x76" \
+"\x65\x72\x73\x65\x09\x09\x52\x65\x76\x65\x72\x73\x65\x20\x70\x61" \
+"\x74\x63\x68\x0a\x09\x2d\x4e\x2c\x2d\x2d\x66\x6f\x72\x77\x61\x72" \
+"\x64\x09\x09\x49\x67\x6e\x6f\x72\x65\x20\x61\x6c\x72\x65\x61\x64" \
+"\x79\x20\x61\x70\x70\x6c\x69\x65\x64\x20\x70\x61\x74\x63\x68\x65" \
+"\x73\x0a\x09\x2d\x45\x2c\x2d\x2d\x72\x65\x6d\x6f\x76\x65\x2d\x65" \
+"\x6d\x70\x74\x79\x2d\x66\x69\x6c\x65\x73\x09\x52\x65\x6d\x6f\x76" \
+"\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x73\x20\x69" \
+"\x66\x20\x74\x68\x65\x79\x20\x62\x65\x63\x6f\x6d\x65\x20\x65\x6d" \
+"\x70\x74\x79\x00\x5b\x2d\x66\x6c\x6e\x6f\x76\x78\x5d\x20\x5b\x2d" \
+"\x73\x20\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c\x50\x41" \
+"\x54\x54\x45\x52\x4e\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20" \
+"\x70\x72\x6f\x63\x65\x73\x73\x28\x65\x73\x29\x20\x73\x65\x6c\x65" \
+"\x63\x74\x65\x64\x20\x62\x79\x20\x72\x65\x67\x65\x78\x20\x50\x41" \
+"\x54\x54\x45\x52\x4e\x0a\x0a\x09\x2d\x6c\x09\x53\x68\x6f\x77\x20" \
+"\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6e\x61\x6d\x65\x20\x74\x6f\x6f" \
+"\x0a\x09\x2d\x66\x09\x4d\x61\x74\x63\x68\x20\x61\x67\x61\x69\x6e" \
+"\x73\x74\x20\x65\x6e\x74\x69\x72\x65\x20\x63\x6f\x6d\x6d\x61\x6e" \
+"\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x6e\x09\x53\x68\x6f\x77\x20" \
+"\x74\x68\x65\x20\x6e\x65\x77\x65\x73\x74\x20\x70\x72\x6f\x63\x65" \
+"\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6f\x09\x53\x68\x6f\x77" \
+"\x20\x74\x68\x65\x20\x6f\x6c\x64\x65\x73\x74\x20\x70\x72\x6f\x63" \
+"\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x76\x09\x4e\x65\x67" \
+"\x61\x74\x65\x20\x74\x68\x65\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d" \
+"\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20\x6e\x61" \
+"\x6d\x65\x20\x28\x6e\x6f\x74\x20\x73\x75\x62\x73\x74\x72\x69\x6e" \
+"\x67\x29\x0a\x09\x2d\x73\x09\x4d\x61\x74\x63\x68\x20\x73\x65\x73" \
+"\x73\x69\x6f\x6e\x20\x49\x44\x20\x28\x30\x20\x66\x6f\x72\x20\x63" \
+"\x75\x72\x72\x65\x6e\x74\x29\x0a\x09\x2d\x50\x09\x4d\x61\x74\x63" \
+"\x68\x20\x70\x61\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73" \
+"\x20\x49\x44\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4e" \
+"\x41\x4d\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x69\x73\x74\x20\x50\x49" \
+"\x44\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x70\x72\x6f\x63\x65\x73" \
+"\x73\x65\x73\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73\x20\x74" \
+"\x68\x61\x74\x20\x6d\x61\x74\x63\x68\x20\x4e\x41\x4d\x45\x73\x0a" \
+"\x0a\x09\x2d\x73\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6f" \
+"\x6e\x65\x20\x50\x49\x44\x0a\x09\x2d\x6f\x20\x50\x49\x44\x09\x4f" \
+"\x6d\x69\x74\x20\x67\x69\x76\x65\x6e\x20\x70\x69\x64\x0a\x09\x09" \
+"\x55\x73\x65\x20\x25\x50\x50\x49\x44\x20\x74\x6f\x20\x6f\x6d\x69" \
+"\x74\x20\x70\x69\x64\x20\x6f\x66\x20\x70\x69\x64\x6f\x66\x27\x73" \
+"\x20\x70\x61\x72\x65\x6e\x74\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
+"\x5d\x20\x48\x4f\x53\x54\x0a\x0a\x53\x65\x6e\x64\x20\x49\x43\x4d" \
+"\x50\x20\x45\x43\x48\x4f\x5f\x52\x45\x51\x55\x45\x53\x54\x20\x70" \
+"\x61\x63\x6b\x65\x74\x73\x20\x74\x6f\x20\x6e\x65\x74\x77\x6f\x72" \
+"\x6b\x20\x68\x6f\x73\x74\x73\x0a\x0a\x09\x2d\x34\x2c\x2d\x36\x09" \
+"\x09\x46\x6f\x72\x63\x65\x20\x49\x50\x20\x6f\x72\x20\x49\x50\x76" \
+"\x36\x20\x6e\x61\x6d\x65\x20\x72\x65\x73\x6f\x6c\x75\x74\x69\x6f" \
+"\x6e\x0a\x09\x2d\x63\x20\x43\x4e\x54\x09\x09\x53\x65\x6e\x64\x20" \
+"\x6f\x6e\x6c\x79\x20\x43\x4e\x54\x20\x70\x69\x6e\x67\x73\x0a\x09" \
+"\x2d\x73\x20\x53\x49\x5a\x45\x09\x09\x53\x65\x6e\x64\x20\x53\x49" \
+"\x5a\x45\x20\x64\x61\x74\x61\x20\x62\x79\x74\x65\x73\x20\x69\x6e" \
+"\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x28\x64\x65\x66\x61\x75\x6c" \
+"\x74\x3a\x35\x36\x29\x0a\x09\x2d\x74\x20\x54\x54\x4c\x09\x09\x53" \
+"\x65\x74\x20\x54\x54\x4c\x0a\x09\x2d\x49\x20\x49\x46\x41\x43\x45" \
+"\x2f\x49\x50\x09\x55\x73\x65\x20\x69\x6e\x74\x65\x72\x66\x61\x63" \
+"\x65\x20\x6f\x72\x20\x49\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20" \
+"\x61\x73\x20\x73\x6f\x75\x72\x63\x65\x0a\x09\x2d\x57\x20\x53\x45" \
+"\x43\x09\x09\x53\x65\x63\x6f\x6e\x64\x73\x20\x74\x6f\x20\x77\x61" \
+"\x69\x74\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74" \
+"\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x64\x65\x66\x61\x75" \
+"\x6c\x74\x3a\x31\x30\x29\x0a\x09\x09\x09\x28\x61\x66\x74\x65\x72" \
+"\x20\x61\x6c\x6c\x20\x2d\x63\x20\x43\x4e\x54\x20\x70\x61\x63\x6b" \
+"\x65\x74\x73\x20\x61\x72\x65\x20\x73\x65\x6e\x74\x29\x0a\x09\x2d" \
+"\x77\x20\x53\x45\x43\x09\x09\x53\x65\x63\x6f\x6e\x64\x73\x20\x75" \
+"\x6e\x74\x69\x6c\x20\x70\x69\x6e\x67\x20\x65\x78\x69\x74\x73\x20" \
+"\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x69\x6e\x66\x69\x6e\x69\x74" \
+"\x65\x29\x0a\x09\x09\x09\x28\x63\x61\x6e\x20\x65\x78\x69\x74\x20" \
+"\x65\x61\x72\x6c\x69\x65\x72\x20\x77\x69\x74\x68\x20\x2d\x63\x20" \
+"\x43\x4e\x54\x29\x0a\x09\x2d\x71\x09\x09\x51\x75\x69\x65\x74\x2c" \
+"\x20\x6f\x6e\x6c\x79\x20\x64\x69\x73\x70\x6c\x61\x79\x73\x20\x6f" \
+"\x75\x74\x70\x75\x74\x20\x61\x74\x20\x73\x74\x61\x72\x74\x0a\x09" \
+"\x09\x09\x61\x6e\x64\x20\x77\x68\x65\x6e\x20\x66\x69\x6e\x69\x73" \
+"\x68\x65\x64\x00\x08\x00\x5b\x2d\x6c\x7c\x2d\x53\x49\x47\x4e\x41" \
+"\x4c\x5d\x20\x5b\x2d\x66\x6e\x6f\x76\x78\x5d\x20\x5b\x2d\x73\x20" \
+"\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c\x50\x41\x54\x54" \
+"\x45\x52\x4e\x5d\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69\x67" \
+"\x6e\x61\x6c\x20\x74\x6f\x20\x70\x72\x6f\x63\x65\x73\x73\x28\x65" \
+"\x73\x29\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x62\x79\x20\x72" \
+"\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x0a\x09\x2d" \
+"\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61" \
+"\x6c\x73\x0a\x09\x2d\x66\x09\x4d\x61\x74\x63\x68\x20\x61\x67\x61" \
+"\x69\x6e\x73\x74\x20\x65\x6e\x74\x69\x72\x65\x20\x63\x6f\x6d\x6d" \
+"\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x6e\x09\x53\x69\x67" \
+"\x6e\x61\x6c\x20\x74\x68\x65\x20\x6e\x65\x77\x65\x73\x74\x20\x70" \
+"\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6f\x09" \
+"\x53\x69\x67\x6e\x61\x6c\x20\x74\x68\x65\x20\x6f\x6c\x64\x65\x73" \
+"\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09" \
+"\x2d\x76\x09\x4e\x65\x67\x61\x74\x65\x20\x74\x68\x65\x20\x6d\x61" \
+"\x74\x63\x68\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68" \
+"\x6f\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x6e\x6f\x74\x20\x73\x75" \
+"\x62\x73\x74\x72\x69\x6e\x67\x29\x0a\x09\x2d\x73\x09\x4d\x61\x74" \
+"\x63\x68\x20\x73\x65\x73\x73\x69\x6f\x6e\x20\x49\x44\x20\x28\x30" \
+"\x20\x66\x6f\x72\x20\x63\x75\x72\x72\x65\x6e\x74\x29\x0a\x09\x2d" \
+"\x50\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x72\x65\x6e\x74\x20\x70" \
+"\x72\x6f\x63\x65\x73\x73\x20\x49\x44\x00\x5b\x2d\x78\x71\x5d\x20" \
+"\x50\x49\x44\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x64\x65\x74" \
+"\x61\x69\x6c\x65\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6d\x65" \
+"\x6d\x6f\x72\x79\x20\x75\x73\x61\x67\x65\x0a\x0a\x09\x2d\x78\x09" \
+"\x53\x68\x6f\x77\x20\x64\x65\x74\x61\x69\x6c\x73\x0a\x09\x2d\x71" \
+"\x09\x51\x75\x69\x65\x74\x00\x5b\x2d\x64\x20\x44\x45\x4c\x41\x59" \
+"\x5d\x20\x5b\x2d\x6e\x5d\x20\x5b\x2d\x66\x5d\x0a\x0a\x48\x61\x6c" \
+"\x74\x20\x61\x6e\x64\x20\x73\x68\x75\x74\x20\x6f\x66\x66\x20\x70" \
+"\x6f\x77\x65\x72\x0a\x0a\x09\x2d\x64\x20\x53\x45\x43\x09\x44\x65" \
+"\x6c\x61\x79\x20\x69\x6e\x74\x65\x72\x76\x61\x6c\x0a\x09\x2d\x6e" \
+"\x09\x44\x6f\x20\x6e\x6f\x74\x20\x73\x79\x6e\x63\x0a\x09\x2d\x66" \
+"\x09\x46\x6f\x72\x63\x65\x20\x28\x64\x6f\x6e\x27\x74\x20\x67\x6f" \
+"\x20\x74\x68\x72\x6f\x75\x67\x68\x20\x69\x6e\x69\x74\x29\x00\x5b" \
+"\x56\x41\x52\x49\x41\x42\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72" \
+"\x69\x6e\x74\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20" \
+"\x56\x41\x52\x49\x41\x42\x4c\x45\x73\x2e\x0a\x49\x66\x20\x6e\x6f" \
+"\x20\x56\x41\x52\x49\x41\x42\x4c\x45\x20\x73\x70\x65\x63\x69\x66" \
+"\x69\x65\x64\x2c\x20\x70\x72\x69\x6e\x74\x20\x61\x6c\x6c\x2e\x00" \
+"\x46\x4f\x52\x4d\x41\x54\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a" \
+"\x0a\x46\x6f\x72\x6d\x61\x74\x20\x61\x6e\x64\x20\x70\x72\x69\x6e" \
+"\x74\x20\x41\x52\x47\x28\x73\x29\x20\x61\x63\x63\x6f\x72\x64\x69" \
+"\x6e\x67\x20\x74\x6f\x20\x46\x4f\x52\x4d\x41\x54\x20\x28\x61\x2d" \
+"\x6c\x61\x20\x43\x20\x70\x72\x69\x6e\x74\x66\x29\x00\x0a\x0a\x53" \
+"\x68\x6f\x77\x20\x6c\x69\x73\x74\x20\x6f\x66\x20\x70\x72\x6f\x63" \
+"\x65\x73\x73\x65\x73\x0a\x0a\x09\x77\x09\x57\x69\x64\x65\x20\x6f" \
+"\x75\x74\x70\x75\x74\x0a\x09\x6c\x09\x4c\x6f\x6e\x67\x20\x6f\x75" \
+"\x74\x70\x75\x74\x0a\x09\x54\x09\x53\x68\x6f\x77\x20\x74\x68\x72" \
+"\x65\x61\x64\x73\x00\x5b\x2d\x70\x5d\x20\x5b\x50\x49\x44\x7c\x55" \
+"\x53\x45\x52\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72" \
+"\x6f\x63\x65\x73\x73\x20\x74\x72\x65\x65\x2c\x20\x6f\x70\x74\x69" \
+"\x6f\x6e\x61\x6c\x6c\x79\x20\x73\x74\x61\x72\x74\x20\x66\x72\x6f" \
+"\x6d\x20\x55\x53\x45\x52\x20\x6f\x72\x20\x50\x49\x44\x0a\x0a\x09" \
+"\x2d\x70\x09\x53\x68\x6f\x77\x20\x70\x69\x64\x73\x00\x0a\x0a\x50" \
+"\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x66\x75\x6c\x6c\x20\x66\x69" \
+"\x6c\x65\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x63\x75" \
+"\x72\x72\x65\x6e\x74\x20\x77\x6f\x72\x6b\x69\x6e\x67\x20\x64\x69" \
+"\x72\x65\x63\x74\x6f\x72\x79\x00\x50\x49\x44\x2e\x2e\x2e\x0a\x0a" \
+"\x53\x68\x6f\x77\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x64\x69\x72" \
+"\x65\x63\x74\x6f\x72\x79\x20\x66\x6f\x72\x20\x50\x49\x44\x73\x0a" \
+"\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x64\x65\x76" \
+"\x69\x63\x65\x20\x6e\x6f\x64\x65\x20\x61\x73\x73\x6f\x63\x69\x61" \
+"\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x69\x6c" \
+"\x65\x73\x79\x73\x74\x65\x6d\x20\x6d\x6f\x75\x6e\x74\x65\x64\x20" \
+"\x61\x74\x20\x27\x2f\x27\x00\x5b\x2d\x66\x6e\x76\x5d\x20\x46\x49" \
+"\x4c\x45\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20" \
+"\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x61\x20\x73\x79\x6d\x6c\x69" \
+"\x6e\x6b\x0a\x0a\x09\x2d\x66\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61" \
+"\x6c\x69\x7a\x65\x20\x62\x79\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e" \
+"\x67\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09" \
+"\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x61\x64\x64\x20\x6e\x65\x77" \
+"\x6c\x69\x6e\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65" \
+"\x00\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x52\x65\x74\x75\x72\x6e" \
+"\x20\x74\x68\x65\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x20\x70\x61" \
+"\x74\x68\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x67\x69\x76\x65\x6e" \
+"\x20\x46\x49\x4c\x45\x00\x5b\x2d\x64\x20\x44\x45\x4c\x41\x59\x5d" \
+"\x20\x5b\x2d\x6e\x5d\x20\x5b\x2d\x66\x5d\x0a\x0a\x52\x65\x62\x6f" \
+"\x6f\x74\x20\x74\x68\x65\x20\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09" \
+"\x2d\x64\x20\x53\x45\x43\x09\x44\x65\x6c\x61\x79\x20\x69\x6e\x74" \
+"\x65\x72\x76\x61\x6c\x0a\x09\x2d\x6e\x09\x44\x6f\x20\x6e\x6f\x74" \
+"\x20\x73\x79\x6e\x63\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20" \
+"\x28\x64\x6f\x6e\x27\x74\x20\x67\x6f\x20\x74\x68\x72\x6f\x75\x67" \
+"\x68\x20\x69\x6e\x69\x74\x29\x00\x7b\x7b\x2d\x6e\x20\x49\x4e\x43" \
+"\x52\x45\x4d\x45\x4e\x54\x7d\x20\x7c\x20\x50\x52\x49\x4f\x52\x49" \
+"\x54\x59\x7d\x20\x5b\x5b\x2d\x70\x20\x7c\x20\x2d\x67\x20\x7c\x20" \
+"\x2d\x75\x5d\x20\x49\x44\x2e\x2e\x2e\x5d\x0a\x0a\x43\x68\x61\x6e" \
+"\x67\x65\x20\x73\x63\x68\x65\x64\x75\x6c\x69\x6e\x67\x20\x70\x72" \
+"\x69\x6f\x72\x69\x74\x79\x20\x66\x6f\x72\x20\x61\x20\x72\x75\x6e" \
+"\x6e\x69\x6e\x67\x20\x70\x72\x6f\x63\x65\x73\x73\x0a\x0a\x09\x2d" \
+"\x6e\x09\x41\x64\x6a\x75\x73\x74\x20\x63\x75\x72\x72\x65\x6e\x74" \
+"\x20\x6e\x69\x63\x65\x20\x76\x61\x6c\x75\x65\x20\x28\x73\x6d\x61" \
+"\x6c\x6c\x65\x72\x20\x69\x73\x20\x66\x61\x73\x74\x65\x72\x29\x0a" \
+"\x09\x2d\x70\x09\x50\x72\x6f\x63\x65\x73\x73\x20\x69\x64\x28\x73" \
+"\x29\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x67\x09" \
+"\x50\x72\x6f\x63\x65\x73\x73\x20\x67\x72\x6f\x75\x70\x20\x69\x64" \
+"\x28\x73\x29\x0a\x09\x2d\x75\x09\x50\x72\x6f\x63\x65\x73\x73\x20" \
+"\x75\x73\x65\x72\x20\x6e\x61\x6d\x65\x28\x73\x29\x20\x61\x6e\x64" \
+"\x2f\x6f\x72\x20\x69\x64\x28\x73\x29\x00\x0a\x0a\x52\x65\x73\x65" \
+"\x74\x20\x74\x68\x65\x20\x73\x63\x72\x65\x65\x6e\x00\x0a\x0a\x52" \
+"\x65\x73\x69\x7a\x65\x20\x74\x68\x65\x20\x73\x63\x72\x65\x65\x6e" \
+"\x00\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x52\x65\x76\x65" \
+"\x72\x73\x65\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x46\x49\x4c" \
+"\x45\x00\x5b\x2d\x69\x72\x66\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e" \
+"\x0a\x0a\x52\x65\x6d\x6f\x76\x65\x20\x28\x75\x6e\x6c\x69\x6e\x6b" \
+"\x29\x20\x46\x49\x4c\x45\x73\x0a\x0a\x09\x2d\x69\x09\x41\x6c\x77" \
+"\x61\x79\x73\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72" \
+"\x65\x20\x72\x65\x6d\x6f\x76\x69\x6e\x67\x0a\x09\x2d\x66\x09\x4e" \
+"\x65\x76\x65\x72\x20\x70\x72\x6f\x6d\x70\x74\x0a\x09\x2d\x52\x2c" \
+"\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x00\x5b\x4f\x50\x54\x49" \
+"\x4f\x4e\x53\x5d\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e" \
+"\x2e\x0a\x0a\x52\x65\x6d\x6f\x76\x65\x20\x44\x49\x52\x45\x43\x54" \
+"\x4f\x52\x59\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x65\x6d\x70" \
+"\x74\x79\x0a\x0a\x09\x2d\x70\x7c\x2d\x2d\x70\x61\x72\x65\x6e\x74" \
+"\x73\x09\x49\x6e\x63\x6c\x75\x64\x65\x20\x70\x61\x72\x65\x6e\x74" \
+"\x73\x0a\x09\x2d\x2d\x69\x67\x6e\x6f\x72\x65\x2d\x66\x61\x69\x6c" \
+"\x2d\x6f\x6e\x2d\x6e\x6f\x6e\x2d\x65\x6d\x70\x74\x79\x00\x5b\x2d" \
+"\x77\x66\x61\x5d\x20\x5b\x4d\x4f\x44\x55\x4c\x45\x5d\x2e\x2e\x2e" \
+"\x0a\x0a\x55\x6e\x6c\x6f\x61\x64\x20\x6b\x65\x72\x6e\x65\x6c\x20" \
+"\x6d\x6f\x64\x75\x6c\x65\x73\x0a\x0a\x09\x2d\x77\x09\x57\x61\x69" \
+"\x74\x20\x75\x6e\x74\x69\x6c\x20\x74\x68\x65\x20\x6d\x6f\x64\x75" \
+"\x6c\x65\x20\x69\x73\x20\x6e\x6f\x20\x6c\x6f\x6e\x67\x65\x72\x20" \
+"\x75\x73\x65\x64\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x75" \
+"\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x61\x09\x52\x65\x6d\x6f\x76\x65" \
+"\x20\x61\x6c\x6c\x20\x75\x6e\x75\x73\x65\x64\x20\x6d\x6f\x64\x75" \
+"\x6c\x65\x73\x20\x28\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79" \
+"\x29\x00\x5b\x7b\x61\x64\x64\x7c\x64\x65\x6c\x7c\x64\x65\x6c\x65" \
+"\x74\x65\x7d\x5d\x0a\x0a\x45\x64\x69\x74\x20\x6b\x65\x72\x6e\x65" \
+"\x6c\x20\x72\x6f\x75\x74\x69\x6e\x67\x20\x74\x61\x62\x6c\x65\x73" \
+"\x0a\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x72\x65\x73\x6f" \
+"\x6c\x76\x65\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x65\x09\x44\x69" \
+"\x73\x70\x6c\x61\x79\x20\x6f\x74\x68\x65\x72\x2f\x6d\x6f\x72\x65" \
+"\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x41" \
+"\x20\x69\x6e\x65\x74\x7b\x36\x7d\x09\x53\x65\x6c\x65\x63\x74\x20" \
+"\x61\x64\x64\x72\x65\x73\x73\x20\x66\x61\x6d\x69\x6c\x79\x00\x5b" \
+"\x2d\x74\x5d\x20\x5b\x2d\x6c\x5d\x20\x5b\x2d\x61\x20\x41\x52\x47" \
+"\x5d\x20\x5b\x2d\x75\x20\x4d\x41\x53\x4b\x5d\x20\x44\x49\x52\x45" \
+"\x43\x54\x4f\x52\x59\x0a\x0a\x52\x75\x6e\x20\x61\x20\x62\x75\x6e" \
+"\x63\x68\x20\x6f\x66\x20\x73\x63\x72\x69\x70\x74\x73\x20\x69\x6e" \
+"\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x74\x09" \
+"\x50\x72\x69\x6e\x74\x20\x77\x68\x61\x74\x20\x77\x6f\x75\x6c\x64" \
+"\x20\x62\x65\x20\x72\x75\x6e\x2c\x20\x62\x75\x74\x20\x64\x6f\x6e" \
+"\x27\x74\x20\x61\x63\x74\x75\x61\x6c\x6c\x79\x20\x72\x75\x6e\x20" \
+"\x61\x6e\x79\x74\x68\x69\x6e\x67\x0a\x09\x2d\x61\x20\x41\x52\x47" \
+"\x09\x50\x61\x73\x73\x20\x41\x52\x47\x20\x61\x73\x20\x61\x72\x67" \
+"\x75\x6d\x65\x6e\x74\x20\x66\x6f\x72\x20\x65\x76\x65\x72\x79\x20" \
+"\x70\x72\x6f\x67\x72\x61\x6d\x0a\x09\x2d\x75\x20\x4d\x41\x53\x4b" \
+"\x09\x53\x65\x74\x20\x74\x68\x65\x20\x75\x6d\x61\x73\x6b\x20\x74" \
+"\x6f\x20\x4d\x41\x53\x4b\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x75" \
+"\x6e\x6e\x69\x6e\x67\x20\x65\x76\x65\x72\x79\x20\x70\x72\x6f\x67" \
+"\x72\x61\x6d\x0a\x09\x2d\x6c\x09\x50\x72\x69\x6e\x74\x20\x6e\x61" \
+"\x6d\x65\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x6d\x61\x74\x63\x68" \
+"\x69\x6e\x67\x20\x66\x69\x6c\x65\x73\x20\x65\x76\x65\x6e\x20\x69" \
+"\x66\x20\x74\x68\x65\x79\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x65" \
+"\x78\x65\x63\x75\x74\x61\x62\x6c\x65\x00\x46\x49\x4c\x45\x0a\x0a" \
+"\x52\x65\x63\x65\x69\x76\x65\x20\x61\x20\x66\x69\x6c\x65\x20\x75" \
+"\x73\x69\x6e\x67\x20\x74\x68\x65\x20\x78\x6d\x6f\x64\x65\x6d\x20" \
+"\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x00\x5b\x2d\x69\x6e\x72\x5d\x20" \
+"\x5b\x2d\x66\x20\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x20\x5b\x2d\x65" \
+"\x20\x43\x4d\x44\x5d\x2e\x2e\x2e\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
+"\x2e\x2e\x0a\x6f\x72\x3a\x20\x73\x65\x64\x20\x5b\x2d\x69\x6e\x72" \
+"\x5d\x20\x43\x4d\x44\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
"\x0a\x09\x2d\x65\x20\x43\x4d\x44\x09\x41\x64\x64\x20\x43\x4d\x44" \
"\x20\x74\x6f\x20\x73\x65\x64\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x73" \
"\x20\x74\x6f\x20\x62\x65\x20\x65\x78\x65\x63\x75\x74\x65\x64\x0a" \
@@ -2460,104 +2500,111 @@
"\x65\x72\x61\x74\x69\x6f\x6e\x73\x0a\x09\x2d\x64\x20\x4e\x09\x44" \
"\x65\x6c\x61\x79\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x75\x70\x64" \
"\x61\x74\x65\x73\x0a\x09\x2d\x6d\x09\x53\x61\x6d\x65\x20\x61\x73" \
-"\x20\x27\x73\x27\x20\x6b\x65\x79\x00\x5b\x2d\x63\x5d\x20\x46\x49" \
-"\x4c\x45\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x55\x70" \
-"\x64\x61\x74\x65\x20\x74\x68\x65\x20\x6c\x61\x73\x74\x2d\x6d\x6f" \
-"\x64\x69\x66\x69\x65\x64\x20\x64\x61\x74\x65\x20\x6f\x6e\x20\x74" \
-"\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x5b\x73\x5d" \
-"\x0a\x0a\x09\x2d\x63\x09\x44\x6f\x6e\x27\x74\x20\x63\x72\x65\x61" \
-"\x74\x65\x20\x66\x69\x6c\x65\x73\x00\x5b\x2d\x63\x64\x73\x5d\x20" \
-"\x53\x54\x52\x49\x4e\x47\x31\x20\x5b\x53\x54\x52\x49\x4e\x47\x32" \
-"\x5d\x0a\x0a\x54\x72\x61\x6e\x73\x6c\x61\x74\x65\x2c\x20\x73\x71" \
-"\x75\x65\x65\x7a\x65\x2c\x20\x6f\x72\x20\x64\x65\x6c\x65\x74\x65" \
-"\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x66\x72\x6f\x6d" \
-"\x20\x73\x74\x64\x69\x6e\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x63\x09\x54" \
-"\x61\x6b\x65\x20\x63\x6f\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x20\x6f" \
-"\x66\x20\x53\x54\x52\x49\x4e\x47\x31\x0a\x09\x2d\x64\x09\x44\x65" \
-"\x6c\x65\x74\x65\x20\x69\x6e\x70\x75\x74\x20\x63\x68\x61\x72\x61" \
-"\x63\x74\x65\x72\x73\x20\x63\x6f\x64\x65\x64\x20\x53\x54\x52\x49" \
-"\x4e\x47\x31\x0a\x09\x2d\x73\x09\x53\x71\x75\x65\x65\x7a\x65\x20" \
-"\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x6f\x75\x74\x70\x75\x74\x20" \
-"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x6f\x66\x20\x53\x54" \
-"\x52\x49\x4e\x47\x32\x20\x69\x6e\x74\x6f\x20\x6f\x6e\x65\x20\x63" \
-"\x68\x61\x72\x61\x63\x74\x65\x72\x00\x5b\x2d\x46\x49\x6c\x64\x6e" \
-"\x72\x76\x5d\x20\x5b\x2d\x66\x20\x31\x53\x54\x5f\x54\x54\x4c\x5d" \
-"\x20\x5b\x2d\x6d\x20\x4d\x41\x58\x54\x54\x4c\x5d\x20\x5b\x2d\x70" \
-"\x20\x50\x4f\x52\x54\x5d\x20\x5b\x2d\x71\x20\x50\x52\x4f\x42\x45" \
-"\x53\x5d\x0a\x09\x5b\x2d\x73\x20\x53\x52\x43\x5f\x49\x50\x5d\x20" \
-"\x5b\x2d\x74\x20\x54\x4f\x53\x5d\x20\x5b\x2d\x77\x20\x57\x41\x49" \
-"\x54\x5f\x53\x45\x43\x5d\x20\x5b\x2d\x67\x20\x47\x41\x54\x45\x57" \
-"\x41\x59\x5d\x20\x5b\x2d\x69\x20\x49\x46\x41\x43\x45\x5d\x0a\x09" \
-"\x5b\x2d\x7a\x20\x50\x41\x55\x53\x45\x5f\x4d\x53\x45\x43\x5d\x20" \
-"\x48\x4f\x53\x54\x20\x5b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x54\x72" \
-"\x61\x63\x65\x20\x74\x68\x65\x20\x72\x6f\x75\x74\x65\x20\x74\x6f" \
-"\x20\x48\x4f\x53\x54\x0a\x0a\x09\x2d\x46\x09\x53\x65\x74\x20\x74" \
-"\x68\x65\x20\x64\x6f\x6e\x27\x74\x20\x66\x72\x61\x67\x6d\x65\x6e" \
-"\x74\x20\x62\x69\x74\x0a\x09\x2d\x49\x09\x55\x73\x65\x20\x49\x43" \
-"\x4d\x50\x20\x45\x43\x48\x4f\x20\x69\x6e\x73\x74\x65\x61\x64\x20" \
-"\x6f\x66\x20\x55\x44\x50\x20\x64\x61\x74\x61\x67\x72\x61\x6d\x73" \
-"\x0a\x09\x2d\x6c\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65" \
-"\x20\x54\x54\x4c\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x74\x68" \
-"\x65\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x20\x70\x61\x63\x6b\x65" \
-"\x74\x0a\x09\x2d\x64\x09\x53\x65\x74\x20\x53\x4f\x5f\x44\x45\x42" \
-"\x55\x47\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x73\x6f" \
-"\x63\x6b\x65\x74\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x6e" \
-"\x75\x6d\x65\x72\x69\x63\x20\x61\x64\x64\x72\x65\x73\x73\x65\x73" \
-"\x0a\x09\x2d\x72\x09\x42\x79\x70\x61\x73\x73\x20\x72\x6f\x75\x74" \
-"\x69\x6e\x67\x20\x74\x61\x62\x6c\x65\x73\x2c\x20\x73\x65\x6e\x64" \
-"\x20\x64\x69\x72\x65\x63\x74\x6c\x79\x20\x74\x6f\x20\x48\x4f\x53" \
-"\x54\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d" \
-"\x6d\x09\x4d\x61\x78\x20\x74\x69\x6d\x65\x2d\x74\x6f\x2d\x6c\x69" \
-"\x76\x65\x20\x28\x6d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f" \
-"\x66\x20\x68\x6f\x70\x73\x29\x0a\x09\x2d\x70\x09\x42\x61\x73\x65" \
-"\x20\x55\x44\x50\x20\x70\x6f\x72\x74\x20\x6e\x75\x6d\x62\x65\x72" \
-"\x20\x75\x73\x65\x64\x20\x69\x6e\x20\x70\x72\x6f\x62\x65\x73\x0a" \
-"\x09\x09\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x33\x33\x34\x33\x34" \
-"\x29\x0a\x09\x2d\x71\x09\x4e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
-"\x70\x72\x6f\x62\x65\x73\x20\x70\x65\x72\x20\x54\x54\x4c\x20\x28" \
-"\x64\x65\x66\x61\x75\x6c\x74\x20\x33\x29\x0a\x09\x2d\x73\x09\x49" \
-"\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20\x74\x6f\x20\x75\x73\x65" \
-"\x20\x61\x73\x20\x74\x68\x65\x20\x73\x6f\x75\x72\x63\x65\x20\x61" \
-"\x64\x64\x72\x65\x73\x73\x0a\x09\x2d\x74\x09\x54\x79\x70\x65\x2d" \
-"\x6f\x66\x2d\x73\x65\x72\x76\x69\x63\x65\x20\x69\x6e\x20\x70\x72" \
-"\x6f\x62\x65\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x20\x30\x29\x0a\x09\x2d\x77\x09\x54\x69\x6d\x65" \
-"\x20\x69\x6e\x20\x73\x65\x63\x6f\x6e\x64\x73\x20\x74\x6f\x20\x77" \
-"\x61\x69\x74\x20\x66\x6f\x72\x20\x61\x20\x72\x65\x73\x70\x6f\x6e" \
-"\x73\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x33\x29\x0a\x09" \
-"\x2d\x67\x09\x4c\x6f\x6f\x73\x65\x20\x73\x6f\x75\x72\x63\x65\x20" \
-"\x72\x6f\x75\x74\x65\x20\x67\x61\x74\x65\x77\x61\x79\x20\x28\x38" \
-"\x20\x6d\x61\x78\x29\x00\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x61" \
-"\x6e\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x20\x6f\x66\x20\x54" \
-"\x52\x55\x45\x20\x28\x30\x29\x00\x5b\x77\x5d\x20\x5b\x68\x5d\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x64\x69\x6d\x65\x6e\x73\x69\x6f\x6e" \
-"\x28\x73\x29\x20\x6f\x66\x20\x73\x74\x64\x69\x6e\x27\x73\x20\x74" \
-"\x65\x72\x6d\x69\x6e\x61\x6c\x2c\x20\x6f\x6e\x20\x65\x72\x72\x6f" \
-"\x72\x20\x72\x65\x74\x75\x72\x6e\x20\x38\x30\x78\x32\x35\x00\x5b" \
-"\x2d\x63\x20\x4d\x41\x58\x5f\x4d\x4f\x55\x4e\x54\x5f\x43\x4f\x55" \
-"\x4e\x54\x5d\x20\x5b\x2d\x69\x20\x44\x41\x59\x53\x5d\x20\x5b\x2d" \
-"\x43\x20\x4d\x4f\x55\x4e\x54\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b" \
-"\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44" \
-"\x45\x56\x0a\x0a\x41\x64\x6a\x75\x73\x74\x20\x66\x69\x6c\x65\x73" \
-"\x79\x73\x74\x65\x6d\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x6f\x6e" \
-"\x20\x65\x78\x74\x5b\x32\x33\x5d\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x46" \
-"\x49\x4c\x45\x53\x59\x53\x54\x45\x4d\x7c\x44\x49\x52\x45\x43\x54" \
-"\x4f\x52\x59\x0a\x0a\x55\x6e\x6d\x6f\x75\x6e\x74\x20\x66\x69\x6c" \
-"\x65\x20\x73\x79\x73\x74\x65\x6d\x73\x0a\x0a\x09\x2d\x61\x09\x55" \
-"\x6e\x6d\x6f\x75\x6e\x74\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x20" \
-"\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x72\x09\x54\x72\x79\x20" \
-"\x74\x6f\x20\x72\x65\x6d\x6f\x75\x6e\x74\x20\x64\x65\x76\x69\x63" \
-"\x65\x73\x20\x61\x73\x20\x72\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x20" \
-"\x69\x66\x20\x6d\x6f\x75\x6e\x74\x20\x69\x73\x20\x62\x75\x73\x79" \
-"\x0a\x09\x2d\x6c\x09\x4c\x61\x7a\x79\x20\x75\x6d\x6f\x75\x6e\x74" \
-"\x20\x28\x64\x65\x74\x61\x63\x68\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x29\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x75" \
-"\x6d\x6f\x75\x6e\x74\x20\x28\x69\x2e\x65\x2e\x2c\x20\x75\x6e\x72" \
-"\x65\x61\x63\x68\x61\x62\x6c\x65\x20\x4e\x46\x53\x20\x73\x65\x72" \
-"\x76\x65\x72\x29\x0a\x09\x2d\x64\x09\x46\x72\x65\x65\x20\x6c\x6f" \
-"\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x20\x69\x66\x20\x69\x74\x20" \
+"\x20\x27\x73\x27\x20\x6b\x65\x79\x00\x5b\x2d\x63\x5d\x20\x5b\x2d" \
+"\x64\x20\x44\x41\x54\x45\x5d\x20\x5b\x2d\x74\x20\x44\x41\x54\x45" \
+"\x5d\x20\x5b\x2d\x72\x20\x46\x49\x4c\x45\x5d\x20\x46\x49\x4c\x45" \
+"\x2e\x2e\x2e\x0a\x0a\x55\x70\x64\x61\x74\x65\x20\x74\x68\x65\x20" \
+"\x6c\x61\x73\x74\x2d\x6d\x6f\x64\x69\x66\x69\x65\x64\x20\x64\x61" \
+"\x74\x65\x20\x6f\x6e\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6e\x20" \
+"\x46\x49\x4c\x45\x5b\x73\x5d\x0a\x0a\x09\x2d\x63\x09\x44\x6f\x6e" \
+"\x27\x74\x20\x63\x72\x65\x61\x74\x65\x20\x66\x69\x6c\x65\x73\x0a" \
+"\x09\x2d\x64\x20\x44\x54\x09\x44\x61\x74\x65\x2f\x74\x69\x6d\x65" \
+"\x20\x74\x6f\x20\x75\x73\x65\x0a\x09\x2d\x74\x20\x44\x54\x09\x44" \
+"\x61\x74\x65\x2f\x74\x69\x6d\x65\x20\x74\x6f\x20\x75\x73\x65\x0a" \
+"\x09\x2d\x72\x20\x46\x49\x4c\x45\x09\x55\x73\x65\x20\x46\x49\x4c" \
+"\x45\x27\x73\x20\x64\x61\x74\x65\x2f\x74\x69\x6d\x65\x00\x5b\x2d" \
+"\x63\x64\x73\x5d\x20\x53\x54\x52\x49\x4e\x47\x31\x20\x5b\x53\x54" \
+"\x52\x49\x4e\x47\x32\x5d\x0a\x0a\x54\x72\x61\x6e\x73\x6c\x61\x74" \
+"\x65\x2c\x20\x73\x71\x75\x65\x65\x7a\x65\x2c\x20\x6f\x72\x20\x64" \
+"\x65\x6c\x65\x74\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73" \
+"\x20\x66\x72\x6f\x6d\x20\x73\x74\x64\x69\x6e\x2c\x20\x77\x72\x69" \
+"\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a" \
+"\x09\x2d\x63\x09\x54\x61\x6b\x65\x20\x63\x6f\x6d\x70\x6c\x65\x6d" \
+"\x65\x6e\x74\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x31\x0a\x09" \
+"\x2d\x64\x09\x44\x65\x6c\x65\x74\x65\x20\x69\x6e\x70\x75\x74\x20" \
+"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x63\x6f\x64\x65\x64" \
+"\x20\x53\x54\x52\x49\x4e\x47\x31\x0a\x09\x2d\x73\x09\x53\x71\x75" \
+"\x65\x65\x7a\x65\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x6f\x75" \
+"\x74\x70\x75\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20" \
+"\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x32\x20\x69\x6e\x74\x6f\x20" \
+"\x6f\x6e\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x00\x5b\x2d" \
+"\x46\x49\x6c\x64\x6e\x72\x76\x5d\x20\x5b\x2d\x66\x20\x31\x53\x54" \
+"\x5f\x54\x54\x4c\x5d\x20\x5b\x2d\x6d\x20\x4d\x41\x58\x54\x54\x4c" \
+"\x5d\x20\x5b\x2d\x70\x20\x50\x4f\x52\x54\x5d\x20\x5b\x2d\x71\x20" \
+"\x50\x52\x4f\x42\x45\x53\x5d\x0a\x09\x5b\x2d\x73\x20\x53\x52\x43" \
+"\x5f\x49\x50\x5d\x20\x5b\x2d\x74\x20\x54\x4f\x53\x5d\x20\x5b\x2d" \
+"\x77\x20\x57\x41\x49\x54\x5f\x53\x45\x43\x5d\x20\x5b\x2d\x67\x20" \
+"\x47\x41\x54\x45\x57\x41\x59\x5d\x20\x5b\x2d\x69\x20\x49\x46\x41" \
+"\x43\x45\x5d\x0a\x09\x5b\x2d\x7a\x20\x50\x41\x55\x53\x45\x5f\x4d" \
+"\x53\x45\x43\x5d\x20\x48\x4f\x53\x54\x20\x5b\x42\x59\x54\x45\x53" \
+"\x5d\x0a\x0a\x54\x72\x61\x63\x65\x20\x74\x68\x65\x20\x72\x6f\x75" \
+"\x74\x65\x20\x74\x6f\x20\x48\x4f\x53\x54\x0a\x0a\x09\x2d\x46\x09" \
+"\x53\x65\x74\x20\x74\x68\x65\x20\x64\x6f\x6e\x27\x74\x20\x66\x72" \
+"\x61\x67\x6d\x65\x6e\x74\x20\x62\x69\x74\x0a\x09\x2d\x49\x09\x55" \
+"\x73\x65\x20\x49\x43\x4d\x50\x20\x45\x43\x48\x4f\x20\x69\x6e\x73" \
+"\x74\x65\x61\x64\x20\x6f\x66\x20\x55\x44\x50\x20\x64\x61\x74\x61" \
+"\x67\x72\x61\x6d\x73\x0a\x09\x2d\x6c\x09\x44\x69\x73\x70\x6c\x61" \
+"\x79\x20\x74\x68\x65\x20\x54\x54\x4c\x20\x76\x61\x6c\x75\x65\x20" \
+"\x6f\x66\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x20" \
+"\x70\x61\x63\x6b\x65\x74\x0a\x09\x2d\x64\x09\x53\x65\x74\x20\x53" \
+"\x4f\x5f\x44\x45\x42\x55\x47\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20" \
+"\x74\x6f\x20\x73\x6f\x63\x6b\x65\x74\x0a\x09\x2d\x6e\x09\x50\x72" \
+"\x69\x6e\x74\x20\x6e\x75\x6d\x65\x72\x69\x63\x20\x61\x64\x64\x72" \
+"\x65\x73\x73\x65\x73\x0a\x09\x2d\x72\x09\x42\x79\x70\x61\x73\x73" \
+"\x20\x72\x6f\x75\x74\x69\x6e\x67\x20\x74\x61\x62\x6c\x65\x73\x2c" \
+"\x20\x73\x65\x6e\x64\x20\x64\x69\x72\x65\x63\x74\x6c\x79\x20\x74" \
+"\x6f\x20\x48\x4f\x53\x54\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f" \
+"\x73\x65\x0a\x09\x2d\x6d\x09\x4d\x61\x78\x20\x74\x69\x6d\x65\x2d" \
+"\x74\x6f\x2d\x6c\x69\x76\x65\x20\x28\x6d\x61\x78\x20\x6e\x75\x6d" \
+"\x62\x65\x72\x20\x6f\x66\x20\x68\x6f\x70\x73\x29\x0a\x09\x2d\x70" \
+"\x09\x42\x61\x73\x65\x20\x55\x44\x50\x20\x70\x6f\x72\x74\x20\x6e" \
+"\x75\x6d\x62\x65\x72\x20\x75\x73\x65\x64\x20\x69\x6e\x20\x70\x72" \
+"\x6f\x62\x65\x73\x0a\x09\x09\x28\x64\x65\x66\x61\x75\x6c\x74\x20" \
+"\x33\x33\x34\x33\x34\x29\x0a\x09\x2d\x71\x09\x4e\x75\x6d\x62\x65" \
+"\x72\x20\x6f\x66\x20\x70\x72\x6f\x62\x65\x73\x20\x70\x65\x72\x20" \
+"\x54\x54\x4c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x33\x29\x0a" \
+"\x09\x2d\x73\x09\x49\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20\x74" \
+"\x6f\x20\x75\x73\x65\x20\x61\x73\x20\x74\x68\x65\x20\x73\x6f\x75" \
+"\x72\x63\x65\x20\x61\x64\x64\x72\x65\x73\x73\x0a\x09\x2d\x74\x09" \
+"\x54\x79\x70\x65\x2d\x6f\x66\x2d\x73\x65\x72\x76\x69\x63\x65\x20" \
+"\x69\x6e\x20\x70\x72\x6f\x62\x65\x20\x70\x61\x63\x6b\x65\x74\x73" \
+"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x30\x29\x0a\x09\x2d\x77" \
+"\x09\x54\x69\x6d\x65\x20\x69\x6e\x20\x73\x65\x63\x6f\x6e\x64\x73" \
+"\x20\x74\x6f\x20\x77\x61\x69\x74\x20\x66\x6f\x72\x20\x61\x20\x72" \
+"\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
+"\x20\x33\x29\x0a\x09\x2d\x67\x09\x4c\x6f\x6f\x73\x65\x20\x73\x6f" \
+"\x75\x72\x63\x65\x20\x72\x6f\x75\x74\x65\x20\x67\x61\x74\x65\x77" \
+"\x61\x79\x20\x28\x38\x20\x6d\x61\x78\x29\x00\x0a\x0a\x52\x65\x74" \
+"\x75\x72\x6e\x20\x61\x6e\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65" \
+"\x20\x6f\x66\x20\x54\x52\x55\x45\x20\x28\x30\x29\x00\x5b\x77\x5d" \
+"\x20\x5b\x68\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x64\x69\x6d\x65" \
+"\x6e\x73\x69\x6f\x6e\x28\x73\x29\x20\x6f\x66\x20\x73\x74\x64\x69" \
+"\x6e\x27\x73\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x2c\x20\x6f\x6e" \
+"\x20\x65\x72\x72\x6f\x72\x20\x72\x65\x74\x75\x72\x6e\x20\x38\x30" \
+"\x78\x32\x35\x00\x5b\x2d\x63\x20\x4d\x41\x58\x5f\x4d\x4f\x55\x4e" \
+"\x54\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x69\x20\x44\x41\x59" \
+"\x53\x5d\x20\x5b\x2d\x43\x20\x4d\x4f\x55\x4e\x54\x5f\x43\x4f\x55" \
+"\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42" \
+"\x4c\x4f\x43\x4b\x44\x45\x56\x0a\x0a\x41\x64\x6a\x75\x73\x74\x20" \
+"\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x6f\x70\x74\x69\x6f" \
+"\x6e\x73\x20\x6f\x6e\x20\x65\x78\x74\x5b\x32\x33\x5d\x20\x66\x69" \
+"\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x00\x5b\x4f\x50\x54\x49\x4f" \
+"\x4e\x53\x5d\x20\x46\x49\x4c\x45\x53\x59\x53\x54\x45\x4d\x7c\x44" \
+"\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x55\x6e\x6d\x6f\x75\x6e" \
+"\x74\x20\x66\x69\x6c\x65\x20\x73\x79\x73\x74\x65\x6d\x73\x0a\x0a" \
+"\x09\x2d\x61\x09\x55\x6e\x6d\x6f\x75\x6e\x74\x20\x61\x6c\x6c\x20" \
+"\x66\x69\x6c\x65\x20\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x72" \
+"\x09\x54\x72\x79\x20\x74\x6f\x20\x72\x65\x6d\x6f\x75\x6e\x74\x20" \
+"\x64\x65\x76\x69\x63\x65\x73\x20\x61\x73\x20\x72\x65\x61\x64\x2d" \
+"\x6f\x6e\x6c\x79\x20\x69\x66\x20\x6d\x6f\x75\x6e\x74\x20\x69\x73" \
+"\x20\x62\x75\x73\x79\x0a\x09\x2d\x6c\x09\x4c\x61\x7a\x79\x20\x75" \
+"\x6d\x6f\x75\x6e\x74\x20\x28\x64\x65\x74\x61\x63\x68\x20\x66\x69" \
+"\x6c\x65\x73\x79\x73\x74\x65\x6d\x29\x0a\x09\x2d\x66\x09\x46\x6f" \
+"\x72\x63\x65\x20\x75\x6d\x6f\x75\x6e\x74\x20\x28\x69\x2e\x65\x2e" \
+"\x2c\x20\x75\x6e\x72\x65\x61\x63\x68\x61\x62\x6c\x65\x20\x4e\x46" \
+"\x53\x20\x73\x65\x72\x76\x65\x72\x29\x0a\x09\x2d\x44\x09\x44\x6f" \
+"\x6e\x27\x74\x20\x66\x72\x65\x65\x20\x6c\x6f\x6f\x70\x20\x64\x65" \
+"\x76\x69\x63\x65\x20\x65\x76\x65\x6e\x20\x69\x66\x20\x69\x74\x20" \
"\x68\x61\x73\x20\x62\x65\x65\x6e\x20\x75\x73\x65\x64\x00\x5b\x2d" \
"\x61\x6d\x6e\x72\x73\x70\x76\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20" \
"\x73\x79\x73\x74\x65\x6d\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69" \
@@ -2650,1124 +2697,1149 @@
"\x72\x20\x4e\x20\x6d\x69\x63\x72\x6f\x73\x65\x63\x6f\x6e\x64\x73" \
"\x00\x5b\x2d\x6f\x20\x4f\x55\x54\x46\x49\x4c\x45\x5d\x20\x5b\x49" \
"\x4e\x46\x49\x4c\x45\x5d\x0a\x0a\x55\x75\x64\x65\x63\x6f\x64\x65" \
-"\x20\x61\x20\x66\x69\x6c\x65\x0a\x46\x69\x6e\x64\x73\x20\x6f\x75" \
-"\x74\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x20\x69\x6e\x20\x75\x75" \
-"\x65\x6e\x63\x6f\x64\x65\x64\x20\x73\x6f\x75\x72\x63\x65\x20\x75" \
-"\x6e\x6c\x65\x73\x73\x20\x2d\x6f\x20\x69\x73\x20\x67\x69\x76\x65" \
-"\x6e\x00\x5b\x2d\x6d\x5d\x20\x5b\x49\x4e\x46\x49\x4c\x45\x5d\x20" \
-"\x53\x54\x4f\x52\x45\x44\x5f\x46\x49\x4c\x45\x4e\x41\x4d\x45\x0a" \
-"\x0a\x55\x75\x65\x6e\x63\x6f\x64\x65\x20\x61\x20\x66\x69\x6c\x65" \
-"\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x6d\x09" \
-"\x55\x73\x65\x20\x62\x61\x73\x65\x36\x34\x20\x65\x6e\x63\x6f\x64" \
-"\x69\x6e\x67\x20\x70\x65\x72\x20\x52\x46\x43\x31\x35\x32\x31\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x45\x64\x69\x74\x20\x46\x49\x4c\x45\x0a\x0a" \
-"\x09\x2d\x63\x09\x49\x6e\x69\x74\x69\x61\x6c\x20\x63\x6f\x6d\x6d" \
-"\x61\x6e\x64\x20\x74\x6f\x20\x72\x75\x6e\x20\x28\x24\x45\x58\x49" \
-"\x4e\x49\x54\x20\x61\x6c\x73\x6f\x20\x61\x76\x61\x69\x6c\x61\x62" \
-"\x6c\x65\x29\x0a\x09\x2d\x52\x09\x52\x65\x61\x64\x2d\x6f\x6e\x6c" \
-"\x79\x0a\x09\x2d\x48\x09\x53\x68\x6f\x72\x74\x20\x68\x65\x6c\x70" \
-"\x20\x72\x65\x67\x61\x72\x64\x69\x6e\x67\x20\x61\x76\x61\x69\x6c" \
-"\x61\x62\x6c\x65\x20\x66\x65\x61\x74\x75\x72\x65\x73\x00\x5b\x2d" \
-"\x6e\x20\x53\x45\x43\x5d\x20\x5b\x2d\x74\x5d\x20\x50\x52\x4f\x47" \
-"\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20" \
-"\x70\x65\x72\x69\x6f\x64\x69\x63\x61\x6c\x6c\x79\x0a\x0a\x09\x2d" \
-"\x6e\x09\x4c\x6f\x6f\x70\x20\x70\x65\x72\x69\x6f\x64\x20\x69\x6e" \
-"\x20\x73\x65\x63\x6f\x6e\x64\x73\x20\x28\x64\x65\x66\x61\x75\x6c" \
-"\x74\x20\x32\x29\x0a\x09\x2d\x74\x09\x44\x6f\x6e\x27\x74\x20\x70" \
-"\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x00\x5b\x2d\x63\x6d" \
-"\x6c\x77\x4c\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x43\x6f\x75\x6e\x74\x20\x6c\x69\x6e\x65\x73\x2c\x20\x77\x6f\x72" \
-"\x64\x73\x2c\x20\x61\x6e\x64\x20\x62\x79\x74\x65\x73\x20\x66\x6f" \
-"\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20" \
-"\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x43\x6f\x75\x6e" \
-"\x74\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x6d\x09\x43\x6f\x75\x6e" \
-"\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x6c" \
-"\x09\x43\x6f\x75\x6e\x74\x20\x6e\x65\x77\x6c\x69\x6e\x65\x73\x0a" \
-"\x09\x2d\x77\x09\x43\x6f\x75\x6e\x74\x20\x77\x6f\x72\x64\x73\x0a" \
-"\x09\x2d\x4c\x09\x50\x72\x69\x6e\x74\x20\x6c\x6f\x6e\x67\x65\x73" \
-"\x74\x20\x6c\x69\x6e\x65\x20\x6c\x65\x6e\x67\x74\x68\x00\x5b\x2d" \
-"\x63\x7c\x2d\x2d\x63\x6f\x6e\x74\x69\x6e\x75\x65\x5d\x20\x5b\x2d" \
-"\x73\x7c\x2d\x2d\x73\x70\x69\x64\x65\x72\x5d\x20\x5b\x2d\x71\x7c" \
-"\x2d\x2d\x71\x75\x69\x65\x74\x5d\x20\x5b\x2d\x4f\x7c\x2d\x2d\x6f" \
-"\x75\x74\x70\x75\x74\x2d\x64\x6f\x63\x75\x6d\x65\x6e\x74\x20\x46" \
-"\x49\x4c\x45\x5d\x0a\x09\x5b\x2d\x2d\x68\x65\x61\x64\x65\x72\x20" \
-"\x27\x68\x65\x61\x64\x65\x72\x3a\x20\x76\x61\x6c\x75\x65\x27\x5d" \
-"\x20\x5b\x2d\x59\x7c\x2d\x2d\x70\x72\x6f\x78\x79\x20\x6f\x6e\x2f" \
-"\x6f\x66\x66\x5d\x20\x5b\x2d\x50\x20\x44\x49\x52\x5d\x0a\x09\x5b" \
-"\x2d\x2d\x6e\x6f\x2d\x63\x68\x65\x63\x6b\x2d\x63\x65\x72\x74\x69" \
-"\x66\x69\x63\x61\x74\x65\x5d\x20\x5b\x2d\x55\x7c\x2d\x2d\x75\x73" \
-"\x65\x72\x2d\x61\x67\x65\x6e\x74\x20\x41\x47\x45\x4e\x54\x5d\x20" \
-"\x5b\x2d\x54\x20\x53\x45\x43\x5d\x20\x55\x52\x4c\x2e\x2e\x2e\x0a" \
-"\x0a\x52\x65\x74\x72\x69\x65\x76\x65\x20\x66\x69\x6c\x65\x73\x20" \
-"\x76\x69\x61\x20\x48\x54\x54\x50\x20\x6f\x72\x20\x46\x54\x50\x0a" \
-"\x0a\x09\x2d\x73\x09\x53\x70\x69\x64\x65\x72\x20\x6d\x6f\x64\x65" \
-"\x20\x2d\x20\x6f\x6e\x6c\x79\x20\x63\x68\x65\x63\x6b\x20\x66\x69" \
-"\x6c\x65\x20\x65\x78\x69\x73\x74\x65\x6e\x63\x65\x0a\x09\x2d\x63" \
-"\x09\x43\x6f\x6e\x74\x69\x6e\x75\x65\x20\x72\x65\x74\x72\x69\x65" \
-"\x76\x61\x6c\x20\x6f\x66\x20\x61\x62\x6f\x72\x74\x65\x64\x20\x74" \
-"\x72\x61\x6e\x73\x66\x65\x72\x0a\x09\x2d\x71\x09\x51\x75\x69\x65" \
-"\x74\x0a\x09\x2d\x50\x20\x44\x49\x52\x09\x53\x61\x76\x65\x20\x74" \
-"\x6f\x20\x44\x49\x52\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x2e" \
-"\x29\x0a\x09\x2d\x54\x20\x53\x45\x43\x09\x4e\x65\x74\x77\x6f\x72" \
-"\x6b\x20\x72\x65\x61\x64\x20\x74\x69\x6d\x65\x6f\x75\x74\x20\x69" \
-"\x73\x20\x53\x45\x43\x20\x73\x65\x63\x6f\x6e\x64\x73\x0a\x09\x2d" \
-"\x4f\x20\x46\x49\x4c\x45\x09\x53\x61\x76\x65\x20\x74\x6f\x20\x46" \
-"\x49\x4c\x45\x20\x28\x27\x2d\x27\x20\x66\x6f\x72\x20\x73\x74\x64" \
-"\x6f\x75\x74\x29\x0a\x09\x2d\x55\x20\x53\x54\x52\x09\x55\x73\x65" \
-"\x20\x53\x54\x52\x20\x66\x6f\x72\x20\x55\x73\x65\x72\x2d\x41\x67" \
-"\x65\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x0a\x09\x2d\x59\x09\x55" \
-"\x73\x65\x20\x70\x72\x6f\x78\x79\x20\x28\x27\x6f\x6e\x27\x20\x6f" \
-"\x72\x20\x27\x6f\x66\x66\x27\x29\x00\x5b\x43\x4f\x4d\x4d\x41\x4e" \
-"\x44\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x6f\x63\x61\x74\x65\x20\x61\x20" \
-"\x43\x4f\x4d\x4d\x41\x4e\x44\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20" \
-"\x74\x68\x65\x20\x75\x73\x65\x72\x20\x6e\x61\x6d\x65\x20\x61\x73" \
-"\x73\x6f\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68" \
-"\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x66\x66\x65\x63\x74" \
-"\x69\x76\x65\x20\x75\x73\x65\x72\x20\x69\x64\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x5b\x50\x52\x4f\x47\x20\x41\x52\x47\x53" \
-"\x5d\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x6f\x6e\x20\x65" \
-"\x76\x65\x72\x79\x20\x69\x74\x65\x6d\x20\x67\x69\x76\x65\x6e\x20" \
-"\x62\x79\x20\x73\x74\x64\x69\x6e\x0a\x0a\x09\x2d\x70\x09\x41\x73" \
-"\x6b\x20\x75\x73\x65\x72\x20\x77\x68\x65\x74\x68\x65\x72\x20\x74" \
-"\x6f\x20\x72\x75\x6e\x20\x65\x61\x63\x68\x20\x63\x6f\x6d\x6d\x61" \
-"\x6e\x64\x0a\x09\x2d\x72\x09\x44\x6f\x6e\x27\x74\x20\x72\x75\x6e" \
-"\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x69\x66\x20\x69\x6e\x70\x75" \
-"\x74\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0a\x09\x2d\x30\x09\x49" \
-"\x6e\x70\x75\x74\x20\x69\x73\x20\x73\x65\x70\x61\x72\x61\x74\x65" \
-"\x64\x20\x62\x79\x20\x4e\x55\x4c\x20\x63\x68\x61\x72\x61\x63\x74" \
-"\x65\x72\x73\x0a\x09\x2d\x74\x09\x50\x72\x69\x6e\x74\x20\x74\x68" \
-"\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6f\x6e\x20\x73\x74\x64" \
-"\x65\x72\x72\x20\x62\x65\x66\x6f\x72\x65\x20\x65\x78\x65\x63\x75" \
-"\x74\x69\x6f\x6e\x0a\x09\x2d\x65\x5b\x53\x54\x52\x5d\x09\x53\x54" \
-"\x52\x20\x73\x74\x6f\x70\x73\x20\x69\x6e\x70\x75\x74\x20\x70\x72" \
-"\x6f\x63\x65\x73\x73\x69\x6e\x67\x0a\x09\x2d\x6e\x20\x4e\x09\x50" \
-"\x61\x73\x73\x20\x6e\x6f\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e" \
-"\x20\x4e\x20\x61\x72\x67\x73\x20\x74\x6f\x20\x50\x52\x4f\x47\x0a" \
-"\x09\x2d\x73\x20\x4e\x09\x50\x61\x73\x73\x20\x63\x6f\x6d\x6d\x61" \
-"\x6e\x64\x20\x6c\x69\x6e\x65\x20\x6f\x66\x20\x6e\x6f\x20\x6d\x6f" \
-"\x72\x65\x20\x74\x68\x61\x6e\x20\x4e\x20\x62\x79\x74\x65\x73\x0a" \
-"\x09\x2d\x78\x09\x45\x78\x69\x74\x20\x69\x66\x20\x73\x69\x7a\x65" \
-"\x20\x69\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x00\x2d\x64\x20" \
-"\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45" \
-"\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x64" \
-"\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d\x63\x09" \
-"\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a" \
-"\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x46\x49\x4c\x45\x0a\x0a" \
-"\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74" \
-"\x64\x6f\x75\x74\x00\x5b\x53\x54\x52\x49\x4e\x47\x5d\x0a\x0a\x52" \
-"\x65\x70\x65\x61\x74\x65\x64\x6c\x79\x20\x6f\x75\x74\x70\x75\x74" \
-"\x20\x61\x20\x6c\x69\x6e\x65\x20\x77\x69\x74\x68\x20\x53\x54\x52" \
-"\x49\x4e\x47\x2c\x20\x6f\x72\x20\x27\x79\x27\x00\x46\x49\x4c\x45" \
+"\x20\x61\x20\x66\x69\x6c\x65\x0a\x46\x69\x6e\x64\x73\x20\x4f\x55" \
+"\x54\x46\x49\x4c\x45\x20\x69\x6e\x20\x75\x75\x65\x6e\x63\x6f\x64" \
+"\x65\x64\x20\x73\x6f\x75\x72\x63\x65\x20\x75\x6e\x6c\x65\x73\x73" \
+"\x20\x2d\x6f\x20\x69\x73\x20\x67\x69\x76\x65\x6e\x00\x5b\x2d\x6d" \
+"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x20\x53\x54\x4f\x52\x45\x44\x5f" \
+"\x46\x49\x4c\x45\x4e\x41\x4d\x45\x0a\x0a\x55\x75\x65\x6e\x63\x6f" \
+"\x64\x65\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69" \
+"\x6e\x29\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d" \
+"\x6d\x09\x55\x73\x65\x20\x62\x61\x73\x65\x36\x34\x20\x65\x6e\x63" \
+"\x6f\x64\x69\x6e\x67\x20\x70\x65\x72\x20\x52\x46\x43\x31\x35\x32" \
+"\x31\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c" \
+"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x45\x64\x69\x74\x20\x46\x49\x4c\x45" \
+"\x0a\x0a\x09\x2d\x63\x09\x49\x6e\x69\x74\x69\x61\x6c\x20\x63\x6f" \
+"\x6d\x6d\x61\x6e\x64\x20\x74\x6f\x20\x72\x75\x6e\x20\x28\x24\x45" \
+"\x58\x49\x4e\x49\x54\x20\x61\x6c\x73\x6f\x20\x61\x76\x61\x69\x6c" \
+"\x61\x62\x6c\x65\x29\x0a\x09\x2d\x52\x09\x52\x65\x61\x64\x2d\x6f" \
+"\x6e\x6c\x79\x0a\x09\x2d\x48\x09\x53\x68\x6f\x72\x74\x20\x68\x65" \
+"\x6c\x70\x20\x72\x65\x67\x61\x72\x64\x69\x6e\x67\x20\x61\x76\x61" \
+"\x69\x6c\x61\x62\x6c\x65\x20\x66\x65\x61\x74\x75\x72\x65\x73\x00" \
+"\x5b\x2d\x6e\x20\x53\x45\x43\x5d\x20\x5b\x2d\x74\x5d\x20\x50\x52" \
+"\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f" \
+"\x47\x20\x70\x65\x72\x69\x6f\x64\x69\x63\x61\x6c\x6c\x79\x0a\x0a" \
+"\x09\x2d\x6e\x09\x4c\x6f\x6f\x70\x20\x70\x65\x72\x69\x6f\x64\x20" \
+"\x69\x6e\x20\x73\x65\x63\x6f\x6e\x64\x73\x20\x28\x64\x65\x66\x61" \
+"\x75\x6c\x74\x20\x32\x29\x0a\x09\x2d\x74\x09\x44\x6f\x6e\x27\x74" \
+"\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x00\x5b\x2d" \
+"\x63\x6d\x6c\x77\x4c\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
+"\x0a\x0a\x43\x6f\x75\x6e\x74\x20\x6c\x69\x6e\x65\x73\x2c\x20\x77" \
+"\x6f\x72\x64\x73\x2c\x20\x61\x6e\x64\x20\x62\x79\x74\x65\x73\x20" \
+"\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f" \
+"\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x43\x6f" \
+"\x75\x6e\x74\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x6d\x09\x43\x6f" \
+"\x75\x6e\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x0a\x09" \
+"\x2d\x6c\x09\x43\x6f\x75\x6e\x74\x20\x6e\x65\x77\x6c\x69\x6e\x65" \
+"\x73\x0a\x09\x2d\x77\x09\x43\x6f\x75\x6e\x74\x20\x77\x6f\x72\x64" \
+"\x73\x0a\x09\x2d\x4c\x09\x50\x72\x69\x6e\x74\x20\x6c\x6f\x6e\x67" \
+"\x65\x73\x74\x20\x6c\x69\x6e\x65\x20\x6c\x65\x6e\x67\x74\x68\x00" \
+"\x5b\x2d\x63\x7c\x2d\x2d\x63\x6f\x6e\x74\x69\x6e\x75\x65\x5d\x20" \
+"\x5b\x2d\x73\x7c\x2d\x2d\x73\x70\x69\x64\x65\x72\x5d\x20\x5b\x2d" \
+"\x71\x7c\x2d\x2d\x71\x75\x69\x65\x74\x5d\x20\x5b\x2d\x4f\x7c\x2d" \
+"\x2d\x6f\x75\x74\x70\x75\x74\x2d\x64\x6f\x63\x75\x6d\x65\x6e\x74" \
+"\x20\x46\x49\x4c\x45\x5d\x0a\x09\x5b\x2d\x2d\x68\x65\x61\x64\x65" \
+"\x72\x20\x27\x68\x65\x61\x64\x65\x72\x3a\x20\x76\x61\x6c\x75\x65" \
+"\x27\x5d\x20\x5b\x2d\x59\x7c\x2d\x2d\x70\x72\x6f\x78\x79\x20\x6f" \
+"\x6e\x2f\x6f\x66\x66\x5d\x20\x5b\x2d\x50\x20\x44\x49\x52\x5d\x0a" \
+"\x09\x5b\x2d\x2d\x6e\x6f\x2d\x63\x68\x65\x63\x6b\x2d\x63\x65\x72" \
+"\x74\x69\x66\x69\x63\x61\x74\x65\x5d\x20\x5b\x2d\x55\x7c\x2d\x2d" \
+"\x75\x73\x65\x72\x2d\x61\x67\x65\x6e\x74\x20\x41\x47\x45\x4e\x54" \
+"\x5d\x20\x5b\x2d\x54\x20\x53\x45\x43\x5d\x20\x55\x52\x4c\x2e\x2e" \
+"\x2e\x0a\x0a\x52\x65\x74\x72\x69\x65\x76\x65\x20\x66\x69\x6c\x65" \
+"\x73\x20\x76\x69\x61\x20\x48\x54\x54\x50\x20\x6f\x72\x20\x46\x54" \
+"\x50\x0a\x0a\x09\x2d\x73\x09\x53\x70\x69\x64\x65\x72\x20\x6d\x6f" \
+"\x64\x65\x20\x2d\x20\x6f\x6e\x6c\x79\x20\x63\x68\x65\x63\x6b\x20" \
+"\x66\x69\x6c\x65\x20\x65\x78\x69\x73\x74\x65\x6e\x63\x65\x0a\x09" \
+"\x2d\x63\x09\x43\x6f\x6e\x74\x69\x6e\x75\x65\x20\x72\x65\x74\x72" \
+"\x69\x65\x76\x61\x6c\x20\x6f\x66\x20\x61\x62\x6f\x72\x74\x65\x64" \
+"\x20\x74\x72\x61\x6e\x73\x66\x65\x72\x0a\x09\x2d\x71\x09\x51\x75" \
+"\x69\x65\x74\x0a\x09\x2d\x50\x20\x44\x49\x52\x09\x53\x61\x76\x65" \
+"\x20\x74\x6f\x20\x44\x49\x52\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
+"\x20\x2e\x29\x0a\x09\x2d\x54\x20\x53\x45\x43\x09\x4e\x65\x74\x77" \
+"\x6f\x72\x6b\x20\x72\x65\x61\x64\x20\x74\x69\x6d\x65\x6f\x75\x74" \
+"\x20\x69\x73\x20\x53\x45\x43\x20\x73\x65\x63\x6f\x6e\x64\x73\x0a" \
+"\x09\x2d\x4f\x20\x46\x49\x4c\x45\x09\x53\x61\x76\x65\x20\x74\x6f" \
+"\x20\x46\x49\x4c\x45\x20\x28\x27\x2d\x27\x20\x66\x6f\x72\x20\x73" \
+"\x74\x64\x6f\x75\x74\x29\x0a\x09\x2d\x55\x20\x53\x54\x52\x09\x55" \
+"\x73\x65\x20\x53\x54\x52\x20\x66\x6f\x72\x20\x55\x73\x65\x72\x2d" \
+"\x41\x67\x65\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x0a\x09\x2d\x59" \
+"\x09\x55\x73\x65\x20\x70\x72\x6f\x78\x79\x20\x28\x27\x6f\x6e\x27" \
+"\x20\x6f\x72\x20\x27\x6f\x66\x66\x27\x29\x00\x5b\x43\x4f\x4d\x4d" \
+"\x41\x4e\x44\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x6f\x63\x61\x74\x65\x20" \
+"\x61\x20\x43\x4f\x4d\x4d\x41\x4e\x44\x00\x0a\x0a\x50\x72\x69\x6e" \
+"\x74\x20\x74\x68\x65\x20\x75\x73\x65\x72\x20\x6e\x61\x6d\x65\x20" \
+"\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20" \
+"\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x66\x66\x65" \
+"\x63\x74\x69\x76\x65\x20\x75\x73\x65\x72\x20\x69\x64\x00\x5b\x4f" \
+"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x50\x52\x4f\x47\x20\x41\x52" \
+"\x47\x53\x5d\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x6f\x6e" \
+"\x20\x65\x76\x65\x72\x79\x20\x69\x74\x65\x6d\x20\x67\x69\x76\x65" \
+"\x6e\x20\x62\x79\x20\x73\x74\x64\x69\x6e\x0a\x0a\x09\x2d\x70\x09" \
+"\x41\x73\x6b\x20\x75\x73\x65\x72\x20\x77\x68\x65\x74\x68\x65\x72" \
+"\x20\x74\x6f\x20\x72\x75\x6e\x20\x65\x61\x63\x68\x20\x63\x6f\x6d" \
+"\x6d\x61\x6e\x64\x0a\x09\x2d\x72\x09\x44\x6f\x6e\x27\x74\x20\x72" \
+"\x75\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x69\x66\x20\x69\x6e" \
+"\x70\x75\x74\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0a\x09\x2d\x30" \
+"\x09\x49\x6e\x70\x75\x74\x20\x69\x73\x20\x73\x65\x70\x61\x72\x61" \
+"\x74\x65\x64\x20\x62\x79\x20\x4e\x55\x4c\x20\x63\x68\x61\x72\x61" \
+"\x63\x74\x65\x72\x73\x0a\x09\x2d\x74\x09\x50\x72\x69\x6e\x74\x20" \
+"\x74\x68\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6f\x6e\x20\x73" \
+"\x74\x64\x65\x72\x72\x20\x62\x65\x66\x6f\x72\x65\x20\x65\x78\x65" \
+"\x63\x75\x74\x69\x6f\x6e\x0a\x09\x2d\x65\x5b\x53\x54\x52\x5d\x09" \
+"\x53\x54\x52\x20\x73\x74\x6f\x70\x73\x20\x69\x6e\x70\x75\x74\x20" \
+"\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x0a\x09\x2d\x6e\x20\x4e" \
+"\x09\x50\x61\x73\x73\x20\x6e\x6f\x20\x6d\x6f\x72\x65\x20\x74\x68" \
+"\x61\x6e\x20\x4e\x20\x61\x72\x67\x73\x20\x74\x6f\x20\x50\x52\x4f" \
+"\x47\x0a\x09\x2d\x73\x20\x4e\x09\x50\x61\x73\x73\x20\x63\x6f\x6d" \
+"\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x6f\x66\x20\x6e\x6f\x20" \
+"\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x4e\x20\x62\x79\x74\x65" \
+"\x73\x0a\x09\x2d\x78\x09\x45\x78\x69\x74\x20\x69\x66\x20\x73\x69" \
+"\x7a\x65\x20\x69\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x00\x2d" \
+"\x64\x20\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
+"\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49" \
+"\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09" \
+"\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d" \
+"\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
+"\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x46\x49\x4c\x45" \
"\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20" \
-"\x73\x74\x64\x6f\x75\x74\x00" \
+"\x73\x74\x64\x6f\x75\x74\x00\x5b\x53\x54\x52\x49\x4e\x47\x5d\x0a" \
+"\x0a\x52\x65\x70\x65\x61\x74\x65\x64\x6c\x79\x20\x6f\x75\x74\x70" \
+"\x75\x74\x20\x61\x20\x6c\x69\x6e\x65\x20\x77\x69\x74\x68\x20\x53" \
+"\x54\x52\x49\x4e\x47\x2c\x20\x6f\x72\x20\x27\x79\x27\x00\x46\x49" \
+"\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74" \
+"\x6f\x20\x73\x74\x64\x6f\x75\x74\x00" \
#define PACKED_USAGE \
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x67,0xb6,0x37,0xba,0x00,0x19,0x95,0x5f, \
-0x80,0x72,0x70,0x67,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0x60, \
-0x4c,0x68,0x80,0x00,0x1e,0x58,0x3a,0x52,0x81,0xe6,0x9d,0xd7,0xd3,0x42,0x43,0xd0, \
-0xdc,0xf5,0xef,0x7a,0x82,0x40,0x14,0x22,0x03,0xb9,0xba,0x00,0x75,0xd5,0x01,0xd4, \
-0xf7,0xb0,0x06,0x00,0x7a,0x1d,0xed,0xe3,0xef,0x18,0x17,0x5d,0x1a,0xcd,0x9f,0x6e, \
-0x76,0x54,0x8a,0x9a,0xb3,0xdb,0xb9,0x19,0x16,0x32,0x7d,0xb4,0x99,0xba,0x75,0x48, \
-0x17,0x80,0xa5,0xa5,0x6b,0xde,0x6a,0x0f,0xa6,0x41,0xf0,0x15,0xbb,0x17,0x65,0xd3, \
-0xef,0x3e,0x0a,0x05,0x57,0xdf,0x7d,0xde,0xc7,0x96,0xdc,0xe6,0xb9,0xce,0x1d,0xe5, \
-0x96,0xa6,0x51,0x59,0xf5,0x6d,0x54,0xf5,0xee,0x97,0xdc,0xd4,0x1e,0xd9,0x7a,0xcb, \
-0x33,0x22,0x95,0xe2,0xf5,0xd7,0x5a,0x84,0x2b,0xda,0xda,0x1a,0xd2,0xd1,0x5a,0xf4, \
-0x6e,0x80,0x51,0xa1,0xab,0x61,0xea,0xf2,0xec,0x3a,0x27,0x4e,0x26,0xf7,0x3b,0xcf, \
-0x48,0x0b,0xb8,0x91,0x27,0xb1,0x95,0x26,0x96,0x64,0x8b,0xc1,0xcf,0x83,0x41,0x04, \
-0x00,0x13,0x10,0x0d,0x11,0x89,0x93,0x53,0xd0,0x01,0x09,0x84,0xd3,0x42,0x79,0x1e, \
-0x88,0x68,0x64,0x34,0x14,0xf2,0x83,0x53,0xd0,0x26,0x84,0x04,0x04,0xd0,0x99,0x04, \
-0xd3,0x04,0x14,0xda,0x34,0x23,0x1a,0x4c,0x87,0xa8,0x34,0x00,0x62,0x00,0x03,0x4c, \
-0x24,0x10,0xa2,0x6a,0x33,0x52,0x7b,0x44,0x35,0x3d,0x4f,0x50,0x69,0xa3,0x46,0x80, \
-0x00,0x00,0x00,0x0d,0x00,0x00,0x09,0x34,0xa1,0x10,0x8d,0x00,0x08,0xd4,0xc9,0xa9, \
-0x89,0x95,0x1f,0x8a,0x6d,0x3d,0x13,0x2a,0x7a,0x07,0xa2,0x83,0x6a,0x36,0xa0,0xda, \
-0x43,0x40,0x00,0x08,0x94,0x20,0x41,0xa1,0x19,0x54,0xff,0x22,0x65,0x1b,0x29,0x85, \
-0x36,0x98,0x53,0xf5,0x11,0xbd,0x28,0xda,0x4f,0x50,0xd0,0x0d,0x34,0x7a,0x86,0x9a, \
-0x00,0x00,0x91,0x10,0x80,0x43,0x40,0x9a,0x09,0x84,0x34,0x13,0x41,0xa0,0x14,0xf0, \
-0x8a,0x7e,0x2a,0x69,0xe5,0x32,0x7e,0x94,0x1a,0x1a,0x3d,0x46,0x20,0xd3,0x7c,0x93, \
-0xdb,0xe5,0xc3,0xf4,0x1f,0xd1,0xf2,0x98,0x41,0xcf,0x17,0xe9,0x95,0x3d,0xcd,0x8b, \
-0xd6,0xd9,0x7f,0x61,0xef,0x62,0x27,0xf4,0xf5,0xf4,0xc5,0xf7,0x5d,0x9e,0x02,0xf7, \
-0x48,0x80,0xe1,0x7c,0xbf,0x28,0xd7,0x4c,0xdf,0xf2,0x4d,0xaa,0x47,0x0e,0x5f,0xb6, \
-0xee,0x79,0x1c,0xff,0xc6,0x25,0x98,0x19,0x5f,0xdf,0xfb,0xd7,0x54,0x8c,0x86,0x2d, \
-0xfc,0x0c,0x84,0x6c,0x7e,0xed,0x50,0x6a,0x6d,0xda,0x17,0x41,0x27,0xfd,0x30,0x97, \
-0xfd,0xe6,0x23,0x10,0x4c,0x62,0xdd,0x57,0xdb,0xfd,0x91,0x7e,0xf7,0xff,0xde,0x39, \
-0xe1,0xce,0x45,0x47,0x40,0x69,0x50,0x86,0xdc,0xbd,0x0f,0xb6,0xf1,0x4d,0xfd,0x29, \
-0x66,0x39,0xe2,0xf5,0xea,0xfd,0x2f,0x05,0xf0,0xeb,0xa6,0x13,0xfe,0x9f,0x5f,0x2d, \
-0x9d,0xa3,0x42,0xb1,0xf8,0x6e,0xc7,0x1a,0x3b,0xee,0xa6,0x2a,0xdb,0x0c,0x3d,0xe6, \
-0xd3,0xe5,0x07,0xf9,0xfc,0x07,0x21,0x9e,0xe0,0x1a,0x0b,0x69,0x14,0x53,0x27,0xf2, \
-0x7a,0xff,0xb6,0xa8,0x21,0xb9,0xff,0xd9,0x85,0xf4,0x22,0x03,0xd7,0x53,0x47,0xc2, \
-0x4d,0x5e,0xdf,0x9f,0xe2,0x97,0xb0,0x36,0x2d,0x10,0x84,0xe3,0x2e,0x59,0x85,0xd5, \
-0xf8,0x0c,0xbf,0xe7,0x4e,0x7c,0x13,0x73,0xd5,0xfd,0x57,0xd5,0xf8,0x76,0xd8,0xb3, \
-0x7f,0x83,0x3d,0xb8,0xff,0xb7,0x3e,0xe7,0x71,0xf7,0x7e,0xb1,0x6f,0x92,0x71,0x9c, \
-0x73,0x64,0xba,0x3a,0x7a,0xd6,0x05,0x0d,0xb4,0x41,0x4c,0xf3,0x28,0x18,0x99,0xf2, \
-0xc9,0x07,0x55,0x76,0x65,0x5c,0xb3,0x56,0xb8,0x0b,0x71,0xb2,0xb7,0xf5,0x49,0xc5, \
-0x3b,0xf6,0x70,0xd9,0x60,0x65,0x97,0xcb,0x09,0x83,0x32,0x23,0x06,0x66,0x7f,0xe6, \
-0xac,0x13,0xb9,0xce,0x32,0x23,0x06,0x64,0x08,0x02,0x04,0x3d,0x9d,0x29,0xda,0x60, \
-0x80,0x50,0x78,0x1b,0xfa,0xef,0xe3,0x98,0x7d,0xbb,0x7a,0x1b,0x77,0x38,0xa6,0x89, \
-0x24,0xee,0xd6,0x83,0x81,0xe9,0xe4,0x80,0x40,0xb8,0x87,0x46,0x1e,0x0c,0x38,0x0e, \
-0xb2,0xda,0xba,0xf0,0xca,0xbc,0x23,0x1b,0x68,0xaa,0x72,0x0e,0x26,0xfb,0x84,0x91, \
-0xf2,0x3b,0x0a,0x52,0x7b,0x6d,0xf1,0x46,0xfa,0xf4,0x38,0x50,0xcd,0xb6,0x3e,0x3b, \
-0xe7,0x75,0xac,0x53,0x05,0x56,0x00,0x1e,0xc3,0xa9,0xad,0x35,0xe1,0x51,0x67,0x57, \
-0x83,0xc8,0x3a,0xf1,0x3d,0xb3,0xc1,0x5d,0x76,0xe7,0x92,0xc3,0x29,0xce,0x7e,0x77, \
-0xe0,0x65,0x32,0x53,0x32,0x00,0xc9,0xce,0x87,0x20,0x39,0xea,0xb2,0xf2,0xc1,0xbc, \
-0x4b,0xcb,0x6c,0x25,0x14,0xcb,0x7b,0x03,0x97,0x8b,0xc5,0x68,0x3a,0x4d,0xf9,0xf9, \
-0xb3,0x49,0x48,0xd1,0x1c,0xbd,0x52,0xcf,0x65,0xdc,0x00,0x76,0x7d,0xc5,0x8c,0x89, \
-0x41,0x91,0x19,0x96,0x7f,0xdf,0xa3,0x99,0xbe,0xe5,0x40,0x7d,0x38,0x26,0xc1,0x24, \
-0xdc,0xe2,0x0d,0x67,0x36,0x21,0xf2,0xe5,0xf9,0x2a,0x1c,0x4e,0xb7,0x64,0x7d,0x0c, \
-0x1c,0x48,0x1f,0x3f,0x62,0x37,0x2e,0x2b,0x16,0x0d,0x18,0xfa,0xf2,0xf2,0xeb,0x7e, \
-0xd4,0xcf,0xb0,0x34,0x0a,0x8f,0x87,0x22,0x46,0x28,0xa5,0x6e,0xcf,0xb5,0x69,0xc4, \
-0x97,0x04,0xab,0x0d,0x6d,0x13,0xc5,0x6e,0x39,0xc4,0xed,0x8b,0x30,0xb3,0x70,0x30, \
-0xc0,0x75,0x8b,0xf7,0x0d,0x9d,0x55,0x8a,0x46,0xa8,0xfa,0xae,0x0c,0xc7,0x81,0x03, \
-0x5a,0x82,0x5e,0x68,0x27,0xe6,0x8b,0x1d,0xb9,0xf8,0x74,0x79,0xa4,0x18,0xfa,0xeb, \
-0xa3,0x27,0x47,0xf1,0xc3,0x38,0xab,0x04,0xb6,0xc6,0x69,0xd5,0x25,0xfb,0xaf,0x9f, \
-0xbf,0x20,0xa8,0x1c,0xc1,0xdb,0x46,0x09,0x25,0x73,0x5b,0x08,0xd1,0x23,0x47,0x01, \
-0x0b,0x8e,0xf3,0x16,0x89,0x91,0x07,0x26,0xaa,0x1d,0xb0,0xe2,0xd3,0x7c,0x63,0x65, \
-0x18,0x65,0x47,0x6e,0xc4,0xba,0xb2,0xe5,0x04,0xf3,0x19,0x59,0x95,0x84,0x14,0xf8, \
-0xcc,0x1c,0x40,0xcc,0xc1,0x98,0x45,0x35,0xbb,0xdf,0x96,0x29,0x9e,0xfd,0x0c,0x14, \
-0xc2,0xc0,0x63,0xf3,0xc8,0x2c,0x64,0xe0,0xf2,0x04,0x5c,0xcc,0x9c,0xf3,0x53,0x33, \
-0x3c,0xad,0x10,0xfa,0xb6,0xa8,0xba,0x94,0xce,0x63,0xf5,0xe0,0x9c,0x38,0xe7,0x5e, \
-0x23,0x0d,0xa1,0x28,0x30,0x33,0xcb,0xc1,0x90,0xcb,0xd2,0xf2,0x1b,0x28,0x4c,0x12, \
-0xec,0xa9,0x6f,0x7b,0x8e,0x27,0xc5,0xc9,0xc4,0xe8,0xef,0xe4,0x69,0x9c,0x1c,0xfd, \
-0x39,0xa0,0x1c,0xb4,0xde,0x3c,0x6e,0xc7,0x87,0x52,0xff,0x13,0x55,0xa6,0x44,0x10, \
-0x66,0x0b,0x85,0x79,0x52,0xf6,0x3b,0x86,0xc8,0xb7,0x7e,0x7d,0x0d,0x73,0x7f,0xee, \
-0x5c,0xbd,0x97,0x0d,0x2b,0x2e,0x43,0xd1,0xc8,0xfb,0xc6,0xb1,0x0e,0x0d,0x79,0x61, \
-0x28,0xe5,0xc1,0x79,0xbd,0xae,0xc6,0x13,0xc7,0x25,0x0a,0x19,0x82,0x96,0x3f,0x93, \
-0x1f,0xa7,0x47,0xb7,0x74,0xe3,0xb4,0x55,0x36,0xa0,0x04,0xe1,0x40,0xb1,0x0d,0xc5, \
-0x8b,0xbb,0x76,0x8f,0xf8,0x9d,0x1a,0x3a,0xba,0x21,0x8e,0xde,0xfc,0xbc,0xf6,0xb9, \
-0x49,0xa4,0xe3,0xeb,0xa1,0xe5,0x08,0xab,0x68,0x42,0x23,0xa4,0x85,0x08,0xae,0x27, \
-0x1a,0x54,0x84,0x08,0x09,0x18,0x73,0x90,0x6b,0x8e,0xfe,0xdf,0xaf,0xce,0x18,0x7a, \
-0xfc,0x8b,0x5f,0xd3,0xf2,0xd3,0x00,0x12,0xba,0x13,0x24,0x34,0xcf,0x07,0x1c,0x1e, \
-0xc6,0xb9,0x68,0xbd,0x4f,0x2a,0x75,0x2a,0x03,0x62,0xf1,0xce,0xa0,0x6f,0xa9,0x2a, \
-0x4f,0xf4,0xcf,0x22,0x35,0x69,0x5f,0x9e,0x19,0xd9,0x35,0xd4,0x59,0x69,0x99,0x7a, \
-0x59,0x82,0x08,0xbf,0x9b,0x45,0x20,0xd0,0xc0,0xb7,0xe3,0x1f,0x30,0xee,0x6c,0x65, \
-0x23,0xef,0x3f,0x69,0xa2,0x8c,0x63,0xba,0x72,0xe5,0x32,0xd0,0x24,0x4d,0x5e,0x43, \
-0x39,0x70,0x21,0xb5,0x6a,0xf7,0xfd,0x2b,0x8a,0xc7,0x99,0xc0,0x73,0x28,0x8e,0x22, \
-0xe2,0x0a,0x90,0xe9,0x0b,0xae,0x10,0x39,0xa0,0x59,0x4a,0x37,0x64,0x83,0x5e,0xfb, \
-0x31,0x6a,0x0d,0x2a,0x80,0x4d,0x52,0x94,0xfa,0x76,0x4a,0xb2,0x39,0x34,0x34,0x25, \
-0x4f,0xda,0xa1,0x27,0xac,0x2e,0x9c,0x32,0x5a,0x7c,0xe3,0xc7,0x48,0xbf,0x7c,0x4a, \
-0xc8,0xcf,0xc9,0xfe,0xa1,0xac,0x0c,0xda,0x9e,0xb4,0x5a,0x7e,0x96,0x55,0x09,0xb9, \
-0xde,0xfa,0xd5,0x80,0xc8,0x50,0x4f,0xbe,0x9b,0x43,0xa7,0x8e,0x3b,0xa6,0x5d,0xb3, \
-0xed,0x6e,0x83,0x3f,0x43,0x0a,0xd0,0xe7,0xd3,0xc6,0xfd,0x33,0x91,0xf5,0x35,0x81, \
-0xdf,0xb4,0x7b,0x32,0x79,0x90,0xa5,0xda,0x9f,0x7c,0x41,0xe1,0xf9,0xc2,0x6c,0x43, \
-0xd3,0xa6,0x6b,0xe0,0x5a,0xb4,0x19,0xac,0x9e,0xc7,0x84,0xc6,0xa4,0x31,0x3f,0x76, \
-0x59,0xc3,0x3b,0x20,0x5c,0x91,0x80,0xdc,0x28,0x76,0xcf,0x25,0x1d,0x86,0x25,0x6b, \
-0x4a,0x84,0x57,0x23,0x8a,0xb0,0x5b,0xe6,0xb6,0x71,0xd1,0xe0,0x28,0x7e,0x7c,0x94, \
-0xb7,0xbb,0xa7,0x75,0xc5,0x9e,0xc8,0x0e,0xc2,0x47,0xd9,0xc6,0xbd,0x85,0x7a,0x48, \
-0x10,0x81,0x1a,0x6f,0xae,0xb6,0xfd,0x47,0xf2,0x68,0x64,0xbe,0x17,0x7c,0xc8,0xb2, \
-0x78,0x5e,0x58,0x3c,0x7a,0xc8,0xb2,0xf2,0xaf,0x8b,0x3a,0xd6,0x51,0x02,0x1b,0xaa, \
-0x36,0xb6,0xe4,0xe2,0x5d,0x00,0xa9,0xaa,0x05,0x96,0x7c,0x9a,0x29,0xe7,0x10,0x2a, \
-0xfd,0xde,0x2d,0x24,0x76,0x3b,0x3a,0x56,0xbe,0xa3,0xa3,0x65,0xfe,0x08,0xc4,0xde, \
-0xa8,0x42,0x8e,0x39,0xd7,0x56,0x88,0xc8,0xa9,0x98,0x72,0x3c,0x30,0xa3,0xd7,0xc8, \
-0x18,0xfa,0x29,0x09,0x56,0x73,0x44,0x6f,0xd0,0xc3,0x1e,0x08,0x76,0x5e,0x86,0x96, \
-0x2e,0x0e,0x8b,0x68,0x04,0xc9,0x9e,0xaf,0x5b,0x8e,0xa3,0x59,0x86,0x26,0x92,0x47, \
-0xc7,0x92,0x1f,0x83,0x42,0x50,0x29,0xfe,0x44,0x4a,0x1c,0xa3,0xc2,0xcd,0x9f,0xdb, \
-0xaf,0x4c,0xae,0x73,0xc7,0x25,0xfa,0xc0,0xd4,0xec,0x40,0x75,0x40,0x35,0x72,0x05, \
-0x91,0x0a,0x93,0x22,0xca,0xdd,0x74,0xd4,0xe6,0xee,0x48,0x28,0xe1,0x1c,0x3f,0x7a, \
-0xe3,0xd0,0xb9,0xf1,0x8b,0xd4,0xfa,0x37,0xf2,0x64,0x2b,0x87,0x27,0x2c,0xdc,0x90, \
-0xd2,0xfa,0xbf,0x12,0xec,0xe2,0xda,0xce,0x0c,0x7e,0xca,0xef,0xcb,0xe0,0xa2,0x3c, \
-0x4f,0x0c,0x35,0x8e,0x81,0xeb,0xb3,0xac,0x7e,0x34,0x77,0x06,0xb1,0xd0,0xd0,0x82, \
-0x7c,0x54,0x0b,0xa8,0x85,0xa3,0xb0,0x10,0xf6,0xbf,0x8b,0xd1,0xed,0x99,0x3e,0xa5, \
-0xc1,0x8c,0x67,0xf0,0xf6,0xe4,0xda,0x61,0x14,0xfa,0xc9,0xcd,0x94,0x3a,0xce,0xcc, \
-0x48,0xea,0xfd,0xb3,0x7f,0xaf,0x10,0xbe,0xee,0x4b,0x38,0x79,0x4a,0xaa,0x5a,0xfc, \
-0xb2,0x7c,0xe4,0x23,0xa7,0x20,0x60,0xab,0x12,0x3d,0x89,0x8e,0xec,0x69,0xbc,0xfe, \
-0x85,0x08,0x0d,0x3f,0xd5,0x3d,0xf6,0xf0,0x73,0x90,0xaf,0x1a,0x14,0xf5,0xbe,0xdb, \
-0x89,0xec,0x33,0x9c,0x00,0x85,0xaf,0x9d,0xa8,0x9c,0x4c,0xd7,0xab,0x26,0x07,0xe2, \
-0x99,0x71,0x3e,0x4b,0x36,0x4f,0xbb,0xd9,0xa9,0xf5,0x75,0xf0,0x4d,0xbc,0x35,0xe3, \
-0xd2,0xf8,0x6b,0x20,0xc5,0xec,0x42,0xaf,0x4a,0x8d,0xb1,0xd0,0xdf,0x2a,0xc7,0x82, \
-0x0b,0x02,0xd2,0x04,0x76,0x08,0x49,0xb2,0xde,0x95,0x20,0x6d,0x22,0x30,0x4a,0xf6, \
-0x4b,0x07,0x42,0x5c,0xf0,0xb8,0xc5,0x0d,0x9c,0x7e,0xf3,0x6f,0x9b,0xd9,0xf3,0x1d, \
-0xac,0x81,0xba,0x10,0x11,0x52,0x02,0x8b,0xd9,0x6c,0x8a,0xed,0x8b,0x89,0x3e,0x76, \
-0x43,0x82,0x40,0x30,0xc1,0x40,0x8a,0x00,0xef,0x6a,0x00,0x32,0x06,0x42,0x1a,0xcc, \
-0x46,0xb4,0xc1,0x4f,0x1d,0xf2,0x13,0x1a,0xe5,0x56,0x4b,0x58,0x56,0x36,0x4d,0x6c, \
-0x9e,0x8f,0x71,0x76,0x6d,0xdf,0x12,0x3d,0x13,0x7b,0xe6,0x00,0xe8,0xff,0x60,0xeb, \
-0x3f,0x40,0xaf,0xe0,0x48,0x6a,0xbc,0x97,0x3c,0x7b,0xea,0x47,0xc6,0xf2,0xf4,0x93, \
-0x4e,0x6b,0x56,0x4f,0x58,0x90,0x9f,0x00,0xd6,0xdd,0x1e,0x60,0xd5,0x23,0x5d,0x08, \
-0xba,0xa1,0x40,0xde,0x8e,0x34,0x0a,0x42,0x88,0x57,0x4b,0x5a,0x16,0x5e,0x1c,0x16, \
-0x28,0x6f,0x25,0x78,0x7f,0x5a,0x90,0xfc,0x56,0x3a,0x9d,0x64,0xbb,0x2d,0x1d,0x35, \
-0xa5,0xd7,0x6e,0x67,0xbb,0x38,0x2e,0xdf,0xfa,0xcc,0x9b,0x5b,0x1b,0x1f,0xca,0xe1, \
-0x0d,0xb9,0xed,0x73,0x30,0x01,0xd7,0x97,0x11,0x21,0x62,0x1e,0xae,0x9f,0x16,0xf2, \
-0xdc,0xbd,0xfa,0xac,0x13,0xe2,0x40,0x54,0xb2,0x7c,0x54,0xad,0x5c,0xeb,0xdd,0x17, \
-0x2f,0x34,0x31,0x9e,0x91,0x9d,0xad,0xbd,0xa1,0x9e,0x38,0x3e,0x4e,0xdd,0xc9,0x2e, \
-0x84,0xa1,0xb2,0x68,0x91,0xb4,0x1a,0xff,0xbf,0xf5,0x57,0x6b,0xc9,0x34,0x05,0xd1, \
-0x1a,0xf8,0xa3,0xc5,0xa9,0xb2,0x56,0xf9,0x62,0x6d,0x21,0x53,0x7b,0xe6,0x06,0x05, \
-0x7b,0x34,0x9a,0xf0,0xc9,0x84,0x0f,0xee,0x8c,0x46,0x5f,0x57,0x6a,0xe2,0xbd,0xde, \
-0xdc,0xdc,0x70,0xd7,0x8f,0x2b,0x35,0x1f,0xb6,0x54,0xb6,0xba,0xd4,0x46,0xbd,0x68, \
-0x39,0x07,0x74,0x04,0x0a,0x56,0xcf,0xa7,0xf7,0xc4,0x92,0x53,0xae,0x6f,0x19,0x6d, \
-0x26,0x81,0x2c,0xde,0x55,0xe4,0x8e,0x89,0xdc,0x9b,0x46,0x8e,0xa4,0xbf,0x21,0xdf, \
-0x9d,0x3f,0xdb,0x50,0x7c,0xa7,0x94,0x3f,0x29,0x7f,0x1e,0xdc,0x82,0x9e,0x29,0x72, \
-0x73,0x9e,0x57,0xbc,0x5f,0x00,0xdb,0x37,0xa3,0xd3,0x8b,0x5f,0x54,0x35,0x8f,0xe7, \
-0x97,0xe7,0xbf,0xc3,0x9f,0x6f,0xd7,0xc9,0x7b,0x4b,0xe7,0x83,0x1f,0x19,0x10,0xb2, \
-0xae,0x36,0x47,0xdf,0x90,0x08,0x3b,0x38,0xb6,0x19,0x07,0x5e,0x0c,0x71,0xf4,0x4b, \
-0x88,0x28,0xef,0x95,0x1d,0xa0,0xef,0x1f,0x6c,0xd0,0xbd,0xb5,0xf1,0x31,0x77,0xc8, \
-0xe7,0xa8,0x71,0xd8,0x7d,0x70,0x0b,0x0c,0xfc,0xe3,0x54,0x7b,0x23,0x27,0xf5,0x9d, \
-0x43,0xef,0x98,0x25,0xc3,0xcc,0xc9,0x60,0x6d,0x89,0xb9,0x16,0x83,0x94,0xe1,0x67, \
-0x65,0x0d,0x8c,0xe1,0x48,0x9b,0x5a,0xdb,0x17,0xf4,0x3b,0xe3,0x1d,0xf6,0x1d,0x28, \
-0x34,0xaa,0x73,0x1f,0x1c,0x6d,0x2f,0x4c,0x6a,0x9b,0xeb,0xf2,0x5d,0x7e,0xf4,0x49, \
-0x4d,0xa6,0x35,0x8c,0x9f,0xb4,0xf0,0xf9,0x01,0xde,0x10,0x49,0xfc,0xff,0xb3,0xe0, \
-0x34,0xc3,0xf4,0xa8,0xbe,0x4e,0xe3,0x57,0x4e,0x45,0x47,0x3e,0xb0,0x3b,0x11,0x01, \
-0x93,0x42,0x3b,0xa4,0x1c,0x4d,0x10,0xc5,0x25,0xde,0x8e,0xcd,0x71,0xd9,0x00,0x1e, \
-0xa3,0x42,0xb8,0xe7,0x25,0x8a,0x5e,0xa6,0x08,0x18,0x86,0x25,0xcf,0x8c,0xeb,0x09, \
-0xc9,0xab,0x0a,0x88,0x5a,0xd1,0xf7,0x05,0x16,0x4c,0x60,0x24,0xe5,0x04,0x5a,0x83, \
-0xc8,0x2c,0xc6,0x6d,0x1a,0x64,0x88,0x68,0x8d,0x9a,0xe2,0x28,0x21,0xda,0xc0,0x54, \
-0x55,0x12,0x86,0x08,0xde,0x27,0xb1,0x6b,0x81,0x6b,0xf3,0x3f,0xce,0x51,0x83,0xa2, \
-0x24,0x25,0x06,0x74,0xc4,0x98,0xe2,0x42,0x5f,0xc7,0x4c,0x9c,0x36,0xe5,0x12,0xc9, \
-0x23,0x2c,0x64,0x56,0x56,0x2d,0x87,0xe9,0xaa,0x94,0x9c,0x32,0x34,0xfa,0xa4,0xa8, \
-0x34,0x0e,0x39,0x90,0x8e,0xc3,0xde,0xd7,0x09,0x12,0x56,0x87,0x53,0x93,0x3f,0x28, \
-0x86,0x41,0xb5,0xd7,0xb6,0x1f,0xc1,0xf0,0x7b,0x7d,0xd6,0xbe,0xbe,0x3d,0x88,0x71, \
-0xdb,0x3c,0x01,0xee,0x1d,0x1c,0x09,0x94,0xbb,0x97,0x95,0x5c,0x10,0x81,0x14,0xe7, \
-0xc9,0x35,0x61,0x8e,0xa5,0xb0,0xe1,0x97,0x0d,0xaf,0xc5,0x29,0x9c,0x30,0x39,0xe6, \
-0x79,0x2c,0xb6,0x91,0x73,0xc5,0x11,0xcf,0x55,0x74,0x54,0xc1,0x09,0xf3,0x4c,0x80, \
-0xb3,0x0d,0x12,0x54,0x67,0xce,0xd0,0x65,0x64,0xad,0x9f,0xa6,0x5a,0x8c,0xc5,0x1b, \
-0x22,0x0f,0x86,0x01,0x5b,0x16,0xea,0x2a,0x8c,0x93,0x73,0x74,0x30,0x93,0xa6,0xee, \
-0x61,0x84,0x79,0x7f,0x39,0xe8,0xdb,0x44,0xc1,0x84,0xe3,0x42,0x2c,0x66,0x30,0x3d, \
-0xe6,0xce,0x51,0xd2,0x32,0xce,0x78,0xe2,0xc4,0x2d,0xae,0xbb,0x8e,0x30,0x30,0xfe, \
-0x07,0xa8,0xa6,0xc7,0x0b,0x28,0xa8,0x67,0x66,0x0a,0x53,0x04,0x15,0x22,0x36,0xae, \
-0x98,0x62,0x3e,0x52,0x32,0xa4,0xcb,0x65,0x08,0x8d,0x78,0x3a,0xcc,0x24,0xad,0xd4, \
-0xbe,0x26,0xd3,0x2d,0x0f,0xe3,0xb9,0xae,0xe8,0x73,0xb2,0x7d,0x23,0xb8,0x0f,0xab, \
-0x0c,0x22,0x3d,0x63,0xce,0xfb,0x77,0x00,0x47,0xa8,0x0b,0x56,0x24,0x71,0x68,0x17, \
-0x23,0x55,0x49,0x65,0xf7,0xe1,0x86,0xfe,0xfb,0x5f,0x4f,0x79,0xb2,0x2b,0xae,0x71, \
-0xf5,0xd2,0xe8,0xef,0xd1,0x8f,0x2e,0x67,0x67,0x56,0xdc,0x5a,0x48,0x3e,0xb6,0x1a, \
-0x0f,0x7f,0x12,0x10,0xb9,0xe9,0x00,0x90,0x56,0xb1,0xb0,0x7f,0xc8,0x93,0xf6,0x3c, \
-0x69,0xef,0x7f,0x5c,0xfd,0x64,0xa3,0x46,0x8b,0x99,0x56,0x92,0x50,0xc6,0xcf,0xc3, \
-0x6a,0x18,0x4f,0xca,0x0e,0x18,0x75,0x73,0xb8,0xd1,0x4b,0x1c,0x34,0x67,0x0c,0x94, \
-0x3e,0x5f,0xa6,0xc3,0xf8,0xbe,0x83,0x41,0x5d,0x90,0x46,0xab,0xc6,0x66,0x91,0x4f, \
-0x0e,0x47,0x4f,0xec,0x4f,0xe3,0xdd,0x00,0x3c,0xbb,0x7c,0x54,0x04,0xc1,0xa7,0x74, \
-0x53,0xc7,0x27,0x94,0x8c,0x68,0x75,0xb3,0x3d,0x0d,0x34,0x86,0xfe,0x19,0x29,0x6c, \
-0x6a,0x6c,0x02,0x6f,0xb0,0xf5,0xae,0xa3,0x9c,0x50,0xde,0xf8,0x90,0x65,0x82,0x45, \
-0x21,0xde,0x91,0xcd,0x26,0x29,0x24,0x6c,0xaf,0x2f,0xb6,0x04,0x11,0x77,0x75,0xa9, \
-0x85,0xd8,0x74,0x52,0x13,0x73,0x87,0x44,0x6d,0x6a,0x8b,0x03,0x00,0x57,0xcb,0x41, \
-0x9a,0xc9,0x47,0x42,0x4a,0xa0,0xe6,0x71,0x6e,0x71,0x0c,0xbb,0x1d,0xb9,0x89,0x03, \
-0xe0,0x82,0xe3,0x8d,0xe9,0x60,0x6f,0x51,0xaa,0x2d,0xec,0xb5,0x43,0x38,0x4a,0xaf, \
-0x9e,0x45,0x06,0x02,0xc4,0x6a,0x39,0xb8,0x9d,0xc5,0x23,0xae,0xcf,0xea,0x16,0x8b, \
-0x9c,0x95,0xbc,0xbc,0xd5,0xcc,0xae,0xd2,0x82,0xce,0x08,0xef,0x64,0x1e,0x72,0xb9, \
-0xdb,0xa3,0xf7,0xd5,0x6f,0x60,0x39,0xfc,0x15,0x63,0xcf,0x30,0x27,0x19,0xad,0xb0, \
-0x82,0x9c,0xe3,0xd4,0x8b,0x9e,0x43,0x84,0x66,0x45,0x1c,0x9a,0x62,0x71,0xe7,0xe4, \
-0xfa,0x7b,0xb5,0x5c,0x8f,0x12,0x84,0x49,0xfa,0xf2,0xfd,0x24,0x28,0x6b,0xa5,0x0c, \
-0x2a,0xf9,0xeb,0x74,0xad,0x1d,0x82,0x53,0xcb,0x9e,0x4b,0xdf,0x6e,0x39,0x44,0x52, \
-0xd6,0x0f,0xaa,0x02,0xb6,0x12,0xc2,0xa0,0x67,0x65,0x45,0x19,0xd4,0xd1,0x55,0x48, \
-0x51,0x1c,0xa3,0xa7,0x34,0x03,0xef,0x74,0x9f,0x7a,0xc9,0xcf,0x3c,0x57,0x86,0x97, \
-0x3a,0x9d,0x53,0x27,0x30,0x25,0x0a,0x50,0x84,0x1e,0xa1,0x54,0x59,0x77,0xb2,0x04, \
-0x32,0x2b,0xf4,0xf7,0xfd,0x79,0xe9,0xaf,0x21,0xa0,0x4e,0xec,0x05,0x04,0x82,0x1c, \
-0xeb,0x93,0x00,0xa5,0x52,0x99,0xfb,0xd8,0x2f,0x0a,0xaa,0xc3,0x5c,0x2e,0x51,0x0d, \
-0xe8,0x05,0x30,0x4b,0x35,0x9b,0xfe,0x11,0x6e,0xfd,0x24,0xb2,0x1d,0x12,0xc6,0xd6, \
-0xe1,0xd5,0x58,0x19,0xef,0xc2,0xa2,0xc3,0x06,0x73,0xf4,0x44,0x92,0x4c,0xd4,0x7b, \
-0x10,0xa1,0x01,0xa0,0x60,0x01,0xdb,0x6b,0xaf,0xf7,0xc9,0x82,0x17,0xe4,0x90,0x81, \
-0x90,0xc4,0xb9,0x25,0xc5,0x3d,0xcc,0x26,0x83,0xba,0x04,0x07,0xbd,0x95,0x44,0x43, \
-0x74,0xa4,0x7c,0x73,0xaf,0x2e,0x3d,0x17,0xa1,0xaf,0x01,0xf4,0x2c,0xe4,0x7b,0x67, \
-0x23,0x94,0x49,0xf8,0xe0,0x3b,0x70,0xf3,0x67,0xb8,0xe4,0x61,0x2d,0x97,0x9f,0x94, \
-0x64,0x41,0x0f,0xd3,0x45,0x1a,0x07,0x41,0xd1,0x10,0x60,0x16,0x08,0xab,0xe9,0x41, \
-0x9a,0xc7,0x7a,0x42,0xe6,0x90,0x39,0x76,0x8d,0x9f,0x4e,0xdf,0xa2,0xcd,0x3c,0x57, \
-0x5c,0x53,0xdf,0x87,0xbf,0x0b,0x4f,0xd9,0xe5,0x8f,0x73,0xb5,0x37,0x77,0xcb,0x10, \
-0x2a,0xa2,0xd3,0x50,0x17,0x33,0xfb,0xba,0x58,0x5f,0x19,0x46,0x8f,0xde,0xc8,0x81, \
-0x43,0x20,0x37,0x76,0xeb,0x13,0xad,0x40,0x5a,0x4c,0xa8,0xbb,0x3f,0xc9,0x20,0x13, \
-0xf7,0x36,0x54,0x63,0x5c,0x87,0x3b,0x71,0x48,0x15,0x85,0x54,0x44,0xe8,0xb1,0x58, \
-0x1b,0x8d,0x11,0x06,0x5f,0x82,0xcc,0xef,0xe5,0x15,0x81,0x67,0x38,0x14,0x5b,0xd2, \
-0x7d,0xe1,0x43,0x93,0x43,0x7b,0x66,0x14,0x78,0x61,0x15,0x20,0x5d,0xa0,0xd9,0xc6, \
-0x8b,0xf0,0x41,0xe1,0x9d,0x3b,0x3d,0x96,0xa4,0x4f,0x5d,0x28,0x32,0x6c,0x82,0x0d, \
-0xac,0x05,0x49,0x08,0x0f,0xab,0xd9,0x44,0x01,0xed,0xe1,0x93,0x52,0x4e,0xeb,0x35, \
-0x9c,0x74,0x35,0x9a,0x21,0xf2,0xd4,0x57,0x26,0xe9,0xb7,0xd2,0xb7,0xdc,0x54,0x54, \
-0xeb,0xea,0x92,0xf5,0xa9,0x73,0x04,0x71,0xf3,0x15,0xd1,0xc4,0x85,0xba,0xf4,0x39, \
-0xe1,0xc7,0x0b,0xab,0xa3,0x5e,0x92,0x98,0x39,0x6e,0xa3,0x13,0xff,0x90,0x1a,0xee, \
-0x9e,0x48,0x94,0xdb,0x6b,0xad,0x99,0x76,0x76,0x97,0xc9,0x45,0x3a,0x89,0x22,0x55, \
-0x78,0x9a,0x7b,0x41,0x56,0xaa,0x62,0x1f,0x3c,0x0e,0xb7,0x49,0x01,0xc3,0x2d,0x10, \
-0xb1,0xc2,0x70,0xc4,0xa9,0xa2,0x80,0xe7,0xac,0x15,0x3c,0x0d,0x92,0xce,0xea,0x1f, \
-0xce,0xf4,0x61,0x27,0x48,0xe7,0xc4,0x19,0x0c,0x39,0xd6,0xe7,0xc6,0x18,0xc4,0x7d, \
-0xcb,0x6a,0x72,0x12,0x38,0xb0,0x15,0x45,0x5e,0x09,0x2a,0x3d,0x3f,0x1f,0x8e,0xe0, \
-0x3b,0xe7,0x71,0x3e,0x05,0x1e,0xb1,0xe5,0xfa,0xdd,0xf0,0x94,0x7a,0x94,0x03,0x33, \
-0xfc,0xca,0x83,0xb9,0xd6,0xd0,0x9e,0x40,0xa3,0x20,0xdc,0x6b,0x3a,0x35,0x3b,0xec, \
-0x1e,0xaa,0x91,0x45,0x03,0xc1,0x29,0x66,0x4a,0x8b,0x42,0x71,0x9b,0xd4,0xbf,0x97, \
-0x14,0xdc,0xc8,0x22,0x8a,0x9e,0xc5,0x18,0xaf,0x7e,0xfa,0x53,0x41,0xe5,0x0b,0x5f, \
-0x62,0xfa,0x3f,0x77,0xbe,0x5b,0x5d,0x3f,0xca,0x6d,0xc1,0x30,0x2a,0xd9,0xaa,0x8a, \
-0xa7,0xe3,0x5f,0x4c,0x00,0xea,0x10,0x0f,0x72,0xfc,0x3d,0x16,0x81,0x3c,0x60,0x2c, \
-0xdc,0xa5,0x00,0x59,0xa5,0xc8,0xd5,0x60,0x95,0x5d,0x88,0xc9,0x8d,0x34,0xbc,0x54, \
-0xd6,0x06,0xfb,0xfd,0x72,0x3b,0xec,0x95,0xe6,0x62,0x59,0x33,0x9e,0xc2,0x91,0x32, \
-0xad,0xa1,0xf9,0xcd,0x91,0xe6,0xa9,0x81,0xb5,0x2f,0x31,0x8b,0xcc,0x5a,0x73,0x75, \
-0x40,0xf0,0xc1,0xbb,0xbf,0x2e,0x37,0x65,0x1e,0x24,0xc1,0x38,0x44,0xb8,0x08,0x86, \
-0x5d,0x89,0x93,0x77,0x7c,0x10,0xc2,0x87,0x8a,0x23,0x4f,0xc1,0x89,0xde,0x88,0x0f, \
-0x1c,0x61,0xd1,0x66,0x68,0x61,0x8d,0x46,0xf3,0x31,0x6a,0x00,0x95,0x1b,0x76,0xa4, \
-0xb8,0xa1,0xa7,0x3a,0x19,0x79,0xbe,0x95,0x7c,0x75,0x70,0x50,0x74,0xa1,0x0f,0xbf, \
-0xd2,0x90,0x4e,0x3c,0x7e,0x26,0xaa,0x40,0x7a,0x17,0xba,0x04,0xc6,0x6a,0x33,0x80, \
-0x99,0xd3,0x68,0x51,0x61,0xaf,0xc8,0xb0,0xcb,0x5d,0xaf,0x5c,0x2b,0x10,0x32,0xcd, \
-0x32,0xcc,0xcf,0x8c,0xb8,0x0c,0x9b,0x27,0xb0,0x0c,0xe9,0x6d,0xb5,0x04,0x0b,0x42, \
-0x5c,0xf5,0xe4,0x25,0x8e,0xb0,0x15,0x34,0xca,0x7d,0xb4,0xd7,0x8e,0xf5,0x12,0x05, \
-0x6c,0xf3,0xcb,0x57,0xd8,0xac,0xbd,0xca,0x1b,0x1e,0x34,0xba,0xde,0xa8,0x5e,0x97, \
-0xa8,0x40,0xc2,0x3e,0x52,0xd8,0x77,0x54,0x12,0x81,0x1e,0x5d,0x3c,0x73,0x88,0xfe, \
-0xd8,0xde,0x95,0xf9,0xc7,0x4d,0x5e,0xfd,0x32,0x9e,0x5e,0x28,0x91,0xdd,0xcb,0x2e, \
-0x48,0x13,0xbc,0xf1,0xdf,0x80,0xd0,0x41,0x46,0x6a,0x8b,0x28,0xb0,0x67,0xe4,0x79, \
-0x6a,0x97,0xe1,0xd0,0x62,0xae,0x35,0x54,0xf1,0xfb,0x13,0xc0,0xd1,0xb3,0xb2,0x8f, \
-0x4d,0xb0,0xb0,0xa9,0xb1,0x01,0x08,0xd3,0x4d,0xe9,0xb0,0x71,0x8a,0x46,0xfc,0x2c, \
-0x2c,0x4f,0x06,0x35,0x94,0xf3,0xa4,0x8c,0x36,0x64,0x48,0xc3,0xe0,0x60,0x30,0x5c, \
-0xfb,0x54,0x61,0xc6,0x56,0xd2,0x74,0xe4,0x54,0xaa,0x8c,0x15,0x01,0x52,0xf8,0x73, \
-0x91,0x99,0x67,0xd1,0x40,0x46,0xc8,0x22,0x0d,0x26,0x5b,0x32,0xf8,0x14,0xc2,0xaa, \
-0xe7,0x74,0xbe,0x12,0x29,0x6d,0xec,0x35,0xc6,0x94,0x30,0x8a,0xe1,0xd1,0x80,0x66, \
-0xc4,0xc2,0xeb,0xe3,0xe2,0xc7,0x68,0xbd,0xe0,0x41,0x66,0x34,0x1a,0x2c,0x42,0xf2, \
-0x12,0xf3,0xdf,0x38,0xb0,0x36,0x40,0xd3,0xe7,0x4a,0x04,0x84,0x35,0xc0,0x56,0x74, \
-0x71,0x65,0xa8,0x47,0xad,0xdc,0x17,0x41,0x61,0xb0,0x73,0x4a,0x77,0x99,0xe1,0xf2, \
-0x55,0x8a,0x25,0x56,0xa1,0x78,0xf2,0x6b,0x84,0xc2,0xde,0x6b,0xa8,0x36,0x06,0x80, \
-0xae,0xd1,0x20,0x8f,0xb7,0x85,0x94,0x21,0x19,0x98,0xe6,0xba,0x18,0x83,0x0f,0x52, \
-0xcd,0x14,0x69,0x24,0x76,0xd2,0x22,0xa9,0x99,0xcc,0xa2,0x3b,0x20,0xd1,0xf4,0x75, \
-0xdd,0x6c,0x09,0x90,0x6f,0xe2,0xb2,0x7b,0x27,0x42,0x16,0xb6,0xa5,0x04,0xb0,0x60, \
-0x18,0x10,0xc0,0xe8,0xc1,0x1f,0xac,0x53,0xf9,0x59,0x1f,0xaf,0x5e,0xa9,0xf3,0x40, \
-0xed,0xe3,0xb5,0xb3,0x32,0x13,0xaf,0x9d,0xf2,0x02,0xb7,0xf2,0xb0,0x1f,0x85,0xec, \
-0x57,0x44,0x55,0xaa,0xa0,0x36,0x45,0x05,0x7d,0x3f,0x7c,0x06,0xcf,0xbc,0x69,0xe9, \
-0xd9,0x1e,0xc8,0x97,0x39,0x03,0xf1,0xf4,0xf7,0xfb,0x35,0xd2,0x32,0x21,0x09,0xe5, \
-0x95,0xc3,0x30,0xab,0xdb,0x00,0x30,0xb7,0xaa,0xdc,0x3d,0x7c,0x16,0xd7,0xcf,0x6e, \
-0x18,0x1d,0x6f,0x23,0xd8,0x60,0x7a,0x92,0xc3,0xb0,0xc5,0xbc,0xe9,0x55,0xe2,0xce, \
-0xb6,0xf7,0x5b,0x03,0x88,0xaa,0x90,0xf0,0x1b,0xf2,0x47,0x9d,0xba,0xdb,0x07,0xac, \
-0x1d,0xf9,0x0d,0xdd,0x88,0x4d,0x10,0x0c,0xfb,0xca,0xc3,0xee,0x1d,0x82,0x46,0xb5, \
-0x0c,0xad,0x7c,0xd6,0x3a,0x46,0x63,0xea,0x16,0x89,0xb2,0x44,0x19,0x62,0x8f,0xde, \
-0xb9,0x81,0x53,0x5a,0x77,0xe5,0x9e,0x05,0xc5,0x67,0xe1,0xb8,0x8b,0x0f,0xe3,0xd1, \
-0x34,0x15,0xcd,0x60,0x1b,0x53,0x16,0x41,0x0d,0x57,0x55,0xa8,0xeb,0x68,0xa8,0xe4, \
-0x60,0x7d,0x01,0xe5,0x05,0xa9,0x8d,0x45,0x96,0x5b,0x7b,0x31,0xcd,0xc5,0x94,0x31, \
-0xa5,0x4d,0x1f,0x96,0x3a,0xea,0x37,0xbd,0x43,0xb2,0x64,0x3d,0xa1,0xd3,0x46,0xcc, \
-0x9e,0xbc,0xb5,0xaf,0xbb,0x24,0xe8,0x81,0x1c,0xf2,0x1e,0x56,0xe2,0xf8,0x44,0xba, \
-0x55,0x23,0x38,0xd8,0xc2,0x47,0x1c,0xc2,0x30,0xb7,0x87,0x51,0x20,0x2d,0x69,0x34, \
-0xaa,0x22,0xab,0x67,0x3d,0x01,0xcd,0xa9,0x4e,0x8c,0x20,0x2b,0x1b,0x0c,0xef,0x39, \
-0xf0,0x5c,0xbd,0x03,0x6d,0xda,0xfb,0x53,0x92,0x68,0xe1,0x04,0xf4,0xf9,0x6e,0x23, \
-0x52,0x66,0x83,0x86,0xf6,0x26,0x84,0xee,0x46,0x3d,0xf0,0xa2,0xb2,0x9c,0x79,0x62, \
-0x47,0xb7,0x7a,0xe2,0xff,0xab,0xc0,0xcc,0x32,0xa6,0xdd,0x5a,0x98,0x71,0xc2,0xf1, \
-0x05,0xce,0xc6,0xd1,0x05,0x58,0x89,0x1a,0x77,0x5e,0x7b,0xe3,0x6e,0x69,0xa4,0x70, \
-0x27,0x92,0x53,0x15,0x78,0x0c,0xe7,0xdf,0xc2,0x81,0x7c,0x13,0x67,0xe0,0x69,0xf6, \
-0x7e,0xab,0x68,0x06,0x50,0x25,0xbc,0x89,0x18,0xd7,0x88,0xef,0xad,0x11,0xd5,0x0c, \
-0x85,0x48,0x30,0xeb,0x43,0x3e,0xd5,0xae,0xfa,0xdb,0x18,0x10,0xa1,0xb9,0xcf,0xb5, \
-0xc2,0xa4,0x31,0xce,0x74,0xf6,0xfe,0xe5,0x92,0xba,0x02,0xed,0xd6,0x8a,0xfa,0x7e, \
-0x24,0xc9,0x74,0x49,0xcb,0xf4,0x67,0x7a,0x56,0x9c,0x8a,0xad,0x81,0x20,0xaa,0x11, \
-0x65,0xf4,0x45,0xc9,0x61,0x9c,0x91,0x67,0x02,0x2a,0x27,0xc2,0xd2,0xc9,0xd5,0xe6, \
-0xc2,0xa5,0xe1,0xa7,0x37,0xd3,0xe2,0x31,0xe3,0x62,0x0e,0x50,0x2f,0x85,0xc5,0x65, \
-0x51,0x5d,0xcb,0x88,0x41,0x25,0x82,0x73,0xb0,0xd6,0xf5,0xd1,0x6d,0x50,0xd6,0x8a, \
-0xb3,0x99,0x30,0xfb,0xa8,0x76,0x3a,0x07,0x96,0x0b,0x9a,0xe4,0x6f,0x43,0xa5,0xb8, \
-0x66,0x98,0x5a,0x65,0x54,0x61,0x95,0x56,0x04,0xbd,0xe7,0x9a,0x6b,0x8c,0xb1,0xe8, \
-0x96,0x23,0xca,0x85,0xee,0x3d,0x62,0xe8,0x06,0x22,0xcb,0x53,0xf0,0xee,0x4e,0x4d, \
-0x16,0xe9,0x88,0x1e,0x31,0xee,0xa3,0x42,0x3e,0x8c,0x02,0x78,0xf2,0x5e,0x47,0xe8, \
-0x34,0xb1,0x0b,0xd2,0xeb,0x3c,0x23,0x5c,0x40,0x78,0x1f,0x2c,0x3d,0x41,0xbc,0x5e, \
-0xbe,0x6f,0xdd,0xbf,0x37,0x0d,0x10,0xb0,0x69,0xc4,0xd3,0xb8,0x8b,0x52,0x83,0x03, \
-0xb6,0xe2,0x08,0x67,0xed,0x1b,0x87,0xa3,0x2e,0x50,0x3b,0xb0,0xe2,0x9e,0xb0,0x5a, \
-0x23,0x82,0xaf,0x8b,0xb9,0x51,0xfd,0x5e,0xe5,0x58,0xb7,0x3e,0x6f,0xc3,0x5e,0x55, \
-0x93,0x4d,0x55,0xc4,0x37,0x33,0x52,0x14,0xd5,0x05,0xee,0xac,0x24,0xf9,0x2c,0x18, \
-0xe0,0xf9,0x4a,0x51,0xf7,0x38,0xc9,0xbf,0x4f,0x4d,0x2d,0x55,0xf4,0x85,0xd0,0x63, \
-0x5b,0x53,0x05,0x38,0xd9,0xcb,0x0d,0xb4,0xf3,0x95,0xcc,0x87,0xbe,0x81,0x2c,0x46, \
-0xf4,0x34,0xf5,0xf5,0x5c,0xda,0x88,0x73,0x27,0x4a,0x7a,0x65,0x96,0x50,0xe0,0x6e, \
-0x8e,0x79,0x92,0xa1,0x07,0xd6,0xe7,0x9e,0x48,0x66,0x3f,0x8f,0xa9,0xb7,0xc9,0x15, \
-0x94,0xe1,0x39,0x0a,0xbc,0xd4,0xe1,0x26,0x08,0xa7,0x9d,0x60,0x44,0x97,0xbc,0xfb, \
-0x81,0x68,0x79,0x1e,0x97,0xeb,0x0f,0xea,0x2c,0xa1,0x08,0x20,0x70,0xcb,0x0b,0x71, \
-0xa2,0x67,0x33,0x28,0x23,0xd0,0x36,0xee,0xe5,0x00,0x54,0xa2,0x61,0x47,0x47,0x26, \
-0xbe,0x6d,0x2a,0xaf,0xa9,0xaf,0xdd,0x6a,0xdb,0x54,0xa3,0x7d,0x83,0x18,0x90,0xe4, \
-0x5f,0xcb,0xe0,0x3e,0xc3,0x21,0x67,0x2f,0xfe,0x3c,0x57,0xe5,0xdf,0xa2,0x8a,0x4e, \
-0xe1,0x88,0x4e,0x39,0x48,0xda,0xec,0x9b,0x4a,0xba,0x5c,0x3d,0xf5,0x80,0xa0,0x08, \
-0x4c,0x49,0x99,0x01,0x58,0x64,0x1b,0xb3,0x89,0xd1,0x4d,0x3c,0xec,0x10,0x16,0x12, \
-0x09,0xc7,0xff,0xa5,0x02,0x6c,0x9f,0x77,0x1c,0x62,0x1a,0x91,0x16,0x45,0x3a,0xd2, \
-0x54,0x90,0x29,0x10,0x20,0x6c,0x42,0x6c,0xa1,0x83,0x78,0x61,0x91,0x51,0x59,0xa4, \
-0x17,0xdf,0x87,0x3c,0x29,0x18,0xc3,0xaf,0xf3,0x93,0xc6,0x7b,0xf9,0x99,0x29,0xfa, \
-0x73,0xa6,0x39,0x99,0x4f,0x2e,0x6d,0xdf,0x0f,0x15,0xfb,0x7d,0x02,0x41,0xfb,0x44, \
-0x13,0xef,0x3c,0xdc,0xe9,0xae,0x5a,0x96,0x03,0xb4,0xc5,0x4d,0x4a,0x0f,0x0b,0x60, \
-0x5f,0x34,0x2b,0x26,0x57,0xc9,0x27,0x30,0x8b,0xeb,0x8e,0x1e,0x0c,0x8d,0x98,0x55, \
-0x04,0x99,0xeb,0xc8,0x08,0x1c,0x50,0x3d,0xe9,0x7a,0xf8,0x8e,0xb3,0xd4,0x7d,0x0f, \
-0x81,0xb1,0x4b,0xd8,0xf5,0x1f,0xd4,0x0b,0x04,0x39,0x94,0x09,0xbf,0x5f,0x49,0x88, \
-0x42,0x9b,0x1b,0xb1,0x6b,0xf5,0xeb,0x2c,0x98,0xb0,0xfd,0xad,0xb1,0xa2,0x3c,0x0b, \
-0x01,0x18,0xcd,0x24,0x8b,0x31,0x8c,0xf1,0xc2,0x59,0x2e,0x71,0x2d,0xe3,0xa7,0x4f, \
-0x03,0xd0,0x7e,0x63,0x00,0x70,0x33,0x31,0xe2,0xf8,0xa2,0xf4,0xf3,0xaf,0xce,0x10, \
-0x3b,0x40,0xdb,0xd0,0x06,0x3f,0xef,0x58,0xd0,0xcc,0x07,0xba,0xac,0xdd,0xfa,0x30, \
-0x61,0x18,0xfa,0x64,0x8e,0x7f,0x7a,0xc6,0xeb,0x4f,0xb7,0x82,0x7e,0x58,0x00,0x90, \
-0xe6,0xe2,0x34,0x5d,0xbb,0x75,0xf2,0x78,0x61,0xb8,0xd3,0x04,0x3d,0x54,0x20,0x64, \
-0x55,0x89,0x2c,0x41,0x8a,0xdd,0xec,0xf2,0x24,0xb1,0xc1,0x29,0xb1,0xc1,0xa5,0x46, \
-0xd7,0x0d,0xb1,0xc0,0x4b,0x46,0x88,0x58,0x3b,0x85,0xd2,0x0a,0x34,0x6d,0x88,0x4f, \
-0x6b,0x50,0x82,0x84,0xf8,0xb6,0xa9,0x1b,0xe4,0xd1,0x7e,0x08,0x5a,0x38,0xab,0xab, \
-0x43,0x1b,0x04,0xc2,0x70,0x88,0xdc,0xa2,0x19,0x82,0xc3,0x0a,0x4c,0xc6,0x32,0xa9, \
-0xbe,0xf2,0x5a,0xc0,0x68,0x4e,0x2f,0x1f,0x47,0x4c,0x9a,0x33,0x8c,0xd5,0x24,0x44, \
-0x88,0x97,0x0e,0x97,0xc5,0xc7,0x38,0xa2,0x0e,0xda,0x87,0xb0,0x6a,0xfe,0x71,0xdd, \
-0xc4,0x28,0x0f,0xcc,0x33,0x7d,0x60,0x78,0x87,0x28,0xad,0xbd,0xdc,0xb5,0xc6,0x2b, \
-0xb7,0xa2,0x9a,0x59,0x47,0x36,0x17,0x2c,0xa6,0xa7,0xd7,0xd4,0x08,0x6b,0x01,0xca, \
-0xbe,0xb0,0x87,0xe3,0x30,0x8b,0x0c,0xb4,0x2b,0x81,0x05,0x14,0xc3,0x18,0xd6,0x0b, \
-0x0c,0x06,0x03,0x29,0x47,0x9f,0xf1,0xb3,0x47,0xf1,0xfb,0xf7,0x32,0x1c,0x53,0x81, \
-0xd7,0x4c,0xb8,0x60,0xc7,0xae,0xe3,0x13,0xc2,0xd0,0xc2,0x41,0x56,0xec,0x5c,0x51, \
-0x94,0x82,0xa0,0xe2,0x94,0xac,0xa2,0xa1,0x10,0x63,0x69,0xf9,0x7f,0xda,0xcb,0x1f, \
-0xc1,0x34,0xc3,0xa7,0x6b,0x8e,0xb2,0xd4,0x58,0x18,0x42,0xc1,0x05,0x55,0x31,0x65, \
-0x55,0x15,0x62,0xbb,0xa0,0x58,0x43,0x2d,0x69,0xba,0x53,0x10,0x3a,0x1f,0xac,0x66, \
-0x21,0x11,0x18,0x74,0x7b,0x7e,0xcf,0x9c,0x5f,0xc3,0xf7,0xee,0x00,0x6e,0x3c,0x8a, \
-0xb4,0x58,0xc8,0x7d,0x69,0x0d,0x9e,0x51,0x32,0x12,0x31,0x74,0x58,0x3c,0xca,0x60, \
-0x33,0x7e,0xac,0x4f,0x86,0xd4,0xcc,0x0e,0xe6,0xb8,0x1b,0xae,0x9a,0x60,0x00,0xcd, \
-0xb0,0xd5,0x28,0xb1,0xc5,0xb5,0x86,0x78,0x7d,0xd8,0x38,0xaa,0x6d,0x59,0x2a,0xec, \
-0xe2,0x18,0x91,0xfe,0xca,0x13,0x2e,0x45,0x01,0x95,0x3c,0x30,0x77,0x6d,0x94,0x70, \
-0x2a,0x44,0x49,0x0d,0x20,0x88,0xcb,0x25,0xe7,0x9c,0x60,0xd9,0x02,0xa0,0xc5,0x44, \
-0x5f,0x07,0x9e,0xf9,0xf2,0x4e,0xb6,0x49,0x30,0xeb,0xf9,0x25,0x05,0x50,0x49,0xa0, \
-0xd6,0xda,0x59,0x6e,0x80,0x94,0x91,0x27,0xec,0x90,0x81,0x25,0x8f,0x84,0x1a,0x7e, \
-0xb7,0x1c,0x7a,0x2b,0x7c,0x62,0x2d,0x54,0x9c,0xd3,0x8e,0x8a,0x2c,0x62,0x98,0xe5, \
-0x89,0x89,0xa9,0xac,0x1b,0xcc,0x17,0x1e,0xcb,0xd9,0x9a,0x01,0xb6,0xad,0x0c,0x46, \
-0x81,0xc1,0x59,0x0c,0xe2,0x6f,0xdd,0xb6,0x90,0xe8,0xd6,0x0d,0xd9,0x09,0x4d,0xcb, \
-0x0a,0x08,0xc5,0xf9,0x76,0x86,0x3f,0x6d,0x32,0x60,0x91,0x51,0x54,0x5d,0x14,0xe9, \
-0xc4,0xcc,0x7a,0xfa,0x2e,0x80,0x36,0x6c,0x42,0xd0,0xd6,0x1e,0xa6,0x58,0x13,0xc5, \
-0xca,0x3a,0x64,0xc8,0xe2,0x01,0xe4,0xc2,0xcc,0xb3,0x9e,0x08,0x7a,0xe7,0x33,0x2e, \
-0x18,0x31,0xfd,0x95,0xfa,0x78,0xfa,0x6e,0xfa,0x61,0xe1,0x56,0xfd,0x54,0xe5,0x37, \
-0xbe,0x63,0xdc,0x33,0xeb,0x62,0x40,0x5b,0x83,0xbb,0x1f,0x5f,0x44,0x64,0x7f,0xc4, \
-0xc8,0xb6,0x01,0x55,0xf5,0x8b,0x51,0xaa,0x88,0x46,0x3a,0x45,0xb4,0xa5,0xbe,0xdf, \
-0x67,0x1d,0x6e,0x33,0x23,0x80,0x23,0xbd,0x74,0x0b,0x94,0x09,0x07,0xf8,0x49,0xf1, \
-0x12,0x1f,0xde,0xc0,0xa8,0xa4,0x83,0x6f,0xed,0xc5,0x9f,0xa6,0xb4,0xfc,0x92,0x61, \
-0x33,0x1d,0x66,0x43,0x8a,0xf6,0xbb,0xc2,0x3c,0xa0,0xca,0x92,0x31,0x9e,0x6e,0xd3, \
-0x51,0xc7,0xd9,0x93,0x4e,0x3e,0xb1,0x69,0x6a,0x03,0xf6,0x88,0x01,0xb4,0x72,0x00, \
-0x9d,0x18,0x26,0xd5,0xe7,0xac,0xba,0x3c,0xdd,0xff,0x1b,0xcb,0xb2,0x2f,0x4e,0x3a, \
-0x86,0x9f,0x37,0x96,0x7c,0x9c,0xd8,0x09,0xf8,0x49,0x0b,0x19,0x8e,0x60,0x9c,0x33, \
-0x42,0x05,0xbf,0x6b,0xbb,0xcd,0xee,0x01,0x20,0x1a,0xe1,0x77,0x94,0x3d,0x07,0x4c, \
-0x70,0x07,0x79,0xa1,0x9e,0x01,0x40,0x93,0x92,0x7c,0xc6,0x24,0xd2,0x21,0x1a,0x3a, \
-0x82,0x77,0x03,0x10,0x04,0x34,0xf7,0x63,0xf6,0x5a,0x25,0x25,0x2c,0x18,0x10,0x3e, \
-0x6b,0x80,0xb7,0xba,0x3e,0x48,0xbd,0xe4,0x31,0x0f,0x4e,0xcb,0x66,0x78,0xf6,0x1a, \
-0xa0,0xf6,0x31,0x49,0x0e,0x0f,0x6e,0x9f,0x15,0x5f,0xc6,0xab,0x4b,0xe9,0x79,0x4e, \
-0x07,0xfb,0xb2,0xb3,0x3d,0x50,0x7f,0x46,0x51,0xb1,0xb5,0x8b,0x08,0xd4,0x5d,0x2e, \
-0x92,0x7f,0x38,0x5b,0x19,0xff,0xf7,0xd6,0xd1,0x83,0xf9,0x5d,0xec,0xd0,0xa4,0x1b, \
-0x16,0xe3,0x8c,0x5a,0x75,0x72,0x23,0x9c,0x85,0x82,0x38,0x17,0x7e,0xe7,0x71,0x75, \
-0xb2,0x38,0x5c,0xbf,0xa5,0x1f,0xdf,0x6a,0x3a,0x1c,0x7b,0x0a,0x1d,0x3a,0xe5,0x85, \
-0x53,0x30,0x9e,0xcb,0x1b,0xcb,0x2d,0x62,0x63,0xc6,0x80,0xe9,0x9e,0x2b,0x07,0x65, \
-0x55,0xd1,0xed,0x61,0x28,0xcc,0x66,0x0d,0xce,0x42,0x47,0x08,0x42,0xe9,0x81,0xca, \
-0x4f,0x4a,0x89,0x4b,0x73,0x52,0x28,0x5f,0xa3,0x02,0x92,0xe8,0xb2,0xa2,0x9e,0x9a, \
-0xdf,0x0c,0x00,0xa3,0x86,0x38,0xdf,0x48,0x38,0x28,0xa4,0x62,0x5a,0x1a,0x1f,0xbc, \
-0x92,0x42,0x30,0x26,0x30,0x1c,0x79,0x68,0x41,0xf9,0x7a,0xf9,0xae,0x9e,0x28,0x4e, \
-0x98,0x4a,0x33,0xac,0x2a,0xa8,0x51,0x1a,0x35,0xb5,0x51,0xb0,0x30,0x74,0x18,0xab, \
-0x20,0x15,0xfd,0x29,0xea,0x0a,0x97,0xf0,0x4b,0xcf,0x71,0x80,0xd3,0xc7,0xb0,0xd2, \
-0x90,0x68,0x5c,0x4d,0x1b,0xa4,0xec,0xe7,0x93,0x2c,0xb2,0x7d,0x05,0xe4,0xc5,0xfa, \
-0x41,0x27,0x59,0xcf,0xd8,0x75,0x0e,0x9e,0xee,0x1d,0xad,0xfb,0x3c,0x09,0x84,0xf9, \
-0xf0,0xa0,0x53,0x2e,0x53,0xf3,0xfc,0x7e,0x7a,0xd8,0x39,0xc6,0x6f,0x1f,0xa6,0xf0, \
-0x28,0x94,0x78,0xe9,0x42,0x43,0x43,0x0b,0x9f,0xeb,0xeb,0x61,0x91,0xe2,0xf0,0x16, \
-0x31,0xe8,0xcb,0x36,0x54,0x2a,0xcc,0x75,0xfa,0x7e,0x1d,0x8e,0x18,0xcc,0x04,0xd4, \
-0x68,0x38,0x8a,0xa2,0x27,0x97,0xea,0x00,0x88,0x40,0x0c,0x8a,0x56,0x1e,0x3f,0xd4, \
-0xa7,0xf2,0xa2,0x2a,0x34,0xb7,0x0c,0xb5,0xbe,0x27,0xf1,0xf9,0x59,0xe3,0xec,0xb8, \
-0x78,0x33,0x3a,0x85,0xae,0xb8,0x80,0x5d,0xce,0x38,0x27,0x64,0xe3,0xb7,0x47,0xd8, \
-0x62,0x74,0x1d,0x61,0x2a,0x2a,0x01,0x88,0x90,0xc0,0x22,0xa2,0x6a,0x25,0x8f,0xc7, \
-0x6c,0x7a,0x71,0x11,0xc0,0x6b,0x69,0x9c,0x87,0xce,0xe0,0xd8,0x26,0x20,0xa8,0xf3, \
-0x83,0xf8,0x9c,0x2c,0xb9,0xfc,0xdd,0x9c,0x0f,0xde,0x21,0x23,0x68,0xa1,0x49,0x44, \
-0xf2,0xfb,0x57,0xea,0x71,0x4a,0x3c,0x05,0xe9,0xae,0xba,0x80,0x67,0x38,0x47,0xdc, \
-0x95,0xc8,0xcc,0x7e,0xcf,0x8c,0xc8,0x1b,0x0b,0xd3,0x88,0x08,0x61,0xdb,0x08,0xdb, \
-0xdd,0x19,0x57,0xa5,0x1f,0xed,0x3e,0x9e,0x07,0x03,0xc8,0x0e,0xc1,0x84,0x28,0x43, \
-0x88,0x09,0x99,0x09,0x8f,0xd7,0xde,0x64,0x2d,0x98,0x18,0x5f,0x82,0x43,0xa9,0xfe, \
-0xd6,0xa0,0x68,0xf5,0xf2,0xfd,0x8b,0xc2,0x98,0x0e,0xef,0xbd,0xd8,0xa6,0x35,0x43, \
-0xed,0x37,0xc1,0x7a,0xda,0xc6,0x83,0x46,0x40,0x95,0x87,0xc1,0xa2,0xda,0xf2,0x47, \
-0xe3,0xe6,0x15,0x11,0x06,0x0e,0xf6,0xa3,0x14,0x11,0x14,0x10,0x63,0x04,0x88,0xb4, \
-0xda,0x4c,0x18,0xc6,0x7e,0x97,0xf6,0x5f,0xc5,0x13,0xdc,0xe0,0x2c,0xce,0xb6,0x8f, \
-0x8d,0x7d,0x6e,0xd7,0x47,0x04,0x3f,0x55,0xdc,0x1d,0x49,0x58,0x14,0xcc,0xc3,0xe7, \
-0xe7,0x04,0xfa,0x78,0x0f,0x2b,0xdd,0x44,0x4e,0xc0,0xf2,0x11,0x68,0xd8,0xeb,0x94, \
-0x21,0x0f,0x03,0x30,0x13,0x5a,0x05,0x10,0xf0,0x44,0xc6,0x2d,0x22,0x5d,0x07,0x4b, \
-0x1c,0x21,0xf0,0xbb,0x41,0x35,0x5d,0x08,0xf1,0x87,0x20,0xb7,0x3f,0x27,0x7c,0x19, \
-0xdf,0xe6,0x7a,0x9e,0xd9,0x49,0xeb,0x08,0x84,0xb1,0x25,0x15,0x14,0x11,0xa6,0x31, \
-0xa6,0x36,0xd3,0x42,0x45,0xe1,0xcd,0xaf,0xca,0x94,0x94,0x76,0xe6,0x75,0xf9,0xaf, \
-0xeb,0xdc,0x41,0x12,0x10,0x7c,0xd2,0xa3,0x5e,0x34,0x9a,0xbd,0x1f,0x58,0xd5,0x8a, \
-0xd0,0x90,0x9a,0xc2,0x5c,0x1c,0x60,0x11,0x61,0x8e,0x61,0x10,0x56,0x13,0x65,0x56, \
-0xbd,0x75,0x08,0xaa,0xf5,0x65,0x8c,0x04,0x0f,0x17,0x04,0x15,0x1a,0x21,0x90,0x92, \
-0xa2,0xd6,0xc8,0x5c,0x9c,0xe2,0x1c,0xb5,0x4c,0x44,0x89,0x69,0x96,0x74,0x24,0xae, \
-0x68,0xd0,0x9c,0x2f,0xda,0x7f,0xb7,0x87,0x48,0x4d,0x7b,0x0b,0x1f,0xfc,0x40,0xf1, \
-0x09,0x6a,0x0d,0x3d,0x45,0x5a,0x2d,0x3e,0x9c,0x18,0x34,0xae,0xb8,0x66,0xbd,0xb9, \
-0x92,0x2e,0x66,0xc8,0x6e,0xa1,0x56,0xed,0x41,0x83,0x97,0x55,0x69,0x29,0x6e,0x15, \
-0x73,0x0a,0xaa,0x67,0x7c,0xa1,0x64,0xba,0x36,0x8d,0xf6,0x6d,0x82,0xa6,0x57,0x2e, \
-0x4c,0xc4,0xdb,0x70,0xae,0x9c,0x03,0x45,0xa4,0x17,0x21,0x50,0x68,0x0b,0x58,0xff, \
-0x3b,0x83,0x78,0x7a,0x83,0xb6,0x3d,0x18,0xf9,0xb1,0xc7,0x94,0xeb,0x43,0xa3,0x9d, \
-0xc4,0x4a,0x99,0x19,0xec,0x43,0xc0,0x29,0x7d,0x69,0x7f,0x1b,0x77,0xda,0xc2,0x77, \
-0xb0,0x0e,0xbe,0x34,0xc3,0x00,0xd6,0xad,0xc1,0xc9,0x7b,0xb4,0x1d,0x87,0xbc,0x59, \
-0xd4,0xf0,0x27,0x14,0x26,0x70,0x02,0xb7,0x1d,0x67,0x7e,0xd8,0x17,0xa5,0xc3,0x01, \
-0xb0,0x94,0xba,0x60,0x98,0xcf,0xde,0x7d,0x4f,0xaf,0x71,0x28,0xaa,0xf8,0xb6,0xcf, \
-0x37,0x27,0x36,0x4a,0xcf,0x60,0x2d,0x39,0x62,0x49,0xe2,0xfd,0xa8,0x5d,0x14,0x34, \
-0x90,0x2a,0x13,0xda,0xdc,0x63,0x1c,0x5a,0x84,0x66,0xe9,0x2e,0x6f,0x94,0x6e,0xe7, \
-0x99,0x72,0x42,0xb9,0xa0,0x3d,0x56,0x14,0xb4,0x89,0x7c,0xae,0xf0,0x1b,0xe3,0x43, \
-0xeb,0x36,0x40,0xb7,0x9b,0x2e,0x09,0x96,0xb8,0xa2,0x7b,0x17,0x1a,0x77,0x42,0x50, \
-0xf3,0x6c,0x79,0x0d,0x09,0x41,0xbd,0xc1,0x8e,0x33,0xc8,0x71,0x51,0x36,0xff,0x4e, \
-0x0d,0x66,0x42,0xc6,0x56,0x79,0xbd,0x39,0xa6,0x8b,0x57,0x45,0x10,0x8b,0x20,0x28, \
-0xe7,0x63,0xc6,0x01,0xec,0xd4,0xed,0x0b,0xbe,0xdb,0x52,0xcb,0x59,0xdc,0x9b,0x49, \
-0x38,0x44,0x72,0xe8,0x2e,0x0c,0x3d,0x3c,0xd0,0x29,0xf7,0xf5,0x07,0x9b,0x16,0x46, \
-0x0c,0xcf,0xba,0x77,0x13,0xa0,0x7f,0x53,0x43,0xc5,0x16,0x4d,0x84,0xfa,0x14,0x81, \
-0x80,0x66,0xb0,0xfc,0xf2,0x81,0x9f,0x53,0x03,0x5b,0xbf,0xae,0xe5,0xed,0x40,0x62, \
-0x50,0xf5,0xb6,0xc7,0xf6,0x0e,0x06,0x31,0x05,0xd4,0x03,0xf2,0x85,0x98,0x7d,0x7e, \
-0x6b,0xe2,0x33,0x20,0x7a,0x8c,0x30,0x6e,0xc9,0xdf,0xef,0x80,0x02,0xf9,0x33,0x48, \
-0xc0,0xb9,0x73,0xe6,0x0c,0xc1,0x01,0x56,0xff,0xf5,0x42,0xa1,0xed,0x2c,0x3b,0xa1, \
-0x5d,0x70,0xd9,0x92,0x1b,0x49,0xa4,0x03,0x88,0x37,0x5c,0x73,0xf7,0x41,0xf4,0xd8, \
-0xf3,0x92,0xda,0xa0,0x5b,0x93,0x41,0x2b,0x60,0xbc,0x2e,0xf2,0xb6,0x8c,0x20,0x3d, \
-0x3a,0xce,0xbc,0xa9,0x46,0x0b,0xf9,0x2f,0xa2,0x05,0x7d,0x06,0x26,0xa6,0xd8,0xe5, \
-0xc6,0x1e,0xb6,0x13,0x5d,0x1d,0xe9,0x65,0x1e,0xb3,0x64,0x50,0x3b,0xb5,0x0c,0x76, \
-0x33,0x09,0xe7,0xb4,0xd0,0x1b,0x3c,0xf7,0x43,0x6a,0x4a,0x55,0x8e,0x50,0x50,0xf4, \
-0x59,0xdd,0x75,0x37,0xec,0xd8,0x87,0x5a,0x60,0xd0,0x7c,0x22,0x37,0xc4,0x19,0x14, \
-0x90,0x0d,0x30,0x74,0x45,0x4b,0x2c,0x43,0xdc,0x59,0x44,0x90,0x99,0x64,0x34,0x92, \
-0x15,0xf3,0x3e,0xff,0x89,0xb0,0x1b,0xf9,0x6e,0x1c,0x67,0x04,0x35,0x9c,0xc8,0x58, \
-0x63,0x48,0x72,0x86,0x5b,0xd6,0x5f,0xd5,0xd9,0x99,0x9e,0xf3,0xed,0x61,0xc5,0x3c, \
-0x58,0x0a,0x2c,0x13,0x21,0xf8,0x9a,0x18,0x30,0x60,0x0f,0x3d,0x50,0x95,0xaf,0xf0, \
-0x2b,0x89,0x75,0x66,0x68,0x62,0xe8,0x45,0xea,0x46,0x10,0xb1,0x80,0x3f,0xa1,0x14, \
-0xc3,0x52,0x1c,0xbc,0x3b,0x62,0x57,0x7f,0x42,0xc0,0x23,0x1d,0xa7,0x1a,0x56,0x36, \
-0x74,0xf7,0xfb,0xc9,0x2f,0xb0,0x9f,0xbf,0x5d,0x18,0x54,0x8f,0x3f,0x56,0x67,0x6d, \
-0x51,0x4f,0x35,0x64,0xbe,0x71,0xc6,0x95,0xe3,0xaa,0xed,0x13,0x18,0x05,0xbf,0xc2, \
-0x14,0x8c,0xe0,0x5b,0x55,0xf6,0x42,0x1b,0xc5,0xbe,0x45,0x0f,0x17,0x0e,0x22,0x0f, \
-0x8d,0x8b,0x34,0x5b,0x81,0x19,0xb7,0x53,0x80,0x41,0xd9,0x27,0xe9,0xb6,0x4d,0x23, \
-0x12,0x1d,0x06,0xa9,0xc5,0x95,0x78,0x4f,0x49,0x6b,0xb1,0xd3,0x8f,0xb0,0xe3,0xba, \
-0x77,0xca,0xf7,0xc1,0x1c,0xe3,0x20,0xe0,0x33,0x20,0x85,0xee,0x24,0xa6,0xea,0xc9, \
-0x2d,0x01,0x82,0x62,0x80,0x62,0x76,0x85,0x43,0xde,0x51,0xc2,0x40,0x3e,0xab,0x0c, \
-0x75,0x86,0xa9,0xaf,0x1a,0xa6,0x36,0x0f,0x65,0xe2,0x3d,0xfc,0xb8,0x12,0x79,0xfa, \
-0xf1,0x92,0xf7,0x75,0xc9,0xb3,0x5a,0x1c,0x84,0x75,0xb5,0x7d,0xd0,0x69,0xff,0x7d, \
-0xb2,0xd1,0xcb,0xa8,0xbf,0xd9,0xe9,0xef,0xdf,0x91,0xe6,0x43,0x48,0x8b,0x06,0xac, \
-0x60,0x44,0xa2,0x16,0x51,0xb3,0x1c,0x8f,0x2f,0x14,0xd4,0x0e,0xe9,0x44,0x84,0x22, \
-0x01,0x8c,0xc0,0xc0,0xde,0x64,0xf4,0xf3,0x6f,0x57,0xac,0x8a,0xd9,0xcf,0xd6,0x4d, \
-0x96,0xd3,0x5e,0xc4,0xb0,0x78,0x55,0x82,0x43,0xaf,0x89,0x25,0x35,0xe6,0x80,0xae, \
-0xd3,0x79,0xad,0x51,0x04,0x07,0x20,0x36,0xec,0x66,0xc3,0xf0,0xa6,0x39,0x88,0xf7, \
-0xf0,0x81,0xdc,0xe1,0x0b,0xaf,0xe4,0xe9,0x02,0x8c,0xe7,0x2d,0x29,0xe2,0x6a,0xae, \
-0x54,0x26,0x0a,0x85,0xae,0xb7,0x08,0xbe,0xc5,0x0b,0x57,0x57,0x43,0xb6,0x87,0x3e, \
-0x06,0xd6,0xd2,0x36,0x0d,0x7c,0xc3,0xe4,0x6e,0xf7,0x07,0x22,0x88,0xf3,0x24,0x21, \
-0x2e,0x98,0x47,0x73,0x14,0x93,0x72,0x38,0x51,0x1f,0xa3,0x74,0x28,0xba,0xbe,0xca, \
-0x1b,0x4b,0x70,0x06,0xa2,0x68,0x23,0x50,0x88,0xea,0x85,0xd9,0x9b,0x88,0xa0,0x56, \
-0x3b,0xc7,0x98,0xf1,0xb3,0xab,0x6f,0x2f,0x69,0xe9,0xd9,0x3d,0x8c,0x3a,0x1b,0x19, \
-0xe8,0xc9,0x58,0x28,0x08,0x88,0x82,0x32,0x28,0xc1,0x55,0x40,0x60,0x2e,0xf3,0x7c, \
-0xe2,0x99,0xb2,0x19,0xc6,0x69,0xf4,0xfb,0x73,0x99,0x33,0x70,0x67,0x1d,0x39,0xfe, \
-0xcd,0x67,0x09,0xd6,0xdb,0x8a,0x96,0xb8,0x35,0xb6,0x65,0xc6,0xe8,0x83,0x9e,0x09, \
-0xf5,0x74,0x07,0x71,0xce,0x4e,0x20,0xf6,0xde,0x23,0x2e,0xc5,0x70,0x6f,0x7c,0xbc, \
-0x31,0x72,0x6e,0x2c,0x09,0xa5,0x94,0x9a,0x1c,0x18,0x80,0x3d,0x48,0x0c,0xb7,0x88, \
-0x2f,0x59,0x93,0xb7,0x00,0xc2,0x45,0x08,0xb3,0x42,0xb0,0x01,0xee,0x1e,0xa8,0xc4, \
-0xba,0x2e,0x9b,0x41,0x14,0x9d,0xc9,0xe6,0x4c,0xb0,0x38,0x62,0x4a,0x43,0x9d,0xc6, \
-0xb5,0x8a,0xcc,0xde,0xfa,0xb8,0x30,0xa7,0xf7,0xea,0xe3,0x63,0x6f,0x00,0xf2,0x41, \
-0x62,0x09,0x05,0x51,0x12,0x22,0xa0,0xa2,0x1c,0x81,0x0b,0x30,0x21,0x64,0x20,0xf5, \
-0x5e,0x89,0x50,0xa5,0x13,0x91,0xca,0xbe,0x7d,0x96,0x36,0xa0,0x45,0xfe,0x13,0x5d, \
-0xc8,0x18,0x7b,0xb0,0x91,0x84,0x1c,0xe4,0x3c,0xb0,0xfd,0xe9,0x5d,0x2f,0xef,0xe1, \
-0xe9,0x3f,0x73,0xb2,0xff,0x77,0x24,0x97,0xd6,0xd2,0xf3,0x7e,0x03,0x17,0x7a,0x38, \
-0x12,0x78,0xc8,0xb8,0x84,0x11,0x54,0xbe,0x9f,0x10,0xaf,0x98,0x4e,0xef,0x2c,0x9c, \
-0x46,0x20,0xf7,0x1e,0xe4,0x14,0x2d,0x64,0xe4,0xf8,0xdb,0xcc,0x93,0x25,0xa0,0x6b, \
-0xa6,0x0f,0x5f,0xf0,0xb8,0x28,0x58,0xc6,0x08,0x66,0x6d,0x11,0x04,0xc1,0xdc,0x51, \
-0x18,0xe6,0xc6,0xf4,0x64,0x34,0x8d,0x16,0xb8,0xec,0x7b,0x2f,0xfa,0xf6,0x6e,0x3f, \
-0x6c,0x31,0x3f,0x9c,0x6d,0x2a,0x9b,0xca,0x0f,0x08,0x85,0x0a,0x1c,0x79,0x48,0x43, \
-0x46,0xc6,0x2d,0x78,0x7c,0xab,0x8f,0x7f,0x65,0x84,0xe4,0x3c,0x2f,0x20,0x4c,0x77, \
-0xc0,0xfd,0x03,0x3a,0xda,0x8a,0x83,0x2b,0x24,0xa8,0x11,0x48,0xa4,0x94,0x60,0x54, \
-0x8a,0x4f,0xed,0x61,0x58,0xaa,0x23,0x86,0xb0,0x2e,0xdc,0x2b,0x26,0xdf,0x36,0x58, \
-0x6f,0x12,0x2e,0x58,0x78,0x20,0x71,0x28,0x18,0x80,0x2b,0x2b,0x0c,0x5c,0xf7,0xad, \
-0x3b,0x88,0x38,0x4e,0xc6,0x1f,0x29,0xc3,0x92,0xeb,0x7c,0x02,0xaf,0x48,0xad,0x40, \
-0xc3,0xcd,0x40,0x0e,0x27,0xdf,0xa8,0x24,0x66,0xc8,0x34,0xc0,0xa0,0x50,0x14,0x6c, \
-0xf9,0xe8,0x63,0x9e,0xca,0x87,0x31,0x04,0x1c,0x90,0x60,0x6f,0x34,0xe1,0xc9,0xb6, \
-0xe9,0x68,0x22,0xf0,0x59,0xe0,0x48,0x6b,0x9b,0x64,0x15,0xa1,0x50,0x3e,0x8c,0xd3, \
-0x56,0x25,0x30,0x16,0x9c,0x5d,0x36,0xc3,0x5d,0x11,0x34,0x5f,0x4f,0x80,0xae,0x91, \
-0x0d,0xa5,0x4e,0x0c,0xf4,0x5a,0x3d,0xd7,0xfb,0xa7,0x94,0x07,0x67,0x5a,0xda,0x16, \
-0x70,0x9b,0x80,0xe9,0x3b,0x0d,0xb0,0x1b,0x6e,0x76,0xd8,0x96,0x23,0x4e,0x18,0x40, \
-0x18,0x77,0x7f,0x74,0x85,0xfd,0xd9,0x31,0x90,0xd4,0xdd,0xb0,0x8f,0x2c,0x3f,0xc6, \
-0x16,0x41,0xe7,0x6c,0x17,0x70,0x3f,0x41,0x53,0xd6,0x40,0xd1,0x3e,0xaf,0x79,0x67, \
-0x77,0xc6,0x76,0x18,0xd8,0xa6,0xb1,0xd8,0x76,0x5b,0x55,0x18,0x42,0xa2,0x94,0xed, \
-0xd1,0xda,0x91,0x56,0x7f,0x7f,0xdd,0xc4,0xbf,0x09,0x76,0x1b,0xa1,0x61,0x90,0xe1, \
-0x01,0xfe,0x56,0x48,0x31,0x18,0x62,0x77,0x17,0x5b,0x3c,0x31,0x3a,0xb9,0x9a,0x36, \
-0x86,0xd2,0x70,0x12,0x20,0x9f,0xc6,0xd5,0x8b,0x08,0xbe,0xf9,0xc2,0xf2,0xaf,0xa9, \
-0xc1,0x24,0x80,0x06,0xcc,0x6c,0x29,0xf6,0xff,0x3b,0x15,0xe5,0xf7,0x7b,0x4c,0x77, \
-0x88,0xc3,0xd8,0x5b,0xcc,0x0b,0xe0,0x7e,0x84,0x17,0x86,0xde,0x3f,0xc3,0xff,0xb6, \
-0x0a,0x99,0xe1,0xbb,0x68,0x2d,0x33,0xc8,0xca,0x77,0xe7,0x14,0x3e,0xd2,0x06,0x36, \
-0xd0,0xda,0x69,0xc0,0x38,0x69,0x2c,0x48,0xc2,0x6a,0x46,0x8a,0x41,0x8a,0x8c,0x64, \
-0x50,0x11,0x90,0x45,0x4f,0xee,0x65,0x55,0x86,0x90,0xa2,0xaa,0x2c,0x14,0x18,0x22, \
-0x22,0x2a,0x8c,0x11,0x05,0x06,0x22,0xa8,0x8c,0x99,0xb2,0xaa,0x23,0x19,0x34,0x35, \
-0x32,0xd4,0x16,0x46,0x2f,0x88,0x31,0xa1,0x45,0xcd,0xfa,0x3e,0x3f,0x77,0x2e,0x83, \
-0x46,0xbc,0x75,0x1f,0xab,0x20,0x1c,0x58,0x1f,0x32,0x49,0x46,0x04,0x50,0x59,0xfd, \
-0xcd,0x64,0x0e,0xa6,0x84,0x50,0x58,0x44,0x16,0x43,0xa5,0x3b,0x1c,0x7b,0x6c,0x2f, \
-0x5d,0x2b,0xad,0xa9,0x58,0xa5,0xa5,0x5f,0xf5,0x7d,0x36,0x79,0x66,0x8b,0xb6,0x61, \
-0x7e,0x2e,0x5f,0xe5,0x68,0xc4,0xce,0x43,0x80,0x61,0xc7,0x39,0x9f,0xe8,0x0c,0x20, \
-0xc1,0x46,0x8d,0x61,0xe1,0xd9,0xfe,0x5f,0xf2,0xf2,0xe8,0x1b,0xfa,0x7c,0x26,0xff, \
-0x5b,0x31,0xa5,0xd9,0x51,0x6b,0xb1,0x11,0x9f,0x52,0x33,0x03,0x09,0x5c,0xe0,0x89, \
-0xa1,0x95,0x17,0xbd,0xd5,0xca,0xf1,0x09,0xc3,0x27,0xa0,0xe4,0x66,0x05,0xa8,0x4a, \
-0x4f,0xa8,0xd1,0xde,0xc7,0x60,0xad,0xab,0x80,0xfe,0xe8,0x22,0x86,0x25,0x79,0x48, \
-0x6f,0x68,0xdc,0xb4,0xb2,0xb7,0x87,0x15,0x1e,0x98,0xfc,0x84,0x30,0x38,0x7d,0x9e, \
-0xfe,0xe0,0x52,0xf8,0x3a,0xa5,0x1e,0x0b,0x66,0x26,0x44,0x72,0x6f,0xf0,0x5c,0xa6, \
-0xd3,0xc6,0x65,0xf2,0x5c,0x0b,0x6c,0x11,0xb1,0x4c,0x33,0x15,0x78,0xc7,0x07,0xa4, \
-0xef,0xe1,0x05,0x21,0x67,0x58,0x27,0xeb,0x59,0x4c,0x4b,0xc7,0xed,0x85,0x87,0xe1, \
-0x5f,0x91,0x8c,0xef,0x1d,0xbc,0x45,0xe1,0x3e,0x38,0x73,0xb2,0x19,0x30,0x9c,0x70, \
-0x9f,0x34,0x9f,0xfa,0x27,0x5a,0x21,0xe8,0xba,0x21,0x88,0xfd,0xb9,0x70,0xae,0xa9, \
-0xe2,0x2a,0xb2,0x39,0xc3,0xc6,0xe2,0x2f,0xa2,0xec,0xae,0x83,0xce,0xe2,0xa6,0x51, \
-0x4d,0x1b,0x64,0x28,0xf0,0xbf,0x4e,0xe8,0x1a,0xb6,0xd5,0x37,0xd3,0x5b,0x38,0xd9, \
-0x0c,0xb9,0xb0,0x89,0x5c,0xfc,0xda,0xf8,0xe3,0xb6,0xd9,0xf5,0xdb,0x0d,0x58,0x64, \
-0xf5,0x5f,0x39,0xdf,0x96,0x6c,0x2d,0xe6,0x9d,0x21,0xf1,0x08,0xc3,0x27,0x2b,0x34, \
-0x97,0xd5,0x24,0xad,0x89,0x45,0x99,0x22,0xd6,0x0a,0x74,0xd2,0xe7,0xee,0x54,0x18, \
-0xc0,0x36,0xf6,0x7f,0xae,0xcb,0x55,0x91,0x41,0x2f,0x6e,0x9d,0x07,0xc9,0x85,0xc3, \
-0x9d,0x99,0x14,0xe3,0x14,0x22,0x86,0x5d,0x25,0x58,0x3f,0xbe,0x55,0xb4,0xc6,0x27, \
-0xf1,0x72,0xfd,0x3f,0x1d,0xbb,0x4c,0x11,0x7f,0x9d,0xe9,0xb4,0x85,0xb6,0x60,0x3f, \
-0xb7,0x5c,0xa7,0xbd,0xa5,0xeb,0xd6,0x0b,0x30,0x94,0xcb,0x08,0x84,0x62,0x8e,0x0b, \
-0xb7,0x8b,0x75,0x55,0x70,0x9c,0x53,0xdb,0x34,0xa6,0x66,0x6a,0x04,0xd0,0xed,0x3c, \
-0x40,0x32,0x9c,0x98,0xc6,0xfe,0x45,0x55,0x06,0x76,0xaf,0x77,0xb1,0xae,0x37,0x20, \
-0x3a,0x82,0xaf,0x90,0x7c,0x87,0xe0,0x83,0xd0,0x0c,0x80,0xf8,0xc9,0x58,0xee,0x42, \
-0x1b,0x2d,0x61,0xa1,0xa9,0xa6,0x91,0x6f,0x4a,0x72,0xb1,0xea,0x93,0x0c,0x30,0xb5, \
-0xac,0x16,0x2a,0x7c,0xc7,0x93,0xe3,0xd7,0xed,0xeb,0xaf,0x7d,0xa8,0xfd,0xc4,0xcc, \
-0xfe,0x0e,0x4e,0xb0,0xe6,0xdb,0x40,0x53,0x6f,0x2f,0xbd,0x99,0x19,0xf7,0x4a,0x6b, \
-0x00,0xa4,0x95,0x08,0xda,0x10,0xc3,0x02,0x8d,0x49,0xbd,0xe8,0xc9,0x1f,0xf6,0x30, \
-0xf8,0xb7,0xfa,0x17,0xa0,0x9b,0xb0,0xe6,0xd7,0x95,0x4d,0x99,0xc0,0x44,0xea,0x4b, \
-0xf5,0x5a,0x55,0x42,0xd3,0x34,0xf8,0x5a,0x94,0xa2,0x66,0xc4,0x98,0x0c,0xe4,0x65, \
-0xb6,0x51,0xc0,0xdc,0xc7,0x7b,0x6a,0x23,0xca,0x25,0x87,0x24,0x1d,0x4c,0x39,0x24, \
-0xfd,0x4f,0x91,0xf8,0xe7,0x83,0xbc,0x3f,0x85,0xcc,0x32,0x1d,0x08,0xa0,0x0c,0x3d, \
-0x96,0x9f,0x8c,0x1f,0x68,0x72,0x45,0xbd,0xf0,0xa5,0x80,0x98,0xc8,0x18,0x8b,0xe6, \
-0xbd,0xad,0x60,0x53,0xba,0x50,0x7f,0xd4,0xac,0x46,0x37,0x5e,0x20,0xca,0xa3,0x36, \
-0xa4,0x0c,0x21,0x94,0x68,0x50,0xd3,0xf7,0x83,0x22,0xfd,0xee,0x40,0x58,0x0c,0xf2, \
-0xca,0x79,0x94,0x25,0x57,0x4e,0xa1,0x5f,0x1b,0x9a,0xc8,0x4b,0xff,0xb4,0xdb,0xf0, \
-0xaf,0xa3,0xf0,0x4e,0x2f,0x4e,0x93,0x0d,0xdf,0xf6,0x46,0x8f,0xc8,0x5d,0x9f,0xd1, \
-0x8d,0x8d,0x94,0x3a,0xb5,0xb9,0x4f,0xaa,0x14,0x32,0xf8,0xe1,0xed,0x5d,0x68,0xa2, \
-0x9a,0xfa,0xee,0x60,0x41,0x15,0x42,0x4a,0x2c,0x23,0x55,0x98,0x0a,0xab,0x40,0xfc, \
-0x31,0x53,0x50,0x0c,0xa0,0x65,0xa5,0xf7,0xda,0x57,0x1e,0x8a,0x1c,0x42,0x6f,0xa2, \
-0xad,0xd0,0x1b,0x4a,0x3e,0x4a,0x5d,0xfd,0xdd,0xb4,0xd2,0x68,0x70,0xa9,0x7b,0x56, \
-0x3d,0xe6,0x8d,0x89,0xf4,0x41,0x7b,0x73,0x4c,0x24,0x03,0x4c,0x5f,0x38,0xc6,0x90, \
-0x3e,0x58,0x81,0x22,0xa5,0x92,0x74,0x9e,0x78,0xe6,0x78,0xd9,0x47,0x2d,0xbd,0xe8, \
-0x24,0x69,0x90,0xa3,0xaa,0x45,0x2d,0x55,0x94,0x1e,0xf5,0x14,0x8e,0x9d,0x2b,0x2d, \
-0x0b,0xf9,0x10,0xe8,0x95,0x06,0x32,0x3e,0x58,0x25,0x27,0x6c,0xa6,0x8a,0x16,0xbe, \
-0x83,0x87,0x2b,0xdd,0xfa,0x85,0xd3,0xe1,0x1e,0xe7,0x1b,0xf4,0xa3,0xc3,0x71,0x37, \
-0xd6,0x1b,0x68,0xa1,0x57,0xb8,0x22,0x02,0x4d,0x7d,0x9b,0x20,0xbd,0x25,0xa8,0x7b, \
-0xda,0x24,0x2c,0x17,0x18,0x5a,0xff,0x7c,0x7a,0xc7,0xbd,0xe0,0x17,0xde,0xd4,0x34, \
-0x88,0x70,0xa2,0x54,0x0a,0x72,0x06,0x23,0xbc,0x92,0x36,0x67,0xa9,0x4f,0x58,0x60, \
-0x7a,0xb1,0x58,0xa5,0x51,0xa3,0xd2,0xe1,0x8c,0x1f,0x3e,0xfe,0x33,0x9c,0xe8,0x25, \
-0x7b,0x06,0xd0,0xb9,0x71,0xda,0xfe,0x0f,0xe1,0x0e,0x3a,0x10,0x4b,0x37,0x98,0xa3, \
-0xa2,0xdb,0xb7,0x24,0x41,0x23,0x2b,0x8b,0x31,0x64,0x4c,0x13,0xe2,0x5e,0x17,0x31, \
-0xa2,0xc4,0x1a,0x4c,0xc2,0x80,0x72,0x75,0xa5,0xf2,0x32,0x30,0x62,0xed,0x5b,0x22, \
-0x04,0x35,0x2d,0x1d,0x2b,0xae,0x2b,0x46,0x3d,0x71,0x3b,0x58,0x05,0x05,0x4a,0xaf, \
-0xc8,0xcc,0x11,0x21,0x93,0xe6,0x06,0xe6,0xb1,0xa2,0xd2,0xd0,0xb0,0x85,0xaa,0xc5, \
-0x17,0x62,0x05,0xe3,0x39,0x65,0x75,0x3a,0xb5,0x0f,0xd6,0xa5,0x1c,0x37,0x94,0xc8, \
-0x65,0x0a,0xfa,0x13,0x30,0xf4,0xd2,0x2a,0x13,0x8c,0xaa,0xb8,0x77,0x23,0x23,0x8b, \
-0x71,0x92,0x54,0xc7,0x00,0x39,0xf2,0x01,0x0e,0xe2,0xdf,0xe2,0xd1,0xf6,0xb5,0x97, \
-0x50,0xcf,0x61,0x92,0x7d,0x3e,0x3d,0x59,0xf2,0x24,0x81,0x82,0xfb,0xd1,0x4a,0x24, \
-0x05,0xf3,0x74,0x52,0xc1,0xdd,0x88,0x78,0xe0,0xf7,0x87,0x69,0xb5,0xaa,0x15,0x3c, \
-0x71,0xb7,0x36,0xbf,0x6d,0x2c,0x71,0xbb,0x03,0x14,0x39,0x7b,0xa8,0xfc,0x76,0xf8, \
-0x3c,0xfd,0x97,0x21,0x9c,0x51,0xd2,0x9c,0x11,0x64,0x89,0x44,0xf9,0x47,0xa5,0x8d, \
-0x90,0xd7,0xc1,0x85,0x51,0x2d,0x24,0xa1,0x12,0xc0,0x35,0x0f,0xe3,0x70,0x4e,0xdb, \
-0x77,0x21,0x12,0x7a,0xe4,0x56,0xec,0xec,0xa9,0xdc,0xcd,0x2c,0x2d,0x3a,0xf6,0xc8, \
-0xf5,0xa7,0x0a,0x07,0x30,0xc0,0xfb,0xe1,0x62,0x8f,0x16,0x2b,0x80,0x60,0x82,0xe3, \
-0xf9,0xb5,0x0c,0x1a,0xbf,0xc2,0x05,0x93,0x05,0xcb,0xfe,0xd0,0xac,0x70,0xe5,0x1e, \
-0x2d,0x2d,0x59,0x48,0x82,0x06,0x2d,0xcc,0x14,0x26,0x5b,0x4e,0x25,0xf4,0x14,0xb2, \
-0x1c,0x31,0x99,0x32,0xf7,0x86,0x15,0xef,0xef,0xba,0x82,0xec,0xf3,0x35,0xb8,0x30, \
-0xd9,0x01,0x8f,0xc3,0x6e,0x36,0x6d,0xb6,0xc2,0x07,0xe6,0xd4,0x06,0x3e,0x76,0x44, \
-0x86,0xb5,0xb8,0x6b,0x17,0x0e,0x0b,0x45,0xf3,0x87,0xed,0xe6,0x14,0x73,0xce,0x6b, \
-0xde,0x66,0x96,0x0d,0x2e,0xe9,0x44,0x31,0x0b,0x63,0x8b,0x57,0x08,0xc5,0x83,0x69, \
-0x89,0x8c,0x03,0x88,0x3e,0x10,0xf8,0xfd,0x77,0x9c,0xd6,0xc6,0x1e,0x7c,0x72,0x71, \
-0x38,0xd9,0x5b,0x5a,0xf2,0xe2,0x08,0x2c,0x88,0x20,0xf0,0xb0,0x2b,0x0d,0x88,0x77, \
-0x93,0x44,0x15,0x89,0xb2,0xda,0x71,0x19,0x4e,0x18,0xa4,0xca,0x8c,0xc8,0xbc,0x49, \
-0x05,0x86,0xc8,0x4b,0x83,0x90,0xec,0xe0,0x42,0xc3,0x70,0xe4,0x71,0x06,0x01,0x76, \
-0xb8,0xd9,0x14,0xa0,0xd6,0x50,0x56,0x46,0x16,0xf1,0xc7,0x7e,0x0c,0xa4,0x18,0x30, \
-0x05,0x4c,0x42,0x32,0xf1,0x87,0xd0,0x76,0x71,0xea,0x04,0x4e,0x7a,0x9c,0x0c,0xb4, \
-0xac,0x12,0xce,0x5c,0x0d,0x68,0x99,0xd5,0x84,0x96,0x0b,0x21,0xed,0x96,0xc8,0x7e, \
-0xf9,0x76,0x64,0xfc,0xd8,0x4b,0x86,0xbb,0x17,0x8b,0x84,0xb8,0x3f,0x06,0x4d,0x20, \
-0xb5,0xbe,0xb9,0x38,0x20,0x61,0xb1,0x2f,0x7e,0x8b,0x80,0xd8,0xfa,0x41,0x00,0xa9, \
-0xd4,0x14,0x96,0x49,0xb5,0xab,0xb5,0xa1,0xaa,0x59,0xbc,0x61,0x64,0x81,0xf7,0x5f, \
-0xd3,0xc3,0xb3,0x88,0x05,0xea,0xf9,0xba,0x42,0x89,0xb7,0x81,0x71,0xb6,0x85,0x8c, \
-0xa0,0x67,0x2b,0x6e,0x98,0x5a,0x5a,0x09,0xcf,0x2d,0x12,0x11,0x6e,0xee,0x03,0xd9, \
-0x0a,0x01,0x1a,0x04,0xa0,0x47,0x96,0xb9,0x81,0x8f,0x99,0xdc,0xc0,0x58,0xc3,0xbf, \
-0x4f,0x10,0xd5,0x91,0x2e,0x38,0x4b,0x6e,0x0a,0x65,0x98,0xc1,0x54,0xa0,0x57,0x03, \
-0x63,0x9b,0x7a,0x4a,0x65,0x8a,0x49,0x86,0x44,0x79,0x67,0x18,0x43,0x0d,0x32,0x5a, \
-0x2c,0x16,0xb5,0xed,0x68,0xe1,0xce,0x08,0x37,0xa3,0x0d,0xa6,0xec,0xd4,0x50,0x3a, \
-0x50,0x2a,0x64,0xa0,0xcd,0xa9,0xac,0x65,0x17,0x03,0x10,0x59,0x5b,0xee,0x48,0x6f, \
-0x4c,0x74,0x75,0x61,0x12,0x37,0xa6,0xed,0x84,0x4b,0xb6,0x4b,0xa6,0x68,0x10,0x65, \
-0x80,0xeb,0xd1,0xcf,0x2e,0xc9,0xac,0xcf,0x4e,0x0a,0xf7,0x5a,0xe5,0x49,0x0a,0x6d, \
-0x38,0xfa,0x30,0xab,0xd8,0xcd,0xc6,0xb4,0xdc,0x27,0x82,0x38,0x10,0x38,0x60,0x6c, \
-0x93,0x3f,0xc1,0xac,0x7b,0x30,0x6b,0xf9,0xbd,0x95,0x50,0x49,0x11,0x93,0x91,0xd7, \
-0xde,0x14,0x48,0xb2,0x88,0xaf,0x70,0xe3,0x10,0xb6,0xc9,0x82,0xd9,0xf1,0xd7,0x23, \
-0xc5,0xd6,0xc6,0xda,0xea,0x2e,0xdb,0x20,0x2c,0x50,0x27,0xdf,0xd7,0x3d,0x9d,0x91, \
-0x73,0xfe,0x93,0x04,0x5f,0xe5,0xe0,0xb9,0x74,0xb3,0xbf,0x43,0xa3,0x6d,0xef,0x99, \
-0x51,0x5e,0xd2,0x42,0x86,0x34,0x0f,0x40,0xf5,0x6d,0x4f,0x3e,0x8e,0xc6,0xcf,0x9a, \
-0x20,0xe2,0x79,0x35,0x25,0x7e,0xe6,0x57,0x1d,0x76,0x1a,0x8f,0x4d,0x36,0x2a,0xf4, \
-0x6e,0xdc,0x98,0xb8,0x52,0xae,0xcb,0x4d,0xb7,0x4a,0x42,0xde,0xc5,0xf4,0x34,0x07, \
-0xe6,0x0f,0xdf,0x79,0xde,0x9e,0x79,0x10,0x60,0xcc,0x17,0x3b,0xd4,0x6f,0x8e,0x6c, \
-0x69,0x8f,0xe7,0x3b,0x4d,0xe0,0x83,0xb7,0xc2,0xf6,0x63,0xcd,0x01,0x8e,0xcd,0x8c, \
-0xd0,0x63,0x88,0x02,0xae,0x5c,0x4e,0xc9,0x93,0xd5,0x7c,0x50,0x2d,0xc0,0x9e,0x29, \
-0x19,0x4c,0x9d,0x10,0x8a,0xe9,0x61,0x94,0xc1,0xf2,0x26,0xa3,0x09,0xd2,0x81,0x87, \
-0x5a,0x21,0x9b,0xbb,0x1c,0x2a,0x36,0xf9,0xd2,0xf7,0x21,0x73,0xbf,0x71,0xd7,0x88, \
-0x0d,0x91,0xa2,0xc6,0x44,0xe6,0xaf,0x90,0x8c,0xad,0x41,0xc7,0x0b,0xa7,0x78,0xcd, \
-0xb2,0xcc,0x0c,0x94,0x6b,0x67,0x42,0xc4,0x4e,0xf6,0x83,0xd4,0x0c,0x48,0x95,0xc3, \
-0x32,0x03,0xd2,0xd0,0xc8,0x6f,0x11,0x11,0x90,0x89,0x22,0x1c,0x43,0xb2,0xa4,0x9d, \
-0x4a,0x03,0xc2,0x85,0xac,0x94,0xb9,0x52,0x34,0x59,0x5b,0xfc,0x9e,0xb9,0x3c,0x8d, \
-0x58,0x23,0xb2,0x2c,0x97,0xc5,0x16,0x48,0xf5,0x87,0x7b,0x20,0x68,0x09,0x25,0x66, \
-0x88,0x0d,0xeb,0xa0,0x8a,0x65,0xa9,0x65,0x15,0xb6,0x2e,0xe1,0x64,0x28,0x1e,0xb2, \
-0x27,0x62,0x35,0x51,0xbe,0x11,0xad,0xa2,0x5f,0x41,0x60,0xa2,0x02,0x4a,0x55,0xb6, \
-0x96,0x62,0xc2,0x13,0x4c,0xea,0xd8,0x16,0xb9,0xa2,0x56,0xa8,0x6c,0xa2,0xc2,0x50, \
-0x6d,0x6c,0x2b,0xeb,0x4c,0xc4,0xac,0x29,0x55,0xa2,0xc9,0x4a,0x55,0xf7,0xdb,0x7d, \
-0xda,0x03,0xe0,0x5d,0x85,0xc3,0xd1,0x4e,0xd2,0x95,0x81,0x0e,0x9a,0x8a,0x49,0xcb, \
-0x51,0x73,0x47,0x77,0xca,0x6e,0x09,0xde,0xeb,0x51,0x44,0x9a,0x23,0xc4,0xe0,0xb7, \
-0x6b,0x7c,0x31,0x9f,0x15,0xd7,0x46,0x8b,0xb3,0x73,0x05,0x84,0x88,0xce,0xf8,0xd4, \
-0x16,0x38,0x63,0xa6,0x02,0x02,0x96,0xcb,0x52,0x21,0x72,0x94,0x6a,0xa9,0x05,0x5a, \
-0x32,0x0f,0x42,0xf9,0xc2,0xcd,0x52,0x28,0xa0,0xd2,0x03,0x07,0xcb,0x7c,0x3b,0x51, \
-0xc8,0xbd,0xdc,0xdd,0x82,0xd9,0x4d,0x02,0xa8,0x56,0xbe,0x78,0xba,0x34,0x39,0x15, \
-0x95,0x43,0x26,0xa2,0x19,0x16,0xbb,0x96,0x24,0x4d,0x0d,0x20,0xc0,0x9a,0x92,0xe0, \
-0x20,0x4d,0x6d,0x76,0x1b,0xad,0x2a,0xa6,0x27,0x2c,0xf5,0x5d,0xc4,0xc9,0x4b,0xad, \
-0x1c,0xb1,0x38,0xad,0xb4,0xb5,0x06,0x95,0x41,0x58,0xa2,0x2d,0x11,0xab,0x50,0xc1, \
-0x45,0x86,0xf2,0xe4,0x66,0xda,0x50,0x3e,0xa8,0x51,0x19,0x89,0x60,0x60,0x32,0x2c, \
-0x89,0xc5,0x89,0x71,0x64,0x9d,0xe1,0xa2,0x03,0xd2,0xf2,0xee,0x93,0x92,0xa4,0x51, \
-0xb4,0x99,0xce,0xdb,0x40,0x69,0xd1,0x97,0x16,0xb9,0x04,0x99,0xd2,0xb6,0xcc,0xc4, \
-0x24,0xd8,0x20,0xc8,0x60,0x23,0x38,0xd8,0xe0,0x0c,0x4a,0x0b,0x8d,0x29,0x5a,0x68, \
-0x90,0x06,0x4e,0x0b,0x1b,0x0a,0xf2,0x3b,0x25,0xf5,0x4d,0x0d,0xf6,0xa1,0xbd,0x8d, \
-0x88,0x50,0xe0,0x56,0xf3,0x82,0x80,0x48,0xbb,0x65,0x95,0xed,0x5b,0x61,0x0d,0xf5, \
-0x07,0x76,0xb0,0xad,0x36,0xac,0x52,0x81,0x59,0x0c,0xea,0xc0,0x26,0x8a,0xca,0xa3, \
-0x49,0x61,0x0d,0x80,0x96,0xb2,0xd8,0x40,0x66,0xa0,0x99,0xd8,0x38,0x2c,0x90,0x33, \
-0x9c,0xec,0x74,0x7a,0xc5,0x72,0xd2,0x3d,0x2c,0x6f,0xd3,0x46,0x5b,0x2d,0x42,0xdb, \
-0x52,0x6f,0xbe,0xd0,0x6b,0x13,0x60,0xd8,0xc9,0xac,0x46,0xc4,0xfc,0xc3,0xca,0x8d, \
-0x4c,0x68,0x34,0xe1,0x9a,0x8b,0x01,0x9b,0xa7,0x87,0x0d,0xbb,0xb6,0x4d,0xef,0x9c, \
-0x81,0xd6,0x7e,0x10,0x47,0x68,0x42,0xd8,0xab,0x18,0x78,0xc8,0x70,0x92,0xca,0x85, \
-0x3e,0x48,0x7a,0x9c,0xb1,0xab,0x72,0x07,0x39,0x13,0xcf,0x9e,0x8e,0xa6,0xc9,0x49, \
-0xae,0xf5,0x76,0x85,0x75,0x82,0xd0,0xe8,0xa9,0x6d,0xf2,0x01,0xa0,0xb6,0x0f,0xe8, \
-0x78,0xad,0x86,0xc3,0x09,0x22,0x54,0x6a,0xdb,0x92,0x95,0x69,0x0d,0x0c,0x11,0x38, \
-0x8a,0x04,0xa0,0xd2,0x83,0x3c,0xe2,0xc8,0xf6,0x2e,0x94,0x72,0x39,0x1d,0x93,0xc1, \
-0x47,0x9d,0x48,0x12,0x5e,0xd2,0x23,0x3b,0xaa,0xc8,0xed,0x2c,0x4e,0xbb,0x41,0x0e, \
-0x99,0x00,0xd4,0x01,0x78,0xce,0x62,0x84,0xa5,0xd3,0x93,0x27,0x79,0x93,0xbf,0x0f, \
-0xc4,0x37,0xd9,0x38,0x12,0xeb,0x8f,0x75,0x14,0xb2,0xa6,0xea,0xdf,0xb0,0x2e,0x1e, \
-0xb7,0x4e,0xc3,0x05,0xc1,0x83,0x1e,0xcb,0x9b,0xc0,0x95,0xf4,0x87,0x38,0x5a,0xf4, \
-0x37,0x24,0x83,0xa8,0xa1,0xd0,0xeb,0x84,0xa9,0x70,0x8d,0x49,0x3e,0xf3,0x58,0x4a, \
-0x91,0x06,0x7d,0xe6,0xd3,0x6e,0xf2,0xe9,0x67,0x78,0xc7,0x94,0x84,0x34,0xef,0x27, \
-0x62,0x19,0xcc,0x53,0xc0,0xc9,0x6b,0x65,0x66,0x31,0x5f,0xc4,0x0d,0x87,0x28,0xc8, \
-0xe0,0x4f,0x75,0x86,0xfb,0x48,0x69,0x0a,0xca,0xc1,0x8f,0x7a,0x6f,0x4f,0x49,0xf0, \
-0x94,0x31,0xd7,0x15,0x01,0x34,0x72,0xf2,0x41,0xa0,0x77,0xaf,0x42,0x21,0xc5,0xf3, \
-0xe8,0x6d,0x1b,0x4b,0x13,0x4c,0x65,0x34,0x61,0x28,0x5b,0xde,0xb1,0xbd,0x2b,0x96, \
-0x28,0xd7,0x26,0xdc,0xef,0xcf,0x80,0xb9,0xc4,0xc4,0x37,0x62,0x8a,0x20,0xf8,0xe1, \
-0x71,0x45,0x5b,0xbf,0x53,0xac,0xdd,0x59,0xf7,0xc9,0xd7,0x27,0xc7,0xa0,0x7b,0x52, \
-0xad,0x1a,0x75,0x4c,0xa6,0x42,0x36,0x0a,0xab,0x21,0x9a,0xf0,0x23,0x16,0xe2,0x1d, \
-0xfd,0x61,0xb2,0x02,0x6e,0x19,0xf4,0x6c,0x72,0x44,0xf3,0xeb,0xe4,0x1b,0x9d,0xee, \
-0x65,0xa3,0x06,0x6f,0xd2,0xe6,0x12,0xc1,0xcd,0x3b,0xdc,0x97,0xc0,0x50,0xab,0x43, \
-0x23,0xd2,0x11,0x50,0x3f,0xa0,0xbc,0x38,0xec,0xce,0xf5,0x2b,0xcc,0x4d,0x1b,0x53, \
-0x52,0x1c,0x87,0x5a,0x2c,0x27,0x1d,0x1d,0xda,0xf0,0x2a,0xb8,0xa0,0x0f,0x45,0x54, \
-0x49,0x37,0x84,0x01,0x5c,0x4d,0xa5,0x51,0x22,0xdc,0x2f,0x83,0x69,0xd1,0x7d,0xd5, \
-0x2f,0x2f,0x83,0x1b,0x8c,0xcc,0x81,0x8e,0x1a,0xfc,0x56,0x23,0x49,0x3c,0x09,0xc1, \
-0x1b,0x37,0x6e,0xdc,0x66,0xd1,0x88,0x5d,0xc3,0x6a,0x61,0x92,0xad,0x12,0xaa,0x06, \
-0xd1,0x50,0x7e,0x20,0x65,0xea,0xfe,0xe1,0x94,0x4b,0x13,0xdd,0xcc,0x4e,0x0f,0x23, \
-0xa2,0x96,0x0e,0x85,0x2d,0x22,0x82,0xcb,0xed,0xc6,0x31,0xe7,0x7c,0xaf,0x58,0x61, \
-0x21,0xe4,0x6c,0x54,0xb7,0x30,0x5d,0x63,0xa8,0x6a,0x84,0x6e,0x52,0x25,0xe8,0x63, \
-0xc6,0xd7,0x3c,0x09,0xe2,0xe1,0xb7,0x96,0x59,0x17,0xe7,0x4c,0xa8,0x15,0x6f,0xa5, \
-0xe4,0xe0,0x09,0xc3,0x1d,0x4f,0x06,0x35,0x92,0x09,0x51,0x0d,0x35,0x20,0x4d,0x5e, \
-0xa0,0x7b,0x57,0xbc,0x9c,0xe5,0x5e,0x75,0xdb,0x29,0x62,0xde,0x78,0x6d,0x74,0x87, \
-0x6d,0x82,0x7b,0xfa,0xa8,0x33,0xcf,0x45,0xd6,0x1a,0x94,0x8c,0xa7,0xaa,0x2d,0xb0, \
-0x8b,0x4a,0xa2,0x47,0x20,0x21,0xab,0x92,0x45,0x84,0xa2,0x90,0x1e,0xb2,0xe6,0x86, \
-0x8e,0x94,0x94,0x15,0xa5,0xb6,0x86,0xa6,0xb5,0x8b,0x87,0xcd,0x21,0x41,0x4b,0x5e, \
-0xa1,0x6f,0x24,0x64,0xa9,0x09,0x51,0xea,0x07,0x5a,0x2c,0xbb,0x51,0x7e,0x62,0x19, \
-0x5d,0x7a,0x01,0xec,0xe4,0x0e,0xc3,0xb0,0x9d,0x81,0xec,0x94,0x9c,0x46,0x74,0xb2, \
-0x20,0xaf,0x16,0x05,0x88,0x31,0x8b,0x68,0x5a,0x16,0xc8,0xc5,0x54,0x8c,0x75,0x6a, \
-0xb2,0x1d,0x52,0x89,0x66,0xbb,0xff,0xa8,0xed,0xbe,0xa7,0x49,0xa7,0x81,0xca,0x48, \
-0x77,0xce,0x49,0xe4,0x33,0x89,0x8f,0x7e,0xc9,0x5a,0x3f,0x04,0xf0,0x1a,0x69,0xa6, \
-0x90,0x75,0x68,0xd6,0x61,0x1d,0x5c,0xa2,0xa2,0xef,0x71,0x8d,0xc5,0xb6,0xa7,0x1e, \
-0xbb,0x63,0xc5,0xef,0x0f,0x9a,0x6f,0x0e,0x92,0x6c,0x26,0x65,0xe8,0x8b,0x8b,0xb8, \
-0x27,0x4e,0xbb,0xd5,0x71,0x19,0x4b,0xf8,0x94,0xa2,0xd8,0xa0,0x68,0x20,0x85,0x8a, \
-0x84,0xa9,0x56,0x31,0xf8,0x32,0x0c,0x9f,0x1c,0x90,0xdf,0x9a,0x6d,0x74,0x2e,0x65, \
-0xe1,0x7e,0x46,0x82,0x49,0x2c,0x38,0x22,0xd6,0xd8,0x33,0xbb,0x7d,0x04,0xcc,0x2f, \
-0x26,0xdd,0xd9,0x24,0x9e,0x88,0xd3,0xe2,0xdd,0x54,0xd9,0x14,0x30,0x26,0x84,0x8b, \
-0xce,0xe0,0x49,0xed,0x81,0xb1,0xbf,0x22,0xe2,0xc7,0xa7,0x04,0x0b,0x26,0x2e,0x3a, \
-0xc7,0xa9,0x7d,0x73,0x04,0xbf,0xdc,0x72,0x0d,0x29,0x43,0x62,0x59,0x8b,0x86,0xb0, \
-0xc3,0x30,0xc0,0x5d,0xd2,0x65,0x09,0x81,0x22,0xc6,0x08,0x2a,0xd1,0xb5,0xb0,0x71, \
-0x42,0xb2,0x45,0x84,0x44,0xef,0xb4,0xc3,0x8d,0x1d,0x6e,0x3a,0x73,0x76,0x47,0xf7, \
-0x6b,0x74,0x39,0xc7,0x88,0xbc,0x29,0x40,0x78,0x9e,0x86,0x19,0x00,0x89,0xa6,0xeb, \
-0xab,0x7a,0x1f,0xa2,0x1b,0x63,0x0b,0x86,0x8c,0xc5,0xf2,0x1e,0x8b,0x19,0xf3,0x24, \
-0x09,0x58,0xb4,0xb8,0x20,0x26,0x23,0x0d,0xa9,0x40,0x13,0x4c,0xe7,0x80,0xbe,0xb1, \
-0x86,0xd6,0x00,0x6e,0x1a,0x11,0xdd,0x24,0x2b,0xb6,0x69,0x22,0x29,0x32,0x0c,0x63, \
-0x07,0x21,0x24,0x32,0xda,0xe9,0x65,0x0c,0xbc,0xb4,0x05,0xbc,0x48,0x3c,0xd0,0x4c, \
-0x00,0x83,0x7c,0x0f,0xc1,0x04,0x0d,0xb1,0xd0,0x93,0xdd,0xf7,0xb8,0x6b,0x53,0x72, \
-0xe8,0x78,0x60,0x5c,0x7e,0xbd,0xe1,0x76,0xb9,0x06,0x23,0xc1,0x85,0x18,0x81,0xb2, \
-0x0b,0x65,0x49,0x94,0x59,0x39,0x32,0x49,0x50,0x62,0x1a,0x66,0x52,0x7e,0x33,0xaf, \
-0x9e,0x3b,0x76,0x78,0x11,0x0e,0x9b,0x26,0x7c,0x2d,0xa9,0x46,0x2b,0x16,0x78,0x8f, \
-0x9e,0x76,0xd1,0xf0,0x75,0x92,0xce,0xae,0x0f,0x1a,0x34,0x66,0xf2,0x73,0xcd,0xd6, \
-0xd2,0x4a,0x06,0x1a,0x30,0xbf,0x15,0x6d,0x63,0x46,0x02,0xe0,0x1e,0x05,0x29,0x19, \
-0x7b,0x94,0xc0,0xeb,0x6f,0x0d,0x58,0xd3,0x4b,0x39,0x4f,0x7d,0x39,0xa4,0xfb,0x38, \
-0xee,0x3d,0x48,0xa5,0x42,0x81,0xd3,0x53,0x5e,0x46,0xf3,0xd5,0x9e,0x53,0x0a,0x23, \
-0x24,0x40,0x54,0x51,0x62,0xac,0x11,0x89,0xe7,0x68,0x83,0x44,0xa3,0x3b,0xa3,0x45, \
-0x44,0x05,0x46,0x21,0x6d,0x15,0x2a,0x14,0x05,0xf5,0xfd,0x13,0xf7,0xfd,0x27,0xf9, \
-0x31,0xd9,0xb7,0x93,0x10,0x0f,0x60,0x15,0x4c,0xee,0xa5,0x62,0x35,0x74,0x6a,0xf8, \
-0xa5,0x9b,0x18,0x07,0x8b,0xc9,0x5b,0xad,0x74,0x54,0x7d,0x11,0x14,0x24,0x33,0x3b, \
-0x53,0xe9,0x43,0xe1,0xb4,0x3a,0x60,0x20,0xb0,0x38,0x30,0x61,0xbe,0xab,0x49,0xc8, \
-0x50,0xfd,0x07,0x00,0x71,0x68,0x85,0x93,0x80,0xb9,0x32,0x15,0x8c,0x65,0x65,0xca, \
-0x9f,0x27,0xd5,0xfc,0x34,0xf0,0xe3,0x92,0x2e,0x59,0x99,0x5a,0x02,0x02,0x01,0x9a, \
-0x3a,0x94,0x44,0x07,0xe1,0xdf,0x1d,0xb5,0x0b,0xe6,0xd7,0xf3,0x15,0x6a,0x4e,0xb6, \
-0x08,0x55,0x42,0x6c,0x88,0x18,0x1a,0x15,0xe4,0x60,0x38,0xa5,0xde,0xec,0xbf,0x85, \
-0x1d,0xf9,0xae,0x17,0x19,0x10,0x2c,0xe4,0x65,0x9c,0x72,0x26,0xb9,0xed,0x53,0xc6, \
-0x43,0x50,0x63,0x67,0x02,0x0f,0x60,0x40,0x52,0x98,0xeb,0x9e,0xb7,0x81,0xf3,0x5a, \
-0x13,0x6f,0x6d,0xbd,0x94,0xf1,0x58,0x4e,0xda,0xdc,0x68,0xb0,0xa3,0x1e,0x64,0x08, \
-0x3b,0x22,0x06,0x99,0x14,0x04,0x1f,0x9a,0x41,0xe9,0x50,0x3b,0x72,0x72,0xe2,0x19, \
-0x68,0x61,0x5c,0xc9,0xa5,0x0d,0xd5,0x31,0xb4,0x60,0x20,0x61,0x2b,0x27,0x6b,0x22, \
-0xc0,0x62,0x39,0x20,0x9d,0x56,0x15,0x39,0x84,0x67,0xf3,0x9c,0xb9,0xcf,0x0d,0xa8, \
-0x7a,0xb0,0x0e,0x9d,0x2a,0x2e,0xbc,0xa1,0x42,0x1f,0x48,0x4d,0x84,0x19,0x2a,0x68, \
-0xbe,0xdd,0x4d,0xe2,0xf2,0x18,0xda,0xe5,0xa5,0x6c,0x61,0xb4,0xfc,0x5e,0x47,0xb9, \
-0x61,0xea,0x78,0xee,0x10,0x3f,0x01,0x90,0x58,0x2a,0x80,0x89,0x32,0x32,0x29,0x08, \
-0x43,0x06,0xd0,0xa0,0xc2,0xcb,0xaf,0xec,0x67,0xd0,0xaa,0x8c,0x15,0xda,0x70,0x0b, \
-0xc1,0x2f,0x73,0x06,0xc4,0x6d,0x88,0x47,0x71,0xd9,0xd8,0x6f,0xe8,0xaa,0x86,0xe7, \
-0x21,0x89,0x40,0x7a,0x2c,0x87,0xe8,0x64,0xb9,0xb2,0xa4,0x06,0xd1,0xa1,0x0d,0x35, \
-0x99,0x51,0x70,0xd6,0x0c,0xed,0xc5,0x94,0xfb,0x6e,0x8e,0x23,0x2e,0xd0,0xec,0xb8, \
-0xac,0x82,0xea,0x68,0x4d,0x89,0x1b,0x98,0x05,0x0d,0xcd,0x7e,0x8d,0x07,0x58,0x6c, \
-0xbb,0xba,0x0d,0xad,0x4d,0x27,0xdd,0x4d,0xf3,0xeb,0xec,0x29,0xe8,0xaf,0x6b,0x2f, \
-0x28,0xea,0x8b,0xa1,0x48,0x31,0x0c,0x8d,0xea,0x7a,0xe3,0xb2,0xac,0x15,0x60,0x93, \
-0xe3,0x17,0x56,0x86,0x90,0x2f,0x49,0x35,0x17,0x93,0x14,0x6e,0x75,0xc3,0x66,0x15, \
-0xb2,0x4e,0xf2,0x5e,0x00,0xed,0x73,0xa5,0xa8,0xd9,0xd8,0x74,0x37,0xa7,0xd8,0xef, \
-0x48,0x09,0x33,0x1d,0x18,0x8b,0x57,0x3b,0xac,0x5e,0x30,0x78,0x45,0x71,0xed,0x20, \
-0x42,0x02,0x05,0x15,0x81,0x12,0x94,0xd0,0x98,0x9f,0xd7,0xe9,0xef,0xd1,0xd5,0xb5, \
-0x3a,0xec,0x14,0x15,0x18,0x2b,0x18,0x22,0x48,0x82,0xa4,0x59,0x02,0x8b,0x87,0x2d, \
-0xc7,0xcd,0x6e,0x32,0x1d,0xd2,0x90,0x96,0x96,0x2a,0x49,0xbf,0x40,0x64,0x72,0xb6, \
-0x18,0x3c,0x83,0x8a,0x5e,0x11,0x00,0xed,0x72,0xd4,0x9e,0xdf,0x57,0x77,0x81,0x7c, \
-0x30,0x39,0x26,0xb8,0x23,0x08,0x81,0x3e,0x16,0x90,0x74,0xef,0xa5,0x3d,0xf7,0x61, \
-0xdd,0x89,0x96,0x76,0xf5,0x52,0x62,0x28,0xb0,0x16,0x45,0x91,0x37,0xfb,0xfd,0x80, \
-0x1e,0xf1,0x41,0x88,0x10,0x09,0x1e,0x93,0xe6,0xf6,0x00,0x75,0x0d,0x7a,0x3e,0x2a, \
-0xee,0x25,0x71,0x27,0x97,0x9c,0x87,0x42,0xda,0xcb,0xc5,0x46,0x27,0xeb,0x55,0x79, \
-0xaa,0xb2,0xbd,0xea,0x9e,0x1b,0x90,0x82,0x6f,0x2c,0x52,0x29,0xc0,0xe0,0x8f,0x82, \
-0x68,0x43,0x18,0x07,0xac,0xa0,0x44,0x8e,0xf2,0x51,0xb4,0x37,0x29,0xdc,0x69,0x11, \
-0x18,0xcc,0xd8,0xcb,0x8c,0x2a,0x32,0x19,0xdb,0xac,0x18,0xec,0xba,0x16,0xc9,0x33, \
-0x95,0x0d,0x87,0xd1,0x24,0xc6,0xf9,0x37,0xf4,0xe8,0x10,0xcd,0xb0,0x48,0x87,0x19, \
-0xc0,0x98,0x56,0x17,0x56,0x06,0x23,0xee,0x4c,0xf6,0xe6,0xfc,0xb9,0x1a,0xfd,0xb9, \
-0xc3,0x0b,0x5d,0x8f,0x74,0x48,0xa3,0x27,0x31,0x05,0x94,0xc1,0x30,0x42,0x2f,0x71, \
-0x68,0x4b,0xe9,0x6a,0xc7,0x43,0x58,0x64,0xdd,0xa1,0x92,0x96,0x83,0xb3,0x3f,0x77, \
-0x79,0xc7,0x1e,0xcb,0xf6,0x87,0xd7,0x9e,0xa9,0xc0,0x05,0x9c,0x71,0xb0,0x18,0xb2, \
-0x4b,0x01,0x4f,0xaf,0x1c,0xe7,0x71,0x39,0x87,0xeb,0xe0,0x70,0x18,0x28,0xb0,0x54, \
-0x62,0x8b,0x20,0xc0,0xc2,0x01,0xd8,0xce,0xce,0x7d,0x73,0x2f,0x2f,0x0d,0x0b,0x2b, \
-0x00,0xc1,0x71,0x4b,0x16,0x4b,0x8c,0x38,0x10,0x7a,0x9f,0x79,0xa8,0x55,0xd9,0xb1, \
-0x50,0xac,0xb0,0x41,0x14,0x14,0xda,0x59,0x44,0x5c,0xb5,0x1c,0x6b,0x05,0xc4,0x31, \
-0x9c,0x18,0x3c,0xc4,0x9a,0x56,0x4d,0x8d,0xb0,0x05,0x61,0xd6,0x86,0x8e,0x88,0x4d, \
-0x50,0x38,0xe3,0xac,0x88,0x98,0xb5,0x68,0xc2,0xd9,0xfa,0x70,0xe2,0x95,0x1c,0x00, \
-0xbd,0x3d,0xf4,0x1d,0x80,0x3d,0xe2,0x93,0x79,0x54,0xaf,0x8f,0x66,0xd2,0x65,0x5c, \
-0x29,0x69,0x0d,0x83,0x06,0x80,0x6c,0x78,0x5d,0x52,0x4d,0x0f,0xd7,0x43,0x91,0xac, \
-0xb2,0xaa,0x28,0xaa,0x45,0x91,0x3d,0xeb,0xc2,0x98,0x88,0xc5,0x72,0x81,0x4f,0x5b, \
-0x43,0x82,0x19,0x51,0x03,0x56,0xcc,0xa3,0xb3,0x64,0x59,0x30,0xca,0x23,0x1e,0x99, \
-0x3c,0xbd,0xa6,0x32,0x34,0x70,0xa9,0x82,0x98,0x4b,0x4a,0xf7,0xd9,0x6f,0xae,0x8c, \
-0x0c,0x9c,0x31,0xb4,0x93,0x62,0x22,0x20,0xc3,0x8e,0xcc,0x82,0xca,0x9a,0x50,0xa0, \
-0x9e,0x6c,0x0d,0x4c,0xc4,0xa4,0x6d,0x0c,0xce,0x34,0x0c,0x2c,0xc3,0xf0,0x94,0x4f, \
-0x11,0x01,0xb0,0x0a,0x53,0xec,0x90,0x54,0x69,0x06,0x46,0x26,0xe9,0xf2,0x63,0x1a, \
-0xda,0xfe,0x79,0x5b,0x9c,0xb1,0x6f,0x6a,0x1c,0x9d,0x34,0x23,0x1e,0x39,0x67,0x67, \
-0x34,0x2a,0x4e,0x84,0x59,0x44,0xc0,0x98,0xc5,0xac,0x30,0xc9,0xfb,0x59,0x26,0x31, \
-0x9c,0x4f,0x27,0x02,0x59,0xa1,0x6d,0x23,0x2d,0x31,0x88,0x1c,0xe9,0xeb,0x4e,0xae, \
-0x85,0x7a,0x38,0xa6,0xd5,0x83,0x93,0x2a,0xdf,0xc6,0x7e,0xf7,0xcc,0x64,0x8c,0xaf, \
-0xa0,0x84,0x94,0xfa,0x02,0x82,0x35,0xfc,0xe3,0xb5,0xaf,0x3d,0xeb,0xd1,0x91,0x52, \
-0x66,0xa1,0xdf,0x0d,0xdb,0xb9,0x70,0x69,0x2b,0x0c,0x8a,0x48,0x5d,0x60,0x3f,0x19, \
-0x73,0xc7,0x2e,0x40,0xd6,0x48,0x23,0x20,0xd0,0x0a,0x02,0x62,0x86,0x3d,0xdd,0x17, \
-0x59,0xd3,0x1e,0x9c,0x9c,0x71,0xe8,0x64,0x03,0x81,0x99,0x47,0xc4,0xc9,0x24,0x27, \
-0xc0,0x12,0xa1,0xc9,0x99,0x8c,0xc5,0x2b,0xd9,0x6a,0x6c,0x9b,0x19,0x0d,0xfc,0x7c, \
-0xf1,0x9e,0xd1,0xc4,0xf0,0x40,0xc6,0x3a,0x74,0xb7,0xec,0xa0,0x9b,0x9d,0x81,0x33, \
-0xb9,0x0a,0x82,0x69,0x30,0xbb,0xcc,0x2e,0x26,0xf4,0xa9,0x80,0x64,0xc1,0x12,0xd3, \
-0x13,0x53,0x11,0x43,0xd1,0x11,0xd3,0xca,0x52,0xad,0xf9,0xf0,0x0e,0xe0,0xfc,0xa8, \
-0xac,0x7c,0xbb,0x0b,0xa6,0x11,0x06,0x4d,0xb7,0xf0,0xe0,0xa3,0x70,0x64,0x90,0x58, \
-0x19,0xc9,0x44,0xd0,0x44,0x0b,0x83,0xf5,0xb4,0x66,0xf6,0xd4,0x4a,0x3b,0x5e,0x1a, \
-0x31,0x80,0xe1,0x21,0x39,0x9d,0xfd,0xc0,0xf5,0xac,0x45,0x23,0x00,0x62,0x2a,0x2c, \
-0x0e,0x56,0xac,0x51,0x9a,0x06,0xc5,0x6d,0xa2,0x22,0xa3,0x19,0x1b,0x47,0xb7,0x7f, \
-0x8a,0x4d,0x79,0x1a,0x57,0xea,0xb3,0x96,0x2d,0x19,0x93,0xa6,0x87,0x10,0x30,0xc5, \
-0x82,0xc9,0xb8,0xc3,0xcf,0xec,0xcf,0xec,0xfc,0xf5,0xb1,0x92,0x17,0x71,0xa9,0xcf, \
-0x88,0x19,0xef,0xd4,0xc0,0xe5,0x5a,0x3f,0xd8,0x32,0x96,0x6d,0xe4,0x92,0x3c,0x3d, \
-0xdf,0x15,0x64,0x83,0x89,0xa4,0x5e,0x4f,0x6a,0x1c,0xe4,0x3e,0xf6,0x6d,0xe3,0x49, \
-0xe5,0xdd,0x68,0xf7,0x0c,0x94,0x11,0x04,0xdc,0xbe,0x6b,0x8e,0x22,0x4f,0x5c,0xca, \
-0xc9,0xeb,0xb4,0x1b,0xcc,0x27,0x3d,0xe9,0x63,0x86,0x04,0xa0,0xc2,0x90,0xc2,0x2e, \
-0x80,0xb4,0xb2,0xce,0xf5,0x9c,0xf9,0x44,0x1a,0x75,0x44,0x3e,0x3d,0x32,0x31,0x33, \
-0x1c,0x36,0xf2,0x46,0x4d,0x02,0xce,0xa6,0x93,0x10,0xc4,0xc7,0x1b,0x52,0x61,0x22, \
-0xae,0xd9,0xcb,0x27,0x9e,0xa3,0xad,0x8c,0xdc,0xea,0x97,0x6c,0xb6,0x09,0x83,0x44, \
-0x30,0x20,0x40,0xd4,0x42,0x23,0x75,0x42,0xe1,0x0c,0xe2,0x8c,0x22,0xe2,0x32,0x82, \
-0x6e,0x98,0x21,0x4c,0x32,0x42,0x54,0x9d,0xb9,0x28,0x42,0xd5,0x21,0x24,0x60,0xd4, \
-0x35,0x08,0x66,0x39,0x10,0xbb,0x50,0xd1,0x20,0xab,0x36,0xfe,0x5d,0xb0,0x4d,0x3c, \
-0x06,0xd9,0x34,0x41,0xab,0x0c,0xb5,0xd1,0x84,0x19,0x45,0x43,0x42,0xd0,0x45,0x41, \
-0x1b,0x6d,0xa2,0xdc,0x35,0x1c,0x62,0xb1,0xc6,0x44,0xa9,0x24,0x19,0x03,0x6d,0xf5, \
-0x31,0x2f,0x40,0x94,0x84,0x14,0x4a,0x17,0x67,0xfb,0x3c,0xa7,0x28,0x91,0xf3,0x89, \
-0x01,0x47,0xec,0xbd,0xc7,0xbc,0xe5,0x20,0x7a,0xa9,0xa2,0x25,0x20,0xd0,0x5b,0x2c, \
-0xe0,0xe4,0x38,0xf7,0x79,0x21,0xbe,0x38,0xe2,0x31,0x52,0x09,0x7c,0x7d,0x72,0x4c, \
-0xb0,0x3c,0x59,0xe2,0x27,0xba,0xfd,0x2c,0x42,0xc9,0xd3,0x46,0x27,0x52,0xa9,0xd2, \
-0x16,0xca,0x7b,0x6c,0x15,0xf8,0x96,0x08,0x64,0xd6,0x6d,0x03,0x74,0x84,0xd8,0x2a, \
-0x98,0xa0,0xde,0xdc,0x17,0x29,0x44,0xc2,0x14,0x48,0x39,0xa1,0x44,0x51,0x49,0x18, \
-0x42,0x99,0xa4,0x51,0xa0,0x4b,0x05,0x10,0x0a,0x69,0x90,0xd9,0x35,0x82,0x1d,0x4d, \
-0x00,0x9a,0x4c,0xa4,0x71,0xa6,0x42,0xb8,0x8c,0x7e,0x14,0xaa,0x8a,0xc4,0x45,0x33, \
-0x61,0x5c,0x1d,0x94,0xe9,0xf9,0x10,0x75,0x1b,0x09,0x06,0x06,0xfb,0xe9,0x90,0x32, \
-0xe4,0x01,0x5e,0xe2,0x0d,0x06,0xae,0x57,0xa2,0x3e,0xa8,0x46,0x4c,0x9c,0x80,0xc9, \
-0x0e,0x51,0x20,0x4a,0x80,0xa0,0x08,0xc8,0x07,0x54,0x06,0xd8,0xb6,0x88,0xa4,0x26, \
-0x4a,0x6c,0x2a,0x68,0x5a,0xd4,0x54,0x4b,0x1b,0xa4,0x96,0x75,0x21,0x92,0x75,0x2b, \
-0x55,0x36,0x95,0x06,0x10,0xdb,0x18,0xc4,0x1c,0xa4,0x2c,0xac,0x09,0x6a,0x34,0x94, \
-0x0d,0x04,0x96,0xc8,0x46,0x7d,0xff,0x46,0xe1,0x65,0x57,0xa2,0xf9,0xfd,0x16,0xa9, \
-0x7b,0x46,0x03,0x57,0x1b,0x40,0x20,0xaf,0x8f,0xcb,0x2b,0x83,0x14,0xb6,0x34,0x5d, \
-0x5c,0x4d,0xab,0x95,0xfe,0x77,0x7b,0x4b,0xf7,0xdd,0xa6,0xe6,0x03,0x6b,0xca,0x90, \
-0xfd,0x5a,0xd2,0xc8,0xad,0x08,0xab,0x50,0xc0,0x73,0x09,0x74,0x85,0x78,0x40,0x38, \
-0x98,0x09,0x30,0x3a,0xce,0x0a,0xe1,0x6c,0xb4,0x51,0x4a,0x31,0x1b,0x65,0x30,0x35, \
-0xc4,0x54,0x44,0xb4,0xa2,0xc5,0x50,0x2d,0x2c,0x2b,0x06,0xd1,0x94,0x29,0x2d,0x19, \
-0x46,0x5a,0x5b,0x64,0x2a,0x2d,0xb5,0x23,0x4c,0xc2,0x98,0xa9,0xee,0xc8,0x66,0x66, \
-0x4e,0x34,0x15,0x88,0x16,0x2e,0x02,0xcb,0x0d,0x12,0x93,0x14,0x98,0x83,0x03,0x09, \
-0x36,0xb0,0xe8,0x84,0x90,0xd5,0x64,0x2a,0x8d,0x19,0x73,0x05,0x72,0x2e,0xab,0x02, \
-0x4e,0xd5,0x9a,0x06,0x79,0x49,0x3f,0x4f,0x28,0xa0,0xf6,0x91,0xc0,0xee,0xb2,0x4c, \
-0xb2,0x09,0x3f,0xc0,0x6c,0x63,0x11,0xd9,0x82,0x9a,0xdb,0xeb,0xc4,0x82,0xe5,0x87, \
-0xaa,0x69,0x8f,0x9a,0x25,0x8e,0xca,0x65,0x1d,0xd0,0xa4,0x1b,0x40,0x85,0xa9,0x77, \
-0x78,0xd0,0xc2,0x17,0x44,0x17,0xa9,0xcf,0x4d,0x41,0xb5,0x82,0xc1,0x5a,0x5d,0xd0, \
-0x45,0x0c,0x74,0x91,0x53,0x0c,0x11,0xf6,0x17,0xc7,0xd1,0xbe,0x57,0xb7,0xca,0xb2, \
-0x5a,0x1b,0x6c,0x3a,0xea,0x2b,0xb0,0x2a,0xa5,0xa0,0x14,0x12,0x08,0x68,0x0b,0x9f, \
-0x0e,0xfc,0xfa,0x9f,0x64,0xf4,0xb4,0xa1,0x47,0x71,0x24,0x2a,0xa1,0x4b,0x28,0xde, \
-0x06,0xb0,0x1a,0x74,0x93,0x47,0x08,0x40,0xf6,0x30,0x8b,0x21,0x27,0x0f,0x0b,0xbb, \
-0x77,0x49,0x3c,0x60,0x8f,0xd0,0x7b,0x91,0xbc,0x1e,0xe1,0x87,0x0d,0xa9,0x89,0xbd, \
-0x9f,0x37,0xd4,0x8e,0x7f,0x95,0xac,0xfa,0x40,0xf2,0x3a,0x7c,0x8a,0x2e,0x7d,0x7e, \
-0xe8,0x09,0xbf,0xe2,0xf0,0x35,0xfd,0x61,0x88,0x70,0x26,0x24,0x93,0xb3,0x05,0xe5, \
-0x48,0x1b,0xa8,0x20,0xb2,0x02,0x20,0x26,0x21,0xf2,0x13,0x2c,0x0e,0xa4,0x3d,0x50, \
-0xc0,0x31,0x8b,0x07,0xad,0xed,0xc0,0x4b,0x18,0x82,0xa3,0x06,0x26,0x53,0xcb,0xe1, \
-0xea,0x82,0xc5,0x41,0x14,0x16,0x41,0x60,0x63,0x69,0xea,0x96,0x6e,0x32,0x74,0x17, \
-0xa6,0x41,0x0f,0x95,0xf9,0x5d,0xad,0x0b,0xcf,0x53,0x64,0x4f,0x4f,0x62,0xa1,0x71, \
-0x9b,0xa7,0x19,0x14,0x24,0x91,0xca,0x21,0xb5,0x32,0x72,0x20,0x51,0xc3,0x50,0xf3, \
-0x45,0x75,0x17,0x37,0x41,0x90,0xe4,0xef,0x15,0x58,0x08,0x0a,0x9b,0xfa,0xf7,0x9c, \
-0xb9,0xf4,0x30,0xea,0x3c,0x7a,0x23,0xe1,0x0d,0xd4,0xe6,0xcb,0xc3,0xf2,0x76,0x09, \
-0xa3,0x0e,0xb6,0x53,0x7b,0x5e,0x0d,0x1c,0x65,0xbe,0xf3,0xe4,0xdf,0xc1,0x36,0x1b, \
-0x70,0xcf,0xb6,0x16,0x30,0x08,0x5b,0x54,0xf0,0x49,0x7c,0x28,0x51,0x51,0x91,0xf3, \
-0x4a,0x82,0x88,0x23,0x92,0xe5,0xc4,0x3e,0x00,0xd8,0xe0,0xde,0x9b,0xb9,0x90,0x51, \
-0xc1,0x65,0x30,0xf9,0x70,0x20,0x58,0x65,0xc1,0x6a,0x1a,0xfb,0x29,0x36,0x3f,0x91, \
-0xc3,0xa4,0xf2,0xf0,0x48,0x3d,0x60,0x5c,0xb8,0x42,0xae,0xa0,0x68,0x76,0x90,0x44, \
-0xc9,0x10,0x9a,0x86,0x98,0x55,0x32,0xce,0x99,0x5d,0x7a,0x97,0x72,0x7a,0x97,0x27, \
-0xd9,0x19,0x0b,0xc0,0xc4,0x20,0xe2,0x40,0x0c,0x5e,0x72,0x0d,0xec,0x35,0x6d,0x8c, \
-0xfb,0xc6,0x33,0x41,0xc8,0xd7,0xe6,0x44,0x4d,0x25,0xd2,0x02,0x42,0x63,0xc1,0x85, \
-0xe6,0xeb,0xc6,0xc4,0x98,0xc3,0x0f,0x21,0x9b,0x60,0xb8,0x11,0xae,0x2f,0xc6,0x62, \
-0xc9,0xac,0x4e,0x06,0x27,0xe9,0x79,0xae,0x0d,0x0d,0xa1,0xb4,0x98,0xcc,0xd5,0x7e, \
-0x66,0x3f,0x91,0x99,0x9d,0x45,0x98,0x39,0xd0,0x83,0xe7,0x80,0xe7,0x94,0x2b,0xb7, \
-0xac,0x51,0xf0,0x64,0xec,0x68,0xc2,0x6d,0x95,0x85,0x6b,0x21,0x46,0x4b,0xc4,0xc9, \
-0xe0,0x9d,0x58,0xe8,0xf9,0xf5,0xf1,0x86,0xce,0x28,0xb7,0x1b,0x26,0xbd,0xf2,0x0e, \
-0x66,0x68,0xbc,0x7e,0x24,0x07,0x66,0xe0,0xb7,0xeb,0x04,0x2f,0x6b,0x10,0x9b,0xfb, \
-0x78,0xa4,0x40,0xa8,0x46,0xc3,0x3b,0xd2,0x22,0x0a,0xb1,0x56,0x03,0x23,0x10,0xab, \
-0xee,0xa5,0x39,0x6f,0x0d,0xf6,0x0e,0x74,0xdb,0xd7,0x8f,0x76,0x61,0xe6,0xd2,0x38, \
-0x1f,0x8d,0x78,0xb9,0x8f,0x39,0x8a,0xde,0xc5,0x05,0x41,0xb8,0x11,0x10,0xc9,0xbc, \
-0xfa,0x86,0x50,0xa1,0x05,0x48,0x4d,0x4a,0x31,0x0c,0x98,0x84,0x0f,0x29,0x08,0x67, \
-0x51,0x84,0x0b,0xd1,0x60,0x68,0xf4,0xad,0xec,0x06,0x5e,0xd6,0xf0,0x87,0x65,0xc6, \
-0x53,0x41,0x19,0xa3,0x83,0x0c,0xd8,0x68,0x2c,0x12,0x80,0xc1,0xc0,0xc0,0xee,0x92, \
-0x10,0xef,0x70,0x1b,0x5d,0x5a,0x84,0x60,0x2f,0xbb,0x20,0xbc,0x2f,0x18,0xc7,0x81, \
-0x54,0x97,0x3d,0xf8,0x75,0x70,0x74,0xb3,0x4d,0x51,0x13,0x44,0xc6,0x40,0x30,0xd2, \
-0x0b,0x5e,0xc6,0x1f,0xc3,0x89,0x34,0x0f,0x66,0x50,0xb2,0x13,0xf1,0x61,0x86,0x6c, \
-0x7a,0xd8,0x04,0x75,0x17,0x74,0x3a,0xe3,0x44,0xd6,0x7e,0xae,0x46,0xfb,0x9b,0xf1, \
-0xee,0xec,0xbf,0xd3,0xae,0x8d,0xcc,0x97,0xa4,0xbd,0x22,0xa2,0x7e,0xef,0x3b,0x34, \
-0x69,0xf8,0xaf,0x36,0x7b,0x03,0x98,0x30,0xd9,0x9d,0x4f,0xae,0x88,0x60,0x86,0x6a, \
-0xe8,0x18,0x12,0x32,0x3a,0x96,0xb9,0xc1,0x14,0x89,0xed,0xa0,0xa7,0x57,0x45,0x93, \
-0xb5,0x0f,0x9c,0x40,0x9b,0x7d,0xd6,0x61,0x32,0x87,0x10,0x66,0x8e,0xa9,0xbf,0x65, \
-0x39,0xfb,0xe6,0xf0,0xa6,0x0d,0x41,0x34,0xc0,0xf5,0x4a,0xa8,0x68,0x9c,0x1f,0x4a, \
-0x7e,0xbd,0x75,0x49,0xd6,0x8c,0x64,0x18,0xa8,0xa2,0x08,0x29,0x0f,0x3e,0x10,0x39, \
-0xf4,0xa0,0x1d,0xa3,0xb3,0xef,0x67,0xdb,0xd7,0xca,0x7b,0x79,0x63,0x9a,0x6f,0xbc, \
-0xb3,0xe6,0xcf,0x14,0xe9,0xd6,0xa7,0x16,0x63,0xd3,0xa7,0x01,0xa9,0x96,0x00,0xd8, \
-0xb0,0x51,0x43,0x29,0x54,0x16,0x29,0x0e,0xfb,0xf3,0x98,0xba,0x6c,0x14,0x15,0x18, \
-0x3d,0x8d,0x46,0x08,0xc1,0x9b,0xd8,0x55,0xe1,0x42,0xb0,0x50,0x58,0x56,0x17,0x83, \
-0x55,0x10,0x50,0x62,0xaa,0x2c,0x50,0x41,0x60,0x2a,0x30,0x56,0x55,0x6a,0xb1,0x54, \
-0x90,0x7b,0x22,0x4a,0x0c,0x56,0x23,0x18,0x8c,0x10,0x77,0x64,0xb7,0x54,0xc4,0x5e, \
-0x3f,0x47,0xf9,0xf3,0xcf,0x5b,0xf8,0x3e,0x01,0x5f,0x97,0x30,0x35,0xab,0x5d,0xb9, \
-0x79,0xae,0x6c,0x63,0xdc,0x97,0xe0,0x94,0x69,0x2e,0x31,0x7c,0xb5,0xcb,0x13,0x0c, \
-0x24,0x36,0xd4,0x0c,0x44,0xe1,0xc0,0x44,0x6c,0x21,0xb4,0x9d,0xa9,0x04,0x55,0xb3, \
-0x44,0xf8,0x33,0x30,0x45,0x06,0x0a,0x8c,0x4c,0xb3,0x2a,0xe3,0x14,0xa6,0x0a,0x52, \
-0x6e,0x62,0xe0,0x51,0x17,0x38,0xb3,0x11,0x90,0x54,0x73,0x68,0x22,0xca,0xde,0xbe, \
-0x33,0x4c,0xe9,0x12,0xbd,0xbf,0x47,0xf9,0x70,0x73,0x39,0xfe,0xa0,0x3b,0xd5,0x9b, \
-0x93,0x8f,0x49,0xf5,0x0e,0xe6,0xcd,0xc8,0x03,0xcf,0x98,0x6b,0xbd,0xee,0x1c,0x31, \
-0xbc,0xd7,0xb7,0xa8,0x71,0x98,0xb8,0x5d,0x98,0x68,0x3c,0xcc,0xa4,0xe2,0x7c,0xf4, \
-0x3d,0xce,0x5d,0xe7,0xc8,0xf3,0x29,0x2a,0x51,0x01,0x38,0xe5,0x61,0xd2,0xf5,0xa6, \
-0xfe,0x9d,0xb3,0x63,0x22,0x3f,0x42,0x4f,0x77,0x5c,0x11,0x58,0x0a,0x2c,0x54,0x41, \
-0x56,0x22,0xaa,0x51,0x91,0x26,0xe9,0x76,0xe9,0x0c,0xbd,0x10,0x50,0x8c,0xed,0x80, \
-0x87,0xbe,0x1d,0xb8,0x62,0xc1,0x11,0x86,0x25,0xa1,0xc0,0xc6,0xb0,0x43,0x81,0xd0, \
-0x45,0x04,0x62,0x83,0x06,0x31,0x84,0x88,0x48,0x0d,0x88,0xb5,0x4e,0x66,0xee,0xe5, \
-0xf7,0xa0,0x42,0x30,0x92,0x11,0x5c,0x9a,0xd4,0x79,0x55,0x70,0x3f,0x46,0xb0,0x43, \
-0x85,0xe2,0x09,0x80,0xac,0xac,0x24,0xa4,0x3b,0x61,0x88,0x25,0x06,0x2b,0x04,0x44, \
-0xb1,0xa8,0xa1,0xc3,0x3c,0x84,0xcc,0x83,0x20,0xb0,0x8b,0x2f,0x4e,0x2a,0xb5,0x2b, \
-0x1d,0xc9,0xd6,0xee,0x0e,0xcc,0xb8,0x3b,0x07,0x40,0x34,0x2c,0xa7,0x0b,0xc3,0x78, \
-0x7f,0x6b,0x1b,0x45,0xe2,0xad,0x66,0x0d,0x48,0xd7,0x04,0xb4,0x19,0x60,0x09,0x0b, \
-0x92,0x9d,0xca,0x32,0x28,0x28,0xdb,0x44,0x22,0xcc,0xb1,0x43,0x9a,0x51,0x10,0x18, \
-0x11,0x87,0xcb,0xb0,0x4f,0x1d,0x8d,0xd8,0xed,0x44,0xac,0x45,0xb0,0x16,0x41,0xb6, \
-0xa5,0xa2,0x51,0x4a,0x08,0xdb,0x25,0xb5,0x69,0x11,0xd7,0x44,0x93,0xba,0x74,0x59, \
-0xd9,0x33,0xbc,0x09,0xe9,0xb6,0xbe,0xa3,0x89,0xa8,0x4c,0x53,0x3c,0x6d,0x66,0x62, \
-0x18,0x17,0xde,0xd3,0x09,0x5b,0x3f,0x20,0xa2,0x8a,0xa9,0x79,0xcf,0x3e,0x65,0x0e, \
-0xba,0x40,0x9b,0x97,0xef,0xbc,0x5f,0xbc,0x75,0xf4,0x97,0xba,0x7b,0x8e,0xfb,0xe8, \
-0x0f,0x64,0xec,0x92,0x2a,0x19,0x0f,0x7f,0x66,0x72,0x33,0xa6,0x8d,0x7f,0x7e,0x0a, \
-0xc3,0xaa,0x25,0xf4,0xd7,0x52,0x66,0xfb,0xa9,0xdc,0x9b,0xf3,0x85,0x86,0x3e,0x94, \
-0x21,0x4b,0x0d,0x0e,0xe4,0x48,0xe8,0xf2,0x1f,0x01,0xec,0x81,0xdd,0x33,0xc6,0xf5, \
-0xbc,0xa2,0x62,0x0b,0x84,0x86,0x78,0xbe,0xc0,0x1c,0x09,0xed,0xcb,0xc3,0x2b,0xdb, \
-0x45,0x12,0xbf,0x95,0xc2,0x8e,0x85,0x88,0x80,0x0e,0x4b,0x55,0x10,0x43,0xf0,0x40, \
-0x34,0x38,0x88,0x54,0xc1,0x09,0x23,0x80,0xe7,0x34,0x0c,0x16,0xdb,0x70,0x61,0x9f, \
-0x5d,0x14,0x3d,0xd1,0x48,0xbe,0x61,0x0f,0x77,0x89,0x86,0x3c,0xc3,0xa9,0x5e,0x7d, \
-0xd0,0x82,0x4b,0x06,0x1e,0x2a,0x88,0x78,0xbd,0x4d,0x03,0xc2,0x48,0xbf,0x28,0x0e, \
-0x84,0x20,0x21,0xda,0x86,0x18,0xb1,0xbd,0x8e,0x11,0x9b,0x45,0xc4,0xb4,0xd3,0xb7, \
-0x96,0xf0,0xc4,0xad,0x71,0x90,0xd0,0x6b,0x17,0xa7,0x86,0xd8,0x24,0xbb,0x74,0x64, \
-0xe8,0x48,0xc9,0x13,0x00,0xd1,0x16,0xb5,0xe4,0xf0,0x08,0xcf,0x88,0x13,0x35,0x71, \
-0x04,0xfe,0xd6,0x46,0x2c,0x07,0x98,0x46,0x2c,0x39,0x2a,0x8d,0x60,0x4a,0x84,0xc2, \
-0xa1,0x34,0xe3,0x9a,0xc4,0x52,0x0d,0x2b,0x63,0x6b,0x51,0x83,0x4c,0x72,0x7d,0x08, \
-0x53,0x73,0x41,0xdc,0x46,0x79,0x20,0xaf,0x24,0x40,0x68,0x0a,0xe1,0x7b,0x70,0xe1, \
-0xb5,0x35,0x0e,0x32,0x0b,0x15,0xd5,0xa1,0x43,0x90,0x8d,0x19,0x41,0x49,0xc9,0x28, \
-0x04,0x82,0x06,0x54,0x07,0x22,0x6f,0xbd,0xe0,0x0e,0x30,0x9c,0xdf,0x66,0xa8,0xd5, \
-0x28,0xcc,0x1b,0x34,0x65,0xd5,0x22,0x12,0x75,0x48,0x10,0xad,0xe9,0xf6,0x87,0x0d, \
-0x1c,0xcb,0x78,0x06,0xd2,0xef,0xe0,0xdc,0x65,0xef,0xbd,0x07,0x22,0xbd,0x86,0x91, \
-0x9c,0xa8,0xe3,0xbc,0x77,0x34,0xe8,0x89,0x50,0x68,0x87,0x91,0x1a,0xcb,0x07,0x60, \
-0x34,0x0a,0x29,0x62,0xcf,0x80,0xa1,0x39,0xe5,0x06,0x68,0xf5,0x9b,0x28,0x61,0xf3, \
-0x46,0xaf,0xc5,0x5a,0x48,0x18,0x2b,0x21,0x02,0x45,0x68,0xad,0x19,0x9f,0x03,0xbb, \
-0x53,0x9c,0x8b,0xab,0xf1,0xc9,0x78,0x9e,0xc0,0x8e,0x9f,0xaa,0x39,0xb2,0x4e,0x13, \
-0x0d,0xc1,0x11,0xc8,0xd0,0x1e,0x4c,0x52,0xfa,0x42,0xb1,0x7e,0x0f,0x4d,0x00,0x0e, \
-0x3f,0x22,0xdc,0x0f,0x80,0x3b,0x5f,0xf3,0xf0,0xe4,0x6e,0xbc,0xa1,0xe1,0xc1,0x9f, \
-0xb3,0x1f,0x44,0xcd,0x3a,0x81,0x66,0x0a,0x92,0x8f,0x5c,0xec,0xe2,0x8c,0x60,0xc7, \
-0xca,0xcb,0x06,0xd0,0xdb,0x18,0xc1,0xdc,0x7e,0x3d,0xe7,0x49,0x8d,0xdb,0x73,0x2a, \
-0x06,0xcd,0xdc,0x6e,0xf9,0x0d,0x8c,0x72,0x4d,0x8c,0x5d,0x4a,0xc3,0x10,0x18,0x63, \
-0xc5,0xc0,0x58,0x8c,0x03,0xac,0x59,0x18,0x0b,0x82,0x49,0x27,0xcc,0x40,0xf5,0x27, \
-0x10,0xe6,0x96,0x33,0x74,0xfa,0x3c,0x79,0x68,0x88,0xf7,0x30,0xd7,0x4a,0xa4,0x53, \
-0xbb,0x05,0x30,0x72,0x3a,0xc9,0x92,0xb4,0x51,0x3c,0x5e,0x92,0x08,0x77,0xa4,0xca, \
-0xb3,0xe0,0xea,0x9c,0xca,0xc1,0x2e,0x24,0xec,0x39,0x85,0xf9,0x6d,0x3e,0x5b,0x4f, \
-0x1f,0x6c,0xac,0x5f,0xe9,0x4e,0x61,0x26,0x8c,0x0c,0x7a,0x8e,0x04,0x82,0x9c,0x51, \
-0x67,0x0f,0x65,0x28,0x5e,0xf6,0x5a,0x18,0x43,0x81,0x8e,0x0a,0xda,0x51,0xe3,0x70, \
-0x19,0x19,0xc2,0x35,0x66,0x4d,0x64,0xb7,0x03,0x4f,0xe8,0xdb,0xd5,0xc6,0xd6,0xc8, \
-0xdb,0xc2,0x86,0xf0,0xdc,0xbc,0xa7,0x9f,0x60,0x72,0x09,0x11,0x7a,0xeb,0xde,0x8c, \
-0xe9,0x55,0x10,0x85,0x3e,0x6c,0x81,0x1b,0x9a,0x3c,0x10,0x8e,0x80,0x87,0x66,0x8f, \
-0x2d,0x7c,0x98,0x3c,0x90,0x0f,0x26,0x11,0x60,0x2c,0x8a,0x12,0x7e,0x7f,0xe6,0x96, \
-0x49,0xed,0x60,0x72,0xd0,0x59,0x7d,0x98,0x26,0x31,0x47,0x96,0xbf,0x0f,0x2d,0xb6, \
-0xd6,0xad,0x59,0x5b,0xb2,0x93,0x56,0x88,0x93,0x47,0xc6,0x23,0xc1,0x11,0x36,0x29, \
-0x40,0x15,0xc5,0x41,0x4b,0x20,0x48,0x21,0xc2,0x96,0xac,0xfb,0x5d,0xa3,0x8f,0x87, \
-0x45,0x51,0x6b,0x10,0x5e,0x44,0x2a,0x89,0xd0,0x00,0x6a,0x5a,0x98,0x94,0x0d,0x31, \
-0x35,0x58,0xe4,0x45,0x46,0xb9,0xcc,0x70,0x61,0x09,0xa3,0x9d,0x8b,0x89,0x3e,0x4d, \
-0x62,0xf6,0x0b,0xad,0x81,0xdb,0x97,0x72,0x91,0x8a,0x8a,0x20,0x1a,0x38,0xfb,0x0c, \
-0xbb,0xc2,0x89,0x58,0x3b,0xf6,0x66,0x72,0xad,0xbf,0x08,0x01,0x69,0xe5,0xd7,0x29, \
-0xcc,0x2f,0xd9,0xae,0xb6,0x1a,0x8c,0x63,0x10,0x50,0x88,0x9e,0x5e,0x47,0xf3,0x75, \
-0x75,0x7a,0x27,0x76,0xf7,0xd2,0xd3,0xda,0xaf,0x7b,0x8f,0x0b,0x93,0xd3,0x88,0x3e, \
-0x62,0x01,0xd4,0xd0,0x23,0x78,0x8b,0xd8,0x44,0x86,0x64,0x60,0x69,0x40,0xf9,0xde, \
-0x73,0x52,0x56,0x0c,0x21,0x10,0x86,0x6a,0x8a,0x8c,0xe5,0x90,0x42,0x22,0x8a,0x9a, \
-0x9a,0x06,0x94,0x2e,0x0d,0x63,0x35,0x70,0xb0,0x09,0xb2,0xe7,0x49,0x04,0x52,0x5c, \
-0x2e,0x42,0x20,0xc7,0x3b,0xcc,0x11,0x61,0x64,0xe5,0x00,0x20,0x82,0xdd,0xbc,0x1c, \
-0x34,0x11,0x04,0xac,0x0b,0xc5,0x20,0xce,0xe8,0x58,0x1f,0x68,0xc1,0x81,0x8c,0x0c, \
-0x48,0x62,0x2a,0x6e,0x01,0x3f,0xad,0x98,0x5f,0x00,0x39,0x15,0x02,0xf6,0x6c,0x07, \
-0xd0,0x03,0x8a,0x84,0xa3,0xa5,0x20,0x5d,0x4d,0x09,0x01,0xe8,0xe1,0xa8,0x26,0x01, \
-0x10,0x4a,0x97,0x98,0x4a,0x3d,0x0c,0x03,0x05,0x0e,0x28,0xe0,0xde,0x38,0x79,0x38, \
-0xa3,0x50,0x62,0x47,0x98,0x98,0xba,0x08,0xf4,0xc3,0xc3,0x90,0xd0,0x80,0x42,0x9b, \
-0x1b,0x9b,0x8f,0x2a,0xe5,0x3d,0x3c,0x8a,0x58,0xbd,0xf3,0x81,0xb0,0x36,0x06,0x75, \
-0xa2,0x4b,0xd3,0xbc,0x58,0x4a,0x92,0x04,0x26,0x80,0xf4,0x0d,0xe7,0x17,0x6c,0x0d, \
-0x15,0x56,0x34,0x64,0xb7,0x62,0x70,0x87,0x38,0xc0,0xb2,0x23,0x20,0x16,0x53,0x28, \
-0xea,0xc3,0xe0,0xe2,0x0b,0xc2,0x46,0xd8,0x74,0x26,0x16,0x26,0xc0,0xb1,0x84,0x10, \
-0x0a,0xc6,0x5c,0x17,0x8b,0xa2,0x05,0xea,0xc2,0x8d,0xd4,0x38,0x19,0x5b,0x63,0x19, \
-0x48,0x64,0xab,0xeb,0x51,0xe7,0x66,0xdd,0x64,0x5d,0x8e,0x03,0xa2,0xf5,0x04,0x74, \
-0x34,0x77,0x6c,0x16,0x09,0xea,0xdb,0x03,0x05,0x57,0x6e,0x70,0x75,0x15,0x60,0x17, \
-0x0e,0x36,0x06,0x15,0xf5,0x57,0x7b,0xbc,0x71,0xbb,0x8a,0xb4,0x63,0x1d,0x61,0x6c, \
-0xf4,0x39,0x03,0x52,0xa0,0x6c,0xd0,0x24,0x04,0xba,0x61,0x4b,0x07,0x2b,0x6c,0x1b, \
-0x0c,0xad,0x47,0x60,0xc1,0x06,0x01,0x09,0x23,0x50,0x98,0x00,0x28,0xff,0x9f,0xcb, \
-0x94,0x5e,0xa0,0xf9,0x7a,0x93,0xc3,0x37,0x33,0xdd,0xb1,0x06,0x95,0x67,0x46,0x3e, \
-0xe7,0x66,0xb6,0x52,0x64,0x88,0x80,0x31,0x30,0xb9,0x37,0x58,0xbe,0xb0,0xb6,0x74, \
-0xad,0x38,0x70,0x88,0xf0,0x31,0x04,0xe8,0x05,0x14,0x43,0x4a,0x84,0x78,0x4e,0x86, \
-0x4e,0x40,0x07,0x20,0xb0,0xd4,0x20,0x1c,0xf2,0xc1,0x58,0x61,0x39,0x25,0xc1,0x70, \
-0xcc,0x38,0x82,0xb3,0xf4,0x06,0x30,0xb5,0xc3,0x9b,0x66,0xf9,0xd6,0x61,0xa7,0x4e, \
-0x63,0x0d,0x52,0xcc,0x33,0x37,0x28,0x44,0xc5,0x66,0x1d,0xa1,0x0d,0x8c,0x37,0x52, \
-0xc4,0x4d,0xe5,0x16,0x4b,0xb0,0x1c,0xdc,0xca,0x4d,0xa1,0x43,0x93,0x33,0x04,0x18, \
-0x8d,0x25,0xe1,0x30,0x06,0x0c,0x2c,0x37,0xc4,0x86,0xee,0x49,0x97,0xe4,0x60,0x6f, \
-0x44,0x8d,0x17,0x2a,0x91,0x36,0xa8,0xc3,0x00,0x3d,0xb8,0xa3,0xaa,0x90,0x36,0x9c, \
-0x97,0x2d,0x92,0x94,0xdb,0x21,0xd7,0xd8,0x4e,0x96,0x0d,0x97,0x92,0x4a,0xa8,0x89, \
-0x89,0x6a,0xc7,0x07,0x7f,0x46,0xb6,0x37,0x5e,0x15,0xdf,0x01,0xf0,0x5f,0xb3,0xda, \
-0xed,0xbf,0x2f,0x44,0x86,0x8f,0x1b,0x28,0xe4,0xda,0xc9,0x51,0x66,0x7f,0x9e,0x90, \
-0xca,0x06,0x44,0xe2,0x10,0xac,0x81,0x0e,0x28,0x43,0xa1,0x91,0xce,0xf5,0x58,0xa9, \
-0x33,0xf8,0xc4,0x2a,0xa3,0x6a,0x1a,0xb0,0x5b,0x48,0x09,0x46,0xf8,0xea,0x75,0x2f, \
-0x6e,0x95,0xe4,0x0e,0xd8,0x6e,0x58,0x2a,0x5e,0x9f,0x1f,0xa0,0x99,0xf4,0xb8,0x72, \
-0xd1,0x66,0xa1,0xa6,0x9a,0xf4,0xd0,0x84,0x1f,0x36,0x59,0x6c,0xbf,0xa2,0xa5,0x09, \
-0xd2,0x42,0x34,0x9b,0x06,0xdb,0x09,0x98,0x7a,0x72,0x86,0xca,0x86,0xcc,0xf2,0x5e, \
-0xb2,0x82,0x38,0x8c,0xc2,0x86,0x2e,0xc9,0x45,0xc2,0xc5,0x5a,0x9d,0x86,0x43,0x01, \
-0xc4,0x1d,0x8d,0xab,0x59,0x0c,0xbd,0xa1,0xdb,0xd7,0xcd,0x93,0x48,0xc8,0x2a,0xc8, \
-0xa4,0x8a,0x6d,0x80,0x25,0xa1,0x58,0xd6,0x0e,0xbb,0x1a,0xcd,0x84,0x6c,0x48,0xf7, \
-0x17,0x97,0xb0,0xc0,0xcd,0x66,0xcc,0xf6,0xc5,0x6e,0x61,0x40,0x09,0x60,0x8b,0xd6, \
-0x14,0xec,0x30,0x68,0xc6,0x36,0xd5,0x24,0x15,0xb7,0x6a,0x5e,0x70,0x12,0xc3,0xbd, \
-0x3e,0x20,0x5f,0x80,0x9a,0xa8,0xb4,0x60,0x30,0xfb,0xa4,0xa2,0x35,0xb9,0xcc,0x8c, \
-0x7b,0xb5,0xdd,0x42,0x83,0x1b,0xc1,0x84,0x45,0x14,0x8e,0x48,0x88,0x2b,0x04,0x29, \
-0x7b,0x49,0xac,0xeb,0xc8,0x9b,0xa6,0xe7,0x6a,0x57,0x41,0xbb,0x0b,0x05,0x8c,0x9f, \
-0x47,0x8e,0xfe,0x2b,0xe9,0xcc,0xdb,0x71,0x48,0x75,0xb4,0x0d,0xee,0xe8,0x66,0x32, \
-0x7c,0x39,0x74,0x1d,0xf6,0xaa,0x0a,0xa5,0x6d,0xb6,0x9a,0x0d,0xd2,0x79,0x6f,0x89, \
-0xe9,0x9b,0x24,0xab,0x38,0x30,0xb9,0xfc,0x1e,0x1e,0xfb,0x79,0x72,0xfc,0x76,0xd3, \
-0xf3,0xc4,0x96,0xfb,0x18,0x2d,0xf9,0x1d,0x00,0xf8,0xee,0xd5,0xe7,0x75,0x61,0xe6, \
-0xc0,0xa5,0x2d,0x4a,0x77,0x6f,0xec,0xc1,0xfc,0xb5,0x25,0x9b,0xfb,0x8f,0xea,0x65, \
-0x91,0xf7,0x79,0x87,0x4e,0x78,0x1b,0xa4,0x57,0x66,0x41,0xe2,0x1d,0xdb,0xb8,0x77, \
-0x62,0x75,0x0b,0x33,0xca,0x0b,0xce,0x0b,0x90,0x96,0xc6,0x02,0xc8,0x19,0x02,0xe8, \
-0xc3,0xa9,0xfe,0xbf,0x92,0xe1,0x7a,0x0f,0x73,0x6d,0x09,0xbe,0x61,0x65,0xee,0xd5, \
-0xa5,0x40,0xc2,0x95,0x45,0xc6,0xc5,0xf6,0x14,0x02,0xc6,0xa1,0xfe,0xc6,0x2a,0x02, \
-0xb1,0x4f,0x9b,0xe7,0x38,0x60,0xf6,0xbe,0x52,0x77,0xe4,0xc7,0x85,0x93,0xfb,0x4f, \
-0x81,0x57,0xf0,0x4d,0x0f,0xab,0xd3,0xc4,0x00,0xb3,0x36,0xfb,0xa1,0xe1,0x8c,0x7b, \
-0x2c,0x5b,0xf7,0x50,0x5b,0x7d,0x85,0x0f,0x18,0xcf,0x3f,0x14,0x0e,0x1c,0x8e,0xfe, \
-0x20,0x71,0xb1,0xa5,0x4a,0xc2,0x72,0x40,0x84,0x56,0x94,0x8b,0x2f,0xc8,0x36,0xc4, \
-0xde,0x44,0x78,0xc0,0xe6,0x90,0x43,0x91,0xac,0x12,0xef,0x38,0xf8,0xff,0x87,0xba, \
-0xb3,0x6f,0x43,0x69,0xef,0x15,0x10,0x64,0x15,0x64,0x11,0x60,0x8c,0x15,0x64,0xab, \
-0xf9,0xd9,0xc0,0x33,0x58,0x21,0xe2,0x85,0x45,0x91,0x52,0x2c,0x2a,0x63,0xaa,0xba, \
-0x63,0x63,0x14,0xd7,0x08,0x4a,0xe7,0xa5,0xa3,0x7d,0xf6,0x5a,0xa1,0xe9,0x62,0x30, \
-0x20,0xc8,0x15,0xd6,0xff,0x3c,0x53,0x68,0x47,0x6b,0x0c,0xfe,0x5f,0x7c,0x9a,0x59, \
-0x6a,0xaf,0x47,0xaa,0xa5,0xf9,0xc0,0x6b,0x5e,0xc9,0xea,0x66,0xcc,0xb5,0x54,0x0c, \
-0xf7,0x08,0xfa,0x46,0x83,0x69,0xfb,0xe3,0xb5,0xce,0xcc,0x30,0x24,0x96,0x36,0xc7, \
-0x84,0x51,0xcd,0x21,0xd1,0x92,0x3c,0x55,0x74,0x98,0x4c,0xcc,0x23,0xa9,0x29,0x22, \
-0x24,0xe7,0xa8,0x18,0x04,0x79,0x9d,0x01,0x4d,0xc4,0x8c,0x2c,0xd2,0x30,0x9d,0xe7, \
-0x05,0x16,0x68,0x9c,0x3e,0xfd,0xa1,0x80,0x9c,0x58,0x0a,0x06,0x8c,0x37,0x78,0x6d, \
-0x30,0xfa,0x3c,0x3c,0xb8,0xed,0xc0,0xfc,0xd9,0x76,0x63,0x00,0xe9,0x13,0x3a,0x69, \
-0x23,0x24,0xfc,0xe6,0x04,0xc0,0xee,0x62,0x28,0xc0,0x6f,0x7b,0x12,0xa5,0xc7,0x86, \
-0xee,0x34,0xe9,0xee,0x8b,0xfd,0x3b,0x83,0x1c,0xf6,0x28,0x7f,0x77,0x54,0x55,0x2d, \
-0x87,0x2d,0xce,0x95,0x9d,0x80,0xd6,0xc0,0xe3,0x74,0x9c,0xe8,0x1f,0x88,0xc0,0x34, \
-0xd4,0xd1,0xc6,0x58,0x76,0xb0,0x80,0xee,0x19,0x03,0x63,0xe3,0x3f,0x1e,0x60,0xcd, \
-0xe6,0x48,0xaf,0x09,0x10,0x51,0xfd,0x9d,0x17,0x10,0xf7,0x71,0x87,0xc7,0x3e,0x5b, \
-0x4f,0x46,0x4a,0x47,0xca,0xde,0xa8,0x26,0xee,0x0c,0x33,0x20,0xff,0x49,0xc2,0xcc, \
-0xe6,0xda,0xf6,0x04,0xff,0x7e,0x4b,0x3f,0x2f,0xcd,0x3e,0x7d,0x89,0xbf,0xe7,0x60, \
-0x9f,0xe2,0x93,0x3a,0x2a,0x34,0x60,0xb9,0x44,0x34,0x12,0xc4,0xd8,0x6f,0x6a,0x2b, \
-0xc7,0x2a,0x24,0x50,0x4f,0xdf,0x7e,0xa7,0x02,0x97,0x1e,0x06,0xbc,0x8b,0x8f,0x76, \
-0x76,0xca,0xc1,0x08,0x64,0xcd,0xca,0x6e,0x2b,0x42,0x08,0x90,0x50,0xa0,0x47,0xcf, \
-0x63,0xdd,0xb1,0xac,0x25,0xee,0x35,0x68,0x9a,0x50,0x20,0x89,0x0e,0x5a,0xb2,0x8d, \
-0xf6,0x20,0x1f,0xa3,0x8b,0xd5,0xd0,0x65,0x71,0x11,0x1e,0x6a,0x5b,0x68,0x5a,0x62, \
-0xe2,0x87,0x54,0xae,0x4b,0x60,0x3a,0x61,0x38,0xc8,0x06,0xa0,0x0a,0x20,0x51,0x4c, \
-0x65,0x88,0x39,0x59,0x7c,0xe1,0x44,0x33,0x48,0x3a,0x61,0x30,0xf3,0x2a,0x1d,0x36, \
-0xef,0x0f,0x0f,0x37,0x99,0x56,0x1d,0x86,0x19,0xc2,0x9f,0x98,0x85,0x66,0xbd,0x24, \
-0x64,0x92,0x33,0xce,0x1f,0x62,0x17,0x4d,0x1a,0x5e,0xf2,0xa1,0xd7,0x8b,0xbf,0x7e, \
-0xde,0xc4,0x02,0xee,0x88,0xdc,0x1d,0xfa,0x07,0xb2,0x26,0x39,0x41,0x97,0xbe,0x22, \
-0x09,0xdd,0x10,0x77,0x0a,0x1c,0xe9,0x70,0x79,0x2d,0xca,0x72,0x64,0xf7,0xe7,0x5b, \
-0x58,0x89,0x7c,0x64,0x0c,0x36,0x14,0x1e,0xed,0x07,0xb7,0x67,0x0d,0xb8,0x1f,0x55, \
-0xa8,0x7b,0x61,0xb7,0xe3,0xf6,0x28,0x00,0x7f,0xd8,0xbb,0x34,0xfe,0x5d,0x96,0x7a, \
-0x3c,0xc2,0x9f,0x2d,0xd8,0x3b,0xc3,0x87,0xd9,0xf7,0x0f,0x71,0xf0,0x88,0x30,0x1f, \
-0xae,0x3d,0x94,0x55,0x92,0x7e,0x6e,0xe6,0x6f,0x8b,0x0f,0xe3,0xc8,0xba,0x8f,0x16, \
-0x95,0x76,0xe8,0xd7,0x63,0x37,0x1f,0xff,0x8b,0xb9,0x22,0x9c,0x28,0x48,0x33,0xdb, \
-0x1b,0xdd,0x00, \
+0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0xb7,0x4e,0x95,0xaa,0x00,0x1a,0x4f,0x5f, \
+0x80,0x72,0x70,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x60, \
+0x4d,0xc5,0x07,0xa0,0x0f,0xa1,0x6d,0xc2,0xbd,0x00,0x17,0xbe,0xd6,0xf7,0xad,0x34, \
+0x28,0xa0,0x19,0xd7,0x75,0x45,0xa6,0xa0,0x04,0x26,0x9a,0x1e,0xb0,0x85,0x5c,0xce, \
+0x80,0xe1,0xf7,0xd8,0x01,0x06,0x83,0xd1,0xf7,0xde,0xef,0x9e,0x6b,0x79,0x0f,0x72, \
+0x97,0x9b,0x5a,0xf9,0xb9,0xcd,0x52,0xaa,0xd6,0x33,0x6b,0x58,0x35,0xf6,0xdc,0xf6, \
+0x5b,0x28,0xbc,0xc6,0xf5,0x5f,0x40,0x76,0x01,0x4c,0xf4,0xed,0x5e,0xe7,0x14,0xfa, \
+0x72,0x72,0xa8,0x35,0xae,0x97,0xb3,0x83,0x71,0x0a,0xa3,0x5a,0xdd,0xed,0xde,0xc7, \
+0x94,0xee,0xe7,0x5b,0x9b,0x87,0x96,0x8d,0x49,0x93,0x58,0x2b,0x36,0x73,0x39,0x76, \
+0xb5,0x51,0xdd,0x9d,0x69,0x9b,0x6a,0x4a,0x57,0x8b,0xd7,0x45,0xe8,0x61,0x4b,0x6d, \
+0xb0,0x69,0x24,0x55,0x49,0xb3,0x42,0x45,0x0d,0x5b,0x0a,0xe6,0xd6,0x1a,0x2f,0x3b, \
+0x55,0x36,0x37,0x75,0xd6,0x05,0x6e,0x36,0x62,0x4b,0xdb,0x51,0xac,0xd3,0x24,0x6d, \
+0x6e,0x16,0xf8,0x35,0x31,0x04,0xc8,0x00,0x10,0x00,0x99,0x32,0x68,0x0d,0x09,0x90, \
+0x9b,0x44,0x65,0x1b,0x13,0x46,0x54,0xf1,0xa5,0x3f,0x4c,0x93,0x4c,0x46,0x83,0x4d, \
+0x01,0x04,0x10,0x10,0x13,0x41,0x34,0xc9,0xa9,0xe4,0x69,0x35,0x19,0x89,0x31,0x0d, \
+0x1a,0x7a,0x83,0x4d,0x1a,0x68,0x62,0x00,0x34,0x0d,0x30,0x90,0x49,0xa5,0x34,0xc5, \
+0x40,0xfc,0xa9,0xed,0x53,0x46,0x41,0xa3,0xd4,0x19,0x06,0x40,0x34,0x00,0x00,0x00, \
+0x01,0xa6,0x80,0x93,0x4a,0x20,0x82,0x34,0x00,0x82,0x62,0x4d,0xa8,0xd4,0xc1,0xa6, \
+0x4d,0x35,0x36,0x89,0xb4,0x93,0xd4,0x0f,0x09,0x07,0xa9,0xa3,0xd4,0x03,0x20,0x68, \
+0x22,0x50,0x80,0x92,0x7e,0x85,0x3d,0x35,0x36,0xa6,0x4c,0x93,0x6a,0x7a,0x1a,0xa7, \
+0xa7,0xaa,0x6c,0x6a,0x62,0x8f,0x53,0x46,0x9b,0x48,0x19,0x01,0xa1,0xa3,0x26,0x80, \
+0x00,0x91,0x11,0x34,0x02,0x68,0x13,0x40,0x4d,0x34,0x34,0x4c,0x40,0x34,0x98,0xa7, \
+0xa6,0xa9,0xb1,0xa1,0x21,0xa1,0xe4,0xd4,0x64,0xd0,0x32,0x68,0x69,0x3f,0xcc,0xfd, \
+0xdf,0x56,0x1f,0x31,0x79,0xbe,0x73,0x08,0xba,0xa1,0xff,0xf9,0x4d,0x64,0x4f,0xf5, \
+0x2e,0x4f,0xa0,0x6f,0xc1,0x88,0x7f,0xc4,0x49,0xe8,0x6b,0xad,0xcb,0x12,0xbd,0xf1, \
+0x98,0x27,0xba,0x4f,0x9c,0x69,0x09,0x19,0xdd,0x13,0xdc,0x42,0x8a,0xbf,0x58,0x2c, \
+0xaa,0x29,0x7e,0x2d,0x62,0xd6,0x09,0xc9,0xf4,0xfa,0x24,0xe6,0xd9,0x04,0x8f,0xe9, \
+0x59,0x90,0xa0,0xbc,0x27,0x91,0xb7,0x38,0xfd,0x94,0xd0,0x2c,0x7f,0x6e,0x57,0x1f, \
+0xea,0x66,0x73,0x22,0x73,0x7e,0xd6,0xf9,0x7f,0x4c,0xd6,0x3c,0x27,0xf7,0xf3,0xd7, \
+0x48,0x34,0x58,0x76,0x02,0x28,0x19,0x1d,0x99,0x0c,0x51,0x4b,0x15,0x4e,0x73,0xa9, \
+0x6f,0x96,0x38,0xe2,0xbd,0x97,0x46,0xd2,0x64,0x87,0x34,0x95,0x7f,0x2c,0x3c,0xd4, \
+0x9a,0x7f,0x89,0xe5,0x8a,0x0d,0xed,0x5a,0xca,0x49,0xd8,0xea,0xaa,0x8e,0xc6,0x3d, \
+0xfe,0x32,0x61,0x6f,0x05,0xf9,0xfe,0x43,0x69,0x17,0x20,0x0c,0x0a,0xdc,0xa0,0x21, \
+0x31,0xff,0xb2,0xe3,0xfe,0x58,0x8a,0x50,0xf9,0x13,0xbf,0x92,0x07,0xf5,0x99,0xa8, \
+0xb8,0xea,0x60,0xfc,0xd6,0x24,0xd9,0xee,0xfd,0xff,0x13,0x8b,0x43,0x03,0x5d,0xa6, \
+0x00,0xf5,0xab,0x96,0x61,0x7d,0x7c,0x43,0x27,0xf5,0xc3,0x35,0x13,0x74,0xd5,0xfc, \
+0x57,0xd7,0xff,0xde,0x2b,0x52,0x6f,0xe8,0x66,0xbb,0x17,0xf3,0xf2,0x0e,0x8b,0x03, \
+0xb5,0xf7,0xfc,0xa3,0xe6,0x96,0x81,0x9c,0x74,0xe4,0xc1,0x1d,0x5d,0xa9,0x12,0x06, \
+0x5e,0x22,0xa6,0x79,0x90,0x0c,0x4b,0xfd,0x72,0x44,0xdc,0x36,0xe4,0xec,0xcb,0x35, \
+0x69,0x62,0xb7,0x92,0xe7,0x77,0x64,0xbc,0x54,0x3b,0x6f,0x46,0xdc,0x02,0xa0,0xc8, \
+0xf4,0xca,0xa8,0x11,0x12,0x94,0x40,0x88,0x88,0x8b,0xfd,0xf8,0xf8,0xf6,0x5f,0x7d, \
+0xf0,0x08,0xc8,0xa0,0xa2,0x7e,0x9e,0xda,0x7b,0x20,0x85,0x49,0xc7,0x77,0xd7,0xd9, \
+0xef,0xe8,0x7c,0xfe,0x6f,0x4d,0xdc,0x3d,0x05,0x34,0x49,0x27,0x7e,0xc3,0x1d,0x05, \
+0xa7,0x6c,0x42,0x24,0xc2,0x38,0x60,0x70,0xe9,0x61,0x19,0x56,0xad,0xc9,0xb3,0x04, \
+0xa9,0xd1,0x18,0xdd,0x45,0x53,0xa8,0x35,0x4c,0xf8,0x09,0x1f,0x1b,0x1b,0x7c,0x7a, \
+0xa9,0x2d,0xd7,0x73,0x45,0x15,0x7a,0x1a,0x2a,0x5e,0xeb,0x5d,0x1e,0x7a,0x5b,0x72, \
+0xd3,0x20,0x30,0xab,0x6f,0x02,0x26,0x15,0x8c,0x61,0x27,0x3d,0x6a,0xcc,0x8e,0x05, \
+0x90,0x76,0xde,0xe6,0x51,0x15,0x77,0xe7,0xc9,0x25,0xc4,0xa9,0xca,0x7e,0x98,0xad, \
+0x5d,0x32,0x5d,0x54,0xe8,0x03,0x28,0x2a,0x5c,0x60,0xb0,0x58,0xfd,0x0a,0xb7,0x94, \
+0x4b,0xbe,0xf7,0xaa,0x13,0x26,0x75,0x86,0xa6,0x2e,0x6b,0x81,0x52,0x4e,0xcf,0xd1, \
+0x9a,0x4a,0x46,0x98,0xe5,0xec,0x95,0x76,0xdf,0xce,0x03,0x73,0xf2,0x2b,0x12,0x94, \
+0x80,0x94,0xa2,0x25,0x66,0xfa,0x75,0xf4,0x33,0xe0,0x86,0x0b,0x85,0x78,0xf1,0xdb, \
+0x2c,0xfd,0x21,0xfb,0x0a,0x7c,0x43,0xe7,0xcb,0xf3,0x43,0x28,0x37,0x04,0x38,0xcb, \
+0xa9,0x62,0x63,0x0e,0x9f,0xc4,0x6c,0xcb,0x86,0xd4,0x8b,0x46,0x2e,0xcc,0x9b,0xf6, \
+0x3b,0x71,0xe6,0xe3,0x0c,0x02,0xa2,0xe8,0xda,0x71,0x8a,0x29,0x4b,0xf3,0x6e,0x4a, \
+0x70,0x9d,0xe0,0xea,0xc1,0x5b,0x06,0xc2,0x85,0xf8,0xe7,0x13,0xd5,0x1e,0x61,0x77, \
+0x20,0x20,0xb0,0x56,0x2b,0x47,0x20,0xdb,0xd7,0x60,0xa8,0x6c,0x8f,0xaf,0x00,0x5e, \
+0x3b,0x0c,0x31,0x86,0x25,0xe8,0x8a,0x7e,0x88,0x63,0xbb,0x3f,0x3f,0x0f,0x09,0x06, \
+0x2e,0x15,0xd1,0x8f,0x37,0xed,0xcf,0x98,0x55,0x64,0xb7,0x46,0x47,0xd7,0x26,0x7e, \
+0x4c,0xf3,0xf7,0xe3,0x1a,0xc1,0x4c,0x1b,0x62,0xa3,0x91,0x8b,0xdc,0xf1,0xa6,0x46, \
+0x0e,0x70,0xf6,0x96,0x82,0x17,0x09,0x8c,0xc6,0xdd,0x98,0x9b,0xb4,0xa1,0xab,0x44, \
+0x63,0x6d,0x18,0x65,0x36,0xf2,0x62,0x4d,0x99,0x72,0x85,0x38,0x86,0x55,0xe5,0x5a, \
+0x84,0xbf,0x66,0x30,0x44,0x0d,0xb1,0xb2,0x25,0xcf,0x4f,0xee,0xef,0xc7,0x5b,0x5b, \
+0xca,0x86,0xfc,0x28,0x33,0xfc,0x3b,0x8e,0x74,0xdc,0x3e,0xe2,0x27,0xc2,0x93,0x96, \
+0x5a,0x66,0x5f,0xd4,0xc0,0xff,0x4f,0x22,0x0b,0xe9,0x3c,0xc4,0x3e,0x5b,0x0f,0x9f, \
+0x8a,0x74,0xd4,0x41,0x94,0x1d,0x04,0x06,0x69,0x79,0xd6,0xf9,0x78,0x39,0x43,0x8e, \
+0x83,0xb2,0x5e,0x3a,0x93,0x3b,0x9a,0x50,0x74,0x36,0xea,0x6c,0x79,0xf6,0xb3,0x71, \
+0x9b,0xfa,0x78,0x66,0x78,0x75,0x39,0xc7,0x8d,0xb8,0xb0,0x6b,0x4f,0x09,0xaa,0xd3, \
+0x21,0x88,0xb2,0x84,0xc0,0x9b,0xcf,0x3a,0xdb,0xcf,0xc7,0x0e,0x4f,0x8f,0x53,0x1a, \
+0xcf,0xef,0x78,0xc9,0xdb,0x78,0xd2,0x92,0xe3,0x2d,0x1b,0x5d,0x9c,0x6c,0x0f,0xb3, \
+0x66,0x47,0xaa,0x39,0x6c,0xce,0x4e,0x63,0x71,0x0e,0x34,0xf1,0xcb,0x4a,0x06,0x5b, \
+0x52,0xe2,0x8b,0x17,0xa3,0x47,0xb7,0x92,0x71,0x18,0xa6,0x5e,0x20,0x01,0x58,0x60, \
+0x18,0x21,0x40,0x30,0xbd,0x34,0x05,0x7e,0xe5,0x82,0x1d,0xdd,0x6c,0xbf,0x6f,0xc3, \
+0x0f,0x8d,0x2a,0x90,0xf2,0x3a,0x7e,0x30,0x7b,0x41,0xa4,0x95,0x18,0xd8,0xbf,0x38, \
+0x80,0x33,0x24,0x22,0x59,0x08,0x01,0x91,0xc2,0x95,0x21,0x02,0x23,0x68,0xb4,0x61, \
+0xb8,0x83,0x6c,0xb7,0xf4,0xff,0x2c,0x4b,0x4f,0xb3,0xb3,0xc9,0xed,0xba,0xd6,0xfd, \
+0x8e,0xc8,0xf0,0x26,0x8e,0x27,0x17,0x79,0x05,0x9a,0x67,0x86,0xbb,0x63,0xf6,0x39, \
+0xcf,0x5d,0x6b,0xf0,0x59,0x66,0x3e,0xc4,0x30,0x4c,0x4d,0x95,0x20,0x1c,0xf6,0xad, \
+0x13,0xfd,0x76,0xe6,0x47,0x17,0xb3,0x7b,0xa5,0xe1,0xd7,0x7e,0x04,0x5d,0x93,0x53, \
+0x09,0x77,0x0a,0x27,0x1e,0xa7,0x94,0x92,0x86,0x45,0xfe,0xc1,0xed,0x1e,0x0f,0x9d, \
+0x2c,0x3e,0xe3,0xf5,0x94,0x61,0x9c,0xf8,0x69,0xd2,0xaa,0xa4,0x11,0x52,0xf4,0x1e, \
+0x0c,0x01,0x87,0xdd,0xeb,0xcd,0xf4,0xb6,0x6a,0x7e,0x43,0x91,0x06,0xca,0xb0,0x27, \
+0x02,0x4b,0x11,0x0b,0x2d,0xbe,0x54,0x41,0x40,0xd6,0xa6,0x48,0xf0,0x5a,0x36,0xf3, \
+0x4b,0x97,0x03,0xc4,0xef,0x65,0x02,0xf6,0x54,0x24,0x0f,0xa7,0x8a,0xd9,0xd6,0x09, \
+0x42,0x84,0xb1,0xf4,0xb0,0xbb,0x5f,0xba,0x9b,0x7e,0x7a,0xb2,0x7c,0xc3,0xcb,0x7e, \
+0x7a,0x78,0xb6,0x24,0x88,0x4f,0xa1,0x9d,0x22,0x96,0xaa,0x65,0xab,0x59,0xa2,0xbd, \
+0x0b,0x44,0x07,0x51,0x55,0x09,0xdc,0xb1,0xe9,0x21,0x28,0x50,0x7e,0xf5,0x58,0xe6, \
+0x1e,0x69,0x3c,0x6d,0x68,0x7d,0x7a,0x5f,0xb8,0x57,0xe1,0x95,0x85,0x19,0xf5,0xe3, \
+0x97,0xad,0xf4,0x1f,0x8a,0xd2,0x3b,0x2e,0xa7,0x5a,0xa5,0xcc,0x41,0x55,0xdd,0x5b, \
+0xb1,0xd4,0x3c,0xbf,0x20,0x9b,0x10,0xf6,0xfc,0x1e,0x1f,0xa0,0xcc,0xd0,0xea,0xf4, \
+0x7c,0x4f,0x76,0xb1,0xd8,0x44,0x27,0xdc,0xe7,0xae,0x25,0xc4,0x1f,0x2a,0x01,0xc4, \
+0x30,0x87,0xd7,0x46,0x1e,0x03,0x36,0x6a,0x4a,0x0a,0xd0,0x47,0x36,0x70,0xd8,0xd5, \
+0xaf,0x03,0xb2,0x24,0x30,0x8e,0xbd,0x18,0xbf,0xbf,0xb3,0xbb,0x02,0xf1,0x75,0x07, \
+0x80,0x77,0x6d,0x71,0x6e,0xc5,0x8b,0x2a,0x82,0x14,0x11,0x66,0x6d,0x34,0xbb,0x7b, \
+0x0f,0xf4,0xd8,0x51,0x6c,0x2f,0x57,0xa1,0x04,0xe1,0x7b,0x9c,0x73,0xde,0xc2,0xed, \
+0xd2,0xbc,0x9e,0x1a,0xb7,0xbb,0x30,0x53,0x96,0x58,0x83,0x7e,0x90,0x2c,0xea,0x05, \
+0x52,0x95,0x0d,0x67,0x8d,0x1e,0x53,0xd3,0x32,0x2a,0x3b,0xbc,0xcf,0x62,0x3b,0xcf, \
+0x08,0x5a,0xaf,0x59,0xd9,0xf4,0xfd,0x6a,0xe4,0xe0,0xd1,0x21,0x87,0x3d,0x6b,0x78, \
+0x89,0x5d,0x0b,0x1b,0x4c,0x11,0xe3,0x96,0x1c,0xa8,0x09,0xfa,0xd5,0x43,0xa4,0x1a, \
+0x42,0x2f,0xe8,0x60,0xc3,0xbd,0x46,0xb1,0x61,0x65,0x98,0x71,0xa1,0x66,0x50,0x15, \
+0x89,0x7f,0x67,0xae,0x05,0x76,0x8d,0xef,0x50,0x4a,0x5c,0x8f,0xa3,0xa2,0x9f,0x83, \
+0xca,0xa0,0x63,0xf9,0xd5,0x50,0xeb,0x3e,0x37,0x7d,0xbe,0xcd,0xbb,0x34,0xc1,0xad, \
+0x73,0xd1,0xfe,0x90,0x37,0x3c,0x08,0x10,0xca,0x06,0xf0,0x40,0xc2,0xa9,0x62,0x6c, \
+0x30,0xcf,0xdb,0xbe,0x87,0x58,0xf5,0xca,0x90,0x5a,0x47,0xbd,0xa8,0x57,0x99,0xb5, \
+0xf4,0x36,0xf3,0xd6,0xb3,0x63,0xe8,0xe7,0xe9,0x75,0x2d,0x50,0x4e,0xbb,0x41,0x21, \
+0xed,0x1c,0x63,0xa9,0x87,0x81,0x7d,0xed,0x93,0x3f,0xa2,0xb9,0xf6,0x7c,0x18,0x4f, \
+0x9c,0xf2,0xcb,0xdc,0xec,0x22,0xb8,0x43,0x4d,0x97,0x78,0x13,0x6a,0xf9,0xca,0x77, \
+0x02,0x7c,0xee,0x06,0x8c,0x29,0x92,0x1c,0x0a,0x8c,0xe9,0xe7,0x84,0x8b,0xec,0x4f, \
+0xad,0xb2,0x67,0x3f,0x6f,0xc3,0xdd,0xa3,0xed,0x95,0x63,0xec,0x27,0x57,0x61,0x0d, \
+0x6e,0x4e,0x48,0xe5,0x1e,0x1a,0xc7,0xd5,0x99,0x6f,0x7f,0x46,0xb6,0x62,0xcb,0x4d, \
+0x2d,0x7c,0x74,0xd2,0x75,0xb8,0x58,0x5e,0x80,0xb9,0x67,0x24,0x7b,0x57,0x3e,0x13, \
+0x9e,0xdc,0xfb,0x8c,0x20,0x6b,0xfb,0x2f,0x4e,0xfd,0x16,0x60,0x08,0xed,0x00,0x87, \
+0xa1,0x78,0xa7,0x5e,0x02,0x46,0x00,0x20,0x28,0x7d,0x22,0x18,0xcc,0x0a,0x43,0x35, \
+0xa1,0x30,0xe3,0xe4,0xca,0x39,0x5d,0xf0,0xae,0x67,0x87,0x65,0x57,0xbf,0x75,0xec, \
+0xbb,0x97,0x95,0xdc,0xf4,0x7c,0x75,0xc8,0x31,0x7b,0x50,0xab,0xd4,0xa3,0x6e,0x71, \
+0x0e,0x3c,0xee,0x87,0xa5,0x2e,0xa2,0x89,0xd6,0x61,0x58,0x5b,0xd2,0xa4,0x2d,0x14, \
+0x8d,0x65,0x79,0x16,0x07,0x42,0x14,0xd2,0x4c,0xa0,0x30,0x5f,0xde,0x18,0xeb,0xe5, \
+0xea,0x8e,0xd3,0x54,0x1b,0x21,0x01,0x18,0x41,0x45,0xec,0xb6,0x45,0x75,0xc5,0xc4, \
+0x9f,0x32,0x13,0x74,0x80,0x61,0x83,0x69,0x21,0xb0,0x07,0x68,0x86,0x80,0x68,0x68, \
+0xc3,0x8b,0x32,0x9d,0xf7,0xef,0xf5,0xf8,0x66,0xbe,0xcf,0x75,0xd6,0xbe,0xb3,0x76, \
+0xeb,0x44,0xcb,0x63,0x53,0x6d,0x3f,0x9d,0x7e,0xf5,0x77,0xcc,0xf1,0x77,0x6f,0x38, \
+0xea,0x5b,0x26,0x33,0xea,0x85,0x40,0x15,0x4c,0x85,0x80,0xa2,0x6f,0x50,0x2e,0xd3, \
+0x6a,0xdc,0xcb,0x18,0x3d,0x9f,0x1f,0x3d,0x88,0xf8,0xe6,0xf2,0x97,0x29,0xde,0xd4, \
+0xeb,0xed,0x16,0x0b,0xf3,0x87,0xbf,0x25,0xa3,0x62,0xae,0xba,0x37,0xca,0xad,0xee, \
+0x7c,0x30,0x3e,0xdd,0xa6,0x11,0x42,0x97,0xa6,0xc6,0x30,0x24,0xdd,0x55,0xa4,0x1f, \
+0xa9,0x48,0xe0,0xee,0xe4,0x50,0xfc,0x50,0xc5,0xe4,0xc4,0x0e,0x8e,0x52,0x5d,0x2b, \
+0x75,0xb6,0x67,0xc7,0x38,0x2d,0xc3,0xf8,0x4c,0x9b,0x9b,0x1b,0x1f,0xd4,0xe0,0x4d, \
+0xb9,0xee,0x73,0x30,0x87,0xc7,0xbf,0xb5,0x42,0xed,0x3f,0x87,0xdd,0xf5,0x74,0x2b, \
+0x9b,0xcb,0xae,0xd1,0x3e,0x13,0x0a,0xa5,0x73,0xe1,0xa5,0x2a,0xeb,0x4e,0x38,0x73, \
+0x75,0x3e,0x3c,0xdb,0x53,0x50,0xd0,0xe7,0x35,0x81,0x7f,0x53,0xff,0x56,0xbf,0x74, \
+0xba,0x0e,0x86,0x49,0xa2,0x46,0x50,0x49,0xff,0x7f,0xba,0xaf,0xd9,0x8a,0xc9,0xde, \
+0xae,0xb9,0x13,0x9a,0x4c,0x3a,0xd9,0x2d,0x8e,0x9a,0x0c,0xa8,0x21,0xf2,0xba,0x70, \
+0x4d,0x0e,0x99,0x71,0x13,0xaa,0x91,0xc4,0x8f,0xd5,0x39,0x9b,0x69,0xf1,0xef,0xb3, \
+0xd7,0x77,0xb3,0x58,0x1c,0xb7,0xe7,0xd2,0xee,0x91,0xdf,0xa2,0x5e,0x37,0xdd,0x44, \
+0xef,0xda,0x32,0x3e,0xda,0x01,0x27,0x43,0xa6,0x7d,0x3f,0x4c,0x26,0xea,0x75,0xcd, \
+0xe5,0x52,0xd5,0xb9,0x44,0x04,0xb3,0x79,0x93,0x6c,0x73,0xce,0xd3,0xe4,0x1a,0x3a, \
+0xcf,0x3e,0x32,0xcf,0x98,0xff,0xe5,0xc6,0x31,0xfe,0xb4,0x4c,0x22,0x5a,0xbf,0x6f, \
+0xbf,0x18,0xa7,0x54,0xb8,0xfa,0x4b,0x23,0x9c,0x33,0xc4,0x37,0x4d,0xf5,0xfa,0x70, \
+0xec,0xeb,0x7b,0x6b,0x1f,0xbe,0xff,0xf5,0xcb,0xf0,0xe9,0xdd,0xe6,0xdb,0x9d,0x8a, \
+0xff,0x56,0x62,0xe2,0x52,0x85,0x5c,0x49,0x0e,0xfc,0x60,0x3b,0xb7,0x57,0x19,0x28, \
+0x37,0x38,0x21,0xc5,0xd5,0x87,0x08,0x41,0xdf,0x29,0xb7,0x41,0x67,0x1e,0xda,0x98, \
+0xf7,0x36,0xbd,0x4b,0x4e,0x59,0xe5,0x75,0x46,0xc6,0x07,0x14,0x0b,0xb1,0xe2,0xd2, \
+0x2f,0x01,0xad,0x23,0x7f,0x19,0xaa,0x7e,0xc0,0xf3,0xf7,0xce,0x0e,0x81,0xe6,0x5b, \
+0xa0,0x4c,0xb4,0xf9,0x0d,0x28,0x29,0x49,0xef,0xde,0xcf,0x9d,0x65,0x88,0xb5,0xef, \
+0x7e,0x06,0x3c,0xa2,0x33,0x9f,0x0d,0x63,0x01,0x7b,0x10,0x16,0x86,0xea,0x3d,0xf9, \
+0xe1,0x78,0x4c,0xee,0xbc,0x77,0xf8,0x34,0xfe,0xb2,0x32,0x88,0xdd,0x2b,0x67,0x6c, \
+0x8b,0xc3,0x15,0x5c,0xa0,0x62,0x10,0x40,0xf2,0xf3,0x7b,0xf9,0x04,0xcb,0xb9,0xa2, \
+0x12,0x4a,0xc1,0x06,0x1d,0x88,0x64,0x2d,0xbd,0xa3,0x09,0x2a,0x22,0x53,0x01,0xb7, \
+0x80,0x28,0x30,0x3e,0x15,0xcb,0x7f,0x9f,0xb7,0x64,0x8c,0xb9,0xe0,0x7d,0x84,0x6a, \
+0xc0,0x54,0x29,0x19,0x37,0x5a,0xe2,0x59,0x90,0x9b,0x34,0xe5,0x58,0x3d,0xba,0xf0, \
+0x20,0x7b,0x18,0x3f,0x00,0x82,0xd9,0x88,0x03,0x9d,0x51,0x43,0x58,0x72,0x82,0x4c, \
+0x44,0xc1,0xa6,0x48,0x0d,0x11,0xaf,0x66,0x12,0xd7,0xf7,0x38,0x4c,0x70,0xe5,0x97, \
+0x48,0x1a,0x58,0x6f,0xd5,0xb9,0xd9,0xb9,0xfe,0x4a,0xfc,0xa9,0x90,0x78,0xe1,0x51, \
+0x81,0x3c,0xb0,0xbe,0x18,0x54,0x6f,0xd7,0xa6,0x4e,0x7d,0xd9,0x04,0xb2,0x48,0xbb, \
+0x97,0x0b,0x6b,0x17,0xbf,0xeb,0xaa,0x93,0x9c,0x2e,0x33,0xf4,0xc9,0x56,0x12,0x68, \
+0x1c,0x53,0x9a,0x8a,0xe2,0xe5,0x63,0x84,0xa7,0x33,0x03,0x6a,0xc9,0x9b,0x78,0x7c, \
+0x81,0xe7,0x24,0xa1,0x3f,0x0f,0x8e,0x6a,0x18,0x7e,0x56,0xdc,0xb2,0x6c,0xcb,0xc2, \
+0x0a,0x81,0x21,0x34,0x2d,0xc6,0x74,0x1e,0x03,0x62,0xc2,0xc8,0x05,0x9a,0xe3,0xb2, \
+0x6a,0xc2,0xdb,0x4b,0x1f,0x82,0x5c,0x17,0x3b,0x0c,0xa4,0x4f,0x98,0x3d,0xd1,0x11, \
+0x63,0xb6,0xe6,0x8b,0xdc,0x28,0x8e,0x7a,0xab,0xa2,0xa5,0x87,0x97,0x44,0xc6,0xf2, \
+0x53,0x88,0x65,0x1d,0x57,0x8d,0x33,0x58,0x45,0xd4,0xe0,0x4a,0xbe,0x86,0x47,0xc2, \
+0x8b,0x08,0x84,0xdb,0x60,0x1c,0xf8,0x85,0xab,0x4c,0x35,0x59,0x1a,0x8f,0x7b,0x34, \
+0xad,0x47,0x66,0x0e,0x81,0x84,0x79,0x7e,0x33,0xd1,0xba,0x89,0x82,0xd4,0xd2,0x35, \
+0x2b,0x19,0x0b,0x1c,0xe2,0x5e,0xf1,0xc0,0x64,0x9c,0xb1,0x43,0x08,0xba,0xba,0xef, \
+0x28,0xc0,0xc1,0xf8,0x96,0x65,0x4d,0x89,0xeb,0xa2,0xa1,0x99,0x76,0x52,0x76,0x45, \
+0x51,0x9b,0x38,0x44,0xf2,0xde,0xa2,0x55,0x04,0xae,0x39,0xcc,0xd9,0x69,0x56,0x46, \
+0x25,0x66,0xb4,0xe6,0x65,0x32,0xd0,0xee,0x2b,0xd8,0xc6,0x19,0x4a,0xf3,0xe7,0x18, \
+0x00,0xe8,0x8d,0x61,0xad,0xd4,0x33,0xc2,0x8c,0x00,0x10,0xd2,0x03,0xdc,0xd8,0x82, \
+0x56,0x4d,0x10,0x21,0x3a,0x1c,0x4b,0x4d,0xcf,0x7a,0x0a,0xb3,0x36,0x26,0x72,0x09, \
+0x8d,0x94,0xc8,0x7d,0x8b,0x71,0xe6,0x8c,0x81,0x47,0x70,0xc5,0x7c,0xf0,0x60,0x23, \
+0xe4,0xc3,0x41,0xf0,0x39,0x10,0x89,0x60,0xba,0xb4,0x84,0x2a,0x34,0x80,0x29,0x58, \
+0xd4,0x7f,0xd8,0x49,0xfa,0x1e,0x9a,0x7b,0xdf,0xca,0x7e,0x44,0xa3,0x46,0x8b,0x35, \
+0x56,0x92,0x50,0xc3,0x17,0xf2,0xb4,0x2a,0x33,0xef,0x43,0x96,0x8d,0xd7,0x44,0xe8, \
+0x52,0xc7,0x0d,0x19,0xbe,0x4a,0x1e,0xff,0xc1,0x61,0xfd,0xcf,0xa0,0xc0,0xd3,0xae, \
+0x97,0xb6,0x7c,0x31,0x8c,0xdc,0xfb,0xfc,0x0f,0x4f,0xb5,0x3f,0xaf,0xbe,0x00,0x79, \
+0x77,0x7a,0x54,0x2f,0x17,0x49,0x35,0xf0,0x8a,0x7a,0x73,0x79,0x92,0xee,0xc0,0xd3, \
+0x07,0x5f,0x4c,0xcb,0x72,0x61,0x93,0x78,0x0b,0x2d,0xc0,0x26,0x35,0x3a,0x5f,0x47, \
+0x67,0xc2,0x0b,0xdf,0x0e,0xe3,0xf2,0xd9,0xc2,0x33,0xd1,0x03,0xed,0x6d,0x37,0xd7, \
+0xc3,0x5b,0x46,0xd4,0x9f,0x74,0x46,0x21,0xdf,0xda,0x84,0x13,0x69,0x53,0x50,0x3d, \
+0xed,0x1c,0x0a,0x36,0x31,0x62,0xe0,0xb0,0x11,0x92,0x4c,0x25,0x48,0x88,0xd8,0x64, \
+0x44,0x86,0x2e,0x39,0xbf,0x59,0x99,0x87,0xe0,0x78,0x75,0x17,0x03,0xde,0xa2,0x87, \
+0x3c,0x25,0xc1,0xc5,0x0d,0xd5,0xbd,0x2f,0xd8,0xc1,0xfe,0x3a,0xb5,0x6f,0xa3,0x02, \
+0x02,0x40,0x90,0x74,0xf1,0x37,0x8a,0x46,0xdf,0x9f,0xec,0x17,0x0b,0xda,0x75,0xb9, \
+0x5e,0x15,0xcc,0x8d,0xd4,0x62,0xda,0x8d,0x8c,0x79,0x8c,0xf1,0x24,0xaf,0xb9,0x98, \
+0x9c,0x98,0xb8,0x0d,0xd7,0xde,0xef,0x3e,0x8d,0x40,0xac,0xea,0xd7,0xca,0x84,0xeb, \
+0x3f,0x22,0xb6,0xba,0x0e,0x53,0xa9,0x09,0x04,0xa6,0x6d,0x9f,0x47,0x9e,0x36,0xf7, \
+0x2e,0x4f,0x32,0xa4,0x51,0xfb,0xf9,0xf9,0x48,0x60,0xf7,0x54,0x32,0xcd,0xe8,0xdb, \
+0x9a,0xd2,0x43,0x85,0x4f,0x3f,0x5d,0x1b,0xc2,0xfc,0xf4,0x99,0x4b,0xdc,0x46,0xea, \
+0x29,0x5e,0xe1,0xad,0x02,0xc0,0x6a,0xcc,0xac,0x35,0xa2,0x8c,0xcc,0x43,0x09,0xe9, \
+0x3d,0x9d,0x54,0x0f,0xba,0x16,0xde,0xe6,0xb1,0xd7,0x58,0xdd,0x54,0xd0,0x29,0xca, \
+0x73,0x91,0x84,0xd1,0x11,0x91,0xa8,0x81,0x8d,0x21,0xc6,0x91,0x31,0x8f,0xf8,0x20, \
+0x42,0x78,0x8b,0xa3,0x1f,0x54,0xd3,0xd1,0x68,0x9c,0x8e,0xcc,0x89,0x1b,0x19,0x57, \
+0xb6,0x74,0x09,0x73,0x0b,0x4f,0x7d,0x09,0xe3,0x69,0x9b,0xa9,0x89,0x3e,0x06,0x1e, \
+0x98,0x0d,0xf7,0xe9,0xaf,0x57,0x37,0xc6,0x1b,0xe3,0xb2,0x2d,0x12,0x41,0x8c,0xc1, \
+0xae,0xa0,0x33,0x67,0xbd,0x05,0x84,0x08,0xa6,0xea,0x81,0xc9,0x33,0x0d,0xcb,0x35, \
+0x3c,0x06,0x01,0x58,0x0d,0xdd,0x55,0x5f,0x4c,0x56,0x3d,0xd8,0xa4,0x50,0x25,0x0c, \
+0x09,0x8a,0x5c,0x13,0xde,0xb5,0x30,0x15,0xf1,0x18,0x2e,0x55,0xd5,0x02,0x0b,0xb9, \
+0x4d,0xdf,0x2b,0xac,0xae,0xe4,0xb8,0xab,0x90,0xf9,0xda,0xda,0x1e,0xfd,0x6c,0x3a, \
+0x4d,0x8f,0xbf,0x22,0x1f,0x93,0x3d,0xc7,0x33,0x0b,0x6c,0xf9,0x79,0x48,0xc9,0x04, \
+0x47,0x5d,0x58,0x6a,0x21,0x45,0xa6,0x62,0x30,0x41,0x60,0xd1,0x33,0x98,0x95,0x1b, \
+0x84,0xda,0x92,0x9b,0x43,0xeb,0xc0,0xea,0x1b,0x36,0x0f,0x08,0x2e,0x2a,0xd2,0x89, \
+0x15,0xba,0x36,0x42,0xab,0xdb,0xf8,0x3c,0xb3,0xf3,0x43,0xa1,0x7e,0x51,0xa6,0x60, \
+0x53,0x0b,0xda,0xc0,0x36,0xa7,0xf7,0x73,0xb8,0xc6,0x74,0x9d,0xa3,0xbd,0xd5,0x43, \
+0x07,0x50,0x71,0x0f,0xdb,0xbd,0x5d,0x68,0x06,0x4b,0x59,0x86,0x1f,0xe0,0x60,0x13, \
+0xfc,0x75,0xa2,0x39,0xad,0x07,0x5b,0xf3,0x5f,0xbd,0x42,0xd4,0xec,0xaa,0xcd,0xda, \
+0xf5,0x68,0x1c,0x86,0xea,0xa3,0x5f,0xaa,0xef,0x11,0xe7,0x9a,0x91,0x7f,0xa2,0x57, \
+0x40,0x8f,0x94,0xbf,0xed,0x0d,0x04,0xa1,0xce,0x37,0x0c,0x3c,0xb4,0x56,0x59,0x18, \
+0x79,0x37,0x81,0xbb,0x7c,0x14,0x79,0x6a,0x9e,0x31,0x72,0xd4,0x45,0xbb,0xf6,0x40, \
+0xd9,0x1a,0x0e,0x16,0x02,0x89,0x0a,0x0f,0xc9,0xf9,0x7b,0x23,0xd8,0x90,0x05,0x67, \
+0xcf,0xb3,0xa4,0x9e,0x6d,0x8a,0xb6,0xbd,0xe6,0xac,0x8a,0x7d,0x5c,0x45,0x69,0xdf, \
+0xcb,0xbf,0x1c,0xc4,0x89,0x3b,0xfa,0xe8,0xc6,0x68,0xc5,0x2d,0x11,0xd7,0xd4,0x2d, \
+0xb4,0x0b,0x86,0xa6,0xee,0x3a,0xb8,0xe5,0x7d,0x21,0xdb,0x09,0x66,0x4d,0x38,0xea, \
+0x33,0x6f,0xfc,0x90,0xf8,0x89,0xf4,0xab,0x81,0xc3,0x86,0x1b,0x0e,0xdc,0x21,0xef, \
+0x1a,0x30,0x4e,0xf1,0x62,0x2c,0xcd,0xcc,0xa7,0xb4,0x16,0x7a,0x5c,0xcc,0x6d,0x91, \
+0xf8,0x67,0x4b,0x1b,0xeb,0xbd,0xde,0x46,0xe1,0xd7,0x94,0x0e,0x02,0x69,0xad,0xca, \
+0x80,0xf8,0xeb,0xbc,0xf0,0xaf,0xaa,0x95,0xd1,0x7f,0x84,0x7d,0x5d,0xe1,0xef,0x7d, \
+0x6b,0x07,0xcd,0x2e,0x7f,0x3d,0x57,0xf2,0xbe,0x13,0xa8,0xb8,0xe8,0xe0,0x54,0x33, \
+0xbf,0x35,0xb3,0x0f,0x5f,0xd1,0xf4,0x72,0x02,0x23,0x6c,0x8b,0x79,0x88,0x58,0xa9, \
+0xf4,0x7e,0x78,0x8c,0xaa,0x45,0x15,0x03,0x53,0xf7,0x32,0x8e,0xf8,0x6b,0xca,0xfa, \
+0x01,0x57,0x51,0xc8,0x6f,0x6d,0x9d,0x3c,0x6e,0x22,0x99,0x65,0x18,0x0f,0x32,0xa5, \
+0xdd,0x5c,0x1e,0xd3,0xae,0x28,0x38,0x99,0x9e,0xb3,0xa4,0xa2,0x04,0x14,0x87,0xad, \
+0x04,0x6e,0xc7,0x4c,0xca,0x98,0x67,0x6a,0x3b,0x5a,0x66,0xd9,0xbe,0x25,0xcf,0x17, \
+0xc6,0x27,0xd4,0x6b,0x0d,0x5c,0x88,0x82,0x83,0xb3,0xc6,0xbd,0x2e,0x03,0xf2,0x0e, \
+0x5a,0x01,0xc8,0x9c,0xd9,0xa3,0x68,0x7d,0xad,0x09,0x14,0x84,0x6a,0x01,0x28,0x9f, \
+0x23,0x11,0x62,0x64,0x6e,0x32,0x52,0xf4,0x19,0x0b,0x16,0xb0,0xef,0x87,0x34,0x8d, \
+0xf5,0xca,0xe2,0x21,0x2c,0x96,0x96,0xe5,0x48,0x79,0x52,0xe0,0xec,0xe4,0xb8,0xf3, \
+0x54,0xb0,0xce,0x5a,0xd7,0xd4,0x43,0x49,0x0b,0xca,0x7e,0xd7,0xb8,0x2c,0x73,0x79, \
+0x32,0xe3,0x6e,0x51,0x29,0xd9,0x38,0x33,0xbc,0x08,0x0c,0x9b,0x4f,0x1e,0xff,0x24, \
+0x4f,0x79,0x96,0x1c,0x15,0xfd,0x4e,0xbf,0x89,0x54,0x1f,0x0c,0x89,0xc7,0x94,0x07, \
+0x23,0xd8,0x68,0x91,0xd8,0xa8,0xbc,0x8c,0x7d,0xe5,0xd7,0xbe,0xfc,0x7c,0xea,0x53, \
+0xd1,0x1b,0x54,0x67,0xb6,0x01,0x51,0xd8,0x84,0x47,0x1f,0x8a,0xc9,0x39,0xf3,0x7c, \
+0x0d,0x31,0x02,0x10,0xc6,0x14,0x2e,0x75,0x61,0xac,0x85,0xd5,0x38,0x4b,0x0b,0x9b, \
+0xbe,0x77,0x43,0x3d,0xdb,0x63,0x6c,0xa6,0x8c,0x33,0xd2,0x33,0xd1,0xdf,0xdf,0x40, \
+0x9b,0xf6,0xf5,0x86,0x8b,0x0d,0xb7,0x0c,0x30,0xbe,0x31,0x7d,0x39,0x0b,0x39,0x7d, \
+0xe4,0x3a,0xed,0xa4,0x7b,0x13,0x7e,0x7c,0x68,0x58,0x0a,0xbc,0x5b,0xa6,0xf1,0xc1, \
+0xad,0x18,0x2a,0x6e,0x79,0xa6,0x1b,0x14,0xa6,0x13,0x14,0x15,0xc4,0xfc,0xf6,0x7c, \
+0x44,0x32,0x8b,0x28,0x58,0xb4,0x2f,0x9b,0x59,0x9f,0xef,0x9e,0x29,0x5e,0xd1,0xd9, \
+0xbc,0x63,0xb3,0x4b,0x74,0xf3,0x2a,0xcf,0x77,0x4d,0x2c,0x30,0x78,0x8a,0xba,0x6a, \
+0x13,0x06,0x91,0xad,0x6e,0x0f,0x40,0xf0,0xb6,0x58,0x56,0x4e,0x70,0xaa,0xe1,0x1b, \
+0x98,0x27,0x2c,0x9d,0xa6,0xdc,0x66,0xa7,0x4b,0x76,0xf4,0xe3,0x2d,0x2c,0xbc,0x08, \
+0x0a,0x46,0xdb,0x71,0x4e,0x02,0x06,0x52,0x78,0xf2,0xb8,0xb9,0x3b,0xb9,0xab,0x2f, \
+0xa1,0x2c,0x32,0xfa,0x91,0x61,0x98,0xc8,0xc8,0x70,0xda,0xf7,0xd0,0xcc,0x0d,0x2f, \
+0xb5,0xb6,0xe8,0x58,0x86,0x61,0x92,0xc0,0x32,0xe3,0x30,0x74,0x11,0xa7,0x72,0x28, \
+0x0b,0xb2,0xaa,0x8d,0x59,0x89,0x19,0xf8,0x07,0xbc,0x25,0x1a,0x1c,0xd4,0x23,0x92, \
+0x76,0x1c,0x70,0xee,0x25,0x4a,0xe1,0x90,0xb8,0x15,0x01,0xe5,0x74,0xf6,0xcc,0x0d, \
+0x84,0x5e,0x43,0x88,0x2e,0xca,0x19,0x4b,0x07,0x2d,0x41,0x57,0xc6,0x33,0x30,0x05, \
+0xc8,0x16,0x6c,0xe9,0x44,0x84,0x35,0xc0,0x56,0x74,0x71,0x65,0xa8,0x47,0x6f,0x9c, \
+0x2e,0x42,0xc2,0x0f,0x35,0x5e,0x27,0x5d,0xde,0x96,0xf1,0x4b,0x2e,0x83,0x73,0xe8, \
+0xf8,0x0b,0x96,0xc5,0xab,0x70,0x6e,0x08,0x42,0xdc,0x26,0xc0,0x8f,0xb3,0x95,0xd8, \
+0x2a,0x12,0x47,0xd3,0xdb,0x7c,0x07,0x3c,0xbe,0x55,0xcf,0x1c,0x87,0x2c,0x97,0x54, \
+0x23,0xad,0x74,0xe6,0x35,0x46,0x52,0xbf,0x47,0x87,0x8a,0xf7,0xc4,0x78,0xc7,0x2e, \
+0xab,0x67,0xb6,0x73,0x50,0x7b,0xe7,0x23,0x11,0x2c,0x2c,0x05,0x82,0x58,0x29,0x96, \
+0x0d,0x97,0xb5,0x5f,0x6a,0xcd,0x97,0xdf,0x79,0xeb,0x68,0xc3,0x92,0x46,0x82,0xbf, \
+0x0c,0x63,0x3c,0x24,0x02,0xb8,0xf3,0x35,0x5d,0xac,0x81,0x24,0xe6,0x88,0xe4,0x30, \
+0x4f,0x34,0x04,0x9a,0x3d,0x8d,0x0b,0x9b,0x18,0x9f,0x45,0x26,0xc7,0x99,0xc0,0xa4, \
+0x05,0xbe,0xac,0x5c,0x53,0xcc,0xd9,0x08,0x19,0x15,0x92,0x40,0x2d,0x61,0xcc,0x7c, \
+0x60,0x2d,0xfa,0x5f,0x56,0xaa,0x91,0xf0,0x96,0x8a,0xa3,0x07,0x7c,0x22,0x1c,0x44, \
+0xb1,0xa4,0xde,0x30,0x88,0xdf,0x9d,0x4e,0x4a,0xdf,0xdd,0x2f,0x8f,0x76,0x34,0x1d, \
+0x05,0x98,0x88,0x91,0xf8,0xa7,0xd3,0x7e,0xeb,0x68,0x7b,0xa4,0xf2,0xea,0x39,0x43, \
+0x90,0xba,0xa8,0x1a,0x78,0x96,0x98,0xe4,0x21,0xc2,0xcf,0x0a,0x0e,0xcf,0x81,0xab, \
+0x4f,0x6c,0xea,0x3e,0x22,0xf3,0x6b,0xac,0xc9,0xb3,0x95,0x8f,0x16,0xd4,0x0a,0x34, \
+0x9e,0x3a,0x6b,0x91,0x81,0x56,0xf7,0xc5,0x87,0xf3,0x6a,0xba,0x89,0xd1,0xa4,0x1b, \
+0x26,0x39,0x28,0x97,0xa8,0x66,0xa1,0xdb,0x79,0xa1,0xd0,0xc8,0xf9,0xc4,0x59,0x45, \
+0xd3,0x3b,0x8b,0xb5,0x9f,0x8d,0xdc,0xeb,0x02,0xec,0x1c,0xa5,0x14,0x8e,0x99,0xed, \
+0xdc,0x71,0xc5,0x08,0x7e,0x0d,0xa8,0xf6,0x89,0x5d,0xdf,0x62,0x7b,0x7a,0x70,0x76, \
+0xe9,0x4e,0xec,0xa8,0x11,0xa5,0x70,0xcf,0x0a,0x6d,0x6c,0xa6,0x72,0x1c,0x46,0xe9, \
+0xda,0xe2,0x69,0xb6,0xd9,0x81,0xaf,0x28,0x05,0x0c,0xb6,0x07,0x80,0x96,0x4b,0xa5, \
+0x95,0x59,0x9f,0x6b,0x77,0x03,0xb3,0xa2,0x77,0x38,0x90,0xce,0x6e,0x36,0xc5,0xb6, \
+0xe8,0xda,0x73,0x1c,0x79,0x3e,0x38,0x27,0x55,0xda,0x02,0x88,0xaf,0xe6,0xa5,0xb3, \
+0x91,0x44,0xa1,0x55,0x2f,0x22,0x51,0x15,0x24,0x23,0xe4,0x6a,0x07,0x44,0x75,0xd9, \
+0x1c,0x43,0x8e,0x97,0x47,0x17,0x5e,0x81,0x20,0x09,0x3d,0x2d,0x69,0x0e,0x38,0xde, \
+0x90,0x59,0xdc,0x6e,0x10,0x55,0x88,0x91,0xa7,0x6b,0xcf,0x84,0x6e,0xcd,0x52,0xf3, \
+0x83,0x7c,0xa1,0x65,0x6a,0xdc,0x52,0xaf,0xdf,0xc1,0x13,0xdf,0x1b,0x57,0x83,0x5f, \
+0x6f,0xef,0xc3,0x50,0xce,0xe2,0xfa,0x78,0xb6,0x65,0xbb,0x89,0xdb,0x64,0xcc,0xd1, \
+0x62,0x14,0x06,0x0c,0x96,0x15,0xe5,0x0b,0xd5,0x2e,0xc2,0x43,0x95,0x17,0x7c,0xf9, \
+0x61,0x51,0x44,0xe6,0xac,0xd7,0x6f,0xcd,0x75,0xad,0x81,0x87,0xed,0x46,0x8d,0xbf, \
+0x02,0xe8,0xdb,0x2d,0xb4,0xfe,0x4d,0x70,0x94,0x9d,0x0b,0x35,0xc1,0x20,0xb2,0x91, \
+0x76,0xf2,0x9c,0x12,0xe2,0xa8,0x88,0x32,0x1d,0x50,0x9f,0x0b,0x39,0x3a,0x82,0xeb, \
+0x3e,0x1a,0x73,0x7c,0xbe,0x23,0x1d,0xec,0x41,0xd1,0x02,0xf8,0x5d,0xef,0x4d,0x3b, \
+0x10,0x61,0x0d,0x1a,0x0b,0xd6,0xe3,0x7c,0x56,0xcd,0x7a,0x0f,0x79,0xa7,0x83,0x63, \
+0x31,0xc5,0x84,0x39,0xd8,0x45,0x9c,0x36,0xad,0xa6,0xab,0x94,0xdb,0x1c,0xb6,0x5d, \
+0x19,0x35,0x95,0x71,0xad,0x34,0x8b,0x46,0x6d,0xd5,0x78,0x67,0x5c,0xf9,0x59,0xc8, \
+0xf3,0xfa,0xca,0xce,0x43,0xe1,0x40,0xcc,0xdd,0xa8,0xfb,0xfb,0x97,0xab,0xcd,0xfb, \
+0x33,0x23,0xcc,0x67,0xdc,0x8f,0x2a,0xfb,0x38,0x0b,0xe6,0xe8,0xdd,0x0f,0xd0,0x52, \
+0xe4,0x37,0x66,0x1a,0xdc,0xa7,0x7c,0xc8,0x89,0x1f,0x3e,0x62,0x81,0xc4,0xe2,0xbd, \
+0x11,0xdd,0xc7,0xac,0x07,0x99,0x69,0x29,0xcc,0xa7,0x71,0x17,0x44,0x19,0x1d,0xfc, \
+0x44,0x91,0xc2,0x7b,0xe5,0x83,0xa3,0xb6,0x96,0x1d,0xd9,0x51,0x01,0x3e,0x40,0x56, \
+0x67,0x93,0x37,0x94,0x41,0x61,0xfa,0x3e,0x66,0x97,0x37,0xeb,0xd6,0x36,0xe9,0x3c, \
+0xec,0xa9,0xbb,0xb8,0x97,0xea,0x68,0x86,0x34,0xa3,0x0a,0xc2,0x8f,0xa1,0xa0,0xc7, \
+0x28,0xce,0x8a,0x91,0xc4,0xe7,0x47,0xfc,0xdd,0x89,0xb5,0xe9,0xbd,0x21,0xb6,0x19, \
+0xde,0xe9,0x92,0xbc,0xef,0x05,0xc7,0x0d,0xbd,0x16,0x6d,0x48,0x8c,0x6c,0x16,0xe4, \
+0x71,0x42,0x9f,0x27,0x6b,0x6a,0xe8,0xa7,0x52,0x76,0x4f,0x4e,0xba,0xea,0x24,0xce, \
+0x77,0xd9,0x6a,0x11,0x7d,0xad,0x71,0x63,0x7c,0xc5,0xf2,0xf5,0x33,0x3c,0x90,0xb6, \
+0x9c,0x05,0x22,0xab,0xcb,0x4e,0x00,0x16,0x21,0x3c,0xe9,0x11,0x9c,0xb8,0x8b,0x68, \
+0x25,0xb5,0x91,0x0d,0x0c,0xbd,0xac,0xd2,0x4b,0x43,0x20,0x40,0x55,0x24,0x69,0x01, \
+0x31,0xcb,0x14,0x51,0x18,0x6e,0x51,0x46,0x0b,0x1a,0x03,0x95,0x05,0xaa,0x3a,0x36, \
+0xec,0xe9,0xd2,0x88,0xea,0x98,0xee,0x4b,0x92,0xea,0xa5,0x1c,0xb6,0x8c,0x43,0xfb, \
+0x94,0xe5,0x5f,0xe7,0xf1,0xe8,0xf0,0x99,0x6b,0x03,0xeb,0xee,0x06,0x3f,0xa2,0x40, \
+0x80,0xbd,0xa4,0x80,0xc9,0x58,0xfa,0xaa,0xf7,0x1e,0x7d,0x9a,0xb8,0x71,0xe0,0x89, \
+0x0f,0x28,0xce,0x2d,0x1d,0x4a,0xde,0x6e,0x8b,0x57,0x42,0xb0,0x02,0x18,0xab,0x70, \
+0xfc,0x6d,0x01,0x00,0x11,0x92,0xa6,0xc3,0xae,0xab,0x48,0x97,0x68,0x75,0xdf,0x9e, \
+0xbd,0x9b,0x2c,0x62,0x50,0x54,0x86,0x5f,0xf4,0xa2,0x0d,0xf0,0xf5,0xe5,0x5a,0xa5, \
+0xcb,0x15,0x91,0x4e,0x8c,0x95,0x92,0x05,0x2d,0x20,0x2c,0x84,0x53,0x3b,0xbc,0x1f, \
+0xc7,0x8e,0x3c,0xcd,0x49,0xb2,0x02,0x83,0xdf,0x09,0x33,0xe1,0x95,0xa7,0x29,0x93, \
+0xbd,0xc8,0x0f,0x3f,0x62,0x4c,0x5e,0xad,0x07,0x92,0x7f,0x0e,0xff,0x16,0xb3,0xc6, \
+0xfb,0xfa,0xcb,0x8b,0xaf,0xf4,0xd9,0xdb,0xc7,0xc3,0xd4,0x2f,0xac,0x7e,0xd1,0x83, \
+0xf8,0x16,0x7e,0x23,0x9b,0x01,0xb8,0xa9,0x79,0x86,0xb4,0xe8,0x2c,0x8c,0xa1,0x2f, \
+0x82,0x49,0x9d,0xd0,0x93,0xc4,0x21,0xbe,0x37,0xf6,0x1a,0xe3,0x39,0xd0,0xc4,0x9a, \
+0x6a,0xce,0x14,0x0a,0x11,0x38,0xb5,0x1f,0x02,0xac,0xb7,0x16,0x2e,0xe9,0x5e,0xd8, \
+0xe6,0xd3,0x12,0x0a,0x7f,0x97,0xad,0xf1,0xe5,0x40,0x28,0xfd,0x7d,0x44,0x20,0xa4, \
+0x25,0xb3,0x91,0x2d,0xf5,0xee,0x56,0x4c,0x58,0xbd,0xac,0xb9,0x82,0x3b,0x52,0x25, \
+0x10,0xcd,0x24,0x89,0x31,0x0c,0xf1,0xa3,0xd5,0x97,0x02,0x29,0x34,0x0e,0xcd,0xfd, \
+0x45,0x93,0xa4,0x1f,0x29,0x00,0x0c,0x88,0x87,0x47,0xcc,0xd3,0x9f,0xa9,0x3f,0xdb, \
+0xc0,0xee,0x03,0x93,0xa8,0x0c,0x5f,0xd6,0xc1,0xa1,0x76,0x16,0xfa,0xbc,0x7a,0x2b, \
+0xbc,0x61,0xe5,0x8e,0x13,0x7e,0x29,0x06,0xda,0x5d,0xdc,0xe7,0xfa,0x56,0x04,0x85, \
+0x36,0x92,0x34,0xdd,0xbb,0x5e,0xdf,0x85,0xfb,0x88,0xec,0x7f,0x5d,0x06,0x17,0x0a, \
+0xc4,0x96,0x98,0xc3,0x77,0x2a,0xfc,0xa7,0x2c,0x71,0x4a,0x4b,0x68,0x62,0xa8,0xdc, \
+0xd1,0xba,0x38,0x94,0x94,0x68,0x7a,0xc7,0x70,0xbe,0x41,0x46,0x8d,0xd0,0x13,0xdc, \
+0xc3,0x50,0x40,0x7f,0x9b,0x2a,0x91,0x9e,0x5d,0x19,0xec,0x7b,0x06,0xaa,0xea,0xd0, \
+0xb6,0x45,0x30,0x9c,0xcd,0x99,0x03,0xe6,0x08,0xf7,0x9c,0xcb,0x5a,0xea,0x9b,0xe0, \
+0xa4,0xac,0x06,0x03,0xd5,0xe3,0xea,0xe1,0x26,0x8c,0xc3,0x2d,0x47,0x05,0x19,0x9d, \
+0xe3,0x83,0xa1,0xc5,0x38,0xa2,0x2f,0x15,0x43,0xdc,0x35,0xff,0x18,0xaf,0xd4,0x28, \
+0x0e,0xca,0x32,0xfb,0x00,0xe6,0x1b,0xc5,0x6c,0xe4,0xaa,0x02,0xab,0x7a,0x47,0x12, \
+0xff,0x19,0x6c,0x65,0x75,0xbe,0xae,0x8c,0x2d,0x4a,0x09,0x0b,0xb3,0xaf,0x51,0x11, \
+0x00,0x38,0xc0,0x37,0x2d,0x6a,0x23,0xf6,0x0f,0x22,0x19,0x90,0x32,0x28,0x61,0xa1, \
+0x5c,0x08,0x28,0xa6,0x18,0xc6,0xb0,0x58,0x60,0x30,0x19,0x4a,0x3d,0xff,0xef,0xb3, \
+0x43,0xfd,0x5f,0x9f,0x63,0x21,0xc5,0x37,0x3b,0x29,0x97,0x0c,0x18,0xf6,0x5c,0x60, \
+0x3f,0xb2,0xd0,0xc2,0x41,0x56,0xea,0x5c,0x51,0x94,0x82,0xa0,0xe2,0x94,0xac,0xa2, \
+0xa1,0x10,0x63,0x6f,0xe9,0xff,0x0b,0x2c,0x7f,0x42,0x68,0xc3,0x9e,0xb7,0x1d,0x0b, \
+0x51,0x60,0x61,0x0b,0x04,0x15,0x54,0xc5,0x95,0x54,0x55,0x8a,0xed,0xd9,0x40,0xc4, \
+0x21,0xa3,0x5a,0x6f,0x68,0x98,0x81,0xcd,0xd0,0x66,0x21,0x11,0x19,0x53,0x97,0xbb, \
+0xee,0xf8,0xc9,0x3d,0x5e,0xec,0x44,0x0c,0x09,0x99,0x49,0x28,0x48,0x10,0x1e,0xc8, \
+0x25,0xf3,0x36,0x16,0x05,0x88,0xae,0x83,0x07,0xa8,0xa6,0x03,0x37,0xf0,0xe2,0x7c, \
+0x75,0xa6,0x40,0x5e,0xe6,0xb8,0x1d,0x39,0xe4,0xc4,0x00,0xcd,0x2c,0x34,0xb2,0x8b, \
+0x1c,0x5b,0x58,0x67,0x7f,0xab,0x07,0x05,0x4d,0x6b,0x25,0x5d,0x5c,0x43,0x12,0x3f, \
+0xc6,0xc2,0x65,0xc8,0xb0,0x19,0x53,0xc3,0x07,0x76,0xb9,0x4c,0x15,0x15,0x22,0x24, \
+0x86,0x88,0x31,0x19,0x49,0xf9,0x5c,0x75,0xe9,0x8c,0x10,0x50,0x62,0xa2,0x2f,0x8b, \
+0xd7,0xb6,0x7c,0xd3,0xb1,0x92,0x4c,0x3a,0x7f,0xc5,0x28,0x2a,0x82,0xb0,0xc5,0xdf, \
+0x16,0xed,0x8c,0x40,0xcc,0xb5,0x5f,0xb9,0x28,0xae,0x0f,0x43,0x17,0x1d,0xdc,0x78, \
+0xfc,0x00,0xdf,0x18,0x8b,0x55,0x55,0xe7,0x23,0x76,0x10,0x26,0x8d,0x12,0x1f,0x0e, \
+0x9d,0x5d,0x5b,0x19,0xa6,0x13,0xf1,0x5d,0xb1,0x00,0x35,0xd2,0xd0,0xc4,0x6c,0x0d, \
+0xd5,0x90,0xae,0x68,0x6d,0xdf,0xae,0x88,0x72,0xd3,0x06,0xc8,0x49,0x4d,0x8f,0x0c, \
+0x43,0x00,0x8c,0x5f,0x86,0xd0,0xc7,0xea,0xa6,0x4c,0x12,0x22,0x22,0xa8,0xba,0x94, \
+0xea,0xc4,0xcc,0x7b,0x39,0xdd,0x20,0x1a,0xb6,0x21,0x68,0x69,0x87,0xa3,0x2c,0x09, \
+0xc5,0xca,0x3a,0x32,0x64,0x71,0x00,0xf3,0x51,0x0a,0x8d,0x69,0x29,0x1d,0xf4,0xa4, \
+0xcb,0x86,0x0c,0x7f,0x7d,0x7e,0x5c,0xbd,0x76,0xf9,0x43,0xc2,0xad,0xfb,0x39,0xc5, \
+0xef,0xa8,0x7b,0x0c,0xfc,0x24,0x22,0x00,0x2f,0xcc,0xe3,0xd9,0xd8,0xac,0xaf,0xf5, \
+0xba,0xb5,0x80,0x6a,0x79,0xde,0x9c,0x07,0xa5,0x52,0x31,0xd9,0x37,0xd9,0x2f,0xf4, \
+0x7c,0xbc,0xf6,0xe6,0xf7,0x23,0xdd,0x21,0xcb,0x5d,0x0a,0xda,0x02,0xa4,0xfa,0x17, \
+0xd4,0x41,0x3e,0xa8,0x85,0x21,0x20,0xa4,0xa5,0x3f,0x56,0x2c,0xfc,0x15,0xa7,0xda, \
+0xe1,0x05,0x55,0x3e,0x96,0x4f,0xbd,0xef,0xd2,0x9a,0xff,0x3e,0x5e,0xd1,0x87,0x6c, \
+0x4f,0x77,0x5f,0xda,0xe0,0x38,0xbb,0xf1,0xe9,0xc5,0xdc,0x2e,0x56,0xb5,0x0f,0xda, \
+0x00,0x0d,0xc3,0x68,0x07,0xc2,0xd9,0xb5,0xf9,0xeb,0x57,0x0f,0x0f,0x2f,0xcf,0x3a, \
+0xbc,0x50,0xfa,0xf1,0x54,0x34,0xf9,0x7c,0xd3,0xe3,0xe8,0xb0,0x07,0x60,0x51,0xab, \
+0x13,0x0c,0x74,0x04,0xe7,0xca,0xf0,0x2e,0xf5,0xb7,0xbc,0x9c,0xd0,0x0e,0x21,0xb1, \
+0xed,0xfa,0x83,0x8c,0x70,0x8e,0x20,0xd9,0x7c,0xe4,0x21,0x43,0xcd,0xc6,0x9e,0xed, \
+0xbc,0x19,0xa7,0x91,0x81,0xe9,0xfb,0x48,0xfb,0xc6,0x5e,0x43,0xe3,0x3f,0xd3,0x0f, \
+0xfb,0xd5,0xa2,0x1c,0x50,0x2f,0x18,0x7e,0xba,0x81,0x4f,0xef,0x6b,0xda,0xc5,0xf8, \
+0x0c,0xbc,0x3e,0x9d,0xa9,0xb8,0xf3,0xd8,0xcc,0x62,0xf2,0x62,0x92,0x1c,0x1e,0xed, \
+0x3e,0xc5,0x5f,0xca,0xab,0x4b,0xe9,0xb9,0x9f,0xf1,0xf1,0x3f,0x7f,0x3d,0x93,0xe3, \
+0x4f,0xe6,0x99,0x58,0x72,0x42,0xf7,0x13,0xd7,0xb6,0x0c,0x7d,0xd6,0x74,0x4f,0xf2, \
+0x7d,0x6c,0x38,0x3f,0x95,0x97,0xb3,0x42,0x90,0x6e,0x5b,0xce,0x71,0x74,0xf0,0x72, \
+0x23,0xa4,0x85,0xc1,0x1c,0x8b,0x7f,0x23,0xd0,0x5b,0xa9,0x5b,0x33,0x95,0xeb,0xf9, \
+0xd0,0xbc,0x6e,0x59,0x2c,0x5b,0x8c,0x2c,0x61,0x3c,0x40,0x31,0x44,0x1e,0x98,0xda, \
+0x2b,0x0d,0x0a,0xaa,0x0b,0x70,0xd4,0x1b,0x33,0x85,0x80,0xae,0xae,0xca,0x3d,0xce, \
+0x8c,0x3c,0xe8,0x66,0x55,0x16,0x45,0xc3,0x7a,0xed,0x2c,0x94,0xbc,0x91,0x93,0xe1, \
+0x0b,0x8b,0xd7,0xab,0xa3,0x23,0x7a,0xba,0xf2,0x4d,0xf8,0xf3,0xab,0xd8,0x26,0x6f, \
+0x9c,0xd7,0x10,0x6d,0xc3,0x88,0xf0,0x6e,0x10,0x2b,0xda,0x8b,0xa2,0x10,0x36,0x20, \
+0x49,0xf2,0xe0,0xa3,0xf6,0x7e,0x7f,0xa7,0xb7,0x7c,0x5c,0xf1,0xba,0x64,0xd6,0x11, \
+0x10,0x20,0x8c,0xd8,0xca,0xa8,0xda,0x16,0x38,0x10,0xab,0xd5,0x90,0x0b,0x3d,0x27, \
+0xea,0x08,0x7a,0x3a,0x8f,0x41,0x72,0x93,0x0b,0x29,0x2b,0x9d,0x0f,0x2f,0x21,0x1d, \
+0x80,0x8d,0x5a,0xd8,0x39,0xa6,0xee,0xeb,0x9b,0x39,0xcf,0x27,0x82,0xbe,0xac,0x9e, \
+0xd6,0xc9,0xdc,0x52,0xf9,0x68,0xac,0xbb,0xec,0x1e,0x2f,0x27,0x52,0xda,0xdf,0x5f, \
+0xe0,0xa6,0x2a,0x2f,0x92,0x94,0xc9,0x26,0xab,0x17,0xae,0x8f,0xc8,0x76,0xef,0x13, \
+0x51,0x1a,0x5d,0x30,0x9c,0x95,0xc0,0xbd,0x3f,0x4f,0xe3,0x9d,0x63,0x58,0x9f,0xcf, \
+0xfe,0x36,0x01,0x64,0xe4,0x3c,0xf5,0x1a,0x8c,0x8c,0x82,0x16,0x0b,0xf5,0xfb,0x7f, \
+0x0f,0x28,0x1f,0x80,0x28,0xb2,0xba,0x2b,0xf9,0xec,0x16,0x34,0xac,0xfb,0x7d,0x3f, \
+0xa7,0x99,0xc3,0x21,0x00,0x7c,0xc4,0x63,0x95,0x4f,0xad,0x4a,0x7a,0xbe,0xd0,0x2a, \
+0x62,0x45,0xd2,0x07,0xdc,0xfe,0xe5,0xbf,0x5d,0x92,0xe2,0x2e,0xd2,0x17,0xdf,0xed, \
+0x3f,0x37,0xaa,0x1d,0x3e,0x7c,0x09,0x94,0x38,0xae,0x0b,0xad,0x62,0x10,0xbc,0x1a, \
+0x64,0x8b,0x65,0x85,0xd9,0x1f,0x22,0x43,0x23,0x70,0x28,0x63,0x6c,0x02,0x53,0x11, \
+0x20,0xc6,0x99,0x54,0xcb,0x8f,0xd3,0x74,0x7d,0xa9,0x79,0xe4,0x23,0x23,0x91,0x06, \
+0xc4,0xc8,0x7d,0xef,0xf8,0x92,0x6c,0x26,0x21,0x79,0x34,0xa1,0x63,0x8e,0xf7,0x93, \
+0xb3,0x9b,0x8c,0xfa,0x62,0x12,0x36,0x8a,0x14,0x94,0xf9,0xe0,0x7c,0x1d,0xbf,0xb5, \
+0xb8,0x87,0xc4,0xaf,0x82,0xc9,0x10,0xbb,0x04,0xbd,0x13,0xb4,0x80,0x6f,0x7d,0x8d, \
+0x7f,0xd1,0x13,0x89,0xb8,0x7f,0x1f,0xc6,0x64,0x0d,0x8b,0xd3,0x88,0x08,0x61,0xe3, \
+0x08,0xdf,0xe9,0x8c,0xab,0xdd,0x47,0xfd,0xbc,0xab,0x5f,0x6f,0x23,0x91,0xe6,0x07, \
+0x83,0x08,0x50,0x87,0x10,0x13,0x32,0x13,0x1f,0x47,0xc2,0x62,0x3a,0xf2,0x32,0xc7, \
+0x25,0x25,0xc0,0x42,0x27,0x97,0x7f,0xd0,0x60,0x16,0xc4,0x9e,0x0f,0x92,0x5e,0x5b, \
+0x3b,0x92,0x78,0x0d,0xd4,0xde,0x74,0x46,0x07,0x52,0x58,0x4d,0x47,0xc1,0x86,0xbd, \
+0xbe,0x50,0xfd,0x5e,0x81,0x51,0x10,0x60,0xed,0x6a,0x31,0x41,0x11,0x10,0x60,0xc6, \
+0x09,0x11,0x62,0xc8,0x82,0x22,0x7e,0xfd,0xfd,0x9b,0xf8,0x22,0x7c,0x19,0x01,0x73, \
+0x3b,0x5a,0x3e,0xea,0xfb,0x5d,0xd6,0x8e,0x28,0x7e,0x76,0xe2,0xe4,0x72,0xc2,0x35, \
+0x0b,0x7f,0x1e,0x20,0x8f,0xee,0xbb,0x78,0xf0,0xc1,0xe2,0x22,0x74,0x87,0x59,0x16, \
+0x8d,0x8e,0x79,0x42,0x10,0xe6,0x61,0x80,0x9d,0xc4,0x0a,0x21,0xcc,0xd1,0x7b,0x14, \
+0x34,0x55,0x8b,0x34,0xd5,0x99,0xf3,0xad,0x81,0x19,0xd5,0x8d,0xd0,0xc0,0x58,0x86, \
+0x94,0x98,0xbb,0x82,0x3d,0xb3,0xbf,0xcc,0x3d,0x87,0xae,0x52,0x7b,0x21,0x19,0x0d, \
+0x9c,0x44,0x98,0x54,0x50,0x46,0x22,0x31,0x5b,0x4d,0x21,0x0d,0x86,0x01,0xd1,0xaf, \
+0xd2,0x94,0x94,0x77,0x68,0x69,0xed,0x5f,0xe5,0xde,0x41,0x12,0x88,0x3e,0xb9,0x51, \
+0xa7,0x3a,0x4d,0x9e,0xa7,0xc0,0xd6,0x05,0xc0,0xc0,0x76,0xaa,0xbb,0xc8,0x5b,0x01, \
+0x60,0x10,0x5a,0x14,0x85,0xa6,0xd2,0x35,0xae,0xe5,0x0d,0x55,0x7a,0xd9,0x78,0x08, \
+0x1e,0x2e,0x08,0x2a,0x30,0x88,0x65,0x25,0x45,0xad,0x90,0xba,0x18,0xc5,0x71,0x68, \
+0x31,0x86,0x52,0x98,0xa6,0x19,0xc9,0x25,0x4c,0x94,0x68,0x4d,0xef,0xe6,0x3f,0xbf, \
+0x7e,0x61,0x34,0xf4,0x2c,0x9f,0xe4,0x21,0xd4,0x85,0xa8,0x94,0xed,0x2a,0xd1,0xce, \
+0x06,0x56,0xed,0xc9,0xad,0x06,0xb6,0x74,0x5e,0x9c,0x09,0x17,0xb8,0x1b,0x75,0xd5, \
+0xd9,0xaf,0x0d,0x03,0x27,0x3f,0x05,0x5a,0x4a,0x5b,0x7d,0x5d,0x81,0x55,0x4d,0x97, \
+0xca,0x16,0x4b,0xa3,0x68,0xdf,0x66,0xd8,0x2a,0x69,0x60,0xe6,0xf3,0x36,0xb0,0xad, \
+0x38,0x06,0xe5,0xba,0x0b,0x21,0x50,0x62,0x0b,0xae,0x3e,0xeb,0x06,0xe0,0xf5,0x87, \
+0x74,0x78,0x4f,0xaa,0x78,0xe3,0x92,0xd9,0x86,0x7a,0xc4,0xa6,0x43,0x54,0x1a,0xec, \
+0x68,0xb8,0x20,0x8e,0xe8,0x2c,0x4f,0xe1,0x31,0x7d,0xa1,0x0b,0x8b,0x00,0xe9,0xc6, \
+0x98,0x60,0x1a,0x69,0x4b,0x83,0x75,0xee,0xd0,0x3b,0x0f,0x70,0xb3,0xad,0x77,0x27, \
+0x04,0x26,0x4c,0x80,0xdb,0x71,0xe5,0xd8,0x78,0xed,0x02,0xf5,0x38,0x60,0x36,0x12, \
+0x97,0x66,0x29,0x8c,0xfe,0x93,0x67,0xd9,0xb1,0x28,0xaa,0xfb,0x55,0x3e,0xfb,0x27, \
+0x53,0x25,0x43,0xd4,0x0d,0xaf,0x1c,0x00,0x78,0xbf,0x92,0xd8,0xe8,0x53,0xc5,0x35, \
+0x64,0x0c,0x34,0x2e,0xd7,0x13,0x33,0xcd,0xa8,0x46,0x8e,0x28,0xdc,0x61,0x2b,0x56, \
+0x6f,0xc3,0x42,0xe4,0x85,0x66,0x80,0xaf,0x93,0x14,0xb4,0x89,0x7c,0xed,0xe2,0x37, \
+0xca,0x87,0xea,0x1e,0xe6,0x1c,0x4d,0xd6,0x09,0x9b,0x42,0xd5,0x14,0xed,0x5c,0xa9, \
+0xdf,0x09,0x43,0xcd,0xb1,0xe6,0x30,0x92,0x9d,0xd6,0xbc,0x8c,0x67,0x90,0xe2,0xa2, \
+0x6b,0x4c,0xe2,0x42,0x83,0x2b,0x3c,0x9e,0x59,0xa5,0x3f,0x72,0x99,0x7b,0xe2,0x84, \
+0x8c,0x13,0x69,0x03,0x63,0xad,0x8e,0x68,0x0e,0xca,0xad,0x82,0x2d,0xdd,0x62,0xd2, \
+0x42,0x6a,0xcf,0x04,0xda,0x49,0xc0,0x32,0xe8,0x17,0x13,0x0f,0x5f,0x44,0x0a,0x7d, \
+0x7d,0x81,0xe8,0xc5,0x91,0x83,0x1a,0x78,0x2e,0x42,0xc8,0xdf,0x33,0xf4,0xba,0x07, \
+0x46,0x36,0x96,0xe2,0x7d,0x0b,0xbe,0x80,0x62,0x1a,0xac,0xbf,0xaf,0x48,0x4c,0xf9, \
+0x30,0x3b,0xf6,0xff,0x0e,0xe9,0xf3,0xc0,0x38,0x99,0x3e,0x2a,0x8f,0xd8,0x34,0x63, \
+0x10,0x5d,0x20,0x1f,0x69,0x2c,0xc3,0xee,0xe9,0x7c,0x48,0xd8,0x0e,0x73,0xbf,0x44, \
+0xb1,0x8f,0x3d,0x17,0x7f,0xbc,0x82,0x0f,0x9b,0x40,0x70,0xd4,0x47,0x87,0x00,0x99, \
+0xa8,0x5c,0xb9,0xff,0x1d,0x0a,0x1e,0xf3,0x51,0xda,0xcd,0xb6,0x14,0xe5,0x05,0x91, \
+0x90,0x06,0xd3,0xbb,0x63,0xd3,0xfa,0xa9,0xf5,0x6a,0x78,0xc9,0x77,0x10,0x16,0xc9, \
+0xa0,0x95,0xa8,0xb8,0xdb,0xd5,0x76,0x8c,0x18,0x2e,0xed,0x0f,0x46,0x11,0x09,0x89, \
+0x7f,0x65,0xd0,0x20,0x9f,0xa0,0xbc,0xcd,0x52,0xfc,0x3a,0x33,0xf2,0x4c,0x7a,0x42, \
+0xe4,0x8a,0x24,0x79,0x9a,0xc5,0x03,0xc3,0x78,0x63,0xab,0x30,0x9e,0xa7,0xb8,0xd0, \
+0x1b,0x3b,0xb6,0x86,0xd4,0x95,0xab,0x1c,0xa0,0xa1,0xe1,0x73,0xad,0x63,0x96,0xed, \
+0xc8,0x3c,0x11,0x65,0x02,0xf4,0xa4,0x2b,0xe0,0x8c,0x8a,0x48,0x86,0xa8,0xb9,0xc0, \
+0x1e,0x17,0x34,0x60,0x73,0x94,0x68,0x40,0x16,0xe8,0xa5,0xf1,0x52,0x93,0x81,0xdb, \
+0xe9,0x2f,0x03,0x0e,0x4c,0x03,0x3d,0x50,0xca,0x05,0xf7,0x5c,0xa5,0x13,0xb2,0xd8, \
+0x40,0xc1,0x2e,0x6f,0x69,0x7e,0x8e,0xec,0xcc,0xf8,0x9f,0x95,0x87,0x14,0xf3,0x60, \
+0x28,0xb0,0x58,0x7f,0x46,0xa2,0x30,0x3f,0xb7,0xbf,0x84,0x67,0x5d,0xbf,0xa2,0xec, \
+0x5e,0x7e,0x34,0x26,0x7d,0x51,0x3f,0x6c,0x51,0x1d,0x54,0x0b,0xfe,0xc8,0x96,0x54, \
+0x19,0xd9,0xea,0xd9,0xa2,0x6f,0x83,0x97,0x68,0x2c,0x40,0x41,0x9e,0x6d,0x63,0xa4, \
+0xe5,0xfa,0x7e,0x10,0xc5,0x48,0x7d,0xdd,0x56,0x26,0xe5,0xf8,0x7c,0x79,0x1e,0xcd, \
+0x21,0xce,0xef,0x23,0x82,0xf9,0xc9,0x4b,0x5d,0xaf,0x63,0xcc,0x30,0x88,0x17,0xfe, \
+0x8a,0x35,0x21,0xca,0x5f,0xb5,0xe9,0xa4,0x0c,0x19,0x29,0xde,0x28,0x78,0xb8,0x71, \
+0x10,0x7c,0x6c,0x59,0xa1,0x6e,0x04,0x66,0xbd,0x6e,0x01,0x07,0x54,0x9f,0x7e,0xd9, \
+0x34,0x46,0x98,0x8c,0x8a,0xc1,0x83,0x50,0xfd,0xb1,0x82,0xec,0x51,0x0e,0xc6,0x93, \
+0xf1,0x31,0x77,0xc1,0xc9,0x43,0xe5,0x04,0x74,0x8c,0xc3,0x90,0xcc,0x82,0x17,0xcc, \
+0x49,0x4d,0xf5,0x99,0x69,0x06,0x09,0xa5,0xfd,0xb2,0x10,0x27,0x68,0x55,0x3e,0x05, \
+0x1c,0x24,0x03,0xec,0xb0,0xca,0xb6,0xa9,0xc7,0xaa,0xa9,0x89,0xee,0xbc,0x17,0x2e, \
+0xae,0x44,0x9e,0xdf,0x3c,0x64,0xbd,0xda,0xc9,0xb3,0x85,0x0e,0xa1,0x0d,0xab,0x5d, \
+0x06,0x7f,0xe3,0xac,0xb4,0x73,0xe8,0x77,0x7b,0xbd,0x7f,0x8f,0xa7,0x1e,0x39,0x9e, \
+0xe2,0x1a,0x44,0x5e,0x1c,0x18,0x98,0x34,0x6d,0x28,0x2a,0x90,0xaa,0x98,0x66,0x7b, \
+0xfa,0xd1,0xb8,0x15,0x9c,0x21,0x8c,0x68,0x02,0xf7,0x62,0xc5,0xb9,0x98,0x2e,0xfe, \
+0x2d,0xea,0xf8,0x48,0xaf,0x25,0xc6,0x50,0xd7,0xed,0x26,0x77,0xf1,0x57,0xdf,0x0b, \
+0x07,0x4a,0xb1,0x08,0x74,0x77,0xc9,0x29,0xdd,0xe0,0x81,0x5d,0xe7,0x13,0x8d,0x51, \
+0x04,0x07,0x52,0x5b,0x8d,0x59,0xa9,0xf9,0x53,0x1c,0xc4,0x7c,0x79,0xc0,0xec,0xe1, \
+0x0b,0xbb,0xe7,0xec,0x81,0x17,0x46,0xce,0xaf,0xea,0x1c,0x45,0x23,0x86,0x51,0x00, \
+0x4d,0x4f,0x35,0xb4,0x87,0x13,0x0b,0xc5,0x5c,0x72,0xf2,0x91,0xd9,0xd3,0x82,0x12, \
+0x4a,0x9a,0xc8,0xf9,0xc9,0x81,0xb3,0xcc,0xef,0x2c,0x9e,0x52,0xa9,0x45,0xe1,0x95, \
+0x3a,0x20,0xd4,0xae,0x09,0xba,0xc9,0xf3,0x49,0x62,0x12,0xcf,0xfe,0xd0,0x6c,0x53, \
+0x98,0x29,0x11,0x88,0xd4,0x83,0x42,0xf1,0xd2,0x0b,0xb7,0x1c,0x06,0x90,0x12,0xc5, \
+0xcc,0x9d,0xe7,0x95,0x9d,0x35,0xf3,0xf6,0x1e,0xae,0xd9,0xeb,0x61,0xc9,0xb1,0x9e, \
+0xa6,0x4a,0xc1,0x40,0x44,0x44,0x11,0x91,0x46,0x0a,0xaa,0x03,0x01,0x76,0x9b,0x67, \
+0x14,0xcd,0x90,0xce,0x33,0x4f,0x9f,0xd9,0x9c,0xc9,0x9b,0x83,0x2f,0x99,0x5f,0x8e, \
+0xe3,0x23,0xb0,0xa4,0xd1,0x09,0x16,0x2f,0x12,0x93,0xc9,0x04,0x0e,0xd5,0x7b,0x35, \
+0xeb,0xf2,0x05,0x8e,0xa2,0xb0,0x07,0xdf,0x7a,0x0c,0xbb,0x95,0x83,0x83,0xea,0xf4, \
+0xe2,0xe4,0xd8,0xb8,0x13,0x4b,0x29,0x34,0x38,0xb1,0x00,0x7b,0x10,0x19,0x70,0x04, \
+0x5e,0xb3,0x27,0x76,0x01,0x84,0xa2,0x11,0x73,0x42,0xb9,0x00,0x7c,0x07,0xbd,0x18, \
+0x96,0x8b,0x4d,0xd0,0x45,0x1f,0x9e,0x8c,0xaa,0x86,0x80,0xd3,0xaa,0x54,0x07,0x54, \
+0xee,0xda,0x35,0x17,0x7a,0x25,0x86,0x48,0xfe,0x16,0x9a,0xc0,0x22,0x6b,0xe0,0x1e, \
+0x48,0x28,0x20,0x90,0x55,0x11,0x22,0x2a,0x0a,0x33,0x88,0x21,0x64,0x8c,0x21,0x26, \
+0x3e,0x93,0xd5,0x17,0x93,0x24,0x4c,0xf2,0x79,0xdb,0xd3,0xd9,0x3e,0x9b,0x6f,0x44, \
+0xd3,0xf5,0xbb,0xf8,0x30,0xce,0xb9,0x50,0xbc,0xce,0x0e,0xab,0xca,0xdf,0x43,0xf9, \
+0x52,0xba,0xdf,0xe9,0xe1,0xeb,0x3e,0x83,0xba,0xff,0x9b,0xa9,0x25,0xf7,0x34,0xb9, \
+0xbf,0x11,0xa3,0xd0,0x97,0x12,0x4f,0x4c,0x93,0xc0,0x29,0x74,0x9f,0x32,0x1f,0x9f, \
+0xc8,0x2b,0xe8,0x13,0xbf,0xcf,0x27,0x11,0x88,0x3d,0xe7,0xb9,0x05,0x0b,0x52,0x64, \
+0xfa,0xa2,0x35,0xa8,0xd0,0xaa,0x4c,0x01,0xc3,0x5c,0x1f,0x0f,0xf0,0xb0,0x50,0xb9, \
+0x5f,0x04,0x33,0x36,0x88,0x82,0x63,0xc0,0xa2,0x31,0xcd,0x8d,0xf8,0xeb,0x04,0xb2, \
+0x5a,0x0d,0x57,0x1c,0xb7,0x3d,0xd8,0x7d,0xdb,0xb7,0x9f,0xa6,0x18,0x9f,0xee,0x8d, \
+0x8a,0xa6,0xd9,0xe5,0x9c,0x28,0x50,0xe3,0x59,0x08,0x68,0xd5,0xa5,0xbf,0x8f,0xa5, \
+0xb9,0xf1,0xda,0x10,0xb1,0x1d,0xf1,0x88,0x32,0x78,0xa0,0xf5,0x0d,0x6e,0x75,0x15, \
+0x06,0x56,0x49,0x59,0x20,0xaa,0x45,0x92,0x51,0x81,0x52,0x29,0x3f,0x93,0x05,0x28, \
+0x4a,0x10,0x58,0xa9,0x40,0x16,0x6d,0x56,0x37,0xf6,0x69,0x97,0xf2,0x3a,0x83,0x93, \
+0x03,0xc5,0x44,0x87,0xbf,0xcc,0xe2,0x4a,0x01,0x7f,0x1c,0xbd,0xe0,0xd1,0x86,0x4e, \
+0xf2,0x0e,0xab,0xe0,0x67,0x6b,0x6a,0xe4,0xbb,0x63,0x20,0xb4,0x09,0x94,0xcf,0x48, \
+0xb5,0x00,0x34,0x18,0x7b,0xf8,0x0d,0x9a,0xd2,0x0d,0xb3,0x11,0x21,0x27,0x17,0xd3, \
+0x53,0x1c,0xf7,0x54,0x3a,0x08,0x20,0xe8,0x83,0x00,0xe2,0x68,0x75,0x75,0x36,0xdd, \
+0x1d,0xcc,0x8b,0xd0,0xb3,0xc0,0x90,0xdf,0x9b,0x1b,0x49,0x28,0x24,0x0f,0xb3,0x54, \
+0x67,0x79,0xe1,0x37,0xa1,0x4f,0x33,0x3a,0x5f,0x3a,0xca,0x48,0xca,0xe8,0xf3,0x25, \
+0x66,0x20,0xde,0x54,0xe4,0xcc,0xee,0x8e,0xcf,0x7c,0x73,0xc6,0x43,0xb7,0x2e,0xc5, \
+0xb0,0x68,0xd8,0xb4,0x3d,0x32,0x74,0xd0,0x3a,0x6c,0xeb,0xd7,0x27,0x11,0x8d,0x42, \
+0x81,0xc3,0xdb,0xfc,0xb0,0x1b,0xfb,0x79,0x22,0x52,0x35,0xc3,0x42,0x9e,0x2c,0xbe, \
+0xca,0x3a,0x83,0xc9,0x7e,0x4f,0x80,0x23,0x63,0x94,0x42,0xc0,0x75,0xf3,0x94,0x76, \
+0xf6,0xba,0xca,0xde,0xd0,0xd3,0x1d,0x0e,0x96,0xd5,0x62,0x48,0x54,0x52,0x9d,0x9a, \
+0x1e,0xb9,0x0d,0x13,0xfb,0xbf,0xab,0xbc,0xdf,0x86,0x1d,0x45,0xc9,0x79,0x0a,0x4a, \
+0x20,0x7f,0x99,0x7a,0x86,0x64,0x0c,0xce,0x63,0x0b,0xad,0x8d,0x79,0xe1,0xaf,0x42, \
+0xf3,0x04,0xc1,0x72,0x21,0x10,0x4f,0xe5,0x6a,0xc5,0x84,0x5f,0x74,0xde,0xf2,0xaf, \
+0xb0,0xdd,0x30,0x50,0x05,0x38,0xea,0x4c,0x7c,0xff,0xbf,0x51,0x97,0x77,0x6d,0x10, \
+0xad,0x40,0x3f,0x60,0x6e,0xc0,0x04,0x46,0x0b,0x2a,0x80,0x88,0x09,0xed,0xf0,0xff, \
+0xa6,0x6d,0x01,0x80,0x48,0xfa,0x27,0x01,0x52,0xc9,0xc8,0xe3,0x8e,0xed,0x9e,0x58, \
+0x34,0x3e,0xc2,0x88,0xac,0x16,0x31,0xa0,0xd6,0x45,0x89,0x18,0x4d,0x64,0x68,0xa4, \
+0x18,0xa8,0xc4,0x8a,0xa0,0x22,0x02,0xc6,0x2a,0x7f,0x36,0x58,0xb2,0x68,0x85,0x15, \
+0x51,0x60,0xb0,0x45,0x04,0x44,0x45,0x51,0x82,0x20,0xa0,0xc4,0x14,0x46,0x4c,0xd9, \
+0x55,0x11,0x58,0xc9,0xa0,0xd6,0x65,0xa8,0x2c,0x8c,0x5f,0x10,0x63,0x42,0x8b,0x9b, \
+0xf1,0xfa,0xbf,0x36,0xdc,0x79,0x9a,0x9a,0xf8,0xeb,0x1f,0x9f,0x20,0x1c,0x58,0x1f, \
+0x33,0x24,0xa3,0x02,0x2c,0x50,0xfe,0x6d,0x48,0x1d,0x6d,0x90,0x58,0x2c,0x22,0x0b, \
+0x21,0xd4,0x9d,0xae,0x3d,0x76,0x17,0xb2,0x95,0xd3,0x52,0x95,0x8a,0x72,0xc6,0x0c, \
+0x2f,0xf0,0xfc,0x16,0x79,0x66,0x8b,0xb6,0x61,0x7e,0xa7,0x2f,0xf7,0xda,0x22,0x67, \
+0x21,0xc0,0x30,0xe5,0xa4,0xcf,0xfc,0x81,0x84,0x18,0x28,0xd5,0xaf,0x1e,0xcf,0xf4, \
+0xfe,0x7d,0xe7,0x97,0x20,0xe3,0xd9,0xf7,0x4e,0x1e,0xc6,0x72,0x2a,0x6e,0x53,0x4b, \
+0x2e,0x33,0x5f,0xa4,0xd7,0x6a,0xc2,0x35,0xa0,0xfa,0x12,0x76,0x56,0xaf,0x7b,0xac, \
+0x99,0xc2,0x05,0x09,0x7c,0xe5,0x2a,0xed,0x4a,0xc4,0xaa,0x75,0x64,0x6d,0xf6,0x36, \
+0xdb,0x18,0x96,0x97,0xdd,0x14,0x1f,0x04,0x72,0xa4,0x27,0x30,0x6f,0x4a,0x57,0x5b, \
+0x83,0x55,0x47,0xa2,0x3f,0x22,0x85,0x8d,0x1f,0xe7,0xdf,0xde,0x15,0xba,0x6f,0xbd, \
+0xd5,0xa0,0xfb,0xd2,0xe4,0x81,0x49,0x3f,0x37,0xde,0xbc,0xa4,0xd2,0xc4,0x4a,0xfa, \
+0x23,0x92,0xe8,0xa0,0xb4,0x20,0xbe,0x4c,0x56,0x63,0x1d,0x11,0x1e,0x88,0xa9,0x79, \
+0x1c,0xe8,0xe9,0xfb,0x52,0x52,0x54,0x9b,0x3d,0xaf,0x59,0x7d,0xf5,0xfd,0x4b,0x5f, \
+0x8c,0x77,0x71,0x2b,0xef,0x9f,0x13,0xf3,0xad,0xf2,0x5e,0x51,0xbc,0xba,0xa4,0xf5, \
+0xc1,0xb7,0x07,0xf5,0xdf,0x80,0x46,0x08,0xbd,0xb8,0xe5,0xc1,0xc4,0xcd,0x8b,0x8d, \
+0x55,0xe4,0x73,0x47,0x91,0xa0,0x6c,0x25,0x78,0x61,0xcc,0xe7,0xfa,0x1a,0xaa,0xe7, \
+0x15,0xd5,0xc9,0x2a,0xa3,0xc5,0x5c,0x5a,0xb7,0xbd,0xa9,0x82,0xc9,0xfe,0xcb,0x57, \
+0x0a,0x19,0x09,0xb3,0x61,0x13,0x3a,0x2c,0xdb,0x61,0xae,0x4b,0x92,0x7d,0xb7,0x3e, \
+0xac,0x12,0x7a,0x74,0x4e,0x5a,0x32,0x4d,0x81,0x9d,0x33,0x9b,0xf9,0xc4,0x61,0x73, \
+0xaa,0xd7,0x6a,0x57,0xaa,0x49,0x5b,0x1a,0x0b,0x71,0xc7,0xc6,0x15,0x39,0xe9,0x6b, \
+0xb7,0xa1,0x8c,0x40,0x13,0x3b,0xbf,0xb6,0xe4,0xad,0xee,0x93,0xbb,0x4e,0x82,0xdd, \
+0x81,0xa3,0x82,0xf1,0xa1,0x40,0x4e,0x68,0x17,0x74,0x94,0xd7,0xf7,0x22,0x9b,0x2c, \
+0x0d,0x3a,0x89,0x0b,0x57,0x08,0x4f,0x38,0x82,0x83,0xf6,0x3d,0x44,0x4a,0x50,0x57, \
+0x12,0x18,0x1e,0x3a,0xb3,0x9f,0x43,0x4a,0xed,0xf0,0x5c,0xd1,0x2c,0x3a,0x1c,0x88, \
+0xa7,0x5e,0x57,0xf4,0xf8,0xad,0xfe,0xce,0x13,0xd0,0xdc,0x6f,0xfd,0x5a,0x6a,0xdb, \
+0x72,0x1b,0xa1,0xb8,0xb0,0x80,0xba,0xb1,0xe2,0x1c,0xbb,0x51,0x10,0x11,0x5c,0x9d, \
+0xde,0xc6,0x34,0x9a,0x60,0xab,0x08,0x9e,0x41,0xf4,0x1f,0x03,0x1e,0x70,0x4a,0x03, \
+0xe7,0x9e,0xc1,0xdf,0x3a,0x87,0x1d,0xeb,0x23,0x24,0x23,0x60,0x17,0x16,0x05,0xda, \
+0xd1,0xc4,0xc5,0x87,0xbd,0xee,0x73,0x80,0x68,0x63,0x88,0xb9,0x86,0x92,0xb3,0x0e, \
+0xdc,0x3a,0x7b,0xb5,0xcb,0xf4,0x18,0xc6,0x3f,0x5b,0xfd,0x3f,0x8e,0x87,0xb0,0x3d, \
+0x15,0x80,0x53,0x7f,0x4f,0xd0,0xcc,0x96,0xcf,0xa9,0x70,0x69,0x80,0x59,0x25,0x42, \
+0x36,0x90,0x30,0xc0,0xa3,0x53,0x07,0x17,0xa2,0x7f,0xbb,0x25,0xfd,0x88,0x7d,0x6b, \
+0xfe,0x83,0x84,0x08,0x7b,0x63,0xc0,0xa7,0xcb,0x23,0x8e,0xaa,0x02,0xb7,0x40,0xc7, \
+0xdb,0x2c,0x90,0x04,0xb3,0x3f,0xc6,0x5d,0xdd,0x08,0xca,0x21,0x00,0x11,0xde,0x72, \
+0xc9,0xd3,0x24,0xf2,0x3b,0x11,0xdd,0x63,0xf1,0xc6,0x10,0xf4,0x81,0xec,0x61,0xc9, \
+0x27,0xd4,0xf9,0xfd,0xb9,0xdd,0xda,0x1f,0xc6,0xe6,0x19,0x0e,0x48,0xa0,0x0c,0x3d, \
+0x76,0x9f,0x68,0x3c,0x3d,0x80,0xc4,0x4d,0x7f,0x25,0x98,0x40,0x88,0x94,0x69,0x17, \
+0xcd,0x7b,0x9a,0xc0,0xa7,0x8c,0xa0,0xfe,0xf2,0xb1,0x18,0xda,0xf1,0x06,0x55,0x3c, \
+0x3c,0xa0,0xa0,0xbb,0xcf,0x5c,0x95,0x7e,0x90,0x80,0x3f,0xdf,0xb5,0x42,0x74,0xea, \
+0xab,0xe1,0xb1,0xf2,0x60,0xb1,0xb2,0xa9,0xe7,0x59,0x99,0x7b,0xa7,0xef,0xf5,0x4f, \
+0xe3,0x8f,0x2f,0xc6,0x85,0x6c,0x85,0xd9,0x4b,0xbf,0xef,0x8d,0x1f,0x90,0xbb,0x7f, \
+0x9b,0x1b,0x1b,0x28,0x74,0xde,0xec,0xa7,0xd7,0x0a,0x19,0x7c,0x71,0xf3,0x9d,0xca, \
+0x45,0xbb,0xd5,0x83,0xb8,0xb8,0x8a,0x52,0x4a,0xc9,0x6a,0x87,0x02,0x99,0xe4,0x7d, \
+0x73,0x50,0xb4,0x01,0xb2,0x88,0x64,0xaa,0x72,0xd6,0xef,0x51,0xda,0x01,0xe9,0x40, \
+0x02,0xe8,0x0d,0xa5,0x1f,0x25,0x2e,0xfb,0x5d,0x94,0xd4,0x66,0xe1,0x52,0xf6,0xac, \
+0x7d,0xa6,0x7a,0x27,0xcd,0x15,0xe9,0xd1,0x36,0x58,0x72,0x48,0x7d,0x04,0x65,0x67, \
+0xda,0x80,0x65,0xac,0x90,0xb0,0x7d,0x67,0xdf,0xe3,0xcc,0xf8,0x1a,0xcb,0xe3,0xd3, \
+0xdd,0x03,0x03,0x12,0xcb,0xe7,0x82,0x61,0x9a,0x26,0x47,0xba,0x5c,0xdf,0x4f,0x4d, \
+0x30,0xc2,0x7f,0x01,0x3d,0x4e,0x02,0x31,0xb4,0x26,0xfc,0x9c,0x61,0x07,0xba,0xe8, \
+0x15,0xba,0xee,0x0e,0x59,0x89,0x65,0xe9,0x17,0xc9,0x5f,0x76,0x48,0xf1,0xd8,0x9b, \
+0xeb,0x0d,0xb1,0x50,0xab,0xd8,0x22,0x02,0x4d,0xfe,0xdd,0x60,0xf8,0x77,0xe2,0x92, \
+0xe2,0x1f,0x06,0x8a,0x85,0xe1,0x81,0x95,0xd8,0xfc,0x23,0xcc,0x7c,0x9e,0x01,0x7d, \
+0xed,0x43,0x48,0x87,0x0a,0x25,0x40,0xa7,0x40,0x62,0x33,0x24,0x8d,0xd9,0xf0,0x29, \
+0xe6,0x18,0x1e,0xcc,0x56,0x2a,0x68,0x30,0xf9,0x9a,0x88,0x3e,0x7e,0xff,0x1c,0x73, \
+0xc7,0x51,0x26,0xe8,0x28,0x4f,0x2f,0x0e,0x8c,0xfc,0x6f,0x9d,0x6f,0xa1,0x4c,0x33, \
+0x81,0x8a,0x3a,0xd6,0xed,0xd9,0x22,0x49,0x0a,0xbc,0x60,0xc5,0x90,0xc8,0xf4,0x97, \
+0x85,0x98,0xd1,0x52,0x0d,0x26,0x61,0x40,0x39,0x3b,0x12,0xf8,0x32,0x30,0x62,0xee, \
+0x5a,0xc4,0x24,0x35,0x2d,0x1d,0x75,0xdf,0x8a,0xd1,0x9c,0x0a,0x1a,0xc8,0x38,0x08, \
+0x05,0x57,0xef,0x99,0x82,0x24,0x32,0x7c,0x41,0xb9,0xa7,0xd4,0x67,0x66,0xd2,0xd8, \
+0xc8,0x43,0x2a,0xb3,0x43,0x5d,0x00,0x17,0x8c,0xe7,0x9d,0xa9,0xd3,0x78,0x7e,0xfa, \
+0x94,0x70,0xde,0x53,0x21,0x94,0x2b,0xe8,0x4c,0xc3,0xd3,0x48,0xa8,0x4e,0x32,0xaa, \
+0xe1,0xd9,0x19,0x1c,0x9b,0x8c,0x92,0xa6,0x38,0x25,0xd5,0xcd,0x02,0x1d,0x8b,0xbf, \
+0xc5,0xa3,0xf0,0x6b,0x2e,0x83,0x3d,0xa6,0x49,0x7d,0x3e,0x71,0x9e,0xbd,0x84,0x90, \
+0x30,0x5e,0x88,0xa5,0x12,0x28,0xf9,0xbb,0xf4,0xb0,0x7a,0x72,0x0f,0x1c,0x1f,0x68, \
+0x74,0x9b,0x1a,0xa1,0x53,0xc7,0x1d,0xf7,0x6e,0xd3,0xdd,0xc9,0x75,0xaf,0x6b,0x7e, \
+0x26,0x42,0x70,0xfa,0x68,0xf6,0xda,0x93,0xab,0xb3,0xc5,0x64,0x35,0xc5,0x1d,0x49, \
+0xde,0x11,0xa9,0x12,0x89,0xf2,0x8f,0x53,0x1b,0x21,0xaf,0x8b,0x0a,0xa2,0x5a,0x49, \
+0x42,0x25,0x80,0x70,0x0f,0xdb,0x60,0x9d,0xd7,0x77,0xa1,0x12,0x7b,0x24,0x57,0x77, \
+0x77,0x55,0x78,0x33,0x4b,0x85,0xa7,0x6e,0xe9,0x1e,0xfa,0x71,0xa0,0x75,0x06,0x07, \
+0xf5,0x42,0xc4,0xd9,0xaf,0x26,0x4d,0xc0,0x42,0x06,0xe7,0xf1,0x65,0x41,0x9c,0x3e, \
+0x14,0x9c,0xd0,0x9e,0x3f,0xd2,0x9a,0xcf,0x0e,0x57,0xe5,0x64,0xed,0x4c,0xdb,0x28, \
+0x93,0xb1,0x09,0x67,0x2a,0x6d,0xd5,0xe0,0x70,0xc9,0x30,0x95,0xa8,0x9c,0xd3,0x83, \
+0x8e,0x3c,0x6f,0xbb,0xdd,0xb6,0x49,0xa7,0x6e,0x9e,0x23,0xbc,0x31,0xdd,0x08,0xcb, \
+0xe3,0xb6,0x57,0x0d,0xb6,0x10,0x3f,0x36,0xa0,0x31,0xf3,0xb9,0x12,0x6c,0x33,0x85, \
+0xd7,0x8c,0xe4,0xd6,0x96,0x8b,0xe7,0xd4,0x87,0xdb,0x42,0x8e,0x7a,0xe6,0x9e,0xe3, \
+0x34,0xb0,0x69,0x76,0x4a,0x21,0x84,0x43,0x85,0x13,0x10,0xdc,0x8c,0x69,0x38,0x82, \
+0x54,0xc8,0x39,0x43,0xe6,0x8f,0xb3,0xe1,0x1a,0xaa,0xdc,0x4d,0x34,0xc2,0xa7,0x03, \
+0x85,0x95,0xb5,0xaf,0x1d,0x41,0x05,0x91,0x04,0x1d,0xac,0x0a,0xc3,0x52,0x1e,0x24, \
+0xd0,0x82,0xb1,0x35,0x5b,0x4e,0x03,0x29,0xbe,0x29,0x32,0xa2,0x19,0x17,0x81,0x20, \
+0xb0,0xd5,0x09,0x70,0x71,0x1d,0x5c,0x21,0x61,0xc6,0x1b,0x82,0x70,0x06,0x01,0x75, \
+0xb8,0xd5,0x14,0xa0,0xd6,0x50,0x56,0x46,0x16,0xf0,0xc7,0x86,0x0c,0xa4,0x18,0x30, \
+0x05,0x4c,0x42,0x32,0xf0,0x87,0xc4,0xec,0xe1,0xd6,0x08,0x9d,0x5a,0x4c,0x6f,0x29, \
+0x58,0x25,0x9c,0x77,0x34,0xd0,0x99,0xd2,0x90,0x3b,0x59,0x0c,0x41,0x64,0x3d,0x72, \
+0xd5,0x3e,0x66,0x98,0x45,0xf9,0x62,0x38,0x90,0xc1,0xf7,0xa5,0x17,0x74,0xf0,0xc2, \
+0xb6,0xa1,0x7d,0xff,0x15,0x5d,0xc8,0x40,0xd1,0x7f,0x0f,0x54,0xef,0x14,0x7d,0x29, \
+0x41,0x53,0xac,0x29,0x2c,0x93,0x5b,0x57,0x5b,0x43,0x4a,0x59,0xb4,0x42,0xa4,0x83, \
+0xeb,0x8f,0x3b,0xf6,0xc0,0x02,0xe4,0x93,0xf8,0x76,0x84,0xa3,0x6e,0x65,0x4d,0xa0, \
+0xa1,0x8e,0x30,0x1a,0xba,0x57,0xb5,0x94,0x72,0x90,0xef,0x72,0x84,0xd3,0x4d,0x32, \
+0x3b,0x65,0xa1,0x58,0x2d,0x13,0xd2,0x72,0xc9,0x83,0xe8,0xec,0xc0,0x5d,0x75,0x77, \
+0xea,0xf1,0x0d,0x0b,0x22,0x1b,0x85,0x10,0x92,0x61,0x09,0xb0,0xaa,0x40,0x89,0x05, \
+0x54,0x06,0x82,0x28,0x36,0x3a,0x5b,0xcc,0xa6,0x58,0xa4,0x98,0x64,0x47,0x5c,0xe3, \
+0x08,0x61,0xa6,0x4b,0x45,0x82,0xd6,0xbd,0xb4,0xb8,0x73,0x82,0x0d,0xe5,0x86,0xd3, \
+0x66,0x69,0x14,0x0e,0x69,0x0c,0x98,0x06,0x6b,0x4d,0x31,0x94,0x12,0xcd,0x10,0x09, \
+0xa4,0x57,0x92,0x43,0x7a,0x63,0x93,0xab,0x08,0x91,0xbd,0x37,0x6c,0x22,0x5d,0xb2, \
+0x5d,0x32,0x80,0x82,0xf0,0x03,0x27,0xa3,0x39,0x69,0x42,0x9a,0x0f,0x5d,0xc0,0xb1, \
+0x88,0xcb,0xb0,0x0f,0xb8,0xe9,0xe5,0x78,0x3b,0x11,0xc0,0x71,0x7e,0xc2,0x3c,0x21, \
+0xde,0x51,0xa8,0x1a,0xff,0x0a,0x4d,0x2d,0xab,0x1e,0xcc,0x1a,0x7e,0x5f,0x55,0x54, \
+0x12,0x44,0x64,0xe2,0x74,0xef,0x0a,0x24,0x59,0x44,0x45,0xee,0x1c,0x62,0x16,0xd9, \
+0x30,0x5b,0x3e,0xad,0x38,0x9e,0x2e,0x9a,0x9a,0xd7,0x52,0x2e,0xb9,0xa0,0x6d,0x36, \
+0x02,0xfb,0x7b,0x27,0xb7,0xb6,0x2c,0xff,0x9c,0xc1,0x17,0xf9,0x78,0xae,0x7d,0x77, \
+0x3b,0xf4,0x3a,0xdb,0x6f,0x84,0xca,0x8a,0xf7,0x12,0x14,0x31,0xa0,0x78,0x0f,0x7b, \
+0x52,0x7c,0xf8,0xf9,0x05,0x17,0xc1,0x88,0x57,0x9e,0xdc,0xd1,0x3f,0x5e,0x15,0x3c, \
+0x28,0x29,0x17,0x6c,0x6e,0x00,0x3b,0x37,0xef,0x45,0xea,0xd1,0x2e,0xe5,0xa6,0xeb, \
+0x48,0x25,0xc1,0xa3,0xea,0x68,0x0f,0xcc,0x1f,0xbe,0xf3,0xd0,0x9e,0x79,0x10,0x60, \
+0xcc,0x17,0x55,0xe1,0x1c,0x23,0xa9,0x8d,0x31,0xf4,0xfa,0x4e,0xe3,0x88,0x20,0xee, \
+0xf1,0xc1,0x99,0x74,0x31,0x69,0x2c,0xb7,0x53,0x74,0x1a,0x8d,0x38,0x84,0xa5,0xcb, \
+0x89,0xdd,0x32,0xcf,0x67,0x8e,0x57,0xcf,0x58,0xac,0x64,0x78,0x35,0x76,0x26,0x3d, \
+0x7a,0x61,0xa9,0x07,0xe6,0x5f,0x94,0x8d,0xdb,0xea,0xf1,0x71,0x27,0xa2,0xa9,0x36, \
+0xfc,0x14,0x2c,0x68,0xcf,0xbb,0xac,0x2b,0xa5,0xd6,0x53,0x70,0x2e,0x45,0x8a,0xf4, \
+0xa7,0xd0,0x23,0xaa,0xd4,0x1b,0xe0,0xcb,0xc5,0xb2,0xfa,0x2b,0x10,0x94,0x6b,0x83, \
+0xa1,0x81,0x13,0xbd,0xa0,0xf9,0x81,0x89,0x12,0xb8,0x66,0x40,0x7b,0x5a,0xc9,0x21, \
+0xbc,0x45,0x19,0x44,0x68,0x8c,0x58,0xc5,0xc6,0xb4,0x7b,0x0a,0x07,0xba,0x8c,0xda, \
+0xae,0x0b,0x23,0xa3,0xd3,0xe3,0xd3,0x79,0xe6,0xf4,0x3b,0x20,0x57,0x11,0x7a,0x37, \
+0xd2,0x9e,0x88,0x1e,0xb0,0xbb,0xda,0x1a,0x8a,0x0d,0x62,0xce,0x8a,0x21,0x71,0x5b, \
+0x0a,0x4d,0x37,0x2e,0xd6,0x27,0x19,0xcc,0x06,0xb0,0x60,0x3d,0x64,0x5b,0x81,0x1b, \
+0xb0,0xe2,0x32,0xaf,0x7d,0x97,0x01,0xf6,0x17,0x0e,0x18,0x58,0xd3,0x70,0xb3,0xb9, \
+0x71,0x2b,0xb6,0xb4,0xf9,0x17,0xc1,0x45,0xaa,0x5b,0xb0,0xba,0x59,0x5c,0x1e,0x17, \
+0xcb,0x4e,0xe9,0xad,0xd9,0x65,0x51,0x6e,0x55,0x29,0xf8,0xf0,0xe3,0xc5,0xe4,0x46, \
+0x46,0x1c,0x60,0x42,0x31,0xe1,0x65,0xa9,0x53,0x30,0xbb,0x04,0xb1,0xd3,0x71,0x82, \
+0x91,0x11,0xa5,0xae,0x09,0xe3,0x86,0xa0,0x8a,0xf6,0x23,0x76,0x71,0x0d,0x0b,0x7c, \
+0x30,0xad,0xe2,0xb9,0x34,0x43,0xb3,0x73,0x05,0x84,0x88,0xce,0xf8,0xd4,0x16,0x38, \
+0x63,0x97,0x48,0x15,0xbe,0x7b,0x3a,0xa1,0x99,0xd7,0x61,0x4b,0x30,0x67,0xad,0x61, \
+0x21,0x6d,0x2b,0x6a,0x59,0x46,0x05,0x24,0x38,0x8d,0x38,0xe6,0x1d,0x20,0x8c,0x62, \
+0x0e,0x1c,0x35,0xd8,0xa0,0x6c,0x3e,0x3a,0xf4,0xe1,0x6b,0x16,0x73,0xa6,0x8e,0x8e, \
+0x46,0x22,0x79,0xed,0x30,0x91,0xaa,0x20,0x58,0xd6,0x09,0x80,0x20,0xb7,0xbe,0x1c, \
+0x71,0x64,0xa6,0x36,0xa3,0xa6,0xbb,0xb7,0x11,0x6b,0x2e,0x15,0x20,0xb9,0x39,0xab, \
+0xeb,0x70,0x37,0xa5,0x15,0x28,0xac,0x8a,0xf5,0x41,0xc3,0x0b,0xf1,0xb4,0x11,0xab, \
+0xec,0x82,0x37,0x52,0xaa,0xee,0x4b,0x83,0x21,0xd5,0xac,0x2d,0x6c,0x98,0x17,0x5b, \
+0x71,0x97,0x99,0x10,0x98,0x7b,0x45,0xb4,0x55,0x94,0x7d,0xad,0x6d,0x6f,0xc2,0x43, \
+0xdb,0x67,0x6c,0xdf,0x04,0x12,0x6d,0xb5,0x5f,0x53,0x32,0xb6,0xb8,0x53,0x33,0x22, \
+0x29,0x53,0x67,0x90,0x65,0x7c,0x18,0x9a,0xab,0x2b,0xdb,0x02,0xce,0xe7,0x26,0x04, \
+0x56,0xc6,0x94,0xae,0x6a,0x60,0xbe,0xca,0x2f,0x71,0x70,0xe5,0x46,0x02,0x5e,0xa4, \
+0xa8,0x0a,0xad,0xc3,0x4d,0x31,0x7b,0xe6,0xe7,0x1b,0x83,0xc5,0xee,0x28,0x0e,0x15, \
+0x29,0x42,0x13,0x5a,0xbe,0xc2,0x02,0xf3,0x38,0xd8,0xf3,0x6a,0x0c,0x4c,0x04,0xb5, \
+0x96,0xc2,0x03,0x35,0x04,0xd8,0xd6,0x0b,0xa1,0x55,0x57,0x1a,0x1d,0x25,0x34,0xd1, \
+0xf2,0xec,0x5d,0x6b,0x15,0xf2,0x22,0xde,0x2d,0xb8,0x6c,0x6e,0x4e,0x78,0xf0,0x93, \
+0x53,0x6b,0x87,0xd3,0x57,0xbb,0x36,0x6f,0xd8,0x78,0xaa,0x2c,0x16,0x5a,0x9a,0xf0, \
+0xad,0x68,0x60,0x6f,0x66,0xb6,0x8e,0x56,0xb5,0xd7,0x32,0xd1,0xd1,0x20,0xdc,0x57, \
+0xe4,0x8a,0x36,0x10,0xb6,0x28,0xb1,0x87,0x8c,0x86,0xf2,0x50,0xac,0x2f,0xd6,0x9f, \
+0x9a,0x70,0xdf,0x13,0x42,0x07,0x79,0x13,0xb3,0x4c,0xe7,0x81,0xb2,0x56,0x77,0x31, \
+0xf1,0x06,0x2a,0xed,0x0b,0xb4,0x05,0xa1,0xcb,0x53,0x1d,0xd5,0x00,0xd0,0x75,0x8f, \
+0xea,0x79,0xad,0x8d,0x8c,0x24,0x89,0x51,0xc1,0xb7,0x25,0x2a,0xd2,0x1a,0x18,0x22, \
+0x71,0x11,0x08,0xd9,0x1a,0x69,0x75,0xd6,0x2e,0x61,0x52,0x08,0xea,0x79,0x2f,0x99, \
+0x87,0xa6,0x88,0x16,0x31,0x57,0x22,0x75,0xc3,0x35,0x87,0x85,0x98,0x3e,0x9b,0x02, \
+0x19,0x18,0x80,0x6a,0x00,0xbb,0xce,0x62,0x84,0xae,0x54,0x79,0x3b,0xcc,0x9f,0x03, \
+0x0f,0xb0,0x6f,0xac,0xe0,0x33,0x7c,0x79,0x4a,0x64,0x58,0xda,0xb7,0xea,0x16,0x1e, \
+0xfb,0x4e,0xa6,0x0b,0x8b,0x06,0x3d,0x6c,0xde,0x04,0xaf,0xb0,0x3a,0xa1,0x6f,0xec, \
+0x36,0x01,0x1d,0x0a,0x1d,0x83,0x4a,0x6e,0x11,0xb1,0x27,0xe0,0x6d,0x09,0x52,0x20, \
+0xcb,0xc4,0xd4,0xd7,0x79,0x69,0x67,0x88,0xc7,0x94,0x84,0x34,0xef,0x27,0x44,0x33, \
+0x98,0xa7,0x81,0x92,0xda,0xe5,0x73,0x18,0xaf,0xe2,0x96,0xa7,0x28,0xc8,0xe0,0x2f, \
+0x41,0x08,0xb5,0xc9,0x15,0x61,0x59,0x58,0x31,0xef,0x4d,0xa9,0xe7,0x3e,0x59,0x43, \
+0x1d,0x15,0x01,0x34,0x38,0xfb,0xd0,0x68,0x1d,0xeb,0xc9,0x10,0xe0,0xf9,0xf2,0x6d, \
+0x1b,0x56,0x82,0x68,0xc6,0x53,0x43,0x09,0x43,0x5f,0xc5,0x38,0xef,0x26,0xd3,0x8c, \
+0x37,0xe4,0xdb,0x9e,0x19,0xf1,0x17,0x54,0x4c,0x43,0x77,0x51,0x44,0x1f,0x5e,0x16, \
+0x28,0xab,0x6f,0xde,0x76,0x1b,0x2b,0x7d,0x6d,0xdf,0x93,0xe3,0x78,0xf5,0xb6,0x6e, \
+0xcc,0x49,0x86,0xe1,0x2b,0xa0,0xd9,0xa2,0x61,0x9e,0xa4,0xd7,0x4c,0x27,0x7f,0x40, \
+0xd1,0x01,0x36,0x0c,0xfa,0x36,0x39,0x22,0x79,0xf4,0xe0,0x1b,0x1d,0xee,0x65,0xa3, \
+0x06,0x6d,0xcd,0xcc,0x39,0xf0,0xd0,0xd5,0x9e,0xbd,0x57,0x5e,0x62,0xaa,0x1b,0x8f, \
+0x48,0x56,0x50,0xfe,0x46,0x0c,0xc0,0xef,0x68,0x8a,0x2d,0xd4,0x59,0x1f,0x81,0xa2, \
+0x20,0xb9,0x10,0xe8,0xf2,0xbc,0xf7,0xbb,0x9c,0x60,0x65,0xf4,0xa0,0x2e,0x9b,0x4b, \
+0x47,0x78,0x40,0x3b,0x1a,0xde,0x9a,0x58,0xdf,0x77,0x1b,0x26,0x8c,0xaf,0x6a,0xc6, \
+0x85,0xf0,0x63,0x63,0x33,0x20,0x63,0x86,0xbf,0x25,0x88,0xd2,0x4f,0x03,0x00,0xd7, \
+0x6d,0xb6,0x33,0x68,0xc4,0x31,0xe5,0xb9,0x30,0xc9,0x56,0x89,0x55,0x03,0x68,0xa8, \
+0x3f,0x48,0x19,0x7a,0xff,0xe0,0x32,0x89,0x62,0x7b,0xfa,0x84,0xe4,0xea,0xca,0x08, \
+0x43,0xa8,0xa5,0xa4,0x50,0x59,0x7d,0x78,0xc6,0x3c,0xef,0x95,0xe8,0x18,0x48,0x79, \
+0x1a,0x96,0x4e,0xc4,0x27,0xa0,0xe8,0x1d,0xa2,0x46,0xca,0x44,0xbc,0x18,0xf1,0x2e, \
+0xb3,0xc0,0xe5,0x48,0x6d,0xe5,0x96,0x45,0xf9,0xd3,0x2a,0x10,0xb0,0xce,0x39,0x62, \
+0x14,0xc4,0x91,0xcc,0xf0,0x63,0x59,0x20,0x95,0x10,0xd3,0x52,0x04,0xd5,0xea,0x07, \
+0xb5,0x7b,0xc9,0xce,0x55,0xe7,0x5e,0x69,0x4b,0x16,0xf3,0x86,0x65,0xd1,0x46,0xd0, \
+0x09,0xeb,0xa2,0x38,0xac,0xe8,0x59,0x25,0x95,0xd1,0x4b,0xa3,0x59,0x0b,0x3e,0x55, \
+0x92,0x95,0x67,0xa0,0x12,0xf5,0xa2,0xcd,0xc5,0x95,0x88,0x11,0x56,0x82,0x85,0x21, \
+0x52,0xca,0x28,0x31,0xbf,0x09,0x84,0xde,0x67,0x02,0x35,0x59,0x60,0x56,0xf8,0xd8, \
+0x9c,0x6f,0x66,0x73,0x17,0x45,0x8f,0x21,0xee,0x53,0x7d,0x68,0x4f,0xb1,0x94,0x9a, \
+0xcf,0xb8,0xe8,0x1e,0xce,0x61,0xbc,0xde,0x2d,0xe1,0xeb,0x94,0x9c,0x46,0x75,0x32, \
+0x20,0xaf,0x16,0x05,0x8c,0x18,0xc5,0xb4,0x2d,0x0b,0x64,0x62,0xaa,0x46,0x3a,0x5a, \
+0xac,0x87,0x49,0x44,0xb3,0x4f,0x0f,0xd8,0x77,0x5f,0x69,0xcc,0xd1,0xdc,0xe3,0x24, \
+0x3c,0x27,0x14,0xf3,0x19,0xc3,0x0b,0xef,0xd5,0x2b,0x47,0xe5,0x4f,0x11,0xa6,0x8d, \
+0x34,0x41,0xd2,0xd1,0xac,0xc2,0x3a,0x5c,0xa2,0xa2,0xed,0x71,0x8d,0x85,0xb6,0xa7, \
+0x0e,0x96,0xc7,0x83,0xde,0x1f,0x34,0xda,0x1c,0xc9,0xa8,0x9c,0xcd,0xe1,0x76,0x30, \
+0xdc,0xcb,0x72,0xe2,0xdd,0x9b,0x0b,0x63,0xc7,0x6b,0x3a,0x34,0x22,0x14,0x28,0xe6, \
+0xd1,0x6d,0x74,0x18,0xf5,0x64,0x19,0x3e,0x49,0x21,0xc7,0xa0,0xec,0xf8,0x66,0xa5, \
+0xd6,0xe0,0x18,0x66,0x6a,0x24,0x92,0xc3,0x88,0xad,0x6d,0x83,0x3b,0x77,0xd0,0x4d, \
+0x61,0xa8,0xf6,0xf7,0x70,0x05,0xf5,0xb2,0xfe,0x4e,0xec,0x43,0xa2,0x40,0xfb,0x10, \
+0xdc,0x79,0x41,0x93,0xc6,0x6e,0x2f,0xee,0xa2,0x8d,0xfa,0xcb,0xcb,0xbd,0x98,0x88, \
+0x59,0xb1,0x75,0x70,0x8f,0x35,0xd2,0x62,0x5f,0xf2,0x1c,0x84,0xc2,0x4d,0x0d,0xa4, \
+0xda,0x98,0xc3,0x58,0x61,0x98,0x60,0x2e,0xc9,0x32,0x84,0xc0,0x91,0x63,0x04,0x15, \
+0x68,0xda,0xd8,0x38,0xa1,0x59,0x22,0x84,0x44,0xf0,0xb4,0xc3,0xc3,0x3a,0x9d,0x1c, \
+0xf3,0xcd,0xd9,0x1f,0xed,0xd3,0x74,0x3c,0xef,0xca,0x4f,0x86,0x72,0x0f,0x13,0xdc, \
+0x87,0x28,0x10,0xb8,0xcf,0x3d,0xb5,0xde,0x0f,0xba,0xaa,0x30,0xdc,0x61,0xcc,0x9f, \
+0xa0,0xfa,0x2c,0x69,0xdd,0x18,0x12,0xb1,0x69,0x70,0x40,0x4c,0x46,0x1b,0x06,0x80, \
+0x26,0xe8,0xa3,0xdf,0x20,0x6b,0x90,0x03,0xb0,0x61,0x0f,0x6e,0x0b,0x35,0xea,0xa4, \
+0x31,0x79,0x82,0x22,0x0e,0x03,0x05,0x4c,0xf3,0xb9,0x90,0x32,0xf2,0xd1,0x16,0xf1, \
+0x22,0xf7,0x60,0x98,0x01,0x06,0xf8,0x1f,0x82,0x28,0x1a,0xe3,0x9a,0x4f,0x77,0xaf, \
+0x62,0x71,0xe8,0x0e,0xf5,0xd4,0xef,0xc4,0xb8,0xfd,0x58,0x05,0xdd,0xc5,0x88,0xef, \
+0x61,0x46,0x20,0x6b,0x82,0xd8,0x92,0x33,0x28,0xb2,0x71,0x40,0x0a,0x83,0x10,0xd1, \
+0x99,0x49,0xf6,0x47,0xa7,0x55,0xed,0xd5,0xdc,0x88,0x73,0xa0,0x67,0xc2,0xda,0x94, \
+0x41,0x05,0x9e,0x23,0xe7,0x9d,0x74,0x3e,0x0e,0x99,0x2c,0xeb,0xdd,0xe1,0xff,0xdc, \
+0x17,0x03,0x37,0x93,0xaf,0x72,0xd5,0x41,0x01,0x7e,0x56,0xba,0xf4,0x95,0x28,0x65, \
+0x61,0x2b,0x2e,0xf4,0x88,0x69,0xdc,0xb0,0x76,0xf4,0x2b,0x83,0x4b,0xe0,0xab,0x69, \
+0xe2,0xbc,0x64,0xd1,0x8b,0xe7,0xc2,0xc3,0xd5,0x8d,0x90,0xc2,0x00,0xce,0x19,0x5e, \
+0x85,0x97,0x7b,0x5d,0x14,0xb6,0x23,0x24,0x40,0x54,0x51,0x62,0xac,0x11,0x89,0xe9, \
+0x68,0x83,0x44,0xa3,0x3b,0xa3,0x46,0x20,0x2a,0x31,0x0b,0x68,0xa9,0x18,0x0b,0xed, \
+0xfb,0xd3,0xf7,0x7c,0xe7,0xdb,0x8e,0xcd,0x7e,0x7d,0xc0,0x3e,0xe0,0x2a,0x9a,0x5d, \
+0x4a,0xc4,0x6a,0xe7,0xc5,0xd9,0x2c,0xd8,0xc0,0x3c,0x7e,0x5a,0xdd,0x6b,0xa0,0x23, \
+0xf0,0xc4,0x91,0x44,0xcc,0xed,0x4f,0x9d,0x0f,0x97,0x58,0x73,0x80,0x82,0xc0,0xdd, \
+0x82,0x1b,0x69,0x5a,0x4e,0x22,0x87,0xee,0x1a,0x07,0x26,0x88,0x32,0x70,0x16,0x4c, \
+0x85,0x71,0x8c,0xac,0xb9,0xd3,0xe3,0xf5,0xfc,0xbf,0xaf,0x5f,0x4f,0x3c,0xd1,0x7d, \
+0x10,0xc8,0xd3,0x3a,0x40,0x42,0x20,0x19,0xab,0xa1,0x44,0x40,0x7e,0x5d,0x7e,0x33, \
+0xdf,0x54,0x5c,0x8c,0x29,0x38,0x75,0x8a,0xb5,0x27,0x8d,0xc1,0x0a,0xa2,0x4d,0x82, \
+0x61,0xe5,0x25,0x93,0x57,0x2d,0x7e,0x8b,0xbc,0x3f,0xa6,0xff,0xc7,0xe5,0xd8,0x76, \
+0x34,0x25,0xc5,0x35,0xe2,0x7b,0xe3,0xdd,0xbb,0xaa,0x5f,0x68,0x7b,0x4a,0x36,0x71, \
+0x20,0xf9,0x82,0x02,0x94,0xc7,0x7e,0x7b,0xef,0x03,0xeb,0xba,0x13,0x6f,0xce,0xef, \
+0x9a,0x9e,0xa5,0x84,0xee,0xad,0x8d,0x16,0x14,0x63,0xcc,0x48,0xbb,0xbe,0x0a,0xb4, \
+0xaf,0x45,0xbd,0x19,0x9f,0xb6,0x43,0xd5,0xdf,0xf1,0xed,0x3c,0x36,0xa2,0xe9,0x4d, \
+0x74,0x2b,0xe5,0xe7,0xb9,0xdc,0x73,0x43,0x2f,0x81,0x3b,0x99,0x16,0x03,0x11,0xc9, \
+0x04,0xe9,0x61,0x53,0xac,0x22,0x7e,0xb3,0x97,0x5c,0xf1,0xd6,0x87,0xb5,0x40,0x76, \
+0x76,0x54,0x5d,0xb9,0x42,0x84,0x3e,0xc8,0x4d,0x84,0x1b,0x23,0x35,0x5d,0x43,0xef, \
+0xa1,0xc4,0x5e,0xb1,0x8d,0xae,0xad,0x2e,0xbc,0xcb,0x59,0xf1,0xcc,0xce,0x89,0x13, \
+0xc0,0x6f,0xc1,0x40,0xf5,0x91,0x09,0x06,0x69,0x28,0x04,0x20,0xdc,0x45,0x91,0x44, \
+0xa4,0x09,0x11,0xa1,0x9e,0x0f,0x2f,0xb2,0x1e,0x86,0xe4,0xcd,0xc3,0x43,0x70,0x62, \
+0x8b,0xf7,0x20,0x48,0x13,0xb2,0xd8,0x77,0x9d,0xbd,0xa6,0xde,0x8a,0xac,0x36,0x1e, \
+0x25,0x89,0x64,0x79,0x59,0x0f,0xbc,0xc9,0x73,0x65,0x44,0x0e,0x21,0x89,0x0d,0x35, \
+0x99,0x51,0x72,0xdf,0x06,0x77,0x73,0x65,0x3f,0x0b,0x47,0x21,0x96,0xd0,0xed,0xb1, \
+0x59,0x05,0xd4,0xd0,0x06,0xcd,0x01,0x43,0x66,0xbf,0x73,0x41,0xd8,0xb5,0xb7,0x7c, \
+0x1b,0x9a,0x9a,0x4f,0xc2,0x9c,0x27,0xcf,0xb4,0xa7,0x85,0x7b,0x99,0x78,0xe6,0x95, \
+0xb6,0x2b,0x26,0x65,0xd5,0xfd,0x51,0x59,0xef,0x66,0xc5,0x2b,0xc0,0x5b,0xf9,0xab, \
+0x2c,0xf2,0xf7,0x03,0x29,0x63,0x43,0x36,0x32,0x8f,0xd6,0x2f,0xb5,0xe2,0x51,0x0d, \
+0x83,0x1b,0x80,0x4c,0xd1,0x79,0x82,0x47,0x80,0xee,0x1c,0x90,0xf8,0x1b,0x22,0x00, \
+0x18,0x68,0x0e,0x52,0x09,0x7a,0xf3,0x93,0x52,0x32,0x78,0xb2,0x4d,0xfe,0x61,0x04, \
+0x42,0x01,0x64,0x88,0x30,0xb7,0x8c,0x37,0x3f,0x6f,0xa7,0xbb,0x43,0xaf,0x5a,0x74, \
+0xb0,0x50,0x54,0x60,0xac,0x60,0x89,0x22,0x0a,0x92,0x45,0x0a,0x2e,0x1c,0x36,0x9f, \
+0x86,0xdc,0x92,0x1d,0xb2,0x90,0x96,0x96,0x2a,0x49,0xbb,0x34,0xcb,0x85,0xb0,0xc1, \
+0xe0,0x1c,0x89,0x78,0x44,0x03,0xa5,0xcb,0x89,0x3e,0x5f,0x47,0x6f,0x32,0xfb,0xd0, \
+0x38,0x27,0x72,0x08,0xc2,0x00,0x4f,0x33,0x48,0x3a,0xb8,0xe9,0x7d,0xf3,0xa1,0xdd, \
+0x82,0x76,0xf5,0xd2,0x6b,0x14,0x58,0x0b,0x22,0x91,0x36,0xfa,0xfd,0x40,0x1e,0xe1, \
+0x41,0x88,0x30,0x6c,0xf2,0x7d,0xbd,0x41,0x2a,0x8d,0x78,0xfb,0x23,0x66,0xe2,0x0c, \
+0x69,0x1d,0x6f,0x2b,0x10,0x8a,0xcc,0x5a,0x6e,0x54,0x92,0x9f,0x4d,0x1b,0xb0,0xb9, \
+0xbd,0xc7,0x0a,0x6d,0x66,0x5b,0x11,0x0a,0xe4,0x60,0x5a,0x96,0xdc,0x6e,0x4f,0x81, \
+0x80,0x90,0x80,0x1d,0x45,0x02,0x24,0x77,0x92,0x8d,0xc1,0xb2,0x9c,0xcd,0x22,0x23, \
+0x18,0xb8,0xcb,0x94,0x2b,0x99,0x0c,0xee,0xdf,0x06,0x3a,0xda,0x16,0xb2,0x73,0xc4, \
+0xad,0x87,0xc6,0x49,0x8d,0xb2,0x6d,0xe9,0xc8,0x43,0x36,0xc1,0x22,0x1c,0x26,0xe4, \
+0xc2,0xb0,0xba,0x58,0x12,0x9f,0xcc,0x99,0xee,0xcd,0xf9,0x73,0x37,0xfd,0xf9,0xc3, \
+0x0b,0xad,0x8f,0x7c,0x48,0xa3,0x27,0x31,0x05,0xca,0x60,0x98,0x21,0x17,0xbb,0xad, \
+0x93,0xf0,0x35,0x63,0xa0,0xd6,0x19,0xd9,0xa1,0x92,0x96,0x83,0xab,0x3f,0xcd,0x7b, \
+0xce,0x19,0xf5,0x5f,0xc8,0x1f,0x8b,0x3a,0xab,0x00,0xda,0xc2,0x6e,0x02,0x61,0x25, \
+0x08,0x1b,0x3e,0x13,0xa2,0xe0,0x2d,0x03,0xed,0xbc,0xbc,0x68,0x6c,0x6e,0x0a,0x8c, \
+0x51,0x64,0x18,0x18,0x40,0x3b,0x19,0xd9,0xd5,0xd2,0x65,0xe3,0x93,0xc1,0x95,0x09, \
+0xe0,0xc3,0x26,0x33,0x4b,0x16,0x4b,0x8c,0x38,0x10,0x7a,0x3e,0xe3,0x4c,0xa1,0x85, \
+0xd9,0xb1,0x50,0xa9,0x60,0x82,0x28,0x29,0xac,0xb2,0x88,0xba,0x34,0x47,0x1a,0xe9, \
+0x93,0x19,0x86,0x74,0xc1,0x83,0x3e,0x65,0x25,0x24,0xa2,0x48,0x96,0x00,0x54,0xc3, \
+0x21,0x48,0x55,0x26,0x94,0x40,0xe9,0xc2,0xc2,0x6d,0x37,0xa4,0x71,0x7d,0xbd,0x39, \
+0x80,0x94,0x26,0xe0,0xcd,0xeb,0x4e,0xf8,0x4e,0x81,0xa9,0xb8,0xb9,0x71,0xa7,0x93, \
+0x59,0x5a,0xb8,0x0d,0x62,0x92,0x04,0x08,0x00,0xa3,0xc7,0x6d,0x0c,0x1d,0x47,0xd5, \
+0x43,0x89,0xa6,0x52,0xaa,0xa2,0xa9,0x16,0x44,0x7d,0xd5,0x4b,0x11,0x8a,0xe1,0x02, \
+0x9e,0xdb,0x43,0x66,0x65,0x54,0x49,0xc2,0xd9,0x94,0x75,0xb5,0x91,0x64,0xc3,0x50, \
+0x31,0xaa,0x46,0x69,0x74,0xf7,0x18,0xc8,0xd1,0xc6,0xa5,0xca,0x61,0x2d,0x2b,0xd2, \
+0xe5,0xc2,0xa6,0x8c,0x0c,0x9c,0x31,0xb2,0x45,0x21,0x6d,0x38,0x78,0x74,0xe0,0x19, \
+0x92,0x1c,0xa0,0x52,0x1f,0x8b,0x63,0x9c,0x77,0x2b,0x32,0x9d,0x67,0x9d,0x0c,0x2c, \
+0xc3,0xf1,0x94,0x4e,0xa2,0x04,0x82,0xda,0xde,0xca,0x83,0x68,0x09,0xa8,0xcc,0xd9, \
+0x5f,0x14,0x21,0x1d,0x73,0xe8,0xc4,0xec,0x70,0x93,0xb9,0x95,0x93,0x9d,0x08,0xc7, \
+0x86,0x59,0xd9,0x05,0x27,0x14,0x59,0x44,0xea,0x13,0x18,0xa5,0x61,0x86,0x4f,0xd6, \
+0xc9,0x31,0x8c,0xe2,0x79,0x38,0x12,0xcd,0x05,0xb4,0x8c,0xb4,0xc6,0x20,0x75,0x53, \
+0xba,0x0d,0x72,0x6c,0x66,0x58,0x3b,0xab,0x07,0x36,0x55,0xbf,0xae,0x7f,0x17,0xd4, \
+0x32,0x46,0x57,0xc0,0x84,0x94,0xf8,0x05,0x04,0x6f,0x7d,0xad,0x7b,0x37,0xae,0xfc, \
+0x4a,0x8f,0x44,0x83,0xf1,0x66,0xdb,0x74,0xe4,0xa1,0xcb,0x30,0x21,0x56,0x88,0x3f, \
+0x42,0xab,0xab,0x0e,0x88,0x6b,0x24,0x11,0x91,0x28,0x05,0x11,0x31,0x43,0x1f,0x47, \
+0x0b,0xac,0xea,0x8f,0x7f,0x27,0x1c,0x78,0x32,0x09,0xc6,0x68,0x59,0xf3,0x45,0x64, \
+0xf7,0x82,0x54,0x38,0xb3,0x31,0x98,0xa5,0x7b,0x2d,0x4d,0x53,0x53,0x21,0xb7,0x8f, \
+0x96,0x33,0xda,0x39,0x39,0x30,0x26,0x73,0xab,0x71,0xf0,0x80,0x65,0x8d,0x81,0x52, \
+0xc2,0x21,0x83,0x2a,0xc9,0x6c,0xb2,0x96,0xe2,0x6d,0x4a,0x98,0x04,0xc5,0x2e,0x18, \
+0x91,0x98,0xb7,0x27,0xb6,0xdf,0x4f,0x86,0x24,0xd3,0x7e,0x7d,0xf0,0xf6,0x07,0xec, \
+0xca,0xb8,0xf8,0xeb,0xe7,0x79,0x49,0x44,0x19,0xb6,0xdf,0xc3,0x92,0x8d,0xe1,0x98, \
+0x22,0xe0,0x67,0x52,0x89,0xa0,0x88,0x17,0x27,0xec,0x68,0xd1,0xed,0x51,0x28,0xe0, \
+0xef,0xa9,0x32,0x17,0x80,0xb4,0x39,0x71,0x07,0xb8,0x4c,0x4d,0x00,0xc1,0x8d,0xa2, \
+0xc8,0x71,0xb5,0x62,0xb3,0x40,0x6c,0x56,0xda,0x08,0x8a,0x8c,0x64,0x5a,0x8f,0x76, \
+0xdf,0x4a,0x4d,0x3c,0xcd,0x15,0xf9,0xec,0xe3,0x8b,0x46,0x64,0xe7,0x43,0x80,0x18, \
+0x62,0xc1,0x64,0xd8,0x61,0xe9,0xf0,0xa7,0xca,0x95,0x24,0x85,0xde,0x6c,0x73,0xe2, \
+0x06,0x5b,0xf6,0x30,0x39,0x56,0x8f,0xf7,0x86,0x52,0xcd,0x79,0x24,0x8f,0x1f,0x77, \
+0xd2,0xa9,0x70,0x43,0xbc,0xea,0xbb,0x98,0xed,0x43,0xaa,0x43,0xe9,0x66,0xbe,0x14, \
+0x9e,0x3d,0xd6,0x8f,0x70,0xc9,0x41,0x11,0x36,0x2f,0x92,0xe3,0x80,0x93,0xd7,0x99, \
+0x59,0x3d,0x7a,0xc1,0xbd,0x52,0x1a,0xbd,0x56,0x96,0x38,0x60,0x4a,0x0c,0x29,0x0c, \
+0x31,0xba,0x81,0x10,0x5c,0xb3,0xbd,0x67,0x3e,0x51,0x1a,0x74,0x88,0x7b,0x75,0xe4, \
+0x62,0x66,0x38,0x6d,0xe4,0x8c,0x9a,0x05,0x9e,0x9a,0x8e,0x2d,0x12,0x23,0x8d,0x69, \
+0x30,0x91,0x57,0x5c,0xe5,0x93,0xcf,0x48,0xe9,0xa9,0x9b,0xa2,0x69,0xae,0x5b,0x01, \
+0x0c,0x58,0xa0,0xc4,0x08,0x1a,0x88,0x44,0x6e,0xa8,0x5c,0x21,0x9c,0x51,0x84,0x59, \
+0x92,0x82,0x6e,0x98,0x21,0x4c,0x32,0x42,0x54,0x9d,0xb9,0x28,0x42,0xd5,0x21,0x24, \
+0x60,0xd4,0x35,0x08,0x66,0x38,0x22,0x17,0x6a,0x1a,0x20,0x82,0xac,0xdb,0xf4,0xdb, \
+0x04,0xd3,0xc0,0x6d,0x93,0x44,0x1a,0xb0,0xcb,0x5c,0x98,0x41,0x94,0xdc,0xb0,0xd2, \
+0x95,0x50,0x46,0xdb,0x68,0xb7,0x0d,0x47,0x18,0x0b,0x8c,0x89,0x59,0x24,0x08,0x08, \
+0x26,0xa1,0x1a,0xd0,0x81,0x52,0x54,0x22,0xa1,0x87,0x8f,0xbf,0xe5,0x6d,0x26,0xc3, \
+0xda,0x2c,0x03,0x0f,0xd3,0x8c,0x0f,0x71,0xd2,0xc0,0x7c,0x27,0x5d,0xb3,0x56,0x16, \
+0xcb,0x37,0xc9,0xc3,0xbb,0xc9,0x86,0xd8,0xe1,0xa1,0x99,0x41,0x20,0x98,0xf1,0xf6, \
+0x64,0x99,0x60,0x73,0x6b,0x98,0xcf,0x0c,0x34,0xb8,0x85,0x8b,0xa6,0x6c,0x4e,0xa5, \
+0x53,0xa4,0x2d,0x69,0xee,0xb8,0x2b,0xec,0x2e,0x08,0x64,0xd6,0x6e,0xa2,0xe6,0xc5, \
+0x05,0x53,0x14,0x1b,0xdb,0x82,0xe5,0x28,0x98,0x42,0x89,0x07,0x34,0x2a,0x28,0xb0, \
+0xce,0x0a,0x4c,0x32,0xb5,0x82,0xe0,0x6a,0x0d,0xc5,0xc2,0x63,0x0b,0x35,0x4c,0x4c, \
+0xee,0x18,0xc5,0x70,0x52,0x23,0x8d,0x19,0x0c,0x38,0x8c,0x7e,0x14,0xaa,0xab,0x11, \
+0x14,0xcd,0x95,0xc9,0xb4,0x19,0xf7,0xa0,0xe8,0x6a,0x48,0x30,0x38,0x5f,0x4c,0x81, \
+0x96,0x10,0x15,0xef,0x20,0xd0,0x6a,0xca,0xf4,0x53,0xd1,0x44,0xd5,0x07,0x34,0x2c, \
+0x26,0x6c,0x40,0x69,0x10,0x90,0x02,0x30,0x10,0xd1,0x09,0x48,0x4d,0xc4,0x31,0x48, \
+0x4c,0x94,0xd4,0xa9,0xa1,0x75,0xd4,0x54,0x4b,0x1b,0x4c,0xb3,0xa2,0x19,0x27,0x45, \
+0x75,0x53,0x69,0x50,0x61,0x0d,0xb1,0x8c,0x41,0xce,0x43,0x6b,0x2b,0x09,0x2d,0xe3, \
+0x49,0x40,0xd0,0x50,0xb6,0x62,0x34,0xf4,0x7d,0x1b,0xc5,0x9d,0x5e,0xab,0xf7,0x78, \
+0x5d,0x52,0xf6,0x8c,0x06,0xac,0x6c,0x01,0x05,0x7d,0x3f,0x19,0x5c,0x9a,0x52,0xd8, \
+0xd1,0x6a,0xe2,0x6e,0x5d,0x57,0xf9,0xdb,0xda,0x5f,0xc2,0xda,0x6c,0xc0,0x6d,0x79, \
+0x52,0x07,0xeb,0xdf,0x4b,0x91,0x5a,0x11,0x56,0xa1,0x80,0xe6,0x12,0xf5,0x59,0xb8, \
+0x50,0x71,0x31,0x09,0x30,0x3a,0x67,0x05,0x70,0xb6,0x5a,0x28,0xa5,0x10,0x46,0xd9, \
+0x4c,0x0d,0x71,0x15,0x11,0x2d,0x28,0xb1,0x54,0x0b,0x4b,0x0a,0xc1,0xb4,0x65,0x0a, \
+0x4b,0x46,0x51,0x96,0x96,0xd9,0x0a,0x8b,0x6d,0x48,0xd3,0x30,0xa3,0x83,0xe4,0xc8, \
+0x64,0xcc,0x9c,0x28,0x2b,0x10,0x2c,0x5c,0x05,0x96,0x1a,0x12,0x93,0x14,0x98,0x83, \
+0x03,0x09,0x35,0x84,0x64,0x21,0x43,0x55,0x90,0xaa,0x34,0x65,0x98,0x2b,0x22,0xd5, \
+0x68,0x24,0xef,0x59,0xa0,0x67,0x94,0x93,0xa7,0xb4,0xfa,0x7c,0xb3,0xa9,0x9b,0xa1, \
+0x8e,0x07,0x7e,0x98,0x80,0xb0,0xd1,0x90,0x49,0xff,0x41,0xb1,0x8c,0x47,0x64,0x8a, \
+0x6b,0xb7,0xe1,0xc4,0x82,0xe5,0x87,0xb5,0x39,0xb3,0xee,0x61,0x93,0xe1,0x78,0x33, \
+0xb9,0x2a,0x4c,0xa0,0x99,0xba,0x7e,0x99,0x20,0xb3,0x2a,0xd0,0x25,0xe0,0xb7,0x65, \
+0x22,0x6d,0x60,0xb0,0x57,0x4b,0xb4,0x11,0x43,0x1d,0x24,0x54,0xc3,0x04,0xbe,0xe2, \
+0xf8,0xfa,0xb7,0x55,0xf2,0xf4,0xdd,0x52,0xf2,0x92,0x07,0x2d,0x45,0x75,0x85,0x54, \
+0xb4,0x02,0x82,0x41,0x0c,0xc2,0xe7,0xc5,0xc7,0xa7,0xc9,0x3e,0xe7,0xe8,0x96,0x96, \
+0x76,0x8a,0x95,0x50,0xa5,0x94,0x6e,0xe6,0x98,0x0d,0x1d,0x12,0x68,0x6e,0x10,0x3b, \
+0x5a,0x13,0x62,0x12,0xbf,0x94,0x6d,0xb7,0x5c,0x9e,0x50,0x47,0xee,0x1e,0xc8,0xe0, \
+0x0f,0x61,0x86,0xab,0x88,0x9b,0x35,0xfa,0x3b,0x53,0xbd,0xf1,0xdf,0x7c,0x9c,0x21, \
+0x35,0x1c,0x3c,0x24,0x84,0x96,0xe6,0xf3,0xa1,0x0c,0x3d,0x73,0x13,0xf1,0x05,0x13, \
+0x11,0xc1,0x57,0xb3,0x05,0xe3,0x48,0x1b,0x22,0x08,0x2c,0x80,0x88,0x09,0x88,0x7b, \
+0x49,0x96,0x07,0x5a,0x1e,0xc4,0x30,0x0c,0x45,0x83,0xd1,0xed,0xc0,0x4b,0x18,0x82, \
+0xa3,0x06,0x26,0x53,0xcb,0xe1,0xec,0x41,0x62,0xab,0x11,0x41,0x64,0x16,0x06,0x35, \
+0x9e,0xc4,0xb3,0x61,0x93,0x91,0x79,0xc8,0x6d,0x43,0xde,0xfb,0xdd,0xad,0x0b,0xd5, \
+0xac,0xd8,0x44,0xf4,0xf5,0x28,0xcd,0x0e,0xb9,0xcf,0x75,0x14,0x80,0xab,0x38,0x30, \
+0x3b,0x21,0xc2,0x70,0x10,0xb3,0x6e,0xa2,0x77,0x32,0x4e,0x66,0x93,0x48,0x32,0x1c, \
+0x5d,0xa2,0x8a,0x80,0x80,0xa9,0x6e,0xee,0x26,0x3a,0x64,0xd1,0xa9,0xcf,0x24,0xf9, \
+0x22,0xcd,0x9a,0x32,0xf4,0x7e,0xb7,0x70,0x4d,0x18,0x76,0x35,0x4e,0x0d,0x78,0xb4, \
+0x78,0x60,0xf7,0x1d,0xbd,0xd1,0x43,0xaf,0x7e,0x5e,0xbe,0xdc,0x4e,0x38,0x06,0x16, \
+0xd5,0x3b,0xd2,0x5e,0xfa,0x14,0x54,0x64,0x7c,0x92,0xa0,0xa2,0x08,0xe4,0xce,0x0c, \
+0x43,0xde,0x0d,0x8e,0x0d,0xe9,0xb3,0x92,0x0a,0xae,0x08,0x50,0x4b,0xbe,0xf4,0x82, \
+0x11,0x47,0x24,0x43,0x0d,0xbc,0xe9,0x37,0x1f,0xed,0x38,0x18,0x74,0xa7,0x2f,0x42, \
+0x41,0xeb,0x02,0xf5,0xc6,0x16,0xf0,0x35,0x3b,0x48,0x22,0xf9,0x22,0x13,0x50,0xd3, \
+0x09,0x46,0x1b,0xa3,0x0a,0xdc,0x91,0x5e,0x8b,0xb9,0x2c,0x17,0xe6,0xe2,0x9a,0xc0, \
+0xdc,0x12,0x6e,0x20,0x1b,0xce,0xb1,0x17,0xf6,0x1d,0xdd,0x8a,0x09,0xf6,0x88,0x9d, \
+0x63,0x81,0x8b,0x71,0x87,0x34,0x30,0x18,0xbe,0xe4,0x37,0x3b,0x37,0x16,0x48,0x8c, \
+0xe1,0xef,0x13,0xa5,0x36,0x08,0x76,0xf1,0x7e,0x33,0x17,0x26,0xb1,0x38,0x98,0x9f, \
+0xb2,0xf3,0x7e,0x0c,0x4d,0xa1,0xb4,0x98,0xcc,0xd5,0x7e,0x73,0xde,0xcc,0xce,0x85, \
+0xcc,0x1c,0xe8,0x41,0xf4,0x42,0xea,0xca,0x15,0xb8,0x2c,0x51,0xf0,0x63,0xf2,0x50, \
+0x98,0xf6,0x72,0xc9,0x96,0xc8,0x4d,0xdc,0x23,0x05,0xcd,0x1d,0xf7,0xe3,0xfe,0xcd, \
+0x3a,0x33,0x77,0x44,0x25,0x53,0x73,0xdf,0xe8,0x90,0x73,0x33,0x45,0xe9,0xfa,0x88, \
+0x0e,0xdd,0x83,0xf7,0x32,0xde,0xd6,0x12,0x2f,0xd9,0xe1,0x21,0x49,0x92,0xf5,0x9c, \
+0xf7,0x64,0x44,0x15,0x62,0xac,0x06,0x44,0x10,0xab,0xf0,0x82,0x0c,0x6c,0x8f,0x7d, \
+0xf6,0x0d,0x60,0xb7,0x7e,0x3e,0x1a,0x07,0xb5,0xa4,0x72,0x3f,0x2a,0xf3,0x73,0x1e, \
+0xd9,0x8a,0xde,0xc5,0x05,0x41,0x69,0x0b,0x53,0x1b,0x9f,0x50,0x99,0x32,0x8e,0x12, \
+0xf6,0x37,0x29,0x9b,0xcb,0x5a,0x69,0xbd,0xd6,0xbb,0xf6,0x1c,0xa0,0x9e,0x93,0x71, \
+0xad,0x55,0xb1,0xc0,0x33,0xf6,0xd3,0xbe,0xea,0xb2,0xc6,0x53,0x44,0x19,0xa3,0x93, \
+0x0c,0xd8,0x68,0x2c,0x12,0x80,0xe0,0xd1,0x03,0xe4,0xc1,0x60,0xee,0xd0,0xe8,0xe8, \
+0xcb,0x0e,0x04,0xfe,0xbe,0x41,0xbc,0xde,0x22,0xaf,0x03,0x49,0x27,0x9f,0x77,0x0f, \
+0x4e,0xf5,0xce,0xac,0x66,0x61,0x9c,0xc4,0x4b,0x10,0xea,0xa6,0xbb,0xa2,0x1f,0x77, \
+0x81,0x8c,0x87,0xcf,0xca,0xac,0x84,0xfc,0x9a,0x30,0xcd,0x8f,0x7d,0xc9,0x20,0xd6, \
+0x0b,0x30,0xdc,0x9c,0x0c,0xad,0x3e,0x6c,0x4b,0x58,0xdf,0x7e,0x3c,0x37,0xc7,0xeb, \
+0xbb,0x3b,0xca,0x10,0xf3,0x34,0x22,0x18,0xcf,0xd9,0xd2,0x16,0x39,0x7c,0xf7,0x1b, \
+0x7e,0x61,0xc4,0x2d,0xbb,0x59,0x3f,0xeb,0x08,0x2c,0x83,0x54,0xb9,0x8c,0x09,0x19, \
+0x1e,0x25,0xae,0x91,0x49,0x06,0x1c,0xb4,0x64,0x34,0xd5,0x45,0xdb,0x03,0xa8,0x80, \
+0x4d,0x59,0x59,0x84,0x37,0x06,0x64,0xea,0x9a,0xf4,0xa7,0x3f,0x92,0x6d,0x84,0x30, \
+0x53,0x48,0x26,0x8c,0x0f,0x62,0x5c,0x36,0x68,0x4d,0xdf,0x4a,0x7d,0x3a,0x75,0x43, \
+0xad,0x83,0x19,0x06,0x2a,0xa2,0x08,0x29,0x0f,0x2d,0xe0,0x69,0x9b,0x00,0xd8,0x77, \
+0x3f,0x06,0xbe,0x7d,0x71,0x5d,0xb8,0xce,0x8c,0xb5,0x94,0x2f,0x2a,0x60,0xcc,0xeb, \
+0x55,0x83,0x53,0xd3,0x39,0x2a,0xb2,0x90,0x1b,0x11,0x82,0x8a,0x19,0x65,0x58,0x2c, \
+0x52,0x1d,0xf7,0xef,0x18,0xba,0x0d,0xa8,0x54,0x15,0x18,0x3d,0x8d,0x46,0x08,0xc1, \
+0x9b,0x58,0x55,0xde,0x85,0x60,0x88,0x2a,0x85,0x61,0x77,0x6a,0xa2,0x0a,0x0c,0x55, \
+0x45,0x8b,0x10,0x58,0x0a,0x88,0x2a,0xb2,0xab,0x55,0x8a,0xb2,0x41,0xec,0x89,0x28, \
+0x31,0x58,0x8c,0x62,0x21,0x2e,0x01,0xd9,0xa5,0x11,0x58,0x25,0x31,0xba,0x61,0xeb, \
+0xfe,0x14,0xd0,0xbe,0xcf,0x93,0xe4,0x13,0xfa,0xb5,0x03,0x24,0x94,0xed,0x87,0xc2, \
+0xaa,0x85,0xff,0x62,0x2e,0xf5,0x5e,0x89,0x52,0xee,0x30,0x5e,0xd9,0xc7,0x02,0xd6, \
+0x6c,0xdf,0x20,0x4a,0x65,0xf7,0x8c,0x63,0xdf,0x88,0x43,0x69,0x3b,0x92,0x08,0xab, \
+0x4d,0x49,0xf0,0x66,0x60,0x8a,0x0c,0x15,0x18,0x99,0x43,0x2d,0x4c,0x18,0x29,0x49, \
+0xb9,0x8b,0x81,0x44,0x5c,0xe2,0xcc,0x46,0x41,0x51,0xcd,0xa0,0x8b,0x2b,0x7b,0x78, \
+0xcd,0x19,0xd6,0x25,0xef,0xaf,0xc7,0xf7,0x79,0xe4,0xe8,0x74,0xfa,0x00,0xf2,0x15, \
+0x9d,0xd1,0xbf,0x78,0xfc,0xe3,0xb2,0x9b,0xd0,0x07,0x9f,0x60,0x70,0xe2,0xf7,0x8e, \
+0x18,0xde,0x6b,0xaf,0xb1,0x46,0x62,0xe5,0x6c,0xc3,0x41,0xe8,0x51,0x8b,0x03,0xd7, \
+0x07,0xc8,0xe5,0xda,0x7c,0x8f,0x51,0x49,0x52,0x88,0x09,0xc3,0x2b,0x0e,0xa7,0xa2, \
+0x6d,0xea,0xed,0x9a,0x99,0x11,0xf8,0xa4,0xf6,0xf4,0x82,0x2b,0x01,0x7c,0x5a,0xc5, \
+0x44,0x15,0x62,0x2a,0xa6,0x06,0x44,0x9b,0xa5,0xdb,0xa8,0x32,0xf3,0x82,0x84,0x67, \
+0x74,0x04,0x3c,0xe1,0xdd,0x86,0x2c,0x11,0x10,0xc4,0xb6,0x6e,0x63,0x4c,0x10,0xdc, \
+0xe7,0x16,0x28,0x23,0x14,0x18,0x31,0x8c,0x24,0x41,0x64,0x32,0x32,0x61,0x37,0x37, \
+0x7a,0x57,0xa2,0x04,0x23,0x09,0x21,0x15,0xc9,0xad,0x47,0x4a,0xae,0x07,0x8a,0xea, \
+0x89,0x8d,0x32,0x08,0x60,0x2a,0x15,0x84,0x94,0x87,0x6c,0x31,0x04,0xa0,0xc5,0x60, \
+0x89,0x0c,0x9c,0xca,0x78,0xf5,0xe4,0x26,0x84,0x19,0x05,0x84,0x59,0x7a,0x72,0x2a, \
+0xd4,0xac,0x76,0xa7,0x3b,0xb4,0x39,0x75,0x6e,0x97,0x87,0x04,0x34,0x2e,0x53,0x85, \
+0xeb,0x80,0x7f,0x16,0x36,0x8b,0xc5,0x5a,0xcc,0x1b,0xc8,0xdf,0x82,0x5a,0x0c,0x84, \
+0x03,0x0f,0xda,0xc9,0x8d,0x0b,0xde,0xa3,0x22,0x82,0x8d,0xb4,0x42,0x2c,0xd1,0x8a, \
+0x1d,0x69,0x44,0x40,0x60,0x44,0x9f,0x0d,0x42,0x79,0x6a,0x6c,0xc7,0x5a,0x22,0x5b, \
+0x11,0x6c,0x05,0x80,0xdb,0x52,0xd1,0x28,0xa5,0x04,0x6d,0x92,0xda,0xb4,0x88,0xf7, \
+0xeb,0xd5,0x24,0xb3,0x9d,0x9d,0xb3,0x3b,0x10,0x9e,0xad,0x74,0xfb,0x8e,0x06,0x90, \
+0x98,0xa6,0x78,0x5a,0x86,0x62,0x18,0x17,0xde,0xd3,0x09,0x5b,0x3f,0x30,0x52,0xe6, \
+0x92,0xf7,0xb3,0x2e,0xe8,0xa3,0xbf,0x38,0x1d,0x69,0x5f,0xb2,0x6e,0xbb,0xea,0xbc, \
+0xfb,0xe4,0xf8,0xbd,0x9e,0x1c,0xd0,0x78,0x33,0x06,0x95,0x1a,0x47,0x8e,0xd4,0xc8, \
+0xc4,0xe7,0x5f,0x4c,0x15,0x87,0x5c,0x4b,0xe9,0xa7,0x5a,0x66,0xfc,0x94,0xee,0x4d, \
+0xba,0xa1,0x49,0x8f,0xc1,0x4c,0xb6,0xea,0xca,0x38,0x29,0x23,0x43,0x90,0xd8,0x0d, \
+0x72,0x07,0x07,0xac,0x5e,0xd7,0xa5,0x25,0xd4,0x2e,0x15,0x45,0x62,0x35,0x02,0x00, \
+0xb7,0x7f,0x4f,0x1d,0x31,0x7d,0x98,0x59,0xbe,0xd8,0x0c,0x3b,0x0b,0x91,0x20,0x1d, \
+0x1a,0x98,0x49,0x11,0xc9,0x40,0xd8,0xe6,0x65,0x97,0x24,0x2d,0x87,0x03,0x9d,0xe8, \
+0xa1,0x38,0x6d,0xc2,0x86,0x9d,0x35,0x92,0xb8,0xc4,0xb3,0x1d,0x08,0x7d,0x7d,0xee, \
+0xea,0x3e,0x65,0x65,0xcf,0x3d,0xa8,0xc6,0xde,0x07,0x2f,0x19,0x13,0x1a,0xe9,0xbe, \
+0x77,0x1e,0x36,0xd7,0x1e,0x81,0x88,0x65,0x0a,0x75,0xd2,0xef,0xb5,0x35,0x1e,0x57, \
+0xad,0xca,0x25,0xa2,0xf2,0x5a,0x69,0xdb,0xcb,0x80,0x64,0x56,0xb9,0x48,0x68,0x35, \
+0x8b,0xcf,0xc7,0x74,0x12,0x5b,0x68,0xca,0xb0,0xd8,0xd1,0x57,0x20,0xa2,0xb0,0xaa, \
+0xe9,0x12,0x08,0xd7,0x98,0x16,0xb5,0x40,0x9e,0xd5,0x5f,0xdd,0x0b,0x05,0xc0,0xf4, \
+0x05,0x72,0xe3,0xab,0x30,0xe1,0x22,0xec,0x17,0x46,0x52,0x53,0xa6,0xcd,0x32,0x92, \
+0x52,0xae,0x6f,0x74,0x71,0x69,0xea,0xfb,0x90,0xc7,0x05,0x07,0x79,0x1a,0xe8,0xa2, \
+0xba,0xaa,0x82,0x80,0xb6,0x1b,0x87,0x2d,0x93,0x70,0xe3,0x21,0xa2,0x76,0x79,0x61, \
+0x04,0x2c,0xe6,0x0a,0xf2,0xd1,0x50,0x0a,0x04,0x0d,0x10,0x1d,0x09,0xba,0xe2,0x00, \
+0xe3,0xcd,0xdb,0xaf,0x06,0xa1,0xba,0xa5,0x38,0xd4,0xb4,0x6e,0xb3,0x2b,0x6d,0xd6, \
+0x44,0x92,0x57,0x4f,0x00,0xdf,0x43,0xa8,0xb7,0x70,0xd6,0x5d,0x86,0xe1,0xee,0xbc, \
+0x4e,0x05,0x7a,0x1a,0x23,0x38,0x51,0xc7,0x71,0xa6,0x8c,0xf2,0xb6,0x81,0x45,0x3c, \
+0xc8,0xda,0xce,0x21,0xc0,0xd4,0x30,0x4b,0x97,0x8c,0x86,0x0b,0xd3,0x49,0x36,0x48, \
+0xab,0x5d,0x83,0x8f,0x96,0x77,0x58,0xe4,0xed,0x62,0x06,0x4b,0x58,0x28,0x59,0xa4, \
+0x67,0x9d,0x4f,0x89,0xe2,0xe9,0xd2,0xc3,0x0d,0x1d,0xba,0x37,0x33,0xde,0x08,0xec, \
+0xfc,0xd3,0xd4,0xdb,0x2b,0x9a,0xe4,0xab,0x04,0x6c,0x0f,0x47,0x2b,0x8d,0xa5,0x9d, \
+0x56,0x39,0x42,0x46,0xc0,0x03,0xf6,0x36,0x00,0xfb,0xc0,0xf0,0xc7,0xe4,0xb6,0x04, \
+0x52,0xbc,0x61,0xc8,0xf0,0xd1,0x9f,0x66,0x7e,0x33,0x34,0xd0,0x16,0x60,0xa9,0x28, \
+0xf4,0x9d,0x9c,0x11,0x8c,0x18,0xf9,0x59,0x68,0x1d,0xb6,0x8d,0x66,0x46,0x3b,0x90, \
+0x3f,0x53,0xbc,0x64,0x3c,0x94,0xa0,0x08,0x80,0x2c,0xac,0x82,0xb3,0x00,0xc5,0x3e, \
+0x09,0xb1,0x8b,0xa9,0x58,0x62,0x03,0x0c,0x78,0xb8,0x0b,0x11,0x80,0x75,0x8b,0x23, \
+0x01,0x70,0x49,0x24,0xf8,0x90,0x7a,0xd9,0x80,0xd9,0xa3,0x21,0x35,0x66,0x7b,0x39, \
+0xe3,0x51,0x31,0xf0,0x68,0xae,0x6d,0xb1,0x36,0x70,0x92,0x49,0x31,0x3a,0x13,0x25, \
+0x4a,0x28,0x9e,0x2f,0x32,0x08,0x77,0xb2,0x65,0x59,0xf0,0x74,0xa7,0x51,0x58,0x25, \
+0xc4,0x5b,0x1a,0x05,0xf8,0xee,0x3e,0x7b,0xa7,0x94,0x2c,0x1f,0xed,0x6b,0x27,0x4e, \
+0x61,0x04,0xb0,0x30,0xea,0x38,0x12,0x0a,0x70,0x45,0xce,0x1e,0xac,0xe4,0xdd,0xea, \
+0xd6,0xa1,0x5a,0x23,0x4d,0x35,0xc4,0x3d,0xfb,0x01,0xc8,0xe7,0x61,0xd8,0x9c,0x99, \
+0xca,0x74,0x04,0x7f,0x56,0xee,0xae,0x37,0x5d,0x91,0xbb,0x85,0x0e,0x01,0xb2,0xf4, \
+0xcf,0x3e,0xc0,0xe6,0x12,0x22,0xf5,0xd7,0xc1,0x19,0xd3,0x9d,0xca,0x65,0x0a,0x9e, \
+0xc4,0xb0,0x3b,0x58,0x78,0xa1,0x1d,0x24,0x81,0xdb,0xa1,0xbe,0x9e,0xcc,0x1e,0x48, \
+0x07,0x92,0x48,0xb0,0x16,0x45,0x09,0x3f,0x6f,0xf9,0xe5,0xa9,0x27,0xad,0x81,0xc7, \
+0x40,0xb2,0xfa,0xb0,0x4c,0x62,0x8f,0x1d,0x3e,0xbf,0x2d,0x75,0xd3,0x4a,0x55,0x88, \
+0xac,0x12,0x2a,0xd2,0x08,0x93,0x47,0xbc,0x47,0x82,0x22,0x6c,0x52,0x80,0x2b,0x8a, \
+0x82,0x96,0x40,0x92,0xae,0xad,0x2b,0x15,0x7d,0xfa,0x9d,0x3c,0x71,0x90,0x4a,0x58, \
+0x84,0xba,0xc6,0x48,0x91,0xd8,0x00,0x66,0x94,0x97,0x90,0x19,0x34,0x67,0x43,0xac, \
+0x6a,0x8d,0x75,0x4c,0x21,0xa6,0x8e,0xaa,0x97,0x12,0x7b,0xf6,0x8b,0x30,0x5d,0x8c, \
+0x0e,0xec,0x7b,0xd4,0x8c,0x54,0x51,0x00,0xd1,0xc7,0xcc,0xcb,0xd0,0x14,0x4a,0xe0, \
+0xf4,0x6b,0x99,0xca,0xb7,0x7f,0x54,0x00,0xb4,0xfa,0x3a,0xe5,0x39,0x85,0xfa,0x35, \
+0xe8,0x87,0x68,0x8c,0x62,0x0a,0x11,0x13,0xdd,0xe4,0x7e,0x5e,0xbe,0xbf,0x44,0xee, \
+0xdb,0xd1,0xc1,0xeb,0xf2,0x5b,0xe0,0xe7,0xc6,0xe8,0x3b,0xb0,0x01,0x20,0x76,0x94, \
+0x16,0x7f,0x30,0xc5,0xc4,0xd8,0x3b,0xab,0x82,0x88,0x23,0x5c,0x5b,0x56,0x25,0xa4, \
+0xca,0x91,0x2a,0x75,0x94,0xd4,0x16,0x44,0x43,0x09,0x31,0x93,0x93,0x42,0x69,0x03, \
+0x60,0xe7,0x1d,0x5d,0x87,0x80,0x4e,0xc3,0xe3,0xa8,0x13,0x70,0x57,0xa2,0x14,0x18, \
+0xb0,0x8d,0x45,0xdc,0x2d,0xcb,0xeb,0x7a,0x91,0x2b,0x2b,0x26,0x94,0x00,0xe2,0x04, \
+0x02,0xd0,0xd2,0xee,0x98,0x21,0x8d,0xc5,0xc5,0x6e,0x50,0x4b,0x32,0x46,0x03,0xf3, \
+0x34,0x77,0x19,0x64,0xb2,0xbc,0xa3,0x2c,0xf1,0x06,0xff,0x47,0x71,0x8c,0x81,0x04, \
+0x50,0x18,0xbb,0xe4,0x46,0xc0,0x1c,0xd0,0x54,0x85,0x49,0x18,0x62,0x84,0x81,0x09, \
+0x01,0xd0,0x5a,0x41,0x18,0xd2,0x50,0xe2,0x61,0x55,0xd1,0xc0,0x38,0x28,0xe2,0x8e, \
+0x0d,0xe3,0x87,0x93,0x8a,0x35,0x31,0x23,0xcc,0x4c,0x5d,0x04,0x79,0x61,0xe1,0xc8, \
+0x68,0x40,0x21,0x4d,0x8d,0xcd,0xc2,0xf2,0xee,0x53,0xd3,0xc8,0xa5,0x8b,0xdf,0x4c, \
+0x0d,0x81,0xb0,0x33,0xad,0x12,0x5e,0x9d,0xe2,0xc2,0x54,0x90,0x21,0x34,0x07,0xa8, \
+0x37,0x9c,0x5d,0xb0,0x34,0x55,0x58,0xd1,0x92,0xdd,0x89,0xc2,0x1d,0x31,0x30,0x23, \
+0x20,0x16,0x53,0x28,0xea,0xc3,0xe0,0xe2,0x0b,0xc2,0x46,0xd8,0x74,0x26,0x16,0x26, \
+0xc0,0xb1,0x84,0x10,0x0a,0xc6,0x5c,0x17,0x8b,0xa2,0x05,0xea,0xc2,0x8d,0xd4,0x38, \
+0x19,0x5b,0x63,0x19,0x48,0x64,0xab,0xe7,0x51,0xe7,0x66,0xdd,0x64,0x5d,0x8e,0x03, \
+0xa2,0xf5,0x04,0x74,0x34,0x77,0x6c,0xb0,0x4f,0x36,0xd8,0x18,0x29,0x36,0xa9,0x36, \
+0x75,0x49,0x05,0x9c,0xcd,0xc0,0x95,0x8d,0x12,0x22,0xf1,0x38,0xbc,0x3a,0xa5,0x8b, \
+0xb0,0xd2,0x6e,0xc4,0xe8,0x32,0x06,0xa5,0x40,0xd9,0xa0,0x4d,0x72,0x5b,0x40,0xcd, \
+0x88,0x5e,0xfa,0x1d,0x8e,0x77,0x57,0x04,0x08,0x74,0x04,0x2d,0x0f,0x39,0x19,0x01, \
+0xb1,0x43,0xfd,0x3f,0x1d,0x2d,0x95,0xe3,0xf4,0x79,0x46,0x1a,0x54,0xcf,0x6d,0x50, \
+0x69,0x56,0x75,0xb1,0xf7,0xbb,0x9a,0xd6,0x93,0x24,0x5a,0x07,0x13,0x86,0xd1,0x5d, \
+0xf3,0x67,0x5f,0xa6,0xf9,0xef,0xef,0x88,0xee,0x62,0x09,0xc8,0x14,0x51,0x0d,0x15, \
+0x90,0x77,0x9c,0x99,0x38,0xc0,0x0e,0x21,0x61,0xa1,0x20,0x1d,0x59,0x60,0xac,0x30, \
+0x9c,0x52,0xe0,0xa6,0x19,0x87,0x10,0x54,0x3e,0x50,0xc6,0x16,0xb8,0x56,0x6d,0x8c, \
+0xe4,0x99,0x71,0x18,0x66,0x96,0x61,0x9a,0x58,0x40,0xa2,0x1a,0x22,0x99,0xc0,0xaa, \
+0x18,0x0c,0xe6,0x60,0x27,0xa1,0x2b,0xa5,0x78,0x80,0x5e,0x4c,0x78,0x54,0x8b,0x33, \
+0x30,0x41,0x88,0xd2,0x5e,0x33,0x00,0x60,0xc2,0xe1,0xbe,0x44,0x37,0x64,0x99,0x7e, \
+0x46,0x07,0x04,0x48,0xc5,0x65,0x52,0x26,0xea,0x8c,0x30,0x03,0xdd,0x8a,0x3a,0x51, \
+0x05,0xcb,0x16,0xe8,0xe1,0x28,0x20,0xba,0x81,0xbb,0x61,0x66,0xd0,0xd9,0x78,0xa4, \
+0xaa,0x88,0x98,0x96,0xa8,0xe0,0xef,0xe5,0xa6,0xa6,0xcb,0xbd,0x68,0x7c,0x17,0xf1, \
+0xfa,0xdd,0x35,0xe1,0xe8,0x90,0xd0,0xf1,0xb2,0x8e,0x4d,0x6c,0x95,0x16,0x67,0xf5, \
+0x58,0x19,0x40,0xc8,0x9c,0x02,0x15,0x92,0x40,0xe0,0x84,0x38,0xb2,0x39,0xda,0xab, \
+0x74,0x31,0x8f,0xd7,0x6c,0xd2,0x1d,0x08,0xcd,0x43,0x5e,0x94,0x31,0x0e,0xe8,0xe8, \
+0xea,0x5e,0xdd,0x2b,0xcc,0x1d,0xd8,0x6c,0xb0,0x5e,0x55,0xc1,0x3e,0x7f,0x51,0x33, \
+0x47,0x0e,0x5a,0x2e,0x6a,0x1a,0x69,0xaf,0x55,0x4a,0x92,0x83,0xe8,0xcb,0x2d,0x70, \
+0xeb,0x54,0xa1,0x3a,0x48,0x46,0x8a,0xe0,0xba,0xe1,0x94,0x47,0x5e,0x28,0xb9,0xb6, \
+0x17,0x35,0xd4,0xbd,0x0a,0x08,0xe2,0x33,0x0a,0x18,0xba,0xa5,0x17,0x0b,0x15,0x6a, \
+0x76,0x64,0x30,0x1c,0x01,0xd4,0xd6,0xb5,0x21,0x97,0xb4,0x3a,0x74,0xea,0x64,0xd1, \
+0x82,0xc9,0x24,0x59,0x05,0x90,0xec,0x40,0x86,0x59,0x2d,0x12,0xc5,0xa5,0x0d,0x0d, \
+0xc3,0x54,0x1b,0x5d,0xe5,0xe5,0xec,0x30,0x59,0xac,0xd9,0x9e,0xe8,0xaa,0x24,0x02, \
+0x90,0x13,0x17,0x2b,0x72,0x98,0xc4,0xca,0x9a,0xee,0x54,0x2e,0xbf,0x99,0x7c,0x74, \
+0x0a,0xc0,0xe8,0x67,0x18,0x18,0xe4,0x30,0xd2,0x1d,0x10,0x10,0xfe,0xbc,0x19,0x86, \
+0xbd,0xab,0x8c,0x08,0xf6,0xf4,0xc1,0x81,0x17,0x74,0x2d,0xcc,0xc0,0xe3,0x7b,0x99, \
+0x82,0x62,0x14,0xbd,0xc4,0xd6,0x77,0xf3,0x26,0xca,0xc6,0xf6,0xaa,0x16,0x68,0x84, \
+0x36,0x9a,0x5e,0xce,0x76,0xe6,0xdf,0xa7,0x51,0xae,0xc2,0x90,0xe8,0xd9,0x36,0xbb, \
+0x21,0x98,0xc9,0xf0,0xe3,0xcc,0xef,0xb5,0x50,0x55,0x2b,0x6d,0xb0,0x55,0x59,0xa5, \
+0xd5,0x69,0x5d,0x74,0x80,0x0a,0xb3,0x8b,0x0b,0x3f,0x8b,0xc3,0xdf,0x77,0x97,0x3f, \
+0xcb,0x75,0x3f,0x3c,0x49,0x6f,0xb5,0x82,0xe1,0x91,0xd6,0x07,0xd7,0xb6,0xf7,0x9d, \
+0xab,0x0f,0x36,0x04,0x10,0x41,0xdb,0x30,0x49,0xc6,0xfe,0xd9,0x3f,0xe7,0x54,0xa1, \
+0x5f,0xe0,0xbf,0x36,0xa1,0x27,0x8f,0x45,0x9d,0x2f,0x2c,0xc4,0xdb,0xb9,0xa8,0x3d, \
+0x21,0xdf,0xb7,0x1e,0xfc,0x4e,0x82,0xcc,0xf2,0x82,0xf3,0x8a,0xe6,0x92,0xd5,0x80, \
+0xea,0x61,0x41,0xe1,0x03,0x92,0x7b,0xbe,0x37,0x76,0x2b,0xd7,0x24,0x06,0x4e,0xf0, \
+0x5e,0xf5,0xed,0x8b,0x60,0xca,0xd7,0x25,0x8d,0x57,0xdc,0x50,0x0b,0x8d,0xe1,0xfb, \
+0x18,0xdb,0x01,0xb6,0x9b,0x3d,0x5e,0xb2,0xf9,0x3b,0x5f,0x52,0x5c,0x68,0x4f,0x28, \
+0x17,0xf2,0x3e,0x05,0x5f,0xad,0x34,0x1f,0x63,0xcf,0x80,0x01,0x66,0x6d,0xf9,0x21, \
+0xe1,0x8c,0x7a,0xac,0x5b,0xf9,0xa8,0x2d,0xbe,0xa2,0x87,0x8c,0x67,0x9f,0x8a,0x06, \
+0xfc,0x4e,0xfe,0x00,0x79,0xe4,0xe5,0x21,0x84,0x7d,0x20,0x08,0x80,0x5a,0x91,0xd7, \
+0x21,0xd9,0x13,0x8c,0x88,0xf2,0x40,0xee,0xc4,0x81,0x99,0x75,0x46,0x98,0x39,0x6f, \
+0xfa,0xf9,0xe9,0x1b,0xf8,0x17,0xbd,0x11,0x80,0xc8,0x2a,0x22,0xc0,0x62,0xc1,0x18, \
+0x2a,0xc9,0x4f,0xdb,0x66,0xe1,0x9a,0xc1,0x0f,0x14,0x2a,0x2c,0x8a,0x91,0x61,0x83, \
+0x7e,0x78,0xe4,0xcc,0x9b,0xc3,0xa9,0x11,0xeb,0xe5,0x34,0x9a,0xeb,0x99,0x30,0x23, \
+0xe9,0x4c,0x13,0x06,0x26,0xc2,0xbb,0xef,0xf3,0xc5,0x36,0x84,0x77,0x30,0xcf,0xe7, \
+0xf7,0xc9,0xa5,0xc1,0xbd,0x5e,0x8f,0x5d,0x4b,0xf3,0x80,0xdf,0x5e,0xd9,0xe8,0xcd, \
+0x72,0xde,0xa8,0x19,0x9b,0x08,0xfb,0x13,0x4b,0xad,0x9b,0x1f,0xcb,0x2d,0x9c,0xee, \
+0xc7,0x12,0x49,0x62,0xa2,0xe1,0xb8,0xaf,0x14,0xc0,0xf2,0x9a,0x68,0x98,0x4c,0xcc, \
+0x23,0xa4,0x94,0x91,0x89,0x3a,0xf4,0x21,0x80,0x47,0xac,0xe4,0x14,0xd8,0x48,0xc2, \
+0xcd,0x11,0x84,0xf0,0x37,0x51,0x66,0x84,0xdf,0xf3,0xea,0x18,0x82,0xc1,0xa0,0x6c, \
+0x0a,0x92,0xe2,0xc8,0xb9,0x61,0xf5,0x78,0xf9,0x73,0xdd,0x81,0xf9,0xb2,0xd9,0x8c, \
+0x03,0xb2,0x26,0x74,0xd2,0x46,0x49,0xf9,0xcc,0x09,0xa0,0xf0,0x62,0x28,0xc0,0x6f, \
+0x83,0x49,0x52,0xc7,0x56,0xdc,0xa9,0xd7,0xf3,0x45,0xfe,0xad,0x83,0x1c,0xf5,0x50, \
+0xfe,0xfe,0x91,0x54,0xb5,0x39,0xec,0xe9,0x59,0xd4,0x1a,0xd4,0x30,0x8a,0xb3,0x48, \
+0x03,0xf5,0x31,0x0d,0x81,0x57,0x0c,0xa9,0xae,0x2d,0x53,0x6c,0x04,0x26,0x21,0x72, \
+0x18,0x1e,0x97,0xd7,0xa0,0x47,0x06,0xc3,0x24,0xc5,0x60,0x48,0x4f,0x57,0x15,0x31, \
+0x0f,0x93,0x84,0x3e,0xac,0xf9,0x6b,0x3d,0x10,0x29,0x1e,0x96,0xf5,0xc1,0x36,0x70, \
+0x61,0x99,0x07,0xfb,0x0d,0xec,0xce,0x6d,0xb3,0x60,0x3f,0x55,0x8a,0x3e,0xcf,0x92, \
+0x1e,0xfd,0xe9,0x87,0xc8,0x51,0x21,0xd7,0x53,0x8a,0xcd,0xa2,0x64,0xef,0xa5,0x22, \
+0x95,0x8b,0x1a,0x38,0x35,0x15,0xe5,0x95,0x12,0x28,0x27,0xef,0xbf,0x79,0xc4,0xa5, \
+0x8e,0xc6,0xb9,0x46,0x3f,0x0a,0x6b,0x45,0x73,0x20,0xb3,0x8a,0x61,0x09,0xb8,0xad, \
+0x08,0x21,0x44,0x28,0x53,0x28,0x7d,0x18,0x3e,0x65,0x8d,0x61,0x2f,0x5d,0xab,0x44, \
+0xd2,0x81,0x04,0x48,0x72,0xd5,0x94,0x6f,0xaa,0x01,0xfa,0x9c,0x6a,0x50,0x45,0x71, \
+0x94,0x47,0x8d,0x2d,0xb4,0x2d,0x31,0x71,0x43,0xaa,0x57,0x25,0xb0,0x1d,0x30,0x9c, \
+0x64,0x03,0x50,0x05,0x10,0x28,0xa6,0x32,0xc4,0x1d,0x16,0x5f,0x4c,0x28,0x86,0x69, \
+0x07,0x4c,0x26,0x1e,0x65,0x43,0xa6,0xdd,0xe1,0xac,0xcc,0x66,0xac,0x3b,0x0c,0x33, \
+0x85,0x3f,0x29,0x0a,0xcd,0x7c,0x62,0x32,0x49,0x2d,0x95,0xd3,0xa4,0x15,0x52,0x0f, \
+0xe8,0x84,0x67,0xbb,0x9e,0x1e,0x8c,0x0a,0x02,0x5b,0xda,0x15,0x43,0xf0,0xc4,0x5e, \
+0x4d,0x17,0xe0,0xc6,0x5e,0xf5,0x10,0x4f,0x4c,0x41,0xda,0x88,0x6e,0x1b,0x83,0xc9, \
+0x6e,0x13,0x83,0x27,0x86,0x73,0xb5,0x88,0x97,0xc6,0x10,0x0e,0x9c,0x18,0x57,0x08, \
+0x0f,0x3c,0xf6,0xd0,0xe1,0xef,0x59,0x8f,0x41,0x0a,0x3a,0xfd,0x88,0x00,0x59,0x00, \
+0x3f,0xe4,0x78,0x7b,0x74,0xfe,0x7d,0xb6,0xf9,0xfc,0xc2,0xaf,0x2d,0xf6,0xf7,0x86, \
+0x8f,0xf3,0xf7,0x0f,0xc0,0xb9,0xe0,0x16,0x0b,0xd5,0x1f,0x1d,0x15,0x64,0x9f,0xa3, \
+0xb9,0x7c,0xb0,0xc2,0x3f,0x2d,0xa9,0xac,0xb0,0xea,0x46,0xf2,0x46,0x9c,0x6b,0xe4, \
+0x2f,0xfc,0x2e,0xe4,0x8a,0x70,0xa1,0x21,0x6e,0x9d,0x2b,0x54, \
diff --git a/include-minimal/NUM_APPLETS.h b/include-minimal/NUM_APPLETS.h
index e288a7a..b651eff 100644
--- a/include-minimal/NUM_APPLETS.h
+++ b/include-minimal/NUM_APPLETS.h
@@ -1 +1 @@
-#define NUM_APPLETS 166
+#define NUM_APPLETS 167
diff --git a/include-minimal/applet_tables.h b/include-minimal/applet_tables.h
index 7570ef9..a40eac5 100644
--- a/include-minimal/applet_tables.h
+++ b/include-minimal/applet_tables.h
@@ -1,6 +1,6 @@
/* This is a generated file, don't edit */
-#define NUM_APPLETS 166
+#define NUM_APPLETS 167
const char applet_names[] ALIGN1 = ""
"[" "\0"
@@ -70,6 +70,7 @@ const char applet_names[] ALIGN1 = ""
"ls" "\0"
"lsattr" "\0"
"lsmod" "\0"
+"lsof" "\0"
"lspci" "\0"
"lsusb" "\0"
"lzcat" "\0"
@@ -240,6 +241,7 @@ losetup_main,
ls_main,
lsattr_main,
modprobe_main,
+lsof_main,
lspci_main,
lsusb_main,
unlzma_main,
@@ -411,104 +413,105 @@ const uint16_t applet_nameofs[] ALIGN2 = {
0x0176,
0x017d,
0x0183,
-0x0189,
-0x018f,
-0x0195,
+0x0188,
+0x018e,
+0x0194,
0x019a,
-0x01a2,
-0x01ab,
-0x01b2,
-0x01b8,
-0x01c0,
-0x01c7,
-0x01ce,
-0x01d8,
-0x01e2,
-0x01e8,
-0x01ef,
-0x01f6,
-0x01fe,
-0x0207,
+0x019f,
+0x01a7,
+0x01b0,
+0x01b7,
+0x01bd,
+0x01c5,
+0x01cc,
+0x01d3,
+0x01dd,
+0x01e7,
+0x01ed,
+0x01f4,
+0x01fb,
+0x0203,
0x020c,
-0x0212,
-0x021d,
-0x0220,
-0x0229,
-0x0233,
+0x0211,
+0x0217,
+0x0222,
+0x0225,
+0x022e,
0x0238,
-0x023e,
-0x0241,
-0x0247,
-0x024d,
-0x0253,
-0x0259,
-0x0262,
-0x0269,
-0x026c,
-0x0273,
-0x0277,
+0x023d,
+0x0243,
+0x0246,
+0x024c,
+0x0252,
+0x0258,
+0x025e,
+0x0267,
+0x026e,
+0x0271,
+0x0278,
0x027c,
-0x0285,
-0x028e,
-0x0295,
-0x029b,
-0x02a2,
-0x02a6,
-0x02a9,
-0x02af,
-0x02b5,
-0x02bf,
-0x02c3,
-0x02c7,
-0x02d2,
-0x02dc,
-0x02e3,
-0x02e6,
-0x02ee,
-0x02f8,
-0x0302,
-0x0308,
+0x0281,
+0x028a,
+0x0293,
+0x029a,
+0x02a0,
+0x02a7,
+0x02ab,
+0x02ae,
+0x02b4,
+0x02ba,
+0x02c4,
+0x02c8,
+0x02cc,
+0x02d7,
+0x02e1,
+0x02e8,
+0x02eb,
+0x02f3,
+0x02fd,
+0x0307,
0x030d,
-0x0313,
+0x0312,
0x0318,
-0x0320,
+0x031d,
0x0325,
-0x032d,
-0x0334,
+0x032a,
+0x0332,
0x0339,
-0x0340,
-0x0344,
+0x033e,
+0x0345,
0x0349,
-0x034d,
-0x0351,
+0x034e,
+0x0352,
0x0356,
0x035b,
-0x035f,
-0x0365,
-0x0368,
+0x0360,
+0x0364,
+0x036a,
0x036d,
-0x0375,
-0x037d,
-0x0384,
-0x038a,
-0x0393,
+0x0372,
+0x037a,
+0x0382,
+0x0389,
+0x038f,
0x0398,
-0x03a1,
-0x03a8,
-0x03af,
+0x039d,
+0x03a6,
+0x03ad,
0x03b4,
-0x03ba,
-0x03c1,
-0x03c8,
-0x03d1,
-0x03da,
-0x03e0,
-0x03e3,
-0x03e9,
-0x03f0,
-0x03f6,
-0x03fc,
-0x0400,
+0x03b9,
+0x03bf,
+0x03c6,
+0x03cd,
+0x03d6,
+0x03df,
+0x03e5,
+0x03e8,
+0x03ee,
+0x03f5,
+0x03fb,
+0x0401,
+0x0405,
};
diff --git a/include-minimal/applets.h b/include-minimal/applets.h
index d3e9770..fd4d93d 100644
--- a/include-minimal/applets.h
+++ b/include-minimal/applets.h
@@ -70,6 +70,7 @@ s - suid type:
IF_BUNZIP2(APPLET(bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, BB_DIR_USR_BIN, BB_SUID_DROP, bzcat))
IF_DATE(APPLET(date, BB_DIR_BIN, BB_SUID_DROP))
+IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
IF_GROUPS(APPLET_NOEXEC(groups, id, BB_DIR_USR_BIN, BB_SUID_DROP, groups))
IF_ID( APPLET_NOEXEC(id, id, BB_DIR_USR_BIN, BB_SUID_DROP, id ))
IF_TOUCH(APPLET_NOFORK(touch, touch, BB_DIR_BIN, BB_SUID_DROP, touch))
@@ -118,6 +119,7 @@ IF_PING(APPLET(ping, BB_DIR_BIN, BB_SUID_MAYBE))
IF_PING6(APPLET(ping6, BB_DIR_BIN, BB_SUID_MAYBE))
IF_WHOIS(APPLET(whois, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_IOSTAT(APPLET(iostat, BB_DIR_BIN, BB_SUID_DROP))
+IF_LSOF(APPLET(lsof, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_MPSTAT(APPLET(mpstat, BB_DIR_BIN, BB_SUID_DROP))
IF_NMETER(APPLET(nmeter, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_PMAP(APPLET(pmap, BB_DIR_USR_BIN, BB_SUID_DROP))
@@ -134,7 +136,9 @@ IF_MSH(APPLET(msh, BB_DIR_BIN, BB_SUID_DROP))
IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, BB_DIR_BIN, BB_SUID_DROP, sh))
IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, BB_DIR_BIN, BB_SUID_DROP, bash))
IF_BLOCKDEV(APPLET(blockdev, BB_DIR_SBIN, BB_SUID_DROP))
+IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
IF_REV(APPLET(rev, BB_DIR_BIN, BB_SUID_DROP))
+IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_TEST(APPLET_NOFORK([, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
IF_ACPID(APPLET(acpid, BB_DIR_SBIN, BB_SUID_DROP))
@@ -244,7 +248,6 @@ IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hexdump))
-IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
IF_HOSTNAME(APPLET(hostname, BB_DIR_BIN, BB_SUID_DROP))
IF_HTTPD(APPLET(httpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_HWCLOCK(APPLET(hwclock, BB_DIR_SBIN, BB_SUID_DROP))
@@ -308,7 +311,6 @@ IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
-IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
diff --git a/include-minimal/autoconf.h b/include-minimal/autoconf.h
index b46923f..5cec24d 100644
--- a/include-minimal/autoconf.h
+++ b/include-minimal/autoconf.h
@@ -1,8 +1,8 @@
/*
* Automatically generated C config: don't edit
- * Busybox version: 1.19.4-cm9
+ * Busybox version: 1.20.0-ics
*/
-#define AUTOCONF_TIMESTAMP "2012-02-05 18:41 +0100"
+#define AUTOCONF_TIMESTAMP "2012-04-23 18:03 +0200"
#define CONFIG_HAVE_DOT_CONFIG 1
#define ENABLE_HAVE_DOT_CONFIG 1
@@ -204,10 +204,22 @@
#define ENABLE_CROSS_COMPILER_PREFIX 1
#define IF_CROSS_COMPILER_PREFIX(...) __VA_ARGS__
#define IF_NOT_CROSS_COMPILER_PREFIX(...)
+#define CONFIG_SYSROOT ""
+#define ENABLE_SYSROOT 1
+#define IF_SYSROOT(...) __VA_ARGS__
+#define IF_NOT_SYSROOT(...)
#define CONFIG_EXTRA_CFLAGS "-Os"
#define ENABLE_EXTRA_CFLAGS 1
#define IF_EXTRA_CFLAGS(...) __VA_ARGS__
#define IF_NOT_EXTRA_CFLAGS(...)
+#define CONFIG_EXTRA_LDFLAGS ""
+#define ENABLE_EXTRA_LDFLAGS 1
+#define IF_EXTRA_LDFLAGS(...) __VA_ARGS__
+#define IF_NOT_EXTRA_LDFLAGS(...)
+#define CONFIG_EXTRA_LDLIBS ""
+#define ENABLE_EXTRA_LDLIBS 1
+#define IF_EXTRA_LDLIBS(...) __VA_ARGS__
+#define IF_NOT_EXTRA_LDLIBS(...)
/*
* Debugging Options
@@ -288,10 +300,10 @@
#define ENABLE_PASSWORD_MINLEN 1
#define IF_PASSWORD_MINLEN(...) __VA_ARGS__
#define IF_NOT_PASSWORD_MINLEN(...)
-#define CONFIG_MD5_SIZE_VS_SPEED 2
-#define ENABLE_MD5_SIZE_VS_SPEED 1
-#define IF_MD5_SIZE_VS_SPEED(...) __VA_ARGS__
-#define IF_NOT_MD5_SIZE_VS_SPEED(...)
+#define CONFIG_MD5_SMALL 0
+#define ENABLE_MD5_SMALL 1
+#define IF_MD5_SMALL(...) __VA_ARGS__
+#define IF_NOT_MD5_SMALL(...)
#define CONFIG_FEATURE_FAST_TOP 1
#define ENABLE_FEATURE_FAST_TOP 1
#define IF_FEATURE_FAST_TOP(...) __VA_ARGS__
@@ -324,6 +336,10 @@
#define ENABLE_FEATURE_EDITING_SAVEHISTORY 1
#define IF_FEATURE_EDITING_SAVEHISTORY(...) __VA_ARGS__
#define IF_NOT_FEATURE_EDITING_SAVEHISTORY(...)
+#define CONFIG_FEATURE_EDITING_SAVE_ON_EXIT 1
+#define ENABLE_FEATURE_EDITING_SAVE_ON_EXIT 1
+#define IF_FEATURE_EDITING_SAVE_ON_EXIT(...) __VA_ARGS__
+#define IF_NOT_FEATURE_EDITING_SAVE_ON_EXIT(...)
#define CONFIG_FEATURE_REVERSE_SEARCH 1
#define ENABLE_FEATURE_REVERSE_SEARCH 1
#define IF_FEATURE_REVERSE_SEARCH(...) __VA_ARGS__
@@ -456,6 +472,10 @@
#define ENABLE_FEATURE_GZIP_LONG_OPTIONS 1
#define IF_FEATURE_GZIP_LONG_OPTIONS(...) __VA_ARGS__
#define IF_NOT_FEATURE_GZIP_LONG_OPTIONS(...)
+#define CONFIG_GZIP_FAST 2
+#define ENABLE_GZIP_FAST 1
+#define IF_GZIP_FAST(...) __VA_ARGS__
+#define IF_NOT_GZIP_FAST(...)
#define CONFIG_LZOP 1
#define ENABLE_LZOP 1
#define IF_LZOP(...) __VA_ARGS__
@@ -576,6 +596,10 @@
#define ENABLE_FEATURE_DATE_COMPAT 1
#define IF_FEATURE_DATE_COMPAT(...) __VA_ARGS__
#define IF_NOT_FEATURE_DATE_COMPAT(...)
+#undef CONFIG_HOSTID
+#define ENABLE_HOSTID 0
+#define IF_HOSTID(...)
+#define IF_NOT_HOSTID(...) __VA_ARGS__
#define CONFIG_ID 1
#define ENABLE_ID 1
#define IF_ID(...) __VA_ARGS__
@@ -596,6 +620,10 @@
#define ENABLE_TOUCH 1
#define IF_TOUCH(...) __VA_ARGS__
#define IF_NOT_TOUCH(...)
+#undef CONFIG_FEATURE_TOUCH_SUSV3
+#define ENABLE_FEATURE_TOUCH_SUSV3 0
+#define IF_FEATURE_TOUCH_SUSV3(...)
+#define IF_NOT_FEATURE_TOUCH_SUSV3(...) __VA_ARGS__
#define CONFIG_TR 1
#define ENABLE_TR 1
#define IF_TR(...) __VA_ARGS__
@@ -764,10 +792,6 @@
#define ENABLE_FEATURE_FANCY_HEAD 0
#define IF_FEATURE_FANCY_HEAD(...)
#define IF_NOT_FEATURE_FANCY_HEAD(...) __VA_ARGS__
-#undef CONFIG_HOSTID
-#define ENABLE_HOSTID 0
-#define IF_HOSTID(...)
-#define IF_NOT_HOSTID(...) __VA_ARGS__
#define CONFIG_INSTALL 1
#define ENABLE_INSTALL 1
#define IF_INSTALL(...) __VA_ARGS__
@@ -1592,6 +1616,10 @@
#define ENABLE_LOGIN 0
#define IF_LOGIN(...)
#define IF_NOT_LOGIN(...) __VA_ARGS__
+#undef CONFIG_LOGIN_SESSION_AS_CHILD
+#define ENABLE_LOGIN_SESSION_AS_CHILD 0
+#define IF_LOGIN_SESSION_AS_CHILD(...)
+#define IF_NOT_LOGIN_SESSION_AS_CHILD(...) __VA_ARGS__
#undef CONFIG_PAM
#define ENABLE_PAM 0
#define IF_PAM(...)
@@ -1624,6 +1652,10 @@
#define ENABLE_CHPASSWD 0
#define IF_CHPASSWD(...)
#define IF_NOT_CHPASSWD(...) __VA_ARGS__
+#define CONFIG_FEATURE_DEFAULT_PASSWD_ALGO ""
+#define ENABLE_FEATURE_DEFAULT_PASSWD_ALGO 1
+#define IF_FEATURE_DEFAULT_PASSWD_ALGO(...) __VA_ARGS__
+#define IF_NOT_FEATURE_DEFAULT_PASSWD_ALGO(...)
#undef CONFIG_SU
#define ENABLE_SU 0
#define IF_SU(...)
@@ -1768,6 +1800,30 @@
#define ENABLE_BLOCKDEV 1
#define IF_BLOCKDEV(...) __VA_ARGS__
#define IF_NOT_BLOCKDEV(...)
+#undef CONFIG_MDEV
+#define ENABLE_MDEV 0
+#define IF_MDEV(...)
+#define IF_NOT_MDEV(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_CONF
+#define ENABLE_FEATURE_MDEV_CONF 0
+#define IF_FEATURE_MDEV_CONF(...)
+#define IF_NOT_FEATURE_MDEV_CONF(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_RENAME
+#define ENABLE_FEATURE_MDEV_RENAME 0
+#define IF_FEATURE_MDEV_RENAME(...)
+#define IF_NOT_FEATURE_MDEV_RENAME(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_RENAME_REGEXP
+#define ENABLE_FEATURE_MDEV_RENAME_REGEXP 0
+#define IF_FEATURE_MDEV_RENAME_REGEXP(...)
+#define IF_NOT_FEATURE_MDEV_RENAME_REGEXP(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_EXEC
+#define ENABLE_FEATURE_MDEV_EXEC 0
+#define IF_FEATURE_MDEV_EXEC(...)
+#define IF_NOT_FEATURE_MDEV_EXEC(...) __VA_ARGS__
+#undef CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
+#define ENABLE_FEATURE_MDEV_LOAD_FIRMWARE 0
+#define IF_FEATURE_MDEV_LOAD_FIRMWARE(...)
+#define IF_NOT_FEATURE_MDEV_LOAD_FIRMWARE(...) __VA_ARGS__
#define CONFIG_REV 1
#define ENABLE_REV 1
#define IF_REV(...) __VA_ARGS__
@@ -1940,30 +1996,6 @@
#define ENABLE_LSUSB 1
#define IF_LSUSB(...) __VA_ARGS__
#define IF_NOT_LSUSB(...)
-#undef CONFIG_MDEV
-#define ENABLE_MDEV 0
-#define IF_MDEV(...)
-#define IF_NOT_MDEV(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_CONF
-#define ENABLE_FEATURE_MDEV_CONF 0
-#define IF_FEATURE_MDEV_CONF(...)
-#define IF_NOT_FEATURE_MDEV_CONF(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME
-#define ENABLE_FEATURE_MDEV_RENAME 0
-#define IF_FEATURE_MDEV_RENAME(...)
-#define IF_NOT_FEATURE_MDEV_RENAME(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_RENAME_REGEXP
-#define ENABLE_FEATURE_MDEV_RENAME_REGEXP 0
-#define IF_FEATURE_MDEV_RENAME_REGEXP(...)
-#define IF_NOT_FEATURE_MDEV_RENAME_REGEXP(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_EXEC
-#define ENABLE_FEATURE_MDEV_EXEC 0
-#define IF_FEATURE_MDEV_EXEC(...)
-#define IF_NOT_FEATURE_MDEV_EXEC(...) __VA_ARGS__
-#undef CONFIG_FEATURE_MDEV_LOAD_FIRMWARE
-#define ENABLE_FEATURE_MDEV_LOAD_FIRMWARE 0
-#define IF_FEATURE_MDEV_LOAD_FIRMWARE(...)
-#define IF_NOT_FEATURE_MDEV_LOAD_FIRMWARE(...) __VA_ARGS__
#define CONFIG_MKSWAP 1
#define ENABLE_MKSWAP 1
#define IF_MKSWAP(...) __VA_ARGS__
@@ -2972,6 +3004,10 @@
#define ENABLE_FEATURE_TUNCTL_UG 0
#define IF_FEATURE_TUNCTL_UG(...)
#define IF_NOT_FEATURE_TUNCTL_UG(...) __VA_ARGS__
+#undef CONFIG_UDHCPC6
+#define ENABLE_UDHCPC6 0
+#define IF_UDHCPC6(...)
+#define IF_NOT_UDHCPC6(...) __VA_ARGS__
#undef CONFIG_UDHCPD
#define ENABLE_UDHCPD 0
#define IF_UDHCPD(...)
@@ -3120,6 +3156,10 @@
#define ENABLE_IOSTAT 0
#define IF_IOSTAT(...)
#define IF_NOT_IOSTAT(...) __VA_ARGS__
+#define CONFIG_LSOF 1
+#define ENABLE_LSOF 1
+#define IF_LSOF(...) __VA_ARGS__
+#define IF_NOT_LSOF(...)
#undef CONFIG_MPSTAT
#define ENABLE_MPSTAT 0
#define IF_MPSTAT(...)
@@ -3204,6 +3244,10 @@
#define ENABLE_FEATURE_PS_WIDE 1
#define IF_FEATURE_PS_WIDE(...) __VA_ARGS__
#define IF_NOT_FEATURE_PS_WIDE(...)
+#define CONFIG_FEATURE_PS_LONG 1
+#define ENABLE_FEATURE_PS_LONG 1
+#define IF_FEATURE_PS_LONG(...) __VA_ARGS__
+#define IF_NOT_FEATURE_PS_LONG(...)
#undef CONFIG_FEATURE_PS_TIME
#define ENABLE_FEATURE_PS_TIME 0
#define IF_FEATURE_PS_TIME(...)
diff --git a/include-minimal/bbconfigopts.h b/include-minimal/bbconfigopts.h
index 91918ef..721ffd4 100644
--- a/include-minimal/bbconfigopts.h
+++ b/include-minimal/bbconfigopts.h
@@ -56,7 +56,10 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_SHARED_BUSYBOX is not set\n"
"# CONFIG_LFS is not set\n"
"CONFIG_CROSS_COMPILER_PREFIX=\"arm-eabi-\"\n"
+"CONFIG_SYSROOT=\"\"\n"
"CONFIG_EXTRA_CFLAGS=\"-Os\"\n"
+"CONFIG_EXTRA_LDFLAGS=\"\"\n"
+"CONFIG_EXTRA_LDLIBS=\"\"\n"
"# CONFIG_DEBUG is not set\n"
"# CONFIG_DEBUG_PESSIMIZE is not set\n"
"# CONFIG_WERROR is not set\n"
@@ -74,7 +77,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_SYSTEMD is not set\n"
"# CONFIG_FEATURE_RTMINMAX is not set\n"
"CONFIG_PASSWORD_MINLEN=6\n"
-"CONFIG_MD5_SIZE_VS_SPEED=2\n"
+"CONFIG_MD5_SMALL=0\n"
"CONFIG_FEATURE_FAST_TOP=y\n"
"# CONFIG_FEATURE_ETC_NETWORKS is not set\n"
"CONFIG_FEATURE_USE_TERMIOS=y\n"
@@ -83,6 +86,7 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_FEATURE_EDITING_VI=y\n"
"CONFIG_FEATURE_EDITING_HISTORY=256\n"
"CONFIG_FEATURE_EDITING_SAVEHISTORY=y\n"
+"CONFIG_FEATURE_EDITING_SAVE_ON_EXIT=y\n"
"CONFIG_FEATURE_REVERSE_SEARCH=y\n"
"CONFIG_FEATURE_TAB_COMPLETION=y\n"
"# CONFIG_FEATURE_USERNAME_COMPLETION is not set\n"
@@ -114,6 +118,7 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_GUNZIP=y\n"
"CONFIG_GZIP=y\n"
"CONFIG_FEATURE_GZIP_LONG_OPTIONS=y\n"
+"CONFIG_GZIP_FAST=2\n"
"CONFIG_LZOP=y\n"
"# CONFIG_LZOP_COMPR_HIGH is not set\n"
"# CONFIG_RPM2CPIO is not set\n"
@@ -143,11 +148,13 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_FEATURE_DATE_ISOFMT=y\n"
"# CONFIG_FEATURE_DATE_NANO is not set\n"
"CONFIG_FEATURE_DATE_COMPAT=y\n"
+"# CONFIG_HOSTID is not set\n"
"CONFIG_ID=y\n"
"CONFIG_GROUPS=y\n"
"CONFIG_TEST=y\n"
"# CONFIG_FEATURE_TEST_64 is not set\n"
"CONFIG_TOUCH=y\n"
+"# CONFIG_FEATURE_TOUCH_SUSV3 is not set\n"
"CONFIG_TR=y\n"
"CONFIG_FEATURE_TR_CLASSES=y\n"
"# CONFIG_FEATURE_TR_EQUIV is not set\n"
@@ -190,7 +197,6 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FSYNC is not set\n"
"CONFIG_HEAD=y\n"
"# CONFIG_FEATURE_FANCY_HEAD is not set\n"
-"# CONFIG_HOSTID is not set\n"
"CONFIG_INSTALL=y\n"
"# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set\n"
"CONFIG_LN=y\n"
@@ -387,6 +393,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set\n"
"# CONFIG_GETTY is not set\n"
"# CONFIG_LOGIN is not set\n"
+"# CONFIG_LOGIN_SESSION_AS_CHILD is not set\n"
"# CONFIG_PAM is not set\n"
"# CONFIG_LOGIN_SCRIPTS is not set\n"
"# CONFIG_FEATURE_NOLOGIN is not set\n"
@@ -395,6 +402,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set\n"
"# CONFIG_CRYPTPW is not set\n"
"# CONFIG_CHPASSWD is not set\n"
+"CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=\"\"\n"
"# CONFIG_SU is not set\n"
"# CONFIG_FEATURE_SU_SYSLOG is not set\n"
"# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set\n"
@@ -427,6 +435,12 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set\n"
"CONFIG_DEFAULT_DEPMOD_FILE=\"modules.dep\"\n"
"CONFIG_BLOCKDEV=y\n"
+"# CONFIG_MDEV is not set\n"
+"# CONFIG_FEATURE_MDEV_CONF is not set\n"
+"# CONFIG_FEATURE_MDEV_RENAME is not set\n"
+"# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set\n"
+"# CONFIG_FEATURE_MDEV_EXEC is not set\n"
+"# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set\n"
"CONFIG_REV=y\n"
"# CONFIG_ACPID is not set\n"
"# CONFIG_FEATURE_ACPID_COMPAT is not set\n"
@@ -470,12 +484,6 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_LOSETUP=y\n"
"CONFIG_LSPCI=y\n"
"CONFIG_LSUSB=y\n"
-"# CONFIG_MDEV is not set\n"
-"# CONFIG_FEATURE_MDEV_CONF is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME is not set\n"
-"# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set\n"
-"# CONFIG_FEATURE_MDEV_EXEC is not set\n"
-"# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set\n"
"CONFIG_MKSWAP=y\n"
"# CONFIG_FEATURE_MKSWAP_UUID is not set\n"
"CONFIG_MORE=y\n"
@@ -724,6 +732,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set\n"
"# CONFIG_TUNCTL is not set\n"
"# CONFIG_FEATURE_TUNCTL_UG is not set\n"
+"# CONFIG_UDHCPC6 is not set\n"
"# CONFIG_UDHCPD is not set\n"
"# CONFIG_DHCPRELAY is not set\n"
"# CONFIG_DUMPLEASES is not set\n"
@@ -758,6 +767,7 @@ static const char bbconfig_config[] ALIGN1 =
"# CONFIG_FEATURE_REFORMIME_COMPAT is not set\n"
"# CONFIG_SENDMAIL is not set\n"
"# CONFIG_IOSTAT is not set\n"
+"CONFIG_LSOF=y\n"
"# CONFIG_MPSTAT is not set\n"
"# CONFIG_NMETER is not set\n"
"# CONFIG_PMAP is not set\n"
@@ -779,6 +789,7 @@ static const char bbconfig_config[] ALIGN1 =
"CONFIG_PKILL=y\n"
"CONFIG_PS=y\n"
"CONFIG_FEATURE_PS_WIDE=y\n"
+"CONFIG_FEATURE_PS_LONG=y\n"
"# CONFIG_FEATURE_PS_TIME is not set\n"
"# CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set\n"
"# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set\n"
diff --git a/include-minimal/bbconfigopts_bz2.h b/include-minimal/bbconfigopts_bz2.h
index 2c70046..38309f1 100644
--- a/include-minimal/bbconfigopts_bz2.h
+++ b/include-minimal/bbconfigopts_bz2.h
@@ -9,323 +9,328 @@
* Do not edit.
*/
static const char bbconfig_config_bz2[] ALIGN1 = {
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x14,0x03,0xff,0xbb,0x00,0x0b,0x90,0xdf,
+0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x81,0x7f,0x19,0x12,0x00,0x0b,0xb3,0xdf,
0x80,0x00,0x10,0x58,0x03,0xff,0xe2,0x3f,0xff,0xff,0xf0,0xbf,0x27,0xdf,0x60,0x60,
-0x1a,0x3c,0x00,0x3b,0x00,0x3c,0x80,0xf9,0x40,0x57,0x5e,0x00,0x17,0x7d,0x84,0x66,
-0x1a,0x0e,0x87,0x55,0x89,0xa0,0x53,0xd3,0xd0,0xa2,0xd8,0x00,0x3b,0xb0,0x90,0x26,
-0x67,0xa3,0xdd,0xea,0xea,0x54,0x84,0x5d,0xbb,0xb6,0x76,0x74,0xab,0xb2,0x86,0xed,
-0x5b,0xe0,0x6a,0x7a,0x04,0x02,0x02,0x68,0x24,0xd2,0x23,0x4f,0x50,0x7a,0x4f,0x49,
-0xea,0x7a,0x80,0x0d,0x00,0xd3,0x20,0x42,0x10,0xc9,0x53,0xf2,0x29,0x3d,0x4d,0x00,
-0x00,0x01,0xa0,0x00,0x1a,0x62,0x45,0x1b,0x43,0x49,0xaa,0x3d,0x4f,0x21,0x34,0x7a,
-0x80,0xda,0x80,0x03,0x40,0x00,0x24,0xf5,0x4a,0x4a,0x51,0xb2,0x8d,0xa8,0xf5,0x00,
-0x34,0x00,0x00,0x69,0xa0,0x00,0x01,0x24,0x91,0xea,0x08,0x8d,0xa9,0xe9,0x03,0x41,
-0x90,0x68,0x0f,0x48,0x68,0xf5,0x3d,0x46,0xc9,0xa2,0x7a,0x82,0x44,0x21,0x34,0x01,
-0x09,0x34,0x8a,0x9f,0xa8,0x98,0x00,0x00,0x00,0x03,0xff,0x7c,0x5f,0xee,0xdd,0x42,
-0xe5,0x74,0xde,0xc7,0x5d,0xd5,0xcd,0x1a,0x0c,0x6d,0x11,0x51,0xac,0x49,0x20,0xc2,
-0x99,0x45,0x45,0xb1,0xb7,0x35,0xbc,0x6b,0xcc,0xb9,0x5b,0xbe,0x97,0x6d,0xd9,0xb2,
-0x10,0x91,0x58,0xc5,0x10,0x58,0x99,0x25,0x3d,0x74,0xeb,0x92,0x28,0xa4,0xc5,0xbd,
-0x77,0x24,0xee,0xad,0xcd,0xb1,0xa3,0x66,0x6d,0x57,0x8d,0xcb,0x68,0xcf,0x3b,0x5c,
-0x1e,0x77,0x28,0xd5,0x27,0x2e,0x63,0x68,0xad,0xca,0xe6,0x31,0xcb,0x96,0x20,0xd7,
-0x0e,0xf3,0xb8,0x68,0x28,0x25,0x85,0x0f,0x3a,0xe2,0x29,0x84,0x30,0x8a,0x5c,0xbb,
-0x2f,0x3a,0xb9,0x26,0xa2,0xf5,0xef,0xed,0xf1,0xaf,0x4d,0x8b,0x65,0x2d,0x01,0x33,
-0x64,0x97,0x8b,0xa4,0x48,0x83,0x02,0x40,0xc7,0xb1,0x5d,0x5e,0xff,0x3c,0xbc,0x66,
-0x5f,0x3b,0xbb,0x13,0x04,0x81,0x49,0x82,0x4a,0x40,0xc6,0x46,0x90,0x02,0x3e,0x7b,
-0x73,0x26,0x98,0x92,0xf7,0x56,0xd6,0xab,0xeb,0x7e,0x4f,0xc3,0xfb,0xbf,0x43,0xf4,
-0x72,0xf4,0xaf,0x5f,0x25,0xd8,0x97,0x65,0x7d,0x5b,0x66,0xb5,0x0c,0xec,0x55,0xa7,
-0xb7,0xcb,0x58,0xa7,0x9a,0x79,0xae,0x74,0x14,0xc6,0xe0,0xd2,0x94,0x0f,0x76,0xdb,
-0xdf,0xe7,0x74,0xb4,0xe6,0x8e,0x52,0xc9,0x51,0x75,0xfd,0xb4,0xd3,0xca,0x66,0xa9,
-0x06,0x8b,0x1b,0xfe,0xe1,0x38,0x4d,0xa7,0xf2,0xdb,0xe9,0xbd,0x36,0x8c,0xb2,0x8e,
-0x3b,0x7d,0x39,0x6d,0x87,0x61,0xf7,0xb7,0x6f,0xc9,0xae,0x3f,0x2c,0x8a,0xf6,0xd6,
-0xeb,0xd5,0xfc,0xbb,0x29,0x1b,0x78,0xb8,0xf3,0x75,0xb9,0x85,0xa7,0xe0,0x83,0xab,
-0x5f,0xd5,0xf4,0xdd,0x05,0x8c,0x98,0xe1,0x6b,0x83,0x5e,0xf4,0x69,0xc1,0x10,0x38,
-0x8f,0x86,0xcb,0x16,0xa4,0xb7,0xf6,0xb4,0x71,0xac,0x1f,0x86,0xa8,0xda,0x5a,0x88,
-0x50,0x22,0x21,0x1d,0xe9,0xc4,0x67,0xe7,0x58,0xa5,0xaa,0x91,0x5b,0x67,0x46,0xba,
-0xc6,0x95,0x75,0x23,0xa3,0xd8,0xf4,0x65,0xf8,0x1e,0xa9,0x35,0xa2,0x62,0xd8,0x62,
-0xec,0xe1,0x34,0x72,0x32,0xec,0xb1,0x39,0xb1,0x6a,0x3d,0x29,0x18,0x7d,0x27,0xda,
-0xf4,0x9b,0x2d,0x99,0x55,0x85,0x83,0xcc,0x72,0xd0,0x7c,0x69,0x38,0x7a,0xf3,0x6f,
-0x0d,0x78,0x1a,0xda,0x96,0xa0,0x8f,0x68,0xd7,0xb3,0x0b,0xe2,0x6b,0xf7,0x57,0x6d,
-0x9b,0x59,0xe4,0x5f,0x13,0x87,0xa4,0x15,0x11,0x1a,0xa5,0xc1,0xf6,0xed,0x75,0x7e,
-0xe5,0x68,0x32,0x56,0xb5,0x77,0x13,0x84,0x5d,0x6f,0xa4,0xdf,0x4f,0x8c,0xf2,0xf6,
-0xb6,0xb6,0xa4,0xd6,0x63,0x32,0x6c,0x4f,0x5c,0x4f,0x7c,0x2e,0x2f,0x63,0x61,0x57,
-0x21,0xb1,0xb6,0x27,0x03,0xb2,0x76,0x0b,0xd1,0xd0,0xf0,0xe8,0x3d,0xf1,0xc4,0x3e,
-0x78,0xda,0xed,0x5d,0xb7,0x4f,0x0c,0x82,0x80,0xf7,0xce,0x1e,0x99,0xee,0xb3,0xf8,
-0x1f,0x0e,0x87,0x94,0x8e,0xfc,0xd7,0x7d,0x85,0xde,0x26,0x16,0x9a,0x59,0xba,0x9c,
-0x7c,0x6b,0xcc,0x07,0x88,0x4e,0x91,0xa8,0x66,0x90,0xb9,0xc3,0x78,0x1c,0x5c,0x2b,
-0x73,0xdd,0x7d,0x10,0xd8,0x4b,0x0d,0xbe,0x3a,0xee,0xef,0x1f,0x98,0x12,0x42,0x03,
-0xbc,0x12,0x10,0x1a,0x60,0xd6,0x57,0x04,0xaf,0xaa,0x1f,0x29,0x2a,0x81,0x21,0x01,
-0xb2,0x2b,0xa7,0xdb,0x74,0x76,0xb3,0xcc,0x91,0x55,0x96,0x71,0xb4,0x6d,0xb3,0x5b,
-0x7b,0xf4,0x8f,0xed,0x9b,0xc3,0xfb,0x58,0xf2,0x63,0xce,0x68,0xd3,0x36,0x86,0xa3,
-0x1e,0x42,0x9d,0x54,0xfd,0xe5,0xa3,0xce,0x40,0x69,0xfc,0xf7,0xa3,0xcc,0x7d,0x5e,
-0x55,0x7a,0xfe,0x36,0xd4,0xd5,0xaf,0x26,0x4f,0xef,0x36,0x42,0x3e,0x75,0xfa,0x7d,
-0x05,0x3c,0x28,0x4e,0x14,0xb7,0x60,0xda,0xb7,0xe2,0xbb,0x7f,0x04,0xaf,0xd2,0x26,
-0xe6,0x7f,0x65,0x87,0xe7,0x13,0xad,0xbd,0x7d,0x5c,0x51,0xac,0x8e,0x62,0x3d,0x6f,
-0x44,0xbd,0x56,0xfe,0xf8,0x1b,0x5a,0xf0,0xe8,0x57,0xcf,0x0d,0xed,0x74,0x88,0x9a,
-0x4e,0xcc,0x23,0xdd,0x2b,0x30,0x2f,0xf7,0xb6,0xe6,0x65,0xd2,0x45,0x39,0xba,0xec,
-0xf9,0xe2,0xca,0xb3,0x9d,0x39,0xf7,0xb3,0x2b,0x6b,0xa3,0xf4,0x2c,0xe3,0x74,0x60,
-0xed,0xf5,0xe2,0x1a,0x3b,0xf3,0x45,0xc5,0x72,0x69,0x86,0xda,0x20,0xcc,0x16,0xcd,
-0x17,0x7b,0x9a,0x2f,0x5b,0xf7,0x9c,0xea,0x82,0x6d,0xa5,0x0f,0xd9,0x3e,0xcd,0x4a,
-0x6c,0xfa,0x75,0xbe,0x3f,0x4f,0x34,0x3a,0xea,0xea,0xbe,0x7c,0xb4,0x5c,0x93,0x08,
-0x11,0x52,0x44,0x83,0x84,0x09,0xba,0x0e,0x7b,0x69,0xd5,0xec,0xb1,0x4b,0x2e,0x54,
-0xb6,0x72,0xc3,0x67,0x9a,0x69,0x42,0x26,0xdc,0xd6,0xfc,0x21,0x36,0xb1,0x11,0x8f,
-0xb9,0x30,0xfc,0xe3,0x85,0xfb,0x3b,0xd3,0x17,0xaf,0xba,0x8c,0x15,0xae,0xe3,0x13,
-0x34,0xde,0x8d,0xe6,0xd5,0x66,0x38,0xde,0x94,0xc4,0x90,0x02,0xd2,0xb0,0x9a,0xdf,
-0xd4,0x3f,0xdd,0x20,0xb3,0x8c,0x0a,0x03,0x11,0x82,0x88,0x3d,0xea,0x27,0x2b,0x76,
-0x43,0x07,0x2c,0x20,0x70,0x17,0x19,0x2c,0x90,0x7a,0xa7,0xba,0xcb,0xc3,0xca,0xb6,
-0x4f,0x5b,0x2c,0x0c,0x7e,0xb6,0x74,0xe9,0x43,0xd7,0x8f,0x3f,0x44,0x43,0xb2,0x09,
-0x50,0x08,0x8a,0x2e,0x2c,0xf0,0xaa,0xa2,0x1e,0x18,0x06,0x20,0xc2,0x48,0xe0,0x44,
-0x56,0x2f,0xb2,0xcb,0x1e,0xe7,0x49,0xee,0x20,0x01,0xf9,0xaa,0x38,0xd7,0x8f,0x9b,
-0xa4,0xa7,0x25,0x8c,0xef,0xa9,0x14,0xa3,0xee,0x67,0x38,0xd5,0xf6,0xc2,0x5c,0x43,
-0x30,0x4f,0x40,0x39,0x8e,0x8d,0x4c,0x6c,0xc6,0xf4,0x95,0x77,0x9c,0xf9,0x2f,0xe9,
-0x1b,0x1a,0x5d,0x2d,0x95,0xc5,0x0b,0x50,0xe9,0xd3,0x4d,0xa5,0xec,0x37,0xe3,0x77,
-0x94,0xef,0xbb,0x3d,0xc4,0x0a,0x48,0x85,0x09,0xc3,0x4e,0x34,0x25,0x4e,0xa8,0x7e,
-0x3c,0xb5,0x13,0xbd,0xe6,0x48,0x19,0xc0,0xe2,0xf5,0x3d,0x37,0x6d,0x8d,0x9b,0xf4,
-0xcd,0x1b,0x6f,0x5c,0x0a,0xe9,0x93,0x99,0xae,0x76,0xf9,0xa8,0x81,0x02,0xc0,0x62,
-0xa1,0x8d,0xea,0xd4,0x6e,0x2e,0x11,0xbb,0xd7,0x25,0xce,0xa8,0xdd,0x16,0x57,0xa2,
-0x59,0xb7,0xee,0x71,0xbc,0x7e,0x93,0xb4,0xd4,0x6a,0x0a,0x9a,0x3c,0x3e,0x62,0xf4,
-0xb0,0x28,0x0f,0xc1,0x26,0x08,0xd9,0x9f,0xc4,0xea,0xe9,0x34,0xac,0x58,0xd8,0x95,
-0x46,0xe2,0xfb,0x52,0x06,0x7c,0x08,0xce,0x60,0x56,0xd1,0x43,0x18,0x2e,0x18,0x66,
-0x8a,0x18,0x85,0x2b,0xb3,0x76,0x1a,0xd5,0x26,0xb7,0x9e,0xfd,0x50,0x3c,0x38,0xbd,
-0x24,0x83,0x85,0x04,0x6c,0x42,0x54,0xdc,0xcf,0x65,0x39,0x81,0xf7,0x27,0xd5,0x91,
-0xad,0xe2,0xb0,0x53,0x82,0x53,0xc7,0xd1,0x17,0xd3,0x93,0x0c,0x76,0x4d,0x21,0xb4,
-0x8e,0x40,0xc2,0x20,0x1b,0xa7,0xe0,0xd8,0xad,0x8c,0x16,0x85,0xe5,0x4a,0x48,0x8a,
-0xb4,0x5a,0x12,0xc0,0x98,0xbd,0xa1,0x67,0xc1,0x4b,0x59,0x65,0xed,0xf2,0x85,0x0c,
-0xa5,0x96,0xda,0x4a,0x5a,0xc4,0x3b,0xcf,0xa7,0xf7,0xf5,0x0f,0xfc,0xc0,0xfe,0xb4,
-0x0d,0xb6,0xda,0x45,0xec,0x3a,0xdc,0x32,0x32,0x49,0x12,0x99,0x2a,0x62,0x04,0x46,
-0x32,0x11,0x49,0x62,0x33,0x36,0x2b,0x0a,0x13,0x26,0x66,0x48,0xd3,0x44,0xcc,0x4c,
-0x95,0x4d,0x29,0x5a,0x2d,0xb1,0x62,0xa3,0x52,0x94,0x2c,0x92,0xc6,0x88,0x44,0xd4,
-0x52,0x63,0x26,0x4a,0x12,0xd2,0x14,0x68,0xd4,0x0d,0x2a,0x94,0xd1,0xa8,0xa2,0x28,
-0xda,0x2b,0x48,0x7a,0xee,0x34,0xcb,0x04,0xa1,0x26,0xd5,0xe3,0x94,0x98,0x8c,0x98,
-0xac,0xc9,0x86,0xa4,0xc8,0x81,0x93,0x97,0x64,0xd1,0xa6,0x12,0xc0,0x46,0x53,0x49,
-0x94,0x4f,0x17,0x02,0x60,0x9a,0x8c,0x62,0x2c,0x8c,0x49,0xe7,0x5d,0x0e,0xeb,0x8a,
-0x41,0x92,0x46,0x19,0x01,0xb2,0x08,0x64,0x6c,0x29,0x9a,0x02,0x0f,0x3b,0x8e,0xfc,
-0x17,0xd5,0xba,0xbd,0xbe,0xee,0xba,0x4d,0x5f,0x0b,0xef,0xca,0x9b,0x42,0x81,0x8c,
-0x68,0xf4,0x97,0xce,0xe5,0x04,0x4f,0x46,0x73,0xf8,0x8d,0xad,0x3e,0x3a,0x9d,0x2f,
-0x85,0x05,0xf6,0xba,0x2c,0x65,0x21,0x64,0x21,0x3d,0x75,0xd2,0x45,0x5e,0x26,0x46,
-0x52,0xf8,0x65,0x09,0x74,0x14,0xc5,0x21,0x8b,0x66,0xbe,0xad,0x58,0xd1,0xde,0xb4,
-0x97,0xdd,0xf1,0xde,0xe3,0xdd,0xe9,0xe9,0x2d,0x7b,0x0b,0x7e,0x02,0xdc,0x04,0x12,
-0xe3,0x11,0xe3,0x35,0xcd,0x09,0x10,0x34,0xaf,0xc3,0x19,0x23,0x57,0xbb,0x56,0x65,
-0xbf,0x1b,0xc9,0x29,0x61,0xa8,0x6c,0xcd,0xd8,0xd9,0x08,0x3f,0x35,0x69,0x05,0x61,
-0x9f,0xb3,0xab,0xc5,0x46,0x35,0xbf,0xed,0x74,0xb9,0x56,0x45,0xc5,0xab,0x34,0x64,
-0x5b,0x5a,0xfd,0x36,0x4e,0x6a,0x8e,0xfb,0x27,0x09,0x36,0xd8,0x35,0xa6,0x9f,0x11,
-0x7f,0x45,0x83,0x8d,0xe2,0xaa,0xaa,0x9e,0xf0,0xd7,0x09,0x6d,0xc7,0x1b,0x27,0x89,
-0xea,0x98,0xf8,0xcd,0x0d,0x4b,0xba,0xe2,0x8a,0xa3,0xed,0x91,0xe8,0x43,0xb2,0x52,
-0xb0,0x89,0xef,0x65,0x4f,0xdd,0x79,0xb5,0x9f,0x3a,0x1e,0xb4,0xb1,0x53,0x12,0xa8,
-0x2b,0xe3,0x2b,0x70,0x3d,0xe9,0xf5,0x5e,0xea,0x45,0x15,0x08,0x81,0x0e,0x10,0x71,
-0xf1,0xac,0x46,0x6b,0x37,0xb6,0xa9,0xc6,0xb3,0x7c,0x4c,0x88,0x6c,0x38,0x7d,0x05,
-0xc9,0xf7,0xc5,0x3b,0x50,0xf2,0x9a,0xf0,0x86,0x89,0xda,0x1e,0x86,0xf2,0xdc,0x08,
-0x7d,0xcb,0x09,0x8c,0x29,0x26,0xb6,0x8a,0xdb,0xb4,0xd5,0xfa,0xcb,0xf7,0xd6,0x57,
-0x60,0x52,0xee,0xf1,0x73,0x74,0x26,0xc6,0x7e,0xe6,0x2d,0x7d,0x2a,0x2c,0xfc,0x88,
-0x88,0xae,0x16,0xee,0xf5,0x35,0x44,0x7b,0x70,0xae,0xc6,0x0e,0xf6,0x77,0x8c,0xae,
-0x6a,0xe2,0xd2,0x2f,0x06,0x6c,0xd3,0xae,0xc5,0x51,0x3a,0x7c,0x28,0xac,0xea,0xaf,
-0x64,0xd6,0xc2,0x63,0x17,0xcd,0xaf,0x7a,0xe4,0x3f,0x79,0x10,0x4c,0x80,0xb7,0x16,
-0x76,0x49,0x06,0x06,0x5d,0x24,0x95,0x7e,0x44,0x08,0x15,0xac,0x31,0x7d,0xab,0x84,
-0x68,0x81,0xdf,0xfd,0xb8,0x78,0x9c,0x71,0x73,0x5e,0xf5,0xeb,0x4f,0x8a,0x52,0xca,
-0xdb,0x2d,0x41,0xeb,0xf1,0xa8,0x32,0x6b,0x61,0x62,0x52,0x1e,0xc7,0x9a,0xb4,0x82,
-0x8a,0x30,0x7a,0x69,0xde,0x2b,0x0b,0x43,0x75,0x1d,0xa9,0x13,0x20,0xc8,0x4e,0xbf,
-0x95,0x80,0x92,0x99,0xbf,0xc6,0xaa,0xfe,0x73,0x3b,0x5a,0x3d,0xfe,0x2d,0x9b,0x83,
-0x2f,0x78,0xbf,0xdf,0xbe,0x7a,0x71,0xeb,0x55,0x87,0xed,0x9c,0xf6,0xbe,0x2d,0xc6,
-0x3c,0x86,0x61,0x12,0x3e,0x70,0xcb,0x7c,0xd5,0xfa,0xee,0xdb,0xfe,0x20,0xad,0x67,
-0x01,0xa8,0x48,0x94,0x59,0x90,0xd9,0x87,0xc3,0xe2,0xda,0xa8,0xd8,0x1d,0x34,0xc3,
-0x33,0xba,0xa4,0xb4,0x82,0xe7,0xbe,0x38,0x2f,0x6e,0x62,0xde,0x56,0x71,0x6f,0xd7,
-0x8f,0x11,0xa0,0x3a,0x66,0x5a,0xed,0x93,0x58,0x89,0x18,0x86,0xd6,0x85,0x66,0xa6,
-0xa4,0x3d,0xbd,0xb7,0x86,0x4c,0x37,0xab,0x5b,0x59,0x22,0xf5,0x7b,0x65,0xa2,0xf6,
-0x20,0xa6,0xd7,0xb9,0x89,0x1b,0xc2,0xd6,0x59,0x2a,0x6a,0xa2,0x65,0x8c,0x92,0x08,
-0x21,0x8e,0x4d,0x2c,0xd5,0x41,0x02,0xd5,0xa0,0xac,0xf3,0x86,0x6a,0x10,0x3a,0x6d,
-0xa2,0xec,0x6d,0x03,0x9d,0x4f,0x59,0x12,0xd8,0x19,0xaf,0xdc,0x4b,0x0f,0x4c,0x37,
-0x68,0x5c,0x5e,0x75,0x74,0x2b,0xb5,0xa3,0x42,0xef,0x68,0xcb,0x42,0x96,0x91,0x76,
-0x92,0x2c,0xc2,0x1a,0x29,0x80,0xb1,0x88,0x2d,0x1b,0x5f,0x13,0x6e,0x6b,0xc6,0x8d,
-0xa4,0xf6,0xab,0x78,0xd6,0xde,0x2f,0x4d,0xe9,0x79,0xed,0x80,0xb4,0xc1,0x67,0xa7,
-0x70,0x96,0x5e,0x5e,0x1a,0xd6,0x60,0x44,0xb6,0xc5,0x0c,0x08,0x7b,0x27,0x96,0x06,
-0xda,0x90,0x21,0x59,0xa2,0xf5,0x02,0x45,0x54,0x7c,0xbc,0x14,0xf3,0x30,0x80,0x36,
-0xa8,0x43,0x6d,0x87,0x8b,0xb7,0x2f,0xef,0x3f,0x34,0xb4,0x7e,0x92,0xfd,0xa1,0x1c,
-0xf0,0x28,0x0d,0xb5,0x4a,0x00,0x48,0x14,0xc6,0x14,0x0c,0xbc,0xfd,0xa1,0x9e,0x5c,
-0x23,0xe7,0x22,0x04,0x90,0xb7,0xf9,0x6d,0x26,0x17,0x00,0xd0,0x2b,0x33,0x63,0x78,
-0xd5,0xa5,0x7c,0x6b,0x8a,0x5a,0x58,0x90,0x54,0x3a,0xb5,0x01,0x72,0x20,0xc8,0x51,
-0x7a,0xf2,0xbc,0x8f,0x55,0xeb,0x8c,0xe9,0x8f,0x6c,0x64,0x40,0x05,0x8e,0xe0,0x6c,
-0xea,0x58,0x34,0x35,0x42,0x1b,0xf6,0xf6,0xf7,0xf2,0xb0,0x6f,0x59,0x93,0x14,0x5e,
-0x24,0x91,0xf7,0x11,0x72,0xa6,0x71,0x12,0xe9,0x04,0x15,0x0e,0xe4,0x07,0x20,0x75,
-0x32,0x01,0xe9,0x22,0xfe,0xde,0x90,0x02,0x64,0x84,0xcb,0xc0,0x13,0x8a,0x0a,0xdf,
-0x8d,0x43,0x23,0x1c,0xef,0xb6,0x07,0x6b,0xc0,0x40,0xf7,0xe7,0x49,0x54,0x32,0xde,
-0xe1,0x43,0xfb,0xe0,0xd5,0xf2,0x88,0xae,0xd8,0x6e,0x25,0x78,0xda,0xf6,0xab,0x57,
-0xc1,0x1a,0xdb,0xde,0xda,0xf4,0xb5,0xb5,0x62,0xaa,0x35,0x55,0xf4,0xd5,0xcd,0xb4,
-0x55,0xaf,0x7a,0xba,0xac,0xaf,0x1a,0xde,0x95,0xab,0xc5,0x6b,0x63,0x63,0x6b,0xaf,
-0xa8,0xf8,0x4b,0xdd,0xdb,0xa7,0x99,0xc9,0xd5,0xd1,0xda,0xfb,0x8b,0xe8,0x5e,0x4d,
-0x10,0x01,0x04,0x45,0x38,0xe9,0x25,0x42,0x96,0x07,0x2c,0x84,0x14,0xa0,0xb0,0xc2,
-0x7d,0xc1,0x2f,0xd3,0x74,0x53,0x4c,0xb5,0x0c,0x91,0x8d,0x59,0x9c,0x50,0x97,0x4c,
-0x41,0x2c,0x0b,0x24,0x82,0xcd,0xb0,0x92,0x84,0xc8,0xc9,0xef,0xb7,0x61,0x1e,0x17,
-0xb0,0x1e,0xd8,0x41,0x60,0x45,0xd0,0x71,0x2a,0xf4,0xec,0xee,0x00,0xab,0x65,0x76,
-0xc8,0xef,0xdf,0xbe,0xaf,0x51,0xfb,0x8c,0xe9,0xc9,0x55,0xd4,0xe7,0x04,0xd4,0xaa,
-0xea,0xf3,0x72,0x04,0xb5,0x64,0xf1,0x4a,0xea,0xb0,0x83,0xe2,0xef,0xdc,0xfb,0x69,
-0x1d,0x5e,0x97,0x0d,0x5f,0xa2,0x01,0x21,0x21,0x74,0x06,0xd0,0x07,0x0d,0x17,0x39,
-0x4b,0x25,0x84,0x6d,0x0b,0xd0,0xd0,0x31,0x9d,0x6b,0x06,0x38,0x83,0xc0,0xba,0x3b,
-0xad,0x86,0xc4,0x8d,0x02,0x00,0xef,0x83,0x86,0xda,0xac,0xed,0xee,0x14,0x35,0xef,
-0x8c,0xdd,0xa6,0xd6,0xea,0x11,0xab,0x14,0x12,0x90,0x68,0x7c,0xf2,0x24,0x63,0xb0,
-0x9e,0x50,0xdf,0x3d,0x41,0xc5,0x36,0x47,0x0d,0x10,0xc4,0x88,0x60,0xde,0xb3,0xb1,
-0x61,0xad,0x24,0xfd,0x7c,0x68,0x80,0x2c,0xd6,0xc0,0xda,0x69,0x4b,0x3b,0x61,0xde,
-0x88,0x3d,0xfa,0xf4,0xe6,0xd1,0x32,0x1e,0x9f,0xc1,0x8a,0xc7,0x06,0xde,0x64,0x06,
-0x94,0xb5,0xbd,0xb9,0x4a,0x35,0x39,0x32,0x36,0x00,0x38,0xe2,0x02,0x70,0x88,0x05,
-0x7b,0x3f,0x67,0xad,0x3b,0x50,0x0e,0x01,0x8c,0xa2,0x2e,0x1a,0x4c,0x67,0xd0,0x78,
-0xd2,0xd1,0xaf,0x47,0x8a,0x4e,0xd6,0x9b,0x90,0x10,0x98,0x79,0x9f,0xe4,0x75,0x82,
-0xdb,0x1b,0x81,0xf0,0x9d,0x3c,0xb2,0x3b,0x5e,0x1e,0x66,0x58,0x60,0xd9,0xc2,0x9e,
-0x77,0x34,0xf5,0x1d,0x35,0xa4,0x44,0x1a,0x2b,0x1a,0x44,0x4f,0x09,0xb3,0x7a,0xa1,
-0x72,0x04,0x93,0x04,0xd6,0xfd,0x1a,0x6b,0x07,0x04,0x4a,0x4a,0x50,0x73,0x34,0xa4,
-0x86,0xc0,0x52,0x0d,0x99,0x51,0x4e,0xa9,0x0e,0xdb,0x0b,0xe6,0x9e,0x2b,0x94,0x79,
-0x21,0xb4,0xa2,0x6c,0x6d,0x0f,0x55,0xb1,0xb0,0xdc,0x3e,0xc6,0x37,0x2f,0x66,0x38,
-0x67,0xcc,0xea,0x66,0x0a,0xd4,0x21,0x75,0xa4,0x71,0x06,0xac,0x95,0xdb,0x1b,0x6c,
-0x19,0x1c,0x65,0x91,0x66,0xbc,0xee,0x78,0xeb,0x38,0x70,0x10,0x17,0x5c,0x78,0xb9,
-0x1f,0x45,0x80,0xfb,0xbe,0x08,0x77,0x5d,0x19,0x10,0x48,0xf1,0xf1,0x18,0xe8,0x76,
-0xe4,0xef,0xa9,0x6e,0xd0,0x93,0x06,0x1d,0x0c,0x96,0x89,0x69,0xb4,0x62,0xa8,0x5a,
-0xc8,0x8c,0x7b,0xf7,0xec,0xa0,0xf5,0xee,0x3f,0x17,0xc4,0xb2,0xcd,0xdf,0xb5,0x43,
-0xf9,0xe6,0x8e,0x53,0x74,0x70,0xdf,0x70,0x13,0x3d,0x12,0x21,0x4b,0x52,0x3d,0x03,
-0xab,0x4c,0x32,0x35,0xb4,0x3b,0x38,0xa1,0xb0,0xed,0x89,0xb2,0x34,0x91,0x0d,0x17,
-0xf2,0xd7,0x48,0x23,0x4e,0x67,0xeb,0xb5,0x71,0xb5,0xb2,0x36,0x6f,0xa6,0xe2,0x18,
-0xd9,0x0d,0x5a,0x48,0x73,0xa6,0xdd,0xde,0x5d,0xa7,0xe5,0xb4,0x77,0x15,0x70,0x94,
-0x22,0xdf,0x3f,0x51,0x1b,0xa2,0x6c,0x20,0x39,0x0e,0x90,0xe5,0x6a,0xd7,0x42,0xd4,
-0x10,0xe7,0x20,0x81,0xf7,0x01,0xae,0xff,0xa1,0xc7,0xb6,0xec,0x0c,0x62,0xc1,0xdc,
-0x9c,0x10,0xc6,0x36,0x34,0xc6,0xce,0x04,0x0c,0xdb,0xe7,0x3d,0x67,0x0a,0xe4,0x76,
-0xdb,0x9e,0x9a,0xa6,0xc6,0xf9,0x75,0xbf,0x11,0x1d,0xb0,0x80,0xf5,0x18,0xc3,0x54,
-0x90,0xf0,0x8e,0xca,0x28,0xb4,0x75,0xc7,0x1a,0xbf,0xd3,0x9d,0x10,0xad,0x49,0x71,
-0x2c,0xd7,0x59,0x91,0xe5,0xb6,0x22,0x0e,0x0f,0x2a,0x52,0xdc,0x30,0x20,0x8e,0xc4,
-0x05,0xda,0xdf,0x42,0x31,0x95,0x9a,0x04,0xbf,0xa4,0x3b,0x97,0x26,0x4e,0x0b,0x0a,
-0x05,0x04,0x6c,0x12,0x44,0x0a,0x59,0xd6,0x59,0x0c,0x1e,0x35,0x85,0xc1,0xcc,0xc9,
-0x85,0x1c,0x5e,0x09,0xce,0x5b,0x24,0x3a,0x0c,0x2c,0x1b,0x99,0x99,0x47,0x44,0x6d,
-0x92,0x0b,0x0a,0x52,0x56,0x5a,0xc1,0x66,0x16,0x20,0x88,0x1a,0x99,0x6c,0x73,0x01,
-0x23,0x40,0xd8,0xa5,0x58,0x82,0x3d,0x90,0x6a,0xd8,0xdb,0x16,0x02,0x06,0x58,0xb0,
-0x21,0x24,0x2a,0xc1,0x50,0x94,0xb5,0x86,0x53,0x25,0xa6,0x02,0x69,0xc5,0x58,0x09,
-0xa8,0x60,0x9a,0x68,0xb3,0x02,0x09,0x4e,0x2a,0x0a,0xfa,0x9b,0x34,0x16,0x88,0x56,
-0x85,0xcb,0x01,0x7b,0xc6,0x85,0xf0,0x95,0x81,0xa4,0x61,0x40,0x54,0x92,0x39,0x92,
-0x02,0x06,0x54,0x8c,0xaa,0x98,0x21,0x80,0xd3,0xa9,0x88,0x17,0x04,0x81,0x21,0x25,
-0x11,0x08,0x8e,0x9e,0x20,0x55,0x6a,0x52,0xdc,0xa8,0x2d,0x66,0x43,0x2a,0x7e,0x4b,
-0xe2,0x3d,0x6b,0x44,0xbf,0x47,0x5e,0x54,0x08,0xa6,0x7f,0xf9,0xd2,0x2f,0x32,0x29,
-0x98,0x05,0xee,0x6f,0x3e,0x23,0x5b,0xc1,0xf0,0x30,0xd0,0x40,0x23,0xd5,0x8d,0x37,
-0x87,0x26,0x80,0xda,0x11,0x43,0xaf,0xad,0xe8,0xef,0xf0,0xc6,0xa3,0xae,0x0d,0x56,
-0x24,0xb6,0x9c,0x70,0xbf,0x2d,0xd0,0x82,0x30,0xf2,0xde,0x60,0xc3,0x00,0x93,0x82,
-0x0e,0x79,0xe8,0x91,0xa2,0xc1,0x7a,0x1d,0x02,0x12,0x42,0x81,0x0a,0xb6,0xc6,0x87,
-0x19,0xb0,0x8c,0x30,0x06,0x0f,0x8b,0xbd,0x69,0x40,0x56,0x1d,0xe8,0x73,0xae,0x91,
-0xaf,0x03,0x2c,0xf2,0xa5,0x3d,0x97,0x3f,0x98,0xc6,0x84,0x66,0xc6,0x66,0xc8,0x49,
-0xb6,0x6b,0x88,0x2c,0xc5,0xce,0x4d,0xb8,0x3d,0xeb,0x7c,0xd5,0x31,0x5f,0x8e,0x12,
-0xcb,0x06,0xc6,0xc5,0xe3,0x96,0x8d,0x02,0xfa,0xe2,0x3b,0x3b,0xc2,0xb3,0x5d,0x69,
-0x8b,0x64,0xe5,0x77,0x50,0xbe,0x76,0x45,0x53,0xd8,0xf5,0xcd,0xc4,0xac,0x07,0x5f,
-0x4a,0x10,0x71,0x46,0xda,0x75,0xce,0x6a,0x6a,0x1a,0x4d,0xa8,0x20,0xe8,0xa1,0x7c,
-0x6a,0x84,0xf7,0x42,0x43,0x90,0xdf,0x5d,0xd8,0xae,0x77,0x51,0x03,0xc1,0xf6,0xd9,
-0x83,0x27,0x75,0xd6,0x15,0xd1,0x90,0x66,0x2e,0xbd,0x69,0x58,0x52,0xe1,0x60,0xbc,
-0x52,0x8a,0xc1,0x13,0xab,0x50,0x22,0x88,0x7d,0x85,0x06,0x3c,0xb3,0x10,0x39,0xf6,
-0x85,0xb2,0x68,0xe6,0xa4,0xdb,0x73,0x2b,0xe3,0x24,0x18,0xfa,0x0c,0x70,0x91,0x04,
-0xb1,0x36,0x27,0xfa,0x85,0xfa,0xfa,0xdd,0x3d,0x3c,0xbd,0x6b,0x92,0x32,0xc1,0xbd,
-0xf7,0xcb,0x95,0x40,0xce,0x93,0xb6,0xf1,0xe4,0xac,0x00,0xf3,0x63,0xee,0xf9,0x39,
-0x21,0xe8,0x6d,0x3c,0x0c,0xd4,0x1b,0x06,0xc4,0x7a,0x64,0x36,0x4a,0x47,0x68,0x45,
-0xbb,0xcb,0xc5,0xc3,0xa6,0x6b,0xca,0x81,0x1d,0x21,0xb6,0x1d,0x36,0xe6,0xee,0xce,
-0x75,0x67,0x93,0x1a,0x69,0x17,0x6b,0x48,0x76,0x8f,0x3a,0x32,0x48,0x25,0x32,0xbe,
-0x12,0x63,0x27,0xdb,0xcb,0x8d,0x73,0xaf,0x01,0xc4,0x00,0x9d,0xbc,0xdc,0xce,0x45,
-0x28,0x7d,0xd0,0x68,0x95,0x0d,0xd4,0x2a,0xe2,0x91,0x26,0xe4,0x3a,0x74,0x05,0x87,
-0x57,0x3d,0x6d,0xf4,0xd0,0xad,0xd9,0x12,0x2c,0xeb,0x17,0x42,0x7c,0x3d,0x34,0x46,
-0xce,0xcd,0xca,0x94,0xea,0x68,0x9b,0xf1,0x53,0x7a,0x96,0x97,0xe4,0x88,0xf7,0xb4,
-0x4e,0xd2,0xbf,0x03,0x97,0x41,0x02,0xd4,0x67,0x79,0x0c,0xa7,0x6b,0x90,0xaf,0xac,
-0x47,0xaa,0x4b,0xe7,0xd4,0x4b,0xdd,0x5a,0x07,0x7d,0x3f,0x07,0x61,0x61,0x7d,0xb2,
-0x18,0x59,0xad,0x0b,0xb4,0x5e,0xca,0x85,0xe8,0xa9,0x6c,0x97,0xcb,0x85,0x00,0x00,
-0x18,0x62,0x04,0x10,0x75,0xa5,0xac,0x03,0x99,0x84,0x6c,0x94,0x76,0x19,0xdf,0x0d,
-0x99,0x77,0xd0,0xcd,0x8e,0xa0,0x82,0x51,0x0e,0x35,0xa2,0xe2,0x9a,0x96,0x77,0x61,
-0x61,0xa8,0x36,0xe3,0x35,0x16,0x44,0x9d,0xbf,0x81,0x31,0x6e,0x80,0x82,0x1e,0x51,
-0x0f,0x7a,0x28,0x81,0x93,0xb3,0x0d,0xda,0xa6,0xdb,0x67,0x05,0x10,0xab,0x56,0x91,
-0x7b,0xa8,0x22,0xa5,0x48,0x86,0xc1,0xa6,0xb7,0xac,0xba,0x08,0xb3,0x4b,0x31,0x74,
-0x46,0x9a,0x79,0xb9,0x33,0x08,0x65,0x05,0x07,0x08,0x77,0xaa,0x98,0x48,0xca,0x68,
-0x84,0x42,0x48,0x9e,0x39,0x58,0x29,0x20,0xb8,0xbd,0x67,0xcf,0xac,0x68,0xe3,0x22,
-0xdf,0x96,0xfa,0x16,0x12,0x48,0xd1,0xdb,0x79,0xbe,0x65,0xb2,0x57,0x5c,0xd2,0xf5,
-0xbc,0x19,0x8a,0x70,0xae,0xd4,0xbc,0x15,0xdc,0xea,0x4b,0x88,0x2b,0x3d,0xd2,0xb1,
-0x15,0xbf,0x93,0x07,0x0c,0x31,0x49,0xbe,0xf3,0x1d,0xaf,0x35,0x44,0x61,0x94,0xb5,
-0x90,0xf1,0xa6,0x15,0x6a,0xa5,0x81,0x53,0xbd,0x37,0x02,0xbd,0x82,0x0f,0x33,0x5b,
-0x75,0x60,0xa0,0x2c,0xe3,0x56,0xb9,0x5e,0x74,0x6c,0xee,0x07,0x83,0x44,0x34,0x6e,
-0x6a,0xc7,0x50,0xa5,0x6c,0x9c,0x2b,0x71,0x30,0x79,0x6f,0x2b,0x59,0x84,0x06,0xd9,
-0xbd,0xdd,0x65,0x16,0x66,0x8c,0x8d,0x21,0x47,0x4f,0x25,0xd9,0x57,0x6d,0x9e,0xe0,
-0xa0,0x12,0xa3,0x79,0xc6,0x34,0xe7,0x3b,0xba,0x74,0x38,0x1d,0x73,0xb8,0xe7,0x7c,
-0x7b,0x51,0xbb,0xb7,0x66,0xc6,0xbc,0x6c,0x5d,0x3f,0x22,0x66,0x3a,0x1b,0xd8,0x98,
-0x21,0x39,0x34,0x6b,0x2f,0x08,0x26,0x11,0xdc,0x21,0xb2,0x0b,0x0e,0x16,0x35,0x90,
-0xb3,0xed,0x96,0xd2,0xe1,0x4d,0x65,0xb4,0x34,0x6c,0xc1,0x66,0x5b,0xee,0x4f,0x33,
-0x94,0x89,0x83,0xc6,0xbb,0xce,0x27,0x3a,0x41,0x86,0xae,0x72,0x16,0x30,0x52,0xb4,
-0xa8,0xc3,0xfd,0x9d,0x6c,0x8e,0x8e,0x73,0x73,0x03,0x71,0xf1,0xf5,0x73,0xb4,0xf0,
-0x22,0x20,0x6f,0x31,0xbb,0x7a,0xd0,0x20,0xae,0x47,0x7f,0x24,0x0f,0x00,0x11,0xbc,
-0x20,0x1f,0x49,0x20,0x05,0x2d,0xc8,0x9c,0x87,0x2a,0x10,0x2a,0xc7,0x48,0xee,0x6e,
-0x12,0x07,0xab,0xac,0xcc,0xa8,0xe3,0xb6,0x95,0x77,0xca,0xd7,0xd0,0x1c,0x3b,0xa4,
-0x69,0x6f,0x71,0x0d,0xbf,0xbd,0xe8,0x46,0x31,0x3f,0x5f,0x7e,0x72,0x85,0xcf,0x67,
-0x10,0x74,0x0c,0x1c,0xd2,0x7d,0x1b,0x11,0x35,0x52,0x3d,0x7a,0xcd,0x1a,0x76,0xad,
-0x49,0x6c,0x4d,0xb3,0x8c,0x45,0x29,0x17,0x21,0xf3,0x8b,0x52,0x32,0x14,0x43,0xce,
-0xb3,0xcb,0xd4,0xb8,0xb8,0x9d,0x69,0x0c,0x67,0x3d,0x6b,0x1e,0x68,0xec,0x77,0x34,
-0x31,0x57,0x0c,0x83,0x31,0x74,0x02,0x60,0xc5,0x86,0x8b,0x01,0xa2,0x13,0x33,0x62,
-0xd9,0x86,0xcc,0x41,0x08,0x2b,0x6b,0xb0,0x72,0xe1,0x93,0x31,0x6b,0x5c,0x46,0x9e,
-0x9a,0xdf,0x03,0xa4,0x65,0x99,0xd4,0x6a,0x1b,0x10,0x12,0x6c,0xc2,0x63,0xa6,0x91,
-0x8d,0x61,0x01,0x51,0x58,0x66,0xb8,0x6e,0x01,0xf4,0x43,0xdd,0x88,0xf7,0xb5,0x85,
-0x9b,0x6b,0xae,0x0f,0xaa,0x5b,0x3e,0xd8,0x7e,0xe9,0x2b,0xd9,0xb2,0x4c,0x0d,0xa7,
-0x82,0x2a,0x45,0xf1,0xa4,0x1a,0xf1,0x37,0x61,0xf5,0x10,0x1e,0x7e,0xd7,0x3b,0xee,
-0x07,0xf2,0xdd,0x2d,0x01,0x97,0x4d,0x3b,0xb5,0x10,0xd6,0x4f,0xad,0xa0,0x86,0x01,
-0x16,0x41,0x18,0xad,0xdc,0x35,0xd5,0x9f,0x49,0x81,0xb2,0x07,0x69,0xbf,0x85,0x5a,
-0x20,0x28,0x1a,0x20,0x9d,0xa5,0x48,0x12,0x63,0xb3,0xf6,0x42,0x65,0x78,0xcc,0xe6,
-0x60,0x97,0xb4,0x10,0x19,0x8b,0xa4,0x84,0x09,0xf1,0x96,0xd8,0x48,0x12,0xce,0x9b,
-0x43,0x3b,0x40,0x7e,0xb2,0x98,0x46,0x79,0x0f,0xa1,0x53,0x60,0x9c,0x42,0x7b,0xa4,
-0xe0,0x97,0xc4,0x18,0x41,0x47,0x78,0x10,0x67,0x8b,0xc3,0xc4,0x9b,0x1a,0xd2,0x18,
-0xc5,0xc0,0xd2,0xcd,0x65,0x93,0xb8,0xa7,0x06,0x33,0x10,0xea,0x45,0x54,0x5c,0xb7,
-0xca,0x9f,0xb3,0x89,0xe4,0x4e,0x78,0xe7,0x8b,0x09,0x66,0x7c,0x02,0x5d,0x35,0xa5,
-0x69,0xf9,0x98,0x3f,0x81,0x59,0x21,0xdf,0x4d,0x5b,0xf9,0x7e,0x44,0xfa,0x68,0xf9,
-0x84,0x83,0x83,0x02,0xb5,0xb4,0xa4,0xcd,0x36,0x51,0x20,0xbf,0x57,0x0c,0x91,0xc2,
-0xe8,0x4a,0x0e,0x1f,0xeb,0xa1,0x65,0xcd,0xc3,0x6b,0xc7,0xdb,0xcf,0x3f,0x5c,0x08,
-0xd5,0x08,0xb6,0x06,0x7e,0x30,0x20,0x40,0xa6,0x08,0xed,0xc8,0x5a,0x27,0x5a,0xc3,
-0x08,0x18,0x29,0xc8,0x82,0x17,0x7d,0x2c,0x69,0xf1,0x6c,0xb6,0x68,0x3d,0x2d,0x8d,
-0xb4,0x1c,0x08,0xf7,0x70,0xdb,0x06,0xc9,0xc1,0x87,0x2a,0x5c,0x76,0x75,0x00,0x43,
-0xfb,0x5b,0x97,0x37,0x81,0x6d,0x07,0x1a,0x3a,0x42,0xfa,0x16,0x18,0xa0,0xa5,0xe0,
-0xa5,0x2f,0x12,0xc0,0x85,0x29,0x99,0xaa,0x07,0x3b,0x3c,0x33,0x01,0x32,0xc8,0xf6,
-0xf1,0xb0,0x7a,0x21,0x5a,0x1d,0xb6,0xad,0xd0,0xc8,0xc9,0xc8,0x6c,0x26,0x6a,0x62,
-0xe2,0xc9,0x05,0x60,0xd9,0x60,0x24,0xb2,0x4a,0x0a,0x7a,0x53,0x68,0x53,0xcc,0x50,
-0x72,0xc8,0x46,0xff,0x88,0x9a,0x9c,0xdb,0x4e,0xa0,0x96,0x3a,0x8b,0xa2,0xce,0x85,
-0x29,0xb8,0x80,0xc1,0x11,0x1b,0x24,0x5e,0xac,0xd4,0x1a,0x2c,0x2e,0x0f,0x12,0xa4,
-0xad,0x42,0xc5,0xa2,0xaa,0xa7,0x4a,0x07,0x12,0xee,0x56,0xdd,0x9a,0xb1,0xe6,0x2e,
-0x59,0x8b,0x0a,0x64,0x11,0x0c,0xd8,0x58,0xc9,0x5d,0xe9,0xc7,0xa2,0x31,0xb8,0xfa,
-0xa1,0x3f,0x61,0x20,0x4c,0x82,0xec,0xe5,0x09,0xb0,0x94,0xf4,0x1e,0xde,0x33,0x23,
-0xbd,0xb2,0x34,0xb5,0x09,0xda,0x3e,0x4c,0xc0,0x8f,0x01,0x1f,0xbc,0x0b,0xd5,0xb3,
-0xcd,0xdb,0x6d,0xe8,0xb9,0xb9,0x92,0x44,0x9e,0xf1,0x59,0xdf,0x31,0x8b,0x3c,0x41,
-0x6c,0x94,0xa2,0xaa,0x41,0x8d,0x49,0x46,0x16,0xd1,0x0e,0x45,0x53,0xb8,0x26,0x3b,
-0xdb,0xb1,0x8c,0x1c,0x1a,0x03,0x0c,0x54,0x9c,0x10,0xae,0x5c,0x3f,0x93,0x57,0x60,
-0x65,0x22,0x73,0xe1,0xbc,0x6a,0xf6,0x22,0x72,0x26,0x42,0xe7,0x2a,0x8a,0x31,0x4d,
-0x19,0xf5,0xa0,0xaa,0xb7,0x8d,0x2b,0xaf,0xca,0x14,0xe9,0x8b,0x2f,0x44,0x71,0xed,
-0x6d,0x8c,0x8e,0x51,0xa2,0x1f,0xcc,0x05,0x0f,0x22,0x1a,0x17,0x80,0xef,0x22,0x26,
-0x49,0x42,0xef,0x2a,0xac,0xc5,0x92,0x26,0x0c,0x48,0xd1,0x05,0x4c,0x9f,0x73,0x35,
-0xad,0x96,0x46,0xc7,0x39,0x4c,0xc0,0x24,0xd1,0x42,0x0e,0x57,0x4c,0xe6,0xf0,0xe1,
-0x14,0x7c,0xba,0x07,0xb2,0x6b,0x7e,0x2c,0x7c,0xc8,0x86,0x63,0xdc,0xa3,0x57,0x4e,
-0xd1,0xbf,0x46,0x28,0x44,0xf6,0x7f,0xa7,0x98,0x9c,0x12,0x86,0xf5,0xdf,0xad,0x75,
-0xe6,0xc6,0x73,0xd3,0x8f,0x2a,0xad,0x36,0xda,0xc3,0x59,0x1e,0x8e,0xee,0x81,0x00,
-0x92,0x59,0x80,0x81,0x7a,0x99,0x9b,0xcc,0x43,0x24,0x48,0x98,0x9c,0x40,0x53,0x3e,
-0xea,0x88,0xaa,0x2f,0xe8,0x82,0xcc,0xa6,0xd9,0x8e,0x1d,0x10,0x9d,0x79,0x3f,0x1c,
-0xc6,0x34,0x14,0x96,0xf5,0x77,0xbc,0x93,0x49,0x51,0xe7,0x70,0xee,0x4d,0x30,0x28,
-0x36,0x15,0x6d,0x57,0x15,0x35,0xab,0x90,0x25,0x83,0x65,0x12,0xc0,0x04,0xd0,0x7c,
-0x5a,0xd0,0x9d,0x60,0x28,0xa2,0x02,0x08,0xa0,0xda,0x1d,0x38,0x6c,0x57,0x88,0x43,
-0x4c,0x4d,0xb0,0x6c,0x2d,0x55,0xb5,0xb9,0xab,0xac,0x35,0x43,0x18,0xc0,0x59,0x2e,
-0x09,0x66,0x56,0xb0,0x1c,0x80,0xe4,0x78,0xa0,0x24,0x42,0x4a,0xe2,0xfc,0xfb,0x8f,
-0x27,0x18,0x04,0x76,0x59,0x8c,0x1e,0xaf,0x64,0x0c,0xb6,0x38,0xd0,0xbd,0x74,0xcd,
-0xb1,0xdb,0xc9,0x51,0xf8,0x82,0x36,0xea,0x07,0x36,0xed,0xd2,0x1f,0x33,0xb3,0xe1,
-0x6e,0x74,0x48,0xbd,0x74,0xe2,0xad,0x08,0x6d,0xb9,0x59,0xe2,0xf9,0x29,0x29,0x5c,
-0x82,0x00,0x6b,0xaa,0x91,0x58,0x45,0x04,0x97,0xbc,0xaa,0x8a,0xc1,0x88,0xe6,0x60,
-0xe0,0x82,0xc0,0x83,0xa4,0xa7,0xb2,0xb8,0x45,0x98,0x9f,0x0e,0x2d,0xd1,0x82,0x42,
-0xf9,0x41,0xc0,0x21,0x81,0x82,0x14,0x25,0xc2,0x56,0x82,0x21,0x88,0xf0,0x66,0x60,
-0x1a,0x50,0x72,0x16,0xf5,0x1d,0x88,0x45,0xb9,0x86,0x68,0x1b,0x56,0x71,0xa5,0x27,
-0xad,0xf2,0xa0,0x01,0x73,0x29,0x63,0xc2,0x5b,0xe3,0x5d,0x1a,0x7c,0x49,0x20,0x83,
-0xa6,0xce,0xb6,0x47,0x0e,0x48,0x23,0xa2,0xc2,0x8c,0x18,0xee,0x46,0x1d,0x03,0x94,
-0x14,0xd4,0xc3,0xc3,0x95,0x50,0x6d,0x38,0x81,0x45,0xc0,0x94,0x3e,0x7e,0x51,0x95,
-0xe0,0x5d,0x44,0x0c,0x91,0x87,0xe5,0xe8,0xf4,0x94,0xa2,0xf0,0x5d,0xe7,0x8a,0xf4,
-0x0c,0x1c,0x14,0x08,0xca,0x29,0x91,0xbb,0xd4,0xc9,0x33,0x29,0x31,0x74,0x8b,0x12,
-0x41,0x83,0xe0,0xd1,0xb8,0x70,0x25,0x86,0xde,0xd0,0xa1,0xe0,0xa3,0xbd,0x2e,0x77,
-0xe6,0x23,0x24,0x59,0x04,0xba,0x41,0xcb,0x49,0x2f,0x0f,0xf7,0xc8,0xea,0x1a,0x79,
-0xf1,0xb5,0x49,0x4c,0x98,0x81,0xab,0x7e,0x38,0x51,0x9a,0xe2,0xe7,0x1b,0xc3,0xa5,
-0x1a,0x8c,0xda,0x47,0x11,0xdf,0x7a,0xd5,0x0d,0x62,0x66,0x17,0x14,0x13,0x04,0x72,
-0x5d,0x3a,0x9c,0x5e,0xb6,0x58,0x21,0x68,0x19,0x74,0x18,0xa4,0x63,0x15,0x28,0xb0,
-0xc2,0xd3,0x6b,0xa7,0x54,0xd1,0xc2,0x37,0xa0,0xca,0xc4,0x50,0xf1,0xa4,0xec,0xc0,
-0x92,0x0c,0xa6,0x40,0x7a,0x86,0xc3,0x98,0xe5,0xdd,0xc2,0x25,0xb3,0xf5,0xf6,0xad,
-0xa6,0xad,0x26,0xd3,0x10,0x77,0xb2,0xa1,0xc5,0x96,0x0c,0x2a,0x12,0x51,0xdd,0x39,
-0x16,0x20,0x99,0xc1,0x42,0x82,0x41,0x92,0x8e,0xd2,0x11,0x1b,0x96,0x65,0xb2,0xd6,
-0xc8,0x60,0xc8,0x73,0xbf,0x7d,0xa2,0x27,0x62,0x02,0x67,0x51,0xd4,0x07,0xca,0x08,
-0x71,0xd9,0x54,0x51,0x2e,0x71,0x24,0x89,0x34,0xc4,0x13,0xcc,0x84,0x5a,0x28,0x98,
-0x20,0x18,0x4d,0xa5,0xe9,0x54,0x73,0xa6,0x25,0x1d,0x82,0x04,0xb1,0x4a,0xd0,0x69,
-0x6b,0xd5,0x5d,0xb7,0x61,0xbe,0xf6,0x87,0xa7,0xe5,0xbb,0xb7,0xc4,0x09,0x08,0x09,
-0xe1,0x88,0xf8,0x04,0x84,0x06,0x19,0x30,0x6a,0x2f,0x70,0x48,0x40,0x47,0x6d,0xe0,
-0x90,0x80,0x93,0x16,0x5d,0xd3,0x02,0x42,0x03,0x3b,0xbc,0xe0,0x90,0x80,0xc2,0x11,
-0x02,0x42,0x03,0x90,0x12,0x10,0x1c,0x54,0xe6,0x77,0xda,0x24,0x20,0x1f,0xfc,0x5d,
-0xc9,0x14,0xe1,0x42,0x40,0x50,0x0f,0xfe,0xec,
+0x1a,0x9c,0x00,0x3d,0x80,0x12,0x74,0x2f,0xad,0xf7,0x50,0xd6,0xf7,0xc0,0x03,0x79,
+0xef,0xb6,0xc6,0x7d,0xcd,0xcc,0x72,0x2e,0xce,0xef,0x9c,0x7d,0xd8,0x0d,0x51,0x6f,
+0x70,0xbb,0x05,0x01,0xa3,0xb1,0xdc,0x19,0xf3,0x3e,0x9d,0xef,0x6a,0xea,0xfa,0x67,
+0xbb,0x8e,0x8e,0xf3,0x95,0xd5,0x25,0xad,0xb0,0xe1,0xc7,0x81,0xa9,0xe8,0x10,0x04,
+0x11,0xa1,0x24,0x65,0x34,0x3d,0x46,0x9e,0x93,0xf5,0x26,0x9e,0xa0,0x03,0x40,0x34,
+0xc8,0x10,0x84,0x32,0x54,0xdb,0x54,0xf4,0x6a,0x80,0x00,0x0d,0x06,0x9a,0x06,0x80,
+0x60,0x91,0x4d,0x92,0x62,0x23,0x54,0xfd,0x4c,0x89,0xa6,0x80,0x00,0x00,0xd0,0x34,
+0x02,0x4f,0x54,0xa4,0xa9,0x06,0x47,0xa8,0xd3,0x26,0x4d,0x0d,0x00,0xd0,0x06,0x86,
+0x8d,0x31,0x00,0x11,0x28,0x99,0x13,0x49,0x8d,0x43,0xd4,0xa7,0x94,0x1a,0x68,0x7a,
+0x4c,0x4f,0x49,0xe9,0x3d,0x34,0xd2,0x6f,0x49,0x92,0x7a,0x82,0x42,0x24,0xd0,0x4c,
+0x81,0x04,0x2a,0x68,0x00,0x00,0x00,0x06,0x83,0xff,0x7d,0x8f,0xf7,0x6e,0xa1,0x72,
+0xba,0x6f,0x69,0xd7,0x75,0x73,0x46,0x83,0x1b,0x44,0x54,0x6b,0x12,0x48,0x30,0xa6,
+0x51,0x51,0x6c,0x6d,0xcd,0x6f,0x1a,0xf3,0x2e,0x56,0xef,0xb9,0xdb,0x76,0x6c,0x84,
+0x24,0x56,0x31,0x44,0x16,0x26,0x49,0x4f,0x5d,0x3a,0xe4,0x8a,0x29,0x98,0xb7,0xae,
+0xe4,0x9d,0xd5,0xb9,0xb6,0x34,0x6c,0xcd,0x46,0xad,0xe3,0x72,0xda,0x29,0xe7,0x6b,
+0x83,0xce,0xe4,0x1a,0xa4,0xe5,0xcc,0x6d,0x15,0xb9,0x5c,0xc7,0x39,0xcb,0x96,0x20,
+0xd7,0x23,0xbc,0xee,0x1a,0x0a,0x09,0x61,0x43,0xce,0xb8,0x8a,0x61,0x0c,0x22,0x97,
+0x65,0xd9,0x79,0xd5,0xc9,0x28,0xd1,0x7a,0x7b,0x1b,0xd2,0xf4,0xd8,0xb6,0x52,0xd0,
+0x13,0x2a,0x49,0x78,0xba,0x44,0x88,0x30,0x24,0x13,0x5e,0x2b,0xab,0xd9,0xe7,0x97,
+0x8a,0x5e,0xce,0xbe,0xb7,0x9d,0x91,0x82,0x40,0xa4,0xc1,0x21,0x20,0x63,0x23,0x5f,
+0x5f,0xae,0x02,0x8e,0x6e,0x64,0xd3,0x12,0x86,0x6a,0xa2,0x06,0xbd,0x7f,0xb7,0x6f,
+0xba,0xbe,0xff,0x5f,0xf5,0x4f,0x87,0xae,0x9e,0xda,0x53,0xdb,0x7e,0xcc,0xb0,0xbd,
+0xca,0xcc,0x69,0x7b,0x76,0xf5,0xdd,0xb7,0xb3,0x0f,0x72,0x7d,0xee,0x1e,0xfa,0x05,
+0xdd,0xc2,0xef,0x4d,0x5f,0xe9,0x74,0xb4,0xe6,0x8e,0x52,0xc9,0x51,0x75,0xfb,0xe9,
+0xaf,0x49,0x9a,0xa4,0x1a,0x2c,0x71,0xfb,0x84,0xe1,0x37,0x9f,0xcf,0x7f,0x7e,0x29,
+0xbc,0x65,0x94,0x73,0xdf,0xdf,0xb3,0x6e,0x3b,0x8f,0xb9,0xbb,0xfe,0x2d,0x71,0xf8,
+0xe4,0x57,0xbe,0xd7,0x5e,0xaf,0xe9,0xd9,0x48,0xdf,0xcd,0xc7,0xab,0xad,0xcc,0x2d,
+0x3e,0xe4,0x1d,0x5a,0xfe,0xd7,0xd7,0x08,0x2c,0x64,0xc7,0x0b,0x5c,0x1a,0xf8,0xa3,
+0x4e,0x08,0x81,0xcc,0x7d,0x9b,0xac,0x5a,0x92,0xe3,0xe1,0x68,0xe7,0x68,0x3f,0x66,
+0xc8,0xda,0xb5,0x10,0xa0,0x44,0x42,0x3c,0x53,0x98,0xcf,0xd2,0xb1,0x4b,0x55,0x22,
+0xb6,0xce,0x9a,0xeb,0x1a,0xab,0xa9,0x1d,0x1e,0xe7,0xa3,0x2f,0xd4,0x7a,0xa4,0xd6,
+0x89,0x8b,0x61,0x8b,0xb3,0x84,0xd3,0x91,0x95,0x48,0x9c,0x31,0x6a,0x3c,0xe7,0x18,
+0x7d,0x4f,0xbd,0xe9,0x36,0x5b,0x32,0xab,0x0b,0x07,0x98,0xec,0xd0,0x7c,0xea,0x70,
+0xf5,0xed,0x6f,0x2d,0x78,0x1b,0x5b,0x55,0xbd,0x44,0xfe,0x13,0x8e,0xed,0x7c,0x4d,
+0x7e,0x55,0xdf,0x76,0xda,0x79,0x14,0xc4,0xe1,0xe9,0x05,0x46,0x23,0x64,0xa0,0x3f,
+0x0e,0xf7,0x57,0xf0,0x56,0x83,0x25,0x6b,0x57,0x71,0x38,0x45,0xda,0xfa,0x6d,0x7c,
+0x63,0x36,0xb5,0xb6,0xb5,0x26,0xb3,0x19,0x93,0x7a,0xcd,0x37,0xcd,0x39,0xca,0xe7,
+0x17,0x37,0x15,0x72,0x1b,0x3c,0x62,0x70,0x3a,0x4e,0x82,0xf8,0x3a,0x3d,0x9d,0x07,
+0xdb,0x8e,0xd0,0xf9,0xe7,0x8e,0x30,0xf6,0xe1,0xd3,0xd3,0x20,0xa0,0x3e,0x73,0x87,
+0xa6,0x7c,0xac,0xfe,0xc3,0xe9,0xd0,0xf6,0x48,0xf1,0xda,0xbb,0x70,0x45,0xde,0x26,
+0x16,0x95,0xd1,0x6e,0xa7,0xf1,0xaf,0x67,0x0c,0xf5,0x4e,0x91,0xa8,0x89,0x35,0x85,
+0xce,0x1b,0xc8,0xe6,0xe1,0x5b,0xb7,0xeb,0xf3,0x87,0xe7,0x0b,0x6e,0xa6,0xd3,0x97,
+0xf5,0xd3,0x9a,0xd6,0xbf,0x9a,0xa8,0x81,0xd6,0xaa,0x20,0x7b,0x1f,0x0e,0xfa,0x01,
+0xe5,0x2d,0x3b,0x27,0x72,0x87,0x62,0xa8,0x81,0xf5,0xaf,0x8d,0xfe,0xde,0x38,0x71,
+0x96,0xc8,0x1e,0xcf,0x0f,0x0e,0x79,0x84,0xfa,0xf7,0x4f,0x8f,0xe4,0x5b,0xb7,0xab,
+0xf9,0xff,0xbb,0x8b,0x45,0xfe,0x23,0xe5,0xf3,0xa7,0xc8,0xed,0x7d,0x0e,0x3f,0x6f,
+0xbf,0x3f,0xb3,0xb6,0xef,0x00,0x19,0xfd,0x38,0xa3,0xcc,0x7e,0x4f,0x2a,0xbd,0x7f,
+0x0b,0x6c,0x71,0x67,0xc4,0x9d,0x3f,0xbd,0x19,0x08,0xfa,0x5b,0xdf,0x7f,0x71,0x5f,
+0x2d,0x05,0x5d,0x89,0x2f,0xdc,0x36,0xed,0xf8,0x2f,0x1f,0xc1,0x2b,0xef,0xde,0x74,
+0x8b,0xd7,0xea,0xb4,0x8e,0xa2,0x76,0xbf,0xbf,0xd9,0x23,0x11,0xa5,0x26,0xab,0xd7,
+0x38,0x5b,0x65,0xf6,0xf8,0xdc,0x73,0xad,0xaa,0x51,0x7f,0x1d,0x47,0xcf,0x65,0x55,
+0x6a,0xf5,0xb4,0xdf,0xc2,0xd6,0x00,0xc7,0xe8,0x6e,0x0c,0xcb,0xa0,0x82,0x8b,0xdb,
+0x0b,0xbb,0xeb,0x9b,0xbb,0x34,0xe7,0x4d,0x7d,0xb9,0xa3,0xf7,0x88,0xcb,0xf4,0x2e,
+0xe3,0x94,0x60,0xed,0xf9,0x73,0x0d,0x1e,0x31,0x45,0xc5,0x72,0x69,0x86,0xde,0x20,
+0xcc,0x16,0xcd,0x17,0x8b,0x9a,0x2f,0x8e,0x3a,0x9c,0xea,0x82,0x6d,0xaa,0x1f,0xaa,
+0x7d,0x5b,0x15,0xae,0xf1,0xae,0xb8,0xcf,0xe9,0xed,0x43,0xbe,0xee,0xab,0xeb,0xd3,
+0x45,0xc9,0x30,0x81,0x15,0x24,0x48,0x38,0x40,0x9c,0xa2,0x1e,0xfa,0xd7,0x57,0xb2,
+0xc4,0xec,0xb9,0x52,0xd9,0xcb,0x0b,0x3c,0xe3,0x34,0x22,0x8d,0xda,0xfc,0x7a,0xa2,
+0x1b,0xd8,0x89,0xe7,0xe4,0x99,0x7e,0xd9,0xe5,0x7e,0xaf,0x4c,0xdf,0x3f,0x0e,0x37,
+0x2f,0x8e,0x86,0xd6,0x7a,0xb7,0xf7,0xce,0x22,0x0e,0xdd,0x6f,0x8d,0xd9,0x00,0x61,
+0xb4,0x18,0xb6,0xfe,0x51,0xfc,0x21,0x09,0x2b,0x22,0x81,0x99,0x92,0xc8,0x7b,0xdc,
+0x4e,0x97,0x66,0x46,0x0e,0x98,0x41,0xc0,0xd0,0x65,0x32,0x81,0xe9,0x8e,0xed,0x93,
+0x67,0x20,0x4e,0x47,0x3b,0x35,0x82,0x0f,0x3b,0x18,0x30,0xc8,0xeb,0x8e,0x7e,0x69,
+0x1f,0x08,0x36,0x18,0x55,0x61,0xf0,0xd6,0x30,0xaa,0xa2,0x1e,0x18,0x06,0x20,0xc2,
+0x48,0xe0,0x44,0x56,0x2f,0xba,0xcb,0x1d,0x1d,0x2e,0xe8,0x80,0x00,0x78,0xb4,0x86,
+0xd9,0xdb,0xb7,0x32,0x4c,0xc0,0xb0,0xc7,0x3c,0x87,0x45,0xf9,0xc9,0x8e,0x59,0x5d,
+0x10,0x11,0x36,0x87,0x21,0x38,0x00,0x28,0xf8,0x1b,0x99,0xe1,0x8d,0xeb,0x4b,0x47,
+0xb6,0xde,0x69,0xfc,0xa3,0x83,0x5d,0x12,0xe1,0x68,0x28,0xb7,0x0e,0xee,0xda,0x6d,
+0x2f,0x61,0xdb,0x6e,0x6b,0x05,0x5f,0x9a,0x1e,0x2d,0x83,0x03,0x65,0x94,0xd1,0x4f,
+0x41,0x0c,0xc8,0x2b,0xa8,0x58,0x45,0xd5,0x73,0xbd,0x42,0x33,0x98,0xe4,0x79,0xbe,
+0xf4,0xf1,0xc1,0xc3,0x7e,0x99,0xab,0x6d,0xf1,0x91,0x68,0x99,0x5b,0x55,0xf5,0xc7,
+0xc6,0xe2,0x42,0x05,0x90,0xcd,0xc6,0x37,0xbb,0x53,0xb2,0x5c,0xa3,0xb3,0xdf,0x63,
+0x46,0xfb,0xd9,0xd9,0x18,0x5a,0x59,0x4c,0x38,0xfd,0xde,0x7b,0x4f,0xcd,0x4e,0x2d,
+0xee,0x0a,0xda,0x3c,0x9f,0x19,0xd2,0xd6,0x45,0x03,0xe8,0xa3,0x24,0xe1,0x9f,0xc8,
+0xef,0x44,0x9a,0x58,0x30,0x70,0x52,0xb3,0xb0,0xbe,0xd5,0x01,0xa6,0xde,0x42,0xb6,
+0xb8,0x2c,0x6a,0xa3,0x18,0x2e,0x58,0x6d,0xad,0x16,0xca,0x6b,0xbb,0x77,0x1b,0x55,
+0x26,0xb7,0x59,0xf1,0xd5,0x04,0x4d,0xc5,0xe7,0x24,0x1c,0xa8,0x23,0x72,0x12,0xa6,
+0xe6,0x7b,0xa9,0xaa,0x03,0xba,0x8f,0x9c,0x23,0x7d,0x25,0xe4,0xb7,0x0a,0x4f,0x39,
+0xf9,0x2b,0x3d,0x19,0x63,0xb4,0xd2,0x1b,0x05,0xd0,0x35,0x18,0x3b,0xef,0x2b,0xd7,
+0xc9,0xe7,0x52,0xa3,0x1b,0xd3,0xa6,0xda,0x17,0x8d,0x46,0x2a,0x01,0x47,0x7d,0x4b,
+0xdb,0xbb,0xa4,0x70,0x85,0xed,0xae,0x03,0x48,0x60,0xec,0x92,0x2b,0x58,0xe3,0x49,
+0x7a,0xf3,0x4e,0x9e,0x8a,0x4f,0xa0,0x1d,0xa8,0x49,0x24,0x89,0x08,0xbd,0xa3,0xad,
+0xc3,0x23,0x24,0x91,0x29,0x92,0xa6,0x20,0x44,0x63,0x20,0x85,0x25,0x88,0xcc,0xd8,
+0xac,0x28,0x4c,0x94,0xcc,0x91,0x66,0x89,0x98,0x99,0x2a,0x9a,0x52,0xb4,0x5b,0x62,
+0xc5,0x46,0xa5,0x28,0x59,0x25,0x8d,0x10,0x89,0xa8,0xa4,0xc1,0x26,0x4a,0x12,0xd2,
+0x14,0x68,0xd4,0x0d,0x2a,0x94,0xb1,0xa8,0xa2,0x28,0xda,0x2b,0x48,0x7a,0xee,0x34,
+0xcb,0x04,0xd0,0x93,0x6a,0xf1,0xca,0x4c,0x46,0x4c,0x56,0x64,0xc2,0xd2,0x64,0x60,
+0x64,0xe5,0xd9,0x34,0x69,0x84,0xb0,0x11,0x94,0xd2,0x65,0x13,0xc5,0xc0,0x98,0x26,
+0xa3,0x18,0x8b,0x23,0x12,0x79,0xd7,0x43,0xba,0xe2,0x90,0x52,0x48,0xc3,0x20,0x2a,
+0x41,0x0c,0x8d,0x85,0x33,0x40,0x41,0xe7,0x71,0xdf,0x96,0xf7,0xee,0xaf,0xb3,0xed,
+0xf5,0xd2,0x5a,0xf7,0x6f,0x82,0x19,0x66,0x58,0x41,0x04,0x47,0x81,0x3d,0xba,0x42,
+0x03,0x9c,0x0c,0x63,0xbb,0xd6,0xd3,0xaa,0xa9,0xa5,0xf9,0x16,0x2f,0xad,0xc8,0xb1,
+0x94,0x85,0x90,0x84,0xf6,0xeb,0xa4,0x8a,0xbc,0x4c,0x8c,0xa5,0xf0,0xca,0x12,0xe8,
+0x29,0x8a,0x43,0x16,0xcd,0x7d,0xad,0x58,0xd3,0xbd,0x68,0xeb,0x85,0xda,0x17,0xc4,
+0x55,0x76,0xba,0xaf,0x81,0x84,0xd6,0xa1,0x17,0x20,0x20,0x3a,0x65,0xad,0x63,0x88,
+0x0e,0x18,0x55,0x27,0xbc,0x8e,0x09,0xbb,0xec,0xd6,0x19,0x8f,0xae,0xd4,0x52,0x59,
+0x6a,0x36,0x6d,0xa3,0x1b,0x22,0x0f,0xc5,0xe2,0x90,0xb0,0x33,0xf6,0x38,0xa5,0x0a,
+0xfe,0x36,0xba,0x66,0xec,0xd2,0xc2,0x83,0x68,0x8c,0x10,0xa7,0x51,0xdf,0xdf,0x76,
+0x31,0x32,0x27,0xc0,0x7b,0x00,0x12,0x48,0x06,0x54,0xa7,0x79,0x08,0xe4,0x38,0x1b,
+0x61,0x19,0x99,0x98,0xe1,0x0c,0xb2,0x00,0xbe,0x73,0x79,0x1b,0x51,0xb6,0x72,0x0e,
+0x6c,0xc3,0x54,0xf2,0xb9,0xb2,0xec,0xfb,0x64,0xf4,0x21,0xe1,0x2a,0x59,0x45,0x78,
+0xec,0xad,0xfb,0xbe,0x78,0xc3,0xeb,0x53,0xd6,0xb8,0x2d,0xd3,0xb4,0x05,0x7c,0x65,
+0x6e,0x8b,0x7b,0x6a,0x35,0x5e,0xd5,0x22,0x8a,0x84,0x40,0x87,0x08,0x38,0xf5,0xac,
+0x46,0x6b,0x37,0xb6,0xa9,0xc6,0xb3,0x7c,0x4c,0x88,0x6c,0x38,0x7d,0x05,0xc9,0xf6,
+0xe2,0x9d,0xa8,0x79,0x4d,0x78,0x43,0x44,0xed,0x0f,0x43,0x79,0x6e,0x04,0x3e,0xe5,
+0x84,0xc6,0x14,0x93,0x5b,0x45,0x6d,0xda,0x6a,0xfe,0x59,0x7e,0xfa,0xca,0xec,0x0a,
+0x5d,0xde,0x2e,0x6e,0x84,0xd8,0xcf,0xcf,0x16,0xbe,0x95,0x13,0x3e,0x83,0x34,0x57,
+0x0b,0x77,0x7a,0x9a,0xa2,0x3d,0xb9,0x57,0x63,0x06,0xad,0xc3,0xc6,0x5b,0x35,0x71,
+0x69,0x17,0x82,0xab,0x15,0xdc,0xaa,0x27,0x4f,0x85,0x14,0x9d,0x15,0xea,0x9b,0x58,
+0x66,0x83,0x18,0xcd,0xf1,0x8b,0x50,0x3f,0x89,0x10,0x4c,0x80,0xb7,0x36,0x76,0x49,
+0x06,0x11,0xe8,0xa3,0x57,0xa8,0x51,0x06,0xd6,0x20,0xf4,0xb7,0x0a,0x64,0x84,0xbf,
+0x1d,0xd3,0x1a,0xe3,0xba,0xe6,0x7a,0x67,0x8e,0xad,0x00,0xd5,0x6f,0xab,0x50,0xfa,
+0xd4,0x19,0x2b,0x64,0xb4,0xa4,0x87,0xb1,0xdf,0x66,0x90,0x59,0x66,0x4f,0x0d,0x3d,
+0x25,0xe5,0x6a,0x70,0xa7,0x4a,0x84,0xc8,0x6c,0x15,0xbf,0xe1,0x64,0x28,0xb6,0x76,
+0xf6,0xd5,0xe9,0xdf,0xaa,0xe3,0x13,0xcf,0xd6,0x36,0xd0,0x08,0x88,0x48,0xf3,0xce,
+0xb6,0x29,0xcd,0xa5,0x33,0xe0,0x8d,0x6f,0x2f,0x12,0xc0,0x20,0xd4,0x0a,0xa4,0x82,
+0x83,0xa9,0x90,0xfd,0xec,0x79,0xde,0x77,0xf6,0x42,0xb5,0x9c,0x06,0xa1,0x22,0x51,
+0x66,0x43,0x66,0x1e,0x9f,0x16,0xd5,0x46,0xc0,0xe9,0xa6,0x19,0x9d,0xd5,0x25,0xa4,
+0x17,0x3d,0xf1,0xc0,0xa9,0xec,0xa7,0x98,0xcd,0xcf,0xcf,0x8e,0x58,0x60,0x03,0x04,
+0x64,0xb7,0x82,0x1e,0x2f,0x2f,0x00,0x86,0x04,0xb6,0x4c,0x5d,0xd5,0xd0,0x7b,0x7c,
+0x76,0x8c,0xa8,0xde,0xed,0x71,0x84,0x8d,0x2f,0x4c,0x6c,0xd1,0xa6,0x08,0x5b,0x6b,
+0xdd,0x4a,0x1b,0xca,0xde,0x99,0x4a,0xae,0xe5,0x53,0x19,0x44,0x21,0x18,0xe8,0xd7,
+0x0d,0x5c,0x20,0xb7,0x68,0x2f,0x6e,0xb2,0xcd,0xd1,0x07,0x6d,0xb4,0x68,0xc6,0xd2,
+0x1d,0x6e,0x7a,0xd8,0x4b,0x80,0x66,0xff,0x72,0x98,0x7a,0x61,0xd9,0xa3,0xba,0xf5,
+0xce,0x60,0x37,0x8e,0x50,0x5d,0x36,0xd3,0x64,0x16,0xb1,0x4b,0xc5,0x4b,0x40,0xa4,
+0x4c,0x20,0x0e,0x38,0xd0,0x12,0x45,0x32,0x8b,0x48,0x95,0x89,0x22,0x90,0x9b,0x20,
+0x35,0x88,0xb5,0x86,0x11,0x5e,0x21,0x7b,0x40,0xd2,0xa1,0xa3,0xd7,0xc4,0x03,0x67,
+0xab,0xcb,0x5b,0xd4,0x11,0x4d,0xb1,0x46,0x04,0x7c,0x27,0xb3,0x03,0x8d,0xc8,0x21,
+0x61,0xa3,0x4b,0x89,0x22,0xee,0x7c,0x69,0x0b,0x7b,0x54,0x40,0x14,0xd0,0xdb,0x61,
+0xe5,0x78,0x74,0xfe,0xf5,0xf8,0xfc,0xeb,0xa5,0x55,0x3f,0x62,0x47,0x3d,0x92,0x81,
+0xc6,0xe9,0x40,0x49,0x02,0xa9,0x95,0x06,0x5e,0xbd,0x29,0x0d,0x2e,0x14,0xd7,0x7a,
+0x2a,0xa3,0xc9,0xad,0xb2,0xad,0x1d,0xc1,0x10,0x6d,0x0d,0xa7,0x25,0x2d,0x9d,0x19,
+0x24,0xed,0x36,0x95,0x1c,0x90,0x54,0x3a,0xb5,0x01,0x72,0x20,0xc8,0x51,0x7a,0xf4,
+0xbc,0x8f,0x6a,0xf7,0xe7,0x3a,0xc7,0xc3,0x19,0x10,0x01,0xb7,0xe4,0x3c,0x62,0x9b,
+0x06,0x86,0xac,0x43,0x7e,0xdf,0x1e,0xfe,0x2f,0x27,0x6b,0xda,0x8c,0xd9,0xa4,0xa2,
+0x87,0xe2,0x4d,0x0b,0xaa,0xcc,0xa7,0x70,0xd2,0xa3,0x31,0x86,0x18,0x61,0xf3,0x96,
+0x0f,0xe6,0x69,0xc7,0xeb,0xf1,0x01,0xb5,0x1b,0x5f,0x61,0x75,0x81,0x9d,0xba,0xee,
+0x20,0x35,0xf6,0xdf,0x6b,0x06,0x69,0x79,0x2c,0xe0,0xf1,0xdf,0x2e,0xd0,0x08,0xaa,
+0x4c,0x8f,0xae,0x1b,0x47,0xb3,0x14,0xc3,0x48,0x9c,0x82,0x95,0x8a,0x6c,0x80,0x87,
+0x2c,0x24,0x45,0xdf,0x11,0xc2,0x0a,0xa0,0xc9,0xaa,0x8d,0x55,0x7d,0xd5,0x73,0x56,
+0x2a,0xd7,0xb1,0x5d,0x56,0x57,0x8d,0x6f,0x4a,0xd5,0xe4,0xb6,0xb6,0x36,0x36,0xba,
+0xfb,0xcf,0x76,0x5e,0xdf,0x6e,0x9e,0x67,0x33,0xab,0xa7,0x23,0xf4,0xce,0x0b,0x1a,
+0x90,0x02,0x12,0x5b,0x9d,0xc0,0x2c,0x54,0xd2,0xe9,0xa8,0x82,0xd4,0x30,0x30,0xaf,
+0x70,0x95,0x3d,0x37,0x45,0xb4,0xcc,0x58,0xca,0x18,0xd6,0x19,0xcd,0x89,0x77,0x62,
+0x0a,0x60,0x61,0x24,0x18,0x6d,0x85,0x38,0xda,0x91,0x63,0x8f,0x1f,0x06,0x3e,0xeb,
+0xe0,0x3f,0x3d,0xa1,0xb8,0xd7,0x10,0xf4,0xb6,0xf9,0xc5,0xe3,0x00,0x0c,0x56,0xd3,
+0xa6,0xc3,0xbf,0x7e,0xf9,0x59,0x0b,0xc5,0xe3,0x4d,0xc5,0x57,0x13,0x1c,0x84,0xa8,
+0x6b,0x8b,0xcb,0x86,0x09,0xca,0x13,0x6c,0x1b,0xb8,0x62,0x86,0xae,0x9c,0xf5,0xe7,
+0x8a,0x70,0xbe,0x0e,0xe8,0xdf,0x81,0x45,0x45,0x47,0x80,0xd6,0x1b,0x6a,0x07,0x2d,
+0x1a,0x1d,0x25,0xb1,0x81,0x1c,0x45,0xe8,0x68,0x18,0xce,0xfc,0x43,0x3c,0xc3,0xc8,
+0x68,0x8f,0x17,0xc0,0xd8,0x91,0xa8,0x40,0x3c,0x72,0x72,0xdb,0x57,0xb7,0x1e,0xe2,
+0x8c,0x3d,0xf3,0xb6,0x8d,0x36,0xbb,0x28,0x8d,0xd8,0xa1,0x49,0x06,0xa7,0xc7,0x99,
+0x43,0x1e,0x04,0xf6,0x43,0x7d,0x77,0x21,0xcd,0xb6,0x4e,0x5a,0x23,0x12,0x23,0x06,
+0x3d,0xeb,0x83,0x03,0x5a,0xd1,0xfa,0xf2,0xd1,0x00,0xc3,0x5c,0x03,0x69,0x8a,0x9b,
+0x67,0x86,0x1e,0x35,0x41,0xef,0xd7,0xa7,0x58,0x95,0x41,0xe9,0xfc,0x0c,0x58,0x39,
+0x38,0xf3,0xb0,0x5a,0x5d,0xf8,0xdf,0xdc,0xd7,0xf5,0x8d,0xbe,0x1a,0x7c,0x20,0xd0,
+0xf7,0x92,0x7b,0x90,0x37,0xf9,0xc7,0xce,0x36,0xd7,0xe7,0x50,0xf6,0x3d,0x3a,0x91,
+0x72,0xd2,0x63,0xfa,0x0f,0x4d,0x2d,0x5a,0xf6,0x7a,0x54,0x78,0x5a,0xf6,0x20,0x44,
+0xc3,0xce,0xdf,0xcc,0xef,0x26,0x38,0x3b,0x01,0xf2,0x56,0xbe,0x70,0x8f,0x0b,0xc9,
+0xe7,0x6a,0x61,0x93,0x87,0x15,0x75,0xd8,0xd3,0xc1,0xf0,0x8e,0x8d,0xb1,0xa1,0xb0,
+0xd1,0xb9,0xb3,0x91,0x6f,0x76,0x37,0x40,0x52,0x45,0x2b,0xef,0xe7,0xc7,0x52,0xb0,
+0xd2,0x72,0x5c,0x2a,0xef,0x18,0xb2,0xa8,0x25,0x8f,0x0d,0x5c,0xb7,0x76,0x87,0x8e,
+0x05,0xf1,0xaf,0x90,0xd0,0xb3,0xcd,0x07,0x10,0x89,0x61,0xab,0x59,0x39,0xd6,0xe9,
+0x86,0xdc,0x5d,0x02,0x09,0x45,0xaa,0x09,0xa1,0xda,0xf9,0x18,0x62,0xb2,0x03,0x3d,
+0xf5,0x9c,0xc3,0x76,0x52,0xf0,0xc6,0xdb,0x06,0x4e,0x76,0x51,0xa5,0x9d,0xbb,0x3e,
+0x7d,0x6d,0x35,0x61,0x02,0xb3,0xa7,0x3e,0x2f,0x07,0xcc,0xd4,0xae,0xd5,0xab,0x2a,
+0xa7,0xa7,0x82,0xdb,0x3c,0x7d,0xcc,0xf7,0x1e,0x3a,0x3c,0x77,0xa6,0xf1,0x00,0x60,
+0xc3,0xb8,0xca,0x68,0xa6,0x9b,0x46,0x6e,0xc5,0xbd,0x08,0xcf,0xbf,0x7e,0xcb,0x0f,
+0x5e,0xe7,0xd6,0x99,0xa6,0x61,0xbd,0x3c,0x2b,0x17,0x6e,0xba,0x28,0x52,0xa1,0xb2,
+0x5d,0x19,0x12,0x70,0x21,0x20,0xc4,0x60,0x5a,0x01,0xc5,0xa3,0x41,0xe6,0xcd,0x59,
+0x3c,0x09,0x13,0x48,0x32,0x14,0xca,0xa2,0x41,0xbf,0x2d,0xae,0xa1,0x4c,0xb7,0xd7,
+0xa3,0x46,0xe4,0x8e,0xd4,0xdb,0x27,0x08,0x52,0x20,0x90,0x8b,0x4b,0x84,0x5f,0x1b,
+0x78,0xa7,0x32,0xff,0x54,0xe8,0xee,0x2a,0xe1,0x28,0x45,0xbe,0xbf,0xa8,0x8d,0xd1,
+0x36,0x20,0x79,0x55,0x21,0xe6,0x6f,0x99,0xe8,0xcc,0xb6,0x53,0xd8,0x60,0xfc,0x40,
+0xdf,0xb7,0xe4,0xe7,0xdb,0x78,0x06,0x31,0x64,0xf1,0x47,0x24,0x63,0x1b,0x1a,0x63,
+0x67,0x22,0x06,0x71,0xf1,0xd7,0x7d,0xb2,0xb4,0x27,0x86,0xdd,0x77,0x6a,0xdb,0x1b,
+0xe9,0xdf,0x6e,0x64,0xf0,0xc2,0x07,0xa9,0x9c,0xb5,0x69,0x0f,0x28,0xf0,0x59,0x66,
+0x27,0x7e,0x79,0xdd,0xfe,0x7a,0xd5,0x0b,0x16,0x97,0x34,0xcd,0xf7,0xaa,0x1e,0xcd,
+0xb1,0x10,0xe4,0xf3,0x75,0x27,0x61,0x0c,0x67,0x4c,0x27,0x59,0xad,0xcb,0xd7,0x65,
+0x9a,0x04,0xbf,0xc9,0x0e,0xe5,0xc9,0x93,0x82,0xc2,0x81,0x41,0x1d,0x04,0x91,0x02,
+0x56,0xaa,0x11,0x0e,0x0f,0xaa,0x67,0xde,0x55,0x52,0x2c,0xfa,0x26,0x1c,0xae,0x7c,
+0xa8,0x4b,0x0c,0x64,0x45,0x24,0x84,0x70,0x1e,0xb8,0x0c,0x58,0x18,0x49,0xb2,0xde,
+0x18,0x61,0x82,0x12,0x0d,0x55,0x36,0x3a,0x81,0x43,0x40,0xd8,0xa9,0x60,0x84,0xf6,
+0x43,0x76,0xc6,0xd8,0xb2,0x10,0x66,0x0c,0x24,0x92,0x48,0x57,0x92,0xe2,0x54,0xdb,
+0x32,0xcb,0x65,0x34,0xc0,0x4c,0x1c,0xbc,0x01,0x57,0x18,0x26,0x9a,0x30,0xc0,0x85,
+0x27,0x2e,0x17,0xf3,0x58,0x68,0x31,0x22,0xc4,0x5d,0x30,0x17,0xbc,0xea,0x69,0x94,
+0xb0,0x0d,0x23,0x2a,0x05,0xd1,0x43,0xaa,0x20,0x41,0x97,0x43,0x2e,0xea,0x11,0x80,
+0xd3,0xba,0x90,0x5c,0x94,0x05,0x05,0xd8,0xc9,0x11,0x0e,0xef,0x30,0x57,0x8b,0x54,
+0x94,0x2c,0x5a,0xc8,0xb4,0x2a,0x76,0x8b,0x67,0xe1,0x8c,0xd8,0x52,0xf0,0x1c,0x75,
+0xa6,0x08,0xa4,0x3d,0x4a,0x88,0xbc,0x80,0xca,0x80,0xbd,0xd6,0x95,0xe5,0x1c,0x69,
+0x0f,0x80,0xcb,0x41,0x01,0x1d,0xbd,0x68,0x6d,0x51,0xd1,0xa8,0x36,0x24,0x58,0xef,
+0xe7,0xb5,0x9e,0x7e,0x98,0xd4,0xef,0xc9,0xba,0xcd,0x18,0xd7,0x9e,0x57,0xe1,0xbb,
+0x10,0x4c,0xbd,0x9b,0xda,0x19,0x60,0x14,0x72,0x43,0xae,0xbb,0x94,0x34,0x60,0x34,
+0xb1,0xda,0x49,0x24,0x85,0x12,0x15,0xf1,0x9d,0x4e,0x76,0xc0,0x8c,0xb0,0x06,0x0f,
+0x9d,0x1e,0xf6,0xa0,0x59,0x96,0xf4,0xb1,0xcd,0xf5,0x9b,0xf2,0x33,0x0f,0x60,0xa4,
+0xf8,0x5d,0x7e,0x26,0x75,0x26,0xd8,0x36,0xac,0x21,0x26,0xd9,0xbe,0x61,0x86,0x2e,
+0xb6,0x38,0xe4,0xf8,0xdf,0x4d,0xae,0xd8,0xb4,0xe7,0x94,0xb6,0x60,0xd8,0xd8,0xbc,
+0xba,0x68,0xd4,0x34,0xdf,0x33,0xc1,0xe3,0x2b,0x0d,0x77,0xd7,0x38,0xd8,0xe8,0x3c,
+0x5c,0x5f,0x3e,0x09,0x76,0xf8,0x3d,0x74,0x68,0x25,0x80,0x3b,0xfd,0x28,0x83,0x9b,
+0x38,0xd7,0xbf,0x5b,0x5d,0x5c,0x69,0x36,0xa1,0x0e,0xe6,0xaf,0x1d,0xbb,0xc6,0xfe,
+0x63,0x22,0x48,0x8f,0xb3,0x98,0x2f,0xc7,0x2e,0x28,0x7a,0x3f,0x3f,0x10,0x21,0x7b,
+0x3f,0x7a,0x79,0x50,0x87,0x15,0xb3,0xf5,0xa5,0x61,0x4b,0x85,0x87,0x57,0xa4,0xbd,
+0x35,0x66,0x37,0xcc,0xb2,0xf4,0x65,0x70,0x68,0x27,0xe5,0x26,0x1e,0x7e,0xa2,0xca,
+0x4d,0x1d,0x5d,0x1c,0x76,0x1e,0xcb,0xe1,0x90,0x18,0xfb,0x86,0x79,0x48,0x85,0x31,
+0x36,0x27,0xfa,0x0e,0xff,0x3d,0x93,0xcf,0x9c,0x5e,0xda,0x93,0x56,0x0d,0xf6,0xed,
+0xb3,0xa5,0x60,0xce,0xe9,0xe3,0x99,0xe6,0x96,0x40,0x7b,0x60,0xfb,0xd3,0x63,0xa2,
+0x3d,0x4e,0x2b,0x91,0x9b,0x84,0x81,0x20,0x9c,0xd0,0xa4,0x85,0x54,0xd1,0x12,0xda,
+0x6c,0x98,0xdc,0x38,0x43,0x3d,0xed,0x04,0xe0,0x92,0x40,0x77,0x24,0xbd,0x19,0x2f,
+0xa2,0x39,0x75,0x8c,0x21,0x45,0xb0,0x8c,0xae,0x7b,0x8c,0x87,0x01,0x99,0xe5,0x7a,
+0x49,0x8c,0x9f,0x67,0x97,0x1a,0xe7,0x5e,0x03,0x88,0x01,0x3b,0x79,0xb9,0x9c,0x8a,
+0x50,0xfb,0xa0,0xd1,0x2a,0x24,0x8e,0xa5,0x3f,0x14,0x89,0x37,0x21,0xd3,0xa0,0x2c,
+0x3a,0xb9,0xeb,0x6f,0xa6,0x85,0x6e,0xc8,0x91,0x67,0x58,0xba,0x13,0xe1,0xe9,0xa2,
+0x36,0x76,0x25,0xd9,0xd8,0xc4,0xa1,0x2f,0xb5,0x4b,0xd4,0x44,0xf9,0x06,0xfc,0x75,
+0x73,0x58,0x7b,0x85,0x15,0x02,0xc1,0xc8,0x43,0xa6,0x00,0xc1,0x56,0xb8,0x8b,0x4d,
+0xe4,0xf5,0x69,0x7c,0x7c,0xca,0x7d,0x96,0x20,0xf4,0xd7,0xe8,0xf0,0x18,0x17,0xdb,
+0x23,0x0c,0x35,0xa9,0xa3,0x46,0x98,0x56,0x2f,0x45,0xd3,0x65,0x3e,0x9c,0x50,0x40,
+0x01,0x96,0x08,0x41,0x0e,0xfa,0xe3,0x00,0x3a,0xa8,0x8e,0x12,0x9e,0x03,0x6e,0xd9,
+0x6c,0xd9,0xe9,0xa9,0xb6,0x0e,0xf0,0x85,0x22,0x39,0xbd,0x9a,0x0a,0xae,0x99,0xe3,
+0x02,0xcb,0x50,0xe3,0x9d,0xae,0x61,0x14,0x7a,0xf3,0x3e,0x02,0xe6,0x9e,0x00,0x84,
+0x7b,0xa2,0x3e,0x6c,0xb2,0x0c,0xae,0xcc,0x39,0x6a,0xdb,0x6d,0x9d,0x16,0x45,0x7b,
+0xb4,0x8d,0x34,0x50,0x97,0x4a,0x84,0x36,0x0d,0x35,0xcd,0xed,0x50,0x8d,0x29,0x66,
+0x2e,0x88,0xd3,0x4f,0x57,0x26,0x61,0x0c,0xa0,0xa0,0xe1,0x0f,0x15,0x53,0x09,0x19,
+0x4d,0x10,0x88,0x49,0x13,0xc7,0x4b,0x05,0x24,0x17,0x17,0xac,0xf7,0xf9,0x63,0x47,
+0x19,0x16,0xfc,0xb7,0xd0,0xb0,0x92,0x46,0x8e,0xdb,0xcd,0xf3,0x2d,0x92,0xfd,0xf8,
+0xc6,0xd9,0xbc,0x19,0x8a,0x72,0xae,0xd4,0xbc,0x15,0xe0,0xec,0x4b,0x88,0x2b,0x3e,
+0x3b,0x2d,0x84,0xe7,0x6c,0x7a,0x30,0x72,0xc3,0x34,0x9b,0xf3,0x31,0x6b,0xcd,0x51,
+0x18,0x65,0x2d,0x64,0x3c,0xeb,0x0a,0xb5,0x52,0xc0,0xa9,0xe2,0x9c,0x01,0x5e,0xf2,
+0x41,0xea,0x6b,0x6e,0xac,0x14,0x00,0xe5,0x37,0x6b,0xa5,0xe7,0xb9,0xc3,0xd0,0x0f,
+0x23,0x44,0x68,0xec,0x6e,0xc7,0x71,0x52,0xe1,0x38,0xb1,0xcd,0x10,0xf3,0x8f,0x37,
+0xbd,0x44,0x07,0x1b,0x69,0xa3,0xbd,0x91,0x86,0x6a,0xc9,0xac,0x53,0xbb,0xd8,0xd1,
+0x97,0xa3,0x6c,0xf7,0x0b,0x01,0x8c,0xa3,0x79,0xc6,0x34,0xe7,0x3b,0xba,0x74,0x38,
+0x1d,0x73,0xb8,0xe7,0x7b,0xef,0x73,0xd1,0xd9,0xe3,0xc1,0x5c,0x1b,0xf3,0xc1,0x94,
+0xfc,0xca,0xae,0xe5,0x3e,0x0a,0x84,0x4e,0x8d,0x9a,0xdd,0xe5,0x05,0x41,0x78,0x88,
+0x6c,0x86,0x29,0xca,0x59,0xde,0x83,0x1e,0x21,0x8d,0x75,0xc8,0x61,0xad,0x98,0xc4,
+0xd1,0xc3,0x05,0xbd,0x37,0xe1,0xb8,0xe7,0x5a,0x66,0x0e,0x87,0x25,0xbc,0x5e,0x5f,
+0x38,0x42,0xcb,0x50,0xd8,0x09,0x14,0x21,0xa5,0xd9,0x59,0xf8,0x31,0xb3,0x0e,0xe7,
+0x6a,0xdd,0x11,0xd1,0x7c,0x5e,0x9f,0xa3,0x35,0xdd,0x02,0x47,0x64,0x07,0x4e,0xcf,
+0x3c,0x08,0x26,0xe8,0x7a,0xb6,0x61,0x77,0x21,0xae,0x45,0x80,0xbd,0x20,0x90,0x14,
+0xb7,0x61,0x39,0x0e,0xdd,0x98,0x28,0x66,0x9f,0x48,0xee,0x70,0x12,0x07,0xb6,0x16,
+0xd4,0x49,0x56,0x07,0x5b,0x59,0xdf,0x4b,0xee,0x06,0x56,0xc9,0x1a,0x5b,0xdc,0x43,
+0x6f,0xdb,0x7a,0x11,0x8c,0x4f,0xbf,0x7e,0x72,0x85,0xcf,0x67,0x10,0x74,0x0c,0x1c,
+0xd2,0x7d,0x1b,0x0d,0x34,0x51,0xed,0xed,0x9a,0x34,0xed,0x5a,0x92,0xd8,0x9b,0x2e,
+0x71,0x85,0xa5,0x22,0xe4,0x3e,0x70,0xd6,0xc5,0x57,0x21,0x84,0xe2,0x96,0x9d,0x27,
+0x2e,0xa4,0x5c,0xc6,0xb5,0x87,0x39,0xcf,0x5a,0xc7,0x9a,0x3b,0x1d,0xcd,0x0c,0x55,
+0xc3,0x20,0xcc,0x5d,0x00,0x98,0x31,0x61,0xa6,0x83,0x72,0x26,0x6d,0x83,0x1b,0x46,
+0xcc,0xc2,0x20,0xbe,0x34,0x60,0xe9,0xc6,0x55,0x4c,0x63,0x41,0x1a,0xfa,0x6d,0xbd,
+0x83,0x48,0xcb,0x33,0xa8,0xd4,0x36,0x20,0x24,0xd9,0x84,0xc7,0x4d,0x23,0x1a,0xc2,
+0x02,0xa2,0xb0,0xcd,0x70,0xdc,0x03,0xf2,0xca,0xce,0x09,0xef,0x8c,0x0b,0x6c,0x6f,
+0xbe,0x4f,0x9b,0x5c,0x3f,0x0c,0x3f,0x78,0xa5,0xec,0xe0,0x06,0x07,0x15,0xc9,0x2e,
+0x87,0x58,0xa1,0x9e,0xea,0xde,0x07,0x45,0x28,0x1c,0xbf,0xa5,0xcd,0x34,0xa1,0x35,
+0xb7,0x07,0x20,0x85,0xd8,0xcb,0xc6,0x85,0x23,0xb1,0xf3,0xc4,0x22,0x08,0xd4,0x23,
+0xbd,0x3b,0x50,0xb3,0xa6,0x5f,0xcc,0x43,0xcb,0x17,0x58,0xcf,0xdc,0xd3,0x76,0x12,
+0xcd,0xd8,0xdf,0x18,0x94,0x05,0x19,0xf0,0x7e,0xc4,0x26,0x5f,0x96,0x6d,0xb5,0x42,
+0x9f,0x10,0x81,0xb4,0xd1,0x21,0x20,0x47,0x8c,0x92,0x41,0x20,0x4b,0x3a,0x6d,0x0c,
+0xed,0x01,0xfa,0xca,0x61,0x19,0xe4,0x3e,0x85,0x4d,0x82,0x71,0x09,0xee,0x93,0x82,
+0x5f,0x10,0x61,0x05,0x1d,0xe0,0x41,0x9e,0x33,0x8c,0xc4,0xd1,0xc0,0xd5,0xa1,0x8c,
+0x5c,0x0d,0x2c,0xd6,0x59,0x3b,0x8a,0x70,0x6b,0x15,0x51,0xd8,0x55,0x3b,0x8b,0x76,
+0xa9,0xe8,0x1b,0x4d,0xc1,0x53,0x61,0xbe,0xd6,0x24,0xe2,0x75,0x00,0x45,0x48,0xe9,
+0x5a,0x79,0x4a,0x1f,0xc3,0x65,0x25,0xf2,0xce,0x4d,0x6f,0xbd,0x67,0x08,0x9a,0xe2,
+0xa1,0xb8,0xc4,0x6d,0x6c,0xb0,0x61,0x96,0xd6,0x95,0x07,0xf4,0xe3,0x28,0x71,0x77,
+0x12,0x87,0x2f,0xf5,0xa9,0x85,0xd6,0x81,0xc6,0x93,0xed,0xed,0xd7,0xcf,0x22,0x37,
+0x42,0x31,0x91,0x9f,0x59,0x12,0x10,0x2a,0x84,0xf0,0xe8,0x31,0x2b,0x7b,0xcb,0x08,
+0x30,0x55,0xb0,0x82,0x2f,0x19,0xee,0xb5,0x9f,0x0b,0x85,0xc3,0x41,0xe9,0x70,0x71,
+0xb9,0x41,0x7f,0x59,0xb5,0xc0,0xb6,0x7a,0xbb,0xa7,0x31,0x47,0x55,0x0b,0x0b,0xaf,
+0xa8,0x76,0x75,0x78,0x16,0xce,0x71,0xa3,0xa4,0x2f,0xa1,0x61,0x8a,0x0a,0x5e,0x09,
+0x46,0x5e,0x25,0x81,0x0a,0x53,0x33,0x54,0x0e,0x76,0x7b,0x48,0x31,0x80,0xeb,0xc7,
+0x05,0x68,0xc9,0x98,0x75,0xc6,0x9d,0xa1,0xb9,0xb3,0xd8,0x5a,0xc4,0xb4,0x4e,0x8c,
+0xb6,0xdb,0x9a,0xbc,0xb4,0x18,0x6a,0x45,0x0b,0x7a,0xdb,0x68,0x55,0xd4,0xb0,0xe9,
+0x91,0x1d,0xbe,0xa5,0x5d,0x6d,0x8d,0x7b,0xc2,0x98,0xee,0x68,0x8c,0x3b,0x15,0xc9,
+0x4d,0x22,0x86,0x01,0x9b,0x3a,0xd2,0x9e,0x83,0xc4,0xdb,0xa1,0xfd,0xb9,0x6e,0x79,
+0x0f,0x58,0xd3,0xbb,0xae,0x2c,0x25,0x5a,0x44,0xf5,0xdc,0xdf,0x4f,0x1a,0xe5,0x62,
+0x51,0x17,0x2c,0x34,0x49,0xd1,0xe9,0x84,0xf8,0x85,0x1d,0x11,0x4c,0x0e,0xec,0x8b,
+0xa1,0x20,0x48,0x0b,0xbb,0x94,0x24,0x58,0x4a,0x7a,0x1f,0x0f,0x39,0x91,0xe2,0xd9,
+0x1a,0xb5,0x09,0xde,0x3e,0x6c,0xc0,0x8f,0x21,0x22,0x3c,0x4c,0x5d,0xe2,0xba,0x82,
+0x49,0x35,0x96,0xa0,0x54,0x28,0x94,0x8e,0x13,0x67,0xb6,0x2c,0x94,0x83,0x44,0x27,
+0x42,0x19,0x44,0x38,0x04,0x16,0x92,0x8c,0x2d,0xe2,0x1c,0x8a,0xa7,0x70,0x4c,0x66,
+0xdd,0x8c,0x60,0xe0,0xd0,0x18,0x62,0xa4,0xe0,0x85,0x72,0xe1,0xfc,0x9c,0xcc,0x02,
+0xcc,0x4f,0x1e,0xa3,0xd7,0x79,0xd1,0x16,0x88,0x45,0x86,0xc7,0x87,0x4e,0x31,0x4d,
+0x33,0xed,0x41,0x55,0x6f,0x3a,0xae,0xdf,0x38,0x53,0xac,0x59,0x7a,0x23,0x9f,0x85,
+0xb7,0x32,0x39,0x46,0x88,0x7f,0x50,0x14,0x3c,0x88,0x68,0x7e,0x84,0xcb,0x11,0x64,
+0x94,0x66,0x5b,0x2f,0x0d,0xa4,0x89,0x62,0xd0,0x3b,0xa0,0xa7,0x77,0x9e,0xb8,0x7e,
+0x74,0xb7,0x34,0x78,0xb9,0x4d,0x0d,0xbc,0x45,0x0a,0xb9,0xf9,0xbe,0x6a,0xe8,0x8e,
+0x3f,0x75,0x07,0xd4,0x59,0xae,0x72,0x7e,0x30,0x58,0x0f,0xb9,0x46,0xae,0x9d,0xa3,
+0x7e,0x8c,0x50,0x89,0xec,0xff,0x4f,0x35,0x35,0x82,0x50,0xde,0xfb,0xf5,0x7d,0x79,
+0xb0,0x33,0x9e,0x9c,0x79,0x55,0x69,0xb8,0xdf,0x55,0x96,0x7c,0xfa,0x9c,0xdc,0x18,
+0x36,0xda,0x48,0x40,0xaa,0xaa,0xb4,0xa9,0x19,0x42,0x45,0x4a,0xcc,0x04,0x11,0xea,
+0x20,0x28,0x81,0x5d,0x04,0x24,0x88,0x24,0x98,0xe1,0xd1,0x09,0xd7,0x93,0xeb,0x98,
+0xc6,0x82,0x92,0xdf,0x2b,0xbd,0xe4,0x9a,0x48,0x51,0xe7,0x70,0xee,0x4d,0x30,0x28,
+0x36,0x15,0x6d,0x57,0x15,0x35,0xab,0x90,0x25,0x83,0x65,0x12,0xc0,0x08,0xad,0xf8,
+0xcc,0xdc,0xc6,0xfa,0x92,0xf4,0x61,0x08,0xe0,0xda,0x1d,0xb8,0xd8,0xb4,0x91,0x0d,
+0x31,0x36,0xc1,0xb0,0xc5,0xdf,0x18,0xea,0xf4,0x59,0x6a,0xc6,0x31,0x84,0xd9,0xd0,
+0xda,0x53,0x33,0x52,0x98,0x53,0x3c,0x68,0x04,0x88,0x49,0x5c,0x5f,0x9f,0x68,0xf2,
+0x71,0x80,0x47,0x91,0xdd,0xf5,0x38,0x1e,0x6e,0x58,0x02,0x27,0x1d,0xb0,0x2a,0x3c,
+0x11,0xbd,0xf2,0x6a,0x19,0x3c,0x20,0x4b,0xee,0x80,0xab,0xf0,0x58,0x48,0xeb,0x0d,
+0x83,0x96,0xc1,0xd2,0x4f,0x16,0xaf,0x6a,0xb4,0x21,0xb7,0x25,0x67,0x8b,0xf0,0x53,
+0x36,0xc5,0x88,0x02,0x36,0x77,0x23,0x34,0x9c,0x12,0x67,0x69,0x55,0x15,0x83,0x11,
+0xd4,0xc1,0xc1,0x05,0x81,0x07,0x79,0x31,0xd4,0xcd,0xc6,0x93,0x7e,0x28,0xcd,0x47,
+0x6d,0x93,0xf1,0x0a,0x06,0x21,0xdb,0x25,0xc9,0xcc,0x99,0x82,0x11,0x22,0x37,0x2e,
+0xec,0x0c,0x23,0x1a,0x84,0xc4,0x36,0x88,0x42,0xdd,0xe1,0x9a,0x06,0xf5,0x9c,0x1d,
+0x52,0x7b,0x5f,0x2a,0x00,0x1b,0x16,0x6d,0xfd,0x2c,0xfe,0x0c,0xf6,0x8b,0xe9,0x97,
+0x6b,0x40,0xaf,0x12,0xfa,0x52,0x1c,0x90,0x47,0x45,0x85,0x18,0x31,0xdc,0x8c,0x3a,
+0x07,0x28,0x29,0xa9,0x87,0x87,0x2a,0xa0,0xda,0x71,0x02,0x8b,0xb0,0x94,0x3e,0xbf,
+0x48,0xca,0xf0,0x2e,0xa2,0x06,0x48,0xc3,0xf2,0xf4,0x7a,0x4a,0x51,0x78,0x2e,0xf3,
+0xc5,0x7c,0x81,0x83,0x82,0x81,0x19,0x45,0x32,0x37,0x7a,0x99,0x26,0x65,0x26,0x2e,
+0x91,0x62,0x48,0x30,0x47,0x83,0x46,0xe1,0xc0,0x96,0x1b,0x7b,0x21,0x43,0xc1,0x47,
+0x7a,0x5c,0xef,0xcc,0x6d,0x3a,0x23,0x04,0x25,0x4d,0x88,0x8d,0xd2,0x95,0x3d,0x88,
+0x78,0x51,0xb7,0x5e,0x9c,0xef,0x64,0xcb,0x21,0x84,0x6d,0xdf,0x72,0xe6,0xf6,0x1b,
+0xf3,0x6b,0x9d,0x8c,0xc8,0x43,0x58,0x1a,0xdf,0xa6,0x6a,0x82,0x3a,0x48,0xce,0xd4,
+0x04,0x28,0x7b,0x1f,0x9f,0x55,0xac,0xeb,0x97,0x86,0x32,0x47,0x3f,0x24,0x65,0x8e,
+0xa6,0xe9,0xaa,0x10,0x3e,0x9a,0x4b,0x7a,0x6a,0xd0,0xb6,0xf7,0xb0,0xcb,0xd2,0xac,
+0x3a,0xea,0xe1,0x21,0x24,0x15,0x99,0x60,0x7b,0xd4,0x74,0x8a,0xba,0xc9,0x03,0x48,
+0xe3,0xcf,0x7b,0xeb,0x6b,0xf2,0x6e,0x47,0x01,0x4b,0xb4,0x50,0xc3,0x97,0xb5,0x13,
+0x0d,0xb8,0xfc,0x5f,0x67,0x42,0x6c,0xbd,0xa2,0x89,0xb1,0xdb,0x8f,0x56,0x46,0x76,
+0x69,0x4e,0x26,0xfc,0x43,0x57,0x82,0x9f,0x6e,0xfc,0x5d,0xe3,0x86,0x11,0x54,0xbf,
+0x56,0x56,0xd0,0x87,0x3d,0x4d,0x25,0x94,0xeb,0x34,0x50,0x93,0x4d,0x01,0x5d,0x50,
+0x4c,0x4b,0x2a,0x10,0x18,0x56,0x29,0xeb,0x76,0x75,0xae,0x72,0x61,0x84,0x33,0x59,
+0x71,0xe7,0xbf,0xe1,0xdf,0xc7,0xc7,0xd3,0xef,0xe5,0x29,0xef,0xfa,0x71,0xf3,0xfb,
+0xd5,0x54,0x40,0xd9,0x4c,0xcf,0x8a,0xa8,0x81,0xe9,0xbf,0xd2,0x70,0xf2,0xb2,0xa8,
+0x81,0x87,0x1f,0x25,0x51,0x02,0xf9,0xf3,0x79,0xe4,0xaa,0x20,0x7a,0xad,0x6d,0x8a,
+0xa2,0x07,0xa5,0x2a,0xaa,0x20,0x6a,0xaa,0x20,0x69,0xcb,0xd5,0x6b,0x7d,0x90,0x50,
+0x2d,0xff,0x8b,0xb9,0x22,0x9c,0x28,0x48,0x40,0xbf,0x8c,0x89,0x00,
};
#endif
diff --git a/include-minimal/usage_compressed.h b/include-minimal/usage_compressed.h
index 9e2f555..0428fb6 100644
--- a/include-minimal/usage_compressed.h
+++ b/include-minimal/usage_compressed.h
@@ -185,907 +185,752 @@
"\x6f\x72\x20\x61\x6c\x6c\x20\x64\x69\x66\x66\x65\x72\x69\x6e\x67" \
"\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x73\x09\x51\x75\x69\x65\x74" \
"\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x53\x4f\x55\x52\x43" \
-"\x45\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f\x70\x79\x20\x53\x4f\x55" \
-"\x52\x43\x45\x20\x74\x6f\x20\x44\x45\x53\x54\x2c\x20\x6f\x72\x20" \
-"\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x53\x4f\x55\x52\x43\x45\x28" \
-"\x73\x29\x20\x74\x6f\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a" \
-"\x0a\x09\x2d\x61\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x2d\x64\x70" \
-"\x52\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65" \
-"\x0a\x09\x2d\x64\x2c\x2d\x50\x09\x50\x72\x65\x73\x65\x72\x76\x65" \
-"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x20\x69\x66\x20\x2d\x52\x29\x0a\x09\x2d\x4c\x09\x46\x6f" \
-"\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b" \
-"\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d" \
-"\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64" \
-"\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x70\x09\x50\x72\x65\x73\x65\x72" \
-"\x76\x65\x20\x66\x69\x6c\x65\x20\x61\x74\x74\x72\x69\x62\x75\x74" \
-"\x65\x73\x20\x69\x66\x20\x70\x6f\x73\x73\x69\x62\x6c\x65\x0a\x09" \
-"\x2d\x66\x09\x4f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x69" \
-"\x09\x50\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x6f" \
-"\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x6c\x2c\x2d\x73\x09" \
-"\x43\x72\x65\x61\x74\x65\x20\x28\x73\x79\x6d\x29\x6c\x69\x6e\x6b" \
-"\x73\x00\x5b\x2d\x64\x6d\x76\x75\x5d\x20\x5b\x2d\x46\x20\x46\x49" \
-"\x4c\x45\x5d\x20\x5b\x2d\x48\x20\x6e\x65\x77\x63\x5d\x20\x5b\x2d" \
-"\x74\x69\x6f\x5d\x20\x5b\x45\x58\x54\x52\x5f\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x6f\x72\x20" \
-"\x6c\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d\x20" \
-"\x61\x20\x63\x70\x69\x6f\x20\x61\x72\x63\x68\x69\x76\x65\x2c\x20" \
-"\x6f\x72\x0a\x63\x72\x65\x61\x74\x65\x20\x61\x6e\x20\x61\x72\x63" \
-"\x68\x69\x76\x65\x20\x75\x73\x69\x6e\x67\x20\x66\x69\x6c\x65\x20" \
-"\x6c\x69\x73\x74\x20\x6f\x6e\x20\x73\x74\x64\x69\x6e\x0a\x0a\x4d" \
-"\x61\x69\x6e\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x6d\x6f" \
-"\x64\x65\x3a\x0a\x09\x2d\x74\x09\x4c\x69\x73\x74\x0a\x09\x2d\x69" \
-"\x09\x45\x78\x74\x72\x61\x63\x74\x20\x45\x58\x54\x52\x5f\x46\x49" \
-"\x4c\x45\x73\x20\x28\x6f\x72\x20\x61\x6c\x6c\x29\x0a\x09\x2d\x6f" \
-"\x09\x43\x72\x65\x61\x74\x65\x20\x28\x72\x65\x71\x75\x69\x72\x65" \
-"\x73\x20\x2d\x48\x20\x6e\x65\x77\x63\x29\x0a\x09\x2d\x64\x09\x4d" \
-"\x61\x6b\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x64\x69\x72\x65" \
-"\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x6d\x09\x50\x72\x65\x73" \
-"\x65\x72\x76\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09\x2d\x76\x09\x56" \
-"\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x09\x4f\x76\x65\x72\x77" \
-"\x72\x69\x74\x65\x0a\x09\x2d\x46\x20\x46\x49\x4c\x45\x09\x49\x6e" \
-"\x70\x75\x74\x20\x28\x2d\x74\x2c\x2d\x69\x2c\x2d\x70\x29\x20\x6f" \
-"\x72\x20\x6f\x75\x74\x70\x75\x74\x20\x28\x2d\x6f\x29\x20\x66\x69" \
-"\x6c\x65\x0a\x09\x2d\x48\x20\x6e\x65\x77\x63\x09\x41\x72\x63\x68" \
-"\x69\x76\x65\x20\x66\x6f\x72\x6d\x61\x74\x00\x5b\x4f\x50\x54\x49" \
-"\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x50\x72\x69\x6e\x74\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x66" \
-"\x69\x65\x6c\x64\x73\x20\x66\x72\x6f\x6d\x20\x65\x61\x63\x68\x20" \
-"\x69\x6e\x70\x75\x74\x20\x46\x49\x4c\x45\x20\x74\x6f\x20\x73\x74" \
-"\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62\x20\x4c\x49\x53\x54\x09\x4f" \
-"\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x62\x79\x74\x65\x73" \
-"\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53\x54\x0a\x09\x2d\x63\x20\x4c" \
-"\x49\x53\x54\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20" \
-"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x66\x72\x6f\x6d\x20" \
-"\x4c\x49\x53\x54\x0a\x09\x2d\x64\x20\x43\x48\x41\x52\x09\x55\x73" \
-"\x65\x20\x43\x48\x41\x52\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f" \
-"\x66\x20\x74\x61\x62\x20\x61\x73\x20\x74\x68\x65\x20\x66\x69\x65" \
-"\x6c\x64\x20\x64\x65\x6c\x69\x6d\x69\x74\x65\x72\x0a\x09\x2d\x73" \
-"\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65" \
-"\x20\x6c\x69\x6e\x65\x73\x20\x63\x6f\x6e\x74\x61\x69\x6e\x69\x6e" \
-"\x67\x20\x64\x65\x6c\x69\x6d\x69\x74\x65\x72\x0a\x09\x2d\x66\x20" \
-"\x4e\x09\x50\x72\x69\x6e\x74\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65" \
-"\x73\x65\x20\x66\x69\x65\x6c\x64\x73\x0a\x09\x2d\x6e\x09\x49\x67" \
-"\x6e\x6f\x72\x65\x64\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
-"\x5b\x2b\x46\x4d\x54\x5d\x20\x5b\x54\x49\x4d\x45\x5d\x0a\x0a\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x74\x69\x6d\x65\x20\x28\x75\x73\x69" \
-"\x6e\x67\x20\x2b\x46\x4d\x54\x29\x2c\x20\x6f\x72\x20\x73\x65\x74" \
-"\x20\x74\x69\x6d\x65\x0a\x0a\x09\x5b\x2d\x73\x2c\x2d\x2d\x73\x65" \
-"\x74\x5d\x20\x54\x49\x4d\x45\x09\x53\x65\x74\x20\x74\x69\x6d\x65" \
-"\x20\x74\x6f\x20\x54\x49\x4d\x45\x0a\x09\x2d\x75\x2c\x2d\x2d\x75" \
-"\x74\x63\x09\x57\x6f\x72\x6b\x20\x69\x6e\x20\x55\x54\x43\x20\x28" \
-"\x64\x6f\x6e\x27\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x74\x6f" \
-"\x20\x6c\x6f\x63\x61\x6c\x20\x74\x69\x6d\x65\x29\x0a\x09\x2d\x52" \
-"\x2c\x2d\x2d\x72\x66\x63\x2d\x32\x38\x32\x32\x09\x4f\x75\x74\x70" \
-"\x75\x74\x20\x52\x46\x43\x2d\x32\x38\x32\x32\x20\x63\x6f\x6d\x70" \
-"\x6c\x69\x61\x6e\x74\x20\x64\x61\x74\x65\x20\x73\x74\x72\x69\x6e" \
-"\x67\x0a\x09\x2d\x49\x5b\x53\x50\x45\x43\x5d\x09\x4f\x75\x74\x70" \
-"\x75\x74\x20\x49\x53\x4f\x2d\x38\x36\x30\x31\x20\x63\x6f\x6d\x70" \
-"\x6c\x69\x61\x6e\x74\x20\x64\x61\x74\x65\x20\x73\x74\x72\x69\x6e" \
-"\x67\x0a\x09\x09\x09\x53\x50\x45\x43\x3d\x27\x64\x61\x74\x65\x27" \
-"\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x20\x66\x6f\x72\x20\x64" \
-"\x61\x74\x65\x20\x6f\x6e\x6c\x79\x2c\x0a\x09\x09\x09\x27\x68\x6f" \
-"\x75\x72\x73\x27\x2c\x20\x27\x6d\x69\x6e\x75\x74\x65\x73\x27\x2c" \
-"\x20\x6f\x72\x20\x27\x73\x65\x63\x6f\x6e\x64\x73\x27\x20\x66\x6f" \
-"\x72\x20\x64\x61\x74\x65\x20\x61\x6e\x64\x0a\x09\x09\x09\x74\x69" \
-"\x6d\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x69\x6e\x64\x69\x63\x61" \
-"\x74\x65\x64\x20\x70\x72\x65\x63\x69\x73\x69\x6f\x6e\x0a\x09\x2d" \
-"\x72\x2c\x2d\x2d\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x46\x49" \
-"\x4c\x45\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x6c\x61\x73\x74\x20" \
-"\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20\x74\x69\x6d" \
-"\x65\x20\x6f\x66\x20\x46\x49\x4c\x45\x0a\x09\x2d\x64\x2c\x2d\x2d" \
-"\x64\x61\x74\x65\x20\x54\x49\x4d\x45\x09\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x54\x49\x4d\x45\x2c\x20\x6e\x6f\x74\x20\x27\x6e\x6f\x77" \
-"\x27\x0a\x09\x2d\x44\x20\x46\x4d\x54\x09\x09\x55\x73\x65\x20\x46" \
-"\x4d\x54\x20\x66\x6f\x72\x20\x2d\x64\x20\x54\x49\x4d\x45\x20\x63" \
-"\x6f\x6e\x76\x65\x72\x73\x69\x6f\x6e\x0a\x0a\x52\x65\x63\x6f\x67" \
-"\x6e\x69\x7a\x65\x64\x20\x54\x49\x4d\x45\x20\x66\x6f\x72\x6d\x61" \
-"\x74\x73\x3a\x0a\x09\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a" \
-"\x09\x5b\x59\x59\x59\x59\x2e\x5d\x4d\x4d\x2e\x44\x44\x2d\x68\x68" \
-"\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x59\x59\x59\x59\x2d\x4d" \
-"\x4d\x2d\x44\x44\x20\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a" \
-"\x09\x5b\x5b\x5b\x5b\x5b\x59\x59\x5d\x59\x59\x5d\x4d\x4d\x5d\x44" \
-"\x44\x5d\x68\x68\x5d\x6d\x6d\x5b\x2e\x73\x73\x5d\x00\x45\x58\x50" \
-"\x52\x45\x53\x53\x49\x4f\x4e\x2e\x2e\x2e\x0a\x0a\x54\x69\x6e\x79" \
-"\x20\x52\x50\x4e\x20\x63\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x2e" \
-"\x20\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x73\x3a\x0a\x2b\x2c\x20" \
-"\x61\x64\x64\x2c\x20\x2d\x2c\x20\x73\x75\x62\x2c\x20\x2a\x2c\x20" \
-"\x6d\x75\x6c\x2c\x20\x2f\x2c\x20\x64\x69\x76\x2c\x20\x25\x2c\x20" \
-"\x6d\x6f\x64\x2c\x20\x61\x6e\x64\x2c\x20\x6f\x72\x2c\x20\x6e\x6f" \
-"\x74\x2c\x20\x65\x6f\x72\x2c\x0a\x70\x20\x2d\x20\x70\x72\x69\x6e" \
-"\x74\x20\x74\x6f\x70\x20\x6f\x66\x20\x74\x68\x65\x20\x73\x74\x61" \
-"\x63\x6b\x20\x28\x77\x69\x74\x68\x6f\x75\x74\x20\x70\x6f\x70\x70" \
-"\x69\x6e\x67\x29\x2c\x0a\x66\x20\x2d\x20\x70\x72\x69\x6e\x74\x20" \
-"\x65\x6e\x74\x69\x72\x65\x20\x73\x74\x61\x63\x6b\x2c\x0a\x6f\x20" \
-"\x2d\x20\x70\x6f\x70\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20" \
-"\x61\x6e\x64\x20\x73\x65\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x72" \
-"\x61\x64\x69\x78\x20\x28\x6d\x75\x73\x74\x20\x62\x65\x20\x31\x30" \
-"\x2c\x20\x31\x36\x2c\x20\x38\x20\x6f\x72\x20\x32\x29\x2e\x0a\x45" \
-"\x78\x61\x6d\x70\x6c\x65\x73\x3a\x20\x27\x64\x63\x20\x32\x20\x32" \
-"\x20\x61\x64\x64\x20\x70\x27\x20\x2d\x3e\x20\x34\x2c\x20\x27\x64" \
-"\x63\x20\x38\x20\x38\x20\x2a\x20\x32\x20\x32\x20\x2b\x20\x2f\x20" \
-"\x70\x27\x20\x2d\x3e\x20\x31\x36\x00\x5b\x69\x66\x3d\x46\x49\x4c" \
-"\x45\x5d\x20\x5b\x6f\x66\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x69\x62" \
-"\x73\x3d\x4e\x5d\x20\x5b\x6f\x62\x73\x3d\x4e\x5d\x20\x5b\x62\x73" \
-"\x3d\x4e\x5d\x20\x5b\x63\x6f\x75\x6e\x74\x3d\x4e\x5d\x20\x5b\x73" \
-"\x6b\x69\x70\x3d\x4e\x5d\x0a\x09\x5b\x73\x65\x65\x6b\x3d\x4e\x5d" \
-"\x20\x5b\x63\x6f\x6e\x76\x3d\x6e\x6f\x74\x72\x75\x6e\x63\x7c\x6e" \
-"\x6f\x65\x72\x72\x6f\x72\x7c\x73\x79\x6e\x63\x7c\x66\x73\x79\x6e" \
-"\x63\x5d\x0a\x0a\x43\x6f\x70\x79\x20\x61\x20\x66\x69\x6c\x65\x20" \
-"\x77\x69\x74\x68\x20\x63\x6f\x6e\x76\x65\x72\x74\x69\x6e\x67\x20" \
-"\x61\x6e\x64\x20\x66\x6f\x72\x6d\x61\x74\x74\x69\x6e\x67\x0a\x0a" \
-"\x09\x69\x66\x3d\x46\x49\x4c\x45\x09\x09\x52\x65\x61\x64\x20\x66" \
-"\x72\x6f\x6d\x20\x46\x49\x4c\x45\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x73\x74\x64\x69\x6e\x0a\x09\x6f\x66\x3d\x46\x49" \
-"\x4c\x45\x09\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x46\x49\x4c" \
-"\x45\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x09\x62\x73\x3d\x4e\x09\x09\x52\x65\x61\x64\x20" \
-"\x61\x6e\x64\x20\x77\x72\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65" \
-"\x73\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x09\x69\x62\x73" \
-"\x3d\x4e\x09\x09\x52\x65\x61\x64\x20\x4e\x20\x62\x79\x74\x65\x73" \
-"\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x09\x6f\x62\x73\x3d" \
-"\x4e\x09\x09\x57\x72\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73" \
-"\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x09\x63\x6f\x75\x6e" \
-"\x74\x3d\x4e\x09\x09\x43\x6f\x70\x79\x20\x6f\x6e\x6c\x79\x20\x4e" \
-"\x20\x69\x6e\x70\x75\x74\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73" \
-"\x6b\x69\x70\x3d\x4e\x09\x09\x53\x6b\x69\x70\x20\x4e\x20\x69\x6e" \
-"\x70\x75\x74\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73\x65\x65\x6b" \
-"\x3d\x4e\x09\x09\x53\x6b\x69\x70\x20\x4e\x20\x6f\x75\x74\x70\x75" \
-"\x74\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x6e" \
-"\x6f\x74\x72\x75\x6e\x63\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x75" \
-"\x6e\x63\x61\x74\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c" \
-"\x65\x0a\x09\x63\x6f\x6e\x76\x3d\x6e\x6f\x65\x72\x72\x6f\x72\x09" \
-"\x43\x6f\x6e\x74\x69\x6e\x75\x65\x20\x61\x66\x74\x65\x72\x20\x72" \
-"\x65\x61\x64\x20\x65\x72\x72\x6f\x72\x73\x0a\x09\x63\x6f\x6e\x76" \
-"\x3d\x73\x79\x6e\x63\x09\x50\x61\x64\x20\x62\x6c\x6f\x63\x6b\x73" \
-"\x20\x77\x69\x74\x68\x20\x7a\x65\x72\x6f\x73\x0a\x09\x63\x6f\x6e" \
-"\x76\x3d\x66\x73\x79\x6e\x63\x09\x50\x68\x79\x73\x69\x63\x61\x6c" \
-"\x6c\x79\x20\x77\x72\x69\x74\x65\x20\x64\x61\x74\x61\x20\x6f\x75" \
-"\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x66\x69\x6e\x69\x73\x68\x69" \
-"\x6e\x67\x0a\x0a\x4e\x75\x6d\x62\x65\x72\x73\x20\x6d\x61\x79\x20" \
-"\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79\x20\x63" \
-"\x20\x28\x78\x31\x29\x2c\x20\x77\x20\x28\x78\x32\x29\x2c\x20\x62" \
-"\x20\x28\x78\x35\x31\x32\x29\x2c\x20\x6b\x44\x20\x28\x78\x31\x30" \
-"\x30\x30\x29\x2c\x20\x6b\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x0a" \
-"\x4d\x44\x20\x28\x78\x31\x30\x30\x30\x30\x30\x30\x29\x2c\x20\x4d" \
-"\x20\x28\x78\x31\x30\x34\x38\x35\x37\x36\x29\x2c\x20\x47\x44\x20" \
-"\x28\x78\x31\x30\x30\x30\x30\x30\x30\x30\x30\x30\x29\x20\x6f\x72" \
-"\x20\x47\x20\x28\x78\x31\x30\x37\x33\x37\x34\x31\x38\x32\x34\x29" \
-"\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55\x4c" \
-"\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65\x20" \
-"\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61\x63\x6b\x73\x29\x20" \
-"\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e\x0a" \
-"\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x76\x09\x56\x65" \
-"\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a" \
-"\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f\x72\x20\x75\x6e\x6c" \
-"\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x76" \
-"\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65\x61" \
-"\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72\x00\x41\x44\x44\x52" \
-"\x45\x53\x53\x20\x5b\x57\x49\x44\x54\x48\x20\x5b\x56\x41\x4c\x55" \
-"\x45\x5d\x5d\x0a\x0a\x52\x65\x61\x64\x2f\x77\x72\x69\x74\x65\x20" \
-"\x66\x72\x6f\x6d\x20\x70\x68\x79\x73\x69\x63\x61\x6c\x20\x61\x64" \
-"\x64\x72\x65\x73\x73\x0a\x0a\x09\x41\x44\x44\x52\x45\x53\x53\x09" \
-"\x41\x64\x64\x72\x65\x73\x73\x20\x74\x6f\x20\x61\x63\x74\x20\x75" \
-"\x70\x6f\x6e\x0a\x09\x57\x49\x44\x54\x48\x09\x57\x69\x64\x74\x68" \
-"\x20\x28\x38\x2f\x31\x36\x2f\x2e\x2e\x2e\x29\x0a\x09\x56\x41\x4c" \
-"\x55\x45\x09\x44\x61\x74\x61\x20\x74\x6f\x20\x62\x65\x20\x77\x72" \
-"\x69\x74\x74\x65\x6e\x00\x5b\x2d\x50\x6b\x6d\x68\x61\x69\x5d\x20" \
-"\x5b\x2d\x42\x20\x53\x49\x5a\x45\x5d\x20\x5b\x46\x49\x4c\x45\x53" \
-"\x59\x53\x54\x45\x4d\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74" \
-"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x75\x73\x61\x67" \
-"\x65\x20\x73\x74\x61\x74\x69\x73\x74\x69\x63\x73\x0a\x0a\x09\x2d" \
-"\x50\x09\x50\x4f\x53\x49\x58\x20\x6f\x75\x74\x70\x75\x74\x20\x66" \
-"\x6f\x72\x6d\x61\x74\x0a\x09\x2d\x6b\x09\x31\x30\x32\x34\x2d\x62" \
-"\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b\x73\x20\x28\x64\x65\x66\x61" \
-"\x75\x6c\x74\x29\x0a\x09\x2d\x6d\x09\x31\x4d\x2d\x62\x79\x74\x65" \
-"\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x2d\x68\x09\x48\x75\x6d\x61" \
-"\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x28\x65\x2e\x67\x2e" \
-"\x20\x31\x4b\x20\x32\x34\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x61" \
-"\x09\x53\x68\x6f\x77\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79" \
-"\x73\x74\x65\x6d\x73\x0a\x09\x2d\x69\x09\x49\x6e\x6f\x64\x65\x73" \
-"\x0a\x09\x2d\x42\x20\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x73" \
-"\x69\x7a\x65\x00\x5b\x2d\x61\x62\x42\x64\x69\x4e\x71\x72\x54\x73" \
-"\x74\x77\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x5b" \
-"\x2d\x53\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x55\x20\x4c\x49\x4e" \
-"\x45\x53\x5d\x20\x46\x49\x4c\x45\x31\x20\x46\x49\x4c\x45\x32\x0a" \
-"\x0a\x43\x6f\x6d\x70\x61\x72\x65\x20\x66\x69\x6c\x65\x73\x20\x6c" \
-"\x69\x6e\x65\x20\x62\x79\x20\x6c\x69\x6e\x65\x20\x61\x6e\x64\x20" \
-"\x6f\x75\x74\x70\x75\x74\x20\x74\x68\x65\x20\x64\x69\x66\x66\x65" \
-"\x72\x65\x6e\x63\x65\x73\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x74" \
-"\x68\x65\x6d\x2e\x0a\x54\x68\x69\x73\x20\x69\x6d\x70\x6c\x65\x6d" \
-"\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x73\x75\x70\x70\x6f\x72\x74" \
-"\x73\x20\x75\x6e\x69\x66\x69\x65\x64\x20\x64\x69\x66\x66\x73\x20" \
-"\x6f\x6e\x6c\x79\x2e\x0a\x0a\x09\x2d\x61\x09\x54\x72\x65\x61\x74" \
-"\x20\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x74\x65" \
-"\x78\x74\x0a\x09\x2d\x62\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x68" \
-"\x61\x6e\x67\x65\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x61\x6d\x6f" \
-"\x75\x6e\x74\x20\x6f\x66\x20\x77\x68\x69\x74\x65\x73\x70\x61\x63" \
-"\x65\x0a\x09\x2d\x42\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x68\x61" \
-"\x6e\x67\x65\x73\x20\x77\x68\x6f\x73\x65\x20\x6c\x69\x6e\x65\x73" \
-"\x20\x61\x72\x65\x20\x61\x6c\x6c\x20\x62\x6c\x61\x6e\x6b\x0a\x09" \
-"\x2d\x64\x09\x54\x72\x79\x20\x68\x61\x72\x64\x20\x74\x6f\x20\x66" \
-"\x69\x6e\x64\x20\x61\x20\x73\x6d\x61\x6c\x6c\x65\x72\x20\x73\x65" \
-"\x74\x20\x6f\x66\x20\x63\x68\x61\x6e\x67\x65\x73\x0a\x09\x2d\x69" \
-"\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x61\x73\x65\x20\x64\x69\x66" \
-"\x66\x65\x72\x65\x6e\x63\x65\x73\x0a\x09\x2d\x4c\x09\x55\x73\x65" \
-"\x20\x4c\x41\x42\x45\x4c\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f" \
-"\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x69" \
-"\x6e\x20\x74\x68\x65\x20\x75\x6e\x69\x66\x69\x65\x64\x20\x68\x65" \
-"\x61\x64\x65\x72\x0a\x09\x2d\x4e\x09\x54\x72\x65\x61\x74\x20\x61" \
-"\x62\x73\x65\x6e\x74\x20\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x65" \
-"\x6d\x70\x74\x79\x0a\x09\x2d\x71\x09\x4f\x75\x74\x70\x75\x74\x20" \
-"\x6f\x6e\x6c\x79\x20\x77\x68\x65\x74\x68\x65\x72\x20\x66\x69\x6c" \
-"\x65\x73\x20\x64\x69\x66\x66\x65\x72\x0a\x09\x2d\x72\x09\x52\x65" \
-"\x63\x75\x72\x73\x65\x0a\x09\x2d\x53\x09\x53\x74\x61\x72\x74\x20" \
-"\x77\x69\x74\x68\x20\x46\x49\x4c\x45\x20\x77\x68\x65\x6e\x20\x63" \
-"\x6f\x6d\x70\x61\x72\x69\x6e\x67\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x69\x65\x73\x0a\x09\x2d\x54\x09\x4d\x61\x6b\x65\x20\x74\x61" \
-"\x62\x73\x20\x6c\x69\x6e\x65\x20\x75\x70\x20\x62\x79\x20\x70\x72" \
-"\x65\x66\x69\x78\x69\x6e\x67\x20\x61\x20\x74\x61\x62\x20\x77\x68" \
-"\x65\x6e\x20\x6e\x65\x63\x65\x73\x73\x61\x72\x79\x0a\x09\x2d\x73" \
-"\x09\x52\x65\x70\x6f\x72\x74\x20\x77\x68\x65\x6e\x20\x74\x77\x6f" \
-"\x20\x66\x69\x6c\x65\x73\x20\x61\x72\x65\x20\x74\x68\x65\x20\x73" \
-"\x61\x6d\x65\x0a\x09\x2d\x74\x09\x45\x78\x70\x61\x6e\x64\x20\x74" \
-"\x61\x62\x73\x20\x74\x6f\x20\x73\x70\x61\x63\x65\x73\x20\x69\x6e" \
-"\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d\x55\x09\x4f\x75\x74\x70" \
-"\x75\x74\x20\x4c\x49\x4e\x45\x53\x20\x6c\x69\x6e\x65\x73\x20\x6f" \
-"\x66\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a\x09\x2d\x77\x09\x49\x67" \
-"\x6e\x6f\x72\x65\x20\x61\x6c\x6c\x20\x77\x68\x69\x74\x65\x73\x70" \
-"\x61\x63\x65\x00\x46\x49\x4c\x45\x4e\x41\x4d\x45\x0a\x0a\x53\x74" \
-"\x72\x69\x70\x20\x6e\x6f\x6e\x2d\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x79\x20\x73\x75\x66\x66\x69\x78\x20\x66\x72\x6f\x6d\x20\x46\x49" \
-"\x4c\x45\x4e\x41\x4d\x45\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x6e\x20" \
-"\x4c\x45\x56\x45\x4c\x5d\x20\x5b\x2d\x72\x5d\x20\x5b\x2d\x73\x20" \
-"\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x43\x5d\x0a\x0a\x50\x72\x69\x6e" \
-"\x74\x20\x6f\x72\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x20\x74\x68\x65" \
-"\x20\x6b\x65\x72\x6e\x65\x6c\x20\x72\x69\x6e\x67\x20\x62\x75\x66" \
-"\x66\x65\x72\x0a\x0a\x09\x2d\x63\x09\x09\x43\x6c\x65\x61\x72\x20" \
-"\x72\x69\x6e\x67\x20\x62\x75\x66\x66\x65\x72\x20\x61\x66\x74\x65" \
-"\x72\x20\x70\x72\x69\x6e\x74\x69\x6e\x67\x0a\x09\x2d\x6e\x20\x4c" \
-"\x45\x56\x45\x4c\x09\x53\x65\x74\x20\x63\x6f\x6e\x73\x6f\x6c\x65" \
-"\x20\x6c\x6f\x67\x67\x69\x6e\x67\x20\x6c\x65\x76\x65\x6c\x0a\x09" \
-"\x2d\x72\x09\x09\x53\x68\x6f\x77\x20\x6c\x65\x76\x65\x6c\x20\x70" \
-"\x72\x65\x66\x69\x78\x0a\x09\x2d\x73\x20\x53\x49\x5a\x45\x09\x09" \
-"\x42\x75\x66\x66\x65\x72\x20\x73\x69\x7a\x65\x0a\x09\x2d\x43\x09" \
-"\x09\x43\x6f\x6c\x6f\x72\x65\x64\x20\x6f\x75\x74\x70\x75\x74\x00" \
-"\x5b\x2d\x75\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x43\x6f" \
-"\x6e\x76\x65\x72\x74\x20\x46\x49\x4c\x45\x20\x69\x6e\x2d\x70\x6c" \
-"\x61\x63\x65\x20\x66\x72\x6f\x6d\x20\x44\x4f\x53\x20\x74\x6f\x20" \
-"\x55\x6e\x69\x78\x20\x66\x6f\x72\x6d\x61\x74\x2e\x0a\x57\x68\x65" \
-"\x6e\x20\x6e\x6f\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x67\x69\x76" \
-"\x65\x6e\x2c\x20\x75\x73\x65\x20\x73\x74\x64\x69\x6e\x2f\x73\x74" \
-"\x64\x6f\x75\x74\x2e\x0a\x0a\x09\x2d\x75\x09\x64\x6f\x73\x32\x75" \
-"\x6e\x69\x78\x0a\x09\x2d\x64\x09\x75\x6e\x69\x78\x32\x64\x6f\x73" \
-"\x00\x5b\x2d\x61\x48\x4c\x64\x63\x6c\x73\x78\x68\x6d\x6b\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x75\x6d\x6d\x61" \
-"\x72\x69\x7a\x65\x20\x64\x69\x73\x6b\x20\x73\x70\x61\x63\x65\x20" \
-"\x75\x73\x65\x64\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49" \
-"\x4c\x45\x20\x61\x6e\x64\x2f\x6f\x72\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x2e\x0a\x44\x69\x73\x6b\x20\x73\x70\x61\x63\x65\x20" \
-"\x69\x73\x20\x70\x72\x69\x6e\x74\x65\x64\x20\x69\x6e\x20\x75\x6e" \
-"\x69\x74\x73\x20\x6f\x66\x20\x31\x30\x32\x34\x20\x62\x79\x74\x65" \
-"\x73\x2e\x0a\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20\x66\x69\x6c" \
-"\x65\x20\x73\x69\x7a\x65\x73\x20\x74\x6f\x6f\x0a\x09\x2d\x4c\x09" \
+"\x45\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f\x70\x79\x20" \
+"\x53\x4f\x55\x52\x43\x45\x28\x73\x29\x20\x74\x6f\x20\x44\x45\x53" \
+"\x54\x0a\x0a\x09\x2d\x61\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x2d" \
+"\x64\x70\x52\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52\x65\x63\x75\x72" \
+"\x73\x65\x0a\x09\x2d\x64\x2c\x2d\x50\x09\x50\x72\x65\x73\x65\x72" \
+"\x76\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x28\x64\x65\x66" \
+"\x61\x75\x6c\x74\x20\x69\x66\x20\x2d\x52\x29\x0a\x09\x2d\x4c\x09" \
"\x46\x6f\x6c\x6c\x6f\x77\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69" \
"\x6e\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73" \
"\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61" \
-"\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64\x20\x4e\x09\x4c\x69" \
-"\x6d\x69\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x64\x69" \
-"\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x28\x61\x6e\x64\x20\x66" \
-"\x69\x6c\x65\x73\x20\x77\x69\x74\x68\x20\x2d\x61\x29\x20\x6f\x66" \
-"\x20\x64\x65\x70\x74\x68\x20\x3c\x20\x4e\x0a\x09\x2d\x63\x09\x53" \
-"\x68\x6f\x77\x20\x67\x72\x61\x6e\x64\x20\x74\x6f\x74\x61\x6c\x0a" \
-"\x09\x2d\x6c\x09\x43\x6f\x75\x6e\x74\x20\x73\x69\x7a\x65\x73\x20" \
-"\x6d\x61\x6e\x79\x20\x74\x69\x6d\x65\x73\x20\x69\x66\x20\x68\x61" \
-"\x72\x64\x20\x6c\x69\x6e\x6b\x65\x64\x0a\x09\x2d\x73\x09\x44\x69" \
-"\x73\x70\x6c\x61\x79\x20\x6f\x6e\x6c\x79\x20\x61\x20\x74\x6f\x74" \
-"\x61\x6c\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x61\x72\x67\x75" \
-"\x6d\x65\x6e\x74\x0a\x09\x2d\x78\x09\x53\x6b\x69\x70\x20\x64\x69" \
-"\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x6f\x6e\x20\x64\x69\x66" \
-"\x66\x65\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x73\x0a\x09\x2d\x68\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20" \
-"\x68\x75\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66" \
-"\x6f\x72\x6d\x61\x74\x20\x28\x65\x2e\x67\x2e\x2c\x20\x31\x4b\x20" \
-"\x32\x34\x33\x4d\x20\x32\x47\x20\x29\x0a\x09\x2d\x6d\x09\x53\x69" \
-"\x7a\x65\x73\x20\x69\x6e\x20\x6d\x65\x67\x61\x62\x79\x74\x65\x73" \
-"\x0a\x09\x2d\x6b\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x6b\x69" \
-"\x6c\x6f\x62\x79\x74\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x29\x00\x5b\x2d\x6e\x65\x45\x5d\x20\x5b\x41\x52\x47\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x73\x70\x65" \
-"\x63\x69\x66\x69\x65\x64\x20\x41\x52\x47\x73\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72" \
-"\x65\x73\x73\x20\x74\x72\x61\x69\x6c\x69\x6e\x67\x20\x6e\x65\x77" \
-"\x6c\x69\x6e\x65\x0a\x09\x2d\x65\x09\x49\x6e\x74\x65\x72\x70\x72" \
-"\x65\x74\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68\x20\x65\x73\x63" \
-"\x61\x70\x65\x73\x20\x28\x69\x2e\x65\x2e\x2c\x20\x5c\x74\x3d\x74" \
-"\x61\x62\x29\x0a\x09\x2d\x45\x09\x44\x6f\x6e\x27\x74\x20\x69\x6e" \
-"\x74\x65\x72\x70\x72\x65\x74\x20\x62\x61\x63\x6b\x73\x6c\x61\x73" \
-"\x68\x20\x65\x73\x63\x61\x70\x65\x73\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x29\x00\x08\x00\x5b\x2d\x69\x75\x5d\x20\x5b\x2d\x5d\x20" \
-"\x5b\x6e\x61\x6d\x65\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x20" \
-"\x5b\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65" \
-"\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x6f\x72\x20\x72\x75" \
-"\x6e\x20\x50\x52\x4f\x47\x20\x61\x66\x74\x65\x72\x20\x73\x65\x74" \
-"\x74\x69\x6e\x67\x20\x75\x70\x0a\x74\x68\x65\x20\x73\x70\x65\x63" \
-"\x69\x66\x69\x65\x64\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e" \
-"\x74\x0a\x0a\x09\x2d\x2c\x20\x2d\x69\x09\x53\x74\x61\x72\x74\x20" \
-"\x77\x69\x74\x68\x20\x61\x6e\x20\x65\x6d\x70\x74\x79\x20\x65\x6e" \
-"\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x0a\x09\x2d\x75\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x66\x72" \
-"\x6f\x6d\x20\x74\x68\x65\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65" \
-"\x6e\x74\x00\x5b\x2d\x69\x5d\x20\x5b\x2d\x74\x20\x4e\x5d\x20\x5b" \
-"\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x76\x65\x72" \
-"\x74\x20\x74\x61\x62\x73\x20\x74\x6f\x20\x73\x70\x61\x63\x65\x73" \
-"\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x0a\x0a\x09\x2d\x69\x09\x44\x6f\x6e\x27\x74\x20\x63" \
-"\x6f\x6e\x76\x65\x72\x74\x20\x74\x61\x62\x73\x20\x61\x66\x74\x65" \
-"\x72\x20\x6e\x6f\x6e\x20\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x74" \
-"\x09\x54\x61\x62\x73\x74\x6f\x70\x73\x20\x65\x76\x65\x72\x79\x20" \
-"\x4e\x20\x63\x68\x61\x72\x73\x00\x45\x58\x50\x52\x45\x53\x53\x49" \
-"\x4f\x4e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x76\x61" \
-"\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53\x49\x4f" \
-"\x4e\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x45\x58\x50" \
-"\x52\x45\x53\x53\x49\x4f\x4e\x20\x6d\x61\x79\x20\x62\x65\x3a\x0a" \
-"\x09\x41\x52\x47\x31\x20\x7c\x20\x41\x52\x47\x32\x09\x41\x52\x47" \
-"\x31\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6e\x65\x69\x74\x68" \
-"\x65\x72\x20\x6e\x75\x6c\x6c\x20\x6e\x6f\x72\x20\x30\x2c\x20\x6f" \
-"\x74\x68\x65\x72\x77\x69\x73\x65\x20\x41\x52\x47\x32\x0a\x09\x41" \
-"\x52\x47\x31\x20\x26\x20\x41\x52\x47\x32\x09\x41\x52\x47\x31\x20" \
-"\x69\x66\x20\x6e\x65\x69\x74\x68\x65\x72\x20\x61\x72\x67\x75\x6d" \
-"\x65\x6e\x74\x20\x69\x73\x20\x6e\x75\x6c\x6c\x20\x6f\x72\x20\x30" \
-"\x2c\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x30\x0a\x09\x41" \
-"\x52\x47\x31\x20\x3c\x20\x41\x52\x47\x32\x09\x31\x20\x69\x66\x20" \
-"\x41\x52\x47\x31\x20\x69\x73\x20\x6c\x65\x73\x73\x20\x74\x68\x61" \
-"\x6e\x20\x41\x52\x47\x32\x2c\x20\x65\x6c\x73\x65\x20\x30\x2e\x20" \
-"\x53\x69\x6d\x69\x6c\x61\x72\x6c\x79\x3a\x0a\x09\x41\x52\x47\x31" \
-"\x20\x3c\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3d" \
-"\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x21\x3d\x20\x41" \
-"\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3e\x3d\x20\x41\x52\x47" \
-"\x32\x0a\x09\x41\x52\x47\x31\x20\x3e\x20\x41\x52\x47\x32\x0a\x09" \
-"\x41\x52\x47\x31\x20\x2b\x20\x41\x52\x47\x32\x09\x53\x75\x6d\x20" \
-"\x6f\x66\x20\x41\x52\x47\x31\x20\x61\x6e\x64\x20\x41\x52\x47\x32" \
-"\x2e\x20\x53\x69\x6d\x69\x6c\x61\x72\x6c\x79\x3a\x0a\x09\x41\x52" \
-"\x47\x31\x20\x2d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20" \
-"\x2a\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2f\x20\x41" \
-"\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x25\x20\x41\x52\x47\x32" \
-"\x0a\x09\x53\x54\x52\x49\x4e\x47\x20\x3a\x20\x52\x45\x47\x45\x58" \
-"\x50\x09\x09\x41\x6e\x63\x68\x6f\x72\x65\x64\x20\x70\x61\x74\x74" \
-"\x65\x72\x6e\x20\x6d\x61\x74\x63\x68\x20\x6f\x66\x20\x52\x45\x47" \
-"\x45\x58\x50\x20\x69\x6e\x20\x53\x54\x52\x49\x4e\x47\x0a\x09\x6d" \
-"\x61\x74\x63\x68\x20\x53\x54\x52\x49\x4e\x47\x20\x52\x45\x47\x45" \
-"\x58\x50\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x53\x54\x52\x49\x4e" \
-"\x47\x20\x3a\x20\x52\x45\x47\x45\x58\x50\x0a\x09\x73\x75\x62\x73" \
-"\x74\x72\x20\x53\x54\x52\x49\x4e\x47\x20\x50\x4f\x53\x20\x4c\x45" \
-"\x4e\x47\x54\x48\x20\x53\x75\x62\x73\x74\x72\x69\x6e\x67\x20\x6f" \
-"\x66\x20\x53\x54\x52\x49\x4e\x47\x2c\x20\x50\x4f\x53\x20\x63\x6f" \
-"\x75\x6e\x74\x65\x64\x20\x66\x72\x6f\x6d\x20\x31\x0a\x09\x69\x6e" \
-"\x64\x65\x78\x20\x53\x54\x52\x49\x4e\x47\x20\x43\x48\x41\x52\x53" \
-"\x09\x49\x6e\x64\x65\x78\x20\x69\x6e\x20\x53\x54\x52\x49\x4e\x47" \
-"\x20\x77\x68\x65\x72\x65\x20\x61\x6e\x79\x20\x43\x48\x41\x52\x53" \
-"\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x6f\x72\x20\x30\x0a" \
-"\x09\x6c\x65\x6e\x67\x74\x68\x20\x53\x54\x52\x49\x4e\x47\x09\x09" \
-"\x4c\x65\x6e\x67\x74\x68\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47" \
-"\x0a\x09\x71\x75\x6f\x74\x65\x20\x54\x4f\x4b\x45\x4e\x09\x09\x49" \
-"\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x54\x4f\x4b\x45\x4e\x20\x61" \
-"\x73\x20\x61\x20\x73\x74\x72\x69\x6e\x67\x2c\x20\x65\x76\x65\x6e" \
-"\x20\x69\x66\x0a\x09\x09\x09\x09\x69\x74\x20\x69\x73\x20\x61\x20" \
-"\x6b\x65\x79\x77\x6f\x72\x64\x20\x6c\x69\x6b\x65\x20\x27\x6d\x61" \
-"\x74\x63\x68\x27\x20\x6f\x72\x20\x61\x6e\x0a\x09\x09\x09\x09\x6f" \
-"\x70\x65\x72\x61\x74\x6f\x72\x20\x6c\x69\x6b\x65\x20\x27\x2f\x27" \
-"\x0a\x09\x28\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x29\x09\x09" \
-"\x56\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53" \
-"\x49\x4f\x4e\x0a\x0a\x42\x65\x77\x61\x72\x65\x20\x74\x68\x61\x74" \
-"\x20\x6d\x61\x6e\x79\x20\x6f\x70\x65\x72\x61\x74\x6f\x72\x73\x20" \
-"\x6e\x65\x65\x64\x20\x74\x6f\x20\x62\x65\x20\x65\x73\x63\x61\x70" \
-"\x65\x64\x20\x6f\x72\x20\x71\x75\x6f\x74\x65\x64\x20\x66\x6f\x72" \
-"\x20\x73\x68\x65\x6c\x6c\x73\x2e\x0a\x43\x6f\x6d\x70\x61\x72\x69" \
-"\x73\x6f\x6e\x73\x20\x61\x72\x65\x20\x61\x72\x69\x74\x68\x6d\x65" \
-"\x74\x69\x63\x20\x69\x66\x20\x62\x6f\x74\x68\x20\x41\x52\x47\x73" \
-"\x20\x61\x72\x65\x20\x6e\x75\x6d\x62\x65\x72\x73\x2c\x20\x65\x6c" \
-"\x73\x65\x0a\x6c\x65\x78\x69\x63\x6f\x67\x72\x61\x70\x68\x69\x63" \
-"\x61\x6c\x2e\x20\x50\x61\x74\x74\x65\x72\x6e\x20\x6d\x61\x74\x63" \
-"\x68\x65\x73\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x73" \
-"\x74\x72\x69\x6e\x67\x20\x6d\x61\x74\x63\x68\x65\x64\x20\x62\x65" \
-"\x74\x77\x65\x65\x6e\x0a\x5c\x28\x20\x61\x6e\x64\x20\x5c\x29\x20" \
-"\x6f\x72\x20\x6e\x75\x6c\x6c\x3b\x20\x69\x66\x20\x5c\x28\x20\x61" \
-"\x6e\x64\x20\x5c\x29\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x75\x73" \
-"\x65\x64\x2c\x20\x74\x68\x65\x79\x20\x72\x65\x74\x75\x72\x6e\x20" \
-"\x74\x68\x65\x20\x6e\x75\x6d\x62\x65\x72\x0a\x6f\x66\x20\x63\x68" \
-"\x61\x72\x61\x63\x74\x65\x72\x73\x20\x6d\x61\x74\x63\x68\x65\x64" \
-"\x20\x6f\x72\x20\x30\x2e\x00\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20" \
-"\x61\x6e\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x20\x6f\x66\x20" \
-"\x46\x41\x4c\x53\x45\x20\x28\x31\x29\x00\x5b\x2d\x75\x6c\x5d\x20" \
-"\x5b\x2d\x43\x20\x43\x59\x4c\x49\x4e\x44\x45\x52\x53\x5d\x20\x5b" \
-"\x2d\x48\x20\x48\x45\x41\x44\x53\x5d\x20\x5b\x2d\x53\x20\x53\x45" \
-"\x43\x54\x4f\x52\x53\x5d\x20\x5b\x2d\x62\x20\x53\x53\x5a\x5d\x20" \
-"\x44\x49\x53\x4b\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x70\x61\x72" \
-"\x74\x69\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c\x65\x0a\x0a\x09\x2d" \
-"\x75\x09\x09\x53\x74\x61\x72\x74\x20\x61\x6e\x64\x20\x45\x6e\x64" \
-"\x20\x61\x72\x65\x20\x69\x6e\x20\x73\x65\x63\x74\x6f\x72\x73\x20" \
-"\x28\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x63\x79\x6c\x69" \
-"\x6e\x64\x65\x72\x73\x29\x0a\x09\x2d\x6c\x09\x09\x53\x68\x6f\x77" \
-"\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c\x65" \
-"\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x44\x49\x53\x4b\x2c\x20" \
-"\x74\x68\x65\x6e\x20\x65\x78\x69\x74\x0a\x09\x2d\x62\x20\x32\x30" \
-"\x34\x38\x09\x09\x28\x66\x6f\x72\x20\x63\x65\x72\x74\x61\x69\x6e" \
-"\x20\x4d\x4f\x20\x64\x69\x73\x6b\x73\x29\x20\x75\x73\x65\x20\x32" \
-"\x30\x34\x38\x2d\x62\x79\x74\x65\x20\x73\x65\x63\x74\x6f\x72\x73" \
-"\x0a\x09\x2d\x43\x20\x43\x59\x4c\x49\x4e\x44\x45\x52\x53\x09\x53" \
-"\x65\x74\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x63\x79\x6c" \
-"\x69\x6e\x64\x65\x72\x73\x2f\x68\x65\x61\x64\x73\x2f\x73\x65\x63" \
-"\x74\x6f\x72\x73\x0a\x09\x2d\x48\x20\x48\x45\x41\x44\x53\x0a\x09" \
-"\x2d\x53\x20\x53\x45\x43\x54\x4f\x52\x53\x00\x08\x00\x5b\x50\x41" \
-"\x54\x48\x5d\x2e\x2e\x2e\x20\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d" \
-"\x20\x5b\x41\x43\x54\x49\x4f\x4e\x53\x5d\x0a\x0a\x53\x65\x61\x72" \
-"\x63\x68\x20\x66\x6f\x72\x20\x66\x69\x6c\x65\x73\x20\x61\x6e\x64" \
-"\x20\x70\x65\x72\x66\x6f\x72\x6d\x20\x61\x63\x74\x69\x6f\x6e\x73" \
-"\x20\x6f\x6e\x20\x74\x68\x65\x6d\x2e\x0a\x46\x69\x72\x73\x74\x20" \
-"\x66\x61\x69\x6c\x65\x64\x20\x61\x63\x74\x69\x6f\x6e\x20\x73\x74" \
-"\x6f\x70\x73\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x20\x6f" \
-"\x66\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x66\x69\x6c\x65\x2e\x0a" \
-"\x44\x65\x66\x61\x75\x6c\x74\x73\x3a\x20\x50\x41\x54\x48\x20\x69" \
-"\x73\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x2c\x20\x61\x63\x74\x69\x6f\x6e\x20\x69\x73\x20\x27" \
-"\x2d\x70\x72\x69\x6e\x74\x27\x0a\x0a\x09\x2d\x66\x6f\x6c\x6c\x6f" \
-"\x77\x09\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e" \
-"\x6b\x73\x0a\x09\x2d\x78\x64\x65\x76\x09\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x64\x65\x73\x63\x65\x6e\x64\x20\x64\x69\x72\x65\x63\x74\x6f" \
-"\x72\x69\x65\x73\x20\x6f\x6e\x20\x6f\x74\x68\x65\x72\x20\x66\x69" \
-"\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d\x6d\x61\x78\x64" \
-"\x65\x70\x74\x68\x20\x4e\x09\x44\x65\x73\x63\x65\x6e\x64\x20\x61" \
-"\x74\x20\x6d\x6f\x73\x74\x20\x4e\x20\x6c\x65\x76\x65\x6c\x73\x2e" \
-"\x20\x2d\x6d\x61\x78\x64\x65\x70\x74\x68\x20\x30\x20\x61\x70\x70" \
-"\x6c\x69\x65\x73\x0a\x09\x09\x09\x61\x63\x74\x69\x6f\x6e\x73\x20" \
-"\x74\x6f\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20" \
-"\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x20\x6f\x6e\x6c\x79\x0a\x09" \
-"\x2d\x6d\x69\x6e\x64\x65\x70\x74\x68\x20\x4e\x09\x44\x6f\x6e\x27" \
-"\x74\x20\x61\x63\x74\x20\x6f\x6e\x20\x66\x69\x72\x73\x74\x20\x4e" \
-"\x20\x6c\x65\x76\x65\x6c\x73\x0a\x09\x2d\x64\x65\x70\x74\x68\x09" \
-"\x09\x41\x63\x74\x20\x6f\x6e\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x79\x20\x2a\x61\x66\x74\x65\x72\x2a\x20\x74\x72\x61\x76\x65\x72" \
-"\x73\x69\x6e\x67\x20\x69\x74\x0a\x0a\x41\x63\x74\x69\x6f\x6e\x73" \
-"\x3a\x0a\x09\x28\x20\x41\x43\x54\x49\x4f\x4e\x53\x20\x29\x09\x47" \
-"\x72\x6f\x75\x70\x20\x61\x63\x74\x69\x6f\x6e\x73\x20\x66\x6f\x72" \
-"\x20\x2d\x6f\x20\x2f\x20\x2d\x61\x0a\x09\x21\x20\x41\x43\x54\x09" \
-"\x09\x49\x6e\x76\x65\x72\x74\x20\x41\x43\x54\x27\x73\x20\x73\x75" \
-"\x63\x63\x65\x73\x73\x2f\x66\x61\x69\x6c\x75\x72\x65\x0a\x09\x41" \
-"\x43\x54\x31\x20\x5b\x2d\x61\x5d\x20\x41\x43\x54\x32\x09\x49\x66" \
-"\x20\x41\x43\x54\x31\x20\x66\x61\x69\x6c\x73\x2c\x20\x73\x74\x6f" \
-"\x70\x2c\x20\x65\x6c\x73\x65\x20\x64\x6f\x20\x41\x43\x54\x32\x0a" \
-"\x09\x41\x43\x54\x31\x20\x2d\x6f\x20\x41\x43\x54\x32\x09\x49\x66" \
-"\x20\x41\x43\x54\x31\x20\x73\x75\x63\x63\x65\x65\x64\x73\x2c\x20" \
-"\x73\x74\x6f\x70\x2c\x20\x65\x6c\x73\x65\x20\x64\x6f\x20\x41\x43" \
-"\x54\x32\x0a\x09\x09\x09\x4e\x6f\x74\x65\x3a\x20\x2d\x61\x20\x68" \
-"\x61\x73\x20\x68\x69\x67\x68\x65\x72\x20\x70\x72\x69\x6f\x72\x69" \
-"\x74\x79\x20\x74\x68\x61\x6e\x20\x2d\x6f\x0a\x09\x2d\x6e\x61\x6d" \
-"\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20" \
-"\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x77\x2f\x6f\x20\x64" \
-"\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x61\x6d\x65\x29\x20\x74" \
-"\x6f\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x69\x6e\x61\x6d" \
-"\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x43\x61\x73\x65\x20\x69" \
-"\x6e\x73\x65\x6e\x73\x69\x74\x69\x76\x65\x20\x2d\x6e\x61\x6d\x65" \
-"\x0a\x09\x2d\x70\x61\x74\x68\x20\x50\x41\x54\x54\x45\x52\x4e\x09" \
-"\x4d\x61\x74\x63\x68\x20\x70\x61\x74\x68\x20\x74\x6f\x20\x50\x41" \
-"\x54\x54\x45\x52\x4e\x0a\x09\x2d\x69\x70\x61\x74\x68\x20\x50\x41" \
-"\x54\x54\x45\x52\x4e\x09\x43\x61\x73\x65\x20\x69\x6e\x73\x65\x6e" \
-"\x73\x69\x74\x69\x76\x65\x20\x2d\x70\x61\x74\x68\x0a\x09\x2d\x72" \
-"\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74" \
-"\x63\x68\x20\x70\x61\x74\x68\x20\x74\x6f\x20\x72\x65\x67\x65\x78" \
-"\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x09\x2d\x74\x79\x70\x65\x20" \
-"\x58\x09\x09\x46\x69\x6c\x65\x20\x74\x79\x70\x65\x20\x69\x73\x20" \
-"\x58\x20\x28\x6f\x6e\x65\x20\x6f\x66\x3a\x20\x66\x2c\x64\x2c\x6c" \
-"\x2c\x62\x2c\x63\x2c\x2e\x2e\x2e\x29\x0a\x09\x2d\x70\x65\x72\x6d" \
-"\x20\x4d\x41\x53\x4b\x09\x41\x74\x20\x6c\x65\x61\x73\x74\x20\x6f" \
-"\x6e\x65\x20\x6d\x61\x73\x6b\x20\x62\x69\x74\x20\x28\x2b\x4d\x41" \
-"\x53\x4b\x29\x2c\x20\x61\x6c\x6c\x20\x62\x69\x74\x73\x20\x28\x2d" \
-"\x4d\x41\x53\x4b\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61" \
-"\x63\x74\x6c\x79\x20\x4d\x41\x53\x4b\x20\x62\x69\x74\x73\x20\x61" \
-"\x72\x65\x20\x73\x65\x74\x20\x69\x6e\x20\x66\x69\x6c\x65\x27\x73" \
-"\x20\x6d\x6f\x64\x65\x0a\x09\x2d\x6d\x74\x69\x6d\x65\x20\x44\x41" \
-"\x59\x53\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x67\x72\x65\x61" \
-"\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c" \
-"\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09" \
-"\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x4e\x20\x64" \
-"\x61\x79\x73\x20\x69\x6e\x20\x74\x68\x65\x20\x70\x61\x73\x74\x0a" \
-"\x09\x2d\x6d\x6d\x69\x6e\x20\x4d\x49\x4e\x53\x09\x6d\x74\x69\x6d" \
-"\x65\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61" \
-"\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20\x74\x68\x61" \
-"\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78" \
-"\x61\x63\x74\x6c\x79\x20\x4e\x20\x6d\x69\x6e\x75\x74\x65\x73\x20" \
-"\x69\x6e\x20\x74\x68\x65\x20\x70\x61\x73\x74\x0a\x09\x2d\x6e\x65" \
-"\x77\x65\x72\x20\x46\x49\x4c\x45\x09\x6d\x74\x69\x6d\x65\x20\x69" \
-"\x73\x20\x6d\x6f\x72\x65\x20\x72\x65\x63\x65\x6e\x74\x20\x74\x68" \
-"\x61\x6e\x20\x46\x49\x4c\x45\x27\x73\x0a\x09\x2d\x75\x73\x65\x72" \
-"\x20\x4e\x41\x4d\x45\x2f\x49\x44\x09\x46\x69\x6c\x65\x20\x69\x73" \
-"\x20\x6f\x77\x6e\x65\x64\x20\x62\x79\x20\x67\x69\x76\x65\x6e\x20" \
-"\x75\x73\x65\x72\x0a\x09\x2d\x67\x72\x6f\x75\x70\x20\x4e\x41\x4d" \
-"\x45\x2f\x49\x44\x09\x46\x69\x6c\x65\x20\x69\x73\x20\x6f\x77\x6e" \
-"\x65\x64\x20\x62\x79\x20\x67\x69\x76\x65\x6e\x20\x67\x72\x6f\x75" \
-"\x70\x0a\x09\x2d\x73\x69\x7a\x65\x20\x4e\x5b\x62\x63\x6b\x5d\x09" \
-"\x46\x69\x6c\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20\x4e\x20\x28" \
-"\x63\x3a\x62\x79\x74\x65\x73\x2c\x6b\x3a\x6b\x62\x79\x74\x65\x73" \
-"\x2c\x62\x3a\x35\x31\x32\x20\x62\x79\x74\x65\x73\x28\x64\x65\x66" \
-"\x2e\x29\x29\x0a\x09\x09\x09\x2b\x2f\x2d\x4e\x3a\x20\x66\x69\x6c" \
-"\x65\x20\x73\x69\x7a\x65\x20\x69\x73\x20\x62\x69\x67\x67\x65\x72" \
-"\x2f\x73\x6d\x61\x6c\x6c\x65\x72\x20\x74\x68\x61\x6e\x20\x4e\x0a" \
-"\x09\x2d\x70\x72\x75\x6e\x65\x09\x09\x49\x66\x20\x63\x75\x72\x72" \
-"\x65\x6e\x74\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x64\x69\x72\x65" \
-"\x63\x74\x6f\x72\x79\x2c\x20\x64\x6f\x6e\x27\x74\x20\x64\x65\x73" \
-"\x63\x65\x6e\x64\x20\x69\x6e\x74\x6f\x20\x69\x74\x0a\x49\x66\x20" \
-"\x6e\x6f\x6e\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c" \
-"\x6f\x77\x69\x6e\x67\x20\x61\x63\x74\x69\x6f\x6e\x73\x20\x69\x73" \
-"\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x2c\x20\x2d\x70\x72\x69" \
-"\x6e\x74\x20\x69\x73\x20\x61\x73\x73\x75\x6d\x65\x64\x0a\x09\x2d" \
-"\x70\x72\x69\x6e\x74\x09\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x6c" \
-"\x65\x20\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x72\x69\x6e\x74\x30\x09" \
+"\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x70\x09\x50\x72\x65\x73" \
+"\x65\x72\x76\x65\x20\x66\x69\x6c\x65\x20\x61\x74\x74\x72\x69\x62" \
+"\x75\x74\x65\x73\x20\x69\x66\x20\x70\x6f\x73\x73\x69\x62\x6c\x65" \
+"\x0a\x09\x2d\x66\x09\x4f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09" \
+"\x2d\x69\x09\x50\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65" \
+"\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x6c\x2c\x2d" \
+"\x73\x09\x43\x72\x65\x61\x74\x65\x20\x28\x73\x79\x6d\x29\x6c\x69" \
+"\x6e\x6b\x73\x00\x5b\x2d\x64\x6d\x76\x75\x5d\x20\x5b\x2d\x46\x20" \
+"\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x48\x20\x6e\x65\x77\x63\x5d\x20" \
+"\x5b\x2d\x74\x69\x6f\x5d\x20\x5b\x45\x58\x54\x52\x5f\x46\x49\x4c" \
+"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x6f" \
+"\x72\x20\x6c\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f" \
+"\x6d\x20\x61\x20\x63\x70\x69\x6f\x20\x61\x72\x63\x68\x69\x76\x65" \
+"\x2c\x20\x6f\x72\x0a\x63\x72\x65\x61\x74\x65\x20\x61\x6e\x20\x61" \
+"\x72\x63\x68\x69\x76\x65\x20\x75\x73\x69\x6e\x67\x20\x66\x69\x6c" \
+"\x65\x20\x6c\x69\x73\x74\x20\x6f\x6e\x20\x73\x74\x64\x69\x6e\x0a" \
+"\x0a\x4d\x61\x69\x6e\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20" \
+"\x6d\x6f\x64\x65\x3a\x0a\x09\x2d\x74\x09\x4c\x69\x73\x74\x0a\x09" \
+"\x2d\x69\x09\x45\x78\x74\x72\x61\x63\x74\x20\x45\x58\x54\x52\x5f" \
+"\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x61\x6c\x6c\x29\x0a\x09" \
+"\x2d\x6f\x09\x43\x72\x65\x61\x74\x65\x20\x28\x72\x65\x71\x75\x69" \
+"\x72\x65\x73\x20\x2d\x48\x20\x6e\x65\x77\x63\x29\x0a\x09\x2d\x64" \
+"\x09\x4d\x61\x6b\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x64\x69" \
+"\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x6d\x09\x50\x72" \
+"\x65\x73\x65\x72\x76\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09\x2d\x76" \
+"\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x75\x09\x4f\x76\x65" \
+"\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x46\x20\x46\x49\x4c\x45\x09" \
+"\x49\x6e\x70\x75\x74\x20\x28\x2d\x74\x2c\x2d\x69\x2c\x2d\x70\x29" \
+"\x20\x6f\x72\x20\x6f\x75\x74\x70\x75\x74\x20\x28\x2d\x6f\x29\x20" \
+"\x66\x69\x6c\x65\x0a\x09\x2d\x48\x20\x6e\x65\x77\x63\x09\x41\x72" \
+"\x63\x68\x69\x76\x65\x20\x66\x6f\x72\x6d\x61\x74\x00\x5b\x4f\x50" \
+"\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
+"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x73\x65\x6c\x65\x63\x74\x65\x64" \
+"\x20\x66\x69\x65\x6c\x64\x73\x20\x66\x72\x6f\x6d\x20\x65\x61\x63" \
+"\x68\x20\x69\x6e\x70\x75\x74\x20\x46\x49\x4c\x45\x20\x74\x6f\x20" \
+"\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62\x20\x4c\x49\x53\x54" \
+"\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x62\x79\x74" \
+"\x65\x73\x20\x66\x72\x6f\x6d\x20\x4c\x49\x53\x54\x0a\x09\x2d\x63" \
+"\x20\x4c\x49\x53\x54\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c" \
+"\x79\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x66\x72\x6f" \
+"\x6d\x20\x4c\x49\x53\x54\x0a\x09\x2d\x64\x20\x43\x48\x41\x52\x09" \
+"\x55\x73\x65\x20\x43\x48\x41\x52\x20\x69\x6e\x73\x74\x65\x61\x64" \
+"\x20\x6f\x66\x20\x74\x61\x62\x20\x61\x73\x20\x74\x68\x65\x20\x66" \
+"\x69\x65\x6c\x64\x20\x64\x65\x6c\x69\x6d\x69\x74\x65\x72\x0a\x09" \
+"\x2d\x73\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x74" \
+"\x68\x65\x20\x6c\x69\x6e\x65\x73\x20\x63\x6f\x6e\x74\x61\x69\x6e" \
+"\x69\x6e\x67\x20\x64\x65\x6c\x69\x6d\x69\x74\x65\x72\x0a\x09\x2d" \
+"\x66\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x6f\x6e\x6c\x79\x20\x74" \
+"\x68\x65\x73\x65\x20\x66\x69\x65\x6c\x64\x73\x0a\x09\x2d\x6e\x09" \
+"\x49\x67\x6e\x6f\x72\x65\x64\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
+"\x5d\x20\x5b\x2b\x46\x4d\x54\x5d\x20\x5b\x54\x49\x4d\x45\x5d\x0a" \
+"\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x69\x6d\x65\x20\x28\x75" \
+"\x73\x69\x6e\x67\x20\x2b\x46\x4d\x54\x29\x2c\x20\x6f\x72\x20\x73" \
+"\x65\x74\x20\x74\x69\x6d\x65\x0a\x0a\x09\x5b\x2d\x73\x2c\x2d\x2d" \
+"\x73\x65\x74\x5d\x20\x54\x49\x4d\x45\x09\x53\x65\x74\x20\x74\x69" \
+"\x6d\x65\x20\x74\x6f\x20\x54\x49\x4d\x45\x0a\x09\x2d\x75\x2c\x2d" \
+"\x2d\x75\x74\x63\x09\x57\x6f\x72\x6b\x20\x69\x6e\x20\x55\x54\x43" \
+"\x20\x28\x64\x6f\x6e\x27\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20" \
+"\x74\x6f\x20\x6c\x6f\x63\x61\x6c\x20\x74\x69\x6d\x65\x29\x0a\x09" \
+"\x2d\x52\x2c\x2d\x2d\x72\x66\x63\x2d\x32\x38\x32\x32\x09\x4f\x75" \
+"\x74\x70\x75\x74\x20\x52\x46\x43\x2d\x32\x38\x32\x32\x20\x63\x6f" \
+"\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64\x61\x74\x65\x20\x73\x74\x72" \
+"\x69\x6e\x67\x0a\x09\x2d\x49\x5b\x53\x50\x45\x43\x5d\x09\x4f\x75" \
+"\x74\x70\x75\x74\x20\x49\x53\x4f\x2d\x38\x36\x30\x31\x20\x63\x6f" \
+"\x6d\x70\x6c\x69\x61\x6e\x74\x20\x64\x61\x74\x65\x20\x73\x74\x72" \
+"\x69\x6e\x67\x0a\x09\x09\x09\x53\x50\x45\x43\x3d\x27\x64\x61\x74" \
+"\x65\x27\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x20\x66\x6f\x72" \
+"\x20\x64\x61\x74\x65\x20\x6f\x6e\x6c\x79\x2c\x0a\x09\x09\x09\x27" \
+"\x68\x6f\x75\x72\x73\x27\x2c\x20\x27\x6d\x69\x6e\x75\x74\x65\x73" \
+"\x27\x2c\x20\x6f\x72\x20\x27\x73\x65\x63\x6f\x6e\x64\x73\x27\x20" \
+"\x66\x6f\x72\x20\x64\x61\x74\x65\x20\x61\x6e\x64\x0a\x09\x09\x09" \
+"\x74\x69\x6d\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x69\x6e\x64\x69" \
+"\x63\x61\x74\x65\x64\x20\x70\x72\x65\x63\x69\x73\x69\x6f\x6e\x0a" \
+"\x09\x2d\x72\x2c\x2d\x2d\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20" \
+"\x46\x49\x4c\x45\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x6c\x61\x73" \
+"\x74\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20\x74" \
+"\x69\x6d\x65\x20\x6f\x66\x20\x46\x49\x4c\x45\x0a\x09\x2d\x64\x2c" \
+"\x2d\x2d\x64\x61\x74\x65\x20\x54\x49\x4d\x45\x09\x44\x69\x73\x70" \
+"\x6c\x61\x79\x20\x54\x49\x4d\x45\x2c\x20\x6e\x6f\x74\x20\x27\x6e" \
+"\x6f\x77\x27\x0a\x09\x2d\x44\x20\x46\x4d\x54\x09\x09\x55\x73\x65" \
+"\x20\x46\x4d\x54\x20\x66\x6f\x72\x20\x2d\x64\x20\x54\x49\x4d\x45" \
+"\x20\x63\x6f\x6e\x76\x65\x72\x73\x69\x6f\x6e\x0a\x0a\x52\x65\x63" \
+"\x6f\x67\x6e\x69\x7a\x65\x64\x20\x54\x49\x4d\x45\x20\x66\x6f\x72" \
+"\x6d\x61\x74\x73\x3a\x0a\x09\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73" \
+"\x5d\x0a\x09\x5b\x59\x59\x59\x59\x2e\x5d\x4d\x4d\x2e\x44\x44\x2d" \
+"\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73\x5d\x0a\x09\x59\x59\x59\x59" \
+"\x2d\x4d\x4d\x2d\x44\x44\x20\x68\x68\x3a\x6d\x6d\x5b\x3a\x73\x73" \
+"\x5d\x0a\x09\x5b\x5b\x5b\x5b\x5b\x59\x59\x5d\x59\x59\x5d\x4d\x4d" \
+"\x5d\x44\x44\x5d\x68\x68\x5d\x6d\x6d\x5b\x2e\x73\x73\x5d\x0a\x09" \
+"\x27\x64\x61\x74\x65\x20\x54\x49\x4d\x45\x27\x20\x66\x6f\x72\x6d" \
+"\x20\x61\x63\x63\x65\x70\x74\x73\x20\x4d\x4d\x44\x44\x68\x68\x6d" \
+"\x6d\x5b\x5b\x59\x59\x5d\x59\x59\x5d\x5b\x2e\x73\x73\x5d\x20\x69" \
+"\x6e\x73\x74\x65\x61\x64\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f" \
+"\x4e\x2e\x2e\x2e\x0a\x0a\x54\x69\x6e\x79\x20\x52\x50\x4e\x20\x63" \
+"\x61\x6c\x63\x75\x6c\x61\x74\x6f\x72\x2e\x20\x4f\x70\x65\x72\x61" \
+"\x74\x69\x6f\x6e\x73\x3a\x0a\x2b\x2c\x20\x61\x64\x64\x2c\x20\x2d" \
+"\x2c\x20\x73\x75\x62\x2c\x20\x2a\x2c\x20\x6d\x75\x6c\x2c\x20\x2f" \
+"\x2c\x20\x64\x69\x76\x2c\x20\x25\x2c\x20\x6d\x6f\x64\x2c\x20\x61" \
+"\x6e\x64\x2c\x20\x6f\x72\x2c\x20\x6e\x6f\x74\x2c\x20\x65\x6f\x72" \
+"\x2c\x0a\x70\x20\x2d\x20\x70\x72\x69\x6e\x74\x20\x74\x6f\x70\x20" \
+"\x6f\x66\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6b\x20\x28\x77\x69" \
+"\x74\x68\x6f\x75\x74\x20\x70\x6f\x70\x70\x69\x6e\x67\x29\x2c\x0a" \
+"\x66\x20\x2d\x20\x70\x72\x69\x6e\x74\x20\x65\x6e\x74\x69\x72\x65" \
+"\x20\x73\x74\x61\x63\x6b\x2c\x0a\x6f\x20\x2d\x20\x70\x6f\x70\x20" \
+"\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x61\x6e\x64\x20\x73\x65" \
+"\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x72\x61\x64\x69\x78\x20\x28" \
+"\x6d\x75\x73\x74\x20\x62\x65\x20\x31\x30\x2c\x20\x31\x36\x2c\x20" \
+"\x38\x20\x6f\x72\x20\x32\x29\x2e\x0a\x45\x78\x61\x6d\x70\x6c\x65" \
+"\x73\x3a\x20\x27\x64\x63\x20\x32\x20\x32\x20\x61\x64\x64\x20\x70" \
+"\x27\x20\x2d\x3e\x20\x34\x2c\x20\x27\x64\x63\x20\x38\x20\x38\x20" \
+"\x2a\x20\x32\x20\x32\x20\x2b\x20\x2f\x20\x70\x27\x20\x2d\x3e\x20" \
+"\x31\x36\x00\x5b\x69\x66\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x6f\x66" \
+"\x3d\x46\x49\x4c\x45\x5d\x20\x5b\x69\x62\x73\x3d\x4e\x5d\x20\x5b" \
+"\x6f\x62\x73\x3d\x4e\x5d\x20\x5b\x62\x73\x3d\x4e\x5d\x20\x5b\x63" \
+"\x6f\x75\x6e\x74\x3d\x4e\x5d\x20\x5b\x73\x6b\x69\x70\x3d\x4e\x5d" \
+"\x0a\x09\x5b\x73\x65\x65\x6b\x3d\x4e\x5d\x20\x5b\x63\x6f\x6e\x76" \
+"\x3d\x6e\x6f\x74\x72\x75\x6e\x63\x7c\x6e\x6f\x65\x72\x72\x6f\x72" \
+"\x7c\x73\x79\x6e\x63\x7c\x66\x73\x79\x6e\x63\x5d\x0a\x0a\x43\x6f" \
+"\x70\x79\x20\x61\x20\x66\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x63" \
+"\x6f\x6e\x76\x65\x72\x74\x69\x6e\x67\x20\x61\x6e\x64\x20\x66\x6f" \
+"\x72\x6d\x61\x74\x74\x69\x6e\x67\x0a\x0a\x09\x69\x66\x3d\x46\x49" \
+"\x4c\x45\x09\x09\x52\x65\x61\x64\x20\x66\x72\x6f\x6d\x20\x46\x49" \
+"\x4c\x45\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74" \
+"\x64\x69\x6e\x0a\x09\x6f\x66\x3d\x46\x49\x4c\x45\x09\x09\x57\x72" \
+"\x69\x74\x65\x20\x74\x6f\x20\x46\x49\x4c\x45\x20\x69\x6e\x73\x74" \
+"\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x62" \
+"\x73\x3d\x4e\x09\x09\x52\x65\x61\x64\x20\x61\x6e\x64\x20\x77\x72" \
+"\x69\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61" \
+"\x20\x74\x69\x6d\x65\x0a\x09\x69\x62\x73\x3d\x4e\x09\x09\x52\x65" \
+"\x61\x64\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
+"\x74\x69\x6d\x65\x0a\x09\x6f\x62\x73\x3d\x4e\x09\x09\x57\x72\x69" \
+"\x74\x65\x20\x4e\x20\x62\x79\x74\x65\x73\x20\x61\x74\x20\x61\x20" \
+"\x74\x69\x6d\x65\x0a\x09\x63\x6f\x75\x6e\x74\x3d\x4e\x09\x09\x43" \
+"\x6f\x70\x79\x20\x6f\x6e\x6c\x79\x20\x4e\x20\x69\x6e\x70\x75\x74" \
+"\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x73\x6b\x69\x70\x3d\x4e\x09" \
+"\x09\x53\x6b\x69\x70\x20\x4e\x20\x69\x6e\x70\x75\x74\x20\x62\x6c" \
+"\x6f\x63\x6b\x73\x0a\x09\x73\x65\x65\x6b\x3d\x4e\x09\x09\x53\x6b" \
+"\x69\x70\x20\x4e\x20\x6f\x75\x74\x70\x75\x74\x20\x62\x6c\x6f\x63" \
+"\x6b\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x6e\x6f\x74\x72\x75\x6e\x63" \
+"\x09\x44\x6f\x6e\x27\x74\x20\x74\x72\x75\x6e\x63\x61\x74\x65\x20" \
+"\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x0a\x09\x63\x6f\x6e" \
+"\x76\x3d\x6e\x6f\x65\x72\x72\x6f\x72\x09\x43\x6f\x6e\x74\x69\x6e" \
+"\x75\x65\x20\x61\x66\x74\x65\x72\x20\x72\x65\x61\x64\x20\x65\x72" \
+"\x72\x6f\x72\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x73\x79\x6e\x63\x09" \
+"\x50\x61\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x77\x69\x74\x68\x20" \
+"\x7a\x65\x72\x6f\x73\x0a\x09\x63\x6f\x6e\x76\x3d\x66\x73\x79\x6e" \
+"\x63\x09\x50\x68\x79\x73\x69\x63\x61\x6c\x6c\x79\x20\x77\x72\x69" \
+"\x74\x65\x20\x64\x61\x74\x61\x20\x6f\x75\x74\x20\x62\x65\x66\x6f" \
+"\x72\x65\x20\x66\x69\x6e\x69\x73\x68\x69\x6e\x67\x0a\x0a\x4e\x75" \
+"\x6d\x62\x65\x72\x73\x20\x6d\x61\x79\x20\x62\x65\x20\x73\x75\x66" \
+"\x66\x69\x78\x65\x64\x20\x62\x79\x20\x63\x20\x28\x78\x31\x29\x2c" \
+"\x20\x77\x20\x28\x78\x32\x29\x2c\x20\x62\x20\x28\x78\x35\x31\x32" \
+"\x29\x2c\x20\x6b\x44\x20\x28\x78\x31\x30\x30\x30\x29\x2c\x20\x6b" \
+"\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x0a\x4d\x44\x20\x28\x78\x31" \
+"\x30\x30\x30\x30\x30\x30\x29\x2c\x20\x4d\x20\x28\x78\x31\x30\x34" \
+"\x38\x35\x37\x36\x29\x2c\x20\x47\x44\x20\x28\x78\x31\x30\x30\x30" \
+"\x30\x30\x30\x30\x30\x30\x29\x20\x6f\x72\x20\x47\x20\x28\x78\x31" \
+"\x30\x37\x33\x37\x34\x31\x38\x32\x34\x29\x00\x5b\x2d\x71\x66\x77" \
+"\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d" \
+"\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09" \
+"\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45" \
+"\x20\x28\x73\x74\x61\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20" \
+"\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75" \
+"\x69\x65\x74\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a" \
+"\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61" \
+"\x69\x74\x20\x66\x6f\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d" \
+"\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73" \
+"\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73" \
+"\x74\x64\x65\x72\x72\x00\x41\x44\x44\x52\x45\x53\x53\x20\x5b\x57" \
+"\x49\x44\x54\x48\x20\x5b\x56\x41\x4c\x55\x45\x5d\x5d\x0a\x0a\x52" \
+"\x65\x61\x64\x2f\x77\x72\x69\x74\x65\x20\x66\x72\x6f\x6d\x20\x70" \
+"\x68\x79\x73\x69\x63\x61\x6c\x20\x61\x64\x64\x72\x65\x73\x73\x0a" \
+"\x0a\x09\x41\x44\x44\x52\x45\x53\x53\x09\x41\x64\x64\x72\x65\x73" \
+"\x73\x20\x74\x6f\x20\x61\x63\x74\x20\x75\x70\x6f\x6e\x0a\x09\x57" \
+"\x49\x44\x54\x48\x09\x57\x69\x64\x74\x68\x20\x28\x38\x2f\x31\x36" \
+"\x2f\x2e\x2e\x2e\x29\x0a\x09\x56\x41\x4c\x55\x45\x09\x44\x61\x74" \
+"\x61\x20\x74\x6f\x20\x62\x65\x20\x77\x72\x69\x74\x74\x65\x6e\x00" \
+"\x5b\x2d\x50\x6b\x6d\x68\x61\x69\x5d\x20\x5b\x2d\x42\x20\x53\x49" \
+"\x5a\x45\x5d\x20\x5b\x46\x49\x4c\x45\x53\x59\x53\x54\x45\x4d\x5d" \
+"\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x73" \
+"\x79\x73\x74\x65\x6d\x20\x75\x73\x61\x67\x65\x20\x73\x74\x61\x74" \
+"\x69\x73\x74\x69\x63\x73\x0a\x0a\x09\x2d\x50\x09\x50\x4f\x53\x49" \
+"\x58\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x6f\x72\x6d\x61\x74\x0a" \
+"\x09\x2d\x6b\x09\x31\x30\x32\x34\x2d\x62\x79\x74\x65\x20\x62\x6c" \
+"\x6f\x63\x6b\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09" \
+"\x2d\x6d\x09\x31\x4d\x2d\x62\x79\x74\x65\x20\x62\x6c\x6f\x63\x6b" \
+"\x73\x0a\x09\x2d\x68\x09\x48\x75\x6d\x61\x6e\x20\x72\x65\x61\x64" \
+"\x61\x62\x6c\x65\x20\x28\x65\x2e\x67\x2e\x20\x31\x4b\x20\x32\x34" \
+"\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x61\x09\x53\x68\x6f\x77\x20" \
+"\x61\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a" \
+"\x09\x2d\x69\x09\x49\x6e\x6f\x64\x65\x73\x0a\x09\x2d\x42\x20\x53" \
+"\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x73\x69\x7a\x65\x00\x5b\x2d" \
+"\x61\x62\x42\x64\x69\x4e\x71\x72\x54\x73\x74\x77\x5d\x20\x5b\x2d" \
+"\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x5b\x2d\x53\x20\x46\x49\x4c" \
+"\x45\x5d\x20\x5b\x2d\x55\x20\x4c\x49\x4e\x45\x53\x5d\x20\x46\x49" \
+"\x4c\x45\x31\x20\x46\x49\x4c\x45\x32\x0a\x0a\x43\x6f\x6d\x70\x61" \
+"\x72\x65\x20\x66\x69\x6c\x65\x73\x20\x6c\x69\x6e\x65\x20\x62\x79" \
+"\x20\x6c\x69\x6e\x65\x20\x61\x6e\x64\x20\x6f\x75\x74\x70\x75\x74" \
+"\x20\x74\x68\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63\x65\x73" \
+"\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x74\x68\x65\x6d\x2e\x0a\x54" \
+"\x68\x69\x73\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x61\x74\x69" \
+"\x6f\x6e\x20\x73\x75\x70\x70\x6f\x72\x74\x73\x20\x75\x6e\x69\x66" \
+"\x69\x65\x64\x20\x64\x69\x66\x66\x73\x20\x6f\x6e\x6c\x79\x2e\x0a" \
+"\x0a\x09\x2d\x61\x09\x54\x72\x65\x61\x74\x20\x61\x6c\x6c\x20\x66" \
+"\x69\x6c\x65\x73\x20\x61\x73\x20\x74\x65\x78\x74\x0a\x09\x2d\x62" \
+"\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20" \
+"\x69\x6e\x20\x74\x68\x65\x20\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x66" \
+"\x20\x77\x68\x69\x74\x65\x73\x70\x61\x63\x65\x0a\x09\x2d\x42\x09" \
+"\x49\x67\x6e\x6f\x72\x65\x20\x63\x68\x61\x6e\x67\x65\x73\x20\x77" \
+"\x68\x6f\x73\x65\x20\x6c\x69\x6e\x65\x73\x20\x61\x72\x65\x20\x61" \
+"\x6c\x6c\x20\x62\x6c\x61\x6e\x6b\x0a\x09\x2d\x64\x09\x54\x72\x79" \
+"\x20\x68\x61\x72\x64\x20\x74\x6f\x20\x66\x69\x6e\x64\x20\x61\x20" \
+"\x73\x6d\x61\x6c\x6c\x65\x72\x20\x73\x65\x74\x20\x6f\x66\x20\x63" \
+"\x68\x61\x6e\x67\x65\x73\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72" \
+"\x65\x20\x63\x61\x73\x65\x20\x64\x69\x66\x66\x65\x72\x65\x6e\x63" \
+"\x65\x73\x0a\x09\x2d\x4c\x09\x55\x73\x65\x20\x4c\x41\x42\x45\x4c" \
+"\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x74\x68\x65\x20" \
+"\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x69\x6e\x20\x74\x68\x65\x20" \
+"\x75\x6e\x69\x66\x69\x65\x64\x20\x68\x65\x61\x64\x65\x72\x0a\x09" \
+"\x2d\x4e\x09\x54\x72\x65\x61\x74\x20\x61\x62\x73\x65\x6e\x74\x20" \
+"\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x65\x6d\x70\x74\x79\x0a\x09" \
+"\x2d\x71\x09\x4f\x75\x74\x70\x75\x74\x20\x6f\x6e\x6c\x79\x20\x77" \
+"\x68\x65\x74\x68\x65\x72\x20\x66\x69\x6c\x65\x73\x20\x64\x69\x66" \
+"\x66\x65\x72\x0a\x09\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x0a" \
+"\x09\x2d\x53\x09\x53\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x46" \
+"\x49\x4c\x45\x20\x77\x68\x65\x6e\x20\x63\x6f\x6d\x70\x61\x72\x69" \
+"\x6e\x67\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09" \
+"\x2d\x54\x09\x4d\x61\x6b\x65\x20\x74\x61\x62\x73\x20\x6c\x69\x6e" \
+"\x65\x20\x75\x70\x20\x62\x79\x20\x70\x72\x65\x66\x69\x78\x69\x6e" \
+"\x67\x20\x61\x20\x74\x61\x62\x20\x77\x68\x65\x6e\x20\x6e\x65\x63" \
+"\x65\x73\x73\x61\x72\x79\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72" \
+"\x74\x20\x77\x68\x65\x6e\x20\x74\x77\x6f\x20\x66\x69\x6c\x65\x73" \
+"\x20\x61\x72\x65\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x0a\x09\x2d" \
+"\x74\x09\x45\x78\x70\x61\x6e\x64\x20\x74\x61\x62\x73\x20\x74\x6f" \
+"\x20\x73\x70\x61\x63\x65\x73\x20\x69\x6e\x20\x6f\x75\x74\x70\x75" \
+"\x74\x0a\x09\x2d\x55\x09\x4f\x75\x74\x70\x75\x74\x20\x4c\x49\x4e" \
+"\x45\x53\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x63\x6f\x6e\x74" \
+"\x65\x78\x74\x0a\x09\x2d\x77\x09\x49\x67\x6e\x6f\x72\x65\x20\x61" \
+"\x6c\x6c\x20\x77\x68\x69\x74\x65\x73\x70\x61\x63\x65\x00\x46\x49" \
+"\x4c\x45\x4e\x41\x4d\x45\x0a\x0a\x53\x74\x72\x69\x70\x20\x6e\x6f" \
+"\x6e\x2d\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x73\x75\x66\x66" \
+"\x69\x78\x20\x66\x72\x6f\x6d\x20\x46\x49\x4c\x45\x4e\x41\x4d\x45" \
+"\x00\x5b\x2d\x63\x5d\x20\x5b\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x5d" \
+"\x20\x5b\x2d\x72\x5d\x20\x5b\x2d\x73\x20\x53\x49\x5a\x45\x5d\x20" \
+"\x5b\x2d\x43\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63" \
+"\x6f\x6e\x74\x72\x6f\x6c\x20\x74\x68\x65\x20\x6b\x65\x72\x6e\x65" \
+"\x6c\x20\x72\x69\x6e\x67\x20\x62\x75\x66\x66\x65\x72\x0a\x0a\x09" \
+"\x2d\x63\x09\x09\x43\x6c\x65\x61\x72\x20\x72\x69\x6e\x67\x20\x62" \
+"\x75\x66\x66\x65\x72\x20\x61\x66\x74\x65\x72\x20\x70\x72\x69\x6e" \
+"\x74\x69\x6e\x67\x0a\x09\x2d\x6e\x20\x4c\x45\x56\x45\x4c\x09\x53" \
+"\x65\x74\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x20\x6c\x6f\x67\x67\x69" \
+"\x6e\x67\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d\x72\x09\x09\x53\x68" \
+"\x6f\x77\x20\x6c\x65\x76\x65\x6c\x20\x70\x72\x65\x66\x69\x78\x0a" \
+"\x09\x2d\x73\x20\x53\x49\x5a\x45\x09\x09\x42\x75\x66\x66\x65\x72" \
+"\x20\x73\x69\x7a\x65\x0a\x09\x2d\x43\x09\x09\x43\x6f\x6c\x6f\x72" \
+"\x65\x64\x20\x6f\x75\x74\x70\x75\x74\x00\x5b\x2d\x75\x64\x5d\x20" \
+"\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20" \
+"\x46\x49\x4c\x45\x20\x69\x6e\x2d\x70\x6c\x61\x63\x65\x20\x66\x72" \
+"\x6f\x6d\x20\x44\x4f\x53\x20\x74\x6f\x20\x55\x6e\x69\x78\x20\x66" \
+"\x6f\x72\x6d\x61\x74\x2e\x0a\x57\x68\x65\x6e\x20\x6e\x6f\x20\x66" \
+"\x69\x6c\x65\x20\x69\x73\x20\x67\x69\x76\x65\x6e\x2c\x20\x75\x73" \
+"\x65\x20\x73\x74\x64\x69\x6e\x2f\x73\x74\x64\x6f\x75\x74\x2e\x0a" \
+"\x0a\x09\x2d\x75\x09\x64\x6f\x73\x32\x75\x6e\x69\x78\x0a\x09\x2d" \
+"\x64\x09\x75\x6e\x69\x78\x32\x64\x6f\x73\x00\x5b\x2d\x61\x48\x4c" \
+"\x64\x63\x6c\x73\x78\x68\x6d\x6b\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
+"\x2e\x2e\x2e\x0a\x0a\x53\x75\x6d\x6d\x61\x72\x69\x7a\x65\x20\x64" \
+"\x69\x73\x6b\x20\x73\x70\x61\x63\x65\x20\x75\x73\x65\x64\x20\x66" \
+"\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x61\x6e\x64" \
+"\x2f\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x0a\x09" \
+"\x2d\x61\x09\x53\x68\x6f\x77\x20\x66\x69\x6c\x65\x20\x73\x69\x7a" \
+"\x65\x73\x20\x74\x6f\x6f\x0a\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f" \
+"\x77\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09" \
+"\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e" \
+"\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69" \
+"\x6e\x65\x0a\x09\x2d\x64\x20\x4e\x09\x4c\x69\x6d\x69\x74\x20\x6f" \
+"\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x64\x69\x72\x65\x63\x74\x6f" \
+"\x72\x69\x65\x73\x20\x28\x61\x6e\x64\x20\x66\x69\x6c\x65\x73\x20" \
+"\x77\x69\x74\x68\x20\x2d\x61\x29\x20\x6f\x66\x20\x64\x65\x70\x74" \
+"\x68\x20\x3c\x20\x4e\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20\x67" \
+"\x72\x61\x6e\x64\x20\x74\x6f\x74\x61\x6c\x0a\x09\x2d\x6c\x09\x43" \
+"\x6f\x75\x6e\x74\x20\x73\x69\x7a\x65\x73\x20\x6d\x61\x6e\x79\x20" \
+"\x74\x69\x6d\x65\x73\x20\x69\x66\x20\x68\x61\x72\x64\x20\x6c\x69" \
+"\x6e\x6b\x65\x64\x0a\x09\x2d\x73\x09\x44\x69\x73\x70\x6c\x61\x79" \
+"\x20\x6f\x6e\x6c\x79\x20\x61\x20\x74\x6f\x74\x61\x6c\x20\x66\x6f" \
+"\x72\x20\x65\x61\x63\x68\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x0a" \
+"\x09\x2d\x78\x09\x53\x6b\x69\x70\x20\x64\x69\x72\x65\x63\x74\x6f" \
+"\x72\x69\x65\x73\x20\x6f\x6e\x20\x64\x69\x66\x66\x65\x72\x65\x6e" \
+"\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x0a\x09\x2d" \
+"\x68\x09\x53\x69\x7a\x65\x73\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e" \
+"\x20\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74" \
+"\x20\x28\x65\x2e\x67\x2e\x2c\x20\x31\x4b\x20\x32\x34\x33\x4d\x20" \
+"\x32\x47\x29\x0a\x09\x2d\x6d\x09\x53\x69\x7a\x65\x73\x20\x69\x6e" \
+"\x20\x6d\x65\x67\x61\x62\x79\x74\x65\x73\x0a\x09\x2d\x6b\x09\x53" \
+"\x69\x7a\x65\x73\x20\x69\x6e\x20\x6b\x69\x6c\x6f\x62\x79\x74\x65" \
+"\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x00\x5b\x2d\x6e\x65" \
+"\x45\x5d\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69" \
+"\x6e\x74\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64" \
+"\x20\x41\x52\x47\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a" \
+"\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x74\x72" \
+"\x61\x69\x6c\x69\x6e\x67\x20\x6e\x65\x77\x6c\x69\x6e\x65\x0a\x09" \
+"\x2d\x65\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x62\x61\x63" \
+"\x6b\x73\x6c\x61\x73\x68\x20\x65\x73\x63\x61\x70\x65\x73\x20\x28" \
+"\x69\x2e\x65\x2e\x2c\x20\x5c\x74\x3d\x74\x61\x62\x29\x0a\x09\x2d" \
+"\x45\x09\x44\x6f\x6e\x27\x74\x20\x69\x6e\x74\x65\x72\x70\x72\x65" \
+"\x74\x20\x62\x61\x63\x6b\x73\x6c\x61\x73\x68\x20\x65\x73\x63\x61" \
+"\x70\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x00\x08\x00" \
+"\x5b\x2d\x69\x75\x5d\x20\x5b\x2d\x5d\x20\x5b\x6e\x61\x6d\x65\x3d" \
+"\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x20\x5b\x50\x52\x4f\x47\x20" \
+"\x41\x52\x47\x53\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65" \
+"\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x6e\x76\x69\x72\x6f\x6e" \
+"\x6d\x65\x6e\x74\x20\x6f\x72\x20\x72\x75\x6e\x20\x50\x52\x4f\x47" \
+"\x20\x61\x66\x74\x65\x72\x20\x73\x65\x74\x74\x69\x6e\x67\x20\x75" \
+"\x70\x0a\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20" \
+"\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x0a\x0a\x09\x2d\x2c" \
+"\x20\x2d\x69\x09\x53\x74\x61\x72\x74\x20\x77\x69\x74\x68\x20\x61" \
+"\x6e\x20\x65\x6d\x70\x74\x79\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d" \
+"\x65\x6e\x74\x0a\x09\x2d\x75\x09\x52\x65\x6d\x6f\x76\x65\x20\x76" \
+"\x61\x72\x69\x61\x62\x6c\x65\x20\x66\x72\x6f\x6d\x20\x74\x68\x65" \
+"\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x00\x5b\x2d\x69" \
+"\x5d\x20\x5b\x2d\x74\x20\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
+"\x2e\x2e\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20\x74\x61\x62\x73" \
+"\x20\x74\x6f\x20\x73\x70\x61\x63\x65\x73\x2c\x20\x77\x72\x69\x74" \
+"\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09" \
+"\x2d\x69\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6e\x76\x65\x72\x74" \
+"\x20\x74\x61\x62\x73\x20\x61\x66\x74\x65\x72\x20\x6e\x6f\x6e\x20" \
+"\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x74\x09\x54\x61\x62\x73\x74" \
+"\x6f\x70\x73\x20\x65\x76\x65\x72\x79\x20\x4e\x20\x63\x68\x61\x72" \
+"\x73\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x0a\x0a\x50\x72" \
+"\x69\x6e\x74\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20\x6f\x66" \
+"\x20\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x74\x6f\x20\x73" \
+"\x74\x64\x6f\x75\x74\x0a\x0a\x45\x58\x50\x52\x45\x53\x53\x49\x4f" \
+"\x4e\x20\x6d\x61\x79\x20\x62\x65\x3a\x0a\x09\x41\x52\x47\x31\x20" \
+"\x7c\x20\x41\x52\x47\x32\x09\x41\x52\x47\x31\x20\x69\x66\x20\x69" \
+"\x74\x20\x69\x73\x20\x6e\x65\x69\x74\x68\x65\x72\x20\x6e\x75\x6c" \
+"\x6c\x20\x6e\x6f\x72\x20\x30\x2c\x20\x6f\x74\x68\x65\x72\x77\x69" \
+"\x73\x65\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x26\x20" \
+"\x41\x52\x47\x32\x09\x41\x52\x47\x31\x20\x69\x66\x20\x6e\x65\x69" \
+"\x74\x68\x65\x72\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x69\x73" \
+"\x20\x6e\x75\x6c\x6c\x20\x6f\x72\x20\x30\x2c\x20\x6f\x74\x68\x65" \
+"\x72\x77\x69\x73\x65\x20\x30\x0a\x09\x41\x52\x47\x31\x20\x3c\x20" \
+"\x41\x52\x47\x32\x09\x31\x20\x69\x66\x20\x41\x52\x47\x31\x20\x69" \
+"\x73\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x41\x52\x47\x32" \
+"\x2c\x20\x65\x6c\x73\x65\x20\x30\x2e\x20\x53\x69\x6d\x69\x6c\x61" \
+"\x72\x6c\x79\x3a\x0a\x09\x41\x52\x47\x31\x20\x3c\x3d\x20\x41\x52" \
+"\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x3d\x20\x41\x52\x47\x32\x0a" \
+"\x09\x41\x52\x47\x31\x20\x21\x3d\x20\x41\x52\x47\x32\x0a\x09\x41" \
+"\x52\x47\x31\x20\x3e\x3d\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47" \
+"\x31\x20\x3e\x20\x41\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2b" \
+"\x20\x41\x52\x47\x32\x09\x53\x75\x6d\x20\x6f\x66\x20\x41\x52\x47" \
+"\x31\x20\x61\x6e\x64\x20\x41\x52\x47\x32\x2e\x20\x53\x69\x6d\x69" \
+"\x6c\x61\x72\x6c\x79\x3a\x0a\x09\x41\x52\x47\x31\x20\x2d\x20\x41" \
+"\x52\x47\x32\x0a\x09\x41\x52\x47\x31\x20\x2a\x20\x41\x52\x47\x32" \
+"\x0a\x09\x41\x52\x47\x31\x20\x2f\x20\x41\x52\x47\x32\x0a\x09\x41" \
+"\x52\x47\x31\x20\x25\x20\x41\x52\x47\x32\x0a\x09\x53\x54\x52\x49" \
+"\x4e\x47\x20\x3a\x20\x52\x45\x47\x45\x58\x50\x09\x09\x41\x6e\x63" \
+"\x68\x6f\x72\x65\x64\x20\x70\x61\x74\x74\x65\x72\x6e\x20\x6d\x61" \
+"\x74\x63\x68\x20\x6f\x66\x20\x52\x45\x47\x45\x58\x50\x20\x69\x6e" \
+"\x20\x53\x54\x52\x49\x4e\x47\x0a\x09\x6d\x61\x74\x63\x68\x20\x53" \
+"\x54\x52\x49\x4e\x47\x20\x52\x45\x47\x45\x58\x50\x09\x53\x61\x6d" \
+"\x65\x20\x61\x73\x20\x53\x54\x52\x49\x4e\x47\x20\x3a\x20\x52\x45" \
+"\x47\x45\x58\x50\x0a\x09\x73\x75\x62\x73\x74\x72\x20\x53\x54\x52" \
+"\x49\x4e\x47\x20\x50\x4f\x53\x20\x4c\x45\x4e\x47\x54\x48\x20\x53" \
+"\x75\x62\x73\x74\x72\x69\x6e\x67\x20\x6f\x66\x20\x53\x54\x52\x49" \
+"\x4e\x47\x2c\x20\x50\x4f\x53\x20\x63\x6f\x75\x6e\x74\x65\x64\x20" \
+"\x66\x72\x6f\x6d\x20\x31\x0a\x09\x69\x6e\x64\x65\x78\x20\x53\x54" \
+"\x52\x49\x4e\x47\x20\x43\x48\x41\x52\x53\x09\x49\x6e\x64\x65\x78" \
+"\x20\x69\x6e\x20\x53\x54\x52\x49\x4e\x47\x20\x77\x68\x65\x72\x65" \
+"\x20\x61\x6e\x79\x20\x43\x48\x41\x52\x53\x20\x69\x73\x20\x66\x6f" \
+"\x75\x6e\x64\x2c\x20\x6f\x72\x20\x30\x0a\x09\x6c\x65\x6e\x67\x74" \
+"\x68\x20\x53\x54\x52\x49\x4e\x47\x09\x09\x4c\x65\x6e\x67\x74\x68" \
+"\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x0a\x09\x71\x75\x6f\x74" \
+"\x65\x20\x54\x4f\x4b\x45\x4e\x09\x09\x49\x6e\x74\x65\x72\x70\x72" \
+"\x65\x74\x20\x54\x4f\x4b\x45\x4e\x20\x61\x73\x20\x61\x20\x73\x74" \
+"\x72\x69\x6e\x67\x2c\x20\x65\x76\x65\x6e\x20\x69\x66\x0a\x09\x09" \
+"\x09\x09\x69\x74\x20\x69\x73\x20\x61\x20\x6b\x65\x79\x77\x6f\x72" \
+"\x64\x20\x6c\x69\x6b\x65\x20\x27\x6d\x61\x74\x63\x68\x27\x20\x6f" \
+"\x72\x20\x61\x6e\x0a\x09\x09\x09\x09\x6f\x70\x65\x72\x61\x74\x6f" \
+"\x72\x20\x6c\x69\x6b\x65\x20\x27\x2f\x27\x0a\x09\x28\x45\x58\x50" \
+"\x52\x45\x53\x53\x49\x4f\x4e\x29\x09\x09\x56\x61\x6c\x75\x65\x20" \
+"\x6f\x66\x20\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x0a\x0a\x42" \
+"\x65\x77\x61\x72\x65\x20\x74\x68\x61\x74\x20\x6d\x61\x6e\x79\x20" \
+"\x6f\x70\x65\x72\x61\x74\x6f\x72\x73\x20\x6e\x65\x65\x64\x20\x74" \
+"\x6f\x20\x62\x65\x20\x65\x73\x63\x61\x70\x65\x64\x20\x6f\x72\x20" \
+"\x71\x75\x6f\x74\x65\x64\x20\x66\x6f\x72\x20\x73\x68\x65\x6c\x6c" \
+"\x73\x2e\x0a\x43\x6f\x6d\x70\x61\x72\x69\x73\x6f\x6e\x73\x20\x61" \
+"\x72\x65\x20\x61\x72\x69\x74\x68\x6d\x65\x74\x69\x63\x20\x69\x66" \
+"\x20\x62\x6f\x74\x68\x20\x41\x52\x47\x73\x20\x61\x72\x65\x20\x6e" \
+"\x75\x6d\x62\x65\x72\x73\x2c\x20\x65\x6c\x73\x65\x0a\x6c\x65\x78" \
+"\x69\x63\x6f\x67\x72\x61\x70\x68\x69\x63\x61\x6c\x2e\x20\x50\x61" \
+"\x74\x74\x65\x72\x6e\x20\x6d\x61\x74\x63\x68\x65\x73\x20\x72\x65" \
+"\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x73\x74\x72\x69\x6e\x67\x20" \
+"\x6d\x61\x74\x63\x68\x65\x64\x20\x62\x65\x74\x77\x65\x65\x6e\x0a" \
+"\x5c\x28\x20\x61\x6e\x64\x20\x5c\x29\x20\x6f\x72\x20\x6e\x75\x6c" \
+"\x6c\x3b\x20\x69\x66\x20\x5c\x28\x20\x61\x6e\x64\x20\x5c\x29\x20" \
+"\x61\x72\x65\x20\x6e\x6f\x74\x20\x75\x73\x65\x64\x2c\x20\x74\x68" \
+"\x65\x79\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x6e\x75" \
+"\x6d\x62\x65\x72\x0a\x6f\x66\x20\x63\x68\x61\x72\x61\x63\x74\x65" \
+"\x72\x73\x20\x6d\x61\x74\x63\x68\x65\x64\x20\x6f\x72\x20\x30\x2e" \
+"\x00\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x65\x78\x69" \
+"\x74\x20\x63\x6f\x64\x65\x20\x6f\x66\x20\x46\x41\x4c\x53\x45\x20" \
+"\x28\x31\x29\x00\x5b\x2d\x75\x6c\x5d\x20\x5b\x2d\x43\x20\x43\x59" \
+"\x4c\x49\x4e\x44\x45\x52\x53\x5d\x20\x5b\x2d\x48\x20\x48\x45\x41" \
+"\x44\x53\x5d\x20\x5b\x2d\x53\x20\x53\x45\x43\x54\x4f\x52\x53\x5d" \
+"\x20\x5b\x2d\x62\x20\x53\x53\x5a\x5d\x20\x44\x49\x53\x4b\x0a\x0a" \
+"\x43\x68\x61\x6e\x67\x65\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e" \
+"\x20\x74\x61\x62\x6c\x65\x0a\x0a\x09\x2d\x75\x09\x09\x53\x74\x61" \
+"\x72\x74\x20\x61\x6e\x64\x20\x45\x6e\x64\x20\x61\x72\x65\x20\x69" \
+"\x6e\x20\x73\x65\x63\x74\x6f\x72\x73\x20\x28\x69\x6e\x73\x74\x65" \
+"\x61\x64\x20\x6f\x66\x20\x63\x79\x6c\x69\x6e\x64\x65\x72\x73\x29" \
+"\x0a\x09\x2d\x6c\x09\x09\x53\x68\x6f\x77\x20\x70\x61\x72\x74\x69" \
+"\x74\x69\x6f\x6e\x20\x74\x61\x62\x6c\x65\x20\x66\x6f\x72\x20\x65" \
+"\x61\x63\x68\x20\x44\x49\x53\x4b\x2c\x20\x74\x68\x65\x6e\x20\x65" \
+"\x78\x69\x74\x0a\x09\x2d\x62\x20\x32\x30\x34\x38\x09\x09\x28\x66" \
+"\x6f\x72\x20\x63\x65\x72\x74\x61\x69\x6e\x20\x4d\x4f\x20\x64\x69" \
+"\x73\x6b\x73\x29\x20\x75\x73\x65\x20\x32\x30\x34\x38\x2d\x62\x79" \
+"\x74\x65\x20\x73\x65\x63\x74\x6f\x72\x73\x0a\x09\x2d\x43\x20\x43" \
+"\x59\x4c\x49\x4e\x44\x45\x52\x53\x09\x53\x65\x74\x20\x6e\x75\x6d" \
+"\x62\x65\x72\x20\x6f\x66\x20\x63\x79\x6c\x69\x6e\x64\x65\x72\x73" \
+"\x2f\x68\x65\x61\x64\x73\x2f\x73\x65\x63\x74\x6f\x72\x73\x0a\x09" \
+"\x2d\x48\x20\x48\x45\x41\x44\x53\x0a\x09\x2d\x53\x20\x53\x45\x43" \
+"\x54\x4f\x52\x53\x00\x08\x00\x5b\x50\x41\x54\x48\x5d\x2e\x2e\x2e" \
+"\x20\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x41\x43\x54\x49" \
+"\x4f\x4e\x53\x5d\x0a\x0a\x53\x65\x61\x72\x63\x68\x20\x66\x6f\x72" \
+"\x20\x66\x69\x6c\x65\x73\x20\x61\x6e\x64\x20\x70\x65\x72\x66\x6f" \
+"\x72\x6d\x20\x61\x63\x74\x69\x6f\x6e\x73\x20\x6f\x6e\x20\x74\x68" \
+"\x65\x6d\x2e\x0a\x46\x69\x72\x73\x74\x20\x66\x61\x69\x6c\x65\x64" \
+"\x20\x61\x63\x74\x69\x6f\x6e\x20\x73\x74\x6f\x70\x73\x20\x70\x72" \
+"\x6f\x63\x65\x73\x73\x69\x6e\x67\x20\x6f\x66\x20\x63\x75\x72\x72" \
+"\x65\x6e\x74\x20\x66\x69\x6c\x65\x2e\x0a\x44\x65\x66\x61\x75\x6c" \
+"\x74\x73\x3a\x20\x50\x41\x54\x48\x20\x69\x73\x20\x63\x75\x72\x72" \
+"\x65\x6e\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x61" \
+"\x63\x74\x69\x6f\x6e\x20\x69\x73\x20\x27\x2d\x70\x72\x69\x6e\x74" \
+"\x27\x0a\x0a\x09\x2d\x66\x6f\x6c\x6c\x6f\x77\x09\x09\x46\x6f\x6c" \
+"\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x78" \
+"\x64\x65\x76\x09\x09\x44\x6f\x6e\x27\x74\x20\x64\x65\x73\x63\x65" \
+"\x6e\x64\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x6f" \
+"\x6e\x20\x6f\x74\x68\x65\x72\x20\x66\x69\x6c\x65\x73\x79\x73\x74" \
+"\x65\x6d\x73\x0a\x09\x2d\x6d\x61\x78\x64\x65\x70\x74\x68\x20\x4e" \
+"\x09\x44\x65\x73\x63\x65\x6e\x64\x20\x61\x74\x20\x6d\x6f\x73\x74" \
+"\x20\x4e\x20\x6c\x65\x76\x65\x6c\x73\x2e\x20\x2d\x6d\x61\x78\x64" \
+"\x65\x70\x74\x68\x20\x30\x20\x61\x70\x70\x6c\x69\x65\x73\x0a\x09" \
+"\x09\x09\x61\x63\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x63\x6f\x6d" \
+"\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x61\x72\x67\x75\x6d\x65" \
+"\x6e\x74\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6d\x69\x6e\x64\x65" \
+"\x70\x74\x68\x20\x4e\x09\x44\x6f\x6e\x27\x74\x20\x61\x63\x74\x20" \
+"\x6f\x6e\x20\x66\x69\x72\x73\x74\x20\x4e\x20\x6c\x65\x76\x65\x6c" \
+"\x73\x0a\x09\x2d\x64\x65\x70\x74\x68\x09\x09\x41\x63\x74\x20\x6f" \
+"\x6e\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x2a\x61\x66\x74" \
+"\x65\x72\x2a\x20\x74\x72\x61\x76\x65\x72\x73\x69\x6e\x67\x20\x69" \
+"\x74\x0a\x0a\x41\x63\x74\x69\x6f\x6e\x73\x3a\x0a\x09\x28\x20\x41" \
+"\x43\x54\x49\x4f\x4e\x53\x20\x29\x09\x47\x72\x6f\x75\x70\x20\x61" \
+"\x63\x74\x69\x6f\x6e\x73\x20\x66\x6f\x72\x20\x2d\x6f\x20\x2f\x20" \
+"\x2d\x61\x0a\x09\x21\x20\x41\x43\x54\x09\x09\x49\x6e\x76\x65\x72" \
+"\x74\x20\x41\x43\x54\x27\x73\x20\x73\x75\x63\x63\x65\x73\x73\x2f" \
+"\x66\x61\x69\x6c\x75\x72\x65\x0a\x09\x41\x43\x54\x31\x20\x5b\x2d" \
+"\x61\x5d\x20\x41\x43\x54\x32\x09\x49\x66\x20\x41\x43\x54\x31\x20" \
+"\x66\x61\x69\x6c\x73\x2c\x20\x73\x74\x6f\x70\x2c\x20\x65\x6c\x73" \
+"\x65\x20\x64\x6f\x20\x41\x43\x54\x32\x0a\x09\x41\x43\x54\x31\x20" \
+"\x2d\x6f\x20\x41\x43\x54\x32\x09\x49\x66\x20\x41\x43\x54\x31\x20" \
+"\x73\x75\x63\x63\x65\x65\x64\x73\x2c\x20\x73\x74\x6f\x70\x2c\x20" \
+"\x65\x6c\x73\x65\x20\x64\x6f\x20\x41\x43\x54\x32\x0a\x09\x09\x09" \
+"\x4e\x6f\x74\x65\x3a\x20\x2d\x61\x20\x68\x61\x73\x20\x68\x69\x67" \
+"\x68\x65\x72\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x20\x74\x68\x61" \
+"\x6e\x20\x2d\x6f\x0a\x09\x2d\x6e\x61\x6d\x65\x20\x50\x41\x54\x54" \
+"\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20\x66\x69\x6c\x65\x20\x6e" \
+"\x61\x6d\x65\x20\x28\x77\x2f\x6f\x20\x64\x69\x72\x65\x63\x74\x6f" \
+"\x72\x79\x20\x6e\x61\x6d\x65\x29\x20\x74\x6f\x20\x50\x41\x54\x54" \
+"\x45\x52\x4e\x0a\x09\x2d\x69\x6e\x61\x6d\x65\x20\x50\x41\x54\x54" \
+"\x45\x52\x4e\x09\x43\x61\x73\x65\x20\x69\x6e\x73\x65\x6e\x73\x69" \
+"\x74\x69\x76\x65\x20\x2d\x6e\x61\x6d\x65\x0a\x09\x2d\x70\x61\x74" \
+"\x68\x20\x50\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20" \
+"\x70\x61\x74\x68\x20\x74\x6f\x20\x50\x41\x54\x54\x45\x52\x4e\x0a" \
+"\x09\x2d\x69\x70\x61\x74\x68\x20\x50\x41\x54\x54\x45\x52\x4e\x09" \
+"\x43\x61\x73\x65\x20\x69\x6e\x73\x65\x6e\x73\x69\x74\x69\x76\x65" \
+"\x20\x2d\x70\x61\x74\x68\x0a\x09\x2d\x72\x65\x67\x65\x78\x20\x50" \
+"\x41\x54\x54\x45\x52\x4e\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x74" \
+"\x68\x20\x74\x6f\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45" \
+"\x52\x4e\x0a\x09\x2d\x74\x79\x70\x65\x20\x58\x09\x09\x46\x69\x6c" \
+"\x65\x20\x74\x79\x70\x65\x20\x69\x73\x20\x58\x20\x28\x6f\x6e\x65" \
+"\x20\x6f\x66\x3a\x20\x66\x2c\x64\x2c\x6c\x2c\x62\x2c\x63\x2c\x2e" \
+"\x2e\x2e\x29\x0a\x09\x2d\x70\x65\x72\x6d\x20\x4d\x41\x53\x4b\x09" \
+"\x41\x74\x20\x6c\x65\x61\x73\x74\x20\x6f\x6e\x65\x20\x6d\x61\x73" \
+"\x6b\x20\x62\x69\x74\x20\x28\x2b\x4d\x41\x53\x4b\x29\x2c\x20\x61" \
+"\x6c\x6c\x20\x62\x69\x74\x73\x20\x28\x2d\x4d\x41\x53\x4b\x29\x2c" \
+"\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20\x4d" \
+"\x41\x53\x4b\x20\x62\x69\x74\x73\x20\x61\x72\x65\x20\x73\x65\x74" \
+"\x20\x69\x6e\x20\x66\x69\x6c\x65\x27\x73\x20\x6d\x6f\x64\x65\x0a" \
+"\x09\x2d\x6d\x74\x69\x6d\x65\x20\x44\x41\x59\x53\x09\x6d\x74\x69" \
+"\x6d\x65\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68" \
+"\x61\x6e\x20\x28\x2b\x4e\x29\x2c\x20\x6c\x65\x73\x73\x20\x74\x68" \
+"\x61\x6e\x20\x28\x2d\x4e\x29\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65" \
+"\x78\x61\x63\x74\x6c\x79\x20\x4e\x20\x64\x61\x79\x73\x20\x69\x6e" \
+"\x20\x74\x68\x65\x20\x70\x61\x73\x74\x0a\x09\x2d\x6d\x6d\x69\x6e" \
+"\x20\x4d\x49\x4e\x53\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x67" \
+"\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6e\x20\x28\x2b\x4e\x29" \
+"\x2c\x20\x6c\x65\x73\x73\x20\x74\x68\x61\x6e\x20\x28\x2d\x4e\x29" \
+"\x2c\x0a\x09\x09\x09\x6f\x72\x20\x65\x78\x61\x63\x74\x6c\x79\x20" \
+"\x4e\x20\x6d\x69\x6e\x75\x74\x65\x73\x20\x69\x6e\x20\x74\x68\x65" \
+"\x20\x70\x61\x73\x74\x0a\x09\x2d\x6e\x65\x77\x65\x72\x20\x46\x49" \
+"\x4c\x45\x09\x6d\x74\x69\x6d\x65\x20\x69\x73\x20\x6d\x6f\x72\x65" \
+"\x20\x72\x65\x63\x65\x6e\x74\x20\x74\x68\x61\x6e\x20\x46\x49\x4c" \
+"\x45\x27\x73\x0a\x09\x2d\x75\x73\x65\x72\x20\x4e\x41\x4d\x45\x2f" \
+"\x49\x44\x09\x46\x69\x6c\x65\x20\x69\x73\x20\x6f\x77\x6e\x65\x64" \
+"\x20\x62\x79\x20\x67\x69\x76\x65\x6e\x20\x75\x73\x65\x72\x0a\x09" \
+"\x2d\x67\x72\x6f\x75\x70\x20\x4e\x41\x4d\x45\x2f\x49\x44\x09\x46" \
+"\x69\x6c\x65\x20\x69\x73\x20\x6f\x77\x6e\x65\x64\x20\x62\x79\x20" \
+"\x67\x69\x76\x65\x6e\x20\x67\x72\x6f\x75\x70\x0a\x09\x2d\x73\x69" \
+"\x7a\x65\x20\x4e\x5b\x62\x63\x6b\x5d\x09\x46\x69\x6c\x65\x20\x73" \
+"\x69\x7a\x65\x20\x69\x73\x20\x4e\x20\x28\x63\x3a\x62\x79\x74\x65" \
+"\x73\x2c\x6b\x3a\x6b\x62\x79\x74\x65\x73\x2c\x62\x3a\x35\x31\x32" \
+"\x20\x62\x79\x74\x65\x73\x28\x64\x65\x66\x2e\x29\x29\x0a\x09\x09" \
+"\x09\x2b\x2f\x2d\x4e\x3a\x20\x66\x69\x6c\x65\x20\x73\x69\x7a\x65" \
+"\x20\x69\x73\x20\x62\x69\x67\x67\x65\x72\x2f\x73\x6d\x61\x6c\x6c" \
+"\x65\x72\x20\x74\x68\x61\x6e\x20\x4e\x0a\x09\x2d\x70\x72\x75\x6e" \
+"\x65\x09\x09\x49\x66\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x66\x69" \
+"\x6c\x65\x20\x69\x73\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c" \
+"\x20\x64\x6f\x6e\x27\x74\x20\x64\x65\x73\x63\x65\x6e\x64\x20\x69" \
+"\x6e\x74\x6f\x20\x69\x74\x0a\x49\x66\x20\x6e\x6f\x6e\x65\x20\x6f" \
+"\x66\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20" \
+"\x61\x63\x74\x69\x6f\x6e\x73\x20\x69\x73\x20\x73\x70\x65\x63\x69" \
+"\x66\x69\x65\x64\x2c\x20\x2d\x70\x72\x69\x6e\x74\x20\x69\x73\x20" \
+"\x61\x73\x73\x75\x6d\x65\x64\x0a\x09\x2d\x70\x72\x69\x6e\x74\x09" \
"\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65" \
-"\x2c\x20\x4e\x55\x4c\x20\x74\x65\x72\x6d\x69\x6e\x61\x74\x65\x64" \
-"\x0a\x09\x2d\x65\x78\x65\x63\x20\x43\x4d\x44\x20\x41\x52\x47\x20" \
-"\x3b\x09\x52\x75\x6e\x20\x43\x4d\x44\x20\x77\x69\x74\x68\x20\x61" \
-"\x6c\x6c\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x73\x20\x6f\x66\x20" \
-"\x7b\x7d\x20\x72\x65\x70\x6c\x61\x63\x65\x64\x20\x62\x79\x0a\x09" \
-"\x09\x09\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x2e\x20\x46\x61\x69" \
-"\x6c\x73\x20\x69\x66\x20\x43\x4d\x44\x20\x65\x78\x69\x74\x73\x20" \
-"\x77\x69\x74\x68\x20\x6e\x6f\x6e\x7a\x65\x72\x6f\x00\x5b\x2d\x62" \
-"\x73\x5d\x20\x5b\x2d\x77\x20\x57\x49\x44\x54\x48\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x57\x72\x61\x70\x20\x69\x6e" \
-"\x70\x75\x74\x20\x6c\x69\x6e\x65\x73\x20\x69\x6e\x20\x65\x61\x63" \
-"\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e" \
-"\x29\x2c\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74" \
-"\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x62\x09\x43\x6f\x75\x6e\x74\x20" \
-"\x62\x79\x74\x65\x73\x20\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61" \
-"\x6e\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x09\x2d\x73\x09\x42\x72" \
-"\x65\x61\x6b\x20\x61\x74\x20\x73\x70\x61\x63\x65\x73\x0a\x09\x2d" \
-"\x77\x09\x55\x73\x65\x20\x57\x49\x44\x54\x48\x20\x63\x6f\x6c\x75" \
-"\x6d\x6e\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x38" \
-"\x30\x00\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20" \
-"\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x66\x20\x66\x72\x65\x65\x20\x61" \
-"\x6e\x64\x20\x75\x73\x65\x64\x20\x73\x79\x73\x74\x65\x6d\x20\x6d" \
-"\x65\x6d\x6f\x72\x79\x00\x44\x45\x56\x49\x43\x45\x0a\x0a\x46\x72" \
-"\x65\x65\x20\x61\x6c\x6c\x20\x6d\x65\x6d\x6f\x72\x79\x20\x75\x73" \
-"\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66" \
-"\x69\x65\x64\x20\x72\x61\x6d\x64\x69\x73\x6b\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45\x20\x6f\x72\x20\x50\x4f" \
-"\x52\x54\x2f\x50\x52\x4f\x54\x4f\x0a\x0a\x46\x69\x6e\x64\x20\x70" \
-"\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x77\x68\x69\x63\x68\x20\x75" \
-"\x73\x65\x20\x46\x49\x4c\x45\x73\x20\x6f\x72\x20\x50\x4f\x52\x54" \
-"\x73\x0a\x0a\x09\x2d\x6d\x09\x46\x69\x6e\x64\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x65\x73\x20\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20" \
-"\x73\x61\x6d\x65\x20\x66\x73\x20\x61\x73\x20\x46\x49\x4c\x45\x73" \
-"\x0a\x09\x2d\x34\x2c\x2d\x36\x09\x53\x65\x61\x72\x63\x68\x20\x6f" \
-"\x6e\x6c\x79\x20\x49\x50\x76\x34\x2f\x49\x50\x76\x36\x20\x73\x70" \
-"\x61\x63\x65\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x64\x69" \
-"\x73\x70\x6c\x61\x79\x20\x50\x49\x44\x73\x0a\x09\x2d\x6b\x09\x4b" \
-"\x69\x6c\x6c\x20\x66\x6f\x75\x6e\x64\x20\x70\x72\x6f\x63\x65\x73" \
-"\x73\x65\x73\x0a\x09\x2d\x53\x49\x47\x4e\x41\x4c\x09\x53\x69\x67" \
-"\x6e\x61\x6c\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x3a\x20\x4b\x49\x4c\x4c\x29\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x0a\x0a\x09\x2d\x61\x2c\x2d\x2d\x61\x6c\x74" \
+"\x0a\x09\x2d\x70\x72\x69\x6e\x74\x30\x09\x09\x50\x72\x69\x6e\x74" \
+"\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x2c\x20\x4e\x55\x4c\x20" \
+"\x74\x65\x72\x6d\x69\x6e\x61\x74\x65\x64\x0a\x09\x2d\x65\x78\x65" \
+"\x63\x20\x43\x4d\x44\x20\x41\x52\x47\x20\x3b\x09\x52\x75\x6e\x20" \
+"\x43\x4d\x44\x20\x77\x69\x74\x68\x20\x61\x6c\x6c\x20\x69\x6e\x73" \
+"\x74\x61\x6e\x63\x65\x73\x20\x6f\x66\x20\x7b\x7d\x20\x72\x65\x70" \
+"\x6c\x61\x63\x65\x64\x20\x62\x79\x0a\x09\x09\x09\x66\x69\x6c\x65" \
+"\x20\x6e\x61\x6d\x65\x2e\x20\x46\x61\x69\x6c\x73\x20\x69\x66\x20" \
+"\x43\x4d\x44\x20\x65\x78\x69\x74\x73\x20\x77\x69\x74\x68\x20\x6e" \
+"\x6f\x6e\x7a\x65\x72\x6f\x00\x5b\x2d\x62\x73\x5d\x20\x5b\x2d\x77" \
+"\x20\x57\x49\x44\x54\x48\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
+"\x2e\x0a\x0a\x57\x72\x61\x70\x20\x69\x6e\x70\x75\x74\x20\x6c\x69" \
+"\x6e\x65\x73\x20\x69\x6e\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45" \
+"\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x2c\x20\x77\x72\x69" \
+"\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a" \
+"\x09\x2d\x62\x09\x43\x6f\x75\x6e\x74\x20\x62\x79\x74\x65\x73\x20" \
+"\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61\x6e\x20\x63\x6f\x6c\x75" \
+"\x6d\x6e\x73\x0a\x09\x2d\x73\x09\x42\x72\x65\x61\x6b\x20\x61\x74" \
+"\x20\x73\x70\x61\x63\x65\x73\x0a\x09\x2d\x77\x09\x55\x73\x65\x20" \
+"\x57\x49\x44\x54\x48\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x20\x69\x6e" \
+"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x38\x30\x00\x0a\x0a\x44\x69" \
+"\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x61\x6d\x6f\x75\x6e\x74" \
+"\x20\x6f\x66\x20\x66\x72\x65\x65\x20\x61\x6e\x64\x20\x75\x73\x65" \
+"\x64\x20\x73\x79\x73\x74\x65\x6d\x20\x6d\x65\x6d\x6f\x72\x79\x00" \
+"\x44\x45\x56\x49\x43\x45\x0a\x0a\x46\x72\x65\x65\x20\x61\x6c\x6c" \
+"\x20\x6d\x65\x6d\x6f\x72\x79\x20\x75\x73\x65\x64\x20\x62\x79\x20" \
+"\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x72\x61" \
+"\x6d\x64\x69\x73\x6b\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
+"\x46\x49\x4c\x45\x20\x6f\x72\x20\x50\x4f\x52\x54\x2f\x50\x52\x4f" \
+"\x54\x4f\x0a\x0a\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73" \
+"\x65\x73\x20\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20\x46\x49\x4c" \
+"\x45\x73\x20\x6f\x72\x20\x50\x4f\x52\x54\x73\x0a\x0a\x09\x2d\x6d" \
+"\x09\x46\x69\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20" \
+"\x77\x68\x69\x63\x68\x20\x75\x73\x65\x20\x73\x61\x6d\x65\x20\x66" \
+"\x73\x20\x61\x73\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x34\x2c\x2d" \
+"\x36\x09\x53\x65\x61\x72\x63\x68\x20\x6f\x6e\x6c\x79\x20\x49\x50" \
+"\x76\x34\x2f\x49\x50\x76\x36\x20\x73\x70\x61\x63\x65\x0a\x09\x2d" \
+"\x73\x09\x44\x6f\x6e\x27\x74\x20\x64\x69\x73\x70\x6c\x61\x79\x20" \
+"\x50\x49\x44\x73\x0a\x09\x2d\x6b\x09\x4b\x69\x6c\x6c\x20\x66\x6f" \
+"\x75\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x09\x2d" \
+"\x53\x49\x47\x4e\x41\x4c\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x6f" \
+"\x20\x73\x65\x6e\x64\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20" \
+"\x4b\x49\x4c\x4c\x29\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
+"\x5b\x2d\x2d\x5d\x20\x4f\x50\x54\x53\x54\x52\x49\x4e\x47\x20\x50" \
+"\x41\x52\x41\x4d\x53\x0a\x0a\x09\x2d\x61\x2c\x2d\x2d\x61\x6c\x74" \
"\x65\x72\x6e\x61\x74\x69\x76\x65\x09\x09\x41\x6c\x6c\x6f\x77\x20" \
"\x6c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x73\x74\x61" \
"\x72\x74\x69\x6e\x67\x20\x77\x69\x74\x68\x20\x73\x69\x6e\x67\x6c" \
"\x65\x20\x2d\x0a\x09\x2d\x6c\x2c\x2d\x2d\x6c\x6f\x6e\x67\x6f\x70" \
-"\x74\x69\x6f\x6e\x73\x3d\x6c\x6f\x6e\x67\x6f\x70\x74\x73\x09\x4c" \
-"\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x74\x6f\x20\x62" \
-"\x65\x20\x72\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\x0a\x09\x2d\x6e" \
-"\x2c\x2d\x2d\x6e\x61\x6d\x65\x3d\x70\x72\x6f\x67\x6e\x61\x6d\x65" \
-"\x09\x09\x54\x68\x65\x20\x6e\x61\x6d\x65\x20\x75\x6e\x64\x65\x72" \
-"\x20\x77\x68\x69\x63\x68\x20\x65\x72\x72\x6f\x72\x73\x20\x61\x72" \
-"\x65\x20\x72\x65\x70\x6f\x72\x74\x65\x64\x0a\x09\x2d\x6f\x2c\x2d" \
-"\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x6f\x70\x74\x73\x74\x72\x69" \
-"\x6e\x67\x09\x09\x53\x68\x6f\x72\x74\x20\x6f\x70\x74\x69\x6f\x6e" \
-"\x73\x20\x74\x6f\x20\x62\x65\x20\x72\x65\x63\x6f\x67\x6e\x69\x7a" \
-"\x65\x64\x0a\x09\x2d\x71\x2c\x2d\x2d\x71\x75\x69\x65\x74\x09\x09" \
-"\x09\x44\x69\x73\x61\x62\x6c\x65\x20\x65\x72\x72\x6f\x72\x20\x72" \
-"\x65\x70\x6f\x72\x74\x69\x6e\x67\x20\x62\x79\x20\x67\x65\x74\x6f" \
-"\x70\x74\x28\x33\x29\x0a\x09\x2d\x51\x2c\x2d\x2d\x71\x75\x69\x65" \
-"\x74\x2d\x6f\x75\x74\x70\x75\x74\x09\x09\x4e\x6f\x20\x6e\x6f\x72" \
-"\x6d\x61\x6c\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d\x73\x2c\x2d" \
-"\x2d\x73\x68\x65\x6c\x6c\x3d\x73\x68\x65\x6c\x6c\x09\x09\x53\x65" \
-"\x74\x20\x73\x68\x65\x6c\x6c\x20\x71\x75\x6f\x74\x69\x6e\x67\x20" \
-"\x63\x6f\x6e\x76\x65\x6e\x74\x69\x6f\x6e\x73\x0a\x09\x2d\x54\x2c" \
-"\x2d\x2d\x74\x65\x73\x74\x09\x09\x09\x54\x65\x73\x74\x20\x66\x6f" \
-"\x72\x20\x67\x65\x74\x6f\x70\x74\x28\x31\x29\x20\x76\x65\x72\x73" \
-"\x69\x6f\x6e\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x6e\x71\x75\x6f\x74" \
-"\x65\x64\x09\x09\x09\x44\x6f\x6e\x27\x74\x20\x71\x75\x6f\x74\x65" \
-"\x20\x74\x68\x65\x20\x6f\x75\x74\x70\x75\x74\x00\x5b\x2d\x48\x68" \
-"\x6e\x6c\x4c\x6f\x71\x76\x73\x72\x69\x77\x46\x45\x5d\x20\x5b\x2d" \
-"\x6d\x20\x4e\x5d\x20\x5b\x2d\x41\x2f\x42\x2f\x43\x20\x4e\x5d\x20" \
-"\x50\x41\x54\x54\x45\x52\x4e\x2f\x2d\x65\x20\x50\x41\x54\x54\x45" \
-"\x52\x4e\x2e\x2e\x2e\x2f\x2d\x66\x20\x46\x49\x4c\x45\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x65\x61\x72\x63\x68\x20" \
-"\x66\x6f\x72\x20\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x6e\x20\x46" \
-"\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a" \
-"\x0a\x09\x2d\x48\x09\x41\x64\x64\x20\x27\x66\x69\x6c\x65\x6e\x61" \
-"\x6d\x65\x3a\x27\x20\x70\x72\x65\x66\x69\x78\x0a\x09\x2d\x68\x09" \
-"\x44\x6f\x20\x6e\x6f\x74\x20\x61\x64\x64\x20\x27\x66\x69\x6c\x65" \
-"\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72\x65\x66\x69\x78\x0a\x09\x2d" \
-"\x6e\x09\x41\x64\x64\x20\x27\x6c\x69\x6e\x65\x5f\x6e\x6f\x3a\x27" \
-"\x20\x70\x72\x65\x66\x69\x78\x0a\x09\x2d\x6c\x09\x53\x68\x6f\x77" \
-"\x20\x6f\x6e\x6c\x79\x20\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x66" \
-"\x69\x6c\x65\x73\x20\x74\x68\x61\x74\x20\x6d\x61\x74\x63\x68\x0a" \
-"\x09\x2d\x4c\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6e\x61" \
-"\x6d\x65\x73\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x74\x68\x61" \
-"\x74\x20\x64\x6f\x6e\x27\x74\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d" \
-"\x63\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x63\x6f\x75\x6e" \
-"\x74\x20\x6f\x66\x20\x6d\x61\x74\x63\x68\x69\x6e\x67\x20\x6c\x69" \
-"\x6e\x65\x73\x0a\x09\x2d\x6f\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c" \
-"\x79\x20\x74\x68\x65\x20\x6d\x61\x74\x63\x68\x69\x6e\x67\x20\x70" \
-"\x61\x72\x74\x20\x6f\x66\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x71\x09" \
-"\x51\x75\x69\x65\x74\x2e\x20\x52\x65\x74\x75\x72\x6e\x20\x30\x20" \
-"\x69\x66\x20\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x66\x6f" \
-"\x75\x6e\x64\x2c\x20\x31\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65" \
-"\x0a\x09\x2d\x76\x09\x53\x65\x6c\x65\x63\x74\x20\x6e\x6f\x6e\x2d" \
-"\x6d\x61\x74\x63\x68\x69\x6e\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09" \
-"\x2d\x73\x09\x53\x75\x70\x70\x72\x65\x73\x73\x20\x6f\x70\x65\x6e" \
-"\x20\x61\x6e\x64\x20\x72\x65\x61\x64\x20\x65\x72\x72\x6f\x72\x73" \
-"\x0a\x09\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x69" \
-"\x09\x49\x67\x6e\x6f\x72\x65\x20\x63\x61\x73\x65\x0a\x09\x2d\x77" \
-"\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20\x77\x6f\x72" \
-"\x64\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x46\x09\x50\x41\x54\x54" \
-"\x45\x52\x4e\x20\x69\x73\x20\x61\x20\x6c\x69\x74\x65\x72\x61\x6c" \
-"\x20\x28\x6e\x6f\x74\x20\x72\x65\x67\x65\x78\x70\x29\x0a\x09\x2d" \
-"\x45\x09\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x61\x6e\x20" \
-"\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65\x67\x65\x78\x70\x0a" \
-"\x09\x2d\x6d\x20\x4e\x09\x4d\x61\x74\x63\x68\x20\x75\x70\x20\x74" \
-"\x6f\x20\x4e\x20\x74\x69\x6d\x65\x73\x20\x70\x65\x72\x20\x66\x69" \
-"\x6c\x65\x0a\x09\x2d\x41\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x4e" \
-"\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x74\x72\x61\x69\x6c\x69" \
-"\x6e\x67\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a\x09\x2d\x42\x20\x4e" \
-"\x09\x50\x72\x69\x6e\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73\x20\x6f" \
-"\x66\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63\x6f\x6e\x74\x65\x78" \
-"\x74\x0a\x09\x2d\x43\x20\x4e\x09\x53\x61\x6d\x65\x20\x61\x73\x20" \
-"\x27\x2d\x41\x20\x4e\x20\x2d\x42\x20\x4e\x27\x0a\x09\x2d\x65\x20" \
-"\x50\x54\x52\x4e\x09\x50\x61\x74\x74\x65\x72\x6e\x20\x74\x6f\x20" \
-"\x6d\x61\x74\x63\x68\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x52" \
-"\x65\x61\x64\x20\x70\x61\x74\x74\x65\x72\x6e\x20\x66\x72\x6f\x6d" \
-"\x20\x66\x69\x6c\x65\x00\x5b\x55\x53\x45\x52\x5d\x0a\x0a\x50\x72" \
-"\x69\x6e\x74\x20\x74\x68\x65\x20\x67\x72\x6f\x75\x70\x20\x6d\x65" \
-"\x6d\x62\x65\x72\x73\x68\x69\x70\x73\x20\x6f\x66\x20\x55\x53\x45" \
-"\x52\x20\x6f\x72\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x63\x75\x72" \
-"\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x00\x5b\x2d\x63" \
-"\x66\x74\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44" \
-"\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x73\x20" \
-"\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09" \
-"\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a" \
-"\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x74\x09\x54\x65" \
-"\x73\x74\x20\x66\x69\x6c\x65\x20\x69\x6e\x74\x65\x67\x72\x69\x74" \
-"\x79\x00\x5b\x2d\x63\x66\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x43\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c" \
-"\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09" \
-"\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d" \
+"\x74\x69\x6f\x6e\x73\x3d\x4c\x4f\x50\x54\x5b\x2c\x2e\x2e\x2e\x5d" \
+"\x09\x4c\x6f\x6e\x67\x20\x6f\x70\x74\x69\x6f\x6e\x73\x20\x74\x6f" \
+"\x20\x62\x65\x20\x72\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\x0a\x09" \
+"\x2d\x6e\x2c\x2d\x2d\x6e\x61\x6d\x65\x3d\x50\x52\x4f\x47\x4e\x41" \
+"\x4d\x45\x09\x09\x54\x68\x65\x20\x6e\x61\x6d\x65\x20\x75\x6e\x64" \
+"\x65\x72\x20\x77\x68\x69\x63\x68\x20\x65\x72\x72\x6f\x72\x73\x20" \
+"\x61\x72\x65\x20\x72\x65\x70\x6f\x72\x74\x65\x64\x0a\x09\x2d\x6f" \
+"\x2c\x2d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x3d\x4f\x50\x54\x53\x54" \
+"\x52\x49\x4e\x47\x09\x09\x53\x68\x6f\x72\x74\x20\x6f\x70\x74\x69" \
+"\x6f\x6e\x73\x20\x74\x6f\x20\x62\x65\x20\x72\x65\x63\x6f\x67\x6e" \
+"\x69\x7a\x65\x64\x0a\x09\x2d\x71\x2c\x2d\x2d\x71\x75\x69\x65\x74" \
+"\x09\x09\x09\x44\x69\x73\x61\x62\x6c\x65\x20\x65\x72\x72\x6f\x72" \
+"\x20\x72\x65\x70\x6f\x72\x74\x69\x6e\x67\x20\x62\x79\x20\x67\x65" \
+"\x74\x6f\x70\x74\x28\x33\x29\x0a\x09\x2d\x51\x2c\x2d\x2d\x71\x75" \
+"\x69\x65\x74\x2d\x6f\x75\x74\x70\x75\x74\x09\x09\x4e\x6f\x20\x6e" \
+"\x6f\x72\x6d\x61\x6c\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d\x73" \
+"\x2c\x2d\x2d\x73\x68\x65\x6c\x6c\x3d\x53\x48\x45\x4c\x4c\x09\x09" \
+"\x53\x65\x74\x20\x73\x68\x65\x6c\x6c\x20\x71\x75\x6f\x74\x69\x6e" \
+"\x67\x20\x63\x6f\x6e\x76\x65\x6e\x74\x69\x6f\x6e\x73\x0a\x09\x2d" \
+"\x54\x2c\x2d\x2d\x74\x65\x73\x74\x09\x09\x09\x54\x65\x73\x74\x20" \
+"\x66\x6f\x72\x20\x67\x65\x74\x6f\x70\x74\x28\x31\x29\x20\x76\x65" \
+"\x72\x73\x69\x6f\x6e\x0a\x09\x2d\x75\x2c\x2d\x2d\x75\x6e\x71\x75" \
+"\x6f\x74\x65\x64\x09\x09\x09\x44\x6f\x6e\x27\x74\x20\x71\x75\x6f" \
+"\x74\x65\x20\x74\x68\x65\x20\x6f\x75\x74\x70\x75\x74\x0a\x0a\x45" \
+"\x78\x61\x6d\x70\x6c\x65\x3a\x0a\x0a\x4f\x3d\x60\x67\x65\x74\x6f" \
+"\x70\x74\x20\x2d\x6c\x20\x62\x62\x3a\x20\x2d\x2d\x20\x61\x62\x3a" \
+"\x63\x3a\x3a\x20\x22\x24\x40\x22\x60\x20\x7c\x7c\x20\x65\x78\x69" \
+"\x74\x20\x31\x0a\x65\x76\x61\x6c\x20\x73\x65\x74\x20\x2d\x2d\x20" \
+"\x22\x24\x4f\x22\x0a\x77\x68\x69\x6c\x65\x20\x74\x72\x75\x65\x3b" \
+"\x20\x64\x6f\x0a\x09\x63\x61\x73\x65\x20\x22\x24\x31\x22\x20\x69" \
+"\x6e\x0a\x09\x2d\x61\x29\x09\x65\x63\x68\x6f\x20\x41\x3b\x20\x73" \
+"\x68\x69\x66\x74\x3b\x3b\x0a\x09\x2d\x62\x7c\x2d\x2d\x62\x62\x29" \
+"\x20\x65\x63\x68\x6f\x20\x22\x42\x3a\x27\x24\x32\x27\x22\x3b\x20" \
+"\x73\x68\x69\x66\x74\x20\x32\x3b\x3b\x0a\x09\x2d\x63\x29\x09\x63" \
+"\x61\x73\x65\x20\x22\x24\x32\x22\x20\x69\x6e\x0a\x09\x09\x22\x22" \
+"\x29\x09\x65\x63\x68\x6f\x20\x43\x3b\x20\x73\x68\x69\x66\x74\x20" \
+"\x32\x3b\x3b\x0a\x09\x09\x2a\x29\x09\x65\x63\x68\x6f\x20\x22\x43" \
+"\x3a\x27\x24\x32\x27\x22\x3b\x20\x73\x68\x69\x66\x74\x20\x32\x3b" \
+"\x3b\x0a\x09\x09\x65\x73\x61\x63\x3b\x3b\x0a\x09\x2d\x2d\x29\x09" \
+"\x73\x68\x69\x66\x74\x3b\x20\x62\x72\x65\x61\x6b\x3b\x3b\x0a\x09" \
+"\x2a\x29\x09\x65\x63\x68\x6f\x20\x45\x72\x72\x6f\x72\x3b\x20\x65" \
+"\x78\x69\x74\x20\x31\x3b\x3b\x0a\x09\x65\x73\x61\x63\x0a\x64\x6f" \
+"\x6e\x65\x00\x5b\x2d\x48\x68\x6e\x6c\x4c\x6f\x71\x76\x73\x72\x69" \
+"\x77\x46\x45\x5d\x20\x5b\x2d\x6d\x20\x4e\x5d\x20\x5b\x2d\x41\x2f" \
+"\x42\x2f\x43\x20\x4e\x5d\x20\x50\x41\x54\x54\x45\x52\x4e\x2f\x2d" \
+"\x65\x20\x50\x41\x54\x54\x45\x52\x4e\x2e\x2e\x2e\x2f\x2d\x66\x20" \
+"\x46\x49\x4c\x45\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
+"\x53\x65\x61\x72\x63\x68\x20\x66\x6f\x72\x20\x50\x41\x54\x54\x45" \
+"\x52\x4e\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20" \
+"\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x48\x09\x41\x64\x64\x20" \
+"\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72\x65\x66" \
+"\x69\x78\x0a\x09\x2d\x68\x09\x44\x6f\x20\x6e\x6f\x74\x20\x61\x64" \
+"\x64\x20\x27\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x27\x20\x70\x72" \
+"\x65\x66\x69\x78\x0a\x09\x2d\x6e\x09\x41\x64\x64\x20\x27\x6c\x69" \
+"\x6e\x65\x5f\x6e\x6f\x3a\x27\x20\x70\x72\x65\x66\x69\x78\x0a\x09" \
+"\x2d\x6c\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6e\x61\x6d" \
+"\x65\x73\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x74\x68\x61\x74" \
+"\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x4c\x09\x53\x68\x6f\x77\x20" \
+"\x6f\x6e\x6c\x79\x20\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x66\x69" \
+"\x6c\x65\x73\x20\x74\x68\x61\x74\x20\x64\x6f\x6e\x27\x74\x20\x6d" \
+"\x61\x74\x63\x68\x0a\x09\x2d\x63\x09\x53\x68\x6f\x77\x20\x6f\x6e" \
+"\x6c\x79\x20\x63\x6f\x75\x6e\x74\x20\x6f\x66\x20\x6d\x61\x74\x63" \
+"\x68\x69\x6e\x67\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x6f\x09\x53" \
+"\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x74\x68\x65\x20\x6d\x61\x74" \
+"\x63\x68\x69\x6e\x67\x20\x70\x61\x72\x74\x20\x6f\x66\x20\x6c\x69" \
+"\x6e\x65\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x2e\x20\x52\x65" \
+"\x74\x75\x72\x6e\x20\x30\x20\x69\x66\x20\x50\x41\x54\x54\x45\x52" \
+"\x4e\x20\x69\x73\x20\x66\x6f\x75\x6e\x64\x2c\x20\x31\x20\x6f\x74" \
+"\x68\x65\x72\x77\x69\x73\x65\x0a\x09\x2d\x76\x09\x53\x65\x6c\x65" \
+"\x63\x74\x20\x6e\x6f\x6e\x2d\x6d\x61\x74\x63\x68\x69\x6e\x67\x20" \
+"\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x73\x09\x53\x75\x70\x70\x72\x65" \
+"\x73\x73\x20\x6f\x70\x65\x6e\x20\x61\x6e\x64\x20\x72\x65\x61\x64" \
+"\x20\x65\x72\x72\x6f\x72\x73\x0a\x09\x2d\x72\x09\x52\x65\x63\x75" \
+"\x72\x73\x65\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20\x63" \
+"\x61\x73\x65\x0a\x09\x2d\x77\x09\x4d\x61\x74\x63\x68\x20\x77\x68" \
+"\x6f\x6c\x65\x20\x77\x6f\x72\x64\x73\x20\x6f\x6e\x6c\x79\x0a\x09" \
+"\x2d\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20\x6c" \
+"\x69\x6e\x65\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x46\x09\x50\x41" \
+"\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x61\x20\x6c\x69\x74\x65\x72" \
+"\x61\x6c\x20\x28\x6e\x6f\x74\x20\x72\x65\x67\x65\x78\x70\x29\x0a" \
+"\x09\x2d\x45\x09\x50\x41\x54\x54\x45\x52\x4e\x20\x69\x73\x20\x61" \
+"\x6e\x20\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65\x67\x65\x78" \
+"\x70\x0a\x09\x2d\x6d\x20\x4e\x09\x4d\x61\x74\x63\x68\x20\x75\x70" \
+"\x20\x74\x6f\x20\x4e\x20\x74\x69\x6d\x65\x73\x20\x70\x65\x72\x20" \
+"\x66\x69\x6c\x65\x0a\x09\x2d\x41\x20\x4e\x09\x50\x72\x69\x6e\x74" \
+"\x20\x4e\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x74\x72\x61\x69" \
+"\x6c\x69\x6e\x67\x20\x63\x6f\x6e\x74\x65\x78\x74\x0a\x09\x2d\x42" \
+"\x20\x4e\x09\x50\x72\x69\x6e\x74\x20\x4e\x20\x6c\x69\x6e\x65\x73" \
+"\x20\x6f\x66\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63\x6f\x6e\x74" \
+"\x65\x78\x74\x0a\x09\x2d\x43\x20\x4e\x09\x53\x61\x6d\x65\x20\x61" \
+"\x73\x20\x27\x2d\x41\x20\x4e\x20\x2d\x42\x20\x4e\x27\x0a\x09\x2d" \
+"\x65\x20\x50\x54\x52\x4e\x09\x50\x61\x74\x74\x65\x72\x6e\x20\x74" \
+"\x6f\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45" \
+"\x09\x52\x65\x61\x64\x20\x70\x61\x74\x74\x65\x72\x6e\x20\x66\x72" \
+"\x6f\x6d\x20\x66\x69\x6c\x65\x00\x5b\x55\x53\x45\x52\x5d\x0a\x0a" \
+"\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x67\x72\x6f\x75\x70\x20" \
+"\x6d\x65\x6d\x62\x65\x72\x73\x68\x69\x70\x73\x20\x6f\x66\x20\x55" \
+"\x53\x45\x52\x20\x6f\x72\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x63" \
+"\x75\x72\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x00\x5b" \
+"\x2d\x63\x66\x74\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
+"\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45" \
+"\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d" \
"\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
-"\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74\x20\x31\x30\x20" \
-"\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x46\x49" \
-"\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x74\x6f" \
-"\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a\x57\x69\x74\x68\x20\x6d\x6f" \
-"\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x65\x20\x46\x49\x4c\x45" \
-"\x2c\x20\x70\x72\x65\x63\x65\x64\x65\x20\x65\x61\x63\x68\x20\x77" \
-"\x69\x74\x68\x20\x61\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x68" \
-"\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09\x2d\x6e\x20\x4e\x5b\x6b\x62" \
-"\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74\x20\x4e" \
-"\x20\x6c\x69\x6e\x65\x73\x0a\x0a\x4e\x20\x6d\x61\x79\x20\x62\x65" \
-"\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79\x20\x6b\x20\x28" \
-"\x78\x31\x30\x32\x34\x29\x2c\x20\x62\x20\x28\x78\x35\x31\x32\x29" \
-"\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78\x31\x30\x32\x34\x5e\x32\x29" \
-"\x2e\x00\x5b\x2d\x62\x63\x43\x64\x65\x66\x6e\x6f\x73\x76\x78\x5d" \
-"\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x69\x73\x70" \
-"\x6c\x61\x79\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74" \
-"\x64\x69\x6e\x29\x20\x69\x6e\x20\x61\x20\x75\x73\x65\x72\x20\x73" \
-"\x70\x65\x63\x69\x66\x69\x65\x64\x20\x66\x6f\x72\x6d\x61\x74\x0a" \
-"\x0a\x09\x2d\x62\x09\x09\x4f\x6e\x65\x2d\x62\x79\x74\x65\x20\x6f" \
-"\x63\x74\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x63" \
-"\x09\x09\x4f\x6e\x65\x2d\x62\x79\x74\x65\x20\x63\x68\x61\x72\x61" \
-"\x63\x74\x65\x72\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x43" \
-"\x09\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x20\x68\x65\x78\x2b" \
-"\x41\x53\x43\x49\x49\x2c\x20\x31\x36\x20\x62\x79\x74\x65\x73\x20" \
-"\x70\x65\x72\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64\x09\x09\x54\x77" \
-"\x6f\x2d\x62\x79\x74\x65\x20\x64\x65\x63\x69\x6d\x61\x6c\x20\x64" \
-"\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x65\x20\x46\x4f\x52\x4d\x41" \
-"\x54\x5f\x53\x54\x52\x49\x4e\x47\x0a\x09\x2d\x66\x20\x46\x4f\x52" \
-"\x4d\x41\x54\x5f\x46\x49\x4c\x45\x0a\x09\x2d\x6e\x20\x4c\x45\x4e" \
-"\x47\x54\x48\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x20\x6f\x6e" \
-"\x6c\x79\x20\x4c\x45\x4e\x47\x54\x48\x20\x62\x79\x74\x65\x73\x20" \
-"\x6f\x66\x20\x69\x6e\x70\x75\x74\x0a\x09\x2d\x6f\x09\x09\x54\x77" \
-"\x6f\x2d\x62\x79\x74\x65\x20\x6f\x63\x74\x61\x6c\x20\x64\x69\x73" \
-"\x70\x6c\x61\x79\x0a\x09\x2d\x73\x20\x4f\x46\x46\x53\x45\x54\x09" \
-"\x53\x6b\x69\x70\x20\x4f\x46\x46\x53\x45\x54\x20\x62\x79\x74\x65" \
-"\x73\x0a\x09\x2d\x76\x09\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x61" \
-"\x6c\x6c\x20\x69\x6e\x70\x75\x74\x20\x64\x61\x74\x61\x0a\x09\x2d" \
-"\x78\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x68\x65\x78\x61" \
-"\x64\x65\x63\x69\x6d\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x55\x53\x45\x52\x5d" \
-"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74" \
-"\x69\x6f\x6e\x20\x61\x62\x6f\x75\x74\x20\x55\x53\x45\x52\x20\x6f" \
-"\x72\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x75\x73" \
-"\x65\x72\x0a\x0a\x09\x2d\x75\x09\x55\x73\x65\x72\x20\x49\x44\x0a" \
-"\x09\x2d\x67\x09\x47\x72\x6f\x75\x70\x20\x49\x44\x0a\x09\x2d\x47" \
-"\x09\x53\x75\x70\x70\x6c\x65\x6d\x65\x6e\x74\x61\x72\x79\x20\x67" \
-"\x72\x6f\x75\x70\x20\x49\x44\x73\x0a\x09\x2d\x6e\x09\x50\x72\x69" \
-"\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d\x72\x09" \
-"\x50\x72\x69\x6e\x74\x20\x72\x65\x61\x6c\x20\x49\x44\x20\x69\x6e" \
-"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x65\x66\x66\x65\x63\x74\x69" \
-"\x76\x65\x20\x49\x44\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20" \
-"\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76" \
-"\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61" \
-"\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63" \
-"\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46" \
-"\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f" \
-"\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70" \
-"\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69" \
-"\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72" \
-"\x00\x5b\x2d\x63\x64\x44\x73\x70\x5d\x20\x5b\x2d\x6f\x20\x55\x53" \
-"\x45\x52\x5d\x20\x5b\x2d\x67\x20\x47\x52\x50\x5d\x20\x5b\x2d\x6d" \
-"\x20\x4d\x4f\x44\x45\x5d\x20\x5b\x53\x4f\x55\x52\x43\x45\x5d\x2e" \
-"\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f\x70\x79\x20\x66\x69" \
-"\x6c\x65\x73\x20\x61\x6e\x64\x20\x73\x65\x74\x20\x61\x74\x74\x72" \
-"\x69\x62\x75\x74\x65\x73\x0a\x0a\x09\x2d\x63\x09\x4a\x75\x73\x74" \
-"\x20\x63\x6f\x70\x79\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a" \
-"\x09\x2d\x64\x09\x43\x72\x65\x61\x74\x65\x20\x64\x69\x72\x65\x63" \
-"\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x44\x09\x43\x72\x65\x61\x74" \
-"\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x74\x61\x72\x67\x65\x74" \
-"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x73" \
-"\x09\x53\x74\x72\x69\x70\x20\x73\x79\x6d\x62\x6f\x6c\x20\x74\x61" \
-"\x62\x6c\x65\x0a\x09\x2d\x70\x09\x50\x72\x65\x73\x65\x72\x76\x65" \
-"\x20\x64\x61\x74\x65\x0a\x09\x2d\x6f\x20\x55\x53\x45\x52\x09\x53" \
-"\x65\x74\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70\x0a\x09\x2d\x67" \
-"\x20\x47\x52\x50\x09\x53\x65\x74\x20\x67\x72\x6f\x75\x70\x20\x6f" \
-"\x77\x6e\x65\x72\x73\x68\x69\x70\x0a\x09\x2d\x6d\x20\x4d\x4f\x44" \
-"\x45\x09\x53\x65\x74\x20\x70\x65\x72\x6d\x69\x73\x73\x69\x6f\x6e" \
-"\x73\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x49" \
-"\x44\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69\x67" \
-"\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20\x54\x45" \
-"\x52\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65\x6e\x20\x50\x49\x44" \
-"\x73\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20" \
-"\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64" \
-"\x20\x6e\x75\x6d\x62\x65\x72\x73\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d" \
-"\x71\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x52\x4f\x43\x45\x53" \
-"\x53\x5f\x4e\x41\x4d\x45\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20" \
-"\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c" \
-"\x74\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65" \
-"\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x0a\x09\x2d\x6c" \
-"\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61\x6c" \
-"\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75\x6d\x62\x65" \
-"\x72\x73\x0a\x09\x2d\x71\x09\x44\x6f\x6e\x27\x74\x20\x63\x6f\x6d" \
-"\x70\x6c\x61\x69\x6e\x20\x69\x66\x20\x6e\x6f\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x65\x73\x20\x77\x65\x72\x65\x20\x6b\x69\x6c\x6c\x65" \
-"\x64\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x5b\x2d" \
-"\x6f\x20\x50\x49\x44\x5d\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20" \
-"\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c" \
-"\x74\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x61\x6c\x6c\x20" \
-"\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x6f\x75\x74\x73\x69\x64" \
-"\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x73\x65\x73\x73\x69\x6f" \
-"\x6e\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20" \
-"\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64" \
-"\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d\x6f\x20\x50\x49\x44" \
-"\x09\x44\x6f\x6e\x27\x74\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x68" \
-"\x69\x73\x20\x50\x49\x44\x00\x5b\x2d\x45\x4d\x4e\x6d\x68\x7e\x49" \
-"\x3f\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69" \
-"\x65\x77\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69" \
-"\x6e\x29\x20\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c" \
-"\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x0a\x09\x2d\x45\x09" \
-"\x51\x75\x69\x74\x20\x6f\x6e\x63\x65\x20\x74\x68\x65\x20\x65\x6e" \
-"\x64\x20\x6f\x66\x20\x61\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x72" \
-"\x65\x61\x63\x68\x65\x64\x0a\x09\x2d\x4d\x2c\x2d\x6d\x09\x44\x69" \
-"\x73\x70\x6c\x61\x79\x20\x73\x74\x61\x74\x75\x73\x20\x6c\x69\x6e" \
-"\x65\x20\x77\x69\x74\x68\x20\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x73\x0a\x09\x09\x61\x6e\x64\x20\x70\x65\x72\x63\x65\x6e" \
-"\x74\x61\x67\x65\x20\x74\x68\x72\x6f\x75\x67\x68\x20\x74\x68\x65" \
-"\x20\x66\x69\x6c\x65\x0a\x09\x2d\x4e\x09\x50\x72\x65\x66\x69\x78" \
-"\x20\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x74\x6f\x20" \
-"\x65\x61\x63\x68\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x49\x09\x49\x67" \
-"\x6e\x6f\x72\x65\x20\x63\x61\x73\x65\x20\x69\x6e\x20\x61\x6c\x6c" \
-"\x20\x73\x65\x61\x72\x63\x68\x65\x73\x0a\x09\x2d\x7e\x09\x53\x75" \
-"\x70\x70\x72\x65\x73\x73\x20\x7e\x73\x20\x64\x69\x73\x70\x6c\x61" \
-"\x79\x65\x64\x20\x70\x61\x73\x74\x20\x74\x68\x65\x20\x65\x6e\x64" \
-"\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x00\x5b\x4f\x50" \
-"\x54\x49\x4f\x4e\x53\x5d\x20\x54\x41\x52\x47\x45\x54\x2e\x2e\x2e" \
-"\x20\x4c\x49\x4e\x4b\x7c\x44\x49\x52\x0a\x0a\x43\x72\x65\x61\x74" \
-"\x65\x20\x61\x20\x6c\x69\x6e\x6b\x20\x4c\x49\x4e\x4b\x20\x6f\x72" \
-"\x20\x44\x49\x52\x2f\x54\x41\x52\x47\x45\x54\x20\x74\x6f\x20\x74" \
-"\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x54\x41\x52" \
-"\x47\x45\x54\x28\x73\x29\x0a\x0a\x09\x2d\x73\x09\x4d\x61\x6b\x65" \
-"\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x69\x6e\x73\x74\x65\x61" \
-"\x64\x20\x6f\x66\x20\x68\x61\x72\x64\x6c\x69\x6e\x6b\x73\x0a\x09" \
-"\x2d\x66\x09\x52\x65\x6d\x6f\x76\x65\x20\x65\x78\x69\x73\x74\x69" \
-"\x6e\x67\x20\x64\x65\x73\x74\x69\x6e\x61\x74\x69\x6f\x6e\x73\x0a" \
-"\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x64\x65\x72\x65\x66\x65" \
-"\x72\x65\x6e\x63\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x2d" \
-"\x20\x74\x72\x65\x61\x74\x20\x6c\x69\x6b\x65\x20\x6e\x6f\x72\x6d" \
-"\x61\x6c\x20\x66\x69\x6c\x65\x0a\x09\x2d\x62\x09\x4d\x61\x6b\x65" \
-"\x20\x61\x20\x62\x61\x63\x6b\x75\x70\x20\x6f\x66\x20\x74\x68\x65" \
-"\x20\x74\x61\x72\x67\x65\x74\x20\x28\x69\x66\x20\x65\x78\x69\x73" \
-"\x74\x73\x29\x20\x62\x65\x66\x6f\x72\x65\x20\x6c\x69\x6e\x6b\x20" \
-"\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x53\x20\x73\x75" \
-"\x66\x09\x55\x73\x65\x20\x73\x75\x66\x66\x69\x78\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x7e\x20\x77\x68\x65\x6e\x20\x6d" \
-"\x61\x6b\x69\x6e\x67\x20\x62\x61\x63\x6b\x75\x70\x20\x66\x69\x6c" \
-"\x65\x73\x00\x5b\x2d\x6f\x20\x4f\x46\x53\x5d\x20\x4c\x4f\x4f\x50" \
-"\x44\x45\x56\x20\x46\x49\x4c\x45\x20\x2d\x20\x61\x73\x73\x6f\x63" \
-"\x69\x61\x74\x65\x20\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65" \
-"\x73\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x2d\x64\x20\x4c\x4f" \
-"\x4f\x50\x44\x45\x56\x20\x2d\x20\x64\x69\x73\x61\x73\x73\x6f\x63" \
-"\x69\x61\x74\x65\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70\x20\x5b\x2d" \
-"\x66\x5d\x20\x2d\x20\x73\x68\x6f\x77\x0a\x0a\x09\x2d\x6f\x20\x4f" \
-"\x46\x53\x09\x53\x74\x61\x72\x74\x20\x4f\x46\x53\x20\x62\x79\x74" \
-"\x65\x73\x20\x69\x6e\x74\x6f\x20\x46\x49\x4c\x45\x0a\x09\x2d\x66" \
-"\x09\x53\x68\x6f\x77\x20\x66\x69\x72\x73\x74\x20\x66\x72\x65\x65" \
-"\x20\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x00\x5b\x2d\x31" \
-"\x41\x61\x43\x78\x64\x4c\x48\x52\x46\x70\x6c\x69\x6e\x73\x65\x68" \
-"\x72\x53\x58\x76\x63\x74\x75\x5d\x20\x5b\x2d\x77\x20\x57\x49\x44" \
-"\x54\x48\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c" \
-"\x69\x73\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x63\x6f" \
-"\x6e\x74\x65\x6e\x74\x73\x0a\x0a\x09\x2d\x31\x09\x4f\x6e\x65\x20" \
-"\x63\x6f\x6c\x75\x6d\x6e\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d" \
-"\x61\x09\x49\x6e\x63\x6c\x75\x64\x65\x20\x65\x6e\x74\x72\x69\x65" \
-"\x73\x20\x77\x68\x69\x63\x68\x20\x73\x74\x61\x72\x74\x20\x77\x69" \
-"\x74\x68\x20\x2e\x0a\x09\x2d\x41\x09\x4c\x69\x6b\x65\x20\x2d\x61" \
-"\x2c\x20\x62\x75\x74\x20\x65\x78\x63\x6c\x75\x64\x65\x20\x2e\x20" \
-"\x61\x6e\x64\x20\x2e\x2e\x0a\x09\x2d\x43\x09\x4c\x69\x73\x74\x20" \
-"\x62\x79\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x09\x2d\x78\x09\x4c" \
-"\x69\x73\x74\x20\x62\x79\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x64" \
-"\x09\x4c\x69\x73\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20" \
-"\x65\x6e\x74\x72\x69\x65\x73\x20\x69\x6e\x73\x74\x65\x61\x64\x20" \
-"\x6f\x66\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x0a\x09\x2d\x4c\x09" \
-"\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a" \
-"\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69" \
-"\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c" \
-"\x69\x6e\x65\x0a\x09\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a" \
-"\x09\x2d\x70\x09\x41\x70\x70\x65\x6e\x64\x20\x2f\x20\x74\x6f\x20" \
-"\x64\x69\x72\x20\x65\x6e\x74\x72\x69\x65\x73\x0a\x09\x2d\x46\x09" \
-"\x41\x70\x70\x65\x6e\x64\x20\x69\x6e\x64\x69\x63\x61\x74\x6f\x72" \
-"\x20\x28\x6f\x6e\x65\x20\x6f\x66\x20\x2a\x2f\x3d\x40\x7c\x29\x20" \
-"\x74\x6f\x20\x65\x6e\x74\x72\x69\x65\x73\x0a\x09\x2d\x6c\x09\x4c" \
-"\x6f\x6e\x67\x20\x6c\x69\x73\x74\x69\x6e\x67\x20\x66\x6f\x72\x6d" \
-"\x61\x74\x0a\x09\x2d\x69\x09\x4c\x69\x73\x74\x20\x69\x6e\x6f\x64" \
-"\x65\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d\x6e\x09\x4c\x69" \
-"\x73\x74\x20\x6e\x75\x6d\x65\x72\x69\x63\x20\x55\x49\x44\x73\x20" \
-"\x61\x6e\x64\x20\x47\x49\x44\x73\x20\x69\x6e\x73\x74\x65\x61\x64" \
-"\x20\x6f\x66\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x73\x09\x4c\x69" \
-"\x73\x74\x20\x61\x6c\x6c\x6f\x63\x61\x74\x65\x64\x20\x62\x6c\x6f" \
-"\x63\x6b\x73\x0a\x09\x2d\x65\x09\x4c\x69\x73\x74\x20\x66\x75\x6c" \
-"\x6c\x20\x64\x61\x74\x65\x20\x61\x6e\x64\x20\x74\x69\x6d\x65\x0a" \
-"\x09\x2d\x68\x09\x4c\x69\x73\x74\x20\x73\x69\x7a\x65\x73\x20\x69" \
-"\x6e\x20\x68\x75\x6d\x61\x6e\x20\x72\x65\x61\x64\x61\x62\x6c\x65" \
-"\x20\x66\x6f\x72\x6d\x61\x74\x20\x28\x31\x4b\x20\x32\x34\x33\x4d" \
-"\x20\x32\x47\x29\x0a\x09\x2d\x72\x09\x53\x6f\x72\x74\x20\x69\x6e" \
-"\x20\x72\x65\x76\x65\x72\x73\x65\x20\x6f\x72\x64\x65\x72\x0a\x09" \
-"\x2d\x53\x09\x53\x6f\x72\x74\x20\x62\x79\x20\x73\x69\x7a\x65\x0a" \
-"\x09\x2d\x58\x09\x53\x6f\x72\x74\x20\x62\x79\x20\x65\x78\x74\x65" \
-"\x6e\x73\x69\x6f\x6e\x0a\x09\x2d\x76\x09\x53\x6f\x72\x74\x20\x62" \
-"\x79\x20\x76\x65\x72\x73\x69\x6f\x6e\x0a\x09\x2d\x63\x09\x57\x69" \
-"\x74\x68\x20\x2d\x6c\x3a\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x63" \
-"\x74\x69\x6d\x65\x0a\x09\x2d\x74\x09\x57\x69\x74\x68\x20\x2d\x6c" \
-"\x3a\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x6d\x74\x69\x6d\x65\x0a" \
-"\x09\x2d\x75\x09\x57\x69\x74\x68\x20\x2d\x6c\x3a\x20\x73\x6f\x72" \
-"\x74\x20\x62\x79\x20\x61\x74\x69\x6d\x65\x0a\x09\x2d\x77\x20\x4e" \
-"\x09\x41\x73\x73\x75\x6d\x65\x20\x74\x68\x65\x20\x74\x65\x72\x6d" \
-"\x69\x6e\x61\x6c\x20\x69\x73\x20\x4e\x20\x63\x6f\x6c\x75\x6d\x6e" \
-"\x73\x20\x77\x69\x64\x65\x0a\x09\x2d\x2d\x63\x6f\x6c\x6f\x72\x5b" \
-"\x3d\x7b\x61\x6c\x77\x61\x79\x73\x2c\x6e\x65\x76\x65\x72\x2c\x61" \
-"\x75\x74\x6f\x7d\x5d\x09\x43\x6f\x6e\x74\x72\x6f\x6c\x20\x63\x6f" \
-"\x6c\x6f\x72\x69\x6e\x67\x00\x5b\x2d\x52\x61\x64\x6c\x76\x5d\x20" \
-"\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x69\x73\x74\x20" \
-"\x66\x69\x6c\x65\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x20" \
-"\x6f\x6e\x20\x61\x6e\x20\x65\x78\x74\x32\x20\x66\x73\x0a\x0a\x09" \
-"\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09\x2d\x61\x09\x44" \
-"\x6f\x6e\x27\x74\x20\x68\x69\x64\x65\x20\x65\x6e\x74\x72\x69\x65" \
-"\x73\x20\x73\x74\x61\x72\x74\x69\x6e\x67\x20\x77\x69\x74\x68\x20" \
-"\x2e\x0a\x09\x2d\x64\x09\x4c\x69\x73\x74\x20\x64\x69\x72\x65\x63" \
-"\x74\x6f\x72\x79\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x69\x6e\x73" \
-"\x74\x65\x61\x64\x20\x6f\x66\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73" \
-"\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x6c\x6f\x6e\x67\x20\x66" \
-"\x6c\x61\x67\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x76\x09\x4c\x69" \
-"\x73\x74\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x27\x73\x20\x76\x65" \
-"\x72\x73\x69\x6f\x6e\x2f\x67\x65\x6e\x65\x72\x61\x74\x69\x6f\x6e" \
-"\x20\x6e\x75\x6d\x62\x65\x72\x00\x5b\x2d\x71\x66\x77\x72\x73\x76" \
+"\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x74\x09" \
+"\x54\x65\x73\x74\x20\x66\x69\x6c\x65\x20\x69\x6e\x74\x65\x67\x72" \
+"\x69\x74\x79\x00\x5b\x2d\x63\x66\x64\x5d\x20\x5b\x46\x49\x4c\x45" \
+"\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6d\x70\x72\x65\x73\x73\x20\x46" \
+"\x49\x4c\x45\x73\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a" \
+"\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x0a" \
+"\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64" \
+"\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x4f" \
+"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
+"\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74\x20\x31" \
+"\x30\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x65\x61\x63\x68\x20" \
+"\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20" \
+"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a\x57\x69\x74\x68\x20" \
+"\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x65\x20\x46\x49" \
+"\x4c\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65\x20\x65\x61\x63\x68" \
+"\x20\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65" \
+"\x20\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09\x2d\x6e\x20\x4e\x5b" \
+"\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x66\x69\x72\x73\x74" \
+"\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x0a\x4e\x20\x6d\x61\x79\x20" \
+"\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79\x20\x6b" \
+"\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x20\x62\x20\x28\x78\x35\x31" \
+"\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78\x31\x30\x32\x34\x5e" \
+"\x32\x29\x2e\x00\x5b\x2d\x62\x63\x43\x64\x65\x66\x6e\x6f\x73\x76" \
+"\x78\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x69" \
+"\x73\x70\x6c\x61\x79\x20\x46\x49\x4c\x45\x73\x20\x28\x6f\x72\x20" \
+"\x73\x74\x64\x69\x6e\x29\x20\x69\x6e\x20\x61\x20\x75\x73\x65\x72" \
+"\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x66\x6f\x72\x6d\x61" \
+"\x74\x0a\x0a\x09\x2d\x62\x09\x09\x4f\x6e\x65\x2d\x62\x79\x74\x65" \
+"\x20\x6f\x63\x74\x61\x6c\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09" \
+"\x2d\x63\x09\x09\x4f\x6e\x65\x2d\x62\x79\x74\x65\x20\x63\x68\x61" \
+"\x72\x61\x63\x74\x65\x72\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09" \
+"\x2d\x43\x09\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x20\x68\x65" \
+"\x78\x2b\x41\x53\x43\x49\x49\x2c\x20\x31\x36\x20\x62\x79\x74\x65" \
+"\x73\x20\x70\x65\x72\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x64\x09\x09" \
+"\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x64\x65\x63\x69\x6d\x61\x6c" \
+"\x20\x64\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x65\x20\x46\x4f\x52" \
+"\x4d\x41\x54\x5f\x53\x54\x52\x49\x4e\x47\x0a\x09\x2d\x66\x20\x46" \
+"\x4f\x52\x4d\x41\x54\x5f\x46\x49\x4c\x45\x0a\x09\x2d\x6e\x20\x4c" \
+"\x45\x4e\x47\x54\x48\x09\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x20" \
+"\x6f\x6e\x6c\x79\x20\x4c\x45\x4e\x47\x54\x48\x20\x62\x79\x74\x65" \
+"\x73\x20\x6f\x66\x20\x69\x6e\x70\x75\x74\x0a\x09\x2d\x6f\x09\x09" \
+"\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x6f\x63\x74\x61\x6c\x20\x64" \
+"\x69\x73\x70\x6c\x61\x79\x0a\x09\x2d\x73\x20\x4f\x46\x46\x53\x45" \
+"\x54\x09\x53\x6b\x69\x70\x20\x4f\x46\x46\x53\x45\x54\x20\x62\x79" \
+"\x74\x65\x73\x0a\x09\x2d\x76\x09\x09\x44\x69\x73\x70\x6c\x61\x79" \
+"\x20\x61\x6c\x6c\x20\x69\x6e\x70\x75\x74\x20\x64\x61\x74\x61\x0a" \
+"\x09\x2d\x78\x09\x09\x54\x77\x6f\x2d\x62\x79\x74\x65\x20\x68\x65" \
+"\x78\x61\x64\x65\x63\x69\x6d\x61\x6c\x20\x64\x69\x73\x70\x6c\x61" \
+"\x79\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x55\x53\x45" \
+"\x52\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x69\x6e\x66\x6f\x72\x6d" \
+"\x61\x74\x69\x6f\x6e\x20\x61\x62\x6f\x75\x74\x20\x55\x53\x45\x52" \
+"\x20\x6f\x72\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20" \
+"\x75\x73\x65\x72\x0a\x0a\x09\x2d\x75\x09\x55\x73\x65\x72\x20\x49" \
+"\x44\x0a\x09\x2d\x67\x09\x47\x72\x6f\x75\x70\x20\x49\x44\x0a\x09" \
+"\x2d\x47\x09\x53\x75\x70\x70\x6c\x65\x6d\x65\x6e\x74\x61\x72\x79" \
+"\x20\x67\x72\x6f\x75\x70\x20\x49\x44\x73\x0a\x09\x2d\x6e\x09\x50" \
+"\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20\x69\x6e\x73\x74\x65" \
+"\x61\x64\x20\x6f\x66\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d" \
+"\x72\x09\x50\x72\x69\x6e\x74\x20\x72\x65\x61\x6c\x20\x49\x44\x20" \
+"\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x65\x66\x66\x65\x63" \
+"\x74\x69\x76\x65\x20\x49\x44\x00\x5b\x2d\x71\x66\x77\x72\x73\x76" \
"\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c" \
"\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09" \
"\x52\x65\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73" \
@@ -1096,655 +941,807 @@
"\x66\x6f\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52" \
"\x65\x70\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67" \
"\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65" \
-"\x72\x72\x00\x5b\x2d\x6d\x6b\x5d\x0a\x0a\x4c\x69\x73\x74\x20\x61" \
-"\x6c\x6c\x20\x50\x43\x49\x20\x64\x65\x76\x69\x63\x65\x73\x0a\x0a" \
-"\x09\x2d\x6d\x09\x50\x61\x72\x73\x61\x62\x6c\x65\x20\x6f\x75\x74" \
-"\x70\x75\x74\x0a\x09\x2d\x6b\x09\x53\x68\x6f\x77\x20\x64\x72\x69" \
-"\x76\x65\x72\x00\x08\x00\x46\x49\x4c\x45\x0a\x0a\x44\x65\x63\x6f" \
-"\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74" \
-"\x00\x5b\x2d\x63\x66\x76\x64\x31\x32\x33\x34\x35\x36\x37\x38\x39" \
-"\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09" \
-"\x2d\x31\x2e\x2e\x39\x09\x43\x6f\x6d\x70\x72\x65\x73\x73\x69\x6f" \
-"\x6e\x20\x6c\x65\x76\x65\x6c\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f" \
-"\x6d\x70\x72\x65\x73\x73\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65" \
-"\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46" \
-"\x6f\x72\x63\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65" \
-"\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72\x65" \
-"\x20\x6f\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63\x6b" \
-"\x73\x75\x6d\x0a\x09\x2d\x43\x09\x41\x6c\x73\x6f\x20\x77\x72\x69" \
-"\x74\x65\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6f\x66\x20\x63" \
-"\x6f\x6d\x70\x72\x65\x73\x73\x65\x64\x20\x62\x6c\x6f\x63\x6b\x00" \
-"\x5b\x2d\x76\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d" \
-"\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72\x65\x20\x6f\x72" \
-"\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63\x6b\x73\x75\x6d" \
-"\x00\x5b\x2d\x64\x20\x64\x65\x76\x69\x63\x65\x5f\x74\x61\x62\x6c" \
-"\x65\x5d\x20\x72\x6f\x6f\x74\x64\x69\x72\x0a\x0a\x43\x72\x65\x61" \
-"\x74\x65\x20\x61\x20\x72\x61\x6e\x67\x65\x20\x6f\x66\x20\x73\x70" \
-"\x65\x63\x69\x61\x6c\x20\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x73" \
-"\x70\x65\x63\x69\x66\x69\x65\x64\x20\x69\x6e\x20\x61\x20\x64\x65" \
-"\x76\x69\x63\x65\x20\x74\x61\x62\x6c\x65\x2e\x0a\x44\x65\x76\x69" \
-"\x63\x65\x20\x74\x61\x62\x6c\x65\x20\x65\x6e\x74\x72\x69\x65\x73" \
-"\x20\x74\x61\x6b\x65\x20\x74\x68\x65\x20\x66\x6f\x72\x6d\x20\x6f" \
-"\x66\x3a\x0a\x3c\x6e\x61\x6d\x65\x3e\x20\x3c\x74\x79\x70\x65\x3e" \
-"\x20\x3c\x6d\x6f\x64\x65\x3e\x20\x3c\x75\x69\x64\x3e\x20\x3c\x67" \
-"\x69\x64\x3e\x20\x3c\x6d\x61\x6a\x6f\x72\x3e\x20\x3c\x6d\x69\x6e" \
-"\x6f\x72\x3e\x20\x3c\x73\x74\x61\x72\x74\x3e\x20\x3c\x69\x6e\x63" \
-"\x3e\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x0a\x57\x68\x65\x72\x65\x20" \
-"\x6e\x61\x6d\x65\x20\x69\x73\x20\x74\x68\x65\x20\x66\x69\x6c\x65" \
-"\x20\x6e\x61\x6d\x65\x2c\x20\x74\x79\x70\x65\x20\x63\x61\x6e\x20" \
-"\x62\x65\x20\x6f\x6e\x65\x20\x6f\x66\x3a\x0a\x09\x66\x09\x52\x65" \
-"\x67\x75\x6c\x61\x72\x20\x66\x69\x6c\x65\x0a\x09\x64\x09\x44\x69" \
-"\x72\x65\x63\x74\x6f\x72\x79\x0a\x09\x63\x09\x43\x68\x61\x72\x61" \
-"\x63\x74\x65\x72\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x62\x09\x42" \
-"\x6c\x6f\x63\x6b\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x70\x09\x46" \
-"\x69\x66\x6f\x20\x28\x6e\x61\x6d\x65\x64\x20\x70\x69\x70\x65\x29" \
-"\x0a\x75\x69\x64\x20\x69\x73\x20\x74\x68\x65\x20\x75\x73\x65\x72" \
-"\x20\x69\x64\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x74\x61\x72\x67" \
-"\x65\x74\x20\x66\x69\x6c\x65\x2c\x20\x67\x69\x64\x20\x69\x73\x20" \
-"\x74\x68\x65\x20\x67\x72\x6f\x75\x70\x20\x69\x64\x20\x66\x6f\x72" \
-"\x20\x74\x68\x65\x0a\x74\x61\x72\x67\x65\x74\x20\x66\x69\x6c\x65" \
-"\x2e\x20\x54\x68\x65\x20\x72\x65\x73\x74\x20\x6f\x66\x20\x74\x68" \
-"\x65\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x28\x6d\x61\x6a\x6f\x72" \
-"\x2c\x20\x6d\x69\x6e\x6f\x72\x2c\x20\x65\x74\x63\x29\x20\x61\x70" \
-"\x70\x6c\x79\x20\x74\x6f\x0a\x74\x6f\x20\x64\x65\x76\x69\x63\x65" \
-"\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x66\x69\x6c\x65\x73\x2e\x20" \
-"\x41\x20\x27\x2d\x27\x20\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65" \
-"\x64\x20\x66\x6f\x72\x20\x62\x6c\x61\x6e\x6b\x20\x65\x6e\x74\x72" \
-"\x69\x65\x73\x2e\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f" \
-"\x72\x20\x63\x68\x65\x63\x6b\x20\x4d\x44\x35\x20\x63\x68\x65\x63" \
-"\x6b\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b" \
-"\x20\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69" \
-"\x73\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79" \
-"\x74\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f" \
-"\x64\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73" \
-"\x0a\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20" \
-"\x69\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61" \
-"\x74\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69" \
-"\x6e\x65\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x44\x49" \
-"\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e\x2e\x0a\x0a\x43\x72\x65\x61" \
-"\x74\x65\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d" \
-"\x6d\x20\x4d\x4f\x44\x45\x09\x4d\x6f\x64\x65\x0a\x09\x2d\x70\x09" \
-"\x4e\x6f\x20\x65\x72\x72\x6f\x72\x20\x69\x66\x20\x65\x78\x69\x73" \
-"\x74\x73\x3b\x20\x6d\x61\x6b\x65\x20\x70\x61\x72\x65\x6e\x74\x20" \
-"\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x20\x61\x73\x20\x6e" \
-"\x65\x65\x64\x65\x64\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e\x20\x4c" \
-"\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b" \
-"\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20\x61\x20" \
-"\x46\x41\x54\x33\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
-"\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d" \
-"\x6e\x20\x4c\x42\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62" \
-"\x65\x6c\x00\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20\x42\x4c\x4b" \
-"\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x4f\x44\x45" \
-"\x5f\x52\x41\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49\x4e\x4f\x44" \
-"\x45\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52\x45\x53\x45" \
-"\x52\x56\x45\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d\x20\x5b\x2d" \
-"\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45" \
-"\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09\x2d\x62\x20" \
-"\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x20\x73" \
-"\x69\x7a\x65\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x46\x09\x09" \
-"\x46\x6f\x72\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54\x49\x4f\x09" \
-"\x4d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x69" \
-"\x6c\x65\x73\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x5f\x73\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49\x4f\x0a\x09" \
-"\x2d\x49\x20\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64\x65\x20\x73" \
-"\x69\x7a\x65\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29\x0a\x09\x2d" \
-"\x4c\x20\x4c\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61" \
-"\x62\x65\x6c\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45\x4e\x54\x09" \
-"\x50\x65\x72\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c\x6f\x63\x6b" \
-"\x73\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66\x6f\x72" \
-"\x20\x61\x64\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44\x72\x79\x20" \
-"\x72\x75\x6e\x00\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x4e\x41" \
-"\x4d\x45\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x6e\x61\x6d\x65\x64" \
-"\x20\x70\x69\x70\x65\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09" \
-"\x4d\x6f\x64\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x61\x3d" \
-"\x72\x77\x29\x00\x5b\x2d\x46\x6e\x5d\x20\x5b\x2d\x62\x20\x42\x4c" \
-"\x4b\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x4f\x44" \
-"\x45\x5f\x52\x41\x54\x49\x4f\x5d\x20\x5b\x2d\x49\x20\x49\x4e\x4f" \
-"\x44\x45\x5f\x53\x49\x5a\x45\x5d\x20\x5b\x2d\x6d\x20\x52\x45\x53" \
-"\x45\x52\x56\x45\x44\x5f\x50\x45\x52\x43\x45\x4e\x54\x5d\x20\x5b" \
-"\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44" \
-"\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x09\x2d\x62" \
-"\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x20" \
-"\x73\x69\x7a\x65\x2c\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x46\x09" \
-"\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x69\x20\x52\x41\x54\x49\x4f" \
-"\x09\x4d\x61\x78\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66" \
-"\x69\x6c\x65\x73\x20\x69\x73\x20\x66\x69\x6c\x65\x73\x79\x73\x74" \
-"\x65\x6d\x5f\x73\x69\x7a\x65\x20\x2f\x20\x52\x41\x54\x49\x4f\x0a" \
-"\x09\x2d\x49\x20\x42\x59\x54\x45\x53\x09\x49\x6e\x6f\x64\x65\x20" \
-"\x73\x69\x7a\x65\x20\x28\x6d\x69\x6e\x20\x31\x32\x38\x29\x0a\x09" \
-"\x2d\x4c\x20\x4c\x42\x4c\x09\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c" \
-"\x61\x62\x65\x6c\x0a\x09\x2d\x6d\x20\x50\x45\x52\x43\x45\x4e\x54" \
-"\x09\x50\x65\x72\x63\x65\x6e\x74\x20\x6f\x66\x20\x62\x6c\x6f\x63" \
-"\x6b\x73\x20\x74\x6f\x20\x72\x65\x73\x65\x72\x76\x65\x20\x66\x6f" \
-"\x72\x20\x61\x64\x6d\x69\x6e\x0a\x09\x2d\x6e\x09\x09\x44\x72\x79" \
-"\x20\x72\x75\x6e\x00\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e\x20\x4c\x41" \
-"\x42\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b" \
-"\x42\x59\x54\x45\x53\x5d\x0a\x0a\x4d\x61\x6b\x65\x20\x61\x20\x46" \
-"\x41\x54\x33\x32\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a" \
-"\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e" \
-"\x20\x4c\x42\x4c\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65" \
-"\x6c\x00\x5b\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x4e\x41\x4d\x45" \
-"\x20\x54\x59\x50\x45\x20\x4d\x41\x4a\x4f\x52\x20\x4d\x49\x4e\x4f" \
-"\x52\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20\x73\x70\x65\x63" \
-"\x69\x61\x6c\x20\x66\x69\x6c\x65\x20\x28\x62\x6c\x6f\x63\x6b\x2c" \
-"\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x2c\x20\x6f\x72\x20\x70" \
-"\x69\x70\x65\x29\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x43" \
-"\x72\x65\x61\x74\x69\x6f\x6e\x20\x6d\x6f\x64\x65\x20\x28\x64\x65" \
-"\x66\x61\x75\x6c\x74\x20\x61\x3d\x72\x77\x29\x0a\x54\x59\x50\x45" \
-"\x3a\x0a\x09\x62\x09\x42\x6c\x6f\x63\x6b\x20\x64\x65\x76\x69\x63" \
-"\x65\x0a\x09\x63\x20\x6f\x72\x20\x75\x09\x43\x68\x61\x72\x61\x63" \
-"\x74\x65\x72\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x70\x09\x4e\x61" \
-"\x6d\x65\x64\x20\x70\x69\x70\x65\x20\x28\x4d\x41\x4a\x4f\x52\x20" \
-"\x61\x6e\x64\x20\x4d\x49\x4e\x4f\x52\x20\x61\x72\x65\x20\x69\x67" \
-"\x6e\x6f\x72\x65\x64\x29\x00\x5b\x2d\x4c\x20\x4c\x42\x4c\x5d\x20" \
+"\x72\x72\x00\x5b\x2d\x63\x64\x44\x73\x70\x5d\x20\x5b\x2d\x6f\x20" \
+"\x55\x53\x45\x52\x5d\x20\x5b\x2d\x67\x20\x47\x52\x50\x5d\x20\x5b" \
+"\x2d\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x5b\x53\x4f\x55\x52\x43\x45" \
+"\x5d\x2e\x2e\x2e\x20\x44\x45\x53\x54\x0a\x0a\x43\x6f\x70\x79\x20" \
+"\x66\x69\x6c\x65\x73\x20\x61\x6e\x64\x20\x73\x65\x74\x20\x61\x74" \
+"\x74\x72\x69\x62\x75\x74\x65\x73\x0a\x0a\x09\x2d\x63\x09\x4a\x75" \
+"\x73\x74\x20\x63\x6f\x70\x79\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
+"\x29\x0a\x09\x2d\x64\x09\x43\x72\x65\x61\x74\x65\x20\x64\x69\x72" \
+"\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x2d\x44\x09\x43\x72\x65" \
+"\x61\x74\x65\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x74\x61\x72\x67" \
+"\x65\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09" \
+"\x2d\x73\x09\x53\x74\x72\x69\x70\x20\x73\x79\x6d\x62\x6f\x6c\x20" \
+"\x74\x61\x62\x6c\x65\x0a\x09\x2d\x70\x09\x50\x72\x65\x73\x65\x72" \
+"\x76\x65\x20\x64\x61\x74\x65\x0a\x09\x2d\x6f\x20\x55\x53\x45\x52" \
+"\x09\x53\x65\x74\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70\x0a\x09" \
+"\x2d\x67\x20\x47\x52\x50\x09\x53\x65\x74\x20\x67\x72\x6f\x75\x70" \
+"\x20\x6f\x77\x6e\x65\x72\x73\x68\x69\x70\x0a\x09\x2d\x6d\x20\x4d" \
+"\x4f\x44\x45\x09\x53\x65\x74\x20\x70\x65\x72\x6d\x69\x73\x73\x69" \
+"\x6f\x6e\x73\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20" \
+"\x50\x49\x44\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73" \
+"\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x3a\x20" \
+"\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x67\x69\x76\x65\x6e\x20\x50" \
+"\x49\x44\x73\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c" \
+"\x6c\x20\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61" \
+"\x6e\x64\x20\x6e\x75\x6d\x62\x65\x72\x73\x00\x5b\x2d\x6c\x5d\x20" \
+"\x5b\x2d\x71\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20\x50\x52\x4f\x43" \
+"\x45\x53\x53\x5f\x4e\x41\x4d\x45\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e" \
+"\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61" \
+"\x75\x6c\x74\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x67\x69" \
+"\x76\x65\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x0a\x0a\x09" \
+"\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e" \
+"\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61\x6e\x64\x20\x6e\x75\x6d" \
+"\x62\x65\x72\x73\x0a\x09\x2d\x71\x09\x44\x6f\x6e\x27\x74\x20\x63" \
+"\x6f\x6d\x70\x6c\x61\x69\x6e\x20\x69\x66\x20\x6e\x6f\x20\x70\x72" \
+"\x6f\x63\x65\x73\x73\x65\x73\x20\x77\x65\x72\x65\x20\x6b\x69\x6c" \
+"\x6c\x65\x64\x00\x5b\x2d\x6c\x5d\x20\x5b\x2d\x53\x49\x47\x5d\x20" \
+"\x5b\x2d\x6f\x20\x50\x49\x44\x5d\x2e\x2e\x2e\x0a\x0a\x53\x65\x6e" \
+"\x64\x20\x61\x20\x73\x69\x67\x6e\x61\x6c\x20\x28\x64\x65\x66\x61" \
+"\x75\x6c\x74\x3a\x20\x54\x45\x52\x4d\x29\x20\x74\x6f\x20\x61\x6c" \
+"\x6c\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x6f\x75\x74\x73" \
+"\x69\x64\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x73\x65\x73\x73" \
+"\x69\x6f\x6e\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c" \
+"\x6c\x20\x73\x69\x67\x6e\x61\x6c\x20\x6e\x61\x6d\x65\x73\x20\x61" \
+"\x6e\x64\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d\x6f\x20\x50" \
+"\x49\x44\x09\x44\x6f\x6e\x27\x74\x20\x73\x69\x67\x6e\x61\x6c\x20" \
+"\x74\x68\x69\x73\x20\x50\x49\x44\x00\x5b\x2d\x45\x4e\x68\x7e\x49" \
+"\x3f\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69" \
+"\x65\x77\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69" \
+"\x6e\x29\x20\x6f\x6e\x65\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c" \
+"\x20\x61\x74\x20\x61\x20\x74\x69\x6d\x65\x0a\x0a\x09\x2d\x45\x09" \
+"\x51\x75\x69\x74\x20\x6f\x6e\x63\x65\x20\x74\x68\x65\x20\x65\x6e" \
+"\x64\x20\x6f\x66\x20\x61\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x72" \
+"\x65\x61\x63\x68\x65\x64\x0a\x09\x2d\x4e\x09\x50\x72\x65\x66\x69" \
+"\x78\x20\x6c\x69\x6e\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x74\x6f" \
+"\x20\x65\x61\x63\x68\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x49\x09\x49" \
+"\x67\x6e\x6f\x72\x65\x20\x63\x61\x73\x65\x20\x69\x6e\x20\x61\x6c" \
+"\x6c\x20\x73\x65\x61\x72\x63\x68\x65\x73\x0a\x09\x2d\x7e\x09\x53" \
+"\x75\x70\x70\x72\x65\x73\x73\x20\x7e\x73\x20\x64\x69\x73\x70\x6c" \
+"\x61\x79\x65\x64\x20\x70\x61\x73\x74\x20\x45\x4f\x46\x00\x5b\x4f" \
+"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x54\x41\x52\x47\x45\x54\x2e\x2e" \
+"\x2e\x20\x4c\x49\x4e\x4b\x7c\x44\x49\x52\x0a\x0a\x43\x72\x65\x61" \
+"\x74\x65\x20\x61\x20\x6c\x69\x6e\x6b\x20\x4c\x49\x4e\x4b\x20\x6f" \
+"\x72\x20\x44\x49\x52\x2f\x54\x41\x52\x47\x45\x54\x20\x74\x6f\x20" \
+"\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x54\x41" \
+"\x52\x47\x45\x54\x28\x73\x29\x0a\x0a\x09\x2d\x73\x09\x4d\x61\x6b" \
+"\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x69\x6e\x73\x74\x65" \
+"\x61\x64\x20\x6f\x66\x20\x68\x61\x72\x64\x6c\x69\x6e\x6b\x73\x0a" \
+"\x09\x2d\x66\x09\x52\x65\x6d\x6f\x76\x65\x20\x65\x78\x69\x73\x74" \
+"\x69\x6e\x67\x20\x64\x65\x73\x74\x69\x6e\x61\x74\x69\x6f\x6e\x73" \
+"\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x64\x65\x72\x65\x66" \
+"\x65\x72\x65\x6e\x63\x65\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x20" \
+"\x2d\x20\x74\x72\x65\x61\x74\x20\x6c\x69\x6b\x65\x20\x6e\x6f\x72" \
+"\x6d\x61\x6c\x20\x66\x69\x6c\x65\x0a\x09\x2d\x62\x09\x4d\x61\x6b" \
+"\x65\x20\x61\x20\x62\x61\x63\x6b\x75\x70\x20\x6f\x66\x20\x74\x68" \
+"\x65\x20\x74\x61\x72\x67\x65\x74\x20\x28\x69\x66\x20\x65\x78\x69" \
+"\x73\x74\x73\x29\x20\x62\x65\x66\x6f\x72\x65\x20\x6c\x69\x6e\x6b" \
+"\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x53\x20\x73" \
+"\x75\x66\x09\x55\x73\x65\x20\x73\x75\x66\x66\x69\x78\x20\x69\x6e" \
+"\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x7e\x20\x77\x68\x65\x6e\x20" \
+"\x6d\x61\x6b\x69\x6e\x67\x20\x62\x61\x63\x6b\x75\x70\x20\x66\x69" \
+"\x6c\x65\x73\x00\x5b\x2d\x72\x5d\x20\x5b\x2d\x6f\x20\x4f\x46\x53" \
+"\x5d\x20\x4c\x4f\x4f\x50\x44\x45\x56\x20\x46\x49\x4c\x45\x20\x2d" \
+"\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x20\x6c\x6f\x6f\x70\x20" \
+"\x64\x65\x76\x69\x63\x65\x73\x0a\x09\x6c\x6f\x73\x65\x74\x75\x70" \
+"\x20\x2d\x64\x20\x4c\x4f\x4f\x50\x44\x45\x56\x20\x2d\x20\x64\x69" \
+"\x73\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x0a\x09\x6c\x6f\x73\x65" \
+"\x74\x75\x70\x20\x5b\x2d\x66\x5d\x20\x2d\x20\x73\x68\x6f\x77\x0a" \
+"\x0a\x09\x2d\x6f\x20\x4f\x46\x53\x09\x53\x74\x61\x72\x74\x20\x4f" \
+"\x46\x53\x20\x62\x79\x74\x65\x73\x20\x69\x6e\x74\x6f\x20\x46\x49" \
+"\x4c\x45\x0a\x09\x2d\x72\x09\x52\x65\x61\x64\x2d\x6f\x6e\x6c\x79" \
+"\x0a\x09\x2d\x66\x09\x53\x68\x6f\x77\x20\x66\x69\x72\x73\x74\x20" \
+"\x66\x72\x65\x65\x20\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65" \
+"\x00\x5b\x2d\x31\x41\x61\x43\x78\x64\x4c\x48\x52\x46\x70\x6c\x69" \
+"\x6e\x73\x65\x68\x72\x53\x58\x76\x63\x74\x75\x5d\x20\x5b\x2d\x77" \
+"\x20\x57\x49\x44\x54\x48\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
+"\x2e\x0a\x0a\x4c\x69\x73\x74\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
+"\x79\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x0a\x0a\x09\x2d\x31\x09" \
+"\x4f\x6e\x65\x20\x63\x6f\x6c\x75\x6d\x6e\x20\x6f\x75\x74\x70\x75" \
+"\x74\x0a\x09\x2d\x61\x09\x49\x6e\x63\x6c\x75\x64\x65\x20\x65\x6e" \
+"\x74\x72\x69\x65\x73\x20\x77\x68\x69\x63\x68\x20\x73\x74\x61\x72" \
+"\x74\x20\x77\x69\x74\x68\x20\x2e\x0a\x09\x2d\x41\x09\x4c\x69\x6b" \
+"\x65\x20\x2d\x61\x2c\x20\x62\x75\x74\x20\x65\x78\x63\x6c\x75\x64" \
+"\x65\x20\x2e\x20\x61\x6e\x64\x20\x2e\x2e\x0a\x09\x2d\x43\x09\x4c" \
+"\x69\x73\x74\x20\x62\x79\x20\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x09" \
+"\x2d\x78\x09\x4c\x69\x73\x74\x20\x62\x79\x20\x6c\x69\x6e\x65\x73" \
+"\x0a\x09\x2d\x64\x09\x4c\x69\x73\x74\x20\x64\x69\x72\x65\x63\x74" \
+"\x6f\x72\x79\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x69\x6e\x73\x74" \
+"\x65\x61\x64\x20\x6f\x66\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x0a" \
+"\x09\x2d\x4c\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69" \
+"\x6e\x6b\x73\x0a\x09\x2d\x48\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73" \
+"\x79\x6d\x6c\x69\x6e\x6b\x73\x20\x6f\x6e\x20\x63\x6f\x6d\x6d\x61" \
+"\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x52\x09\x52\x65\x63\x75" \
+"\x72\x73\x65\x0a\x09\x2d\x70\x09\x41\x70\x70\x65\x6e\x64\x20\x2f" \
+"\x20\x74\x6f\x20\x64\x69\x72\x20\x65\x6e\x74\x72\x69\x65\x73\x0a" \
+"\x09\x2d\x46\x09\x41\x70\x70\x65\x6e\x64\x20\x69\x6e\x64\x69\x63" \
+"\x61\x74\x6f\x72\x20\x28\x6f\x6e\x65\x20\x6f\x66\x20\x2a\x2f\x3d" \
+"\x40\x7c\x29\x20\x74\x6f\x20\x65\x6e\x74\x72\x69\x65\x73\x0a\x09" \
+"\x2d\x6c\x09\x4c\x6f\x6e\x67\x20\x6c\x69\x73\x74\x69\x6e\x67\x20" \
+"\x66\x6f\x72\x6d\x61\x74\x0a\x09\x2d\x69\x09\x4c\x69\x73\x74\x20" \
+"\x69\x6e\x6f\x64\x65\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d" \
+"\x6e\x09\x4c\x69\x73\x74\x20\x6e\x75\x6d\x65\x72\x69\x63\x20\x55" \
+"\x49\x44\x73\x20\x61\x6e\x64\x20\x47\x49\x44\x73\x20\x69\x6e\x73" \
+"\x74\x65\x61\x64\x20\x6f\x66\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d" \
+"\x73\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x6f\x63\x61\x74\x65\x64" \
+"\x20\x62\x6c\x6f\x63\x6b\x73\x0a\x09\x2d\x65\x09\x4c\x69\x73\x74" \
+"\x20\x66\x75\x6c\x6c\x20\x64\x61\x74\x65\x20\x61\x6e\x64\x20\x74" \
+"\x69\x6d\x65\x0a\x09\x2d\x68\x09\x4c\x69\x73\x74\x20\x73\x69\x7a" \
+"\x65\x73\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e\x20\x72\x65\x61\x64" \
+"\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x28\x31\x4b\x20" \
+"\x32\x34\x33\x4d\x20\x32\x47\x29\x0a\x09\x2d\x72\x09\x53\x6f\x72" \
+"\x74\x20\x69\x6e\x20\x72\x65\x76\x65\x72\x73\x65\x20\x6f\x72\x64" \
+"\x65\x72\x0a\x09\x2d\x53\x09\x53\x6f\x72\x74\x20\x62\x79\x20\x73" \
+"\x69\x7a\x65\x0a\x09\x2d\x58\x09\x53\x6f\x72\x74\x20\x62\x79\x20" \
+"\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x0a\x09\x2d\x76\x09\x53\x6f" \
+"\x72\x74\x20\x62\x79\x20\x76\x65\x72\x73\x69\x6f\x6e\x0a\x09\x2d" \
+"\x63\x09\x57\x69\x74\x68\x20\x2d\x6c\x3a\x20\x73\x6f\x72\x74\x20" \
+"\x62\x79\x20\x63\x74\x69\x6d\x65\x0a\x09\x2d\x74\x09\x57\x69\x74" \
+"\x68\x20\x2d\x6c\x3a\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x6d\x74" \
+"\x69\x6d\x65\x0a\x09\x2d\x75\x09\x57\x69\x74\x68\x20\x2d\x6c\x3a" \
+"\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x61\x74\x69\x6d\x65\x0a\x09" \
+"\x2d\x77\x20\x4e\x09\x41\x73\x73\x75\x6d\x65\x20\x74\x68\x65\x20" \
+"\x74\x65\x72\x6d\x69\x6e\x61\x6c\x20\x69\x73\x20\x4e\x20\x63\x6f" \
+"\x6c\x75\x6d\x6e\x73\x20\x77\x69\x64\x65\x0a\x09\x2d\x2d\x63\x6f" \
+"\x6c\x6f\x72\x5b\x3d\x7b\x61\x6c\x77\x61\x79\x73\x2c\x6e\x65\x76" \
+"\x65\x72\x2c\x61\x75\x74\x6f\x7d\x5d\x09\x43\x6f\x6e\x74\x72\x6f" \
+"\x6c\x20\x63\x6f\x6c\x6f\x72\x69\x6e\x67\x00\x5b\x2d\x52\x61\x64" \
+"\x6c\x76\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c" \
+"\x69\x73\x74\x20\x66\x69\x6c\x65\x20\x61\x74\x74\x72\x69\x62\x75" \
+"\x74\x65\x73\x20\x6f\x6e\x20\x61\x6e\x20\x65\x78\x74\x32\x20\x66" \
+"\x73\x0a\x0a\x09\x2d\x52\x09\x52\x65\x63\x75\x72\x73\x65\x0a\x09" \
+"\x2d\x61\x09\x44\x6f\x6e\x27\x74\x20\x68\x69\x64\x65\x20\x65\x6e" \
+"\x74\x72\x69\x65\x73\x20\x73\x74\x61\x72\x74\x69\x6e\x67\x20\x77" \
+"\x69\x74\x68\x20\x2e\x0a\x09\x2d\x64\x09\x4c\x69\x73\x74\x20\x64" \
+"\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x65\x6e\x74\x72\x69\x65\x73" \
+"\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x63\x6f\x6e\x74" \
+"\x65\x6e\x74\x73\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x6c\x6f" \
+"\x6e\x67\x20\x66\x6c\x61\x67\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d" \
+"\x76\x09\x4c\x69\x73\x74\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x27" \
+"\x73\x20\x76\x65\x72\x73\x69\x6f\x6e\x2f\x67\x65\x6e\x65\x72\x61" \
+"\x74\x69\x6f\x6e\x20\x6e\x75\x6d\x62\x65\x72\x00\x5b\x2d\x71\x66" \
+"\x77\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79" \
+"\x6d\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a" \
+"\x09\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c" \
+"\x45\x20\x28\x73\x74\x61\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f" \
+"\x20\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51" \
+"\x75\x69\x65\x74\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65" \
+"\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57" \
+"\x61\x69\x74\x20\x66\x6f\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09" \
+"\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79" \
+"\x73\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20" \
+"\x73\x74\x64\x65\x72\x72\x00\x0a\x0a\x53\x68\x6f\x77\x20\x61\x6c" \
+"\x6c\x20\x6f\x70\x65\x6e\x20\x66\x69\x6c\x65\x73\x00\x5b\x2d\x6d" \
+"\x6b\x5d\x0a\x0a\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x50\x43\x49" \
+"\x20\x64\x65\x76\x69\x63\x65\x73\x0a\x0a\x09\x2d\x6d\x09\x50\x61" \
+"\x72\x73\x61\x62\x6c\x65\x20\x6f\x75\x74\x70\x75\x74\x0a\x09\x2d" \
+"\x6b\x09\x53\x68\x6f\x77\x20\x64\x72\x69\x76\x65\x72\x00\x08\x00" \
+"\x46\x49\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73" \
+"\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x00\x5b\x2d\x63\x66\x76" \
+"\x64\x31\x32\x33\x34\x35\x36\x37\x38\x39\x43\x46\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x31\x2e\x2e\x39\x09" \
+"\x43\x6f\x6d\x70\x72\x65\x73\x73\x69\x6f\x6e\x20\x6c\x65\x76\x65" \
+"\x6c\x0a\x09\x2d\x64\x09\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73" \
+"\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74" \
+"\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09" \
+"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x46\x09\x44" \
+"\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72\x65\x20\x6f\x72\x20\x76\x65" \
+"\x72\x69\x66\x79\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x0a\x09\x2d" \
+"\x43\x09\x41\x6c\x73\x6f\x20\x77\x72\x69\x74\x65\x20\x63\x68\x65" \
+"\x63\x6b\x73\x75\x6d\x20\x6f\x66\x20\x63\x6f\x6d\x70\x72\x65\x73" \
+"\x73\x65\x64\x20\x62\x6c\x6f\x63\x6b\x00\x5b\x2d\x76\x43\x46\x5d" \
+"\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x76\x09" \
+"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27" \
+"\x74\x20\x73\x74\x6f\x72\x65\x20\x6f\x72\x20\x76\x65\x72\x69\x66" \
+"\x79\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x00\x5b\x2d\x64\x20\x64" \
+"\x65\x76\x69\x63\x65\x5f\x74\x61\x62\x6c\x65\x5d\x20\x72\x6f\x6f" \
+"\x74\x64\x69\x72\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20\x72" \
+"\x61\x6e\x67\x65\x20\x6f\x66\x20\x73\x70\x65\x63\x69\x61\x6c\x20" \
+"\x66\x69\x6c\x65\x73\x20\x61\x73\x20\x73\x70\x65\x63\x69\x66\x69" \
+"\x65\x64\x20\x69\x6e\x20\x61\x20\x64\x65\x76\x69\x63\x65\x20\x74" \
+"\x61\x62\x6c\x65\x2e\x0a\x44\x65\x76\x69\x63\x65\x20\x74\x61\x62" \
+"\x6c\x65\x20\x65\x6e\x74\x72\x69\x65\x73\x20\x74\x61\x6b\x65\x20" \
+"\x74\x68\x65\x20\x66\x6f\x72\x6d\x20\x6f\x66\x3a\x0a\x3c\x6e\x61" \
+"\x6d\x65\x3e\x20\x3c\x74\x79\x70\x65\x3e\x20\x3c\x6d\x6f\x64\x65" \
+"\x3e\x20\x3c\x75\x69\x64\x3e\x20\x3c\x67\x69\x64\x3e\x20\x3c\x6d" \
+"\x61\x6a\x6f\x72\x3e\x20\x3c\x6d\x69\x6e\x6f\x72\x3e\x20\x3c\x73" \
+"\x74\x61\x72\x74\x3e\x20\x3c\x69\x6e\x63\x3e\x20\x3c\x63\x6f\x75" \
+"\x6e\x74\x3e\x0a\x57\x68\x65\x72\x65\x20\x6e\x61\x6d\x65\x20\x69" \
+"\x73\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x2c" \
+"\x20\x74\x79\x70\x65\x20\x63\x61\x6e\x20\x62\x65\x20\x6f\x6e\x65" \
+"\x20\x6f\x66\x3a\x0a\x09\x66\x09\x52\x65\x67\x75\x6c\x61\x72\x20" \
+"\x66\x69\x6c\x65\x0a\x09\x64\x09\x44\x69\x72\x65\x63\x74\x6f\x72" \
+"\x79\x0a\x09\x63\x09\x43\x68\x61\x72\x61\x63\x74\x65\x72\x20\x64" \
+"\x65\x76\x69\x63\x65\x0a\x09\x62\x09\x42\x6c\x6f\x63\x6b\x20\x64" \
+"\x65\x76\x69\x63\x65\x0a\x09\x70\x09\x46\x69\x66\x6f\x20\x28\x6e" \
+"\x61\x6d\x65\x64\x20\x70\x69\x70\x65\x29\x0a\x75\x69\x64\x20\x69" \
+"\x73\x20\x74\x68\x65\x20\x75\x73\x65\x72\x20\x69\x64\x20\x66\x6f" \
+"\x72\x20\x74\x68\x65\x20\x74\x61\x72\x67\x65\x74\x20\x66\x69\x6c" \
+"\x65\x2c\x20\x67\x69\x64\x20\x69\x73\x20\x74\x68\x65\x20\x67\x72" \
+"\x6f\x75\x70\x20\x69\x64\x20\x66\x6f\x72\x20\x74\x68\x65\x0a\x74" \
+"\x61\x72\x67\x65\x74\x20\x66\x69\x6c\x65\x2e\x20\x54\x68\x65\x20" \
+"\x72\x65\x73\x74\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x6e\x74\x72" \
+"\x69\x65\x73\x20\x28\x6d\x61\x6a\x6f\x72\x2c\x20\x6d\x69\x6e\x6f" \
+"\x72\x2c\x20\x65\x74\x63\x29\x20\x61\x70\x70\x6c\x79\x20\x74\x6f" \
+"\x0a\x74\x6f\x20\x64\x65\x76\x69\x63\x65\x20\x73\x70\x65\x63\x69" \
+"\x61\x6c\x20\x66\x69\x6c\x65\x73\x2e\x20\x41\x20\x27\x2d\x27\x20" \
+"\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x66\x6f\x72\x20" \
+"\x62\x6c\x61\x6e\x6b\x20\x65\x6e\x74\x72\x69\x65\x73\x2e\x00\x5b" \
+"\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
+"\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63" \
+"\x6b\x20\x4d\x44\x35\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a" \
+"\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73\x20" \
+"\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e\x20" \
+"\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20" \
+"\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c" \
+"\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68\x6f" \
+"\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09\x57" \
+"\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f\x70" \
+"\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20\x63" \
+"\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b\x4f" \
+"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x44\x49\x52\x45\x43\x54\x4f\x52" \
+"\x59\x2e\x2e\x2e\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x44\x49\x52" \
+"\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45" \
+"\x09\x4d\x6f\x64\x65\x0a\x09\x2d\x70\x09\x4e\x6f\x20\x65\x72\x72" \
+"\x6f\x72\x20\x69\x66\x20\x65\x78\x69\x73\x74\x73\x3b\x20\x6d\x61" \
+"\x6b\x65\x20\x70\x61\x72\x65\x6e\x74\x20\x64\x69\x72\x65\x63\x74" \
+"\x6f\x72\x69\x65\x73\x20\x61\x73\x20\x6e\x65\x65\x64\x65\x64\x00" \
+"\x5b\x2d\x76\x5d\x20\x5b\x2d\x6e\x20\x4c\x41\x42\x45\x4c\x5d\x20" \
"\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53" \
-"\x5d\x0a\x0a\x50\x72\x65\x70\x61\x72\x65\x20\x42\x4c\x4f\x43\x4b" \
-"\x44\x45\x56\x20\x74\x6f\x20\x62\x65\x20\x75\x73\x65\x64\x20\x61" \
-"\x73\x20\x73\x77\x61\x70\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e" \
-"\x0a\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09\x4c\x61\x62\x65\x6c\x00" \
-"\x5b\x2d\x64\x74\x5d\x20\x5b\x2d\x70\x20\x44\x49\x52\x5d\x20\x5b" \
-"\x54\x45\x4d\x50\x4c\x41\x54\x45\x5d\x0a\x0a\x43\x72\x65\x61\x74" \
-"\x65\x20\x61\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x79\x20\x66\x69" \
-"\x6c\x65\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x20\x62\x61\x73" \
-"\x65\x64\x20\x6f\x6e\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x20\x61" \
-"\x6e\x64\x20\x70\x72\x69\x6e\x74\x20\x69\x74\x73\x20\x6e\x61\x6d" \
-"\x65\x2e\x0a\x54\x45\x4d\x50\x4c\x41\x54\x45\x20\x6d\x75\x73\x74" \
-"\x20\x65\x6e\x64\x20\x77\x69\x74\x68\x20\x58\x58\x58\x58\x58\x58" \
-"\x20\x28\x65\x2e\x67\x2e\x20\x5b\x2f\x64\x69\x72\x2f\x5d\x6e\x61" \
-"\x6d\x65\x58\x58\x58\x58\x58\x58\x29\x2e\x0a\x57\x69\x74\x68\x6f" \
-"\x75\x74\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x2c\x20\x2d\x74\x20" \
-"\x74\x6d\x70\x2e\x58\x58\x58\x58\x58\x58\x20\x69\x73\x20\x61\x73" \
-"\x73\x75\x6d\x65\x64\x2e\x0a\x0a\x09\x2d\x64\x09\x4d\x61\x6b\x65" \
-"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x2c\x20\x6e\x6f\x74\x20" \
-"\x66\x69\x6c\x65\x0a\x09\x2d\x74\x09\x50\x72\x65\x70\x65\x6e\x64" \
-"\x20\x62\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20" \
-"\x6e\x61\x6d\x65\x20\x74\x6f\x20\x54\x45\x4d\x50\x4c\x41\x54\x45" \
-"\x0a\x09\x2d\x70\x20\x44\x49\x52\x09\x55\x73\x65\x20\x44\x49\x52" \
-"\x20\x61\x73\x20\x61\x20\x62\x61\x73\x65\x20\x64\x69\x72\x65\x63" \
-"\x74\x6f\x72\x79\x20\x28\x69\x6d\x70\x6c\x69\x65\x73\x20\x2d\x74" \
-"\x29\x0a\x0a\x42\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72" \
-"\x79\x20\x69\x73\x3a\x20\x2d\x70\x20\x44\x49\x52\x2c\x20\x65\x6c" \
-"\x73\x65\x20\x24\x54\x4d\x50\x44\x49\x52\x2c\x20\x65\x6c\x73\x65" \
-"\x20\x2f\x74\x6d\x70\x00\x5b\x2d\x61\x64\x6c\x70\x30\x5d\x20\x5b" \
-"\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72\x64\x5d\x20\x4d\x4f\x44\x55" \
-"\x4c\x45\x0a\x0a\x09\x2d\x61\x09\x09\x53\x68\x6f\x72\x74\x63\x75" \
-"\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x61\x75\x74\x68\x6f\x72" \
-"\x27\x0a\x09\x2d\x64\x09\x09\x53\x68\x6f\x72\x74\x63\x75\x74\x20" \
-"\x66\x6f\x72\x20\x27\x2d\x46\x20\x64\x65\x73\x63\x72\x69\x70\x74" \
-"\x69\x6f\x6e\x27\x0a\x09\x2d\x6c\x09\x09\x53\x68\x6f\x72\x74\x63" \
-"\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x6c\x69\x63\x65\x6e" \
-"\x73\x65\x27\x0a\x09\x2d\x70\x09\x09\x53\x68\x6f\x72\x74\x63\x75" \
-"\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x70\x61\x72\x6d\x27\x0a" \
-"\x09\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72\x64\x09\x4b\x65\x79\x77" \
-"\x6f\x72\x64\x20\x74\x6f\x20\x6c\x6f\x6f\x6b\x20\x66\x6f\x72\x0a" \
-"\x09\x2d\x30\x09\x09\x53\x65\x70\x61\x72\x61\x74\x65\x20\x6f\x75" \
-"\x74\x70\x75\x74\x20\x77\x69\x74\x68\x20\x4e\x55\x4c\x73\x00\x5b" \
-"\x2d\x71\x66\x77\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x20" \
-"\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65\x20\x4d\x4f" \
-"\x44\x55\x4c\x45\x20\x28\x73\x74\x61\x63\x6b\x73\x29\x20\x6f\x72" \
-"\x20\x64\x6f\x20\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e\x0a\x09\x2d" \
-"\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x76\x09\x56\x65\x72\x62" \
-"\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d" \
-"\x77\x09\x57\x61\x69\x74\x20\x66\x6f\x72\x20\x75\x6e\x6c\x6f\x61" \
-"\x64\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x76\x69\x61" \
-"\x20\x73\x79\x73\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65\x61\x64\x20" \
-"\x6f\x66\x20\x73\x74\x64\x65\x72\x72\x00\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77\x20\x46\x49\x4c\x45\x20\x28" \
-"\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x6f\x6e\x65\x20\x73\x63" \
-"\x72\x65\x65\x6e\x66\x75\x6c\x20\x61\x74\x20\x61\x20\x74\x69\x6d" \
-"\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2d\x6f\x20" \
-"\x4f\x50\x54\x53\x5d\x20\x44\x45\x56\x49\x43\x45\x20\x4e\x4f\x44" \
-"\x45\x0a\x0a\x4d\x6f\x75\x6e\x74\x20\x61\x20\x66\x69\x6c\x65\x73" \
-"\x79\x73\x74\x65\x6d\x2e\x20\x46\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x20\x61\x75\x74\x6f\x64\x65\x74\x65\x63\x74\x69\x6f\x6e\x20" \
-"\x72\x65\x71\x75\x69\x72\x65\x73\x20\x2f\x70\x72\x6f\x63\x2e\x0a" \
-"\x0a\x09\x2d\x61\x09\x09\x4d\x6f\x75\x6e\x74\x20\x61\x6c\x6c\x20" \
-"\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x20\x69\x6e\x20\x66" \
-"\x73\x74\x61\x62\x0a\x09\x2d\x72\x09\x09\x52\x65\x61\x64\x2d\x6f" \
-"\x6e\x6c\x79\x20\x6d\x6f\x75\x6e\x74\x0a\x09\x2d\x77\x09\x09\x52" \
-"\x65\x61\x64\x2d\x77\x72\x69\x74\x65\x20\x6d\x6f\x75\x6e\x74\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x74\x20\x46\x53" \
-"\x54\x59\x50\x45\x09\x46\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20" \
-"\x74\x79\x70\x65\x0a\x09\x2d\x4f\x20\x4f\x50\x54\x09\x09\x4d\x6f" \
-"\x75\x6e\x74\x20\x6f\x6e\x6c\x79\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x73\x20\x77\x69\x74\x68\x20\x6f\x70\x74\x69\x6f\x6e" \
-"\x20\x4f\x50\x54\x20\x28\x2d\x61\x20\x6f\x6e\x6c\x79\x29\x0a\x2d" \
-"\x6f\x20\x4f\x50\x54\x3a\x0a\x09\x6c\x6f\x6f\x70\x09\x09\x49\x67" \
-"\x6e\x6f\x72\x65\x64\x20\x28\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69" \
-"\x63\x65\x73\x20\x61\x72\x65\x20\x61\x75\x74\x6f\x64\x65\x74\x65" \
-"\x63\x74\x65\x64\x29\x0a\x09\x5b\x61\x5d\x73\x79\x6e\x63\x09\x09" \
-"\x57\x72\x69\x74\x65\x73\x20\x61\x72\x65\x20\x5b\x61\x5d\x73\x79" \
-"\x6e\x63\x68\x72\x6f\x6e\x6f\x75\x73\x0a\x09\x5b\x6e\x6f\x5d\x61" \
-"\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61" \
-"\x62\x6c\x65\x20\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x69" \
-"\x6e\x6f\x64\x65\x20\x61\x63\x63\x65\x73\x73\x20\x74\x69\x6d\x65" \
-"\x73\x0a\x09\x5b\x6e\x6f\x5d\x64\x69\x72\x61\x74\x69\x6d\x65\x09" \
-"\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61" \
-"\x74\x69\x6d\x65\x20\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20" \
-"\x64\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x5b\x6e\x6f" \
-"\x5d\x72\x65\x6c\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c" \
-"\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61\x74\x69\x6d\x65\x20\x75" \
-"\x70\x64\x61\x74\x65\x73\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x20" \
-"\x74\x6f\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20" \
-"\x74\x69\x6d\x65\x0a\x09\x5b\x6e\x6f\x5d\x64\x65\x76\x09\x09\x28" \
-"\x44\x69\x73\x29\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66" \
-"\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x64\x65\x76\x69\x63\x65\x20" \
-"\x66\x69\x6c\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x65\x78\x65\x63\x09" \
-"\x28\x44\x69\x73\x29\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f" \
-"\x66\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65\x20\x66\x69\x6c" \
-"\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x73\x75\x69\x64\x09\x28\x44\x69" \
-"\x73\x29\x61\x6c\x6c\x6f\x77\x20\x73\x65\x74\x2d\x75\x73\x65\x72" \
-"\x2d\x69\x64\x2d\x72\x6f\x6f\x74\x20\x70\x72\x6f\x67\x72\x61\x6d" \
-"\x73\x0a\x09\x5b\x72\x5d\x73\x68\x61\x72\x65\x64\x09\x43\x6f\x6e" \
+"\x5d\x0a\x0a\x4d\x61\x6b\x65\x20\x61\x20\x46\x41\x54\x33\x32\x20" \
+"\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x76\x09" \
+"\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x20\x4c\x42\x4c\x09" \
+"\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x00\x5b\x2d\x46" \
+"\x6e\x5d\x20\x5b\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45\x5d" \
+"\x20\x5b\x2d\x69\x20\x49\x4e\x4f\x44\x45\x5f\x52\x41\x54\x49\x4f" \
+"\x5d\x20\x5b\x2d\x49\x20\x49\x4e\x4f\x44\x45\x5f\x53\x49\x5a\x45" \
+"\x5d\x20\x5b\x2d\x6d\x20\x52\x45\x53\x45\x52\x56\x45\x44\x5f\x50" \
+"\x45\x52\x43\x45\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45" \
+"\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59" \
+"\x54\x45\x53\x5d\x0a\x0a\x09\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49" \
+"\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x20\x73\x69\x7a\x65\x2c\x20\x62" \
+"\x79\x74\x65\x73\x0a\x09\x2d\x46\x09\x09\x46\x6f\x72\x63\x65\x0a" \
+"\x09\x2d\x69\x20\x52\x41\x54\x49\x4f\x09\x4d\x61\x78\x20\x6e\x75" \
+"\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x69\x73" \
+"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x5f\x73\x69\x7a\x65" \
+"\x20\x2f\x20\x52\x41\x54\x49\x4f\x0a\x09\x2d\x49\x20\x42\x59\x54" \
+"\x45\x53\x09\x49\x6e\x6f\x64\x65\x20\x73\x69\x7a\x65\x20\x28\x6d" \
+"\x69\x6e\x20\x31\x32\x38\x29\x0a\x09\x2d\x4c\x20\x4c\x42\x4c\x09" \
+"\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x0a\x09\x2d" \
+"\x6d\x20\x50\x45\x52\x43\x45\x4e\x54\x09\x50\x65\x72\x63\x65\x6e" \
+"\x74\x20\x6f\x66\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20\x72" \
+"\x65\x73\x65\x72\x76\x65\x20\x66\x6f\x72\x20\x61\x64\x6d\x69\x6e" \
+"\x0a\x09\x2d\x6e\x09\x09\x44\x72\x79\x20\x72\x75\x6e\x00\x5b\x2d" \
+"\x6d\x20\x4d\x4f\x44\x45\x5d\x20\x4e\x41\x4d\x45\x0a\x0a\x43\x72" \
+"\x65\x61\x74\x65\x20\x6e\x61\x6d\x65\x64\x20\x70\x69\x70\x65\x0a" \
+"\x0a\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x4d\x6f\x64\x65\x20\x28" \
+"\x64\x65\x66\x61\x75\x6c\x74\x20\x61\x3d\x72\x77\x29\x00\x5b\x2d" \
+"\x46\x6e\x5d\x20\x5b\x2d\x62\x20\x42\x4c\x4b\x5f\x53\x49\x5a\x45" \
+"\x5d\x20\x5b\x2d\x69\x20\x49\x4e\x4f\x44\x45\x5f\x52\x41\x54\x49" \
+"\x4f\x5d\x20\x5b\x2d\x49\x20\x49\x4e\x4f\x44\x45\x5f\x53\x49\x5a" \
+"\x45\x5d\x20\x5b\x2d\x6d\x20\x52\x45\x53\x45\x52\x56\x45\x44\x5f" \
+"\x50\x45\x52\x43\x45\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42" \
+"\x45\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42" \
+"\x59\x54\x45\x53\x5d\x0a\x0a\x09\x2d\x62\x20\x42\x4c\x4b\x5f\x53" \
+"\x49\x5a\x45\x09\x42\x6c\x6f\x63\x6b\x20\x73\x69\x7a\x65\x2c\x20" \
+"\x62\x79\x74\x65\x73\x0a\x09\x2d\x46\x09\x09\x46\x6f\x72\x63\x65" \
+"\x0a\x09\x2d\x69\x20\x52\x41\x54\x49\x4f\x09\x4d\x61\x78\x20\x6e" \
+"\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x69\x6c\x65\x73\x20\x69" \
+"\x73\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x5f\x73\x69\x7a" \
+"\x65\x20\x2f\x20\x52\x41\x54\x49\x4f\x0a\x09\x2d\x49\x20\x42\x59" \
+"\x54\x45\x53\x09\x49\x6e\x6f\x64\x65\x20\x73\x69\x7a\x65\x20\x28" \
+"\x6d\x69\x6e\x20\x31\x32\x38\x29\x0a\x09\x2d\x4c\x20\x4c\x42\x4c" \
+"\x09\x09\x56\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x0a\x09" \
+"\x2d\x6d\x20\x50\x45\x52\x43\x45\x4e\x54\x09\x50\x65\x72\x63\x65" \
+"\x6e\x74\x20\x6f\x66\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20" \
+"\x72\x65\x73\x65\x72\x76\x65\x20\x66\x6f\x72\x20\x61\x64\x6d\x69" \
+"\x6e\x0a\x09\x2d\x6e\x09\x09\x44\x72\x79\x20\x72\x75\x6e\x00\x5b" \
+"\x2d\x76\x5d\x20\x5b\x2d\x6e\x20\x4c\x41\x42\x45\x4c\x5d\x20\x42" \
+"\x4c\x4f\x43\x4b\x44\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d" \
+"\x0a\x0a\x4d\x61\x6b\x65\x20\x61\x20\x46\x41\x54\x33\x32\x20\x66" \
+"\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x0a\x09\x2d\x76\x09\x56" \
+"\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x6e\x20\x4c\x42\x4c\x09\x56" \
+"\x6f\x6c\x75\x6d\x65\x20\x6c\x61\x62\x65\x6c\x00\x5b\x2d\x6d\x20" \
+"\x4d\x4f\x44\x45\x5d\x20\x4e\x41\x4d\x45\x20\x54\x59\x50\x45\x20" \
+"\x4d\x41\x4a\x4f\x52\x20\x4d\x49\x4e\x4f\x52\x0a\x0a\x43\x72\x65" \
+"\x61\x74\x65\x20\x61\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x66\x69" \
+"\x6c\x65\x20\x28\x62\x6c\x6f\x63\x6b\x2c\x20\x63\x68\x61\x72\x61" \
+"\x63\x74\x65\x72\x2c\x20\x6f\x72\x20\x70\x69\x70\x65\x29\x0a\x0a" \
+"\x09\x2d\x6d\x20\x4d\x4f\x44\x45\x09\x43\x72\x65\x61\x74\x69\x6f" \
+"\x6e\x20\x6d\x6f\x64\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20" \
+"\x61\x3d\x72\x77\x29\x0a\x54\x59\x50\x45\x3a\x0a\x09\x62\x09\x42" \
+"\x6c\x6f\x63\x6b\x20\x64\x65\x76\x69\x63\x65\x0a\x09\x63\x20\x6f" \
+"\x72\x20\x75\x09\x43\x68\x61\x72\x61\x63\x74\x65\x72\x20\x64\x65" \
+"\x76\x69\x63\x65\x0a\x09\x70\x09\x4e\x61\x6d\x65\x64\x20\x70\x69" \
+"\x70\x65\x20\x28\x4d\x41\x4a\x4f\x52\x20\x61\x6e\x64\x20\x4d\x49" \
+"\x4e\x4f\x52\x20\x61\x72\x65\x20\x69\x67\x6e\x6f\x72\x65\x64\x29" \
+"\x00\x5b\x2d\x4c\x20\x4c\x42\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44" \
+"\x45\x56\x20\x5b\x4b\x42\x59\x54\x45\x53\x5d\x0a\x0a\x50\x72\x65" \
+"\x70\x61\x72\x65\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x20\x74\x6f" \
+"\x20\x62\x65\x20\x75\x73\x65\x64\x20\x61\x73\x20\x73\x77\x61\x70" \
+"\x20\x70\x61\x72\x74\x69\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x4c\x20" \
+"\x4c\x42\x4c\x09\x4c\x61\x62\x65\x6c\x00\x5b\x2d\x64\x74\x5d\x20" \
+"\x5b\x2d\x70\x20\x44\x49\x52\x5d\x20\x5b\x54\x45\x4d\x50\x4c\x41" \
+"\x54\x45\x5d\x0a\x0a\x43\x72\x65\x61\x74\x65\x20\x61\x20\x74\x65" \
+"\x6d\x70\x6f\x72\x61\x72\x79\x20\x66\x69\x6c\x65\x20\x77\x69\x74" \
+"\x68\x20\x6e\x61\x6d\x65\x20\x62\x61\x73\x65\x64\x20\x6f\x6e\x20" \
+"\x54\x45\x4d\x50\x4c\x41\x54\x45\x20\x61\x6e\x64\x20\x70\x72\x69" \
+"\x6e\x74\x20\x69\x74\x73\x20\x6e\x61\x6d\x65\x2e\x0a\x54\x45\x4d" \
+"\x50\x4c\x41\x54\x45\x20\x6d\x75\x73\x74\x20\x65\x6e\x64\x20\x77" \
+"\x69\x74\x68\x20\x58\x58\x58\x58\x58\x58\x20\x28\x65\x2e\x67\x2e" \
+"\x20\x5b\x2f\x64\x69\x72\x2f\x5d\x6e\x61\x6d\x65\x58\x58\x58\x58" \
+"\x58\x58\x29\x2e\x0a\x57\x69\x74\x68\x6f\x75\x74\x20\x54\x45\x4d" \
+"\x50\x4c\x41\x54\x45\x2c\x20\x2d\x74\x20\x74\x6d\x70\x2e\x58\x58" \
+"\x58\x58\x58\x58\x20\x69\x73\x20\x61\x73\x73\x75\x6d\x65\x64\x2e" \
+"\x0a\x0a\x09\x2d\x64\x09\x4d\x61\x6b\x65\x20\x64\x69\x72\x65\x63" \
+"\x74\x6f\x72\x79\x2c\x20\x6e\x6f\x74\x20\x66\x69\x6c\x65\x0a\x09" \
+"\x2d\x74\x09\x50\x72\x65\x70\x65\x6e\x64\x20\x62\x61\x73\x65\x20" \
+"\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x61\x6d\x65\x20\x74" \
+"\x6f\x20\x54\x45\x4d\x50\x4c\x41\x54\x45\x0a\x09\x2d\x70\x20\x44" \
+"\x49\x52\x09\x55\x73\x65\x20\x44\x49\x52\x20\x61\x73\x20\x61\x20" \
+"\x62\x61\x73\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x28" \
+"\x69\x6d\x70\x6c\x69\x65\x73\x20\x2d\x74\x29\x0a\x09\x2d\x75\x09" \
+"\x44\x6f\x20\x6e\x6f\x74\x20\x63\x72\x65\x61\x74\x65\x20\x61\x6e" \
+"\x79\x74\x68\x69\x6e\x67\x3b\x20\x70\x72\x69\x6e\x74\x20\x61\x20" \
+"\x6e\x61\x6d\x65\x0a\x0a\x42\x61\x73\x65\x20\x64\x69\x72\x65\x63" \
+"\x74\x6f\x72\x79\x20\x69\x73\x3a\x20\x2d\x70\x20\x44\x49\x52\x2c" \
+"\x20\x65\x6c\x73\x65\x20\x24\x54\x4d\x50\x44\x49\x52\x2c\x20\x65" \
+"\x6c\x73\x65\x20\x2f\x74\x6d\x70\x00\x5b\x2d\x61\x64\x6c\x70\x30" \
+"\x5d\x20\x5b\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72\x64\x5d\x20\x4d" \
+"\x4f\x44\x55\x4c\x45\x0a\x0a\x09\x2d\x61\x09\x09\x53\x68\x6f\x72" \
+"\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x61\x75\x74" \
+"\x68\x6f\x72\x27\x0a\x09\x2d\x64\x09\x09\x53\x68\x6f\x72\x74\x63" \
+"\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x64\x65\x73\x63\x72" \
+"\x69\x70\x74\x69\x6f\x6e\x27\x0a\x09\x2d\x6c\x09\x09\x53\x68\x6f" \
+"\x72\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x6c\x69" \
+"\x63\x65\x6e\x73\x65\x27\x0a\x09\x2d\x70\x09\x09\x53\x68\x6f\x72" \
+"\x74\x63\x75\x74\x20\x66\x6f\x72\x20\x27\x2d\x46\x20\x70\x61\x72" \
+"\x6d\x27\x0a\x09\x2d\x46\x20\x6b\x65\x79\x77\x6f\x72\x64\x09\x4b" \
+"\x65\x79\x77\x6f\x72\x64\x20\x74\x6f\x20\x6c\x6f\x6f\x6b\x20\x66" \
+"\x6f\x72\x0a\x09\x2d\x30\x09\x09\x53\x65\x70\x61\x72\x61\x74\x65" \
+"\x20\x6f\x75\x74\x70\x75\x74\x20\x77\x69\x74\x68\x20\x4e\x55\x4c" \
+"\x73\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55" \
+"\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65" \
+"\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65" \
+"\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61\x63\x6b\x73\x29" \
+"\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e" \
+"\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x76\x09\x56" \
+"\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65" \
+"\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f\x72\x20\x75\x6e" \
+"\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20" \
+"\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65" \
+"\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72\x00\x5b\x46\x49" \
+"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x56\x69\x65\x77\x20\x46\x49\x4c" \
+"\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x6f\x6e\x65" \
+"\x20\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x61\x74\x20\x61\x20" \
+"\x74\x69\x6d\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b" \
+"\x2d\x6f\x20\x4f\x50\x54\x53\x5d\x20\x44\x45\x56\x49\x43\x45\x20" \
+"\x4e\x4f\x44\x45\x0a\x0a\x4d\x6f\x75\x6e\x74\x20\x61\x20\x66\x69" \
+"\x6c\x65\x73\x79\x73\x74\x65\x6d\x2e\x20\x46\x69\x6c\x65\x73\x79" \
+"\x73\x74\x65\x6d\x20\x61\x75\x74\x6f\x64\x65\x74\x65\x63\x74\x69" \
+"\x6f\x6e\x20\x72\x65\x71\x75\x69\x72\x65\x73\x20\x2f\x70\x72\x6f" \
+"\x63\x2e\x0a\x0a\x09\x2d\x61\x09\x09\x4d\x6f\x75\x6e\x74\x20\x61" \
+"\x6c\x6c\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x20\x69" \
+"\x6e\x20\x66\x73\x74\x61\x62\x0a\x09\x2d\x72\x09\x09\x52\x65\x61" \
+"\x64\x2d\x6f\x6e\x6c\x79\x20\x6d\x6f\x75\x6e\x74\x0a\x09\x2d\x77" \
+"\x09\x09\x52\x65\x61\x64\x2d\x77\x72\x69\x74\x65\x20\x6d\x6f\x75" \
+"\x6e\x74\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x74" \
+"\x20\x46\x53\x54\x59\x50\x45\x5b\x2c\x2e\x2e\x2e\x5d\x09\x46\x69" \
+"\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x74\x79\x70\x65\x28\x73\x29" \
+"\x0a\x09\x2d\x4f\x20\x4f\x50\x54\x09\x09\x4d\x6f\x75\x6e\x74\x20" \
+"\x6f\x6e\x6c\x79\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73" \
+"\x20\x77\x69\x74\x68\x20\x6f\x70\x74\x69\x6f\x6e\x20\x4f\x50\x54" \
+"\x20\x28\x2d\x61\x20\x6f\x6e\x6c\x79\x29\x0a\x2d\x6f\x20\x4f\x50" \
+"\x54\x3a\x0a\x09\x6c\x6f\x6f\x70\x09\x09\x49\x67\x6e\x6f\x72\x65" \
+"\x64\x20\x28\x6c\x6f\x6f\x70\x20\x64\x65\x76\x69\x63\x65\x73\x20" \
+"\x61\x72\x65\x20\x61\x75\x74\x6f\x64\x65\x74\x65\x63\x74\x65\x64" \
+"\x29\x0a\x09\x5b\x61\x5d\x73\x79\x6e\x63\x09\x09\x57\x72\x69\x74" \
+"\x65\x73\x20\x61\x72\x65\x20\x5b\x61\x5d\x73\x79\x6e\x63\x68\x72" \
+"\x6f\x6e\x6f\x75\x73\x0a\x09\x5b\x6e\x6f\x5d\x61\x74\x69\x6d\x65" \
+"\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20" \
+"\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x69\x6e\x6f\x64\x65" \
+"\x20\x61\x63\x63\x65\x73\x73\x20\x74\x69\x6d\x65\x73\x0a\x09\x5b" \
+"\x6e\x6f\x5d\x64\x69\x72\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61" \
+"\x62\x6c\x65\x2f\x65\x6e\x61\x62\x6c\x65\x20\x61\x74\x69\x6d\x65" \
+"\x20\x75\x70\x64\x61\x74\x65\x73\x20\x74\x6f\x20\x64\x69\x72\x65" \
+"\x63\x74\x6f\x72\x69\x65\x73\x0a\x09\x5b\x6e\x6f\x5d\x72\x65\x6c" \
+"\x61\x74\x69\x6d\x65\x09\x44\x69\x73\x61\x62\x6c\x65\x2f\x65\x6e" \
+"\x61\x62\x6c\x65\x20\x61\x74\x69\x6d\x65\x20\x75\x70\x64\x61\x74" \
+"\x65\x73\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x20\x74\x6f\x20\x6d" \
+"\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x20\x74\x69\x6d\x65" \
+"\x0a\x09\x5b\x6e\x6f\x5d\x64\x65\x76\x09\x09\x28\x44\x69\x73\x29" \
+"\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66\x20\x73\x70\x65" \
+"\x63\x69\x61\x6c\x20\x64\x65\x76\x69\x63\x65\x20\x66\x69\x6c\x65" \
+"\x73\x0a\x09\x5b\x6e\x6f\x5d\x65\x78\x65\x63\x09\x28\x44\x69\x73" \
+"\x29\x61\x6c\x6c\x6f\x77\x20\x75\x73\x65\x20\x6f\x66\x20\x65\x78" \
+"\x65\x63\x75\x74\x61\x62\x6c\x65\x20\x66\x69\x6c\x65\x73\x0a\x09" \
+"\x5b\x6e\x6f\x5d\x73\x75\x69\x64\x09\x28\x44\x69\x73\x29\x61\x6c" \
+"\x6c\x6f\x77\x20\x73\x65\x74\x2d\x75\x73\x65\x72\x2d\x69\x64\x2d" \
+"\x72\x6f\x6f\x74\x20\x70\x72\x6f\x67\x72\x61\x6d\x73\x0a\x09\x5b" \
+"\x72\x5d\x73\x68\x61\x72\x65\x64\x09\x43\x6f\x6e\x76\x65\x72\x74" \
+"\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74" \
+"\x6f\x20\x61\x20\x73\x68\x61\x72\x65\x64\x20\x73\x75\x62\x74\x72" \
+"\x65\x65\x0a\x09\x5b\x72\x5d\x73\x6c\x61\x76\x65\x09\x43\x6f\x6e" \
"\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c" \
-"\x79\x5d\x20\x74\x6f\x20\x61\x20\x73\x68\x61\x72\x65\x64\x20\x73" \
-"\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x72\x5d\x73\x6c\x61\x76\x65" \
-"\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72\x73" \
-"\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x20\x73\x6c\x61\x76" \
-"\x65\x20\x73\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x72\x5d\x70\x72" \
-"\x69\x76\x61\x74\x65\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72" \
-"\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61" \
-"\x20\x70\x72\x69\x76\x61\x74\x65\x20\x73\x75\x62\x74\x72\x65\x65" \
-"\x0a\x09\x5b\x75\x6e\x5d\x62\x69\x6e\x64\x61\x62\x6c\x65\x09\x4d" \
-"\x61\x6b\x65\x20\x6d\x6f\x75\x6e\x74\x20\x70\x6f\x69\x6e\x74\x20" \
-"\x5b\x75\x6e\x5d\x61\x62\x6c\x65\x20\x74\x6f\x20\x62\x65\x20\x62" \
-"\x69\x6e\x64\x20\x6d\x6f\x75\x6e\x74\x65\x64\x0a\x09\x5b\x72\x5d" \
-"\x62\x69\x6e\x64\x09\x09\x42\x69\x6e\x64\x20\x61\x20\x66\x69\x6c" \
-"\x65\x20\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x5b" \
-"\x72\x65\x63\x75\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20" \
-"\x61\x6e\x6f\x74\x68\x65\x72\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e" \
-"\x0a\x09\x6d\x6f\x76\x65\x09\x09\x52\x65\x6c\x6f\x63\x61\x74\x65" \
-"\x20\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x6d\x6f\x75" \
-"\x6e\x74\x20\x70\x6f\x69\x6e\x74\x0a\x09\x72\x65\x6d\x6f\x75\x6e" \
-"\x74\x09\x09\x52\x65\x6d\x6f\x75\x6e\x74\x20\x61\x20\x6d\x6f\x75" \
-"\x6e\x74\x65\x64\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2c" \
-"\x20\x63\x68\x61\x6e\x67\x69\x6e\x67\x20\x66\x6c\x61\x67\x73\x0a" \
-"\x09\x72\x6f\x2f\x72\x77\x09\x09\x53\x61\x6d\x65\x20\x61\x73\x20" \
-"\x2d\x72\x2f\x2d\x77\x0a\x0a\x54\x68\x65\x72\x65\x20\x61\x72\x65" \
-"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2d\x73\x70\x65\x63" \
-"\x69\x66\x69\x63\x20\x2d\x6f\x20\x66\x6c\x61\x67\x73\x2e\x00\x5b" \
-"\x2d\x71\x5d\x20\x3c\x5b\x2d\x64\x6e\x5d\x20\x44\x49\x52\x20\x7c" \
-"\x20\x2d\x78\x20\x44\x45\x56\x49\x43\x45\x3e\x0a\x0a\x43\x68\x65" \
-"\x63\x6b\x20\x69\x66\x20\x74\x68\x65\x20\x64\x69\x72\x65\x63\x74" \
-"\x6f\x72\x79\x20\x69\x73\x20\x61\x20\x6d\x6f\x75\x6e\x74\x70\x6f" \
-"\x69\x6e\x74\x0a\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09" \
-"\x2d\x64\x09\x50\x72\x69\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d" \
-"\x69\x6e\x6f\x72\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62" \
-"\x65\x72\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79" \
-"\x73\x74\x65\x6d\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x64" \
-"\x65\x76\x69\x63\x65\x20\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68" \
-"\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x09\x2d\x78" \
-"\x09\x50\x72\x69\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e" \
-"\x6f\x72\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72" \
-"\x20\x6f\x66\x20\x74\x68\x65\x20\x62\x6c\x6f\x63\x6b\x64\x65\x76" \
-"\x69\x63\x65\x00\x5b\x2d\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43" \
-"\x45\x20\x44\x45\x53\x54\x0a\x6f\x72\x3a\x20\x6d\x76\x20\x5b\x2d" \
-"\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43\x45\x2e\x2e\x2e\x20\x44" \
-"\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x52\x65\x6e\x61\x6d\x65" \
-"\x20\x53\x4f\x55\x52\x43\x45\x20\x74\x6f\x20\x44\x45\x53\x54\x2c" \
-"\x20\x6f\x72\x20\x6d\x6f\x76\x65\x20\x53\x4f\x55\x52\x43\x45\x28" \
-"\x73\x29\x20\x74\x6f\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a" \
-"\x0a\x09\x2d\x66\x09\x44\x6f\x6e\x27\x74\x20\x70\x72\x6f\x6d\x70" \
-"\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69" \
-"\x74\x69\x6e\x67\x0a\x09\x2d\x69\x09\x49\x6e\x74\x65\x72\x61\x63" \
-"\x74\x69\x76\x65\x2c\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66" \
-"\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d" \
-"\x6e\x09\x44\x6f\x6e\x27\x74\x20\x6f\x76\x65\x72\x77\x72\x69\x74" \
-"\x65\x20\x61\x6e\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x66\x69" \
-"\x6c\x65\x00\x5b\x2d\x6f\x5d\x20\x5b\x2d\x62\x5d\x20\x5b\x2d\x73" \
-"\x20\x41\x44\x44\x52\x5d\x20\x5b\x2d\x66\x20\x46\x49\x4c\x45\x5d" \
-"\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43\x45\x0a\x0a\x44\x75\x6d" \
-"\x70\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20" \
-"\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x6f\x09" \
-"\x4f\x6d\x69\x74\x20\x6f\x6f\x62\x20\x64\x61\x74\x61\x0a\x09\x2d" \
-"\x62\x09\x4f\x6d\x69\x74\x20\x62\x61\x64\x20\x62\x6c\x6f\x63\x6b" \
-"\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x64\x75\x6d\x70\x0a\x09" \
-"\x2d\x73\x20\x41\x44\x44\x52\x09\x53\x74\x61\x72\x74\x20\x61\x64" \
-"\x64\x72\x65\x73\x73\x0a\x09\x2d\x6c\x20\x4c\x45\x4e\x09\x4c\x65" \
-"\x6e\x67\x74\x68\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x44\x75" \
-"\x6d\x70\x20\x74\x6f\x20\x66\x69\x6c\x65\x20\x28\x27\x2d\x27\x20" \
-"\x66\x6f\x72\x20\x73\x74\x64\x6f\x75\x74\x29\x00\x5b\x2d\x70\x5d" \
-"\x20\x5b\x2d\x73\x20\x41\x44\x44\x52\x5d\x20\x4d\x54\x44\x5f\x44" \
-"\x45\x56\x49\x43\x45\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x57\x72" \
-"\x69\x74\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69" \
-"\x66\x69\x65\x64\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a" \
-"\x0a\x09\x2d\x70\x09\x50\x61\x64\x20\x74\x6f\x20\x70\x61\x67\x65" \
-"\x20\x73\x69\x7a\x65\x0a\x09\x2d\x73\x20\x41\x44\x44\x52\x09\x53" \
-"\x74\x61\x72\x74\x20\x61\x64\x64\x72\x65\x73\x73\x00\x5b\x2d\x6e" \
-"\x20\x41\x44\x4a\x55\x53\x54\x5d\x20\x5b\x50\x52\x4f\x47\x20\x41" \
-"\x52\x47\x53\x5d\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73\x63\x68" \
-"\x65\x64\x75\x6c\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x79" \
-"\x2c\x20\x72\x75\x6e\x20\x50\x52\x4f\x47\x0a\x0a\x09\x2d\x6e\x20" \
-"\x41\x44\x4a\x55\x53\x54\x09\x41\x64\x6a\x75\x73\x74\x20\x70\x72" \
-"\x69\x6f\x72\x69\x74\x79\x20\x62\x79\x20\x41\x44\x4a\x55\x53\x54" \
-"\x00\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20" \
-"\x50\x52\x4f\x47\x20\x69\x6d\x6d\x75\x6e\x65\x20\x74\x6f\x20\x68" \
-"\x61\x6e\x67\x75\x70\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x75\x74" \
-"\x70\x75\x74\x20\x74\x6f\x20\x61\x20\x6e\x6f\x6e\x2d\x74\x74\x79" \
-"\x00\x5b\x2d\x61\x42\x62\x63\x44\x64\x65\x46\x66\x48\x68\x49\x69" \
-"\x4c\x6c\x4f\x6f\x76\x58\x78\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20" \
-"\x73\x74\x64\x69\x6e\x29\x20\x75\x6e\x61\x6d\x62\x69\x67\x75\x6f" \
-"\x75\x73\x6c\x79\x2c\x20\x61\x73\x20\x6f\x63\x74\x61\x6c\x20\x62" \
-"\x79\x74\x65\x73\x20\x62\x79\x20\x64\x65\x66\x61\x75\x6c\x74\x00" \
-"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4f\x52\x49\x47\x46" \
-"\x49\x4c\x45\x20\x5b\x50\x41\x54\x43\x48\x46\x49\x4c\x45\x5d\x5d" \
-"\x0a\x0a\x09\x2d\x70\x2c\x2d\x2d\x73\x74\x72\x69\x70\x20\x4e\x09" \
-"\x09\x53\x74\x72\x69\x70\x20\x4e\x20\x6c\x65\x61\x64\x69\x6e\x67" \
-"\x20\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x20\x66\x72\x6f\x6d" \
-"\x20\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x69\x2c" \
-"\x2d\x2d\x69\x6e\x70\x75\x74\x20\x44\x49\x46\x46\x09\x09\x52\x65" \
-"\x61\x64\x20\x44\x49\x46\x46\x20\x69\x6e\x73\x74\x65\x61\x64\x20" \
-"\x6f\x66\x20\x73\x74\x64\x69\x6e\x0a\x09\x2d\x52\x2c\x2d\x2d\x72" \
-"\x65\x76\x65\x72\x73\x65\x09\x09\x52\x65\x76\x65\x72\x73\x65\x20" \
-"\x70\x61\x74\x63\x68\x0a\x09\x2d\x4e\x2c\x2d\x2d\x66\x6f\x72\x77" \
-"\x61\x72\x64\x09\x09\x49\x67\x6e\x6f\x72\x65\x20\x61\x6c\x72\x65" \
-"\x61\x64\x79\x20\x61\x70\x70\x6c\x69\x65\x64\x20\x70\x61\x74\x63" \
-"\x68\x65\x73\x0a\x09\x2d\x45\x2c\x2d\x2d\x72\x65\x6d\x6f\x76\x65" \
-"\x2d\x65\x6d\x70\x74\x79\x2d\x66\x69\x6c\x65\x73\x09\x52\x65\x6d" \
-"\x6f\x76\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x73" \
-"\x20\x69\x66\x20\x74\x68\x65\x79\x20\x62\x65\x63\x6f\x6d\x65\x20" \
-"\x65\x6d\x70\x74\x79\x00\x5b\x2d\x66\x6c\x6e\x6f\x76\x78\x5d\x20" \
-"\x5b\x2d\x73\x20\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c" \
-"\x50\x41\x54\x54\x45\x52\x4e\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61" \
-"\x79\x20\x70\x72\x6f\x63\x65\x73\x73\x28\x65\x73\x29\x20\x73\x65" \
-"\x6c\x65\x63\x74\x65\x64\x20\x62\x79\x20\x72\x65\x67\x65\x78\x20" \
-"\x50\x41\x54\x54\x45\x52\x4e\x0a\x0a\x09\x2d\x6c\x09\x53\x68\x6f" \
-"\x77\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6e\x61\x6d\x65\x20\x74" \
-"\x6f\x6f\x0a\x09\x2d\x66\x09\x4d\x61\x74\x63\x68\x20\x61\x67\x61" \
-"\x69\x6e\x73\x74\x20\x65\x6e\x74\x69\x72\x65\x20\x63\x6f\x6d\x6d" \
-"\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x6e\x09\x53\x68\x6f" \
-"\x77\x20\x74\x68\x65\x20\x6e\x65\x77\x65\x73\x74\x20\x70\x72\x6f" \
-"\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6f\x09\x53\x68" \
-"\x6f\x77\x20\x74\x68\x65\x20\x6f\x6c\x64\x65\x73\x74\x20\x70\x72" \
-"\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x76\x09\x4e" \
-"\x65\x67\x61\x74\x65\x20\x74\x68\x65\x20\x6d\x61\x74\x63\x68\x0a" \
-"\x09\x2d\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20" \
-"\x6e\x61\x6d\x65\x20\x28\x6e\x6f\x74\x20\x73\x75\x62\x73\x74\x72" \
-"\x69\x6e\x67\x29\x0a\x09\x2d\x73\x09\x4d\x61\x74\x63\x68\x20\x73" \
-"\x65\x73\x73\x69\x6f\x6e\x20\x49\x44\x20\x28\x30\x20\x66\x6f\x72" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x29\x0a\x09\x2d\x50\x09\x4d\x61" \
-"\x74\x63\x68\x20\x70\x61\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65" \
-"\x73\x73\x20\x49\x44\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
-"\x5b\x4e\x41\x4d\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x69\x73\x74\x20" \
-"\x50\x49\x44\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x65\x73\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73" \
-"\x20\x74\x68\x61\x74\x20\x6d\x61\x74\x63\x68\x20\x4e\x41\x4d\x45" \
-"\x73\x0a\x0a\x09\x2d\x73\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79" \
-"\x20\x6f\x6e\x65\x20\x50\x49\x44\x0a\x09\x2d\x6f\x20\x50\x49\x44" \
-"\x09\x4f\x6d\x69\x74\x20\x67\x69\x76\x65\x6e\x20\x70\x69\x64\x0a" \
-"\x09\x09\x55\x73\x65\x20\x25\x50\x50\x49\x44\x20\x74\x6f\x20\x6f" \
-"\x6d\x69\x74\x20\x70\x69\x64\x20\x6f\x66\x20\x70\x69\x64\x6f\x66" \
-"\x27\x73\x20\x70\x61\x72\x65\x6e\x74\x00\x5b\x2d\x6c\x7c\x2d\x53" \
-"\x49\x47\x4e\x41\x4c\x5d\x20\x5b\x2d\x66\x6e\x6f\x76\x78\x5d\x20" \
-"\x5b\x2d\x73\x20\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c" \
-"\x50\x41\x54\x54\x45\x52\x4e\x5d\x0a\x0a\x53\x65\x6e\x64\x20\x61" \
-"\x20\x73\x69\x67\x6e\x61\x6c\x20\x74\x6f\x20\x70\x72\x6f\x63\x65" \
-"\x73\x73\x28\x65\x73\x29\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20" \
-"\x62\x79\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e" \
-"\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73" \
-"\x69\x67\x6e\x61\x6c\x73\x0a\x09\x2d\x66\x09\x4d\x61\x74\x63\x68" \
-"\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x65\x6e\x74\x69\x72\x65\x20" \
-"\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x6e" \
-"\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x68\x65\x20\x6e\x65\x77\x65" \
-"\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a" \
-"\x09\x2d\x6f\x09\x53\x69\x67\x6e\x61\x6c\x20\x74\x68\x65\x20\x6f" \
-"\x6c\x64\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e" \
-"\x6c\x79\x0a\x09\x2d\x76\x09\x4e\x65\x67\x61\x74\x65\x20\x74\x68" \
-"\x65\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63" \
-"\x68\x20\x77\x68\x6f\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x6e\x6f" \
-"\x74\x20\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x29\x0a\x09\x2d\x73" \
-"\x09\x4d\x61\x74\x63\x68\x20\x73\x65\x73\x73\x69\x6f\x6e\x20\x49" \
-"\x44\x20\x28\x30\x20\x66\x6f\x72\x20\x63\x75\x72\x72\x65\x6e\x74" \
-"\x29\x0a\x09\x2d\x50\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x72\x65" \
-"\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x49\x44\x00\x5b\x56" \
-"\x41\x52\x49\x41\x42\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x56" \
-"\x41\x52\x49\x41\x42\x4c\x45\x73\x2e\x0a\x49\x66\x20\x6e\x6f\x20" \
-"\x56\x41\x52\x49\x41\x42\x4c\x45\x20\x73\x70\x65\x63\x69\x66\x69" \
-"\x65\x64\x2c\x20\x70\x72\x69\x6e\x74\x20\x61\x6c\x6c\x2e\x00\x46" \
-"\x4f\x52\x4d\x41\x54\x20\x5b\x41\x52\x47\x55\x4d\x45\x4e\x54\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x46\x6f\x72\x6d\x61\x74\x20\x61\x6e\x64\x20" \
-"\x70\x72\x69\x6e\x74\x20\x41\x52\x47\x55\x4d\x45\x4e\x54\x28\x73" \
-"\x29\x20\x61\x63\x63\x6f\x72\x64\x69\x6e\x67\x20\x74\x6f\x20\x46" \
-"\x4f\x52\x4d\x41\x54\x2c\x0a\x77\x68\x65\x72\x65\x20\x46\x4f\x52" \
-"\x4d\x41\x54\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x73\x20\x74\x68\x65" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x65\x78\x61\x63\x74\x6c\x79\x20" \
-"\x61\x73\x20\x69\x6e\x20\x43\x20\x70\x72\x69\x6e\x74\x66\x00\x0a" \
-"\x0a\x53\x68\x6f\x77\x20\x6c\x69\x73\x74\x20\x6f\x66\x20\x70\x72" \
-"\x6f\x63\x65\x73\x73\x65\x73\x0a\x0a\x09\x77\x09\x57\x69\x64\x65" \
-"\x20\x6f\x75\x74\x70\x75\x74\x00\x5b\x2d\x70\x5d\x20\x5b\x50\x49" \
-"\x44\x7c\x55\x53\x45\x52\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79" \
-"\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x74\x72\x65\x65\x2c\x20\x6f" \
-"\x70\x74\x69\x6f\x6e\x61\x6c\x6c\x79\x20\x73\x74\x61\x72\x74\x20" \
-"\x66\x72\x6f\x6d\x20\x55\x53\x45\x52\x20\x6f\x72\x20\x50\x49\x44" \
-"\x0a\x0a\x09\x2d\x70\x09\x53\x68\x6f\x77\x20\x70\x69\x64\x73\x00" \
-"\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x66\x75\x6c\x6c" \
-"\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68\x65" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x77\x6f\x72\x6b\x69\x6e\x67" \
-"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x00\x0a\x0a\x50\x72\x69" \
-"\x6e\x74\x20\x74\x68\x65\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x6f" \
-"\x64\x65\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20\x77\x69" \
-"\x74\x68\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65" \
-"\x6d\x20\x6d\x6f\x75\x6e\x74\x65\x64\x20\x61\x74\x20\x27\x2f\x27" \
-"\x00\x5b\x2d\x66\x6e\x76\x5d\x20\x46\x49\x4c\x45\x0a\x0a\x44\x69" \
-"\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x76\x61\x6c\x75\x65\x20" \
-"\x6f\x66\x20\x61\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x0a\x0a\x09\x2d" \
-"\x66\x09\x43\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x69\x7a\x65\x20\x62" \
-"\x79\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x6c\x6c\x20" \
-"\x73\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x6e\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x61\x64\x64\x20\x6e\x65\x77\x6c\x69\x6e\x65\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x00\x46\x49\x4c\x45\x2e" \
-"\x2e\x2e\x0a\x0a\x52\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x61" \
-"\x62\x73\x6f\x6c\x75\x74\x65\x20\x70\x61\x74\x68\x6e\x61\x6d\x65" \
-"\x73\x20\x6f\x66\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x00" \
-"\x7b\x7b\x2d\x6e\x20\x49\x4e\x43\x52\x45\x4d\x45\x4e\x54\x7d\x20" \
-"\x7c\x20\x50\x52\x49\x4f\x52\x49\x54\x59\x7d\x20\x5b\x5b\x2d\x70" \
-"\x20\x7c\x20\x2d\x67\x20\x7c\x20\x2d\x75\x5d\x20\x49\x44\x2e\x2e" \
-"\x2e\x5d\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73\x63\x68\x65\x64" \
-"\x75\x6c\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x20\x66" \
-"\x6f\x72\x20\x61\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20\x70\x72\x6f" \
-"\x63\x65\x73\x73\x0a\x0a\x09\x2d\x6e\x09\x41\x64\x6a\x75\x73\x74" \
-"\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x6e\x69\x63\x65\x20\x76\x61" \
-"\x6c\x75\x65\x20\x28\x73\x6d\x61\x6c\x6c\x65\x72\x20\x69\x73\x20" \
-"\x66\x61\x73\x74\x65\x72\x29\x0a\x09\x2d\x70\x09\x50\x72\x6f\x63" \
-"\x65\x73\x73\x20\x69\x64\x28\x73\x29\x20\x28\x64\x65\x66\x61\x75" \
-"\x6c\x74\x29\x0a\x09\x2d\x67\x09\x50\x72\x6f\x63\x65\x73\x73\x20" \
-"\x67\x72\x6f\x75\x70\x20\x69\x64\x28\x73\x29\x0a\x09\x2d\x75\x09" \
-"\x50\x72\x6f\x63\x65\x73\x73\x20\x75\x73\x65\x72\x20\x6e\x61\x6d" \
-"\x65\x28\x73\x29\x20\x61\x6e\x64\x2f\x6f\x72\x20\x69\x64\x28\x73" \
-"\x29\x00\x0a\x0a\x52\x65\x73\x65\x74\x20\x74\x68\x65\x20\x73\x63" \
-"\x72\x65\x65\x6e\x00\x0a\x0a\x52\x65\x73\x69\x7a\x65\x20\x74\x68" \
-"\x65\x20\x73\x63\x72\x65\x65\x6e\x00\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x52\x65\x76\x65\x72\x73\x65\x20\x6c\x69\x6e\x65" \
-"\x73\x20\x6f\x66\x20\x46\x49\x4c\x45\x00\x5b\x2d\x69\x72\x66\x5d" \
-"\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x52\x65\x6d\x6f\x76\x65" \
-"\x20\x28\x75\x6e\x6c\x69\x6e\x6b\x29\x20\x46\x49\x4c\x45\x73\x0a" \
-"\x0a\x09\x2d\x69\x09\x41\x6c\x77\x61\x79\x73\x20\x70\x72\x6f\x6d" \
-"\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x65\x6d\x6f\x76\x69" \
-"\x6e\x67\x0a\x09\x2d\x66\x09\x4e\x65\x76\x65\x72\x20\x70\x72\x6f" \
-"\x6d\x70\x74\x0a\x09\x2d\x52\x2c\x2d\x72\x09\x52\x65\x63\x75\x72" \
-"\x73\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x44\x49\x52" \
-"\x45\x43\x54\x4f\x52\x59\x2e\x2e\x2e\x0a\x0a\x52\x65\x6d\x6f\x76" \
-"\x65\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x20\x69\x66\x20\x69" \
-"\x74\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0a\x0a\x09\x2d\x70\x7c" \
-"\x2d\x2d\x70\x61\x72\x65\x6e\x74\x73\x09\x49\x6e\x63\x6c\x75\x64" \
-"\x65\x20\x70\x61\x72\x65\x6e\x74\x73\x0a\x09\x2d\x2d\x69\x67\x6e" \
-"\x6f\x72\x65\x2d\x66\x61\x69\x6c\x2d\x6f\x6e\x2d\x6e\x6f\x6e\x2d" \
-"\x65\x6d\x70\x74\x79\x00\x5b\x2d\x71\x66\x77\x72\x73\x76\x5d\x20" \
-"\x4d\x4f\x44\x55\x4c\x45\x20\x5b\x73\x79\x6d\x62\x6f\x6c\x3d\x76" \
-"\x61\x6c\x75\x65\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x72\x09\x52\x65" \
-"\x6d\x6f\x76\x65\x20\x4d\x4f\x44\x55\x4c\x45\x20\x28\x73\x74\x61" \
-"\x63\x6b\x73\x29\x20\x6f\x72\x20\x64\x6f\x20\x61\x75\x74\x6f\x63" \
-"\x6c\x65\x61\x6e\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09" \
-"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x66\x09\x46" \
-"\x6f\x72\x63\x65\x0a\x09\x2d\x77\x09\x57\x61\x69\x74\x20\x66\x6f" \
-"\x72\x20\x75\x6e\x6c\x6f\x61\x64\x0a\x09\x2d\x73\x09\x52\x65\x70" \
-"\x6f\x72\x74\x20\x76\x69\x61\x20\x73\x79\x73\x6c\x6f\x67\x20\x69" \
-"\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64\x65\x72\x72" \
-"\x00\x5b\x2d\x74\x5d\x20\x5b\x2d\x6c\x5d\x20\x5b\x2d\x61\x20\x41" \
-"\x52\x47\x5d\x20\x5b\x2d\x75\x20\x4d\x41\x53\x4b\x5d\x20\x44\x49" \
-"\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x52\x75\x6e\x20\x61\x20\x62" \
-"\x75\x6e\x63\x68\x20\x6f\x66\x20\x73\x63\x72\x69\x70\x74\x73\x20" \
-"\x69\x6e\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d" \
-"\x74\x09\x50\x72\x69\x6e\x74\x20\x77\x68\x61\x74\x20\x77\x6f\x75" \
-"\x6c\x64\x20\x62\x65\x20\x72\x75\x6e\x2c\x20\x62\x75\x74\x20\x64" \
-"\x6f\x6e\x27\x74\x20\x61\x63\x74\x75\x61\x6c\x6c\x79\x20\x72\x75" \
-"\x6e\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x0a\x09\x2d\x61\x20\x41" \
-"\x52\x47\x09\x50\x61\x73\x73\x20\x41\x52\x47\x20\x61\x73\x20\x61" \
-"\x72\x67\x75\x6d\x65\x6e\x74\x20\x66\x6f\x72\x20\x65\x76\x65\x72" \
-"\x79\x20\x70\x72\x6f\x67\x72\x61\x6d\x0a\x09\x2d\x75\x20\x4d\x41" \
-"\x53\x4b\x09\x53\x65\x74\x20\x74\x68\x65\x20\x75\x6d\x61\x73\x6b" \
-"\x20\x74\x6f\x20\x4d\x41\x53\x4b\x20\x62\x65\x66\x6f\x72\x65\x20" \
-"\x72\x75\x6e\x6e\x69\x6e\x67\x20\x65\x76\x65\x72\x79\x20\x70\x72" \
-"\x6f\x67\x72\x61\x6d\x0a\x09\x2d\x6c\x09\x50\x72\x69\x6e\x74\x20" \
-"\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x6d\x61\x74" \
-"\x63\x68\x69\x6e\x67\x20\x66\x69\x6c\x65\x73\x20\x65\x76\x65\x6e" \
-"\x20\x69\x66\x20\x74\x68\x65\x79\x20\x61\x72\x65\x20\x6e\x6f\x74" \
-"\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65\x00\x5b\x2d\x65\x66" \
-"\x69\x6e\x72\x5d\x20\x53\x45\x44\x5f\x43\x4d\x44\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x65\x20\x43\x4d\x44\x09" \
-"\x41\x64\x64\x20\x43\x4d\x44\x20\x74\x6f\x20\x73\x65\x64\x20\x63" \
-"\x6f\x6d\x6d\x61\x6e\x64\x73\x20\x74\x6f\x20\x62\x65\x20\x65\x78" \
-"\x65\x63\x75\x74\x65\x64\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09" \
-"\x41\x64\x64\x20\x46\x49\x4c\x45\x20\x63\x6f\x6e\x74\x65\x6e\x74" \
-"\x73\x20\x74\x6f\x20\x73\x65\x64\x20\x63\x6f\x6d\x6d\x61\x6e\x64" \
-"\x73\x20\x74\x6f\x20\x62\x65\x20\x65\x78\x65\x63\x75\x74\x65\x64" \
-"\x0a\x09\x2d\x69\x09\x45\x64\x69\x74\x20\x66\x69\x6c\x65\x73\x20" \
-"\x69\x6e\x2d\x70\x6c\x61\x63\x65\x20\x28\x65\x6c\x73\x65\x20\x73" \
-"\x65\x6e\x64\x73\x20\x72\x65\x73\x75\x6c\x74\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x29\x0a\x09\x2d\x6e\x09\x53\x75\x70\x70\x72" \
-"\x65\x73\x73\x20\x61\x75\x74\x6f\x6d\x61\x74\x69\x63\x20\x70\x72" \
-"\x69\x6e\x74\x69\x6e\x67\x20\x6f\x66\x20\x70\x61\x74\x74\x65\x72" \
-"\x6e\x20\x73\x70\x61\x63\x65\x0a\x09\x2d\x72\x09\x55\x73\x65\x20" \
-"\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65\x67\x65\x78\x20\x73" \
-"\x79\x6e\x74\x61\x78\x0a\x0a\x49\x66\x20\x6e\x6f\x20\x2d\x65\x20" \
-"\x6f\x72\x20\x2d\x66\x2c\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74" \
-"\x20\x6e\x6f\x6e\x2d\x6f\x70\x74\x69\x6f\x6e\x20\x61\x72\x67\x75" \
-"\x6d\x65\x6e\x74\x20\x69\x73\x20\x74\x68\x65\x20\x73\x65\x64\x20" \
-"\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x73\x74\x72\x69\x6e\x67\x2e\x0a" \
-"\x52\x65\x6d\x61\x69\x6e\x69\x6e\x67\x20\x61\x72\x67\x75\x6d\x65" \
-"\x6e\x74\x73\x20\x61\x72\x65\x20\x69\x6e\x70\x75\x74\x20\x66\x69" \
-"\x6c\x65\x73\x20\x28\x73\x74\x64\x69\x6e\x20\x69\x66\x20\x6e\x6f" \
-"\x6e\x65\x29\x2e\x00\x5b\x2d\x77\x5d\x20\x5b\x2d\x73\x20\x53\x45" \
-"\x50\x5d\x20\x5b\x46\x49\x52\x53\x54\x20\x5b\x49\x4e\x43\x5d\x5d" \
-"\x20\x4c\x41\x53\x54\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6e\x75\x6d" \
-"\x62\x65\x72\x73\x20\x66\x72\x6f\x6d\x20\x46\x49\x52\x53\x54\x20" \
-"\x74\x6f\x20\x4c\x41\x53\x54\x2c\x20\x69\x6e\x20\x73\x74\x65\x70" \
-"\x73\x20\x6f\x66\x20\x49\x4e\x43\x2e\x0a\x46\x49\x52\x53\x54\x2c" \
-"\x20\x49\x4e\x43\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x74\x6f\x20" \
-"\x31\x2e\x0a\x0a\x09\x2d\x77\x09\x50\x61\x64\x20\x74\x6f\x20\x6c" \
-"\x61\x73\x74\x20\x77\x69\x74\x68\x20\x6c\x65\x61\x64\x69\x6e\x67" \
-"\x20\x7a\x65\x72\x6f\x73\x0a\x09\x2d\x73\x20\x53\x45\x50\x09\x53" \
-"\x74\x72\x69\x6e\x67\x20\x73\x65\x70\x61\x72\x61\x74\x6f\x72\x00" \
-"\x5b\x2d\x72\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a\x0a\x52" \
-"\x65\x64\x69\x72\x65\x63\x74\x20\x73\x79\x73\x74\x65\x6d\x20\x63" \
-"\x6f\x6e\x73\x6f\x6c\x65\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f" \
-"\x20\x44\x45\x56\x49\x43\x45\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x3a\x20\x2f\x64\x65\x76\x2f\x74\x74\x79\x29\x0a\x0a\x09\x2d\x72" \
-"\x09\x52\x65\x73\x65\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f" \
-"\x20\x2f\x64\x65\x76\x2f\x63\x6f\x6e\x73\x6f\x6c\x65\x00\x5b\x2d" \
-"\x67\x61\x62\x47\x76\x7a\x56\x5d\x20\x44\x45\x56\x49\x43\x45\x20" \
-"\x5b\x50\x41\x52\x41\x4d\x45\x54\x45\x52\x20\x5b\x41\x52\x47\x5d" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x52\x65\x71\x75\x65\x73\x74\x20\x6f\x72" \
-"\x20\x73\x65\x74\x20\x4c\x69\x6e\x75\x78\x20\x73\x65\x72\x69\x61" \
-"\x6c\x20\x70\x6f\x72\x74\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69" \
-"\x6f\x6e\x0a\x0a\x09\x2d\x67\x09\x49\x6e\x74\x65\x72\x70\x72\x65" \
-"\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x20\x61\x73\x20" \
-"\x6c\x69\x73\x74\x20\x6f\x66\x20\x64\x65\x76\x69\x63\x65\x73\x20" \
-"\x66\x6f\x72\x20\x72\x65\x70\x6f\x72\x74\x69\x6e\x67\x0a\x09\x2d" \
-"\x61\x09\x50\x72\x69\x6e\x74\x20\x61\x6c\x6c\x20\x61\x76\x61\x69" \
-"\x6c\x61\x62\x6c\x65\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f" \
-"\x6e\x0a\x09\x2d\x62\x09\x50\x72\x69\x6e\x74\x20\x73\x75\x6d\x6d" \
-"\x61\x72\x79\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a" \
-"\x09\x2d\x47\x09\x50\x72\x69\x6e\x74\x20\x69\x6e\x20\x66\x6f\x72" \
-"\x6d\x20\x77\x68\x69\x63\x68\x20\x63\x61\x6e\x20\x62\x65\x20\x66" \
-"\x65\x64\x20\x62\x61\x63\x6b\x0a\x09\x09\x74\x6f\x20\x73\x65\x74" \
-"\x73\x65\x72\x69\x61\x6c\x20\x61\x73\x20\x63\x6f\x6d\x6d\x61\x6e" \
-"\x64\x20\x6c\x69\x6e\x65\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72" \
-"\x73\x0a\x09\x2d\x7a\x09\x5a\x65\x72\x6f\x20\x6f\x75\x74\x20\x73" \
-"\x65\x72\x69\x61\x6c\x20\x66\x6c\x61\x67\x73\x20\x62\x65\x66\x6f" \
-"\x72\x65\x20\x73\x65\x74\x74\x69\x6e\x67\x0a\x09\x2d\x76\x09\x56" \
-"\x65\x72\x62\x6f\x73\x65\x0a\x0a\x50\x61\x72\x61\x6d\x65\x74\x65" \
-"\x72\x73\x3a\x20\x28\x2a\x20\x3d\x20\x74\x61\x6b\x65\x73\x20\x61" \
-"\x6e\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x2c\x20\x5e\x20\x3d\x20" \
-"\x63\x61\x6e\x20\x62\x65\x20\x74\x75\x72\x6e\x65\x64\x20\x6f\x66" \
-"\x66\x20\x62\x79\x20\x70\x72\x65\x63\x65\x64\x69\x6e\x67\x20\x5e" \
-"\x29\x0a\x09\x2a\x70\x6f\x72\x74\x2c\x20\x2a\x69\x72\x71\x2c\x20" \
-"\x2a\x64\x69\x76\x69\x73\x6f\x72\x2c\x20\x2a\x75\x61\x72\x74\x2c" \
-"\x20\x2a\x62\x61\x75\x6e\x64\x5f\x62\x61\x73\x65\x2c\x20\x2a\x63" \
-"\x6c\x6f\x73\x65\x5f\x64\x65\x6c\x61\x79\x2c\x20\x2a\x63\x6c\x6f" \
-"\x73\x69\x6e\x67\x5f\x77\x61\x69\x74\x2c\x0a\x09\x5e\x66\x6f\x75" \
-"\x72\x70\x6f\x72\x74\x2c\x20\x5e\x61\x75\x74\x6f\x5f\x69\x72\x71" \
-"\x2c\x20\x5e\x73\x6b\x69\x70\x5f\x74\x65\x73\x74\x2c\x20\x5e\x73" \
-"\x61\x6b\x2c\x20\x5e\x73\x65\x73\x73\x69\x6f\x6e\x5f\x6c\x6f\x63" \
-"\x6b\x6f\x75\x74\x2c\x20\x5e\x70\x67\x72\x70\x5f\x6c\x6f\x63\x6b" \
-"\x6f\x75\x74\x2c\x0a\x09\x5e\x63\x61\x6c\x6c\x6f\x75\x74\x5f\x6e" \
-"\x6f\x68\x75\x70\x2c\x20\x5e\x73\x70\x6c\x69\x74\x5f\x74\x65\x72" \
-"\x6d\x69\x6f\x73\x2c\x20\x5e\x68\x75\x70\x5f\x6e\x6f\x74\x69\x66" \
-"\x79\x2c\x20\x5e\x6c\x6f\x77\x5f\x6c\x61\x74\x65\x6e\x63\x79\x2c" \
-"\x20\x61\x75\x74\x6f\x63\x6f\x6e\x66\x69\x67\x2c\x0a\x09\x73\x70" \
-"\x64\x5f\x6e\x6f\x72\x6d\x61\x6c\x2c\x20\x73\x70\x64\x5f\x68\x69" \
-"\x2c\x20\x73\x70\x64\x5f\x76\x68\x69\x2c\x20\x73\x70\x64\x5f\x73" \
-"\x68\x69\x2c\x20\x73\x70\x64\x5f\x77\x61\x72\x70\x2c\x20\x73\x70" \
-"\x64\x5f\x63\x75\x73\x74\x0a\x0a\x55\x41\x52\x54\x20\x74\x79\x70" \
-"\x65\x73\x3a\x0a\x09\x75\x6e\x6b\x6e\x6f\x77\x6e\x2c\x20\x38\x32" \
-"\x35\x30\x2c\x20\x31\x36\x34\x35\x30\x2c\x20\x31\x36\x35\x35\x30" \
-"\x2c\x20\x31\x36\x35\x35\x30\x41\x2c\x20\x43\x69\x72\x72\x75\x73" \
-"\x2c\x20\x31\x36\x36\x35\x30\x2c\x20\x31\x36\x36\x35\x30\x56\x32" \
-"\x2c\x20\x31\x36\x37\x35\x30\x2c\x0a\x09\x31\x36\x39\x35\x30\x2c" \
-"\x20\x31\x36\x39\x35\x34\x2c\x20\x31\x36\x36\x35\x34\x2c\x20\x31" \
-"\x36\x38\x35\x30\x2c\x20\x52\x53\x41\x2c\x20\x4e\x53\x31\x36\x35" \
-"\x35\x30\x41\x2c\x20\x58\x53\x43\x41\x4c\x45\x2c\x20\x52\x4d\x39" \
-"\x30\x30\x30\x2c\x20\x4f\x43\x54\x45\x4f\x4e\x2c\x20\x41\x52\x37" \
-"\x2c\x0a\x09\x55\x36\x5f\x31\x36\x35\x35\x30\x41\x00\x50\x52\x4f" \
+"\x79\x5d\x20\x74\x6f\x20\x61\x20\x73\x6c\x61\x76\x65\x20\x73\x75" \
+"\x62\x74\x72\x65\x65\x0a\x09\x5b\x72\x5d\x70\x72\x69\x76\x61\x74" \
+"\x65\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x5b\x72\x65\x63\x75\x72" \
+"\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x20\x70\x72\x69" \
+"\x76\x61\x74\x65\x20\x73\x75\x62\x74\x72\x65\x65\x0a\x09\x5b\x75" \
+"\x6e\x5d\x62\x69\x6e\x64\x61\x62\x6c\x65\x09\x4d\x61\x6b\x65\x20" \
+"\x6d\x6f\x75\x6e\x74\x20\x70\x6f\x69\x6e\x74\x20\x5b\x75\x6e\x5d" \
+"\x61\x62\x6c\x65\x20\x74\x6f\x20\x62\x65\x20\x62\x69\x6e\x64\x20" \
+"\x6d\x6f\x75\x6e\x74\x65\x64\x0a\x09\x5b\x72\x5d\x62\x69\x6e\x64" \
+"\x09\x09\x42\x69\x6e\x64\x20\x61\x20\x66\x69\x6c\x65\x20\x6f\x72" \
+"\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x5b\x72\x65\x63\x75" \
+"\x72\x73\x69\x76\x65\x6c\x79\x5d\x20\x74\x6f\x20\x61\x6e\x6f\x74" \
+"\x68\x65\x72\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x0a\x09\x6d\x6f" \
+"\x76\x65\x09\x09\x52\x65\x6c\x6f\x63\x61\x74\x65\x20\x61\x6e\x20" \
+"\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x6d\x6f\x75\x6e\x74\x20\x70" \
+"\x6f\x69\x6e\x74\x0a\x09\x72\x65\x6d\x6f\x75\x6e\x74\x09\x09\x52" \
+"\x65\x6d\x6f\x75\x6e\x74\x20\x61\x20\x6d\x6f\x75\x6e\x74\x65\x64" \
+"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x2c\x20\x63\x68\x61" \
+"\x6e\x67\x69\x6e\x67\x20\x66\x6c\x61\x67\x73\x0a\x09\x72\x6f\x2f" \
+"\x72\x77\x09\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x2d\x72\x2f\x2d" \
+"\x77\x0a\x0a\x54\x68\x65\x72\x65\x20\x61\x72\x65\x20\x66\x69\x6c" \
+"\x65\x73\x79\x73\x74\x65\x6d\x2d\x73\x70\x65\x63\x69\x66\x69\x63" \
+"\x20\x2d\x6f\x20\x66\x6c\x61\x67\x73\x2e\x00\x5b\x2d\x71\x5d\x20" \
+"\x3c\x5b\x2d\x64\x6e\x5d\x20\x44\x49\x52\x20\x7c\x20\x2d\x78\x20" \
+"\x44\x45\x56\x49\x43\x45\x3e\x0a\x0a\x43\x68\x65\x63\x6b\x20\x69" \
+"\x66\x20\x74\x68\x65\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x20" \
+"\x69\x73\x20\x61\x20\x6d\x6f\x75\x6e\x74\x70\x6f\x69\x6e\x74\x0a" \
+"\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x64\x09\x50" \
+"\x72\x69\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e\x6f\x72" \
+"\x20\x64\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f" \
+"\x66\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d" \
+"\x0a\x09\x2d\x6e\x09\x50\x72\x69\x6e\x74\x20\x64\x65\x76\x69\x63" \
+"\x65\x20\x6e\x61\x6d\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x66\x69" \
+"\x6c\x65\x73\x79\x73\x74\x65\x6d\x0a\x09\x2d\x78\x09\x50\x72\x69" \
+"\x6e\x74\x20\x6d\x61\x6a\x6f\x72\x2f\x6d\x69\x6e\x6f\x72\x20\x64" \
+"\x65\x76\x69\x63\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
+"\x74\x68\x65\x20\x62\x6c\x6f\x63\x6b\x64\x65\x76\x69\x63\x65\x00" \
+"\x5b\x2d\x66\x69\x6e\x5d\x20\x53\x4f\x55\x52\x43\x45\x20\x44\x45" \
+"\x53\x54\x0a\x6f\x72\x3a\x20\x6d\x76\x20\x5b\x2d\x66\x69\x6e\x5d" \
+"\x20\x53\x4f\x55\x52\x43\x45\x2e\x2e\x2e\x20\x44\x49\x52\x45\x43" \
+"\x54\x4f\x52\x59\x0a\x0a\x52\x65\x6e\x61\x6d\x65\x20\x53\x4f\x55" \
+"\x52\x43\x45\x20\x74\x6f\x20\x44\x45\x53\x54\x2c\x20\x6f\x72\x20" \
+"\x6d\x6f\x76\x65\x20\x53\x4f\x55\x52\x43\x45\x28\x73\x29\x20\x74" \
+"\x6f\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x66" \
+"\x09\x44\x6f\x6e\x27\x74\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65" \
+"\x66\x6f\x72\x65\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x69\x6e\x67" \
+"\x0a\x09\x2d\x69\x09\x49\x6e\x74\x65\x72\x61\x63\x74\x69\x76\x65" \
+"\x2c\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72\x65\x20" \
+"\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x6e\x09\x44\x6f" \
+"\x6e\x27\x74\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x20\x61\x6e" \
+"\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x66\x69\x6c\x65\x00\x5b" \
+"\x2d\x6f\x5d\x20\x5b\x2d\x62\x5d\x20\x5b\x2d\x73\x20\x41\x44\x44" \
+"\x52\x5d\x20\x5b\x2d\x66\x20\x46\x49\x4c\x45\x5d\x20\x4d\x54\x44" \
+"\x5f\x44\x45\x56\x49\x43\x45\x0a\x0a\x44\x75\x6d\x70\x20\x74\x68" \
+"\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x4d\x54\x44\x20" \
+"\x64\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x6f\x09\x4f\x6d\x69\x74" \
+"\x20\x6f\x6f\x62\x20\x64\x61\x74\x61\x0a\x09\x2d\x62\x09\x4f\x6d" \
+"\x69\x74\x20\x62\x61\x64\x20\x62\x6c\x6f\x63\x6b\x20\x66\x72\x6f" \
+"\x6d\x20\x74\x68\x65\x20\x64\x75\x6d\x70\x0a\x09\x2d\x73\x20\x41" \
+"\x44\x44\x52\x09\x53\x74\x61\x72\x74\x20\x61\x64\x64\x72\x65\x73" \
+"\x73\x0a\x09\x2d\x6c\x20\x4c\x45\x4e\x09\x4c\x65\x6e\x67\x74\x68" \
+"\x0a\x09\x2d\x66\x20\x46\x49\x4c\x45\x09\x44\x75\x6d\x70\x20\x74" \
+"\x6f\x20\x66\x69\x6c\x65\x20\x28\x27\x2d\x27\x20\x66\x6f\x72\x20" \
+"\x73\x74\x64\x6f\x75\x74\x29\x00\x5b\x2d\x70\x5d\x20\x5b\x2d\x73" \
+"\x20\x41\x44\x44\x52\x5d\x20\x4d\x54\x44\x5f\x44\x45\x56\x49\x43" \
+"\x45\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x57\x72\x69\x74\x65\x20" \
+"\x74\x6f\x20\x74\x68\x65\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64" \
+"\x20\x4d\x54\x44\x20\x64\x65\x76\x69\x63\x65\x0a\x0a\x09\x2d\x70" \
+"\x09\x50\x61\x64\x20\x74\x6f\x20\x70\x61\x67\x65\x20\x73\x69\x7a" \
+"\x65\x0a\x09\x2d\x73\x20\x41\x44\x44\x52\x09\x53\x74\x61\x72\x74" \
+"\x20\x61\x64\x64\x72\x65\x73\x73\x00\x5b\x2d\x6e\x20\x41\x44\x4a" \
+"\x55\x53\x54\x5d\x20\x5b\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x5d" \
+"\x0a\x0a\x43\x68\x61\x6e\x67\x65\x20\x73\x63\x68\x65\x64\x75\x6c" \
+"\x69\x6e\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x79\x2c\x20\x72\x75" \
+"\x6e\x20\x50\x52\x4f\x47\x0a\x0a\x09\x2d\x6e\x20\x41\x44\x4a\x55" \
+"\x53\x54\x09\x41\x64\x6a\x75\x73\x74\x20\x70\x72\x69\x6f\x72\x69" \
+"\x74\x79\x20\x62\x79\x20\x41\x44\x4a\x55\x53\x54\x00\x50\x52\x4f" \
"\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47" \
-"\x20\x69\x6e\x20\x61\x20\x6e\x65\x77\x20\x73\x65\x73\x73\x69\x6f" \
-"\x6e\x2e\x20\x50\x52\x4f\x47\x20\x77\x69\x6c\x6c\x20\x68\x61\x76" \
-"\x65\x20\x6e\x6f\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x6c\x69\x6e\x67" \
-"\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x0a\x61\x6e\x64\x20\x77\x69" \
-"\x6c\x6c\x20\x6e\x6f\x74\x20\x62\x65\x20\x61\x66\x66\x65\x63\x74" \
-"\x65\x64\x20\x62\x79\x20\x6b\x65\x79\x62\x6f\x61\x72\x64\x20\x73" \
-"\x69\x67\x6e\x61\x6c\x73\x20\x28\x43\x74\x72\x6c\x2d\x43\x20\x65" \
-"\x74\x63\x29\x2e\x0a\x53\x65\x65\x20\x73\x65\x74\x73\x69\x64\x28" \
-"\x32\x29\x20\x66\x6f\x72\x20\x64\x65\x74\x61\x69\x6c\x73\x2e\x00" \
-"\x5b\x2d\x2f\x2b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x2d\x2f" \
-"\x2b\x6f\x20\x4f\x50\x54\x5d\x2e\x2e\x2e\x20\x5b\x2d\x63\x20\x27" \
-"\x53\x43\x52\x49\x50\x54\x27\x20\x5b\x41\x52\x47\x30\x20\x5b\x41" \
-"\x52\x47\x53\x5d\x5d\x20\x2f\x20\x46\x49\x4c\x45\x20\x5b\x41\x52" \
-"\x47\x53\x5d\x5d\x0a\x0a\x55\x6e\x69\x78\x20\x73\x68\x65\x6c\x6c" \
-"\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x00\x5b\x2d\x63" \
-"\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20" \
-"\x53\x48\x41\x31\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73\x0a\x0a" \
-"\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73\x20\x61" \
-"\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e\x20\x46" \
-"\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74\x20\x6f" \
-"\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67\x2c\x20" \
-"\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68\x6f\x77" \
-"\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09\x57\x61" \
-"\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f\x70\x65" \
-"\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20\x63\x68" \
-"\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b\x2d\x63" \
-"\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63\x6b\x20" \
-"\x53\x48\x41\x32\x35\x36\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x73" \
-"\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75\x6d\x73" \
-"\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20\x69\x6e" \
-"\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e\x27\x74" \
-"\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74\x68\x69\x6e\x67" \
-"\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64\x65\x20\x73\x68" \
-"\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a\x09\x2d\x77\x09" \
-"\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70\x72\x6f" \
-"\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65\x64\x20" \
-"\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73\x00\x5b" \
-"\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68\x65\x63" \
-"\x6b\x20\x53\x48\x41\x35\x31\x32\x20\x63\x68\x65\x63\x6b\x73\x75" \
+"\x20\x69\x6d\x6d\x75\x6e\x65\x20\x74\x6f\x20\x68\x61\x6e\x67\x75" \
+"\x70\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x75\x74\x70\x75\x74\x20" \
+"\x74\x6f\x20\x61\x20\x6e\x6f\x6e\x2d\x74\x74\x79\x00\x5b\x2d\x61" \
+"\x42\x62\x63\x44\x64\x65\x46\x66\x48\x68\x49\x69\x4c\x6c\x4f\x6f" \
+"\x76\x58\x78\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x50\x72\x69" \
+"\x6e\x74\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69" \
+"\x6e\x29\x20\x75\x6e\x61\x6d\x62\x69\x67\x75\x6f\x75\x73\x6c\x79" \
+"\x2c\x20\x61\x73\x20\x6f\x63\x74\x61\x6c\x20\x62\x79\x74\x65\x73" \
+"\x20\x62\x79\x20\x64\x65\x66\x61\x75\x6c\x74\x00\x5b\x4f\x50\x54" \
+"\x49\x4f\x4e\x53\x5d\x20\x5b\x4f\x52\x49\x47\x46\x49\x4c\x45\x20" \
+"\x5b\x50\x41\x54\x43\x48\x46\x49\x4c\x45\x5d\x5d\x0a\x0a\x09\x2d" \
+"\x70\x2c\x2d\x2d\x73\x74\x72\x69\x70\x20\x4e\x09\x09\x53\x74\x72" \
+"\x69\x70\x20\x4e\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x63\x6f\x6d" \
+"\x70\x6f\x6e\x65\x6e\x74\x73\x20\x66\x72\x6f\x6d\x20\x66\x69\x6c" \
+"\x65\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x69\x2c\x2d\x2d\x69\x6e" \
+"\x70\x75\x74\x20\x44\x49\x46\x46\x09\x09\x52\x65\x61\x64\x20\x44" \
+"\x49\x46\x46\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73" \
+"\x74\x64\x69\x6e\x0a\x09\x2d\x52\x2c\x2d\x2d\x72\x65\x76\x65\x72" \
+"\x73\x65\x09\x09\x52\x65\x76\x65\x72\x73\x65\x20\x70\x61\x74\x63" \
+"\x68\x0a\x09\x2d\x4e\x2c\x2d\x2d\x66\x6f\x72\x77\x61\x72\x64\x09" \
+"\x09\x49\x67\x6e\x6f\x72\x65\x20\x61\x6c\x72\x65\x61\x64\x79\x20" \
+"\x61\x70\x70\x6c\x69\x65\x64\x20\x70\x61\x74\x63\x68\x65\x73\x0a" \
+"\x09\x2d\x45\x2c\x2d\x2d\x72\x65\x6d\x6f\x76\x65\x2d\x65\x6d\x70" \
+"\x74\x79\x2d\x66\x69\x6c\x65\x73\x09\x52\x65\x6d\x6f\x76\x65\x20" \
+"\x6f\x75\x74\x70\x75\x74\x20\x66\x69\x6c\x65\x73\x20\x69\x66\x20" \
+"\x74\x68\x65\x79\x20\x62\x65\x63\x6f\x6d\x65\x20\x65\x6d\x70\x74" \
+"\x79\x00\x5b\x2d\x66\x6c\x6e\x6f\x76\x78\x5d\x20\x5b\x2d\x73\x20" \
+"\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c\x50\x41\x54\x54" \
+"\x45\x52\x4e\x5d\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72" \
+"\x6f\x63\x65\x73\x73\x28\x65\x73\x29\x20\x73\x65\x6c\x65\x63\x74" \
+"\x65\x64\x20\x62\x79\x20\x72\x65\x67\x65\x78\x20\x50\x41\x54\x54" \
+"\x45\x52\x4e\x0a\x0a\x09\x2d\x6c\x09\x53\x68\x6f\x77\x20\x63\x6f" \
+"\x6d\x6d\x61\x6e\x64\x20\x6e\x61\x6d\x65\x20\x74\x6f\x6f\x0a\x09" \
+"\x2d\x66\x09\x4d\x61\x74\x63\x68\x20\x61\x67\x61\x69\x6e\x73\x74" \
+"\x20\x65\x6e\x74\x69\x72\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20" \
+"\x6c\x69\x6e\x65\x0a\x09\x2d\x6e\x09\x53\x68\x6f\x77\x20\x74\x68" \
+"\x65\x20\x6e\x65\x77\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73\x73" \
+"\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6f\x09\x53\x68\x6f\x77\x20\x74" \
+"\x68\x65\x20\x6f\x6c\x64\x65\x73\x74\x20\x70\x72\x6f\x63\x65\x73" \
+"\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x76\x09\x4e\x65\x67\x61\x74" \
+"\x65\x20\x74\x68\x65\x20\x6d\x61\x74\x63\x68\x0a\x09\x2d\x78\x09" \
+"\x4d\x61\x74\x63\x68\x20\x77\x68\x6f\x6c\x65\x20\x6e\x61\x6d\x65" \
+"\x20\x28\x6e\x6f\x74\x20\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x29" \
+"\x0a\x09\x2d\x73\x09\x4d\x61\x74\x63\x68\x20\x73\x65\x73\x73\x69" \
+"\x6f\x6e\x20\x49\x44\x20\x28\x30\x20\x66\x6f\x72\x20\x63\x75\x72" \
+"\x72\x65\x6e\x74\x29\x0a\x09\x2d\x50\x09\x4d\x61\x74\x63\x68\x20" \
+"\x70\x61\x72\x65\x6e\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x49" \
+"\x44\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x4e\x41\x4d" \
+"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x69\x73\x74\x20\x50\x49\x44\x73" \
+"\x20\x6f\x66\x20\x61\x6c\x6c\x20\x70\x72\x6f\x63\x65\x73\x73\x65" \
+"\x73\x20\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73\x20\x74\x68\x61" \
+"\x74\x20\x6d\x61\x74\x63\x68\x20\x4e\x41\x4d\x45\x73\x0a\x0a\x09" \
+"\x2d\x73\x09\x53\x68\x6f\x77\x20\x6f\x6e\x6c\x79\x20\x6f\x6e\x65" \
+"\x20\x50\x49\x44\x0a\x09\x2d\x6f\x20\x50\x49\x44\x09\x4f\x6d\x69" \
+"\x74\x20\x67\x69\x76\x65\x6e\x20\x70\x69\x64\x0a\x09\x09\x55\x73" \
+"\x65\x20\x25\x50\x50\x49\x44\x20\x74\x6f\x20\x6f\x6d\x69\x74\x20" \
+"\x70\x69\x64\x20\x6f\x66\x20\x70\x69\x64\x6f\x66\x27\x73\x20\x70" \
+"\x61\x72\x65\x6e\x74\x00\x5b\x2d\x6c\x7c\x2d\x53\x49\x47\x4e\x41" \
+"\x4c\x5d\x20\x5b\x2d\x66\x6e\x6f\x76\x78\x5d\x20\x5b\x2d\x73\x20" \
+"\x53\x49\x44\x7c\x2d\x50\x20\x50\x50\x49\x44\x7c\x50\x41\x54\x54" \
+"\x45\x52\x4e\x5d\x0a\x0a\x53\x65\x6e\x64\x20\x61\x20\x73\x69\x67" \
+"\x6e\x61\x6c\x20\x74\x6f\x20\x70\x72\x6f\x63\x65\x73\x73\x28\x65" \
+"\x73\x29\x20\x73\x65\x6c\x65\x63\x74\x65\x64\x20\x62\x79\x20\x72" \
+"\x65\x67\x65\x78\x20\x50\x41\x54\x54\x45\x52\x4e\x0a\x0a\x09\x2d" \
+"\x6c\x09\x4c\x69\x73\x74\x20\x61\x6c\x6c\x20\x73\x69\x67\x6e\x61" \
+"\x6c\x73\x0a\x09\x2d\x66\x09\x4d\x61\x74\x63\x68\x20\x61\x67\x61" \
+"\x69\x6e\x73\x74\x20\x65\x6e\x74\x69\x72\x65\x20\x63\x6f\x6d\x6d" \
+"\x61\x6e\x64\x20\x6c\x69\x6e\x65\x0a\x09\x2d\x6e\x09\x53\x69\x67" \
+"\x6e\x61\x6c\x20\x74\x68\x65\x20\x6e\x65\x77\x65\x73\x74\x20\x70" \
+"\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09\x2d\x6f\x09" \
+"\x53\x69\x67\x6e\x61\x6c\x20\x74\x68\x65\x20\x6f\x6c\x64\x65\x73" \
+"\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x6f\x6e\x6c\x79\x0a\x09" \
+"\x2d\x76\x09\x4e\x65\x67\x61\x74\x65\x20\x74\x68\x65\x20\x6d\x61" \
+"\x74\x63\x68\x0a\x09\x2d\x78\x09\x4d\x61\x74\x63\x68\x20\x77\x68" \
+"\x6f\x6c\x65\x20\x6e\x61\x6d\x65\x20\x28\x6e\x6f\x74\x20\x73\x75" \
+"\x62\x73\x74\x72\x69\x6e\x67\x29\x0a\x09\x2d\x73\x09\x4d\x61\x74" \
+"\x63\x68\x20\x73\x65\x73\x73\x69\x6f\x6e\x20\x49\x44\x20\x28\x30" \
+"\x20\x66\x6f\x72\x20\x63\x75\x72\x72\x65\x6e\x74\x29\x0a\x09\x2d" \
+"\x50\x09\x4d\x61\x74\x63\x68\x20\x70\x61\x72\x65\x6e\x74\x20\x70" \
+"\x72\x6f\x63\x65\x73\x73\x20\x49\x44\x00\x5b\x56\x41\x52\x49\x41" \
+"\x42\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x65" \
+"\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x20\x56\x41\x52\x49\x41" \
+"\x42\x4c\x45\x73\x2e\x0a\x49\x66\x20\x6e\x6f\x20\x56\x41\x52\x49" \
+"\x41\x42\x4c\x45\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x2c\x20" \
+"\x70\x72\x69\x6e\x74\x20\x61\x6c\x6c\x2e\x00\x46\x4f\x52\x4d\x41" \
+"\x54\x20\x5b\x41\x52\x47\x5d\x2e\x2e\x2e\x0a\x0a\x46\x6f\x72\x6d" \
+"\x61\x74\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20\x41\x52\x47" \
+"\x28\x73\x29\x20\x61\x63\x63\x6f\x72\x64\x69\x6e\x67\x20\x74\x6f" \
+"\x20\x46\x4f\x52\x4d\x41\x54\x20\x28\x61\x2d\x6c\x61\x20\x43\x20" \
+"\x70\x72\x69\x6e\x74\x66\x29\x00\x0a\x0a\x53\x68\x6f\x77\x20\x6c" \
+"\x69\x73\x74\x20\x6f\x66\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73" \
+"\x0a\x0a\x09\x77\x09\x57\x69\x64\x65\x20\x6f\x75\x74\x70\x75\x74" \
+"\x0a\x09\x6c\x09\x4c\x6f\x6e\x67\x20\x6f\x75\x74\x70\x75\x74\x0a" \
+"\x09\x54\x09\x53\x68\x6f\x77\x20\x74\x68\x72\x65\x61\x64\x73\x00" \
+"\x5b\x2d\x70\x5d\x20\x5b\x50\x49\x44\x7c\x55\x53\x45\x52\x5d\x0a" \
+"\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x6f\x63\x65\x73\x73" \
+"\x20\x74\x72\x65\x65\x2c\x20\x6f\x70\x74\x69\x6f\x6e\x61\x6c\x6c" \
+"\x79\x20\x73\x74\x61\x72\x74\x20\x66\x72\x6f\x6d\x20\x55\x53\x45" \
+"\x52\x20\x6f\x72\x20\x50\x49\x44\x0a\x0a\x09\x2d\x70\x09\x53\x68" \
+"\x6f\x77\x20\x70\x69\x64\x73\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20" \
+"\x74\x68\x65\x20\x66\x75\x6c\x6c\x20\x66\x69\x6c\x65\x6e\x61\x6d" \
+"\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74" \
+"\x20\x77\x6f\x72\x6b\x69\x6e\x67\x20\x64\x69\x72\x65\x63\x74\x6f" \
+"\x72\x79\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x64" \
+"\x65\x76\x69\x63\x65\x20\x6e\x6f\x64\x65\x20\x61\x73\x73\x6f\x63" \
+"\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66" \
+"\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x6d\x6f\x75\x6e\x74\x65" \
+"\x64\x20\x61\x74\x20\x27\x2f\x27\x00\x5b\x2d\x66\x6e\x76\x5d\x20" \
+"\x46\x49\x4c\x45\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68" \
+"\x65\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x61\x20\x73\x79\x6d" \
+"\x6c\x69\x6e\x6b\x0a\x0a\x09\x2d\x66\x09\x43\x61\x6e\x6f\x6e\x69" \
+"\x63\x61\x6c\x69\x7a\x65\x20\x62\x79\x20\x66\x6f\x6c\x6c\x6f\x77" \
+"\x69\x6e\x67\x20\x61\x6c\x6c\x20\x73\x79\x6d\x6c\x69\x6e\x6b\x73" \
+"\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x61\x64\x64\x20\x6e" \
+"\x65\x77\x6c\x69\x6e\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f" \
+"\x73\x65\x00\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x52\x65\x74\x75" \
+"\x72\x6e\x20\x74\x68\x65\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x20" \
+"\x70\x61\x74\x68\x6e\x61\x6d\x65\x73\x20\x6f\x66\x20\x67\x69\x76" \
+"\x65\x6e\x20\x46\x49\x4c\x45\x00\x7b\x7b\x2d\x6e\x20\x49\x4e\x43" \
+"\x52\x45\x4d\x45\x4e\x54\x7d\x20\x7c\x20\x50\x52\x49\x4f\x52\x49" \
+"\x54\x59\x7d\x20\x5b\x5b\x2d\x70\x20\x7c\x20\x2d\x67\x20\x7c\x20" \
+"\x2d\x75\x5d\x20\x49\x44\x2e\x2e\x2e\x5d\x0a\x0a\x43\x68\x61\x6e" \
+"\x67\x65\x20\x73\x63\x68\x65\x64\x75\x6c\x69\x6e\x67\x20\x70\x72" \
+"\x69\x6f\x72\x69\x74\x79\x20\x66\x6f\x72\x20\x61\x20\x72\x75\x6e" \
+"\x6e\x69\x6e\x67\x20\x70\x72\x6f\x63\x65\x73\x73\x0a\x0a\x09\x2d" \
+"\x6e\x09\x41\x64\x6a\x75\x73\x74\x20\x63\x75\x72\x72\x65\x6e\x74" \
+"\x20\x6e\x69\x63\x65\x20\x76\x61\x6c\x75\x65\x20\x28\x73\x6d\x61" \
+"\x6c\x6c\x65\x72\x20\x69\x73\x20\x66\x61\x73\x74\x65\x72\x29\x0a" \
+"\x09\x2d\x70\x09\x50\x72\x6f\x63\x65\x73\x73\x20\x69\x64\x28\x73" \
+"\x29\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x67\x09" \
+"\x50\x72\x6f\x63\x65\x73\x73\x20\x67\x72\x6f\x75\x70\x20\x69\x64" \
+"\x28\x73\x29\x0a\x09\x2d\x75\x09\x50\x72\x6f\x63\x65\x73\x73\x20" \
+"\x75\x73\x65\x72\x20\x6e\x61\x6d\x65\x28\x73\x29\x20\x61\x6e\x64" \
+"\x2f\x6f\x72\x20\x69\x64\x28\x73\x29\x00\x0a\x0a\x52\x65\x73\x65" \
+"\x74\x20\x74\x68\x65\x20\x73\x63\x72\x65\x65\x6e\x00\x0a\x0a\x52" \
+"\x65\x73\x69\x7a\x65\x20\x74\x68\x65\x20\x73\x63\x72\x65\x65\x6e" \
+"\x00\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x52\x65\x76\x65" \
+"\x72\x73\x65\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x46\x49\x4c" \
+"\x45\x00\x5b\x2d\x69\x72\x66\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e" \
+"\x0a\x0a\x52\x65\x6d\x6f\x76\x65\x20\x28\x75\x6e\x6c\x69\x6e\x6b" \
+"\x29\x20\x46\x49\x4c\x45\x73\x0a\x0a\x09\x2d\x69\x09\x41\x6c\x77" \
+"\x61\x79\x73\x20\x70\x72\x6f\x6d\x70\x74\x20\x62\x65\x66\x6f\x72" \
+"\x65\x20\x72\x65\x6d\x6f\x76\x69\x6e\x67\x0a\x09\x2d\x66\x09\x4e" \
+"\x65\x76\x65\x72\x20\x70\x72\x6f\x6d\x70\x74\x0a\x09\x2d\x52\x2c" \
+"\x2d\x72\x09\x52\x65\x63\x75\x72\x73\x65\x00\x5b\x4f\x50\x54\x49" \
+"\x4f\x4e\x53\x5d\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x2e\x2e" \
+"\x2e\x0a\x0a\x52\x65\x6d\x6f\x76\x65\x20\x44\x49\x52\x45\x43\x54" \
+"\x4f\x52\x59\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x65\x6d\x70" \
+"\x74\x79\x0a\x0a\x09\x2d\x70\x7c\x2d\x2d\x70\x61\x72\x65\x6e\x74" \
+"\x73\x09\x49\x6e\x63\x6c\x75\x64\x65\x20\x70\x61\x72\x65\x6e\x74" \
+"\x73\x0a\x09\x2d\x2d\x69\x67\x6e\x6f\x72\x65\x2d\x66\x61\x69\x6c" \
+"\x2d\x6f\x6e\x2d\x6e\x6f\x6e\x2d\x65\x6d\x70\x74\x79\x00\x5b\x2d" \
+"\x71\x66\x77\x72\x73\x76\x5d\x20\x4d\x4f\x44\x55\x4c\x45\x20\x5b" \
+"\x73\x79\x6d\x62\x6f\x6c\x3d\x76\x61\x6c\x75\x65\x5d\x2e\x2e\x2e" \
+"\x0a\x0a\x09\x2d\x72\x09\x52\x65\x6d\x6f\x76\x65\x20\x4d\x4f\x44" \
+"\x55\x4c\x45\x20\x28\x73\x74\x61\x63\x6b\x73\x29\x20\x6f\x72\x20" \
+"\x64\x6f\x20\x61\x75\x74\x6f\x63\x6c\x65\x61\x6e\x0a\x09\x2d\x71" \
+"\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f" \
+"\x73\x65\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d\x77" \
+"\x09\x57\x61\x69\x74\x20\x66\x6f\x72\x20\x75\x6e\x6c\x6f\x61\x64" \
+"\x0a\x09\x2d\x73\x09\x52\x65\x70\x6f\x72\x74\x20\x76\x69\x61\x20" \
+"\x73\x79\x73\x6c\x6f\x67\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f" \
+"\x66\x20\x73\x74\x64\x65\x72\x72\x00\x5b\x2d\x74\x5d\x20\x5b\x2d" \
+"\x6c\x5d\x20\x5b\x2d\x61\x20\x41\x52\x47\x5d\x20\x5b\x2d\x75\x20" \
+"\x4d\x41\x53\x4b\x5d\x20\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a" \
+"\x0a\x52\x75\x6e\x20\x61\x20\x62\x75\x6e\x63\x68\x20\x6f\x66\x20" \
+"\x73\x63\x72\x69\x70\x74\x73\x20\x69\x6e\x20\x44\x49\x52\x45\x43" \
+"\x54\x4f\x52\x59\x0a\x0a\x09\x2d\x74\x09\x50\x72\x69\x6e\x74\x20" \
+"\x77\x68\x61\x74\x20\x77\x6f\x75\x6c\x64\x20\x62\x65\x20\x72\x75" \
+"\x6e\x2c\x20\x62\x75\x74\x20\x64\x6f\x6e\x27\x74\x20\x61\x63\x74" \
+"\x75\x61\x6c\x6c\x79\x20\x72\x75\x6e\x20\x61\x6e\x79\x74\x68\x69" \
+"\x6e\x67\x0a\x09\x2d\x61\x20\x41\x52\x47\x09\x50\x61\x73\x73\x20" \
+"\x41\x52\x47\x20\x61\x73\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20" \
+"\x66\x6f\x72\x20\x65\x76\x65\x72\x79\x20\x70\x72\x6f\x67\x72\x61" \
+"\x6d\x0a\x09\x2d\x75\x20\x4d\x41\x53\x4b\x09\x53\x65\x74\x20\x74" \
+"\x68\x65\x20\x75\x6d\x61\x73\x6b\x20\x74\x6f\x20\x4d\x41\x53\x4b" \
+"\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20" \
+"\x65\x76\x65\x72\x79\x20\x70\x72\x6f\x67\x72\x61\x6d\x0a\x09\x2d" \
+"\x6c\x09\x50\x72\x69\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20\x6f\x66" \
+"\x20\x61\x6c\x6c\x20\x6d\x61\x74\x63\x68\x69\x6e\x67\x20\x66\x69" \
+"\x6c\x65\x73\x20\x65\x76\x65\x6e\x20\x69\x66\x20\x74\x68\x65\x79" \
+"\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x65\x78\x65\x63\x75\x74\x61" \
+"\x62\x6c\x65\x00\x5b\x2d\x69\x6e\x72\x5d\x20\x5b\x2d\x66\x20\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x20\x5b\x2d\x65\x20\x43\x4d\x44\x5d" \
+"\x2e\x2e\x2e\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x6f\x72" \
+"\x3a\x20\x73\x65\x64\x20\x5b\x2d\x69\x6e\x72\x5d\x20\x43\x4d\x44" \
+"\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x65\x20" \
+"\x43\x4d\x44\x09\x41\x64\x64\x20\x43\x4d\x44\x20\x74\x6f\x20\x73" \
+"\x65\x64\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x73\x20\x74\x6f\x20\x62" \
+"\x65\x20\x65\x78\x65\x63\x75\x74\x65\x64\x0a\x09\x2d\x66\x20\x46" \
+"\x49\x4c\x45\x09\x41\x64\x64\x20\x46\x49\x4c\x45\x20\x63\x6f\x6e" \
+"\x74\x65\x6e\x74\x73\x20\x74\x6f\x20\x73\x65\x64\x20\x63\x6f\x6d" \
+"\x6d\x61\x6e\x64\x73\x20\x74\x6f\x20\x62\x65\x20\x65\x78\x65\x63" \
+"\x75\x74\x65\x64\x0a\x09\x2d\x69\x09\x45\x64\x69\x74\x20\x66\x69" \
+"\x6c\x65\x73\x20\x69\x6e\x2d\x70\x6c\x61\x63\x65\x20\x28\x65\x6c" \
+"\x73\x65\x20\x73\x65\x6e\x64\x73\x20\x72\x65\x73\x75\x6c\x74\x20" \
+"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x29\x0a\x09\x2d\x6e\x09\x53" \
+"\x75\x70\x70\x72\x65\x73\x73\x20\x61\x75\x74\x6f\x6d\x61\x74\x69" \
+"\x63\x20\x70\x72\x69\x6e\x74\x69\x6e\x67\x20\x6f\x66\x20\x70\x61" \
+"\x74\x74\x65\x72\x6e\x20\x73\x70\x61\x63\x65\x0a\x09\x2d\x72\x09" \
+"\x55\x73\x65\x20\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x72\x65\x67" \
+"\x65\x78\x20\x73\x79\x6e\x74\x61\x78\x0a\x0a\x49\x66\x20\x6e\x6f" \
+"\x20\x2d\x65\x20\x6f\x72\x20\x2d\x66\x2c\x20\x74\x68\x65\x20\x66" \
+"\x69\x72\x73\x74\x20\x6e\x6f\x6e\x2d\x6f\x70\x74\x69\x6f\x6e\x20" \
+"\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x69\x73\x20\x74\x68\x65\x20" \
+"\x73\x65\x64\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x73\x74\x72\x69" \
+"\x6e\x67\x2e\x0a\x52\x65\x6d\x61\x69\x6e\x69\x6e\x67\x20\x61\x72" \
+"\x67\x75\x6d\x65\x6e\x74\x73\x20\x61\x72\x65\x20\x69\x6e\x70\x75" \
+"\x74\x20\x66\x69\x6c\x65\x73\x20\x28\x73\x74\x64\x69\x6e\x20\x69" \
+"\x66\x20\x6e\x6f\x6e\x65\x29\x2e\x00\x5b\x2d\x77\x5d\x20\x5b\x2d" \
+"\x73\x20\x53\x45\x50\x5d\x20\x5b\x46\x49\x52\x53\x54\x20\x5b\x49" \
+"\x4e\x43\x5d\x5d\x20\x4c\x41\x53\x54\x0a\x0a\x50\x72\x69\x6e\x74" \
+"\x20\x6e\x75\x6d\x62\x65\x72\x73\x20\x66\x72\x6f\x6d\x20\x46\x49" \
+"\x52\x53\x54\x20\x74\x6f\x20\x4c\x41\x53\x54\x2c\x20\x69\x6e\x20" \
+"\x73\x74\x65\x70\x73\x20\x6f\x66\x20\x49\x4e\x43\x2e\x0a\x46\x49" \
+"\x52\x53\x54\x2c\x20\x49\x4e\x43\x20\x64\x65\x66\x61\x75\x6c\x74" \
+"\x20\x74\x6f\x20\x31\x2e\x0a\x0a\x09\x2d\x77\x09\x50\x61\x64\x20" \
+"\x74\x6f\x20\x6c\x61\x73\x74\x20\x77\x69\x74\x68\x20\x6c\x65\x61" \
+"\x64\x69\x6e\x67\x20\x7a\x65\x72\x6f\x73\x0a\x09\x2d\x73\x20\x53" \
+"\x45\x50\x09\x53\x74\x72\x69\x6e\x67\x20\x73\x65\x70\x61\x72\x61" \
+"\x74\x6f\x72\x00\x5b\x2d\x72\x5d\x20\x5b\x44\x45\x56\x49\x43\x45" \
+"\x5d\x0a\x0a\x52\x65\x64\x69\x72\x65\x63\x74\x20\x73\x79\x73\x74" \
+"\x65\x6d\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x20\x6f\x75\x74\x70\x75" \
+"\x74\x20\x74\x6f\x20\x44\x45\x56\x49\x43\x45\x20\x28\x64\x65\x66" \
+"\x61\x75\x6c\x74\x3a\x20\x2f\x64\x65\x76\x2f\x74\x74\x79\x29\x0a" \
+"\x0a\x09\x2d\x72\x09\x52\x65\x73\x65\x74\x20\x6f\x75\x74\x70\x75" \
+"\x74\x20\x74\x6f\x20\x2f\x64\x65\x76\x2f\x63\x6f\x6e\x73\x6f\x6c" \
+"\x65\x00\x5b\x2d\x67\x61\x62\x47\x76\x7a\x56\x5d\x20\x44\x45\x56" \
+"\x49\x43\x45\x20\x5b\x50\x41\x52\x41\x4d\x45\x54\x45\x52\x20\x5b" \
+"\x41\x52\x47\x5d\x5d\x2e\x2e\x2e\x0a\x0a\x52\x65\x71\x75\x65\x73" \
+"\x74\x20\x6f\x72\x20\x73\x65\x74\x20\x4c\x69\x6e\x75\x78\x20\x73" \
+"\x65\x72\x69\x61\x6c\x20\x70\x6f\x72\x74\x20\x69\x6e\x66\x6f\x72" \
+"\x6d\x61\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x67\x09\x49\x6e\x74\x65" \
+"\x72\x70\x72\x65\x74\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73" \
+"\x20\x61\x73\x20\x6c\x69\x73\x74\x20\x6f\x66\x20\x64\x65\x76\x69" \
+"\x63\x65\x73\x20\x66\x6f\x72\x20\x72\x65\x70\x6f\x72\x74\x69\x6e" \
+"\x67\x0a\x09\x2d\x61\x09\x50\x72\x69\x6e\x74\x20\x61\x6c\x6c\x20" \
+"\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x20\x69\x6e\x66\x6f\x72\x6d" \
+"\x61\x74\x69\x6f\x6e\x0a\x09\x2d\x62\x09\x50\x72\x69\x6e\x74\x20" \
+"\x73\x75\x6d\x6d\x61\x72\x79\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74" \
+"\x69\x6f\x6e\x0a\x09\x2d\x47\x09\x50\x72\x69\x6e\x74\x20\x69\x6e" \
+"\x20\x66\x6f\x72\x6d\x20\x77\x68\x69\x63\x68\x20\x63\x61\x6e\x20" \
+"\x62\x65\x20\x66\x65\x64\x20\x62\x61\x63\x6b\x0a\x09\x09\x74\x6f" \
+"\x20\x73\x65\x74\x73\x65\x72\x69\x61\x6c\x20\x61\x73\x20\x63\x6f" \
+"\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x70\x61\x72\x61\x6d" \
+"\x65\x74\x65\x72\x73\x0a\x09\x2d\x7a\x09\x5a\x65\x72\x6f\x20\x6f" \
+"\x75\x74\x20\x73\x65\x72\x69\x61\x6c\x20\x66\x6c\x61\x67\x73\x20" \
+"\x62\x65\x66\x6f\x72\x65\x20\x73\x65\x74\x74\x69\x6e\x67\x0a\x09" \
+"\x2d\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x0a\x50\x61\x72\x61" \
+"\x6d\x65\x74\x65\x72\x73\x3a\x20\x28\x2a\x20\x3d\x20\x74\x61\x6b" \
+"\x65\x73\x20\x61\x6e\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x2c\x20" \
+"\x5e\x20\x3d\x20\x63\x61\x6e\x20\x62\x65\x20\x74\x75\x72\x6e\x65" \
+"\x64\x20\x6f\x66\x66\x20\x62\x79\x20\x70\x72\x65\x63\x65\x64\x69" \
+"\x6e\x67\x20\x5e\x29\x0a\x09\x2a\x70\x6f\x72\x74\x2c\x20\x2a\x69" \
+"\x72\x71\x2c\x20\x2a\x64\x69\x76\x69\x73\x6f\x72\x2c\x20\x2a\x75" \
+"\x61\x72\x74\x2c\x20\x2a\x62\x61\x75\x6e\x64\x5f\x62\x61\x73\x65" \
+"\x2c\x20\x2a\x63\x6c\x6f\x73\x65\x5f\x64\x65\x6c\x61\x79\x2c\x20" \
+"\x2a\x63\x6c\x6f\x73\x69\x6e\x67\x5f\x77\x61\x69\x74\x2c\x0a\x09" \
+"\x5e\x66\x6f\x75\x72\x70\x6f\x72\x74\x2c\x20\x5e\x61\x75\x74\x6f" \
+"\x5f\x69\x72\x71\x2c\x20\x5e\x73\x6b\x69\x70\x5f\x74\x65\x73\x74" \
+"\x2c\x20\x5e\x73\x61\x6b\x2c\x20\x5e\x73\x65\x73\x73\x69\x6f\x6e" \
+"\x5f\x6c\x6f\x63\x6b\x6f\x75\x74\x2c\x20\x5e\x70\x67\x72\x70\x5f" \
+"\x6c\x6f\x63\x6b\x6f\x75\x74\x2c\x0a\x09\x5e\x63\x61\x6c\x6c\x6f" \
+"\x75\x74\x5f\x6e\x6f\x68\x75\x70\x2c\x20\x5e\x73\x70\x6c\x69\x74" \
+"\x5f\x74\x65\x72\x6d\x69\x6f\x73\x2c\x20\x5e\x68\x75\x70\x5f\x6e" \
+"\x6f\x74\x69\x66\x79\x2c\x20\x5e\x6c\x6f\x77\x5f\x6c\x61\x74\x65" \
+"\x6e\x63\x79\x2c\x20\x61\x75\x74\x6f\x63\x6f\x6e\x66\x69\x67\x2c" \
+"\x0a\x09\x73\x70\x64\x5f\x6e\x6f\x72\x6d\x61\x6c\x2c\x20\x73\x70" \
+"\x64\x5f\x68\x69\x2c\x20\x73\x70\x64\x5f\x76\x68\x69\x2c\x20\x73" \
+"\x70\x64\x5f\x73\x68\x69\x2c\x20\x73\x70\x64\x5f\x77\x61\x72\x70" \
+"\x2c\x20\x73\x70\x64\x5f\x63\x75\x73\x74\x0a\x0a\x55\x41\x52\x54" \
+"\x20\x74\x79\x70\x65\x73\x3a\x0a\x09\x75\x6e\x6b\x6e\x6f\x77\x6e" \
+"\x2c\x20\x38\x32\x35\x30\x2c\x20\x31\x36\x34\x35\x30\x2c\x20\x31" \
+"\x36\x35\x35\x30\x2c\x20\x31\x36\x35\x35\x30\x41\x2c\x20\x43\x69" \
+"\x72\x72\x75\x73\x2c\x20\x31\x36\x36\x35\x30\x2c\x20\x31\x36\x36" \
+"\x35\x30\x56\x32\x2c\x20\x31\x36\x37\x35\x30\x2c\x0a\x09\x31\x36" \
+"\x39\x35\x30\x2c\x20\x31\x36\x39\x35\x34\x2c\x20\x31\x36\x36\x35" \
+"\x34\x2c\x20\x31\x36\x38\x35\x30\x2c\x20\x52\x53\x41\x2c\x20\x4e" \
+"\x53\x31\x36\x35\x35\x30\x41\x2c\x20\x58\x53\x43\x41\x4c\x45\x2c" \
+"\x20\x52\x4d\x39\x30\x30\x30\x2c\x20\x4f\x43\x54\x45\x4f\x4e\x2c" \
+"\x20\x41\x52\x37\x2c\x0a\x09\x55\x36\x5f\x31\x36\x35\x35\x30\x41" \
+"\x00\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20" \
+"\x50\x52\x4f\x47\x20\x69\x6e\x20\x61\x20\x6e\x65\x77\x20\x73\x65" \
+"\x73\x73\x69\x6f\x6e\x2e\x20\x50\x52\x4f\x47\x20\x77\x69\x6c\x6c" \
+"\x20\x68\x61\x76\x65\x20\x6e\x6f\x20\x63\x6f\x6e\x74\x72\x6f\x6c" \
+"\x6c\x69\x6e\x67\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x0a\x61\x6e" \
+"\x64\x20\x77\x69\x6c\x6c\x20\x6e\x6f\x74\x20\x62\x65\x20\x61\x66" \
+"\x66\x65\x63\x74\x65\x64\x20\x62\x79\x20\x6b\x65\x79\x62\x6f\x61" \
+"\x72\x64\x20\x73\x69\x67\x6e\x61\x6c\x73\x20\x28\x43\x74\x72\x6c" \
+"\x2d\x43\x20\x65\x74\x63\x29\x2e\x0a\x53\x65\x65\x20\x73\x65\x74" \
+"\x73\x69\x64\x28\x32\x29\x20\x66\x6f\x72\x20\x64\x65\x74\x61\x69" \
+"\x6c\x73\x2e\x00\x5b\x2d\x2f\x2b\x4f\x50\x54\x49\x4f\x4e\x53\x5d" \
+"\x20\x5b\x2d\x2f\x2b\x6f\x20\x4f\x50\x54\x5d\x2e\x2e\x2e\x20\x5b" \
+"\x2d\x63\x20\x27\x53\x43\x52\x49\x50\x54\x27\x20\x5b\x41\x52\x47" \
+"\x30\x20\x5b\x41\x52\x47\x53\x5d\x5d\x20\x2f\x20\x46\x49\x4c\x45" \
+"\x20\x5b\x41\x52\x47\x53\x5d\x5d\x0a\x0a\x55\x6e\x69\x78\x20\x73" \
+"\x68\x65\x6c\x6c\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72" \
+"\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
+"\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68" \
+"\x65\x63\x6b\x20\x53\x48\x41\x31\x20\x63\x68\x65\x63\x6b\x73\x75" \
"\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20\x73\x75" \
"\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73\x74\x20" \
"\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44\x6f\x6e" \
@@ -1754,1183 +1751,1221 @@
"\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69\x6d\x70" \
"\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74\x74\x65" \
"\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e\x65\x73" \
-"\x00\x5b\x4e\x5d\x2e\x2e\x2e\x0a\x0a\x50\x61\x75\x73\x65\x20\x66" \
-"\x6f\x72\x20\x61\x20\x74\x69\x6d\x65\x20\x65\x71\x75\x61\x6c\x20" \
-"\x74\x6f\x20\x74\x68\x65\x20\x74\x6f\x74\x61\x6c\x20\x6f\x66\x20" \
-"\x74\x68\x65\x20\x61\x72\x67\x73\x20\x67\x69\x76\x65\x6e\x2c\x20" \
-"\x77\x68\x65\x72\x65\x20\x65\x61\x63\x68\x20\x61\x72\x67\x20\x63" \
-"\x61\x6e\x0a\x68\x61\x76\x65\x20\x61\x6e\x20\x6f\x70\x74\x69\x6f" \
-"\x6e\x61\x6c\x20\x73\x75\x66\x66\x69\x78\x20\x6f\x66\x20\x28\x73" \
-"\x29\x65\x63\x6f\x6e\x64\x73\x2c\x20\x28\x6d\x29\x69\x6e\x75\x74" \
-"\x65\x73\x2c\x20\x28\x68\x29\x6f\x75\x72\x73\x2c\x20\x6f\x72\x20" \
-"\x28\x64\x29\x61\x79\x73\x00\x5b\x2d\x6e\x72\x75\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x6f\x72\x74\x20\x6c\x69" \
-"\x6e\x65\x73\x20\x6f\x66\x20\x74\x65\x78\x74\x0a\x0a\x09\x2d\x6e" \
-"\x09\x53\x6f\x72\x74\x20\x6e\x75\x6d\x62\x65\x72\x73\x0a\x09\x2d" \
-"\x72\x09\x52\x65\x76\x65\x72\x73\x65\x20\x73\x6f\x72\x74\x20\x6f" \
-"\x72\x64\x65\x72\x0a\x09\x2d\x75\x09\x53\x75\x70\x70\x72\x65\x73" \
-"\x73\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6c\x69\x6e\x65" \
-"\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x49\x4e\x50" \
-"\x55\x54\x20\x5b\x50\x52\x45\x46\x49\x58\x5d\x5d\x0a\x0a\x09\x2d" \
-"\x62\x20\x4e\x5b\x6b\x7c\x6d\x5d\x09\x53\x70\x6c\x69\x74\x20\x62" \
-"\x79\x20\x4e\x20\x28\x6b\x69\x6c\x6f\x7c\x6d\x65\x67\x61\x29\x62" \
-"\x79\x74\x65\x73\x0a\x09\x2d\x6c\x20\x4e\x09\x09\x53\x70\x6c\x69" \
-"\x74\x20\x62\x79\x20\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x61" \
-"\x20\x4e\x09\x09\x55\x73\x65\x20\x4e\x20\x6c\x65\x74\x74\x65\x72" \
-"\x73\x20\x61\x73\x20\x73\x75\x66\x66\x69\x78\x00\x5b\x4f\x50\x54" \
-"\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a\x0a\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x66\x69\x6c\x65\x20\x28\x64\x65\x66" \
-"\x61\x75\x6c\x74\x29\x20\x6f\x72\x20\x66\x69\x6c\x65\x73\x79\x73" \
-"\x74\x65\x6d\x20\x73\x74\x61\x74\x75\x73\x0a\x0a\x09\x2d\x66\x09" \
-"\x44\x69\x73\x70\x6c\x61\x79\x20\x66\x69\x6c\x65\x73\x79\x73\x74" \
-"\x65\x6d\x20\x73\x74\x61\x74\x75\x73\x0a\x09\x2d\x4c\x09\x46\x6f" \
-"\x6c\x6c\x6f\x77\x20\x6c\x69\x6e\x6b\x73\x0a\x09\x2d\x74\x09\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x69\x6e\x66\x6f\x20\x69\x6e\x20\x74" \
-"\x65\x72\x73\x65\x20\x66\x6f\x72\x6d\x00\x5b\x2d\x61\x66\x6f\x5d" \
-"\x20\x5b\x2d\x6e\x20\x4c\x45\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
-"\x2e\x2e\x2e\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x70\x72\x69" \
-"\x6e\x74\x61\x62\x6c\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20\x69" \
-"\x6e\x20\x61\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x69\x6c\x65\x0a" \
-"\x0a\x09\x2d\x61\x09\x53\x63\x61\x6e\x20\x77\x68\x6f\x6c\x65\x20" \
-"\x66\x69\x6c\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09" \
-"\x2d\x66\x09\x50\x72\x65\x63\x65\x64\x65\x20\x73\x74\x72\x69\x6e" \
-"\x67\x73\x20\x77\x69\x74\x68\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65" \
-"\x73\x0a\x09\x2d\x6e\x20\x4c\x45\x4e\x09\x41\x74\x20\x6c\x65\x61" \
-"\x73\x74\x20\x4c\x45\x4e\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72" \
-"\x73\x20\x66\x6f\x72\x6d\x20\x61\x20\x73\x74\x72\x69\x6e\x67\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x34\x29\x0a\x09\x2d\x6f\x09" \
-"\x50\x72\x65\x63\x65\x64\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20" \
-"\x77\x69\x74\x68\x20\x64\x65\x63\x69\x6d\x61\x6c\x20\x6f\x66\x66" \
-"\x73\x65\x74\x73\x00\x5b\x2d\x61\x7c\x67\x5d\x20\x5b\x2d\x46\x20" \
-"\x44\x45\x56\x49\x43\x45\x5d\x20\x5b\x53\x45\x54\x54\x49\x4e\x47" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x57\x69\x74\x68\x6f\x75\x74\x20\x61\x72" \
-"\x67\x75\x6d\x65\x6e\x74\x73\x2c\x20\x70\x72\x69\x6e\x74\x73\x20" \
-"\x62\x61\x75\x64\x20\x72\x61\x74\x65\x2c\x20\x6c\x69\x6e\x65\x20" \
-"\x64\x69\x73\x63\x69\x70\x6c\x69\x6e\x65\x2c\x0a\x61\x6e\x64\x20" \
-"\x64\x65\x76\x69\x61\x74\x69\x6f\x6e\x73\x20\x66\x72\x6f\x6d\x20" \
-"\x73\x74\x74\x79\x20\x73\x61\x6e\x65\x0a\x0a\x09\x2d\x46\x20\x44" \
-"\x45\x56\x49\x43\x45\x09\x4f\x70\x65\x6e\x20\x64\x65\x76\x69\x63" \
-"\x65\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66\x20\x73\x74\x64" \
-"\x69\x6e\x0a\x09\x2d\x61\x09\x09\x50\x72\x69\x6e\x74\x20\x61\x6c" \
-"\x6c\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x73\x65\x74\x74\x69\x6e" \
-"\x67\x73\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e\x2d\x72\x65\x61\x64" \
-"\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x0a\x09\x2d\x67\x09\x09\x50" \
-"\x72\x69\x6e\x74\x20\x69\x6e\x20\x73\x74\x74\x79\x2d\x72\x65\x61" \
-"\x64\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x0a\x09\x5b\x53\x45\x54" \
-"\x54\x49\x4e\x47\x5d\x09\x53\x65\x65\x20\x6d\x61\x6e\x70\x61\x67" \
-"\x65\x00\x5b\x2d\x61\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a" \
-"\x0a\x53\x74\x6f\x70\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f" \
-"\x6e\x20\x44\x45\x56\x49\x43\x45\x0a\x0a\x09\x2d\x61\x09\x53\x74" \
-"\x6f\x70\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x61" \
-"\x6c\x6c\x20\x73\x77\x61\x70\x20\x64\x65\x76\x69\x63\x65\x73\x00" \
-"\x5b\x2d\x61\x5d\x20\x5b\x44\x45\x56\x49\x43\x45\x5d\x0a\x0a\x53" \
-"\x74\x61\x72\x74\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e" \
-"\x20\x44\x45\x56\x49\x43\x45\x0a\x0a\x09\x2d\x61\x09\x53\x74\x61" \
-"\x72\x74\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20\x6f\x6e\x20\x61" \
-"\x6c\x6c\x20\x73\x77\x61\x70\x20\x64\x65\x76\x69\x63\x65\x73\x00" \
-"\x0a\x0a\x57\x72\x69\x74\x65\x20\x61\x6c\x6c\x20\x62\x75\x66\x66" \
-"\x65\x72\x65\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20\x74\x6f\x20\x64" \
-"\x69\x73\x6b\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x56" \
-"\x41\x4c\x55\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x66\x69\x67" \
-"\x75\x72\x65\x20\x6b\x65\x72\x6e\x65\x6c\x20\x70\x61\x72\x61\x6d" \
-"\x65\x74\x65\x72\x73\x20\x61\x74\x20\x72\x75\x6e\x74\x69\x6d\x65" \
-"\x0a\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20\x70\x72\x69\x6e" \
-"\x74\x20\x6b\x65\x79\x20\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x65\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x77\x61\x72\x6e\x20\x61\x62\x6f\x75\x74" \
-"\x20\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x6b\x65\x79\x73\x0a\x09\x2d" \
-"\x77\x09\x43\x68\x61\x6e\x67\x65\x20\x73\x79\x73\x63\x74\x6c\x20" \
-"\x73\x65\x74\x74\x69\x6e\x67\x0a\x09\x2d\x70\x20\x46\x49\x4c\x45" \
-"\x09\x4c\x6f\x61\x64\x20\x73\x79\x73\x63\x74\x6c\x20\x73\x65\x74" \
-"\x74\x69\x6e\x67\x73\x20\x66\x72\x6f\x6d\x20\x46\x49\x4c\x45\x20" \
-"\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x2f\x65\x74\x63\x2f\x73\x79" \
-"\x73\x63\x74\x6c\x2e\x63\x6f\x6e\x66\x29\x0a\x09\x2d\x61\x09\x44" \
-"\x69\x73\x70\x6c\x61\x79\x20\x61\x6c\x6c\x20\x76\x61\x6c\x75\x65" \
-"\x73\x0a\x09\x2d\x41\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x61\x6c" \
-"\x6c\x20\x76\x61\x6c\x75\x65\x73\x20\x69\x6e\x20\x74\x61\x62\x6c" \
-"\x65\x20\x66\x6f\x72\x6d\x00\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
-"\x0a\x0a\x43\x6f\x6e\x63\x61\x74\x65\x6e\x61\x74\x65\x20\x46\x49" \
-"\x4c\x45\x73\x20\x61\x6e\x64\x20\x70\x72\x69\x6e\x74\x20\x74\x68" \
-"\x65\x6d\x20\x69\x6e\x20\x72\x65\x76\x65\x72\x73\x65\x00\x5b\x4f" \
-"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e" \
-"\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6c\x61\x73\x74\x20\x31\x30" \
-"\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x46" \
-"\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x74" \
-"\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a\x57\x69\x74\x68\x20\x6d" \
-"\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x65\x20\x46\x49\x4c" \
-"\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65\x20\x65\x61\x63\x68\x20" \
-"\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20" \
-"\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09\x2d\x66\x09\x09\x50\x72" \
-"\x69\x6e\x74\x20\x64\x61\x74\x61\x20\x61\x73\x20\x66\x69\x6c\x65" \
-"\x20\x67\x72\x6f\x77\x73\x0a\x09\x2d\x73\x20\x53\x45\x43\x4f\x4e" \
-"\x44\x53\x09\x57\x61\x69\x74\x20\x53\x45\x43\x4f\x4e\x44\x53\x20" \
-"\x62\x65\x74\x77\x65\x65\x6e\x20\x72\x65\x61\x64\x73\x20\x77\x69" \
-"\x74\x68\x20\x2d\x66\x0a\x09\x2d\x6e\x20\x4e\x5b\x6b\x62\x6d\x5d" \
-"\x09\x50\x72\x69\x6e\x74\x20\x6c\x61\x73\x74\x20\x4e\x20\x6c\x69" \
-"\x6e\x65\x73\x0a\x09\x2d\x63\x20\x4e\x5b\x6b\x62\x6d\x5d\x09\x50" \
-"\x72\x69\x6e\x74\x20\x6c\x61\x73\x74\x20\x4e\x20\x62\x79\x74\x65" \
-"\x73\x0a\x09\x2d\x71\x09\x09\x4e\x65\x76\x65\x72\x20\x70\x72\x69" \
-"\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a\x09\x2d\x76\x09\x09" \
-"\x41\x6c\x77\x61\x79\x73\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61" \
-"\x64\x65\x72\x73\x0a\x0a\x4e\x20\x6d\x61\x79\x20\x62\x65\x20\x73" \
-"\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79\x20\x6b\x20\x28\x78\x31" \
-"\x30\x32\x34\x29\x2c\x20\x62\x20\x28\x78\x35\x31\x32\x29\x2c\x20" \
-"\x6f\x72\x20\x6d\x20\x28\x78\x31\x30\x32\x34\x5e\x32\x29\x2e\x0a" \
-"\x49\x66\x20\x4e\x20\x73\x74\x61\x72\x74\x73\x20\x77\x69\x74\x68" \
-"\x20\x61\x20\x27\x2b\x27\x2c\x20\x6f\x75\x74\x70\x75\x74\x20\x62" \
-"\x65\x67\x69\x6e\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x4e" \
-"\x74\x68\x20\x69\x74\x65\x6d\x20\x66\x72\x6f\x6d\x20\x74\x68\x65" \
-"\x20\x73\x74\x61\x72\x74\x0a\x6f\x66\x20\x65\x61\x63\x68\x20\x66" \
-"\x69\x6c\x65\x2c\x20\x6e\x6f\x74\x20\x66\x72\x6f\x6d\x20\x74\x68" \
-"\x65\x20\x65\x6e\x64\x2e\x00\x2d\x5b\x63\x78\x74\x7a\x6a\x68\x6d" \
-"\x76\x4f\x5d\x20\x5b\x2d\x58\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d" \
-"\x54\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x66\x20\x54\x41\x52\x46" \
-"\x49\x4c\x45\x5d\x20\x5b\x2d\x43\x20\x44\x49\x52\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x72\x65\x61\x74\x65\x2c" \
-"\x20\x65\x78\x74\x72\x61\x63\x74\x2c\x20\x6f\x72\x20\x6c\x69\x73" \
-"\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d\x20\x61\x20\x74" \
-"\x61\x72\x20\x66\x69\x6c\x65\x0a\x0a\x4f\x70\x65\x72\x61\x74\x69" \
-"\x6f\x6e\x3a\x0a\x09\x63\x09\x43\x72\x65\x61\x74\x65\x0a\x09\x78" \
-"\x09\x45\x78\x74\x72\x61\x63\x74\x0a\x09\x74\x09\x4c\x69\x73\x74" \
-"\x0a\x09\x66\x09\x4e\x61\x6d\x65\x20\x6f\x66\x20\x54\x41\x52\x46" \
-"\x49\x4c\x45\x20\x28\x27\x2d\x27\x20\x66\x6f\x72\x20\x73\x74\x64" \
-"\x69\x6e\x2f\x6f\x75\x74\x29\x0a\x09\x43\x09\x43\x68\x61\x6e\x67" \
-"\x65\x20\x74\x6f\x20\x44\x49\x52\x20\x62\x65\x66\x6f\x72\x65\x20" \
-"\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x0a\x09\x76\x09\x56\x65\x72" \
-"\x62\x6f\x73\x65\x0a\x09\x7a\x09\x28\x44\x65\x29\x63\x6f\x6d\x70" \
-"\x72\x65\x73\x73\x20\x75\x73\x69\x6e\x67\x20\x67\x7a\x69\x70\x0a" \
-"\x09\x6a\x09\x28\x44\x65\x29\x63\x6f\x6d\x70\x72\x65\x73\x73\x20" \
-"\x75\x73\x69\x6e\x67\x20\x62\x7a\x69\x70\x32\x0a\x09\x4f\x09\x45" \
-"\x78\x74\x72\x61\x63\x74\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74" \
-"\x0a\x09\x68\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73\x79\x6d\x6c\x69" \
-"\x6e\x6b\x73\x0a\x09\x6d\x09\x44\x6f\x6e\x27\x74\x20\x72\x65\x73" \
-"\x74\x6f\x72\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09\x65\x78\x63\x6c" \
-"\x75\x64\x65\x09\x46\x69\x6c\x65\x20\x74\x6f\x20\x65\x78\x63\x6c" \
-"\x75\x64\x65\x0a\x09\x58\x09\x46\x69\x6c\x65\x20\x77\x69\x74\x68" \
-"\x20\x6e\x61\x6d\x65\x73\x20\x74\x6f\x20\x65\x78\x63\x6c\x75\x64" \
-"\x65\x0a\x09\x54\x09\x46\x69\x6c\x65\x20\x77\x69\x74\x68\x20\x6e" \
-"\x61\x6d\x65\x73\x20\x74\x6f\x20\x69\x6e\x63\x6c\x75\x64\x65\x00" \
-"\x5b\x2d\x61\x69\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
-"\x0a\x43\x6f\x70\x79\x20\x73\x74\x64\x69\x6e\x20\x74\x6f\x20\x65" \
-"\x61\x63\x68\x20\x46\x49\x4c\x45\x2c\x20\x61\x6e\x64\x20\x61\x6c" \
-"\x73\x6f\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d" \
-"\x61\x09\x41\x70\x70\x65\x6e\x64\x20\x74\x6f\x20\x74\x68\x65\x20" \
-"\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x73\x2c\x20\x64\x6f\x6e" \
-"\x27\x74\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x69" \
-"\x09\x49\x67\x6e\x6f\x72\x65\x20\x69\x6e\x74\x65\x72\x72\x75\x70" \
-"\x74\x20\x73\x69\x67\x6e\x61\x6c\x73\x20\x28\x53\x49\x47\x49\x4e" \
-"\x54\x29\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x20\x5d\x0a" \
-"\x0a\x43\x68\x65\x63\x6b\x20\x66\x69\x6c\x65\x20\x74\x79\x70\x65" \
-"\x73\x2c\x20\x63\x6f\x6d\x70\x61\x72\x65\x20\x76\x61\x6c\x75\x65" \
-"\x73\x20\x65\x74\x63\x2e\x20\x52\x65\x74\x75\x72\x6e\x20\x61\x20" \
-"\x30\x2f\x31\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x0a\x64\x65" \
-"\x70\x65\x6e\x64\x69\x6e\x67\x20\x6f\x6e\x20\x6c\x6f\x67\x69\x63" \
-"\x61\x6c\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20\x45\x58\x50\x52" \
-"\x45\x53\x53\x49\x4f\x4e\x00\x5b\x2d\x76\x5d\x20\x50\x52\x4f\x47" \
-"\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x2c" \
-"\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x72\x65\x73\x6f\x75\x72\x63" \
-"\x65\x20\x75\x73\x61\x67\x65\x20\x77\x68\x65\x6e\x20\x69\x74\x20" \
-"\x65\x78\x69\x74\x73\x0a\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f" \
-"\x73\x65\x00\x5b\x2d\x62\x5d\x20\x5b\x2d\x6e\x43\x4f\x55\x4e\x54" \
-"\x5d\x20\x5b\x2d\x64\x53\x45\x43\x4f\x4e\x44\x53\x5d\x20\x5b\x2d" \
-"\x6d\x5d\x0a\x0a\x50\x72\x6f\x76\x69\x64\x65\x20\x61\x20\x76\x69" \
-"\x65\x77\x20\x6f\x66\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x61\x63" \
-"\x74\x69\x76\x69\x74\x79\x20\x69\x6e\x20\x72\x65\x61\x6c\x20\x74" \
-"\x69\x6d\x65\x2e\x0a\x52\x65\x61\x64\x20\x74\x68\x65\x20\x73\x74" \
-"\x61\x74\x75\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20\x70\x72\x6f\x63" \
-"\x65\x73\x73\x65\x73\x20\x66\x72\x6f\x6d\x20\x2f\x70\x72\x6f\x63" \
-"\x20\x65\x61\x63\x68\x20\x53\x45\x43\x4f\x4e\x44\x53\x0a\x61\x6e" \
-"\x64\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x61\x20\x73\x63\x72\x65" \
-"\x65\x6e\x66\x75\x6c\x20\x6f\x66\x20\x74\x68\x65\x6d\x2e\x0a\x4b" \
-"\x65\x79\x73\x3a\x0a\x09\x4e\x2f\x4d\x2f\x50\x2f\x54\x3a\x20\x73" \
-"\x68\x6f\x77\x20\x43\x50\x55\x20\x75\x73\x61\x67\x65\x2c\x20\x73" \
-"\x6f\x72\x74\x20\x62\x79\x20\x70\x69\x64\x2f\x6d\x65\x6d\x2f\x63" \
-"\x70\x75\x2f\x74\x69\x6d\x65\x0a\x09\x53\x3a\x20\x73\x68\x6f\x77" \
-"\x20\x6d\x65\x6d\x6f\x72\x79\x0a\x09\x52\x3a\x20\x72\x65\x76\x65" \
-"\x72\x73\x65\x20\x73\x6f\x72\x74\x0a\x09\x48\x3a\x20\x74\x6f\x67" \
-"\x67\x6c\x65\x20\x74\x68\x72\x65\x61\x64\x73\x0a\x09\x51\x2c\x5e" \
-"\x43\x3a\x20\x65\x78\x69\x74\x0a\x0a\x4f\x70\x74\x69\x6f\x6e\x73" \
-"\x3a\x0a\x09\x2d\x62\x09\x42\x61\x74\x63\x68\x20\x6d\x6f\x64\x65" \
-"\x0a\x09\x2d\x6e\x20\x4e\x09\x45\x78\x69\x74\x20\x61\x66\x74\x65" \
-"\x72\x20\x4e\x20\x69\x74\x65\x72\x61\x74\x69\x6f\x6e\x73\x0a\x09" \
-"\x2d\x64\x20\x4e\x09\x44\x65\x6c\x61\x79\x20\x62\x65\x74\x77\x65" \
-"\x65\x6e\x20\x75\x70\x64\x61\x74\x65\x73\x0a\x09\x2d\x6d\x09\x53" \
-"\x61\x6d\x65\x20\x61\x73\x20\x27\x73\x27\x20\x6b\x65\x79\x00\x5b" \
-"\x2d\x63\x5d\x20\x46\x49\x4c\x45\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x55\x70\x64\x61\x74\x65\x20\x74\x68\x65\x20\x6c" \
-"\x61\x73\x74\x2d\x6d\x6f\x64\x69\x66\x69\x65\x64\x20\x64\x61\x74" \
-"\x65\x20\x6f\x6e\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x46" \
-"\x49\x4c\x45\x5b\x73\x5d\x0a\x0a\x09\x2d\x63\x09\x44\x6f\x6e\x27" \
-"\x74\x20\x63\x72\x65\x61\x74\x65\x20\x66\x69\x6c\x65\x73\x00\x5b" \
-"\x2d\x63\x64\x73\x5d\x20\x53\x54\x52\x49\x4e\x47\x31\x20\x5b\x53" \
-"\x54\x52\x49\x4e\x47\x32\x5d\x0a\x0a\x54\x72\x61\x6e\x73\x6c\x61" \
-"\x74\x65\x2c\x20\x73\x71\x75\x65\x65\x7a\x65\x2c\x20\x6f\x72\x20" \
-"\x64\x65\x6c\x65\x74\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72" \
-"\x73\x20\x66\x72\x6f\x6d\x20\x73\x74\x64\x69\x6e\x2c\x20\x77\x72" \
-"\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a" \
-"\x0a\x09\x2d\x63\x09\x54\x61\x6b\x65\x20\x63\x6f\x6d\x70\x6c\x65" \
-"\x6d\x65\x6e\x74\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x31\x0a" \
-"\x09\x2d\x64\x09\x44\x65\x6c\x65\x74\x65\x20\x69\x6e\x70\x75\x74" \
-"\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x63\x6f\x64\x65" \
-"\x64\x20\x53\x54\x52\x49\x4e\x47\x31\x0a\x09\x2d\x73\x09\x53\x71" \
-"\x75\x65\x65\x7a\x65\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x6f" \
-"\x75\x74\x70\x75\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73" \
-"\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x32\x20\x69\x6e\x74\x6f" \
-"\x20\x6f\x6e\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x00\x0a" \
-"\x0a\x52\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x65\x78\x69\x74\x20" \
-"\x63\x6f\x64\x65\x20\x6f\x66\x20\x54\x52\x55\x45\x20\x28\x30\x29" \
-"\x00\x5b\x77\x5d\x20\x5b\x68\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20" \
-"\x64\x69\x6d\x65\x6e\x73\x69\x6f\x6e\x28\x73\x29\x20\x6f\x66\x20" \
-"\x73\x74\x64\x69\x6e\x27\x73\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c" \
-"\x2c\x20\x6f\x6e\x20\x65\x72\x72\x6f\x72\x20\x72\x65\x74\x75\x72" \
-"\x6e\x20\x38\x30\x78\x32\x35\x00\x5b\x2d\x63\x20\x4d\x41\x58\x5f" \
-"\x4d\x4f\x55\x4e\x54\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x69" \
-"\x20\x44\x41\x59\x53\x5d\x20\x5b\x2d\x43\x20\x4d\x4f\x55\x4e\x54" \
-"\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45" \
-"\x4c\x5d\x20\x42\x4c\x4f\x43\x4b\x44\x45\x56\x0a\x0a\x41\x64\x6a" \
-"\x75\x73\x74\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x6f" \
-"\x70\x74\x69\x6f\x6e\x73\x20\x6f\x6e\x20\x65\x78\x74\x5b\x32\x33" \
-"\x5d\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x00\x5b\x4f" \
-"\x50\x54\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45\x53\x59\x53\x54" \
-"\x45\x4d\x7c\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x55\x6e" \
-"\x6d\x6f\x75\x6e\x74\x20\x66\x69\x6c\x65\x20\x73\x79\x73\x74\x65" \
-"\x6d\x73\x0a\x0a\x09\x2d\x72\x09\x54\x72\x79\x20\x74\x6f\x20\x72" \
-"\x65\x6d\x6f\x75\x6e\x74\x20\x64\x65\x76\x69\x63\x65\x73\x20\x61" \
-"\x73\x20\x72\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x20\x69\x66\x20\x6d" \
-"\x6f\x75\x6e\x74\x20\x69\x73\x20\x62\x75\x73\x79\x0a\x09\x2d\x6c" \
-"\x09\x4c\x61\x7a\x79\x20\x75\x6d\x6f\x75\x6e\x74\x20\x28\x64\x65" \
-"\x74\x61\x63\x68\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x29" \
-"\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x20\x75\x6d\x6f\x75\x6e" \
-"\x74\x20\x28\x69\x2e\x65\x2e\x2c\x20\x75\x6e\x72\x65\x61\x63\x68" \
-"\x61\x62\x6c\x65\x20\x4e\x46\x53\x20\x73\x65\x72\x76\x65\x72\x29" \
-"\x0a\x09\x2d\x64\x09\x46\x72\x65\x65\x20\x6c\x6f\x6f\x70\x20\x64" \
-"\x65\x76\x69\x63\x65\x20\x69\x66\x20\x69\x74\x20\x68\x61\x73\x20" \
-"\x62\x65\x65\x6e\x20\x75\x73\x65\x64\x00\x5b\x2d\x61\x6d\x6e\x72" \
-"\x73\x70\x76\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x73\x79\x73\x74" \
-"\x65\x6d\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x0a" \
-"\x09\x2d\x61\x09\x50\x72\x69\x6e\x74\x20\x61\x6c\x6c\x0a\x09\x2d" \
-"\x6d\x09\x54\x68\x65\x20\x6d\x61\x63\x68\x69\x6e\x65\x20\x28\x68" \
-"\x61\x72\x64\x77\x61\x72\x65\x29\x20\x74\x79\x70\x65\x0a\x09\x2d" \
-"\x6e\x09\x48\x6f\x73\x74\x6e\x61\x6d\x65\x0a\x09\x2d\x72\x09\x4f" \
-"\x53\x20\x72\x65\x6c\x65\x61\x73\x65\x0a\x09\x2d\x73\x09\x4f\x53" \
-"\x20\x6e\x61\x6d\x65\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a" \
-"\x09\x2d\x70\x09\x50\x72\x6f\x63\x65\x73\x73\x6f\x72\x20\x74\x79" \
-"\x70\x65\x0a\x09\x2d\x76\x09\x4f\x53\x20\x76\x65\x72\x73\x69\x6f" \
-"\x6e\x00\x5b\x2d\x66\x61\x5d\x5b\x2d\x74\x20\x4e\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74" \
-"\x20\x73\x70\x61\x63\x65\x73\x20\x74\x6f\x20\x74\x61\x62\x73\x2c" \
-"\x20\x77\x72\x69\x74\x69\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f" \
-"\x75\x74\x0a\x0a\x09\x2d\x61\x2c\x2d\x2d\x61\x6c\x6c\x09\x43\x6f" \
-"\x6e\x76\x65\x72\x74\x20\x61\x6c\x6c\x20\x62\x6c\x61\x6e\x6b\x73" \
-"\x0a\x09\x2d\x66\x2c\x2d\x2d\x66\x69\x72\x73\x74\x2d\x6f\x6e\x6c" \
-"\x79\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x6f\x6e\x6c\x79\x20\x6c" \
-"\x65\x61\x64\x69\x6e\x67\x20\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d" \
-"\x74\x2c\x2d\x2d\x74\x61\x62\x73\x3d\x4e\x09\x54\x61\x62\x73\x74" \
-"\x6f\x70\x73\x20\x65\x76\x65\x72\x79\x20\x4e\x20\x63\x68\x61\x72" \
-"\x73\x00\x5b\x2d\x63\x64\x75\x5d\x5b\x2d\x66\x2c\x73\x2c\x77\x20" \
-"\x4e\x5d\x20\x5b\x49\x4e\x50\x55\x54\x20\x5b\x4f\x55\x54\x50\x55" \
-"\x54\x5d\x5d\x0a\x0a\x44\x69\x73\x63\x61\x72\x64\x20\x64\x75\x70" \
-"\x6c\x69\x63\x61\x74\x65\x20\x6c\x69\x6e\x65\x73\x0a\x0a\x09\x2d" \
-"\x63\x09\x50\x72\x65\x66\x69\x78\x20\x6c\x69\x6e\x65\x73\x20\x62" \
-"\x79\x20\x74\x68\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20" \
-"\x6f\x63\x63\x75\x72\x72\x65\x6e\x63\x65\x73\x0a\x09\x2d\x64\x09" \
-"\x4f\x6e\x6c\x79\x20\x70\x72\x69\x6e\x74\x20\x64\x75\x70\x6c\x69" \
-"\x63\x61\x74\x65\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x75\x09\x4f" \
-"\x6e\x6c\x79\x20\x70\x72\x69\x6e\x74\x20\x75\x6e\x69\x71\x75\x65" \
-"\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x66\x20\x4e\x09\x53\x6b\x69" \
-"\x70\x20\x66\x69\x72\x73\x74\x20\x4e\x20\x66\x69\x65\x6c\x64\x73" \
-"\x0a\x09\x2d\x73\x20\x4e\x09\x53\x6b\x69\x70\x20\x66\x69\x72\x73" \
-"\x74\x20\x4e\x20\x63\x68\x61\x72\x73\x20\x28\x61\x66\x74\x65\x72" \
-"\x20\x61\x6e\x79\x20\x73\x6b\x69\x70\x70\x65\x64\x20\x66\x69\x65" \
-"\x6c\x64\x73\x29\x0a\x09\x2d\x77\x20\x4e\x09\x43\x6f\x6d\x70\x61" \
-"\x72\x65\x20\x4e\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20" \
-"\x69\x6e\x20\x6c\x69\x6e\x65\x00\x5b\x2d\x75\x64\x5d\x20\x5b\x46" \
-"\x49\x4c\x45\x5d\x0a\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20\x46\x49" \
-"\x4c\x45\x20\x69\x6e\x2d\x70\x6c\x61\x63\x65\x20\x66\x72\x6f\x6d" \
-"\x20\x55\x6e\x69\x78\x20\x74\x6f\x20\x44\x4f\x53\x20\x66\x6f\x72" \
-"\x6d\x61\x74\x2e\x0a\x57\x68\x65\x6e\x20\x6e\x6f\x20\x66\x69\x6c" \
-"\x65\x20\x69\x73\x20\x67\x69\x76\x65\x6e\x2c\x20\x75\x73\x65\x20" \
-"\x73\x74\x64\x69\x6e\x2f\x73\x74\x64\x6f\x75\x74\x2e\x0a\x0a\x09" \
-"\x2d\x75\x09\x64\x6f\x73\x32\x75\x6e\x69\x78\x0a\x09\x2d\x64\x09" \
-"\x75\x6e\x69\x78\x32\x64\x6f\x73\x00\x5b\x2d\x63\x66\x5d\x20\x5b" \
-"\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70" \
-"\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74" \
-"\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f" \
-"\x72\x63\x65\x00\x5b\x2d\x63\x66\x76\x43\x46\x5d\x20\x5b\x46\x49" \
-"\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69\x74" \
-"\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09" \
-"\x46\x6f\x72\x63\x65\x0a\x09\x2d\x76\x09\x56\x65\x72\x62\x6f\x73" \
-"\x65\x0a\x09\x2d\x46\x09\x44\x6f\x6e\x27\x74\x20\x73\x74\x6f\x72" \
-"\x65\x20\x6f\x72\x20\x76\x65\x72\x69\x66\x79\x20\x63\x68\x65\x63" \
-"\x6b\x73\x75\x6d\x00\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45" \
-"\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73" \
-"\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29" \
-"\x0a\x0a\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00" \
-"\x5b\x2d\x6f\x70\x74\x73\x5b\x6d\x6f\x64\x69\x66\x69\x65\x72\x73" \
-"\x5d\x5d\x20\x46\x49\x4c\x45\x5b\x2e\x7a\x69\x70\x5d\x20\x5b\x4c" \
-"\x49\x53\x54\x5d\x20\x5b\x2d\x78\x20\x58\x4c\x49\x53\x54\x5d\x20" \
-"\x5b\x2d\x64\x20\x44\x49\x52\x5d\x0a\x0a\x45\x78\x74\x72\x61\x63" \
-"\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d\x20\x5a\x49\x50" \
-"\x20\x61\x72\x63\x68\x69\x76\x65\x73\x0a\x0a\x09\x2d\x6c\x09\x4c" \
-"\x69\x73\x74\x20\x61\x72\x63\x68\x69\x76\x65\x20\x63\x6f\x6e\x74" \
-"\x65\x6e\x74\x73\x20\x28\x77\x69\x74\x68\x20\x2d\x71\x20\x66\x6f" \
-"\x72\x20\x73\x68\x6f\x72\x74\x20\x66\x6f\x72\x6d\x29\x0a\x09\x2d" \
-"\x6e\x09\x4e\x65\x76\x65\x72\x20\x6f\x76\x65\x72\x77\x72\x69\x74" \
-"\x65\x20\x66\x69\x6c\x65\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74" \
-"\x29\x0a\x09\x2d\x6f\x09\x4f\x76\x65\x72\x77\x72\x69\x74\x65\x0a" \
-"\x09\x2d\x70\x09\x53\x65\x6e\x64\x20\x6f\x75\x74\x70\x75\x74\x20" \
-"\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d\x71\x09\x51\x75" \
-"\x69\x65\x74\x0a\x09\x2d\x78\x20\x58\x4c\x53\x54\x09\x45\x78\x63" \
-"\x6c\x75\x64\x65\x20\x74\x68\x65\x73\x65\x20\x66\x69\x6c\x65\x73" \
-"\x0a\x09\x2d\x64\x20\x44\x49\x52\x09\x45\x78\x74\x72\x61\x63\x74" \
-"\x20\x66\x69\x6c\x65\x73\x20\x69\x6e\x74\x6f\x20\x44\x49\x52\x00" \
-"\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x74\x68\x65\x20\x74\x69" \
-"\x6d\x65\x20\x73\x69\x6e\x63\x65\x20\x74\x68\x65\x20\x6c\x61\x73" \
-"\x74\x20\x62\x6f\x6f\x74\x00\x4e\x0a\x0a\x50\x61\x75\x73\x65\x20" \
-"\x66\x6f\x72\x20\x4e\x20\x6d\x69\x63\x72\x6f\x73\x65\x63\x6f\x6e" \
-"\x64\x73\x00\x5b\x2d\x6f\x20\x4f\x55\x54\x46\x49\x4c\x45\x5d\x20" \
-"\x5b\x49\x4e\x46\x49\x4c\x45\x5d\x0a\x0a\x55\x75\x64\x65\x63\x6f" \
-"\x64\x65\x20\x61\x20\x66\x69\x6c\x65\x0a\x46\x69\x6e\x64\x73\x20" \
-"\x6f\x75\x74\x66\x69\x6c\x65\x20\x6e\x61\x6d\x65\x20\x69\x6e\x20" \
-"\x75\x75\x65\x6e\x63\x6f\x64\x65\x64\x20\x73\x6f\x75\x72\x63\x65" \
-"\x20\x75\x6e\x6c\x65\x73\x73\x20\x2d\x6f\x20\x69\x73\x20\x67\x69" \
-"\x76\x65\x6e\x00\x5b\x2d\x6d\x5d\x20\x5b\x49\x4e\x46\x49\x4c\x45" \
-"\x5d\x20\x53\x54\x4f\x52\x45\x44\x5f\x46\x49\x4c\x45\x4e\x41\x4d" \
-"\x45\x0a\x0a\x55\x75\x65\x6e\x63\x6f\x64\x65\x20\x61\x20\x66\x69" \
-"\x6c\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d" \
-"\x6d\x09\x55\x73\x65\x20\x62\x61\x73\x65\x36\x34\x20\x65\x6e\x63" \
-"\x6f\x64\x69\x6e\x67\x20\x70\x65\x72\x20\x52\x46\x43\x31\x35\x32" \
-"\x31\x00\x5b\x2d\x6e\x20\x53\x45\x43\x5d\x20\x5b\x2d\x74\x5d\x20" \
+"\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
+"\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20\x63\x68" \
+"\x65\x63\x6b\x20\x53\x48\x41\x32\x35\x36\x20\x63\x68\x65\x63\x6b" \
+"\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63\x6b\x20" \
+"\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c\x69\x73" \
+"\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73\x09\x44" \
+"\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e\x79\x74" \
+"\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63\x6f\x64" \
+"\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73\x73\x0a" \
+"\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74\x20\x69" \
+"\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d\x61\x74" \
+"\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c\x69\x6e" \
+"\x65\x73\x00\x5b\x2d\x63\x5b\x73\x77\x5d\x5d\x20\x5b\x46\x49\x4c" \
+"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6f\x72\x20" \
+"\x63\x68\x65\x63\x6b\x20\x53\x48\x41\x35\x31\x32\x20\x63\x68\x65" \
+"\x63\x6b\x73\x75\x6d\x73\x0a\x0a\x09\x2d\x63\x09\x43\x68\x65\x63" \
+"\x6b\x20\x73\x75\x6d\x73\x20\x61\x67\x61\x69\x6e\x73\x74\x20\x6c" \
+"\x69\x73\x74\x20\x69\x6e\x20\x46\x49\x4c\x45\x73\x0a\x09\x2d\x73" \
+"\x09\x44\x6f\x6e\x27\x74\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x6e" \
+"\x79\x74\x68\x69\x6e\x67\x2c\x20\x73\x74\x61\x74\x75\x73\x20\x63" \
+"\x6f\x64\x65\x20\x73\x68\x6f\x77\x73\x20\x73\x75\x63\x63\x65\x73" \
+"\x73\x0a\x09\x2d\x77\x09\x57\x61\x72\x6e\x20\x61\x62\x6f\x75\x74" \
+"\x20\x69\x6d\x70\x72\x6f\x70\x65\x72\x6c\x79\x20\x66\x6f\x72\x6d" \
+"\x61\x74\x74\x65\x64\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x20\x6c" \
+"\x69\x6e\x65\x73\x00\x5b\x4e\x5d\x2e\x2e\x2e\x0a\x0a\x50\x61\x75" \
+"\x73\x65\x20\x66\x6f\x72\x20\x61\x20\x74\x69\x6d\x65\x20\x65\x71" \
+"\x75\x61\x6c\x20\x74\x6f\x20\x74\x68\x65\x20\x74\x6f\x74\x61\x6c" \
+"\x20\x6f\x66\x20\x74\x68\x65\x20\x61\x72\x67\x73\x20\x67\x69\x76" \
+"\x65\x6e\x2c\x20\x77\x68\x65\x72\x65\x20\x65\x61\x63\x68\x20\x61" \
+"\x72\x67\x20\x63\x61\x6e\x0a\x68\x61\x76\x65\x20\x61\x6e\x20\x6f" \
+"\x70\x74\x69\x6f\x6e\x61\x6c\x20\x73\x75\x66\x66\x69\x78\x20\x6f" \
+"\x66\x20\x28\x73\x29\x65\x63\x6f\x6e\x64\x73\x2c\x20\x28\x6d\x29" \
+"\x69\x6e\x75\x74\x65\x73\x2c\x20\x28\x68\x29\x6f\x75\x72\x73\x2c" \
+"\x20\x6f\x72\x20\x28\x64\x29\x61\x79\x73\x00\x5b\x2d\x6e\x72\x75" \
+"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x53\x6f\x72" \
+"\x74\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x74\x65\x78\x74\x0a" \
+"\x0a\x09\x2d\x6e\x09\x53\x6f\x72\x74\x20\x6e\x75\x6d\x62\x65\x72" \
+"\x73\x0a\x09\x2d\x72\x09\x52\x65\x76\x65\x72\x73\x65\x20\x73\x6f" \
+"\x72\x74\x20\x6f\x72\x64\x65\x72\x0a\x09\x2d\x75\x09\x53\x75\x70" \
+"\x70\x72\x65\x73\x73\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20" \
+"\x6c\x69\x6e\x65\x73\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20" \
+"\x5b\x49\x4e\x50\x55\x54\x20\x5b\x50\x52\x45\x46\x49\x58\x5d\x5d" \
+"\x0a\x0a\x09\x2d\x62\x20\x4e\x5b\x6b\x7c\x6d\x5d\x09\x53\x70\x6c" \
+"\x69\x74\x20\x62\x79\x20\x4e\x20\x28\x6b\x69\x6c\x6f\x7c\x6d\x65" \
+"\x67\x61\x29\x62\x79\x74\x65\x73\x0a\x09\x2d\x6c\x20\x4e\x09\x09" \
+"\x53\x70\x6c\x69\x74\x20\x62\x79\x20\x4e\x20\x6c\x69\x6e\x65\x73" \
+"\x0a\x09\x2d\x61\x20\x4e\x09\x09\x55\x73\x65\x20\x4e\x20\x6c\x65" \
+"\x74\x74\x65\x72\x73\x20\x61\x73\x20\x73\x75\x66\x66\x69\x78\x00" \
+"\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45\x2e\x2e" \
+"\x2e\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79\x20\x66\x69\x6c\x65\x20" \
+"\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x20\x6f\x72\x20\x66\x69\x6c" \
+"\x65\x73\x79\x73\x74\x65\x6d\x20\x73\x74\x61\x74\x75\x73\x0a\x0a" \
+"\x09\x2d\x66\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x66\x69\x6c\x65" \
+"\x73\x79\x73\x74\x65\x6d\x20\x73\x74\x61\x74\x75\x73\x0a\x09\x2d" \
+"\x4c\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x6c\x69\x6e\x6b\x73\x0a\x09" \
+"\x2d\x74\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x69\x6e\x66\x6f\x20" \
+"\x69\x6e\x20\x74\x65\x72\x73\x65\x20\x66\x6f\x72\x6d\x00\x5b\x2d" \
+"\x61\x66\x6f\x5d\x20\x5b\x2d\x6e\x20\x4c\x45\x4e\x5d\x20\x5b\x46" \
+"\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x69\x73\x70\x6c\x61\x79" \
+"\x20\x70\x72\x69\x6e\x74\x61\x62\x6c\x65\x20\x73\x74\x72\x69\x6e" \
+"\x67\x73\x20\x69\x6e\x20\x61\x20\x62\x69\x6e\x61\x72\x79\x20\x66" \
+"\x69\x6c\x65\x0a\x0a\x09\x2d\x61\x09\x53\x63\x61\x6e\x20\x77\x68" \
+"\x6f\x6c\x65\x20\x66\x69\x6c\x65\x20\x28\x64\x65\x66\x61\x75\x6c" \
+"\x74\x29\x0a\x09\x2d\x66\x09\x50\x72\x65\x63\x65\x64\x65\x20\x73" \
+"\x74\x72\x69\x6e\x67\x73\x20\x77\x69\x74\x68\x20\x66\x69\x6c\x65" \
+"\x6e\x61\x6d\x65\x73\x0a\x09\x2d\x6e\x20\x4c\x45\x4e\x09\x41\x74" \
+"\x20\x6c\x65\x61\x73\x74\x20\x4c\x45\x4e\x20\x63\x68\x61\x72\x61" \
+"\x63\x74\x65\x72\x73\x20\x66\x6f\x72\x6d\x20\x61\x20\x73\x74\x72" \
+"\x69\x6e\x67\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x34\x29\x0a" \
+"\x09\x2d\x6f\x09\x50\x72\x65\x63\x65\x64\x65\x20\x73\x74\x72\x69" \
+"\x6e\x67\x73\x20\x77\x69\x74\x68\x20\x64\x65\x63\x69\x6d\x61\x6c" \
+"\x20\x6f\x66\x66\x73\x65\x74\x73\x00\x5b\x2d\x61\x7c\x67\x5d\x20" \
+"\x5b\x2d\x46\x20\x44\x45\x56\x49\x43\x45\x5d\x20\x5b\x53\x45\x54" \
+"\x54\x49\x4e\x47\x5d\x2e\x2e\x2e\x0a\x0a\x57\x69\x74\x68\x6f\x75" \
+"\x74\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x2c\x20\x70\x72\x69" \
+"\x6e\x74\x73\x20\x62\x61\x75\x64\x20\x72\x61\x74\x65\x2c\x20\x6c" \
+"\x69\x6e\x65\x20\x64\x69\x73\x63\x69\x70\x6c\x69\x6e\x65\x2c\x0a" \
+"\x61\x6e\x64\x20\x64\x65\x76\x69\x61\x74\x69\x6f\x6e\x73\x20\x66" \
+"\x72\x6f\x6d\x20\x73\x74\x74\x79\x20\x73\x61\x6e\x65\x0a\x0a\x09" \
+"\x2d\x46\x20\x44\x45\x56\x49\x43\x45\x09\x4f\x70\x65\x6e\x20\x64" \
+"\x65\x76\x69\x63\x65\x20\x69\x6e\x73\x74\x65\x61\x64\x20\x6f\x66" \
+"\x20\x73\x74\x64\x69\x6e\x0a\x09\x2d\x61\x09\x09\x50\x72\x69\x6e" \
+"\x74\x20\x61\x6c\x6c\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x73\x65" \
+"\x74\x74\x69\x6e\x67\x73\x20\x69\x6e\x20\x68\x75\x6d\x61\x6e\x2d" \
+"\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x0a\x09\x2d" \
+"\x67\x09\x09\x50\x72\x69\x6e\x74\x20\x69\x6e\x20\x73\x74\x74\x79" \
+"\x2d\x72\x65\x61\x64\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x0a\x09" \
+"\x5b\x53\x45\x54\x54\x49\x4e\x47\x5d\x09\x53\x65\x65\x20\x6d\x61" \
+"\x6e\x70\x61\x67\x65\x00\x5b\x2d\x61\x5d\x20\x5b\x44\x45\x56\x49" \
+"\x43\x45\x5d\x0a\x0a\x53\x74\x6f\x70\x20\x73\x77\x61\x70\x70\x69" \
+"\x6e\x67\x20\x6f\x6e\x20\x44\x45\x56\x49\x43\x45\x0a\x0a\x09\x2d" \
+"\x61\x09\x53\x74\x6f\x70\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20" \
+"\x6f\x6e\x20\x61\x6c\x6c\x20\x73\x77\x61\x70\x20\x64\x65\x76\x69" \
+"\x63\x65\x73\x00\x5b\x2d\x61\x5d\x20\x5b\x44\x45\x56\x49\x43\x45" \
+"\x5d\x0a\x0a\x53\x74\x61\x72\x74\x20\x73\x77\x61\x70\x70\x69\x6e" \
+"\x67\x20\x6f\x6e\x20\x44\x45\x56\x49\x43\x45\x0a\x0a\x09\x2d\x61" \
+"\x09\x53\x74\x61\x72\x74\x20\x73\x77\x61\x70\x70\x69\x6e\x67\x20" \
+"\x6f\x6e\x20\x61\x6c\x6c\x20\x73\x77\x61\x70\x20\x64\x65\x76\x69" \
+"\x63\x65\x73\x00\x0a\x0a\x57\x72\x69\x74\x65\x20\x61\x6c\x6c\x20" \
+"\x62\x75\x66\x66\x65\x72\x65\x64\x20\x62\x6c\x6f\x63\x6b\x73\x20" \
+"\x74\x6f\x20\x64\x69\x73\x6b\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53" \
+"\x5d\x20\x5b\x56\x41\x4c\x55\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f" \
+"\x6e\x66\x69\x67\x75\x72\x65\x20\x6b\x65\x72\x6e\x65\x6c\x20\x70" \
+"\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x20\x61\x74\x20\x72\x75\x6e" \
+"\x74\x69\x6d\x65\x0a\x0a\x09\x2d\x6e\x09\x44\x6f\x6e\x27\x74\x20" \
+"\x70\x72\x69\x6e\x74\x20\x6b\x65\x79\x20\x6e\x61\x6d\x65\x73\x0a" \
+"\x09\x2d\x65\x09\x44\x6f\x6e\x27\x74\x20\x77\x61\x72\x6e\x20\x61" \
+"\x62\x6f\x75\x74\x20\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x6b\x65\x79" \
+"\x73\x0a\x09\x2d\x77\x09\x43\x68\x61\x6e\x67\x65\x20\x73\x79\x73" \
+"\x63\x74\x6c\x20\x73\x65\x74\x74\x69\x6e\x67\x0a\x09\x2d\x70\x20" \
+"\x46\x49\x4c\x45\x09\x4c\x6f\x61\x64\x20\x73\x79\x73\x63\x74\x6c" \
+"\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x20\x66\x72\x6f\x6d\x20\x46" \
+"\x49\x4c\x45\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20\x2f\x65\x74" \
+"\x63\x2f\x73\x79\x73\x63\x74\x6c\x2e\x63\x6f\x6e\x66\x29\x0a\x09" \
+"\x2d\x61\x09\x44\x69\x73\x70\x6c\x61\x79\x20\x61\x6c\x6c\x20\x76" \
+"\x61\x6c\x75\x65\x73\x0a\x09\x2d\x41\x09\x44\x69\x73\x70\x6c\x61" \
+"\x79\x20\x61\x6c\x6c\x20\x76\x61\x6c\x75\x65\x73\x20\x69\x6e\x20" \
+"\x74\x61\x62\x6c\x65\x20\x66\x6f\x72\x6d\x00\x5b\x46\x49\x4c\x45" \
+"\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f\x6e\x63\x61\x74\x65\x6e\x61\x74" \
+"\x65\x20\x46\x49\x4c\x45\x73\x20\x61\x6e\x64\x20\x70\x72\x69\x6e" \
+"\x74\x20\x74\x68\x65\x6d\x20\x69\x6e\x20\x72\x65\x76\x65\x72\x73" \
+"\x65\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x46\x49\x4c" \
+"\x45\x5d\x2e\x2e\x2e\x0a\x0a\x50\x72\x69\x6e\x74\x20\x6c\x61\x73" \
+"\x74\x20\x31\x30\x20\x6c\x69\x6e\x65\x73\x20\x6f\x66\x20\x65\x61" \
+"\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69" \
+"\x6e\x29\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x2e\x0a\x57\x69" \
+"\x74\x68\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x65" \
+"\x20\x46\x49\x4c\x45\x2c\x20\x70\x72\x65\x63\x65\x64\x65\x20\x65" \
+"\x61\x63\x68\x20\x77\x69\x74\x68\x20\x61\x20\x66\x69\x6c\x65\x6e" \
+"\x61\x6d\x65\x20\x68\x65\x61\x64\x65\x72\x2e\x0a\x0a\x09\x2d\x66" \
+"\x09\x09\x50\x72\x69\x6e\x74\x20\x64\x61\x74\x61\x20\x61\x73\x20" \
+"\x66\x69\x6c\x65\x20\x67\x72\x6f\x77\x73\x0a\x09\x2d\x73\x20\x53" \
+"\x45\x43\x4f\x4e\x44\x53\x09\x57\x61\x69\x74\x20\x53\x45\x43\x4f" \
+"\x4e\x44\x53\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x72\x65\x61\x64" \
+"\x73\x20\x77\x69\x74\x68\x20\x2d\x66\x0a\x09\x2d\x6e\x20\x4e\x5b" \
+"\x6b\x62\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x6c\x61\x73\x74\x20" \
+"\x4e\x20\x6c\x69\x6e\x65\x73\x0a\x09\x2d\x63\x20\x4e\x5b\x6b\x62" \
+"\x6d\x5d\x09\x50\x72\x69\x6e\x74\x20\x6c\x61\x73\x74\x20\x4e\x20" \
+"\x62\x79\x74\x65\x73\x0a\x09\x2d\x71\x09\x09\x4e\x65\x76\x65\x72" \
+"\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x73\x0a\x09" \
+"\x2d\x76\x09\x09\x41\x6c\x77\x61\x79\x73\x20\x70\x72\x69\x6e\x74" \
+"\x20\x68\x65\x61\x64\x65\x72\x73\x0a\x0a\x4e\x20\x6d\x61\x79\x20" \
+"\x62\x65\x20\x73\x75\x66\x66\x69\x78\x65\x64\x20\x62\x79\x20\x6b" \
+"\x20\x28\x78\x31\x30\x32\x34\x29\x2c\x20\x62\x20\x28\x78\x35\x31" \
+"\x32\x29\x2c\x20\x6f\x72\x20\x6d\x20\x28\x78\x31\x30\x32\x34\x5e" \
+"\x32\x29\x2e\x0a\x49\x66\x20\x4e\x20\x73\x74\x61\x72\x74\x73\x20" \
+"\x77\x69\x74\x68\x20\x61\x20\x27\x2b\x27\x2c\x20\x6f\x75\x74\x70" \
+"\x75\x74\x20\x62\x65\x67\x69\x6e\x73\x20\x77\x69\x74\x68\x20\x74" \
+"\x68\x65\x20\x4e\x74\x68\x20\x69\x74\x65\x6d\x20\x66\x72\x6f\x6d" \
+"\x20\x74\x68\x65\x20\x73\x74\x61\x72\x74\x0a\x6f\x66\x20\x65\x61" \
+"\x63\x68\x20\x66\x69\x6c\x65\x2c\x20\x6e\x6f\x74\x20\x66\x72\x6f" \
+"\x6d\x20\x74\x68\x65\x20\x65\x6e\x64\x2e\x00\x2d\x5b\x63\x78\x74" \
+"\x7a\x6a\x68\x6d\x76\x4f\x5d\x20\x5b\x2d\x58\x20\x46\x49\x4c\x45" \
+"\x5d\x20\x5b\x2d\x54\x20\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x66\x20" \
+"\x54\x41\x52\x46\x49\x4c\x45\x5d\x20\x5b\x2d\x43\x20\x44\x49\x52" \
+"\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x72\x65" \
+"\x61\x74\x65\x2c\x20\x65\x78\x74\x72\x61\x63\x74\x2c\x20\x6f\x72" \
+"\x20\x6c\x69\x73\x74\x20\x66\x69\x6c\x65\x73\x20\x66\x72\x6f\x6d" \
+"\x20\x61\x20\x74\x61\x72\x20\x66\x69\x6c\x65\x0a\x0a\x4f\x70\x65" \
+"\x72\x61\x74\x69\x6f\x6e\x3a\x0a\x09\x63\x09\x43\x72\x65\x61\x74" \
+"\x65\x0a\x09\x78\x09\x45\x78\x74\x72\x61\x63\x74\x0a\x09\x74\x09" \
+"\x4c\x69\x73\x74\x0a\x09\x66\x09\x4e\x61\x6d\x65\x20\x6f\x66\x20" \
+"\x54\x41\x52\x46\x49\x4c\x45\x20\x28\x27\x2d\x27\x20\x66\x6f\x72" \
+"\x20\x73\x74\x64\x69\x6e\x2f\x6f\x75\x74\x29\x0a\x09\x43\x09\x43" \
+"\x68\x61\x6e\x67\x65\x20\x74\x6f\x20\x44\x49\x52\x20\x62\x65\x66" \
+"\x6f\x72\x65\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x0a\x09\x76" \
+"\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x7a\x09\x28\x44\x65\x29" \
+"\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x75\x73\x69\x6e\x67\x20\x67" \
+"\x7a\x69\x70\x0a\x09\x6a\x09\x28\x44\x65\x29\x63\x6f\x6d\x70\x72" \
+"\x65\x73\x73\x20\x75\x73\x69\x6e\x67\x20\x62\x7a\x69\x70\x32\x0a" \
+"\x09\x4f\x09\x45\x78\x74\x72\x61\x63\x74\x20\x74\x6f\x20\x73\x74" \
+"\x64\x6f\x75\x74\x0a\x09\x68\x09\x46\x6f\x6c\x6c\x6f\x77\x20\x73" \
+"\x79\x6d\x6c\x69\x6e\x6b\x73\x0a\x09\x6d\x09\x44\x6f\x6e\x27\x74" \
+"\x20\x72\x65\x73\x74\x6f\x72\x65\x20\x6d\x74\x69\x6d\x65\x0a\x09" \
+"\x65\x78\x63\x6c\x75\x64\x65\x09\x46\x69\x6c\x65\x20\x74\x6f\x20" \
+"\x65\x78\x63\x6c\x75\x64\x65\x0a\x09\x58\x09\x46\x69\x6c\x65\x20" \
+"\x77\x69\x74\x68\x20\x6e\x61\x6d\x65\x73\x20\x74\x6f\x20\x65\x78" \
+"\x63\x6c\x75\x64\x65\x0a\x09\x54\x09\x46\x69\x6c\x65\x20\x77\x69" \
+"\x74\x68\x20\x6e\x61\x6d\x65\x73\x20\x74\x6f\x20\x69\x6e\x63\x6c" \
+"\x75\x64\x65\x00\x5b\x2d\x61\x69\x5d\x20\x5b\x46\x49\x4c\x45\x5d" \
+"\x2e\x2e\x2e\x0a\x0a\x43\x6f\x70\x79\x20\x73\x74\x64\x69\x6e\x20" \
+"\x74\x6f\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x2c\x20\x61\x6e" \
+"\x64\x20\x61\x6c\x73\x6f\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74" \
+"\x0a\x0a\x09\x2d\x61\x09\x41\x70\x70\x65\x6e\x64\x20\x74\x6f\x20" \
+"\x74\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45\x73\x2c" \
+"\x20\x64\x6f\x6e\x27\x74\x20\x6f\x76\x65\x72\x77\x72\x69\x74\x65" \
+"\x0a\x09\x2d\x69\x09\x49\x67\x6e\x6f\x72\x65\x20\x69\x6e\x74\x65" \
+"\x72\x72\x75\x70\x74\x20\x73\x69\x67\x6e\x61\x6c\x73\x20\x28\x53" \
+"\x49\x47\x49\x4e\x54\x29\x00\x45\x58\x50\x52\x45\x53\x53\x49\x4f" \
+"\x4e\x20\x5d\x0a\x0a\x43\x68\x65\x63\x6b\x20\x66\x69\x6c\x65\x20" \
+"\x74\x79\x70\x65\x73\x2c\x20\x63\x6f\x6d\x70\x61\x72\x65\x20\x76" \
+"\x61\x6c\x75\x65\x73\x20\x65\x74\x63\x2e\x20\x52\x65\x74\x75\x72" \
+"\x6e\x20\x61\x20\x30\x2f\x31\x20\x65\x78\x69\x74\x20\x63\x6f\x64" \
+"\x65\x0a\x64\x65\x70\x65\x6e\x64\x69\x6e\x67\x20\x6f\x6e\x20\x6c" \
+"\x6f\x67\x69\x63\x61\x6c\x20\x76\x61\x6c\x75\x65\x20\x6f\x66\x20" \
+"\x45\x58\x50\x52\x45\x53\x53\x49\x4f\x4e\x00\x5b\x2d\x76\x5d\x20" \
"\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50" \
-"\x52\x4f\x47\x20\x70\x65\x72\x69\x6f\x64\x69\x63\x61\x6c\x6c\x79" \
-"\x0a\x0a\x09\x2d\x6e\x09\x4c\x6f\x6f\x70\x20\x70\x65\x72\x69\x6f" \
-"\x64\x20\x69\x6e\x20\x73\x65\x63\x6f\x6e\x64\x73\x20\x28\x64\x65" \
-"\x66\x61\x75\x6c\x74\x20\x32\x29\x0a\x09\x2d\x74\x09\x44\x6f\x6e" \
-"\x27\x74\x20\x70\x72\x69\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x00" \
-"\x5b\x2d\x63\x6d\x6c\x77\x4c\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e" \
-"\x2e\x2e\x0a\x0a\x43\x6f\x75\x6e\x74\x20\x6c\x69\x6e\x65\x73\x2c" \
-"\x20\x77\x6f\x72\x64\x73\x2c\x20\x61\x6e\x64\x20\x62\x79\x74\x65" \
-"\x73\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20" \
-"\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09" \
-"\x43\x6f\x75\x6e\x74\x20\x62\x79\x74\x65\x73\x0a\x09\x2d\x6d\x09" \
-"\x43\x6f\x75\x6e\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73" \
-"\x0a\x09\x2d\x6c\x09\x43\x6f\x75\x6e\x74\x20\x6e\x65\x77\x6c\x69" \
-"\x6e\x65\x73\x0a\x09\x2d\x77\x09\x43\x6f\x75\x6e\x74\x20\x77\x6f" \
-"\x72\x64\x73\x0a\x09\x2d\x4c\x09\x50\x72\x69\x6e\x74\x20\x6c\x6f" \
-"\x6e\x67\x65\x73\x74\x20\x6c\x69\x6e\x65\x20\x6c\x65\x6e\x67\x74" \
-"\x68\x00\x5b\x43\x4f\x4d\x4d\x41\x4e\x44\x5d\x2e\x2e\x2e\x0a\x0a" \
-"\x4c\x6f\x63\x61\x74\x65\x20\x61\x20\x43\x4f\x4d\x4d\x41\x4e\x44" \
-"\x00\x0a\x0a\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x75\x73\x65" \
-"\x72\x20\x6e\x61\x6d\x65\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65" \
-"\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65" \
-"\x6e\x74\x20\x65\x66\x66\x65\x63\x74\x69\x76\x65\x20\x75\x73\x65" \
-"\x72\x20\x69\x64\x00\x5b\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b" \
-"\x50\x52\x4f\x47\x20\x41\x52\x47\x53\x5d\x0a\x0a\x52\x75\x6e\x20" \
-"\x50\x52\x4f\x47\x20\x6f\x6e\x20\x65\x76\x65\x72\x79\x20\x69\x74" \
-"\x65\x6d\x20\x67\x69\x76\x65\x6e\x20\x62\x79\x20\x73\x74\x64\x69" \
-"\x6e\x0a\x0a\x09\x2d\x70\x09\x41\x73\x6b\x20\x75\x73\x65\x72\x20" \
-"\x77\x68\x65\x74\x68\x65\x72\x20\x74\x6f\x20\x72\x75\x6e\x20\x65" \
-"\x61\x63\x68\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x0a\x09\x2d\x72\x09" \
-"\x44\x6f\x6e\x27\x74\x20\x72\x75\x6e\x20\x63\x6f\x6d\x6d\x61\x6e" \
-"\x64\x20\x69\x66\x20\x69\x6e\x70\x75\x74\x20\x69\x73\x20\x65\x6d" \
-"\x70\x74\x79\x0a\x09\x2d\x30\x09\x49\x6e\x70\x75\x74\x20\x69\x73" \
-"\x20\x73\x65\x70\x61\x72\x61\x74\x65\x64\x20\x62\x79\x20\x4e\x55" \
-"\x4c\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x74" \
-"\x09\x50\x72\x69\x6e\x74\x20\x74\x68\x65\x20\x63\x6f\x6d\x6d\x61" \
-"\x6e\x64\x20\x6f\x6e\x20\x73\x74\x64\x65\x72\x72\x20\x62\x65\x66" \
-"\x6f\x72\x65\x20\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x0a\x09\x2d" \
-"\x65\x5b\x53\x54\x52\x5d\x09\x53\x54\x52\x20\x73\x74\x6f\x70\x73" \
-"\x20\x69\x6e\x70\x75\x74\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e" \
-"\x67\x0a\x09\x2d\x6e\x20\x4e\x09\x50\x61\x73\x73\x20\x6e\x6f\x20" \
-"\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x4e\x20\x61\x72\x67\x73" \
-"\x20\x74\x6f\x20\x50\x52\x4f\x47\x0a\x09\x2d\x73\x20\x4e\x09\x50" \
-"\x61\x73\x73\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65" \
-"\x20\x6f\x66\x20\x6e\x6f\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e" \
-"\x20\x4e\x20\x62\x79\x74\x65\x73\x00\x46\x49\x4c\x45\x0a\x0a\x44" \
-"\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64" \
-"\x6f\x75\x74\x00\x5b\x53\x54\x52\x49\x4e\x47\x5d\x0a\x0a\x52\x65" \
-"\x70\x65\x61\x74\x65\x64\x6c\x79\x20\x6f\x75\x74\x70\x75\x74\x20" \
-"\x61\x20\x6c\x69\x6e\x65\x20\x77\x69\x74\x68\x20\x53\x54\x52\x49" \
-"\x4e\x47\x2c\x20\x6f\x72\x20\x27\x79\x27\x00\x46\x49\x4c\x45\x0a" \
-"\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73" \
-"\x74\x64\x6f\x75\x74\x00" \
+"\x52\x4f\x47\x2c\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x72\x65\x73" \
+"\x6f\x75\x72\x63\x65\x20\x75\x73\x61\x67\x65\x20\x77\x68\x65\x6e" \
+"\x20\x69\x74\x20\x65\x78\x69\x74\x73\x0a\x0a\x09\x2d\x76\x09\x56" \
+"\x65\x72\x62\x6f\x73\x65\x00\x5b\x2d\x62\x5d\x20\x5b\x2d\x6e\x43" \
+"\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x64\x53\x45\x43\x4f\x4e\x44\x53" \
+"\x5d\x20\x5b\x2d\x6d\x5d\x0a\x0a\x50\x72\x6f\x76\x69\x64\x65\x20" \
+"\x61\x20\x76\x69\x65\x77\x20\x6f\x66\x20\x70\x72\x6f\x63\x65\x73" \
+"\x73\x20\x61\x63\x74\x69\x76\x69\x74\x79\x20\x69\x6e\x20\x72\x65" \
+"\x61\x6c\x20\x74\x69\x6d\x65\x2e\x0a\x52\x65\x61\x64\x20\x74\x68" \
+"\x65\x20\x73\x74\x61\x74\x75\x73\x20\x6f\x66\x20\x61\x6c\x6c\x20" \
+"\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x20\x66\x72\x6f\x6d\x20\x2f" \
+"\x70\x72\x6f\x63\x20\x65\x61\x63\x68\x20\x53\x45\x43\x4f\x4e\x44" \
+"\x53\x0a\x61\x6e\x64\x20\x64\x69\x73\x70\x6c\x61\x79\x20\x61\x20" \
+"\x73\x63\x72\x65\x65\x6e\x66\x75\x6c\x20\x6f\x66\x20\x74\x68\x65" \
+"\x6d\x2e\x0a\x4b\x65\x79\x73\x3a\x0a\x09\x4e\x2f\x4d\x2f\x50\x2f" \
+"\x54\x3a\x20\x73\x68\x6f\x77\x20\x43\x50\x55\x20\x75\x73\x61\x67" \
+"\x65\x2c\x20\x73\x6f\x72\x74\x20\x62\x79\x20\x70\x69\x64\x2f\x6d" \
+"\x65\x6d\x2f\x63\x70\x75\x2f\x74\x69\x6d\x65\x0a\x09\x53\x3a\x20" \
+"\x73\x68\x6f\x77\x20\x6d\x65\x6d\x6f\x72\x79\x0a\x09\x52\x3a\x20" \
+"\x72\x65\x76\x65\x72\x73\x65\x20\x73\x6f\x72\x74\x0a\x09\x48\x3a" \
+"\x20\x74\x6f\x67\x67\x6c\x65\x20\x74\x68\x72\x65\x61\x64\x73\x0a" \
+"\x09\x51\x2c\x5e\x43\x3a\x20\x65\x78\x69\x74\x0a\x0a\x4f\x70\x74" \
+"\x69\x6f\x6e\x73\x3a\x0a\x09\x2d\x62\x09\x42\x61\x74\x63\x68\x20" \
+"\x6d\x6f\x64\x65\x0a\x09\x2d\x6e\x20\x4e\x09\x45\x78\x69\x74\x20" \
+"\x61\x66\x74\x65\x72\x20\x4e\x20\x69\x74\x65\x72\x61\x74\x69\x6f" \
+"\x6e\x73\x0a\x09\x2d\x64\x20\x4e\x09\x44\x65\x6c\x61\x79\x20\x62" \
+"\x65\x74\x77\x65\x65\x6e\x20\x75\x70\x64\x61\x74\x65\x73\x0a\x09" \
+"\x2d\x6d\x09\x53\x61\x6d\x65\x20\x61\x73\x20\x27\x73\x27\x20\x6b" \
+"\x65\x79\x00\x5b\x2d\x63\x5d\x20\x46\x49\x4c\x45\x2e\x2e\x2e\x0a" \
+"\x0a\x55\x70\x64\x61\x74\x65\x20\x74\x68\x65\x20\x6c\x61\x73\x74" \
+"\x2d\x6d\x6f\x64\x69\x66\x69\x65\x64\x20\x64\x61\x74\x65\x20\x6f" \
+"\x6e\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6e\x20\x46\x49\x4c\x45" \
+"\x5b\x73\x5d\x0a\x0a\x09\x2d\x63\x09\x44\x6f\x6e\x27\x74\x20\x63" \
+"\x72\x65\x61\x74\x65\x20\x66\x69\x6c\x65\x73\x00\x5b\x2d\x63\x64" \
+"\x73\x5d\x20\x53\x54\x52\x49\x4e\x47\x31\x20\x5b\x53\x54\x52\x49" \
+"\x4e\x47\x32\x5d\x0a\x0a\x54\x72\x61\x6e\x73\x6c\x61\x74\x65\x2c" \
+"\x20\x73\x71\x75\x65\x65\x7a\x65\x2c\x20\x6f\x72\x20\x64\x65\x6c" \
+"\x65\x74\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x66" \
+"\x72\x6f\x6d\x20\x73\x74\x64\x69\x6e\x2c\x20\x77\x72\x69\x74\x69" \
+"\x6e\x67\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d" \
+"\x63\x09\x54\x61\x6b\x65\x20\x63\x6f\x6d\x70\x6c\x65\x6d\x65\x6e" \
+"\x74\x20\x6f\x66\x20\x53\x54\x52\x49\x4e\x47\x31\x0a\x09\x2d\x64" \
+"\x09\x44\x65\x6c\x65\x74\x65\x20\x69\x6e\x70\x75\x74\x20\x63\x68" \
+"\x61\x72\x61\x63\x74\x65\x72\x73\x20\x63\x6f\x64\x65\x64\x20\x53" \
+"\x54\x52\x49\x4e\x47\x31\x0a\x09\x2d\x73\x09\x53\x71\x75\x65\x65" \
+"\x7a\x65\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x6f\x75\x74\x70" \
+"\x75\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x6f\x66" \
+"\x20\x53\x54\x52\x49\x4e\x47\x32\x20\x69\x6e\x74\x6f\x20\x6f\x6e" \
+"\x65\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x00\x0a\x0a\x52\x65" \
+"\x74\x75\x72\x6e\x20\x61\x6e\x20\x65\x78\x69\x74\x20\x63\x6f\x64" \
+"\x65\x20\x6f\x66\x20\x54\x52\x55\x45\x20\x28\x30\x29\x00\x5b\x77" \
+"\x5d\x20\x5b\x68\x5d\x0a\x0a\x50\x72\x69\x6e\x74\x20\x64\x69\x6d" \
+"\x65\x6e\x73\x69\x6f\x6e\x28\x73\x29\x20\x6f\x66\x20\x73\x74\x64" \
+"\x69\x6e\x27\x73\x20\x74\x65\x72\x6d\x69\x6e\x61\x6c\x2c\x20\x6f" \
+"\x6e\x20\x65\x72\x72\x6f\x72\x20\x72\x65\x74\x75\x72\x6e\x20\x38" \
+"\x30\x78\x32\x35\x00\x5b\x2d\x63\x20\x4d\x41\x58\x5f\x4d\x4f\x55" \
+"\x4e\x54\x5f\x43\x4f\x55\x4e\x54\x5d\x20\x5b\x2d\x69\x20\x44\x41" \
+"\x59\x53\x5d\x20\x5b\x2d\x43\x20\x4d\x4f\x55\x4e\x54\x5f\x43\x4f" \
+"\x55\x4e\x54\x5d\x20\x5b\x2d\x4c\x20\x4c\x41\x42\x45\x4c\x5d\x20" \
+"\x42\x4c\x4f\x43\x4b\x44\x45\x56\x0a\x0a\x41\x64\x6a\x75\x73\x74" \
+"\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x20\x6f\x70\x74\x69" \
+"\x6f\x6e\x73\x20\x6f\x6e\x20\x65\x78\x74\x5b\x32\x33\x5d\x20\x66" \
+"\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x73\x00\x5b\x4f\x50\x54\x49" \
+"\x4f\x4e\x53\x5d\x20\x46\x49\x4c\x45\x53\x59\x53\x54\x45\x4d\x7c" \
+"\x44\x49\x52\x45\x43\x54\x4f\x52\x59\x0a\x0a\x55\x6e\x6d\x6f\x75" \
+"\x6e\x74\x20\x66\x69\x6c\x65\x20\x73\x79\x73\x74\x65\x6d\x73\x0a" \
+"\x0a\x09\x2d\x72\x09\x54\x72\x79\x20\x74\x6f\x20\x72\x65\x6d\x6f" \
+"\x75\x6e\x74\x20\x64\x65\x76\x69\x63\x65\x73\x20\x61\x73\x20\x72" \
+"\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x20\x69\x66\x20\x6d\x6f\x75\x6e" \
+"\x74\x20\x69\x73\x20\x62\x75\x73\x79\x0a\x09\x2d\x6c\x09\x4c\x61" \
+"\x7a\x79\x20\x75\x6d\x6f\x75\x6e\x74\x20\x28\x64\x65\x74\x61\x63" \
+"\x68\x20\x66\x69\x6c\x65\x73\x79\x73\x74\x65\x6d\x29\x0a\x09\x2d" \
+"\x66\x09\x46\x6f\x72\x63\x65\x20\x75\x6d\x6f\x75\x6e\x74\x20\x28" \
+"\x69\x2e\x65\x2e\x2c\x20\x75\x6e\x72\x65\x61\x63\x68\x61\x62\x6c" \
+"\x65\x20\x4e\x46\x53\x20\x73\x65\x72\x76\x65\x72\x29\x0a\x09\x2d" \
+"\x44\x09\x44\x6f\x6e\x27\x74\x20\x66\x72\x65\x65\x20\x6c\x6f\x6f" \
+"\x70\x20\x64\x65\x76\x69\x63\x65\x20\x65\x76\x65\x6e\x20\x69\x66" \
+"\x20\x69\x74\x20\x68\x61\x73\x20\x62\x65\x65\x6e\x20\x75\x73\x65" \
+"\x64\x00\x5b\x2d\x61\x6d\x6e\x72\x73\x70\x76\x5d\x0a\x0a\x50\x72" \
+"\x69\x6e\x74\x20\x73\x79\x73\x74\x65\x6d\x20\x69\x6e\x66\x6f\x72" \
+"\x6d\x61\x74\x69\x6f\x6e\x0a\x0a\x09\x2d\x61\x09\x50\x72\x69\x6e" \
+"\x74\x20\x61\x6c\x6c\x0a\x09\x2d\x6d\x09\x54\x68\x65\x20\x6d\x61" \
+"\x63\x68\x69\x6e\x65\x20\x28\x68\x61\x72\x64\x77\x61\x72\x65\x29" \
+"\x20\x74\x79\x70\x65\x0a\x09\x2d\x6e\x09\x48\x6f\x73\x74\x6e\x61" \
+"\x6d\x65\x0a\x09\x2d\x72\x09\x4f\x53\x20\x72\x65\x6c\x65\x61\x73" \
+"\x65\x0a\x09\x2d\x73\x09\x4f\x53\x20\x6e\x61\x6d\x65\x20\x28\x64" \
+"\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x70\x09\x50\x72\x6f\x63" \
+"\x65\x73\x73\x6f\x72\x20\x74\x79\x70\x65\x0a\x09\x2d\x76\x09\x4f" \
+"\x53\x20\x76\x65\x72\x73\x69\x6f\x6e\x00\x5b\x2d\x66\x61\x5d\x5b" \
+"\x2d\x74\x20\x4e\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a" \
+"\x0a\x43\x6f\x6e\x76\x65\x72\x74\x20\x73\x70\x61\x63\x65\x73\x20" \
+"\x74\x6f\x20\x74\x61\x62\x73\x2c\x20\x77\x72\x69\x74\x69\x6e\x67" \
+"\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x61\x2c" \
+"\x2d\x2d\x61\x6c\x6c\x09\x43\x6f\x6e\x76\x65\x72\x74\x20\x61\x6c" \
+"\x6c\x20\x62\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x66\x2c\x2d\x2d\x66" \
+"\x69\x72\x73\x74\x2d\x6f\x6e\x6c\x79\x09\x43\x6f\x6e\x76\x65\x72" \
+"\x74\x20\x6f\x6e\x6c\x79\x20\x6c\x65\x61\x64\x69\x6e\x67\x20\x62" \
+"\x6c\x61\x6e\x6b\x73\x0a\x09\x2d\x74\x2c\x2d\x2d\x74\x61\x62\x73" \
+"\x3d\x4e\x09\x54\x61\x62\x73\x74\x6f\x70\x73\x20\x65\x76\x65\x72" \
+"\x79\x20\x4e\x20\x63\x68\x61\x72\x73\x00\x5b\x2d\x63\x64\x75\x5d" \
+"\x5b\x2d\x66\x2c\x73\x2c\x77\x20\x4e\x5d\x20\x5b\x49\x4e\x50\x55" \
+"\x54\x20\x5b\x4f\x55\x54\x50\x55\x54\x5d\x5d\x0a\x0a\x44\x69\x73" \
+"\x63\x61\x72\x64\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6c" \
+"\x69\x6e\x65\x73\x0a\x0a\x09\x2d\x63\x09\x50\x72\x65\x66\x69\x78" \
+"\x20\x6c\x69\x6e\x65\x73\x20\x62\x79\x20\x74\x68\x65\x20\x6e\x75" \
+"\x6d\x62\x65\x72\x20\x6f\x66\x20\x6f\x63\x63\x75\x72\x72\x65\x6e" \
+"\x63\x65\x73\x0a\x09\x2d\x64\x09\x4f\x6e\x6c\x79\x20\x70\x72\x69" \
+"\x6e\x74\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6c\x69\x6e" \
+"\x65\x73\x0a\x09\x2d\x75\x09\x4f\x6e\x6c\x79\x20\x70\x72\x69\x6e" \
+"\x74\x20\x75\x6e\x69\x71\x75\x65\x20\x6c\x69\x6e\x65\x73\x0a\x09" \
+"\x2d\x66\x20\x4e\x09\x53\x6b\x69\x70\x20\x66\x69\x72\x73\x74\x20" \
+"\x4e\x20\x66\x69\x65\x6c\x64\x73\x0a\x09\x2d\x73\x20\x4e\x09\x53" \
+"\x6b\x69\x70\x20\x66\x69\x72\x73\x74\x20\x4e\x20\x63\x68\x61\x72" \
+"\x73\x20\x28\x61\x66\x74\x65\x72\x20\x61\x6e\x79\x20\x73\x6b\x69" \
+"\x70\x70\x65\x64\x20\x66\x69\x65\x6c\x64\x73\x29\x0a\x09\x2d\x77" \
+"\x20\x4e\x09\x43\x6f\x6d\x70\x61\x72\x65\x20\x4e\x20\x63\x68\x61" \
+"\x72\x61\x63\x74\x65\x72\x73\x20\x69\x6e\x20\x6c\x69\x6e\x65\x00" \
+"\x5b\x2d\x75\x64\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x0a\x0a\x43\x6f" \
+"\x6e\x76\x65\x72\x74\x20\x46\x49\x4c\x45\x20\x69\x6e\x2d\x70\x6c" \
+"\x61\x63\x65\x20\x66\x72\x6f\x6d\x20\x55\x6e\x69\x78\x20\x74\x6f" \
+"\x20\x44\x4f\x53\x20\x66\x6f\x72\x6d\x61\x74\x2e\x0a\x57\x68\x65" \
+"\x6e\x20\x6e\x6f\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x67\x69\x76" \
+"\x65\x6e\x2c\x20\x75\x73\x65\x20\x73\x74\x64\x69\x6e\x2f\x73\x74" \
+"\x64\x6f\x75\x74\x2e\x0a\x0a\x09\x2d\x75\x09\x64\x6f\x73\x32\x75" \
+"\x6e\x69\x78\x0a\x09\x2d\x64\x09\x75\x6e\x69\x78\x32\x64\x6f\x73" \
+"\x00\x5b\x2d\x63\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e" \
+"\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c" \
+"\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d" \
+"\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
+"\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d\x63\x66" \
+"\x76\x43\x46\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a" \
+"\x09\x2d\x63\x09\x57\x72\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64" \
+"\x6f\x75\x74\x0a\x09\x2d\x66\x09\x46\x6f\x72\x63\x65\x0a\x09\x2d" \
+"\x76\x09\x56\x65\x72\x62\x6f\x73\x65\x0a\x09\x2d\x46\x09\x44\x6f" \
+"\x6e\x27\x74\x20\x73\x74\x6f\x72\x65\x20\x6f\x72\x20\x76\x65\x72" \
+"\x69\x66\x79\x20\x63\x68\x65\x63\x6b\x73\x75\x6d\x00\x5b\x2d\x63" \
+"\x66\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x44\x65" \
+"\x63\x6f\x6d\x70\x72\x65\x73\x73\x20\x46\x49\x4c\x45\x20\x28\x6f" \
+"\x72\x20\x73\x74\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x57\x72" \
+"\x69\x74\x65\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x0a\x09\x2d" \
+"\x66\x09\x46\x6f\x72\x63\x65\x00\x5b\x2d\x6f\x70\x74\x73\x5b\x6d" \
+"\x6f\x64\x69\x66\x69\x65\x72\x73\x5d\x5d\x20\x46\x49\x4c\x45\x5b" \
+"\x2e\x7a\x69\x70\x5d\x20\x5b\x4c\x49\x53\x54\x5d\x20\x5b\x2d\x78" \
+"\x20\x58\x4c\x49\x53\x54\x5d\x20\x5b\x2d\x64\x20\x44\x49\x52\x5d" \
+"\x0a\x0a\x45\x78\x74\x72\x61\x63\x74\x20\x66\x69\x6c\x65\x73\x20" \
+"\x66\x72\x6f\x6d\x20\x5a\x49\x50\x20\x61\x72\x63\x68\x69\x76\x65" \
+"\x73\x0a\x0a\x09\x2d\x6c\x09\x4c\x69\x73\x74\x20\x61\x72\x63\x68" \
+"\x69\x76\x65\x20\x63\x6f\x6e\x74\x65\x6e\x74\x73\x20\x28\x77\x69" \
+"\x74\x68\x20\x2d\x71\x20\x66\x6f\x72\x20\x73\x68\x6f\x72\x74\x20" \
+"\x66\x6f\x72\x6d\x29\x0a\x09\x2d\x6e\x09\x4e\x65\x76\x65\x72\x20" \
+"\x6f\x76\x65\x72\x77\x72\x69\x74\x65\x20\x66\x69\x6c\x65\x73\x20" \
+"\x28\x64\x65\x66\x61\x75\x6c\x74\x29\x0a\x09\x2d\x6f\x09\x4f\x76" \
+"\x65\x72\x77\x72\x69\x74\x65\x0a\x09\x2d\x70\x09\x53\x65\x6e\x64" \
+"\x20\x6f\x75\x74\x70\x75\x74\x20\x74\x6f\x20\x73\x74\x64\x6f\x75" \
+"\x74\x0a\x09\x2d\x71\x09\x51\x75\x69\x65\x74\x0a\x09\x2d\x78\x20" \
+"\x58\x4c\x53\x54\x09\x45\x78\x63\x6c\x75\x64\x65\x20\x74\x68\x65" \
+"\x73\x65\x20\x66\x69\x6c\x65\x73\x0a\x09\x2d\x64\x20\x44\x49\x52" \
+"\x09\x45\x78\x74\x72\x61\x63\x74\x20\x66\x69\x6c\x65\x73\x20\x69" \
+"\x6e\x74\x6f\x20\x44\x49\x52\x00\x0a\x0a\x44\x69\x73\x70\x6c\x61" \
+"\x79\x20\x74\x68\x65\x20\x74\x69\x6d\x65\x20\x73\x69\x6e\x63\x65" \
+"\x20\x74\x68\x65\x20\x6c\x61\x73\x74\x20\x62\x6f\x6f\x74\x00\x4e" \
+"\x0a\x0a\x50\x61\x75\x73\x65\x20\x66\x6f\x72\x20\x4e\x20\x6d\x69" \
+"\x63\x72\x6f\x73\x65\x63\x6f\x6e\x64\x73\x00\x5b\x2d\x6f\x20\x4f" \
+"\x55\x54\x46\x49\x4c\x45\x5d\x20\x5b\x49\x4e\x46\x49\x4c\x45\x5d" \
+"\x0a\x0a\x55\x75\x64\x65\x63\x6f\x64\x65\x20\x61\x20\x66\x69\x6c" \
+"\x65\x0a\x46\x69\x6e\x64\x73\x20\x4f\x55\x54\x46\x49\x4c\x45\x20" \
+"\x69\x6e\x20\x75\x75\x65\x6e\x63\x6f\x64\x65\x64\x20\x73\x6f\x75" \
+"\x72\x63\x65\x20\x75\x6e\x6c\x65\x73\x73\x20\x2d\x6f\x20\x69\x73" \
+"\x20\x67\x69\x76\x65\x6e\x00\x5b\x2d\x6d\x5d\x20\x5b\x46\x49\x4c" \
+"\x45\x5d\x20\x53\x54\x4f\x52\x45\x44\x5f\x46\x49\x4c\x45\x4e\x41" \
+"\x4d\x45\x0a\x0a\x55\x75\x65\x6e\x63\x6f\x64\x65\x20\x46\x49\x4c" \
+"\x45\x20\x28\x6f\x72\x20\x73\x74\x64\x69\x6e\x29\x20\x74\x6f\x20" \
+"\x73\x74\x64\x6f\x75\x74\x0a\x0a\x09\x2d\x6d\x09\x55\x73\x65\x20" \
+"\x62\x61\x73\x65\x36\x34\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x20" \
+"\x70\x65\x72\x20\x52\x46\x43\x31\x35\x32\x31\x00\x5b\x2d\x6e\x20" \
+"\x53\x45\x43\x5d\x20\x5b\x2d\x74\x5d\x20\x50\x52\x4f\x47\x20\x41" \
+"\x52\x47\x53\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x70\x65" \
+"\x72\x69\x6f\x64\x69\x63\x61\x6c\x6c\x79\x0a\x0a\x09\x2d\x6e\x09" \
+"\x4c\x6f\x6f\x70\x20\x70\x65\x72\x69\x6f\x64\x20\x69\x6e\x20\x73" \
+"\x65\x63\x6f\x6e\x64\x73\x20\x28\x64\x65\x66\x61\x75\x6c\x74\x20" \
+"\x32\x29\x0a\x09\x2d\x74\x09\x44\x6f\x6e\x27\x74\x20\x70\x72\x69" \
+"\x6e\x74\x20\x68\x65\x61\x64\x65\x72\x00\x5b\x2d\x63\x6d\x6c\x77" \
+"\x4c\x5d\x20\x5b\x46\x49\x4c\x45\x5d\x2e\x2e\x2e\x0a\x0a\x43\x6f" \
+"\x75\x6e\x74\x20\x6c\x69\x6e\x65\x73\x2c\x20\x77\x6f\x72\x64\x73" \
+"\x2c\x20\x61\x6e\x64\x20\x62\x79\x74\x65\x73\x20\x66\x6f\x72\x20" \
+"\x65\x61\x63\x68\x20\x46\x49\x4c\x45\x20\x28\x6f\x72\x20\x73\x74" \
+"\x64\x69\x6e\x29\x0a\x0a\x09\x2d\x63\x09\x43\x6f\x75\x6e\x74\x20" \
+"\x62\x79\x74\x65\x73\x0a\x09\x2d\x6d\x09\x43\x6f\x75\x6e\x74\x20" \
+"\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x6c\x09\x43" \
+"\x6f\x75\x6e\x74\x20\x6e\x65\x77\x6c\x69\x6e\x65\x73\x0a\x09\x2d" \
+"\x77\x09\x43\x6f\x75\x6e\x74\x20\x77\x6f\x72\x64\x73\x0a\x09\x2d" \
+"\x4c\x09\x50\x72\x69\x6e\x74\x20\x6c\x6f\x6e\x67\x65\x73\x74\x20" \
+"\x6c\x69\x6e\x65\x20\x6c\x65\x6e\x67\x74\x68\x00\x5b\x43\x4f\x4d" \
+"\x4d\x41\x4e\x44\x5d\x2e\x2e\x2e\x0a\x0a\x4c\x6f\x63\x61\x74\x65" \
+"\x20\x61\x20\x43\x4f\x4d\x4d\x41\x4e\x44\x00\x0a\x0a\x50\x72\x69" \
+"\x6e\x74\x20\x74\x68\x65\x20\x75\x73\x65\x72\x20\x6e\x61\x6d\x65" \
+"\x20\x61\x73\x73\x6f\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68" \
+"\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6e\x74\x20\x65\x66\x66" \
+"\x65\x63\x74\x69\x76\x65\x20\x75\x73\x65\x72\x20\x69\x64\x00\x5b" \
+"\x4f\x50\x54\x49\x4f\x4e\x53\x5d\x20\x5b\x50\x52\x4f\x47\x20\x41" \
+"\x52\x47\x53\x5d\x0a\x0a\x52\x75\x6e\x20\x50\x52\x4f\x47\x20\x6f" \
+"\x6e\x20\x65\x76\x65\x72\x79\x20\x69\x74\x65\x6d\x20\x67\x69\x76" \
+"\x65\x6e\x20\x62\x79\x20\x73\x74\x64\x69\x6e\x0a\x0a\x09\x2d\x70" \
+"\x09\x41\x73\x6b\x20\x75\x73\x65\x72\x20\x77\x68\x65\x74\x68\x65" \
+"\x72\x20\x74\x6f\x20\x72\x75\x6e\x20\x65\x61\x63\x68\x20\x63\x6f" \
+"\x6d\x6d\x61\x6e\x64\x0a\x09\x2d\x72\x09\x44\x6f\x6e\x27\x74\x20" \
+"\x72\x75\x6e\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x69\x66\x20\x69" \
+"\x6e\x70\x75\x74\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x0a\x09\x2d" \
+"\x30\x09\x49\x6e\x70\x75\x74\x20\x69\x73\x20\x73\x65\x70\x61\x72" \
+"\x61\x74\x65\x64\x20\x62\x79\x20\x4e\x55\x4c\x20\x63\x68\x61\x72" \
+"\x61\x63\x74\x65\x72\x73\x0a\x09\x2d\x74\x09\x50\x72\x69\x6e\x74" \
+"\x20\x74\x68\x65\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x20\x6f\x6e\x20" \
+"\x73\x74\x64\x65\x72\x72\x20\x62\x65\x66\x6f\x72\x65\x20\x65\x78" \
+"\x65\x63\x75\x74\x69\x6f\x6e\x0a\x09\x2d\x65\x5b\x53\x54\x52\x5d" \
+"\x09\x53\x54\x52\x20\x73\x74\x6f\x70\x73\x20\x69\x6e\x70\x75\x74" \
+"\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x0a\x09\x2d\x6e\x20" \
+"\x4e\x09\x50\x61\x73\x73\x20\x6e\x6f\x20\x6d\x6f\x72\x65\x20\x74" \
+"\x68\x61\x6e\x20\x4e\x20\x61\x72\x67\x73\x20\x74\x6f\x20\x50\x52" \
+"\x4f\x47\x0a\x09\x2d\x73\x20\x4e\x09\x50\x61\x73\x73\x20\x63\x6f" \
+"\x6d\x6d\x61\x6e\x64\x20\x6c\x69\x6e\x65\x20\x6f\x66\x20\x6e\x6f" \
+"\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x4e\x20\x62\x79\x74" \
+"\x65\x73\x00\x46\x49\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d\x70\x72" \
+"\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x00\x5b\x53" \
+"\x54\x52\x49\x4e\x47\x5d\x0a\x0a\x52\x65\x70\x65\x61\x74\x65\x64" \
+"\x6c\x79\x20\x6f\x75\x74\x70\x75\x74\x20\x61\x20\x6c\x69\x6e\x65" \
+"\x20\x77\x69\x74\x68\x20\x53\x54\x52\x49\x4e\x47\x2c\x20\x6f\x72" \
+"\x20\x27\x79\x27\x00\x46\x49\x4c\x45\x0a\x0a\x44\x65\x63\x6f\x6d" \
+"\x70\x72\x65\x73\x73\x20\x74\x6f\x20\x73\x74\x64\x6f\x75\x74\x00" \
#define PACKED_USAGE \
-0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x73,0x21,0xbe,0x84,0x00,0x13,0xc5,0xdf, \
-0x80,0x72,0x70,0x67,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0x60, \
-0x3a,0xc9,0x00,0x03,0xac,0x03,0xe8,0x73,0xd7,0x3a,0xf0,0xc8,0xa5,0xbb,0xb8,0x51, \
-0x43,0xa0,0x1a,0x1a,0x00,0x11,0x7a,0x03,0xbb,0xec,0x07,0xc1,0xf4,0xa7,0xbd,0xbd, \
-0xce,0xb0,0x4c,0xba,0x83,0x2a,0xd3,0x65,0x51,0x93,0x43,0x5b,0x3e,0xe6,0x6e,0xe3, \
-0xa8,0x5d,0xe1,0xa8,0xeb,0x7d,0xf7,0x07,0xaf,0xbb,0x53,0x81,0x54,0x54,0x3c,0x78, \
-0x48,0x57,0x89,0xdb,0xc7,0x9b,0x77,0x79,0xde,0xa4,0x94,0xf5,0x8b,0x6f,0xb7,0x3b, \
-0x6f,0x97,0x76,0xd8,0x85,0x33,0x6d,0xb0,0x64,0xe2,0xe8,0x75,0x90,0x2b,0x25,0xb4, \
-0xb6,0x65,0xa9,0x83,0x49,0x16,0xc6,0x5f,0x2b,0xd3,0xaf,0xbd,0xef,0x35,0xf6,0x32, \
-0xf9,0xe0,0x9d,0xcb,0xd9,0xa6,0x58,0x2d,0x34,0xb2,0xbc,0x67,0xc3,0x42,0x08,0x68, \
-0x00,0x26,0x46,0x83,0x51,0x81,0x00,0x53,0xd3,0x26,0x9a,0x9b,0x52,0x3d,0x3d,0x13, \
-0x02,0x7a,0x99,0xa9,0xe8,0x99,0x43,0x6a,0x32,0x0d,0x4f,0x40,0x9a,0x08,0x20,0x20, \
-0x4c,0x46,0x84,0xd4,0xc2,0x7a,0x23,0x44,0xf4,0x27,0xa9,0xa6,0x86,0x81,0xa3,0x46, \
-0xd4,0x07,0xa8,0x34,0x00,0xd3,0x08,0x89,0x4c,0x93,0x53,0x27,0x89,0xaa,0x7a,0x27, \
-0xb5,0x13,0xc9,0x1a,0x06,0x41,0x81,0x0c,0x8d,0x00,0x00,0x34,0x03,0x46,0x43,0x09, \
-0x34,0xa1,0x08,0x40,0x13,0x04,0xa6,0x1a,0x09,0x8a,0x78,0x43,0x4d,0x51,0xb1,0x27, \
-0xa4,0x62,0x3d,0x4d,0x34,0xd0,0x7a,0x80,0x00,0x62,0x08,0x94,0x99,0x01,0x04,0xc4, \
-0xc8,0x14,0xf2,0x53,0xc2,0x69,0x3d,0x46,0xda,0x53,0x6a,0x79,0x4c,0xd4,0xf4,0xd1, \
-0x34,0x01,0xa1,0x90,0x00,0x00,0x09,0x11,0x08,0x26,0x4d,0x01,0x32,0x00,0x9a,0x68, \
-0x9b,0x46,0x91,0xa0,0xa6,0x4f,0x09,0x4f,0xc2,0xa7,0xa6,0x98,0x81,0x34,0x3d,0x11, \
-0x9a,0x86,0x9e,0x9f,0x49,0x7c,0xdd,0x96,0xf6,0x45,0xfc,0xfd,0x79,0x5f,0xf9,0xdf, \
-0x0f,0x7b,0x7b,0x96,0x6b,0x7d,0x7f,0x6e,0xd8,0x3d,0x97,0xd9,0xfb,0x3d,0xf0,0x41, \
-0x14,0x0f,0xfe,0xd5,0x75,0x32,0x27,0xa8,0xf9,0xbf,0x01,0xd2,0x71,0x7d,0xdc,0x67, \
-0x8b,0x04,0x1f,0x7f,0xfa,0xa6,0xec,0x9a,0xfd,0xff,0x52,0x59,0xc5,0xbf,0x4a,0xad, \
-0x2d,0x2e,0xa9,0xab,0xbc,0x3e,0xd1,0x1b,0x24,0xf5,0x46,0xaf,0x55,0x9d,0x4c,0xc1, \
-0xb1,0xc3,0x7c,0x78,0xa5,0x24,0x25,0x75,0x4e,0x55,0xd6,0xa8,0x22,0xb1,0xf7,0xf4, \
-0xd3,0x38,0xff,0x4e,0x37,0x63,0x8b,0x1b,0xdf,0xf7,0xae,0x5b,0x06,0xaa,0x80,0xd7, \
-0x22,0x32,0x47,0xe7,0x5b,0xcd,0xe9,0x87,0x60,0xab,0xc3,0xe4,0x34,0x99,0xeb,0x26, \
-0x02,0xd2,0x04,0x32,0xa0,0x43,0x04,0xaf,0xf9,0xd8,0x98,0xa5,0x5f,0x7b,0xf1,0xfa, \
-0xbe,0xa7,0x7c,0x0f,0x03,0xc6,0x26,0xfe,0x7d,0x83,0xef,0xa6,0xf9,0x64,0xd5,0x16, \
-0xdf,0x77,0x02,0x7f,0x36,0xcd,0x4f,0xfb,0x6f,0x2b,0x2f,0xe2,0xa2,0x21,0x68,0xd5, \
-0x5d,0x0f,0x9c,0x6a,0x82,0xa4,0xe0,0x86,0x3a,0x95,0x54,0x29,0x19,0x7d,0xce,0x18, \
-0x9e,0xdb,0x16,0x8b,0x1e,0xcd,0xbf,0xe0,0x15,0x55,0xb1,0x3e,0x66,0x60,0x18,0x33, \
-0xfb,0xe5,0x8d,0x8c,0x61,0x98,0x33,0x22,0x00,0x00,0x07,0x77,0x02,0x71,0x19,0x00, \
-0x14,0x0d,0x7f,0x1d,0xfe,0x18,0xbd,0x1e,0x55,0xd3,0xb8,0x5b,0x06,0xe3,0xfb,0x9e, \
-0x5d,0xfc,0xe2,0x95,0x62,0x1e,0x3a,0xde,0x31,0x31,0x6e,0x55,0x50,0xa6,0xc7,0xc6, \
-0xa9,0x22,0x94,0xc0,0x68,0x67,0xb8,0x6a,0xeb,0xd5,0x98,0xf5,0xf4,0x3f,0x05,0x19, \
-0xd8,0x24,0x5e,0xba,0x5d,0x9a,0xba,0xcd,0x40,0x4e,0x66,0x71,0x70,0x4a,0x4c,0x55, \
-0xdd,0x78,0x9a,0xc8,0x66,0xa2,0xf8,0xb3,0x47,0xc5,0x92,0x95,0xca,0xe9,0x62,0x40, \
-0x17,0x19,0xc8,0xd9,0x2d,0xa7,0x31,0x51,0xb8,0x47,0xcb,0x5c,0x02,0x49,0x98,0xbc, \
-0x2a,0x9b,0x85,0xbd,0x9f,0x4d,0x33,0x0d,0x0e,0x8f,0x9e,0x29,0x2a,0xc5,0xc6,0x03, \
-0x6f,0xdc,0x57,0x10,0x50,0x32,0x03,0x2f,0x12,0xbd,0xc6,0x39,0xb9,0xb7,0xf4,0x3b, \
-0x90,0x37,0x59,0xdc,0x3c,0x77,0x78,0xa9,0xf6,0x6b,0xa7,0x94,0x99,0x67,0x42,0x37, \
-0x1d,0x94,0x2b,0x7e,0xcf,0xc2,0xee,0x3d,0x4d,0xda,0x9a,0xc2,0xc0,0x98,0xf9,0xb6, \
-0x38,0x49,0x2b,0x2a,0xc7,0xb6,0xa5,0xb9,0x96,0xc0,0x20,0x5e,0xf6,0x02,0x5d,0xc0, \
-0xc2,0xc1,0xc8,0x32,0xed,0x11,0x8a,0x86,0x88,0x36,0xce,0x26,0x62,0xd6,0x81,0x90, \
-0xf0,0xbd,0x3e,0xee,0x4f,0xc5,0xf1,0x57,0x3c,0x9c,0x5f,0x5d,0xb8,0x84,0x9c,0xcf, \
-0x51,0x17,0x33,0xae,0xdf,0xb6,0xce,0x4e,0xab,0xca,0x40,0xd7,0x42,0xb5,0x6f,0x3e, \
-0x1f,0x73,0x07,0x00,0xac,0x5e,0x62,0xb8,0xd1,0x06,0xac,0xf6,0xb7,0x08,0x33,0x65, \
-0x94,0x6c,0x9a,0xd3,0xd3,0x85,0xf7,0x80,0x32,0x2a,0x80,0x10,0xcb,0x9e,0x20,0x66, \
-0x60,0xcc,0x5c,0xa0,0xa2,0x1e,0xf5,0x3f,0x09,0x82,0x8d,0x8d,0x3f,0x8b,0x82,0xac, \
-0x49,0xf1,0xdc,0xcc,0x69,0xe7,0x7b,0x55,0x4d,0xf0,0xe5,0xcb,0x02,0x55,0x5b,0x49, \
-0xfe,0xb5,0x3c,0xb2,0x11,0x64,0xe4,0x4c,0x58,0x30,0xda,0xdc,0x5b,0xcc,0x9a,0xdc, \
-0xeb,0x33,0x7b,0x8a,0x2b,0x1f,0x1a,0x77,0xee,0x1d,0x56,0x57,0x96,0x3c,0x70,0x4e, \
-0xdb,0x42,0xac,0x56,0x09,0x8d,0x6d,0xdb,0xad,0xd8,0x2d,0x3f,0xbc,0x2e,0xa2,0xf4, \
-0x75,0x87,0x70,0xe7,0x0d,0x97,0x6d,0x6d,0x27,0x1d,0x40,0xdf,0x31,0xb9,0xcd,0xfc, \
-0x70,0xa2,0x07,0xae,0x22,0x28,0x02,0x05,0x5a,0xe0,0x42,0x57,0xa7,0x9c,0xde,0x87, \
-0x91,0xfd,0xec,0xe8,0x07,0x99,0xe7,0xfb,0x68,0x43,0x02,0x49,0xcc,0x65,0x19,0x26, \
-0xe7,0xd3,0x4c,0x44,0x22,0x3e,0xe1,0x82,0xa7,0xb7,0xbf,0xae,0xfe,0x38,0xfb,0x18, \
-0x4e,0x0a,0x6e,0xab,0xfc,0x3b,0x96,0xc5,0x49,0xd4,0xa3,0xc6,0x9c,0x0a,0x40,0x6b, \
-0x56,0x68,0xd4,0x4c,0x1d,0xcd,0x17,0xa9,0x8a,0xd0,0xc6,0x73,0x9c,0x89,0x50,0x2b, \
-0x49,0x54,0x0f,0xcb,0xd4,0xd0,0x28,0xe3,0xec,0x1c,0xf5,0xbb,0xd3,0xe8,0x34,0x41, \
-0x5e,0x73,0xbc,0x26,0x82,0x04,0x12,0x02,0xc6,0x5b,0x5f,0x6d,0xa3,0xc2,0x31,0x48, \
-0x6b,0x31,0x12,0xac,0xba,0x10,0xc4,0x04,0x84,0xa7,0x32,0xf1,0xd2,0x55,0xa8,0x34, \
-0x20,0x0f,0x76,0xc8,0xe4,0x58,0x92,0x0f,0xd0,0x79,0xdf,0x4b,0xfb,0x2a,0x7e,0xc6, \
-0xaf,0x63,0xaa,0xc7,0x7f,0xe1,0x18,0x61,0x7f,0x32,0x82,0x51,0x13,0x7d,0x35,0xec, \
-0x60,0x30,0x00,0xad,0x06,0x7b,0x6d,0xd1,0x99,0x71,0xd9,0x6e,0x43,0xe5,0x57,0x18, \
-0xf5,0x7a,0x92,0xdf,0x18,0xc0,0xe5,0x28,0x60,0x63,0x66,0x62,0x75,0x55,0xa2,0xf6, \
-0x88,0x65,0x27,0x8e,0x13,0xb7,0x9c,0x50,0x28,0xd9,0x32,0x54,0x7d,0x78,0x95,0x60, \
-0x42,0x4a,0x81,0xb0,0x40,0xd6,0xc5,0x7a,0x0b,0xcc,0x06,0x42,0x81,0x2d,0x85,0x60, \
-0xcc,0x42,0x05,0xe7,0xb2,0x96,0xf4,0xe1,0xd7,0x22,0xce,0x45,0xb4,0x0a,0x9c,0xef, \
-0x3c,0x51,0xc9,0x22,0xa0,0xa6,0x72,0x8a,0xd0,0x9c,0x9a,0xc2,0xe9,0xbd,0x06,0x62, \
-0xbf,0x97,0x8a,0x2c,0xf4,0x32,0x28,0x70,0x8d,0x6e,0xc7,0xab,0x25,0x03,0xc0,0x5a, \
-0xb3,0xd0,0x62,0x3c,0x18,0x47,0x5e,0xd5,0x82,0x3b,0x36,0x75,0xc5,0x7c,0x4a,0xdf, \
-0xfb,0x11,0x43,0xa7,0x17,0x46,0x69,0xd5,0xd8,0x8e,0xee,0x1d,0x26,0x9f,0xc4,0x76, \
-0x15,0x55,0x77,0x36,0xf0,0x44,0x11,0xd1,0x13,0x61,0xd2,0x66,0x10,0xc1,0xea,0xef, \
-0x9e,0x26,0x57,0x12,0x1e,0x4f,0x6f,0xb3,0x0c,0x61,0x12,0x7e,0xd4,0x4a,0x1c,0x44, \
-0xab,0x2e,0xbd,0xb6,0x63,0x79,0xd9,0x7f,0x1e,0x74,0x40,0xf7,0x72,0x05,0x91,0x0b, \
-0x19,0x07,0x07,0x39,0x52,0xb0,0x48,0x21,0x0b,0x31,0x3d,0x57,0x1d,0xcb,0x8d,0xa2, \
-0xd5,0x3d,0xdb,0x29,0x21,0x2e,0xc4,0x8c,0xfe,0x2d,0x19,0xa6,0x74,0xb0,0x7f,0xf7, \
-0x8e,0x1e,0xf7,0x1a,0xcb,0xd4,0xe0,0x47,0x6b,0x3f,0xf4,0xcb,0xb8,0x2f,0xc8,0x82, \
-0x09,0xef,0xb0,0x17,0x54,0x0c,0xa0,0x39,0x3e,0x24,0x7c,0x8f,0x7f,0x66,0x56,0x6e, \
-0x8a,0x7c,0x89,0xba,0x07,0x4a,0xe8,0xc7,0x93,0x8e,0x99,0x6f,0x9a,0xe9,0xed,0xde, \
-0x66,0xb4,0x18,0xb9,0x38,0x9d,0x1c,0x31,0xe4,0x08,0x46,0xf3,0xbc,0x79,0x72,0xe9, \
-0xdd,0xc7,0xf2,0xe0,0xa3,0x3f,0xe9,0xfc,0x2f,0xc3,0x30,0xa2,0x7d,0xb5,0xb3,0xef, \
-0xee,0x73,0xef,0xcc,0x10,0xb5,0x62,0x6e,0x62,0xbd,0x79,0xc3,0xf8,0x39,0xfc,0xd7, \
-0x2c,0xf4,0xa7,0x7e,0x93,0xc3,0xc7,0x93,0xdf,0xc6,0xf1,0x8b,0xd8,0x85,0x5e,0xa5, \
-0x1b,0x73,0x81,0xd0,0x60,0xec,0x4a,0xc0,0x23,0xec,0x86,0x49,0x8d,0x9a,0x31,0x2a, \
-0xe6,0xbe,0x81,0x7c,0x88,0xc6,0xad,0x01,0x8f,0xbf,0xb4,0xf7,0x9d,0xc8,0x06,0xcc, \
-0x24,0x45,0x49,0x14,0x5e,0xdb,0x45,0x79,0xb6,0x1f,0x04,0x90,0x2b,0x14,0x10,0xda, \
-0x43,0xba,0x21,0xa4,0x33,0x93,0x50,0x1a,0x57,0x4f,0x3e,0x58,0xaa,0x56,0x22,0x71, \
-0xdf,0x34,0x3d,0x7f,0x0c,0xe9,0xec,0xf9,0xad,0x13,0x11,0xee,0xfc,0xb7,0x64,0x0f, \
-0x2b,0x7d,0x47,0x0c,0x3d,0xea,0x91,0x5b,0x5c,0x73,0xad,0xd5,0xda,0x59,0x9b,0x64, \
-0xf6,0x17,0x11,0xa5,0xaf,0x69,0xf6,0x63,0x30,0x7c,0x5c,0x25,0x07,0xbd,0x39,0x28, \
-0x4b,0x7c,0x12,0xbb,0xf6,0x51,0xff,0x53,0xfe,0xc5,0x4e,0x46,0xca,0x2b,0x85,0xd5, \
-0x61,0x60,0x7a,0x77,0x61,0x43,0x6f,0xfc,0x28,0x6b,0x6c,0x67,0xb5,0xc2,0x1b,0xaf, \
-0xd2,0xe1,0x13,0x00,0xfd,0x3a,0xb9,0x28,0x5f,0x03,0xff,0x7f,0x1f,0x3f,0xa9,0x79, \
-0x4f,0xf6,0xf9,0x71,0xd3,0x9c,0x0b,0x6d,0x25,0xcd,0x3a,0xa8,0xe5,0xc4,0xed,0x7c, \
-0x10,0x43,0xa0,0x65,0x53,0x7f,0x7d,0x7a,0x64,0x76,0x57,0xa2,0x62,0xbf,0xa8,0x94, \
-0x5c,0x2f,0xed,0x6d,0x19,0xdd,0x13,0x60,0x81,0x68,0x6e,0x0a,0x0b,0xdf,0x11,0x41, \
-0x40,0x58,0xf6,0xb2,0x06,0xbb,0x56,0x88,0x9f,0x12,0x45,0x2a,0x12,0xb8,0x49,0xae, \
-0x74,0x01,0x95,0x3e,0x38,0xda,0x01,0x53,0x93,0xc6,0xb4,0x82,0x3c,0x21,0xe8,0x2d, \
-0x24,0xc8,0x62,0xc1,0xd1,0xc8,0xb4,0xde,0x2b,0xaa,0x3b,0xa0,0x20,0x13,0xfe,0xd0, \
-0x82,0x9f,0x09,0x22,0x0f,0xd6,0x5f,0x3b,0x80,0xd5,0x30,0x9b,0x1e,0xe6,0x40,0x3e, \
-0xba,0x3e,0x98,0x7a,0xf4,0xe5,0xfc,0xad,0xc4,0xc2,0xfa,0x4d,0xaa,0xf0,0x06,0x2a, \
-0x2f,0x5e,0x00,0x6c,0xc6,0x0a,0x4f,0xc8,0x7e,0x70,0xbc,0xb8,0x71,0xa6,0x16,0xb1, \
-0xb1,0xf2,0xf4,0x8c,0xaf,0xfb,0x39,0x7d,0xa7,0xd0,0x7f,0x6d,0xc2,0x71,0x1f,0xc0, \
-0xdd,0x9a,0xb9,0xfa,0x70,0xb5,0x5f,0xa1,0x43,0x5b,0x10,0xa4,0x57,0x59,0x5e,0xe9, \
-0xf8,0xf2,0xa0,0xcc,0xa7,0x20,0xc9,0x92,0x30,0x75,0xc2,0x6b,0x09,0x7c,0xae,0x7d, \
-0xe3,0x98,0x41,0xa9,0xfc,0x5e,0x82,0xd2,0xdb,0xc0,0xb5,0xdd,0xc6,0xae,0x9b,0x15, \
-0x1f,0xa9,0xc7,0x23,0x45,0xf9,0xd9,0x02,0xc3,0xd0,0xd1,0xd5,0xd3,0xd9,0x4b,0x40, \
-0xec,0x34,0x2c,0xc7,0x19,0x2a,0x1e,0x35,0x0a,0x22,0x4a,0x27,0x18,0xb3,0x56,0x8f, \
-0x2f,0xca,0x3f,0x40,0xfc,0x63,0x23,0xd2,0x0e,0xcb,0x17,0x14,0x8c,0xc0,0x6a,0x14, \
-0xcf,0xd7,0x1f,0xac,0x9e,0x07,0x0d,0x08,0x4a,0x06,0x71,0xbc,0x96,0xc0,0x84,0xaf, \
-0xd7,0xcf,0x5f,0x0e,0xdc,0x62,0xe9,0x1f,0xaa,0xc1,0xb5,0xbe,0xba,0x25,0x47,0x47, \
-0xe9,0x8a,0x60,0xf8,0x1b,0xd2,0x21,0x1d,0x64,0x0c,0x86,0xe6,0x84,0x15,0xe4,0xdd, \
-0xb8,0x32,0x00,0xe4,0x76,0x65,0x77,0xfa,0x34,0x46,0xc4,0xeb,0x6a,0xf3,0x85,0x1d, \
-0xdc,0x06,0x0b,0x85,0x84,0x4d,0x93,0xb5,0x1d,0x83,0x10,0x19,0x1a,0xfd,0x9a,0x72, \
-0x0d,0x1b,0xbd,0xbb,0x7b,0xae,0x5d,0xb5,0xed,0x3d,0xf4,0xd5,0x30,0xad,0xe8,0x28, \
-0x96,0x46,0x9f,0xaa,0x14,0x05,0x78,0xd1,0x04,0xa6,0x7c,0x8c,0x06,0x54,0xd8,0xca, \
-0xf2,0x4e,0x25,0x7c,0x31,0xe6,0xaa,0xb8,0xe5,0x60,0xe5,0xa3,0x8c,0x79,0xa0,0x81, \
-0xf4,0x06,0x42,0x83,0x10,0xa6,0xb1,0xca,0x2a,0x84,0xe8,0x9c,0x4b,0x2c,0xb3,0x1b, \
-0x80,0x9e,0xa6,0xea,0x12,0xcd,0xc8,0xd9,0xcf,0x49,0x19,0x67,0x25,0xc3,0x64,0x84, \
-0xf1,0x38,0xb6,0xf3,0xdd,0xbb,0xbb,0xa1,0xf5,0xd5,0x37,0x1f,0x2a,0x06,0x6e,0xda, \
-0xf1,0xe9,0x4d,0x5d,0xe0,0x6c,0xd1,0x3e,0xcc,0x7b,0x27,0x95,0x6d,0x39,0x3a,0x7f, \
-0x18,0xa4,0x61,0xea,0x1e,0xfd,0xe7,0x4e,0xfd,0xb8,0xb4,0x92,0xf9,0x30,0xd0,0x61, \
-0xe3,0xaa,0x10,0x82,0x5f,0xe8,0x6e,0x3f,0xac,0xfc,0x73,0xf6,0xb0,0xe4,0xc3,0x49, \
-0xfa,0x92,0x12,0xa2,0xcd,0x21,0xf9,0x41,0x39,0x38,0xc9,0x6b,0x86,0xa6,0xcb,0x40, \
-0x32,0x61,0xfd,0xaa,0xa3,0x00,0x58,0x59,0x11,0xe2,0x0a,0xc7,0x78,0xb3,0xa8,0x8f, \
-0xa3,0x1a,0x00,0x0d,0xd7,0x65,0x24,0x01,0x48,0x22,0xc6,0x8b,0x75,0xd1,0xea,0x31, \
-0x25,0x91,0x0d,0x7c,0x43,0x7a,0xea,0xb2,0x01,0x2d,0x7a,0xdf,0x2a,0xd7,0xa0,0xb5, \
-0xae,0xcc,0x10,0x50,0xa0,0xfc,0x89,0x8d,0x33,0xe3,0x8c,0x69,0x5a,0x7e,0xba,0xa0, \
-0xfa,0x35,0x19,0x58,0x55,0xfc,0x1c,0x03,0x01,0x31,0x49,0x84,0x24,0xd5,0x3d,0x0f, \
-0x09,0xe3,0x07,0x73,0xc6,0x00,0x22,0xa3,0x68,0x12,0x0d,0xa0,0x27,0x02,0x14,0xe9, \
-0x84,0x16,0x01,0x50,0x78,0x37,0x7c,0xbf,0x97,0xf1,0x8d,0xc6,0x8d,0x4f,0xd1,0x74, \
-0xaf,0x72,0x0c,0x96,0xa7,0x6e,0xd6,0xc5,0x76,0x7e,0x55,0x5b,0x5c,0x0e,0x1e,0xca, \
-0xab,0x57,0xe3,0xa0,0x16,0xc6,0x8b,0x7b,0x20,0x1c,0x63,0xc1,0x17,0x4c,0x0e,0x11, \
-0xa1,0xa0,0x73,0x31,0x0b,0xf6,0xdc,0xb9,0x3a,0x24,0x50,0xa4,0xca,0x63,0xdd,0xdb, \
-0x10,0x50,0x5c,0x08,0x46,0x89,0xc4,0xf9,0xb0,0x97,0x20,0x42,0xe3,0xac,0x84,0x2a, \
-0xcf,0x03,0x9a,0x93,0x23,0x8e,0xa8,0x0a,0xc8,0xab,0x0b,0x01,0xc9,0x0a,0x07,0xd2, \
-0x8a,0xa1,0x09,0x0f,0xce,0x3a,0xf4,0x40,0x3f,0x5b,0xa5,0xbd,0xcb,0x27,0x39,0xe3, \
-0xbd,0x8e,0x4e,0xbb,0x60,0x64,0x4a,0x14,0xa1,0x4f,0x58,0x84,0x65,0x70,0xdd,0xdf, \
-0x3e,0x74,0xd7,0x90,0xba,0x5c,0x21,0x20,0x86,0x38,0xbb,0x50,0x22,0xd3,0x1e,0xd6, \
-0x0b,0xa5,0x55,0x63,0xc1,0xee,0x19,0x6d,0xf0,0x4a,0x6d,0x39,0xe5,0xf0,0xfd,0xb6, \
-0xf9,0x3f,0x76,0x39,0xce,0x39,0x33,0x6f,0xed,0x34,0xeb,0xd1,0x05,0x06,0x0e,0x2e, \
-0xc7,0xd1,0xd0,0xb5,0x1e,0x5a,0x13,0xe0,0x30,0xa7,0x01,0xba,0xe6,0x9b,0xc6,0x02, \
-0x18,0x88,0x56,0xf6,0x27,0x57,0x1d,0x2b,0x26,0x03,0xcc,0xfa,0x03,0xf2,0xb6,0xd4, \
-0xe7,0x47,0xcb,0x6f,0xb7,0x25,0xe4,0x5f,0xd7,0x86,0x1b,0xbf,0x33,0xf0,0x90,0xed, \
-0xb7,0x83,0x3d,0xc7,0x03,0x6f,0x0e,0xf5,0x5c,0xe4,0x64,0x32,0x0e,0xa4,0x68,0x18, \
-0x27,0xb9,0xc2,0x39,0x74,0xe6,0x8c,0x39,0x75,0x8d,0x1f,0x1f,0x62,0x46,0xf6,0xcd, \
-0xe9,0xee,0x68,0x7f,0x34,0xf4,0x07,0xe2,0x36,0x6b,0xdb,0x58,0x08,0x3a,0xf2,0xbd, \
-0x69,0xf6,0x97,0xd7,0x9d,0x85,0xf1,0x30,0xd7,0x24,0x6a,0x15,0x01,0xb3,0xb3,0xd7, \
-0x31,0x45,0xa5,0x6a,0xa2,0xcc,0xff,0x04,0x82,0x7f,0x36,0x1c,0xd2,0xb8,0xf1,0xb1, \
-0x91,0x14,0x0e,0xa4,0xf9,0x37,0x58,0x7a,0xd4,0x6c,0x35,0x44,0x19,0xfa,0xec,0xce, \
-0xfe,0x31,0x58,0x14,0xbf,0x21,0x4e,0x2a,0xff,0x61,0x25,0x5b,0x4f,0x1c,0x23,0xa4, \
-0x6b,0x93,0x8d,0x56,0x31,0xa5,0x9e,0x15,0x35,0xcf,0xb6,0x0b,0x75,0x66,0xa1,0xaa, \
-0xf5,0xd0,0x0c,0x60,0x11,0xb6,0x00,0x80,0x80,0xfe,0x4f,0x4a,0x20,0x7f,0x04,0xa4, \
-0x1d,0xf3,0x58,0xae,0x6a,0x09,0xf1,0xe0,0x35,0x5e,0x7b,0x7c,0xcb,0xdb,0x70,0xda, \
-0x1f,0x1e,0x2f,0x0e,0x60,0x8c,0xa0,0x71,0x17,0x5e,0x66,0x30,0xfb,0x77,0x39,0x5e, \
-0xca,0x4a,0x63,0x95,0x85,0x6e,0x43,0x85,0xd1,0x93,0xd4,0x69,0xb1,0x84,0x9d,0x56, \
-0xa1,0xae,0xa2,0x9d,0x45,0x48,0xe3,0x0a,0x3d,0xa0,0xbd,0xa5,0x31,0x57,0xcf,0x11, \
-0xf5,0x45,0xe4,0xdb,0x49,0x57,0xd4,0x6c,0x9c,0x1f,0x71,0x15,0x59,0xe1,0x50,0x3d, \
-0xda,0x3e,0xf0,0x94,0xdf,0xe2,0x3e,0xbe,0xc0,0xd5,0x7c,0xde,0xc5,0x9b,0xee,0x90, \
-0x9c,0x4b,0xd0,0x48,0x10,0x78,0x2a,0x6e,0x8e,0xa3,0xcb,0xe4,0xf8,0x6e,0x03,0xeb, \
-0x71,0xdd,0x64,0x6b,0x78,0x7e,0x96,0x6c,0x25,0x22,0x10,0x0d,0x0a,0x11,0xd1,0x96, \
-0x7c,0x02,0x43,0x26,0xfa,0x79,0xdb,0x47,0x1d,0xb7,0x89,0x54,0x8a,0x77,0x11,0x75, \
-0xaa,0x91,0x7a,0xa7,0x29,0xbd,0x4b,0xfa,0xb8,0xa7,0x09,0x08,0x15,0x3d,0x6b,0x8c, \
-0xd3,0x3e,0xa2,0x0a,0xab,0x7a,0xd7,0xd5,0xf7,0x7b,0xa5,0xb3,0x8f,0xdb,0x3b,0x9c, \
-0x08,0xec,0x44,0x8f,0xad,0x34,0x01,0x50,0x20,0x1e,0xef,0xaf,0xc2,0x5f,0x33,0xe9, \
-0x60,0xd6,0x04,0x01,0x9e,0xf5,0xab,0xf8,0x2c,0x77,0x1a,0x33,0x94,0xf2,0x0c,0xad, \
-0x21,0x26,0xa1,0xcf,0x7f,0xa6,0xe2,0x3b,0xcb,0x77,0x65,0x43,0x25,0x3b,0xc9,0x5e, \
-0x43,0x85,0x92,0x85,0x8e,0x8e,0x7b,0x19,0x23,0x82,0x34,0x51,0x85,0xcb,0x61,0xb6, \
-0x6a,0x8d,0x3d,0xeb,0x4e,0x64,0x41,0x9a,0x10,0xdd,0x58,0x9a,0x06,0x63,0x78,0x71, \
-0x40,0x12,0xa9,0xb2,0x9c,0xf3,0x9d,0xbb,0x29,0xda,0xfa,0x4c,0x5b,0xbd,0xc1,0x41, \
-0xf2,0x3b,0x5b,0xb7,0xdc,0x61,0x48,0x0f,0x42,0xf2,0x89,0x6c,0x28,0xc4,0x04,0xc0, \
-0xd6,0x14,0x58,0x69,0xef,0x61,0x9e,0x5b,0xde,0xb8,0x56,0x20,0x67,0x44,0xce,0x93, \
-0xdb,0x2e,0x03,0xa6,0xe9,0xe2,0x06,0xfa,0x8b,0xa6,0xe0,0x85,0x36,0x37,0x3d,0x3d, \
-0xe1,0xd8,0x9b,0xbe,0x78,0xee,0x1c,0x0d,0x15,0xf1,0x5e,0x55,0x6e,0x34,0x9a,0x97, \
-0x6a,0x38,0x2a,0x3d,0xf0,0xab,0x64,0x41,0x08,0x11,0xac,0xe9,0xdf,0xce,0x1b,0x41, \
-0xd4,0xc7,0x98,0xe7,0xad,0x9f,0xa9,0x33,0xd6,0x78,0x9d,0xb6,0xd3,0x80,0xab,0x0a, \
-0x87,0xeb,0x6d,0x9b,0x63,0x1d,0x37,0x9a,0xae,0xa9,0x9c,0xc7,0x3f,0x7c,0x72,0x6a, \
-0x99,0xc2,0xbb,0x18,0xa4,0xc1,0xa3,0x21,0xe7,0x9e,0xe5,0xa1,0x53,0x05,0xb6,0xf2, \
-0xa7,0x6f,0x0a,0x5c,0x5f,0x37,0x15,0x0d,0x22,0x54,0x2e,0x7a,0x40,0xbb,0x8c,0xe7, \
-0x49,0xe5,0xc4,0xaa,0xa8,0x26,0xf8,0x39,0x0d,0x8e,0xe0,0x80,0x6a,0x41,0x19,0x65, \
-0x24,0xa5,0x54,0x39,0x47,0xe6,0xa2,0x8a,0x4e,0x46,0xf2,0xac,0x0c,0x22,0x51,0x69, \
-0x0c,0x15,0xd2,0xfe,0xc8,0x71,0xc0,0x3c,0xc0,0x60,0xe5,0x88,0x40,0x8c,0x5a,0xa1, \
-0x3b,0x1e,0xf0,0x18,0x01,0x62,0x04,0xae,0xd6,0x4a,0xb8,0x55,0x02,0xe1,0xe2,0x0c, \
-0x3e,0x0a,0x3a,0x0d,0xf2,0x18,0x88,0x00,0x57,0x7f,0x45,0x56,0xa2,0x3a,0xd5,0x53, \
-0x80,0xe3,0x65,0xb4,0x56,0xba,0x82,0xa0,0xd0,0x1d,0xa2,0x41,0x1b,0x90,0x68,0x49, \
-0x1c,0x9e,0x14,0xfb,0x57,0x35,0x94,0xc6,0xfa,0x8b,0x28,0x15,0x3b,0xeb,0xfb,0x3f, \
-0x2e,0xfd,0x07,0xbb,0xc3,0x87,0x8e,0x68,0x33,0x93,0x22,0x95,0x66,0xa3,0x02,0x18, \
-0x1c,0x30,0x47,0xfc,0x11,0x45,0x2d,0xc3,0x87,0xa3,0x8e,0x9d,0x9a,0x48,0xc5,0x41, \
-0x4e,0x3d,0xfd,0x72,0x05,0xfc,0xe0,0x0f,0x95,0xa4,0xae,0xa8,0xab,0x85,0x40,0x6c, \
-0x8a,0x0a,0xfa,0xbe,0xd8,0xd5,0xdf,0x4a,0xad,0x81,0xf7,0x77,0xf9,0xe2,0xef,0xe4, \
-0x42,0x13,0xc2,0x42,0xa8,0x8a,0xd8,0x28,0x9f,0x3c,0xf9,0x73,0x4c,0x5b,0x32,0x38, \
-0x17,0x1f,0x88,0xef,0x1d,0x04,0xc7,0x85,0x1d,0x55,0x92,0xb5,0x9d,0x61,0x48,0x67, \
-0x0d,0xf4,0xc7,0x7c,0xcf,0x06,0x3d,0xca,0x84,0x68,0x40,0xb7,0x53,0x9d,0xdf,0x50, \
-0xec,0x12,0x34,0xa8,0x65,0xbe,0x11,0xca,0xc2,0x3e,0x0b,0x82,0xe9,0x70,0x1c,0xf3, \
-0xa5,0xee,0x2a,0x1e,0x3d,0xaf,0x1f,0x9c,0xd8,0x59,0x85,0x9a,0x66,0x19,0x20,0x7b, \
-0xf2,0xf0,0x3b,0x7e,0xa9,0x1b,0x3a,0x3e,0x30,0x36,0x51,0x95,0x0e,0x69,0x06,0x8f, \
-0xbe,0x34,0x97,0x08,0x6c,0x3d,0x61,0x91,0x6f,0xc7,0x8b,0xfa,0x72,0x4e,0x03,0xb7, \
-0x68,0xb2,0x21,0xdd,0xb0,0xfa,0x97,0x49,0xdf,0x01,0x18,0x76,0x73,0x15,0x02,0x29, \
-0x5a,0x42,0x26,0x15,0xb3,0x3e,0xf0,0x74,0x6a,0x51,0x43,0x84,0x59,0x09,0x82,0xe1, \
-0x18,0x6f,0xfd,0x58,0x18,0x68,0xdd,0xc8,0xe3,0x8b,0xc0,0x59,0x70,0x87,0xe5,0x69, \
-0x2e,0x7a,0xf4,0xb1,0xe3,0x4e,0xd2,0xe0,0xb4,0xe2,0x8d,0x1a,0x98,0x71,0xa8,0x02, \
-0xce,0xa6,0x22,0x54,0x62,0x25,0xab,0x5c,0x79,0x46,0x9a,0x2b,0xcd,0x1b,0xdb,0x0b, \
-0x55,0xaf,0xb1,0x4a,0xbf,0x2d,0x11,0xcd,0xe9,0x4e,0x2d,0x5d,0x90,0x63,0x42,0xd4, \
-0xf5,0x36,0x67,0xb4,0xe9,0xb2,0x66,0x08,0xb1,0x0a,0x09,0x2e,0x3a,0x67,0x5d,0xe8, \
-0x54,0x22,0xcb,0x5e,0x4b,0x10,0x62,0xc9,0x55,0xe2,0xb7,0xfb,0x2c,0xbe,0x07,0x50, \
-0xaa,0xaf,0xf8,0x70,0x9a,0x75,0x08,0x38,0x1c,0xad,0x41,0x21,0x92,0x2d,0xf7,0x6b, \
-0x46,0x0c,0xd0,0xb3,0x82,0x20,0x7b,0x6d,0xad,0x45,0xb5,0xa5,0x61,0xd3,0xed,0x5a, \
-0x9c,0x75,0x6a,0x47,0xe2,0x51,0x02,0xe8,0x0f,0x16,0x95,0x55,0x69,0x2e,0x0c,0x95, \
-0x4e,0x76,0x13,0x6c,0xf2,0xb2,0xeb,0x78,0xad,0xa2,0xe9,0x72,0xe4,0x34,0x9d,0x1a, \
-0x58,0x2e,0x54,0x70,0xcd,0x50,0x09,0x94,0x57,0x68,0x17,0x8e,0xd6,0x42,0x3b,0x81, \
-0x8f,0x11,0xd8,0x9d,0x1f,0xf1,0xf6,0x70,0x96,0x9e,0xb9,0xb0,0xee,0x8f,0x3a,0x34, \
-0x23,0xf1,0x60,0x13,0xf4,0x72,0x5f,0x81,0xa4,0x9e,0x7d,0xb7,0x59,0xd6,0xec,0x15, \
-0x85,0x9a,0x4c,0xbf,0xd4,0xbd,0x76,0xe9,0x61,0x98,0x47,0x23,0x81,0x1d,0xe4,0x58, \
-0x01,0x81,0xdf,0xd4,0x41,0x0c,0xfd,0xb1,0xb8,0x5d,0x5c,0x76,0x63,0xd8,0xed,0x58, \
-0xe2,0xab,0xe0,0xe8,0x3f,0x9f,0xda,0xaa,0xfd,0x38,0x69,0xcb,0xc5,0xc0,0xd9,0x65, \
-0x7a,0x18,0x21,0x4d,0xac,0x52,0x28,0x27,0x8a,0xf5,0x84,0xa4,0x61,0x3f,0x9a,0xf0, \
-0xfe,0x61,0x2c,0x26,0xa3,0x24,0x71,0xab,0x15,0xa6,0x9c,0x7c,0x91,0x4b,0xa0,0xe9, \
-0x42,0x0d,0x52,0x89,0x54,0xde,0x9e,0x57,0xd6,0xc2,0x28,0x31,0x94,0x53,0xdb,0x61, \
-0xf7,0x7e,0x86,0xf9,0xeb,0x7c,0xf3,0x37,0xa6,0xbd,0xdc,0x39,0x51,0x85,0xb8,0xea, \
-0xa3,0x3d,0x4f,0xbc,0xb3,0xbd,0x47,0x93,0xf3,0x87,0xf3,0x2c,0xa1,0x08,0x34,0xe1, \
-0x8c,0x2d,0xc1,0x88,0x6a,0x05,0xe7,0xa1,0x60,0x30,0x3d,0x14,0xb0,0xab,0x5c,0xbb, \
-0x59,0x1f,0xc7,0xf8,0x22,0x8b,0x48,0xcd,0x6d,0xba,0x6d,0x9e,0xb3,0x9c,0x60,0x23, \
-0xde,0x06,0x75,0x69,0x29,0x56,0x7f,0x1f,0xc4,0x94,0x8f,0x83,0x0d,0xec,0x3c,0x72, \
-0xe3,0x96,0x92,0x54,0x84,0x20,0x76,0xff,0x82,0x00,0x36,0x3e,0xd8,0x82,0x82,0x60, \
-0x6b,0x82,0xb0,0xa5,0x00,0x4a,0x98,0xc9,0x8e,0x39,0x96,0x45,0xc7,0x1b,0xe9,0xc7, \
-0x1a,0x3e,0xee,0xbf,0x3f,0xc9,0xd1,0x9f,0x8b,0xc9,0xf5,0x79,0x72,0x61,0xe5,0x11, \
-0x8f,0xb5,0x76,0xec,0x5e,0x8e,0x8d,0xe5,0x0b,0x4e,0x65,0x24,0xa7,0x5b,0xc9,0xdd, \
-0x06,0xc1,0xda,0xb7,0x03,0x65,0xd2,0x65,0x00,0x1e,0xc6,0xb5,0x2f,0x5a,0xf9,0x4e, \
-0x43,0x9f,0x04,0xe1,0x82,0x38,0x79,0x18,0x83,0xec,0x84,0x18,0xf6,0x35,0x01,0x17, \
-0xcb,0xda,0x61,0xf0,0xa3,0x5e,0xfa,0x53,0xdb,0xbc,0x2e,0xc5,0xe6,0xff,0x2c,0xa1, \
-0x83,0x52,0x3c,0x0c,0x6c,0x86,0x15,0x46,0x62,0xc7,0x48,0x59,0x2c,0x68,0x56,0x61, \
-0xc9,0xa3,0x88,0xf0,0x30,0x07,0x09,0x99,0x8f,0x3f,0x82,0x2b,0x9f,0xce,0xaf,0xe1, \
-0xf2,0xf2,0x01,0xb3,0x94,0xae,0xff,0x5a,0x46,0x75,0xd2,0x7b,0x67,0xbf,0xdd,0x9e, \
-0xac,0x43,0x9a,0x17,0x49,0xeb,0x53,0xb2,0x58,0x7e,0x4e,0x24,0xf6,0xd4,0x04,0x47, \
-0x26,0x06,0x9b,0x36,0x69,0xd7,0xfa,0xdb,0x88,0xd2,0xa7,0xf9,0xa6,0x45,0xba,0x91, \
-0x25,0x68,0x2e,0xb3,0x89,0x7d,0x71,0xc2,0xfd,0x6c,0x0b,0x29,0xf6,0x4c,0x36,0x44, \
-0xf9,0x4f,0xa2,0x05,0x0e,0x91,0x6c,0xa2,0x7b,0xf4,0x44,0x31,0x4c,0x02,0x2f,0xe5, \
-0xe8,0xaa,0x36,0x33,0x35,0x2a,0x18,0x51,0x3d,0x8b,0x96,0x31,0x20,0x72,0x33,0x20, \
-0x82,0x30,0xa8,0x20,0x8c,0xe7,0x93,0xbc,0x95,0x40,0x0d,0x18,0x75,0x73,0x39,0xb9, \
-0xaf,0x13,0x1b,0xe4,0x88,0x95,0x86,0xbf,0xa2,0x28,0xde,0xe9,0xd1,0xf7,0xb2,0xac, \
-0xa2,0x31,0x55,0xd7,0x7c,0x86,0xa9,0xd7,0xe4,0x9a,0x01,0x37,0x47,0x1c,0xb2,0xae, \
-0x4f,0xb7,0xca,0xf5,0x35,0xfd,0x5f,0xa6,0x07,0xc2,0x73,0xc6,0x3f,0xa0,0xa8,0xa9, \
-0x10,0xfe,0x54,0x2b,0x18,0x93,0x21,0x60,0xf5,0xff,0x5e,0x33,0xfe,0xef,0xc3,0x83, \
-0x33,0x97,0x14,0xc3,0x58,0x31,0xec,0xb4,0xf1,0x42,0xa0,0x2a,0xe8,0x6d,0x12,0xc0, \
-0x5d,0x52,0xc4,0x48,0x20,0xc5,0xfc,0xbf,0xeb,0x4a,0x3f,0x82,0x4e,0x9d,0x86,0xd8, \
-0x93,0x74,0x2c,0x11,0x54,0xc5,0x95,0x45,0x77,0x68,0x06,0x5a,0xdd,0xd2,0x98,0x81, \
-0xf5,0x09,0x48,0x22,0x30,0xe7,0xed,0xf9,0xfe,0x02,0xfe,0x1f,0xe5,0xdc,0x90,0xdc, \
-0x55,0x80,0x71,0x42,0x17,0x95,0x1b,0x44,0xc5,0xfa,0x30,0x65,0xc1,0x3b,0x4b,0x2e, \
-0x70,0x98,0xa1,0x50,0x81,0x6d,0x51,0x69,0x54,0xfa,0xc8,0x68,0x92,0x22,0x34,0x15, \
-0x97,0x41,0xd5,0x7e,0x53,0x21,0x9c,0xcb,0x3b,0xef,0xc5,0xb6,0x57,0x02,0xa0,0x4d, \
-0x4b,0x0c,0x38,0x34,0xc8,0x58,0xa8,0x87,0x3d,0x63,0xdc,0xe5,0xf8,0x24,0x85,0xff, \
-0x04,0xa0,0xaa,0x0a,0xea,0xf1,0x8b,0xbd,0xa0,0x66,0x37,0xf7,0x25,0x15,0xc0,0xeb, \
-0x6f,0x8e,0x3c,0xa3,0x7c,0x5c,0xc0,0x2b,0x6d,0x1e,0x49,0x0b,0x8c,0x65,0x15,0xdc, \
-0x85,0x52,0x37,0x55,0x61,0x50,0xc2,0x50,0x99,0xc9,0xb7,0x6e,0xda,0x43,0x95,0xdd, \
-0x81,0x36,0x18,0x31,0x45,0xcc,0x2f,0xe5,0x68,0x4c,0x1c,0x17,0xab,0x06,0x47,0x96, \
-0x42,0x54,0xd5,0x99,0xc7,0x4b,0x60,0x4c,0x41,0x00,0xf0,0x4b,0x39,0xd2,0x7a,0x6f, \
-0x9c,0x61,0x0f,0xa2,0xba,0x77,0xfa,0x31,0xdf,0xf1,0x6f,0xd5,0x4d,0xd3,0x73,0xe8, \
-0x1a,0x34,0x19,0xf8,0x34,0x09,0x5b,0xa4,0xbb,0x1f,0x1e,0x31,0x58,0xaf,0xca,0x91, \
-0x38,0x05,0xd6,0xb4,0xc5,0xbe,0xfa,0x39,0xf1,0xdb,0x96,0xc7,0xb7,0x76,0x58,0x9a, \
-0x43,0x74,0x3c,0x97,0x54,0xad,0x55,0x43,0xe9,0x53,0xce,0x44,0x3f,0x8a,0x4a,0x8b, \
-0x00,0x6d,0xac,0xf8,0x5a,0x7e,0xa4,0x95,0x3f,0x43,0x0f,0x97,0xe3,0xd6,0xdc,0x7b, \
-0x08,0x7c,0x5d,0x3f,0x4e,0x3e,0xba,0xf9,0x04,0xc5,0xa0,0x7e,0xef,0x80,0x34,0x8d, \
-0xf0,0x13,0x86,0x58,0x72,0xf9,0xb1,0x96,0xee,0xaf,0x37,0xef,0x90,0x72,0x3a,0xcb, \
-0xfc,0x3c,0x91,0xf6,0xec,0xa0,0x59,0x88,0x93,0x6e,0xd0,0x7e,0x97,0x9f,0xb6,0x02, \
-0x95,0x3e,0xab,0x5a,0x87,0xbf,0xf5,0xdb,0x2b,0xf9,0x73,0x3d,0x3b,0x4b,0x1f,0x78, \
-0xfe,0xa1,0xfb,0x48,0xb7,0xfe,0x25,0xa2,0x1d,0x12,0x81,0x4f,0xfb,0x33,0xc1,0xa5, \
-0xf2,0x19,0x60,0xf3,0xca,0x9a,0xb5,0x18,0xb1,0x75,0xb1,0x77,0xc3,0x83,0xd5,0x9f, \
-0xc1,0x57,0xec,0xaa,0xba,0x6e,0x9d,0x87,0xe9,0x6c,0xc8,0xd1,0x91,0xc2,0x06,0xc1, \
-0xe1,0x53,0xd5,0x1d,0x21,0xff,0xa7,0xd7,0x13,0x19,0xe5,0xce,0x86,0x95,0xd4,0xec, \
-0x37,0x52,0x84,0x43,0x7b,0xd8,0x5c,0x13,0xc0,0xb7,0xf0,0x39,0x97,0x5b,0x1d,0xf7, \
-0x2f,0xe3,0x47,0xfe,0x76,0xa3,0xa1,0xc7,0x99,0x4f,0x2e,0x72,0xc2,0xa9,0x98,0x4f, \
-0x4d,0x85,0x21,0xa5,0x3b,0x9e,0x18,0x09,0x29,0x14,0x7a,0xec,0x24,0xbc,0xcc,0x1b, \
-0x8c,0x8e,0x71,0x12,0xb3,0x3c,0x84,0xdb,0x28,0x25,0x17,0x91,0x88,0xe8,0x1e,0xcf, \
-0x52,0x89,0x5d,0xf5,0xd0,0x52,0xd6,0xfb,0x48,0x39,0xce,0x64,0xc7,0x0c,0xd1,0xa8, \
-0x33,0x61,0x24,0x04,0x60,0x06,0x99,0x7c,0xb8,0x28,0xa5,0xad,0x38,0xa5,0x29,0x02, \
-0x56,0xa0,0xa0,0xe4,0x63,0x25,0x93,0x98,0x71,0xb0,0x4d,0x69,0x4e,0x7d,0xa1,0x13, \
-0x26,0xef,0x3a,0xaf,0x30,0x86,0x18,0x78,0x03,0x94,0x21,0x6c,0x67,0x37,0x15,0xd0, \
-0x6c,0xf2,0x97,0x8c,0x5c,0xa7,0xdd,0xf9,0xf3,0xfb,0x7d,0xe5,0xc2,0x54,0x3a,0x94, \
-0x0a,0x30,0x07,0x71,0x97,0x31,0xf9,0xff,0x8f,0xb6,0x0b,0x16,0xf4,0xf6,0xe3,0x03, \
-0x24,0x63,0xa6,0x74,0x08,0x68,0x61,0x58,0xf8,0xd4,0x64,0x78,0xbd,0xc2,0xa5,0xb5, \
-0x08,0x2e,0xad,0x0b,0x98,0x62,0xeb,0x51,0xe7,0x78,0xcc,0x52,0x3a,0x3f,0x5f,0x0e, \
-0x77,0x64,0x36,0x98,0x56,0xf1,0xc7,0x8a,0xff,0xba,0x57,0xab,0x17,0x0d,0x2d,0x8c, \
-0x8f,0xdb,0x08,0xda,0x7c,0x0f,0xbb,0xdd,0xdf,0xfc,0xa5,0x4a,0x0e,0xb6,0x3a,0x99, \
-0x97,0xd7,0xf3,0xf7,0x92,0xb3,0x33,0x05,0x0c,0x6d,0x80,0x4a,0x60,0x48,0x36,0xd8, \
-0xca,0xab,0x1f,0xaf,0x3f,0x1c,0x52,0xda,0x35,0xac,0xd5,0x72,0x43,0x58,0xc1,0x0a, \
-0x9a,0x4f,0x69,0xea,0xe8,0xe6,0xf3,0x45,0x90,0x42,0x72,0x4f,0x2f,0xb5,0x75,0x24, \
-0x78,0x03,0x48,0xfd,0x69,0x79,0x87,0x93,0xbe,0xeb,0x80,0xc9,0x93,0xa2,0x26,0x7d, \
-0x34,0xcb,0x85,0xd3,0xe6,0xe5,0xdd,0xda,0x3d,0x04,0x62,0x48,0x1f,0xae,0x81,0x1f, \
-0xb3,0xdc,0x62,0x19,0xf5,0x5f,0x78,0x14,0x3f,0x26,0x1d,0x7a,0x82,0x7e,0xc7,0x4d, \
-0x2e,0x39,0x88,0xbd,0x97,0x02,0xa8,0xf6,0xbb,0x78,0xc3,0xf9,0x3c,0x82,0xa3,0x10, \
-0x43,0x66,0xaa,0x82,0x31,0x11,0x83,0x05,0x62,0x91,0x43,0x18,0xff,0x0e,0x76,0xe0, \
-0x1d,0xd8,0xc0,0x59,0x8b,0xe3,0x4f,0xc9,0xd5,0xf0,0x1f,0x85,0x88,0x22,0x08,0xc8, \
-0xaf,0xdd,0xb0,0x5f,0xc3,0x71,0x3a,0xcd,0xa1,0xf2,0x9e,0xa2,0x4b,0x3c,0xfe,0xca, \
-0x54,0xf6,0x8e,0xf0,0x18,0x7e,0xc4,0x37,0x64,0xa8,0x1c,0xe2,0x76,0x93,0x9e,0x11, \
-0x7b,0x61,0xbc,0x85,0xb9,0xf5,0xef,0x19,0xee,0xf5,0x3d,0x0a,0x1e,0xb0,0x18,0xb6, \
-0x30,0xb1,0x58,0xb1,0x58,0xab,0x19,0x00,0xdc,0x9f,0xa3,0x18,0xc4,0x3c,0xfe,0x89, \
-0xfe,0x08,0x33,0xa7,0xd9,0x9c,0xfb,0x3e,0x29,0xa3,0xee,0xc9,0x8c,0x6a,0xc3,0xb6, \
-0xdd,0x16,0xc2,0x99,0xc1,0x8d,0xfe,0x4b,0xa6,0x48,0x9c,0x3a,0xc1,0x51,0x64,0xdd, \
-0x30,0x21,0xbe,0x29,0x91,0x22,0x5a,0x65,0x38,0x49,0x72,0x94,0x9b,0x63,0xed,0x3f, \
-0xb7,0x1c,0x89,0xf4,0x90,0xb4,0xbf,0x78,0xc2,0x7e,0x65,0x94,0xcf,0x45,0xee,0xd0, \
-0x91,0x74,0x35,0x42,0x14,0xae,0x49,0x3a,0x28,0xe8,0x17,0x22,0x6c,0xd2,0x54,0xb4, \
-0x0a,0xb4,0xd0,0x03,0x2b,0x26,0x25,0x92,0xd7,0x9e,0x17,0x3a,0x17,0x89,0x79,0x05, \
-0xb1,0x60,0xec,0x0f,0x00,0x72,0xa7,0x4e,0x3e,0x4c,0x6f,0xc4,0x3a,0x74,0xbd,0x51, \
-0x99,0x13,0xcd,0x04,0xfb,0x13,0xf5,0x38,0xd6,0xa8,0x4f,0x56,0x13,0x74,0x81,0x9c, \
-0xda,0xd0,0x35,0xf5,0x9a,0x4b,0x0e,0x10,0x1a,0xdc,0x92,0x49,0xc8,0xd2,0x03,0x20, \
-0x5e,0xf0,0x3f,0x2f,0x61,0xa1,0xe0,0x2c,0xf9,0xd5,0x21,0xf4,0x7b,0x82,0xf0,0xc9, \
-0x3c,0xf1,0x61,0x05,0x87,0x93,0x75,0x8c,0x44,0x3d,0x1b,0x76,0xa1,0xe7,0xc1,0xa1, \
-0x22,0xcd,0x01,0xdd,0x51,0x4b,0x11,0x2f,0x6e,0xc3,0xd5,0x27,0xd0,0x65,0x01,0xac, \
-0xce,0xc4,0xcf,0x25,0x1d,0x3c,0x40,0x87,0x8a,0x8f,0x90,0xc0,0x97,0xbd,0xbc,0xb1, \
-0x92,0xf0,0x8e,0xdf,0xd5,0x83,0x59,0x02,0xc6,0xa1,0x53,0x05,0xae,0x04,0x42,0x2c, \
-0x80,0xa3,0x9b,0x3a,0xc3,0xcb,0x0c,0xd5,0x9d,0xa9,0xa0,0x9b,0x44,0x4d,0x4a,0x57, \
-0x94,0x61,0xe8,0xcc,0x39,0xe1,0x21,0x12,0x35,0xed,0x76,0x86,0x44,0xfb,0x5d,0x6e, \
-0x01,0xf2,0x63,0x89,0x3d,0x10,0x30,0xd7,0xfc,0xb5,0xbe,0x21,0x5e,0xbc,0xd3,0xfa, \
-0x47,0x03,0x1a,0x63,0xfe,0x88,0x82,0x1f,0x87,0x84,0x6e,0x1a,0xf5,0x98,0x48,0xb2, \
-0xec,0x42,0x10,0x7b,0x77,0xa5,0x8a,0xe7,0xc4,0x19,0x7a,0x02,0x8d,0xc9,0x40,0xf2, \
-0x2a,0x3c,0xaa,0x18,0xa1,0xb4,0x98,0x84,0xee,0x83,0xd9,0x05,0xdc,0xda,0xc1,0x35, \
-0x31,0x2e,0xd0,0x6d,0x5c,0x61,0x04,0xe7,0xe4,0x77,0x48,0xc1,0x3e,0x68,0x2f,0xc2, \
-0x66,0xd2,0xf7,0xd4,0xc3,0xb9,0xad,0xc8,0xe0,0x07,0x79,0xa5,0x39,0xec,0x0c,0xf1, \
-0x30,0xf7,0x9a,0x03,0x7e,0xad,0x21,0xb5,0x23,0x03,0xaa,0x8e,0xfd,0x48,0x3a,0xd2, \
-0x0f,0x6a,0x05,0x60,0x04,0x48,0xb1,0x22,0xe1,0x07,0x18,0xad,0x58,0xc0,0x84,0x22, \
-0x42,0x25,0xa0,0x07,0xbc,0xf4,0xf4,0x2a,0x07,0xfe,0xb8,0x58,0x2e,0x60,0x50,0xbe, \
-0xad,0x64,0x8a,0x38,0x7e,0x9b,0x0f,0x83,0x0b,0x99,0xb8,0x60,0x36,0x36,0x2f,0xf0, \
-0x70,0xd7,0xdf,0xb2,0xbf,0xbd,0x76,0xae,0x3e,0x3d,0x95,0x23,0xbe,0xb3,0xf2,0xa1, \
-0x01,0x6f,0x9e,0x2a,0x87,0xdf,0x9b,0x44,0x6e,0xe2,0x98,0x34,0xd6,0x66,0xf8,0x96, \
-0x51,0x61,0xf5,0xf8,0x0e,0xd4,0x11,0xfe,0x2d,0x23,0xa5,0xfd,0x3e,0xda,0xa3,0xd9, \
-0x32,0x0f,0x3c,0x77,0xf6,0xcf,0x49,0x20,0x89,0x8e,0xa9,0xfa,0xea,0x1c,0x45,0xbe, \
-0x05,0x85,0x6c,0x63,0xdb,0x49,0x9b,0x70,0x2c,0xd7,0xeb,0x71,0x10,0x76,0x61,0xf3, \
-0xdb,0x26,0x91,0x89,0x0e,0x46,0xac,0x15,0xdc,0xf2,0x2d,0x74,0x63,0x3e,0x65,0xf7, \
-0x31,0xec,0x66,0xd7,0xc0,0x36,0x33,0x10,0x8f,0x69,0x25,0x34,0x82,0x1a,0x02,0xf4, \
-0xd1,0x0d,0x05,0xa1,0xa0,0x52,0xa6,0x3a,0x24,0x63,0x63,0xa0,0x1b,0x75,0x90,0x55, \
-0x94,0x74,0x46,0x3a,0xd2,0xdc,0xd7,0x6d,0x77,0x4e,0xa0,0xe3,0xbf,0x0f,0x83,0x5f, \
-0x94,0x0c,0xaa,0x1f,0x04,0x18,0x11,0x4a,0x25,0x54,0x30,0x3b,0x0c,0x81,0xdb,0x28, \
-0x10,0x46,0xce,0xf2,0xc6,0xc2,0xf5,0xbb,0x62,0x0e,0x43,0x42,0x95,0x97,0xf4,0x1e, \
-0x74,0xc7,0xa9,0x12,0x75,0x0c,0x43,0x3c,0xf7,0x8d,0xc6,0x46,0x7b,0x16,0xc2,0x03, \
-0x70,0x1a,0xf2,0x66,0x47,0xdb,0x88,0x1e,0xb7,0xd1,0x57,0x02,0x3e,0x6e,0x8e,0x42, \
-0x8d,0x53,0x1d,0x4a,0x86,0x34,0xa7,0x8e,0x46,0x2d,0xa4,0x60,0x35,0xfa,0x87,0xb4, \
-0xd9,0xe6,0xb6,0x94,0x3c,0x06,0x8e,0x0d,0x0c,0xc2,0xc8,0xd9,0x40,0xc7,0xf9,0x41, \
-0x5c,0xc1,0x40,0x76,0x0c,0x90,0x60,0x61,0xaf,0x33,0x60,0xc4,0x2a,0x35,0xd1,0xd4, \
-0x74,0xe7,0xbf,0xdc,0x74,0x6c,0x5c,0x98,0x62,0xe0,0x73,0xd1,0x0a,0xc1,0x64,0x44, \
-0x46,0x23,0x22,0xb0,0x55,0x50,0x12,0x3d,0x46,0x31,0x21,0x04,0x0a,0xee,0xa3,0xc6, \
-0x9f,0x9b,0xd0,0xab,0x6e,0x0a,0x4a,0xce,0x6e,0x63,0x07,0x4b,0xd9,0xe5,0xa8,0x37, \
-0x19,0xa5,0x80,0x3c,0x04,0xcf,0xa6,0xf0,0xdf,0x0d,0x85,0xc0,0xd0,0xcc,0xe6,0x8a, \
-0xad,0xfb,0x04,0x2d,0x81,0x76,0x6e,0x14,0x4a,0x25,0xa4,0x26,0x82,0x1f,0x48,0xf5, \
-0xc3,0x67,0x6e,0x36,0x73,0x7a,0x47,0x39,0x4e,0x30,0x52,0x0d,0xc5,0xca,0x76,0xf5, \
-0x2d,0xc1,0xa3,0x3d,0xa4,0xef,0x44,0x48,0x28,0xa8,0xc0,0x44,0x8a,0x27,0x20,0x42, \
-0x98,0x1b,0x27,0x1e,0xf3,0x34,0x2f,0xe6,0x6f,0x5f,0x57,0x55,0xd8,0x02,0x8f,0xb1, \
-0x17,0x69,0x61,0x6b,0xa0,0x58,0x41,0x5b,0xc7,0x7e,0xff,0xb8,0x7b,0x77,0xa7,0xe1, \
-0x20,0x1c,0xc3,0x31,0x86,0x67,0x61,0x44,0x79,0xe8,0x8d,0xa0,0xb3,0xd9,0x5e,0xb1, \
-0x8c,0x1e,0xb3,0x93,0x06,0xdc,0x25,0x86,0xd7,0x98,0x94,0xbc,0xcd,0x2c,0x12,0x5c, \
-0xf1,0x51,0x07,0x12,0xec,0x1e,0x2c,0x86,0x91,0x8a,0xd3,0x03,0x57,0xdd,0x4f,0xcb, \
-0x13,0x4e,0x30,0x72,0x63,0x2f,0xb2,0x18,0x79,0xb0,0xec,0xee,0xf5,0x5c,0x42,0x6e, \
-0x1c,0x76,0x93,0xd8,0x45,0x41,0x09,0x16,0x13,0xb8,0x61,0x2a,0x1f,0xd4,0x85,0x62, \
-0xc4,0x70,0xd4,0x9e,0x5a,0xf8,0xfe,0x2f,0xa3,0x06,0xbd,0xa9,0xd0,0xee,0xa4,0xdb, \
-0x3e,0xb8,0xea,0x2f,0x0d,0x67,0x5d,0xe4,0x61,0x6e,0x22,0xb5,0x02,0xef,0x35,0x00, \
-0x38,0x9f,0x66,0xa0,0x91,0x96,0xb8,0x04,0x05,0x1a,0x9e,0xb9,0x32,0xd2,0xaf,0x11, \
-0x0e,0x70,0x31,0xcf,0x87,0x3c,0x92,0x5d,0xba,0x85,0x30,0x1d,0x31,0x2e,0x0d,0xba, \
-0x49,0x15,0x28,0x7f,0x9e,0x18,0x1a,0xec,0x0b,0x28,0x48,0x2e,0xa4,0x77,0x93,0x78, \
-0x83,0x42,0x95,0xd9,0xd5,0xa2,0xa3,0x19,0xba,0x2f,0x31,0x83,0x03,0xa1,0x2c,0x30, \
-0x08,0x03,0x8f,0x4f,0xfd,0x65,0x5d,0xcc,0xc6,0x6e,0xed,0xbd,0x99,0x98,0xde,0x74, \
-0x24,0x3e,0x47,0x04,0x05,0x03,0xdb,0xcc,0x8f,0x35,0x99,0x15,0x22,0x32,0x1b,0x33, \
-0x42,0x67,0x11,0x1f,0xa7,0xc6,0x98,0x16,0x1b,0xd8,0x58,0x86,0x25,0xfc,0xea,0x01, \
-0x78,0xd1,0x6a,0xcf,0x2e,0x86,0xe6,0x88,0x6d,0x18,0x20,0xaa,0xc2,0x2f,0xb4,0xda, \
-0xfb,0xab,0xec,0x53,0x60,0x05,0x34,0x48,0xf5,0x7e,0x35,0x31,0xe8,0xf8,0xf8,0x1b, \
-0x04,0x5f,0xdc,0x78,0x2b,0xae,0x1f,0xf5,0x01,0x70,0x69,0xbb,0xea,0xff,0x8a,0x17, \
-0xe6,0x23,0x56,0x37,0x97,0xce,0xd7,0xf3,0x88,0xa4,0x58,0x88,0xa4,0x64,0x48,0x22, \
-0x80,0xc5,0x44,0x48,0x0a,0xa7,0xfa,0x99,0x4e,0x8d,0x15,0x55,0x89,0x16,0x0c,0x18, \
-0x82,0xb1,0x51,0x1d,0x59,0x58,0x2a,0x4d,0x9c,0xa6,0x11,0x8a,0x08,0xbf,0xf1,0xde, \
-0xfc,0xf8,0x9d,0xff,0x46,0x64,0x36,0x64,0x04,0x61,0x05,0x05,0x9f,0xd8,0xc8,0x73, \
-0x71,0x20,0xb2,0x08,0x29,0x39,0xa7,0x5b,0x8f,0x2a,0x15,0x17,0x3a,0xa3,0x48,0xf1, \
-0x6b,0xa5,0x95,0x90,0xf3,0x9a,0x89,0x8c,0x18,0x6b,0x88,0xfd,0xa0,0xc5,0x16,0x8e, \
-0xc6,0xad,0xfc,0xff,0x77,0x5e,0xe5,0xbb,0xdb,0x16,0x5a,0x76,0x53,0xaa,0x9d,0xbc, \
-0x9b,0x34,0xfe,0x86,0x1c,0x0c,0x60,0x59,0x53,0x49,0xa2,0xfe,0x96,0xd7,0xd6,0xeb, \
-0xad,0xab,0xb3,0xd2,0xea,0x3d,0x9a,0x40,0x51,0xfa,0xd0,0x7d,0xbf,0x4e,0x30,0x50, \
-0x7a,0x7d,0x9e,0xa5,0x0f,0x54,0xf5,0xa9,0xc7,0x09,0xda,0x6a,0xf1,0x34,0xab,0xb1, \
-0xf2,0x13,0x28,0xc5,0x35,0x0d,0x4c,0xd4,0xfc,0xc1,0xe8,0x94,0xde,0xd4,0x71,0x87, \
-0x7e,0x7e,0x87,0xd6,0x7f,0x49,0xba,0x16,0xbe,0x71,0xc6,0x5e,0xbc,0x6c,0x82,0xf3, \
-0x78,0x3d,0x02,0xa7,0x0d,0xef,0x70,0x95,0xf7,0x22,0x94,0x27,0xea,0x42,0x7a,0xb0, \
-0xfe,0x3f,0x7a,0xed,0xf4,0xc1,0x24,0x6a,0x6d,0x1f,0x31,0x8d,0xb8,0xb5,0x45,0x0d, \
-0x43,0x25,0x32,0xd0,0x6e,0xde,0x14,0x2f,0x29,0x49,0xe8,0x2f,0xf1,0x99,0x70,0x20, \
-0x9a,0xbb,0xb0,0x2b,0x5d,0x73,0xda,0x12,0x01,0x80,0x07,0x56,0xef,0xe9,0xb9,0xa8, \
-0xdc,0xe7,0xf3,0x98,0x3b,0x51,0x82,0x65,0x28,0x7c,0x9a,0x59,0xdb,0xf8,0x29,0x0f, \
-0xe1,0xd2,0xd0,0x16,0x48,0x40,0xc8,0x45,0xed,0x7e,0x76,0x8e,0xa6,0x97,0x87,0x08, \
-0x2a,0xd1,0x2d,0x6c,0x2e,0x36,0xe1,0x7f,0xd3,0xf7,0x1d,0x1e,0x1f,0x2c,0x70,0x7b, \
-0xc3,0x57,0xaf,0xd9,0xc4,0x34,0xdb,0xa7,0x52,0x21,0x53,0xcf,0xe9,0x62,0xcc,0x1c, \
-0xa3,0xa0,0x7c,0xc7,0xc1,0x07,0x98,0x19,0x01,0xe2,0xea,0x41,0x83,0x3d,0x02,0xba, \
-0x94,0x3a,0x6c,0x06,0x01,0x96,0xf4,0x3b,0x1e,0x9c,0x7d,0x7c,0x6b,0xe7,0x6a,0x3f, \
-0x61,0x4a,0x52,0x9f,0x63,0x9f,0x6a,0xde,0xc4,0xa0,0xde,0x10,0x34,0xe2,0x12,0x50, \
-0xc0,0x71,0x09,0x2f,0x8a,0x1a,0x08,0x1a,0x9b,0x3c,0x99,0x23,0xfc,0xd8,0x7c,0x7f, \
-0x02,0xe0,0x9b,0xbe,0xaf,0x93,0x54,0x32,0xd5,0x04,0x77,0xed,0x53,0xe2,0xd5,0x02, \
-0xb6,0xa5,0x1f,0x9d,0xa4,0x94,0xf5,0x89,0xa4,0xce,0x26,0xad,0x24,0xdc,0x18,0x26, \
-0x36,0x1b,0xd0,0x79,0xb0,0xe1,0x93,0xcb,0xf2,0xc7,0xcc,0x92,0xc2,0x87,0x08,0xa0, \
-0x0c,0x3d,0x2d,0xfc,0x41,0xf5,0x87,0x13,0x6f,0xaa,0x82,0x52,0xe0,0x68,0x28,0x95, \
-0x60,0x15,0xb9,0x77,0xd4,0xa2,0x1c,0xbf,0xe0,0xc3,0xfd,0x76,0x40,0xb6,0x1c,0x34, \
-0xc6,0x0a,0xae,0x9c,0x19,0x7f,0x41,0xbc,0x3c,0x88,0xb3,0x37,0xb9,0x2b,0x55,0xa0, \
-0xbe,0x00,0xb0,0x58,0x14,0x48,0xf1,0x64,0x32,0x59,0x87,0xc2,0x1d,0xe0,0x46,0xf7, \
-0x56,0x70,0xc3,0x6a,0x24,0xaa,0xc2,0xe3,0x01,0x41,0x18,0x12,0xd0,0xf6,0x1d,0x66, \
-0x42,0xeb,0xb0,0xfa,0x2a,0x85,0x00,0xe8,0xbf,0xf1,0x47,0x57,0xd2,0xb4,0x65,0xfc, \
-0xe9,0xf2,0xc1,0x7f,0xae,0xb6,0xf9,0x03,0x9a,0x2f,0x99,0x21,0x48,0x9e,0xb8,0x21, \
-0x22,0x05,0x42,0xfc,0x0e,0xe9,0x8d,0x88,0xcb,0xa8,0x44,0x90,0xa3,0x74,0x81,0x03, \
-0xda,0xa8,0xf7,0x4c,0x31,0x1f,0x91,0xdd,0x12,0x09,0xa6,0xcf,0x5b,0x02,0x3b,0xa3, \
-0x53,0x2c,0xc5,0x75,0x4d,0x98,0xd9,0x82,0xec,0x47,0xd6,0xae,0xb5,0x73,0x26,0x5b, \
-0x68,0xeb,0x28,0xf5,0x84,0x40,0x4a,0xd3,0xdd,0x86,0x52,0x6a,0x49,0x6b,0x5e,0xb6, \
-0x12,0x17,0x05,0xf8,0xdb,0x0f,0x28,0x57,0x2b,0x03,0x68,0x2c,0xe1,0x44,0x90,0x29, \
-0xc0,0x4c,0x47,0x49,0x24,0x67,0x91,0x3d,0xe1,0x79,0x7a,0xcf,0x01,0x55,0xa3,0xb1, \
-0xc3,0x18,0x3d,0xdc,0xf6,0xce,0xac,0x92,0x30,0x60,0xd8,0x8d,0xbb,0x4f,0x67,0xee, \
-0x71,0xc4,0x89,0x66,0xd2,0xf3,0x45,0x9e,0x08,0xd6,0x57,0x16,0x0e,0x20,0xf5,0xee, \
-0x1a,0x46,0x1a,0x2f,0x55,0x66,0x23,0x83,0xca,0x1f,0x83,0x78,0x49,0xf3,0xce,0xbb, \
-0x48,0x33,0x0c,0x3c,0xf5,0xeb,0xcc,0x38,0x13,0xba,0x50,0xe0,0x85,0x0a,0x91,0x24, \
-0xf0,0x82,0xcf,0xc8,0x75,0xa6,0xcb,0xee,0x97,0x79,0x58,0x2b,0x05,0x91,0x88,0xac, \
-0x6e,0xeb,0xf3,0x6e,0x03,0x29,0x94,0x4a,0x4a,0x53,0xab,0x04,0x18,0xc2,0x32,0xd9, \
-0x43,0x94,0x35,0xa0,0xb8,0xe6,0x4a,0x5e,0x94,0x90,0x0e,0x3c,0xea,0x32,0xc5,0x7f, \
-0x7c,0x43,0xe2,0x99,0xf2,0x26,0x8b,0x97,0x39,0xa1,0x54,0x62,0x45,0x0f,0x2f,0x0e, \
-0xc7,0xcf,0xe3,0x7c,0x23,0x47,0xd7,0x9a,0x80,0x23,0xd4,0xcf,0x0d,0x84,0x14,0x2a, \
-0x83,0xfc,0x5a,0xf4,0x9e,0xff,0x95,0x04,0x05,0x91,0xb1,0x24,0x42,0x24,0xee,0x92, \
-0x01,0x70,0x76,0xc4,0x5a,0x07,0x96,0x03,0xee,0x7d,0xb8,0x2d,0xdd,0x2a,0xcb,0xc6, \
-0xb0,0x70,0xdd,0xba,0xe9,0xaa,0x99,0xd0,0x36,0x87,0x31,0xac,0x03,0xa5,0x8a,0xc0, \
-0x30,0x02,0xc8,0x6c,0x18,0x5b,0x94,0x06,0x0d,0x23,0x5f,0xf2,0x85,0x63,0xd5,0xe3, \
-0xd3,0xa5,0x10,0xdd,0x22,0x20,0x68,0xd6,0xc4,0x5b,0x2e,0xa2,0xfa,0x29,0xd4,0xef, \
-0x78,0x5e,0x74,0xf8,0x5a,0x43,0xa3,0xab,0xe0,0x77,0xf4,0x0c,0x27,0x2e,0x67,0x08, \
-0x76,0x0f,0xca,0x94,0x3e,0xff,0xae,0x16,0x68,0xcc,0xe2,0xda,0x5b,0x3c,0xe1,0xcd, \
-0x71,0xce,0x7b,0x63,0x55,0x65,0x44,0x40,0xa4,0xbb,0x5a,0x22,0xc9,0x51,0x31,0x31, \
-0x81,0xf0,0x87,0xd3,0xce,0x67,0x46,0x5e,0x78,0x37,0x37,0xa1,0x5b,0x53,0x97,0x00, \
-0x90,0x50,0x77,0xa1,0x39,0x49,0xdc,0x4d,0x10,0x56,0x26,0xeb,0x69,0xc8,0x65,0x38, \
-0xc5,0x26,0x54,0x66,0x45,0xe4,0x10,0x1a,0x73,0x1d,0x38,0x42,0xc3,0x60,0xe4,0x1c, \
-0x81,0x92,0x6c,0xdd,0x8a,0x0d,0x2c,0x54,0x10,0xb7,0xb5,0x24,0xb0,0x53,0x01,0x19, \
-0x61,0xf2,0x1e,0x5b,0xfd,0xc0,0x8f,0x5f,0x54,0xe0,0xcb,0x4a,0xc1,0x2c,0xeb,0xce, \
-0x49,0x84,0x84,0x62,0x81,0xd2,0x44,0x07,0xdf,0x18,0xfd,0xb0,0x01,0xd2,0xbb,0x5c, \
-0x0b,0x7b,0x89,0xfd,0xf2,0x57,0xe7,0x8d,0xe0,0x66,0x6e,0x0c,0xbf,0x54,0x10,0x99, \
-0xd4,0x16,0x16,0x49,0xb3,0x58,0x66,0x94,0xda,0x21,0x64,0x03,0xef,0xbf,0x67,0x66, \
-0xf0,0x9a,0x24,0xfa,0xfd,0x82,0x11,0xa7,0x0a,0x8c,0xba,0x81,0x9b,0x9e,0x9e,0x25, \
-0x29,0x02,0xde,0x3a,0x34,0x15,0xad,0x50,0x43,0xc9,0x0c,0xe4,0xa6,0x04,0x1d,0x63, \
-0x34,0xce,0x1a,0xe4,0xa6,0x69,0x5c,0x00,0xb8,0x68,0xe6,0xde,0x29,0x94,0x50,0x98, \
-0x40,0xc5,0xd6,0x29,0xbb,0x74,0x25,0x43,0x71,0xae,0x1a,0xf7,0xb4,0xc9,0xaa,0x41, \
-0x67,0x0c,0xd9,0x64,0xca,0x12,0xa6,0x8a,0x33,0x54,0xd6,0x72,0x2e,0x04,0x19,0x2d, \
-0xf7,0xe2,0x9c,0xa9,0xb6,0x2b,0xa6,0xd6,0x26,0x5b,0x91,0x48,0xee,0x08,0x3b,0xaf, \
-0x8a,0x60,0xc8,0x31,0x3c,0x2f,0x2f,0x75,0xac,0xc0,0x4e,0xe9,0x37,0x75,0x5f,0x93, \
-0xd6,0x78,0x72,0xfb,0x88,0xf3,0x82,0x78,0x49,0xb2,0x4c,0xff,0x16,0xb1,0xa7,0xdb, \
-0xed,0xba,0x09,0x1e,0x47,0x5f,0x7c,0xa3,0x05,0x95,0x8d,0xec,0x22,0x65,0x11,0x10, \
-0x29,0x22,0x0f,0x9e,0xd8,0x1c,0x1d,0x6d,0x6c,0xc7,0x5a,0xb1,0x36,0x20,0xfa,0x3a, \
-0xa6,0xad,0x76,0x2d,0x9b,0xe5,0xd3,0x51,0xbc,0x88,0x29,0xd6,0x28,0x24,0xd5,0x45, \
-0xd2,0x3c,0x9c,0x9f,0x0c,0x3b,0x8a,0x1e,0xe6,0x81,0x5e,0x7a,0x5d,0x04,0x8a,0x05, \
-0xbe,0x32,0x04,0xb7,0x66,0x16,0x56,0x8d,0x6e,0xb6,0x31,0xca,0xf9,0x01,0x68,0xc5, \
-0xe8,0xd0,0xbf,0x5b,0xf6,0xe1,0xcd,0x6a,0x82,0xf6,0x5e,0x59,0x2e,0x6f,0x7b,0x5f, \
-0xd8,0x78,0x9a,0x24,0x95,0xae,0xf1,0x0b,0x5f,0xbb,0x57,0x22,0xd3,0x13,0x01,0x2e, \
-0x5c,0xe5,0x4f,0x0e,0x34,0xa0,0xdd,0x0c,0xc9,0xe7,0x20,0xfd,0xbf,0xd9,0xcd,0xf3, \
-0xb2,0x49,0x27,0x9b,0x7d,0x71,0xbf,0x3d,0x97,0x7d,0x4d,0x57,0x50,0xd9,0x1a,0x5c, \
-0x52,0xe1,0x6e,0xb7,0x07,0x07,0xcc,0xa5,0x98,0xc2,0x26,0x82,0x23,0x83,0x83,0x40, \
-0xec,0xef,0x42,0xc4,0x89,0x6a,0x4d,0x04,0x74,0x33,0x6f,0x22,0x87,0x68,0x64,0x11, \
-0xaa,0x0b,0xa4,0xf0,0x0f,0x55,0x18,0x36,0x89,0x1d,0x05,0x85,0xa7,0xbb,0xe1,0x60, \
-0x2a,0x17,0x33,0x44,0xfa,0x41,0x1e,0x21,0xaa,0x5c,0x18,0x22,0xb3,0x90,0xc2,0xfe, \
-0x87,0x65,0x15,0xba,0x8b,0x54,0x62,0x9f,0x39,0x1b,0x1d,0xec,0x97,0x9d,0x2d,0xa0, \
-0x97,0x10,0x12,0x6a,0xa6,0x81,0x83,0x2e,0x71,0xb6,0x04,0xd8,0xc2,0xc5,0xac,0x1b, \
-0x6b,0xa2,0xeb,0x4c,0x84,0x00,0xe0,0xeb,0xb5,0x5c,0x6f,0x21,0x45,0x43,0x52,0xe7, \
-0x5a,0xa5,0x60,0x43,0xa6,0x82,0x97,0xd0,0x58,0xd1,0xae,0xf8,0x9b,0x8d,0xae,0xba, \
-0xcd,0x02,0xbd,0x0a,0x06,0xd6,0xe9,0x84,0x4a,0x64,0x83,0x56,0x2b,0x92,0x81,0x10, \
-0x88,0x9b,0xa8,0x6b,0x48,0xca,0xd0,0x25,0xca,0x6f,0x9d,0x5f,0x2d,0x3c,0x44,0x5c, \
-0xf0,0xf3,0x80,0x1b,0xf0,0xe3,0xdd,0xd1,0x04,0x58,0xd0,0xb4,0x69,0xb4,0x30,0x62, \
-0xe2,0xc5,0x24,0x1c,0xd7,0x2d,0x95,0x63,0x5a,0xd4,0xc1,0xa8,0xf5,0xe0,0x2e,0xb7, \
-0x44,0x59,0x59,0x9b,0x2c,0x04,0x3c,0x1c,0x78,0x18,0x5b,0x91,0x55,0x35,0x91,0xb8, \
-0x77,0x4a,0xa5,0x36,0x6b,0x6b,0x3a,0x5a,0x81,0x34,0x95,0xa5,0x4a,0x08,0x6a,0xc0, \
-0x60,0xa2,0xc3,0x79,0x72,0x17,0x4a,0x06,0xd4,0x14,0xd5,0x8e,0xe8,0xe0,0xd4,0x11, \
-0x61,0x3a,0xa8,0xb2,0xbf,0x05,0xd5,0xc3,0x52,0xf2,0xee,0x12,0xba,0xaa,0x45,0x1a, \
-0xba,0xd7,0x2c,0x2d,0x5a,0xe0,0x10,0xc8,0x88,0xce,0x10,0x48,0x80,0x8c,0xfb,0x99, \
-0x03,0x49,0x41,0xb0,0xcd,0x2a,0x12,0x69,0x4a,0x98,0x2c,0x2c,0x12,0x2a,0x34,0x67, \
-0xcd,0x15,0x05,0xb4,0x41,0x69,0x60,0xc9,0x6a,0x5e,0x82,0xce,0xf0,0x8a,0x02,0x36, \
-0xf9,0xcd,0x9e,0xc7,0x56,0x25,0x78,0x39,0xc0,0x03,0x88,0xe7,0x4c,0x01,0x72,0x71, \
-0xbd,0x31,0x6e,0xd1,0x5a,0xc0,0x52,0xae,0x54,0xf8,0x1b,0x15,0x24,0x0a,0xbe,0x97, \
-0x6a,0x5c,0x1e,0x01,0x1e,0xbe,0x40,0xd5,0xb5,0x13,0x24,0xef,0x96,0x39,0x78,0x90, \
-0xd7,0x90,0xd4,0x3f,0x30,0xee,0xa5,0x1c,0xb4,0x37,0x6d,0xd3,0x10,0xdb,0x2b,0xaa, \
-0x53,0x86,0x5c,0xe3,0x95,0xfc,0x39,0x28,0x6d,0x3d,0x8c,0x26,0xa1,0x4a,0x51,0x91, \
-0x89,0xc4,0x72,0x1a,0x34,0x81,0x44,0xf8,0xa1,0xde,0xe7,0x46,0xa8,0x1b,0x63,0xe4, \
-0x20,0xea,0xb9,0x5e,0x60,0xbb,0x20,0x1a,0x1d,0x37,0x1a,0x6f,0xb9,0x4c,0xde,0xfd, \
-0x3e,0xd9,0x84,0xa3,0xb4,0xa1,0x6a,0xa9,0x02,0x28,0x62,0x24,0x0d,0x69,0x74,0x5d, \
-0xaa,0x70,0x80,0x74,0x3d,0x13,0xc1,0x47,0x8c,0x1a,0x54,0xbc,0xda,0x33,0x75,0x59, \
-0xe8,0x8b,0x9e,0x20,0x85,0xa2,0x90,0x0d,0x2f,0x44,0xe2,0x54,0x15,0x24,0x17,0x59, \
-0x79,0xe7,0x54,0xda,0x92,0xba,0xd1,0xa7,0xd4,0xe1,0x4b,0x86,0x8c,0x81,0x07,0x84, \
-0x2e,0x04,0xd2,0x9d,0x03,0xcc,0xbb,0x02,0x57,0xc8,0x3a,0x21,0x73,0x35,0xa4,0x2e, \
-0x52,0x73,0x3a,0x61,0x2a,0x58,0x46,0xc3,0xfa,0x8a,0x25,0x3b,0x36,0xe5,0xac,0xda, \
-0x59,0xed,0x21,0x2e,0x93,0x03,0x5e,0x9c,0x06,0xed,0xf9,0x35,0xb4,0x0e,0x03,0xa6, \
-0x47,0x30,0xfb,0xd4,0x0d,0x80,0x5a,0x0c,0x88,0xc7,0xb9,0x36,0xa7,0xb4,0x67,0x56, \
-0x16,0x41,0x33,0xc7,0x82,0x0d,0x93,0xbd,0x79,0x22,0x1e,0x8f,0x32,0xb6,0x30,0x4c, \
-0x15,0x28,0x7d,0x53,0x97,0x49,0x37,0x39,0xc3,0xcb,0xa2,0xe3,0xbb,0xa7,0x78,0x7a, \
-0x55,0x5d,0x18,0xb4,0xe3,0x63,0x13,0x6f,0x94,0xeb,0x9a,0xfb,0xd7,0x96,0xfd,0xfb, \
-0x8f,0x52,0x09,0x2b,0x62,0xe4,0x6c,0x2a,0x16,0xa7,0x6f,0x48,0x4c,0x98,0x04,0xed, \
-0x2a,0x8c,0x15,0xd3,0xba,0xce,0xa3,0xd7,0x45,0x0a,0x35,0xa7,0x43,0x24,0x1c,0x5f, \
-0x8c,0xe2,0x48,0x1d,0x7a,0x69,0xa7,0x3c,0x8a,0xcf,0x8a,0xfa,0x67,0x61,0xa8,0xaa, \
-0xc7,0x85,0xb6,0x22,0xd8,0xae,0x80,0xda,0x58,0x77,0x88,0x3b,0xc3,0x3a,0x35,0x94, \
-0x5d,0xc7,0x0a,0x99,0x39,0x92,0x91,0xf8,0xd5,0xf5,0x94,0xc8,0x35,0xcd,0xbb,0x76, \
-0xe9,0x12,0xfd,0xfa,0xd9,0xb1,0xad,0x57,0x52,0x48,0x3f,0x03,0xe1,0xfe,0x91,0x31, \
-0x27,0x22,0x7d,0xde,0x44,0x71,0xee,0x39,0x5b,0x07,0x4b,0x69,0x14,0x16,0x5a,0xfc, \
-0xb8,0x7a,0x04,0x34,0x1c,0x0a,0x90,0x90,0x73,0x7a,0x25,0xb9,0x40,0x94,0xdb,0x48, \
-0xb8,0xe4,0x34,0xf0,0xa9,0xd7,0xaa,0x70,0xa1,0x0a,0xec,0x63,0x74,0xf7,0xe2,0x7d, \
-0xcb,0x58,0x41,0x2a,0x24,0x5b,0x09,0xac,0x7b,0x33,0x58,0x6c,0xcc,0xdf,0x3b,0x4e, \
-0x67,0x35,0xa4,0xf9,0xaf,0x35,0x3c,0xf1,0x46,0x15,0x9b,0xa8,0xaa,0x20,0x6a,0x21, \
-0x60,0xb3,0x42,0xad,0x74,0x5a,0x55,0x12,0x39,0x01,0x15,0xd6,0x22,0xc2,0x51,0x4d, \
-0x2b,0x2c,0x68,0x68,0xc9,0x49,0x41,0x02,0xce,0xb4,0xd5,0x84,0x86,0x62,0x0c,0x4d, \
-0x60,0x8b,0x55,0x20,0x79,0x03,0xad,0x31,0x6c,0x1c,0x3b,0xba,0xbe,0xe0,0xf9,0x7c, \
-0x27,0x61,0xde,0x4f,0x48,0xf0,0x73,0xb0,0x41,0x5e,0x12,0x58,0x89,0x1b,0x2d,0x18, \
-0x46,0x04,0x8a,0x6b,0x68,0x42,0x95,0xf6,0x1b,0x6d,0xbf,0xa8,0xd0,0xbe,0x54,0xc9, \
-0x53,0x6a,0x18,0x67,0x59,0xef,0x50,0x7f,0xcc,0xa6,0x65,0xca,0xe5,0x2d,0x72,0x8a, \
-0x61,0x55,0xd5,0x5d,0xcd,0xaf,0x74,0x3e,0x1c,0x8d,0x09,0xc8,0xe4,0x1b,0x89,0x8b, \
-0x8b,0x08,0x46,0xcd,0x17,0x75,0xf0,0x61,0xe1,0xeb,0x0c,0x82,0xf1,0xd0,0xf1,0x3d, \
-0x18,0x18,0xc9,0x25,0x52,0xf5,0x0e,0x51,0x0d,0xad,0xfd,0xf1,0x0d,0x61,0x52,0x6d, \
-0xc0,0x27,0x9a,0x8f,0x7e,0xda,0x26,0xc8,0x2d,0xe7,0x14,0xb2,0x7c,0x7c,0x0a,0x9f, \
-0xbd,0x17,0xea,0x35,0xc0,0x43,0x9b,0x14,0xf7,0xf6,0xdf,0x9c,0xfd,0x58,0xa7,0xf6, \
-0x0d,0x19,0x32,0x0b,0x14,0xc6,0x30,0x4c,0x25,0x64,0x7e,0x9a,0x4c,0xa1,0x30,0x24, \
-0x51,0x06,0x2b,0x4b,0x6b,0x52,0x45,0x49,0x14,0x84,0x4d,0xf6,0x36,0x4d,0x2a,0xda, \
-0x13,0xdd,0x5e,0x8f,0x0b,0x43,0x03,0xb6,0x62,0xa3,0x6b,0x68,0x95,0x89,0x52,0x26, \
-0x5f,0x70,0xf4,0x54,0xd3,0x68,0x40,0x80,0x4b,0x44,0x0c,0x06,0x1a,0xda,0x0a,0xee, \
-0x86,0xe4,0x09,0xfe,0x31,0x9d,0xa8,0x04,0x44,0xe4,0x81,0x7a,0xb0,0x08,0x88,0x38, \
-0x0c,0x15,0x38,0xe3,0xa6,0x2c,0xae,0x33,0xcb,0x10,0x70,0x12,0x26,0xd8,0xa6,0x09, \
-0x06,0xf8,0xfb,0x20,0x2e,0xc8,0xe8,0x4f,0xd5,0xf5,0x6f,0xd6,0xb9,0x36,0x2e,0x3f, \
-0x3a,0x6d,0x0a,0xe9,0x23,0x05,0x84,0x47,0x54,0x46,0xe8,0x9b,0xd2,0x2e,0x31,0x56, \
-0xcd,0x51,0x8b,0xec,0x58,0xc6,0x95,0x76,0x13,0x1c,0xa1,0x8d,0x36,0xd7,0x13,0xb2, \
-0x43,0x10,0xb6,0x63,0x81,0xab,0x92,0xcf,0x43,0x9a,0x94,0x6f,0xf9,0x71,0xcb,0x2c, \
-0x6c,0x8d,0x6b,0x80,0xb8,0x07,0x50,0x14,0x84,0xca,0xc7,0x75,0x83,0x09,0x0c,0x61, \
-0xa4,0x93,0xef,0xec,0x37,0xea,0x45,0x2a,0x1b,0x60,0x0e,0x78,0x76,0xf6,0x38,0x9e, \
-0xac,0xf7,0x4c,0x2a,0x30,0x88,0x0a,0xa8,0xb1,0x56,0x08,0xc4,0xfa,0xed,0x18,0xd1, \
-0x2a,0x08,0xa8,0xc8,0xa8,0xc4,0x14,0x54,0xee,0x65,0x01,0x7d,0xbe,0x13,0xf8,0x7d, \
-0x47,0xf3,0xe3,0x5f,0x6e,0xf0,0x9f,0xbc,0x0c,0x07,0x5b,0x44,0x25,0x9c,0xba,0x17, \
-0x37,0x16,0x0e,0xff,0x25,0xd6,0xa8,0x23,0xe8,0x8c,0x8a,0x48,0x23,0x70,0xfb,0xd8, \
-0x06,0x40,0x44,0x0b,0xc5,0x54,0x5e,0x36,0xbf,0x21,0xc0,0xb6,0x32,0x0c,0x1d,0x25, \
-0x59,0x32,0x4c,0x08,0x5b,0x77,0x4f,0x9f,0xd5,0xfb,0x32,0xeb,0xc1,0x16,0x31,0xc7, \
-0x54,0x28,0x50,0x7a,0xb4,0x66,0x18,0x3f,0x77,0xf7,0x5f,0x5d,0x05,0xd6,0xff,0x94, \
-0x33,0xf6,0xea,0x64,0xc8,0x0a,0x41,0x0c,0xca,0x69,0x1c,0x25,0xa3,0x82,0x4f,0x2e, \
-0x4a,0xeb,0x30,0x00,0xbc,0x8c,0x5e,0x35,0x73,0x69,0x59,0xdc,0x43,0x49,0x4b,0x30, \
-0x08,0x35,0x12,0x00,0xba,0x62,0xde,0xb0,0x1e,0x8e,0xf2,0xbe,0xdf,0x52,0xd9,0x1a, \
-0xe9,0x92,0x8b,0xc7,0xa8,0x11,0x57,0x46,0x95,0x91,0xdb,0xbb,0x1e,0x5f,0x37,0x44, \
-0x19,0xcc,0xe7,0x45,0xc2,0xea,0xdb,0xde,0xd3,0x0d,0x3c,0x58,0x13,0x99,0x4d,0x91, \
-0x49,0xb9,0x49,0x10,0xcd,0x4f,0x90,0xcb,0x5a,0xf4,0xc1,0x78,0xf1,0xe2,0x3c,0xa3, \
-0x02,0x72,0xa1,0x20,0x50,0xf4,0x68,0xf1,0xd8,0x7a,0xf7,0xf0,0x1f,0x01,0x09,0x1e, \
-0x8d,0x96,0xbf,0x3e,0x07,0xb2,0x76,0x3d,0x67,0x2b,0xc8,0x4e,0xd1,0x20,0xa0,0xaa, \
-0x44,0x64,0xcb,0x02,0x15,0x05,0x84,0xa7,0xe5,0xef,0x3f,0x29,0x80,0xde,0x1b,0x90, \
-0x06,0x4d,0x6d,0x33,0xcc,0xd3,0x93,0x6c,0x2c,0x68,0x34,0xc8,0x01,0xe1,0x00,0x0e, \
-0x61,0x43,0x16,0x90,0x82,0x11,0x8e,0xb2,0xae,0xed,0xd4,0xd3,0xbf,0x86,0x36,0xf5, \
-0x63,0x4e,0x04,0xc7,0x59,0xd5,0x81,0x6b,0x94,0xe5,0x01,0x43,0x15,0xe3,0x03,0x9c, \
-0xf2,0x21,0xcc,0xd3,0x8f,0xab,0xbf,0xc6,0x33,0xc9,0xdd,0x7a,0x10,0xe9,0x3e,0x45, \
-0x61,0xb7,0x92,0x67,0x1d,0xed,0x84,0xc6,0xa6,0xd5,0xdc,0xef,0x03,0x8a,0xd1,0xd0, \
-0xde,0xdb,0x39,0x54,0x58,0xc3,0x80,0x1d,0x8b,0x44,0x8e,0xd1,0xe8,0xec,0x55,0x56, \
-0xd3,0x78,0x4e,0x51,0x0a,0xeb,0xb5,0xc5,0xe3,0x03,0xa2,0x08,0x63,0xe3,0x20,0x48, \
-0x8a,0xd1,0x20,0x40,0x79,0xf3,0x3f,0xc9,0xef,0xfe,0x4e,0xed,0x6c,0x76,0xd8,0xac, \
-0x60,0x82,0x08,0xc2,0x20,0xa8,0xb0,0x0a,0x1b,0xec,0x3e,0xd9,0xe0,0xda,0x6c,0x72, \
-0xe4,0x91,0xbd,0xd7,0x85,0xc7,0x75,0x2e,0xb8,0xe3,0xc5,0x16,0x06,0x85,0xfa,0xda, \
-0x03,0xd4,0x67,0xd6,0x9e,0xef,0x3f,0xa3,0xb0,0x7b,0xa3,0xd0,0xec,0x8a,0x92,0x2b, \
-0xa3,0x22,0x69,0x27,0x6b,0xb3,0x75,0xc5,0x63,0xcd,0xae,0x89,0x72,0x8a,0x11,0x48, \
-0xfb,0xbd,0x00,0x3e,0x21,0x41,0x8c,0x4f,0x1f,0x90,0xc2,0x1d,0x4b,0xf0,0xf9,0x31, \
-0xbe,0x8b,0x0a,0xdf,0x54,0x56,0x7f,0xbd,0x9c,0xa5,0x52,0xec,0xd0,0x95,0x4a,0x13, \
-0x13,0xb4,0xda,0xbd,0xc9,0x82,0x18,0xc4,0xbd,0x0a,0x12,0x4c,0x23,0x58,0x76,0x9a, \
-0xf4,0x30,0xe1,0x36,0x0d,0xec,0xea,0xdd,0x06,0x01,0x98,0xc6,0x3c,0x43,0xc5,0x0a, \
-0x94,0xad,0x67,0x96,0x23,0x0a,0x44,0x21,0xa1,0x85,0xc0,0xb6,0x56,0x00,0xa2,0x7e, \
-0xd4,0xcf,0x2d,0x4f,0xc3,0x88,0x6c,0xfb,0x1e,0x4a,0xdd,0x77,0x90,0x17,0x98,0xea, \
-0x5a,0x1b,0xba,0x4c,0x33,0xe9,0x4e,0xac,0x50,0xcc,0x42,0x94,0x6e,0x9f,0xe8,0xf5, \
-0x38,0xc7,0xb1,0xf6,0xcf,0xe9,0xc7,0x64,0xe2,0x45,0x0e,0x5b,0x95,0x81,0xf6,0x5e, \
-0xaf,0x02,0x75,0x87,0xe8,0xdc,0xe4,0x20,0xa2,0xc1,0x51,0x8b,0x20,0x90,0xc2,0x40, \
-0xe9,0xd7,0x3d,0xdd,0xe2,0x92,0x53,0x9e,0x2c,0xa4,0xc1,0x8a,0x7c,0x85,0x0a,0xbe, \
-0x16,0x55,0x22,0xaa,0x31,0x14,0x14,0x62,0x38,0x6b,0xa5,0xa0,0xbe,0x82,0x18,0x64, \
-0xd1,0x62,0x21,0x36,0xea,0xcb,0x1b,0xf5,0xed,0x2d,0x5b,0xec,0xa4,0xbd,0x19,0xf8, \
-0x63,0x54,0x6e,0x0c,0x3e,0x60,0xe9,0x07,0xdc,0x8b,0x50,0xdc,0x6d,0x23,0xf9,0xfb, \
-0xcd,0x60,0xde,0x13,0x08,0x02,0xf6,0xef,0xac,0x9d,0x62,0x1c,0x8b,0x99,0x55,0x88, \
-0x82,0x91,0xf8,0xdd,0xd3,0x11,0x53,0x28,0x15,0x40,0xaa,0x32,0x5c,0x63,0x13,0x0b, \
-0x96,0xc8,0xb0,0xc4,0x69,0x19,0x20,0x66,0x3c,0xe9,0xef,0x98,0xdc,0x40,0xdd,0x7e, \
-0x4c,0x5d,0x2d,0xdb,0x66,0xa2,0xb6,0xdf,0x66,0xe5,0x4c,0x02,0x88,0x7a,0xf1,0xd9, \
-0x82,0x56,0x31,0xb1,0xf3,0x94,0x4f,0x1c,0x09,0x15,0xaf,0xa6,0x80,0xdd,0x05,0xc8, \
-0xc0,0xd3,0xbe,0x83,0x32,0x8f,0x49,0x5e,0xa7,0x2c,0x03,0x18,0x10,0xd3,0xcf,0x36, \
-0x23,0x06,0xda,0xc4,0x64,0x8c,0x99,0x70,0xb0,0xc0,0x2d,0xc6,0x27,0x8a,0x33,0xf7, \
-0xad,0xa4,0x44,0xcd,0x0f,0x5e,0xa8,0x6d,0xc6,0xba,0xef,0x97,0xe8,0x18,0x89,0xec, \
-0x45,0x29,0xd4,0x95,0x5e,0xbf,0x96,0x9d,0x31,0xf1,0xed,0x7b,0x2a,0x4d,0x00,0x3d, \
-0x50,0xd9,0xcb,0x7f,0x34,0x71,0xac,0x85,0xaa,0x05,0x77,0xdf,0xc1,0x21,0x4b,0x50, \
-0x04,0x02,0x2e,0x41,0x77,0xc7,0x8c,0xe3,0xcb,0x02,0xee,0x81,0x1b,0xcc,0xe0,0xf0, \
-0x1b,0x6d,0x87,0xcc,0x09,0x38,0x4c,0x8c,0xf6,0x6a,0x6c,0xe8,0xee,0x0f,0x3b,0xde, \
-0x36,0x78,0xb2,0x63,0x1d,0x34,0xb7,0xec,0xa7,0x99,0xdd,0x21,0x9d,0xe1,0x28,0x55, \
-0xc9,0x66,0xd4,0x37,0x04,0x4c,0xdc,0xa2,0x46,0x51,0x7c,0xfe,0x4c,0x49,0xe0,0x1e, \
-0xf9,0xfc,0xdc,0xcc,0x9d,0x1d,0xe9,0xfa,0xd3,0xd4,0xe6,0xab,0xdf,0x3a,0xc3,0xa4, \
-0x03,0x51,0x1b,0x98,0x14,0x9d,0xcf,0xc1,0x87,0x47,0xb7,0x52,0x18,0x31,0x0d,0xa1, \
-0x0e,0xa3,0xbb,0xba,0x47,0xa9,0x41,0x04,0x91,0x8a,0xa4,0x38,0xb6,0x0c,0x74,0x16, \
-0xc6,0xda,0x22,0x2b,0x14,0x0a,0xc7,0xb7,0x7f,0xdc,0xc3,0x5e,0x26,0x91,0x9c,0xad, \
-0xa4,0x73,0x98,0xa5,0xa3,0x22,0x48,0xbc,0x3d,0x3e,0xec,0xac,0x74,0x9c,0x4e,0x1b, \
-0x83,0x4d,0x86,0x1c,0x67,0x0b,0x1f,0x4b,0x9f,0x08,0x63,0xb3,0x9d,0x53,0xbb,0xdb, \
-0xde,0xe0,0x81,0xce,0x61,0x89,0x4e,0x78,0x1a,0xc7,0x64,0x6d,0xf0,0xd1,0x79,0x32, \
-0x42,0xc5,0x0e,0x8b,0xb0,0x21,0x3d,0xb3,0x25,0x49,0xf2,0x6c,0x0f,0x42,0x1d,0x37, \
-0xa5,0x74,0xc8,0x14,0x18,0x59,0x0c,0x68,0x2a,0x09,0xb4,0xe7,0xc4,0xb3,0xcb,0xce, \
-0xd7,0xc3,0xd3,0x73,0x9b,0xc9,0x5e,0x41,0x0e,0x79,0xe8,0xac,0x4b,0x0b,0x0a,0xc1, \
-0x18,0xc5,0x76,0x4a,0x36,0x1b,0xcc,0x0b,0x21,0x54,0x0b,0x16,0x28,0x30,0x44,0xa2, \
-0x1c,0xb0,0x03,0xb1,0x0e,0x51,0x86,0x9b,0xa0,0x90,0x40,0x8b,0x98,0xc8,0x05,0xdb, \
-0x92,0x84,0x64,0x21,0x24,0x60,0x88,0x40,0x46,0x23,0x66,0x1a,0x24,0x16,0x7e,0xa3, \
-0x60,0x9a,0x70,0x36,0x1d,0x11,0x61,0x94,0xb9,0x41,0x28,0xb8,0x40,0xb4,0x2a,0xa0, \
-0x95,0xb6,0x8b,0x70,0x97,0x18,0xac,0x73,0x9a,0x92,0x02,0x01,0xb6,0xfa,0x98,0xe3, \
-0x50,0x85,0x68,0x08,0x4e,0x70,0x93,0xc4,0xb8,0xad,0xc7,0xe8,0xeb,0xf0,0x5a,0xa2, \
-0x15,0x5a,0x22,0x21,0x59,0xe1,0xaf,0x6b,0x0b,0x4d,0xf2,0x31,0x14,0x82,0x5f,0x1f, \
-0x77,0x9e,0xbc,0x53,0x66,0x07,0x8b,0x38,0xc0,0x9d,0x7e,0xbd,0x69,0x86,0xf6,0x1a, \
-0x1c,0xd9,0xe1,0x9f,0xa3,0x69,0xaf,0xe6,0x36,0x86,0x35,0x9d,0x8c,0xa2,0x92,0xd0, \
-0x6f,0x86,0x0a,0x2d,0x65,0x12,0x0e,0x28,0x51,0x8a,0x4c,0xe0,0xa4,0xc2,0x0b,0x81, \
-0xa8,0x5c,0x63,0x09,0x8c,0x2c,0xd9,0x31,0x38,0x2d,0xd1,0x83,0x1a,0x48,0x61,0xc4, \
-0x63,0xf9,0xa9,0x51,0x50,0x44,0x53,0x34,0x2b,0x83,0xbe,0xf5,0x79,0x9d,0x74,0x13, \
-0x6b,0xb2,0x21,0x65,0x1e,0xfb,0xc3,0x08,0x97,0x85,0x46,0xf6,0x28,0x94,0x8b,0x20, \
-0xb0,0x8a,0x39,0x84,0xad,0xa3,0x0c,0x06,0x30,0x67,0x99,0xa3,0xde,0x5a,0xcf,0xe2, \
-0x09,0xe9,0x37,0xc8,0xb0,0xc0,0xc2,0xa2,0x30,0x0d,0xd2,0x95,0xe0,0x2d,0x63,0x05, \
-0x74,0x96,0xc0,0x0f,0x87,0x21,0x61,0x2f,0x6a,0xf7,0xf9,0x5a,0xa6,0xc6,0x8b,0xc6, \
-0xae,0x0d,0x60,0xa0,0xaf,0x9c,0x2d,0x8d,0x73,0x4c,0xba,0xb8,0x9a,0x2f,0x75,0xfe, \
-0xbf,0x69,0x75,0x72,0xd1,0x80,0xd9,0xb5,0xbf,0x56,0xca,0x85,0x18,0xb2,0x39,0xb0, \
-0xf3,0xb1,0x0d,0xf1,0x31,0x09,0x30,0x3b,0x55,0xab,0x62,0x15,0xa3,0x15,0x8e,0x46, \
-0xb8,0x15,0x11,0x2d,0x2a,0x8b,0x25,0xa5,0x85,0x60,0xda,0xca,0x14,0x96,0x8c,0xa2, \
-0x5a,0x56,0x11,0x6d,0xac,0x6c,0x6e,0x53,0xf3,0x64,0x32,0x66,0x4e,0x0a,0xc6,0x58, \
-0xe1,0x97,0x50,0xa1,0x8b,0x03,0x00,0xc9,0x84,0x8f,0x68,0x11,0x0c,0x43,0xa9,0x36, \
-0x42,0x6a,0x1c,0x69,0x03,0x1e,0xf9,0xd0,0x04,0xa5,0xf9,0x78,0xfc,0x3d,0xd9,0xc8, \
-0xfc,0xe5,0x00,0xa1,0xff,0x21,0xb1,0x8c,0x47,0x2c,0x9c,0xf5,0x0a,0x43,0x09,0x3e, \
-0xb7,0x9b,0x3e,0xc6,0x64,0xf8,0x5e,0x19,0xd1,0x2b,0x26,0x4d,0x7e,0xdc,0x1b,0xa6, \
-0x58,0x44,0x7b,0xcb,0x17,0xaa,0xd6,0x6f,0xd5,0x22,0xbb,0xb3,0xa5,0x1f,0x4f,0xa6, \
-0xef,0x7f,0xaa,0xb9,0x0e,0xcd,0x73,0x94,0x85,0xa0,0x48,0x0b,0x11,0x66,0x7c,0x3a, \
-0xfe,0x29,0xfc,0x3f,0x08,0xdb,0x3b,0x85,0x4a,0xc2,0x94,0xa5,0xdc,0xd6,0x43,0x4e, \
-0xb4,0x6e,0x49,0x3d,0x98,0x32,0x08,0xbd,0x31,0xdb,0xb6,0x86,0xa1,0xd2,0x3b,0x32, \
-0x60,0x4c,0xbb,0xdd,0xd5,0xdf,0x22,0x62,0x6e,0xf8,0x24,0x24,0xaf,0x1f,0x3a,0x10, \
-0xcf,0xd3,0x31,0xb7,0xb8,0x2e,0x4c,0x6e,0x11,0xd9,0x76,0x71,0x03,0x06,0x04,0x88, \
-0xc2,0x2c,0x2a,0x9e,0x50,0x3a,0xd9,0x34,0x31,0x50,0x7b,0x2c,0x85,0x8c,0x41,0x51, \
-0x82,0x33,0xf3,0x78,0xa0,0xb1,0x62,0x82,0xc0,0x2e,0x67,0xbd,0x2c,0x9c,0x1b,0x72, \
-0x06,0x1e,0xae,0x9a,0x85,0xe5,0x99,0xaf,0x1f,0x65,0x66,0x8c,0xb0,0x40,0x92,0x41, \
-0x35,0x01,0x76,0x61,0xb2,0x0b,0x90,0xb9,0x10,0x48,0x04,0x90,0xae,0xc3,0x0c,0x85, \
-0x8e,0xcc,0x57,0x04,0x59,0xb3,0x36,0x5c,0x1f,0x73,0xa8,0x52,0x82,0x9d,0x6c,0x5d, \
-0x70,0xdf,0xcd,0x9e,0xb4,0x65,0x76,0x1c,0x63,0x08,0x06,0x5b,0x54,0xed,0x43,0xe5, \
-0x4c,0x0c,0x61,0xe3,0x68,0xc1,0x04,0x72,0x5c,0xb0,0xc4,0x3d,0xf1,0xa3,0x92,0xeb, \
-0xa8,0x0a,0x92,0x42,0x82,0x6e,0x00,0x80,0x97,0xc2,0x21,0x0d,0x74,0xf8,0xd3,0x1f, \
-0xc6,0xb7,0xc1,0xda,0xe9,0xca,0x9c,0x3b,0x00,0x3c,0x02,0xf3,0x7c,0x2b,0x92,0xcc, \
-0x6e,0xee,0xf2,0x21,0x35,0x0d,0x30,0x95,0x86,0xb8,0xaa,0x44,0xf2,0xeb,0x0f,0xbf, \
-0x0e,0x50,0x37,0x89,0x3a,0x98,0x4e,0x27,0x88,0xaf,0x7c,0xfd,0xa8,0x9d,0x4f,0x72, \
-0x5c,0x60,0x0a,0x08,0x6d,0xae,0xc1,0x16,0x40,0xc3,0xc0,0x43,0x5d,0x0e,0xe5,0x71, \
-0xe6,0xb4,0x72,0xc7,0xe7,0xd9,0xe0,0x81,0x23,0x22,0x68,0xd3,0xec,0x9e,0xfc,0x34, \
-0xe4,0x59,0xa7,0x2c,0xd5,0xbf,0x62,0xd4,0x8f,0x63,0x7d,0xea,0x13,0x1f,0x37,0x2c, \
-0x92,0x54,0x26,0xec,0x91,0xc0,0xe9,0xbb,0x7f,0xf5,0xea,0x59,0x71,0x40,0xa9,0xa3, \
-0xd2,0x02,0x22,0x24,0xee,0xf8,0x10,0x1c,0xaa,0x1e,0xb6,0x90,0xbe,0x5b,0x04,0xa0, \
-0x5b,0x23,0x22,0xda,0x93,0x18,0xb1,0x54,0x06,0x46,0x25,0x62,0x6a,0x1a,0xc8,0x74, \
-0xd7,0xa6,0xfe,0x9c,0xe7,0xce,0x20,0x7e,0x63,0xf7,0xeb,0xbd,0xc5,0xf9,0x9d,0x02, \
-0x60,0x15,0x9b,0x9f,0x70,0x98,0x30,0x89,0x84,0xa3,0x84,0xc5,0x98,0xda,0xe6,0xba, \
-0xec,0x2f,0x89,0xa9,0xae,0x6d,0x95,0xe1,0xb7,0x95,0x65,0xda,0xf9,0xa0,0x8d,0xba, \
-0xb5,0x35,0xeb,0x46,0xa1,0x40,0x60,0xe0,0x60,0xa2,0xe7,0x0b,0x80,0xfc,0x59,0x07, \
-0x7b,0x79,0x18,0x4c,0x6c,0xaf,0x87,0x9b,0x9b,0x95,0xd6,0x8c,0x73,0x6a,0xd4,0x85, \
-0x02,0x06,0x94,0xbd,0x5e,0x1f,0xd7,0x12,0x2b,0xd1,0xdb,0x01,0x65,0x86,0xbd,0x42, \
-0x4b,0x22,0x2e,0x61,0x9a,0x82,0x27,0xcb,0xc8,0xb5,0x70,0xe6,0xef,0xbe,0x09,0x32, \
-0x1f,0x77,0x1a,0x38,0x57,0x4f,0xbc,0x1b,0x43,0x7e,0x74,0x60,0xd9,0x0c,0xc4,0xc1, \
-0x81,0x21,0x23,0x92,0xed,0xaa,0xc8,0x30,0x81,0xca,0x0f,0xc7,0x3c,0x04,0x54,0xf8, \
-0x60,0x18,0x05,0xfa,0x3b,0x36,0x53,0x57,0x5d,0xe9,0x4b,0x8b,0x24,0x34,0x93,0xd5, \
-0x95,0x35,0x27,0x9f,0x88,0x1d,0x88,0xc4,0x83,0x15,0x14,0x62,0x0a,0x07,0xbb,0x44, \
-0xe9,0x09,0xdc,0x20,0x7d,0x7d,0x39,0xf9,0xef,0x8d,0x09,0xf2,0x77,0x74,0x4e,0x79, \
-0x39,0xa2,0xad,0xbe,0x4e,0x37,0x32,0xc0,0x1a,0x29,0x32,0xf3,0xc5,0x60,0x0a,0x28, \
-0xaa,0x0f,0x55,0x0a,0xc6,0x6d,0x49,0x94,0x0c,0x08,0x2c,0x0a,0x85,0xd0,0xd5,0x58, \
-0x88,0xaa,0x29,0x10,0x52,0x2a,0x82,0xb2,0xab,0x55,0x88,0x90,0x10,0x41,0x12,0x08, \
-0xb1,0x83,0xb2,0x16,0xe6,0x98,0x67,0xc3,0xf4,0x8c,0x6c,0x7d,0x21,0x88,0x18,0x24, \
-0xaf,0xd5,0x75,0x09,0xf4,0x54,0xa8,0x41,0x1f,0x8f,0xc6,0x6e,0xad,0x5b,0xce,0xe0, \
-0x24,0x65,0xc7,0x02,0x36,0x49,0xb0,0x07,0x99,0x66,0xa1,0xf1,0x21,0x95,0x41,0x82, \
-0xc7,0x29,0x96,0x60,0xa5,0x2c,0x37,0x31,0x70,0x2c,0x73,0x8a,0x38,0x96,0x41,0x57, \
-0x28,0x58,0x56,0xf5,0xf2,0x9a,0x4e,0xb1,0x2f,0x6c,0x7a,0xff,0x08,0x33,0x33,0xf8, \
-0x01,0xcd,0xb6,0xb6,0x0f,0xbc,0xfd,0x83,0xb9,0xb3,0x62,0x49,0x70,0x0d,0x9b,0x5e, \
-0x8c,0x87,0xa9,0x78,0xfc,0x07,0x19,0x8b,0x75,0xda,0x83,0x21,0xce,0x42,0xf1,0x67, \
-0x53,0x97,0x65,0xd4,0xf3,0x21,0x10,0xc8,0x18,0x99,0x79,0x40,0xf9,0x3d,0xbb,0x8c, \
-0x98,0x11,0xf9,0xba,0x45,0x58,0x0b,0x21,0x63,0x22,0x1a,0x4d,0x5e,0x5c,0x48,0xa1, \
-0x19,0xd6,0x03,0xdd,0x58,0xa0,0xa8,0x88,0x59,0x68,0x6c,0x63,0x38,0x21,0xb9,0xc8, \
-0x8b,0x11,0x23,0x18,0xc4,0x24,0x41,0x60,0x64,0x43,0x10,0xec,0x35,0xfa,0x49,0xf1, \
-0x28,0xc4,0x62,0x13,0x96,0x30,0x4e,0x32,0x17,0x19,0xf7,0x5a,0x86,0x18,0x84,0x92, \
-0x10,0xc2,0x18,0x0a,0x05,0xd8,0x89,0x43,0x20,0x1a,0x6d,0xb8,0xd4,0xd6,0x50,0xdf, \
-0x92,0xec,0x22,0x48,0x8c,0x89,0x60,0xe2,0x23,0x4b,0xa3,0xb9,0x3b,0x1c,0x77,0xca, \
-0x87,0x38,0x1c,0xcf,0x1d,0xbb,0xff,0xce,0x8a,0x4e,0x6f,0x6b,0xdb,0xbc,0x9d,0x42, \
-0x4a,0x48,0xc0,0xb9,0x29,0xdc,0xa3,0x05,0x05,0xad,0x10,0x8b,0x32,0x8a,0x18,0xa5, \
-0x10,0x19,0x20,0x87,0xc7,0xa2,0x1e,0xe8,0x6d,0xb6,0xd1,0x62,0x2d,0x01,0x41,0xb4, \
-0x68,0xca,0x4a,0x08,0xdb,0x0a,0xd6,0x91,0x75,0xd8,0x06,0xd5,0xa4,0x2d,0x0b,0x92, \
-0xf6,0x56,0x9e,0xc3,0x0a,0x82,0x98,0x30,0x61,0x23,0x08,0x5d,0xae,0x09,0x69,0x9f, \
-0x61,0x05,0x18,0xb9,0xd3,0x16,0x4b,0xc1,0xa9,0x9e,0x7f,0x3e,0xba,0x4f,0xbe,0xd7, \
-0xfd,0x70,0x7b,0x9d,0x7a,0x80,0xeb,0xca,0x1b,0x15,0x18,0x8e,0xc8,0xc5,0x8e,0x5f, \
-0xdf,0x82,0xb0,0xeb,0x89,0x7d,0x75,0xd4,0x99,0x9d,0x8f,0x48,0x85,0xfc,0xf7,0x8a, \
-0xd4,0xeb,0xab,0xe0,0xf3,0xe2,0xf0,0x81,0xe2,0x6d,0x59,0x80,0x84,0x80,0xd8,0x01, \
-0x40,0x7e,0xde,0x33,0x52,0x1f,0xf3,0xaa,0x0e,0x44,0x64,0x0b,0xc2,0xb9,0x0d,0x6d, \
-0x94,0x0d,0x2f,0x5a,0xb2,0x78,0x10,0x9b,0x79,0xf3,0x90,0x18,0x5b,0x7e,0x0a,0x3a, \
-0x9d,0x61,0xec,0xad,0x27,0x27,0xb3,0xd4,0x63,0xa0,0x77,0x3c,0x36,0x52,0x15,0x30, \
-0x9c,0xe4,0x76,0xdb,0x58,0xdf,0x9b,0x4f,0x40,0xc4,0xc2,0x4a,0x73,0x15,0x93,0x15, \
-0x8c,0x71,0xf8,0xf5,0x84,0x3e,0xc8,0x06,0x01,0xa7,0x33,0x9f,0x3d,0x51,0x71,0xbe, \
-0x1d,0x89,0xa1,0x37,0x06,0x89,0x9a,0xd7,0x9b,0xc0,0x23,0x90,0x15,0xac,0x33,0x93, \
-0xfd,0x62,0x86,0x01,0xde,0x13,0x04,0x74,0xc1,0xa6,0x17,0x0d,0x13,0x5d,0x7c,0x9e, \
-0x65,0x61,0x1c,0x6c,0xf5,0xf1,0x52,0x6f,0x27,0x88,0x84,0x36,0x20,0x76,0x91,0x9c, \
-0x20,0xe9,0xcd,0x10,0x10,0x17,0x09,0xc3,0x86,0x8b,0x71,0xdd,0x1a,0xab,0xae,0xe5, \
-0x1a,0x33,0x05,0x27,0x29,0x41,0x4c,0xd0,0x1c,0x93,0x6e,0x16,0xc0,0x1c,0x8f,0x46, \
-0xac,0x0d,0x50,0x6e,0xba,0x22,0xae,0xc9,0x07,0x66,0x62,0xb9,0xef,0x02,0xce,0x34, \
-0x15,0x99,0xc9,0x4a,0x8b,0x8e,0x0c,0xa6,0xf7,0xa8,0xc5,0x6c,0x2f,0x6d,0x33,0x1d, \
-0xe5,0x83,0xa2,0xa4,0x1a,0xeb,0x0b,0x32,0x88,0xbd,0xd9,0xee,0x15,0x3a,0x62,0x0c, \
-0xd6,0x6d,0x21,0x87,0xb5,0x4b,0x90,0x2c,0x6b,0x41,0x01,0x02,0x69,0x44,0x57,0xeb, \
-0xe0,0x8b,0x4e,0x96,0x16,0x69,0xeb,0x6d,0x07,0x70,0x31,0x67,0x6b,0x55,0x51,0xa4, \
-0x26,0x93,0xc5,0x0c,0x62,0x95,0x1b,0x1d,0x22,0x28,0xd7,0x3a,0xc4,0x84,0x4c,0x1d, \
-0x2a,0x70,0x1b,0x66,0x8b,0x7e,0x5c,0x94,0x3c,0x27,0xe3,0xf3,0xce,0x59,0xeb,0x05, \
-0x98,0x2a,0x4a,0xf6,0x4e,0xde,0x16,0x31,0x8c,0x18,0x8f,0xbe,0xec,0xdb,0x1e,0x11, \
-0xf7,0x0d,0x9e,0x49,0x84,0x68,0x1c,0x0b,0x00,0xb0,0xb8,0x16,0x2e,0xea,0x69,0xc0, \
-0x41,0xc4,0x10,0x88,0x37,0x59,0x5b,0x16,0xfa,0x5a,0xf6,0x3b,0xcc,0xd9,0x09,0x96, \
-0x67,0xaf,0x7e,0x15,0x43,0x36,0xc2,0xa9,0x93,0x03,0x84,0x9a,0x09,0xe2,0x81,0x86, \
-0xe6,0x89,0x1a,0xe0,0x1d,0xf0,0x96,0xc2,0xfd,0x67,0x9d,0x27,0xdb,0x0a,0xe7,0xf8, \
-0x74,0x71,0x09,0x03,0x3e,0x46,0x86,0x02,0x63,0x90,0x6a,0xf5,0x67,0x06,0xef,0x86, \
-0xaa,0x15,0xa2,0x52,0x87,0xcb,0xa0,0x39,0x9d,0x28,0x77,0x27,0x46,0x60,0x68,0xd3, \
-0xf9,0xfa,0x3a,0x38,0x5a,0xda,0x8c,0xf7,0xd3,0x72,0x37,0x2f,0x09,0xe7,0xd4,0x70, \
-0x0b,0xd7,0x4e,0xa9,0x76,0x4b,0x77,0x93,0x20,0x46,0xc6,0x9e,0x78,0x25,0x85,0x79, \
-0xb9,0x5d,0xf4,0x60,0x72,0x80,0xf2,0x82,0x48,0xc8,0xa9,0xf8,0xfe,0x86,0x8a,0x75, \
-0xc4,0x33,0xb0,0x5f,0x6a,0x5c,0x51,0xe7,0xfb,0x3c,0xf3,0x84,0x66,0xf6,0xe8,0x0c, \
-0xe2,0x94,0x63,0xe2,0x67,0x1b,0xa6,0x6e,0x30,0x4b,0x90,0xba,0xcd,0x99,0x71,0x74, \
-0x86,0x30,0xb5,0xcf,0xc7,0xd8,0x7a,0x43,0x8a,0x1f,0xd2,0xc9,0x0c,0x30,0x09,0xea, \
-0x26,0x49,0x0f,0x69,0x09,0x78,0xe7,0xcd,0x0e,0xac,0x9e,0xa3,0x32,0xcb,0xe1,0x42, \
-0xc6,0x1e,0x5b,0x14,0xfb,0x9f,0x46,0x40,0xeb,0xbf,0xb0,0x0e,0xb5,0x48,0x06,0x8d, \
-0xe8,0xcb,0xb4,0x25,0x2e,0xde,0x83,0x84,0xd1,0x1f,0x6c,0x24,0x8d,0x5e,0x1c,0xc8, \
-0x93,0xf3,0x6b,0x9b,0x46,0x88,0x69,0x80,0x36,0x71,0xe2,0x65,0xad,0xae,0x63,0x2a, \
-0xf9,0x6c,0x89,0xdf,0x15,0x38,0x72,0x06,0xd7,0x9b,0x0e,0xb2,0xe8,0xbe,0xd7,0x84, \
-0x0e,0x39,0x96,0x8c,0xe5,0x98,0x3b,0x37,0xd3,0x3a,0x73,0x7f,0x45,0xb8,0x37,0x61, \
-0xbb,0x9e,0x2b,0xa6,0xb1,0xa2,0xb8,0x58,0x04,0xdb,0x49,0x04,0x4b,0x45,0xd1,0x42, \
-0xe4,0xc1,0xaa,0x52,0x8e,0x18,0x3a,0xbd,0x8c,0x18,0x7a,0x10,0x86,0xd4,0x16,0x07, \
-0xde,0x30,0x60,0x4c,0x58,0xa9,0x82,0xa0,0x12,0xab,0x20,0x29,0xb0,0x15,0xab,0x48, \
-0x7d,0x00,0x30,0x0d,0x25,0x8d,0xa2,0x09,0x03,0x8a,0x82,0x50,0xde,0x11,0x84,0xcb, \
-0xa7,0x46,0x02,0x09,0x95,0xb5,0x2f,0x86,0x2e,0x8d,0x31,0x7a,0x89,0xa1,0x00,0xd1, \
-0x2d,0x73,0x81,0xe3,0x70,0x08,0x01,0x52,0x87,0x11,0xad,0x29,0xa3,0x95,0xc7,0x2d, \
-0x81,0x80,0x65,0xec,0x92,0xf3,0x4c,0x62,0x09,0x11,0x5e,0x51,0xcb,0x26,0xad,0xd0, \
-0x35,0x06,0x8b,0x2c,0x0e,0x4f,0x8c,0x8c,0xd3,0x49,0x94,0x0c,0x0b,0x83,0x7b,0x17, \
-0x89,0x1b,0x6e,0x86,0x1c,0x7b,0x03,0x43,0x10,0x54,0xac,0x6a,0x0c,0x74,0x40,0x7c, \
-0xa0,0x51,0xbc,0x07,0x84,0x25,0x90,0xa7,0x3d,0x4c,0xe2,0xeb,0x62,0x31,0xd1,0x49, \
-0x03,0x43,0x8d,0x70,0x58,0x42,0x48,0x04,0x68,0xda,0x15,0x22,0x0d,0x5a,0x2c,0x01, \
-0x66,0x5b,0x35,0x6b,0x40,0xca,0x94,0x83,0x65,0x17,0x38,0x17,0x02,0x14,0x20,0x08, \
-0x68,0x70,0x81,0x33,0x21,0xca,0xce,0x33,0x21,0x46,0x43,0x8c,0x02,0x12,0x75,0x18, \
-0xa0,0x41,0xfb,0xce,0x3f,0x33,0xde,0xaf,0xdd,0xd3,0x8e,0x99,0x25,0x9f,0x41,0xd4, \
-0xea,0xd3,0x66,0x71,0x1f,0x33,0x16,0x3a,0xae,0x4a,0xd4,0x9d,0x73,0x26,0xed,0xc9, \
-0x8e,0xc4,0x87,0x62,0x5e,0xf0,0x51,0x44,0x36,0x18,0x0f,0x07,0x44,0x9d,0x60,0x07, \
-0x30,0xd1,0x00,0xe6,0xc9,0x26,0x3b,0x20,0xac,0x88,0xe1,0x85,0x15,0x9f,0x34,0xdb, \
-0x05,0x70,0xa9,0x71,0x88,0x61,0xc4,0x43,0x7a,0x59,0x2d,0x56,0x04,0x40,0x45,0x84, \
-0x8b,0x10,0xe6,0xc5,0xd3,0x79,0x43,0x25,0xd4,0x0e,0x6e,0x65,0x14,0xb8,0xbc,0x58, \
-0x10,0x5d,0x51,0x70,0xb3,0xc1,0xbd,0x6b,0x86,0x46,0x26,0xf2,0xe6,0x06,0x05,0xa9, \
-0x75,0xf6,0x32,0x0d,0xd9,0xa7,0x1b,0x01,0x79,0xcd,0x72,0xd9,0x29,0x76,0xed,0xed, \
-0x49,0xd4,0xc6,0xcb,0xcd,0x25,0x11,0x13,0x12,0xd5,0x8e,0x0f,0x0e,0x9c,0xcd,0xd5, \
-0xd7,0xdd,0xe8,0xf2,0xe3,0xcd,0x03,0x27,0x85,0x28,0xe4,0xd5,0x92,0xb0,0xfd,0xcc, \
-0x0c,0x20,0x60,0x79,0x48,0x24,0x74,0x34,0x91,0x17,0x6b,0x64,0x56,0x65,0x51,0x1a, \
-0xd0,0xea,0x57,0x54,0x29,0x38,0xdd,0x5e,0x17,0xd6,0x53,0xdd,0xf3,0x93,0xdd,0x4a, \
-0xe1,0x9d,0xe9,0x56,0x33,0xe3,0xc9,0x61,0xc7,0x3e,0x9b,0xf9,0x4c,0x17,0xa6,0x82, \
-0xe8,0x35,0xa1,0x31,0xe5,0xc4,0xec,0x4d,0x93,0xc5,0x7b,0x28,0x23,0x88,0x98,0x53, \
-0x6a,0x65,0x70,0xb1,0x1a,0x9e,0x66,0x43,0x1c,0x81,0xd8,0xda,0xc1,0x36,0xeb,0xd5, \
-0x07,0x08,0x12,0x2a,0xef,0x82,0x14,0x8b,0x20,0x9b,0x60,0x21,0xa9,0x09,0x23,0xd4, \
-0x5e,0x3b,0xcc,0xc3,0x39,0x72,0x51,0x5a,0x45,0x0b,0x37,0xe3,0x11,0x0b,0x5d,0xd4, \
-0xb0,0x7b,0x99,0xbc,0x0d,0xa0,0x68,0x9c,0xd0,0x10,0xfd,0x9d,0x0c,0x87,0xbb,0x77, \
-0x06,0x3c,0x52,0x89,0xde,0x22,0x98,0xa5,0x0f,0x02,0xe1,0x3a,0x6f,0x9b,0x5c,0x68, \
-0xc8,0x75,0x0b,0x9a,0x21,0x0d,0xa6,0x97,0x7f,0x1b,0xb8,0xbd,0xe5,0x81,0x6b,0xb8, \
-0x08,0xa3,0x09,0xdb,0x86,0x28,0x6d,0x90,0xdb,0x88,0x95,0x83,0x3d,0xac,0x38,0x4f, \
-0x19,0x84,0x2b,0x3f,0x3b,0xfe,0x6c,0x37,0xf6,0xfd,0xb3,0xf7,0xe8,0x74,0xb4,0x8d, \
-0xba,0x8e,0x80,0x3e,0x77,0xcd,0xe0,0xc1,0x32,0x79,0xc8,0xa6,0xee,0xb3,0xee,0x64, \
-0x24,0xfa,0xf8,0x4f,0x6f,0x3f,0xe7,0x7b,0x49,0xbb,0xa0,0x8f,0x25,0xe1,0xa7,0x8f, \
-0x76,0x5f,0x4f,0x22,0xe3,0x7a,0xe0,0x06,0x8c,0x41,0x88,0xe1,0x2e,0x2f,0xf1,0xfb, \
-0x96,0xfb,0x92,0x0f,0x6b,0xe8,0x0b,0x2d,0x00,0x9b,0xe6,0x88,0xb1,0x91,0xf5,0x94, \
-0x03,0xb0,0xfd,0xcc,0x69,0x30,0xfa,0x0b,0x41,0xc9,0xef,0x5b,0x28,0x4e,0xd8,0x0f, \
-0xde,0x79,0x15,0x7f,0x16,0x1a,0x3d,0x6f,0x12,0x49,0x87,0xdf,0x0f,0x1b,0x9f,0x9a, \
-0xc5,0xbf,0xae,0xc1,0x6d,0xf4,0x28,0x78,0xc7,0xcb,0xc5,0x4c,0x73,0xc4,0xe3,0x76, \
-0x62,0x5d,0x27,0x60,0xb0,0x82,0xd2,0x91,0x6d,0x88,0xef,0x22,0xbb,0x20,0xcc,0x4d, \
-0xb7,0x3b,0xce,0x3c,0x3f,0xe7,0xf1,0x54,0xf2,0x35,0xf5,0xa2,0x22,0x08,0x08,0xac, \
-0x83,0x22,0x30,0x46,0x4a,0xac,0xd8,0x1c,0x03,0x22,0x8a,0x45,0x48,0x53,0x5c,0xf9, \
-0xe0,0xda,0x1e,0xf4,0x47,0x6e,0xac,0xb2,0x14,0x47,0xe4,0x98,0x26,0x0d,0x06,0x56, \
-0xf7,0xe0,0x36,0x84,0x73,0x6b,0x57,0xba,0x87,0xfd,0x0b,0x23,0xd5,0x6b,0x61,0xa5, \
-0x79,0x22,0xab,0x8f,0x7f,0x6f,0x64,0x9f,0x89,0x10,0x3b,0x0f,0xed,0xeb,0xbd,0x5b, \
-0x34,0x54,0x95,0xbe,0x95,0x95,0xc6,0x1b,0x89,0x84,0x7b,0x89,0x64,0x11,0x27,0x5b, \
-0x66,0x5e,0x22,0x6c,0x30,0x61,0x66,0x91,0x84,0xf0,0xdd,0x45,0x9a,0x86,0xff,0xaf, \
-0x68,0x4a,0x12,0xa4,0x3b,0x22,0xa7,0x76,0xea,0x1b,0x7f,0x08,0xdd,0x98,0xd2,0x5c, \
-0x62,0x67,0x18,0xd4,0x49,0xf8,0x32,0x44,0xa5,0xa4,0xe2,0x36,0x3b,0x35,0x73,0xf1, \
-0xc3,0xc5,0xac,0x31,0xdd,0x45,0xcb,0x3f,0x06,0xbb,0x66,0xd5,0xcc,0x25,0x61,0x17, \
-0xcd,0x14,0x32,0x31,0x68,0xeb,0x88,0x04,0xb3,0x55,0xbf,0xbd,0xf5,0x05,0xe9,0x80, \
-0xc9,0x09,0xe9,0xdb,0x4b,0x93,0xa9,0x31,0x4b,0xb7,0x5b,0x84,0x48,0x13,0xe9,0x88, \
-0xc9,0x0c,0xb3,0x92,0x5a,0xa0,0xfe,0xf3,0xe8,0x82,0x8d,0xe8,0x0b,0xfc,0xe4,0x85, \
-0xf5,0x9d,0xce,0xa8,0xfd,0x8c,0x27,0xc7,0x99,0xa5,0x57,0x17,0xaa,0x94,0x8b,0x7c, \
-0x42,0x7c,0xd4,0x52,0x83,0x3d,0xfd,0xc7,0x45,0xd1,0xcb,0xab,0x3f,0x2d,0x6b,0x56, \
-0x1a,0x52,0x9e,0xa3,0x08,0x10,0x1f,0xac,0xc6,0x79,0xb3,0x29,0xc0,0x82,0x25,0xcb, \
-0x56,0x51,0xb3,0x5e,0x5e,0x87,0xa9,0x41,0x95,0xb8,0x8f,0x75,0x2d,0xb4,0x10,0x89, \
-0x59,0xda,0xb9,0x68,0x05,0x56,0x13,0x8c,0x09,0x4a,0x20,0x4b,0x1a,0x62,0x1c,0x5c, \
-0x3b,0xca,0x42,0x53,0x0c,0x2c,0x62,0x69,0x5e,0x4c,0x7a,0xbc,0x82,0xc5,0x84,0x11, \
-0xc5,0x7f,0xa8,0xdb,0x1f,0x7f,0x50,0x5d,0x8d,0xa7,0x5c,0x15,0x53,0x0c,0xf3,0x61, \
-0x96,0xbe,0xcc,0x2f,0x24,0x04,0x5e,0x91,0x35,0x60,0xe5,0x7c,0x46,0x00,0x64,0x90, \
-0x1a,0xd1,0x40,0x9e,0xd7,0xb9,0xf2,0xe8,0x10,0x55,0xa6,0xc2,0xd9,0x10,0x2f,0x4c, \
-0x0f,0xc7,0x3c,0xff,0xbf,0xd3,0xfb,0x70,0x17,0xf4,0xbb,0xa4,0x56,0xef,0x87,0xb5, \
-0x65,0x8a,0x2e,0x9d,0x8a,0xc9,0xf1,0x9b,0x85,0x98,0xe6,0xbc,0xff,0xf8,0xbb,0x92, \
-0x29,0xc2,0x84,0x83,0x99,0x0d,0xf4,0x20, \
+0x68,0x31,0x31,0x41,0x59,0x26,0x53,0x59,0x79,0xda,0x6c,0xdc,0x00,0x14,0x2b,0x5f, \
+0x80,0x72,0x70,0x77,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x60, \
+0x3b,0x69,0x00,0x03,0xeb,0xb8,0x0a,0x0f,0x3d,0x7b,0xa2,0x8a,0x2a,0x9f,0x79,0xc2, \
+0x9c,0x80,0x57,0xdb,0x51,0x4d,0x00,0x3a,0x35,0xd0,0x5d,0xec,0x06,0xf8,0x01,0x7b, \
+0x73,0x89,0xd0,0xef,0x3d,0x92,0x22,0xaa,0xcd,0x1b,0x75,0x8b,0xa5,0x6b,0x7d,0xde, \
+0xef,0x5d,0xf7,0x19,0x41,0xe0,0xd3,0x7d,0xf6,0xef,0xb9,0xdf,0x15,0xf4,0x72,0x70, \
+0xdb,0x51,0x53,0x5e,0xf2,0x00,0x57,0x12,0x7b,0xd7,0x9d,0xbb,0x9e,0xef,0x52,0x4f, \
+0x45,0x99,0x9f,0x5a,0x8f,0x7d,0xbe,0xf6,0xd8,0xb6,0xd4,0xcd,0xb6,0xcc,0xb2,0x39, \
+0x64,0x75,0x90,0xaa,0xd1,0x6d,0x1a,0x6b,0xd3,0x9d,0xa2,0x9b,0x62,0xb4,0x6b,0x9e, \
+0x87,0x4f,0x77,0xbc,0x76,0xed,0xce,0xf3,0xc1,0x1d,0xef,0x69,0xb6,0x65,0x8d,0x6d, \
+0x4b,0x2b,0x78,0x6f,0x86,0x84,0x09,0xa0,0x00,0x26,0x80,0x26,0x26,0x23,0x46,0x84, \
+0x7a,0x54,0xf4,0xf5,0x19,0x4d,0xa9,0xbd,0x4d,0x1a,0x6d,0x23,0x23,0x27,0xaa,0x9f, \
+0xa1,0xaa,0x7b,0x54,0x60,0x69,0xa0,0x40,0x41,0x01,0x01,0x32,0x93,0xcd,0x09,0x1e, \
+0x9a,0x9a,0x69,0xa9,0xea,0x78,0xa6,0xd0,0x9a,0x34,0x0d,0x00,0xd1,0xa1,0x90,0x00, \
+0x1a,0x62,0x11,0x11,0x03,0x45,0x3c,0x84,0xfd,0x53,0xd4,0xd3,0x6a,0x7a,0x80,0x00, \
+0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x9a,0x50,0x84,0x40,0x09,0xa1,0xa2,0x64,0xc9, \
+0x32,0x69,0xa3,0xd1,0x13,0x10,0xc8,0xc4,0x7a,0x98,0x99,0x00,0x00,0x00,0x0d,0x04, \
+0x4a,0x20,0x09,0x88,0x40,0x69,0x4d,0x94,0x9e,0x4f,0x45,0x3d,0x4f,0xd2,0x53,0xf0, \
+0xa9,0xfa,0x9b,0x29,0xea,0x36,0x48,0xd0,0x46,0x40,0xc0,0x41,0xa0,0x18,0x12,0x22, \
+0x26,0x81,0x00,0x04,0x6a,0x60,0x84,0xc3,0x53,0xd1,0x0d,0x27,0xa5,0x3d,0x3d,0x12, \
+0x7a,0x9e,0xa7,0xa4,0x0d,0x32,0x68,0x00,0x1a,0x06,0x4f,0xfc,0x9f,0xbb,0xeb,0xbf, \
+0xeb,0x8f,0xfb,0xfe,0x3a,0xa0,0xf1,0xc9,0x10,0x53,0x3e,0xe5,0x9a,0xdc,0xbf,0xe7, \
+0xce,0xef,0xd3,0x1d,0x9e,0xe7,0x7e,0x68,0x23,0x7c,0x10,0x53,0xc5,0x91,0x3a,0x7f, \
+0x18,0x14,0x74,0x1e,0x7f,0xc3,0x84,0x70,0x70,0xa3,0xf7,0x7e,0xd5,0xd9,0xd7,0x4f, \
+0xdd,0xf3,0xad,0xa0,0x5b,0xf2,0xb3,0x25,0xab,0x0c,0xbc,0xa2,0x26,0x36,0x8d,0xa9, \
+0x5e,0xaa,0xe6,0x9d,0x56,0xba,0x9a,0xc9,0xb1,0x61,0xf1,0xe2,0xa2,0x81,0x57,0x5d, \
+0x5b,0x96,0xb0,0x1c,0x5e,0x93,0xfb,0xba,0x69,0x9c,0x7f,0xa7,0x1b,0xb9,0xc0,0xbd, \
+0xbf,0xe5,0xb3,0xfa,0x31,0xa5,0x20,0x62,0x03,0x6c,0xc8,0xd9,0xa1,0xa5,0x6e,0x6f, \
+0x18,0x79,0x45,0x9e,0xff,0x70,0xd2,0x67,0xac,0x98,0x0b,0x48,0x11,0x4c,0x81,0x0c, \
+0x89,0x5f,0xfb,0xdc,0xa5,0x60,0x99,0x9e,0xd8,0x24,0xfb,0xfe,0x47,0x91,0xee,0x07, \
+0x88,0x4f,0xfd,0xe2,0x1f,0x4d,0x58,0xe6,0x97,0x5c,0x7b,0x7d,0x7c,0xc9,0xfd,0xe0, \
+0x9e,0xaf,0xe9,0xbf,0x36,0x63,0xdf,0x4c,0x63,0x00,0xd7,0x65,0x30,0x1c,0x8a,0x7d, \
+0x69,0xef,0xa6,0x5a,0xf9,0xec,0x8d,0x25,0x2f,0xa1,0xc7,0x33,0xb7,0x49,0x9f,0x03, \
+0xb3,0x6a,0x9c,0x29,0xf7,0xc5,0x01,0x99,0x80,0x60,0xcc,0xcf,0xe9,0x92,0x46,0x31, \
+0x86,0x0c,0x8c,0xc8,0x02,0x00,0x01,0xf7,0x73,0x26,0xf3,0x20,0x02,0x81,0xaf,0xdd, \
+0xa7,0x9e,0x3f,0x4f,0x6a,0xea,0xdc,0x2e,0x7e,0xe3,0xfa,0x1e,0x3d,0x39,0x45,0x4a, \
+0xb8,0x7c,0x36,0x38,0xc4,0xe5,0xb9,0x55,0xc4,0x9b,0x60,0x1a,0xa5,0x8e,0x63,0x01, \
+0xa1,0x9f,0x90,0xd5,0xf3,0xdb,0x94,0xf9,0x7c,0x90,0x3e,0x9c,0xcc,0x12,0xaf,0x96, \
+0xa8,0x72,0xd9,0x61,0xa8,0x0a,0x0c,0xce,0x3e,0x69,0x89,0x8a,0xbf,0xcd,0x73,0x59, \
+0x15,0x38,0xee,0x8f,0x2c,0x9d,0x18,0xaa,0x5c,0xd0,0xd3,0x3c,0x8a,0x01,0x92,0x9c, \
+0xce,0xb6,0xf7,0xe5,0x2a,0xb7,0x09,0x38,0x5a,0xf1,0x2c,0xec,0x5e,0x8a,0xe7,0xe7, \
+0x6f,0x77,0x8e,0xa9,0xc6,0x88,0x64,0xeb,0x8d,0x75,0xdd,0xd0,0x03,0x72,0x6e,0x2b, \
+0xc8,0x28,0x19,0x01,0xbd,0x3d,0x86,0x3b,0x3a,0xb5,0x66,0x7f,0x48,0x6e,0xc3,0xb8, \
+0x7c,0x79,0xbe,0x2a,0x81,0x9a,0xe9,0xe0,0x4c,0xd1,0xe5,0x46,0xe1,0xb2,0x95,0x72, \
+0x6e,0xec,0xbf,0xa7,0x5b,0x76,0xa7,0x28,0x58,0x13,0x9f,0x56,0xc8,0x44,0xb3,0x32, \
+0xbc,0x3b,0x6b,0x5f,0x21,0xb2,0xf7,0x87,0xc7,0xa7,0x90,0x4f,0xb8,0x18,0x58,0x39, \
+0x8b,0x2e,0xd1,0x28,0xb0,0x68,0x7e,0xda,0x44,0xec,0x5a,0xd0,0x32,0x2e,0x77,0x51, \
+0xbb,0x87,0xd7,0x00,0xaf,0x84,0xb7,0x7c,0xb6,0xdc,0x25,0xea,0x75,0x31,0xf5,0x43, \
+0x7e,0x9c,0x16,0xf4,0xf6,0xe3,0x29,0x43,0x61,0x89,0x6a,0xe4,0x80,0x41,0x0b,0x07, \
+0x30,0xb0,0x63,0x31,0x64,0x88,0x83,0x5e,0x6c,0x0d,0xd0,0xfc,0xb9,0x26,0x1b,0x27, \
+0xc0,0x7a,0xb4,0x63,0xc6,0x00,0xc4,0xaa,0x40,0x43,0x88,0xc7,0x5a,0x03,0x33,0x06, \
+0x62,0xf5,0x05,0x10,0xf0,0x54,0x11,0x18,0x29,0x18,0xd3,0xf7,0xc2,0x15,0x6a,0x51, \
+0x86,0xf6,0x61,0x4f,0xb1,0xda,0xeb,0x6f,0xed,0xc3,0x23,0xd2,0xbb,0x1a,0x50,0x79, \
+0x94,0xe5,0x90,0x8f,0x17,0x4a,0x5d,0xa1,0x86,0xd6,0xdd,0xc8,0xc9,0xf0,0x66,0x5e, \
+0x94,0x48,0x37,0xc9,0x73,0xc3,0xb4,0xde,0x3b,0x6d,0xb3,0x24,0x98,0x5f,0x43,0x70, \
+0x05,0x5a,0xad,0x09,0x85,0x6d,0xdb,0xcb,0x0e,0x85,0xa7,0xfc,0xd0,0x2f,0xa7,0x1a, \
+0x43,0x69,0xde,0x3a,0xc3,0x66,0xdb,0x63,0x4a,0x13,0xac,0x1c,0x06,0x37,0x42,0xdf, \
+0xaf,0x45,0x2f,0x75,0xe4,0x44,0xf0,0x81,0x58,0x21,0x04,0x6a,0xb6,0xcd,0x8e,0xd9, \
+0x7b,0xef,0xf3,0xd2,0xa0,0x3c,0x4e,0x3f,0x6c,0x02,0x25,0x81,0xfc,0x4d,0x2c,0x88, \
+0x08,0x96,0x98,0xc0,0x10,0x0d,0x68,0x14,0x46,0x44,0xb3,0x20,0x80,0xec,0x06,0x41, \
+0x74,0xdf,0xfa,0x3b,0x1f,0x44,0x9d,0xcc,0x28,0x5d,0xbd,0x0e,0x0e,0x5c,0x9a,0x7f, \
+0x6f,0xb9,0xad,0x89,0x73,0xcf,0xa1,0x27,0x7a,0xf1,0x5a,0x06,0x9f,0x6f,0x8d,0xc5, \
+0x0f,0x76,0xc7,0x4b,0xa7,0xdc,0xa9,0xa3,0xb7,0x80,0x8c,0xb0,0x31,0x19,0x68,0x56, \
+0xee,0x99,0xb0,0x90,0x3e,0xb1,0xd7,0x5b,0xc2,0x7c,0x4a,0x28,0xa7,0x5d,0xe1,0xf4, \
+0x04,0x41,0x20,0x5e,0x72,0xfa,0xfb,0x6d,0x3e,0xa9,0xc2,0x4b,0xd9,0xc8,0xab,0x3b, \
+0x68,0x43,0x90,0x16,0x65,0x93,0xa1,0x9a,0x76,0x43,0x38,0x1d,0x4e,0xa4,0x01,0xee, \
+0xdd,0x64,0x8b,0x92,0x41,0xf8,0x9a,0x74,0xc6,0xb8,0xf6,0x54,0xfd,0x75,0xed,0x79, \
+0x69,0xf1,0xfc,0x23,0x2e,0x2f,0xf7,0x8a,0x8a,0xaa,0xaf,0x0d,0x36,0xed,0x70,0x30, \
+0x00,0xa2,0x0c,0xf7,0x5b,0xab,0xbb,0x5f,0xb6,0xdc,0xc7,0xc1,0xa0,0x63,0xd5,0xea, \
+0x5b,0x7c,0xf3,0x81,0xca,0xaa,0x64,0x63,0x67,0x72,0x75,0x66,0x46,0xee,0x12,0xec, \
+0x4f,0x1c,0x2f,0x6f,0x09,0x40,0xc3,0x65,0xc9,0x61,0xf4,0xe2,0xac,0xe0,0x85,0xab, \
+0x01,0xb0,0x50,0xf6,0xc5,0x39,0x8b,0xd6,0x43,0xa9,0x50,0xb6,0xc3,0x38,0x77,0x21, \
+0x43,0x74,0xd9,0x8b,0xfa,0x70,0xeb,0x91,0x68,0x22,0xda,0x06,0x5e,0x77,0xaf,0x15, \
+0x82,0x48,0xa0,0x2b,0x9c,0xab,0x3c,0xaf,0x27,0xb0,0xba,0xee,0x83,0x33,0x4f,0xab, \
+0x8a,0xb5,0x73,0xd1,0x6c,0x10,0xe5,0x62,0xfd,0x91,0x57,0x54,0x11,0x21,0xa8,0xf0, \
+0x83,0x33,0xe0,0xe2,0x7a,0xf6,0xb4,0x91,0xd9,0xbc,0x36,0x31,0xd2,0x5e,0xbf,0x32, \
+0x62,0x97,0x2d,0x37,0x2b,0x3c,0x35,0x24,0x76,0x79,0x37,0x66,0x3d,0x73,0xc4,0x31, \
+0x14,0x70,0x49,0xd2,0x02,0x0b,0x9d,0x3b,0x05,0xd9,0x95,0x01,0x00,0xe3,0xe4,0x6a, \
+0xf4,0x19,0xa8,0x70,0x3d,0xc7,0x87,0xbe,0xf8,0x54,0x0c,0x7e,0xe5,0x54,0x39,0x9a, \
+0xb3,0xb6,0x3b,0x6c,0xe6,0x6f,0x5d,0x9f,0xe5,0xce,0x8a,0x23,0x10,0x40,0xba,0xa9, \
+0x73,0x50,0x72,0x6f,0x96,0x2d,0xe5,0x45,0x20,0x86,0xf4,0x59,0x92,0x7b,0x5b,0x4f, \
+0x06,0xd2,0x78,0x52,0xf5,0x3e,0x1c,0x18,0x90,0xb2,0xe4,0x8d,0x7f,0x1e,0xae,0xf5, \
+0xae,0x96,0x11,0xfe,0xb3,0xcb,0xdd,0x03,0x5a,0xc5,0x0e,0x04,0xf7,0xbc,0x7b,0x6b, \
+0xa4,0x09,0x9f,0x79,0x1d,0x41,0x3e,0xac,0x01,0x96,0x50,0xec,0x04,0x93,0xf2,0x11, \
+0xef,0x8f,0xe6,0xf6,0xec,0xd5,0xba,0xb1,0xf5,0x93,0x75,0x10,0xb4,0xd9,0xce,0xd0, \
+0x3b,0x32,0xff,0x0b,0xaf,0xbf,0x7a,0xd6,0x88,0x31,0x72,0x71,0x5d,0x20,0x39,0xe8, \
+0x08,0x57,0xf6,0x2d,0x7b,0x1f,0x1b,0xd3,0xeb,0x60,0xa1,0x9f,0xe3,0xfa,0x6f,0xcb, \
+0x98,0x51,0x3d,0x55,0xb3,0xe9,0xec,0x73,0xeb,0xcc,0x10,0xb5,0x62,0x6e,0x62,0xbd, \
+0x59,0x71,0x7e,0xa7,0x3e,0xbb,0x96,0x7a,0x29,0xdd,0xa4,0xef,0xf8,0xfb,0xf9,0xbd, \
+0xfc,0xb8,0x8c,0x5e,0xc4,0x2a,0xf5,0x28,0xdb,0x9c,0x1d,0x0e,0x4f,0x1b,0x74,0x0c, \
+0xec,0x25,0xb7,0x49,0x96,0x9d,0x08,0x85,0xa2,0x3a,0xdc,0xe4,0xcb,0xa6,0x2b,0x01, \
+0x74,0xe7,0xcd,0xf7,0x1a,0xd8,0x05,0xce,0x12,0x22,0x00,0xa2,0xf6,0x5a,0x2b,0xcd, \
+0xb0,0xf7,0x32,0x40,0xac,0x50,0x82,0x84,0x5c,0x88,0x64,0x40,0xc5,0xc6,0x48,0x04, \
+0xcc,0x9b,0x9e,0xe8,0x4b,0xb3,0x5b,0x5c,0xb4,0x64,0x76,0x44,0xb6,0x0d,0x7b,0x26, \
+0xfc,0xe2,0x60,0xa7,0xa9,0xa3,0x9d,0x6c,0x7a,0xaf,0xcd,0xfa,0x3a,0xee,0x01,0xde, \
+0x78,0x8c,0xdb,0xe2,0x8e,0xb1,0x34,0x1d,0xf1,0x48,0xe6,0x24,0x8e,0x6c,0x3d,0xe2, \
+0x81,0x76,0x9a,0x99,0x21,0x7c,0xae,0xa7,0x1e,0x66,0x04,0x21,0xb1,0x2d,0x50,0x48, \
+0x77,0x23,0xa7,0xc2,0x4c,0xf4,0xb3,0xd8,0xa4,0xa8,0xde,0xa0,0xe8,0x95,0x2a,0x9a, \
+0xa6,0x8d,0x57,0xc4,0xa0,0xb9,0xfc,0xe8,0x25,0x33,0x06,0x36,0x9a,0x02,0x33,0x67, \
+0x94,0xd0,0x82,0x90,0x03,0xe9,0xc3,0x80,0x90,0xba,0x07,0xf1,0xc3,0x9f,0x89,0x6c, \
+0xfc,0x75,0x59,0x36,0x04,0x05,0x42,0xe6,0xcb,0x42,0xa9,0xeb,0xba,0x1d,0xbb,0xdf, \
+0x16,0x4d,0x7a,0x06,0x66,0x41,0xf0,0x66,0xb9,0xa2,0xca,0xe9,0x18,0xaf,0xf7,0x24, \
+0x8b,0x2d,0xef,0xda,0xea,0xb3,0xc5,0x23,0x61,0x7a,0xd0,0xe2,0x0c,0x1f,0xd0,0x69, \
+0x6e,0x41,0xc7,0xea,0x8b,0x4d,0xf6,0xf9,0x33,0x51,0xae,0x76,0x54,0x6f,0x82,0x4d, \
+0x2f,0x75,0x11,0x41,0xf3,0xc2,0x20,0x7e,0x2b,0xe1,0xfb,0x39,0xab,0x23,0xcf,0x0f, \
+0x12,0x59,0x6a,0x23,0x8a,0x3d,0x10,0xc7,0x89,0x69,0xa8,0xaf,0xac,0xef,0x79,0x00, \
+0x9f,0x4a,0x50,0x55,0x5f,0xed,0x34,0x81,0xeb,0x2f,0xde,0xf0,0x35,0xce,0x27,0xc3, \
+0xb9,0x90,0xc2,0x3e,0x59,0xfc,0x74,0x7a,0xf5,0x64,0xe3,0x82,0xe6,0x17,0x8d,0x1a, \
+0xf1,0x80,0x29,0xc6,0xad,0x00,0x6c,0xc2,0x0a,0x4f,0xb4,0x77,0xc1,0x8e,0x06,0x43, \
+0x89,0x34,0x3f,0x03,0x65,0x63,0xf8,0x71,0x19,0x57,0xf9,0x49,0xc8,0x38,0x27,0xb6, \
+0x10,0x92,0x0e,0xd5,0xe8,0x95,0x87,0xc2,0x25,0x39,0x5b,0xd4,0xb7,0xc4,0xd5,0x18, \
+0x74,0xb0,0x2a,0xf8,0x3a,0x62,0xa9,0x01,0xab,0xb7,0x21,0x0b,0x92,0x30,0x75,0xc2, \
+0xeb,0x2b,0x5c,0xb6,0x7d,0xa3,0x98,0xbb,0x0d,0x4f,0xd1,0xeb,0x17,0x6d,0xe0,0x5b, \
+0x18,0x81,0x68,0x59,0x8d,0x43,0xd2,0xc1,0x51,0x80,0xae,0x76,0x3d,0x61,0xd1,0x53, \
+0xdb,0xc7,0xb9,0x75,0x34,0x0e,0xe3,0x42,0xca,0x72,0x12,0xa2,0xe8,0x55,0x30,0x25, \
+0x34,0x0b,0xb2,0xd8,0x8e,0x5f,0xf8,0x1f,0x88,0x82,0x41,0x89,0xd2,0x8e,0xeb,0x57, \
+0x1c,0xac,0xd0,0x35,0x8a,0xa8,0xf3,0x49,0xeb,0x27,0x03,0x8a,0x94,0x25,0x03,0x39, \
+0x1c,0x98,0x1e,0x84,0xaf,0xcf,0xec,0xb3,0x9f,0x6e,0x11,0x7c,0xb0,0x57,0x68,0xda, \
+0xdf,0x5d,0x33,0x24,0x32,0x7d,0xf1,0xcf,0x84,0xde,0x07,0x24,0xc8,0x47,0x69,0x03, \
+0x21,0xb9,0xc1,0x05,0xb8,0xf7,0x6e,0x0c,0x78,0xba,0xdf,0x0d,0xfd,0xbf,0xa3,0xe4, \
+0xd2,0x17,0xec,0x96,0xe7,0x2c,0x3b,0xb8,0x0c,0x18,0x0d,0x2a,0xbb,0x2f,0x6a,0xc3, \
+0x87,0x20,0x3a,0xbd,0xfb,0x34,0xe4,0x1d,0xb3,0xb1,0xf8,0x2f,0x84,0xd8,0xb9,0x70, \
+0x1e,0x1a,0xab,0x9c,0x58,0xe7,0xd3,0x34,0xad,0x3f,0x54,0x49,0x41,0x93,0x4c,0x63, \
+0x1c,0x34,0x45,0x41,0x9f,0x06,0x83,0x2b,0x2e,0x8b,0xf8,0xf1,0x19,0xa8,0x8a,0x4b, \
+0x75,0xd7,0x78,0x1a,0xf1,0xf8,0x8f,0xb6,0xd6,0xaa,0x82,0x83,0x89,0x18,0x5f,0x70, \
+0xf9,0xc7,0x3c,0x1e,0x3c,0x06,0xdb,0x6d,0xb9,0x84,0x0a,0x2b,0x6e,0xb1,0x37,0x4b, \
+0x27,0x3d,0x44,0x65,0x98,0xce,0xa5,0xc6,0x68,0x32,0x1c,0x4f,0x9e,0x0b,0xe7,0x63, \
+0x18,0x87,0x9d,0xc9,0x38,0xdc,0x81,0x6b,0xc0,0xea,0x6c,0x29,0x58,0xc6,0x85,0x4c, \
+0x6d,0x83,0x44,0x5a,0x20,0xb9,0x8d,0x54,0x66,0xbf,0x04,0x5a,0x3f,0x40,0x3a,0xaa, \
+0x17,0xd5,0x44,0x26,0x00,0x03,0xa8,0xc0,0xd8,0x84,0x8f,0x93,0x3a,0x27,0x34,0x40, \
+0x2c,0x9f,0x69,0xcc,0x7f,0x79,0xec,0xb3,0xc2,0x26,0x51,0x2d,0x8f,0xae,0x08,0xd2, \
+0x05,0xee,0xe6,0xbe,0xb4,0x32,0x5c,0xd0,0x88,0x72,0xe1,0x97,0x52,0x03,0xa7,0x87, \
+0xf0,0x9e,0x0c,0x0e,0x4b,0xcd,0x16,0x44,0xf4,0xd8,0x71,0xfb,0x13,0xfa,0xfa,0xe0, \
+0x07,0x8f,0x57,0x62,0x80,0x98,0x33,0xeb,0x8a,0x63,0x8d,0x6c,0x65,0x7b,0xba,0x21, \
+0xbb,0x76,0x14,0xef,0xb4,0xde,0x0d,0xd3,0x1a,0xdf,0x2c,0xf7,0x41,0x6b,0x5d,0xdc, \
+0x7e,0x46,0x08,0xad,0x27,0xea,0x6c,0xeb,0xa7,0x96,0x6b,0xad,0x13,0xf4,0xd1,0x47, \
+0xc7,0x61,0x96,0x96,0x6f,0xbf,0xc4,0x38,0x15,0x94,0xac,0xa9,0x26,0x8b,0xec,0x3c, \
+0x6b,0xca,0x61,0x77,0x3c,0x68,0x01,0x0e,0x36,0x91,0x50,0x6d,0x21,0x78,0x10,0xc7, \
+0x4c,0x28,0xb0,0x0c,0xa3,0xc5,0xfc,0x2b,0x1e,0x7f,0x9c,0x6e,0x34,0x74,0xfc,0x97, \
+0x5a,0x77,0xa8,0xc9,0x74,0xed,0xda,0xd8,0xa6,0xd1,0xca,0x8d,0x6b,0x80,0xdc,0x3d, \
+0x74,0x78,0xa7,0xcf,0xa0,0x15,0xc6,0x8d,0x7b,0x28,0x1c,0x67,0xc5,0x5b,0x4c,0x0e, \
+0x13,0xa1,0x41,0x04,0x8c,0x57,0xb7,0xb9,0xf5,0xfd,0xe5,0x1c,0x8a,0x6e,0x7f,0x07, \
+0x96,0x03,0x14,0xbe,0x13,0x88,0xf2,0xdc,0xea,0xa9,0xa4,0x85,0xee,0xe0,0x8c,0xa7, \
+0xbb,0x0c,0x68,0xaf,0xbc,0xdb,0xa6,0x07,0x37,0x96,0xb5,0x4c,0x03,0x74,0x35,0x13, \
+0xa2,0x33,0x05,0x24,0x4f,0x39,0xeb,0xd1,0x40,0xfd,0x30,0xb6,0xf4,0x6a,0x9d,0x34, \
+0xe3,0xad,0x8e,0x4e,0xbb,0x60,0x64,0x55,0x4a,0xa1,0x5f,0x90,0x4a,0xbb,0x7e,0xa9, \
+0x11,0xdf,0xf3,0x69,0xae,0xdc,0xc6,0x17,0x01,0x49,0x04,0x39,0xcd,0xdd,0x02,0xb2, \
+0x67,0xd1,0xc3,0x6b,0x46,0x69,0xf1,0x8b,0x85,0xa9,0xfb,0x50,0xa6,0x82,0x3a,0xf6, \
+0xfe,0x8f,0xd9,0x0d,0x4e,0x86,0x95,0xae,0x6d,0x26,0x56,0xd6,0x82,0x83,0x07,0x17, \
+0x74,0x09,0x0c,0x4d,0x47,0x2d,0x0a,0x00,0x18,0x53,0x80,0xde,0x59,0xa6,0xf8,0xbc, \
+0x85,0xa4,0x2b,0x75,0xb0,0xd7,0x25,0x4b,0x26,0x03,0xcb,0x02,0x03,0xdc,0xb9,0x8a, \
+0xb2,0x64,0x6b,0x9e,0x6a,0x95,0x51,0xb3,0x3c,0x4b,0x1b,0xc7,0x33,0xef,0xa8,0x87, \
+0xd9,0x9e,0xc3,0x73,0x5e,0xee,0xe6,0x0d,0x8c,0x0c,0x07,0x51,0xd0,0x8c,0x87,0x0b, \
+0xe9,0x01,0x60,0xc2,0xf2,0x57,0x1c,0x7a,0x4e,0x91,0x8f,0xad,0x67,0x7b,0x66,0xe9, \
+0xe8,0xf3,0x1e,0x4b,0xeb,0x07,0xf0,0x86,0xda,0xf6,0xd6,0x42,0x8e,0x9c,0xaf,0x54, \
+0xfb,0x8c,0x6b,0xce,0xc2,0xf8,0xac,0xbd,0xc9,0x1a,0x86,0x50,0x6d,0x0f,0x99,0xaa, \
+0xca,0x32,0x52,0x8c,0x2c,0xfe,0xf3,0x04,0xfd,0x98,0xa9,0x4a,0x63,0xc6,0xc7,0xdb, \
+0x61,0x44,0x12,0xe4,0xf9,0x3f,0x65,0x22,0xb4,0x1b,0x8d,0x95,0x46,0x9f,0x4d,0x9e, \
+0x23,0xd5,0x34,0x91,0xf7,0xe2,0xda,0x04,0x7c,0x25,0xbf,0x58,0x68,0x25,0x0e,0x2e, \
+0xbe,0x00,0xa7,0x71,0x5c,0xc8,0xbb,0xc9,0xb4,0x0d,0x9b,0xe5,0x51,0x3e,0x3a,0x22, \
+0xc2,0xa5,0x3b,0x74,0x02,0xe3,0x03,0x6a,0x01,0x21,0x41,0xfa,0xbe,0xde,0xbe,0x88, \
+0xe2,0x9e,0x4a,0x95,0x3c,0x75,0xb4,0xd3,0x5a,0x02,0x7e,0x4e,0x43,0x7e,0xce,0x1d, \
+0x9d,0xf7,0x0d,0xa1,0xf3,0xe7,0x18,0x83,0x24,0x65,0x44,0x09,0xbb,0x75,0x33,0x88, \
+0xdb,0xc2,0x0f,0x72,0x56,0x31,0xca,0xc2,0x97,0x22,0x03,0x68,0xeb,0x1e,0x4a,0x9b, \
+0x1a,0x2d,0x75,0x6a,0x87,0xbb,0x04,0xed,0x14,0x23,0x8c,0xb0,0xf4,0x06,0x2d,0x55, \
+0xcd,0x23,0x4e,0x23,0xf1,0xcd,0xea,0x6d,0xa5,0x5a,0x35,0x1b,0x2f,0x08,0xdc,0x4d, \
+0x1a,0xbc,0x28,0x07,0xc3,0x48,0xde,0x54,0xa7,0xea,0x1c,0x6e,0x0b,0x73,0x23,0x85, \
+0xe6,0xb5,0xfe,0xb0,0x04,0xa4,0xd8,0x42,0x00,0x1a,0xc4,0xa1,0x69,0x3a,0x35,0x43, \
+0x3e,0xdd,0xd3,0x80,0xc9,0x62,0x17,0xd8,0x2b,0xdb,0xc3,0xf3,0xbb,0xe1,0x52,0x65, \
+0x40,0xd0,0xa9,0x1d,0x1d,0xab,0xe0,0x16,0x5d,0x78,0x69,0xe7,0x6d,0x20,0x76,0xde, \
+0x6a,0xcb,0x29,0xdc,0x46,0xaf,0x0c,0x8d,0x70,0xb9,0x73,0xae,0x0d,0x6f,0xdc,0xb9, \
+0x32,0x10,0x6b,0xb6,0xf6,0x6d,0x8d,0xbb,0xc8,0x2d,0xcf,0x6d,0xef,0xef,0xba,0xf3, \
+0x3b,0x73,0xf4,0x67,0x8c,0xd4,0x19,0x72,0x24,0xbe,0x54,0x90,0x0f,0x00,0xb5,0x28, \
+0x0d,0x7c,0x71,0xbd,0x92,0x3f,0x4b,0xc2,0xde,0x0c,0x01,0x26,0x25,0x39,0x98,0xd4, \
+0xdc,0x26,0x4b,0xcc,0xa4,0x33,0x4d,0x42,0xd6,0x82,0x0f,0x87,0xb3,0x71,0x3e,0x05, \
+0xfb,0xf2,0xc1,0xfd,0xac,0x9e,0x25,0x3c,0x90,0x7c,0x67,0x70,0xe3,0xea,0xfa,0x7b, \
+0x23,0x6c,0x05,0x68,0xab,0x4e,0x25,0xb0,0xdb,0x45,0x86,0x9e,0x0b,0x4e,0xc4,0x41, \
+0x9e,0x20,0xdd,0x98,0x1a,0x06,0x73,0x70,0xa5,0x09,0x1c,0x93,0x28,0xe3,0xae,0x09, \
+0xb0,0x15,0xec,0xd2,0xb3,0x6f,0x08,0x05,0x47,0xcb,0x0f,0x6e,0xdf,0x71,0x96,0x20, \
+0x42,0x18,0xaa,0xad,0xb0,0xc3,0x12,0x17,0x03,0x59,0x61,0x61,0xa7,0xbd,0xc6,0x79, \
+0x6f,0x7a,0x61,0x9c,0x81,0x9d,0x17,0x3a,0x57,0xb5,0xc0,0x7a,0xef,0xe4,0x06,0xfa, \
+0x8b,0xae,0xe0,0x86,0x36,0x37,0x3d,0x3d,0xe2,0x1c,0xba,0xd9,0x73,0xc7,0x71,0x00, \
+0x6a,0xd1,0x8a,0x72,0xa3,0xf1,0x4a,0xd0,0xc3,0xa4,0x02,0xc3,0xdf,0x2c,0xd6,0x55, \
+0x12,0xa1,0x5e,0xd0,0xbd,0xfc,0xe5,0xf4,0x16,0x9b,0x73,0x8a,0xe5,0x7b,0x2d,0x33, \
+0x82,0xd8,0x29,0x39,0xa6,0x92,0x80,0xe5,0x87,0x06,0x5a,0xd9,0xe8,0x48,0x66,0xa8, \
+0x44,0xe6,0x09,0x0f,0x07,0x3a,0x36,0xe4,0x4a,0x68,0xa2,0xb7,0x57,0x65,0x1b,0x10, \
+0xa7,0x4d,0x38,0xa6,0xc2,0x05,0x93,0x85,0x45,0x0e,0x7c,0x12,0xe2,0xf9,0xb8,0xa0, \
+0x7a,0x8a,0xb0,0x6c,0xf4,0x91,0x78,0x19,0xce,0x95,0xe5,0xc4,0xb1,0x66,0x04,0xdf, \
+0x07,0x21,0xf1,0xdc,0x14,0x0d,0x49,0x19,0x76,0x24,0xad,0x18,0x41,0x8e,0x64,0x22, \
+0x49,0xda,0x38,0xf2,0xe4,0x1b,0x4a,0x1c,0x5c,0x87,0x4b,0x5e,0xe5,0xd0,0xe4,0x15, \
+0x9b,0x12,0x28,0xc9,0x08,0x29,0x2f,0x40,0xbd,0x91,0x79,0x0e,0x00,0xb1,0x02,0xad, \
+0xbd,0x96,0x90,0xcc,0x05,0xc4,0x4c,0x99,0x8c,0x15,0x85,0x1b,0xe4,0x39,0x12,0x00, \
+0xa6,0xfe,0xc6,0x67,0x45,0x86,0xa3,0x2f,0x01,0xc6,0xcd,0x69,0xa5,0x35,0x05,0x81, \
+0x08,0x76,0x9a,0x82,0x37,0x20,0xa1,0x24,0x72,0x89,0x63,0xaf,0xa3,0xe9,0x5b,0x2e, \
+0x77,0xd8,0x5d,0x80,0xa1,0xb6,0xbf,0xd3,0xf5,0xef,0xd0,0x7a,0x78,0x70,0xf5,0x65, \
+0x06,0x72,0x6a,0x12,0x8e,0xe8,0xe0,0xb8,0x38,0x70,0xb1,0xf8,0x25,0x18,0xbf,0x0e, \
+0x1e,0xb8,0x1d,0x3b,0x2f,0x00,0xd7,0x8f,0x25,0x1d,0xfd,0x72,0x05,0xfc,0xe1,0x3e, \
+0x0f,0x62,0xda,0xab,0x37,0x26,0x50,0x6c,0xac,0x0b,0x78,0xfe,0x69,0xda,0x23,0x5a, \
+0x35,0x81,0xf4,0xdb,0xcf,0x17,0x8f,0x22,0x14,0x9e,0x15,0x0c,0xc2,0x69,0x60,0xd5, \
+0xf3,0xcf,0x97,0x35,0xc5,0xb3,0x51,0xc0,0xc0,0xfa,0x4e,0xf3,0xd0,0x56,0x7c,0x12, \
+0x19,0xbd,0x21,0xab,0x5b,0x6d,0x46,0x21,0xe0,0x7d,0x13,0xe1,0x5a,0x71,0x73,0xde, \
+0xca,0x46,0xa4,0x0a,0xf6,0x1c,0x70,0x8d,0x84,0x38,0x59,0xd6,0x81,0xda,0xf8,0x58, \
+0x2d,0x2b,0x18,0x30,0x0c,0x2d,0xc0,0x83,0xd1,0x2f,0x71,0x41,0x13,0xe9,0x13,0xf9, \
+0x0d,0x85,0x9c,0x59,0xeb,0x59,0x75,0x91,0xee,0xcc,0x48,0xee,0xf9,0xaa,0x36,0x85, \
+0x8c,0x60,0x6c,0xc3,0x2c,0x20,0xa4,0x94,0x8d,0xf1,0xa5,0x60,0x2e,0x8b,0x71,0xf7, \
+0x84,0x2b,0x63,0x8f,0x18,0xf6,0x72,0x5e,0x23,0xbb,0x4d,0xe9,0x75,0x53,0xc2,0x33, \
+0x12,0x61,0x6b,0xc3,0x01,0x5f,0xb4,0x03,0xdb,0xc0,0x54,0x0a,0x25,0x52,0x8a,0xb9, \
+0x67,0xd2,0xbe,0xe0,0x75,0x74,0x46,0x10,0x15,0xaa,0x16,0xc9,0xd1,0x6d,0xcf,0xec, \
+0xb5,0xb7,0x26,0x88,0x3a,0xdc,0xd8,0x59,0xf0,0x87,0xf3,0x5d,0x25,0x9e,0x9d,0x57, \
+0x1e,0x8a,0x76,0x96,0x08,0xc5,0x1a,0x9a,0xbe,0x1c,0x64,0x80,0xb9,0xd4,0xc4,0x4a, \
+0x8c,0x40,0xc5,0x26,0x83,0xda,0xbb,0x6c,0x95,0x1b,0x13,0xc1,0x53,0x13,0x59,0x0f, \
+0x07,0xdb,0xb2,0x0e,0xe3,0xb3,0xf4,0x29,0x4c,0x81,0x77,0x12,0xfe,0xb2,0x46,0x9c, \
+0x07,0x7c,0xa1,0x16,0x41,0x21,0x51,0x43,0x0a,0x0e,0xf6,0xd6,0xa8,0x28,0x15,0xaa, \
+0xf7,0xa9,0x72,0x0c,0xd9,0x68,0xdc,0x5a,0xff,0x6d,0x9b,0xc4,0xea,0x19,0x9a,0x3e, \
+0x38,0x5d,0x3a,0x85,0x1c,0x0e,0x5a,0x80,0x90,0xc4,0x88,0x6e,0xda,0x50,0xb8,0x9a, \
+0x08,0x32,0x1d,0x41,0xe7,0xa3,0x86,0xb2,0x28,0x38,0xc7,0x3a,0xc4,0xe9,0xc5,0x89, \
+0x97,0xb9,0x8b,0x1a,0xa0,0x77,0x4e,0x5b,0x72,0x24,0x1c,0x1c,0xae,0x6b,0x0a,0xdb, \
+0x3c,0xac,0xda,0xde,0x69,0x69,0xba,0xdc,0xc1,0x0f,0x53,0xa3,0xd5,0xc3,0x67,0x47, \
+0xe1,0xa5,0x54,0x0b,0x59,0x5a,0x1e,0x83,0x13,0xda,0xb4,0x31,0x97,0x0a,0x39,0x57, \
+0x25,0x8c,0xf2,0x5d,0x4c,0x0b,0x82,0xd8,0xde,0x2f,0x6e,0x72,0x5b,0x51,0x94,0xac, \
+0x04,0xfb,0x2a,0x56,0xd3,0x28,0x0e,0xbb,0xe1,0x54,0x12,0xdd,0xc3,0x38,0xb3,0xd4, \
+0xd6,0x3f,0x13,0x75,0xdb,0xa5,0x86,0x65,0x60,0x8e,0x04,0x78,0x11,0x60,0x06,0x07, \
+0x87,0x51,0x24,0x6d,0x3d,0xb2,0xc1,0xb5,0xa8,0xec,0xc7,0xde,0x87,0xa4,0xf1,0x66, \
+0xf1,0x85,0x1f,0xcb,0xec,0x68,0x73,0xd3,0x3c,0xbc,0x9f,0x91,0x4d,0x9e,0xad,0xd0, \
+0xd0,0x86,0x36,0x06,0x10,0x57,0x8b,0x75,0xc2,0xa4,0xe1,0x7f,0x4d,0xe6,0x3c,0xc2, \
+0xd8,0x56,0x83,0x24,0x71,0xa3,0x96,0x4d,0x38,0xf9,0x2b,0x18,0x51,0xd1,0x08,0x34, \
+0x54,0x5a,0x2e,0xe9,0xe5,0x7d,0x6c,0x25,0x06,0x32,0xac,0x7b,0x6c,0x3f,0x5f,0xdc, \
+0xff,0x35,0x2f,0x9e,0x66,0xe9,0xaf,0x77,0x0e,0x40,0x38,0xb7,0x1d,0x58,0x67,0xa9, \
+0xf6,0x97,0x88,0xa0,0xf2,0x8e,0x73,0x1e,0x65,0xd9,0x48,0x29,0xc3,0x18,0x6b,0x83, \
+0x33,0x2a,0x1f,0xcf,0x8b,0x81,0x02,0x99,0xdb,0x0d,0xee,0xdb,0xef,0xff,0xec,0xeb, \
+0xfa,0xff,0x6f,0xe6,0xfb,0x20,0x5a,0xc0,0xee,0xec,0x08,0x3e,0x66,0xa0,0xa0,0x61, \
+0x08,0x53,0xcc,0x35,0x65,0xcb,0xcd,0x96,0xec,0x47,0x70,0xd8,0x2a,0xda,0x35,0x22, \
+0x62,0xe6,0x2b,0x41,0x8a,0x2a,0x7e,0xcf,0xc8,0x94,0x8e,0x5f,0x54,0x04,0x30,0xc7, \
+0x47,0x4d,0x1a,0xe4,0xa9,0x02,0x40,0xee,0xff,0xe2,0x00,0x36,0x3f,0x44,0x41,0x41, \
+0x88,0x69,0x05,0x61,0x4a,0x20,0x96,0x5f,0x30,0x9d,0xf5,0xc7,0x32,0xe4,0x5c,0x71, \
+0xcf,0x1a,0xf5,0x65,0x47,0xed,0xee,0xf6,0xfc,0x79,0x67,0xfe,0x3b,0x38,0x68,0x4c, \
+0x7c,0xfd,0x1e,0xfd,0x1c,0x39,0x39,0xfc,0xe3,0x05,0x63,0xfa,0xc7,0x87,0x22,0xe9, \
+0xe5,0x40,0xe3,0x5a,0x92,0x53,0xbe,0x54,0xfc,0x1b,0xc0,0x6c,0x58,0x78,0x36,0x64, \
+0x93,0x40,0x00,0xf9,0x9a,0x79,0xd4,0xae,0x27,0x29,0xcf,0xad,0x2e,0xec,0x92,0x58, \
+0xf2,0xb5,0x07,0xf4,0x84,0x19,0x06,0x15,0x01,0x27,0xc3,0xf0,0x31,0x01,0x28,0xd7, \
+0xca,0x95,0xff,0xad,0x63,0x0e,0x0f,0x47,0x7b,0x29,0x60,0xda,0x8e,0x06,0x39,0xa2, \
+0x89,0x52,0x18,0xba,0x19,0x4b,0x1d,0xad,0x0a,0xcc,0x3a,0xf9,0xb8,0x1f,0x27,0x48, \
+0x40,0x01,0x99,0x98,0xf2,0x7c,0x51,0x5b,0xfe,0xd5,0x7f,0x10,0x17,0x68,0x1b,0x78, \
+0x15,0xff,0x3d,0x43,0x32,0xea,0x3d,0xd4,0x7b,0x73,0x55,0x68,0xdd,0x0b,0xe4,0xf6, \
+0x29,0xf8,0x6c,0x3e,0xdd,0xe9,0xe1,0x50,0x11,0x9c,0xb9,0xcd,0x36,0x6c,0xd3,0xcb, \
+0xee,0xbb,0x61,0xa5,0x70,0x75,0x4e,0x8b,0x86,0xa1,0x2d,0x88,0x2f,0xb7,0x7a,0xfb, \
+0xa4,0x8a,0x0b,0x18,0x16,0x54,0x6c,0x9c,0x6c,0x8e,0x02,0xa3,0x3b,0xd4,0x38,0x8c, \
+0x13,0x0a,0x31,0xe7,0x8c,0x5d,0x38,0x08,0xbf,0x87,0x9a,0xb9,0x18,0xcc,0xb5,0x28, \
+0x68,0xa6,0x8b,0x57,0x34,0x82,0x58,0x51,0x98,0x83,0xe4,0x0a,0x7b,0xe4,0x3a,0x25, \
+0xf7,0x92,0xa9,0x01,0xa3,0x47,0x6f,0x54,0x2d,0xcb,0x8c,0x4e,0x70,0x12,0x22,0x58, \
+0x1b,0x06,0x78,0xe4,0x77,0x1c,0xff,0x4b,0x6b,0xc8,0x24,0x15,0xdf,0x7f,0xc0,0x6b, \
+0xa2,0x9a,0xaf,0x35,0x7c,0x3c,0x96,0x9d,0x34,0xd1,0xed,0xdf,0x19,0x38,0x7f,0x47, \
+0xbf,0xcc,0xdb,0x4b,0xb9,0x46,0x54,0xa2,0x71,0xfa,0x4f,0xb2,0x60,0x6d,0x89,0x85, \
+0x42,0xb1,0x89,0x30,0x16,0x0f,0x5f,0xf3,0xe3,0x3f,0x9f,0xe1,0xc1,0x99,0xcf,0x8a, \
+0x61,0xac,0x18,0xf6,0x5b,0x3f,0x12,0x15,0x01,0x57,0x43,0x68,0x96,0x02,0xea,0x96, \
+0x22,0x41,0x06,0x3f,0x83,0xfd,0x30,0x51,0xfa,0x52,0x74,0x75,0x9b,0x62,0x4d,0xd0, \
+0xb0,0x45,0x53,0x16,0x55,0x15,0xdf,0xb2,0xe0,0x03,0x4d,0x6f,0x16,0x89,0x88,0x19, \
+0x12,0x90,0x44,0x65,0x4e,0x7e,0x5f,0x37,0xb8,0x5f,0xa7,0xf3,0x71,0x24,0x37,0x15, \
+0x18,0x07,0x16,0x40,0xbc,0xa8,0xda,0x26,0x2f,0xd8,0xc1,0x97,0x10,0x5e,0xc7,0x0e, \
+0x79,0x6b,0x04,0x26,0x50,0xd6,0x0b,0x1c,0x5b,0x33,0xf6,0xe9,0xba,0xa6,0x6b,0x0b, \
+0xa7,0x10,0xc4,0x9f,0xa9,0x90,0xce,0x65,0x9d,0xd7,0xe2,0xdb,0x2e,0x0a,0x8a,0x92, \
+0x1a,0x46,0x58,0x7c,0xf9,0xb9,0x84,0x62,0xa2,0x1d,0x1a,0xc7,0x8b,0x97,0xde,0x92, \
+0x17,0xf6,0x25,0x05,0x50,0x57,0x57,0x7c,0x5d,0xed,0x03,0x31,0xbf,0x8d,0x28,0xae, \
+0x0f,0x1c,0x63,0x97,0x2f,0x8e,0x71,0xcb,0x59,0xd8,0x27,0x18,0xaf,0x55,0xa6,0xb3, \
+0x83,0x68,0xdf,0x2a,0x49,0x5d,0x49,0xa2,0x93,0x65,0x42,0x67,0x33,0x6e,0xdd,0xb4, \
+0x87,0x2b,0xbb,0x02,0x6c,0x30,0x62,0x8b,0x98,0x5f,0xc1,0x68,0x4c,0x1c,0x17,0xa7, \
+0x06,0x47,0x96,0x61,0x2a,0x6a,0xcc,0xe3,0xa2,0xd4,0x0a,0x50,0xc0,0x37,0x32,0x16, \
+0x30,0x97,0x3b,0x52,0x65,0x87,0xd1,0x5d,0x5d,0xfe,0x4c,0x77,0xfb,0x9b,0xf3,0xed, \
+0x8b,0x3e,0x43,0x43,0x60,0x47,0xdc,0x50,0x04,0x4b,0x77,0x8b,0xfb,0x3a,0x2b,0xab, \
+0xfe,0x27,0x56,0xa8,0x0d,0x49,0x92,0xa0,0x4c,0xaa,0x5b,0xa6,0xd6,0xd5,0x3c,0xb8, \
+0x5b,0x89,0xd0,0xce,0xe4,0xf9,0xb1,0x93,0x39,0x90,0x21,0xfd,0x12,0x1f,0x50,0xc0, \
+0xfe,0xe4,0x95,0x16,0x00,0xdb,0x59,0xef,0x44,0x1d,0x68,0x84,0x0c,0xcc,0xc7,0x03, \
+0x22,0xcd,0x91,0x88,0x1b,0x06,0x00,0x60,0xb1,0xc5,0xd4,0xa2,0xdb,0x67,0x01,0x39, \
+0x67,0x2f,0xde,0x00,0x06,0xa1,0xa4,0x04,0xdf,0x3c,0x59,0x3e,0xac,0x25,0xcd,0xdb, \
+0xf5,0x7e,0xf8,0x87,0x08,0x6d,0xc7,0xf1,0xe3,0x27,0x9f,0x65,0x22,0xdb,0x89,0x36, \
+0xed,0x07,0xcf,0x00,0xef,0x40,0x16,0xc1,0xe4,0x6b,0x56,0x3c,0x7e,0xdb,0xb3,0xbf, \
+0x97,0x33,0xcb,0xb0,0xb8,0xfb,0x87,0xf0,0x1f,0xa8,0x8b,0xbf,0xce,0x5a,0x21,0xd1, \
+0x28,0x14,0xfe,0xe6,0x77,0xb1,0x7d,0x23,0x2e,0x0f,0x6e,0x74,0xcb,0x23,0x11,0x8b, \
+0xa3,0x17,0x74,0x38,0x3c,0x34,0x79,0x2a,0xfe,0x6a,0xab,0x4d,0xa7,0xfe,0x76,0x1f, \
+0x95,0xd9,0x0d,0x40,0xaf,0x61,0xa8,0x5b,0xe8,0x7c,0x5a,0xcd,0x9f,0xc1,0xff,0x83, \
+0x45,0xef,0xd6,0xf1,0x66,0x54,0xd0,0xb5,0x1b,0x62,0x06,0x83,0x7b,0xd8,0x58,0x27, \
+0x81,0x77,0xea,0x17,0x87,0x56,0x4e,0x8a,0xb8,0x0b,0xd8,0xb3,0xf8,0xb9,0x66,0xb1, \
+0x6d,0xe1,0x7a,0xd2,0xf0,0x18,0x46,0x1e,0xac,0x2d,0x15,0x86,0x82,0xa6,0x17,0x0e, \
+0x41,0x2d,0x62,0xaf,0xc6,0xe2,0x4c,0x84,0x70,0x99,0x1d,0x02,0x35,0x66,0x72,0x13, \
+0x6e,0xa4,0x94,0x5c,0x58,0x90,0xbd,0xd9,0xeb,0x51,0x2b,0xdd,0x65,0x25,0x35,0x90, \
+0x34,0x84,0x37,0xbc,0x6e,0x71,0xbe,0x8c,0x23,0xe5,0x45,0xb2,0x10,0x04,0x94,0xfd, \
+0x9f,0x0e,0x3c,0xa6,0x4e,0x76,0x4d,0x42,0xf4,0x60,0xc2,0xeb,0x11,0xb6,0xbf,0x40, \
+0xfc,0x2c,0x13,0xe0,0x2a,0x0f,0xd0,0x11,0x31,0x73,0x79,0xd5,0x8c,0xd8,0x6a,0xc4, \
+0x83,0xbd,0x69,0xa4,0x1d,0x01,0x0b,0x73,0xbb,0x3a,0x71,0x1c,0x5b,0xbe,0xa2,0xf9, \
+0x47,0xd6,0x70,0xf1,0x9b,0xb3,0xbc,0xd3,0xf2,0xf0,0x2d,0xe5,0x57,0x89,0x15,0x71, \
+0x51,0x35,0x9f,0x74,0xde,0xf1,0xd1,0xac,0x4b,0x3c,0x4a,0xd7,0x28,0x98,0xc0,0x1e, \
+0xa3,0x2e,0x27,0xf6,0xff,0x3f,0x3d,0xcb,0x13,0x77,0x7a,0x79,0x00,0xae,0x63,0x1d, \
+0xd4,0xa0,0x43,0x43,0x0a,0x3c,0x17,0x72,0x7b,0x3c,0xa0,0x7b,0x01,0xb9,0x84,0x1b, \
+0x66,0xe5,0xd0,0x2f,0xf4,0x28,0xf2,0xb8,0xcc,0x56,0x37,0x7b,0xbd,0x1f,0x1f,0x34, \
+0x59,0x0d,0xc6,0x15,0xce,0x69,0xce,0x4b,0xf8,0x91,0x3c,0x90,0x38,0x19,0x15,0x06, \
+0x13,0xd6,0x84,0x29,0x1e,0x51,0xf6,0xf5,0xe8,0xfe,0x14,0x4a,0x10,0xf8,0x91,0x34, \
+0x75,0x1c,0x6b,0xf5,0x1f,0x80,0xc0,0x75,0x1d,0x41,0x2a,0x2a,0x01,0x88,0x81,0x80, \
+0x58,0x96,0xb7,0x1f,0x2d,0x3b,0xf2,0x5e,0x04,0x35,0x37,0x55,0x21,0xa0,0xc1,0x0b, \
+0x0c,0xe7,0xe4,0x3d,0x1d,0x5b,0xfd,0x11,0x64,0x10,0x9d,0x29,0xe7,0xf4,0xfa,0x57, \
+0x44,0x8f,0x38,0x34,0x8f,0xed,0x4b,0xcc,0x3c,0xde,0xda,0xd4,0x0c,0x99,0x3a,0xe2, \
+0x67,0xca,0x98,0xf3,0xd6,0x7e,0x6d,0x69,0xcb,0xbb,0xb4,0x5c,0xda,0x68,0x6c,0x3d, \
+0xb0,0x11,0xfc,0xbe,0x25,0x83,0x4f,0x4b,0xef,0x02,0x80,0x74,0xc4,0x3f,0x9b,0xe4, \
+0xe9,0xae,0xc7,0x51,0x0e,0x13,0x79,0x0d,0x0f,0x7b,0xb7,0x9a,0x1f,0x73,0xce,0x15, \
+0x18,0x82,0x1b,0x35,0x54,0x11,0x88,0x8c,0x18,0x2b,0x14,0x8c,0x11,0x1f,0xaf,0xcb, \
+0x6f,0x30,0x7c,0x7c,0xca,0x1b,0x24,0xfb,0xb9,0xfd,0x2e,0x9f,0x30,0xfb,0xf6,0x20, \
+0x88,0x23,0x32,0xbf,0xc9,0xac,0x5f,0xb2,0xbb,0x45,0xa0,0xb2,0x3b,0xce,0x63,0x14, \
+0x2e,0x3e,0xd8,0x21,0x9d,0x49,0xd9,0x03,0x47,0xde,0xc2,0xcc,0x50,0xc0,0xc9,0x33, \
+0x50,0xb1,0x96,0x37,0xa9,0x16,0x48,0x88,0xce,0xba,0xce,0x6b,0x7f,0x33,0x91,0x01, \
+0xce,0x03,0x1d,0xae,0x23,0x0c,0x0a,0xc5,0x8a,0x82,0xc6,0x10,0x38,0x27,0xde,0xc6, \
+0x31,0x0e,0x5f,0x2c,0xfd,0x89,0x52,0xce,0x3e,0x8c,0xe7,0xc9,0x99,0x3e,0x18,0x31, \
+0x8c,0xd0,0xeb,0x6b,0xa2,0xd8,0x53,0x38,0x31,0xb7,0xb6,0xe9,0x00,0x7c,0x5d,0x60, \
+0xaa,0xc9,0xba,0x60,0x61,0xbe,0x29,0x96,0x19,0x69,0x8a,0x61,0x38,0x49,0x5c,0x94, \
+0xa4,0xba,0x7e,0x73,0xf6,0xce,0x02,0xf4,0xa0,0x88,0x8f,0x70,0xd0,0xff,0x0b,0x98, \
+0xa2,0x72,0x4b,0xb7,0x11,0xb4,0xb1,0x0c,0xa3,0x3e,0xbb,0xb2,0x43,0xe7,0x0b,0x40, \
+0x4a,0x11,0xab,0x37,0x42,0xac,0x28,0xa3,0x30,0x0c,0xaa,0x8c,0x4a,0xa2,0xb7,0x1e, \
+0x0b,0x38,0x2e,0x11,0x70,0xc4,0xaa,0x54,0x32,0x0e,0xe0,0xe3,0x1c,0xe7,0xb6,0x75, \
+0x5f,0x82,0x33,0xce,0x34,0x26,0xa8,0x33,0x8b,0x06,0x7b,0x59,0xf0,0x78,0xd6,0xa8, \
+0x4f,0x4b,0x09,0xba,0x40,0xce,0x69,0x9a,0x1d,0x7e,0xa3,0xa5,0x74,0x4d,0xd0,0x99, \
+0x33,0x05,0x5f,0x6f,0x13,0x36,0x09,0xb0,0xb2,0xe0,0x7e,0xaf,0x31,0x99,0x62,0xab, \
+0xde,0xdb,0x41,0xe8,0x7c,0x01,0xde,0xd2,0x5c,0xa6,0x0d,0xed,0x20,0xa9,0x3c,0xed, \
+0xdb,0x18,0x88,0x7a,0x5a,0xef,0x43,0x6e,0x0c,0x92,0x1b,0x30,0x0c,0xfb,0x12,0x61, \
+0x21,0x87,0x66,0xb3,0xc2,0x4f,0xa4,0x79,0xb3,0x49,0xa2,0xe2,0x67,0x92,0x8e,0xae, \
+0x00,0x43,0xc5,0xb1,0xf0,0x1a,0x05,0x1b,0x1e,0x04,0x50,0x8e,0x11,0xda,0x99,0xc0, \
+0x14,0x1a,0x85,0x4b,0xf9,0x66,0x30,0xe0,0x44,0x22,0xc8,0x0a,0x39,0xb3,0x40,0xe8, \
+0xac,0x6d,0x28,0xed,0x0b,0x41,0xb9,0x2d,0x68,0xd2,0x64,0xb0,0xf5,0xe4,0x1c,0xf0, \
+0x90,0x89,0x1b,0x3b,0x9d,0x83,0x12,0x94,0xf0,0xec,0x6f,0x0f,0xc3,0x86,0x04,0xf5, \
+0xc0,0xbf,0x4f,0xe5,0xa3,0xf4,0x0b,0xe4,0xd5,0x9f,0xda,0x4a,0x10,0x8c,0x27,0xf4, \
+0x48,0x21,0xf7,0xf7,0xc6,0xd1,0xaf,0x41,0x84,0x8b,0x3f,0x30,0x09,0x07,0xab,0x70, \
+0x18,0xae,0x7c,0x01,0xde,0x90,0x51,0xb9,0x28,0x1d,0xe5,0xa4,0xdd,0x68,0x64,0x92, \
+0x2c,0x11,0x97,0xd0,0xf2,0xd0,0xbf,0x7e,0x8a,0x1b,0x98,0x95,0xcc,0x6d,0xb3,0x08, \
+0x41,0x39,0xfa,0x4e,0xe9,0x18,0x27,0xdb,0x05,0xfa,0x4c,0x9a,0x5c,0xfd,0x4c,0x3b, \
+0xa3,0xc5,0x39,0xc0,0xf9,0xcd,0xac,0xeb,0xde,0x1a,0x64,0x63,0x5f,0x03,0x60,0x93, \
+0xc7,0xb5,0x24,0x6a,0x40,0x3b,0x2c,0x96,0xe6,0x87,0x62,0x41,0xed,0x40,0xb2,0x20, \
+0x44,0x48,0xc1,0x03,0x74,0x9c,0x20,0x19,0x8c,0x41,0x11,0x90,0x86,0x12,0x00,0xf8, \
+0x1f,0x0f,0x81,0x50,0x3f,0x76,0xfb,0x83,0x3b,0xe0,0x0a,0x9f,0x3e,0x36,0x6a,0xe4, \
+0x55,0xc3,0xf2,0xd8,0x79,0x30,0xbd,0x9b,0x86,0x03,0x63,0x30,0x5e,0xf3,0x43,0x03, \
+0xcf,0x43,0x3c,0x0b,0x29,0x69,0xc8,0xb0,0x99,0xd6,0xae,0xa5,0x84,0x03,0x0f,0x04, \
+0x60,0x07,0x9e,0x43,0x20,0x8d,0x4a,0x45,0xa4,0x60,0xc1,0xad,0xce,0x19,0x55,0x87, \
+0xd7,0xe0,0x4c,0x31,0x1f,0xde,0xd2,0x3a,0xdf,0xc3,0xd7,0x8a,0x30,0xf5,0x2a,0x83, \
+0x89,0xd1,0xa5,0x72,0x02,0x22,0x63,0xa6,0x7b,0x2a,0x1c,0x45,0xbd,0xc5,0x85,0x6c, \
+0x63,0xd9,0x49,0x9b,0x70,0x2c,0xd7,0xdf,0x71,0x10,0x76,0x61,0xf2,0x5b,0x26,0x91, \
+0x89,0x0e,0x46,0xac,0x15,0xdc,0xf3,0x16,0xba,0x39,0xe3,0xe8,0x38,0x77,0xa3,0xda, \
+0x9d,0xcf,0x98,0x3b,0x53,0x98,0x5f,0xb2,0x60,0xcf,0x65,0xac,0x81,0xc4,0x61,0x58, \
+0x1b,0x56,0x04,0xc1,0x8b,0xeb,0xc0,0xc1,0xd0,0x0d,0x9a,0x48,0x2a,0xca,0x3a,0x23, \
+0x1d,0x29,0x51,0xae,0xca,0xec,0x9c,0x43,0x86,0xcd,0xff,0x7f,0xb2,0xda,0x7d,0x60, \
+0x63,0x70,0x79,0xe0,0xc0,0x8a,0x69,0x54,0xb4,0x13,0x23,0xc4,0x6e,0x06,0xd9,0x40, \
+0x82,0x37,0x4c,0x0b,0x8e,0x06,0x0f,0x36,0xc4,0x1c,0xc6,0x85,0xba,0x85,0x99,0xa3, \
+0xf8,0x0f,0x4d,0xd9,0x74,0x09,0x3a,0x0d,0x03,0x3c,0x78,0x8d,0xc6,0x93,0x56,0xc5, \
+0xb0,0x80,0xde,0x96,0x93,0x36,0x66,0x7c,0xb1,0x03,0xd2,0xf8,0xd5,0xc0,0x8f,0x67, \
+0x2e,0xa1,0x46,0x53,0x1d,0x15,0x0c,0x69,0x4f,0x46,0x78,0xb6,0xda,0x4c,0x48,0xfb, \
+0xc9,0xc0,0xdf,0xe0,0x70,0x2c,0x3c,0x65,0x68,0x9c,0xf1,0x21,0x8d,0xc9,0xbe,0xc0, \
+0xcb,0xfd,0xa8,0x5b,0xa0,0x34,0x0e,0xd1,0x92,0x0c,0x0e,0xcc,0xb5,0x69,0x36,0x0c, \
+0x42,0xab,0x17,0x2e,0x87,0x5e,0x9d,0xfe,0xd3,0x96,0xc5,0xcd,0x86,0x2e,0x06,0xb9, \
+0xb0,0xac,0x16,0x44,0x44,0x62,0x32,0x2b,0x05,0x55,0x01,0x23,0xd2,0x63,0x12,0x14, \
+0x81,0x5b,0xa1,0xe8,0xa7,0xe4,0xf5,0x15,0x6d,0xc1,0x49,0x5a,0x26,0xcc,0x60,0xe9, \
+0x7b,0x5f,0x36,0x41,0xb4,0xd0,0x2c,0x01,0xd9,0x06,0x5c,0xae,0x0e,0x30,0xd4,0xa8, \
+0x34,0x32,0x37,0xc5,0x56,0xed,0x41,0x2d,0xbc,0xae,0x4d,0xf4,0x0a,0x25,0xb1,0x1a, \
+0x81,0x03,0xac,0x1e,0x08,0x16,0x6f,0x36,0x65,0x6c,0x83,0x32,0x46,0x58,0x50,0x01, \
+0x4d,0x49,0x1c,0x5b,0x49,0x4c,0x50,0x9e,0xc2,0x77,0x31,0x12,0x0a,0x2a,0x30,0x11, \
+0x22,0x89,0xc8,0x10,0xa6,0x06,0xc9,0xdf,0xf1,0x30,0x11,0xb3,0x39,0xc2,0xec,0x96, \
+0xab,0x24,0xe0,0x22,0x9b,0x39,0x88,0x96,0xf5,0x88,0x62,0x40,0xa6,0xa0,0x74,0x4d, \
+0xc7,0x47,0xc0,0x69,0xa0,0xba,0x4c,0x8a,0xf0,0x68,0x40,0xd0,0xee,0x2c,0x7b,0xa1, \
+0xe1,0xbd,0x38,0x83,0xaf,0x0b,0x7b,0x48,0x40,0x9b,0x1c,0xa0,0x49,0x28,0x39,0x71, \
+0x9a,0x89,0x4b,0xd2,0x6b,0xb8,0x25,0x59,0xe2,0xa2,0x39,0x16,0xc1,0xf5,0x65,0x04, \
+0xb2,0x5a,0x0c,0x96,0xcc,0x4c,0xfe,0xea,0x7f,0x2e,0x46,0xb6,0x72,0x8c,0x7a,0xf3, \
+0x81,0x59,0x94,0x1d,0x77,0xf2,0x92,0xa8,0xde,0x18,0x6c,0x3f,0x31,0x09,0x20,0x41, \
+0x49,0x05,0x49,0x3b,0x46,0x12,0xa1,0xfa,0x10,0xac,0x58,0x8e,0x1a,0x93,0xc7,0x5f, \
+0x1f,0xb7,0xdb,0x83,0x5e,0x54,0xe8,0x31,0xdb,0x84,0x49,0xed,0x92,0xdd,0x45,0xe6, \
+0xce,0xbb,0xd4,0x61,0xb1,0x32,0x97,0x7a,0x48,0x02,0xe2,0xbe,0xbd,0x41,0x23,0x2f, \
+0x70,0x08,0x0c,0x35,0x7c,0x73,0x30,0xca,0x8b,0x80,0x83,0x78,0x17,0xe2,0x6e,0xde, \
+0xdb,0x73,0xb2,0x08,0xb2,0x59,0x5e,0x48,0x6a,0xc8,0x60,0x28,0x3c,0x77,0x58,0xd3, \
+0x72,0x46,0x70,0x84,0x5a,0x91,0xde,0x4a,0xbc,0x41,0xa8,0xae,0xbb,0xba,0xee,0xd4, \
+0xa5,0x8c,0xdb,0x26,0x34,0x30,0x38,0xa5,0x86,0x01,0x00,0x70,0xea,0xfd,0x32,0xad, \
+0xcc,0xc6,0x6d,0xd9,0x7b,0x34,0x18,0xde,0x71,0x48,0x7b,0x80,0x24,0x3d,0x7c,0x88, \
+0xf1,0x59,0x97,0x52,0xde,0x81,0x4e,0x98,0x44,0xf3,0x10,0xfc,0xff,0x26,0x79,0x1b, \
+0x0b,0xd8,0x6c,0x54,0x93,0xfe,0xb4,0x01,0xc0,0xc3,0x6d,0x4f,0x37,0x41,0xb9,0xa2, \
+0x1b,0x46,0x08,0x2a,0xb0,0x8b,0xe9,0x9b,0x5f,0x0a,0xfa,0x4a,0x6c,0x00,0xa6,0x85, \
+0x1e,0x1f,0x85,0x4c,0x78,0x7b,0xbb,0xcd,0x68,0x2f,0xec,0x3b,0x95,0xac,0x3f,0x88, \
+0x16,0x0d,0x5b,0x7e,0x1f,0xbe,0x22,0x81,0x7e,0x81,0x19,0x63,0x79,0xbe,0x3b,0xb6, \
+0x69,0xf5,0x08,0xa4,0x58,0x88,0xa4,0x64,0x48,0x22,0x80,0xc5,0x44,0x48,0x0a,0xa7, \
+0xf2,0x35,0x67,0x36,0x8a,0xaa,0xc5,0x48,0xb0,0x60,0xc4,0x15,0x11,0x44,0x76,0xb2, \
+0xa4,0x54,0x9b,0xb9,0x4c,0x23,0x14,0x11,0x7f,0xc3,0x1b,0xe3,0xdf,0x99,0xdd,0xf2, \
+0x66,0x43,0x74,0x20,0x8c,0x20,0xb1,0x43,0xf9,0x52,0x1c,0xdc,0x48,0x2c,0x82,0x0a, \
+0x4e,0x69,0xd6,0xe3,0xc6,0x85,0x45,0xce,0x8a,0x72,0xb8,0x31,0xef,0x67,0x92,0x6d, \
+0x80,0xfa,0x31,0xa2,0x22,0x08,0x75,0xdb,0xfa,0x01,0x25,0xd9,0x31,0x99,0x7d,0x3d, \
+0x59,0x06,0x39,0x4a,0xae,0x74,0x90,0x09,0x6f,0x17,0x28,0xe7,0x7a,0xe3,0x2f,0x52, \
+0xc5,0x06,0xd8,0x83,0xd4,0x92,0x40,0x4a,0xf4,0x2e,0x5c,0xec,0x54,0xaf,0x74,0xcc, \
+0x28,0x54,0x34,0x48,0xd0,0xa1,0xde,0x83,0xf9,0xf5,0x74,0x02,0xcb,0x0f,0x7f,0xe3, \
+0xf7,0xa8,0x7d,0xf4,0xa4,0x27,0x15,0xa9,0x79,0xaf,0xc4,0xd2,0xce,0xe8,0x08,0x50, \
+0xa3,0x19,0xec,0xb4,0x6b,0x6c,0xef,0x37,0x46,0xa6,0x79,0xd2,0x13,0x27,0xff,0xaf, \
+0x4c,0x0b,0x3f,0xce,0x7f,0x22,0xd7,0xd6,0x3a,0x0b,0xf0,0xc4,0xc7,0xe4,0x37,0x07, \
+0x3d,0x54,0x06,0xfb,0xa1,0x13,0x64,0x7c,0x4a,0x5a,0x85,0x3d,0xa8,0x50,0x58,0x1f, \
+0x87,0xd9,0x13,0x30,0x77,0xc3,0x34,0xaa,0x75,0x5e,0x21,0xed,0xbb,0x96,0x38,0xab, \
+0x18,0xaa,0x9a,0x93,0x87,0x48,0xa5,0x79,0x4a,0x5e,0x5f,0x49,0x7f,0x9c,0xcc,0x85, \
+0x05,0x16,0xe1,0xd2,0x57,0xc5,0x85,0xda,0x11,0xe3,0x48,0x07,0x67,0x37,0xfc,0x6e, \
+0x6a,0x9e,0xec,0xc6,0x0f,0x02,0x2c,0x4c,0xa5,0x0f,0xda,0xe5,0xdd,0x77,0xaa,0x61, \
+0xfe,0xbe,0xcf,0x8d,0x82,0xaa,0x10,0xd0,0x8e,0xe6,0xbf,0x1b,0x47,0x46,0x95,0x37, \
+0xc1,0x56,0x12,0xc3,0x59,0xa4,0x45,0xd0,0xf8,0x3a,0xfb,0x8a,0xdd,0x09,0xd4,0xf8, \
+0x4e,0xb0,0x23,0xa3,0x5d,0x80,0x4f,0xb7,0x56,0xb4,0x42,0xab,0xaf,0xbd,0x8b,0x30, \
+0x73,0x8f,0x20,0xf1,0x1e,0x08,0x3e,0xa0,0x64,0x07,0xef,0x50,0x88,0x19,0xe7,0x16, \
+0x56,0xa1,0xc6,0xd0,0x60,0x18,0x6f,0x38,0xc6,0x73,0x59,0xa6,0xc6,0x6d,0x6a,0xcf, \
+0xa0,0x2d,0x6b,0x5f,0x94,0xff,0x5e,0xf6,0x7d,0xa9,0xe2,0x92,0x53,0xc4,0x29,0xf7, \
+0xec,0xb8,0xa4,0x95,0x80,0xdb,0x24,0xfb,0xd0,0x60,0x51,0x98,0x39,0x3d,0x84,0x7c, \
+0x92,0x17,0xbc,0x40,0xf2,0xfd,0x91,0x90,0x2a,0x73,0xaf,0x9a,0x62,0x87,0x16,0xd4, \
+0x17,0x73,0x9a,0x1f,0x59,0x89,0x02,0xae,0x64,0xf8,0xd6,0xc3,0x66,0x63,0x16,0x1d, \
+0x66,0x76,0x1b,0x58,0xf4,0x06,0x2c,0x90,0x3a,0x50,0xe5,0x13,0x18,0xbd,0x7e,0xea, \
+0xf7,0xc1,0xa2,0x50,0xe1,0x14,0x01,0x87,0xa6,0xdf,0xc3,0x1d,0xfc,0xa0,0xcd,0xbe, \
+0x8a,0x12,0x61,0xa2,0x43,0x32,0x6a,0x84,0x6d,0xdc,0x8c,0x0b,0x04,0x6a,0x3c,0x46, \
+0x07,0xca,0x74,0x05,0x38,0xa5,0xe6,0x16,0x57,0xc1,0x3e,0x3e,0x26,0xe1,0xda,0x8b, \
+0x33,0x77,0x55,0x8a,0xc0,0x0b,0xda,0x13,0xd8,0xe0,0x71,0xd4,0xd1,0x3c,0x0a,0x39, \
+0x15,0x0a,0x7c,0x40,0xd2,0x7e,0xcf,0x31,0x06,0x54,0x92,0xa9,0x25,0x9d,0x80,0x57, \
+0x0f,0xbb,0x85,0xb7,0x50,0xf6,0x55,0xbe,0xfb,0x25,0x5e,0x89,0xcd,0x41,0x42,0xac, \
+0xaf,0xfc,0x32,0xfb,0xa9,0x65,0x19,0x76,0x29,0xf2,0x82,0xff,0x2d,0x1b,0xa4,0x77, \
+0xc0,0x3d,0x09,0x0a,0x40,0xf7,0xc1,0x09,0x10,0x2c,0x0c,0x31,0x3b,0x8a,0xd3,0x7a, \
+0x6e,0xec,0x12,0xa5,0x97,0xbf,0x00,0x51,0xee,0x99,0x7b,0xf1,0x52,0x1f,0xc4,0x7b, \
+0x6e,0x02,0x31,0x48,0x3e,0xcb,0xcd,0x34,0x93,0x6d,0x1a,0xb0,0xb9,0x82,0xe8,0x8f, \
+0x8a,0xb5,0xd5,0xcc,0x99,0x6d,0x8b,0xac,0xa3,0xd0,0x11,0x01,0x2b,0x4f,0xb3,0x0c, \
+0xe4,0xc9,0x25,0xa5,0x79,0xd8,0x48,0x58,0x2f,0xc6,0xec,0x3d,0x10,0xac,0xae,0x06, \
+0xd0,0x5c,0xe1,0x44,0x90,0x29,0xc0,0x4c,0x47,0x32,0x48,0xd1,0x99,0x3d,0xa1,0x79, \
+0x7a,0xd1,0x80,0xaa,0xd1,0xd1,0xc3,0x18,0x3d,0xbc,0xb6,0x4e,0x59,0xa4,0x60,0xc1, \
+0xb4,0x1b,0x36,0x07,0xa7,0xf5,0xb7,0xc4,0xb8,0x4e,0xe3,0x83,0xb2,0x75,0x72,0x87, \
+0x59,0xa7,0x9d,0x05,0x3e,0x4d,0xc3,0x48,0xc3,0x25,0xe9,0xac,0xc4,0x64,0xe0,0x8f, \
+0xa1,0xc5,0xec,0x5e,0x0b,0x44,0x42,0x43,0x52,0xd1,0xc6,0xbc,0xf1,0x0d,0xe4,0x9b, \
+0x65,0x0e,0x08,0x08,0x54,0x86,0x1f,0x32,0x16,0x7a,0x81,0xa9,0xe3,0xce,0x19,0xc8, \
+0xa4,0x29,0x0b,0x81,0xa8,0x8b,0x3a,0xd3,0xf1,0x38,0xc0,0x96,0x72,0x94,0x65,0x2e, \
+0x34,0x20,0xcb,0x28,0xa4,0xe1,0x25,0x5c,0x3b,0x23,0x13,0x7b,0x71,0x8a,0x57,0xa5, \
+0xc3,0x7a,0x42,0x75,0x29,0xfe,0x2d,0x07,0xd6,0xf1,0xe2,0x3c,0x92,0xc3,0x79,0x91, \
+0x44,0x26,0x86,0x20,0xf9,0xb7,0x74,0x5e,0xef,0x3a,0xf9,0xc6,0x8f,0x8e,0x85,0x00, \
+0x47,0x83,0x36,0xf7,0xec,0x87,0x2a,0xa5,0xc8,0x3f,0x6b,0x5e,0x53,0x0f,0xbb,0xe9, \
+0x91,0x01,0x72,0x36,0x09,0x10,0x86,0xfb,0x5b,0x60,0x48,0x76,0x34,0x5a,0x07,0x9a, \
+0x03,0xf6,0x3f,0x1b,0xd6,0xbc,0x95,0x97,0x0d,0x94,0xa0,0xdf,0xc7,0x8d,0x66,0x76, \
+0x69,0x60,0x71,0x0e,0x44,0x70,0x0e,0xc8,0x37,0x01,0x00,0x0b,0x92,0x40,0x81,0x77, \
+0x5d,0x03,0x18,0xa6,0xbf,0xc6,0x85,0xcf,0x8f,0xc9,0xd9,0xb5,0x88,0xdd,0x22,0x20, \
+0x68,0xd2,0xc0,0xc9,0x96,0xcf,0xa1,0x85,0x14,0xe6,0xf0,0x73,0x8e,0x07,0x57,0x7d, \
+0xa4,0x34,0x71,0xd1,0xa7,0xa1,0x18,0x84,0xb3,0x1c,0x8c,0x18,0x6a,0x1f,0x73,0x20, \
+0x3c,0xbd,0x68,0x8d,0x63,0x2e,0x2a,0xb0,0x88,0x82,0x21,0x71,0xc9,0x83,0x6e,0x72, \
+0x9e,0x58,0xd5,0x59,0x51,0x10,0x29,0x2e,0xd4,0xa2,0x05,0x44,0xc4,0xc6,0x07,0xc2, \
+0x1f,0x2f,0x44,0xce,0x8c,0xe7,0x9e,0x4d,0xcd,0xe8,0x56,0xd4,0xe5,0xa0,0x48,0x28, \
+0x3b,0x50,0x9c,0xa4,0xef,0x26,0x88,0x2b,0x13,0x75,0xb4,0xe4,0x32,0x9c,0x62,0x93, \
+0x2a,0x21,0x91,0x79,0x04,0x06,0x9c,0xc7,0x4e,0x10,0xb0,0xe5,0x0d,0xc1,0x0e,0x40, \
+0xc9,0x36,0x6e,0xc5,0x06,0x96,0x2a,0x08,0x5b,0xda,0x92,0x58,0x29,0x50,0x63,0x44, \
+0xee,0x3a,0x6f,0xf4,0x04,0x26,0x9b,0x9a,0xe0,0xd0,0xa4,0x48,0x51,0xd2,0xcb,0x06, \
+0xb0,0x46,0x32,0x01,0xd4,0x44,0x07,0xe8,0x8c,0x7e,0xe8,0x49,0x6e,0x5d,0x8e,0x05, \
+0xb9,0xc4,0xfe,0xa9,0x2b,0xef,0x83,0x70,0x1a,0x0d,0xa1,0x9f,0xd9,0x04,0x26,0x74, \
+0x85,0x85,0x92,0x6c,0xd6,0x19,0xa5,0x36,0x8c,0xb2,0x01,0xf0,0xbf,0x6b,0xaf,0x78, \
+0x4d,0x12,0x7c,0xfe,0x41,0x51,0xab,0x7d,0x46,0x5f,0x7d,0x43,0x43,0xa7,0x57,0x02, \
+0x94,0x81,0x6e,0x29,0x08,0x2b,0x5a,0xa0,0x87,0x64,0x33,0x92,0x98,0x18,0x3a,0xc6, \
+0x69,0x9c,0x35,0xc9,0x4c,0xd2,0xa6,0x00,0x5c,0x34,0x73,0x6f,0x14,0xca,0x28,0x4c, \
+0x20,0x62,0xeb,0x14,0xdd,0xba,0x12,0xa1,0xb8,0xd7,0x0d,0x7b,0xa9,0x93,0x54,0x82, \
+0xce,0x19,0xb2,0xc9,0x94,0x93,0x63,0x03,0x35,0x4d,0x67,0x22,0xe1,0x06,0x4b,0x7d, \
+0x58,0xa7,0x2a,0x6d,0x8a,0xe9,0xb5,0xb8,0xc2,0xc8,0xa4,0x76,0x08,0x3b,0x6f,0x8a, \
+0x60,0xc8,0x31,0x3c,0x2f,0x57,0xba,0xd6,0x60,0x27,0x6c,0x9b,0x7a,0xef,0xcd,0xe9, \
+0x3c,0x30,0xf9,0xc4,0xf9,0xc1,0x3b,0xe4,0xdb,0xfb,0x29,0x35,0x5a,0xc6,0x9f,0x6f, \
+0xcb,0x74,0x12,0x3c,0x8e,0xae,0xe9,0x46,0x0b,0x2a,0x2e,0xb2,0x26,0x51,0x11,0x02, \
+0x92,0x20,0xf7,0xdd,0x81,0xbd,0xd6,0xeb,0xb4,0x0e,0xb5,0x62,0x6c,0x41,0xf4,0x75, \
+0xcd,0x5a,0xf3,0x2d,0x7b,0xa5,0xd3,0x23,0x71,0x10,0x53,0xa0,0xa0,0x93,0x2a,0x2e, \
+0xa1,0xe6,0xe4,0xf9,0xf0,0xed,0x28,0x7b,0x1a,0x05,0x79,0xe5,0x68,0x24,0x50,0x3c, \
+0xd4,0xdc,0x8b,0xc7,0x40,0xb9,0xba,0x9a,0xcb,0x6e,0x32,0xdd,0x85,0x50,0x76,0x89, \
+0xf4,0xc4,0x7d,0xf3,0xcd,0x8f,0x5b,0x9d,0x0c,0x21,0x79,0x70,0x1c,0xde,0xe6,0xb8, \
+0x7f,0x41,0xe7,0x35,0xa4,0x95,0xaf,0xf3,0x85,0xb0,0xdd,0x4c,0xf9,0x91,0x24,0x4c, \
+0x29,0x72,0xe7,0x45,0x3b,0xf0,0xa2,0xb8,0xaa,0x09,0x97,0xf4,0x22,0xab,0xf4,0x7f, \
+0x5e,0x5b,0x32,0x08,0x24,0xcb,0x74,0x65,0x7f,0x48,0x2d,0xb2,0xca,0x6c,0x2a,0x45, \
+0x16,0xc8,0xb4,0x59,0x8c,0xc8,0xd0,0x39,0x2d,0x84,0x4c,0x04,0x46,0x4d,0x0b,0x07, \
+0x07,0xab,0x02,0x84,0xca,0x58,0x99,0xc0,0x47,0x02,0xf2,0xee,0x54,0x9c,0xa1,0x72, \
+0x25,0xa8,0x0b,0x80,0xe8,0x0f,0x14,0x19,0x19,0x44,0x8d,0x4b,0x0b,0x0f,0x35,0xa3, \
+0xb0,0xd4,0x18,0x35,0x45,0xf9,0xc1,0x03,0xc8,0x3d,0x0c,0x03,0x24,0x52,0xb9,0x0e, \
+0x2f,0xeb,0x3b,0x30,0xa5,0xd8,0x5a,0x83,0x09,0xf0,0x23,0x63,0xb8,0xb2,0xde,0xba, \
+0x58,0x68,0x2b,0x02,0x45,0x68,0xa5,0x03,0x07,0x6c,0xe3,0x6c,0x0a,0xd8,0xcb,0x5a, \
+0xc8,0xdb,0x5d,0x5b,0x54,0xca,0x80,0x6e,0x75,0xda,0x90,0x37,0xa8,0x61,0x40,0xe9, \
+0x73,0xa5,0x16,0x92,0xa6,0x61,0x72,0x12,0xfb,0x0b,0x14,0x7b,0xc6,0x2b,0x61,0xb5, \
+0xdb,0x5a,0xa0,0x68,0x42,0xa1,0xf5,0xba,0xe1,0x55,0x32,0x41,0xa3,0x96,0xc9,0x50, \
+0xaa,0x44,0xd6,0xec,0x1e,0xd5,0x19,0x60,0x16,0xe5,0x59,0xb3,0xb9,0x13,0x9a,0xb5, \
+0x16,0x5f,0x86,0x90,0x01,0x8a,0xcb,0x56,0x10,0x82,0x20,0x50,0x42,0x94,0x66,0x51, \
+0x22,0x56,0xd0,0x11,0x54,0x35,0x31,0x52,0xaf,0x33,0x2f,0x22,0x8e,0xd4,0xd4,0xb2, \
+0x55,0x0a,0x19,0x8a,0x96,0x01,0x46,0xb6,0xd5,0x82,0xee,0x45,0x18,0xd6,0xa4,0x6e, \
+0x22,0x16,0x8a,0x9b,0x3d,0xb5,0xae,0x6c,0x02,0xeb,0x56,0x4a,0x15,0x12,0xf4,0x90, \
+0xe1,0x85,0xb7,0xac,0x10,0xda,0x20,0x7d,0x41,0x5d,0x5c,0xee,0xb0,0x0d,0x01,0x16, \
+0x15,0xd5,0x85,0x9a,0x38,0x36,0xb0,0x1d,0x2e,0xcf,0x55,0xa6,0xaa,0xb2,0x8f,0x4d, \
+0x69,0x97,0x16,0xa5,0x30,0x08,0x75,0x55,0x78,0x0a,0x2a,0x24,0x2b,0xc6,0xe6,0xa0, \
+0x69,0x55,0x1b,0x0c,0xa5,0x02,0xd5,0x12,0x86,0x4b,0x8b,0x05,0x9a,0x0d,0x1e,0x32, \
+0x8c,0xa2,0xda,0x28,0xb5,0x5c,0x3a,0xd9,0x2e,0x82,0xd1,0x12,0xac,0x02,0xbe,0xf9, \
+0xcd,0xad,0x34,0x80,0xe9,0xae,0x64,0x01,0x24,0xdd,0x70,0x10,0x16,0xc7,0x2d,0xe1, \
+0x8a,0x74,0x8a,0xc5,0x82,0x94,0x6c,0x87,0xa0,0xc8,0xc4,0x0c,0x57,0x06,0xb2,0x9c, \
+0x30,0x15,0x42,0xc5,0x3c,0xc1,0xa3,0xea,0x2b,0x52,0x77,0xcb,0x9c,0xc4,0xd4,0x3d, \
+0xea,0x1d,0x0f,0xe0,0x1d,0xe8,0xa9,0x6c,0x0e,0x1b,0x3e,0x30,0x39,0xe1,0xbe,0x5d, \
+0xa4,0xa7,0x3d,0xf7,0x0e,0x37,0x73,0x74,0xa8,0x6c,0x67,0xf0,0x68,0x4a,0x0a,0x52, \
+0x81,0x23,0x13,0xa0,0x71,0x1a,0x05,0x22,0x51,0x3d,0x90,0xf4,0xb9,0x51,0xb0,0x43, \
+0x68,0xf9,0x48,0x3b,0xb3,0xf1,0x05,0xaa,0xf0,0x0b,0x73,0x01,0xa1,0xca,0xa6,0x9c, \
+0xd5,0x53,0x73,0xe9,0xd3,0xd0,0x5f,0x28,0xf0,0x28,0x5b,0x62,0x90,0x22,0x86,0x02, \
+0x40,0xd9,0x1a,0x6e,0xf4,0x38,0x50,0x3a,0x9e,0xab,0xe2,0xc3,0xca,0x4a,0x50,0xc5, \
+0xac,0x67,0x37,0x66,0xaf,0x55,0x6c,0xf3,0x04,0x32,0x31,0x00,0xa5,0xd1,0x78,0x96, \
+0x05,0x89,0x10,0xd5,0x8a,0xf5,0x95,0xd9,0x2a,0xda,0xa3,0xd7,0xd5,0x01,0x8c,0x07, \
+0x9c,0x81,0x27,0x84,0xb6,0x05,0x51,0x3b,0x09,0xa1,0x7e,0x25,0x5f,0x58,0x74,0xd1, \
+0xe4,0x6a,0xa3,0xd5,0x53,0x91,0x16,0xb6,0x89,0xb1,0xf5,0x16,0x2d,0x76,0xdf,0x9e, \
+0x86,0xf2,0xd7,0xb8,0x84,0xac,0x97,0x9b,0xb3,0xe2,0x35,0xe1,0x8b,0x65,0xb0,0x38, \
+0xa6,0x78,0x9b,0x0f,0x6d,0x03,0x50,0x2d,0x83,0x22,0x31,0xed,0x4d,0xa9,0xe9,0x8c, \
+0xe9,0xc2,0xc8,0x26,0x78,0xf6,0x20,0xd9,0x3b,0x97,0x92,0x21,0xe8,0x79,0x95,0x68, \
+0x42,0x19,0x24,0x32,0x03,0xd6,0xb0,0xc9,0x2b,0x18,0xa3,0x86,0x4d,0xce,0xbc,0xb6, \
+0x07,0x28,0x6d,0xba,0xcc,0x41,0x7d,0xc6,0x26,0xde,0xe3,0xaa,0x6b,0xe0,0xbc,0xb7, \
+0xee,0xdc,0x7a,0x50,0x49,0x5b,0x17,0x23,0x61,0x50,0xb3,0xb3,0xa2,0x13,0x06,0xc0, \
+0x4f,0x39,0x50,0x64,0x47,0x06,0x62,0xf8,0x8f,0x34,0x14,0x20,0xc6,0x1c,0x0d,0x71, \
+0x54,0x35,0xbe,0x83,0x84,0x90,0x39,0xde,0x9a,0x73,0xda,0x54,0x77,0x57,0x0c,0xf7, \
+0x46,0x25,0x45,0x0e,0x46,0xd8,0x95,0x91,0x1a,0x86,0xd2,0xb3,0x9b,0x41,0xd5,0x99, \
+0xd7,0x17,0x05,0xd4,0xe6,0xb0,0xc5,0xc8,0x94,0x8f,0xbd,0x5f,0xa8,0xc5,0xd2,0x6d, \
+0xb6,0xd9,0xc4,0xc3,0x9b,0x46,0x6a,0xd9,0x62,0xee,0x49,0x07,0xee,0x1e,0xef,0xd6, \
+0x26,0x24,0xe4,0x4f,0x87,0x89,0x1c,0x79,0xb9,0x5b,0x07,0x4b,0x69,0x14,0x16,0x5a, \
+0xfc,0x78,0x7a,0x02,0xb0,0x37,0x95,0x21,0x20,0xe4,0xf5,0x25,0xb5,0x40,0x94,0xdd, \
+0xaa,0x2c,0x72,0x4d,0x3c,0x2a,0x74,0xca,0x70,0xa1,0x0a,0xd8,0xc5,0xea,0x73,0xb9, \
+0xf6,0x16,0x2c,0x82,0x54,0xa4,0x5b,0x09,0xab,0x79,0x33,0x8b,0x34,0x66,0xf3,0xb6, \
+0x93,0x9b,0xda,0xb0,0x9e,0xd7,0xcc,0xcf,0x36,0xc8,0x91,0x8c,0xea,0xc6,0x12,0x13, \
+0x08,0xc8,0x79,0x82,0xe7,0x54,0xe3,0x09,0x5f,0x28,0x17,0x8e,0x1b,0xbd,0x06,0x53, \
+0x31,0x4a,0xb9,0x42,0x8e,0xa9,0x55,0x12,0x1a,0xd0,0xe9,0xac,0x0a,0x87,0x72,0x0d, \
+0x2b,0x49,0x22,0xd4,0x59,0x1e,0x40,0xea,0x98,0xb3,0x0e,0x37,0xba,0xbf,0x29,0xe2, \
+0x1e,0xef,0x09,0xd8,0x77,0x93,0xd3,0x1e,0x47,0x45,0x82,0x0a,0xf2,0x49,0x62,0x24, \
+0x6c,0xb4,0x61,0x18,0x12,0x29,0xab,0x42,0x14,0xb3,0xe0,0x6f,0xb7,0x9b,0xb0,0xcc, \
+0xba,0x58,0x62,0xa9,0xbd,0x0b,0xf2,0x2c,0x9d,0xb4,0x1f,0xad,0x4c,0xcb,0x95,0xca, \
+0x5a,0xe5,0x14,0xc2,0xab,0xaa,0xbb,0x9b,0x5e,0xd8,0x7b,0xf9,0x1a,0x13,0x91,0xd4, \
+0x1c,0x09,0x80,0x60,0xc2,0x11,0xb5,0xa2,0xf0,0xba,0x0c,0x3c,0x9f,0x30,0x62,0x1e, \
+0x17,0x8e,0xe7,0xbd,0xe5,0x81,0x8c,0x92,0x58,0x97,0xa8,0x75,0x44,0x37,0xb7,0x7a, \
+0xa2,0x1a,0x85,0x84,0xdf,0x7b,0x39,0x51,0xf5,0x6f,0xa2,0x6b,0x00,0x2e,0x3a,0x61, \
+0x64,0xf6,0xf0,0x2a,0x7e,0x64,0x5f,0x9c,0xe0,0x21,0xcd,0x8a,0x7a,0xfb,0x2f,0xd8, \
+0x3c,0x71,0x7f,0x98,0x68,0xc9,0x90,0x50,0x53,0x18,0xc1,0x30,0x95,0x91,0xf9,0x69, \
+0x32,0x84,0xc0,0x91,0x44,0x18,0xad,0x2d,0xad,0x12,0x45,0x49,0x04,0x84,0x4d,0x38, \
+0xdc,0x6b,0x33,0xb5,0xba,0x13,0xe3,0x67,0x57,0x8d,0xa1,0x79,0xdb,0x30,0x51,0xb6, \
+0xdd,0xc9,0x64,0x4b,0x08,0x98,0xfa,0xcf,0x55,0x86,0x7b,0xc2,0x04,0x02,0x5b,0x10, \
+0x2f,0x18,0x68,0xd0,0x57,0x84,0x49,0x1f,0x11,0x86,0x96,0x00,0x98,0xc4,0x3c,0xb0, \
+0x06,0x31,0x83,0x90,0x92,0x19,0x6b,0x63,0x35,0x49,0xc2,0x79,0xa2,0x0d,0xe2,0x41, \
+0xd6,0x29,0x7a,0x41,0xba,0x3f,0x08,0x8b,0xa4,0x73,0x27,0xcb,0xfd,0x34,0x4e,0x1a, \
+0xae,0x4d,0xc5,0x4f,0xd2,0x96,0x85,0x99,0x84,0x16,0x11,0x1d,0xd1,0x1a,0xc4,0xe0, \
+0x91,0x70,0x80,0x05,0xb1,0xb2,0x0f,0xdf,0x66,0x53,0x6b,0x65,0xc3,0x09,0x54,0x84, \
+0x08,0xf3,0x9e,0x2a,0x86,0x41,0x77,0xff,0x6a,0x52,0xa4,0x70,0x56,0x59,0x8d,0xaa, \
+0xfe,0x8b,0xf0,0xbe,0xd5,0x42,0xa5,0x2c,0x25,0x65,0xd6,0x04,0x31,0xee,0xaf,0x75, \
+0x42,0xcd,0x97,0xb3,0x26,0x97,0xd3,0xd8,0x6f,0xd2,0x8a,0x54,0x36,0xc0,0x1c,0xf0, \
+0xed,0xf1,0x1c,0x4f,0x26,0x78,0xcc,0x2a,0x30,0x88,0x0a,0xa8,0xb1,0x56,0x08,0xc4, \
+0xfb,0x56,0x8c,0x68,0x95,0x04,0x63,0x22,0xa3,0x10,0x52,0x48,0x91,0x09,0x3b,0x3c, \
+0x6f,0xf7,0x7d,0xd3,0xe5,0x5b,0x7d,0x17,0xa3,0xf1,0x02,0xa1,0xba,0x50,0x80,0xd1, \
+0xc7,0x22,0xad,0x4b,0x43,0xd5,0xe5,0xad,0xb6,0x20,0x3e,0xb8,0xc8,0x24,0x82,0x35, \
+0x1e,0xdb,0xc3,0x10,0x22,0x05,0xc9,0x6a,0x60,0x36,0xbf,0x11,0xc0,0xbc,0xcc,0x8c, \
+0x1d,0x25,0x5c,0x99,0x26,0x04,0x2d,0x9b,0x67,0xc7,0xdd,0xf5,0xff,0x1e,0x8f,0x36, \
+0x28,0xb4,0xa1,0xc6,0x59,0x52,0x02,0x11,0x00,0xf4,0x50,0xa2,0x24,0xf9,0x70,0xfd, \
+0xf3,0xd5,0x54,0x5c,0x89,0x8b,0xff,0x32,0x29,0xe5,0x55,0x42,0x88,0x1b,0x48,0x60, \
+0x66,0x50,0x69,0x46,0x5a,0x37,0xcd,0xe6,0xf2,0xdd,0x71,0x80,0x05,0x04,0x63,0x20, \
+0xd9,0xe4,0xe5,0x59,0xde,0x43,0x94,0xa7,0x9c,0x04,0x1b,0x09,0x00,0x5d,0x59,0xfa, \
+0x6e,0x03,0xe8,0x77,0x95,0xf6,0x79,0xd6,0xb8,0xd3,0x4c,0xd4,0x5e,0x3c,0x81,0x15, \
+0x74,0x69,0x5c,0x8e,0xcf,0x56,0x3c,0xfd,0xbc,0xa0,0xd1,0x33,0xa2,0xc7,0x9a,0xb6, \
+0x5b,0xdb,0x9d,0xf9,0xf7,0xde,0x4d,0xea,0x6b,0x14,0x9c,0x14,0x91,0x0c,0x94,0xf8, \
+0x18,0xe8,0xbd,0x70,0x5e,0x8e,0x8e,0x02,0xe2,0xd3,0x07,0xc6,0x06,0xc2,0x0f,0x86, \
+0xb4,0x66,0xb8,0x6a,0x3e,0xca,0x6e,0x17,0x78,0xc6,0xd7,0x2d,0x35,0xbb,0x1d,0xc7, \
+0xc9,0xf4,0x7b,0x0e,0x9b,0x80,0x76,0x22,0x12,0x04,0xd2,0x50,0x61,0x16,0xd8,0x22, \
+0x52,0x04,0x88,0xd0,0xf7,0x76,0x1e,0xe6,0xa1,0xcc,0x1c,0x50,0x0d,0x23,0xc4,0xd7, \
+0x53,0x7f,0x54,0x91,0x2e,0x26,0xf2,0x8c,0x28,0xb3,0x1a,0x00,0x4a,0xd1,0xa4,0x16, \
+0x92,0x28,0x46,0x3a,0x16,0x3c,0x78,0xd3,0x3f,0x5f,0x3e,0x16,0xfb,0xf0,0xa7,0x31, \
+0x30,0xd0,0xe5,0x79,0x6d,0x54,0xe8,0x88,0x81,0x03,0x04,0xec,0x4c,0xbf,0x7a,0x8c, \
+0x94,0x67,0x6d,0xbc,0xfb,0x04,0xf7,0xf6,0xc5,0x03,0x9a,0x2b,0x60,0xac,0x98,0x69, \
+0x77,0x9b,0x79,0xb3,0x09,0x8c,0x4e,0x55,0x54,0xf7,0xa0,0x69,0x18,0x38,0x19,0xcb, \
+0x66,0xe2,0x0b,0x16,0x6c,0x02,0x72,0x29,0x92,0x39,0xc7,0x2e,0x45,0x76,0x38,0x84, \
+0xe9,0x88,0x43,0x4b,0x2a,0x5c,0x31,0x3a,0xa0,0x86,0x1d,0xe4,0x09,0x11,0x5a,0x24, \
+0x04,0x1e,0x7c,0x8f,0xc9,0xea,0xfb,0x7d,0xba,0xd8,0xec,0xb1,0x58,0xc1,0x04,0x11, \
+0x84,0x41,0x51,0x60,0x10,0x16,0xd6,0x7c,0xa7,0x7b,0x69,0xb1,0xcb,0x92,0x46,0xf6, \
+0x5e,0x16,0xed,0xa5,0xac,0x70,0xe0,0x8b,0x81,0xa1,0x7b,0x9a,0x03,0xc6,0x65,0xd8, \
+0x9f,0x2f,0x4f,0xaf,0xe6,0x1e,0xe8,0xf5,0x3a,0xc5,0x49,0x05,0xcd,0x91,0x33,0x93, \
+0xb5,0xd7,0x85,0x53,0x7e,0x94,0x4d,0x94,0x50,0x8b,0x07,0xcd,0xe8,0x00,0xf8,0x85, \
+0x06,0x31,0x3c,0x3d,0xa6,0x10,0xe9,0x5f,0x75,0x3d,0xae,0xfa,0x21,0x15,0xbe,0xa8, \
+0xac,0xff,0x63,0x39,0x4a,0xa5,0xb4,0x21,0x2a,0x94,0x26,0x27,0x61,0xb1,0x7b,0x13, \
+0x48,0x18,0xc4,0xbd,0xc5,0x09,0x26,0x11,0xa4,0x3b,0x0d,0x3a,0x8c,0x22,0xa1,0xb5, \
+0x9d,0x7b,0x20,0xbc,0x33,0x18,0xc7,0x80,0x79,0xd0,0xa9,0x4a,0xd6,0x79,0x72,0x18, \
+0x52,0x21,0x0d,0x0c,0x2c,0x0b,0x5d,0x60,0x0a,0x27,0xea,0x4c,0xf4,0xe4,0xfb,0xf8, \
+0x06,0xbf,0x8b,0xcd,0x5d,0xd2,0xf2,0x85,0xe6,0x3a,0x96,0x86,0xee,0x93,0x0c,0xf9, \
+0x53,0xa7,0x14,0x32,0x21,0x4a,0x37,0x4f,0xd7,0x7d,0x27,0x19,0xf2,0x3c,0x1f,0xb6, \
+0xba,0xb7,0xac,0x81,0x8d,0xe5,0x22,0x1e,0x7a,0x6e,0xe2,0x3a,0x07,0xaa,0xf3,0x12, \
+0x04,0x84,0x89,0x24,0x22,0x6d,0x21,0x88,0x96,0x20,0xcb,0x42,0xd6,0x6f,0x62,0x37, \
+0xb0,0x93,0x2a,0x42,0x81,0x49,0x30,0x76,0x91,0x2d,0x61,0x7c,0x2c,0xaa,0x45,0x54, \
+0x62,0x28,0x28,0xc4,0x72,0xd1,0xd2,0xd0,0x5b,0xe8,0x28,0x43,0x4a,0xa4,0x24,0x42, \
+0x6d,0xd5,0x97,0x1b,0xf5,0x6d,0x2e,0xad,0xf7,0x29,0x2f,0x46,0x9e,0xfc,0x6a,0x2d, \
+0xc1,0x87,0xac,0x3a,0x81,0xf6,0xc3,0x6c,0x9e,0x06,0xd2,0x3f,0x37,0x71,0xac,0x1b, \
+0xc2,0x61,0x92,0x2f,0x66,0xfa,0xc9,0xd4,0x21,0xca,0xb9,0x15,0x44,0x41,0x48,0xfb, \
+0x19,0x62,0xa6,0x10,0x2a,0xc9,0x55,0x44,0x97,0x7c,0x62,0x61,0x72,0xd1,0x64,0x4a, \
+0xc6,0x91,0x92,0x36,0x4c,0x87,0xa1,0x3c,0xa6,0x15,0x20,0x70,0xbe,0xf6,0x2e,0x76, \
+0xf4,0x5a,0xd8,0xab,0x6f,0x1b,0x5a,0xaa,0x5e,0x14,0x43,0xdd,0x86,0xb7,0xa5,0x91, \
+0x8d,0xa7,0xe3,0x28,0x9f,0x44,0x09,0x11,0xb3,0xdb,0x40,0x6a,0xd2,0x58,0x16,0x32, \
+0xee,0xa0,0xcc,0xe3,0xca,0x57,0x83,0x96,0x01,0x8c,0x08,0x69,0xe8,0x48,0xbd,0xb6, \
+0xb0,0x19,0xa0,0x4c,0x62,0xd6,0x61,0x80,0x5b,0x8c,0x4f,0x04,0x67,0xe6,0x5b,0x48, \
+0x89,0x9a,0x1e,0x9e,0x98,0x6d,0xc6,0xba,0xaf,0x8f,0xd4,0x46,0x10,0xe4,0x45,0x29, \
+0xc9,0x2c,0x5e,0xc9,0xd5,0x1f,0x26,0xaf,0x65,0x84,0xc8,0x03,0xef,0xc3,0x4e,0x8e, \
+0x1b,0x47,0x0b,0x1b,0x68,0x05,0x36,0xdf,0xb9,0x21,0x4b,0x20,0x08,0x04,0x59,0x05, \
+0xbc,0xb7,0xce,0x3c,0x70,0x2d,0xc0,0x16,0xd3,0x44,0x1d,0xc3,0x6c,0x3d,0xc0,0x93, \
+0x84,0xc8,0xcf,0x4b,0x53,0x67,0x47,0x68,0x78,0xde,0xe1,0xa7,0x83,0x26,0x31,0xd1, \
+0xa5,0xbf,0x3d,0x3c,0xe7,0x6c,0x86,0x77,0x84,0xa1,0x54,0xc9,0x66,0xd4,0x37,0x04, \
+0x4c,0xdc,0xa2,0x46,0x51,0x7c,0xfe,0xcc,0x47,0x8a,0x72,0x7f,0x16,0x45,0x86,0x72, \
+0xfa,0x1e,0xc8,0x75,0x99,0x49,0x27,0x07,0x40,0xcd,0x02,0xd6,0x12,0x96,0x21,0x41, \
+0xdf,0x3e,0x78,0x99,0xcd,0xad,0x52,0xa5,0x52,0xe0,0x4d,0xc6,0xfd,0xeb,0x37,0x24, \
+0x08,0x2c,0x09,0x24,0x13,0x0b,0x41,0x8e,0x82,0xd8,0xdb,0x44,0x45,0x62,0x81,0x58, \
+0xf6,0x6f,0xf8,0xd8,0x6b,0xc0,0xd2,0x33,0x94,0x44,0x0d,0x62,0xef,0x45,0x5a,0x6d, \
+0x0d,0xa5,0xbb,0xea,0xbe,0x87,0x23,0x79,0xb7,0x58,0x63,0xa0,0xb6,0xf7,0xb6,0xa7, \
+0xeb,0x58,0xed,0x65,0xfa,0x37,0x24,0x8e,0xcf,0x97,0x92,0xa5,0x90,0x1b,0x8b,0x5e, \
+0x46,0xe6,0x1a,0x05,0xa5,0xaa,0xf8,0xc2,0x5c,0x13,0x6c,0xa9,0x07,0x19,0xdc,0x49, \
+0xe9,0xcc,0x95,0x27,0xb3,0x60,0x7a,0x20,0x6c,0xf4,0x5a,0x57,0x4c,0x81,0x41,0x85, \
+0x90,0xc6,0x82,0xa0,0x9b,0x4e,0x7c,0x4a,0x78,0xf9,0xed,0x7a,0xfd,0x1b,0x9c,0xde, \
+0x4a,0xf2,0x08,0x73,0xe8,0xd2,0xa3,0x12,0xc2,0xc2,0xb0,0x47,0x38,0x27,0x8e,0x63, \
+0xa3,0x1b,0x6c,0x6b,0x6c,0xb6,0x0e,0x0d,0x10,0xc0,0x99,0x89,0x8c,0xe8,0x0c,0x50, \
+0x93,0x70,0x64,0xc3,0x70,0x12,0x08,0x11,0x53,0x6c,0x80,0x5d,0x39,0x98,0x12,0xc8, \
+0x42,0x66,0x58,0x22,0x48,0x08,0xcb,0x6a,0x8b,0x30,0x41,0x05,0x9e,0xb6,0xc1,0x30, \
+0xe4,0x36,0x1c,0x11,0x41,0x94,0xb6,0x48,0x98,0x38,0xca,0x1a,0xa5,0x54,0x12,0xb6, \
+0xd1,0x6e,0x12,0xe3,0x01,0x73,0x9a,0xc9,0x01,0x80,0x6d,0xbd,0x54,0xdf,0x54,0x42, \
+0xba,0x02,0x13,0x9c,0x24,0xf0,0x2c,0x56,0xc7,0xe4,0xeb,0xed,0x59,0x44,0x2a,0xb4, \
+0x44,0x42,0xbb,0x0d,0x3b,0x1a,0x2e,0x9b,0xe4,0x69,0xb6,0x21,0x91,0xbb,0x7f,0x1a, \
+0xee,0x65,0xcd,0x06,0xe6,0xaf,0x91,0x9a,0x39,0xe6,0xc9,0x71,0xa4,0xa8,0xf3,0x67, \
+0x7e,0x7e,0x4d,0xa6,0xbf,0x11,0xb4,0x31,0xac,0xec,0x65,0x14,0x96,0x83,0x7b,0xf0, \
+0x51,0x6b,0x28,0x90,0x71,0x42,0xb1,0x61,0x9c,0x14,0x98,0x41,0x70,0x35,0x0b,0x8c, \
+0x61,0x31,0x85,0x9b,0x26,0x27,0x05,0xba,0x31,0x31,0xa4,0x86,0x1c,0x46,0x3e,0xba, \
+0x55,0x50,0x44,0x53,0x36,0x57,0x07,0x75,0xe9,0xf3,0x9d,0x54,0x12,0xea,0xe2,0x42, \
+0xd0,0x5f,0xa6,0xe0,0xbe,0x25,0xc1,0x60,0xdc,0xc1,0x12,0x91,0x64,0x16,0x30,0x17, \
+0x98,0x4a,0xda,0xc3,0x01,0x8c,0x19,0xe6,0x68,0xf5,0x16,0xa7,0xf6,0x82,0x7a,0x26, \
+0xf9,0x16,0x18,0x18,0x54,0x63,0x00,0xdb,0x29,0x5e,0x21,0x69,0x18,0x2b,0x49,0x76, \
+0x00,0x7b,0x79,0x0b,0x09,0x7b,0x17,0xe3,0xe8,0xba,0xa6,0xb6,0x8b,0xc6,0xac,0x1a, \
+0x41,0x41,0x5f,0x64,0x2d,0x6c,0x39,0xa6,0x5a,0xb8,0x9a,0x97,0xae,0xff,0x47,0xcc, \
+0x5a,0xb9,0xea,0x60,0x36,0x6c,0x63,0xf0,0xed,0xd0,0x51,0x8b,0x23,0x9b,0x0f,0x3d, \
+0x88,0x6f,0x89,0x82,0x49,0x81,0xda,0xad,0x5b,0x10,0xad,0x10,0x56,0x39,0x1a,0xe0, \
+0x54,0x44,0xb4,0xaa,0x2c,0x96,0x96,0x15,0x83,0x6b,0x28,0x52,0x5a,0x32,0x89,0x69, \
+0x58,0x45,0xb6,0xb1,0xb1,0xce,0x0f,0x5e,0x43,0x39,0x93,0x82,0xb1,0x96,0x38,0x65, \
+0xd4,0x28,0x62,0xc0,0xc4,0x64,0xc2,0x47,0xb2,0x48,0x21,0x88,0x74,0xa6,0xc8,0x4d, \
+0x42,0xfa,0xb4,0x13,0xd6,0xb2,0x01,0x90,0x47,0x87,0x7f,0x59,0x8f,0x97,0x1b,0xaa, \
+0x56,0x2e,0x22,0x52,0x6c,0x09,0x0f,0xf2,0x1c,0x26,0x31,0x1d,0x32,0x74,0x6d,0x0a, \
+0x43,0x09,0x3e,0x77,0xa1,0x9f,0x91,0x99,0x3d,0xd7,0x86,0x74,0xa5,0x64,0xc9,0xaf, \
+0xc4,0x49,0x66,0x51,0xa1,0x23,0xc4,0xb8,0xbd,0x56,0xb3,0x7e,0x52,0x2b,0x76,0x75, \
+0xa3,0xea,0xf2,0xdd,0xe3,0xe7,0xae,0x63,0xb9,0xae,0xa9,0x48,0x5a,0x83,0x00,0x4e, \
+0x64,0xcc,0xf7,0xf5,0x7b,0x27,0xf1,0xfd,0x31,0xb6,0x76,0x8a,0x95,0x85,0x29,0x4b, \
+0xb9,0xac,0x86,0x9d,0x68,0xbd,0x17,0xb2,0x23,0x22,0x0b,0xd7,0x1d,0xb6,0xa1,0xb8, \
+0x73,0x8e,0x0e,0xa1,0x31,0xf4,0xbc,0x2c,0xe3,0x22,0x60,0x70,0xf5,0x8a,0x2e,0x7c, \
+0x7e,0x98,0x09,0xcf,0xef,0xbc,0x7e,0x50,0xb0,0xe3,0x72,0x13,0xaf,0x1c,0xd8,0x06, \
+0xf1,0x05,0x84,0x46,0x44,0xcc,0x3c,0x60,0x75,0x32,0x68,0x62,0xa0,0xf5,0xd9,0x0b, \
+0x18,0x82,0xa3,0x04,0x67,0xaf,0xc1,0x05,0x8a,0x0a,0x0b,0x00,0xb9,0x9e,0xa4,0xb2, \
+0x70,0x6d,0xc8,0x37,0xb0,0xf4,0xbb,0x35,0x0b,0x8d,0xad,0xdc,0xdc,0xa4,0x21,0x69, \
+0x95,0xec,0x8a,0xc9,0x20,0x9b,0x80,0xae,0x61,0xac,0x17,0x11,0x71,0x22,0x0c,0x06, \
+0xd9,0x4d,0x25,0xb0,0x16,0x3a,0xf1,0x5b,0xd1,0x73,0x66,0x86,0x59,0x1f,0x27,0x50, \
+0xa5,0x12,0x9d,0x2c,0x5d,0x20,0xe9,0xea,0x87,0x46,0xdc,0x79,0xaf,0x14,0x19,0x6d, \
+0x53,0xad,0x0f,0x6a,0x60,0x63,0x0e,0xfb,0x46,0x08,0x23,0x92,0x92,0x29,0x47,0x52, \
+0x70,0x39,0x2d,0x6a,0x24,0x52,0x48,0x50,0x4d,0x90,0x10,0x12,0xf7,0x44,0x21,0xae, \
+0x7e,0x14,0xc7,0xf0,0xad,0xf0,0x79,0x8c,0x62,0xbc,0x6b,0xbb,0xa0,0x07,0x70,0x60, \
+0x6e,0x85,0x64,0xb4,0x8d,0xdb,0xb4,0x88,0x4d,0x43,0x4c,0x25,0x61,0xaa,0x2a,0x91, \
+0x3c,0x7a,0xc3,0xee,0xc3,0x01,0x16,0x4c,0x59,0xb4,0x2b,0xd6,0xa1,0xb7,0xb1,0x7d, \
+0xac,0x66,0x6f,0x5b,0x22,0x64,0x0a,0x04,0x0b,0xad,0xd4,0x8a,0xc8,0xdf,0xda,0x43, \
+0x4a,0x1d,0xaa,0xe1,0xbe,0xd8,0xe3,0x87,0xd9,0xaf,0x74,0x49,0x19,0x13,0x25,0x1e, \
+0xb3,0xd2,0xcc,0xb8,0x97,0x34,0xe5,0x9b,0xb5,0xac,0x51,0xe9,0x6f,0xb9,0x42,0x63, \
+0xe6,0xe5,0x92,0x4a,0x84,0xde,0xb4,0x8d,0xe7,0x55,0xb7,0x7d,0xb9,0x2c,0xf8,0x20, \
+0x54,0xd4,0xf5,0x40,0x44,0x44,0x9d,0xbe,0x24,0x07,0x2a,0xf9,0xda,0x12,0xfa,0x75, \
+0x89,0x40,0xbb,0x6f,0x49,0xb7,0x40,0x23,0x16,0x2a,0x80,0xc8,0x82,0x56,0x26,0xa1, \
+0xac,0x87,0x46,0xbd,0x1b,0xfa,0x39,0xcf,0x90,0x60,0x74,0x3e,0xfa,0xec,0x73,0x1e, \
+0x0e,0xa0,0xc9,0x06,0xda,0xb1,0xe2,0x32,0x49,0x63,0x25,0x90,0x39,0x64,0xaa,0x34, \
+0xab,0xa9,0x8d,0x45,0x55,0xa0,0x6a,0xd3,0x9a,0x81,0xc3,0xb2,0x18,0xcd,0x59,0xd0, \
+0x0e,0x18,0xc1,0x4f,0x62,0x0c,0x04,0x50,0x2c,0xe0,0x60,0xa2,0xce,0x12,0xb0,0xbe, \
+0xac,0x03,0xdc,0x5c,0x30,0x63,0xbe,0xa9,0x2f,0x0d,0x7a,0xf8,0xb9,0xab,0x4d,0x62, \
+0xa5,0x50,0x64,0x26,0x19,0x45,0xca,0xf0,0xfb,0x62,0x45,0x7a,0x3b,0x20,0x2e,0x58, \
+0x69,0xc9,0x09,0x67,0x05,0x98,0x68,0x50,0x44,0xf7,0xf7,0x97,0x5b,0x8f,0x5c,0xc3, \
+0x0a,0x12,0x62,0x3f,0x1e,0x8a,0x37,0xd9,0x9f,0xb8,0x36,0x0e,0x39,0x51,0x83,0x6a, \
+0x19,0x09,0x7b,0x02,0x42,0x47,0x15,0xda,0xc0,0x24,0x18,0x47,0xa6,0x0f,0xbe,0x7c, \
+0xe4,0x55,0xb8,0x2d,0xc9,0xd3,0x4a,0x67,0xca,0xea,0xc0,0xc5,0x35,0x04,0xd2,0x4f, \
+0x42,0x63,0x17,0x52,0x78,0xf7,0x93,0xa9,0x83,0x12,0x0c,0x55,0x46,0x20,0xb0,0x37, \
+0x54,0x59,0x21,0x6a,0x18,0x1e,0xac,0x71,0xe1,0x69,0xa8,0xce,0xcd,0x79,0x33,0x1a, \
+0x18,0x8c,0x6c,0x88,0xde,0xe6,0xc6,0x52,0x03,0x45,0x26,0x5e,0x78,0xac,0x01,0x45, \
+0x15,0x41,0xe9,0xa1,0x58,0xcd,0xa9,0x32,0x81,0x81,0x05,0x81,0x50,0xba,0x1a,0xab, \
+0x11,0x15,0x45,0x82,0x0a,0x45,0x50,0x56,0x55,0x6a,0xb1,0x19,0x01,0x04,0x11,0x20, \
+0x8b,0x18,0x3b,0x21,0x62,0x90,0x4b,0x47,0x77,0xe5,0x18,0x97,0x2f,0xa4,0x31,0x03, \
+0x04,0x95,0xf9,0x5a,0x84,0xfc,0xea,0x95,0x08,0x23,0xf0,0xf2,0x9b,0x56,0xad,0xe8, \
+0xdc,0x0c,0x09,0xb9,0xc0,0x8d,0x92,0x6c,0x01,0xe7,0x29,0xa8,0x7a,0xd0,0xca,0xa0, \
+0xc1,0x63,0x96,0x14,0xc9,0x4b,0x0d,0xcc,0x5c,0x0b,0x1c,0xe2,0x8e,0x25,0x90,0x55, \
+0xca,0x16,0x15,0xbd,0x5c,0xa6,0xa1,0xa1,0x0a,0x6c,0x53,0xc9,0xf5,0xf9,0x6a,0x6a, \
+0x6b,0xe0,0x07,0x22,0x48,0xf0,0x27,0xce,0x7c,0x49,0x7c,0x87,0x05,0x5e,0x80,0xe1, \
+0xc5,0xeb,0x64,0x3c,0x97,0x9f,0xc5,0x46,0x81,0x6e,0xb6,0x41,0x98,0xe7,0x31,0x79, \
+0xd9,0xd1,0xcb,0xb9,0x74,0x7a,0x08,0x44,0x32,0x06,0x44,0xe0,0xc8,0x7d,0xd7,0x6e, \
+0xd3,0x26,0x04,0x7e,0x4e,0x88,0xab,0x01,0x64,0x2c,0x64,0x43,0x49,0xab,0xcb,0x89, \
+0x14,0x23,0x3a,0x80,0x7b,0x6b,0x14,0x15,0x11,0x0b,0x2d,0x9b,0x18,0xce,0x08,0x6e, \
+0x72,0x8b,0x16,0x22,0x46,0x31,0x88,0x48,0x82,0x81,0x91,0x0c,0x43,0xac,0xd7,0xd4, \
+0x4f,0x62,0x8c,0x46,0x98,0x2c,0x26,0x45,0xc2,0x42,0xc6,0x8e,0xeb,0xa8,0x61,0x88, \
+0x49,0x21,0x0d,0x10,0xc0,0x50,0x2e,0xc4,0x4a,0x12,0x83,0x15,0x59,0x93,0xa8,0xa7, \
+0x7f,0x29,0x3a,0xc6,0x0b,0x08,0xa1,0xa9,0xe6,0x21,0x2e,0x19,0xdd,0x0f,0x13,0x87, \
+0x19,0x60,0x73,0xa1,0x91,0xcd,0xc3,0xf3,0x42,0x41,0xca,0x6d,0x36,0xb9,0x77,0x10, \
+0x68,0x2c,0x0f,0xae,0x25,0x6d,0x2f,0x72,0x8c,0x14,0x16,0xb4,0x42,0x2c,0xd2,0x28, \
+0x62,0x94,0x40,0x64,0x82,0x1f,0x1e,0x88,0x78,0xc3,0x6d,0xb6,0x8b,0x11,0x68,0x0a, \
+0x0d,0xa3,0x46,0x52,0x50,0x46,0xd8,0x56,0xb4,0x8b,0xae,0xfe,0xc0,0x19,0xd9,0x67, \
+0x61,0xbc,0x9f,0x67,0x59,0xfc,0x67,0x2d,0x04,0xc5,0x39,0x30,0xc0,0x85,0x9e,0xd6, \
+0x09,0x69,0x9f,0x12,0x0a,0x34,0x75,0x53,0x16,0x4b,0xc1,0xa9,0x9e,0xaf,0xa3,0x4d, \
+0x2b,0x4f,0x2b,0xcf,0xcd,0x45,0xe2,0xeb,0xd6,0x07,0x9b,0x38,0x53,0x29,0x0f,0x65, \
+0x9c,0xf2,0xfa,0x70,0x56,0x1d,0x51,0x2f,0xa7,0x5d,0x29,0x99,0xd6,0xf4,0x44,0x2f, \
+0xd9,0xbc,0x56,0xa7,0x55,0x4f,0x13,0x7a,0xad,0x48,0x11,0x35,0xb5,0x2b,0x21,0x49, \
+0x01,0xf0,0x03,0x01,0x1d,0xbc,0x6b,0x42,0x23,0xed,0x65,0x1c,0x88,0xc8,0x17,0x96, \
+0x82,0x1e,0xdb,0x30,0x1a,0x5e,0x94,0x75,0xf0,0x21,0x76,0xf2,0xe7,0x50,0x1c,0x5b, \
+0x7e,0x0c,0x3a,0x9d,0x66,0x2c,0xcf,0x53,0x93,0xd9,0xe2,0x67,0xa0,0xaa,0x3c,0x9c, \
+0x4c,0x82,0x48,0x64,0x6b,0x10,0x6e,0xe9,0xe3,0x52,0x87,0x40,0x0e,0x19,0x11,0x6c, \
+0x6a,0x0e,0xa9,0x44,0x52,0x94,0x28,0x63,0xdd,0xa0,0x15,0x8d,0x94,0x0c,0x82,0x9c, \
+0xce,0x3c,0xf6,0x56,0xc6,0xf8,0x87,0x25,0x09,0xb8,0x28,0xb9,0xa5,0x39,0xc4,0x82, \
+0x39,0x01,0x4a,0x4b,0xc1,0x3f,0xe6,0xea,0xe5,0xc0,0xf3,0x0a,0xc0,0x8d,0x1c,0x51, \
+0x82,0xd9,0x94,0x94,0xe3,0x86,0x99,0x49,0x22,0xd5,0x3c,0xec,0x8f,0x59,0x6e,0x24, \
+0x29,0xb1,0x03,0xb4,0x8c,0xe1,0x47,0x4e,0x6a,0xa0,0x80,0xd7,0x5e,0x1a,0xad,0x87, \
+0x74,0x68,0xd0,0xdb,0x15,0x9c,0x41,0x5e,0x39,0x54,0x09,0x94,0x07,0x24,0xd5,0x6f, \
+0x70,0x38,0x72,0x5e,0x91,0x23,0x55,0x1b,0xe8,0x55,0xf6,0x5b,0x1d,0x9d,0xcb,0x67, \
+0xbc,0x30,0xa9,0xa0,0xac,0xce,0x6a,0x54,0x58,0x27,0x6b,0xc4,0xc1,0x6a,0x2c,0xda, \
+0x66,0x1b,0x4b,0x83,0x8d,0x48,0x34,0x56,0x16,0x63,0xa0,0xa9,0xb4,0x5c,0x32,0xf3, \
+0xc4,0x9a,0xd2,0xb6,0xa8,0x71,0xec,0x0c,0x60,0x81,0x63,0x44,0x12,0x14,0x2e,0x88, \
+0xad,0x1d,0x3c,0x15,0x93,0x9d,0x85,0x9f,0xb3,0xa4,0xf1,0x3d,0xc0,0x8e,0xbf,0x96, \
+0x5b,0x9a,0xe0,0xb7,0x0c,0xe3,0x41,0xc9,0x8c,0x5f,0x55,0x62,0xfc,0x1c,0x3e,0xa8, \
+0x87,0xea,0x6b,0x87,0x9f,0x7e,0xeb,0xec,0xc7,0x19,0x03,0x23,0x8b,0xec,0xf2,0x37, \
+0x5b,0x68,0x48,0xd4,0xa4,0x1a,0x4d,0x5d,0xb0,0x91,0x8c,0x62,0x18,0x20,0xf6,0x95, \
+0xb6,0xc7,0x22,0x07,0xcc,0x34,0x76,0x26,0x11,0x80,0x6c,0x2a,0x02,0x82,0xd0,0x50, \
+0xaa,0x89,0xc3,0x90,0x8e,0xd4,0xa6,0x68,0x77,0xed,0x36,0xe6,0xbe,0x4c,0xf9,0x9e, \
+0x17,0xa9,0x2c,0x4d,0x93,0xec,0x78,0x72,0xd4,0x13,0xba,0xcd,0x19,0xb0,0x37,0xc9, \
+0xa8,0x4f,0x14,0x0c,0x36,0xb1,0x48,0xd6,0xf0,0xee,0x84,0xb5,0x97,0xe9,0x3d,0xb4, \
+0x96,0xae,0x7f,0x7b,0x5a,0xdf,0x0d,0xe1,0x00,0x68,0xe2,0x6a,0x24,0x14,0xe0,0x15, \
+0x8c,0xe9,0x25,0x9e,0xda,0xc3,0x08,0x70,0x32,0x08,0x0e,0xda,0x81,0x91,0x9c,0x06, \
+0xb6,0x64,0xd6,0x06,0xa6,0x3f,0x7e,0xae,0x1b,0xae,0xbb,0x23,0x46,0xda,0x6d,0x46, \
+0xd5,0xdd,0x3c,0xba,0x8d,0xe1,0x7a,0xe7,0x94,0xbb,0x97,0x8f,0xd1,0x0a,0x21,0xbe, \
+0x2f,0x3c,0x12,0xd4,0x5d,0xfd,0x35,0xfc,0x97,0x9d,0x30,0x1e,0x98,0x24,0x8c,0x8a, \
+0x9f,0xa7,0xeb,0x8d,0x90,0xf5,0x30,0x39,0xe8,0x2f,0x95,0x2e,0x28,0xf3,0xfd,0xdf, \
+0x3e,0x70,0xc6,0x6f,0x6e,0x80,0xce,0x29,0x46,0x1e,0x51,0x2f,0x04,0x4a,0x6c,0x42, \
+0x90,0x15,0x4a,0x89,0x2d,0x51,0x01,0x86,0x8c,0xef,0xe1,0x1d,0x10,0x32,0x80,0xf6, \
+0xc8,0x52,0xb0,0x41,0xeb,0x21,0x62,0xa7,0x25,0x1a,0x61,0x96,0x50,0x37,0x58,0x75, \
+0x91,0xb2,0x34,0x81,0x18,0x9c,0x2a,0x41,0xe2,0xf9,0x34,0x83,0xa5,0xbc,0xc0,0x74, \
+0x54,0x80,0x68,0xda,0x8c,0xbb,0x02,0x52,0xec,0xe0,0x6e,0x9a,0x23,0xf3,0xc2,0x48, \
+0xcb,0xdf,0xc8,0x89,0x3f,0x16,0xb9,0x34,0x6a,0x43,0x4c,0x01,0xb3,0xb3,0x81,0x9e, \
+0x96,0x73,0x1d,0x5f,0x2d,0x71,0x3b,0xa2,0xa6,0xff,0x40,0x2c,0xfa,0x10,0xf5,0x97, \
+0x45,0xf2,0xbc,0x20,0x71,0xcc,0xb4,0x67,0x2c,0xc1,0xd9,0xbe,0x8c,0x9a,0x4c,0xdf, \
+0xaa,0xd6,0x14,0x28,0x28,0x5e,0xaa,0x0c,0x1a,0x4e,0x8d,0x01,0xa4,0x13,0x61,0x7d, \
+0x26,0xc0,0xaf,0x34,0x37,0xa5,0xa7,0x2c,0xe1,0xf4,0x30,0x6e,0xa8,0x90,0x1c,0x43, \
+0x45,0x8c,0x99,0x84,0x21,0x48,0xc2,0x0b,0x03,0xed,0x1a,0x19,0x15,0x9b,0x16,0x32, \
+0x58,0x02,0x59,0xe4,0x06,0x74,0x03,0x18,0x9c,0x8a,0xe0,0x00,0xd8,0x31,0x34,0x32, \
+0x88,0x24,0x0d,0x22,0x44,0xc0,0xcd,0x91,0x79,0x4a,0xae,0x1c,0x1a,0x04,0x13,0x31, \
+0x4a,0x6b,0x46,0x2a,0x0c,0x3a,0xc4,0xa6,0x84,0x81,0x82,0x5a,0xdb,0x21,0xdb,0x72, \
+0x04,0x80,0x54,0xc0,0xd2,0x5e,0x8f,0x2e,0xb2,0x71,0x17,0xb3,0x20,0x58,0x17,0x59, \
+0x24,0xbb,0xc3,0x16,0x82,0x44,0x47,0x48,0xd9,0x73,0x8a,0x70,0x0c,0x48,0xc1,0x65, \
+0x81,0xb1,0xe9,0x72,0xcc,0x34,0x99,0x40,0xc8,0x5a,0x1a,0xc8,0xab,0x48,0xd3,0x70, \
+0x2c,0xdb,0xc8,0x18,0x16,0x82,0x85,0x43,0x12,0x2d,0xc1,0x01,0xec,0x90,0xa5,0xbb, \
+0x07,0x44,0x26,0x88,0x53,0xb7,0x0f,0x36,0x84,0xa8,0x76,0x17,0x45,0x50,0x50,0x5a, \
+0xd5,0x60,0xa4,0x90,0x08,0xd1,0xf4,0x2c,0x44,0x9a,0x3c,0xd8,0x02,0xee,0xd6,0x7a, \
+0x51,0x03,0xb2,0xa4,0x9b,0x30,0xb9,0xc0,0xb8,0x12,0xc1,0x40,0x52,0x98,0x55,0x07, \
+0x35,0x10,0x5a,0xb8,0xcd,0x43,0x0c,0x88,0x18,0x04,0x2d,0x76,0x18,0x41,0xb0,0x61, \
+0xff,0x47,0x3f,0x64,0xe2,0xa7,0xe5,0xad,0xf6,0xca,0x26,0x9d,0x47,0x79,0x82,0x84, \
+0x8d,0x15,0x7d,0xe4,0x2c,0x72,0xb2,0x53,0x1a,0x6d,0x26,0xdd,0xa9,0x8e,0xe2,0x43, \
+0xcc,0xc8,0xd8,0x0d,0x8d,0x8c,0x2e,0x18,0x0e,0xf3,0x26,0x3a,0x20,0x19,0x05,0xaa, \
+0x06,0x51,0x56,0xba,0xa4,0x91,0x61,0x0a,0xc4,0xa1,0x24,0x0f,0x1b,0x76,0x0a,0xe1, \
+0x52,0xe3,0x10,0xc3,0x88,0x86,0xf4,0xb3,0x0c,0xd5,0x21,0x42,0xed,0x24,0x36,0x2b, \
+0x8d,0x8b,0x4d,0xe5,0x0c,0xd7,0x58,0x39,0xb3,0xa2,0x97,0x17,0x8b,0x01,0x89,0x66, \
+0xd2,0xb5,0x56,0xe5,0x72,0x54,0xb6,0x05,0xe6,0xd2,0x62,0x1b,0x9a,0xb8,0xdb,0x47, \
+0x20,0xee,0xe7,0x0f,0x1d,0x01,0xb1,0xcd,0x72,0xd9,0x29,0x76,0xec,0xec,0x49,0xd2, \
+0xc6,0xcb,0xcd,0x25,0x11,0x13,0x12,0xd5,0x1c,0x1d,0xfd,0x1c,0xcd,0xd5,0xfb,0x9e, \
+0x87,0x96,0xfe,0x74,0x0c,0x9d,0xf4,0xa3,0x92,0xda,0x2d,0x22,0x7c,0x20,0x15,0x80, \
+0x54,0x98,0x2a,0x27,0x4c,0x54,0xa5,0xfa,0xc2,0x96,0xd6,0xad,0x89,0xa8,0xba,0x95, \
+0xd3,0x0a,0x4e,0x16,0xae,0xfb,0xeb,0x29,0xed,0xf7,0x93,0xdb,0x48,0x72,0xd6,0xc6, \
+0x43,0x69,0xae,0xca,0x10,0x8b,0xf1,0xca,0xdc,0x16,0x0b,0xd1,0xa0,0xba,0x0d,0x68, \
+0x4c,0x78,0xf1,0x3a,0xd3,0x64,0xf0,0x5e,0xba,0x08,0xe2,0x26,0x14,0xda,0x99,0x5c, \
+0x2c,0x46,0xa7,0x9f,0x21,0x8e,0x40,0xec,0x6d,0x58,0x1d,0x9d,0x5d,0x29,0x37,0x62, \
+0xc9,0x27,0x7a,0x40,0xaa,0xc8,0x26,0xd0,0x10,0xdc,0x84,0x91,0xe4,0x5c,0x3c,0x5c, \
+0x83,0x29,0x54,0xa2,0xb4,0x8a,0x16,0xb7,0x61,0x11,0x0b,0x6b,0xc9,0x60,0xf7,0x33, \
+0x88,0x17,0x21,0x6a,0x65,0x00,0x81,0xef,0xcc,0xb1,0xbb,0x9e,0x4a,0x95,0x51,0x3b, \
+0x47,0xc1,0xa9,0x6d,0x0e,0xf2,0xf2,0xc7,0x67,0x86,0x36,0xdc,0xec,0x66,0x83,0x76, \
+0x16,0x0b,0x19,0x3e,0x3f,0x1d,0xf8,0x3d,0xc5,0xc0,0xb4,0xd9,0x28,0xa3,0x09,0xd9, \
+0x86,0x48,0x6d,0x90,0xdb,0x88,0x93,0x06,0xbd,0x4c,0x37,0xcf,0x09,0x81,0x2b,0x9f, \
+0xb6,0xff,0x5e,0x1b,0xbb,0x3f,0x3c,0xfd,0xda,0x8e,0xa6,0x91,0xb3,0x23,0x88,0x1e, \
+0xf7,0xcd,0xe0,0xc5,0x93,0x14,0x14,0xe7,0x22,0x9b,0xfa,0x1f,0x26,0x42,0x4f,0x74, \
+0x76,0x72,0xff,0xbb,0x34,0x9b,0xba,0x08,0xf4,0xae,0xfd,0x5e,0x7e,0xce,0xff,0xab, \
+0x99,0x63,0x7a,0xe0,0x06,0xa6,0x20,0xc5,0xc2,0x5c,0x67,0xd9,0xf8,0x5e,0x6b,0xc4, \
+0x3c,0xd3,0xa4,0x2e,0x76,0x02,0xb8,0x56,0xc4,0xb8,0xdc,0x7b,0x4b,0x00,0xec,0x3f, \
+0x44,0x22,0xc0,0xf5,0x17,0x41,0xc9,0xee,0x5a,0xe8,0x4e,0xc8,0x5f,0xd4,0x7a,0x48, \
+0x6f,0xea,0x68,0xa9,0xce,0x2f,0x49,0x29,0x7d,0x68,0xdd,0x14,0xf0,0x84,0xdc,0x7c, \
+0x22,0x0b,0x6f,0xa0,0xa1,0xe1,0x1f,0x1f,0x06,0x1c,0x73,0xe0,0xf1,0xc7,0x32,0x18, \
+0x5f,0x59,0x22,0x24,0x96,0xa4,0xd7,0x03,0xc4,0x8a,0xeb,0x06,0x60,0x6d,0x56,0xf7, \
+0x0e,0x3f,0xc7,0xc5,0x48,0x74,0x16,0xbf,0x76,0x10,0x20,0x10,0x90,0x84,0x88,0x20, \
+0x23,0x04,0x64,0xa3,0x36,0x07,0x00,0xc8,0xa2,0x91,0x52,0x14,0xd7,0x3e,0x78,0x2e, \
+0x4e,0xc8,0x42,0x6e,0xac,0x52,0xf5,0x3f,0x1b,0x14,0x81,0x10,0xdd,0x77,0x86,0x24, \
+0x88,0x9d,0x71,0xcf,0xcf,0x61,0xf2,0x2e,0x4f,0x1d,0xd7,0x63,0xb5,0xbd,0x49,0x6b, \
+0xd1,0xc3,0x6c,0xf5,0x5f,0x60,0xc0,0x35,0x3f,0xcb,0x5a,0x69,0x7c,0xa1,0x24,0x1a, \
+0x4a,0x75,0x51,0x95,0xc6,0x1b,0x89,0x84,0x78,0x25,0x90,0x62,0x4e,0xa6,0xcc,0xbc, \
+0x44,0xd8,0x60,0xc2,0xcd,0x22,0x85,0xb6,0xcd,0x8d,0xaa,0xa2,0xdf,0x0b,0x91,0x28, \
+0x4a,0x90,0xee,0x45,0x4e,0xdd,0xb4,0x36,0x7d,0xf1,0xb7,0x40,0xd2,0x5c,0x22,0x67, \
+0x18,0xc8,0x93,0xef,0x64,0xa4,0xa5,0xa4,0xd8,0x95,0x4e,0x99,0xef,0xe1,0x6f,0x3e, \
+0x80,0xbf,0x64,0x25,0x86,0x3d,0xda,0x2b,0x8a,0xa2,0xc4,0x1c,0xa2,0x01,0xf4,0x32, \
+0x1c,0x8e,0x25,0x9d,0x48,0x00,0xea,0x66,0x4d,0xbe,0xa9,0xf8,0x43,0x68,0x6e,0x45, \
+0x47,0xe1,0xaa,0x25,0x1d,0x48,0xbd,0x13,0xb2,0xbb,0x98,0xa0,0x4f,0xaa,0x23,0x34, \
+0x32,0xe7,0x24,0xb5,0x41,0xfd,0xc7,0xd1,0x05,0x1b,0xd4,0x0f,0xee,0xa9,0x47,0xda, \
+0x77,0x4b,0x43,0xe2,0x40,0x9e,0xfc,0x8c,0xec,0x5c,0x1e,0x54,0xa4,0x42,0xe8,0x84, \
+0xf9,0x51,0x4a,0x10,0x7a,0xf9,0x07,0x43,0x31,0xa7,0x67,0x5f,0x02,0x66,0x60,0x83, \
+0xb0,0xc3,0xc4,0xb8,0x40,0xc1,0x2f,0xad,0x8b,0xea,0xbb,0x87,0x21,0x04,0x4b,0x9a, \
+0x54,0x51,0xa3,0x1d,0x3a,0xe1,0xc0,0x45,0x66,0x91,0xec,0x42,0xcb,0x41,0x09,0x4a, \
+0x8e,0x55,0x4d,0x20,0x14,0x50,0x4e,0x58,0x13,0x0a,0x50,0x25,0x8c,0x31,0x26,0xd6, \
+0x8e,0xae,0x10,0x98,0x61,0x85,0x6c,0x4e,0x15,0x5c,0xac,0x4d,0x60,0x50,0xa0,0x82, \
+0x36,0xab,0xe3,0x34,0xc7,0xab,0x84,0x31,0xad,0xbe,0x14,0x2a,0x1c,0x78,0x64,0x0d, \
+0xbc,0x3b,0xf4,0xc8,0x60,0x08,0x16,0x48,0x9a,0xb0,0x72,0xbd,0xc3,0x00,0x33,0x10, \
+0x1a,0x45,0x40,0x9e,0xc7,0xb5,0xf2,0xe2,0x20,0xab,0x4d,0x83,0x63,0x08,0x0b,0x7b, \
+0xc7,0xa2,0x49,0x3d,0xbb,0xff,0x07,0x82,0xff,0x3f,0xfe,0xfc,0x3d,0xa2,0xd8,0xfc, \
+0x3d,0x6b,0x2c,0x12,0xf6,0xed,0x56,0x39,0x7f,0x5a,0x77,0xb7,0x13,0x32,0x1f,0xfd, \
+0x17,0x72,0x45,0x38,0x50,0x90,0x79,0xda,0x6c,0xdc, \
diff --git a/include/.gitignore b/include/.gitignore
index 91659d8..9d9b6c4 100644
--- a/include/.gitignore
+++ b/include/.gitignore
@@ -1,4 +1,5 @@
/config
+
/applets.h
/applet_tables.h
/autoconf.h
diff --git a/include/android.h b/include/android.h
index d065422..024221e 100644
--- a/include/android.h
+++ b/include/android.h
@@ -59,4 +59,7 @@ const char *hasmntopt(const struct mntent *, const char *);
/* bionic's vfork is rather broken; for now a terrible bandaid: */
#define vfork fork
+#define _SOCKLEN_T_DECLARED
+typedef int socklen_t;
+
#endif
diff --git a/include/applets.src.h b/include/applets.src.h
index 87d9cbb..252a060 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -176,7 +176,6 @@ IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hexdump))
-IF_HOSTID(APPLET_NOFORK(hostid, hostid, BB_DIR_USR_BIN, BB_SUID_DROP, hostid))
IF_HOSTNAME(APPLET(hostname, BB_DIR_BIN, BB_SUID_DROP))
IF_HTTPD(APPLET(httpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_HWCLOCK(APPLET(hwclock, BB_DIR_SBIN, BB_SUID_DROP))
@@ -240,7 +239,6 @@ IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
-IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
diff --git a/include/archive.h b/include/bb_archive.h
index 9e176d3..2043d85 100644
--- a/include/archive.h
+++ b/include/bb_archive.h
@@ -12,9 +12,10 @@ enum {
/* .xz signature: 0xfd, '7', 'z', 'X', 'Z', 0x00 */
/* More info at: http://tukaani.org/xz/xz-file-format.txt */
XZ_MAGIC1 = 256 * 0xfd + '7',
- XZ_MAGIC2 = 256 * (256 * (256 * 'z' + 'X') + 'Z') + 0,
+ XZ_MAGIC2 = 256 * (unsigned)(256 * (256 * 'z' + 'X') + 'Z') + 0,
/* Different form: 32 bits, then 16 bits: */
- XZ_MAGIC1a = 256 * (256 * (256 * 0xfd + '7') + 'z') + 'X',
+ /* (unsigned) cast suppresses "integer overflow in expression" warning */
+ XZ_MAGIC1a = 256 * (unsigned)(256 * (256 * 0xfd + '7') + 'z') + 'X',
XZ_MAGIC2a = 256 * 'Z' + 0,
#else
COMPRESS_MAGIC = 0x9d1f,
@@ -76,19 +77,20 @@ typedef struct archive_handle_t {
off_t offset;
/* Archiver specific. Can make it a union if it ever gets big */
+#define PAX_NEXT_FILE 0
+#define PAX_GLOBAL 1
#if ENABLE_TAR || ENABLE_DPKG || ENABLE_DPKG_DEB
smallint tar__end;
# if ENABLE_FEATURE_TAR_GNU_EXTENSIONS
char* tar__longname;
char* tar__linkname;
# endif
-#if ENABLE_FEATURE_TAR_TO_COMMAND
+# if ENABLE_FEATURE_TAR_TO_COMMAND
char* tar__to_command;
const char* tar__to_command_shell;
-#endif
+# endif
# if ENABLE_FEATURE_TAR_SELINUX
- char* tar__global_sctx;
- char* tar__next_file_sctx;
+ char* tar__sctx[2];
# endif
#endif
#if ENABLE_CPIO || ENABLE_RPM2CPIO || ENABLE_RPM
@@ -154,12 +156,6 @@ struct BUG_tar_header {
-/* Info struct unpackers can fill out to inform users of thing like
- * timestamps of unpacked files */
-typedef struct unpack_info_t {
- time_t mtime;
-} unpack_info_t;
-
archive_handle_t *init_handle(void) FAST_FUNC;
char filter_accept_all(archive_handle_t *archive_handle) FAST_FUNC;
@@ -202,40 +198,47 @@ int start_bunzip(bunzip_data **bdp, int in_fd, const void *inbuf, int len) FAST_
int read_bunzip(bunzip_data *bd, char *outbuf, int len) FAST_FUNC;
void dealloc_bunzip(bunzip_data *bd) FAST_FUNC;
-typedef struct inflate_unzip_result {
- off_t bytes_out;
- uint32_t crc;
-} inflate_unzip_result;
-
-IF_DESKTOP(long long) int inflate_unzip(inflate_unzip_result *res, off_t compr_size, int src_fd, int dst_fd) FAST_FUNC;
-/* xz unpacker takes .xz stream from offset 6 */
-IF_DESKTOP(long long) int unpack_xz_stream(int src_fd, int dst_fd) FAST_FUNC;
-/* lzma unpacker takes .lzma stream from offset 0 */
-IF_DESKTOP(long long) int unpack_lzma_stream(int src_fd, int dst_fd) FAST_FUNC;
-/* the rest wants 2 first bytes already skipped by the caller */
-IF_DESKTOP(long long) int unpack_bz2_stream(int src_fd, int dst_fd) FAST_FUNC;
-IF_DESKTOP(long long) int unpack_gz_stream(int src_fd, int dst_fd) FAST_FUNC;
-IF_DESKTOP(long long) int unpack_gz_stream_with_info(int src_fd, int dst_fd, unpack_info_t *info) FAST_FUNC;
-IF_DESKTOP(long long) int unpack_Z_stream(int src_fd, int dst_fd) FAST_FUNC;
-/* wrapper which checks first two bytes to be "BZ" */
-IF_DESKTOP(long long) int unpack_bz2_stream_prime(int src_fd, int dst_fd) FAST_FUNC;
+/* Meaning and direction (input/output) of the fields are transformer-specific */
+typedef struct transformer_aux_data_t {
+ smallint check_signature; /* most often referenced member */
+ off_t bytes_out;
+ off_t bytes_in; /* used in unzip code only: needs to know packed size */
+ uint32_t crc32;
+ time_t mtime; /* gunzip code may set this on exit */
+} transformer_aux_data_t;
+
+void init_transformer_aux_data(transformer_aux_data_t *aux) FAST_FUNC;
+int FAST_FUNC check_signature16(transformer_aux_data_t *aux, int src_fd, unsigned magic16) FAST_FUNC;
+
+IF_DESKTOP(long long) int inflate_unzip(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC;
+IF_DESKTOP(long long) int unpack_Z_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC;
+IF_DESKTOP(long long) int unpack_gz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC;
+IF_DESKTOP(long long) int unpack_bz2_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC;
+IF_DESKTOP(long long) int unpack_lzma_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC;
+IF_DESKTOP(long long) int unpack_xz_stream(transformer_aux_data_t *aux, int src_fd, int dst_fd) FAST_FUNC;
char* append_ext(char *filename, const char *expected_ext) FAST_FUNC;
int bbunpack(char **argv,
- IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(unpack_info_t *info),
+ IF_DESKTOP(long long) int FAST_FUNC (*unpacker)(transformer_aux_data_t *aux),
char* FAST_FUNC (*make_new_name)(char *filename, const char *expected_ext),
const char *expected_ext
) FAST_FUNC;
+void check_errors_in_children(int signo);
#if BB_MMU
void open_transformer(int fd,
- IF_DESKTOP(long long) int FAST_FUNC (*transformer)(int src_fd, int dst_fd)) FAST_FUNC;
-#define open_transformer(fd, transformer, transform_prog) open_transformer(fd, transformer)
+ int check_signature,
+ IF_DESKTOP(long long) int FAST_FUNC (*transformer)(transformer_aux_data_t *aux, int src_fd, int dst_fd)
+) FAST_FUNC;
+#define open_transformer_with_sig(fd, transformer, transform_prog) open_transformer((fd), 1, (transformer))
+#define open_transformer_with_no_sig(fd, transformer) open_transformer((fd), 0, (transformer))
#else
-void open_transformer(int src_fd, const char *transform_prog) FAST_FUNC;
-#define open_transformer(fd, transformer, transform_prog) open_transformer(fd, transform_prog)
+void open_transformer(int fd, const char *transform_prog) FAST_FUNC;
+#define open_transformer_with_sig(fd, transformer, transform_prog) open_transformer((fd), (transform_prog))
+/* open_transformer_with_no_sig() does not exist on NOMMU */
#endif
+
POP_SAVED_FUNCTION_VISIBILITY
#endif
diff --git a/e2fsprogs/e2fs_defs.h b/include/bb_e2fs_defs.h
index 379640e..7974497 100644
--- a/e2fsprogs/e2fs_defs.h
+++ b/include/bb_e2fs_defs.h
@@ -467,7 +467,7 @@ struct ext2_super_block {
#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
-#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
+#define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010
#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
diff --git a/include/grp_.h b/include/grp_.h
index 5c24d55..82ad904 100644
--- a/include/grp_.h
+++ b/include/grp_.h
@@ -29,7 +29,7 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
* We will use libc-defined structures, but will #define function names
* so that function calls are directed to bb_internal_XXX replacements
*/
-
+#undef endgrent
#define setgrent bb_internal_setgrent
#define endgrent bb_internal_endgrent
#define getgrent bb_internal_getgrent
diff --git a/include/libbb.h b/include/libbb.h
index dcfc41c..8b09f5a 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -45,6 +45,11 @@
#include <stdarg.h>
#include <stddef.h>
#include <string.h>
+/* There are two incompatible basename's, let not use them! */
+/* See the dirname/basename man page for details */
+#include <libgen.h> /* dirname,basename */
+#undef basename
+#define basename dont_use_basename
#include <sys/poll.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
@@ -59,6 +64,21 @@
#include <termios.h>
#include <time.h>
#include <sys/param.h>
+#include <pwd.h>
+#include <grp.h>
+#if ENABLE_FEATURE_SHADOWPASSWDS
+# if !ENABLE_USE_BB_SHADOW
+/* If using busybox's shadow implementation, do not include the shadow.h
+ * header as the toolchain may not provide it at all.
+ */
+# include <shadow.h>
+# endif
+#endif
+#if defined(ANDROID) || defined(__ANDROID__)
+//see android.h
+//# define endpwent() ((void)0)
+//# define endgrent() ((void)0)
+#endif
#ifdef HAVE_MNTENT_H
# include <mntent.h>
#endif
@@ -88,16 +108,6 @@
#ifdef DMALLOC
# include <dmalloc.h>
#endif
-#include <pwd.h>
-#include <grp.h>
-#if ENABLE_FEATURE_SHADOWPASSWDS
-# if !ENABLE_USE_BB_SHADOW
-/* If using busybox's shadow implementation, do not include the shadow.h
- * header as the toolchain may not provide it at all.
- */
-# include <shadow.h>
-# endif
-#endif
/* Just in case libc doesn't define some of these... */
#ifndef _PATH_PASSWD
#define _PATH_PASSWD "/etc/passwd"
@@ -146,12 +156,6 @@ int vdprintf(int d, const char *format, va_list ap);
#endif
/* klogctl is in libc's klog.h, but we cheat and not #include that */
int klogctl(int type, char *b, int len);
-/* This is declared here rather than #including <libgen.h> in order to avoid
- * confusing the two versions of basename. See the dirname/basename man page
- * for details. */
-#if !defined __FreeBSD__ && !defined __BIONIC__
-char *dirname(char *path);
-#endif
#ifndef PATH_MAX
# define PATH_MAX 256
#endif
@@ -184,6 +188,7 @@ char *dirname(char *path);
# define fputs(s, stream) fputs_unlocked(s, stream)
#endif
+
/* Make all declarations hidden (-fvisibility flag only affects definitions) */
/* (don't include system headers after this until corresponding pop!) */
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
@@ -225,7 +230,7 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
# if ULONG_MAX > 0xffffffff
/* "long" is long enough on this system */
typedef unsigned long uoff_t;
-# define XATOOFF(a) xatoul_range(a, 0, LONG_MAX)
+# define XATOOFF(a) xatoul_range((a), 0, LONG_MAX)
/* usage: sz = BB_STRTOOFF(s, NULL, 10); if (errno || sz < 0) die(); */
# define BB_STRTOOFF bb_strtoul
# define STRTOOFF strtoul
@@ -234,7 +239,7 @@ typedef unsigned long uoff_t;
# else
/* "long" is too short, need "long long" */
typedef unsigned long long uoff_t;
-# define XATOOFF(a) xatoull_range(a, 0, LLONG_MAX)
+# define XATOOFF(a) xatoull_range((a), 0, LLONG_MAX)
# define BB_STRTOOFF bb_strtoull
# define STRTOOFF strtoull
# define OFF_FMT "ll"
@@ -251,7 +256,7 @@ typedef unsigned long uoff_t;
# define OFF_FMT "l"
# else
typedef unsigned long uoff_t;
-# define XATOOFF(a) xatoul_range(a, 0, LONG_MAX)
+# define XATOOFF(a) xatoul_range((a), 0, LONG_MAX)
# define BB_STRTOOFF bb_strtoul
# define STRTOOFF strtol
# define OFF_FMT "l"
@@ -259,6 +264,12 @@ typedef unsigned long uoff_t;
#endif
/* scary. better ideas? (but do *test* them first!) */
#define OFF_T_MAX ((off_t)~((off_t)1 << (sizeof(off_t)*8-1)))
+/* Users report bionic to use 32-bit off_t even if LARGEFILE support is requested.
+ * We misdetected that. Don't let it build:
+ */
+struct BUG_off_t_size_is_misdetected {
+ char BUG_off_t_size_is_misdetected[sizeof(off_t) == sizeof(uoff_t) ? 1 : -1];
+};
#ifdef __BIONIC__
/* bionic uses stat64 which has long long file sizes, whereas off_t is only long bits */
@@ -277,13 +288,6 @@ typedef off_t filesize_t;
#undef SKIP
#define SKIP ((int) 2)
-/* for mtab.c */
-#define MTAB_GETMOUNTPT '1'
-#define MTAB_GETDEVICE '2'
-
-#define BUF_SIZE 8192
-#define EXPAND_ALLOC 1024
-
/* Macros for min/max. */
#ifndef MIN
#define MIN(a,b) (((a)<(b))?(a):(b))
@@ -338,7 +342,7 @@ extern char *strrstr(const char *haystack, const char *needle) FAST_FUNC;
//TODO: supply a pointer to char[11] buffer (avoid statics)?
extern const char *bb_mode_string(mode_t mode) FAST_FUNC;
-extern int is_directory(const char *name, int followLinks, struct stat *statBuf) FAST_FUNC;
+extern int is_directory(const char *name, int followLinks) FAST_FUNC;
enum { /* DO NOT CHANGE THESE VALUES! cp.c, mv.c, install.c depend on them. */
FILEUTILS_PRESERVE_STATUS = 1 << 0, /* -p */
FILEUTILS_DEREFERENCE = 1 << 1, /* !-d */
@@ -588,12 +592,7 @@ enum {
* and if kernel doesn't support it, fall back to IPv4.
* This is useful if you plan to bind to resulting local lsa.
*/
-#if ENABLE_FEATURE_IPV6
int xsocket_type(len_and_sockaddr **lsap, int af, int sock_type) FAST_FUNC;
-#else
-int xsocket_type(len_and_sockaddr **lsap, int sock_type) FAST_FUNC;
-#define xsocket_type(lsap, af, sock_type) xsocket_type((lsap), (sock_type))
-#endif
int xsocket_stream(len_and_sockaddr **lsap) FAST_FUNC;
/* Create server socket bound to bindaddr:port. bindaddr can be NULL,
* numeric IP ("N.N.N.N") or numeric IPv6 address,
@@ -662,6 +661,7 @@ ssize_t recv_from_to(int fd, void *buf, size_t len, int flags,
struct sockaddr *to,
socklen_t sa_size) FAST_FUNC;
+uint16_t inet_cksum(uint16_t *addr, int len) FAST_FUNC;
char *xstrdup(const char *s) FAST_FUNC RETURNS_MALLOC;
char *xstrndup(const char *s, int n) FAST_FUNC RETURNS_MALLOC;
@@ -706,10 +706,13 @@ void *malloc_or_warn(size_t size) FAST_FUNC RETURNS_MALLOC;
void *xmalloc(size_t size) FAST_FUNC RETURNS_MALLOC;
void *xzalloc(size_t size) FAST_FUNC RETURNS_MALLOC;
void *xrealloc(void *old, size_t size) FAST_FUNC;
-/* After xrealloc_vector(v, 4, idx) it's ok to use
+/* After v = xrealloc_vector(v, SHIFT, idx) it's ok to use
* at least v[idx] and v[idx+1], for all idx values.
- * shift specifies how many new elements are added (1: 2, 2: 4... 8: 256...)
- * when all elements are used up. New elements are zeroed out. */
+ * SHIFT specifies how many new elements are added (1:2, 2:4, ..., 8:256...)
+ * when all elements are used up. New elements are zeroed out.
+ * xrealloc_vector(v, SHIFT, idx) *MUST* be called with consecutive IDXs -
+ * skipping an index is a bad bug - it may miss a realloc!
+ */
#define xrealloc_vector(vector, shift, idx) \
xrealloc_vector_helper((vector), (sizeof((vector)[0]) << 8) + (shift), (idx))
void* xrealloc_vector_helper(void *vector, unsigned sizeof_and_shift, int idx) FAST_FUNC;
@@ -734,17 +737,23 @@ extern void *xmalloc_read(int fd, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
/* Never returns NULL */
extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
-/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
-#if ENABLE_FEATURE_SEAMLESS_LZMA \
+
+#define SEAMLESS_COMPRESSION (0 \
+ || ENABLE_FEATURE_SEAMLESS_XZ \
+ || ENABLE_FEATURE_SEAMLESS_LZMA \
|| ENABLE_FEATURE_SEAMLESS_BZ2 \
|| ENABLE_FEATURE_SEAMLESS_GZ \
- /* || ENABLE_FEATURE_SEAMLESS_Z */
-extern void setup_unzip_on_fd(int fd /*, int fail_if_not_detected*/) FAST_FUNC;
-#else
-# define setup_unzip_on_fd(...) ((void)0)
-#endif
+ || ENABLE_FEATURE_SEAMLESS_Z)
+
+#if SEAMLESS_COMPRESSION
+/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
+extern int setup_unzip_on_fd(int fd, int fail_if_not_detected) FAST_FUNC;
/* Autodetects .gz etc */
extern int open_zipped(const char *fname) FAST_FUNC;
+#else
+# define setup_unzip_on_fd(...) (0)
+# define open_zipped(fname) open((fname), O_RDONLY);
+#endif
extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC;
@@ -833,9 +842,9 @@ void smart_ulltoa5(unsigned long long ul, char buf[5], const char *scale) FAST_F
const char *make_human_readable_str(unsigned long long size,
unsigned long block_size, unsigned long display_unit) FAST_FUNC;
/* Put a string of hex bytes ("1b2e66fe"...), return advanced pointer */
-char *bin2hex(char *buf, const char *cp, int count) FAST_FUNC;
+char *bin2hex(char *dst, const char *src, int count) FAST_FUNC;
/* Reverse */
-char* hex2bin(char *dst, const char *str, int count) FAST_FUNC;
+char* hex2bin(char *dst, const char *src, int count) FAST_FUNC;
/* Generate a UUID */
void generate_uuid(uint8_t *buf) FAST_FUNC;
@@ -992,6 +1001,7 @@ enum {
DAEMON_DEVNULL_STDIO = 2,
DAEMON_CLOSE_EXTRA_FDS = 4,
DAEMON_ONLY_SANITIZE = 8, /* internal use */
+ DAEMON_DOUBLE_FORK = 16, /* double fork to avoid controlling tty */
};
#if BB_MMU
enum { re_execed = 0 };
@@ -1000,6 +1010,9 @@ enum {
# define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus)
#else
extern bool re_execed;
+ /* Note: re_exec() and fork_or_rexec() do argv[0][0] |= 0x80 on NOMMU!
+ * _Parent_ needs to undo it if it doesn't want to have argv[0] mangled.
+ */
void re_exec(char **argv) NORETURN FAST_FUNC;
pid_t fork_or_rexec(char **argv) FAST_FUNC;
int BUG_fork_is_unavailable_on_nommu(void) FAST_FUNC;
@@ -1186,7 +1199,7 @@ extern int del_loop(const char *device) FAST_FUNC;
/* If *devname is not NULL, use that name, otherwise try to find free one,
* malloc and return it in *devname.
* return value: 1: read-only loopdev was setup, 0: rw, < 0: error */
-extern int set_loop(char **devname, const char *file, unsigned long long offset) FAST_FUNC;
+extern int set_loop(char **devname, const char *file, unsigned long long offset, int ro) FAST_FUNC;
/* Like bb_ask below, but asks on stdin with no timeout. */
char *bb_ask_stdin(const char * prompt) FAST_FUNC;
@@ -1207,13 +1220,14 @@ enum {
PARSE_MIN_DIE = 0x00100000, // die if < min tokens found
// keep a copy of current line
PARSE_KEEP_COPY = 0x00200000 * ENABLE_FEATURE_CROND_D,
-// PARSE_ESCAPE = 0x00400000, // process escape sequences in tokens
+ PARSE_EOL_COMMENTS = 0x00400000, // comments are recognized even if they aren't the first char
// NORMAL is:
// * remove leading and trailing delimiters and collapse
// multiple delimiters into one
// * warn and continue if less than mintokens delimiters found
// * grab everything into last token
- PARSE_NORMAL = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY,
+ // * comments are recognized even if they aren't the first char
+ PARSE_NORMAL = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY | PARSE_EOL_COMMENTS,
};
typedef struct parser_t {
FILE *fp;
@@ -1384,25 +1398,37 @@ enum {
KEYCODE_DELETE = -9,
KEYCODE_PAGEUP = -10,
KEYCODE_PAGEDOWN = -11,
-
- KEYCODE_CTRL_UP = KEYCODE_UP & ~0x40,
- KEYCODE_CTRL_DOWN = KEYCODE_DOWN & ~0x40,
+ // -12 is reserved for Alt/Ctrl/Shift-TAB
+#if 0
+ KEYCODE_FUN1 = -13,
+ KEYCODE_FUN2 = -14,
+ KEYCODE_FUN3 = -15,
+ KEYCODE_FUN4 = -16,
+ KEYCODE_FUN5 = -17,
+ KEYCODE_FUN6 = -18,
+ KEYCODE_FUN7 = -19,
+ KEYCODE_FUN8 = -20,
+ KEYCODE_FUN9 = -21,
+ KEYCODE_FUN10 = -22,
+ KEYCODE_FUN11 = -23,
+ KEYCODE_FUN12 = -24,
+#endif
+ /* Be sure that last defined value is small enough
+ * to not interfere with Alt/Ctrl/Shift bits.
+ * So far we do not exceed -31 (0xfff..fffe1),
+ * which gives us three upper bits in LSB to play with.
+ */
+ //KEYCODE_SHIFT_TAB = (-12) & ~0x80,
+ //KEYCODE_SHIFT_... = KEYCODE_... & ~0x80,
+ //KEYCODE_CTRL_UP = KEYCODE_UP & ~0x40,
+ //KEYCODE_CTRL_DOWN = KEYCODE_DOWN & ~0x40,
KEYCODE_CTRL_RIGHT = KEYCODE_RIGHT & ~0x40,
KEYCODE_CTRL_LEFT = KEYCODE_LEFT & ~0x40,
-#if 0
- KEYCODE_FUN1 = -12,
- KEYCODE_FUN2 = -13,
- KEYCODE_FUN3 = -14,
- KEYCODE_FUN4 = -15,
- KEYCODE_FUN5 = -16,
- KEYCODE_FUN6 = -17,
- KEYCODE_FUN7 = -18,
- KEYCODE_FUN8 = -19,
- KEYCODE_FUN9 = -20,
- KEYCODE_FUN10 = -21,
- KEYCODE_FUN11 = -22,
- KEYCODE_FUN12 = -23,
-#endif
+ //KEYCODE_ALT_UP = KEYCODE_UP & ~0x20,
+ //KEYCODE_ALT_DOWN = KEYCODE_DOWN & ~0x20,
+ KEYCODE_ALT_RIGHT = KEYCODE_RIGHT & ~0x20,
+ KEYCODE_ALT_LEFT = KEYCODE_LEFT & ~0x20,
+
KEYCODE_CURSOR_POS = -0x100, /* 0xfff..fff00 */
/* How long is the longest ESC sequence we know?
* We want it big enough to be able to contain
@@ -1443,6 +1469,12 @@ typedef struct line_input_t {
int cur_history;
int max_history; /* must never be <= 0 */
# if ENABLE_FEATURE_EDITING_SAVEHISTORY
+ /* meaning of this field depends on FEATURE_EDITING_SAVE_ON_EXIT:
+ * if !FEATURE_EDITING_SAVE_ON_EXIT: "how many lines are
+ * in on-disk history"
+ * if FEATURE_EDITING_SAVE_ON_EXIT: "how many in-memory lines are
+ * also in on-disk history (and thus need to be skipped on save)"
+ */
unsigned cnt_history_in_file;
const char *hist_file;
# endif
@@ -1450,13 +1482,12 @@ typedef struct line_input_t {
# endif
} line_input_t;
enum {
- DO_HISTORY = 1 * (MAX_HISTORY > 0),
- SAVE_HISTORY = 2 * (MAX_HISTORY > 0) * ENABLE_FEATURE_EDITING_SAVEHISTORY,
- TAB_COMPLETION = 4 * ENABLE_FEATURE_TAB_COMPLETION,
- USERNAME_COMPLETION = 8 * ENABLE_FEATURE_USERNAME_COMPLETION,
- VI_MODE = 0x10 * ENABLE_FEATURE_EDITING_VI,
- WITH_PATH_LOOKUP = 0x20,
- FOR_SHELL = DO_HISTORY | SAVE_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION,
+ DO_HISTORY = 1 * (MAX_HISTORY > 0),
+ TAB_COMPLETION = 2 * ENABLE_FEATURE_TAB_COMPLETION,
+ USERNAME_COMPLETION = 4 * ENABLE_FEATURE_USERNAME_COMPLETION,
+ VI_MODE = 8 * ENABLE_FEATURE_EDITING_VI,
+ WITH_PATH_LOOKUP = 0x10,
+ FOR_SHELL = DO_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION,
};
line_input_t *new_line_input_t(int flags) FAST_FUNC;
/* So far static: void free_line_input_t(line_input_t *n) FAST_FUNC; */
@@ -1468,6 +1499,9 @@ line_input_t *new_line_input_t(int flags) FAST_FUNC;
* >0 length of input string, including terminating '\n'
*/
int read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize, int timeout) FAST_FUNC;
+# if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
+void save_history(line_input_t *st);
+# endif
#else
#define MAX_HISTORY 0
int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC;
@@ -1592,6 +1626,15 @@ int starts_with_cpu(const char *str) FAST_FUNC;
unsigned get_cpu_count(void) FAST_FUNC;
+/* Use strict=1 if you process input from untrusted source:
+ * it will return NULL on invalid %xx (bad hex chars)
+ * and str + 1 if decoded char is / or NUL.
+ * In non-strict mode, it always succeeds (returns str),
+ * and also it additionally decoded '+' to space.
+ */
+char *percent_decode_in_place(char *str, int strict) FAST_FUNC;
+
+
extern const char bb_uuenc_tbl_base64[];
extern const char bb_uuenc_tbl_std[];
void bb_uuencode(char *store, const void *s, int length, const char *tbl) FAST_FUNC;
@@ -1600,7 +1643,8 @@ enum {
/* Sign-extends to a value which never matches fgetc result: */
BASE64_FLAG_NO_STOP_CHAR = 0x80,
};
-void FAST_FUNC read_base64(FILE *src_stream, FILE *dst_stream, int flags);
+const char *decode_base64(char **pp_dst, const char *src) FAST_FUNC;
+void read_base64(FILE *src_stream, FILE *dst_stream, int flags) FAST_FUNC;
typedef struct md5_ctx_t {
uint8_t wbuffer[64]; /* always correctly aligned for uint64_t */
diff --git a/include/platform.h b/include/platform.h
index 0ce0b08..71e2be3 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -372,7 +372,7 @@ typedef unsigned smalluint;
#if defined(__UCLIBC_MAJOR__)
# if __UCLIBC_MAJOR__ == 0 \
&& ( __UCLIBC_MINOR__ < 9 \
- || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 31) \
+ || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 32) \
)
# undef HAVE_STRVERSCMP
# endif
diff --git a/include/pwd_.h b/include/pwd_.h
index e40b71d..ea158da 100644
--- a/include/pwd_.h
+++ b/include/pwd_.h
@@ -30,7 +30,7 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
* We will use libc-defined structures, but will #define function names
* so that function calls are directed to bb_internal_XXX replacements
*/
-
+#undef endpwent
#define setpwent bb_internal_setpwent
#define endpwent bb_internal_endpwent
#define getpwent bb_internal_getpwent
diff --git a/include/volume_id.h b/include/volume_id.h
index 4a78cd1..a83da89 100644
--- a/include/volume_id.h
+++ b/include/volume_id.h
@@ -20,7 +20,7 @@
char *get_devname_from_label(const char *spec);
char *get_devname_from_uuid(const char *spec);
-void display_uuid_cache(void);
+void display_uuid_cache(int scan_devices);
/* Returns:
* 0: no UUID= or LABEL= prefix found
diff --git a/include/xatonum.h b/include/xatonum.h
index 6f76a3c..45ebbfc 100644
--- a/include/xatonum.h
+++ b/include/xatonum.h
@@ -168,6 +168,15 @@ uint32_t bb_strtou32(const char *arg, char **endp, int base)
return bb_strtoul(arg, endp, base);
return BUG_bb_strtou32_unimplemented();
}
+static ALWAYS_INLINE
+int32_t bb_strtoi32(const char *arg, char **endp, int base)
+{
+ if (sizeof(int32_t) == sizeof(int))
+ return bb_strtoi(arg, endp, base);
+ if (sizeof(int32_t) == sizeof(long))
+ return bb_strtol(arg, endp, base);
+ return BUG_bb_strtou32_unimplemented();
+}
/* Floating point */
diff --git a/init/bootchartd.c b/init/bootchartd.c
index 5f6121f..9fd6233 100644
--- a/init/bootchartd.c
+++ b/init/bootchartd.c
@@ -208,14 +208,8 @@ static char *make_tempdir(void)
return tempdir;
}
-static void do_logging(unsigned sample_period_us)
+static void do_logging(unsigned sample_period_us, int process_accounting)
{
- //# Enable process accounting if configured
- //if [ "$PROCESS_ACCOUNTING" = "yes" ]; then
- // [ -e kernel_pacct ] || : > kernel_pacct
- // accton kernel_pacct
- //fi
-
FILE *proc_stat = xfopen("proc_stat.log", "w");
FILE *proc_diskstats = xfopen("proc_diskstats.log", "w");
//FILE *proc_netdev = xfopen("proc_netdev.log", "w");
@@ -223,6 +217,11 @@ static void do_logging(unsigned sample_period_us)
int look_for_login_process = (getppid() == 1);
unsigned count = 60*1000*1000 / sample_period_us; /* ~1 minute */
+ if (process_accounting) {
+ close(xopen("kernel_pacct", O_WRONLY | O_CREAT | O_TRUNC));
+ acct("kernel_pacct");
+ }
+
while (--count && !bb_got_signal) {
char *p;
int len = open_read_close("/proc/uptime", G.jiffy_line, sizeof(G.jiffy_line)-2);
@@ -253,11 +252,9 @@ static void do_logging(unsigned sample_period_us)
wait_more:
usleep(sample_period_us);
}
-
- // [ -e kernel_pacct ] && accton off
}
-static void finalize(char *tempdir, const char *prog)
+static void finalize(char *tempdir, const char *prog, int process_accounting)
{
//# Stop process accounting if configured
//local pacct=
@@ -265,6 +262,9 @@ static void finalize(char *tempdir, const char *prog)
FILE *header_fp = xfopen("header", "w");
+ if (process_accounting)
+ acct(NULL);
+
if (prog)
fprintf(header_fp, "profile.process = %s\n", prog);
@@ -307,7 +307,7 @@ static void finalize(char *tempdir, const char *prog)
fclose(header_fp);
/* Package log files */
- system("tar -zcf /var/log/bootchart.tgz header *.log"); // + $pacct
+ system(xasprintf("tar -zcf /var/log/bootlog.tgz header %s *.log", process_accounting ? "kernel_pacct" : ""));
/* Clean up (if we are not in detached tmpfs) */
if (tempdir) {
unlink("header");
@@ -315,6 +315,8 @@ static void finalize(char *tempdir, const char *prog)
unlink("proc_diskstats.log");
//unlink("proc_netdev.log");
unlink("proc_ps.log");
+ if (process_accounting)
+ unlink("kernel_pacct");
rmdir(tempdir);
}
@@ -338,6 +340,7 @@ int bootchartd_main(int argc UNUSED_PARAM, char **argv)
unsigned sample_period_us;
pid_t parent_pid, logger_pid;
smallint cmd;
+ int process_accounting;
enum {
CMD_STOP = 0,
CMD_START,
@@ -371,6 +374,7 @@ int bootchartd_main(int argc UNUSED_PARAM, char **argv)
/* Read config file: */
sample_period_us = 200 * 1000;
+ process_accounting = 0;
if (ENABLE_FEATURE_BOOTCHARTD_CONFIG_FILE) {
char* token[2];
parser_t *parser = config_open2("/etc/bootchartd.conf" + 5, fopen_for_read);
@@ -379,11 +383,16 @@ int bootchartd_main(int argc UNUSED_PARAM, char **argv)
while (config_read(parser, token, 2, 0, "#=", PARSE_NORMAL & ~PARSE_COLLAPSE)) {
if (strcmp(token[0], "SAMPLE_PERIOD") == 0 && token[1])
sample_period_us = atof(token[1]) * 1000000;
+ if (strcmp(token[0], "PROCESS_ACCOUNTING") == 0 && token[1]
+ && (strcmp(token[1], "on") == 0 || strcmp(token[1], "yes") == 0)
+ ) {
+ process_accounting = 1;
+ }
}
config_close(parser);
+ if ((int)sample_period_us <= 0)
+ sample_period_us = 1; /* prevent division by 0 */
}
- if ((int)sample_period_us <= 0)
- sample_period_us = 1; /* prevent division by 0 */
/* Create logger child: */
logger_pid = fork_or_rexec(argv);
@@ -411,13 +420,15 @@ int bootchartd_main(int argc UNUSED_PARAM, char **argv)
putenv((char*)bb_PATH_root_path);
tempdir = make_tempdir();
- do_logging(sample_period_us);
- finalize(tempdir, cmd == CMD_START ? argv[2] : NULL);
+ do_logging(sample_period_us, process_accounting);
+ finalize(tempdir, cmd == CMD_START ? argv[2] : NULL, process_accounting);
return EXIT_SUCCESS;
}
/* parent */
+ USE_FOR_NOMMU(argv[0][0] &= 0x7f); /* undo fork_or_rexec() damage */
+
if (DO_SIGNAL_SYNC) {
/* Wait for logger child to set handlers, then unpause it.
* Otherwise with short-lived PROG (e.g. "bootchartd start true")
diff --git a/init/init.c b/init/init.c
index 645f694..7248946 100644
--- a/init/init.c
+++ b/init/init.c
@@ -108,6 +108,8 @@
//config: Note that on Linux, init attempts to detect serial terminal and
//config: sets TERM to "vt102" if one is found.
+#define DEBUG_SEGV_HANDLER 0
+
#include "libbb.h"
#include <syslog.h>
#include <paths.h>
@@ -118,6 +120,15 @@
#endif
#include "reboot.h" /* reboot() constants */
+#if DEBUG_SEGV_HANDLER
+# undef _GNU_SOURCE
+# define _GNU_SOURCE 1
+# undef __USE_GNU
+# define __USE_GNU 1
+# include <execinfo.h>
+# include <sys/ucontext.h>
+#endif
+
/* Used only for sanitizing purposes in set_sane_term() below. On systems where
* the baud rate is stored in a separate field, we can safely disable them. */
#ifndef CBAUD
@@ -523,15 +534,17 @@ static struct init_action *mark_terminated(pid_t pid)
struct init_action *a;
if (pid > 0) {
+ update_utmp(pid, DEAD_PROCESS,
+ /*tty_name:*/ NULL,
+ /*username:*/ NULL,
+ /*hostname:*/ NULL
+ );
for (a = init_action_list; a; a = a->next) {
if (a->pid == pid) {
a->pid = 0;
return a;
}
}
- update_utmp(pid, DEAD_PROCESS, /*tty_name:*/ NULL,
- /*username:*/ NULL,
- /*hostname:*/ NULL);
}
return NULL;
}
@@ -596,7 +609,7 @@ static void new_init_action(uint8_t action_type, const char *command, const char
*/
nextp = &init_action_list;
while ((a = *nextp) != NULL) {
- /* Don't enter action if it's already in the list,
+ /* Don't enter action if it's already in the list.
* This prevents losing running RESPAWNs.
*/
if (strcmp(a->command, command) == 0
@@ -608,14 +621,15 @@ static void new_init_action(uint8_t action_type, const char *command, const char
while (*nextp != NULL)
nextp = &(*nextp)->next;
a->next = NULL;
- break;
+ goto append;
}
nextp = &a->next;
}
- if (!a)
- a = xzalloc(sizeof(*a));
+ a = xzalloc(sizeof(*a));
+
/* Append to the end of the list */
+ append:
*nextp = a;
a->action_type = action_type;
safe_strncpy(a->command, command, sizeof(a->command));
@@ -954,6 +968,33 @@ static int check_delayed_sigs(void)
}
}
+#if DEBUG_SEGV_HANDLER
+static
+void handle_sigsegv(int sig, siginfo_t *info, void *ucontext)
+{
+ long ip;
+ ucontext_t *uc;
+
+ uc = ucontext;
+ ip = uc->uc_mcontext.gregs[REG_EIP];
+ fdprintf(2, "signal:%d address:0x%lx ip:0x%lx\n",
+ sig,
+ /* this is void*, but using %p would print "(null)"
+ * even for ptrs which are not exactly 0, but, say, 0x123:
+ */
+ (long)info->si_addr,
+ ip);
+ {
+ /* glibc extension */
+ void *array[50];
+ int size;
+ size = backtrace(array, 50);
+ backtrace_symbols_fd(array, size, 2);
+ }
+ for (;;) sleep(9999);
+}
+#endif
+
int init_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int init_main(int argc UNUSED_PARAM, char **argv)
{
@@ -961,6 +1002,19 @@ int init_main(int argc UNUSED_PARAM, char **argv)
return kill(1, SIGHUP);
}
+#if DEBUG_SEGV_HANDLER
+ {
+ struct sigaction sa;
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_sigaction = handle_sigsegv;
+ sa.sa_flags = SA_SIGINFO;
+ sigaction(SIGSEGV, &sa, NULL);
+ sigaction(SIGILL, &sa, NULL);
+ sigaction(SIGFPE, &sa, NULL);
+ sigaction(SIGBUS, &sa, NULL);
+ }
+#endif
+
if (!DEBUG_INIT) {
/* Expect to be invoked as init with PID=1 or be invoked as linuxrc */
if (getpid() != 1
diff --git a/libbb/Config.src b/libbb/Config.src
index aa44236..ee1b66a 100644
--- a/libbb/Config.src
+++ b/libbb/Config.src
@@ -14,9 +14,9 @@ config PASSWORD_MINLEN
help
Minimum allowable password length.
-config MD5_SIZE_VS_SPEED
+config MD5_SMALL
int "MD5: Trade bytes for speed (0:fast, 3:slow)"
- default 2
+ default 1
range 0 3
help
Trade binary size versus speed for the md5sum algorithm.
@@ -94,6 +94,13 @@ config FEATURE_EDITING_SAVEHISTORY
help
Enable history saving in shells.
+config FEATURE_EDITING_SAVE_ON_EXIT
+ bool "Save history on shell exit, not after every command"
+ default n
+ depends on FEATURE_EDITING_SAVEHISTORY
+ help
+ Save history on shell exit, not after every command.
+
config FEATURE_REVERSE_SEARCH
bool "Reverse history search"
default y
@@ -184,8 +191,8 @@ config FEATURE_SKIP_ROOTFS
However, some systems do not mount anything on /.
If you need to configure busybox for one of these systems,
- you may find useful to turn this option off to make df show
- initramfs statistic.
+ you may find it useful to turn this option off to make df show
+ initramfs statistics.
Otherwise, choose Y.
diff --git a/libbb/Kbuild.src b/libbb/Kbuild.src
index 875d024..61eec26 100644
--- a/libbb/Kbuild.src
+++ b/libbb/Kbuild.src
@@ -166,6 +166,13 @@ lib-$(CONFIG_IOSTAT) += get_cpu_count.o
lib-$(CONFIG_MPSTAT) += get_cpu_count.o
lib-$(CONFIG_POWERTOP) += get_cpu_count.o
+lib-$(CONFIG_PING) += inet_cksum.o
+lib-$(CONFIG_TRACEROUTE) += inet_cksum.o
+lib-$(CONFIG_TRACEROUTE6) += inet_cksum.o
+lib-$(CONFIG_UDHCPC) += inet_cksum.o
+lib-$(CONFIG_UDHCPC6) += inet_cksum.o
+lib-$(CONFIG_UDHCPD) += inet_cksum.o
+
# We shouldn't build xregcomp.c if we don't need it - this ensures we don't
# require regex.h to be in the include dir even if we don't need it thereby
# allowing us to build busybox even if uclibc regex support is disabled.
diff --git a/libbb/android.c b/libbb/android.c
index 7738f3f..8f2c3c4 100644
--- a/libbb/android.c
+++ b/libbb/android.c
@@ -88,6 +88,9 @@ const char *hasmntopt(const struct mntent *mnt, const char *opt)
}
/* declared in grp.h, but not necessary */
+#if !ENABLE_USE_BB_PWD_GRP
int setpwent() { return 0; }
void setgrent() {}
void endgrent() {}
+#endif
+
diff --git a/libbb/appletlib.c b/libbb/appletlib.c
index 4416528..42c1186 100644
--- a/libbb/appletlib.c
+++ b/libbb/appletlib.c
@@ -62,7 +62,7 @@ static const char usage_messages[] ALIGN1 = UNPACKED_USAGE;
#if ENABLE_FEATURE_COMPRESS_USAGE
static const char packed_usage[] ALIGN1 = { PACKED_USAGE };
-# include "archive.h"
+# include "bb_archive.h"
static const char *unpack_usage_messages(void)
{
char *outbuf = NULL;
@@ -632,7 +632,10 @@ static int busybox_main(char **argv)
"See source distribution for full notice.\n"
"\n"
"Usage: busybox [function] [arguments]...\n"
- " or: busybox --list[-full]\n"
+ " or: busybox --list"IF_FEATURE_INSTALLER("[-full]")"\n"
+ IF_FEATURE_INSTALLER(
+ " or: busybox --install [-s] [DIR]\n"
+ )
" or: function [arguments]...\n"
"\n"
"\tBusyBox is a multi-call binary that combines many common Unix\n"
@@ -672,7 +675,7 @@ static int busybox_main(char **argv)
dup2(1, 2);
while (*a) {
# if ENABLE_FEATURE_INSTALLER
- if (argv[1][6]) /* --list-path? */
+ if (argv[1][6]) /* --list-full? */
full_write2_str(install_dir[APPLET_INSTALL_LOC(i)] + 1);
# endif
full_write2_str(a);
@@ -702,7 +705,7 @@ static int busybox_main(char **argv)
* -s: make symlinks
* DIR: directory to install links to
*/
- use_symbolic_links = (argv[2] && strcmp(argv[2], "-s") == 0 && argv++);
+ use_symbolic_links = (argv[2] && strcmp(argv[2], "-s") == 0 && ++argv);
install_links(busybox, use_symbolic_links, argv[2]);
return 0;
}
diff --git a/libbb/bb_askpass.c b/libbb/bb_askpass.c
index 9a4188f..fe2b506 100644
--- a/libbb/bb_askpass.c
+++ b/libbb/bb_askpass.c
@@ -30,14 +30,23 @@ char* FAST_FUNC bb_ask(const int fd, int timeout, const char *prompt)
struct sigaction sa, oldsa;
struct termios tio, oldtio;
- tcgetattr(fd, &oldtio);
+ fputs(prompt, stdout);
+ fflush_all();
tcflush(fd, TCIFLUSH);
+
+ tcgetattr(fd, &oldtio);
tio = oldtio;
-#ifndef IUCLC
-# define IUCLC 0
-#endif
+#if 0
+ /* Switch off UPPERCASE->lowercase conversion (never used since 198x)
+ * and XON/XOFF (why we want to mess with this??)
+ */
+# ifndef IUCLC
+# define IUCLC 0
+# endif
tio.c_iflag &= ~(IUCLC|IXON|IXOFF|IXANY);
- tio.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|TOSTOP);
+#endif
+ /* Switch off echo */
+ tio.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL);
tcsetattr(fd, TCSANOW, &tio);
memset(&sa, 0, sizeof(sa));
@@ -50,9 +59,6 @@ char* FAST_FUNC bb_ask(const int fd, int timeout, const char *prompt)
alarm(timeout);
}
- fputs(prompt, stdout);
- fflush_all();
-
if (!passwd)
passwd = xmalloc(sizeof_passwd);
ret = passwd;
diff --git a/libbb/bb_strtonum.c b/libbb/bb_strtonum.c
index c66c774..949f26b 100644
--- a/libbb/bb_strtonum.c
+++ b/libbb/bb_strtonum.c
@@ -36,14 +36,14 @@ static unsigned long long ret_ERANGE(void)
return ULLONG_MAX;
}
-static unsigned long long handle_errors(unsigned long long v, char **endp, char *endptr)
+static unsigned long long handle_errors(unsigned long long v, char **endp)
{
- if (endp) *endp = endptr;
+ char next_ch = **endp;
/* errno is already set to ERANGE by strtoXXX if value overflowed */
- if (endptr[0]) {
+ if (next_ch) {
/* "1234abcg" or out-of-range? */
- if (isalnum(endptr[0]) || errno)
+ if (isalnum(next_ch) || errno)
return ret_ERANGE();
/* good number, just suspicious terminator */
errno = EINVAL;
@@ -57,30 +57,37 @@ unsigned long long FAST_FUNC bb_strtoull(const char *arg, char **endp, int base)
unsigned long long v;
char *endptr;
+ if (!endp) endp = &endptr;
+ *endp = (char*) arg;
+
/* strtoul(" -4200000000") returns 94967296, errno 0 (!) */
/* I don't think that this is right. Preventing this... */
if (!isalnum(arg[0])) return ret_ERANGE();
/* not 100% correct for lib func, but convenient for the caller */
errno = 0;
- v = strtoull(arg, &endptr, base);
- return handle_errors(v, endp, endptr);
+ v = strtoull(arg, endp, base);
+ return handle_errors(v, endp);
}
long long FAST_FUNC bb_strtoll(const char *arg, char **endp, int base)
{
unsigned long long v;
char *endptr;
+ char first;
+
+ if (!endp) endp = &endptr;
+ *endp = (char*) arg;
/* Check for the weird "feature":
* a "-" string is apparently a valid "number" for strto[u]l[l]!
* It returns zero and errno is 0! :( */
- char first = (arg[0] != '-' ? arg[0] : arg[1]);
+ first = (arg[0] != '-' ? arg[0] : arg[1]);
if (!isalnum(first)) return ret_ERANGE();
errno = 0;
- v = strtoll(arg, &endptr, base);
- return handle_errors(v, endp, endptr);
+ v = strtoll(arg, endp, base);
+ return handle_errors(v, endp);
}
#if ULONG_MAX != ULLONG_MAX
@@ -89,23 +96,30 @@ unsigned long FAST_FUNC bb_strtoul(const char *arg, char **endp, int base)
unsigned long v;
char *endptr;
+ if (!endp) endp = &endptr;
+ *endp = (char*) arg;
+
if (!isalnum(arg[0])) return ret_ERANGE();
errno = 0;
- v = strtoul(arg, &endptr, base);
- return handle_errors(v, endp, endptr);
+ v = strtoul(arg, endp, base);
+ return handle_errors(v, endp);
}
long FAST_FUNC bb_strtol(const char *arg, char **endp, int base)
{
long v;
char *endptr;
+ char first;
- char first = (arg[0] != '-' ? arg[0] : arg[1]);
+ if (!endp) endp = &endptr;
+ *endp = (char*) arg;
+
+ first = (arg[0] != '-' ? arg[0] : arg[1]);
if (!isalnum(first)) return ret_ERANGE();
errno = 0;
- v = strtol(arg, &endptr, base);
- return handle_errors(v, endp, endptr);
+ v = strtol(arg, endp, base);
+ return handle_errors(v, endp);
}
#endif
@@ -115,25 +129,32 @@ unsigned FAST_FUNC bb_strtou(const char *arg, char **endp, int base)
unsigned long v;
char *endptr;
+ if (!endp) endp = &endptr;
+ *endp = (char*) arg;
+
if (!isalnum(arg[0])) return ret_ERANGE();
errno = 0;
- v = strtoul(arg, &endptr, base);
+ v = strtoul(arg, endp, base);
if (v > UINT_MAX) return ret_ERANGE();
- return handle_errors(v, endp, endptr);
+ return handle_errors(v, endp);
}
int FAST_FUNC bb_strtoi(const char *arg, char **endp, int base)
{
long v;
char *endptr;
+ char first;
+
+ if (!endp) endp = &endptr;
+ *endp = (char*) arg;
- char first = (arg[0] != '-' ? arg[0] : arg[1]);
+ first = (arg[0] != '-' ? arg[0] : arg[1]);
if (!isalnum(first)) return ret_ERANGE();
errno = 0;
- v = strtol(arg, &endptr, base);
+ v = strtol(arg, endp, base);
if (v > INT_MAX) return ret_ERANGE();
if (v < INT_MIN) return ret_ERANGE();
- return handle_errors(v, endp, endptr);
+ return handle_errors(v, endp);
}
#endif
diff --git a/libbb/dump.c b/libbb/dump.c
index ba4af99..91efe41 100644
--- a/libbb/dump.c
+++ b/libbb/dump.c
@@ -71,7 +71,8 @@ static NOINLINE int bb_dump_size(FS *fs)
* skip any special chars -- save precision in
* case it's a %s format.
*/
- while (strchr(index_str + 1, *++fmt));
+ while (strchr(index_str + 1, *++fmt))
+ continue;
if (*fmt == '.' && isdigit(*++fmt)) {
prec = atoi(fmt);
while (isdigit(*++fmt))
@@ -99,8 +100,8 @@ static NOINLINE int bb_dump_size(FS *fs)
static NOINLINE void rewrite(priv_dumper_t *dumper, FS *fs)
{
enum { NOTOKAY, USEBCNT, USEPREC } sokay;
- PR *pr;
FU *fu;
+ PR *pr;
char *p1, *p2, *p3;
char savech, *fmtp;
const char *byte_count_str;
@@ -292,16 +293,18 @@ static NOINLINE void rewrite(priv_dumper_t *dumper, FS *fs)
* interprets any data at all, and has no iteration count,
* repeat it as necessary.
*
- * if, rep count is greater than 1, no trailing whitespace
+ * if rep count is greater than 1, no trailing whitespace
* gets output from the last iteration of the format unit.
*/
for (fu = fs->nextfu; fu; fu = fu->nextfu) {
- if (!fu->nextfu && fs->bcnt < dumper->blocksize
- && !(fu->flags & F_SETREP) && fu->bcnt
+ if (!fu->nextfu
+ && fs->bcnt < dumper->blocksize
+ && !(fu->flags & F_SETREP)
+ && fu->bcnt
) {
fu->reps += (dumper->blocksize - fs->bcnt) / fu->bcnt;
}
- if (fu->reps > 1) {
+ if (fu->reps > 1 && fu->nextpr) {
for (pr = fu->nextpr;; pr = pr->nextpr)
if (!pr->nextpr)
break;
@@ -721,7 +724,7 @@ void FAST_FUNC bb_dump_add(dumper_t* pub_dumper, const char *fmt)
p = fmt;
for (;;) {
p = skip_whitespace(p);
- if (!*p) {
+ if (*p == '\0') {
break;
}
@@ -749,7 +752,7 @@ void FAST_FUNC bb_dump_add(dumper_t* pub_dumper, const char *fmt)
/* skip slash and trailing white space */
if (*p == '/') {
- p = skip_whitespace(++p);
+ p = skip_whitespace(p + 1);
}
/* byte count */
@@ -763,7 +766,7 @@ void FAST_FUNC bb_dump_add(dumper_t* pub_dumper, const char *fmt)
}
tfu->bcnt = atoi(savep);
/* skip trailing white space */
- p = skip_whitespace(++p);
+ p = skip_whitespace(p + 1);
}
/* format */
@@ -771,7 +774,7 @@ void FAST_FUNC bb_dump_add(dumper_t* pub_dumper, const char *fmt)
bb_error_msg_and_die("bad format {%s}", fmt);
}
for (savep = ++p; *p != '"';) {
- if (*p++ == 0) {
+ if (*p++ == '\0') {
bb_error_msg_and_die("bad format {%s}", fmt);
}
}
@@ -782,7 +785,7 @@ void FAST_FUNC bb_dump_add(dumper_t* pub_dumper, const char *fmt)
/* alphabetic escape sequences have to be done in place */
for (p2 = p1;; ++p1, ++p2) {
- if (!*p1) {
+ if (*p1 == '\0') {
*p2 = *p1;
break;
}
diff --git a/libbb/find_mount_point.c b/libbb/find_mount_point.c
index 56637ad..9676b5f 100644
--- a/libbb/find_mount_point.c
+++ b/libbb/find_mount_point.c
@@ -30,7 +30,8 @@ struct mntent* FAST_FUNC find_mount_point(const char *name, int subdir_too)
devno_of_name = s.st_dev;
block_dev = 0;
- if (S_ISBLK(s.st_mode)) {
+ /* Why S_ISCHR? - UBI volumes use char devices, not block */
+ if (S_ISBLK(s.st_mode) || S_ISCHR(s.st_mode)) {
devno_of_name = s.st_rdev;
block_dev = 1;
}
diff --git a/libbb/hash_md5_sha.c b/libbb/hash_md5_sha.c
index b87d1dd..a313c2a 100644
--- a/libbb/hash_md5_sha.c
+++ b/libbb/hash_md5_sha.c
@@ -104,12 +104,12 @@ static void FAST_FUNC common64_end(md5_ctx_t *ctx, int swap_needed)
*/
/* 0: fastest, 3: smallest */
-#if CONFIG_MD5_SIZE_VS_SPEED < 0
-# define MD5_SIZE_VS_SPEED 0
-#elif CONFIG_MD5_SIZE_VS_SPEED > 3
-# define MD5_SIZE_VS_SPEED 3
+#if CONFIG_MD5_SMALL < 0
+# define MD5_SMALL 0
+#elif CONFIG_MD5_SMALL > 3
+# define MD5_SMALL 3
#else
-# define MD5_SIZE_VS_SPEED CONFIG_MD5_SIZE_VS_SPEED
+# define MD5_SMALL CONFIG_MD5_SMALL
#endif
/* These are the four functions used in the four steps of the MD5 algorithm
@@ -129,7 +129,7 @@ static void FAST_FUNC common64_end(md5_ctx_t *ctx, int swap_needed)
/* Hash a single block, 64 bytes long and 4-byte aligned */
static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
{
-#if MD5_SIZE_VS_SPEED > 0
+#if MD5_SMALL > 0
/* Before we start, one word to the strange constants.
They are defined in RFC 1321 as
T[i] = (int)(4294967296.0 * fabs(sin(i))), i=1..64
@@ -157,7 +157,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
};
static const char P_array[] ALIGN1 = {
-# if MD5_SIZE_VS_SPEED > 1
+# if MD5_SMALL > 1
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 1 */
# endif
1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, /* 2 */
@@ -171,7 +171,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
uint32_t C = ctx->hash[2];
uint32_t D = ctx->hash[3];
-#if MD5_SIZE_VS_SPEED >= 2 /* 2 or 3 */
+#if MD5_SMALL >= 2 /* 2 or 3 */
static const char S_array[] ALIGN1 = {
7, 12, 17, 22,
@@ -190,7 +190,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
words[i] = SWAP_LE32(words[i]);
# endif
-# if MD5_SIZE_VS_SPEED == 3
+# if MD5_SMALL == 3
pc = C_array;
pp = P_array;
ps = S_array - 4;
@@ -220,7 +220,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
C = B;
B = temp;
}
-# else /* MD5_SIZE_VS_SPEED == 2 */
+# else /* MD5_SMALL == 2 */
pc = C_array;
pp = P_array;
ps = S_array;
@@ -271,13 +271,13 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
ctx->hash[2] += C;
ctx->hash[3] += D;
-#else /* MD5_SIZE_VS_SPEED == 0 or 1 */
+#else /* MD5_SMALL == 0 or 1 */
uint32_t A_save = A;
uint32_t B_save = B;
uint32_t C_save = C;
uint32_t D_save = D;
-# if MD5_SIZE_VS_SPEED == 1
+# if MD5_SMALL == 1
const uint32_t *pc;
const char *pp;
int i;
@@ -299,7 +299,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
} while (0)
/* Round 1 */
-# if MD5_SIZE_VS_SPEED == 1
+# if MD5_SMALL == 1
pc = C_array;
for (i = 0; i < 4; i++) {
OP(A, B, C, D, 7, *pc++);
@@ -339,7 +339,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
} while (0)
/* Round 2 */
-# if MD5_SIZE_VS_SPEED == 1
+# if MD5_SMALL == 1
pp = P_array;
for (i = 0; i < 4; i++) {
OP(FG, A, B, C, D, (int) (*pp++), 5, *pc++);
@@ -367,7 +367,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
# endif
/* Round 3 */
-# if MD5_SIZE_VS_SPEED == 1
+# if MD5_SMALL == 1
for (i = 0; i < 4; i++) {
OP(FH, A, B, C, D, (int) (*pp++), 4, *pc++);
OP(FH, D, A, B, C, (int) (*pp++), 11, *pc++);
@@ -394,7 +394,7 @@ static void FAST_FUNC md5_process_block64(md5_ctx_t *ctx)
# endif
/* Round 4 */
-# if MD5_SIZE_VS_SPEED == 1
+# if MD5_SMALL == 1
for (i = 0; i < 4; i++) {
OP(FI, A, B, C, D, (int) (*pp++), 6, *pc++);
OP(FI, D, A, B, C, (int) (*pp++), 10, *pc++);
diff --git a/libbb/hash_md5prime.c b/libbb/hash_md5prime.c
index 7986f4d..e089a15 100644
--- a/libbb/hash_md5prime.c
+++ b/libbb/hash_md5prime.c
@@ -59,7 +59,7 @@
* Completely removed static PADDING array.
*
* Reintroduced the loop unrolling in md5_transform and added the
- * MD5_SIZE_VS_SPEED option for configurability. Define below as:
+ * MD5_SMALL option for configurability. Define below as:
* 0 fully unrolled loops
* 1 partially unrolled (4 ops per loop)
* 2 no unrolling -- introduces the need to swap 4 variables (slow)
@@ -75,12 +75,12 @@
#include "libbb.h"
/* 1: fastest, 3: smallest */
-#if CONFIG_MD5_SIZE_VS_SPEED < 1
-# define MD5_SIZE_VS_SPEED 1
-#elif CONFIG_MD5_SIZE_VS_SPEED > 3
-# define MD5_SIZE_VS_SPEED 3
+#if CONFIG_MD5_SMALL < 1
+# define MD5_SMALL 1
+#elif CONFIG_MD5_SMALL > 3
+# define MD5_SMALL 3
#else
-# define MD5_SIZE_VS_SPEED CONFIG_MD5_SIZE_VS_SPEED
+# define MD5_SMALL CONFIG_MD5_SMALL
#endif
#if BB_LITTLE_ENDIAN
@@ -152,7 +152,7 @@ memcpy32_le2cpu(uint32_t *output, const unsigned char *input, unsigned len)
static void md5_transform(uint32_t state[4], const unsigned char block[64])
{
uint32_t a, b, c, d, x[16];
-#if MD5_SIZE_VS_SPEED > 1
+#if MD5_SMALL > 1
uint32_t temp;
const unsigned char *ps;
@@ -162,9 +162,9 @@ static void md5_transform(uint32_t state[4], const unsigned char block[64])
4, 11, 16, 23,
6, 10, 15, 21
};
-#endif /* MD5_SIZE_VS_SPEED > 1 */
+#endif /* MD5_SMALL > 1 */
-#if MD5_SIZE_VS_SPEED > 0
+#if MD5_SMALL > 0
const uint32_t *pc;
const unsigned char *pp;
int i;
@@ -198,7 +198,7 @@ static void md5_transform(uint32_t state[4], const unsigned char block[64])
0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9 /* 4 */
};
-#endif /* MD5_SIZE_VS_SPEED > 0 */
+#endif /* MD5_SMALL > 0 */
memcpy32_le2cpu(x, block, 64);
@@ -207,7 +207,7 @@ static void md5_transform(uint32_t state[4], const unsigned char block[64])
c = state[2];
d = state[3];
-#if MD5_SIZE_VS_SPEED > 2
+#if MD5_SMALL > 2
pc = C;
pp = P;
ps = S - 4;
@@ -233,7 +233,7 @@ static void md5_transform(uint32_t state[4], const unsigned char block[64])
temp += b;
a = d; d = c; c = b; b = temp;
}
-#elif MD5_SIZE_VS_SPEED > 1
+#elif MD5_SMALL > 1
pc = C;
pp = P;
ps = S;
@@ -260,7 +260,7 @@ static void md5_transform(uint32_t state[4], const unsigned char block[64])
II(a, b, c, d, x[*pp], ps[i & 0x3], *pc); pp++; pc++;
temp = d; d = c; c = b; b = a; a = temp;
}
-#elif MD5_SIZE_VS_SPEED > 0
+#elif MD5_SMALL > 0
pc = C;
pp = P;
/* Round 1 */
diff --git a/libbb/inet_cksum.c b/libbb/inet_cksum.c
new file mode 100644
index 0000000..3d5dc3a
--- a/dev/null
+++ b/libbb/inet_cksum.c
@@ -0,0 +1,36 @@
+/*
+ * Checksum routine for Internet Protocol family headers (C Version)
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+
+#include "libbb.h"
+
+uint16_t FAST_FUNC inet_cksum(uint16_t *addr, int nleft)
+{
+ /*
+ * Our algorithm is simple, using a 32 bit accumulator,
+ * we add sequential 16 bit words to it, and at the end, fold
+ * back all the carry bits from the top 16 bits into the lower
+ * 16 bits.
+ */
+ unsigned sum = 0;
+ while (nleft > 1) {
+ sum += *addr++;
+ nleft -= 2;
+ }
+
+ /* Mop up an odd byte, if necessary */
+ if (nleft == 1) {
+ if (BB_LITTLE_ENDIAN)
+ sum += *(uint8_t*)addr;
+ else
+ sum += *(uint8_t*)addr << 8;
+ }
+
+ /* Add back carry outs from top 16 bits to low 16 bits */
+ sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
+ sum += (sum >> 16); /* add carry */
+
+ return (uint16_t)~sum;
+}
diff --git a/libbb/inet_common.c b/libbb/inet_common.c
index 603aa05..7208db9 100644
--- a/libbb/inet_common.c
+++ b/libbb/inet_common.c
@@ -174,7 +174,6 @@ int FAST_FUNC INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
bb_error_msg("getaddrinfo: %s: %d", name, s);
return -1;
}
- //memcpy(sin6, ai->ai_addr, sizeof(struct sockaddr_in6));
memcpy(sin6, ai->ai_addr, sizeof(*sin6));
if (ai)
freeaddrinfo(ai);
diff --git a/libbb/isdirectory.c b/libbb/isdirectory.c
index 9861be6..ba6c52c 100644
--- a/libbb/isdirectory.c
+++ b/libbb/isdirectory.c
@@ -15,22 +15,17 @@
* Return TRUE if fileName is a directory.
* Nonexistent files return FALSE.
*/
-int FAST_FUNC is_directory(const char *fileName, int followLinks, struct stat *statBuf)
+int FAST_FUNC is_directory(const char *fileName, int followLinks)
{
int status;
- struct stat astatBuf;
-
- if (statBuf == NULL) {
- /* use auto stack buffer */
- statBuf = &astatBuf;
- }
+ struct stat statBuf;
if (followLinks)
- status = stat(fileName, statBuf);
+ status = stat(fileName, &statBuf);
else
- status = lstat(fileName, statBuf);
+ status = lstat(fileName, &statBuf);
- status = (status == 0 && S_ISDIR(statBuf->st_mode));
+ status = (status == 0 && S_ISDIR(statBuf.st_mode));
return status;
}
diff --git a/libbb/lineedit.c b/libbb/lineedit.c
index d86c22a..db84167 100644
--- a/libbb/lineedit.c
+++ b/libbb/lineedit.c
@@ -156,13 +156,6 @@ struct lineedit_statics {
#if ENABLE_FEATURE_EDITING_ASK_TERMINAL
smallint sent_ESC_br6n;
#endif
-
- /* Formerly these were big buffers on stack: */
-#if ENABLE_FEATURE_TAB_COMPLETION
- char input_tab__matchBuf[MAX_LINELEN];
- int16_t find_match__int_buf[MAX_LINELEN + 1]; /* need to have 9 bits at least */
- int16_t find_match__pos_buf[MAX_LINELEN + 1];
-#endif
};
/* See lineedit_ptr_hack.c */
@@ -1358,7 +1351,9 @@ static void load_history(line_input_t *st_parm)
/* fill temp_h[], retaining only last MAX_HISTORY lines */
memset(temp_h, 0, sizeof(temp_h));
- st_parm->cnt_history_in_file = idx = 0;
+ idx = 0;
+ if (!ENABLE_FEATURE_EDITING_SAVE_ON_EXIT)
+ st_parm->cnt_history_in_file = 0;
while ((line = xmalloc_fgetline(fp)) != NULL) {
if (line[0] == '\0') {
free(line);
@@ -1366,7 +1361,8 @@ static void load_history(line_input_t *st_parm)
}
free(temp_h[idx]);
temp_h[idx] = line;
- st_parm->cnt_history_in_file++;
+ if (!ENABLE_FEATURE_EDITING_SAVE_ON_EXIT)
+ st_parm->cnt_history_in_file++;
idx++;
if (idx == st_parm->max_history)
idx = 0;
@@ -1396,15 +1392,62 @@ static void load_history(line_input_t *st_parm)
st_parm->history[i++] = line;
}
st_parm->cnt_history = i;
+ if (ENABLE_FEATURE_EDITING_SAVE_ON_EXIT)
+ st_parm->cnt_history_in_file = i;
}
}
-/* state->flags is already checked to be nonzero */
+# if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
+void save_history(line_input_t *st)
+{
+ FILE *fp;
+
+ if (!st->hist_file)
+ return;
+ if (st->cnt_history <= st->cnt_history_in_file)
+ return;
+
+ fp = fopen(st->hist_file, "a");
+ if (fp) {
+ int i, fd;
+ char *new_name;
+ line_input_t *st_temp;
+
+ for (i = st->cnt_history_in_file; i < st->cnt_history; i++)
+ fprintf(fp, "%s\n", st->history[i]);
+ fclose(fp);
+
+ /* we may have concurrently written entries from others.
+ * load them */
+ st_temp = new_line_input_t(st->flags);
+ st_temp->hist_file = st->hist_file;
+ st_temp->max_history = st->max_history;
+ load_history(st_temp);
+
+ /* write out temp file and replace hist_file atomically */
+ new_name = xasprintf("%s.%u.new", st->hist_file, (int) getpid());
+ fd = open(new_name, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+ if (fd >= 0) {
+ fp = xfdopen_for_write(fd);
+ for (i = 0; i < st_temp->cnt_history; i++)
+ fprintf(fp, "%s\n", st_temp->history[i]);
+ fclose(fp);
+ if (rename(new_name, st->hist_file) == 0)
+ st->cnt_history_in_file = st_temp->cnt_history;
+ }
+ free(new_name);
+ free_line_input_t(st_temp);
+ }
+}
+# else
static void save_history(char *str)
{
int fd;
int len, len2;
+ if (!state->hist_file)
+ return;
+
fd = open(state->hist_file, O_WRONLY | O_CREAT | O_APPEND, 0600);
if (fd < 0)
return;
@@ -1448,6 +1491,7 @@ static void save_history(char *str)
free_line_input_t(st_temp);
}
}
+# endif
# else
# define load_history(a) ((void)0)
# define save_history(a) ((void)0)
@@ -1476,15 +1520,18 @@ static void remember_in_history(char *str)
for (i = 0; i < state->max_history-1; i++)
state->history[i] = state->history[i+1];
/* i == state->max_history-1 */
+# if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
+ if (state->cnt_history_in_file)
+ state->cnt_history_in_file--;
+# endif
}
/* i <= state->max_history-1 */
state->history[i++] = xstrdup(str);
/* i <= state->max_history */
state->cur_history = i;
state->cnt_history = i;
-# if MAX_HISTORY > 0 && ENABLE_FEATURE_EDITING_SAVEHISTORY
- if ((state->flags & SAVE_HISTORY) && state->hist_file)
- save_history(str);
+# if ENABLE_FEATURE_EDITING_SAVEHISTORY && !ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
+ save_history(str);
# endif
IF_FEATURE_EDITING_FANCY_PROMPT(num_ok_lines++;)
}
@@ -2139,7 +2186,7 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
state = st ? st : (line_input_t*) &const_int_0;
#if MAX_HISTORY > 0
# if ENABLE_FEATURE_EDITING_SAVEHISTORY
- if ((state->flags & SAVE_HISTORY) && state->hist_file)
+ if (state->hist_file)
if (state->cnt_history == 0)
load_history(state);
# endif
@@ -2159,14 +2206,17 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
#define command command_must_not_be_used
new_settings = initial_settings;
- new_settings.c_lflag &= ~ICANON; /* unbuffered input */
- /* Turn off echoing and CTRL-C, so we can trap it */
- new_settings.c_lflag &= ~(ECHO | ECHONL | ISIG);
- /* Hmm, in linux c_cc[] is not parsed if ICANON is off */
+ /* ~ICANON: unbuffered input (most c_cc[] are disabled, VMIN/VTIME are enabled) */
+ /* ~ECHO, ~ECHONL: turn off echoing, including newline echoing */
+ /* ~ISIG: turn off INTR (ctrl-C), QUIT, SUSP */
+ new_settings.c_lflag &= ~(ICANON | ECHO | ECHONL | ISIG);
+ /* reads would block only if < 1 char is available */
new_settings.c_cc[VMIN] = 1;
+ /* no timeout (reads block forever) */
new_settings.c_cc[VTIME] = 0;
- /* Turn off CTRL-C, so we can trap it */
- new_settings.c_cc[VINTR] = _POSIX_VDISABLE;
+ /* Should be not needed if ISIG is off: */
+ /* Turn off CTRL-C */
+ /* new_settings.c_cc[VINTR] = _POSIX_VDISABLE; */
tcsetattr_stdin_TCSANOW(&new_settings);
#if ENABLE_USERNAME_OR_HOMEDIR
@@ -2459,6 +2509,44 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
vi_cmdmode = 1;
input_backward(1);
}
+ /* Handle a few ESC-<key> combinations the same way
+ * standard readline bindings (IOW: bash) do.
+ * Often, Alt-<key> generates ESC-<key>.
+ */
+ ic = lineedit_read_key(read_key_buffer, timeout);
+ switch (ic) {
+ //case KEYCODE_LEFT: - bash doesn't do this
+ case 'b':
+ ctrl_left();
+ break;
+ //case KEYCODE_RIGHT: - bash doesn't do this
+ case 'f':
+ ctrl_right();
+ break;
+ //case KEYCODE_DELETE: - bash doesn't do this
+ case 'd': /* Alt-D */
+ {
+ /* Delete word forward */
+ int nc, sc = cursor;
+ ctrl_right();
+ nc = cursor;
+ input_backward(cursor - sc);
+ while (--nc >= cursor)
+ input_delete(1);
+ break;
+ }
+ case '\b': /* Alt-Backspace(?) */
+ case '\x7f': /* Alt-Backspace(?) */
+ //case 'w': - bash doesn't do this
+ {
+ /* Delete word backward */
+ int sc = cursor;
+ ctrl_left();
+ while (sc-- > cursor)
+ input_delete(1);
+ break;
+ }
+ }
break;
#endif /* FEATURE_COMMAND_EDITING_VI */
@@ -2487,9 +2575,11 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman
input_backward(1);
break;
case KEYCODE_CTRL_LEFT:
+ case KEYCODE_ALT_LEFT: /* bash doesn't do it */
ctrl_left();
break;
case KEYCODE_CTRL_RIGHT:
+ case KEYCODE_ALT_RIGHT: /* bash doesn't do it */
ctrl_right();
break;
case KEYCODE_HOME:
diff --git a/libbb/loop.c b/libbb/loop.c
index b798932..b3a5208 100644
--- a/libbb/loop.c
+++ b/libbb/loop.c
@@ -84,7 +84,7 @@ int FAST_FUNC del_loop(const char *device)
search will re-use an existing loop device already bound to that
file/offset if it finds one.
*/
-int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offset)
+int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offset, int ro)
{
char dev[LOOP_NAMESIZE];
char *try;
@@ -93,11 +93,13 @@ int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offse
int i, dfd, ffd, mode, rc = -1;
/* Open the file. Barf if this doesn't work. */
- mode = O_RDWR;
+ mode = ro ? O_RDONLY : O_RDWR;
ffd = open(file, mode);
if (ffd < 0) {
- mode = O_RDONLY;
- ffd = open(file, mode);
+ if (mode != O_RDONLY) {
+ mode = O_RDONLY;
+ ffd = open(file, mode);
+ }
if (ffd < 0)
return -errno;
}
diff --git a/libbb/parse_config.c b/libbb/parse_config.c
index cf5ba4d..1590d9a 100644
--- a/libbb/parse_config.c
+++ b/libbb/parse_config.c
@@ -204,7 +204,7 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const
line += strcspn(line, delims[0] ? delims : delims + 1);
} else {
/* Combining, find comment char if any */
- line = strchrnul(line, delims[0]);
+ line = strchrnul(line, PARSE_EOL_COMMENTS ? delims[0] : '\0');
/* Trim any extra delimiters from the end */
if (flags & PARSE_TRIM) {
diff --git a/libbb/percent_decode.c b/libbb/percent_decode.c
new file mode 100644
index 0000000..9a9d80c
--- a/dev/null
+++ b/libbb/percent_decode.c
@@ -0,0 +1,69 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
+ */
+
+//kbuild:lib-y += percent_decode.o
+
+#include "libbb.h"
+
+static unsigned hex_to_bin(unsigned char c)
+{
+ unsigned v;
+
+ v = c - '0';
+ if (v <= 9)
+ return v;
+ /* c | 0x20: letters to lower case, non-letters
+ * to (potentially different) non-letters */
+ v = (unsigned)(c | 0x20) - 'a';
+ if (v <= 5)
+ return v + 10;
+ return ~0;
+/* For testing:
+void t(char c) { printf("'%c'(%u) %u\n", c, c, hex_to_bin(c)); }
+int main() { t(0x10); t(0x20); t('0'); t('9'); t('A'); t('F'); t('a'); t('f');
+t('0'-1); t('9'+1); t('A'-1); t('F'+1); t('a'-1); t('f'+1); return 0; }
+*/
+}
+
+char* FAST_FUNC percent_decode_in_place(char *str, int strict)
+{
+ /* note that decoded string is always shorter than original */
+ char *src = str;
+ char *dst = str;
+ char c;
+
+ while ((c = *src++) != '\0') {
+ unsigned v;
+
+ if (!strict && c == '+') {
+ *dst++ = ' ';
+ continue;
+ }
+ if (c != '%') {
+ *dst++ = c;
+ continue;
+ }
+ v = hex_to_bin(src[0]);
+ if (v > 15) {
+ bad_hex:
+ if (strict)
+ return NULL;
+ *dst++ = '%';
+ continue;
+ }
+ v = (v * 16) | hex_to_bin(src[1]);
+ if (v > 255)
+ goto bad_hex;
+ if (strict && (v == '/' || v == '\0')) {
+ /* caller takes it as indication of invalid
+ * (dangerous wrt exploits) chars */
+ return str + 1;
+ }
+ *dst++ = v;
+ src += 2;
+ }
+ *dst = '\0';
+ return str;
+}
diff --git a/libbb/procps.c b/libbb/procps.c
index e15ddd1..40587db 100644
--- a/libbb/procps.c
+++ b/libbb/procps.c
@@ -127,10 +127,11 @@ static unsigned long fast_strtoul_16(char **endptr)
char *str = *endptr;
unsigned long n = 0;
- while ((c = *str++) != ' ') {
+ /* Need to stop on both ' ' and '\n' */
+ while ((c = *str++) > ' ') {
c = ((c|0x20) - '0');
if (c > 9)
- // c = c + '0' - 'a' + 10:
+ /* c = c + '0' - 'a' + 10: */
c = c - ('a' - '0' - 10);
n = n*16 + c;
}
@@ -143,11 +144,12 @@ static unsigned long fast_strtoul_16(char **endptr)
/* We cut a lot of corners here for speed */
static unsigned long fast_strtoul_10(char **endptr)
{
- char c;
+ unsigned char c;
char *str = *endptr;
unsigned long n = *str - '0';
- while ((c = *++str) != ' ')
+ /* Need to stop on both ' ' and '\n' */
+ while ((c = *++str) > ' ')
n = n*10 + (c - '0');
*endptr = str + 1; /* We skip trailing space! */
@@ -198,7 +200,7 @@ int FAST_FUNC procps_read_smaps(pid_t pid, struct smaprec *total,
memset(&currec, 0, sizeof(currec));
while (fgets(buf, PROCPS_BUFSIZE, file)) {
// Each mapping datum has this form:
- // f7d29000-f7d39000 rw-s ADR M:m OFS FILE
+ // f7d29000-f7d39000 rw-s FILEOFS M:m INODE FILENAME
// Size: nnn kB
// Rss: nnn kB
// .....
@@ -223,7 +225,7 @@ int FAST_FUNC procps_read_smaps(pid_t pid, struct smaprec *total,
tp = strchr(buf, '-');
if (tp) {
// We reached next mapping - the line of this form:
- // f7d29000-f7d39000 rw-s ADR M:m OFS FILE
+ // f7d29000-f7d39000 rw-s FILEOFS M:m INODE FILENAME
if (cb) {
/* If we have a previous record, there's nothing more
@@ -242,7 +244,7 @@ int FAST_FUNC procps_read_smaps(pid_t pid, struct smaprec *total,
strncpy(currec.smap_mode, tp, sizeof(currec.smap_mode)-1);
- // skipping "rw-s ADR M:m OFS "
+ // skipping "rw-s FILEOFS M:m INODE "
tp = skip_whitespace(skip_fields(tp, 4));
// filter out /dev/something (something != zero)
if (strncmp(tp, "/dev/", 5) != 0 || strcmp(tp, "/dev/zero\n") == 0) {
diff --git a/libbb/read_key.c b/libbb/read_key.c
index 5dcd19c..8d72d2a 100644
--- a/libbb/read_key.c
+++ b/libbb/read_key.c
@@ -40,13 +40,14 @@ int64_t FAST_FUNC read_key(int fd, char *buffer, int timeout)
'[','C' |0x80,KEYCODE_RIGHT ,
'[','D' |0x80,KEYCODE_LEFT ,
/* ESC [ 1 ; 2 x, where x = A/B/C/D: Shift-<arrow> */
- /* ESC [ 1 ; 3 x, where x = A/B/C/D: Alt-<arrow> */
+ /* ESC [ 1 ; 3 x, where x = A/B/C/D: Alt-<arrow> - implemented below */
/* ESC [ 1 ; 4 x, where x = A/B/C/D: Alt-Shift-<arrow> */
/* ESC [ 1 ; 5 x, where x = A/B/C/D: Ctrl-<arrow> - implemented below */
/* ESC [ 1 ; 6 x, where x = A/B/C/D: Ctrl-Shift-<arrow> */
'[','H' |0x80,KEYCODE_HOME , /* xterm */
- /* [ESC] ESC [ [2] H - [Alt-][Shift-]Home */
'[','F' |0x80,KEYCODE_END , /* xterm */
+ /* [ESC] ESC [ [2] H - [Alt-][Shift-]Home (End similarly?) */
+ /* '[','Z' |0x80,KEYCODE_SHIFT_TAB, */
'[','1','~' |0x80,KEYCODE_HOME , /* vt100? linux vt? or what? */
'[','2','~' |0x80,KEYCODE_INSERT ,
/* ESC [ 2 ; 3 ~ - Alt-Insert */
@@ -86,8 +87,12 @@ int64_t FAST_FUNC read_key(int fd, char *buffer, int timeout)
/* '[','1',';','5','B' |0x80,KEYCODE_CTRL_DOWN , - unused */
'[','1',';','5','C' |0x80,KEYCODE_CTRL_RIGHT,
'[','1',';','5','D' |0x80,KEYCODE_CTRL_LEFT ,
+ /* '[','1',';','3','A' |0x80,KEYCODE_ALT_UP , - unused */
+ /* '[','1',';','3','B' |0x80,KEYCODE_ALT_DOWN , - unused */
+ '[','1',';','3','C' |0x80,KEYCODE_ALT_RIGHT,
+ '[','1',';','3','D' |0x80,KEYCODE_ALT_LEFT ,
+ /* '[','3',';','3','~' |0x80,KEYCODE_ALT_DELETE, - unused */
0
- /* ESC [ Z - Shift-Tab */
};
pfd.fd = fd;
diff --git a/libbb/read_printf.c b/libbb/read_printf.c
index 192f83d..5ed6e36 100644
--- a/libbb/read_printf.c
+++ b/libbb/read_printf.c
@@ -8,16 +8,6 @@
*/
#include "libbb.h"
-#define ZIPPED (ENABLE_FEATURE_SEAMLESS_LZMA \
- || ENABLE_FEATURE_SEAMLESS_BZ2 \
- || ENABLE_FEATURE_SEAMLESS_GZ \
- /* || ENABLE_FEATURE_SEAMLESS_Z */ \
-)
-
-#if ZIPPED
-# include "archive.h"
-#endif
-
/* Suppose that you are a shell. You start child processes.
* They work and eventually exit. You want to get user input.
@@ -244,132 +234,3 @@ void* FAST_FUNC xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p)
bb_perror_msg_and_die("can't read '%s'", filename);
return buf;
}
-
-/* Used by e.g. rpm which gives us a fd without filename,
- * thus we can't guess the format from filename's extension.
- */
-#if ZIPPED
-void FAST_FUNC setup_unzip_on_fd(int fd /*, int fail_if_not_detected*/)
-{
- const int fail_if_not_detected = 1;
- union {
- uint8_t b[4];
- uint16_t b16[2];
- uint32_t b32[1];
- } magic;
- int offset = -2;
-# if BB_MMU
- IF_DESKTOP(long long) int FAST_FUNC (*xformer)(int src_fd, int dst_fd);
- enum { xformer_prog = 0 };
-# else
- enum { xformer = 0 };
- const char *xformer_prog;
-# endif
-
- /* .gz and .bz2 both have 2-byte signature, and their
- * unpack_XXX_stream wants this header skipped. */
- xread(fd, magic.b16, sizeof(magic.b16[0]));
- if (ENABLE_FEATURE_SEAMLESS_GZ
- && magic.b16[0] == GZIP_MAGIC
- ) {
-# if BB_MMU
- xformer = unpack_gz_stream;
-# else
- xformer_prog = "gunzip";
-# endif
- goto found_magic;
- }
- if (ENABLE_FEATURE_SEAMLESS_BZ2
- && magic.b16[0] == BZIP2_MAGIC
- ) {
-# if BB_MMU
- xformer = unpack_bz2_stream;
-# else
- xformer_prog = "bunzip2";
-# endif
- goto found_magic;
- }
- if (ENABLE_FEATURE_SEAMLESS_XZ
- && magic.b16[0] == XZ_MAGIC1
- ) {
- offset = -6;
- xread(fd, magic.b32, sizeof(magic.b32[0]));
- if (magic.b32[0] == XZ_MAGIC2) {
-# if BB_MMU
- xformer = unpack_xz_stream;
- /* unpack_xz_stream wants fd at position 6, no need to seek */
- //xlseek(fd, offset, SEEK_CUR);
-# else
- xformer_prog = "unxz";
-# endif
- goto found_magic;
- }
- }
-
- /* No known magic seen */
- if (fail_if_not_detected)
- bb_error_msg_and_die("no gzip"
- IF_FEATURE_SEAMLESS_BZ2("/bzip2")
- IF_FEATURE_SEAMLESS_XZ("/xz")
- " magic");
- xlseek(fd, offset, SEEK_CUR);
- return;
-
- found_magic:
-# if !BB_MMU
- /* NOMMU version of open_transformer execs
- * an external unzipper that wants
- * file position at the start of the file */
- xlseek(fd, offset, SEEK_CUR);
-# endif
- open_transformer(fd, xformer, xformer_prog);
-}
-#endif /* ZIPPED */
-
-int FAST_FUNC open_zipped(const char *fname)
-{
-#if !ZIPPED
- return open(fname, O_RDONLY);
-#else
- char *sfx;
- int fd;
-
- fd = open(fname, O_RDONLY);
- if (fd < 0)
- return fd;
-
- sfx = strrchr(fname, '.');
- if (sfx) {
- sfx++;
- if (ENABLE_FEATURE_SEAMLESS_LZMA && strcmp(sfx, "lzma") == 0)
- /* .lzma has no header/signature, just trust it */
- open_transformer(fd, unpack_lzma_stream, "unlzma");
- else
- if ((ENABLE_FEATURE_SEAMLESS_GZ && strcmp(sfx, "gz") == 0)
- || (ENABLE_FEATURE_SEAMLESS_BZ2 && strcmp(sfx, "bz2") == 0)
- || (ENABLE_FEATURE_SEAMLESS_XZ && strcmp(sfx, "xz") == 0)
- ) {
- setup_unzip_on_fd(fd /*, fail_if_not_detected: 1*/);
- }
- }
-
- return fd;
-#endif
-}
-
-void* FAST_FUNC xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p)
-{
- int fd;
- char *image;
-
- fd = open_zipped(fname);
- if (fd < 0)
- return NULL;
-
- image = xmalloc_read(fd, maxsz_p);
- if (!image)
- bb_perror_msg("read error from '%s'", fname);
- close(fd);
-
- return image;
-}
diff --git a/libbb/uuencode.c b/libbb/uuencode.c
index 03e708f..f7b2484 100644
--- a/libbb/uuencode.c
+++ b/libbb/uuencode.c
@@ -10,7 +10,7 @@
#include "libbb.h"
/* Conversion table. for base 64 */
-const char bb_uuenc_tbl_base64[65 + 2] ALIGN1 = {
+const char bb_uuenc_tbl_base64[65 + 1] ALIGN1 = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
@@ -20,7 +20,7 @@ const char bb_uuenc_tbl_base64[65 + 2] ALIGN1 = {
'w', 'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/',
'=' /* termination character */,
- '\n', '\0' /* needed for uudecode.c */
+ '\0' /* needed for uudecode.c only */
};
const char bb_uuenc_tbl_std[65] ALIGN1 = {
@@ -73,23 +73,23 @@ void FAST_FUNC bb_uuencode(char *p, const void *src, int length, const char *tbl
}
/*
- * Decode base64 encoded stream.
- * Can stop on EOF, specified char, or on uuencode-style "====" line:
- * flags argument controls it.
+ * Decode base64 encoded string. Stops on '\0'.
+ *
+ * Returns: pointer to the undecoded part of source.
+ * If points to '\0', then the source was fully decoded.
+ * (*pp_dst): advanced past the last written byte.
*/
-void FAST_FUNC read_base64(FILE *src_stream, FILE *dst_stream, int flags)
+const char* FAST_FUNC decode_base64(char **pp_dst, const char *src)
{
-/* Note that EOF _can_ be passed as exit_char too */
-#define exit_char ((int)(signed char)flags)
-#define uu_style_end (flags & BASE64_FLAG_UU_STOP)
-
- int term_count = 0;
+ char *dst = *pp_dst;
+ const char *src_tail;
while (1) {
- unsigned char translated[4];
+ unsigned char six_bit[4];
int count = 0;
- /* Process one group of 4 chars */
+ /* Fetch up to four 6-bit values */
+ src_tail = src;
while (count < 4) {
char *table_ptr;
int ch;
@@ -97,49 +97,128 @@ void FAST_FUNC read_base64(FILE *src_stream, FILE *dst_stream, int flags)
/* Get next _valid_ character.
* bb_uuenc_tbl_base64[] contains this string:
* 0 1 2 3 4 5 6
- * 012345678901234567890123456789012345678901234567890123456789012345
- * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n"
+ * 01234567890123456789012345678901234567890123456789012345678901234
+ * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
*/
do {
- ch = fgetc(src_stream);
- if (ch == exit_char && count == 0)
- return;
- if (ch == EOF)
- bb_error_msg_and_die("truncated base64 input");
+ ch = *src;
+ if (ch == '\0') {
+ if (count == 0) {
+ /* Example:
+ * If we decode "QUJD <NUL>", we want
+ * to return ptr to NUL, not to ' ',
+ * because we did fully decode
+ * the string (to "ABC").
+ */
+ src_tail = src;
+ }
+ goto ret;
+ }
+ src++;
table_ptr = strchr(bb_uuenc_tbl_base64, ch);
//TODO: add BASE64_FLAG_foo to die on bad char?
-//Note that then we may need to still allow '\r' (for mail processing)
} while (!table_ptr);
/* Convert encoded character to decimal */
ch = table_ptr - bb_uuenc_tbl_base64;
- if (ch == 65 /* '\n' */) {
- /* Terminating "====" line? */
- if (uu_style_end && term_count == 4)
- return; /* yes */
- term_count = 0;
- continue;
- }
/* ch is 64 if char was '=', otherwise 0..63 */
- translated[count] = ch & 63; /* 64 -> 0 */
- if (ch == 64) {
- term_count++;
+ if (ch == 64)
break;
- }
+ six_bit[count] = ch;
count++;
- term_count = 0;
}
- /* Merge 6 bit chars to 8 bit.
+ /* Transform 6-bit values to 8-bit ones.
* count can be < 4 when we decode the tail:
- * "eQ==" -> "y", not "y NUL NUL"
+ * "eQ==" -> "y", not "y NUL NUL".
+ * Note that (count > 1) is always true,
+ * "x===" encoding is not valid:
+ * even a single zero byte encodes as "AA==".
+ * However, with current logic we come here with count == 1
+ * when we decode "==" tail.
*/
if (count > 1)
- fputc(translated[0] << 2 | translated[1] >> 4, dst_stream);
+ *dst++ = six_bit[0] << 2 | six_bit[1] >> 4;
if (count > 2)
- fputc(translated[1] << 4 | translated[2] >> 2, dst_stream);
+ *dst++ = six_bit[1] << 4 | six_bit[2] >> 2;
if (count > 3)
- fputc(translated[2] << 6 | translated[3], dst_stream);
+ *dst++ = six_bit[2] << 6 | six_bit[3];
+ /* Note that if we decode "AA==" and ate first '=',
+ * we just decoded one char (count == 2) and now we'll
+ * do the loop once more to decode second '='.
+ */
} /* while (1) */
+ ret:
+ *pp_dst = dst;
+ return src_tail;
+}
+
+/*
+ * Decode base64 encoded stream.
+ * Can stop on EOF, specified char, or on uuencode-style "====" line:
+ * flags argument controls it.
+ */
+void FAST_FUNC read_base64(FILE *src_stream, FILE *dst_stream, int flags)
+{
+/* Note that EOF _can_ be passed as exit_char too */
+#define exit_char ((int)(signed char)flags)
+#define uu_style_end (flags & BASE64_FLAG_UU_STOP)
+
+ /* uuencoded files have 61 byte lines. Use 64 byte buffer
+ * to process line at a time.
+ */
+ enum { BUFFER_SIZE = 64 };
+
+ char in_buf[BUFFER_SIZE + 2];
+ char out_buf[BUFFER_SIZE / 4 * 3 + 2];
+ char *out_tail;
+ const char *in_tail;
+ int term_seen = 0;
+ int in_count = 0;
+
+ while (1) {
+ while (in_count < BUFFER_SIZE) {
+ int ch = fgetc(src_stream);
+ if (ch == exit_char) {
+ if (in_count == 0)
+ return;
+ term_seen = 1;
+ break;
+ }
+ if (ch == EOF) {
+ term_seen = 1;
+ break;
+ }
+ /* Prevent "====" line to be split: stop if we see '\n'.
+ * We can also skip other whitespace and skirt the problem
+ * of files with NULs by stopping on any control char or space:
+ */
+ if (ch <= ' ')
+ break;
+ in_buf[in_count++] = ch;
+ }
+ in_buf[in_count] = '\0';
+
+ /* Did we encounter "====" line? */
+ if (uu_style_end && strcmp(in_buf, "====") == 0)
+ return;
+
+ out_tail = out_buf;
+ in_tail = decode_base64(&out_tail, in_buf);
+
+ fwrite(out_buf, (out_tail - out_buf), 1, dst_stream);
+
+ if (term_seen) {
+ /* Did we consume ALL characters? */
+ if (*in_tail == '\0')
+ return;
+ /* No */
+ bb_error_msg_and_die("truncated base64 input");
+ }
+
+ /* It was partial decode */
+ in_count = strlen(in_tail);
+ memmove(in_buf, in_tail, in_count);
+ }
}
diff --git a/libbb/vdprintf.c b/libbb/vdprintf.c
index feeb403..0542687 100644
--- a/libbb/vdprintf.c
+++ b/libbb/vdprintf.c
@@ -12,10 +12,10 @@
#if defined(__GLIBC__) && __GLIBC__ < 2
int FAST_FUNC vdprintf(int d, const char *format, va_list ap)
{
- char buf[BUF_SIZE];
+ char buf[8 * 1024];
int len;
- len = vsnprintf(buf, BUF_SIZE, format, ap);
+ len = vsnprintf(buf, sizeof(buf), format, ap);
return write(d, buf, len);
}
#endif
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c
index a75eafb..ed1f86f 100644
--- a/libbb/vfork_daemon_rexec.c
+++ b/libbb/vfork_daemon_rexec.c
@@ -253,11 +253,19 @@ void FAST_FUNC bb_daemonize_or_rexec(int flags, char **argv)
if (!(flags & DAEMON_ONLY_SANITIZE)) {
if (fork_or_rexec(argv))
exit(EXIT_SUCCESS); /* parent */
- /* if daemonizing, make sure we detach from stdio & ctty */
+ /* if daemonizing, detach from stdio & ctty */
setsid();
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
+ if (flags & DAEMON_DOUBLE_FORK) {
+ /* On Linux, session leader can acquire ctty
+ * unknowingly, by opening a tty.
+ * Prevent this: stop being a session leader.
+ */
+ if (fork_or_rexec(argv))
+ exit(EXIT_SUCCESS); /* parent */
+ }
}
while (fd > 2) {
close(fd--);
diff --git a/libbb/xconnect.c b/libbb/xconnect.c
index 4b7c110..1c8bb2b 100644
--- a/libbb/xconnect.c
+++ b/libbb/xconnect.c
@@ -322,26 +322,28 @@ len_and_sockaddr* FAST_FUNC xdotted2sockaddr(const char *host, int port)
return str2sockaddr(host, port, AF_UNSPEC, AI_NUMERICHOST | DIE_ON_ERROR);
}
-#undef xsocket_type
-int FAST_FUNC xsocket_type(len_and_sockaddr **lsap, IF_FEATURE_IPV6(int family,) int sock_type)
+int FAST_FUNC xsocket_type(len_and_sockaddr **lsap, int family, int sock_type)
{
- IF_NOT_FEATURE_IPV6(enum { family = AF_INET };)
len_and_sockaddr *lsa;
int fd;
int len;
-#if ENABLE_FEATURE_IPV6
if (family == AF_UNSPEC) {
+#if ENABLE_FEATURE_IPV6
fd = socket(AF_INET6, sock_type, 0);
if (fd >= 0) {
family = AF_INET6;
goto done;
}
+#endif
family = AF_INET;
}
-#endif
+
fd = xsocket(family, sock_type, 0);
+
len = sizeof(struct sockaddr_in);
+ if (family == AF_UNIX)
+ len = sizeof(struct sockaddr_un);
#if ENABLE_FEATURE_IPV6
if (family == AF_INET6) {
done:
@@ -357,7 +359,7 @@ int FAST_FUNC xsocket_type(len_and_sockaddr **lsap, IF_FEATURE_IPV6(int family,)
int FAST_FUNC xsocket_stream(len_and_sockaddr **lsap)
{
- return xsocket_type(lsap, IF_FEATURE_IPV6(AF_UNSPEC,) SOCK_STREAM);
+ return xsocket_type(lsap, AF_UNSPEC, SOCK_STREAM);
}
static int create_and_bind_or_die(const char *bindaddr, int port, int sock_type)
@@ -370,7 +372,7 @@ static int create_and_bind_or_die(const char *bindaddr, int port, int sock_type)
/* user specified bind addr dictates family */
fd = xsocket(lsa->u.sa.sa_family, sock_type, 0);
} else {
- fd = xsocket_type(&lsa, IF_FEATURE_IPV6(AF_UNSPEC,) sock_type);
+ fd = xsocket_type(&lsa, AF_UNSPEC, sock_type);
set_nport(&lsa->u.sa, htons(port));
}
setsockopt_reuseaddr(fd);
diff --git a/libbb/xfuncs_printf.c b/libbb/xfuncs_printf.c
index a42424d..b771ba5 100644
--- a/libbb/xfuncs_printf.c
+++ b/libbb/xfuncs_printf.c
@@ -362,6 +362,7 @@ void FAST_FUNC xchroot(const char *path)
{
if (chroot(path))
bb_perror_msg_and_die("can't change root directory to %s", path);
+ xchdir("/");
}
// Print a warning message if opendir() fails, but don't die.
diff --git a/libpwdgrp/pwd_grp.c b/libpwdgrp/pwd_grp.c
index 2eb9d9d..a6659b2 100644
--- a/libpwdgrp/pwd_grp.c
+++ b/libpwdgrp/pwd_grp.c
@@ -23,8 +23,6 @@
/**********************************************************************/
/* Sizes for statically allocated buffers. */
-/* If you change these values, also change _SC_GETPW_R_SIZE_MAX and
- * _SC_GETGR_R_SIZE_MAX in libc/unistd/sysconf.c to match */
#define PWD_BUFFER_SIZE 256
#define GRP_BUFFER_SIZE 256
@@ -49,46 +47,24 @@ static int FAST_FUNC bb__parsespent(void *sp, char *line);
struct statics {
/* Smaller things first */
- struct passwd getpwuid_resultbuf;
- struct group getgrgid_resultbuf;
- struct passwd getpwnam_resultbuf;
- struct group getgrnam_resultbuf;
-
- char getpwuid_buffer[PWD_BUFFER_SIZE];
- char getgrgid_buffer[GRP_BUFFER_SIZE];
- char getpwnam_buffer[PWD_BUFFER_SIZE];
- char getgrnam_buffer[GRP_BUFFER_SIZE];
-#if 0
- struct passwd fgetpwent_resultbuf;
- struct group fgetgrent_resultbuf;
- struct spwd fgetspent_resultbuf;
- char fgetpwent_buffer[PWD_BUFFER_SIZE];
- char fgetgrent_buffer[GRP_BUFFER_SIZE];
- char fgetspent_buffer[PWD_BUFFER_SIZE];
-#endif
+ /* It's ok to use one buffer for getpwuid and getpwnam. Manpage says:
+ * "The return value may point to a static area, and may be overwritten
+ * by subsequent calls to getpwent(), getpwnam(), or getpwuid()."
+ */
+ struct passwd getpw_resultbuf;
+ struct group getgr_resultbuf;
+
+ char getpw_buffer[PWD_BUFFER_SIZE];
+ char getgr_buffer[GRP_BUFFER_SIZE];
#if 0 //ENABLE_USE_BB_SHADOW
- struct spwd getspuid_resultbuf;
- struct spwd getspnam_resultbuf;
- char getspuid_buffer[PWD_BUFFER_SIZE];
- char getspnam_buffer[PWD_BUFFER_SIZE];
+ struct spwd getsp_resultbuf;
+ char getsp_buffer[PWD_BUFFER_SIZE];
#endif
// Not converted - too small to bother
//pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
//FILE *pwf /*= NULL*/;
//FILE *grf /*= NULL*/;
//FILE *spf /*= NULL*/;
-#if 0
- struct passwd getpwent_pwd;
- struct group getgrent_gr;
- char getpwent_line_buff[PWD_BUFFER_SIZE];
- char getgrent_line_buff[GRP_BUFFER_SIZE];
-#endif
-#if 0 //ENABLE_USE_BB_SHADOW
- struct spwd getspent_spwd;
- struct spwd sgetspent_spwd;
- char getspent_line_buff[PWD_BUFFER_SIZE];
- char sgetspent_line_buff[PWD_BUFFER_SIZE];
-#endif
};
static struct statics *ptr_to_statics;
@@ -182,22 +158,22 @@ int fgetspent_r(FILE *__restrict stream, struct spwd *__restrict resultbuf,
struct passwd *fgetpwent(FILE *stream)
{
struct statics *S;
- struct passwd *resultbuf = RESULTBUF(fgetpwent);
- char *buffer = BUFFER(fgetpwent);
+ struct passwd *resultbuf = RESULTBUF(getpw);
+ char *buffer = BUFFER(getpw);
struct passwd *result;
- fgetpwent_r(stream, resultbuf, buffer, sizeof(BUFFER(fgetpwent)), &result);
+ fgetpwent_r(stream, resultbuf, buffer, sizeof(BUFFER(getpw)), &result);
return result;
}
struct group *fgetgrent(FILE *stream)
{
struct statics *S;
- struct group *resultbuf = RESULTBUF(fgetgrent);
- char *buffer = BUFFER(fgetgrent);
+ struct group *resultbuf = RESULTBUF(getgr);
+ char *buffer = BUFFER(getgr);
struct group *result;
- fgetgrent_r(stream, resultbuf, buffer, sizeof(BUFFER(fgetgrent)), &result);
+ fgetgrent_r(stream, resultbuf, buffer, sizeof(BUFFER(getgr)), &result);
return result;
}
#endif
@@ -207,11 +183,11 @@ struct group *fgetgrent(FILE *stream)
struct spwd *fgetspent(FILE *stream)
{
struct statics *S;
- struct spwd *resultbuf = RESULTBUF(fgetspent);
- char *buffer = BUFFER(fgetspent);
+ struct spwd *resultbuf = RESULTBUF(getsp);
+ char *buffer = BUFFER(getsp);
struct spwd *result;
- fgetspent_r(stream, resultbuf, buffer, sizeof(BUFFER(fgetspent)), &result);
+ fgetspent_r(stream, resultbuf, buffer, sizeof(BUFFER(getsp)), &result);
return result;
}
#endif
@@ -299,11 +275,11 @@ int sgetspent_r(const char *string, struct spwd *result_buf,
struct passwd *getpwuid(uid_t uid)
{
struct statics *S;
- struct passwd *resultbuf = RESULTBUF(getpwuid);
- char *buffer = BUFFER(getpwuid);
+ struct passwd *resultbuf = RESULTBUF(getpw);
+ char *buffer = BUFFER(getpw);
struct passwd *result;
- getpwuid_r(uid, resultbuf, buffer, sizeof(BUFFER(getpwuid)), &result);
+ getpwuid_r(uid, resultbuf, buffer, sizeof(BUFFER(getpw)), &result);
return result;
}
@@ -311,11 +287,11 @@ struct passwd *getpwuid(uid_t uid)
struct group *getgrgid(gid_t gid)
{
struct statics *S;
- struct group *resultbuf = RESULTBUF(getgrgid);
- char *buffer = BUFFER(getgrgid);
+ struct group *resultbuf = RESULTBUF(getgr);
+ char *buffer = BUFFER(getgr);
struct group *result;
- getgrgid_r(gid, resultbuf, buffer, sizeof(BUFFER(getgrgid)), &result);
+ getgrgid_r(gid, resultbuf, buffer, sizeof(BUFFER(getgr)), &result);
return result;
}
@@ -346,11 +322,11 @@ int getspuid_r(uid_t uid, struct spwd *__restrict resultbuf,
struct spwd *getspuid(uid_t uid)
{
struct statics *S;
- struct spwd *resultbuf = RESULTBUF(getspuid);
- char *buffer = BUFFER(getspuid);
+ struct spwd *resultbuf = RESULTBUF(getsp);
+ char *buffer = BUFFER(getsp);
struct spwd *result;
- getspuid_r(uid, resultbuf, buffer, sizeof(BUFFER(getspuid)), &result);
+ getspuid_r(uid, resultbuf, buffer, sizeof(BUFFER(getsp)), &result);
return result;
}
#endif
@@ -359,11 +335,11 @@ struct spwd *getspuid(uid_t uid)
struct passwd *getpwnam(const char *name)
{
struct statics *S;
- struct passwd *resultbuf = RESULTBUF(getpwnam);
- char *buffer = BUFFER(getpwnam);
+ struct passwd *resultbuf = RESULTBUF(getpw);
+ char *buffer = BUFFER(getpw);
struct passwd *result;
- getpwnam_r(name, resultbuf, buffer, sizeof(BUFFER(getpwnam)), &result);
+ getpwnam_r(name, resultbuf, buffer, sizeof(BUFFER(getpw)), &result);
return result;
}
@@ -371,11 +347,11 @@ struct passwd *getpwnam(const char *name)
struct group *getgrnam(const char *name)
{
struct statics *S;
- struct group *resultbuf = RESULTBUF(getgrnam);
- char *buffer = BUFFER(getgrnam);
+ struct group *resultbuf = RESULTBUF(getgr);
+ char *buffer = BUFFER(getgr);
struct group *result;
- getgrnam_r(name, resultbuf, buffer, sizeof(BUFFER(getgrnam)), &result);
+ getgrnam_r(name, resultbuf, buffer, sizeof(BUFFER(getgr)), &result);
return result;
}
@@ -383,11 +359,11 @@ struct group *getgrnam(const char *name)
struct spwd *getspnam(const char *name)
{
struct statics *S;
- struct spwd *resultbuf = RESULTBUF(getspnam);
- char *buffer = BUFFER(getspnam);
+ struct spwd *resultbuf = RESULTBUF(getsp);
+ char *buffer = BUFFER(getsp);
struct spwd *result;
- getspnam_r(name, resultbuf, buffer, sizeof(BUFFER(getspnam)), &result);
+ getspnam_r(name, resultbuf, buffer, sizeof(BUFFER(getsp)), &result);
return result;
}
#endif
@@ -441,6 +417,7 @@ int getpwent_r(struct passwd *__restrict resultbuf,
rv = errno;
goto ERR;
}
+ close_on_exec_on(fileno(pwf));
}
rv = bb__pgsreader(bb__parsepwent, resultbuf, buffer, buflen, pwf);
@@ -488,6 +465,7 @@ int getgrent_r(struct group *__restrict resultbuf,
rv = errno;
goto ERR;
}
+ close_on_exec_on(fileno(grf));
}
rv = bb__pgsreader(bb__parsegrent, resultbuf, buffer, buflen, grf);
@@ -536,6 +514,7 @@ int getspent_r(struct spwd *resultbuf, char *buffer,
rv = errno;
goto ERR;
}
+ close_on_exec_on(fileno(spf));
}
rv = bb__pgsreader(bb__parsespent, resultbuf, buffer, buflen, spf);
@@ -783,7 +762,9 @@ static const unsigned char pw_off[] ALIGN1 = {
offsetof(struct passwd, pw_passwd), /* 1 */
offsetof(struct passwd, pw_uid), /* 2 - not a char ptr */
offsetof(struct passwd, pw_gid), /* 3 - not a char ptr */
+#ifndef __BIONIC__
offsetof(struct passwd, pw_gecos), /* 4 */
+#endif
offsetof(struct passwd, pw_dir), /* 5 */
offsetof(struct passwd, pw_shell) /* 6 */
};
diff --git a/loginutils/Config.src b/loginutils/Config.src
index 0d7f50c..9bf79af 100644
--- a/loginutils/Config.src
+++ b/loginutils/Config.src
@@ -205,6 +205,17 @@ config LOGIN
Note that Busybox binary must be setuid root for this applet to
work properly.
+config LOGIN_SESSION_AS_CHILD
+ bool "Run logged in session in a child process"
+ default y if PAM
+ depends on LOGIN
+ help
+ Run the logged in session in a child process. This allows
+ login to clean up things such as utmp entries or PAM sessions
+ when the login session is complete. If you use PAM, you
+ almost always would want this to be set to Y, else PAM session
+ will not be cleaned up.
+
config PAM
bool "Support for PAM (Pluggable Authentication Modules)"
default n
@@ -272,6 +283,13 @@ config CHPASSWD
Reads a file of user name and password pairs from standard input
and uses this information to update a group of existing users.
+config FEATURE_DEFAULT_PASSWD_ALGO
+ string "Default password encryption method (passwd -a, cryptpw -m parameter)"
+ default "des"
+ depends on PASSWD || CRYPTPW
+ help
+ Possible choices are "d[es]", "m[d5]", "s[ha256]" or "sha512".
+
config SU
bool "su"
default y
diff --git a/loginutils/README b/loginutils/README
new file mode 100644
index 0000000..ce88510
--- a/dev/null
+++ b/loginutils/README
@@ -0,0 +1,70 @@
+ Getty
+
+??? Should getty open tty with or without O_NONBLOCK?
+For serial lines, it means "should getty wait for Carrier Detect pin?"
+I checked other getties:
+
+- agetty always uses O_NONBLOCK
+- mgetty uses O_NONBLOCK unless run with -b, or as "getty"
+
+??? If we decided to use O_NONBLOCK (perhaps optionally with -b),
+when getty should send -I INITSTR data to tty? After open succeeds?
+What if we also want to initialize *modem* with some AT commands?
+
+??? Should we check/create /var/lock/LCK..ttyPFX lockfiles?
+
+??? mgetty opens tty but does NOT lock it, then waits for input via
+select/poll, and when input is available, it checks lock file.
+If it exists, mgetty exits (it assumes someone else uses the line).
+If no, it creates the file (lock the tty). Sounds like a good algorithm
+to use if we are called with -w...
+
+Getty should establish a new session and process group, and ensure
+that tty is a ctty.
+
+??? Should getty ensure that other processes which might have opened
+fds to this tty be dusconnected? agetty has a -R option which makes
+agetty call vhangup() after tty is opened. (Then agetty opens it again,
+since it probably vhangup'ed its own fd too).
+
+Getty should leave the tty in approximately the same state as "stty sane"
+before it execs login program. Minor things we do conditionally are:
+ c_iflag |= ICRNL; // if '\r' was used to end username
+
+??? mgetty uses per-tty file to ignore connects, /etc/nologin.ttyxx -
+is it useful?
+
+It should be possible to run "getty 0 -" from a shell prompt.
+[This currently doesn't work from interactive shell since setsid()
+fails in process group leader. The workaround is to run it as a child
+of something. sh -c 'getty - 0; true' usually works. Should we fix this?]
+It should leave tty in a sane state when it exits (Ctrl-D, -t SEC timeout):
+echo should be on, speed, control chars properly set, etc.
+(However, it can't restore ctty. The symptom is that "</dev/tty"
+fails in the parent shell after getty exits: /dev/tty can't be opened).
+
+Getty should write LOGIN_PROCESS utmp record before it starts waiting
+for username to be entered.
+
+ Login
+
+Login should not try to set up tty parameters - apart from switching echo
+off while entering password, and switching it back on after.
+
+Login should not leave "echo off" state when it times out reading password
+or otherwise terminates (Ctrl-C, Ctrl-D etc).
+
+??? Should login establish a new session and/or process group, and ensure
+that tty is a ctty? Without this, running login directly (not via getty)
+from e.g. initscript will usually result with a login session without
+ctty and without session/pgrp properly created...
+
+It should be possible to run "login [USER]" from a shell prompt,
+and it should work (not block/die/error out).
+Similarly to getty, it should leave tty in the sane state when it exits.
+
+??? Should login write LOGIN_PROCESS utmp record before it starts waiting
+for username/password to be entered?
+
+Login should write USER_PROCESS utmp record just before it is about
+to exec user's shell.
diff --git a/loginutils/chpasswd.c b/loginutils/chpasswd.c
index 1d1e466..9eab99e 100644
--- a/loginutils/chpasswd.c
+++ b/loginutils/chpasswd.c
@@ -20,6 +20,8 @@
//usage: "\n -m Use MD5 encryption instead of DES"
//usage: )
+//TODO: implement -c ALGO
+
#if ENABLE_LONG_OPTS
static const char chpasswd_longopts[] ALIGN1 =
"encrypted\0" No_argument "e"
diff --git a/loginutils/cryptpw.c b/loginutils/cryptpw.c
index b244f55..a36f920 100644
--- a/loginutils/cryptpw.c
+++ b/loginutils/cryptpw.c
@@ -105,7 +105,7 @@ int cryptpw_main(int argc UNUSED_PARAM, char **argv)
applet_long_options = mkpasswd_longopts;
#endif
fd = STDIN_FILENO;
- opt_m = "d";
+ opt_m = CONFIG_FEATURE_DEFAULT_PASSWD_ALGO;
opt_S = NULL;
/* at most two non-option arguments; -P NUM */
opt_complementary = "?2:P+";
diff --git a/loginutils/getty.c b/loginutils/getty.c
index 4c8dd91..afb411b 100644
--- a/loginutils/getty.c
+++ b/loginutils/getty.c
@@ -63,18 +63,8 @@ static FILE *dbf;
*/
#define ISSUE "/etc/issue"
-/* Some shorthands for control characters */
-#define CTL(x) ((x) ^ 0100) /* Assumes ASCII dialect */
-#define BS CTL('H') /* back space */
-#define DEL CTL('?') /* delete */
-
-/* Defaults for line-editing etc. characters; you may want to change this */
-#define DEF_INTR CTL('C') /* default interrupt character */
-#define DEF_QUIT CTL('\\') /* default quit char */
-#define DEF_KILL CTL('U') /* default kill char */
-#define DEF_EOF CTL('D') /* default EOF char */
-#define DEF_EOL '\n'
-#define DEF_SWITCH 0 /* default switch char (none) */
+/* Macro to build Ctrl-LETTER. Assumes ASCII dialect */
+#define CTL(x) ((x) ^ 0100)
/*
* When multiple baud rates are specified on the command line,
@@ -83,16 +73,16 @@ static FILE *dbf;
#define MAX_SPEED 10 /* max. nr. of baud rates */
struct globals {
- unsigned timeout; /* time-out period */
+ unsigned timeout;
const char *login; /* login program */
const char *fakehost;
- const char *tty; /* name of tty */
+ const char *tty_name;
char *initstring; /* modem init string */
const char *issue; /* alternative issue file */
int numspeed; /* number of baud rates to try */
int speeds[MAX_SPEED]; /* baud rates to be tried */
unsigned char eol; /* end-of-line char seen (CR or NL) */
- struct termios termios; /* terminal mode bits */
+ struct termios tty_attrs;
char line_buf[128];
};
@@ -104,7 +94,7 @@ struct globals {
//usage:#define getty_trivial_usage
//usage: "[OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]"
//usage:#define getty_full_usage "\n\n"
-//usage: "Open a tty, prompt for a login name, then invoke /bin/login\n"
+//usage: "Open TTY, prompt for login name, then invoke /bin/login\n"
//usage: "\n -h Enable hardware RTS/CTS flow control"
//usage: "\n -L Set CLOCAL (ignore Carrier Detect state)"
//usage: "\n -m Get baud rate from modem's CONNECT status message"
@@ -181,15 +171,14 @@ static void parse_args(char **argv)
debug("after getopt\n");
/* We loosen up a bit and accept both "baudrate tty" and "tty baudrate" */
- G.tty = argv[0]; /* tty name */
- ts = argv[1]; /* baud rate(s) */
+ G.tty_name = argv[0];
+ ts = argv[1]; /* baud rate(s) */
if (isdigit(argv[0][0])) {
/* A number first, assume it's a speed (BSD style) */
- G.tty = ts; /* tty name is in argv[1] */
- ts = argv[0]; /* baud rate(s) */
+ G.tty_name = ts; /* tty name is in argv[1] */
+ ts = argv[0]; /* baud rate(s) */
}
parse_speeds(ts);
- applet_name = xasprintf("getty: %s", G.tty);
if (argv[2])
xsetenv("TERM", argv[2]);
@@ -201,42 +190,49 @@ static void parse_args(char **argv)
static void open_tty(void)
{
/* Set up new standard input, unless we are given an already opened port */
- if (NOT_LONE_DASH(G.tty)) {
- if (G.tty[0] != '/')
- G.tty = xasprintf("/dev/%s", G.tty); /* will leak it */
+ if (NOT_LONE_DASH(G.tty_name)) {
+ if (G.tty_name[0] != '/')
+ G.tty_name = xasprintf("/dev/%s", G.tty_name); /* will leak it */
/* Open the tty as standard input */
debug("open(2)\n");
close(0);
- xopen(G.tty, O_RDWR | O_NONBLOCK); /* uses fd 0 */
+ xopen(G.tty_name, O_RDWR | O_NONBLOCK); /* uses fd 0 */
/* Set proper protections and ownership */
fchown(0, 0, 0); /* 0:0 */
fchmod(0, 0620); /* crw--w---- */
} else {
+ char *n;
/*
- * Standard input should already be connected to an open port. Make
- * sure it is open for read/write.
+ * Standard input should already be connected to an open port.
+ * Make sure it is open for read/write.
*/
if ((fcntl(0, F_GETFL) & (O_RDWR|O_RDONLY|O_WRONLY)) != O_RDWR)
bb_error_msg_and_die("stdin is not open for read/write");
+
+ /* Try to get real tty name instead of "-" */
+ n = xmalloc_ttyname(0);
+ if (n)
+ G.tty_name = n;
}
+ applet_name = xasprintf("getty: %s", skip_dev_pfx(G.tty_name));
}
-static void set_termios(void)
+static void set_tty_attrs(void)
{
- if (tcsetattr_stdin_TCSANOW(&G.termios) < 0)
+ if (tcsetattr_stdin_TCSANOW(&G.tty_attrs) < 0)
bb_perror_msg_and_die("tcsetattr");
}
-/* We manipulate termios this way:
- * - first, we read existing termios settings
- * - termios_init modifies some parts and sets it
- * - auto_baud and/or BREAK processing can set different speed and set termios
- * - termios_final again modifies some parts and sets termios before
+/* We manipulate tty_attrs this way:
+ * - first, we read existing tty_attrs
+ * - init_tty_attrs modifies some parts and sets it
+ * - auto_baud and/or BREAK processing can set different speed and set tty attrs
+ * - finalize_tty_attrs again modifies some parts and sets tty attrs before
* execing login
*/
-static void termios_init(int speed)
+static void init_tty_attrs(int speed)
{
/* Try to drain output buffer, with 5 sec timeout.
* Added on request from users of ~600 baud serial interface
@@ -248,21 +244,20 @@ static void termios_init(int speed)
alarm(5);
tcdrain(STDIN_FILENO);
alarm(0);
- signal(SIGALRM, SIG_DFL); /* do not break -t TIMEOUT! */
/* Flush input and output queues, important for modems! */
tcflush(STDIN_FILENO, TCIOFLUSH);
/* Set speed if it wasn't specified as "0" on command line */
if (speed != B0)
- cfsetspeed(&G.termios, speed);
+ cfsetspeed(&G.tty_attrs, speed);
- /* Initial termios settings: 8-bit characters, raw mode, blocking i/o.
+ /* Initial settings: 8-bit characters, raw mode, blocking i/o.
* Special characters are set after we have read the login name; all
* reads will be done in raw mode anyway.
*/
/* Clear all bits except: */
- G.termios.c_cflag &= (0
+ G.tty_attrs.c_cflag &= (0
/* 2 stop bits (1 otherwise)
* Enable parity bit (both on input and output)
* Odd parity (else even)
@@ -282,42 +277,44 @@ static void termios_init(int speed)
#endif
);
/* Set: 8 bits; hang up (drop DTR) on last close; enable receive */
- G.termios.c_cflag |= CS8 | HUPCL | CREAD;
+ G.tty_attrs.c_cflag |= CS8 | HUPCL | CREAD;
if (option_mask32 & F_LOCAL) {
/* ignore Carrier Detect pin:
* opens don't block when CD is low,
* losing CD doesn't hang up processes whose ctty is this tty
*/
- G.termios.c_cflag |= CLOCAL;
+ G.tty_attrs.c_cflag |= CLOCAL;
}
#ifdef CRTSCTS
if (option_mask32 & F_RTSCTS)
- G.termios.c_cflag |= CRTSCTS; /* flow control using RTS/CTS pins */
+ G.tty_attrs.c_cflag |= CRTSCTS; /* flow control using RTS/CTS pins */
#endif
- G.termios.c_iflag = 0;
- G.termios.c_lflag = 0;
+ G.tty_attrs.c_iflag = 0;
+ G.tty_attrs.c_lflag = 0;
/* non-raw output; add CR to each NL */
- G.termios.c_oflag = OPOST | ONLCR;
+ G.tty_attrs.c_oflag = OPOST | ONLCR;
- G.termios.c_cc[VMIN] = 1; /* block reads if < 1 char is available */
- G.termios.c_cc[VTIME] = 0; /* no timeout (reads block forever) */
+ /* reads would block only if < 1 char is available */
+ G.tty_attrs.c_cc[VMIN] = 1;
+ /* no timeout (reads block forever) */
+ G.tty_attrs.c_cc[VTIME] = 0;
#ifdef __linux__
- G.termios.c_line = 0;
+ G.tty_attrs.c_line = 0;
#endif
- set_termios();
+ set_tty_attrs();
debug("term_io 2\n");
}
-static void termios_final(void)
+static void finalize_tty_attrs(void)
{
/* software flow control on output (stop sending if XOFF is recvd);
* and on input (send XOFF when buffer is full)
*/
- G.termios.c_iflag |= IXON | IXOFF;
+ G.tty_attrs.c_iflag |= IXON | IXOFF;
if (G.eol == '\r') {
- G.termios.c_iflag |= ICRNL; /* map CR on input to NL */
+ G.tty_attrs.c_iflag |= ICRNL; /* map CR on input to NL */
}
/* Other bits in c_iflag:
* IXANY Any recvd char enables output (any char is also a XON)
@@ -344,7 +341,7 @@ static void termios_final(void)
* echo kill char specially, not as ^c (ECHOKE controls how exactly);
* erase all input via BS-SP-BS on kill char (else go to next line)
*/
- G.termios.c_lflag |= ICANON | ISIG | ECHO | ECHOE | ECHOK | ECHOKE;
+ G.tty_attrs.c_lflag |= ICANON | ISIG | ECHO | ECHOE | ECHOK | ECHOKE;
/* Other bits in c_lflag:
* XCASE Map uppercase to \lowercase [tried, doesn't work]
* ECHONL Echo NL even if ECHO is not set
@@ -362,17 +359,17 @@ static void termios_final(void)
* (why "stty sane" unsets this bit?)
*/
- G.termios.c_cc[VINTR] = DEF_INTR;
- G.termios.c_cc[VQUIT] = DEF_QUIT;
- G.termios.c_cc[VEOF] = DEF_EOF;
- G.termios.c_cc[VEOL] = DEF_EOL;
+ G.tty_attrs.c_cc[VINTR] = CTL('C');
+ G.tty_attrs.c_cc[VQUIT] = CTL('\\');
+ G.tty_attrs.c_cc[VEOF] = CTL('D');
+ G.tty_attrs.c_cc[VEOL] = '\n';
#ifdef VSWTC
- G.termios.c_cc[VSWTC] = DEF_SWITCH;
+ G.tty_attrs.c_cc[VSWTC] = 0;
#endif
#ifdef VSWTCH
- G.termios.c_cc[VSWTCH] = DEF_SWITCH;
+ G.tty_attrs.c_cc[VSWTCH] = 0;
#endif
- G.termios.c_cc[VKILL] = DEF_KILL;
+ G.tty_attrs.c_cc[VKILL] = CTL('U');
/* Other control chars:
* VEOL2
* VERASE, VWERASE - (word) erase. we may set VERASE in get_logname
@@ -382,7 +379,10 @@ static void termios_final(void)
* VSTART, VSTOP - chars used for IXON/IXOFF
*/
- set_termios();
+ set_tty_attrs();
+
+ /* Now the newline character should be properly written */
+ full_write(STDOUT_FILENO, "\n", 1);
}
/* extract baud rate from modem status message */
@@ -405,8 +405,8 @@ static void auto_baud(void)
* modem status messages is enabled.
*/
- G.termios.c_cc[VMIN] = 0; /* don't block reads (min read is 0 chars) */
- set_termios();
+ G.tty_attrs.c_cc[VMIN] = 0; /* don't block reads (min read is 0 chars) */
+ set_tty_attrs();
/*
* Wait for a while, then read everything the modem has said so far and
@@ -422,15 +422,15 @@ static void auto_baud(void)
if (isdigit(*bp)) {
speed = bcode(bp);
if (speed > 0)
- cfsetspeed(&G.termios, speed);
+ cfsetspeed(&G.tty_attrs, speed);
break;
}
}
}
/* Restore terminal settings */
- G.termios.c_cc[VMIN] = 1; /* restore to value set by termios_init */
- set_termios();
+ G.tty_attrs.c_cc[VMIN] = 1; /* restore to value set by init_tty_attrs */
+ set_tty_attrs();
}
/* get user name, establish parity, speed, erase, kill, eol;
@@ -446,42 +446,35 @@ static char *get_logname(void)
tcflush(STDIN_FILENO, TCIFLUSH);
/* Prompt for and read a login name */
- G.line_buf[0] = '\0';
- while (!G.line_buf[0]) {
+ do {
/* Write issue file and prompt */
#ifdef ISSUE
if (!(option_mask32 & F_NOISSUE))
- print_login_issue(G.issue, G.tty);
+ print_login_issue(G.issue, G.tty_name);
#endif
print_login_prompt();
- /* Read name, watch for break, parity, erase, kill, end-of-line */
+ /* Read name, watch for break, erase, kill, end-of-line */
bp = G.line_buf;
- G.eol = '\0';
while (1) {
/* Do not report trivial EINTR/EIO errors */
errno = EINTR; /* make read of 0 bytes be silent too */
if (read(STDIN_FILENO, &c, 1) < 1) {
+ finalize_tty_attrs();
if (errno == EINTR || errno == EIO)
exit(EXIT_SUCCESS);
bb_perror_msg_and_die(bb_msg_read_error);
}
- /* BREAK. If we have speeds to try,
- * return NULL (will switch speeds and return here) */
- if (c == '\0' && G.numspeed > 1)
- return NULL;
-
- /* Do erase, kill and end-of-line processing */
switch (c) {
case '\r':
case '\n':
*bp = '\0';
G.eol = c;
goto got_logname;
- case BS:
- case DEL:
- G.termios.c_cc[VERASE] = c;
+ case CTL('H'):
+ case 0x7f:
+ G.tty_attrs.c_cc[VERASE] = c;
if (bp > G.line_buf) {
full_write(STDOUT_FILENO, "\010 \010", 3);
bp--;
@@ -493,8 +486,16 @@ static char *get_logname(void)
bp--;
}
break;
+ case CTL('C'):
case CTL('D'):
+ finalize_tty_attrs();
exit(EXIT_SUCCESS);
+ case '\0':
+ /* BREAK. If we have speeds to try,
+ * return NULL (will switch speeds and return here) */
+ if (G.numspeed > 1)
+ return NULL;
+ /* fall through and ignore it */
default:
if ((unsigned char)c < ' ') {
/* ignore garbage characters */
@@ -507,16 +508,22 @@ static char *get_logname(void)
}
} /* end of get char loop */
got_logname: ;
- } /* while logname is empty */
+ } while (G.line_buf[0] == '\0'); /* while logname is empty */
return G.line_buf;
}
+static void alarm_handler(int sig UNUSED_PARAM)
+{
+ finalize_tty_attrs();
+ _exit(EXIT_SUCCESS);
+}
+
int getty_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int getty_main(int argc UNUSED_PARAM, char **argv)
{
int n;
- pid_t pid;
+ pid_t pid, tsid;
char *logname;
INIT_G();
@@ -529,14 +536,37 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
/* Parse command-line arguments */
parse_args(argv);
- logmode = LOGMODE_NONE;
+ /* Create new session and pgrp, lose controlling tty */
+ pid = setsid(); /* this also gives us our pid :) */
+ if (pid < 0) {
+ int fd;
+ /* :(
+ * docs/ctty.htm says:
+ * "This is allowed only when the current process
+ * is not a process group leader".
+ * Thus, setsid() will fail if we _already_ are
+ * a session leader - which is quite possible for getty!
+ */
+ pid = getpid();
+ if (getsid(0) != pid)
+ bb_perror_msg_and_die("setsid");
+ /* Looks like we are already a session leader.
+ * In this case (setsid failed) we may still have ctty,
+ * and it may be different from tty we need to control!
+ * If we still have ctty, on Linux ioctl(TIOCSCTTY)
+ * (which we are going to use a bit later) always fails -
+ * even if we try to take ctty which is already ours!
+ * Try to drop old ctty now to prevent that.
+ * Use O_NONBLOCK: old ctty may be a serial line.
+ */
+ fd = open("/dev/tty", O_RDWR | O_NONBLOCK);
+ if (fd >= 0) {
+ ioctl(fd, TIOCNOTTY);
+ close(fd);
+ }
+ }
- /* Create new session, lose controlling tty, if any */
- /* docs/ctty.htm says:
- * "This is allowed only when the current process
- * is not a process group leader" - is this a problem? */
- setsid();
- /* close stdio, and stray descriptors, just in case */
+ /* Close stdio, and stray descriptors, just in case */
n = xopen(bb_dev_null, O_RDWR);
/* dup2(n, 0); - no, we need to handle "getty - 9600" too */
xdup2(n, 1);
@@ -560,13 +590,25 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
#endif
/* Open the tty as standard input, if it is not "-" */
- /* If it's not "-" and not taken yet, it will become our ctty */
debug("calling open_tty\n");
open_tty();
- ndelay_off(0);
+ ndelay_off(STDIN_FILENO);
debug("duping\n");
- xdup2(0, 1);
- xdup2(0, 2);
+ xdup2(STDIN_FILENO, 1);
+ xdup2(STDIN_FILENO, 2);
+
+ /* Steal ctty if we don't have it yet */
+ tsid = tcgetsid(STDIN_FILENO);
+ if (tsid < 0 || pid != tsid) {
+ if (ioctl(STDIN_FILENO, TIOCSCTTY, /*force:*/ (long)1) < 0)
+ bb_perror_msg_and_die("TIOCSCTTY");
+ }
+
+#ifdef __linux__
+ /* Make ourself a foreground process group within our session */
+ if (tcsetpgrp(STDIN_FILENO, pid) < 0)
+ bb_perror_msg_and_die("tcsetpgrp");
+#endif
/*
* The following ioctl will fail if stdin is not a tty, but also when
@@ -576,25 +618,15 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
* by patching the SunOS kernel variable "zsadtrlow" to a larger value;
* 5 seconds seems to be a good value.
*/
- if (tcgetattr(STDIN_FILENO, &G.termios) < 0)
+ if (tcgetattr(STDIN_FILENO, &G.tty_attrs) < 0)
bb_perror_msg_and_die("tcgetattr");
- pid = getpid();
-#ifdef __linux__
-// FIXME: do we need this? Otherwise "-" case seems to be broken...
- // /* Forcibly make fd 0 our controlling tty, even if another session
- // * has it as a ctty. (Another session loses ctty). */
- // ioctl(STDIN_FILENO, TIOCSCTTY, (void*)1);
- /* Make ourself a foreground process group within our session */
- tcsetpgrp(STDIN_FILENO, pid);
-#endif
-
/* Update the utmp file. This tty is ours now! */
- update_utmp(pid, LOGIN_PROCESS, G.tty, "LOGIN", G.fakehost);
+ update_utmp(pid, LOGIN_PROCESS, G.tty_name, "LOGIN", G.fakehost);
- /* Initialize the termios settings (raw mode, eight-bit, blocking i/o) */
- debug("calling termios_init\n");
- termios_init(G.speeds[0]);
+ /* Initialize tty attrs (raw mode, eight-bit, blocking i/o) */
+ debug("calling init_tty_attrs\n");
+ init_tty_attrs(G.speeds[0]);
/* Write the modem init string and DON'T flush the buffers */
if (option_mask32 & F_INITSTRING) {
@@ -608,8 +640,8 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
auto_baud();
/* Set the optional timer */
+ signal(SIGALRM, alarm_handler);
alarm(G.timeout); /* if 0, alarm is not set */
-//BUG: death by signal won't restore termios
/* Optionally wait for CR or LF before writing /etc/issue */
if (option_mask32 & F_WAITCRLF) {
@@ -624,7 +656,7 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
logname = NULL;
if (!(option_mask32 & F_NOPROMPT)) {
- /* NB: termios_init already set line speed
+ /* NB: init_tty_attrs already set line speed
* to G.speeds[0] */
int baud_index = 0;
@@ -636,19 +668,15 @@ int getty_main(int argc UNUSED_PARAM, char **argv)
break;
/* We are here only if G.numspeed > 1 */
baud_index = (baud_index + 1) % G.numspeed;
- cfsetspeed(&G.termios, G.speeds[baud_index]);
- set_termios();
+ cfsetspeed(&G.tty_attrs, G.speeds[baud_index]);
+ set_tty_attrs();
}
}
/* Disable timer */
alarm(0);
- /* Finalize the termios settings */
- termios_final();
-
- /* Now the newline character should be properly written */
- full_write(STDOUT_FILENO, "\n", 1);
+ finalize_tty_attrs();
/* Let the login program take care of password validation */
/* We use PATH because we trust that root doesn't set "bad" PATH,
diff --git a/loginutils/login.c b/loginutils/login.c
index 2f7b9b2..bf43f3a 100644
--- a/loginutils/login.c
+++ b/loginutils/login.c
@@ -41,7 +41,12 @@ enum {
TTYNAME_SIZE = 32,
};
-static char* short_tty;
+struct globals {
+ struct termios tty_attrs;
+} FIX_ALIASING;
+#define G (*(struct globals*)&bb_common_bufsiz1)
+#define INIT_G() do { } while (0)
+
#if ENABLE_FEATURE_NOLOGIN
static void die_if_nologin(void)
@@ -74,7 +79,7 @@ static void die_if_nologin(void)
#endif
#if ENABLE_FEATURE_SECURETTY && !ENABLE_PAM
-static int check_securetty(void)
+static int check_securetty(const char *short_tty)
{
char *buf = (char*)"/etc/securetty"; /* any non-NULL is ok */
parser_t *parser = config_open2("/etc/securetty", fopen_for_read);
@@ -89,7 +94,7 @@ static int check_securetty(void)
return buf != NULL;
}
#else
-static ALWAYS_INLINE int check_securetty(void) { return 1; }
+static ALWAYS_INLINE int check_securetty(const char *short_tty UNUSED_PARAM) { return 1; }
#endif
#if ENABLE_SELINUX
@@ -142,6 +147,29 @@ static void run_login_script(struct passwd *pw, char *full_tty)
void run_login_script(struct passwd *pw, char *full_tty);
#endif
+#if ENABLE_LOGIN_SESSION_AS_CHILD && ENABLE_PAM
+static void login_pam_end(pam_handle_t *pamh)
+{
+ int pamret;
+
+ pamret = pam_setcred(pamh, PAM_DELETE_CRED);
+ if (pamret != PAM_SUCCESS) {
+ bb_error_msg("pam_%s failed: %s (%d)", "setcred",
+ pam_strerror(pamh, pamret), pamret);
+ }
+ pamret = pam_close_session(pamh, 0);
+ if (pamret != PAM_SUCCESS) {
+ bb_error_msg("pam_%s failed: %s (%d)", "close_session",
+ pam_strerror(pamh, pamret), pamret);
+ }
+ pamret = pam_end(pamh, pamret);
+ if (pamret != PAM_SUCCESS) {
+ bb_error_msg("pam_%s failed: %s (%d)", "end",
+ pam_strerror(pamh, pamret), pamret);
+ }
+}
+#endif /* ENABLE_PAM */
+
static void get_username_or_die(char *buf, int size_buf)
{
int c, cntdown;
@@ -185,15 +213,21 @@ static void motd(void)
static void alarm_handler(int sig UNUSED_PARAM)
{
- /* This is the escape hatch! Poor serial line users and the like
+ /* This is the escape hatch! Poor serial line users and the like
* arrive here when their connection is broken.
* We don't want to block here */
- ndelay_on(1);
- printf("\r\nLogin timed out after %d seconds\r\n", TIMEOUT);
+ ndelay_on(STDOUT_FILENO);
+ /* Test for correct attr restoring:
+ * run "getty 0 -" from a shell, enter bogus username, stop at
+ * password prompt, let it time out. Without the tcsetattr below,
+ * when you are back at shell prompt, echo will be still off.
+ */
+ tcsetattr_stdin_TCSANOW(&G.tty_attrs);
+ printf("\r\nLogin timed out after %u seconds\r\n", TIMEOUT);
fflush_all();
/* unix API is brain damaged regarding O_NONBLOCK,
* we should undo it, or else we can affect other processes */
- ndelay_off(1);
+ ndelay_off(STDOUT_FILENO);
_exit(EXIT_SUCCESS);
}
@@ -214,6 +248,7 @@ int login_main(int argc UNUSED_PARAM, char **argv)
char *opt_host = NULL;
char *opt_user = opt_user; /* for compiler */
char *full_tty;
+ char *short_tty;
IF_SELINUX(security_context_t user_sid = NULL;)
#if ENABLE_PAM
int pamret;
@@ -224,10 +259,11 @@ int login_main(int argc UNUSED_PARAM, char **argv)
char pwdbuf[256];
char **pamenv;
#endif
+#if ENABLE_LOGIN_SESSION_AS_CHILD
+ pid_t child_pid;
+#endif
- username[0] = '\0';
- signal(SIGALRM, alarm_handler);
- alarm(TIMEOUT);
+ INIT_G();
/* More of suid paranoia if called by non-root: */
/* Clear dangerous stuff, set PATH */
@@ -239,6 +275,7 @@ int login_main(int argc UNUSED_PARAM, char **argv)
* (The name of the function is misleading. Not daemonizing here.) */
bb_daemonize_or_rexec(DAEMON_ONLY_SANITIZE | DAEMON_CLOSE_EXTRA_FDS, NULL);
+ username[0] = '\0';
opt = getopt32(argv, "f:h:p", &opt_user, &opt_host);
if (opt & LOGIN_OPT_f) {
if (!run_by_root)
@@ -249,9 +286,19 @@ int login_main(int argc UNUSED_PARAM, char **argv)
if (argv[0]) /* user from command line (getty) */
safe_strncpy(username, argv[0], sizeof(username));
- /* Let's find out and memorize our tty */
- if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO) || !isatty(STDERR_FILENO))
+ /* Save tty attributes - and by doing it, check that it's indeed a tty */
+ if (tcgetattr(STDIN_FILENO, &G.tty_attrs) < 0
+ || !isatty(STDOUT_FILENO)
+ /*|| !isatty(STDERR_FILENO) - no, guess some people might want to redirect this */
+ ) {
return EXIT_FAILURE; /* Must be a terminal */
+ }
+
+ /* We install timeout handler only _after_ we saved G.tty_attrs */
+ signal(SIGALRM, alarm_handler);
+ alarm(TIMEOUT);
+
+ /* Find out and memorize our tty name */
full_tty = xmalloc_ttyname(STDIN_FILENO);
if (!full_tty)
full_tty = xstrdup("UNKNOWN");
@@ -295,14 +342,16 @@ int login_main(int argc UNUSED_PARAM, char **argv)
goto pam_auth_failed;
}
}
- pamret = pam_authenticate(pamh, 0);
- if (pamret != PAM_SUCCESS) {
- failed_msg = "authenticate";
- goto pam_auth_failed;
- /* TODO: or just "goto auth_failed"
- * since user seems to enter wrong password
- * (in this case pamret == 7)
- */
+ if (!(opt & LOGIN_OPT_f)) {
+ pamret = pam_authenticate(pamh, 0);
+ if (pamret != PAM_SUCCESS) {
+ failed_msg = "authenticate";
+ goto pam_auth_failed;
+ /* TODO: or just "goto auth_failed"
+ * since user seems to enter wrong password
+ * (in this case pamret == 7)
+ */
+ }
}
/* check that the account is healthy */
pamret = pam_acct_mgmt(pamh, 0);
@@ -359,14 +408,17 @@ int login_main(int argc UNUSED_PARAM, char **argv)
if (opt & LOGIN_OPT_f)
break; /* -f USER: success without asking passwd */
- if (pw->pw_uid == 0 && !check_securetty())
+ if (pw->pw_uid == 0 && !check_securetty(short_tty))
goto auth_failed;
/* Don't check the password if password entry is empty (!) */
if (!pw->pw_passwd[0])
break;
fake_it:
- /* authorization takes place here */
+ /* Password reading and authorization takes place here.
+ * Note that reads (in no-echo mode) trash tty attributes.
+ * If we get interrupted by SIGALRM, we need to restore attrs.
+ */
if (correct_password(pw))
break;
#endif /* ENABLE_PAM */
@@ -393,7 +445,22 @@ int login_main(int argc UNUSED_PARAM, char **argv)
if (pw->pw_uid != 0)
die_if_nologin();
- IF_SELINUX(initselinux(username, full_tty, &user_sid));
+#if ENABLE_LOGIN_SESSION_AS_CHILD
+ child_pid = vfork();
+ if (child_pid != 0) {
+ if (child_pid < 0)
+ bb_perror_msg("vfork");
+ else {
+ if (safe_waitpid(child_pid, NULL, 0) == -1)
+ bb_perror_msg("waitpid");
+ update_utmp(child_pid, DEAD_PROCESS, NULL, NULL, NULL);
+ }
+ IF_PAM(login_pam_end(pamh);)
+ return 0;
+ }
+#endif
+
+ IF_SELINUX(initselinux(username, full_tty, &user_sid);)
/* Try these, but don't complain if they fail.
* _f_chown is safe wrt race t=ttyname(0);...;chown(t); */
diff --git a/loginutils/passwd.c b/loginutils/passwd.c
index 1cfafae..b83db00 100644
--- a/loginutils/passwd.c
+++ b/loginutils/passwd.c
@@ -94,7 +94,7 @@ int passwd_main(int argc UNUSED_PARAM, char **argv)
};
unsigned opt;
int rc;
- const char *opt_a = "d"; /* des */
+ const char *opt_a = CONFIG_FEATURE_DEFAULT_PASSWD_ALGO;
const char *filename;
char *myname;
char *name;
diff --git a/mailutils/mail.c b/mailutils/mail.c
index 66c7947..199f644 100644
--- a/mailutils/mail.c
+++ b/mailutils/mail.c
@@ -57,10 +57,13 @@ void FAST_FUNC launch_helper(const char **argv)
G.helper_pid = xvfork();
i = (!G.helper_pid) * 2; // for parent:0, for child:2
- close(pipes[i + 1]); // 1 or 3 - closing one write end
- close(pipes[2 - i]); // 2 or 0 - closing one read end
- xmove_fd(pipes[i], STDIN_FILENO); // 0 or 2 - using other read end
- xmove_fd(pipes[3 - i], STDOUT_FILENO); // 3 or 1 - other write end
+ close(pipes[i + 1]); // 1 or 3 - closing one write end
+ close(pipes[2 - i]); // 2 or 0 - closing one read end
+ xmove_fd(pipes[i], STDIN_FILENO); // 0 or 2 - using other read end
+ xmove_fd(pipes[3 - i], STDOUT_FILENO); // 3 or 1 - using other write end
+ // End result:
+ // parent stdout [3] -> child stdin [2]
+ // child stdout [1] -> parent stdin [0]
if (!G.helper_pid) {
// child: try to execute connection helper
@@ -116,7 +119,7 @@ static char* FAST_FUNC parse_url(char *url, char **user, char **pass)
void FAST_FUNC encode_base64(char *fname, const char *text, const char *eol)
{
enum {
- SRC_BUF_SIZE = 45, /* This *MUST* be a multiple of 3 */
+ SRC_BUF_SIZE = 57, /* This *MUST* be a multiple of 3 */
DST_BUF_SIZE = 4 * ((SRC_BUF_SIZE + 2) / 3),
};
#define src_buf text
diff --git a/mailutils/mail.h b/mailutils/mail.h
index d1d7830..fa0c5b3 100644
--- a/mailutils/mail.h
+++ b/mailutils/mail.h
@@ -16,22 +16,15 @@ struct globals {
char *pass;
FILE *fp0; // initial stdin
char *opt_charset;
- char *content_type;
};
#define G (*ptr_to_globals)
#define timeout (G.timeout )
#define verbose (G.verbose )
#define opts (G.opts )
-//#define user (G.user )
-//#define pass (G.pass )
-//#define fp0 (G.fp0 )
-//#define opt_charset (G.opt_charset)
-//#define content_type (G.content_type)
#define INIT_G() do { \
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
G.opt_charset = (char *)CONFIG_FEATURE_MIME_CHARSET; \
- G.content_type = (char *)"text/plain"; \
} while (0)
//char FAST_FUNC *parse_url(char *url, char **user, char **pass);
diff --git a/mailutils/makemime.c b/mailutils/makemime.c
index 4dc53a3..1dadd71 100644
--- a/mailutils/makemime.c
+++ b/mailutils/makemime.c
@@ -1,7 +1,6 @@
/* vi: set sw=4 ts=4: */
/*
* makemime: create MIME-encoded message
- * reformime: parse MIME-encoded message
*
* Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com>
*
@@ -133,21 +132,44 @@ Content-Transfer-Encoding: 7bit
//usage: "Create multipart MIME-encoded message from FILEs\n"
/* //usage: "Transfer encoding is base64, disposition is inline (not attachment)\n" */
//usage: "\n -o FILE Output. Default: stdout"
-//usage: "\n -a HDR Add header. Examples:"
+//usage: "\n -a HDR Add header(s). Examples:"
//usage: "\n \"From: user@host.org\", \"Date: `date -R`\""
-//usage: "\n -c CT Content type. Default: text/plain"
+//usage: "\n -c CT Content type. Default: application/octet-stream"
//usage: "\n -C CS Charset. Default: " CONFIG_FEATURE_MIME_CHARSET
/* //usage: "\n -e ENC Transfer encoding. Ignored. base64 is assumed" */
//usage: "\n"
//usage: "\nOther options are silently ignored"
+/*
+ * -c [Content-Type] should create just one MIME section
+ * with "Content-Type:", "Content-Transfer-Encoding:", and HDRs from "-a HDR".
+ * NB: without "Content-Disposition:" auto-added, unlike we do now
+ * NB2: -c has *optional* param which nevertheless _can_ be specified after a space :(
+ *
+ * -m [multipart/mixed] should create multipart MIME section
+ * with "Content-Type:", "Content-Transfer-Encoding:", and HDRs from "-a HDR",
+ * and add FILE to it _verbatim_:
+ * HEADERS
+ *
+ * --=_1_1321709112_1605
+ * FILE_CONTENTS
+ * --=_1_1321709112_1605
+ * without any encoding of FILE_CONTENTS. (Basically, it expects that FILE
+ * is the result of "makemime -c").
+ *
+ * -j MULTIPART_FILE1 SINGLE_FILE2 should output MULTIPART_FILE1 + SINGLE_FILE2
+ *
+ * Our current behavior is a mutant "-m + -c + -j" one: we create multipart MIME
+ * and we put "-c" encoded FILEs into many multipart sections.
+ */
+
int makemime_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int makemime_main(int argc UNUSED_PARAM, char **argv)
{
llist_t *opt_headers = NULL, *l;
const char *opt_output;
+ const char *content_type = "application/octet-stream";
#define boundary opt_output
-
enum {
OPT_c = 1 << 0, // create (non-multipart) section
OPT_e = 1 << 1, // Content-Transfer-Encoding. Ignored. Assumed base64
@@ -164,8 +186,8 @@ int makemime_main(int argc UNUSED_PARAM, char **argv)
// parse options
opt_complementary = "a::";
opts = getopt32(argv,
- "c:e:o:C:N:a", //:m:j:",
- &G.content_type, NULL, &opt_output, &G.opt_charset, NULL, &opt_headers //, NULL, NULL
+ "c:e:o:C:N:a:", // "m:j:",
+ &content_type, NULL, &opt_output, &G.opt_charset, NULL, &opt_headers //, NULL, NULL
);
//argc -= optind;
argv += optind;
@@ -202,7 +224,7 @@ int makemime_main(int argc UNUSED_PARAM, char **argv)
"Content-Disposition: inline; filename=\"%s\"\n"
"Content-Transfer-Encoding: base64\n"
, boundary
- , G.content_type
+ , content_type
, G.opt_charset
, bb_get_last_path_component_strip(*argv)
);
diff --git a/mailutils/reformime.c b/mailutils/reformime.c
index 5e28ef7..8e7d455 100644
--- a/mailutils/reformime.c
+++ b/mailutils/reformime.c
@@ -1,6 +1,5 @@
/* vi: set sw=4 ts=4: */
/*
- * makemime: create MIME-encoded message
* reformime: parse MIME-encoded message
*
* Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com>
diff --git a/mailutils/sendmail.c b/mailutils/sendmail.c
index e0aff20..aa381c6 100644
--- a/mailutils/sendmail.c
+++ b/mailutils/sendmail.c
@@ -26,18 +26,18 @@
//usage: "\n Examples:"
//usage: "\n -H 'exec openssl s_client -quiet -tls1 -starttls smtp"
//usage: "\n -connect smtp.gmail.com:25' <email.txt"
-//usage: "\n [4<username_and_passwd.txt | -au<username> -ap<password>]"
+//usage: "\n [4<username_and_passwd.txt | -auUSER -apPASS]"
//usage: "\n -H 'exec openssl s_client -quiet -tls1"
//usage: "\n -connect smtp.gmail.com:465' <email.txt"
-//usage: "\n [4<username_and_passwd.txt | -au<username> -ap<password>]"
+//usage: "\n [4<username_and_passwd.txt | -auUSER -apPASS]"
//usage: "\n -S HOST[:PORT] Server"
-//usage: "\n -au<username> Username for AUTH LOGIN"
-//usage: "\n -ap<password> Password for AUTH LOGIN"
-//usage: "\n -am<method> Authentication method. Ignored. LOGIN is implied"
+//usage: "\n -auUSER Username for AUTH LOGIN"
+//usage: "\n -apPASS Password for AUTH LOGIN"
+////usage: "\n -amMETHOD Authentication method. Ignored. LOGIN is implied"
//usage: "\n"
//usage: "\nOther options are silently ignored; -oi -t is implied"
//usage: IF_MAKEMIME(
-//usage: "\nUse makemime applet to create message with attachments"
+//usage: "\nUse makemime to create emails with attachments"
//usage: )
#include "libbb.h"
@@ -66,7 +66,7 @@ static int smtp_checkp(const char *fmt, const char *param, int code)
// if not equal -> die saying msg
while ((answer = xmalloc_fgetline(stdin)) != NULL) {
if (verbose)
- bb_error_msg("recv:'%.*s' %d", (int)(strchrnul(answer, '\r') - answer), answer, verbose);
+ bb_error_msg("recv:'%.*s'", (int)(strchrnul(answer, '\r') - answer), answer);
if (strlen(answer) <= 3 || '-' != answer[3])
break;
free(answer);
@@ -75,10 +75,11 @@ static int smtp_checkp(const char *fmt, const char *param, int code)
int n = atoi(answer);
if (timeout)
alarm(0);
- free(msg);
free(answer);
- if (-1 == code || n == code)
+ if (-1 == code || n == code) {
+ free(msg);
return n;
+ }
}
bb_error_msg_and_die("%s failed", msg);
}
@@ -176,11 +177,35 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
const char *args[] = { "sh", "-c", opt_connect, NULL };
// plug it in
launch_helper(args);
- // vanilla connection
+ // Now:
+ // our stdout will go to helper's stdin,
+ // helper's stdout will be available on our stdin.
+
+ // Wait for initial server message.
+ // If helper (such as openssl) invokes STARTTLS, the initial 220
+ // is swallowed by helper (and not repeated after TLS is initiated).
+ // We will send NOOP cmd to server and check the response.
+ // We should get 220+250 on plain connection, 250 on STARTTLSed session.
+ //
+ // The problem here is some servers delay initial 220 message,
+ // and consider client to be a spammer if it starts sending cmds
+ // before 220 reached it. The code below is unsafe in this regard:
+ // in non-STARTTLSed case, we potentially send NOOP before 220
+ // is sent by server.
+ // Ideas? (--delay SECS opt? --assume-starttls-helper opt?)
+ code = smtp_check("NOOP", -1);
+ if (code == 220)
+ // we got 220 - this is not STARTTLSed connection,
+ // eat 250 response to our NOOP
+ smtp_check(NULL, 250);
+ else
+ if (code != 250)
+ bb_error_msg_and_die("SMTP init failed");
} else {
+ // vanilla connection
int fd;
// host[:port] not explicitly specified? -> use $SMTPHOST
- // no $SMTPHOST ? -> use localhost
+ // no $SMTPHOST? -> use localhost
if (!(opts & OPT_S)) {
opt_connect = getenv("SMTPHOST");
if (!opt_connect)
@@ -191,25 +216,14 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
// and make ourselves a simple IO filter
xmove_fd(fd, STDIN_FILENO);
xdup2(STDIN_FILENO, STDOUT_FILENO);
- }
- // N.B. from now we know nothing about network :)
- // wait for initial server OK
- // N.B. if we used openssl the initial 220 answer is already swallowed during openssl TLS init procedure
- // so we need to kick the server to see whether we are ok
- code = smtp_check("NOOP", -1);
- // 220 on plain connection, 250 on openssl-helped TLS session
- if (220 == code)
- smtp_check(NULL, 250); // reread the code to stay in sync
- else if (250 != code)
- bb_error_msg_and_die("INIT failed");
+ // Wait for initial server 220 message
+ smtp_check(NULL, 220);
+ }
// we should start with modern EHLO
- if (250 != smtp_checkp("EHLO %s", domain, -1)) {
+ if (250 != smtp_checkp("EHLO %s", domain, -1))
smtp_checkp("HELO %s", domain, 250);
- }
- if (ENABLE_FEATURE_CLEAN_UP)
- free(domain);
// perform authentication
if (opts & OPT_a) {
@@ -224,7 +238,7 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
}
// set sender
- // N.B. we have here a very loosely defined algotythm
+ // N.B. we have here a very loosely defined algorythm
// since sendmail historically offers no means to specify secrets on cmdline.
// 1) server can require no authentication ->
// we must just provide a (possibly fake) reply address.
@@ -241,8 +255,6 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
// G.user = xuid2uname(getuid());
// opt_from = xasprintf("%s@%s", G.user, domain);
//}
- //if (ENABLE_FEATURE_CLEAN_UP)
- // free(domain);
smtp_checkp("MAIL FROM:<%s>", opt_from, 250);
// process message
@@ -269,29 +281,31 @@ int sendmail_main(int argc UNUSED_PARAM, char **argv)
// analyze headers
// To: or Cc: headers add recipients
- if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) {
- rcptto(sane_address(s+3));
- goto addheader;
- // Bcc: header adds blind copy (hidden) recipient
- } else if (0 == strncasecmp("Bcc:", s, 4)) {
- rcptto(sane_address(s+4));
- free(s);
- // N.B. Bcc: vanishes from headers!
-
- // other headers go verbatim
-
- // N.B. RFC2822 2.2.3 "Long Header Fields" allows for headers to occupy several lines.
- // Continuation is denoted by prefixing additional lines with whitespace(s).
- // Thanks (stefan.seyfried at googlemail.com) for pointing this out.
- } else if (strchr(s, ':') || (list && skip_whitespace(s) != s)) {
+ if (opts & OPT_t) {
+ if (0 == strncasecmp("To:", s, 3) || 0 == strncasecmp("Bcc:" + 1, s, 3)) {
+ rcptto(sane_address(s+3));
+ goto addheader;
+ }
+ // Bcc: header adds blind copy (hidden) recipient
+ if (0 == strncasecmp("Bcc:", s, 4)) {
+ rcptto(sane_address(s+4));
+ free(s);
+ continue; // N.B. Bcc: vanishes from headers!
+ }
+ }
+ if (strchr(s, ':') || (list && isspace(s[0]))) {
+ // other headers go verbatim
+ // N.B. RFC2822 2.2.3 "Long Header Fields" allows for headers to occupy several lines.
+ // Continuation is denoted by prefixing additional lines with whitespace(s).
+ // Thanks (stefan.seyfried at googlemail.com) for pointing this out.
addheader:
// N.B. we allow MAX_HEADERS generic headers at most to prevent attacks
if (MAX_HEADERS && ++nheaders >= MAX_HEADERS)
goto bail;
llist_add_to_end(&list, s);
- // a line without ":" (an empty line too, by definition) doesn't look like a valid header
- // so stop "analyze headers" mode
} else {
+ // a line without ":" (an empty line too, by definition) doesn't look like a valid header
+ // so stop "analyze headers" mode
reenter:
// put recipients specified on cmdline
while (*argv) {
diff --git a/miscutils/bbconfig.c b/miscutils/bbconfig.c
index e8be813..e5f4eb3 100644
--- a/miscutils/bbconfig.c
+++ b/miscutils/bbconfig.c
@@ -10,7 +10,7 @@
#include "libbb.h"
#include "bbconfigopts.h"
#if ENABLE_FEATURE_COMPRESS_BBCONFIG
-# include "archive.h"
+# include "bb_archive.h"
# include "bbconfigopts_bz2.h"
#endif
diff --git a/miscutils/conspy.c b/miscutils/conspy.c
index 433c3e8..1a46a43 100644
--- a/miscutils/conspy.c
+++ b/miscutils/conspy.c
@@ -16,7 +16,7 @@
//config:config CONSPY
//config: bool "conspy"
-//config: default n
+//config: default y
//config: select PLATFORM_LINUX
//config: help
//config: A text-mode VNC like program for Linux virtual terminals.
@@ -25,25 +25,31 @@
//config: or conspy -cs NUM poor man's GNU screen like
//usage:#define conspy_trivial_usage
-//usage: "[-vcsndf] [-x COL] [-y LINE] [CONSOLE_NO]"
+//usage: "[-vcsndfFQ] [-x COL] [-y LINE] [CONSOLE_NO]"
//usage:#define conspy_full_usage "\n\n"
//usage: "A text-mode VNC like program for Linux virtual consoles."
//usage: "\nTo exit, quickly press ESC 3 times."
//usage: "\n"
//usage: "\n -v Don't send keystrokes to the console"
-//usage: "\n -c Create missing devices in /dev"
+//usage: "\n -c Create missing /dev/{tty,vcsa}N"
//usage: "\n -s Open a SHELL session"
//usage: "\n -n Black & white"
//usage: "\n -d Dump console to stdout"
//usage: "\n -f Follow cursor"
+//usage: "\n -F Assume console is on a framebuffer device"
+//usage: "\n -Q Disable exit on ESC-ESC-ESC"
//usage: "\n -x COL Starting column"
//usage: "\n -y LINE Starting line"
#include "libbb.h"
#include <sys/kd.h>
-
#define ESC "\033"
+#define CURSOR_ON -1
+#define CURSOR_OFF 1
+
+#define DEV_TTY "/dev/tty"
+#define DEV_VCSA "/dev/vcsa"
struct screen_info {
unsigned char lines, cols, cursor_x, cursor_y;
@@ -72,19 +78,17 @@ struct globals {
unsigned col;
unsigned line;
smallint curoff; // unknown:0 cursor on:-1 cursor off:1
- char attrbuf[sizeof(ESC"[0;1;5;30;40m")];
+ char attrbuf[sizeof("0;1;5;30;40m")];
// remote console
struct screen_info remote;
// saved local tty terminfo
struct termios term_orig;
- char vcsa_name[sizeof("/dev/vcsaNN")];
+ char vcsa_name[sizeof(DEV_VCSA "NN")];
};
#define G (*ptr_to_globals)
#define INIT_G() do { \
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
- G.attrbuf[0] = '\033'; \
- G.attrbuf[1] = '['; \
G.width = G.height = UINT_MAX; \
G.last_attr--; \
} while (0)
@@ -92,18 +96,26 @@ struct globals {
enum {
FLAG_v, // view only
FLAG_c, // create device if need
+ FLAG_Q, // never exit
FLAG_s, // session
FLAG_n, // no colors
FLAG_d, // dump screen
FLAG_f, // follow cursor
+ FLAG_F, // framebuffer
};
#define FLAG(x) (1 << FLAG_##x)
#define BW (option_mask32 & FLAG(n))
+static void putcsi(const char *s)
+{
+ fputs(ESC"[", stdout);
+ fputs(s, stdout);
+}
+
static void clrscr(void)
{
// Home, clear till end of screen
- fputs(ESC"[1;1H" ESC"[J", stdout);
+ putcsi("1;1H" ESC"[J");
G.col = G.line = 0;
}
@@ -111,7 +123,7 @@ static void set_cursor(int state)
{
if (G.curoff != state) {
G.curoff = state;
- fputs(ESC"[?25", stdout);
+ putcsi("?25");
bb_putchar("h?l"[1 + state]);
}
}
@@ -125,18 +137,19 @@ static void gotoxy(int col, int line)
}
}
+static void cleanup(int code) NORETURN;
static void cleanup(int code)
{
- set_cursor(-1); // cursor on
+ set_cursor(CURSOR_ON);
tcsetattr(G.kbd_fd, TCSANOW, &G.term_orig);
if (ENABLE_FEATURE_CLEAN_UP) {
close(G.kbd_fd);
}
// Reset attributes
if (!BW)
- fputs(ESC"[0m", stdout);
+ putcsi("0m");
bb_putchar('\n');
- if (code > 1)
+ if (code > EXIT_FAILURE)
kill_myself_with_sig(code);
exit(code);
}
@@ -157,8 +170,8 @@ static void screen_read_close(void)
G.size = i;
G.data = xzalloc(2 * i);
}
- else if (G.size != i) {
- cleanup(1);
+ if (G.size != i) {
+ cleanup(EXIT_FAILURE);
}
data = G.data + G.current;
xread(vcsa_fd, data, G.size);
@@ -168,10 +181,15 @@ static void screen_read_close(void)
unsigned x = j - G.x; // if will catch j < G.x too
unsigned y = i - G.y; // if will catch i < G.y too
- if (CHAR(data) < ' ')
- CHAR(data) = ' ';
if (y >= G.height || x >= G.width)
DATA(data) = 0;
+ else {
+ uint8_t ch = CHAR(data);
+ if (ch < ' ')
+ CHAR(data) = ch | 0x40;
+ else if (ch > 0x7e)
+ CHAR(data) = '?';
+ }
}
}
}
@@ -179,10 +197,13 @@ static void screen_read_close(void)
static void screen_char(char *data)
{
if (!BW) {
+ uint8_t attr_diff;
uint8_t attr = ATTR(data);
- //uint8_t attr = ATTR(data) >> 1; // for framebuffer console
- uint8_t attr_diff = G.last_attr ^ attr;
+ if (option_mask32 & FLAG(F)) {
+ attr >>= 1;
+ }
+ attr_diff = G.last_attr ^ attr;
if (attr_diff) {
// Attribute layout for VGA compatible text videobuffer:
// blinking text
@@ -213,7 +234,7 @@ static void screen_char(char *data)
const uint8_t bg_mask = 0x70, blink_mask = 0x80;
char *ptr;
- ptr = G.attrbuf + 2; // skip "ESC ["
+ ptr = G.attrbuf;
// (G.last_attr & ~attr) has 1 only where
// G.last_attr has 1 but attr has 0.
@@ -244,12 +265,12 @@ static void screen_char(char *data)
if (attr_diff & bg_mask) {
*ptr++ = '4';
*ptr++ = color[(attr & bg_mask) >> 4];
- *ptr++ = ';';
+ ptr++; // last attribute
}
- if (ptr != G.attrbuf + 2) {
+ if (ptr != G.attrbuf) {
ptr[-1] = 'm';
*ptr = '\0';
- fputs(G.attrbuf, stdout);
+ putcsi(G.attrbuf);
}
}
}
@@ -292,11 +313,11 @@ static void curmove(void)
{
unsigned cx = G.remote.cursor_x - G.x;
unsigned cy = G.remote.cursor_y - G.y;
- int cursor = 1;
+ int cursor = CURSOR_OFF;
if (cx < G.width && cy < G.height) {
gotoxy(cx, cy);
- cursor = -1;
+ cursor = CURSOR_ON;
}
set_cursor(cursor);
}
@@ -341,7 +362,7 @@ static NOINLINE void start_shell_in_child(const char* tty_name)
int conspy_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int conspy_main(int argc UNUSED_PARAM, char **argv)
{
- char tty_name[sizeof("/dev/ttyNN")];
+ char tty_name[sizeof(DEV_TTY "NN")];
#define keybuf bb_common_bufsiz1
struct termios termbuf;
unsigned opts;
@@ -351,26 +372,28 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
static const char getopt_longopts[] ALIGN1 =
"viewonly\0" No_argument "v"
"createdevice\0" No_argument "c"
+ "neverquit\0" No_argument "Q"
"session\0" No_argument "s"
"nocolors\0" No_argument "n"
"dump\0" No_argument "d"
"follow\0" No_argument "f"
+ "framebuffer\0" No_argument "F"
;
applet_long_options = getopt_longopts;
#endif
INIT_G();
- strcpy(G.vcsa_name, "/dev/vcsa");
+ strcpy(G.vcsa_name, DEV_VCSA);
opt_complementary = "x+:y+"; // numeric params
- opts = getopt32(argv, "vcsndfx:y:", &G.x, &G.y);
+ opts = getopt32(argv, "vcQsndfFx:y:", &G.x, &G.y);
argv += optind;
ttynum = 0;
if (argv[0]) {
ttynum = xatou_range(argv[0], 0, 63);
- sprintf(G.vcsa_name + sizeof("/dev/vcsa")-1, "%u", ttynum);
+ sprintf(G.vcsa_name + sizeof(DEV_VCSA)-1, "%u", ttynum);
}
- sprintf(tty_name, "%s%u", "/dev/tty", ttynum);
+ sprintf(tty_name, "%s%u", DEV_TTY, ttynum);
if (opts & FLAG(c)) {
if ((opts & (FLAG(s)|FLAG(v))) != FLAG(v))
create_cdev_if_doesnt_exist(tty_name, makedev(4, ttynum));
@@ -481,7 +504,7 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
char *k;
case -1:
if (errno != EINTR)
- cleanup(1);
+ goto abort;
break;
case 0:
if (++G.nokeys >= 4)
@@ -492,14 +515,16 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
k = keybuf + G.key_count;
bytes_read = read(G.kbd_fd, k, sizeof(keybuf) - G.key_count);
if (bytes_read < 0)
- cleanup(1);
+ goto abort;
// Do exit processing
- for (i = 0; i < bytes_read; i++) {
- if (k[i] != '\033')
- G.escape_count = 0;
- else if (++G.escape_count >= 3)
- cleanup(0);
+ if (!(option_mask32 & FLAG(Q))) {
+ for (i = 0; i < bytes_read; i++) {
+ if (k[i] != '\033')
+ G.escape_count = -1;
+ if (++G.escape_count >= 3)
+ cleanup(EXIT_SUCCESS);
+ }
}
}
poll_timeout_ms = 250;
@@ -519,6 +544,7 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
if (result >= 0) {
char *p = keybuf;
+ G.ioerror_count = 0;
if (kbd_mode != K_XLATE && kbd_mode != K_UNICODE) {
G.key_count = 0; // scan code mode
}
@@ -534,16 +560,18 @@ int conspy_main(int argc UNUSED_PARAM, char **argv)
poll_timeout_ms = 20;
}
}
+ // We sometimes get spurious IO errors on the TTY
+ // as programs close and re-open it
+ else if (errno != EIO || ++G.ioerror_count > 4) {
+ if (ENABLE_FEATURE_CLEAN_UP)
+ close(handle);
+ goto abort;
+ }
// Close & re-open tty in case they have
// swapped virtual consoles
close(handle);
-
- // We sometimes get spurious IO errors on the TTY
- // as programs close and re-open it
- if (result >= 0)
- G.ioerror_count = 0;
- else if (errno != EIO || ++G.ioerror_count > 4)
- cleanup(1);
}
} /* while (1) */
+ abort:
+ cleanup(EXIT_FAILURE);
}
diff --git a/miscutils/fbsplash.c b/miscutils/fbsplash.c
index 51ba472..a2d3563 100644
--- a/miscutils/fbsplash.c
+++ b/miscutils/fbsplash.c
@@ -74,6 +74,43 @@ struct globals {
#define DEBUG_MESSAGE(...) ((void)0)
#endif
+/**
+ * Configure palette for RGB:332
+ */
+static void fb_setpal(int fd)
+{
+ struct fb_cmap cmap;
+ /* fb colors are 16 bit */
+ unsigned short red[256], green[256], blue[256];
+ unsigned i;
+
+ /* RGB:332 */
+ for (i = 0; i < 256; i++) {
+ /* Color is encoded in pixel value as rrrgggbb.
+ * 3-bit color is mapped to 16-bit one as:
+ * 000 -> 00000000 00000000
+ * 001 -> 00100100 10010010
+ * ...
+ * 011 -> 01101101 10110110
+ * 100 -> 10010010 01001001
+ * ...
+ * 111 -> 11111111 11111111
+ */
+ red[i] = (( i >> 5 ) * 0x9249) >> 2; // rrr * 00 10010010 01001001 >> 2
+ green[i] = (((i >> 2) & 0x7) * 0x9249) >> 2; // ggg * 00 10010010 01001001 >> 2
+ /* 2-bit color is easier: */
+ blue[i] = ( i & 0x3) * 0x5555; // bb * 01010101 01010101
+ }
+
+ cmap.start = 0;
+ cmap.len = 256;
+ cmap.red = red;
+ cmap.green = green;
+ cmap.blue = blue;
+ cmap.transp = 0;
+
+ xioctl(fd, FBIOPUTCMAP, &cmap);
+}
/**
* Open and initialize the framebuffer device
@@ -87,14 +124,27 @@ static void fb_open(const char *strfb_device)
xioctl(fbfd, FBIOGET_VSCREENINFO, &G.scr_var);
xioctl(fbfd, FBIOGET_FSCREENINFO, &G.scr_fix);
- if (G.scr_var.bits_per_pixel < 16 || G.scr_var.bits_per_pixel > 32)
+ switch (G.scr_var.bits_per_pixel) {
+ case 8:
+ fb_setpal(fbfd);
+ break;
+
+ case 16:
+ case 24:
+ case 32:
+ break;
+
+ default:
bb_error_msg_and_die("unsupported %u bpp", (int)G.scr_var.bits_per_pixel);
+ break;
+ }
+
G.bytes_per_pixel = (G.scr_var.bits_per_pixel + 7) >> 3;
// map the device in memory
G.addr = mmap(NULL,
- G.scr_var.xres * G.scr_var.yres * G.bytes_per_pixel,
- PROT_WRITE, MAP_SHARED, fbfd, 0);
+ (G.scr_fix.smem_len + PAGE_SIZE - 1) & (~(PAGE_SIZE - 1)),
+ PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);
if (G.addr == MAP_FAILED)
bb_perror_msg_and_die("mmap");
@@ -109,11 +159,17 @@ static void fb_open(const char *strfb_device)
*/
static unsigned fb_pixel_value(unsigned r, unsigned g, unsigned b)
{
+ if (G.bytes_per_pixel == 1) {
+ r = r & 0xe0; // 3-bit red
+ g = (g >> 3) & 0x1c; // 3-bit green
+ b = b >> 6; // 2-bit blue
+ return r + g + b;
+ }
if (G.bytes_per_pixel == 2) {
- r >>= 3; // 5-bit red
- g >>= 2; // 6-bit green
- b >>= 3; // 5-bit blue
- return b + (g << 5) + (r << (5+6));
+ r = (r & 0xf8) << 8; // 5-bit red
+ g = (g & 0xfc) << 3; // 6-bit green
+ b = b >> 3; // 5-bit blue
+ return r + g + b;
}
// RGB 888
return b + (g << 8) + (r << 16);
@@ -125,6 +181,9 @@ static unsigned fb_pixel_value(unsigned r, unsigned g, unsigned b)
static void fb_write_pixel(unsigned char *addr, unsigned pixel)
{
switch (G.bytes_per_pixel) {
+ case 1:
+ *addr = pixel;
+ break;
case 2:
*(uint16_t *)addr = pixel;
break;
@@ -154,8 +213,8 @@ static void fb_drawrectangle(void)
thispix = fb_pixel_value(nred, ngreen, nblue);
// horizontal lines
- ptr1 = G.addr + (G.nbar_posy * G.scr_var.xres + G.nbar_posx) * G.bytes_per_pixel;
- ptr2 = G.addr + ((G.nbar_posy + G.nbar_height - 1) * G.scr_var.xres + G.nbar_posx) * G.bytes_per_pixel;
+ ptr1 = G.addr + G.nbar_posy * G.scr_fix.line_length + G.nbar_posx * G.bytes_per_pixel;
+ ptr2 = G.addr + (G.nbar_posy + G.nbar_height - 1) * G.scr_fix.line_length + G.nbar_posx * G.bytes_per_pixel;
cnt = G.nbar_width - 1;
do {
fb_write_pixel(ptr1, thispix);
@@ -165,14 +224,14 @@ static void fb_drawrectangle(void)
} while (--cnt >= 0);
// vertical lines
- ptr1 = G.addr + (G.nbar_posy * G.scr_var.xres + G.nbar_posx) * G.bytes_per_pixel;
- ptr2 = G.addr + (G.nbar_posy * G.scr_var.xres + G.nbar_posx + G.nbar_width - 1) * G.bytes_per_pixel;
+ ptr1 = G.addr + G.nbar_posy * G.scr_fix.line_length + G.nbar_posx * G.bytes_per_pixel;
+ ptr2 = G.addr + G.nbar_posy * G.scr_fix.line_length + (G.nbar_posx + G.nbar_width - 1) * G.bytes_per_pixel;
cnt = G.nbar_height - 1;
do {
fb_write_pixel(ptr1, thispix);
fb_write_pixel(ptr2, thispix);
- ptr1 += G.scr_var.xres * G.bytes_per_pixel;
- ptr2 += G.scr_var.xres * G.bytes_per_pixel;
+ ptr1 += G.scr_fix.line_length;
+ ptr2 += G.scr_fix.line_length;
} while (--cnt >= 0);
}
@@ -195,7 +254,7 @@ static void fb_drawfullrectangle(int nx1pos, int ny1pos, int nx2pos, int ny2pos,
cnt1 = ny2pos - ny1pos;
nypos = ny1pos;
do {
- ptr = G.addr + (nypos * G.scr_var.xres + nx1pos) * G.bytes_per_pixel;
+ ptr = G.addr + nypos * G.scr_fix.line_length + nx1pos * G.bytes_per_pixel;
cnt2 = nx2pos - nx1pos;
do {
fb_write_pixel(ptr, thispix);
@@ -213,14 +272,15 @@ static void fb_drawfullrectangle(int nx1pos, int ny1pos, int nx2pos, int ny2pos,
*/
static void fb_drawprogressbar(unsigned percent)
{
- int i, left_x, top_y, width, height;
+ int left_x, top_y, pos_x;
+ unsigned width, height;
// outer box
left_x = G.nbar_posx;
top_y = G.nbar_posy;
width = G.nbar_width - 1;
height = G.nbar_height - 1;
- if ((height | width) < 0)
+ if ((int)(height | width) < 0)
return;
// NB: "width" of 1 actually makes rect with width of 2!
fb_drawrectangle();
@@ -230,30 +290,37 @@ static void fb_drawprogressbar(unsigned percent)
top_y++;
width -= 2;
height -= 2;
- if ((height | width) < 0)
+ if ((int)(height | width) < 0)
return;
- fb_drawfullrectangle(
- left_x, top_y,
- left_x + width, top_y + height,
- G.nbar_colr, G.nbar_colg, G.nbar_colb);
+ pos_x = left_x;
if (percent > 0) {
+ int y;
+ unsigned i;
+
// actual progress bar
- width = width * percent / 100;
+ pos_x += (unsigned)(width * percent) / 100;
+
+ y = top_y;
i = height;
if (height == 0)
height++; // divide by 0 is bad
while (i >= 0) {
// draw one-line thick "rectangle"
// top line will have gray lvl 200, bottom one 100
- unsigned gray_level = 100 + i*100/height;
+ unsigned gray_level = 100 + i*100 / height;
fb_drawfullrectangle(
- left_x, top_y, left_x + width, top_y,
+ left_x, y, pos_x, y,
gray_level, gray_level, gray_level);
- top_y++;
+ y++;
i--;
}
}
+
+ fb_drawfullrectangle(
+ pos_x, top_y,
+ left_x + width, top_y + height,
+ G.nbar_colr, G.nbar_colg, G.nbar_colb);
}
@@ -385,7 +452,7 @@ int fbsplash_main(int argc UNUSED_PARAM, char **argv)
INIT_G();
// parse command line options
- fb_device = "/dev/fb0";
+ fb_device = "/dev/graphics/fb0";
cfg_filename = NULL;
fifo_filename = NULL;
bCursorOff = 1 & getopt32(argv, "cs:d:i:f:",
diff --git a/miscutils/fbsplash.cfg b/miscutils/fbsplash.cfg
index b6cf607..1e93703 100644
--- a/miscutils/fbsplash.cfg
+++ b/miscutils/fbsplash.cfg
@@ -1,6 +1,6 @@
# progress bar position
-BAR_LEFT=170
-BAR_TOP=300
+BAR_LEFT=90
+BAR_TOP=70
BAR_WIDTH=300
BAR_HEIGHT=20
# progress bar color
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c
index f30e7de..a97f3e7 100644
--- a/miscutils/hdparm.c
+++ b/miscutils/hdparm.c
@@ -433,6 +433,7 @@ struct BUG_G_too_big {
#define hwif_data (G.hwif_data )
#define hwif_ctrl (G.hwif_ctrl )
#define hwif_irq (G.hwif_irq )
+#define INIT_G() do { } while (0)
/* Busybox messages and functions */
@@ -2059,6 +2060,8 @@ int hdparm_main(int argc, char **argv)
int c;
int flagcount = 0;
+ INIT_G();
+
while ((c = getopt(argc, argv, hdparm_options)) >= 0) {
flagcount++;
IF_FEATURE_HDPARM_GET_IDENTITY(get_IDentity |= (c == 'I'));
diff --git a/miscutils/inotifyd.c b/miscutils/inotifyd.c
index b64e0ab..7a1a6a2 100644
--- a/miscutils/inotifyd.c
+++ b/miscutils/inotifyd.c
@@ -33,6 +33,7 @@
//usage: "Run PROG on filesystem changes."
//usage: "\nWhen a filesystem event matching MASK occurs on FILEn,"
//usage: "\nPROG ACTUAL_EVENTS FILEn [SUBFILE] is run."
+//usage: "\nIf PROG is -, events are sent to stdout."
//usage: "\nEvents:"
//usage: "\n a File is accessed"
//usage: "\n c File is modified"
@@ -177,12 +178,20 @@ int inotifyd_main(int argc, char **argv)
*s++ = mask_names[i];
}
*s = '\0';
-// bb_error_msg("exec %s %08X\t%s\t%s\t%s", args[0],
-// ie->mask, events, watches[ie->wd], ie->len ? ie->name : "");
- args[1] = events;
- args[2] = watches[ie->wd];
- args[3] = ie->len ? ie->name : NULL;
- spawn_and_wait((char **)args);
+ if (LONE_CHAR(args[0], '-')) {
+ /* "inotifyd - FILE": built-in echo */
+ printf(ie->len ? "%s\t%s\t%s\n" : "%s\t%s\n", events,
+ watches[ie->wd],
+ ie->name);
+ fflush(stdout);
+ } else {
+// bb_error_msg("exec %s %08X\t%s\t%s\t%s", args[0],
+// ie->mask, events, watches[ie->wd], ie->len ? ie->name : "");
+ args[1] = events;
+ args[2] = watches[ie->wd];
+ args[3] = ie->len ? ie->name : NULL;
+ spawn_and_wait((char **)args);
+ }
// we are done if all files got final x event
if (ie->mask & 0x8000) {
if (--argc <= 0)
diff --git a/miscutils/less.c b/miscutils/less.c
index 045fd2d..f0187bf 100644
--- a/miscutils/less.c
+++ b/miscutils/less.c
@@ -42,14 +42,11 @@
//config: brackets, facilitating programming.
//config:
//config:config FEATURE_LESS_FLAGS
-//config: bool "Enable extra flags"
+//config: bool "Enable -m/-M"
//config: default y
//config: depends on LESS
//config: help
-//config: The extra flags provided do the following:
-//config:
-//config: The -M flag enables a more sophisticated status line.
-//config: The -m flag enables a simpler status line with a percentage.
+//config: The -M/-m flag enables a more sophisticated status line.
//config:
//config:config FEATURE_LESS_MARKS
//config: bool "Enable marks"
@@ -101,15 +98,17 @@
//config: Enables "-N" command.
//usage:#define less_trivial_usage
-//usage: "[-EMNmh~I?] [FILE]..."
+//usage: "[-E" IF_FEATURE_LESS_FLAGS("Mm") "Nh~I?] [FILE]..."
//usage:#define less_full_usage "\n\n"
//usage: "View FILE (or stdin) one screenful at a time\n"
//usage: "\n -E Quit once the end of a file is reached"
+//usage: IF_FEATURE_LESS_FLAGS(
//usage: "\n -M,-m Display status line with line numbers"
//usage: "\n and percentage through the file"
+//usage: )
//usage: "\n -N Prefix line number to each line"
//usage: "\n -I Ignore case in all searches"
-//usage: "\n -~ Suppress ~s displayed past the end of the file"
+//usage: "\n -~ Suppress ~s displayed past EOF"
#include <sched.h> /* sched_yield() */
diff --git a/miscutils/man.c b/miscutils/man.c
index 3bf7e84..6114663 100644
--- a/miscutils/man.c
+++ b/miscutils/man.c
@@ -30,16 +30,6 @@ echo ".pl \n(nlu+10"
*/
-#if ENABLE_FEATURE_SEAMLESS_LZMA
-#define Z_SUFFIX ".lzma"
-#elif ENABLE_FEATURE_SEAMLESS_BZ2
-#define Z_SUFFIX ".bz2"
-#elif ENABLE_FEATURE_SEAMLESS_GZ
-#define Z_SUFFIX ".gz"
-#else
-#define Z_SUFFIX ""
-#endif
-
static int show_manpage(const char *pager, char *man_filename, int man, int level);
static int run_pipe(const char *pager, char *man_filename, int man, int level)
@@ -102,7 +92,7 @@ static int run_pipe(const char *pager, char *man_filename, int man, int level)
/* Links do not have .gz extensions, even if manpage
* is compressed */
- man_filename = xasprintf("%s/%s" Z_SUFFIX, man_filename, linkname);
+ man_filename = xasprintf("%s/%s", man_filename, linkname);
free(line);
/* Note: we leak "new" man_filename string as well... */
if (show_manpage(pager, man_filename, man, level + 1))
@@ -124,32 +114,37 @@ static int run_pipe(const char *pager, char *man_filename, int man, int level)
return 1;
}
-/* man_filename is of the form "/dir/dir/dir/name.s" Z_SUFFIX */
+/* man_filename is of the form "/dir/dir/dir/name.s" */
static int show_manpage(const char *pager, char *man_filename, int man, int level)
{
+#if SEAMLESS_COMPRESSION
+ /* We leak this allocation... */
+ char *filename_with_zext = xasprintf("%s.lzma", man_filename);
+ char *ext = strrchr(filename_with_zext, '.') + 1;
+#endif
+
#if ENABLE_FEATURE_SEAMLESS_LZMA
+ if (run_pipe(pager, filename_with_zext, man, level))
+ return 1;
+#endif
+#if ENABLE_FEATURE_SEAMLESS_XZ
+ strcpy(ext, "xz");
if (run_pipe(pager, man_filename, man, level))
return 1;
#endif
-
#if ENABLE_FEATURE_SEAMLESS_BZ2
-#if ENABLE_FEATURE_SEAMLESS_LZMA
- strcpy(strrchr(man_filename, '.') + 1, "bz2");
-#endif
+ strcpy(ext, "bz2");
if (run_pipe(pager, man_filename, man, level))
return 1;
#endif
-
#if ENABLE_FEATURE_SEAMLESS_GZ
-#if ENABLE_FEATURE_SEAMLESS_LZMA || ENABLE_FEATURE_SEAMLESS_BZ2
- strcpy(strrchr(man_filename, '.') + 1, "gz");
-#endif
+ strcpy(ext, "gz");
if (run_pipe(pager, man_filename, man, level))
return 1;
#endif
-#if ENABLE_FEATURE_SEAMLESS_LZMA || ENABLE_FEATURE_SEAMLESS_BZ2 || ENABLE_FEATURE_SEAMLESS_GZ
- *strrchr(man_filename, '.') = '\0';
+#if SEAMLESS_COMPRESSION
+ ext[-1] = '\0';
#endif
if (run_pipe(pager, man_filename, man, level))
return 1;
@@ -262,7 +257,7 @@ int man_main(int argc UNUSED_PARAM, char **argv)
/* Search for cat, then man page */
while (cat0man1 < 2) {
int found_here;
- man_filename = xasprintf("%s/%s%.*s/%s.%.*s" Z_SUFFIX,
+ man_filename = xasprintf("%s/%s%.*s/%s.%.*s",
cur_path,
"cat\0man" + (cat0man1 * 4),
sect_len, cur_sect,
diff --git a/miscutils/nandwrite.c b/miscutils/nandwrite.c
index 562a342..2ba6e3f 100644
--- a/miscutils/nandwrite.c
+++ b/miscutils/nandwrite.c
@@ -8,26 +8,26 @@
* TODO: add support for large (>4GB) MTD devices
*/
-//applet:IF_NANDWRITE(APPLET(nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP))
-//applet:IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, nanddump))
-
-//kbuild:lib-$(CONFIG_NANDWRITE) += nandwrite.o
-//kbuild:lib-$(CONFIG_NANDDUMP) += nandwrite.o
-
//config:config NANDWRITE
//config: bool "nandwrite"
-//config: default n
+//config: default y
//config: select PLATFORM_LINUX
//config: help
//config: Write to the specified MTD device, with bad blocks awareness
//config:
//config:config NANDDUMP
//config: bool "nanddump"
-//config: default n
+//config: default y
//config: select PLATFORM_LINUX
//config: help
//config: Dump the content of raw NAND chip
+//applet:IF_NANDWRITE(APPLET(nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP))
+//applet:IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, nanddump))
+
+//kbuild:lib-$(CONFIG_NANDWRITE) += nandwrite.o
+//kbuild:lib-$(CONFIG_NANDDUMP) += nandwrite.o
+
//usage:#define nandwrite_trivial_usage
//usage: "[-p] [-s ADDR] MTD_DEVICE [FILE]"
//usage:#define nandwrite_full_usage "\n\n"
diff --git a/miscutils/runlevel.c b/miscutils/runlevel.c
index 9d38b79..76231df 100644
--- a/miscutils/runlevel.c
+++ b/miscutils/runlevel.c
@@ -11,7 +11,7 @@
*
* initially busyboxified by Bernhard Reutner-Fischer
*/
-
+
//usage:#define runlevel_trivial_usage
//usage: "[FILE]"
//usage:#define runlevel_full_usage "\n\n"
diff --git a/miscutils/rx.c b/miscutils/rx.c
index e122577..af59732 100644
--- a/miscutils/rx.c
+++ b/miscutils/rx.c
@@ -108,12 +108,10 @@ static int receive(/*int read_fd, */int file_fd)
}
}
/* Write previously received block */
- if (blockLength) {
- errno = 0;
- if (full_write(file_fd, blockBuf, blockLength) != blockLength) {
- bb_perror_msg("can't write to file");
- goto fatal;
- }
+ errno = 0;
+ if (full_write(file_fd, blockBuf, blockLength) != blockLength) {
+ bb_perror_msg(bb_msg_write_error);
+ goto fatal;
}
timeout = TIMEOUT;
@@ -155,23 +153,20 @@ static int receive(/*int read_fd, */int file_fd)
blockBuf[i] = cc;
}
+ cksum_or_crc = read_byte(TIMEOUT);
+ if (cksum_or_crc < 0)
+ goto timeout;
if (do_crc) {
- cksum_or_crc = read_byte(TIMEOUT);
- if (cksum_or_crc < 0)
- goto timeout;
cksum_or_crc = (cksum_or_crc << 8) | read_byte(TIMEOUT);
if (cksum_or_crc < 0)
goto timeout;
- } else {
- cksum_or_crc = read_byte(TIMEOUT);
- if (cksum_or_crc < 0)
- goto timeout;
}
if (blockNo == ((wantBlockNo - 1) & 0xff)) {
/* a repeat of the last block is ok, just ignore it. */
/* this also ignores the initial block 0 which is */
/* meta data. */
+ blockLength = 0;
goto next;
}
if (blockNo != (wantBlockNo & 0xff)) {
@@ -212,6 +207,7 @@ static int receive(/*int read_fd, */int file_fd)
continue;
error:
timeout:
+ blockLength = 0;
errors++;
if (errors == MAXERRORS) {
/* Abort */
diff --git a/miscutils/ubi_tools.c b/miscutils/ubi_tools.c
index 2a426db..dd99a44 100644
--- a/miscutils/ubi_tools.c
+++ b/miscutils/ubi_tools.c
@@ -60,6 +60,10 @@
//kbuild:lib-$(CONFIG_UBIUPDATEVOL) += ubi_tools.o
#include "libbb.h"
+/* Some versions of kernel have broken headers, need this hack */
+#ifndef __packed
+# define __packed __attribute__((packed))
+#endif
#include <mtd/ubi-user.h>
#define OPTION_M (1 << 0)
diff --git a/modutils/modprobe-small.c b/modutils/modprobe-small.c
index cd6718d..9df0803 100644
--- a/modutils/modprobe-small.c
+++ b/modutils/modprobe-small.c
@@ -818,7 +818,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
opt_complementary = "-1";
/* only -q (quiet) and -r (rmmod),
* the rest are accepted and ignored (compat) */
- getopt32(argv, "qrfsvw");
+ getopt32(argv, "qrfsvwb");
argv += optind;
/* are we rmmod? -> simulate modprobe -r */
diff --git a/modutils/modprobe.c b/modutils/modprobe.c
index 064fa30..7ea5a11 100644
--- a/modutils/modprobe.c
+++ b/modutils/modprobe.c
@@ -101,12 +101,15 @@
//usage: )
//usage:#endif /* !ENABLE_MODPROBE_SMALL */
-/* Note that usage text doesn't document various 2.4 options
- * we pull in through INSMOD_OPTS define */
-#define MODPROBE_OPTS "alrD" IF_FEATURE_MODPROBE_BLACKLIST("b")
+/* Note: usage text doesn't document various 2.4 options
+ * we pull in through INSMOD_OPTS define
+ * Note2: -b is always accepted, but if !FEATURE_MODPROBE_BLACKLIST,
+ * it is a no-op.
+ */
+#define MODPROBE_OPTS "alrDb"
/* -a and -D _are_ in fact compatible */
#define MODPROBE_COMPLEMENTARY ("q-v:v-q:l--arD:r--alD:a--lr:D--rl")
-//#define MODPROBE_OPTS "acd:lnrt:C:" IF_FEATURE_MODPROBE_BLACKLIST("b")
+//#define MODPROBE_OPTS "acd:lnrt:C:b"
//#define MODPROBE_COMPLEMENTARY "q-v:v-q:l--acr:a--lr:r--al"
enum {
OPT_INSERT_ALL = (INSMOD_OPT_UNUSED << 0), /* a */
@@ -133,10 +136,8 @@ static const char modprobe_longopts[] ALIGN1 =
/* module-init-tools 3.11.1 has only long opt --show-depends
* but no short -D, we provide long opt for scripts which
* were written for 3.11.1: */
- "show-depends\0" No_argument "D"
- // IF_FEATURE_MODPROBE_BLACKLIST(
+ "show-depends\0" No_argument "D"
// "use-blacklist\0" No_argument "b"
- // )
;
#endif
diff --git a/modutils/modutils-24.c b/modutils/modutils-24.c
index bbc54e3..12cb75c 100644
--- a/modutils/modutils-24.c
+++ b/modutils/modutils-24.c
@@ -60,7 +60,6 @@
#include "libbb.h"
#include "modutils.h"
-#include <libgen.h>
#include <sys/utsname.h>
#if ENABLE_FEATURE_INSMOD_LOADINKMEM
diff --git a/networking/Config.src b/networking/Config.src
index 8aeba0e..fb7dca7 100644
--- a/networking/Config.src
+++ b/networking/Config.src
@@ -199,14 +199,22 @@ config FEATURE_HTTPD_BASIC_AUTH
help
Utilizes password settings from /etc/httpd.conf for basic
authentication on a per url basis.
+ Example for httpd.conf file:
+ /adm:toor:PaSsWd
config FEATURE_HTTPD_AUTH_MD5
bool "Support MD5 crypted passwords for http Authentication"
default y
depends on FEATURE_HTTPD_BASIC_AUTH
help
- Enables basic per URL authentication from /etc/httpd.conf
- using md5 passwords.
+ Enables encrypted passwords, and wildcard user/passwords
+ in httpd.conf file.
+ User '*' means 'any system user name is ok',
+ password of '*' means 'use system password for this user'
+ Examples:
+ /adm:toor:$1$P/eKnWXS$aI1aPGxT.dJD5SzqAKWrF0
+ /adm:root:*
+ /wiki:*:*
config FEATURE_HTTPD_CGI
bool "Support Common Gateway Interface (CGI)"
@@ -223,8 +231,8 @@ config FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
help
This option enables support for running scripts through an
interpreter. Turn this on if you want PHP scripts to work
- properly. You need to supply an additional line in your httpd
- config file:
+ properly. You need to supply an additional line in your
+ httpd.conf file:
*.php:/path/to/your/php
config FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV
diff --git a/networking/ftpd.c b/networking/ftpd.c
index e38138c..1c97df5 100644
--- a/networking/ftpd.c
+++ b/networking/ftpd.c
@@ -1179,8 +1179,7 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv)
#endif
if (argv[optind]) {
- xchdir(argv[optind]);
- chroot(".");
+ xchroot(argv[optind]);
}
//umask(077); - admin can set umask before starting us
diff --git a/networking/ftpgetput.c b/networking/ftpgetput.c
index eae1dd0..8ab078f 100644
--- a/networking/ftpgetput.c
+++ b/networking/ftpgetput.c
@@ -16,37 +16,37 @@
//usage:#define ftpget_trivial_usage
//usage: "[OPTIONS] HOST [LOCAL_FILE] REMOTE_FILE"
//usage:#define ftpget_full_usage "\n\n"
-//usage: "Retrieve a remote file via FTP\n"
+//usage: "Download a file via FTP\n"
//usage: IF_FEATURE_FTPGETPUT_LONG_OPTIONS(
-//usage: "\n -c,--continue Continue previous transfer"
-//usage: "\n -v,--verbose Verbose"
-//usage: "\n -u,--username Username"
-//usage: "\n -p,--password Password"
-//usage: "\n -P,--port Port number"
+//usage: "\n -c,--continue Continue previous transfer"
+//usage: "\n -v,--verbose Verbose"
+//usage: "\n -u,--username USER Username"
+//usage: "\n -p,--password PASS Password"
+//usage: "\n -P,--port NUM Port"
//usage: )
//usage: IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS(
//usage: "\n -c Continue previous transfer"
//usage: "\n -v Verbose"
-//usage: "\n -u Username"
-//usage: "\n -p Password"
-//usage: "\n -P Port number"
+//usage: "\n -u USER Username"
+//usage: "\n -p PASS Password"
+//usage: "\n -P NUM Port"
//usage: )
//usage:
//usage:#define ftpput_trivial_usage
//usage: "[OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE"
//usage:#define ftpput_full_usage "\n\n"
-//usage: "Store a local file on a remote machine via FTP\n"
+//usage: "Upload a file to a FTP server\n"
//usage: IF_FEATURE_FTPGETPUT_LONG_OPTIONS(
-//usage: "\n -v,--verbose Verbose"
-//usage: "\n -u,--username Username"
-//usage: "\n -p,--password Password"
-//usage: "\n -P,--port Port number"
+//usage: "\n -v,--verbose Verbose"
+//usage: "\n -u,--username USER Username"
+//usage: "\n -p,--password PASS Password"
+//usage: "\n -P,--port NUM Port"
//usage: )
//usage: IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS(
//usage: "\n -v Verbose"
-//usage: "\n -u Username"
-//usage: "\n -p Password"
-//usage: "\n -P Port number"
+//usage: "\n -u USER Username"
+//usage: "\n -p PASS Password"
+//usage: "\n -P NUM Port number"
//usage: )
#include "libbb.h"
diff --git a/networking/hostname.c b/networking/hostname.c
index a4c613e..5209bc8 100644
--- a/networking/hostname.c
+++ b/networking/hostname.c
@@ -153,7 +153,7 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
if (hp->h_length == sizeof(struct in_addr)) {
struct in_addr **h_addr_list = (struct in_addr **)hp->h_addr_list;
while (*h_addr_list) {
- printf("%s ", inet_ntoa(**h_addr_list));
+ printf(h_addr_list[1] ? "%s " : "%s", inet_ntoa(**h_addr_list));
h_addr_list++;
}
bb_putchar('\n');
diff --git a/networking/httpd.c b/networking/httpd.c
index ba5eeba..12218a0 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -54,6 +54,8 @@
* /cgi-bin:foo:bar # Require user foo, pwd bar on urls starting with /cgi-bin/
* /adm:admin:setup # Require user admin, pwd setup on urls starting with /adm/
* /adm:toor:PaSsWd # or user toor, pwd PaSsWd on urls starting with /adm/
+ * /adm:root:* # or user root, pwd from /etc/passwd on urls starting with /adm/
+ * /wiki:*:* # or any user from /etc/passwd with according pwd on urls starting with /wiki/
* .au:audio/basic # additional mime type for audio.au files
* *.php:/path/php # run xxx.php through an interpreter
*
@@ -123,6 +125,14 @@
//usage: "\n -d STRING URL decode STRING"
#include "libbb.h"
+#if ENABLE_PAM
+/* PAM may include <locale.h>. We may need to undefine bbox's stub define: */
+# undef setlocale
+/* For some obscure reason, PAM is not in pam/xxx, but in security/xxx.
+ * Apparently they like to confuse people. */
+# include <security/pam_appl.h>
+# include <security/pam_misc.h>
+#endif
#if ENABLE_FEATURE_HTTPD_USE_SENDFILE
# include <sys/sendfile.h>
#endif
@@ -338,7 +348,7 @@ struct globals {
#define range_len (G.range_len )
#else
enum {
- range_start = 0,
+ range_start = -1,
range_end = MAXINT(off_t) - 1,
range_len = MAXINT(off_t),
};
@@ -360,6 +370,7 @@ enum {
#define INIT_G() do { \
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
IF_FEATURE_HTTPD_BASIC_AUTH(g_realm = "Web Server Authentication";) \
+ IF_FEATURE_HTTPD_RANGES(range_start = -1;) \
bind_addr_or_port = "80"; \
index_page = index_html; \
file_size = -1; \
@@ -820,78 +831,6 @@ static char *encodeString(const char *string)
}
#endif
-/*
- * Given a URL encoded string, convert it to plain ascii.
- * Since decoding always makes strings smaller, the decode is done in-place.
- * Thus, callers should xstrdup() the argument if they do not want the
- * argument modified. The return is the original pointer, allowing this
- * function to be easily used as arguments to other functions.
- *
- * string The first string to decode.
- * option_d 1 if called for httpd -d
- *
- * Returns a pointer to the decoded string (same as input).
- */
-static unsigned hex_to_bin(unsigned char c)
-{
- unsigned v;
-
- v = c - '0';
- if (v <= 9)
- return v;
- /* c | 0x20: letters to lower case, non-letters
- * to (potentially different) non-letters */
- v = (unsigned)(c | 0x20) - 'a';
- if (v <= 5)
- return v + 10;
- return ~0;
-/* For testing:
-void t(char c) { printf("'%c'(%u) %u\n", c, c, hex_to_bin(c)); }
-int main() { t(0x10); t(0x20); t('0'); t('9'); t('A'); t('F'); t('a'); t('f');
-t('0'-1); t('9'+1); t('A'-1); t('F'+1); t('a'-1); t('f'+1); return 0; }
-*/
-}
-static char *decodeString(char *orig, int option_d)
-{
- /* note that decoded string is always shorter than original */
- char *string = orig;
- char *ptr = string;
- char c;
-
- while ((c = *ptr++) != '\0') {
- unsigned v;
-
- if (option_d && c == '+') {
- *string++ = ' ';
- continue;
- }
- if (c != '%') {
- *string++ = c;
- continue;
- }
- v = hex_to_bin(ptr[0]);
- if (v > 15) {
- bad_hex:
- if (!option_d)
- return NULL;
- *string++ = '%';
- continue;
- }
- v = (v * 16) | hex_to_bin(ptr[1]);
- if (v > 255)
- goto bad_hex;
- if (!option_d && (v == '/' || v == '\0')) {
- /* caller takes it as indication of invalid
- * (dangerous wrt exploits) chars */
- return orig + 1;
- }
- *string++ = v;
- ptr += 2;
- }
- *string = '\0';
- return orig;
-}
-
#if ENABLE_FEATURE_HTTPD_BASIC_AUTH
/*
* Decode a base64 data stream as per rfc1521.
@@ -1327,18 +1266,21 @@ static void setenv1(const char *name, const char *value)
*
* Parameters:
* const char *url The requested URL (with leading /).
+ * const char *orig_uri The original URI before rewriting (if any)
* int post_len Length of the POST body.
* const char *cookie For set HTTP_COOKIE.
* const char *content_type For set CONTENT_TYPE.
*/
static void send_cgi_and_exit(
const char *url,
+ const char *orig_uri,
const char *request,
int post_len,
const char *cookie,
const char *content_type) NORETURN;
static void send_cgi_and_exit(
const char *url,
+ const char *orig_uri,
const char *request,
int post_len,
const char *cookie,
@@ -1346,7 +1288,7 @@ static void send_cgi_and_exit(
{
struct fd_pair fromCgi; /* CGI -> httpd pipe */
struct fd_pair toCgi; /* httpd -> CGI pipe */
- char *script;
+ char *script, *last_slash;
int pid;
/* Make a copy. NB: caller guarantees:
@@ -1360,22 +1302,25 @@ static void send_cgi_and_exit(
*/
/* Check for [dirs/]script.cgi/PATH_INFO */
- script = (char*)url;
+ last_slash = script = (char*)url;
while ((script = strchr(script + 1, '/')) != NULL) {
+ int dir;
*script = '\0';
- if (!is_directory(url + 1, 1, NULL)) {
+ dir = is_directory(url + 1, /*followlinks:*/ 1);
+ *script = '/';
+ if (!dir) {
/* not directory, found script.cgi/PATH_INFO */
- *script = '/';
break;
}
- *script = '/'; /* is directory, find next '/' */
+ /* is directory, find next '/' */
+ last_slash = script;
}
setenv1("PATH_INFO", script); /* set to /PATH_INFO or "" */
setenv1("REQUEST_METHOD", request);
if (g_query) {
- putenv(xasprintf("%s=%s?%s", "REQUEST_URI", url, g_query));
+ putenv(xasprintf("%s=%s?%s", "REQUEST_URI", orig_uri, g_query));
} else {
- setenv1("REQUEST_URI", url);
+ setenv1("REQUEST_URI", orig_uri);
}
if (script != NULL)
*script = '\0'; /* cut off /PATH_INFO */
@@ -1449,7 +1394,7 @@ static void send_cgi_and_exit(
log_and_exit();
}
- if (!pid) {
+ if (pid == 0) {
/* Child process */
char *argv[3];
@@ -1465,7 +1410,7 @@ static void send_cgi_and_exit(
/* dup2(1, 2); */
/* Chdiring to script's dir */
- script = strrchr(url, '/');
+ script = last_slash;
if (script != url) { /* paranoia */
*script = '\0';
if (chdir(url + 1) != 0) {
@@ -1645,18 +1590,18 @@ static NOINLINE void send_file_and_exit(const char *url, int what)
if (what == SEND_BODY /* err pages and ranges don't mix */
|| content_gzip /* we are sending compressed page: can't do ranges */ ///why?
) {
- range_start = 0;
+ range_start = -1;
}
range_len = MAXINT(off_t);
- if (range_start) {
- if (!range_end) {
+ if (range_start >= 0) {
+ if (!range_end || range_end > file_size - 1) {
range_end = file_size - 1;
}
if (range_end < range_start
|| lseek(fd, range_start, SEEK_SET) != range_start
) {
lseek(fd, 0, SEEK_SET);
- range_start = 0;
+ range_start = -1;
} else {
range_len = range_end - range_start + 1;
send_headers(HTTP_PARTIAL_CONTENT);
@@ -1679,7 +1624,7 @@ static NOINLINE void send_file_and_exit(const char *url, int what)
break; /* fall back to read/write loop */
goto fin;
}
- IF_FEATURE_HTTPD_RANGES(range_len -= sz;)
+ IF_FEATURE_HTTPD_RANGES(range_len -= count;)
if (count == 0 || range_len == 0)
log_and_exit();
}
@@ -1730,6 +1675,56 @@ static int checkPermIP(void)
}
#if ENABLE_FEATURE_HTTPD_BASIC_AUTH
+
+# if ENABLE_PAM
+struct pam_userinfo {
+ const char *name;
+ const char *pw;
+};
+
+static int pam_talker(int num_msg,
+ const struct pam_message **msg,
+ struct pam_response **resp,
+ void *appdata_ptr)
+{
+ int i;
+ struct pam_userinfo *userinfo = (struct pam_userinfo *) appdata_ptr;
+ struct pam_response *response;
+
+ if (!resp || !msg || !userinfo)
+ return PAM_CONV_ERR;
+
+ /* allocate memory to store response */
+ response = xzalloc(num_msg * sizeof(*response));
+
+ /* copy values */
+ for (i = 0; i < num_msg; i++) {
+ const char *s;
+
+ switch (msg[i]->msg_style) {
+ case PAM_PROMPT_ECHO_ON:
+ s = userinfo->name;
+ break;
+ case PAM_PROMPT_ECHO_OFF:
+ s = userinfo->pw;
+ break;
+ case PAM_ERROR_MSG:
+ case PAM_TEXT_INFO:
+ s = "";
+ break;
+ default:
+ free(response);
+ return PAM_CONV_ERR;
+ }
+ response[i].resp = xstrdup(s);
+ if (PAM_SUCCESS != 0)
+ response[i].resp_retcode = PAM_SUCCESS;
+ }
+ *resp = response;
+ return PAM_SUCCESS;
+}
+# endif
+
/*
* Config file entries are of the form "/<path>:<user>:<passwd>".
* If config file has no prefix match for path, access is allowed.
@@ -1739,7 +1734,7 @@ static int checkPermIP(void)
*
* Returns 1 if user_and_passwd is OK.
*/
-static int check_user_passwd(const char *path, const char *user_and_passwd)
+static int check_user_passwd(const char *path, char *user_and_passwd)
{
Htaccess *cur;
const char *prev = NULL;
@@ -1747,6 +1742,7 @@ static int check_user_passwd(const char *path, const char *user_and_passwd)
for (cur = g_auth; cur; cur = cur->next) {
const char *dir_prefix;
size_t len;
+ int r;
dir_prefix = cur->before_colon;
@@ -1762,7 +1758,8 @@ static int check_user_passwd(const char *path, const char *user_and_passwd)
len = strlen(dir_prefix);
if (len != 1 /* dir_prefix "/" matches all, don't need to check */
&& (strncmp(dir_prefix, path, len) != 0
- || (path[len] != '/' && path[len] != '\0'))
+ || (path[len] != '/' && path[len] != '\0')
+ )
) {
continue;
}
@@ -1771,38 +1768,105 @@ static int check_user_passwd(const char *path, const char *user_and_passwd)
prev = dir_prefix;
if (ENABLE_FEATURE_HTTPD_AUTH_MD5) {
- char *md5_passwd;
+ char *colon_after_user;
+ const char *passwd;
+# if ENABLE_FEATURE_SHADOWPASSWDS && !ENABLE_PAM
+ char sp_buf[256];
+# endif
- md5_passwd = strchr(cur->after_colon, ':');
- if (md5_passwd && md5_passwd[1] == '$' && md5_passwd[2] == '1'
- && md5_passwd[3] == '$' && md5_passwd[4]
- ) {
- char *encrypted;
- int r, user_len_p1;
+ colon_after_user = strchr(user_and_passwd, ':');
+ if (!colon_after_user)
+ goto bad_input;
- md5_passwd++;
- user_len_p1 = md5_passwd - cur->after_colon;
- /* comparing "user:" */
- if (strncmp(cur->after_colon, user_and_passwd, user_len_p1) != 0) {
+ /* compare "user:" */
+ if (cur->after_colon[0] != '*'
+ && strncmp(cur->after_colon, user_and_passwd,
+ colon_after_user - user_and_passwd + 1) != 0
+ ) {
+ continue;
+ }
+ /* this cfg entry is '*' or matches username from peer */
+
+ passwd = strchr(cur->after_colon, ':');
+ if (!passwd)
+ goto bad_input;
+ passwd++;
+ if (passwd[0] == '*') {
+# if ENABLE_PAM
+ struct pam_userinfo userinfo;
+ struct pam_conv conv_info = { &pam_talker, (void *) &userinfo };
+ pam_handle_t *pamh;
+
+ *colon_after_user = '\0';
+ userinfo.name = user_and_passwd;
+ userinfo.pw = colon_after_user + 1;
+ r = pam_start("httpd", user_and_passwd, &conv_info, &pamh) != PAM_SUCCESS;
+ if (r == 0) {
+ r = pam_authenticate(pamh, PAM_DISALLOW_NULL_AUTHTOK) != PAM_SUCCESS
+ || pam_acct_mgmt(pamh, PAM_DISALLOW_NULL_AUTHTOK) != PAM_SUCCESS
+ ;
+ pam_end(pamh, PAM_SUCCESS);
+ }
+ *colon_after_user = ':';
+ goto end_check_passwd;
+# else
+# if ENABLE_FEATURE_SHADOWPASSWDS
+ /* Using _r function to avoid pulling in static buffers */
+ struct spwd spw;
+# endif
+ struct passwd *pw;
+
+ *colon_after_user = '\0';
+ pw = getpwnam(user_and_passwd);
+ *colon_after_user = ':';
+ if (!pw || !pw->pw_passwd)
continue;
+ passwd = pw->pw_passwd;
+# if ENABLE_FEATURE_SHADOWPASSWDS
+ if ((passwd[0] == 'x' || passwd[0] == '*') && !passwd[1]) {
+ /* getspnam_r may return 0 yet set result to NULL.
+ * At least glibc 2.4 does this. Be extra paranoid here. */
+ struct spwd *result = NULL;
+ r = getspnam_r(pw->pw_name, &spw, sp_buf, sizeof(sp_buf), &result);
+ if (r == 0 && result)
+ passwd = result->sp_pwdp;
}
+# endif
+ /* In this case, passwd is ALWAYS encrypted:
+ * it came from /etc/passwd or /etc/shadow!
+ */
+ goto check_encrypted;
+# endif /* ENABLE_PAM */
+ }
+ /* Else: passwd is from httpd.conf, it is either plaintext or encrypted */
+ if (passwd[0] == '$' && isdigit(passwd[1])) {
+ char *encrypted;
+# if !ENABLE_PAM
+ check_encrypted:
+# endif
+ /* encrypt pwd from peer and check match with local one */
encrypted = pw_encrypt(
- user_and_passwd + user_len_p1 /* cleartext pwd from user */,
- md5_passwd /*salt */, 1 /* cleanup */);
- r = strcmp(encrypted, md5_passwd);
+ /* pwd (from peer): */ colon_after_user + 1,
+ /* salt: */ passwd,
+ /* cleanup: */ 0
+ );
+ r = strcmp(encrypted, passwd);
free(encrypted);
- if (r == 0)
- goto set_remoteuser_var; /* Ok */
- continue;
+ } else {
+ /* local passwd is from httpd.conf and it's plaintext */
+ r = strcmp(colon_after_user + 1, passwd);
}
+ goto end_check_passwd;
}
-
+ bad_input:
/* Comparing plaintext "user:pass" in one go */
- if (strcmp(cur->after_colon, user_and_passwd) == 0) {
- set_remoteuser_var:
+ r = strcmp(cur->after_colon, user_and_passwd);
+ end_check_passwd:
+ if (r == 0) {
remoteuser = xstrndup(user_and_passwd,
- strchrnul(user_and_passwd, ':') - user_and_passwd);
+ strchrnul(user_and_passwd, ':') - user_and_passwd
+ );
return 1; /* Ok */
}
} /* for */
@@ -1941,7 +2005,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
/* NB: urlcopy ptr is never changed after this */
/* Extract url args if present */
- g_query = NULL;
+ /* g_query = NULL; - already is */
tptr = strchr(urlcopy, '?');
if (tptr) {
*tptr++ = '\0';
@@ -1949,7 +2013,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
}
/* Decode URL escape sequences */
- tptr = decodeString(urlcopy, 0);
+ tptr = percent_decode_in_place(urlcopy, /*strict:*/ 1);
if (tptr == NULL)
send_headers_and_exit(HTTP_BAD_REQUEST);
if (tptr == urlcopy + 1) {
@@ -1961,34 +2025,40 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
/* Algorithm stolen from libbb bb_simplify_path(),
* but don't strdup, retain trailing slash, protect root */
urlp = tptr = urlcopy;
- do {
+ for (;;) {
if (*urlp == '/') {
/* skip duplicate (or initial) slash */
if (*tptr == '/') {
- continue;
+ goto next_char;
}
if (*tptr == '.') {
- /* skip extra "/./" */
- if (tptr[1] == '/' || !tptr[1]) {
- continue;
- }
- /* "..": be careful */
- if (tptr[1] == '.' && (tptr[2] == '/' || !tptr[2])) {
- ++tptr;
- if (urlp == urlcopy) /* protect root */
+ if (tptr[1] == '.' && (tptr[2] == '/' || tptr[2] == '\0')) {
+ /* "..": be careful */
+ /* protect root */
+ if (urlp == urlcopy)
send_headers_and_exit(HTTP_BAD_REQUEST);
- while (*--urlp != '/') /* omit previous dir */;
+ /* omit previous dir */
+ while (*--urlp != '/')
continue;
+ /* skip to "./" or ".<NUL>" */
+ tptr++;
+ }
+ if (tptr[1] == '/' || tptr[1] == '\0') {
+ /* skip extra "/./" */
+ goto next_char;
}
}
}
*++urlp = *tptr;
- } while (*++tptr);
- *++urlp = '\0'; /* terminate after last character */
+ if (*urlp == '\0')
+ break;
+ next_char:
+ tptr++;
+ }
/* If URL is a directory, add '/' */
if (urlp[-1] != '/') {
- if (is_directory(urlcopy + 1, 1, NULL)) {
+ if (is_directory(urlcopy + 1, /*followlinks:*/ 1)) {
found_moved_temporarily = urlcopy;
}
}
@@ -2002,7 +2072,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
while (ip_allowed && (tptr = strchr(tptr + 1, '/')) != NULL) {
/* have path1/path2 */
*tptr = '\0';
- if (is_directory(urlcopy + 1, 1, NULL)) {
+ if (is_directory(urlcopy + 1, /*followlinks:*/ 1)) {
/* may have subdir config */
parse_conf(urlcopy + 1, SUBDIR_PARSE);
ip_allowed = checkPermIP();
@@ -2101,11 +2171,11 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
s += sizeof("bytes=")-1;
range_start = BB_STRTOOFF(s, &s, 10);
if (s[0] != '-' || range_start < 0) {
- range_start = 0;
+ range_start = -1;
} else if (s[1]) {
range_end = BB_STRTOOFF(s+1, NULL, 10);
if (errno || range_end < range_start)
- range_start = 0;
+ range_start = -1;
}
}
}
@@ -2139,10 +2209,10 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
}
#if ENABLE_FEATURE_HTTPD_BASIC_AUTH
- /* Case: no "Authorization:" was seen, but page does require passwd.
+ /* Case: no "Authorization:" was seen, but page might require passwd.
* Check that with dummy user:pass */
if (authorized < 0)
- authorized = check_user_passwd(urlcopy, ":");
+ authorized = check_user_passwd(urlcopy, (char *) "");
if (!authorized)
send_headers_and_exit(HTTP_UNAUTHORIZED);
#endif
@@ -2188,12 +2258,20 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
/* protect listing "cgi-bin/" */
send_headers_and_exit(HTTP_FORBIDDEN);
}
- send_cgi_and_exit(urlcopy, prequest, length, cookie, content_type);
+ send_cgi_and_exit(urlcopy, urlcopy, prequest, length, cookie, content_type);
}
#endif
- if (urlp[-1] == '/')
+ if (urlp[-1] == '/') {
+ /* When index_page string is appended to <dir>/ URL, it overwrites
+ * the query string. If we fall back to call /cgi-bin/index.cgi,
+ * query string would be lost and not available to the CGI.
+ * Work around it by making a deep copy.
+ */
+ if (ENABLE_FEATURE_HTTPD_CGI)
+ g_query = xstrdup(g_query); /* ok for NULL too */
strcpy(urlp, index_page);
+ }
if (stat(tptr, &sb) == 0) {
#if ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
char *suffix = strrchr(tptr, '.');
@@ -2201,7 +2279,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
Htaccess *cur;
for (cur = script_i; cur; cur = cur->next) {
if (strcmp(cur->before_colon + 1, suffix) == 0) {
- send_cgi_and_exit(urlcopy, prequest, length, cookie, content_type);
+ send_cgi_and_exit(urlcopy, urlcopy, prequest, length, cookie, content_type);
}
}
}
@@ -2214,9 +2292,8 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
/* It's a dir URL and there is no index.html
* Try cgi-bin/index.cgi */
if (access("/cgi-bin/index.cgi"+1, X_OK) == 0) {
- urlp[0] = '\0';
- g_query = urlcopy;
- send_cgi_and_exit("/cgi-bin/index.cgi", prequest, length, cookie, content_type);
+ urlp[0] = '\0'; /* remove index_page */
+ send_cgi_and_exit("/cgi-bin/index.cgi", urlcopy, prequest, length, cookie, content_type);
}
}
/* else fall through to send_file, it errors out if open fails: */
@@ -2315,6 +2392,7 @@ static void mini_httpd_nommu(int server_socket, int argc, char **argv)
/* Run a copy of ourself in inetd mode */
re_exec(argv_copy);
}
+ argv_copy[0][0] &= 0x7f;
/* parent, or vfork failed */
close(n);
} /* while (1) */
@@ -2408,7 +2486,7 @@ int httpd_main(int argc UNUSED_PARAM, char **argv)
, &verbose
);
if (opt & OPT_DECODE_URL) {
- fputs(decodeString(url_for_decode, 1), stdout);
+ fputs(percent_decode_in_place(url_for_decode, /*strict:*/ 0), stdout);
return 0;
}
#if ENABLE_FEATURE_HTTPD_ENCODE_URL_STR
@@ -2424,7 +2502,7 @@ int httpd_main(int argc UNUSED_PARAM, char **argv)
salt[1] = '1';
salt[2] = '$';
crypt_make_salt(salt + 3, 4);
- puts(pw_encrypt(pass, salt, 1));
+ puts(pw_encrypt(pass, salt, /*cleanup:*/ 0));
return 0;
}
#endif
diff --git a/networking/httpd_indexcgi.c b/networking/httpd_indexcgi.c
index 7e0225e..d732cd4 100644
--- a/networking/httpd_indexcgi.c
+++ b/networking/httpd_indexcgi.c
@@ -221,20 +221,25 @@ int main(int argc, char *argv[])
unsigned long long size_total;
int odd;
DIR *dirp;
- char *QUERY_STRING;
-
- QUERY_STRING = getenv("QUERY_STRING");
- if (!QUERY_STRING
- || QUERY_STRING[0] != '/'
- || strstr(QUERY_STRING, "//")
- || strstr(QUERY_STRING, "/../")
- || strcmp(strrchr(QUERY_STRING, '/'), "/..") == 0
+ char *location;
+
+ location = getenv("REQUEST_URI");
+ if (!location)
+ return 1;
+
+ /* drop URL arguments if any */
+ strchrnul(location, '?')[0] = '\0';
+
+ if (location[0] != '/'
+ || strstr(location, "//")
+ || strstr(location, "/../")
+ || strcmp(strrchr(location, '/'), "/..") == 0
) {
return 1;
}
if (chdir("..")
- || (QUERY_STRING[1] && chdir(QUERY_STRING + 1))
+ || (location[1] && chdir(location + 1))
) {
return 1;
}
@@ -271,14 +276,14 @@ int main(int argc, char *argv[])
"\r\n" /* Mandatory empty line after headers */
"<html><head><title>Index of ");
/* Guard against directories with &, > etc */
- fmt_html(QUERY_STRING);
+ fmt_html(location);
fmt_str(
"</title>\n"
STYLE_STR
"</head>" "\n"
"<body>" "\n"
"<h1>Index of ");
- fmt_html(QUERY_STRING);
+ fmt_html(location);
fmt_str(
"</h1>" "\n"
"<table>" "\n"
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index 3820330..dfda206 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -87,7 +87,6 @@ struct mapping_defn_t {
char *script;
- int max_mappings;
int n_mappings;
char **mapping;
};
@@ -102,7 +101,6 @@ struct interface_defn_t {
const struct method_t *method;
char *iface;
- int max_options;
int n_options;
struct variable_t *option;
};
@@ -138,6 +136,16 @@ struct globals {
#define INIT_G() do { } while (0)
+static const char keywords_up_down[] ALIGN1 =
+ "up\0"
+ "down\0"
+ "pre-up\0"
+ "pre-down\0"
+ "post-up\0"
+ "post-down\0"
+;
+
+
#if ENABLE_FEATURE_IFUPDOWN_IPV4 || ENABLE_FEATURE_IFUPDOWN_IPV6
static void addstr(char **bufp, const char *str, size_t str_length)
@@ -395,11 +403,11 @@ static int FAST_FUNC static_up6(struct interface_defn_t *ifd, execfn *exec)
result = execute("ip addr add %address%/%netmask% dev %iface%[[ label %label%]]", ifd, exec);
result += execute("ip link set[[ mtu %mtu%]][[ addr %hwaddress%]] %iface% up", ifd, exec);
/* Was: "[[ ip ....%gateway% ]]". Removed extra spaces w/o checking */
- result += execute("[[ip route add ::/0 via %gateway%]]", ifd, exec);
+ result += execute("[[ip route add ::/0 via %gateway%]][[ prio %metric%]]", ifd, exec);
# else
result = execute("ifconfig %iface%[[ media %media%]][[ hw %hwaddress%]][[ mtu %mtu%]] up", ifd, exec);
result += execute("ifconfig %iface% add %address%/%netmask%", ifd, exec);
- result += execute("[[route -A inet6 add ::/0 gw %gateway%]]", ifd, exec);
+ result += execute("[[route -A inet6 add ::/0 gw %gateway%[[ metric %metric%]]]]", ifd, exec);
# endif
return ((result == 3) ? 3 : 0);
}
@@ -482,7 +490,7 @@ static int FAST_FUNC static_up(struct interface_defn_t *ifd, execfn *exec)
result = execute("ip addr add %address%/%bnmask%[[ broadcast %broadcast%]] "
"dev %iface%[[ peer %pointopoint%]][[ label %label%]]", ifd, exec);
result += execute("ip link set[[ mtu %mtu%]][[ addr %hwaddress%]] %iface% up", ifd, exec);
- result += execute("[[ip route add default via %gateway% dev %iface%]]", ifd, exec);
+ result += execute("[[ip route add default via %gateway% dev %iface%[[ prio %metric%]]]]", ifd, exec);
return ((result == 3) ? 3 : 0);
# else
/* ifconfig said to set iface up before it processes hw %hwaddress%,
@@ -492,7 +500,7 @@ static int FAST_FUNC static_up(struct interface_defn_t *ifd, execfn *exec)
result += execute("ifconfig %iface% %address% netmask %netmask%"
"[[ broadcast %broadcast%]][[ pointopoint %pointopoint%]] ",
ifd, exec);
- result += execute("[[route add default gw %gateway% %iface%]]", ifd, exec);
+ result += execute("[[route add default gw %gateway%[[ metric %metric%]] %iface%]]", ifd, exec);
return ((result == 3) ? 3 : 0);
# endif
}
@@ -803,7 +811,6 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
currmap->match = xrealloc_vector(currmap->match, 4, currmap->n_matches);
currmap->match[currmap->n_matches++] = xstrdup(first_word);
}
- /*currmap->max_mappings = 0; - done by xzalloc */
/*currmap->n_mappings = 0;*/
/*currmap->mapping = NULL;*/
/*currmap->script = NULL;*/
@@ -888,23 +895,16 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
if (rest_of_line[0] == '\0')
bb_error_msg_and_die("option with empty value \"%s\"", buf);
- if (strcmp(first_word, "up") != 0
- && strcmp(first_word, "down") != 0
- && strcmp(first_word, "pre-up") != 0
- && strcmp(first_word, "post-down") != 0
- ) {
+ /* If not one of "up", "down",... words... */
+ if (index_in_strings(keywords_up_down, first_word) < 0) {
int i;
for (i = 0; i < currif->n_options; i++) {
if (strcmp(currif->option[i].name, first_word) == 0)
bb_error_msg_and_die("duplicate option \"%s\"", buf);
}
}
- if (currif->n_options >= currif->max_options) {
- currif->max_options += 10;
- currif->option = xrealloc(currif->option,
- sizeof(*currif->option) * currif->max_options);
- }
debug_noise("\t%s=%s\n", first_word, rest_of_line);
+ currif->option = xrealloc_vector(currif->option, 4, currif->n_options);
currif->option[currif->n_options].name = xstrdup(first_word);
currif->option[currif->n_options].value = xstrdup(rest_of_line);
currif->n_options++;
@@ -916,11 +916,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
bb_error_msg_and_die("duplicate script in mapping \"%s\"", buf);
currmap->script = xstrdup(next_word(&rest_of_line));
} else if (strcmp(first_word, "map") == 0) {
- if (currmap->n_mappings >= currmap->max_mappings) {
- currmap->max_mappings = currmap->max_mappings * 2 + 1;
- currmap->mapping = xrealloc(currmap->mapping,
- sizeof(char *) * currmap->max_mappings);
- }
+ currmap->mapping = xrealloc_vector(currmap->mapping, 2, currmap->n_mappings);
currmap->mapping[currmap->n_mappings] = xstrdup(next_word(&rest_of_line));
currmap->n_mappings++;
} else {
@@ -984,11 +980,7 @@ static void set_environ(struct interface_defn_t *iface, const char *mode)
pp = G.my_environ;
for (i = 0; i < iface->n_options; i++) {
- if (strcmp(iface->option[i].name, "up") == 0
- || strcmp(iface->option[i].name, "down") == 0
- || strcmp(iface->option[i].name, "pre-up") == 0
- || strcmp(iface->option[i].name, "post-down") == 0
- ) {
+ if (index_in_strings(keywords_up_down, iface->option[i].name) >= 0) {
continue;
}
*pp++ = setlocalenv("IF_%s=%s", iface->option[i].name, iface->option[i].value);
@@ -1056,6 +1048,7 @@ static int iface_up(struct interface_defn_t *iface)
if (!execute_all(iface, "pre-up")) return 0;
if (!iface->method->up(iface, doit)) return 0;
if (!execute_all(iface, "up")) return 0;
+ if (!execute_all(iface, "post-up")) return 0;
return 1;
}
@@ -1063,6 +1056,7 @@ static int iface_down(struct interface_defn_t *iface)
{
if (!iface->method->down(iface,check)) return -1;
set_environ(iface, "stop");
+ if (!execute_all(iface, "pre-down")) return 0;
if (!execute_all(iface, "down")) return 0;
if (!iface->method->down(iface, doit)) return 0;
if (!execute_all(iface, "post-down")) return 0;
@@ -1317,9 +1311,9 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv)
llist_t *state_list = read_iface_state();
llist_t *iface_state = find_iface_state(state_list, iface);
- if (cmds == iface_up) {
- char * const newiface = xasprintf("%s=%s", iface, liface);
- if (iface_state == NULL) {
+ if (cmds == iface_up && !any_failures) {
+ char *newiface = xasprintf("%s=%s", iface, liface);
+ if (!iface_state) {
llist_add_to_end(&state_list, newiface);
} else {
free(iface_state->data);
diff --git a/networking/inetd.c b/networking/inetd.c
index 05ad8c7..a9cf6e7 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -357,10 +357,26 @@ struct BUG_G_too_big {
config_filename = "/etc/inetd.conf"; \
} while (0)
+#if 1
+# define dbg(...) ((void)0)
+#else
+# define dbg(...) \
+do { \
+ int dbg_fd = open("inetd_debug.log", O_WRONLY | O_CREAT | O_APPEND, 0666); \
+ if (dbg_fd >= 0) { \
+ fdprintf(dbg_fd, "%d: ", getpid()); \
+ fdprintf(dbg_fd, __VA_ARGS__); \
+ close(dbg_fd); \
+ } \
+} while (0)
+#endif
+
static void maybe_close(int fd)
{
- if (fd >= 0)
+ if (fd >= 0) {
close(fd);
+ dbg("closed fd:%d\n", fd);
+ }
}
// TODO: move to libbb?
@@ -464,7 +480,9 @@ static void remove_fd_from_set(int fd)
{
if (fd >= 0) {
FD_CLR(fd, &allsock);
+ dbg("stopped listening on fd:%d\n", fd);
maxsock = -1;
+ dbg("maxsock:%d\n", maxsock);
}
}
@@ -472,8 +490,10 @@ static void add_fd_to_set(int fd)
{
if (fd >= 0) {
FD_SET(fd, &allsock);
+ dbg("started listening on fd:%d\n", fd);
if (maxsock >= 0 && fd > maxsock) {
prev_maxsock = maxsock = fd;
+ dbg("maxsock:%d\n", maxsock);
if ((rlim_t)fd > rlim_ofile_cur - FD_MARGIN)
bump_nofile();
}
@@ -492,6 +512,7 @@ static void recalculate_maxsock(void)
maxsock = fd;
fd++;
}
+ dbg("recalculated maxsock:%d\n", maxsock);
prev_maxsock = maxsock;
if ((rlim_t)maxsock > rlim_ofile_cur - FD_MARGIN)
bump_nofile();
@@ -549,8 +570,13 @@ static void prepare_socket_fd(servtab_t *sep)
rearm_alarm();
return;
}
- if (sep->se_socktype == SOCK_STREAM)
+
+ if (sep->se_socktype == SOCK_STREAM) {
listen(fd, global_queuelen);
+ dbg("new sep->se_fd:%d (stream)\n", fd);
+ } else {
+ dbg("new sep->se_fd:%d (!stream)\n", fd);
+ }
add_fd_to_set(fd);
sep->se_fd = fd;
@@ -1012,7 +1038,7 @@ static void reread_config_file(int sig UNUSED_PARAM)
* new config file doesnt have them. */
block_CHLD_HUP_ALRM(&omask);
sepp = &serv_list;
- while ((sep = *sepp)) {
+ while ((sep = *sepp) != NULL) {
if (sep->se_checked) {
sepp = &sep->se_next;
continue;
@@ -1206,11 +1232,13 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
}
continue;
}
+ dbg("ready_fd_cnt:%d\n", ready_fd_cnt);
for (sep = serv_list; ready_fd_cnt && sep; sep = sep->se_next) {
if (sep->se_fd == -1 || !FD_ISSET(sep->se_fd, &readable))
continue;
+ dbg("ready fd:%d\n", sep->se_fd);
ready_fd_cnt--;
ctrl = sep->se_fd;
accepted_fd = -1;
@@ -1218,6 +1246,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
if (!sep->se_wait) {
if (sep->se_socktype == SOCK_STREAM) {
ctrl = accepted_fd = accept(sep->se_fd, NULL, NULL);
+ dbg("accepted_fd:%d\n", accepted_fd);
if (ctrl < 0) {
if (errno != EINTR)
bb_perror_msg("accept (for %s)", sep->se_service);
@@ -1238,19 +1267,22 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
* (can create many copies of same child, etc).
* Parent must create and use new socket instead. */
new_udp_fd = socket(sep->se_family, SOCK_DGRAM, 0);
+ dbg("new_udp_fd:%d\n", new_udp_fd);
if (new_udp_fd < 0) { /* error: eat packet, forget about it */
udp_err:
recv(sep->se_fd, line, LINE_SIZE, MSG_DONTWAIT);
continue;
}
setsockopt_reuseaddr(new_udp_fd);
- /* TODO: better do bind after vfork in parent,
+ /* TODO: better do bind after fork in parent,
* so that we don't have two wildcard bound sockets
* even for a brief moment? */
if (bind(new_udp_fd, &sep->se_lsa->u.sa, sep->se_lsa->len) < 0) {
+ dbg("bind(new_udp_fd) failed\n");
close(new_udp_fd);
goto udp_err;
}
+ dbg("bind(new_udp_fd) succeeded\n");
}
}
@@ -1319,17 +1351,19 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
/* udp nowait: child connected the socket,
* we created and will use new, unconnected one */
xmove_fd(new_udp_fd, sep->se_fd);
+ dbg("moved new_udp_fd:%d to sep->se_fd:%d\n", new_udp_fd, sep->se_fd);
}
restore_sigmask(&omask);
maybe_close(accepted_fd);
continue; /* -> check next fd in fd set */
}
- /* we are either child or didn't vfork at all */
+ /* we are either child or didn't fork at all */
#ifdef INETD_BUILTINS_ENABLED
if (sep->se_builtin) {
- if (pid) { /* "pid" is -1: we did vfork */
+ if (pid) { /* "pid" is -1: we did fork */
close(sep->se_fd); /* listening socket */
+ dbg("closed sep->se_fd:%d\n", sep->se_fd);
logmode = LOGMODE_NONE; /* make xwrite etc silent */
}
restore_sigmask(&omask);
@@ -1337,7 +1371,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
sep->se_builtin->bi_stream_fn(ctrl, sep);
else
sep->se_builtin->bi_dgram_fn(ctrl, sep);
- if (pid) /* we did vfork */
+ if (pid) /* we did fork */
_exit(EXIT_FAILURE);
maybe_close(accepted_fd);
continue; /* -> check next fd in fd set */
@@ -1361,6 +1395,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
* only packets from this peer will be recv'ed,
* and bare write()/send() will work on it */
connect(ctrl, &lsa->u.sa, lsa->len);
+ dbg("connected ctrl:%d to remote peer\n", ctrl);
free(lsa);
}
/* prepare env and exec program */
@@ -1378,7 +1413,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
bb_error_msg("non-root must run services as himself");
goto do_exit1;
}
- if (pwd->pw_uid) {
+ if (pwd->pw_uid != 0) {
if (sep->se_group)
pwd->pw_gid = grp->gr_gid;
/* initgroups, setgid, setuid: */
@@ -1397,6 +1432,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
*/
xmove_fd(ctrl, STDIN_FILENO);
xdup2(STDIN_FILENO, STDOUT_FILENO);
+ dbg("moved ctrl:%d to fd 0,1[,2]\n", ctrl);
/* manpages of inetd I managed to find either say
* that stderr is also redirected to the network,
* or do not talk about redirection at all (!) */
@@ -1409,6 +1445,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
maybe_close(sep2->se_fd);
sigaction_set(SIGPIPE, &saved_pipe_handler);
restore_sigmask(&omask);
+ dbg("execing:'%s'\n", sep->se_program);
BB_EXECVP(sep->se_program, sep->se_argv);
bb_perror_msg("can't execute '%s'", sep->se_program);
do_exit1:
diff --git a/networking/interface.c b/networking/interface.c
index cdb206c..79c322e 100644
--- a/networking/interface.c
+++ b/networking/interface.c
@@ -35,7 +35,6 @@
#include "inet_common.h"
#include <net/if.h>
#include <net/if_arp.h>
-
#ifdef HAVE_NET_ETHERNET_H
# include <net/ethernet.h>
#endif
diff --git a/networking/ip.c b/networking/ip.c
index fb2f5e2..98fe621 100644
--- a/networking/ip.c
+++ b/networking/ip.c
@@ -50,16 +50,15 @@
//usage: "iplink show [DEVICE]"
//usage:
//usage:#define iproute_trivial_usage
-//usage: "{ list | flush | { add | del | change | append |\n"
-//usage: " replace | monitor } ROUTE }"
+//usage: "{ list | flush | add | del | change | append |\n"
+//usage: " replace | test } ROUTE"
//usage:#define iproute_full_usage "\n\n"
//usage: "iproute { list | flush } SELECTOR\n"
//usage: "iproute get ADDRESS [from ADDRESS iif STRING]\n"
-//usage: " [oif STRING] [tos TOS]\n"
-//usage: "iproute { add | del | change | append | replace | monitor } ROUTE\n"
-//usage: " SELECTOR := [root PREFIX] [match PREFIX] [proto RTPROTO]\n"
-//usage: " ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO]\n"
-//usage: " [metric METRIC]"
+//usage: " [oif STRING] [tos TOS]\n"
+//usage: "iproute { add | del | change | append | replace | test } ROUTE\n"
+//usage: " SELECTOR := [root PREFIX] [match PREFIX] [proto RTPROTO]\n"
+//usage: " ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO] [metric METRIC]"
//usage:
//usage:#define iprule_trivial_usage
//usage: "{[list | add | del] RULE}"
diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c
index 1daad13..62a0251 100644
--- a/networking/nc_bloaty.c
+++ b/networking/nc_bloaty.c
@@ -115,6 +115,7 @@ struct globals {
unsigned wrote_out; /* total stdout bytes */
unsigned wrote_net; /* total net bytes */
#endif
+ char *proggie0saved;
/* ouraddr is never NULL and goes through three states as we progress:
1 - local address before bind (IP/port possibly zero)
2 - local address after bind (port is nonzero)
@@ -127,7 +128,6 @@ struct globals {
jmp_buf jbuf; /* timer crud */
- /* will malloc up the following globals: */
fd_set ding1; /* for select loop */
fd_set ding2;
char bigbuf_in[BIGSIZ]; /* data buffers */
@@ -159,17 +159,16 @@ struct globals {
/* Must match getopt32 call! */
enum {
- OPT_h = (1 << 0),
- OPT_n = (1 << 1),
- OPT_p = (1 << 2),
- OPT_s = (1 << 3),
- OPT_u = (1 << 4),
- OPT_v = (1 << 5),
- OPT_w = (1 << 6),
- OPT_l = (1 << 7) * ENABLE_NC_SERVER,
- OPT_i = (1 << (7+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
- OPT_o = (1 << (8+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
- OPT_z = (1 << (9+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
+ OPT_n = (1 << 0),
+ OPT_p = (1 << 1),
+ OPT_s = (1 << 2),
+ OPT_u = (1 << 3),
+ OPT_v = (1 << 4),
+ OPT_w = (1 << 5),
+ OPT_l = (1 << 6) * ENABLE_NC_SERVER,
+ OPT_i = (1 << (6+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
+ OPT_o = (1 << (7+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
+ OPT_z = (1 << (8+ENABLE_NC_SERVER)) * ENABLE_NC_EXTRA,
};
#define o_nflag (option_mask32 & OPT_n)
@@ -263,6 +262,8 @@ Debug("findline returning whole thing: %d", siz);
static int doexec(char **proggie) NORETURN;
static int doexec(char **proggie)
{
+ if (G.proggie0saved)
+ proggie[0] = G.proggie0saved;
xmove_fd(netfd, 0);
dup2(0, 1);
/* dup2(0, 2); - do we *really* want this? NO!
@@ -428,8 +429,7 @@ create new one, and bind() it. TODO */
rr = getsockopt(netfd, IPPROTO_IP, IP_OPTIONS, optbuf, &x);
if (rr >= 0 && x) { /* we've got options, lessee em... */
- bin2hex(bigbuf_net, optbuf, x);
- bigbuf_net[2*x] = '\0';
+ *bin2hex(bigbuf_net, optbuf, x) = '\0';
fprintf(stderr, "IP options: %s\n", bigbuf_net);
}
#endif
@@ -727,7 +727,7 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
{
char *str_p, *str_s;
IF_NC_EXTRA(char *str_i, *str_o;)
- char *themdotted = themdotted; /* gcc */
+ char *themdotted = themdotted; /* for compiler */
char **proggie;
int x;
unsigned o_lport = 0;
@@ -755,13 +755,27 @@ int nc_main(int argc UNUSED_PARAM, char **argv)
proggie++;
goto e_found;
}
+ /* -<other_opts>e PROG [ARGS] ? */
+ /* (aboriginal linux uses this form) */
+ if (proggie[0][0] == '-') {
+ char *optpos = *proggie + 1;
+ /* Skip all valid opts w/o params */
+ optpos = optpos + strspn(optpos, "nuv"IF_NC_SERVER("l")IF_NC_EXTRA("z"));
+ if (*optpos == 'e' && !optpos[1]) {
+ *optpos = '\0';
+ proggie++;
+ G.proggie0saved = *proggie;
+ *proggie = NULL; /* terminate argv for getopt32 */
+ goto e_found;
+ }
+ }
}
proggie = NULL;
e_found:
// -g -G -t -r deleted, unimplemented -a deleted too
opt_complementary = "?2:vv:w+"; /* max 2 params; -v is a counter; -w N */
- getopt32(argv, "hnp:s:uvw:" IF_NC_SERVER("l")
+ getopt32(argv, "np:s:uvw:" IF_NC_SERVER("l")
IF_NC_EXTRA("i:o:z"),
&str_p, &str_s, &o_wait
IF_NC_EXTRA(, &str_i, &str_o), &o_verbose);
diff --git a/networking/ntpd.c b/networking/ntpd.c
index 1e97d62..45f325b 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -112,12 +112,15 @@ extern int adjtimex (struct timex *);
#define FREQ_TOLERANCE 0.000015 /* frequency tolerance (15 PPM) */
#define BURSTPOLL 0 /* initial poll */
#define MINPOLL 5 /* minimum poll interval. std ntpd uses 6 (6: 64 sec) */
-#define BIGPOLL 10 /* drop to lower poll at any trouble (10: 17 min) */
+/* If offset > discipline_jitter * POLLADJ_GATE, and poll interval is >= 2^BIGPOLL,
+ * then it is decreased _at once_. (If < 2^BIGPOLL, it will be decreased _eventually_).
+ */
+#define BIGPOLL 10 /* 2^10 sec ~= 17 min */
#define MAXPOLL 12 /* maximum poll interval (12: 1.1h, 17: 36.4h). std ntpd uses 17 */
/* Actively lower poll when we see such big offsets.
* With STEP_THRESHOLD = 0.125, it means we try to sync more aggressively
- * if offset increases over 0.03 sec */
-#define POLLDOWN_OFFSET (STEP_THRESHOLD / 4)
+ * if offset increases over ~0.04 sec */
+#define POLLDOWN_OFFSET (STEP_THRESHOLD / 3)
#define MINDISP 0.01 /* minimum dispersion (sec) */
#define MAXDISP 16 /* maximum dispersion (sec) */
#define MAXSTRAT 16 /* maximum stratum (infinity metric) */
@@ -129,17 +132,18 @@ extern int adjtimex (struct timex *);
/* Poll-adjust threshold.
* When we see that offset is small enough compared to discipline jitter,
- * we grow a counter: += MINPOLL. When it goes over POLLADJ_LIMIT,
+ * we grow a counter: += MINPOLL. When counter goes over POLLADJ_LIMIT,
* we poll_exp++. If offset isn't small, counter -= poll_exp*2,
- * and when it goes below -POLLADJ_LIMIT, we poll_exp--
- * (bumped from 30 to 36 since otherwise I often see poll_exp going *2* steps down)
+ * and when it goes below -POLLADJ_LIMIT, we poll_exp--.
+ * (Bumped from 30 to 40 since otherwise I often see poll_exp going *2* steps down)
*/
-#define POLLADJ_LIMIT 36
-/* If offset < POLLADJ_GATE * discipline_jitter, then we can increase
+#define POLLADJ_LIMIT 40
+/* If offset < discipline_jitter * POLLADJ_GATE, then we decide to increase
* poll interval (we think we can't improve timekeeping
* by staying at smaller poll).
*/
#define POLLADJ_GATE 4
+#define TIMECONST_HACK_GATE 2
/* Compromise Allan intercept (sec). doc uses 1500, std ntpd uses 512 */
#define ALLAN 512
/* PLL loop gain */
@@ -213,8 +217,8 @@ typedef struct {
} msg_t;
typedef struct {
- double d_recv_time;
double d_offset;
+ double d_recv_time;
double d_dispersion;
} datapoint_t;
@@ -260,7 +264,7 @@ enum {
OPT_S = (1 << 6),
OPT_l = (1 << 7) * ENABLE_FEATURE_NTPD_SERVER,
/* We hijack some bits for other purposes */
- OPT_qq = (1 << 8),
+ OPT_qq = (1 << 31),
};
struct globals {
@@ -277,15 +281,19 @@ struct globals {
llist_t *ntp_peers;
#if ENABLE_FEATURE_NTPD_SERVER
int listen_fd;
+# define G_listen_fd (G.listen_fd)
+#else
+# define G_listen_fd (-1)
#endif
unsigned verbose;
unsigned peer_cnt;
/* refid: 32-bit code identifying the particular server or reference clock
- * in stratum 0 packets this is a four-character ASCII string,
- * called the kiss code, used for debugging and monitoring
- * in stratum 1 packets this is a four-character ASCII string
- * assigned to the reference clock by IANA. Example: "GPS "
- * in stratum 2+ packets, it's IPv4 address or 4 first bytes of MD5 hash of IPv6
+ * in stratum 0 packets this is a four-character ASCII string,
+ * called the kiss code, used for debugging and monitoring
+ * in stratum 1 packets this is a four-character ASCII string
+ * assigned to the reference clock by IANA. Example: "GPS "
+ * in stratum 2+ packets, it's IPv4 address or 4 first bytes
+ * of MD5 hash of IPv6
*/
uint32_t refid;
uint8_t ntp_status;
@@ -294,27 +302,35 @@ struct globals {
* mains-frequency clock incrementing at 60 Hz is 16 ms, even when the
* system clock hardware representation is to the nanosecond.
*
- * Delays, jitters of various kinds are clamper down to precision.
+ * Delays, jitters of various kinds are clamped down to precision.
*
* If precision_sec is too large, discipline_jitter gets clamped to it
- * and if offset is much smaller than discipline_jitter, poll interval
- * grows even though we really can benefit from staying at smaller one,
- * collecting non-lagged datapoits and correcting the offset.
+ * and if offset is smaller than discipline_jitter * POLLADJ_GATE, poll
+ * interval grows even though we really can benefit from staying at
+ * smaller one, collecting non-lagged datapoits and correcting offset.
* (Lagged datapoits exist when poll_exp is large but we still have
* systematic offset error - the time distance between datapoints
- * is significat and older datapoints have smaller offsets.
+ * is significant and older datapoints have smaller offsets.
* This makes our offset estimation a bit smaller than reality)
* Due to this effect, setting G_precision_sec close to
* STEP_THRESHOLD isn't such a good idea - offsets may grow
* too big and we will step. I observed it with -6.
*
- * OTOH, setting precision too small would result in futile attempts
- * to syncronize to the unachievable precision.
+ * OTOH, setting precision_sec far too small would result in futile
+ * attempts to syncronize to an unachievable precision.
*
* -6 is 1/64 sec, -7 is 1/128 sec and so on.
+ * -8 is 1/256 ~= 0.003906 (worked well for me --vda)
+ * -9 is 1/512 ~= 0.001953 (let's try this for some time)
*/
-#define G_precision_exp -8
-#define G_precision_sec (1.0 / (1 << (- G_precision_exp)))
+#define G_precision_exp -9
+ /*
+ * G_precision_exp is used only for construction outgoing packets.
+ * It's ok to set G_precision_sec to a slightly different value
+ * (One which is "nicer looking" in logs).
+ * Exact value would be (1.0 / (1 << (- G_precision_exp))):
+ */
+#define G_precision_sec 0.002
uint8_t stratum;
/* Bool. After set to 1, never goes back to 0: */
smallint initial_poll_complete;
@@ -332,6 +348,10 @@ struct globals {
double last_update_offset; // c.last
double last_update_recv_time; // s.t
double discipline_jitter; // c.jitter
+ /* Since we only compare it with ints, can simplify code
+ * by not making this variable floating point:
+ */
+ unsigned offset_to_jitter_ratio;
//double cluster_offset; // s.offset
//double cluster_jitter; // s.jitter
#if !USING_KERNEL_PLL_LOOP
@@ -505,23 +525,34 @@ static void
filter_datapoints(peer_t *p)
{
int i, idx;
+ double sum, wavg;
+ datapoint_t *fdp;
+
+#if 0
+/* Simulations have shown that use of *averaged* offset for p->filter_offset
+ * is in fact worse than simply using last received one: with large poll intervals
+ * (>= 2048) averaging code uses offset values which are outdated by hours,
+ * and time/frequency correction goes totally wrong when fed essentially bogus offsets.
+ */
int got_newest;
- double minoff, maxoff, wavg, sum, w;
+ double minoff, maxoff, w;
double x = x; /* for compiler */
double oldest_off = oldest_off;
double oldest_age = oldest_age;
double newest_off = newest_off;
double newest_age = newest_age;
- minoff = maxoff = p->filter_datapoint[0].d_offset;
+ fdp = p->filter_datapoint;
+
+ minoff = maxoff = fdp[0].d_offset;
for (i = 1; i < NUM_DATAPOINTS; i++) {
- if (minoff > p->filter_datapoint[i].d_offset)
- minoff = p->filter_datapoint[i].d_offset;
- if (maxoff < p->filter_datapoint[i].d_offset)
- maxoff = p->filter_datapoint[i].d_offset;
+ if (minoff > fdp[i].d_offset)
+ minoff = fdp[i].d_offset;
+ if (maxoff < fdp[i].d_offset)
+ maxoff = fdp[i].d_offset;
}
- idx = p->datapoint_idx; /* most recent datapoint */
+ idx = p->datapoint_idx; /* most recent datapoint's index */
/* Average offset:
* Drop two outliers and take weighted average of the rest:
* most_recent/2 + older1/4 + older2/8 ... + older5/32 + older6/32
@@ -543,24 +574,24 @@ filter_datapoints(peer_t *p)
VERB4 {
bb_error_msg("datapoint[%d]: off:%f disp:%f(%f) age:%f%s",
i,
- p->filter_datapoint[idx].d_offset,
- p->filter_datapoint[idx].d_dispersion, dispersion(&p->filter_datapoint[idx]),
- G.cur_time - p->filter_datapoint[idx].d_recv_time,
- (minoff == p->filter_datapoint[idx].d_offset || maxoff == p->filter_datapoint[idx].d_offset)
+ fdp[idx].d_offset,
+ fdp[idx].d_dispersion, dispersion(&fdp[idx]),
+ G.cur_time - fdp[idx].d_recv_time,
+ (minoff == fdp[idx].d_offset || maxoff == fdp[idx].d_offset)
? " (outlier by offset)" : ""
);
}
- sum += dispersion(&p->filter_datapoint[idx]) / (2 << i);
+ sum += dispersion(&fdp[idx]) / (2 << i);
- if (minoff == p->filter_datapoint[idx].d_offset) {
+ if (minoff == fdp[idx].d_offset) {
minoff -= 1; /* so that we don't match it ever again */
} else
- if (maxoff == p->filter_datapoint[idx].d_offset) {
+ if (maxoff == fdp[idx].d_offset) {
maxoff += 1;
} else {
- oldest_off = p->filter_datapoint[idx].d_offset;
- oldest_age = G.cur_time - p->filter_datapoint[idx].d_recv_time;
+ oldest_off = fdp[idx].d_offset;
+ oldest_age = G.cur_time - fdp[idx].d_recv_time;
if (!got_newest) {
got_newest = 1;
newest_off = oldest_off;
@@ -593,6 +624,32 @@ filter_datapoints(peer_t *p)
}
p->filter_offset = wavg;
+#else
+
+ fdp = p->filter_datapoint;
+ idx = p->datapoint_idx; /* most recent datapoint's index */
+
+ /* filter_offset: simply use the most recent value */
+ p->filter_offset = fdp[idx].d_offset;
+
+ /* n-1
+ * --- dispersion(i)
+ * filter_dispersion = \ -------------
+ * / (i+1)
+ * --- 2
+ * i=0
+ */
+ wavg = 0;
+ sum = 0;
+ for (i = 0; i < NUM_DATAPOINTS; i++) {
+ sum += dispersion(&fdp[idx]) / (2 << i);
+ wavg += fdp[idx].d_offset;
+ idx = (idx - 1) & (NUM_DATAPOINTS - 1);
+ }
+ wavg /= NUM_DATAPOINTS;
+ p->filter_dispersion = sum;
+#endif
+
/* +----- -----+ ^ 1/2
* | n-1 |
* | --- |
@@ -606,13 +663,13 @@ filter_datapoints(peer_t *p)
*/
sum = 0;
for (i = 0; i < NUM_DATAPOINTS; i++) {
- sum += SQUARE(wavg - p->filter_datapoint[i].d_offset);
+ sum += SQUARE(wavg - fdp[i].d_offset);
}
sum = SQRT(sum / NUM_DATAPOINTS);
p->filter_jitter = sum > G_precision_sec ? sum : G_precision_sec;
- VERB3 bb_error_msg("filter offset:%f(corr:%e) disp:%f jitter:%f",
- p->filter_offset, x,
+ VERB3 bb_error_msg("filter offset:%+f disp:%f jitter:%f",
+ p->filter_offset,
p->filter_dispersion,
p->filter_jitter);
}
@@ -627,7 +684,11 @@ reset_peer_stats(peer_t *p, double offset)
if (small_ofs) {
p->filter_datapoint[i].d_recv_time += offset;
if (p->filter_datapoint[i].d_offset != 0) {
- p->filter_datapoint[i].d_offset += offset;
+ p->filter_datapoint[i].d_offset -= offset;
+ //bb_error_msg("p->filter_datapoint[%d].d_offset %f -> %f",
+ // i,
+ // p->filter_datapoint[i].d_offset + offset,
+ // p->filter_datapoint[i].d_offset);
}
} else {
p->filter_datapoint[i].d_recv_time = G.cur_time;
@@ -724,6 +785,12 @@ send_query_to_peer(peer_t *p)
free(local_lsa);
}
+ /* Emit message _before_ attempted send. Think of a very short
+ * roundtrip networks: we need to go back to recv loop ASAP,
+ * to reduce delay. Printing messages after send works against that.
+ */
+ VERB1 bb_error_msg("sending query to %s", p->p_dotted);
+
/*
* Send out a random 64-bit number as our transmit time. The NTP
* server will copy said number into the originate field on the
@@ -751,7 +818,6 @@ send_query_to_peer(peer_t *p)
}
p->reachable_bits <<= 1;
- VERB1 bb_error_msg("sent query to %s", p->p_dotted);
set_next(p, RESPONSE_INTERVAL);
}
@@ -813,22 +879,24 @@ step_time(double offset)
{
llist_t *item;
double dtime;
- struct timeval tv;
- char buf[80];
+ struct timeval tvc, tvn;
+ char buf[sizeof("yyyy-mm-dd hh:mm:ss") + /*paranoia:*/ 4];
time_t tval;
- gettimeofday(&tv, NULL); /* never fails */
- dtime = offset + tv.tv_sec;
- dtime += 1.0e-6 * tv.tv_usec;
- d_to_tv(dtime, &tv);
-
- if (settimeofday(&tv, NULL) == -1)
+ gettimeofday(&tvc, NULL); /* never fails */
+ dtime = tvc.tv_sec + (1.0e-6 * tvc.tv_usec) + offset;
+ d_to_tv(dtime, &tvn);
+ if (settimeofday(&tvn, NULL) == -1)
bb_perror_msg_and_die("settimeofday");
- tval = tv.tv_sec;
- strftime(buf, sizeof(buf), "%a %b %e %H:%M:%S %Z %Y", localtime(&tval));
-
- bb_error_msg("setting clock to %s (offset %fs)", buf, offset);
+ VERB2 {
+ tval = tvc.tv_sec;
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&tval));
+ bb_error_msg("current time is %s.%06u", buf, (unsigned)tvc.tv_usec);
+ }
+ tval = tvn.tv_sec;
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&tval));
+ bb_error_msg("setting time to %s.%06u (offset %+fs)", buf, (unsigned)tvn.tv_usec, offset);
/* Correct various fields which contain time-relative values: */
@@ -836,7 +904,7 @@ step_time(double offset)
for (item = G.ntp_peers; item != NULL; item = item->link) {
peer_t *pp = (peer_t *) item->data;
reset_peer_stats(pp, offset);
- //bb_error_msg("offset:%f pp->next_action_time:%f -> %f",
+ //bb_error_msg("offset:%+f pp->next_action_time:%f -> %f",
// offset, pp->next_action_time, pp->next_action_time + offset);
pp->next_action_time += offset;
}
@@ -1172,7 +1240,7 @@ select_and_cluster(void)
}
G.last_update_peer = p;
keep_old:
- VERB3 bb_error_msg("selected peer %s filter_offset:%f age:%f",
+ VERB3 bb_error_msg("selected peer %s filter_offset:%+f age:%f",
p->p_dotted,
p->filter_offset,
G.cur_time - p->lastpkt_recv_time
@@ -1263,7 +1331,7 @@ update_local_clock(peer_t *p)
switch (G.discipline_state) {
case STATE_SYNC:
/* The first outlyer: ignore it, switch to SPIK state */
- VERB3 bb_error_msg("offset:%f - spike detected", offset);
+ VERB3 bb_error_msg("offset:%+f - spike detected", offset);
G.discipline_state = STATE_SPIK;
return -1; /* "decrease poll interval" */
@@ -1300,7 +1368,7 @@ update_local_clock(peer_t *p)
* is always suppressed, even at the longer poll
* intervals.
*/
- VERB3 bb_error_msg("stepping time by %f; poll_exp=MINPOLL", offset);
+ VERB3 bb_error_msg("stepping time by %+f; poll_exp=MINPOLL", offset);
step_time(offset);
if (option_mask32 & OPT_q) {
/* We were only asked to set time once. Done. */
@@ -1319,12 +1387,13 @@ update_local_clock(peer_t *p)
return 1; /* "ok to increase poll interval" */
}
#endif
- set_new_values(STATE_SYNC, /*offset:*/ 0, recv_time);
+ abs_offset = offset = 0;
+ set_new_values(STATE_SYNC, offset, recv_time);
} else { /* abs_offset <= STEP_THRESHOLD */
if (G.poll_exp < MINPOLL && G.initial_poll_complete) {
- VERB3 bb_error_msg("small offset:%f, disabling burst mode", offset);
+ VERB3 bb_error_msg("small offset:%+f, disabling burst mode", offset);
G.polladj_count = 0;
G.poll_exp = MINPOLL;
}
@@ -1333,9 +1402,8 @@ update_local_clock(peer_t *p)
* weighted offset differences. Used by the poll adjust code.
*/
etemp = SQUARE(G.discipline_jitter);
- dtemp = SQUARE(MAXD(fabs(offset - G.last_update_offset), G_precision_sec));
+ dtemp = SQUARE(offset - G.last_update_offset);
G.discipline_jitter = SQRT(etemp + (dtemp - etemp) / AVG);
- VERB3 bb_error_msg("discipline jitter=%f", G.discipline_jitter);
switch (G.discipline_state) {
case STATE_NSET:
@@ -1412,6 +1480,10 @@ update_local_clock(peer_t *p)
}
}
+ if (G.discipline_jitter < G_precision_sec)
+ G.discipline_jitter = G_precision_sec;
+ G.offset_to_jitter_ratio = abs_offset / G.discipline_jitter;
+
G.reftime = G.cur_time;
G.ntp_status = p->lastpkt_status;
G.refid = p->lastpkt_refid;
@@ -1423,7 +1495,7 @@ update_local_clock(peer_t *p)
/* We are in STATE_SYNC now, but did not do adjtimex yet.
* (Any other state does not reach this, they all return earlier)
- * By this time, freq_drift and G.last_update_offset are set
+ * By this time, freq_drift and offset are set
* to values suitable for adjtimex.
*/
#if !USING_KERNEL_PLL_LOOP
@@ -1449,8 +1521,8 @@ update_local_clock(peer_t *p)
memset(&tmx, 0, sizeof(tmx));
if (adjtimex(&tmx) < 0)
bb_perror_msg_and_die("adjtimex");
- VERB3 bb_error_msg("p adjtimex freq:%ld offset:%ld constant:%ld status:0x%x",
- tmx.freq, tmx.offset, tmx.constant, tmx.status);
+ bb_error_msg("p adjtimex freq:%ld offset:%+ld status:0x%x tc:%ld",
+ tmx.freq, tmx.offset, tmx.status, tmx.constant);
}
memset(&tmx, 0, sizeof(tmx));
@@ -1462,40 +1534,42 @@ update_local_clock(peer_t *p)
tmx.modes = ADJ_FREQUENCY | ADJ_OFFSET;
/* 65536 is one ppm */
tmx.freq = G.discipline_freq_drift * 65536e6;
- tmx.offset = G.last_update_offset * 1000000; /* usec */
#endif
tmx.modes = ADJ_OFFSET | ADJ_STATUS | ADJ_TIMECONST;// | ADJ_MAXERROR | ADJ_ESTERROR;
- tmx.offset = (G.last_update_offset * 1000000); /* usec */
- /* + (G.last_update_offset < 0 ? -0.5 : 0.5) - too small to bother */
+ tmx.offset = (offset * 1000000); /* usec */
tmx.status = STA_PLL;
if (G.ntp_status & LI_PLUSSEC)
tmx.status |= STA_INS;
if (G.ntp_status & LI_MINUSSEC)
tmx.status |= STA_DEL;
+
tmx.constant = G.poll_exp - 4;
- //tmx.esterror = (u_int32)(clock_jitter * 1e6);
- //tmx.maxerror = (u_int32)((sys_rootdelay / 2 + sys_rootdisp) * 1e6);
+ /* EXPERIMENTAL.
+ * The below if statement should be unnecessary, but...
+ * It looks like Linux kernel's PLL is far too gentle in changing
+ * tmx.freq in response to clock offset. Offset keeps growing
+ * and eventually we fall back to smaller poll intervals.
+ * We can make correction more agressive (about x2) by supplying
+ * PLL time constant which is one less than the real one.
+ * To be on a safe side, let's do it only if offset is significantly
+ * larger than jitter.
+ */
+ if (tmx.constant > 0 && G.offset_to_jitter_ratio >= TIMECONST_HACK_GATE)
+ tmx.constant--;
+
+ //tmx.esterror = (uint32_t)(clock_jitter * 1e6);
+ //tmx.maxerror = (uint32_t)((sys_rootdelay / 2 + sys_rootdisp) * 1e6);
rc = adjtimex(&tmx);
if (rc < 0)
bb_perror_msg_and_die("adjtimex");
/* NB: here kernel returns constant == G.poll_exp, not == G.poll_exp - 4.
* Not sure why. Perhaps it is normal.
*/
- VERB3 bb_error_msg("adjtimex:%d freq:%ld offset:%ld constant:%ld status:0x%x",
- rc, tmx.freq, tmx.offset, tmx.constant, tmx.status);
-#if 0
- VERB3 {
- /* always gives the same output as above msg */
- memset(&tmx, 0, sizeof(tmx));
- if (adjtimex(&tmx) < 0)
- bb_perror_msg_and_die("adjtimex");
- VERB3 bb_error_msg("c adjtimex freq:%ld offset:%ld constant:%ld status:0x%x",
- tmx.freq, tmx.offset, tmx.constant, tmx.status);
- }
-#endif
+ VERB3 bb_error_msg("adjtimex:%d freq:%ld offset:%+ld status:0x%x",
+ rc, tmx.freq, tmx.offset, tmx.status);
G.kernel_freq_drift = tmx.freq / 65536;
- VERB2 bb_error_msg("update peer:%s, offset:%f, clock drift:%ld ppm",
- p->p_dotted, G.last_update_offset, G.kernel_freq_drift);
+ VERB2 bb_error_msg("update from:%s offset:%+f jitter:%f clock drift:%+.3fppm tc:%d",
+ p->p_dotted, offset, G.discipline_jitter, (double)tmx.freq / 65536, (int)tmx.constant);
return 1; /* "ok to increase poll interval" */
}
@@ -1631,22 +1705,22 @@ recv_and_process_peer_pkt(peer_t *p)
if (!p->reachable_bits) {
/* 1st datapoint ever - replicate offset in every element */
int i;
- for (i = 1; i < NUM_DATAPOINTS; i++) {
+ for (i = 0; i < NUM_DATAPOINTS; i++) {
p->filter_datapoint[i].d_offset = datapoint->d_offset;
}
}
p->reachable_bits |= 1;
if ((MAX_VERBOSE && G.verbose) || (option_mask32 & OPT_w)) {
- bb_error_msg("reply from %s: reach 0x%02x offset %f delay %f status 0x%02x strat %d refid 0x%08x rootdelay %f",
+ bb_error_msg("reply from %s: offset:%+f delay:%f status:0x%02x strat:%d refid:0x%08x rootdelay:%f reach:0x%02x",
p->p_dotted,
- p->reachable_bits,
datapoint->d_offset,
p->lastpkt_delay,
p->lastpkt_status,
p->lastpkt_stratum,
p->lastpkt_refid,
- p->lastpkt_rootdelay
+ p->lastpkt_rootdelay,
+ p->reachable_bits
/* not shown: m_ppoll, m_precision_exp, m_rootdisp,
* m_reftime, m_orgtime, m_rectime, m_xmttime
*/
@@ -1665,7 +1739,7 @@ recv_and_process_peer_pkt(peer_t *p)
* drop poll interval one step down.
*/
if (fabs(q->filter_offset) >= POLLDOWN_OFFSET) {
- VERB3 bb_error_msg("offset:%f > POLLDOWN_OFFSET", q->filter_offset);
+ VERB3 bb_error_msg("offset:%+f > POLLDOWN_OFFSET", q->filter_offset);
goto poll_down;
}
}
@@ -1679,14 +1753,7 @@ recv_and_process_peer_pkt(peer_t *p)
* is increased, otherwise it is decreased. A bit of hysteresis
* helps calm the dance. Works best using burst mode.
*/
- VERB4 if (rc > 0) {
- bb_error_msg("offset:%f POLLADJ_GATE*discipline_jitter:%f poll:%s",
- q->filter_offset, POLLADJ_GATE * G.discipline_jitter,
- fabs(q->filter_offset) < POLLADJ_GATE * G.discipline_jitter
- ? "grows" : "falls"
- );
- }
- if (rc > 0 && fabs(q->filter_offset) < POLLADJ_GATE * G.discipline_jitter) {
+ if (rc > 0 && G.offset_to_jitter_ratio <= POLLADJ_GATE) {
/* was += G.poll_exp but it is a bit
* too optimistic for my taste at high poll_exp's */
G.polladj_count += MINPOLL;
@@ -1756,10 +1823,10 @@ recv_and_process_client_pkt(void /*int fd*/)
uint8_t query_status;
l_fixedpt_t query_xmttime;
- to = get_sock_lsa(G.listen_fd);
+ to = get_sock_lsa(G_listen_fd);
from = xzalloc(to->len);
- size = recv_from_to(G.listen_fd, &msg, sizeof(msg), MSG_DONTWAIT, from, &to->u.sa, to->len);
+ size = recv_from_to(G_listen_fd, &msg, sizeof(msg), MSG_DONTWAIT, from, &to->u.sa, to->len);
if (size != NTP_MSGSIZE_NOAUTH && size != NTP_MSGSIZE) {
char *addr;
if (size < 0) {
@@ -1802,7 +1869,7 @@ recv_and_process_client_pkt(void /*int fd*/)
/* We reply from the local address packet was sent to,
* this makes to/from look swapped here: */
- do_sendto(G.listen_fd,
+ do_sendto(G_listen_fd,
/*from:*/ &to->u.sa, /*to:*/ from, /*addrlen:*/ to->len,
&msg, size);
@@ -1941,11 +2008,11 @@ static NOINLINE void ntp_init(char **argv)
logmode = LOGMODE_NONE;
}
#if ENABLE_FEATURE_NTPD_SERVER
- G.listen_fd = -1;
+ G_listen_fd = -1;
if (opts & OPT_l) {
- G.listen_fd = create_and_bind_dgram_or_die(NULL, 123);
- socket_want_pktinfo(G.listen_fd);
- setsockopt(G.listen_fd, IPPROTO_IP, IP_TOS, &const_IPTOS_LOWDELAY, sizeof(const_IPTOS_LOWDELAY));
+ G_listen_fd = create_and_bind_dgram_or_die(NULL, 123);
+ socket_want_pktinfo(G_listen_fd);
+ setsockopt(G_listen_fd, IPPROTO_IP, IP_TOS, &const_IPTOS_LOWDELAY, sizeof(const_IPTOS_LOWDELAY));
}
#endif
/* I hesitate to set -20 prio. -15 should be high enough for timekeeping */
@@ -2019,8 +2086,8 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
i = 0;
#if ENABLE_FEATURE_NTPD_SERVER
- if (G.listen_fd != -1) {
- pfd[0].fd = G.listen_fd;
+ if (G_listen_fd != -1) {
+ pfd[0].fd = G_listen_fd;
pfd[0].events = POLLIN;
i++;
}
@@ -2065,8 +2132,23 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
timeout++; /* (nextaction - G.cur_time) rounds down, compensating */
/* Here we may block */
- VERB2 bb_error_msg("poll:%us, sockets:%u, poll interval:%us", timeout, i, 1 << G.poll_exp);
+ VERB2 {
+ if (i > (ENABLE_FEATURE_NTPD_SERVER && G_listen_fd != -1)) {
+ /* We wait for at least one reply.
+ * Poll for it, without wasting time for message.
+ * Since replies often come under 1 second, this also
+ * reduces clutter in logs.
+ */
+ nfds = poll(pfd, i, 1000);
+ if (nfds != 0)
+ goto did_poll;
+ if (--timeout <= 0)
+ goto did_poll;
+ }
+ bb_error_msg("poll:%us sockets:%u interval:%us", timeout, i, 1 << G.poll_exp);
+ }
nfds = poll(pfd, i, timeout * 1000);
+ did_poll:
gettime1900d(); /* sets G.cur_time */
if (nfds <= 0) {
if (G.script_name && G.cur_time - G.last_script_run > 11*60) {
diff --git a/networking/ping.c b/networking/ping.c
index 5ed355c..d7b6fc6 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -149,31 +149,6 @@ enum {
PINGINTERVAL = 1, /* 1 second */
};
-/* Common routines */
-
-static int in_cksum(unsigned short *buf, int sz)
-{
- int nleft = sz;
- int sum = 0;
- unsigned short *w = buf;
- unsigned short ans = 0;
-
- while (nleft > 1) {
- sum += *w++;
- nleft -= 2;
- }
-
- if (nleft == 1) {
- *(unsigned char *) (&ans) = *(unsigned char *) w;
- sum += ans;
- }
-
- sum = (sum >> 16) + (sum & 0xFFFF);
- sum += (sum >> 16);
- ans = ~sum;
- return ans;
-}
-
#if !ENABLE_FEATURE_FANCY_PING
/* Simple version */
@@ -201,7 +176,7 @@ static void ping4(len_and_sockaddr *lsa)
pkt = (struct icmp *) G.packet;
memset(pkt, 0, sizeof(G.packet));
pkt->icmp_type = ICMP_ECHO;
- pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(G.packet));
+ pkt->icmp_cksum = inet_cksum((uint16_t *) pkt, sizeof(G.packet));
xsendto(pingsock, G.packet, DEFDATALEN + ICMP_MINLEN, &lsa->u.sa, lsa->len);
@@ -493,7 +468,7 @@ static void sendping4(int junk UNUSED_PARAM)
/* No hton: we'll read it back on the same machine */
*(uint32_t*)&pkt->icmp_dun = monotonic_us();
- pkt->icmp_cksum = in_cksum((unsigned short *) pkt, datalen + ICMP_MINLEN);
+ pkt->icmp_cksum = inet_cksum((uint16_t *) pkt, datalen + ICMP_MINLEN);
sendping_tail(sendping4, ICMP_MINLEN);
}
@@ -512,7 +487,7 @@ static void sendping6(int junk UNUSED_PARAM)
/*if (datalen >= 4)*/
*(uint32_t*)(&pkt->icmp6_data8[4]) = monotonic_us();
- //TODO? pkt->icmp_cksum = in_cksum(...);
+ //TODO? pkt->icmp_cksum = inet_cksum(...);
sendping_tail(sendping6, sizeof(struct icmp6_hdr));
}
@@ -638,7 +613,7 @@ static void unpack4(char *buf, int sz, struct sockaddr_in *from)
}
}
#if ENABLE_PING6
-static void unpack6(char *packet, int sz, /*struct sockaddr_in6 *from,*/ int hoplimit)
+static void unpack6(char *packet, int sz, struct sockaddr_in6 *from, int hoplimit)
{
struct icmp6_hdr *icmppkt;
char buf[INET6_ADDRSTRLEN];
@@ -658,7 +633,7 @@ static void unpack6(char *packet, int sz, /*struct sockaddr_in6 *from,*/ int hop
if (sz >= sizeof(struct icmp6_hdr) + sizeof(uint32_t))
tp = (uint32_t *) &icmppkt->icmp6_data8[4];
unpack_tail(sz, tp,
- inet_ntop(AF_INET6, &pingaddr.sin6.sin6_addr,
+ inet_ntop(AF_INET6, &from->sin6_addr,
buf, sizeof(buf)),
recv_seq, hoplimit);
} else if (icmppkt->icmp6_type != ICMP6_ECHO_REQUEST) {
@@ -808,7 +783,7 @@ static void ping6(len_and_sockaddr *lsa)
move_from_unaligned_int(hoplimit, CMSG_DATA(mp));
}
}
- unpack6(G.rcv_packet, c, /*&from,*/ hoplimit);
+ unpack6(G.rcv_packet, c, &from, hoplimit);
if (pingcount && nreceived >= pingcount)
break;
}
diff --git a/networking/route.c b/networking/route.c
index 194d9ae..f6b5885 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -35,6 +35,7 @@
#include <net/route.h>
#include <net/if.h>
+
#include "libbb.h"
#include "inet_common.h"
diff --git a/networking/tftp.c b/networking/tftp.c
index 043b879..ce48a1e 100644
--- a/networking/tftp.c
+++ b/networking/tftp.c
@@ -789,8 +789,9 @@ int tftpd_main(int argc UNUSED_PARAM, char **argv)
openlog(applet_name, LOG_PID, LOG_DAEMON);
logmode = LOGMODE_SYSLOG;
}
- if (argv[0])
- xchdir(argv[0]);
+ if (argv[0]) {
+ xchroot(argv[0]);
+ }
result = recv_from_to(STDIN_FILENO, block_buf, sizeof(block_buf),
0 /* flags */,
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 8af5531..bc1d71b 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -423,39 +423,6 @@ wait_for_reply(len_and_sockaddr *from_lsa, struct sockaddr *to, unsigned *timest
return read_len;
}
-/*
- * Checksum routine for Internet Protocol family headers (C Version)
- */
-static uint16_t
-in_cksum(uint16_t *addr, int len)
-{
- int nleft = len;
- uint16_t *w = addr;
- uint16_t answer;
- int sum = 0;
-
- /*
- * Our algorithm is simple, using a 32 bit accumulator (sum),
- * we add sequential 16 bit words to it, and at the end, fold
- * back all the carry bits from the top 16 bits into the lower
- * 16 bits.
- */
- while (nleft > 1) {
- sum += *w++;
- nleft -= 2;
- }
-
- /* mop up an odd byte, if necessary */
- if (nleft == 1)
- sum += *(unsigned char *)w;
-
- /* add back carry outs from top 16 bits to low 16 bits */
- sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
- sum += (sum >> 16); /* add carry */
- answer = ~sum; /* truncate to 16 bits */
- return answer;
-}
-
static void
send_probe(int seq, int ttl)
{
@@ -482,7 +449,7 @@ send_probe(int seq, int ttl)
/* Always calculate checksum for icmp packets */
outicmp->icmp_cksum = 0;
- outicmp->icmp_cksum = in_cksum((uint16_t *)outicmp,
+ outicmp->icmp_cksum = inet_cksum((uint16_t *)outicmp,
packlen - (sizeof(*outip) + optlen));
if (outicmp->icmp_cksum == 0)
outicmp->icmp_cksum = 0xffff;
diff --git a/networking/udhcp/arpping.c b/networking/udhcp/arpping.c
index fa23557..155ec01 100644
--- a/networking/udhcp/arpping.c
+++ b/networking/udhcp/arpping.c
@@ -118,8 +118,13 @@ int FAST_FUNC arpping(uint32_t test_nip,
break;
}
}
- timeout_ms -= (unsigned)monotonic_ms() - prevTime;
- } while (timeout_ms > 0);
+ timeout_ms -= (unsigned)monotonic_ms() - prevTime + 1;
+
+ /* We used to check "timeout_ms > 0", but
+ * this is more under/overflow-resistant
+ * (people did see overflows here when system time jumps):
+ */
+ } while ((unsigned)timeout_ms <= 2000);
ret:
close(s);
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c
index 70e3461..ae0e0d3 100644
--- a/networking/udhcp/common.c
+++ b/networking/udhcp/common.c
@@ -29,16 +29,19 @@ const struct dhcp_optflag dhcp_optflags[] = {
// { OPTION_IP | OPTION_LIST , 0x07 }, /* DHCP_LOG_SERVER */
// { OPTION_IP | OPTION_LIST , 0x08 }, /* DHCP_COOKIE_SERVER */
{ OPTION_IP | OPTION_LIST , 0x09 }, /* DHCP_LPR_SERVER */
- { OPTION_STRING | OPTION_REQ, 0x0c }, /* DHCP_HOST_NAME */
+ { OPTION_STRING_HOST | OPTION_REQ, 0x0c }, /* DHCP_HOST_NAME */
{ OPTION_U16 , 0x0d }, /* DHCP_BOOT_SIZE */
- { OPTION_STRING | OPTION_REQ, 0x0f }, /* DHCP_DOMAIN_NAME */
+ { OPTION_STRING_HOST | OPTION_REQ, 0x0f }, /* DHCP_DOMAIN_NAME */
{ OPTION_IP , 0x10 }, /* DHCP_SWAP_SERVER */
{ OPTION_STRING , 0x11 }, /* DHCP_ROOT_PATH */
{ OPTION_U8 , 0x17 }, /* DHCP_IP_TTL */
{ OPTION_U16 , 0x1a }, /* DHCP_MTU */
+//TODO: why do we request DHCP_BROADCAST? Can't we assume that
+//in the unlikely case it is different from typical N.N.255.255,
+//server would let us know anyway?
{ OPTION_IP | OPTION_REQ, 0x1c }, /* DHCP_BROADCAST */
{ OPTION_IP_PAIR | OPTION_LIST , 0x21 }, /* DHCP_ROUTES */
- { OPTION_STRING , 0x28 }, /* DHCP_NIS_DOMAIN */
+ { OPTION_STRING_HOST , 0x28 }, /* DHCP_NIS_DOMAIN */
{ OPTION_IP | OPTION_LIST , 0x29 }, /* DHCP_NIS_SERVER */
{ OPTION_IP | OPTION_LIST | OPTION_REQ, 0x2a }, /* DHCP_NTP_SERVER */
{ OPTION_IP | OPTION_LIST , 0x2c }, /* DHCP_WINS_SERVER */
@@ -46,7 +49,7 @@ const struct dhcp_optflag dhcp_optflags[] = {
{ OPTION_IP , 0x36 }, /* DHCP_SERVER_ID */
{ OPTION_STRING , 0x38 }, /* DHCP_ERR_MESSAGE */
//TODO: must be combined with 'sname' and 'file' handling:
- { OPTION_STRING , 0x42 }, /* DHCP_TFTP_SERVER_NAME */
+ { OPTION_STRING_HOST , 0x42 }, /* DHCP_TFTP_SERVER_NAME */
{ OPTION_STRING , 0x43 }, /* DHCP_BOOT_FILE */
//TODO: not a string, but a set of LASCII strings:
// { OPTION_STRING , 0x4D }, /* DHCP_USER_CLASS */
@@ -54,12 +57,13 @@ const struct dhcp_optflag dhcp_optflags[] = {
{ OPTION_DNS_STRING | OPTION_LIST , 0x77 }, /* DHCP_DOMAIN_SEARCH */
{ OPTION_SIP_SERVERS , 0x78 }, /* DHCP_SIP_SERVERS */
#endif
- { OPTION_STATIC_ROUTES , 0x79 }, /* DHCP_STATIC_ROUTES */
+ { OPTION_STATIC_ROUTES | OPTION_LIST , 0x79 }, /* DHCP_STATIC_ROUTES */
#if ENABLE_FEATURE_UDHCP_8021Q
{ OPTION_U16 , 0x84 }, /* DHCP_VLAN_ID */
{ OPTION_U8 , 0x85 }, /* DHCP_VLAN_PRIORITY */
#endif
- { OPTION_STATIC_ROUTES , 0xf9 }, /* DHCP_MS_STATIC_ROUTES */
+ { OPTION_6RD , 0xd4 }, /* DHCP_6RD */
+ { OPTION_STATIC_ROUTES | OPTION_LIST , 0xf9 }, /* DHCP_MS_STATIC_ROUTES */
{ OPTION_STRING , 0xfc }, /* DHCP_WPAD */
/* Options below have no match in dhcp_option_strings[],
@@ -119,13 +123,12 @@ const char dhcp_option_strings[] ALIGN1 =
// is not handled yet by "string->option" conversion code:
"sipsrv" "\0" /* DHCP_SIP_SERVERS */
#endif
-// doesn't work in udhcpd.conf since OPTION_STATIC_ROUTES
-// is not handled yet by "string->option" conversion code:
"staticroutes" "\0"/* DHCP_STATIC_ROUTES */
#if ENABLE_FEATURE_UDHCP_8021Q
"vlanid" "\0" /* DHCP_VLAN_ID */
"vlanpriority" "\0"/* DHCP_VLAN_PRIORITY */
#endif
+ "ip6rd" "\0" /* DHCP_6RD */
"msstaticroutes""\0"/* DHCP_MS_STATIC_ROUTES */
"wpad" "\0" /* DHCP_WPAD */
;
@@ -143,6 +146,7 @@ const uint8_t dhcp_option_lengths[] ALIGN1 = {
[OPTION_IP_PAIR] = 8,
// [OPTION_BOOLEAN] = 1,
[OPTION_STRING] = 1, /* ignored by udhcp_str2optset */
+ [OPTION_STRING_HOST] = 1, /* ignored by udhcp_str2optset */
#if ENABLE_FEATURE_UDHCP_RFC3397
[OPTION_DNS_STRING] = 1, /* ignored by both udhcp_str2optset and xmalloc_optname_optval */
[OPTION_SIP_SERVERS] = 1,
@@ -154,6 +158,7 @@ const uint8_t dhcp_option_lengths[] ALIGN1 = {
[OPTION_S32] = 4,
/* Just like OPTION_STRING, we use minimum length here */
[OPTION_STATIC_ROUTES] = 5,
+ [OPTION_6RD] = 22, /* ignored by udhcp_str2optset */
};
@@ -331,7 +336,8 @@ int FAST_FUNC udhcp_str2nip(const char *str, void *arg)
lsa = host_and_af2sockaddr(str, 0, AF_INET);
if (!lsa)
return 0;
- *(uint32_t*)arg = lsa->u.sin.sin_addr.s_addr;
+ /* arg maybe unaligned */
+ move_to_unaligned32((uint32_t*)arg, lsa->u.sin.sin_addr.s_addr);
free(lsa);
return 1;
}
@@ -411,7 +417,9 @@ static NOINLINE void attach_option(
/* actually 255 is ok too, but adding a space can overlow it */
existing->data = xrealloc(existing->data, OPT_DATA + 1 + old_len + length);
- if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING) {
+ if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING
+ || (optflag->flags & OPTION_TYPE_MASK) == OPTION_STRING_HOST
+ ) {
/* add space separator between STRING options in a list */
existing->data[OPT_DATA + old_len] = ' ';
old_len++;
@@ -428,13 +436,14 @@ static NOINLINE void attach_option(
int FAST_FUNC udhcp_str2optset(const char *const_str, void *arg)
{
struct option_set **opt_list = arg;
- char *opt, *val, *endptr;
+ char *opt, *val;
char *str;
const struct dhcp_optflag *optflag;
struct dhcp_optflag bin_optflag;
unsigned optcode;
int retval, length;
- char buffer[8] ALIGNED(4);
+ /* IP_PAIR needs 8 bytes, STATIC_ROUTES needs 9 max */
+ char buffer[9] ALIGNED(4);
uint16_t *result_u16 = (uint16_t *) buffer;
uint32_t *result_u32 = (uint32_t *) buffer;
@@ -475,6 +484,7 @@ int FAST_FUNC udhcp_str2optset(const char *const_str, void *arg)
retval = udhcp_str2nip(val, buffer + 4);
break;
case OPTION_STRING:
+ case OPTION_STRING_HOST:
#if ENABLE_FEATURE_UDHCP_RFC3397
case OPTION_DNS_STRING:
#endif
@@ -491,34 +501,53 @@ int FAST_FUNC udhcp_str2optset(const char *const_str, void *arg)
// break;
// }
case OPTION_U8:
- buffer[0] = strtoul(val, &endptr, 0);
- retval = (endptr[0] == '\0');
+ buffer[0] = bb_strtou32(val, NULL, 0);
+ retval = (errno == 0);
break;
/* htonX are macros in older libc's, using temp var
* in code below for safety */
/* TODO: use bb_strtoX? */
case OPTION_U16: {
- unsigned long tmp = strtoul(val, &endptr, 0);
+ uint32_t tmp = bb_strtou32(val, NULL, 0);
*result_u16 = htons(tmp);
- retval = (endptr[0] == '\0' /*&& tmp < 0x10000*/);
+ retval = (errno == 0 /*&& tmp < 0x10000*/);
break;
}
// case OPTION_S16: {
-// long tmp = strtol(val, &endptr, 0);
+// long tmp = bb_strtoi32(val, NULL, 0);
// *result_u16 = htons(tmp);
-// retval = (endptr[0] == '\0');
+// retval = (errno == 0);
// break;
// }
case OPTION_U32: {
- unsigned long tmp = strtoul(val, &endptr, 0);
+ uint32_t tmp = bb_strtou32(val, NULL, 0);
*result_u32 = htonl(tmp);
- retval = (endptr[0] == '\0');
+ retval = (errno == 0);
break;
}
case OPTION_S32: {
- long tmp = strtol(val, &endptr, 0);
+ int32_t tmp = bb_strtoi32(val, NULL, 0);
*result_u32 = htonl(tmp);
- retval = (endptr[0] == '\0');
+ retval = (errno == 0);
+ break;
+ }
+ case OPTION_STATIC_ROUTES: {
+ /* Input: "a.b.c.d/m" */
+ /* Output: mask(1 byte),pfx(0-4 bytes),gw(4 bytes) */
+ unsigned mask;
+ char *slash = strchr(val, '/');
+ if (slash) {
+ *slash = '\0';
+ retval = udhcp_str2nip(val, buffer + 1);
+ buffer[0] = mask = bb_strtou(slash + 1, NULL, 10);
+ val = strtok(NULL, ", \t/-");
+ if (!val || mask > 32 || errno)
+ retval = 0;
+ if (retval) {
+ length = ((mask + 7) >> 3) + 5;
+ retval = udhcp_str2nip(val, buffer + (length - 4));
+ }
+ }
break;
}
case OPTION_BIN: /* handled in attach_option() */
@@ -529,7 +558,26 @@ int FAST_FUNC udhcp_str2optset(const char *const_str, void *arg)
}
if (retval)
attach_option(opt_list, optflag, opt, length);
- } while (retval && optflag->flags & OPTION_LIST);
+ } while (retval && (optflag->flags & OPTION_LIST));
return retval;
}
+
+/* note: ip is a pointer to an IPv6 in network order, possibly misaliged */
+int FAST_FUNC sprint_nip6(char *dest, /*const char *pre,*/ const uint8_t *ip)
+{
+ char hexstrbuf[16 * 2];
+ bin2hex(hexstrbuf, (void*)ip, 16);
+ return sprintf(dest, /* "%s" */
+ "%.4s:%.4s:%.4s:%.4s:%.4s:%.4s:%.4s:%.4s",
+ /* pre, */
+ hexstrbuf + 0 * 4,
+ hexstrbuf + 1 * 4,
+ hexstrbuf + 2 * 4,
+ hexstrbuf + 3 * 4,
+ hexstrbuf + 4 * 4,
+ hexstrbuf + 5 * 4,
+ hexstrbuf + 6 * 4,
+ hexstrbuf + 7 * 4
+ );
+}
diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
index ad6991c..cfd5867 100644
--- a/networking/udhcp/common.h
+++ b/networking/udhcp/common.h
@@ -80,6 +80,9 @@ enum {
OPTION_IP = 1,
OPTION_IP_PAIR,
OPTION_STRING,
+ /* Opts of STRING_HOST type will be sanitized before they are passed
+ * to udhcpc script's environment: */
+ OPTION_STRING_HOST,
// OPTION_BOOLEAN,
OPTION_U8,
OPTION_U16,
@@ -88,6 +91,7 @@ enum {
OPTION_S32,
OPTION_BIN,
OPTION_STATIC_ROUTES,
+ OPTION_6RD,
#if ENABLE_FEATURE_UDHCP_RFC3397
OPTION_DNS_STRING, /* RFC1035 compressed domain name list */
OPTION_SIP_SERVERS,
@@ -103,7 +107,7 @@ enum {
/* DHCP option codes (partial list). See RFC 2132 and
* http://www.iana.org/assignments/bootp-dhcp-parameters/
* Commented out options are handled by common option machinery,
- * uncommented ones have spacial cases (grep for them to see).
+ * uncommented ones have special cases (grep for them to see).
*/
#define DHCP_PADDING 0x00
#define DHCP_SUBNET 0x01
@@ -248,6 +252,7 @@ struct option_set *udhcp_find_option(struct option_set *opt_list, uint8_t code)
/*** Logging ***/
#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
+# define IF_UDHCP_VERBOSE(...) __VA_ARGS__
extern unsigned dhcp_verbose;
# define log1(...) do { if (dhcp_verbose >= 1) bb_info_msg(__VA_ARGS__); } while (0)
# if CONFIG_UDHCP_DEBUG >= 2
@@ -263,6 +268,7 @@ void udhcp_dump_packet(struct dhcp_packet *packet) FAST_FUNC;
# define log3(...) ((void)0)
# endif
#else
+# define IF_UDHCP_VERBOSE(...)
# define udhcp_dump_packet(...) ((void)0)
# define log1(...) ((void)0)
# define log2(...) ((void)0)
@@ -277,8 +283,6 @@ int FAST_FUNC udhcp_str2nip(const char *str, void *arg);
/* 2nd param is "struct option_set**" */
int FAST_FUNC udhcp_str2optset(const char *str, void *arg);
-uint16_t udhcp_checksum(void *addr, int count) FAST_FUNC;
-
void udhcp_init_header(struct dhcp_packet *packet, char type) FAST_FUNC;
int udhcp_recv_kernel_packet(struct dhcp_packet *packet, int fd) FAST_FUNC;
@@ -307,6 +311,9 @@ int arpping(uint32_t test_nip,
uint8_t *from_mac,
const char *interface) FAST_FUNC;
+/* note: ip is a pointer to an IPv6 in network order, possibly misaliged */
+int sprint_nip6(char *dest, /*const char *pre,*/ const uint8_t *ip) FAST_FUNC;
+
POP_SAVED_FUNCTION_VISIBILITY
#endif
diff --git a/networking/udhcp/d6_common.h b/networking/udhcp/d6_common.h
new file mode 100644
index 0000000..eb211ea
--- a/dev/null
+++ b/networking/udhcp/d6_common.h
@@ -0,0 +1,127 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Copyright (C) 2011 Denys Vlasenko.
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+#ifndef UDHCP_D6_COMMON_H
+#define UDHCP_D6_COMMON_H 1
+
+#include <netinet/ip6.h>
+
+PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
+
+
+/*** DHCPv6 packet ***/
+
+/* DHCPv6 protocol. See RFC 3315 */
+#define D6_MSG_SOLICIT 1
+#define D6_MSG_ADVERTISE 2
+#define D6_MSG_REQUEST 3
+#define D6_MSG_CONFIRM 4
+#define D6_MSG_RENEW 5
+#define D6_MSG_REBIND 6
+#define D6_MSG_REPLY 7
+#define D6_MSG_RELEASE 8
+#define D6_MSG_DECLINE 9
+#define D6_MSG_RECONFIGURE 10
+#define D6_MSG_INFORMATION_REQUEST 11
+#define D6_MSG_RELAY_FORW 12
+#define D6_MSG_RELAY_REPL 13
+
+struct d6_packet {
+ union {
+ uint8_t d6_msg_type;
+ uint32_t d6_xid32;
+ } d6_u;
+ uint8_t d6_options[576 - sizeof(struct iphdr) - sizeof(struct udphdr) - 4
+ + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS];
+} PACKED;
+#define d6_msg_type d6_u.d6_msg_type
+#define d6_xid32 d6_u.d6_xid32
+
+struct ip6_udp_d6_packet {
+ struct ip6_hdr ip6;
+ struct udphdr udp;
+ struct d6_packet data;
+} PACKED;
+
+struct udp_d6_packet {
+ struct udphdr udp;
+ struct d6_packet data;
+} PACKED;
+
+/*** Options ***/
+
+struct d6_option {
+ uint8_t code_hi;
+ uint8_t code;
+ uint8_t len_hi;
+ uint8_t len;
+ uint8_t data[1];
+} PACKED;
+
+#define D6_OPT_CLIENTID 1
+#define D6_OPT_SERVERID 2
+#define D6_OPT_IA_NA 3
+#define D6_OPT_IA_TA 4
+#define D6_OPT_IAADDR 5
+#define D6_OPT_ORO 6
+#define D6_OPT_PREFERENCE 7
+#define D6_OPT_ELAPSED_TIME 8
+#define D6_OPT_RELAY_MSG 9
+#define D6_OPT_AUTH 11
+#define D6_OPT_UNICAST 12
+#define D6_OPT_STATUS_CODE 13
+#define D6_OPT_RAPID_COMMIT 14
+#define D6_OPT_USER_CLASS 15
+#define D6_OPT_VENDOR_CLASS 16
+#define D6_OPT_VENDOR_OPTS 17
+#define D6_OPT_INTERFACE_ID 18
+#define D6_OPT_RECONF_MSG 19
+#define D6_OPT_RECONF_ACCEPT 20
+
+#define D6_OPT_IA_PD 25
+#define D6_OPT_IAPREFIX 26
+
+/*** Other shared functions ***/
+
+struct client6_data_t {
+ struct d6_option *server_id;
+ struct d6_option *ia_na;
+ char **env_ptr;
+ unsigned env_idx;
+};
+
+#define client6_data (*(struct client6_data_t*)(&bb_common_bufsiz1[COMMON_BUFSIZE - sizeof(struct client6_data_t)]))
+
+int FAST_FUNC d6_listen_socket(int port, const char *inf);
+
+int FAST_FUNC d6_recv_kernel_packet(
+ struct in6_addr *peer_ipv6,
+ struct d6_packet *packet, int fd
+);
+
+int FAST_FUNC d6_send_raw_packet(
+ struct d6_packet *d6_pkt, unsigned d6_pkt_size,
+ struct in6_addr *src_ipv6, int source_port,
+ struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp,
+ int ifindex
+);
+
+int FAST_FUNC d6_send_kernel_packet(
+ struct d6_packet *d6_pkt, unsigned d6_pkt_size,
+ struct in6_addr *src_ipv6, int source_port,
+ struct in6_addr *dst_ipv6, int dest_port
+);
+
+#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
+void FAST_FUNC d6_dump_packet(struct d6_packet *packet);
+#else
+# define d6_dump_packet(packet) ((void)0)
+#endif
+
+
+POP_SAVED_FUNCTION_VISIBILITY
+
+#endif
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c
new file mode 100644
index 0000000..a792a9d
--- a/dev/null
+++ b/networking/udhcp/d6_dhcpc.c
@@ -0,0 +1,1483 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * DHCPv6 client.
+ *
+ * 2011-11.
+ * WARNING: THIS CODE IS INCOMPLETE. IT IS NOWHERE NEAR
+ * TO BE READY FOR PRODUCTION USE.
+ *
+ * Copyright (C) 2011 Denys Vlasenko.
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+
+//config:config UDHCPC6
+//config: bool "udhcp client for DHCPv6 (udhcpc6)"
+//config: default n # not yet ready
+//config: help
+//config: udhcpc6 is a DHCPv6 client
+
+//applet:IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_UDHCPC6) += d6_dhcpc.o d6_packet.o d6_socket.o common.o socket.o signalpipe.o
+
+
+#include <syslog.h>
+/* Override ENABLE_FEATURE_PIDFILE - ifupdown needs our pidfile to always exist */
+#define WANT_PIDFILE 1
+#include "common.h"
+#include "dhcpd.h"
+#include "dhcpc.h"
+#include "d6_common.h"
+
+#include <netinet/if_ether.h>
+#include <netpacket/packet.h>
+#include <linux/filter.h>
+
+/* "struct client_config_t client_config" is in bb_common_bufsiz1 */
+
+
+#if ENABLE_LONG_OPTS
+static const char udhcpc6_longopts[] ALIGN1 =
+ "interface\0" Required_argument "i"
+ "now\0" No_argument "n"
+ "pidfile\0" Required_argument "p"
+ "quit\0" No_argument "q"
+ "release\0" No_argument "R"
+ "request\0" Required_argument "r"
+ "script\0" Required_argument "s"
+ "timeout\0" Required_argument "T"
+ "retries\0" Required_argument "t"
+ "tryagain\0" Required_argument "A"
+ "syslog\0" No_argument "S"
+ "request-option\0" Required_argument "O"
+ "no-default-options\0" No_argument "o"
+ "foreground\0" No_argument "f"
+ "background\0" No_argument "b"
+/// IF_FEATURE_UDHCPC_ARPING("arping\0" No_argument "a")
+ IF_FEATURE_UDHCP_PORT("client-port\0" Required_argument "P")
+ ;
+#endif
+/* Must match getopt32 option string order */
+enum {
+ OPT_i = 1 << 0,
+ OPT_n = 1 << 1,
+ OPT_p = 1 << 2,
+ OPT_q = 1 << 3,
+ OPT_R = 1 << 4,
+ OPT_r = 1 << 5,
+ OPT_s = 1 << 6,
+ OPT_T = 1 << 7,
+ OPT_t = 1 << 8,
+ OPT_S = 1 << 9,
+ OPT_A = 1 << 10,
+ OPT_O = 1 << 11,
+ OPT_o = 1 << 12,
+ OPT_x = 1 << 13,
+ OPT_f = 1 << 14,
+/* The rest has variable bit positions, need to be clever */
+ OPTBIT_f = 14,
+ USE_FOR_MMU( OPTBIT_b,)
+ ///IF_FEATURE_UDHCPC_ARPING(OPTBIT_a,)
+ IF_FEATURE_UDHCP_PORT( OPTBIT_P,)
+ USE_FOR_MMU( OPT_b = 1 << OPTBIT_b,)
+ ///IF_FEATURE_UDHCPC_ARPING(OPT_a = 1 << OPTBIT_a,)
+ IF_FEATURE_UDHCP_PORT( OPT_P = 1 << OPTBIT_P,)
+};
+
+
+/*** Utility functions ***/
+
+static void *d6_find_option(uint8_t *option, uint8_t *option_end, unsigned code)
+{
+ /* "length minus 4" */
+ int len_m4 = option_end - option - 4;
+ while (len_m4 >= 0) {
+ /* Next option's len is too big? */
+ if (option[3] > len_m4)
+ return NULL; /* yes. bogus packet! */
+ /* So far we treat any opts with code >255
+ * or len >255 as bogus, and stop at once.
+ * This simplifies big-endian handling.
+ */
+ if (option[0] != 0 || option[2] != 0)
+ return NULL;
+ /* Option seems to be valid */
+ /* Does its code match? */
+ if (option[1] == code)
+ return option; /* yes! */
+ option += option[3] + 4;
+ len_m4 -= option[3] + 4;
+ }
+ return NULL;
+}
+
+static void *d6_copy_option(uint8_t *option, uint8_t *option_end, unsigned code)
+{
+ uint8_t *opt = d6_find_option(option, option_end, code);
+ if (!opt)
+ return opt;
+ return memcpy(xmalloc(opt[3] + 4), opt, opt[3] + 4);
+}
+
+static void *d6_store_blob(void *dst, const void *src, unsigned len)
+{
+ memcpy(dst, src, len);
+ return dst + len;
+}
+
+
+/*** Script execution code ***/
+
+static char** new_env(void)
+{
+ client6_data.env_ptr = xrealloc_vector(client6_data.env_ptr, 3, client6_data.env_idx);
+ return &client6_data.env_ptr[client6_data.env_idx++];
+}
+
+/* put all the parameters into the environment */
+static void option_to_env(uint8_t *option, uint8_t *option_end)
+{
+ /* "length minus 4" */
+ int len_m4 = option_end - option - 4;
+ while (len_m4 >= 0) {
+ uint32_t v32;
+ char ipv6str[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")];
+
+ if (option[0] != 0 || option[2] != 0)
+ break;
+
+ switch (option[1]) {
+ //case D6_OPT_CLIENTID:
+ //case D6_OPT_SERVERID:
+ case D6_OPT_IA_NA:
+ case D6_OPT_IA_PD:
+ option_to_env(option + 16, option + 4 + option[3]);
+ break;
+ //case D6_OPT_IA_TA:
+ case D6_OPT_IAADDR:
+/* 0 1 2 3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | OPTION_IAADDR | option-len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | IPv6 address |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | preferred-lifetime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | valid-lifetime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ sprint_nip6(ipv6str, option + 4);
+ *new_env() = xasprintf("ipv6=%s", ipv6str);
+
+ move_from_unaligned32(v32, option + 4 + 16 + 4);
+ *new_env() = xasprintf("lease=%u", (unsigned)v32);
+ break;
+
+ //case D6_OPT_ORO:
+ //case D6_OPT_PREFERENCE:
+ //case D6_OPT_ELAPSED_TIME:
+ //case D6_OPT_RELAY_MSG:
+ //case D6_OPT_AUTH:
+ //case D6_OPT_UNICAST:
+ //case D6_OPT_STATUS_CODE:
+ //case D6_OPT_RAPID_COMMIT:
+ //case D6_OPT_USER_CLASS:
+ //case D6_OPT_VENDOR_CLASS:
+ //case D6_OPT_VENDOR_OPTS:
+ //case D6_OPT_INTERFACE_ID:
+ //case D6_OPT_RECONF_MSG:
+ //case D6_OPT_RECONF_ACCEPT:
+
+ case D6_OPT_IAPREFIX:
+/* 0 1 2 3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | OPTION_IAPREFIX | option-length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | preferred-lifetime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | valid-lifetime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | prefix-length | |
+ * +-+-+-+-+-+-+-+-+ IPv6 prefix |
+ * | (16 octets) |
+ * | |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+
+ */
+ //move_from_unaligned32(v32, option + 4 + 4);
+ //*new_env() = xasprintf("lease=%u", (unsigned)v32);
+
+ sprint_nip6(ipv6str, option + 4 + 4 + 1);
+ *new_env() = xasprintf("ipv6prefix=%s/%u", ipv6str, (unsigned)(option[4 + 4]));
+ }
+ option += 4 + option[3];
+ len_m4 -= 4 + option[3];
+ }
+}
+
+static char **fill_envp(struct d6_packet *packet)
+{
+ char **envp, **curr;
+
+ client6_data.env_ptr = NULL;
+ client6_data.env_idx = 0;
+
+ *new_env() = xasprintf("interface=%s", client_config.interface);
+
+ if (packet)
+ option_to_env(packet->d6_options, packet->d6_options + sizeof(packet->d6_options));
+
+ envp = curr = client6_data.env_ptr;
+ while (*curr)
+ putenv(*curr++);
+
+ return envp;
+}
+
+/* Call a script with a par file and env vars */
+static void d6_run_script(struct d6_packet *packet, const char *name)
+{
+ char **envp, **curr;
+ char *argv[3];
+
+ envp = fill_envp(packet);
+
+ /* call script */
+ log1("Executing %s %s", client_config.script, name);
+ argv[0] = (char*) client_config.script;
+ argv[1] = (char*) name;
+ argv[2] = NULL;
+ spawn_and_wait(argv);
+
+ for (curr = envp; *curr; curr++) {
+ log2(" %s", *curr);
+ bb_unsetenv_and_free(*curr);
+ }
+ free(envp);
+}
+
+
+/*** Sending/receiving packets ***/
+
+static ALWAYS_INLINE uint32_t random_xid(void)
+{
+ uint32_t t = rand() & htonl(0x00ffffff);
+ return t;
+}
+
+/* Initialize the packet with the proper defaults */
+static uint8_t *init_d6_packet(struct d6_packet *packet, char type, uint32_t xid)
+{
+ struct d6_option *clientid;
+
+ memset(packet, 0, sizeof(*packet));
+
+ packet->d6_xid32 = xid;
+ packet->d6_msg_type = type;
+
+ clientid = (void*)client_config.clientid;
+ return d6_store_blob(packet->d6_options, clientid, clientid->len + 2+2);
+}
+
+static uint8_t *add_d6_client_options(uint8_t *ptr)
+{
+ return ptr;
+ //uint8_t c;
+ //int i, end, len;
+
+ /* Add a "param req" option with the list of options we'd like to have
+ * from stubborn DHCP servers. Pull the data from the struct in common.c.
+ * No bounds checking because it goes towards the head of the packet. */
+ //...
+
+ /* Add -x options if any */
+ //...
+}
+
+static int d6_mcast_from_client_config_ifindex(struct d6_packet *packet, uint8_t *end)
+{
+ static const uint8_t FF02__1_2[16] = {
+ 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,
+ };
+
+ return d6_send_raw_packet(
+ packet, (end - (uint8_t*) packet),
+ /*src*/ NULL, CLIENT_PORT,
+ /*dst*/ (struct in6_addr*)FF02__1_2, SERVER_PORT, MAC_BCAST_ADDR,
+ client_config.ifindex
+ );
+}
+
+/* Milticast a DHCPv6 Solicit packet to the network, with an optionally requested IP.
+ *
+ * RFC 3315 17.1.1. Creation of Solicit Messages
+ *
+ * The client MUST include a Client Identifier option to identify itself
+ * to the server. The client includes IA options for any IAs to which
+ * it wants the server to assign addresses. The client MAY include
+ * addresses in the IAs as a hint to the server about addresses for
+ * which the client has a preference. ...
+ *
+ * The client uses IA_NA options to request the assignment of non-
+ * temporary addresses and uses IA_TA options to request the assignment
+ * of temporary addresses. Either IA_NA or IA_TA options, or a
+ * combination of both, can be included in DHCP messages.
+ *
+ * The client SHOULD include an Option Request option (see section 22.7)
+ * to indicate the options the client is interested in receiving. The
+ * client MAY additionally include instances of those options that are
+ * identified in the Option Request option, with data values as hints to
+ * the server about parameter values the client would like to have
+ * returned.
+ *
+ * The client includes a Reconfigure Accept option (see section 22.20)
+ * if the client is willing to accept Reconfigure messages from the
+ * server.
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | OPTION_CLIENTID | option-len |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ . .
+ . DUID .
+ . (variable length) .
+ . .
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | OPTION_IA_NA | option-len |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | IAID (4 octets) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | T1 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | T2 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ . IA_NA-options .
+ . .
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | OPTION_IAADDR | option-len |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | |
+ | IPv6 address |
+ | |
+ | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | preferred-lifetime |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | valid-lifetime |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ . .
+ . IAaddr-options .
+ . .
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | OPTION_ORO | option-len |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | requested-option-code-1 | requested-option-code-2 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | ... |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | OPTION_RECONF_ACCEPT | 0 |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+/* NOINLINE: limit stack usage in caller */
+static NOINLINE int send_d6_discover(uint32_t xid, struct in6_addr *requested_ipv6)
+{
+ struct d6_packet packet;
+ uint8_t *opt_ptr;
+ unsigned len;
+
+ /* Fill in: msg type, client id */
+ opt_ptr = init_d6_packet(&packet, D6_MSG_SOLICIT, xid);
+
+ /* Create new IA_NA, optionally with included IAADDR with requested IP */
+ free(client6_data.ia_na);
+ len = requested_ipv6 ? 2+2+4+4+4 + 2+2+16+4+4 : 2+2+4+4+4;
+ client6_data.ia_na = xzalloc(len);
+ client6_data.ia_na->code = D6_OPT_IA_NA;
+ client6_data.ia_na->len = len - 4;
+ *(uint32_t*)client6_data.ia_na->data = rand(); /* IAID */
+ if (requested_ipv6) {
+ struct d6_option *iaaddr = (void*)(client6_data.ia_na->data + 4+4+4);
+ iaaddr->code = D6_OPT_IAADDR;
+ iaaddr->len = 16+4+4;
+ memcpy(iaaddr->data, requested_ipv6, 16);
+ }
+ opt_ptr = d6_store_blob(opt_ptr, client6_data.ia_na, len);
+
+ /* Add options:
+ * "param req" option according to -O, options specified with -x
+ */
+ opt_ptr = add_d6_client_options(opt_ptr);
+
+ bb_info_msg("Sending discover...");
+ return d6_mcast_from_client_config_ifindex(&packet, opt_ptr);
+}
+
+/* Multicast a DHCPv6 request message
+ *
+ * RFC 3315 18.1.1. Creation and Transmission of Request Messages
+ *
+ * The client uses a Request message to populate IAs with addresses and
+ * obtain other configuration information. The client includes one or
+ * more IA options in the Request message. The server then returns
+ * addresses and other information about the IAs to the client in IA
+ * options in a Reply message.
+ *
+ * The client generates a transaction ID and inserts this value in the
+ * "transaction-id" field.
+ *
+ * The client places the identifier of the destination server in a
+ * Server Identifier option.
+ *
+ * The client MUST include a Client Identifier option to identify itself
+ * to the server. The client adds any other appropriate options,
+ * including one or more IA options (if the client is requesting that
+ * the server assign it some network addresses).
+ *
+ * The client MUST include an Option Request option (see section 22.7)
+ * to indicate the options the client is interested in receiving. The
+ * client MAY include options with data values as hints to the server
+ * about parameter values the client would like to have returned.
+ *
+ * The client includes a Reconfigure Accept option (see section 22.20)
+ * indicating whether or not the client is willing to accept Reconfigure
+ * messages from the server.
+ */
+/* NOINLINE: limit stack usage in caller */
+static NOINLINE int send_d6_select(uint32_t xid)
+{
+ struct d6_packet packet;
+ uint8_t *opt_ptr;
+
+ /* Fill in: msg type, client id */
+ opt_ptr = init_d6_packet(&packet, D6_MSG_REQUEST, xid);
+
+ /* server id */
+ opt_ptr = d6_store_blob(opt_ptr, client6_data.server_id, client6_data.server_id->len + 2+2);
+ /* IA NA (contains requested IP) */
+ opt_ptr = d6_store_blob(opt_ptr, client6_data.ia_na, client6_data.ia_na->len + 2+2);
+
+ /* Add options:
+ * "param req" option according to -O, options specified with -x
+ */
+ opt_ptr = add_d6_client_options(opt_ptr);
+
+ bb_info_msg("Sending select...");
+ return d6_mcast_from_client_config_ifindex(&packet, opt_ptr);
+}
+
+/* Unicast or broadcast a DHCP renew message
+ *
+ * RFC 3315 18.1.3. Creation and Transmission of Renew Messages
+ *
+ * To extend the valid and preferred lifetimes for the addresses
+ * associated with an IA, the client sends a Renew message to the server
+ * from which the client obtained the addresses in the IA containing an
+ * IA option for the IA. The client includes IA Address options in the
+ * IA option for the addresses associated with the IA. The server
+ * determines new lifetimes for the addresses in the IA according to the
+ * administrative configuration of the server. The server may also add
+ * new addresses to the IA. The server may remove addresses from the IA
+ * by setting the preferred and valid lifetimes of those addresses to
+ * zero.
+ *
+ * The server controls the time at which the client contacts the server
+ * to extend the lifetimes on assigned addresses through the T1 and T2
+ * parameters assigned to an IA.
+ *
+ * At time T1 for an IA, the client initiates a Renew/Reply message
+ * exchange to extend the lifetimes on any addresses in the IA. The
+ * client includes an IA option with all addresses currently assigned to
+ * the IA in its Renew message.
+ *
+ * If T1 or T2 is set to 0 by the server (for an IA_NA) or there are no
+ * T1 or T2 times (for an IA_TA), the client may send a Renew or Rebind
+ * message, respectively, at the client's discretion.
+ *
+ * The client sets the "msg-type" field to RENEW. The client generates
+ * a transaction ID and inserts this value in the "transaction-id"
+ * field.
+ *
+ * The client places the identifier of the destination server in a
+ * Server Identifier option.
+ *
+ * The client MUST include a Client Identifier option to identify itself
+ * to the server. The client adds any appropriate options, including
+ * one or more IA options. The client MUST include the list of
+ * addresses the client currently has associated with the IAs in the
+ * Renew message.
+ *
+ * The client MUST include an Option Request option (see section 22.7)
+ * to indicate the options the client is interested in receiving. The
+ * client MAY include options with data values as hints to the server
+ * about parameter values the client would like to have returned.
+ */
+/* NOINLINE: limit stack usage in caller */
+static NOINLINE int send_d6_renew(uint32_t xid, struct in6_addr *server_ipv6, struct in6_addr *our_cur_ipv6)
+{
+ struct d6_packet packet;
+ uint8_t *opt_ptr;
+
+ /* Fill in: msg type, client id */
+ opt_ptr = init_d6_packet(&packet, DHCPREQUEST, xid);
+
+ /* server id */
+ opt_ptr = d6_store_blob(opt_ptr, client6_data.server_id, client6_data.server_id->len + 2+2);
+ /* IA NA (contains requested IP) */
+ opt_ptr = d6_store_blob(opt_ptr, client6_data.ia_na, client6_data.ia_na->len + 2+2);
+
+ /* Add options:
+ * "param req" option according to -O, options specified with -x
+ */
+ opt_ptr = add_d6_client_options(opt_ptr);
+
+ bb_info_msg("Sending renew...");
+ if (server_ipv6)
+ return d6_send_kernel_packet(
+ &packet, (opt_ptr - (uint8_t*) &packet),
+ our_cur_ipv6, CLIENT_PORT,
+ server_ipv6, SERVER_PORT
+ );
+ return d6_mcast_from_client_config_ifindex(&packet, opt_ptr);
+}
+
+/* Unicast a DHCP release message */
+static int send_d6_release(struct in6_addr *server_ipv6, struct in6_addr *our_cur_ipv6)
+{
+ struct d6_packet packet;
+ uint8_t *opt_ptr;
+
+ /* Fill in: msg type, client id */
+ opt_ptr = init_d6_packet(&packet, D6_MSG_RELEASE, random_xid());
+ /* server id */
+ opt_ptr = d6_store_blob(opt_ptr, client6_data.server_id, client6_data.server_id->len + 2+2);
+ /* IA NA (contains our current IP) */
+ opt_ptr = d6_store_blob(opt_ptr, client6_data.ia_na, client6_data.ia_na->len + 2+2);
+
+ bb_info_msg("Sending release...");
+ return d6_send_kernel_packet(
+ &packet, (opt_ptr - (uint8_t*) &packet),
+ our_cur_ipv6, CLIENT_PORT,
+ server_ipv6, SERVER_PORT
+ );
+}
+
+/* Returns -1 on errors that are fatal for the socket, -2 for those that aren't */
+/* NOINLINE: limit stack usage in caller */
+static NOINLINE int d6_recv_raw_packet(struct in6_addr *peer_ipv6
+ UNUSED_PARAM
+ , struct d6_packet *d6_pkt, int fd)
+{
+ int bytes;
+ struct ip6_udp_d6_packet packet;
+
+ bytes = safe_read(fd, &packet, sizeof(packet));
+ if (bytes < 0) {
+ log1("Packet read error, ignoring");
+ /* NB: possible down interface, etc. Caller should pause. */
+ return bytes; /* returns -1 */
+ }
+
+ if (bytes < (int) (sizeof(packet.ip6) + sizeof(packet.udp))) {
+ log1("Packet is too short, ignoring");
+ return -2;
+ }
+
+ if (bytes < sizeof(packet.ip6) + ntohs(packet.ip6.ip6_plen)) {
+ /* packet is bigger than sizeof(packet), we did partial read */
+ log1("Oversized packet, ignoring");
+ return -2;
+ }
+
+ /* ignore any extra garbage bytes */
+ bytes = sizeof(packet.ip6) + ntohs(packet.ip6.ip6_plen);
+
+ /* make sure its the right packet for us, and that it passes sanity checks */
+ if (packet.ip6.ip6_nxt != IPPROTO_UDP
+ || (packet.ip6.ip6_vfc >> 4) != 6
+ || packet.udp.dest != htons(CLIENT_PORT)
+ /* || bytes > (int) sizeof(packet) - can't happen */
+ || packet.udp.len != packet.ip6.ip6_plen
+ ) {
+ log1("Unrelated/bogus packet, ignoring");
+ return -2;
+ }
+
+//How to do this for ipv6?
+// /* verify UDP checksum. IP header has to be modified for this */
+// memset(&packet.ip, 0, offsetof(struct iphdr, protocol));
+// /* ip.xx fields which are not memset: protocol, check, saddr, daddr */
+// packet.ip.tot_len = packet.udp.len; /* yes, this is needed */
+// check = packet.udp.check;
+// packet.udp.check = 0;
+// if (check && check != inet_cksum((uint16_t *)&packet, bytes)) {
+// log1("Packet with bad UDP checksum received, ignoring");
+// return -2;
+// }
+
+ log1("Received a packet");
+ d6_dump_packet(&packet.data);
+
+ bytes -= sizeof(packet.ip6) + sizeof(packet.udp);
+ memcpy(d6_pkt, &packet.data, bytes);
+ return bytes;
+}
+
+
+/*** Main ***/
+
+static int sockfd = -1;
+
+#define LISTEN_NONE 0
+#define LISTEN_KERNEL 1
+#define LISTEN_RAW 2
+static smallint listen_mode;
+
+/* initial state: (re)start DHCP negotiation */
+#define INIT_SELECTING 0
+/* discover was sent, DHCPOFFER reply received */
+#define REQUESTING 1
+/* select/renew was sent, DHCPACK reply received */
+#define BOUND 2
+/* half of lease passed, want to renew it by sending unicast renew requests */
+#define RENEWING 3
+/* renew requests were not answered, lease is almost over, send broadcast renew */
+#define REBINDING 4
+/* manually requested renew (SIGUSR1) */
+#define RENEW_REQUESTED 5
+/* release, possibly manually requested (SIGUSR2) */
+#define RELEASED 6
+static smallint state;
+
+static int d6_raw_socket(int ifindex)
+{
+ int fd;
+ struct sockaddr_ll sock;
+
+ /*
+ * Comment:
+ *
+ * I've selected not to see LL header, so BPF doesn't see it, too.
+ * The filter may also pass non-IP and non-ARP packets, but we do
+ * a more complete check when receiving the message in userspace.
+ *
+ * and filter shamelessly stolen from:
+ *
+ * http://www.flamewarmaster.de/software/dhcpclient/
+ *
+ * There are a few other interesting ideas on that page (look under
+ * "Motivation"). Use of netlink events is most interesting. Think
+ * of various network servers listening for events and reconfiguring.
+ * That would obsolete sending HUP signals and/or make use of restarts.
+ *
+ * Copyright: 2006, 2007 Stefan Rompf <sux@loplof.de>.
+ * License: GPL v2.
+ *
+ * TODO: make conditional?
+ */
+#if 0
+ static const struct sock_filter filter_instr[] = {
+ /* load 9th byte (protocol) */
+ BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 9),
+ /* jump to L1 if it is IPPROTO_UDP, else to L4 */
+ BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, IPPROTO_UDP, 0, 6),
+ /* L1: load halfword from offset 6 (flags and frag offset) */
+ BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 6),
+ /* jump to L4 if any bits in frag offset field are set, else to L2 */
+ BPF_JUMP(BPF_JMP|BPF_JSET|BPF_K, 0x1fff, 4, 0),
+ /* L2: skip IP header (load index reg with header len) */
+ BPF_STMT(BPF_LDX|BPF_B|BPF_MSH, 0),
+ /* load udp destination port from halfword[header_len + 2] */
+ BPF_STMT(BPF_LD|BPF_H|BPF_IND, 2),
+ /* jump to L3 if udp dport is CLIENT_PORT, else to L4 */
+ BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 68, 0, 1),
+ /* L3: accept packet */
+ BPF_STMT(BPF_RET|BPF_K, 0xffffffff),
+ /* L4: discard packet */
+ BPF_STMT(BPF_RET|BPF_K, 0),
+ };
+ static const struct sock_fprog filter_prog = {
+ .len = sizeof(filter_instr) / sizeof(filter_instr[0]),
+ /* casting const away: */
+ .filter = (struct sock_filter *) filter_instr,
+ };
+#endif
+
+ log1("Opening raw socket on ifindex %d", ifindex); //log2?
+
+ fd = xsocket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IPV6));
+ log1("Got raw socket fd %d", fd); //log2?
+
+ sock.sll_family = AF_PACKET;
+ sock.sll_protocol = htons(ETH_P_IPV6);
+ sock.sll_ifindex = ifindex;
+ xbind(fd, (struct sockaddr *) &sock, sizeof(sock));
+
+#if 0
+ if (CLIENT_PORT == 68) {
+ /* Use only if standard port is in use */
+ /* Ignoring error (kernel may lack support for this) */
+ if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &filter_prog,
+ sizeof(filter_prog)) >= 0)
+ log1("Attached filter to raw socket fd %d", fd); // log?
+ }
+#endif
+
+ log1("Created raw socket");
+
+ return fd;
+}
+
+static void change_listen_mode(int new_mode)
+{
+ log1("Entering listen mode: %s",
+ new_mode != LISTEN_NONE
+ ? (new_mode == LISTEN_KERNEL ? "kernel" : "raw")
+ : "none"
+ );
+
+ listen_mode = new_mode;
+ if (sockfd >= 0) {
+ close(sockfd);
+ sockfd = -1;
+ }
+ if (new_mode == LISTEN_KERNEL)
+ sockfd = udhcp_listen_socket(/*INADDR_ANY,*/ CLIENT_PORT, client_config.interface);
+ else if (new_mode != LISTEN_NONE)
+ sockfd = d6_raw_socket(client_config.ifindex);
+ /* else LISTEN_NONE: sockfd stays closed */
+}
+
+/* Called only on SIGUSR1 */
+static void perform_renew(void)
+{
+ bb_info_msg("Performing a DHCP renew");
+ switch (state) {
+ case BOUND:
+ change_listen_mode(LISTEN_KERNEL);
+ case RENEWING:
+ case REBINDING:
+ state = RENEW_REQUESTED;
+ break;
+ case RENEW_REQUESTED: /* impatient are we? fine, square 1 */
+ d6_run_script(NULL, "deconfig");
+ case REQUESTING:
+ case RELEASED:
+ change_listen_mode(LISTEN_RAW);
+ state = INIT_SELECTING;
+ break;
+ case INIT_SELECTING:
+ break;
+ }
+}
+
+static void perform_d6_release(struct in6_addr *server_ipv6, struct in6_addr *our_cur_ipv6)
+{
+ /* send release packet */
+ if (state == BOUND || state == RENEWING || state == REBINDING) {
+ bb_info_msg("Unicasting a release");
+ send_d6_release(server_ipv6, our_cur_ipv6); /* unicast */
+ d6_run_script(NULL, "deconfig");
+ }
+ bb_info_msg("Entering released state");
+
+ change_listen_mode(LISTEN_NONE);
+ state = RELEASED;
+}
+
+///static uint8_t* alloc_dhcp_option(int code, const char *str, int extra)
+///{
+/// uint8_t *storage;
+/// int len = strnlen(str, 255);
+/// storage = xzalloc(len + extra + OPT_DATA);
+/// storage[OPT_CODE] = code;
+/// storage[OPT_LEN] = len + extra;
+/// memcpy(storage + extra + OPT_DATA, str, len);
+/// return storage;
+///}
+
+#if BB_MMU
+static void client_background(void)
+{
+ bb_daemonize(0);
+ logmode &= ~LOGMODE_STDIO;
+ /* rewrite pidfile, as our pid is different now */
+ write_pidfile(client_config.pidfile);
+}
+#endif
+
+//usage:#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
+//usage:# define IF_UDHCP_VERBOSE(...) __VA_ARGS__
+//usage:#else
+//usage:# define IF_UDHCP_VERBOSE(...)
+//usage:#endif
+//usage:#define udhcpc6_trivial_usage
+//usage: "[-fbnq"IF_UDHCP_VERBOSE("v")"oR] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n"
+//usage: " [-x OPT:VAL]... [-O OPT]..." IF_FEATURE_UDHCP_PORT(" [-P N]")
+//usage:#define udhcpc6_full_usage "\n"
+//usage: IF_LONG_OPTS(
+//usage: "\n -i,--interface IFACE Interface to use (default eth0)"
+//usage: "\n -p,--pidfile FILE Create pidfile"
+//usage: "\n -s,--script PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")"
+//usage: "\n -B,--broadcast Request broadcast replies"
+//usage: "\n -t,--retries N Send up to N discover packets"
+//usage: "\n -T,--timeout N Pause between packets (default 3 seconds)"
+//usage: "\n -A,--tryagain N Wait N seconds after failure (default 20)"
+//usage: "\n -f,--foreground Run in foreground"
+//usage: USE_FOR_MMU(
+//usage: "\n -b,--background Background if lease is not obtained"
+//usage: )
+//usage: "\n -n,--now Exit if lease is not obtained"
+//usage: "\n -q,--quit Exit after obtaining lease"
+//usage: "\n -R,--release Release IP on exit"
+//usage: "\n -S,--syslog Log to syslog too"
+//usage: IF_FEATURE_UDHCP_PORT(
+//usage: "\n -P,--client-port N Use port N (default 546)"
+//usage: )
+////usage: IF_FEATURE_UDHCPC_ARPING(
+////usage: "\n -a,--arping Use arping to validate offered address"
+////usage: )
+//usage: "\n -O,--request-option OPT Request option OPT from server (cumulative)"
+//usage: "\n -o,--no-default-options Don't request any options (unless -O is given)"
+//usage: "\n -r,--request IP Request this IP address"
+//usage: "\n -x OPT:VAL Include option OPT in sent packets (cumulative)"
+//usage: "\n Examples of string, numeric, and hex byte opts:"
+//usage: "\n -x hostname:bbox - option 12"
+//usage: "\n -x lease:3600 - option 51 (lease time)"
+//usage: "\n -x 0x3d:0100BEEFC0FFEE - option 61 (client id)"
+//usage: IF_UDHCP_VERBOSE(
+//usage: "\n -v Verbose"
+//usage: )
+//usage: )
+//usage: IF_NOT_LONG_OPTS(
+//usage: "\n -i IFACE Interface to use (default eth0)"
+//usage: "\n -p FILE Create pidfile"
+//usage: "\n -s PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")"
+//usage: "\n -B Request broadcast replies"
+//usage: "\n -t N Send up to N discover packets"
+//usage: "\n -T N Pause between packets (default 3 seconds)"
+//usage: "\n -A N Wait N seconds (default 20) after failure"
+//usage: "\n -f Run in foreground"
+//usage: USE_FOR_MMU(
+//usage: "\n -b Background if lease is not obtained"
+//usage: )
+//usage: "\n -n Exit if lease is not obtained"
+//usage: "\n -q Exit after obtaining lease"
+//usage: "\n -R Release IP on exit"
+//usage: "\n -S Log to syslog too"
+//usage: IF_FEATURE_UDHCP_PORT(
+//usage: "\n -P N Use port N (default 546)"
+//usage: )
+////usage: IF_FEATURE_UDHCPC_ARPING(
+////usage: "\n -a Use arping to validate offered address"
+////usage: )
+//usage: "\n -O OPT Request option OPT from server (cumulative)"
+//usage: "\n -o Don't request any options (unless -O is given)"
+//usage: "\n -r IP Request this IP address"
+//usage: "\n -x OPT:VAL Include option OPT in sent packets (cumulative)"
+//usage: "\n Examples of string, numeric, and hex byte opts:"
+//usage: "\n -x hostname:bbox - option 12"
+//usage: "\n -x lease:3600 - option 51 (lease time)"
+//usage: "\n -x 0x3d:0100BEEFC0FFEE - option 61 (client id)"
+//usage: IF_UDHCP_VERBOSE(
+//usage: "\n -v Verbose"
+//usage: )
+//usage: )
+//usage: "\nSignals:"
+//usage: "\n USR1 Renew lease"
+//usage: "\n USR2 Release lease"
+
+
+int udhcpc6_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
+{
+ const char *str_r;
+ IF_FEATURE_UDHCP_PORT(char *str_P;)
+ void *clientid_mac_ptr;
+ llist_t *list_O = NULL;
+ llist_t *list_x = NULL;
+ int tryagain_timeout = 20;
+ int discover_timeout = 3;
+ int discover_retries = 3;
+ struct in6_addr srv6_buf;
+ struct in6_addr ipv6_buf;
+ struct in6_addr *requested_ipv6;
+ uint32_t xid = 0;
+ int packet_num;
+ int timeout; /* must be signed */
+ unsigned already_waited_sec;
+ unsigned opt;
+ int max_fd;
+ int retval;
+ fd_set rfds;
+
+ /* Default options */
+ IF_FEATURE_UDHCP_PORT(SERVER_PORT = 547;)
+ IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 546;)
+ client_config.interface = "eth0";
+ client_config.script = CONFIG_UDHCPC_DEFAULT_SCRIPT;
+
+ /* Parse command line */
+ /* O,x: list; -T,-t,-A take numeric param */
+ opt_complementary = "O::x::T+:t+:A+" IF_UDHCP_VERBOSE(":vv") ;
+ IF_LONG_OPTS(applet_long_options = udhcpc6_longopts;)
+ opt = getopt32(argv, "i:np:qRr:s:T:t:SA:O:ox:f"
+ USE_FOR_MMU("b")
+ ///IF_FEATURE_UDHCPC_ARPING("a")
+ IF_FEATURE_UDHCP_PORT("P:")
+ "v"
+ , &client_config.interface, &client_config.pidfile, &str_r /* i,p */
+ , &client_config.script /* s */
+ , &discover_timeout, &discover_retries, &tryagain_timeout /* T,t,A */
+ , &list_O
+ , &list_x
+ IF_FEATURE_UDHCP_PORT(, &str_P)
+ IF_UDHCP_VERBOSE(, &dhcp_verbose)
+ );
+ requested_ipv6 = NULL;
+ if (opt & OPT_r) {
+ if (inet_pton(AF_INET6, str_r, &ipv6_buf) <= 0)
+ bb_error_msg_and_die("bad IPv6 address '%s'", str_r);
+ requested_ipv6 = &ipv6_buf;
+ }
+#if ENABLE_FEATURE_UDHCP_PORT
+ if (opt & OPT_P) {
+ CLIENT_PORT = xatou16(str_P);
+ SERVER_PORT = CLIENT_PORT - 1;
+ }
+#endif
+ if (opt & OPT_o)
+ client_config.no_default_options = 1;
+ while (list_O) {
+ char *optstr = llist_pop(&list_O);
+ unsigned n = bb_strtou(optstr, NULL, 0);
+ if (errno || n > 254) {
+ n = udhcp_option_idx(optstr);
+ n = dhcp_optflags[n].code;
+ }
+ client_config.opt_mask[n >> 3] |= 1 << (n & 7);
+ }
+ while (list_x) {
+ char *optstr = llist_pop(&list_x);
+ char *colon = strchr(optstr, ':');
+ if (colon)
+ *colon = ' ';
+ /* now it looks similar to udhcpd's config file line:
+ * "optname optval", using the common routine: */
+ udhcp_str2optset(optstr, &client_config.options);
+ }
+
+ if (udhcp_read_interface(client_config.interface,
+ &client_config.ifindex,
+ NULL,
+ client_config.client_mac)
+ ) {
+ return 1;
+ }
+
+ /* Create client ID based on mac, set clientid_mac_ptr */
+ {
+ struct d6_option *clientid;
+ clientid = xzalloc(2+2+2+2+6);
+ clientid->code = D6_OPT_CLIENTID;
+ clientid->len = 2+2+6;
+ clientid->data[1] = 3; /* DUID-LL */
+ clientid->data[3] = 1; /* ethernet */
+ clientid_mac_ptr = clientid->data + 2+2;
+ memcpy(clientid_mac_ptr, client_config.client_mac, 6);
+ client_config.clientid = (void*)clientid;
+ }
+
+#if !BB_MMU
+ /* on NOMMU reexec (i.e., background) early */
+ if (!(opt & OPT_f)) {
+ bb_daemonize_or_rexec(0 /* flags */, argv);
+ logmode = LOGMODE_NONE;
+ }
+#endif
+ if (opt & OPT_S) {
+ openlog(applet_name, LOG_PID, LOG_DAEMON);
+ logmode |= LOGMODE_SYSLOG;
+ }
+
+ /* Make sure fd 0,1,2 are open */
+ bb_sanitize_stdio();
+ /* Equivalent of doing a fflush after every \n */
+ setlinebuf(stdout);
+ /* Create pidfile */
+ write_pidfile(client_config.pidfile);
+ /* Goes to stdout (unless NOMMU) and possibly syslog */
+ bb_info_msg("%s (v"BB_VER") started", applet_name);
+ /* Set up the signal pipe */
+ udhcp_sp_setup();
+ /* We want random_xid to be random... */
+ srand(monotonic_us());
+
+ state = INIT_SELECTING;
+ d6_run_script(NULL, "deconfig");
+ change_listen_mode(LISTEN_RAW);
+ packet_num = 0;
+ timeout = 0;
+ already_waited_sec = 0;
+
+ /* Main event loop. select() waits on signal pipe and possibly
+ * on sockfd.
+ * "continue" statements in code below jump to the top of the loop.
+ */
+ for (;;) {
+ struct timeval tv;
+ struct d6_packet packet;
+ uint8_t *packet_end;
+ /* silence "uninitialized!" warning */
+ unsigned timestamp_before_wait = timestamp_before_wait;
+
+ //bb_error_msg("sockfd:%d, listen_mode:%d", sockfd, listen_mode);
+
+ /* Was opening raw or udp socket here
+ * if (listen_mode != LISTEN_NONE && sockfd < 0),
+ * but on fast network renew responses return faster
+ * than we open sockets. Thus this code is moved
+ * to change_listen_mode(). Thus we open listen socket
+ * BEFORE we send renew request (see "case BOUND:"). */
+
+ max_fd = udhcp_sp_fd_set(&rfds, sockfd);
+
+ tv.tv_sec = timeout - already_waited_sec;
+ tv.tv_usec = 0;
+ retval = 0;
+ /* If we already timed out, fall through with retval = 0, else... */
+ if ((int)tv.tv_sec > 0) {
+ timestamp_before_wait = (unsigned)monotonic_sec();
+ log1("Waiting on select...");
+ retval = select(max_fd + 1, &rfds, NULL, NULL, &tv);
+ if (retval < 0) {
+ /* EINTR? A signal was caught, don't panic */
+ if (errno == EINTR) {
+ already_waited_sec += (unsigned)monotonic_sec() - timestamp_before_wait;
+ continue;
+ }
+ /* Else: an error occured, panic! */
+ bb_perror_msg_and_die("select");
+ }
+ }
+
+ /* If timeout dropped to zero, time to become active:
+ * resend discover/renew/whatever
+ */
+ if (retval == 0) {
+ /* When running on a bridge, the ifindex may have changed
+ * (e.g. if member interfaces were added/removed
+ * or if the status of the bridge changed).
+ * Refresh ifindex and client_mac:
+ */
+ if (udhcp_read_interface(client_config.interface,
+ &client_config.ifindex,
+ NULL,
+ client_config.client_mac)
+ ) {
+ goto ret0; /* iface is gone? */
+ }
+ memcpy(clientid_mac_ptr, client_config.client_mac, 6);
+
+ /* We will restart the wait in any case */
+ already_waited_sec = 0;
+
+ switch (state) {
+ case INIT_SELECTING:
+ if (packet_num < discover_retries) {
+ if (packet_num == 0)
+ xid = random_xid();
+ /* multicast */
+ send_d6_discover(xid, requested_ipv6);
+ timeout = discover_timeout;
+ packet_num++;
+ continue;
+ }
+ leasefail:
+ d6_run_script(NULL, "leasefail");
+#if BB_MMU /* -b is not supported on NOMMU */
+ if (opt & OPT_b) { /* background if no lease */
+ bb_info_msg("No lease, forking to background");
+ client_background();
+ /* do not background again! */
+ opt = ((opt & ~OPT_b) | OPT_f);
+ } else
+#endif
+ if (opt & OPT_n) { /* abort if no lease */
+ bb_info_msg("No lease, failing");
+ retval = 1;
+ goto ret;
+ }
+ /* wait before trying again */
+ timeout = tryagain_timeout;
+ packet_num = 0;
+ continue;
+ case REQUESTING:
+ if (packet_num < discover_retries) {
+ /* send multicast select packet */
+ send_d6_select(xid);
+ timeout = discover_timeout;
+ packet_num++;
+ continue;
+ }
+ /* Timed out, go back to init state.
+ * "discover...select...discover..." loops
+ * were seen in the wild. Treat them similarly
+ * to "no response to discover" case */
+ change_listen_mode(LISTEN_RAW);
+ state = INIT_SELECTING;
+ goto leasefail;
+ case BOUND:
+ /* 1/2 lease passed, enter renewing state */
+ state = RENEWING;
+ client_config.first_secs = 0; /* make secs field count from 0 */
+ change_listen_mode(LISTEN_KERNEL);
+ log1("Entering renew state");
+ /* fall right through */
+ case RENEW_REQUESTED: /* manual (SIGUSR1) renew */
+ case_RENEW_REQUESTED:
+ case RENEWING:
+ if (timeout > 60) {
+ /* send an unicast renew request */
+ /* Sometimes observed to fail (EADDRNOTAVAIL) to bind
+ * a new UDP socket for sending inside send_renew.
+ * I hazard to guess existing listening socket
+ * is somehow conflicting with it, but why is it
+ * not deterministic then?! Strange.
+ * Anyway, it does recover by eventually failing through
+ * into INIT_SELECTING state.
+ */
+ send_d6_renew(xid, &srv6_buf, requested_ipv6);
+ timeout >>= 1;
+ continue;
+ }
+ /* Timed out, enter rebinding state */
+ log1("Entering rebinding state");
+ state = REBINDING;
+ /* fall right through */
+ case REBINDING:
+ /* Switch to bcast receive */
+ change_listen_mode(LISTEN_RAW);
+ /* Lease is *really* about to run out,
+ * try to find DHCP server using broadcast */
+ if (timeout > 0) {
+ /* send a broadcast renew request */
+ send_d6_renew(xid, /*server_ipv6:*/ NULL, requested_ipv6);
+ timeout >>= 1;
+ continue;
+ }
+ /* Timed out, enter init state */
+ bb_info_msg("Lease lost, entering init state");
+ d6_run_script(NULL, "deconfig");
+ state = INIT_SELECTING;
+ client_config.first_secs = 0; /* make secs field count from 0 */
+ /*timeout = 0; - already is */
+ packet_num = 0;
+ continue;
+ /* case RELEASED: */
+ }
+ /* yah, I know, *you* say it would never happen */
+ timeout = INT_MAX;
+ continue; /* back to main loop */
+ } /* if select timed out */
+
+ /* select() didn't timeout, something happened */
+
+ /* Is it a signal? */
+ /* note: udhcp_sp_read checks FD_ISSET before reading */
+ switch (udhcp_sp_read(&rfds)) {
+ case SIGUSR1:
+ client_config.first_secs = 0; /* make secs field count from 0 */
+ already_waited_sec = 0;
+ perform_renew();
+ if (state == RENEW_REQUESTED) {
+ /* We might be either on the same network
+ * (in which case renew might work),
+ * or we might be on a completely different one
+ * (in which case renew won't ever succeed).
+ * For the second case, must make sure timeout
+ * is not too big, or else we can send
+ * futile renew requests for hours.
+ * (Ab)use -A TIMEOUT value (usually 20 sec)
+ * as a cap on the timeout.
+ */
+ if (timeout > tryagain_timeout)
+ timeout = tryagain_timeout;
+ goto case_RENEW_REQUESTED;
+ }
+ /* Start things over */
+ packet_num = 0;
+ /* Kill any timeouts, user wants this to hurry along */
+ timeout = 0;
+ continue;
+ case SIGUSR2:
+ perform_d6_release(&srv6_buf, requested_ipv6);
+ timeout = INT_MAX;
+ continue;
+ case SIGTERM:
+ bb_info_msg("Received SIGTERM");
+ goto ret0;
+ }
+
+ /* Is it a packet? */
+ if (listen_mode == LISTEN_NONE || !FD_ISSET(sockfd, &rfds))
+ continue; /* no */
+
+ {
+ int len;
+
+ /* A packet is ready, read it */
+ if (listen_mode == LISTEN_KERNEL)
+ len = d6_recv_kernel_packet(&srv6_buf, &packet, sockfd);
+ else
+ len = d6_recv_raw_packet(&srv6_buf, &packet, sockfd);
+ if (len == -1) {
+ /* Error is severe, reopen socket */
+ bb_info_msg("Read error: %s, reopening socket", strerror(errno));
+ sleep(discover_timeout); /* 3 seconds by default */
+ change_listen_mode(listen_mode); /* just close and reopen */
+ }
+ /* If this packet will turn out to be unrelated/bogus,
+ * we will go back and wait for next one.
+ * Be sure timeout is properly decreased. */
+ already_waited_sec += (unsigned)monotonic_sec() - timestamp_before_wait;
+ if (len < 0)
+ continue;
+ packet_end = (uint8_t*)&packet + len;
+ }
+
+ if ((packet.d6_xid32 & htonl(0x00ffffff)) != xid) {
+ log1("xid %x (our is %x), ignoring packet",
+ (unsigned)(packet.d6_xid32 & htonl(0x00ffffff)), (unsigned)xid);
+ continue;
+ }
+
+ switch (state) {
+ case INIT_SELECTING:
+ if (packet.d6_msg_type == D6_MSG_ADVERTISE)
+ goto type_is_ok;
+ /* DHCPv6 has "Rapid Commit", when instead of Advertise,
+ * server sends Reply right away.
+ * Fall through to check for this case.
+ */
+ case REQUESTING:
+ case RENEWING:
+ case RENEW_REQUESTED:
+ case REBINDING:
+ if (packet.d6_msg_type == D6_MSG_REPLY) {
+ uint32_t lease_seconds;
+ struct d6_option *option, *iaaddr;
+ type_is_ok:
+ option = d6_find_option(packet.d6_options, packet_end, D6_OPT_STATUS_CODE);
+ if (option && option->data[4] != 0) {
+ /* return to init state */
+ bb_info_msg("Received DHCP NAK (%u)", option->data[4]);
+ d6_run_script(&packet, "nak");
+ if (state != REQUESTING)
+ d6_run_script(NULL, "deconfig");
+ change_listen_mode(LISTEN_RAW);
+ sleep(3); /* avoid excessive network traffic */
+ state = INIT_SELECTING;
+ client_config.first_secs = 0; /* make secs field count from 0 */
+ requested_ipv6 = NULL;
+ timeout = 0;
+ packet_num = 0;
+ already_waited_sec = 0;
+ continue;
+ }
+ option = d6_copy_option(packet.d6_options, packet_end, D6_OPT_SERVERID);
+ if (!option) {
+ bb_error_msg("no server ID, ignoring packet");
+ continue;
+ /* still selecting - this server looks bad */
+ }
+//Note: we do not bother comparing server IDs in Advertise and Reply msgs.
+//server_id variable is used solely for creation of proper server_id option
+//in outgoing packets. (why DHCPv6 even introduced it is a mystery).
+ free(client6_data.server_id);
+ client6_data.server_id = option;
+ if (packet.d6_msg_type == D6_MSG_ADVERTISE) {
+ /* enter requesting state */
+ state = REQUESTING;
+ timeout = 0;
+ packet_num = 0;
+ already_waited_sec = 0;
+ continue;
+ }
+ /* It's a D6_MSG_REPLY */
+/*
+ * RFC 3315 18.1.8. Receipt of Reply Messages
+ *
+ * Upon the receipt of a valid Reply message in response to a Solicit
+ * (with a Rapid Commit option), Request, Confirm, Renew, Rebind or
+ * Information-request message, the client extracts the configuration
+ * information contained in the Reply. The client MAY choose to report
+ * any status code or message from the status code option in the Reply
+ * message.
+ *
+ * The client SHOULD perform duplicate address detection [17] on each of
+ * the addresses in any IAs it receives in the Reply message before
+ * using that address for traffic. If any of the addresses are found to
+ * be in use on the link, the client sends a Decline message to the
+ * server as described in section 18.1.7.
+ *
+ * If the Reply was received in response to a Solicit (with a Rapid
+ * Commit option), Request, Renew or Rebind message, the client updates
+ * the information it has recorded about IAs from the IA options
+ * contained in the Reply message:
+ *
+ * - Record T1 and T2 times.
+ *
+ * - Add any new addresses in the IA option to the IA as recorded by
+ * the client.
+ *
+ * - Update lifetimes for any addresses in the IA option that the
+ * client already has recorded in the IA.
+ *
+ * - Discard any addresses from the IA, as recorded by the client, that
+ * have a valid lifetime of 0 in the IA Address option.
+ *
+ * - Leave unchanged any information about addresses the client has
+ * recorded in the IA but that were not included in the IA from the
+ * server.
+ *
+ * Management of the specific configuration information is detailed in
+ * the definition of each option in section 22.
+ *
+ * If the client receives a Reply message with a Status Code containing
+ * UnspecFail, the server is indicating that it was unable to process
+ * the message due to an unspecified failure condition. If the client
+ * retransmits the original message to the same server to retry the
+ * desired operation, the client MUST limit the rate at which it
+ * retransmits the message and limit the duration of the time during
+ * which it retransmits the message.
+ *
+ * When the client receives a Reply message with a Status Code option
+ * with the value UseMulticast, the client records the receipt of the
+ * message and sends subsequent messages to the server through the
+ * interface on which the message was received using multicast. The
+ * client resends the original message using multicast.
+ *
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | OPTION_IA_NA | option-len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IAID (4 octets) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | T1 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | T2 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * . IA_NA-options .
+ * . .
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ *
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | OPTION_IAADDR | option-len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | IPv6 address |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | preferred-lifetime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | valid-lifetime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * . .
+ * . IAaddr-options .
+ * . .
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ free(client6_data.ia_na);
+ client6_data.ia_na = d6_copy_option(packet.d6_options, packet_end, D6_OPT_IA_NA);
+ if (!client6_data.ia_na) {
+ bb_error_msg("no %s option, ignoring packet", "IA_NA");
+ continue;
+ }
+ if (client6_data.ia_na->len < (4 + 4 + 4) + (2 + 2 + 16 + 4 + 4)) {
+ bb_error_msg("IA_NA option is too short:%d bytes", client6_data.ia_na->len);
+ continue;
+ }
+ iaaddr = d6_find_option(client6_data.ia_na->data + 4 + 4 + 4,
+ client6_data.ia_na->data + client6_data.ia_na->len,
+ D6_OPT_IAADDR
+ );
+ if (!iaaddr) {
+ bb_error_msg("no %s option, ignoring packet", "IAADDR");
+ continue;
+ }
+ if (iaaddr->len < (16 + 4 + 4)) {
+ bb_error_msg("IAADDR option is too short:%d bytes", iaaddr->len);
+ continue;
+ }
+ /* Note: the address is sufficiently aligned for cast:
+ * we _copied_ IA-NA, and copy is always well-aligned.
+ */
+ requested_ipv6 = (struct in6_addr*) iaaddr->data;
+ move_from_unaligned32(lease_seconds, iaaddr->data + 16 + 4);
+ lease_seconds = ntohl(lease_seconds);
+ /* paranoia: must not be too small and not prone to overflows */
+ if (lease_seconds < 0x10)
+ lease_seconds = 0x10;
+/// TODO: check for 0 lease time?
+ if (lease_seconds >= 0x10000000)
+ lease_seconds = 0x0fffffff;
+ /* enter bound state */
+ timeout = lease_seconds / 2;
+ bb_info_msg("Lease obtained, lease time %u",
+ /*inet_ntoa(temp_addr),*/ (unsigned)lease_seconds);
+ d6_run_script(&packet, state == REQUESTING ? "bound" : "renew");
+
+ state = BOUND;
+ change_listen_mode(LISTEN_NONE);
+ if (opt & OPT_q) { /* quit after lease */
+ goto ret0;
+ }
+ /* future renew failures should not exit (JM) */
+ opt &= ~OPT_n;
+#if BB_MMU /* NOMMU case backgrounded earlier */
+ if (!(opt & OPT_f)) {
+ client_background();
+ /* do not background again! */
+ opt = ((opt & ~OPT_b) | OPT_f);
+ }
+#endif
+ already_waited_sec = 0;
+ continue; /* back to main loop */
+ }
+ continue;
+ /* case BOUND: - ignore all packets */
+ /* case RELEASED: - ignore all packets */
+ }
+ /* back to main loop */
+ } /* for (;;) - main loop ends */
+
+ ret0:
+ if (opt & OPT_R) /* release on quit */
+ perform_d6_release(&srv6_buf, requested_ipv6);
+ retval = 0;
+ ret:
+ /*if (client_config.pidfile) - remove_pidfile has its own check */
+ remove_pidfile(client_config.pidfile);
+ return retval;
+}
diff --git a/networking/udhcp/d6_packet.c b/networking/udhcp/d6_packet.c
new file mode 100644
index 0000000..79b2946
--- a/dev/null
+++ b/networking/udhcp/d6_packet.c
@@ -0,0 +1,172 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Copyright (C) 2011 Denys Vlasenko.
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+#include "common.h"
+#include "d6_common.h"
+#include "dhcpd.h"
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#include <netpacket/packet.h>
+
+#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
+void FAST_FUNC d6_dump_packet(struct d6_packet *packet)
+{
+ if (dhcp_verbose < 2)
+ return;
+
+ bb_info_msg(
+ " xid %x"
+ , packet->d6_xid32
+ );
+ //*bin2hex(buf, (void *) packet->chaddr, sizeof(packet->chaddr)) = '\0';
+ //bb_info_msg(" chaddr %s", buf);
+}
+#endif
+
+int FAST_FUNC d6_recv_kernel_packet(struct in6_addr *peer_ipv6
+ UNUSED_PARAM
+ , struct d6_packet *packet, int fd)
+{
+ int bytes;
+
+ memset(packet, 0, sizeof(*packet));
+ bytes = safe_read(fd, packet, sizeof(*packet));
+ if (bytes < 0) {
+ log1("Packet read error, ignoring");
+ return bytes; /* returns -1 */
+ }
+
+ if (bytes < offsetof(struct d6_packet, d6_options)) {
+ bb_info_msg("Packet with bad magic, ignoring");
+ return -2;
+ }
+ log1("Received a packet");
+ d6_dump_packet(packet);
+
+ return bytes;
+}
+
+/* Construct a ipv6+udp header for a packet, send packet */
+int FAST_FUNC d6_send_raw_packet(
+ struct d6_packet *d6_pkt, unsigned d6_pkt_size,
+ struct in6_addr *src_ipv6, int source_port,
+ struct in6_addr *dst_ipv6, int dest_port, const uint8_t *dest_arp,
+ int ifindex)
+{
+ struct sockaddr_ll dest_sll;
+ struct ip6_udp_d6_packet packet;
+ int fd;
+ int result = -1;
+ const char *msg;
+
+ fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IPV6));
+ if (fd < 0) {
+ msg = "socket(%s)";
+ goto ret_msg;
+ }
+
+ memset(&dest_sll, 0, sizeof(dest_sll));
+ memset(&packet, 0, offsetof(struct ip6_udp_d6_packet, data));
+ packet.data = *d6_pkt; /* struct copy */
+
+ dest_sll.sll_family = AF_PACKET;
+ dest_sll.sll_protocol = htons(ETH_P_IPV6);
+ dest_sll.sll_ifindex = ifindex;
+ dest_sll.sll_halen = 6;
+ memcpy(dest_sll.sll_addr, dest_arp, 6);
+
+ if (bind(fd, (struct sockaddr *)&dest_sll, sizeof(dest_sll)) < 0) {
+ msg = "bind(%s)";
+ goto ret_close;
+ }
+
+ packet.ip6.ip6_vfc = (6 << 4); /* 4 bits version, top 4 bits of tclass */
+ if (src_ipv6)
+ packet.ip6.ip6_src = *src_ipv6; /* struct copy */
+ packet.ip6.ip6_dst = *dst_ipv6; /* struct copy */
+ packet.udp.source = htons(source_port);
+ packet.udp.dest = htons(dest_port);
+ /* size, excluding IP header: */
+ packet.udp.len = htons(sizeof(struct udphdr) + d6_pkt_size);
+ packet.ip6.ip6_plen = packet.udp.len;
+ /*
+ * Someone was smoking weed (at least) while inventing UDP checksumming:
+ * UDP checksum skips first four bytes of IPv6 header.
+ * 'next header' field should be summed as if it is one more byte
+ * to the right, therefore we write its value (IPPROTO_UDP)
+ * into ip6_hlim, and its 'real' location remains zero-filled for now.
+ */
+ packet.ip6.ip6_hlim = IPPROTO_UDP;
+ packet.udp.check = inet_cksum(
+ (uint16_t *)&packet + 2,
+ offsetof(struct ip6_udp_d6_packet, data) - 4 + d6_pkt_size
+ );
+ /* fix 'hop limit' and 'next header' after UDP checksumming */
+ packet.ip6.ip6_hlim = 1; /* observed Windows machines to use hlim=1 */
+ packet.ip6.ip6_nxt = IPPROTO_UDP;
+
+ d6_dump_packet(d6_pkt);
+ result = sendto(fd, &packet, offsetof(struct ip6_udp_d6_packet, data) + d6_pkt_size,
+ /*flags:*/ 0,
+ (struct sockaddr *) &dest_sll, sizeof(dest_sll)
+ );
+ msg = "sendto";
+ ret_close:
+ close(fd);
+ if (result < 0) {
+ ret_msg:
+ bb_perror_msg(msg, "PACKET");
+ }
+ return result;
+}
+
+/* Let the kernel do all the work for packet generation */
+int FAST_FUNC d6_send_kernel_packet(
+ struct d6_packet *d6_pkt, unsigned d6_pkt_size,
+ struct in6_addr *src_ipv6, int source_port,
+ struct in6_addr *dst_ipv6, int dest_port)
+{
+ struct sockaddr_in6 sa;
+ int fd;
+ int result = -1;
+ const char *msg;
+
+ fd = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
+ if (fd < 0) {
+ msg = "socket(%s)";
+ goto ret_msg;
+ }
+ setsockopt_reuseaddr(fd);
+
+ memset(&sa, 0, sizeof(sa));
+ sa.sin6_family = AF_INET6;
+ sa.sin6_port = htons(source_port);
+ sa.sin6_addr = *src_ipv6; /* struct copy */
+ if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
+ msg = "bind(%s)";
+ goto ret_close;
+ }
+
+ memset(&sa, 0, sizeof(sa));
+ sa.sin6_family = AF_INET6;
+ sa.sin6_port = htons(dest_port);
+ sa.sin6_addr = *dst_ipv6; /* struct copy */
+ if (connect(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
+ msg = "connect";
+ goto ret_close;
+ }
+
+ d6_dump_packet(d6_pkt);
+ result = safe_write(fd, d6_pkt, d6_pkt_size);
+ msg = "write";
+ ret_close:
+ close(fd);
+ if (result < 0) {
+ ret_msg:
+ bb_perror_msg(msg, "UDP");
+ }
+ return result;
+}
diff --git a/networking/udhcp/d6_socket.c b/networking/udhcp/d6_socket.c
new file mode 100644
index 0000000..56f69f6
--- a/dev/null
+++ b/networking/udhcp/d6_socket.c
@@ -0,0 +1,34 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Copyright (C) 2011 Denys Vlasenko.
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+#include "common.h"
+#include "d6_common.h"
+#include <net/if.h>
+
+int FAST_FUNC d6_listen_socket(int port, const char *inf)
+{
+ int fd;
+ struct sockaddr_in6 addr;
+
+ log1("Opening listen socket on *:%d %s", port, inf);
+ fd = xsocket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
+
+ setsockopt_reuseaddr(fd);
+ if (setsockopt_broadcast(fd) == -1)
+ bb_perror_msg_and_die("SO_BROADCAST");
+
+ /* NB: bug 1032 says this doesn't work on ethernet aliases (ethN:M) */
+ if (setsockopt_bindtodevice(fd, inf))
+ xfunc_die(); /* warning is already printed */
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sin6_family = AF_INET6;
+ addr.sin6_port = htons(port);
+ /* addr.sin6_addr is all-zeros */
+ xbind(fd, (struct sockaddr *)&addr, sizeof(addr));
+
+ return fd;
+}
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 4d755e6..ddb328d 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -29,7 +29,7 @@
#include <netpacket/packet.h>
#include <linux/filter.h>
-/* struct client_config_t client_config is in bb_common_bufsiz1 */
+/* "struct client_config_t client_config" is in bb_common_bufsiz1 */
#if ENABLE_LONG_OPTS
@@ -46,7 +46,6 @@ static const char udhcpc_longopts[] ALIGN1 =
"request\0" Required_argument "r"
"script\0" Required_argument "s"
"timeout\0" Required_argument "T"
- "version\0" No_argument "v"
"retries\0" Required_argument "t"
"tryagain\0" Required_argument "A"
"syslog\0" No_argument "S"
@@ -100,7 +99,9 @@ static const uint8_t len_of_option_as_string[] = {
[OPTION_IP ] = sizeof("255.255.255.255 "),
[OPTION_IP_PAIR ] = sizeof("255.255.255.255 ") * 2,
[OPTION_STATIC_ROUTES ] = sizeof("255.255.255.255/32 255.255.255.255 "),
+ [OPTION_6RD ] = sizeof("32 128 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 255.255.255.255 "),
[OPTION_STRING ] = 1,
+ [OPTION_STRING_HOST ] = 1,
#if ENABLE_FEATURE_UDHCP_RFC3397
[OPTION_DNS_STRING ] = 1, /* unused */
/* Hmmm, this severely overestimates size if SIP_SERVERS option
@@ -135,6 +136,63 @@ static int mton(uint32_t mask)
return i;
}
+/* Check if a given label represents a valid DNS label
+ * Return pointer to the first character after the label upon success,
+ * NULL otherwise.
+ * See RFC1035, 2.3.1
+ */
+/* We don't need to be particularly anal. For example, allowing _, hyphen
+ * at the end, or leading and trailing dots would be ok, since it
+ * can't be used for attacks. (Leading hyphen can be, if someone uses
+ * cmd "$hostname"
+ * in the script: then hostname may be treated as an option)
+ */
+static const char *valid_domain_label(const char *label)
+{
+ unsigned char ch;
+ unsigned pos = 0;
+
+ for (;;) {
+ ch = *label;
+ if ((ch|0x20) < 'a' || (ch|0x20) > 'z') {
+ if (pos == 0) {
+ /* label must begin with letter */
+ return NULL;
+ }
+ if (ch < '0' || ch > '9') {
+ if (ch == '\0' || ch == '.')
+ return label;
+ /* DNS allows only '-', but we are more permissive */
+ if (ch != '-' && ch != '_')
+ return NULL;
+ }
+ }
+ label++;
+ pos++;
+ //Do we want this?
+ //if (pos > 63) /* NS_MAXLABEL; labels must be 63 chars or less */
+ // return NULL;
+ }
+}
+
+/* Check if a given name represents a valid DNS name */
+/* See RFC1035, 2.3.1 */
+static int good_hostname(const char *name)
+{
+ //const char *start = name;
+
+ for (;;) {
+ name = valid_domain_label(name);
+ if (!name)
+ return 0;
+ if (!name[0])
+ return 1;
+ //Do we want this?
+ //return ((name - start) < 1025); /* NS_MAXDNAME */
+ name++;
+ }
+}
+
/* Create "opt_name=opt_value" string */
static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_optflag *optflag, const char *opt_name)
{
@@ -142,27 +200,25 @@ static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_
int len, type, optlen;
char *dest, *ret;
- /* option points to OPT_DATA, need to go back and get OPT_LEN */
- len = option[OPT_LEN - OPT_DATA];
+ /* option points to OPT_DATA, need to go back to get OPT_LEN */
+ len = option[-OPT_DATA + OPT_LEN];
type = optflag->flags & OPTION_TYPE_MASK;
optlen = dhcp_option_lengths[type];
- upper_length = len_of_option_as_string[type] * ((unsigned)len / (unsigned)optlen);
+ upper_length = len_of_option_as_string[type]
+ * ((unsigned)(len + optlen - 1) / (unsigned)optlen);
dest = ret = xmalloc(upper_length + strlen(opt_name) + 2);
dest += sprintf(ret, "%s=", opt_name);
while (len >= optlen) {
- unsigned ip_ofs = 0;
-
switch (type) {
+ case OPTION_IP:
case OPTION_IP_PAIR:
dest += sprint_nip(dest, "", option);
- *dest++ = '/';
- ip_ofs = 4;
- /* fall through */
- case OPTION_IP:
- dest += sprint_nip(dest, "", option + ip_ofs);
+ if (type == OPTION_IP)
+ break;
+ dest += sprint_nip(dest, "/", option + 4);
break;
// case OPTION_BOOLEAN:
// dest += sprintf(dest, *option ? "yes" : "no");
@@ -184,10 +240,17 @@ static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_
dest += sprintf(dest, type == OPTION_U32 ? "%lu" : "%ld", (unsigned long) ntohl(val_u32));
break;
}
+ /* Note: options which use 'return' instead of 'break'
+ * (for example, OPTION_STRING) skip the code which handles
+ * the case of list of options.
+ */
case OPTION_STRING:
+ case OPTION_STRING_HOST:
memcpy(dest, option, len);
dest[len] = '\0';
- return ret; /* Short circuit this case */
+ if (type == OPTION_STRING_HOST && !good_hostname(dest))
+ safe_strncpy(dest, "bad", len);
+ return ret;
case OPTION_STATIC_ROUTES: {
/* Option binary format:
* mask [one byte, 0..32]
@@ -232,6 +295,53 @@ static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_
return ret;
}
+ case OPTION_6RD:
+ /* Option binary format (see RFC 5969):
+ * 0 1 2 3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | OPTION_6RD | option-length | IPv4MaskLen | 6rdPrefixLen |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 6rdPrefix |
+ * ... (16 octets) ...
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * ... 6rdBRIPv4Address(es) ...
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * We convert it to a string
+ * "IPv4MaskLen 6rdPrefixLen 6rdPrefix 6rdBRIPv4Address..."
+ *
+ * Sanity check: ensure that our length is at least 22 bytes, that
+ * IPv4MaskLen <= 32,
+ * 6rdPrefixLen <= 128,
+ * 6rdPrefixLen + (32 - IPv4MaskLen) <= 128
+ * (2nd condition need no check - it follows from 1st and 3rd).
+ * Else, return envvar with empty value ("optname=")
+ */
+ if (len >= (1 + 1 + 16 + 4)
+ && option[0] <= 32
+ && (option[1] + 32 - option[0]) <= 128
+ ) {
+ /* IPv4MaskLen */
+ dest += sprintf(dest, "%u ", *option++);
+ /* 6rdPrefixLen */
+ dest += sprintf(dest, "%u ", *option++);
+ /* 6rdPrefix */
+ dest += sprint_nip6(dest, /* "", */ option);
+ option += 16;
+ len -= 1 + 1 + 16 + 4;
+ /* "+ 4" above corresponds to the length of IPv4 addr
+ * we consume in the loop below */
+ while (1) {
+ /* 6rdBRIPv4Address(es) */
+ dest += sprint_nip(dest, " ", option);
+ option += 4;
+ len -= 4; /* do we have yet another 4+ bytes? */
+ if (len < 0)
+ break; /* no */
+ }
+ }
+
+ return ret;
#if ENABLE_FEATURE_UDHCP_RFC3397
case OPTION_DNS_STRING:
/* unpack option into dest; use ret for prefix (i.e., "optname=") */
@@ -271,16 +381,21 @@ static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_
return ret;
#endif
} /* switch */
+
+ /* If we are here, try to format any remaining data
+ * in the option as another, similarly-formatted option
+ */
option += optlen;
len -= optlen;
// TODO: it can be a list only if (optflag->flags & OPTION_LIST).
// Should we bail out/warn if we see multi-ip option which is
// not allowed to be such (for example, DHCP_BROADCAST)? -
- if (len <= 0 /* || !(optflag->flags & OPTION_LIST) */)
+ if (len < optlen /* || !(optflag->flags & OPTION_LIST) */)
break;
*dest++ = ' ';
*dest = '\0';
- }
+ } /* while */
+
return ret;
}
@@ -314,13 +429,14 @@ static char **fill_envp(struct dhcp_packet *packet)
/* +1 element for each option, +2 for subnet option: */
if (packet) {
/* note: do not search for "pad" (0) and "end" (255) options */
+//TODO: change logic to scan packet _once_
for (i = 1; i < 255; i++) {
temp = udhcp_get_option(packet, i);
if (temp) {
if (i == DHCP_OPTION_OVERLOAD)
overload = *temp;
else if (i == DHCP_SUBNET)
- envc++; /* for mton */
+ envc++; /* for $mask */
envc++;
/*if (i != DHCP_MESSAGE_TYPE)*/
FOUND_OPTS(i) |= BMASK(i);
@@ -335,10 +451,42 @@ static char **fill_envp(struct dhcp_packet *packet)
if (!packet)
return envp;
+ /* Export BOOTP fields. Fields we don't (yet?) export:
+ * uint8_t op; // always BOOTREPLY
+ * uint8_t htype; // hardware address type. 1 = 10mb ethernet
+ * uint8_t hlen; // hardware address length
+ * uint8_t hops; // used by relay agents only
+ * uint32_t xid;
+ * uint16_t secs; // elapsed since client began acquisition/renewal
+ * uint16_t flags; // only one flag so far: bcast. Never set by server
+ * uint32_t ciaddr; // client IP (usually == yiaddr. can it be different
+ * // if during renew server wants to give us differn IP?)
+ * uint32_t gateway_nip; // relay agent IP address
+ * uint8_t chaddr[16]; // link-layer client hardware address (MAC)
+ * TODO: export gateway_nip as $giaddr?
+ */
+ /* Most important one: yiaddr as $ip */
*curr = xmalloc(sizeof("ip=255.255.255.255"));
sprint_nip(*curr, "ip=", (uint8_t *) &packet->yiaddr);
putenv(*curr++);
+ if (packet->siaddr_nip) {
+ /* IP address of next server to use in bootstrap */
+ *curr = xmalloc(sizeof("siaddr=255.255.255.255"));
+ sprint_nip(*curr, "siaddr=", (uint8_t *) &packet->siaddr_nip);
+ putenv(*curr++);
+ }
+ if (!(overload & FILE_FIELD) && packet->file[0]) {
+ /* watch out for invalid packets */
+ *curr = xasprintf("boot_file=%."DHCP_PKT_FILE_LEN_STR"s", packet->file);
+ putenv(*curr++);
+ }
+ if (!(overload & SNAME_FIELD) && packet->sname[0]) {
+ /* watch out for invalid packets */
+ *curr = xasprintf("sname=%."DHCP_PKT_SNAME_LEN_STR"s", packet->sname);
+ putenv(*curr++);
+ }
+ /* Export known DHCP options */
opt_name = dhcp_option_strings;
i = 0;
while (*opt_name) {
@@ -355,29 +503,14 @@ static char **fill_envp(struct dhcp_packet *packet)
/* Subnet option: make things like "$ip/$mask" possible */
uint32_t subnet;
move_from_unaligned32(subnet, temp);
- *curr = xasprintf("mask=%d", mton(subnet));
+ *curr = xasprintf("mask=%u", mton(subnet));
putenv(*curr++);
}
next:
opt_name += strlen(opt_name) + 1;
i++;
}
- if (packet->siaddr_nip) {
- *curr = xmalloc(sizeof("siaddr=255.255.255.255"));
- sprint_nip(*curr, "siaddr=", (uint8_t *) &packet->siaddr_nip);
- putenv(*curr++);
- }
- if (!(overload & FILE_FIELD) && packet->file[0]) {
- /* watch out for invalid packets */
- *curr = xasprintf("boot_file=%."DHCP_PKT_FILE_LEN_STR"s", packet->file);
- putenv(*curr++);
- }
- if (!(overload & SNAME_FIELD) && packet->sname[0]) {
- /* watch out for invalid packets */
- *curr = xasprintf("sname=%."DHCP_PKT_SNAME_LEN_STR"s", packet->sname);
- putenv(*curr++);
- }
- /* Handle unknown options */
+ /* Export unknown options */
for (i = 0; i < 256;) {
BITMAP bitmap = FOUND_OPTS(i);
if (!bitmap) {
@@ -394,11 +527,12 @@ static char **fill_envp(struct dhcp_packet *packet)
len = temp[-OPT_DATA + OPT_LEN];
*curr = xmalloc(sizeof("optNNN=") + 1 + len*2);
ofs = sprintf(*curr, "opt%u=", i);
- bin2hex(*curr + ofs, (void*) temp, len)[0] = '\0';
+ *bin2hex(*curr + ofs, (void*) temp, len) = '\0';
putenv(*curr++);
}
i++;
}
+
return envp;
}
@@ -408,9 +542,6 @@ static void udhcp_run_script(struct dhcp_packet *packet, const char *name)
char **envp, **curr;
char *argv[3];
- if (client_config.script == NULL)
- return;
-
envp = fill_envp(packet);
/* call script */
@@ -507,6 +638,12 @@ static void add_client_options(struct dhcp_packet *packet)
// if (client_config.boot_file)
// strncpy((char*)packet->file, client_config.boot_file, sizeof(packet->file) - 1);
}
+
+ // This will be needed if we remove -V VENDOR_STR in favor of
+ // -x vendor:VENDOR_STR
+ //if (!udhcp_find_option(packet.options, DHCP_VENDOR))
+ // /* not set, set the default vendor ID */
+ // ...add (DHCP_VENDOR, "udhcp "BB_VER) opt...
}
/* RFC 2131
@@ -651,7 +788,7 @@ static NOINLINE int send_renew(uint32_t xid, uint32_t server, uint32_t ciaddr)
#if ENABLE_FEATURE_UDHCPC_ARPING
/* Broadcast a DHCP decline message */
/* NOINLINE: limit stack usage in caller */
-static NOINLINE int send_decline(uint32_t xid, uint32_t server, uint32_t requested)
+static NOINLINE int send_decline(/*uint32_t xid,*/ uint32_t server, uint32_t requested)
{
struct dhcp_packet packet;
@@ -660,12 +797,14 @@ static NOINLINE int send_decline(uint32_t xid, uint32_t server, uint32_t request
*/
init_packet(&packet, DHCPDECLINE);
+#if 0
/* RFC 2131 says DHCPDECLINE's xid is randomly selected by client,
* but in case the server is buggy and wants DHCPDECLINE's xid
* to match the xid which started entire handshake,
* we use the same xid we used in initial DHCPDISCOVER:
*/
packet.xid = xid;
+#endif
/* DHCPDECLINE uses "requested ip", not ciaddr, to store offered IP */
udhcp_add_simple_option(&packet, DHCP_REQUESTED_IP, requested);
@@ -703,7 +842,6 @@ static NOINLINE int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
struct ip_udp_dhcp_packet packet;
uint16_t check;
- memset(&packet, 0, sizeof(packet));
bytes = safe_read(fd, &packet, sizeof(packet));
if (bytes < 0) {
log1("Packet read error, ignoring");
@@ -726,7 +864,8 @@ static NOINLINE int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
bytes = ntohs(packet.ip.tot_len);
/* make sure its the right packet for us, and that it passes sanity checks */
- if (packet.ip.protocol != IPPROTO_UDP || packet.ip.version != IPVERSION
+ if (packet.ip.protocol != IPPROTO_UDP
+ || packet.ip.version != IPVERSION
|| packet.ip.ihl != (sizeof(packet.ip) >> 2)
|| packet.udp.dest != htons(CLIENT_PORT)
/* || bytes > (int) sizeof(packet) - can't happen */
@@ -739,7 +878,7 @@ static NOINLINE int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
/* verify IP checksum */
check = packet.ip.check;
packet.ip.check = 0;
- if (check != udhcp_checksum(&packet.ip, sizeof(packet.ip))) {
+ if (check != inet_cksum((uint16_t *)&packet.ip, sizeof(packet.ip))) {
log1("Bad IP header checksum, ignoring");
return -2;
}
@@ -750,20 +889,22 @@ static NOINLINE int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
packet.ip.tot_len = packet.udp.len; /* yes, this is needed */
check = packet.udp.check;
packet.udp.check = 0;
- if (check && check != udhcp_checksum(&packet, bytes)) {
+ if (check && check != inet_cksum((uint16_t *)&packet, bytes)) {
log1("Packet with bad UDP checksum received, ignoring");
return -2;
}
- memcpy(dhcp_pkt, &packet.data, bytes - (sizeof(packet.ip) + sizeof(packet.udp)));
-
- if (dhcp_pkt->cookie != htonl(DHCP_MAGIC)) {
+ if (packet.data.cookie != htonl(DHCP_MAGIC)) {
bb_info_msg("Packet with bad magic, ignoring");
return -2;
}
- log1("Got valid DHCP packet");
- udhcp_dump_packet(dhcp_pkt);
- return bytes - (sizeof(packet.ip) + sizeof(packet.udp));
+
+ log1("Received a packet");
+ udhcp_dump_packet(&packet.data);
+
+ bytes -= sizeof(packet.ip) + sizeof(packet.udp);
+ memcpy(dhcp_pkt, &packet.data, bytes);
+ return bytes;
}
@@ -910,7 +1051,7 @@ static void perform_renew(void)
}
}
-static void perform_release(uint32_t requested_ip, uint32_t server_addr)
+static void perform_release(uint32_t server_addr, uint32_t requested_ip)
{
char buffer[sizeof("255.255.255.255")];
struct in_addr temp_addr;
@@ -959,7 +1100,7 @@ static void client_background(void)
//usage:#endif
//usage:#define udhcpc_trivial_usage
//usage: "[-fbnq"IF_UDHCP_VERBOSE("v")"oCRB] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n"
-//usage: " [-H HOSTNAME] [-V VENDOR] [-x OPT:VAL]... [-O OPT]..." IF_FEATURE_UDHCP_PORT(" [-P N]")
+//usage: " [-V VENDOR] [-x OPT:VAL]... [-O OPT]..." IF_FEATURE_UDHCP_PORT(" [-P N]")
//usage:#define udhcpc_full_usage "\n"
//usage: IF_LONG_OPTS(
//usage: "\n -i,--interface IFACE Interface to use (default eth0)"
@@ -992,7 +1133,6 @@ static void client_background(void)
//usage: "\n -x lease:3600 - option 51 (lease time)"
//usage: "\n -x 0x3d:0100BEEFC0FFEE - option 61 (client id)"
//usage: "\n -F,--fqdn NAME Ask server to update DNS mapping for NAME"
-//usage: "\n -H,-h,--hostname NAME Send NAME as client hostname (default none)"
//usage: "\n -V,--vendorclass VENDOR Vendor identifier (default 'udhcp VERSION')"
//usage: "\n -C,--clientid-none Don't send MAC as client identifier"
//usage: IF_UDHCP_VERBOSE(
@@ -1030,7 +1170,6 @@ static void client_background(void)
//usage: "\n -x lease:3600 - option 51 (lease time)"
//usage: "\n -x 0x3d:0100BEEFC0FFEE - option 61 (client id)"
//usage: "\n -F NAME Ask server to update DNS mapping for NAME"
-//usage: "\n -H,-h NAME Send NAME as client hostname (default none)"
//usage: "\n -V VENDOR Vendor identifier (default 'udhcp VERSION')"
//usage: "\n -C Don't send MAC as client identifier"
//usage: IF_UDHCP_VERBOSE(
@@ -1038,8 +1177,8 @@ static void client_background(void)
//usage: )
//usage: )
//usage: "\nSignals:"
-//usage: "\n USR1 Renew current lease"
-//usage: "\n USR2 Release current lease"
+//usage: "\n USR1 Renew lease"
+//usage: "\n USR2 Release lease"
int udhcpc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@@ -1056,16 +1195,13 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
int discover_retries = 3;
uint32_t server_addr = server_addr; /* for compiler */
uint32_t requested_ip = 0;
- uint32_t xid = 0;
- uint32_t lease_seconds = 0; /* can be given as 32-bit quantity */
+ uint32_t xid = xid; /* for compiler */
int packet_num;
int timeout; /* must be signed */
unsigned already_waited_sec;
unsigned opt;
int max_fd;
int retval;
- struct timeval tv;
- struct dhcp_packet packet;
fd_set rfds;
/* Default options */
@@ -1077,11 +1213,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
/* Parse command line */
/* O,x: list; -T,-t,-A take numeric param */
- opt_complementary = "O::x::T+:t+:A+"
-#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
- ":vv"
-#endif
- ;
+ opt_complementary = "O::x::T+:t+:A+" IF_UDHCP_VERBOSE(":vv") ;
IF_LONG_OPTS(applet_long_options = udhcpc_longopts;)
opt = getopt32(argv, "CV:H:h:F:i:np:qRr:s:T:t:SA:O:ox:fB"
USE_FOR_MMU("b")
@@ -1095,12 +1227,13 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
, &list_O
, &list_x
IF_FEATURE_UDHCP_PORT(, &str_P)
-#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
- , &dhcp_verbose
-#endif
- );
- if (opt & (OPT_h|OPT_H))
+ IF_UDHCP_VERBOSE(, &dhcp_verbose)
+ );
+ if (opt & (OPT_h|OPT_H)) {
+ //msg added 2011-11
+ bb_error_msg("option -h NAME is deprecated, use -x hostname:NAME");
client_config.hostname = alloc_dhcp_option(DHCP_HOST_NAME, str_h, 0);
+ }
if (opt & OPT_F) {
/* FQDN option format: [0x51][len][flags][0][0]<fqdn> */
client_config.fqdn = alloc_dhcp_option(DHCP_FQDN, str_F, 3);
@@ -1161,8 +1294,16 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
clientid_mac_ptr = client_config.clientid + OPT_DATA+1;
memcpy(clientid_mac_ptr, client_config.client_mac, 6);
}
- if (str_V[0] != '\0')
+ if (str_V[0] != '\0') {
+ // can drop -V, str_V, client_config.vendorclass,
+ // but need to add "vendor" to the list of recognized
+ // string opts for this to work;
+ // and need to tweak add_client_options() too...
+ // ...so the question is, should we?
+ //bb_error_msg("option -V VENDOR is deprecated, use -x vendor:VENDOR");
client_config.vendorclass = alloc_dhcp_option(DHCP_VENDOR, str_V, 0);
+ }
+
#if !BB_MMU
/* on NOMMU reexec (i.e., background) early */
if (!(opt & OPT_f)) {
@@ -1200,6 +1341,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
* "continue" statements in code below jump to the top of the loop.
*/
for (;;) {
+ struct timeval tv;
+ struct dhcp_packet packet;
/* silence "uninitialized!" warning */
unsigned timestamp_before_wait = timestamp_before_wait;
@@ -1247,7 +1390,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
NULL,
client_config.client_mac)
) {
- return 1; /* iface is gone? */
+ goto ret0; /* iface is gone? */
}
if (clientid_mac_ptr)
memcpy(clientid_mac_ptr, client_config.client_mac, 6);
@@ -1361,22 +1504,34 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
switch (udhcp_sp_read(&rfds)) {
case SIGUSR1:
client_config.first_secs = 0; /* make secs field count from 0 */
+ already_waited_sec = 0;
perform_renew();
- if (state == RENEW_REQUESTED)
+ if (state == RENEW_REQUESTED) {
+ /* We might be either on the same network
+ * (in which case renew might work),
+ * or we might be on a completely different one
+ * (in which case renew won't ever succeed).
+ * For the second case, must make sure timeout
+ * is not too big, or else we can send
+ * futile renew requests for hours.
+ * (Ab)use -A TIMEOUT value (usually 20 sec)
+ * as a cap on the timeout.
+ */
+ if (timeout > tryagain_timeout)
+ timeout = tryagain_timeout;
goto case_RENEW_REQUESTED;
+ }
/* Start things over */
packet_num = 0;
/* Kill any timeouts, user wants this to hurry along */
timeout = 0;
continue;
case SIGUSR2:
- perform_release(requested_ip, server_addr);
+ perform_release(server_addr, requested_ip);
timeout = INT_MAX;
continue;
case SIGTERM:
bb_info_msg("Received SIGTERM");
- if (opt & OPT_R) /* release on quit */
- perform_release(requested_ip, server_addr);
goto ret0;
}
@@ -1429,9 +1584,27 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
switch (state) {
case INIT_SELECTING:
- /* Must be a DHCPOFFER to one of our xid's */
+ /* Must be a DHCPOFFER */
if (*message == DHCPOFFER) {
- /* TODO: why we don't just fetch server's IP from IP header? */
+/* What exactly is server's IP? There are several values.
+ * Example DHCP offer captured with tchdump:
+ *
+ * 10.34.25.254:67 > 10.34.25.202:68 // IP header's src
+ * BOOTP fields:
+ * Your-IP 10.34.25.202
+ * Server-IP 10.34.32.125 // "next server" IP
+ * Gateway-IP 10.34.25.254 // relay's address (if DHCP relays are in use)
+ * DHCP options:
+ * DHCP-Message Option 53, length 1: Offer
+ * Server-ID Option 54, length 4: 10.34.255.7 // "server ID"
+ * Default-Gateway Option 3, length 4: 10.34.25.254 // router
+ *
+ * We think that real server IP (one to use in renew/release)
+ * is one in Server-ID option. But I am not 100% sure.
+ * IP header's src and Gateway-IP (same in this example)
+ * might work too.
+ * "Next server" and router are definitely wrong ones to use, though...
+ */
temp = udhcp_get_option(&packet, DHCP_SERVER_ID);
if (!temp) {
bb_error_msg("no server ID, ignoring packet");
@@ -1455,6 +1628,9 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
case RENEW_REQUESTED:
case REBINDING:
if (*message == DHCPACK) {
+ uint32_t lease_seconds;
+ struct in_addr temp_addr;
+
temp = udhcp_get_option(&packet, DHCP_LEASE_TIME);
if (!temp) {
bb_error_msg("no lease time with ACK, using 1 hour lease");
@@ -1463,9 +1639,11 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
/* it IS unaligned sometimes, don't "optimize" */
move_from_unaligned32(lease_seconds, temp);
lease_seconds = ntohl(lease_seconds);
- lease_seconds &= 0x0fffffff; /* paranoia: must not be prone to overflows */
- if (lease_seconds < 10) /* and not too small */
- lease_seconds = 10;
+ /* paranoia: must not be too small and not prone to overflows */
+ if (lease_seconds < 0x10)
+ lease_seconds = 0x10;
+ if (lease_seconds >= 0x10000000)
+ lease_seconds = 0x0fffffff;
}
#if ENABLE_FEATURE_UDHCPC_ARPING
if (opt & OPT_a) {
@@ -1486,7 +1664,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
) {
bb_info_msg("Offered address is in use "
"(got ARP reply), declining");
- send_decline(xid, server_addr, packet.yiaddr);
+ send_decline(/*xid,*/ server_addr, packet.yiaddr);
if (state != REQUESTING)
udhcp_run_script(NULL, "deconfig");
@@ -1503,20 +1681,15 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
#endif
/* enter bound state */
timeout = lease_seconds / 2;
- {
- struct in_addr temp_addr;
- temp_addr.s_addr = packet.yiaddr;
- bb_info_msg("Lease of %s obtained, lease time %u",
- inet_ntoa(temp_addr), (unsigned)lease_seconds);
- }
+ temp_addr.s_addr = packet.yiaddr;
+ bb_info_msg("Lease of %s obtained, lease time %u",
+ inet_ntoa(temp_addr), (unsigned)lease_seconds);
requested_ip = packet.yiaddr;
udhcp_run_script(&packet, state == REQUESTING ? "bound" : "renew");
state = BOUND;
change_listen_mode(LISTEN_NONE);
if (opt & OPT_q) { /* quit after lease */
- if (opt & OPT_R) /* release on quit */
- perform_release(requested_ip, server_addr);
goto ret0;
}
/* future renew failures should not exit (JM) */
@@ -1528,6 +1701,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
opt = ((opt & ~OPT_b) | OPT_f);
}
#endif
+ /* make future renew packets use different xid */
+ /* xid = random_xid(); ...but why bother? */
already_waited_sec = 0;
continue; /* back to main loop */
}
@@ -1554,6 +1729,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
} /* for (;;) - main loop ends */
ret0:
+ if (opt & OPT_R) /* release on quit */
+ perform_release(server_addr, requested_ip);
retval = 0;
ret:
/*if (client_config.pidfile) - remove_pidfile has its own check */
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index 747472d..dd55e70 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -314,9 +314,7 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
#endif
opt = getopt32(argv, "fSv"
IF_FEATURE_UDHCP_PORT("P:", &str_P)
-#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
- , &dhcp_verbose
-#endif
+ IF_UDHCP_VERBOSE(, &dhcp_verbose)
);
if (!(opt & 1)) { /* no -f */
bb_daemonize_or_rexec(0, argv);
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index 66b42c5..33c9585 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -81,7 +81,6 @@ void FAST_FUNC udhcp_dump_packet(struct dhcp_packet *packet)
int FAST_FUNC udhcp_recv_kernel_packet(struct dhcp_packet *packet, int fd)
{
int bytes;
- unsigned char *vendor;
memset(packet, 0, sizeof(*packet));
bytes = safe_read(fd, packet, sizeof(*packet));
@@ -90,74 +89,18 @@ int FAST_FUNC udhcp_recv_kernel_packet(struct dhcp_packet *packet, int fd)
return bytes; /* returns -1 */
}
- if (packet->cookie != htonl(DHCP_MAGIC)) {
+ if (bytes < offsetof(struct dhcp_packet, options)
+ || packet->cookie != htonl(DHCP_MAGIC)
+ ) {
bb_info_msg("Packet with bad magic, ignoring");
return -2;
}
log1("Received a packet");
udhcp_dump_packet(packet);
- if (packet->op == BOOTREQUEST) {
- vendor = udhcp_get_option(packet, DHCP_VENDOR);
- if (vendor) {
-#if 0
- static const char broken_vendors[][8] = {
- "MSFT 98",
- ""
- };
- int i;
- for (i = 0; broken_vendors[i][0]; i++) {
- if (vendor[OPT_LEN - OPT_DATA] == (uint8_t)strlen(broken_vendors[i])
- && strncmp((char*)vendor, broken_vendors[i], vendor[OPT_LEN - OPT_DATA]) == 0
- ) {
- log1("Broken client (%s), forcing broadcast replies",
- broken_vendors[i]);
- packet->flags |= htons(BROADCAST_FLAG);
- }
- }
-#else
- if (vendor[OPT_LEN - OPT_DATA] == (uint8_t)(sizeof("MSFT 98")-1)
- && memcmp(vendor, "MSFT 98", sizeof("MSFT 98")-1) == 0
- ) {
- log1("Broken client (%s), forcing broadcast replies", "MSFT 98");
- packet->flags |= htons(BROADCAST_FLAG);
- }
-#endif
- }
- }
-
return bytes;
}
-uint16_t FAST_FUNC udhcp_checksum(void *addr, int count)
-{
- /* Compute Internet Checksum for "count" bytes
- * beginning at location "addr".
- */
- int32_t sum = 0;
- uint16_t *source = (uint16_t *) addr;
-
- while (count > 1) {
- /* This is the inner loop */
- sum += *source++;
- count -= 2;
- }
-
- /* Add left-over byte, if any */
- if (count > 0) {
- /* Make sure that the left-over byte is added correctly both
- * with little and big endian hosts */
- uint16_t tmp = 0;
- *(uint8_t*)&tmp = *(uint8_t*)source;
- sum += tmp;
- }
- /* Fold 32-bit sum to 16 bits */
- while (sum >> 16)
- sum = (sum & 0xffff) + (sum >> 16);
-
- return ~sum;
-}
-
/* Construct a ip/udp header for a packet, send packet */
int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
uint32_t source_nip, int source_port,
@@ -212,13 +155,14 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
packet.udp.len = htons(UDP_DHCP_SIZE - padding);
/* for UDP checksumming, ip.len is set to UDP packet len */
packet.ip.tot_len = packet.udp.len;
- packet.udp.check = udhcp_checksum(&packet, IP_UDP_DHCP_SIZE - padding);
+ packet.udp.check = inet_cksum((uint16_t *)&packet,
+ IP_UDP_DHCP_SIZE - padding);
/* but for sending, it is set to IP packet len */
packet.ip.tot_len = htons(IP_UDP_DHCP_SIZE - padding);
packet.ip.ihl = sizeof(packet.ip) >> 2;
packet.ip.version = IPVERSION;
packet.ip.ttl = IPDEFTTL;
- packet.ip.check = udhcp_checksum(&packet.ip, sizeof(packet.ip));
+ packet.ip.check = inet_cksum((uint16_t *)&packet.ip, sizeof(packet.ip));
udhcp_dump_packet(dhcp_pkt);
result = sendto(fd, &packet, IP_UDP_DHCP_SIZE - padding, /*flags:*/ 0,
@@ -238,7 +182,7 @@ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
uint32_t source_nip, int source_port,
uint32_t dest_nip, int dest_port)
{
- struct sockaddr_in client;
+ struct sockaddr_in sa;
unsigned padding;
int fd;
int result = -1;
@@ -251,26 +195,25 @@ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
}
setsockopt_reuseaddr(fd);
- memset(&client, 0, sizeof(client));
- client.sin_family = AF_INET;
- client.sin_port = htons(source_port);
- client.sin_addr.s_addr = source_nip;
- if (bind(fd, (struct sockaddr *)&client, sizeof(client)) == -1) {
+ memset(&sa, 0, sizeof(sa));
+ sa.sin_family = AF_INET;
+ sa.sin_port = htons(source_port);
+ sa.sin_addr.s_addr = source_nip;
+ if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
msg = "bind(%s)";
goto ret_close;
}
- memset(&client, 0, sizeof(client));
- client.sin_family = AF_INET;
- client.sin_port = htons(dest_port);
- client.sin_addr.s_addr = dest_nip;
- if (connect(fd, (struct sockaddr *)&client, sizeof(client)) == -1) {
+ memset(&sa, 0, sizeof(sa));
+ sa.sin_family = AF_INET;
+ sa.sin_port = htons(dest_port);
+ sa.sin_addr.s_addr = dest_nip;
+ if (connect(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
msg = "connect";
goto ret_close;
}
udhcp_dump_packet(dhcp_pkt);
-
padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(dhcp_pkt->options);
result = safe_write(fd, dhcp_pkt, DHCP_SIZE - padding);
msg = "write";
diff --git a/networking/vconfig.c b/networking/vconfig.c
index 48b45d9..924b2f0 100644
--- a/networking/vconfig.c
+++ b/networking/vconfig.c
@@ -13,12 +13,12 @@
//usage: "COMMAND [OPTIONS]"
//usage:#define vconfig_full_usage "\n\n"
//usage: "Create and remove virtual ethernet devices\n"
-//usage: "\n add [interface-name] [vlan_id]"
-//usage: "\n rem [vlan-name]"
-//usage: "\n set_flag [interface-name] [flag-num] [0 | 1]"
-//usage: "\n set_egress_map [vlan-name] [skb_priority] [vlan_qos]"
-//usage: "\n set_ingress_map [vlan-name] [skb_priority] [vlan_qos]"
-//usage: "\n set_name_type [name-type]"
+//usage: "\n add IFACE VLAN_ID"
+//usage: "\n rem VLAN_NAME"
+//usage: "\n set_flag IFACE 0|1 VLAN_QOS"
+//usage: "\n set_egress_map VLAN_NAME SKB_PRIO VLAN_QOS"
+//usage: "\n set_ingress_map VLAN_NAME SKB_PRIO VLAN_QOS"
+//usage: "\n set_name_type NAME_TYPE"
#include "libbb.h"
#include <net/if.h>
@@ -66,58 +66,40 @@ struct vlan_ioctl_args {
* The return value is the last data entry for the matching string. */
static const char *xfind_str(const char *table, const char *str)
{
- while (strcasecmp(str, table+1) != 0) {
- table += table[0];
- if (!*table) {
+ while (strcasecmp(str, table + 1) != 0) {
+ if (!table[0])
bb_show_usage();
- }
+ table += table[0];
}
return table - 1;
}
static const char cmds[] ALIGN1 = {
4, ADD_VLAN_CMD, 7,
- 'a', 'd', 'd', 0,
+ 'a','d','d',0,
3, DEL_VLAN_CMD, 7,
- 'r', 'e', 'm', 0,
+ 'r','e','m',0,
3, SET_VLAN_NAME_TYPE_CMD, 17,
- 's', 'e', 't', '_',
- 'n', 'a', 'm', 'e', '_',
- 't', 'y', 'p', 'e', 0,
+ 's','e','t','_','n','a','m','e','_','t','y','p','e',0,
5, SET_VLAN_FLAG_CMD, 12,
- 's', 'e', 't', '_',
- 'f', 'l', 'a', 'g', 0,
+ 's','e','t','_','f','l','a','g',0,
5, SET_VLAN_EGRESS_PRIORITY_CMD, 18,
- 's', 'e', 't', '_',
- 'e', 'g', 'r', 'e', 's', 's', '_',
- 'm', 'a', 'p', 0,
- 5, SET_VLAN_INGRESS_PRIORITY_CMD, 16,
- 's', 'e', 't', '_',
- 'i', 'n', 'g', 'r', 'e', 's', 's', '_',
- 'm', 'a', 'p', 0,
+ 's','e','t','_','e','g','r','e','s','s','_','m','a','p',0,
+ 5, SET_VLAN_INGRESS_PRIORITY_CMD, 0,
+ 's','e','t','_','i','n','g','r','e','s','s','_','m','a','p',0,
};
static const char name_types[] ALIGN1 = {
VLAN_NAME_TYPE_PLUS_VID, 16,
- 'V', 'L', 'A', 'N',
- '_', 'P', 'L', 'U', 'S', '_', 'V', 'I', 'D',
- 0,
+ 'V','L','A','N','_','P','L','U','S','_','V','I','D',0,
VLAN_NAME_TYPE_PLUS_VID_NO_PAD, 22,
- 'V', 'L', 'A', 'N',
- '_', 'P', 'L', 'U', 'S', '_', 'V', 'I', 'D',
- '_', 'N', 'O', '_', 'P', 'A', 'D', 0,
+ 'V','L','A','N','_','P','L','U','S','_','V','I','D','_','N','O','_','P','A','D',0,
VLAN_NAME_TYPE_RAW_PLUS_VID, 15,
- 'D', 'E', 'V',
- '_', 'P', 'L', 'U', 'S', '_', 'V', 'I', 'D',
- 0,
- VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD, 20,
- 'D', 'E', 'V',
- '_', 'P', 'L', 'U', 'S', '_', 'V', 'I', 'D',
- '_', 'N', 'O', '_', 'P', 'A', 'D', 0,
+ 'D','E','V','_','P','L','U','S','_','V','I','D',0,
+ VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD, 0,
+ 'D','E','V','_','P','L','U','S','_','V','I','D','_','N','O','_','P','A','D',0,
};
-static const char conf_file_name[] ALIGN1 = "/proc/net/vlan/config";
-
int vconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int vconfig_main(int argc, char **argv)
{
@@ -125,25 +107,19 @@ int vconfig_main(int argc, char **argv)
const char *p;
int fd;
- if (argc < 3) {
- bb_show_usage();
- }
-
- /* Don't bother closing the filedes. It will be closed on cleanup. */
- /* Will die if 802.1q is not present */
- xopen(conf_file_name, O_RDONLY);
-
memset(&ifr, 0, sizeof(ifr));
++argv;
- p = xfind_str(cmds+2, *argv);
+ if (!argv[0])
+ bb_show_usage();
+ p = xfind_str(cmds + 2, argv[0]);
ifr.cmd = *p;
- if (argc != p[-1]) {
+ if (argc != p[-1])
bb_show_usage();
- }
- if (ifr.cmd == SET_VLAN_NAME_TYPE_CMD) { /* set_name_type */
- ifr.u.name_type = *xfind_str(name_types+1, argv[1]);
+ if (ifr.cmd == SET_VLAN_NAME_TYPE_CMD) {
+ /* set_name_type */
+ ifr.u.name_type = *xfind_str(name_types + 1, argv[1]);
} else {
strncpy_IFNAMSIZ(ifr.device1, argv[1]);
p = argv[2];
@@ -152,22 +128,26 @@ int vconfig_main(int argc, char **argv)
* since ifr.u.flag, ifr.u.VID, and ifr.u.skb_priority are all same-sized
* (unsigned) int members of a unions. But because of the range checking,
* doing so wouldn't save that much space and would also make maintainence
- * more of a pain. */
- if (ifr.cmd == SET_VLAN_FLAG_CMD) { /* set_flag */
- ifr.u.flag = xatoul_range(p, 0, 1);
+ * more of a pain.
+ */
+ if (ifr.cmd == SET_VLAN_FLAG_CMD) {
+ /* set_flag */
+ ifr.u.flag = xatou_range(p, 0, 1);
/* DM: in order to set reorder header, qos must be set */
- ifr.vlan_qos = xatoul_range(argv[3], 0, 7);
- } else if (ifr.cmd == ADD_VLAN_CMD) { /* add */
- ifr.u.VID = xatoul_range(p, 0, VLAN_GROUP_ARRAY_LEN-1);
- } else if (ifr.cmd != DEL_VLAN_CMD) { /* set_{egress|ingress}_map */
+ ifr.vlan_qos = xatou_range(argv[3], 0, 7);
+ } else if (ifr.cmd == ADD_VLAN_CMD) {
+ /* add */
+ ifr.u.VID = xatou_range(p, 0, VLAN_GROUP_ARRAY_LEN - 1);
+ } else if (ifr.cmd != DEL_VLAN_CMD) {
+ /* set_{egress|ingress}_map */
ifr.u.skb_priority = xatou(p);
- ifr.vlan_qos = xatoul_range(argv[3], 0, 7);
+ ifr.vlan_qos = xatou_range(argv[3], 0, 7);
}
}
fd = xsocket(AF_INET, SOCK_STREAM, 0);
ioctl_or_perror_and_die(fd, SIOCSIFVLAN, &ifr,
- "ioctl error for %s", *argv);
+ "ioctl error for %s", argv[0]);
return 0;
}
diff --git a/networking/wget.c b/networking/wget.c
index ddd5bfd..34c4652 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -298,8 +298,13 @@ static void parse_url(const char *src_url, struct host_info *h)
sp = strrchr(h->host, '@');
if (sp != NULL) {
- h->user = h->host;
+ // URL-decode "user:password" string before base64-encoding:
+ // wget http://test:my%20pass@example.com should send
+ // Authorization: Basic dGVzdDpteSBwYXNz
+ // which decodes to "test:my pass".
+ // Standard wget and curl do this too.
*sp = '\0';
+ h->user = percent_decode_in_place(h->host, /*strict:*/ 0);
h->host = sp + 1;
}
@@ -661,12 +666,6 @@ static void download_one_url(const char *url)
#if ENABLE_FEATURE_WGET_AUTHENTICATION
if (target.user) {
-//TODO: URL-decode "user:password" string before base64-encoding:
-//wget http://test:my%20pass@example.com should send
-// Authorization: Basic dGVzdDpteSBwYXNz
-//which decodes to "test:my pass", instead of what we send now:
-// Authorization: Basic dGVzdDpteSUyMHBhc3M=
-//Can reuse decodeString() from httpd.c
fprintf(sfp, "Proxy-Authorization: Basic %s\r\n"+6,
base64enc(target.user));
}
diff --git a/networking/zcip.c b/networking/zcip.c
index 8a35eca..7314ff8 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -91,6 +91,7 @@ struct globals {
#define G (*(struct globals*)&bb_common_bufsiz1)
#define saddr (G.saddr )
#define eth_addr (G.eth_addr)
+#define INIT_G() do { } while (0)
/**
@@ -223,6 +224,7 @@ int zcip_main(int argc UNUSED_PARAM, char **argv)
#define verbose (L.verbose )
memset(&L, 0, sizeof(L));
+ INIT_G();
#define FOREGROUND (opts & 1)
#define QUIT (opts & 2)
diff --git a/procps/Config.src b/procps/Config.src
index 570b026..5cd47c8 100644
--- a/procps/Config.src
+++ b/procps/Config.src
@@ -90,12 +90,20 @@ config PS
config FEATURE_PS_WIDE
bool "Enable wide output option (-w)"
default y
- depends on PS
+ depends on PS && !DESKTOP
help
Support argument 'w' for wide output.
If given once, 132 chars are printed, and if given more
than once, the length is unlimited.
+config FEATURE_PS_LONG
+ bool "Enable long output option (-l)"
+ default y
+ depends on PS && !DESKTOP
+ help
+ Support argument 'l' for long output.
+ Adds fields PPID, RSS, START, TIME & TTY
+
config FEATURE_PS_TIME
bool "Enable time and elapsed time output"
default y
diff --git a/procps/kill.c b/procps/kill.c
index 224e5ad..cd189bc 100644
--- a/procps/kill.c
+++ b/procps/kill.c
@@ -163,15 +163,18 @@ int kill_main(int argc, char **argv)
/* Find out our session id */
sid = getsid(pid);
/* Stop all processes */
- kill(-1, SIGSTOP);
+ if (signo != SIGSTOP && signo != SIGCONT)
+ kill(-1, SIGSTOP);
/* Signal all processes except those in our session */
- while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID))) {
+ while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) {
int i;
if (p->sid == (unsigned)sid
|| p->pid == (unsigned)pid
- || p->pid == 1)
+ || p->pid == 1
+ ) {
continue;
+ }
/* All remaining args must be -o PID options.
* Check p->pid against them. */
@@ -201,7 +204,8 @@ int kill_main(int argc, char **argv)
}
resume:
/* And let them continue */
- kill(-1, SIGCONT);
+ if (signo != SIGSTOP && signo != SIGCONT)
+ kill(-1, SIGCONT);
return ret;
}
@@ -255,9 +259,10 @@ int kill_main(int argc, char **argv)
pid = bb_strtoi(arg, &end, 10);
if (errno && (errno != EINVAL || *end != ' ')) {
bb_error_msg("invalid number '%s'", arg);
- *end = '\0';
errors++;
- } else if (kill(pid, signo) != 0) {
+ break;
+ }
+ if (kill(pid, signo) != 0) {
bb_perror_msg("can't kill pid %d", (int)pid);
errors++;
}
diff --git a/procps/lsof.c b/procps/lsof.c
new file mode 100644
index 0000000..7e0ffa4
--- a/dev/null
+++ b/procps/lsof.c
@@ -0,0 +1,76 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Mini lsof implementation for busybox
+ *
+ * Copyright (C) 2012 by Sven Oliver 'SvOlli' Moll <svolli@svolli.de>
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
+ */
+
+//config:config LSOF
+//config: bool "lsof"
+//config: default y
+//config: help
+//config: Show open files in the format of:
+//config: PID <TAB> /path/to/executable <TAB> /path/to/opened/file
+
+//applet:IF_LSOF(APPLET(lsof, BB_DIR_USR_BIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_LSOF) += lsof.o
+
+//usage:#define lsof_trivial_usage
+//usage: ""
+//usage:#define lsof_full_usage "\n\n"
+//usage: "Show all open files"
+
+#include "libbb.h"
+
+/*
+ * Examples of "standard" lsof output:
+ *
+ * COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
+ * init 1 root cwd DIR 8,5 4096 2 /
+ * init 1 root rtd DIR 8,5 4096 2 /
+ * init 1 root txt REG 8,5 872400 63408 /app/busybox-1.19.2/busybox
+ * rpc.portm 1064 root mem REG 8,5 43494 47451 /app/glibc-2.11/lib/libnss_files-2.11.so
+ * rpc.portm 1064 root 3u IPv4 2178 UDP *:111
+ * rpc.portm 1064 root 4u IPv4 1244 TCP *:111 (LISTEN)
+ * runsvdir 1116 root 0r CHR 1,3 1214 /dev/null
+ * runsvdir 1116 root 1w CHR 1,3 1214 /dev/null
+ * runsvdir 1116 root 2w CHR 1,3 1214 /dev/null
+ * runsvdir 1116 root 3r DIR 8,6 1560 58359 /.local/var/service
+ * gpm 1128 root 4u unix 0xffff88007c09ccc0 1302 /dev/gpmctl
+ */
+
+int lsof_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int lsof_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
+{
+ procps_status_t *proc = NULL;
+
+ while ((proc = procps_scan(proc, PSSCAN_PID|PSSCAN_EXE)) != NULL) {
+ char name[sizeof("/proc/%u/fd/0123456789") + sizeof(int)*3];
+ unsigned baseofs;
+ DIR *d_fd;
+ char *fdlink;
+ struct dirent *entry;
+
+ if (getpid() == proc->pid)
+ continue;
+
+ baseofs = sprintf(name, "/proc/%u/fd/", proc->pid);
+ d_fd = opendir(name);
+ if (d_fd) {
+ while ((entry = readdir(d_fd)) != NULL) {
+ if (entry->d_type == DT_LNK) {
+ safe_strncpy(name + baseofs, entry->d_name, 10);
+ fdlink = xmalloc_readlink(name);
+ printf("%d\t%s\t%s\n", proc->pid, proc->exe, fdlink);
+ free(fdlink);
+ }
+ }
+ closedir(d_fd);
+ }
+ }
+
+ return EXIT_SUCCESS;
+}
diff --git a/procps/nmeter.c b/procps/nmeter.c
index 9999559..ed54790 100644
--- a/procps/nmeter.c
+++ b/procps/nmeter.c
@@ -274,30 +274,56 @@ static int rdval_loadavg(const char* p, ullong *vec, ...)
// 1 2 3 4 5 6(rd) 7 8 9 10(wr) 11 12 13 14
// 3 0 hda 51292 14441 841783 926052 25717 79650 843256 3029804 0 148459 3956933
// 3 1 hda1 0 0 0 0 <- ignore if only 4 fields
+// Linux 3.0 (maybe earlier) started printing full stats for hda1 too.
+// Had to add code which skips such devices.
static int rdval_diskstats(const char* p, ullong *vec)
{
- ullong rd = rd; // for compiler
- int indexline = 0;
+ char devname[32];
+ unsigned devname_len = 0;
+ int value_idx = 0;
+
vec[0] = 0;
vec[1] = 0;
while (1) {
- indexline++;
- while (*p == ' ' || *p == '\t') p++;
- if (*p == '\0') break;
+ value_idx++;
+ while (*p == ' ' || *p == '\t')
+ p++;
+ if (*p == '\0')
+ break;
if (*p == '\n') {
- indexline = 0;
+ value_idx = 0;
p++;
continue;
}
- if (indexline == 6) {
- rd = strtoull(p, NULL, 10);
- } else if (indexline == 10) {
- vec[0] += rd; // TODO: *sectorsize (don't know how to find out sectorsize)
+ if (value_idx == 3) {
+ char *end = strchrnul(p, ' ');
+ /* If this a hda1-like device (same prefix as last one + digit)? */
+ if (devname_len && strncmp(devname, p, devname_len) == 0 && isdigit(p[devname_len])) {
+ p = end;
+ goto skip_line; /* skip entire line */
+ }
+ /* It is not. Remember the name for future checks */
+ devname_len = end - p;
+ if (devname_len > sizeof(devname)-1)
+ devname_len = sizeof(devname)-1;
+ strncpy(devname, p, devname_len);
+ /* devname[devname_len] = '\0'; - not really needed */
+ p = end;
+ } else
+ if (value_idx == 6) {
+ // TODO: *sectorsize (don't know how to find out sectorsize)
+ vec[0] += strtoull(p, NULL, 10);
+ } else
+ if (value_idx == 10) {
+ // TODO: *sectorsize (don't know how to find out sectorsize)
vec[1] += strtoull(p, NULL, 10);
- while (*p != '\n' && *p != '\0') p++;
+ skip_line:
+ while (*p != '\n' && *p != '\0')
+ p++;
continue;
}
- while (*p > ' ') p++; // skip over value
+ while ((unsigned char)(*p) > ' ') // skip over value
+ p++;
}
return 0;
}
diff --git a/procps/ps.c b/procps/ps.c
index dcc0f7b..4727b21 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -39,6 +39,12 @@
//usage: IF_FEATURE_PS_WIDE(
//usage: "\n w Wide output"
//usage: )
+//usage: IF_FEATURE_PS_LONG(
+//usage: "\n l Long output"
+//usage: )
+//usage: IF_FEATURE_SHOW_THREADS(
+//usage: "\n T Show threads"
+//usage: )
//usage:
//usage:#endif /* ENABLE_DESKTOP */
//usage:
@@ -56,15 +62,15 @@
//usage: " 2990 andersen andersen R ps\n"
#include "libbb.h"
+#ifdef __linux__
+# include <sys/sysinfo.h>
+#endif
/* Absolute maximum on output line length */
enum { MAX_WIDTH = 2*1024 };
#if ENABLE_DESKTOP
-#ifdef __linux__
-# include <sys/sysinfo.h>
-#endif
#include <sys/times.h> /* for times() */
#ifndef AT_CLKTCK
# define AT_CLKTCK 17
@@ -625,15 +631,21 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
enum {
OPT_Z = (1 << 0) * ENABLE_SELINUX,
OPT_T = (1 << ENABLE_SELINUX) * ENABLE_FEATURE_SHOW_THREADS,
+ OPT_l = (1 << ENABLE_SELINUX) * (1 << ENABLE_FEATURE_SHOW_THREADS) * ENABLE_FEATURE_PS_LONG,
};
+#if ENABLE_FEATURE_PS_LONG
+ time_t now = now;
+ struct sysinfo info;
+#endif
int opts = 0;
/* If we support any options, parse argv */
-#if ENABLE_SELINUX || ENABLE_FEATURE_SHOW_THREADS || ENABLE_FEATURE_PS_WIDE
+#if ENABLE_SELINUX || ENABLE_FEATURE_SHOW_THREADS || ENABLE_FEATURE_PS_WIDE || ENABLE_FEATURE_PS_LONG
# if ENABLE_FEATURE_PS_WIDE
/* -w is a bit complicated */
int w_count = 0;
opt_complementary = "-:ww";
- opts = getopt32(argv, IF_SELINUX("Z")IF_FEATURE_SHOW_THREADS("T")"w", &w_count);
+ opts = getopt32(argv, IF_SELINUX("Z")IF_FEATURE_SHOW_THREADS("T")IF_FEATURE_PS_LONG("l")
+ "w", &w_count);
/* if w is given once, GNU ps sets the width to 132,
* if w is given more than once, it is "unlimited"
*/
@@ -648,23 +660,51 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
# else
/* -w is not supported, only -Z and/or -T */
opt_complementary = "-";
- opts = getopt32(argv, IF_SELINUX("Z")IF_FEATURE_SHOW_THREADS("T"));
+ opts = getopt32(argv, IF_SELINUX("Z")IF_FEATURE_SHOW_THREADS("T")IF_FEATURE_PS_LONG("l"));
# endif
-#endif
-#if ENABLE_SELINUX
+# if ENABLE_SELINUX
if ((opts & OPT_Z) && is_selinux_enabled()) {
psscan_flags = PSSCAN_PID | PSSCAN_CONTEXT
| PSSCAN_STATE | PSSCAN_COMM;
puts(" PID CONTEXT STAT COMMAND");
} else
+# endif
+ if (opts & OPT_l) {
+ psscan_flags = PSSCAN_STATE | PSSCAN_UIDGID | PSSCAN_PID | PSSCAN_PPID
+ | PSSCAN_TTY | PSSCAN_STIME | PSSCAN_UTIME | PSSCAN_COMM
+ | PSSCAN_VSZ | PSSCAN_RSS;
+/* http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ps.html
+ * mandates for -l:
+ * -F Flags (?)
+ * S State
+ * UID,PID,PPID
+ * -C CPU usage
+ * -PRI The priority of the process; higher numbers mean lower priority
+ * -NI Nice value
+ * -ADDR The address of the process (?)
+ * SZ The size in blocks of the core image
+ * -WCHAN The event for which the process is waiting or sleeping
+ * TTY
+ * TIME The cumulative execution time
+ * CMD
+ * We don't show fields marked with '-'.
+ * We show VSZ and RSS instead of SZ.
+ * We also show STIME (standard says that -f shows it, -l doesn't).
+ */
+ puts("S UID PID PPID VSZ RSS TTY STIME TIME CMD");
+#if ENABLE_FEATURE_PS_LONG
+ now = time(NULL);
+ sysinfo(&info);
#endif
- {
+ }
+ else {
puts(" PID USER VSZ STAT COMMAND");
}
if (opts & OPT_T) {
psscan_flags |= PSSCAN_TASKS;
}
+#endif
p = NULL;
while ((p = procps_scan(p, psscan_flags)) != NULL) {
@@ -678,15 +718,49 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
} else
#endif
{
- const char *user = get_cached_username(p->uid);
- //if (p->vsz == 0)
- // len = printf("%5u %-8.8s %s ",
- // p->pid, user, p->state);
- //else
+ char buf6[6];
+ smart_ulltoa5(p->vsz, buf6, " mgtpezy");
+ buf6[5] = '\0';
+#if ENABLE_FEATURE_PS_LONG
+ if (opts & OPT_l) {
+ char bufr[6], stime_str[6];
+ char tty[2 * sizeof(int)*3 + 2];
+ char *endp;
+ unsigned sut = (p->stime + p->utime) / 100;
+ unsigned elapsed = info.uptime - (p->start_time / 100);
+ time_t start = now - elapsed;
+ struct tm *tm = localtime(&start);
+
+ smart_ulltoa5(p->rss, bufr, " mgtpezy");
+ bufr[5] = '\0';
+
+ if (p->tty_major == 136)
+ /* It should be pts/N, not ptsN, but N > 9
+ * will overflow field width...
+ */
+ endp = stpcpy(tty, "pts");
+ else
+ if (p->tty_major == 4) {
+ endp = stpcpy(tty, "tty");
+ if (p->tty_minor >= 64) {
+ p->tty_minor -= 64;
+ *endp++ = 'S';
+ }
+ }
+ else
+ endp = tty + sprintf(tty, "%d:", p->tty_major);
+ strcpy(endp, utoa(p->tty_minor));
+
+ strftime(stime_str, 6, (elapsed >= (24 * 60 * 60)) ? "%b%d" : "%H:%M", tm);
+ stime_str[5] = '\0';
+ // S UID PID PPID VSZ RSS TTY STIME TIME CMD
+ len = printf("%c %5u %5u %5u %5s %5s %-5s %s %02u:%02u:%02u ",
+ p->state[0], p->uid, p->pid, p->ppid, buf6, bufr, tty,
+ stime_str, sut / 3600, (sut % 3600) / 60, sut % 60);
+ } else
+#endif
{
- char buf6[6];
- smart_ulltoa5(p->vsz, buf6, " mgtpezy");
- buf6[5] = '\0';
+ const char *user = get_cached_username(p->uid);
len = printf("%5u %-8.8s %s %s ",
p->pid, user, buf6, p->state);
}
diff --git a/procps/smemcap.c b/procps/smemcap.c
index e108d88..9d1126a 100644
--- a/procps/smemcap.c
+++ b/procps/smemcap.c
@@ -20,7 +20,7 @@
//config: a memory usage statistic tool.
#include "libbb.h"
-#include "archive.h"
+#include "bb_archive.h"
struct fileblock {
struct fileblock *next;
diff --git a/procps/sysctl.c b/procps/sysctl.c
index 909828d..2e713a3 100644
--- a/procps/sysctl.c
+++ b/procps/sysctl.c
@@ -224,7 +224,7 @@ static int sysctl_handle_preload_file(const char *filename)
parser = config_open(filename);
/* Must do it _after_ config_open(): */
xchdir("/proc/sys");
- /* xchroot(".") - if you are paranoid */
+ /* xchroot("/proc/sys") - if you are paranoid */
//TODO: ';' is comment char too
//TODO: comment may be only at line start. "var=1 #abc" - "1 #abc" is the value
@@ -260,7 +260,7 @@ int sysctl_main(int argc UNUSED_PARAM, char **argv)
return sysctl_handle_preload_file(*argv ? *argv : "/etc/sysctl.conf");
}
xchdir("/proc/sys");
- /* xchroot(".") - if you are paranoid */
+ /* xchroot("/proc/sys") - if you are paranoid */
if (opt & (FLAG_TABLE_FORMAT | FLAG_SHOW_ALL)) {
return sysctl_act_recursive(".");
}
diff --git a/procps/top.c b/procps/top.c
index 011bbf1..15eb624 100644
--- a/procps/top.c
+++ b/procps/top.c
@@ -126,7 +126,6 @@ struct BUG_bad_size {
char BUG_G_too_big[sizeof(G) <= COMMON_BUFSIZE ? 1 : -1];
char BUG_line_buf_too_small[LINE_BUF_SIZE > 80 ? 1 : -1];
};
-#define INIT_G() do { } while (0)
#define top (G.top )
#define ntop (G.ntop )
#define sort_field (G.sort_field )
@@ -143,6 +142,7 @@ struct BUG_bad_size {
#define num_cpus (G.num_cpus )
#define total_pcpu (G.total_pcpu )
#define line_buf (G.line_buf )
+#define INIT_G() do { } while (0)
enum {
OPT_d = (1 << 0),
diff --git a/runit/chpst.c b/runit/chpst.c
index 1857060..ac296ba 100644
--- a/runit/chpst.c
+++ b/runit/chpst.c
@@ -405,22 +405,19 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
if (opt & OPT_e)
edir(env_dir);
- // FIXME: chrooted jail must have /etc/passwd if we move this after chroot!
- // OTOH chroot fails for non-roots!
- // SOLUTION: cache uid/gid before chroot, apply uid/gid after
+ if (opt & (OPT_u|OPT_U))
+ xget_uidgid(&ugid, set_user);
+
+ // chrooted jail must have /etc/passwd if we move this after chroot.
+ // OTOH chroot fails for non-roots.
+ // Solution: cache uid/gid before chroot, apply uid/gid after.
if (opt & OPT_U) {
- xget_uidgid(&ugid, env_user);
xsetenv("GID", utoa(ugid.gid));
xsetenv("UID", utoa(ugid.uid));
}
- if (opt & OPT_u) {
- xget_uidgid(&ugid, set_user);
- }
-
if (opt & OPT_root) {
- xchdir(root);
- xchroot(".");
+ xchroot(root);
}
if (opt & OPT_u) {
diff --git a/runit/runsvdir.c b/runit/runsvdir.c
index 9495a2a..32526cf 100644
--- a/runit/runsvdir.c
+++ b/runit/runsvdir.c
@@ -75,8 +75,7 @@ struct globals {
#define logpipe (G.logpipe )
#define pfd (G.pfd )
#define stamplog (G.stamplog )
-#define INIT_G() do { \
-} while (0)
+#define INIT_G() do { } while (0)
static void fatal2_cannot(const char *m1, const char *m2)
{
diff --git a/scripts/basic/docproc.c b/scripts/basic/docproc.c
index 0984e7d..b125698 100644
--- a/scripts/basic/docproc.c
+++ b/scripts/basic/docproc.c
@@ -39,6 +39,7 @@
#include <limits.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <alloca.h>
/* exitstatus is used to keep track of any failing calls to kernel-doc,
* but execution continues. */
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
index f27a179..165a8c3 100644
--- a/scripts/basic/fixdep.c
+++ b/scripts/basic/fixdep.c
@@ -113,6 +113,7 @@
#include <limits.h>
#include <ctype.h>
#include <arpa/inet.h>
+#include <alloca.h>
/* bbox: not needed
#define INT_CONF ntohl(0x434f4e46)
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter
index 0d3ff7f..6db2a5e 100755
--- a/scripts/bloat-o-meter
+++ b/scripts/bloat-o-meter
@@ -39,25 +39,16 @@ if f1 is None or f2 is None:
sym_args = " ".join(sys.argv[3 + flag_timing + dashes:])
def getsizes(file):
sym, alias, lut = {}, {}, {}
- #dynsym_filter = re.compile("^\d+:\s+[\dA-Fa-f]+\s+\d+\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+$")
for l in os.popen("readelf -W -s %s %s" % (sym_args, file)).readlines():
- if True:
- l = l.strip()
- if not (len(l) and l[0].isdigit() and len(l.split()) == 8):
- continue
- num, value, size, typ, bind, vis, ndx, name = l.split()
- if ndx == "UND": continue # skip undefined
- if typ in ["SECTION", "FILES"]: continue # skip sections and files
- #else:
- # l = l.strip()
- # match = dynsym_filter.match(l)
- # if not match: continue
- # x, value, size, typ, bind, x, ndx, name = l.split()
- # if ndx == "UND": continue # skip undefined
- # if typ in ["SECTION", "FILES"]: continue # skip sections and files
+ l = l.strip()
+ if not (len(l) and l[0].isdigit() and len(l.split()) == 8):
+ continue
+ num, value, size, typ, bind, vis, ndx, name = l.split()
+ if ndx == "UND": continue # skip undefined
+ if typ in ["SECTION", "FILES"]: continue # skip sections and files
if "." in name: name = "static." + name.split(".")[0]
value = int(value, 16)
- size = int(size)
+ size = int(size, 16) if size.startswith('0x') else int(size)
if vis != "DEFAULT" and bind != "GLOBAL": # see if it is an alias
alias[(value, size)] = {"name" : name}
else:
diff --git a/scripts/gen_build_files.sh b/scripts/gen_build_files.sh
index e518a90..0989b2f 100755
--- a/scripts/gen_build_files.sh
+++ b/scripts/gen_build_files.sh
@@ -19,25 +19,20 @@ chk() { status "CHK" "$@"; }
generate()
{
- local src="$1" dst="$2" header="$3" insert="$4"
+ # NB: data to be inserted at INSERT line is coming on stdin
+ local src="$1" dst="$2" header="$3"
#chk "${dst}"
- (
+ {
# Need to use printf: different shells have inconsistent
- # rules re handling of "\n" in echo params,
- # and ${insert} definitely contains "\n".
- # Therefore, echo "${header}" would not work:
+ # rules re handling of "\n" in echo params.
printf "%s\n" "${header}"
- if grep -qs '^INSERT$' "${src}"; then
- sed -n '1,/^INSERT$/p' "${src}"
- printf "%s\n" "${insert}"
- sed -n '/^INSERT$/,$p' "${src}"
- else
- if [ -n "${insert}" ]; then
- printf "%s\n" "ERROR: INSERT line missing in: ${src}" 1>&2
- fi
- cat "${src}"
- fi
- ) | sed '/^INSERT$/d' > "${dst}.tmp"
+ # print everything up to INSERT line
+ sed -n '/^INSERT$/ q; p' "${src}"
+ # copy stdin to stdout
+ cat
+ # print everything after INSERT line
+ sed -n '/^INSERT$/ { :l; n; p; bl }' "${src}"
+ } >"${dst}.tmp"
if ! cmp -s "${dst}" "${dst}.tmp"; then
gen "${dst}"
mv "${dst}.tmp" "${dst}"
@@ -47,27 +42,27 @@ generate()
}
# (Re)generate include/applets.h
-s=`sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c`
-generate \
+sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
+| generate \
"$srctree/include/applets.src.h" \
"include/applets.h" \
- "/* DO NOT EDIT. This file is generated from applets.src.h */" \
- "${s}"
+ "/* DO NOT EDIT. This file is generated from applets.src.h */"
# (Re)generate include/usage.h
# We add line continuation backslash after each line,
# and insert empty line before each line which doesn't start
# with space or tab
-# (note: we need to use \\\\ because of ``)
-s=`sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\\\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\\\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c`
-generate \
+sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' \
+ "$srctree"/*/*.c "$srctree"/*/*/*.c \
+| generate \
"$srctree/include/usage.src.h" \
"include/usage.h" \
- "/* DO NOT EDIT. This file is generated from usage.src.h */" \
- "${s}"
+ "/* DO NOT EDIT. This file is generated from usage.src.h */"
# (Re)generate */Kbuild and */Config.in
-{ cd -- "$srctree" && find . -type d; } | while read -r d; do
+# We skip .dotdirs - makes git/svn/etc users happier
+{ cd -- "$srctree" && find . -type d -not '(' -name '.?*' -prune ')'; } \
+| while read -r d; do
d="${d#./}"
src="$srctree/$d/Kbuild.src"
@@ -75,11 +70,10 @@ generate \
if test -f "$src"; then
mkdir -p -- "$d" 2>/dev/null
- s=`sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c`
- generate \
+ sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c \
+ | generate \
"${src}" "${dst}" \
- "# DO NOT EDIT. This file is generated from Kbuild.src" \
- "${s}"
+ "# DO NOT EDIT. This file is generated from Kbuild.src"
fi
src="$srctree/$d/Config.src"
@@ -87,11 +81,10 @@ generate \
if test -f "$src"; then
mkdir -p -- "$d" 2>/dev/null
- s=`sed -n 's@^//config:@@p' "$srctree/$d"/*.c`
- generate \
+ sed -n 's@^//config:@@p' "$srctree/$d"/*.c \
+ | generate \
"${src}" "${dst}" \
- "# DO NOT EDIT. This file is generated from Config.src" \
- "${s}"
+ "# DO NOT EDIT. This file is generated from Config.src"
fi
done
diff --git a/scripts/randomtest.loop b/scripts/randomtest.loop
index 2c8a9bd..758a8e8 100755
--- a/scripts/randomtest.loop
+++ b/scripts/randomtest.loop
@@ -1,5 +1,7 @@
#!/bin/sh
+run_testsuite=true
+
test -d "$1" || { echo "'$1' is not a directory"; exit 1; }
test -x "$1/scripts/randomtest" || { echo "No scripts/randomtest in '$1'"; exit 1; }
@@ -21,7 +23,9 @@ while sleep 1; do
echo "Failed build in: failed.$dir"
exit 1 # you may comment this out...
let fail++
- else
+ continue
+ fi
+ if $run_testsuite; then
(
cd -- "$dir/testsuite" || exit 1
echo "Running testsuite in $dir..."
@@ -29,10 +33,12 @@ while sleep 1; do
)
if test $? != 0; then
echo "Failed runtest in $dir"
- exit 1
+ exit 1 # you may comment this out...
+ let fail++
+ continue
fi
tail -n10 -- "$dir/testsuite/runtest.log"
- rm -rf -- "$dir"
fi
+ rm -rf -- "$dir"
let cnt++
done
diff --git a/shell/ash.c b/shell/ash.c
index 31c7152..1e1a229 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -7435,6 +7435,12 @@ tryexec(IF_FEATURE_SH_STANDALONE(int applet_no,) char *cmd, char **argv, char **
*
* That is, do not use $SHELL, user's shell, or /bin/sh;
* just call ourselves.
+ *
+ * Note that bash reads ~80 chars of the file, and if it sees
+ * a zero byte before it sees newline, it doesn't try to
+ * interpret it, but fails with "cannot execute binary file"
+ * message and exit code 126. For one, this prevents attempts
+ * to interpret foreign ELF binaries as shell scripts.
*/
char **ap;
char **new;
@@ -7465,9 +7471,7 @@ shellexec(char **argv, const char *path, int idx)
int e;
char **envp;
int exerrno;
-#if ENABLE_FEATURE_SH_STANDALONE
- int applet_no = -1;
-#endif
+ int applet_no = -1; /* used only by FEATURE_SH_STANDALONE */
clearredir(/*drop:*/ 1);
envp = listvars(VEXPORT, VUNSET, /*end:*/ NULL);
@@ -7477,8 +7481,16 @@ shellexec(char **argv, const char *path, int idx)
#endif
) {
tryexec(IF_FEATURE_SH_STANDALONE(applet_no,) argv[0], argv, envp);
+ if (applet_no >= 0) {
+ /* We tried execing ourself, but it didn't work.
+ * Maybe /proc/self/exe doesn't exist?
+ * Try $PATH search.
+ */
+ goto try_PATH;
+ }
e = errno;
} else {
+ try_PATH:
e = ENOENT;
while ((cmdname = path_advance(&path, argv[0])) != NULL) {
if (--idx < 0 && pathopt == NULL) {
@@ -12888,6 +12900,10 @@ exitshell(void)
char *p;
int status;
+#if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
+ save_history(line_input_state);
+#endif
+
status = exitstatus;
TRACE(("pid %d, exitshell(%d)\n", getpid(), status));
if (setjmp(loc.loc)) {
@@ -13194,7 +13210,7 @@ int ash_main(int argc UNUSED_PARAM, char **argv)
}
if (sflag || minusc == NULL) {
-#if defined MAX_HISTORY && MAX_HISTORY > 0 && ENABLE_FEATURE_EDITING_SAVEHISTORY
+#if MAX_HISTORY > 0 && ENABLE_FEATURE_EDITING_SAVEHISTORY
if (iflag) {
const char *hp = lookupvar("HISTFILE");
if (hp)
diff --git a/shell/cttyhack.c b/shell/cttyhack.c
index 37ea137..f9b59c2 100644
--- a/shell/cttyhack.c
+++ b/shell/cttyhack.c
@@ -50,9 +50,12 @@
//config:
//config: # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'
//config:
+//config: Starting getty on a controlling tty from a shell script:
+//config:
+//config: # getty 115200 $(cttyhack)
//usage:#define cttyhack_trivial_usage
-//usage: "PROG ARGS"
+//usage: "[PROG ARGS]"
//usage:#define cttyhack_full_usage "\n\n"
//usage: "Give PROG a controlling tty if possible."
//usage: "\nExample for /etc/inittab (for busybox init):"
@@ -108,61 +111,78 @@ int cttyhack_main(int argc UNUSED_PARAM, char **argv)
char paranoia[sizeof(struct serial_struct) * 3];
} u;
- if (!*++argv) {
- bb_show_usage();
- }
-
strcpy(console, "/dev/tty");
fd = open(console, O_RDWR);
- if (fd >= 0) {
- /* We already have ctty, nothing to do */
- close(fd);
- } else {
+ if (fd < 0) {
/* We don't have ctty (or don't have "/dev/tty" node...) */
do {
#ifdef __linux__
+ /* Note that this method does not use _stdin_.
+ * Thus, "cttyhack </dev/something" can't be used.
+ * However, this method is more reliable than
+ * TIOCGSERIAL check, which assumes that all
+ * serial lines follow /dev/ttySn convention -
+ * which is not always the case.
+ * Therefore, we use this method first:
+ */
int s = open_read_close("/sys/class/tty/console/active",
console + 5, sizeof(console) - 5);
if (s > 0) {
- /* found active console via sysfs (Linux 2.6.38+)
- * sysfs string looks like "ttyS0\n" so zap the newline:
+ char *last;
+ /* Found active console via sysfs (Linux 2.6.38+).
+ * It looks like "[tty0 ]ttyS0\n" so zap the newline:
*/
console[4 + s] = '\0';
+ /* If there are multiple consoles,
+ * take the last one:
+ */
+ last = strrchr(console + 5, ' ');
+ if (last)
+ overlapping_strcpy(console + 5, last + 1);
break;
}
if (ioctl(0, VT_GETSTATE, &u.vt) == 0) {
/* this is linux virtual tty */
- sprintf(console + 8, "S%d" + 1, u.vt.v_active);
+ sprintf(console + 8, "S%u" + 1, (int)u.vt.v_active);
break;
}
#endif
#ifdef TIOCGSERIAL
if (ioctl(0, TIOCGSERIAL, &u.sr) == 0) {
- /* this is a serial console, asuming it is named /dev/ttySn */
- sprintf(console + 8, "S%d", u.sr.line);
+ /* this is a serial console; assuming it is named /dev/ttySn */
+ sprintf(console + 8, "S%u", (int)u.sr.line);
break;
}
#endif
/* nope, could not find it */
- goto ret;
+ console[0] = '\0';
} while (0);
+ }
+
+ argv++;
+ if (!argv[0]) {
+ if (!console[0])
+ return EXIT_FAILURE;
+ puts(console);
+ return EXIT_SUCCESS;
+ }
+ if (fd < 0) {
fd = open_or_warn(console, O_RDWR);
if (fd < 0)
goto ret;
- //bb_error_msg("switching to '%s'", console);
- dup2(fd, 0);
- dup2(fd, 1);
- dup2(fd, 2);
- while (fd > 2)
- close(fd--);
- /* Some other session may have it as ctty,
- * steal it from them:
- */
- ioctl(0, TIOCSCTTY, 1);
}
-
-ret:
+ //bb_error_msg("switching to '%s'", console);
+ dup2(fd, 0);
+ dup2(fd, 1);
+ dup2(fd, 2);
+ while (fd > 2)
+ close(fd--);
+ /* Some other session may have it as ctty,
+ * try to steal it from them:
+ */
+ ioctl(0, TIOCSCTTY, 1);
+ ret:
BB_EXECVP_or_die(argv);
}
diff --git a/shell/hush.c b/shell/hush.c
index 0647a0f..13be742 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -324,6 +324,8 @@ typedef void (*hush_sighandler_t)(int);
# define ENABLE_FEATURE_EDITING 0
# undef ENABLE_FEATURE_EDITING_FANCY_PROMPT
# define ENABLE_FEATURE_EDITING_FANCY_PROMPT 0
+# undef ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
+# define ENABLE_FEATURE_EDITING_SAVE_ON_EXIT 0
#endif
/* Do we support ANY keywords? */
@@ -524,7 +526,6 @@ typedef enum redir_type {
struct command {
pid_t pid; /* 0 if exited */
int assignment_cnt; /* how many argv[i] are assignments? */
- smallint is_stopped; /* is the command currently running? */
smallint cmd_type; /* CMD_xxx */
#define CMD_NORMAL 0
#define CMD_SUBSHELL 1
@@ -1541,6 +1542,10 @@ static sighandler_t pick_sighandler(unsigned sig)
static void hush_exit(int exitcode) NORETURN;
static void hush_exit(int exitcode)
{
+#if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
+ save_history(G.line_input_state);
+#endif
+
fflush_all();
if (G.exiting <= 0 && G.traps && G.traps[0] && G.traps[0][0]) {
char *argv[3];
@@ -6763,7 +6768,6 @@ static int checkjobs(struct pipe *fg_pipe)
}
fg_pipe->cmds[i].cmd_exitcode = ex;
} else {
- fg_pipe->cmds[i].is_stopped = 1;
fg_pipe->stopped_cmds++;
}
debug_printf_jobs("fg_pipe: alive_cmds %d stopped_cmds %d\n",
@@ -6824,7 +6828,6 @@ static int checkjobs(struct pipe *fg_pipe)
}
} else {
/* child stopped */
- pi->cmds[i].is_stopped = 1;
pi->stopped_cmds++;
}
#endif
@@ -7817,26 +7820,6 @@ int hush_main(int argc, char **argv)
#if ENABLE_FEATURE_EDITING
G.line_input_state = new_line_input_t(FOR_SHELL);
-# if MAX_HISTORY > 0 && ENABLE_HUSH_SAVEHISTORY
- {
- const char *hp = get_local_var_value("HISTFILE");
- if (!hp) {
- hp = get_local_var_value("HOME");
- if (hp)
- hp = concat_path_file(hp, ".hush_history");
- } else {
- hp = xstrdup(hp);
- }
- if (hp) {
- G.line_input_state->hist_file = hp;
- //set_local_var(xasprintf("HISTFILE=%s", ...));
- }
-# if ENABLE_FEATURE_SH_HISTFILESIZE
- hp = get_local_var_value("HISTFILESIZE");
- G.line_input_state->max_history = size_from_HISTFILESIZE(hp);
-# endif
- }
-# endif
#endif
/* Initialize some more globals to non-zero values */
@@ -8108,6 +8091,27 @@ int hush_main(int argc, char **argv)
/* -1 is special - makes xfuncs longjmp, not exit
* (we reset die_sleep = 0 whereever we [v]fork) */
enable_restore_tty_pgrp_on_exit(); /* sets die_sleep = -1 */
+
+# if ENABLE_HUSH_SAVEHISTORY && MAX_HISTORY > 0
+ {
+ const char *hp = get_local_var_value("HISTFILE");
+ if (!hp) {
+ hp = get_local_var_value("HOME");
+ if (hp)
+ hp = concat_path_file(hp, ".hush_history");
+ } else {
+ hp = xstrdup(hp);
+ }
+ if (hp) {
+ G.line_input_state->hist_file = hp;
+ //set_local_var(xasprintf("HISTFILE=%s", ...));
+ }
+# if ENABLE_FEATURE_SH_HISTFILESIZE
+ hp = get_local_var_value("HISTFILESIZE");
+ G.line_input_state->max_history = size_from_HISTFILESIZE(hp);
+# endif
+ }
+# endif
} else {
install_special_sighandlers();
}
@@ -8591,7 +8595,6 @@ static int FAST_FUNC builtin_fg_bg(char **argv)
debug_printf_jobs("reviving %d procs, pgrp %d\n", pi->num_cmds, pi->pgrp);
for (i = 0; i < pi->num_cmds; i++) {
debug_printf_jobs("reviving pid %d\n", pi->cmds[i].pid);
- pi->cmds[i].is_stopped = 0;
}
pi->stopped_cmds = 0;
diff --git a/shell/shell_common.c b/shell/shell_common.c
index bbc22ed..51c92d6 100644
--- a/shell/shell_common.c
+++ b/shell/shell_common.c
@@ -138,7 +138,13 @@ shell_builtin_read(void FAST_FUNC (*setvar)(const char *name, const char *val),
old_tty = tty;
if (nchars) {
tty.c_lflag &= ~ICANON;
- tty.c_cc[VMIN] = nchars < 256 ? nchars : 255;
+ // Setting it to more than 1 breaks poll():
+ // it blocks even if there's data. !??
+ //tty.c_cc[VMIN] = nchars < 256 ? nchars : 255;
+ /* reads would block only if < 1 char is available */
+ tty.c_cc[VMIN] = 1;
+ /* no timeout (reads block forever) */
+ tty.c_cc[VTIME] = 0;
}
if (read_flags & BUILTIN_READ_SILENT) {
tty.c_lflag &= ~(ECHO | ECHOK | ECHONL);
diff --git a/testsuite/awk.tests b/testsuite/awk.tests
index 0afe9b9..5a32304 100755
--- a/testsuite/awk.tests
+++ b/testsuite/awk.tests
@@ -202,4 +202,7 @@ end d
" \
"" ""
+testing "awk handles empty ()" \
+ "awk 'BEGIN {print()}' 2>&1" "awk: cmd. line:1: Empty sequence\n" "" ""
+
exit $FAILCOUNT
diff --git a/testsuite/bzcat.tests b/testsuite/bzcat.tests
index 5b4f3f4..1c1fd65 100755
--- a/testsuite/bzcat.tests
+++ b/testsuite/bzcat.tests
@@ -51,4 +51,34 @@ prep; check "bzcat: dont delete src" "${bb}bzcat t2.bz2; test -f t2.bz2 && echo
)
rm -rf testdir
+
+
+# Copyright 2011 by Denys Vlasenko
+# Licensed under GPLv2, see file LICENSE in this source tree.
+
+. ./testing.sh
+
+# testing "test name" "command" "expected result" "file input" "stdin"
+
+# "input" file is bzipped file with "a\n" data
+testing "bzcat can print many files" \
+"$ECHO -ne '$hexdump' | bzcat input input; echo \$?" \
+"\
+a
+a
+0
+" "\
+\x42\x5a\x68\x39\x31\x41\x59\x26\x53\x59\x63\x3e\xd6\xe2\x00\x00\
+\x00\xc1\x00\x00\x10\x20\x00\x20\x00\x21\x00\x82\xb1\x77\x24\x53\
+\x85\x09\x06\x33\xed\x6e\x20\
+" ""
+
+# "input" file is bzipped zero byte file
+testing "bzcat can handle compressed zero-length bzip2 files" \
+"$ECHO -ne '$hexdump' | bzcat input input; echo \$?" \
+"0\n" \
+"\x42\x5a\x68\x39\x17\x72\x45\x38\x50\x90\x00\x00\x00\x00" ""
+
+
+
exit $((FAILCOUNT <= 255 ? FAILCOUNT : 255))
diff --git a/testsuite/grep.tests b/testsuite/grep.tests
index ffce033..006a215 100755
--- a/testsuite/grep.tests
+++ b/testsuite/grep.tests
@@ -7,7 +7,7 @@
. ./testing.sh
-# testing "test name" "options" "expected result" "file input" "stdin"
+# testing "test name" "commands" "expected result" "file input" "stdin"
# file input will be file called "input"
# test can create a file "actual" instead of writing to stdout
@@ -103,4 +103,20 @@ testing "grep -o does not loop forever on zero-length match" \
"" \
"" "test\n"
+testing "grep -f EMPTY_FILE" \
+ "grep -f input" \
+ "" \
+ "" \
+ "test\n"
+
+testing "grep -v -f EMPTY_FILE" \
+ "grep -v -f input" \
+ "test\n" \
+ "" \
+ "test\n"
+
+# testing "test name" "commands" "expected result" "file input" "stdin"
+# file input will be file called "input"
+# test can create a file "actual" instead of writing to stdout
+
exit $FAILCOUNT
diff --git a/testsuite/patch.tests b/testsuite/patch.tests
index c604b9c..2759d2a 100755
--- a/testsuite/patch.tests
+++ b/testsuite/patch.tests
@@ -212,6 +212,36 @@ patching file input
666
" \
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+testing "patch creates new file" \
+ 'patch 2>&1; echo $?; cat testfile; rm testfile' \
+"\
+creating testfile
+0
+qwerty
+" "" "\
+--- /dev/null
++++ testfile
+@@ -0,0 +1 @@
++qwerty
+"
+
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+testing "patch understands ...dir///dir..." \
+ 'patch -p1 2>&1; echo $?' \
+"\
+patching file dir2///file
+patch: can't open 'dir2///file': No such file or directory
+1
+" "" "\
+--- bogus_dir///dir2///file
++++ bogus_dir///dir2///file
+@@ -1,2 +1,3 @@
+ qwe
++asd
+ zxc
+"
+
rm input.orig 2>/dev/null
exit $FAILCOUNT
diff --git a/testsuite/tar.tests b/testsuite/tar.tests
index 39ece5f..7927020 100755
--- a/testsuite/tar.tests
+++ b/testsuite/tar.tests
@@ -170,6 +170,25 @@ Ok
"" ""
SKIP=
+# Do we detect XZ-compressed data (even w/o .tar.xz or txz extension)?
+# (the uuencoded hello_world.txz contains one empty file named "hello_world")
+optional UUDECODE FEATURE_TAR_AUTODETECT FEATURE_SEAMLESS_XZ
+testing "tar extract txz" "\
+uudecode -o input && tar tf input && echo Ok
+" "\
+hello_world
+Ok
+" \
+"" "\
+begin-base64 644 hello_world.txz
+/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4AX/AEldADQZSe6ODIZQ3rSQ8kAJ
+SnMPTX+XWGKW3Yu/Rwqg4Ik5wqgQKgVH97J8yA8IvZ4ahaCQogUNHRkXibr2
+Q615wcb2G7fJU49AhWAAAAAAUA8gu9DyXfAAAWWADAAAAB5FXGCxxGf7AgAA
+AAAEWVo=
+====
+"
+SKIP=
+
# On extract, everything up to and including last ".." component is stripped
optional FEATURE_TAR_CREATE
testing "tar strips /../ on extract" "\
diff --git a/testsuite/uncompress.tests b/testsuite/uncompress.tests
new file mode 100755
index 0000000..51a2334
--- a/dev/null
+++ b/testsuite/uncompress.tests
@@ -0,0 +1,20 @@
+#!/bin/sh
+# Copyright 2011 by Denys Vlasenko
+# Licensed under GPLv2, see file LICENSE in this source tree.
+
+. ./testing.sh
+
+# testing "test name" "commands" "expected result" "file input" "stdin"
+
+testing "uncompress < \x1f\x9d\x90 \x01 x N" \
+'uncompress 2>&1 1>/dev/null; echo $?' \
+"\
+uncompress: corrupted data
+1
+" \
+"" "\
+\x1f\x9d\x90\
+\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\
+"
+
+exit $FAILCOUNT
diff --git a/testsuite/uuencode.tests b/testsuite/uuencode.tests
index cd6191b..6ce70f7 100755
--- a/testsuite/uuencode.tests
+++ b/testsuite/uuencode.tests
@@ -8,9 +8,9 @@
. ./testing.sh
-# testing "test name" "options" "expected result" "file input" "stdin"
-# file input will be file called "input"
-# test can create a file "actual" instead of writing to stdout
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+# file input will be file called "input"
+# test can create a file "actual" instead of writing to stdout
# Test setup of standard input
umask 0
@@ -24,4 +24,99 @@ testing "uuencode correct encoding" "uuencode bb_uuenc_test.out" \
testing "uuencode correct base64 encoding" "uuencode -m bb_uuenc_test.out" \
"begin-base64 644 bb_uuenc_test.out\nVGhlIGZhc3QgZ3JleSBmb3gganVtcGVkIG92ZXIgdGhlIGxhenkgYnJvd24g\nZG9nLgo=\n====\n" \
"" "The fast grey fox jumped over the lazy brown dog.\n"
+
+testing "uuencode empty file" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+`
+end
+' "" ""
+testing "uuencode -m empty file" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+====
+' "" ""
+
+testing "uuencode file 'A'" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+!00``
+`
+end
+A' "" "A"
+testing "uuencode -m file 'A'" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+QQ==
+====
+A' "" "A"
+
+testing "uuencode file 'AB'" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+"04(`
+`
+end
+AB' "" "AB"
+testing "uuencode -m file 'AB'" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+QUI=
+====
+AB' "" "AB"
+
+testing "uuencode file 'ABC'" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+#04)#
+`
+end
+ABC' "" "ABC"
+testing "uuencode -m file 'ABC'" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+QUJD
+====
+ABC' "" "ABC"
+
+testing "uuencode file 'ABCD'" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+$04)#1```
+`
+end
+ABCD' "" "ABCD"
+testing "uuencode -m file 'ABCD'" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+QUJDRA==
+====
+ABCD' "" "ABCD"
+
+testing "uuencode file 'ABCDE'" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+%04)#1$4`
+`
+end
+ABCDE' "" "ABCDE"
+testing "uuencode -m file 'ABCDE'" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+QUJDREU=
+====
+ABCDE' "" "ABCDE"
+
+testing "uuencode file 'ABCDEF'" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+&04)#1$5&
+`
+end
+ABCDEF' "" "ABCDEF"
+testing "uuencode -m file 'ABCDEF'" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+QUJDREVG
+====
+ABCDEF' "" "ABCDEF"
+
+testing "uuencode file 'A<NUL><0xff>Z'" 'r=`uuencode FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin 644 FILE
+$00#_6@``
+`
+end
+A\x0\xffZ' "" "A\x0\xffZ"
+testing "uuencode -m file 'A<NUL><0xff>Z'" 'r=`uuencode -m FILE`; echo "$r"; echo "$r" | uudecode -o -;' \
+'begin-base64 644 FILE
+QQD/Wg==
+====
+A\x0\xffZ' "" "A\x0\xffZ"
+
exit $FAILCOUNT
diff --git a/util-linux/Config.src b/util-linux/Config.src
index fb62905..f5c6711 100644
--- a/util-linux/Config.src
+++ b/util-linux/Config.src
@@ -404,64 +404,6 @@ config LSUSB
This version uses sysfs (/sys/bus/usb/devices) only.
-config MDEV
- bool "mdev"
- default y
- select PLATFORM_LINUX
- help
- mdev is a mini-udev implementation for dynamically creating device
- nodes in the /dev directory.
-
- For more information, please see docs/mdev.txt
-
-config FEATURE_MDEV_CONF
- bool "Support /etc/mdev.conf"
- default y
- depends on MDEV
- help
- Add support for the mdev config file to control ownership and
- permissions of the device nodes.
-
- For more information, please see docs/mdev.txt
-
-config FEATURE_MDEV_RENAME
- bool "Support subdirs/symlinks"
- default y
- depends on FEATURE_MDEV_CONF
- help
- Add support for renaming devices and creating symlinks.
-
- For more information, please see docs/mdev.txt
-
-config FEATURE_MDEV_RENAME_REGEXP
- bool "Support regular expressions substitutions when renaming device"
- default y
- depends on FEATURE_MDEV_RENAME
- help
- Add support for regular expressions substitutions when renaming
- device.
-
-config FEATURE_MDEV_EXEC
- bool "Support command execution at device addition/removal"
- default y
- depends on FEATURE_MDEV_CONF
- help
- This adds support for an optional field to /etc/mdev.conf for
- executing commands when devices are created/removed.
-
- For more information, please see docs/mdev.txt
-
-config FEATURE_MDEV_LOAD_FIRMWARE
- bool "Support loading of firmwares"
- default y
- depends on MDEV
- help
- Some devices need to load firmware before they can be usable.
-
- These devices will request userspace look up the files in
- /lib/firmware/ and if it exists, send it to the kernel for
- loading into the hardware.
-
config MKSWAP
bool "mkswap"
default y
@@ -543,13 +485,18 @@ config FEATURE_MOUNT_LABEL
This also enables label or uuid support for swapon.
config FEATURE_MOUNT_NFS
- bool "Support mounting NFS file systems"
- default y
+ bool "Support mounting NFS file systems on Linux < 2.6.23"
+ default n
depends on MOUNT
select FEATURE_HAVE_RPC
select FEATURE_SYSLOG
help
- Enable mounting of NFS file systems.
+ Enable mounting of NFS file systems on Linux kernels prior
+ to version 2.6.23. Note that in this case mounting of NFS
+ over IPv6 will not be possible.
+
+ Note that this option links in RPC support from libc,
+ which is rather large (~10 kbytes on uclibc).
config FEATURE_MOUNT_CIFS
bool "Support mounting CIFS/SMB file systems"
diff --git a/util-linux/Kbuild.src b/util-linux/Kbuild.src
index c06d911..468fc6b 100644
--- a/util-linux/Kbuild.src
+++ b/util-linux/Kbuild.src
@@ -26,7 +26,6 @@ lib-$(CONFIG_IPCS) += ipcs.o
lib-$(CONFIG_LOSETUP) += losetup.o
lib-$(CONFIG_LSPCI) += lspci.o
lib-$(CONFIG_LSUSB) += lsusb.o
-lib-$(CONFIG_MDEV) += mdev.o
lib-$(CONFIG_MKFS_EXT2) += mkfs_ext2.o
lib-$(CONFIG_MKFS_MINIX) += mkfs_minix.o
lib-$(CONFIG_MKFS_REISER) += mkfs_reiser.o
diff --git a/util-linux/acpid.c b/util-linux/acpid.c
index 6e7321b..1b22f3a 100644
--- a/util-linux/acpid.c
+++ b/util-linux/acpid.c
@@ -8,13 +8,13 @@
*/
//usage:#define acpid_trivial_usage
-//usage: "[-d] [-c CONFDIR] [-l LOGFILE] [-a ACTIONFILE] [-M MAPFILE] [-e PROC_EVENT_FILE] [-p PIDFILE]"
+//usage: "[-df] [-c CONFDIR] [-l LOGFILE] [-a ACTIONFILE] [-M MAPFILE] [-e PROC_EVENT_FILE] [-p PIDFILE]"
//usage:#define acpid_full_usage "\n\n"
//usage: "Listen to ACPI events and spawn specific helpers on event arrival\n"
+//usage: "\n -d Log to stderr, not log file (implies -f)"
+//usage: "\n -f Run in foreground"
//usage: "\n -c DIR Config directory [/etc/acpi]"
-//usage: "\n -d Don't daemonize, (implies -f)"
//usage: "\n -e FILE /proc event file [/proc/acpi/event]"
-//usage: "\n -f Run in foreground"
//usage: "\n -l FILE Log file [/var/log/acpid.log]"
//usage: "\n -p FILE Pid file [/var/run/acpid.pid]"
//usage: "\n -a FILE Action file [/etc/acpid.conf]"
@@ -225,7 +225,6 @@ static void parse_map_file(const char *filename)
int acpid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int acpid_main(int argc UNUSED_PARAM, char **argv)
{
- struct input_event ev;
int nfd;
int opts;
struct pollfd *pfd;
@@ -248,23 +247,33 @@ int acpid_main(int argc UNUSED_PARAM, char **argv)
);
if (!(opts & OPT_f)) {
+ /* No -f "Foreground", we go to background */
bb_daemonize_or_rexec(DAEMON_CLOSE_EXTRA_FDS, argv);
}
if (!(opts & OPT_d)) {
+ /* No -d "Debug", we log to log file.
+ * This includes any output from children.
+ */
+ xmove_fd(xopen(opt_logfile, O_WRONLY | O_CREAT | O_TRUNC), STDOUT_FILENO);
+ xdup2(STDOUT_FILENO, STDERR_FILENO);
+ /* Also, acpid's messages (but not children) will go to syslog too */
openlog(applet_name, LOG_PID, LOG_DAEMON);
logmode = LOGMODE_SYSLOG | LOGMODE_STDIO;
- } else {
- xmove_fd(xopen(opt_logfile, O_WRONLY | O_CREAT | O_TRUNC), STDOUT_FILENO);
}
+ /* else: -d "Debug", log is not redirected */
parse_conf_file(opt_action);
parse_map_file(opt_map);
xchdir(opt_dir);
+ /* We spawn children but don't wait for them. Prevent zombies: */
bb_signals((1 << SIGCHLD), SIG_IGN);
- bb_signals(BB_FATAL_SIGS, record_signo);
+ // If you enable this, (1) explain why, (2)
+ // make sure while(poll) loop below is still interruptible
+ // by SIGTERM et al:
+ //bb_signals(BB_FATAL_SIGS, record_signo);
pfd = NULL;
nfd = 0;
@@ -272,13 +281,14 @@ int acpid_main(int argc UNUSED_PARAM, char **argv)
int fd;
char *dev_event;
- dev_event = xasprintf((option_mask32 & OPT_e) ? "%s" : "%s%u", opt_input, nfd);
+ dev_event = xasprintf((opts & OPT_e) ? "%s" : "%s%u", opt_input, nfd);
fd = open(dev_event, O_RDONLY | O_NONBLOCK);
if (fd < 0) {
if (nfd == 0)
bb_simple_perror_msg_and_die(dev_event);
break;
}
+ free(dev_event);
pfd = xrealloc_vector(pfd, 1, nfd);
pfd[nfd].fd = fd;
pfd[nfd].events = POLLIN;
@@ -287,16 +297,26 @@ int acpid_main(int argc UNUSED_PARAM, char **argv)
write_pidfile(opt_pidfile);
- while (poll(pfd, nfd, -1) > 0) {
+ while (safe_poll(pfd, nfd, -1) > 0) {
int i;
for (i = 0; i < nfd; i++) {
- const char *event = NULL;
-
- memset(&ev, 0, sizeof(ev));
-
- if (!(pfd[i].revents & POLLIN))
- continue;
+ const char *event;
+
+ if (!(pfd[i].revents & POLLIN)) {
+ if (pfd[i].revents == 0)
+ continue; /* this fd has nothing */
+
+ /* Likely POLLERR, POLLHUP, POLLNVAL.
+ * Do not listen on this fd anymore.
+ */
+ close(pfd[i].fd);
+ nfd--;
+ for (; i < nfd; i++)
+ pfd[i].fd = pfd[i + 1].fd;
+ break; /* do poll() again */
+ }
+ event = NULL;
if (option_mask32 & OPT_e) {
char *buf;
int len;
@@ -307,7 +327,10 @@ int acpid_main(int argc UNUSED_PARAM, char **argv)
if (len >= 0)
buf[len] = '\0';
event = find_action(NULL, buf);
+ free(buf);
} else {
+ struct input_event ev;
+
if (sizeof(ev) != full_read(pfd[i].fd, &ev, sizeof(ev)))
continue;
@@ -318,17 +341,14 @@ int acpid_main(int argc UNUSED_PARAM, char **argv)
}
if (!event)
continue;
- // spawn event handler
+ /* spawn event handler */
process_event(event);
}
}
if (ENABLE_FEATURE_CLEAN_UP) {
- while (nfd--) {
- if (pfd[nfd].fd) {
- close(pfd[nfd].fd);
- }
- }
+ while (nfd--)
+ close(pfd[nfd].fd);
free(pfd);
}
remove_pidfile(opt_pidfile);
diff --git a/util-linux/blkid.c b/util-linux/blkid.c
index c30360c..1bbc803 100644
--- a/util-linux/blkid.c
+++ b/util-linux/blkid.c
@@ -8,23 +8,24 @@
*/
//usage:#define blkid_trivial_usage
-//usage: ""
+//usage: "[BLOCKDEV]..."
//usage:#define blkid_full_usage "\n\n"
//usage: "Print UUIDs of all filesystems"
#include "libbb.h"
#include "volume_id.h"
-//TODO: extend to take BLOCKDEV args, and show TYPE="fstype"
-
int blkid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int blkid_main(int argc UNUSED_PARAM, char **argv)
{
+ int scan_devices = 1;
+
while (*++argv) {
/* Note: bogus device names don't cause any error messages */
add_to_uuid_cache(*argv);
+ scan_devices = 0;
}
- display_uuid_cache();
+ display_uuid_cache(scan_devices);
return 0;
}
diff --git a/util-linux/fdisk.c b/util-linux/fdisk.c
index c0be15a..1fb256e 100644
--- a/util-linux/fdisk.c
+++ b/util-linux/fdisk.c
@@ -792,7 +792,7 @@ read_pte(struct pte *pe, sector_t offset)
pe->sectorbuffer = xzalloc(sector_size);
seek_sector(offset);
/* xread would make us abort - bad for fdisk -l */
- if (full_read(dev_fd, pe->sectorbuffer, sector_size) != sector_size)
+ if ((unsigned) full_read(dev_fd, pe->sectorbuffer, sector_size) != sector_size)
fdisk_fatal(unable_to_read);
#if ENABLE_FEATURE_FDISK_WRITABLE
pe->changed = 0;
@@ -1969,7 +1969,7 @@ wrong_p_order(int *prev)
const struct pte *pe;
const struct partition *p;
sector_t last_p_start_pos = 0, p_start_pos;
- unsigned i, last_i = 0;
+ int i, last_i = 0;
for (i = 0; i < g_partitions; i++) {
if (i == 4) {
@@ -2216,7 +2216,7 @@ x_list_table(int extend)
static void
fill_bounds(sector_t *first, sector_t *last)
{
- unsigned i;
+ int i;
const struct pte *pe = &ptes[0];
const struct partition *p;
@@ -2371,7 +2371,7 @@ add_partition(int n, int sys)
do {
temp = start;
for (i = 0; i < g_partitions; i++) {
- int lastplusoff;
+ sector_t lastplusoff;
if (start == ptes[i].offset_from_dev_start)
start += sector_offset;
diff --git a/util-linux/getopt.c b/util-linux/getopt.c
index c45edf8..d662c81 100644
--- a/util-linux/getopt.c
+++ b/util-linux/getopt.c
@@ -32,30 +32,47 @@
*/
//usage:#define getopt_trivial_usage
-//usage: "[OPTIONS]"
+//usage: "[OPTIONS] [--] OPTSTRING PARAMS"
//usage:#define getopt_full_usage "\n\n"
//usage: IF_LONG_OPTS(
//usage: " -a,--alternative Allow long options starting with single -"
-//usage: "\n -l,--longoptions=longopts Long options to be recognized"
-//usage: "\n -n,--name=progname The name under which errors are reported"
-//usage: "\n -o,--options=optstring Short options to be recognized"
+//usage: "\n -l,--longoptions=LOPT[,...] Long options to be recognized"
+//usage: "\n -n,--name=PROGNAME The name under which errors are reported"
+//usage: "\n -o,--options=OPTSTRING Short options to be recognized"
//usage: "\n -q,--quiet Disable error reporting by getopt(3)"
//usage: "\n -Q,--quiet-output No normal output"
-//usage: "\n -s,--shell=shell Set shell quoting conventions"
+//usage: "\n -s,--shell=SHELL Set shell quoting conventions"
//usage: "\n -T,--test Test for getopt(1) version"
//usage: "\n -u,--unquoted Don't quote the output"
//usage: )
//usage: IF_NOT_LONG_OPTS(
//usage: " -a Allow long options starting with single -"
-//usage: "\n -l longopts Long options to be recognized"
-//usage: "\n -n progname The name under which errors are reported"
-//usage: "\n -o optstring Short options to be recognized"
+//usage: "\n -l LOPT[,...] Long options to be recognized"
+//usage: "\n -n PROGNAME The name under which errors are reported"
+//usage: "\n -o OPTSTRING Short options to be recognized"
//usage: "\n -q Disable error reporting by getopt(3)"
//usage: "\n -Q No normal output"
-//usage: "\n -s shell Set shell quoting conventions"
+//usage: "\n -s SHELL Set shell quoting conventions"
//usage: "\n -T Test for getopt(1) version"
//usage: "\n -u Don't quote the output"
//usage: )
+//usage: "\n"
+//usage: "\nExample:"
+//usage: "\n"
+//usage: "\nO=`getopt -l bb: -- ab:c:: \"$@\"` || exit 1"
+//usage: "\neval set -- \"$O\""
+//usage: "\nwhile true; do"
+//usage: "\n case \"$1\" in"
+//usage: "\n -a) echo A; shift;;"
+//usage: "\n -b|--bb) echo \"B:'$2'\"; shift 2;;"
+//usage: "\n -c) case \"$2\" in"
+//usage: "\n \"\") echo C; shift 2;;"
+//usage: "\n *) echo \"C:'$2'\"; shift 2;;"
+//usage: "\n esac;;"
+//usage: "\n --) shift; break;;"
+//usage: "\n *) echo Error; exit 1;;"
+//usage: "\n esac"
+//usage: "\ndone"
//usage:
//usage:#define getopt_example_usage
//usage: "$ cat getopt.test\n"
@@ -339,6 +356,7 @@ static const char getopt_longopts[] ALIGN1 =
int getopt_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int getopt_main(int argc, char **argv)
{
+ int n;
char *optstr = NULL;
char *name = NULL;
unsigned opt;
@@ -351,7 +369,7 @@ int getopt_main(int argc, char **argv)
compatible = getenv("GETOPT_COMPATIBLE"); /* used as yes/no flag */
- if (argc == 1) {
+ if (!argv[1]) {
if (compatible) {
/* For some reason, the original getopt gave no error
when there were no arguments. */
@@ -362,10 +380,10 @@ int getopt_main(int argc, char **argv)
}
if (argv[1][0] != '-' || compatible) {
- char *s;
+ char *s = argv[1];
option_mask32 |= OPT_u; /* quoting off */
- s = xstrdup(argv[1] + strspn(argv[1], "-+"));
+ s = xstrdup(s + strspn(s, "-+"));
argv[1] = argv[0];
return generate_output(argv+1, argc-1, s, long_options);
}
@@ -392,12 +410,13 @@ int getopt_main(int argc, char **argv)
}
/* All options controlling the applet have now been parsed */
+ n = optind - 1;
if (!optstr) {
- if (optind >= argc)
+ optstr = argv[++n];
+ if (!optstr)
bb_error_msg_and_die("missing optstring argument");
- optstr = argv[optind++];
}
- argv[optind-1] = name ? name : argv[0];
- return generate_output(argv+optind-1, argc-optind+1, optstr, long_options);
+ argv[n] = name ? name : argv[0];
+ return generate_output(argv + n, argc - n, optstr, long_options);
}
diff --git a/util-linux/hwclock.c b/util-linux/hwclock.c
index 6b4e29b..379eeb2 100644
--- a/util-linux/hwclock.c
+++ b/util-linux/hwclock.c
@@ -43,7 +43,7 @@ static time_t read_rtc(const char **pp_rtcname, struct timeval *sys_tv, int utc)
while (1) {
rtc_read_tm(&tm_time, fd);
gettimeofday(sys_tv, NULL);
- if (before != tm_time.tm_sec)
+ if (before != (int)tm_time.tm_sec)
break;
}
}
diff --git a/util-linux/losetup.c b/util-linux/losetup.c
index 9b7c49f..21108d0 100644
--- a/util-linux/losetup.c
+++ b/util-linux/losetup.c
@@ -8,11 +8,12 @@
*/
//usage:#define losetup_trivial_usage
-//usage: "[-o OFS] LOOPDEV FILE - associate loop devices\n"
+//usage: "[-r] [-o OFS] LOOPDEV FILE - associate loop devices\n"
//usage: " losetup -d LOOPDEV - disassociate\n"
//usage: " losetup [-f] - show"
//usage:#define losetup_full_usage "\n\n"
//usage: " -o OFS Start OFS bytes into FILE"
+//usage: "\n -r Read-only"
//usage: "\n -f Show first free loop device"
//usage:
//usage:#define losetup_notes_usage
@@ -37,11 +38,12 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
OPT_d = (1 << 0),
OPT_o = (1 << 1),
OPT_f = (1 << 2),
+ OPT_r = (1 << 3), /* must be last */
};
- /* max 2 args, all opts are mutually exclusive */
+ /* max 2 args, -d,-o,-f opts are mutually exclusive */
opt_complementary = "?2:d--of:o--df:f--do";
- opt = getopt32(argv, "do:f", &opt_o);
+ opt = getopt32(argv, "do:fr", &opt_o);
argv += optind;
if (opt == OPT_o)
@@ -63,12 +65,12 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
bb_show_usage();
if (argv[1]) {
- /* [-o OFS] BLOCKDEV FILE */
- if (set_loop(&argv[0], argv[1], offset) < 0)
+ /* [-r] [-o OFS] BLOCKDEV FILE */
+ if (set_loop(&argv[0], argv[1], offset, (opt / OPT_r)) < 0)
bb_simple_perror_msg_and_die(argv[0]);
return EXIT_SUCCESS;
}
- /* [-o OFS] BLOCKDEV */
+ /* [-r] [-o OFS] BLOCKDEV */
s = query_loop(argv[0]);
if (!s)
bb_simple_perror_msg_and_die(argv[0]);
@@ -78,7 +80,7 @@ int losetup_main(int argc UNUSED_PARAM, char **argv)
return EXIT_SUCCESS;
}
- /* [-o OFS|-f] with no params */
+ /* [-r] [-o OFS|-f] with no params */
n = 0;
while (1) {
char *s;
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index e0a527e..0a34122 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -8,39 +8,91 @@
* Licensed under GPLv2, see file LICENSE in this source tree.
*/
+//config:config MDEV
+//config: bool "mdev"
+//config: default y
+//config: select PLATFORM_LINUX
+//config: help
+//config: mdev is a mini-udev implementation for dynamically creating device
+//config: nodes in the /dev directory.
+//config:
+//config: For more information, please see docs/mdev.txt
+//config:
+//config:config FEATURE_MDEV_CONF
+//config: bool "Support /etc/mdev.conf"
+//config: default y
+//config: depends on MDEV
+//config: help
+//config: Add support for the mdev config file to control ownership and
+//config: permissions of the device nodes.
+//config:
+//config: For more information, please see docs/mdev.txt
+//config:
+//config:config FEATURE_MDEV_RENAME
+//config: bool "Support subdirs/symlinks"
+//config: default y
+//config: depends on FEATURE_MDEV_CONF
+//config: help
+//config: Add support for renaming devices and creating symlinks.
+//config:
+//config: For more information, please see docs/mdev.txt
+//config:
+//config:config FEATURE_MDEV_RENAME_REGEXP
+//config: bool "Support regular expressions substitutions when renaming device"
+//config: default y
+//config: depends on FEATURE_MDEV_RENAME
+//config: help
+//config: Add support for regular expressions substitutions when renaming
+//config: device.
+//config:
+//config:config FEATURE_MDEV_EXEC
+//config: bool "Support command execution at device addition/removal"
+//config: default y
+//config: depends on FEATURE_MDEV_CONF
+//config: help
+//config: This adds support for an optional field to /etc/mdev.conf for
+//config: executing commands when devices are created/removed.
+//config:
+//config: For more information, please see docs/mdev.txt
+//config:
+//config:config FEATURE_MDEV_LOAD_FIRMWARE
+//config: bool "Support loading of firmwares"
+//config: default y
+//config: depends on MDEV
+//config: help
+//config: Some devices need to load firmware before they can be usable.
+//config:
+//config: These devices will request userspace look up the files in
+//config: /lib/firmware/ and if it exists, send it to the kernel for
+//config: loading into the hardware.
+
+//applet:IF_MDEV(APPLET(mdev, BB_DIR_SBIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_MDEV) += mdev.o
+
//usage:#define mdev_trivial_usage
//usage: "[-s]"
//usage:#define mdev_full_usage "\n\n"
-//usage: " -s Scan /sys and populate /dev during system boot\n"
+//usage: "mdev -s is to be run during boot to scan /sys and populate /dev.\n"
//usage: "\n"
-//usage: "It can be run by kernel as a hotplug helper. To activate it:\n"
-//usage: " echo /sbin/mdev > /proc/sys/kernel/hotplug\n"
+//usage: "Bare mdev is a kernel hotplug helper. To activate it:\n"
+//usage: " echo /sbin/mdev >/proc/sys/kernel/hotplug\n"
//usage: IF_FEATURE_MDEV_CONF(
+//usage: "\n"
//usage: "It uses /etc/mdev.conf with lines\n"
-//usage: "[-]DEVNAME UID:GID PERM"
-//usage: IF_FEATURE_MDEV_RENAME(" [>|=PATH]")
+//usage: " [-]DEVNAME UID:GID PERM"
+//usage: IF_FEATURE_MDEV_RENAME(" [>|=PATH]|[!]")
//usage: IF_FEATURE_MDEV_EXEC(" [@|$|*PROG]")
+//usage: "\n"
+//usage: "where DEVNAME is device name regex, @major,minor[-minor2], or\n"
+//usage: "environment variable regex. A common use of the latter is\n"
+//usage: "to load modules for hotplugged devices:\n"
+//usage: " $MODALIAS=.* 0:0 660 @modprobe \"$MODALIAS\"\n"
//usage: )
-//usage:
-//usage:#define mdev_notes_usage ""
-//usage: IF_FEATURE_MDEV_CONFIG(
-//usage: "The mdev config file contains lines that look like:\n"
-//usage: " hd[a-z][0-9]* 0:3 660\n\n"
-//usage: "That's device name (with regex match), uid:gid, and permissions.\n\n"
-//usage: IF_FEATURE_MDEV_EXEC(
-//usage: "Optionally, that can be followed (on the same line) by a special character\n"
-//usage: "and a command line to run after creating/before deleting the corresponding\n"
-//usage: "device(s). The environment variable $MDEV indicates the active device node\n"
-//usage: "(which is useful if it's a regex match). For example:\n\n"
-//usage: " hdc root:cdrom 660 *ln -s $MDEV cdrom\n\n"
-//usage: "The special characters are @ (run after creating), $ (run before deleting),\n"
-//usage: "and * (run both after creating and before deleting). The commands run in\n"
-//usage: "the /dev directory, and use system() which calls /bin/sh.\n\n"
-//usage: )
-//usage: "Config file parsing stops on the first matching line. If no config\n"
-//usage: "entry is matched, devices are created with default 0:0 660. (Make\n"
-//usage: "the last line match .* to override this.)\n\n"
-//usage: )
+//usage: "\n"
+//usage: "If /dev/mdev.seq file exists, mdev will wait for its value\n"
+//usage: "to match $SEQNUM variable. This prevents plug/unplug races.\n"
+//usage: "To activate this feature, create empty /dev/mdev.seq at boot."
#include "libbb.h"
#include "xregex.h"
@@ -62,20 +114,11 @@
* (todo: explain "delete" and $FIRMWARE)
*
* If /etc/mdev.conf exists, it may modify /dev/device_name's properties.
- * /etc/mdev.conf file format:
- *
- * [-][subsystem/]device user:grp mode [>|=path] [@|$|*command args...]
- * [-]@maj,min[-min2] user:grp mode [>|=path] [@|$|*command args...]
- * [-]$envvar=val user:grp mode [>|=path] [@|$|*command args...]
*
* Leading minus in 1st field means "don't stop on this line", otherwise
* search is stopped after the matching line is encountered.
*
- * The device name or "subsystem/device" combo is matched against 1st field
- * (which is a regex), or maj,min is matched against 1st field,
- * or specified environment variable (as regex) is matched against 1st field.
- *
- * $envvar=val format is useful for loading modules for hot-plugged devices
+ * $envvar=regex format is useful for loading modules for hot-plugged devices
* which do not have driver loaded yet. In this case /sys/class/.../dev
* does not exist, but $MODALIAS is set to needed module's name
* (actually, an alias to it) by kernel. This rule instructs mdev
@@ -96,11 +139,36 @@
* This happens regardless of /sys/class/.../dev existence.
*/
+struct rule {
+ bool keep_matching;
+ bool regex_compiled;
+ bool regex_has_slash;
+ mode_t mode;
+ int maj, min0, min1;
+ struct bb_uidgid_t ugid;
+ char *envvar;
+ char *ren_mov;
+ IF_FEATURE_MDEV_EXEC(char *r_cmd;)
+ regex_t match;
+};
+
struct globals {
int root_major, root_minor;
char *subsystem;
+#if ENABLE_FEATURE_MDEV_CONF
+ const char *filename;
+ parser_t *parser;
+ struct rule **rule_vec;
+ unsigned rule_idx;
+#endif
+ struct rule cur_rule;
} FIX_ALIASING;
#define G (*(struct globals*)&bb_common_bufsiz1)
+#define INIT_G() do { \
+ IF_NOT_FEATURE_MDEV_CONF(G.cur_rule.maj = -1;) \
+ IF_NOT_FEATURE_MDEV_CONF(G.cur_rule.mode = 0660;) \
+} while (0)
+
/* Prevent infinite loops in /sys symlinks */
#define MAX_SYSFS_DEPTH 3
@@ -108,6 +176,166 @@ struct globals {
/* We use additional 64+ bytes in make_device() */
#define SCRATCH_SIZE 80
+#if 0
+# define dbg(...) bb_error_msg(__VA_ARGS__)
+#else
+# define dbg(...) ((void)0)
+#endif
+
+
+#if ENABLE_FEATURE_MDEV_CONF
+
+static void make_default_cur_rule(void)
+{
+ memset(&G.cur_rule, 0, sizeof(G.cur_rule));
+ G.cur_rule.maj = -1; /* "not a @major,minor rule" */
+ G.cur_rule.mode = 0660;
+}
+
+static void clean_up_cur_rule(void)
+{
+ free(G.cur_rule.envvar);
+ if (G.cur_rule.regex_compiled)
+ regfree(&G.cur_rule.match);
+ free(G.cur_rule.ren_mov);
+ IF_FEATURE_MDEV_EXEC(free(G.cur_rule.r_cmd);)
+ make_default_cur_rule();
+}
+
+static void parse_next_rule(void)
+{
+ /* Note: on entry, G.cur_rule is set to default */
+ while (1) {
+ char *tokens[4];
+ char *val;
+
+ /* No PARSE_EOL_COMMENTS, because command may contain '#' chars */
+ if (!config_read(G.parser, tokens, 4, 3, "# \t", PARSE_NORMAL & ~PARSE_EOL_COMMENTS))
+ break;
+
+ /* Fields: [-]regex uid:gid mode [alias] [cmd] */
+ dbg("token1:'%s'", tokens[1]);
+
+ /* 1st field */
+ val = tokens[0];
+ G.cur_rule.keep_matching = ('-' == val[0]);
+ val += G.cur_rule.keep_matching; /* swallow leading dash */
+ if (val[0] == '@') {
+ /* @major,minor[-minor2] */
+ /* (useful when name is ambiguous:
+ * "/sys/class/usb/lp0" and
+ * "/sys/class/printer/lp0")
+ */
+ int sc = sscanf(val, "@%u,%u-%u", &G.cur_rule.maj, &G.cur_rule.min0, &G.cur_rule.min1);
+ if (sc < 2 || G.cur_rule.maj < 0) {
+ bb_error_msg("bad @maj,min on line %d", G.parser->lineno);
+ goto next_rule;
+ }
+ if (sc == 2)
+ G.cur_rule.min1 = G.cur_rule.min0;
+ } else {
+ if (val[0] == '$') {
+ char *eq = strchr(++val, '=');
+ if (!eq) {
+ bb_error_msg("bad $envvar=regex on line %d", G.parser->lineno);
+ goto next_rule;
+ }
+ G.cur_rule.envvar = xstrndup(val, eq - val);
+ val = eq + 1;
+ }
+ xregcomp(&G.cur_rule.match, val, REG_EXTENDED);
+ G.cur_rule.regex_compiled = 1;
+ G.cur_rule.regex_has_slash = (strchr(val, '/') != NULL);
+ }
+
+ /* 2nd field: uid:gid - device ownership */
+ if (get_uidgid(&G.cur_rule.ugid, tokens[1], /*allow_numeric:*/ 1) == 0) {
+ bb_error_msg("unknown user/group '%s' on line %d", tokens[1], G.parser->lineno);
+ goto next_rule;
+ }
+
+ /* 3rd field: mode - device permissions */
+ bb_parse_mode(tokens[2], &G.cur_rule.mode);
+
+ /* 4th field (opt): ">|=alias" or "!" to not create the node */
+ val = tokens[3];
+ if (ENABLE_FEATURE_MDEV_RENAME && val && strchr(">=!", val[0])) {
+ char *s = skip_non_whitespace(val);
+ G.cur_rule.ren_mov = xstrndup(val, s - val);
+ val = skip_whitespace(s);
+ }
+
+ if (ENABLE_FEATURE_MDEV_EXEC && val && val[0]) {
+ const char *s = "$@*";
+ const char *s2 = strchr(s, val[0]);
+ if (!s2) {
+ bb_error_msg("bad line %u", G.parser->lineno);
+ goto next_rule;
+ }
+ IF_FEATURE_MDEV_EXEC(G.cur_rule.r_cmd = xstrdup(val);)
+ }
+
+ return;
+ next_rule:
+ clean_up_cur_rule();
+ } /* while (config_read) */
+
+ dbg("config_close(G.parser)");
+ config_close(G.parser);
+ G.parser = NULL;
+
+ return;
+}
+
+/* If mdev -s, we remember rules in G.rule_vec[].
+ * Otherwise, there is no point in doing it, and we just
+ * save only one parsed rule in G.cur_rule.
+ */
+static const struct rule *next_rule(void)
+{
+ struct rule *rule;
+
+ /* Open conf file if we didn't do it yet */
+ if (!G.parser && G.filename) {
+ dbg("config_open('%s')", G.filename);
+ G.parser = config_open2(G.filename, fopen_for_read);
+ G.filename = NULL;
+ }
+
+ if (G.rule_vec) {
+ /* mdev -s */
+ /* Do we have rule parsed already? */
+ if (G.rule_vec[G.rule_idx]) {
+ dbg("< G.rule_vec[G.rule_idx:%d]=%p", G.rule_idx, G.rule_vec[G.rule_idx]);
+ return G.rule_vec[G.rule_idx++];
+ }
+ make_default_cur_rule();
+ } else {
+ /* not mdev -s */
+ clean_up_cur_rule();
+ }
+
+ /* Parse one more rule if file isn't fully read */
+ rule = &G.cur_rule;
+ if (G.parser) {
+ parse_next_rule();
+ if (G.rule_vec) { /* mdev -s */
+ rule = memcpy(xmalloc(sizeof(G.cur_rule)), &G.cur_rule, sizeof(G.cur_rule));
+ G.rule_vec = xrealloc_vector(G.rule_vec, 4, G.rule_idx);
+ G.rule_vec[G.rule_idx++] = rule;
+ dbg("> G.rule_vec[G.rule_idx:%d]=%p", G.rule_idx, G.rule_vec[G.rule_idx]);
+ }
+ }
+
+ return rule;
+}
+
+#else
+
+# define next_rule() (&G.cur_rule)
+
+#endif
+
/* Builds an alias path.
* This function potentionally reallocates the alias parameter.
* Only used for ENABLE_FEATURE_MDEV_RENAME
@@ -143,8 +371,8 @@ static void make_device(char *path, int delete)
{
char *device_name, *subsystem_slash_devname;
int major, minor, type, len;
- mode_t mode;
- parser_t *parser;
+
+ dbg("%s('%s', delete:%d)", __func__, path, delete);
/* Try to read major/minor string. Note that the kernel puts \n after
* the data, so we don't need to worry about null terminating the string
@@ -197,246 +425,187 @@ static void make_device(char *path, int delete)
path = subsystem_slash_devname;
}
- /* If we have config file, look up user settings */
- if (ENABLE_FEATURE_MDEV_CONF)
- parser = config_open2("/etc/mdev.conf", fopen_for_read);
-
- do {
- int keep_matching;
- struct bb_uidgid_t ugid;
- char *tokens[4];
- char *command = NULL;
- char *alias = NULL;
+#if ENABLE_FEATURE_MDEV_CONF
+ G.rule_idx = 0; /* restart from the beginning (think mdev -s) */
+#endif
+ for (;;) {
+ const char *str_to_match;
+ regmatch_t off[1 + 9 * ENABLE_FEATURE_MDEV_RENAME_REGEXP];
+ char *command;
+ char *alias;
char aliaslink = aliaslink; /* for compiler */
+ const char *node_name;
+ const struct rule *rule;
- /* Defaults in case we won't match any line */
- ugid.uid = ugid.gid = 0;
- keep_matching = 0;
- mode = 0660;
-
- if (ENABLE_FEATURE_MDEV_CONF
- && config_read(parser, tokens, 4, 3, "# \t", PARSE_NORMAL)
- ) {
- char *val;
- char *str_to_match;
- regmatch_t off[1 + 9 * ENABLE_FEATURE_MDEV_RENAME_REGEXP];
-
- val = tokens[0];
- keep_matching = ('-' == val[0]);
- val += keep_matching; /* swallow leading dash */
-
- /* Match against either "subsystem/device_name"
- * or "device_name" alone */
- str_to_match = strchr(val, '/') ? path : device_name;
-
- /* Fields: regex uid:gid mode [alias] [cmd] */
-
- if (val[0] == '@') {
- /* @major,minor[-minor2] */
- /* (useful when name is ambiguous:
- * "/sys/class/usb/lp0" and
- * "/sys/class/printer/lp0") */
- int cmaj, cmin0, cmin1, sc;
- if (major < 0)
- continue; /* no dev, no match */
- sc = sscanf(val, "@%u,%u-%u", &cmaj, &cmin0, &cmin1);
- if (sc < 1
- || major != cmaj
- || (sc == 2 && minor != cmin0)
- || (sc == 3 && (minor < cmin0 || minor > cmin1))
- ) {
- continue; /* this line doesn't match */
- }
- goto line_matches;
- }
- if (val[0] == '$') {
- /* regex to match an environment variable */
- char *eq = strchr(++val, '=');
- if (!eq)
- continue;
- *eq = '\0';
- str_to_match = getenv(val);
- if (!str_to_match)
- continue;
- str_to_match -= strlen(val) + 1;
- *eq = '=';
+ str_to_match = "";
+
+ rule = next_rule();
+
+#if ENABLE_FEATURE_MDEV_CONF
+ if (rule->maj >= 0) { /* @maj,min rule */
+ if (major != rule->maj)
+ continue;
+ if (minor < rule->min0 || minor > rule->min1)
+ continue;
+ memset(off, 0, sizeof(off));
+ goto rule_matches;
+ }
+ if (rule->envvar) { /* $envvar=regex rule */
+ str_to_match = getenv(rule->envvar);
+ dbg("getenv('%s'):'%s'", rule->envvar, str_to_match);
+ if (!str_to_match)
+ continue;
+ } else {
+ /* regex to match [subsystem/]device_name */
+ str_to_match = (rule->regex_has_slash ? path : device_name);
+ }
+
+ if (rule->regex_compiled) {
+ int regex_match = regexec(&rule->match, str_to_match, ARRAY_SIZE(off), off, 0);
+ dbg("regex_match for '%s':%d", str_to_match, regex_match);
+ //bb_error_msg("matches:");
+ //for (int i = 0; i < ARRAY_SIZE(off); i++) {
+ // if (off[i].rm_so < 0) continue;
+ // bb_error_msg("match %d: '%.*s'\n", i,
+ // (int)(off[i].rm_eo - off[i].rm_so),
+ // device_name + off[i].rm_so);
+ //}
+
+ if (regex_match != 0
+ /* regexec returns whole pattern as "range" 0 */
+ || off[0].rm_so != 0
+ || (int)off[0].rm_eo != (int)strlen(str_to_match)
+ ) {
+ continue; /* this rule doesn't match */
}
- /* else: regex to match [subsystem/]device_name */
-
- {
- regex_t match;
- int result;
-
- xregcomp(&match, val, REG_EXTENDED);
- result = regexec(&match, str_to_match, ARRAY_SIZE(off), off, 0);
- regfree(&match);
- //bb_error_msg("matches:");
- //for (int i = 0; i < ARRAY_SIZE(off); i++) {
- // if (off[i].rm_so < 0) continue;
- // bb_error_msg("match %d: '%.*s'\n", i,
- // (int)(off[i].rm_eo - off[i].rm_so),
- // device_name + off[i].rm_so);
- //}
-
- /* If no match, skip rest of line */
- /* (regexec returns whole pattern as "range" 0) */
- if (result
- || off[0].rm_so
- || ((int)off[0].rm_eo != (int)strlen(str_to_match))
- ) {
- continue; /* this line doesn't match */
- }
+ }
+ /* else: it's final implicit "match-all" rule */
+ rule_matches:
+#endif
+ dbg("rule matched");
+
+ /* Build alias name */
+ alias = NULL;
+ if (ENABLE_FEATURE_MDEV_RENAME && rule->ren_mov) {
+ aliaslink = rule->ren_mov[0];
+ if (aliaslink == '!') {
+ /* "!": suppress node creation/deletion */
+ major = -2;
}
- line_matches:
- /* This line matches. Stop parsing after parsing
- * the rest the line unless keep_matching == 1 */
-
- /* 2nd field: uid:gid - device ownership */
- if (get_uidgid(&ugid, tokens[1], /*allow_numeric:*/ 1) == 0)
- bb_error_msg("unknown user/group %s on line %d", tokens[1], parser->lineno);
-
- /* 3rd field: mode - device permissions */
- bb_parse_mode(tokens[2], &mode);
-
- val = tokens[3];
- /* 4th field (opt): ">|=alias" or "!" to not create the node */
-
- if (ENABLE_FEATURE_MDEV_RENAME && val) {
- char *a, *s, *st;
-
- a = val;
- s = strchrnul(val, ' ');
- st = strchrnul(val, '\t');
- if (st < s)
- s = st;
- st = (s[0] && s[1]) ? s+1 : NULL;
-
- aliaslink = a[0];
- if (aliaslink == '!' && s == a+1) {
- val = st;
- /* "!": suppress node creation/deletion */
- major = -2;
- }
- else if (aliaslink == '>' || aliaslink == '=') {
- val = st;
- s[0] = '\0';
- if (ENABLE_FEATURE_MDEV_RENAME_REGEXP) {
- char *p;
- unsigned i, n;
-
- /* substitute %1..9 with off[1..9], if any */
- n = 0;
- s = a;
- while (*s)
- if (*s++ == '%')
- n++;
-
- p = alias = xzalloc(strlen(a) + n * strlen(str_to_match));
- s = a + 1;
- while (*s) {
- *p = *s;
- if ('%' == *s) {
- i = (s[1] - '0');
- if (i <= 9 && off[i].rm_so >= 0) {
- n = off[i].rm_eo - off[i].rm_so;
- strncpy(p, str_to_match + off[i].rm_so, n);
- p += n - 1;
- s++;
- }
+ else if (aliaslink == '>' || aliaslink == '=') {
+ if (ENABLE_FEATURE_MDEV_RENAME_REGEXP) {
+ char *s;
+ char *p;
+ unsigned n;
+
+ /* substitute %1..9 with off[1..9], if any */
+ n = 0;
+ s = rule->ren_mov;
+ while (*s)
+ if (*s++ == '%')
+ n++;
+
+ p = alias = xzalloc(strlen(rule->ren_mov) + n * strlen(str_to_match));
+ s = rule->ren_mov + 1;
+ while (*s) {
+ *p = *s;
+ if ('%' == *s) {
+ unsigned i = (s[1] - '0');
+ if (i <= 9 && off[i].rm_so >= 0) {
+ n = off[i].rm_eo - off[i].rm_so;
+ strncpy(p, str_to_match + off[i].rm_so, n);
+ p += n - 1;
+ s++;
}
- p++;
- s++;
}
- } else {
- alias = xstrdup(a + 1);
+ p++;
+ s++;
}
+ } else {
+ alias = xstrdup(rule->ren_mov + 1);
}
}
+ }
+ dbg("alias:'%s'", alias);
- if (ENABLE_FEATURE_MDEV_EXEC && val) {
- const char *s = "$@*";
- const char *s2 = strchr(s, val[0]);
+ command = NULL;
+ IF_FEATURE_MDEV_EXEC(command = rule->r_cmd;)
+ if (command) {
+ const char *s = "$@*";
+ const char *s2 = strchr(s, command[0]);
- if (!s2) {
- bb_error_msg("bad line %u", parser->lineno);
- if (ENABLE_FEATURE_MDEV_RENAME)
- free(alias);
- continue;
- }
-
- /* Are we running this command now?
- * Run $cmd on delete, @cmd on create, *cmd on both
+ /* Are we running this command now?
+ * Run $cmd on delete, @cmd on create, *cmd on both
+ */
+ if (s2 - s != delete) {
+ /* We are here if: '*',
+ * or: '@' and delete = 0,
+ * or: '$' and delete = 1
*/
- if (s2 - s != delete) {
- /* We are here if: '*',
- * or: '@' and delete = 0,
- * or: '$' and delete = 1
- */
- command = xstrdup(val + 1);
- }
+ command++;
+ } else {
+ command = NULL;
}
}
-
- /* End of field parsing */
+ dbg("command:'%s'", command);
/* "Execute" the line we found */
- {
- const char *node_name;
-
- node_name = device_name;
- if (ENABLE_FEATURE_MDEV_RENAME && alias)
- node_name = alias = build_alias(alias, device_name);
-
- if (!delete && major >= 0) {
- if (mknod(node_name, mode | type, makedev(major, minor)) && errno != EEXIST)
- bb_perror_msg("can't create '%s'", node_name);
- if (major == G.root_major && minor == G.root_minor)
- symlink(node_name, "root");
- if (ENABLE_FEATURE_MDEV_CONF) {
- chmod(node_name, mode);
- chown(node_name, ugid.uid, ugid.gid);
- }
- if (ENABLE_FEATURE_MDEV_RENAME && alias) {
- if (aliaslink == '>')
- symlink(node_name, device_name);
- }
- }
+ node_name = device_name;
+ if (ENABLE_FEATURE_MDEV_RENAME && alias) {
+ node_name = alias = build_alias(alias, device_name);
+ dbg("alias2:'%s'", alias);
+ }
- if (ENABLE_FEATURE_MDEV_EXEC && command) {
- /* setenv will leak memory, use putenv/unsetenv/free */
- char *s = xasprintf("%s=%s", "MDEV", node_name);
- char *s1 = xasprintf("%s=%s", "SUBSYSTEM", G.subsystem);
- putenv(s);
- putenv(s1);
- if (system(command) == -1)
- bb_perror_msg("can't run '%s'", command);
- bb_unsetenv_and_free(s1);
- bb_unsetenv_and_free(s);
- free(command);
+ if (!delete && major >= 0) {
+ dbg("mknod('%s',%o,(%d,%d))", node_name, rule->mode | type, major, minor);
+ if (mknod(node_name, rule->mode | type, makedev(major, minor)) && errno != EEXIST)
+ bb_perror_msg("can't create '%s'", node_name);
+ if (major == G.root_major && minor == G.root_minor)
+ symlink(node_name, "root");
+ if (ENABLE_FEATURE_MDEV_CONF) {
+ chmod(node_name, rule->mode);
+ chown(node_name, rule->ugid.uid, rule->ugid.gid);
}
-
- if (delete && major >= -1) {
- if (ENABLE_FEATURE_MDEV_RENAME && alias) {
- if (aliaslink == '>')
- unlink(device_name);
+ if (ENABLE_FEATURE_MDEV_RENAME && alias) {
+ if (aliaslink == '>') {
+//TODO: on devtmpfs, device_name already exists and symlink() fails.
+//End result is that instead of symlink, we have two nodes.
+//What should be done?
+ symlink(node_name, device_name);
}
- unlink(node_name);
}
+ }
+
+ if (ENABLE_FEATURE_MDEV_EXEC && command) {
+ /* setenv will leak memory, use putenv/unsetenv/free */
+ char *s = xasprintf("%s=%s", "MDEV", node_name);
+ char *s1 = xasprintf("%s=%s", "SUBSYSTEM", G.subsystem);
+ putenv(s);
+ putenv(s1);
+ if (system(command) == -1)
+ bb_perror_msg("can't run '%s'", command);
+ bb_unsetenv_and_free(s1);
+ bb_unsetenv_and_free(s);
+ }
- if (ENABLE_FEATURE_MDEV_RENAME)
- free(alias);
+ if (delete && major >= -1) {
+ if (ENABLE_FEATURE_MDEV_RENAME && alias) {
+ if (aliaslink == '>')
+ unlink(device_name);
+ }
+ unlink(node_name);
}
+ if (ENABLE_FEATURE_MDEV_RENAME)
+ free(alias);
+
/* We found matching line.
- * Stop unless it was prefixed with '-' */
- if (ENABLE_FEATURE_MDEV_CONF && !keep_matching)
+ * Stop unless it was prefixed with '-'
+ */
+ if (!ENABLE_FEATURE_MDEV_CONF || !rule->keep_matching)
break;
+ } /* for (;;) */
- /* end of "while line is read from /etc/mdev.conf" */
- } while (ENABLE_FEATURE_MDEV_CONF);
-
- if (ENABLE_FEATURE_MDEV_CONF)
- config_close(parser);
free(subsystem_slash_devname);
}
@@ -541,6 +710,12 @@ int mdev_main(int argc UNUSED_PARAM, char **argv)
{
RESERVE_CONFIG_BUFFER(temp, PATH_MAX + SCRATCH_SIZE);
+ INIT_G();
+
+#if ENABLE_FEATURE_MDEV_CONF
+ G.filename = "/etc/mdev.conf";
+#endif
+
/* We can be called as hotplug helper */
/* Kernel cannot provide suitable stdio fds for us, do it ourself */
bb_sanitize_stdio();
@@ -556,6 +731,10 @@ int mdev_main(int argc UNUSED_PARAM, char **argv)
*/
struct stat st;
+#if ENABLE_FEATURE_MDEV_CONF
+ /* Same as xrealloc_vector(NULL, 4, 0): */
+ G.rule_vec = xzalloc((1 << 4) * sizeof(*G.rule_vec));
+#endif
xstat("/", &st);
G.root_major = major(st.st_dev);
G.root_minor = minor(st.st_dev);
diff --git a/util-linux/mkfs_ext2.c b/util-linux/mkfs_ext2.c
index f6ccc9c..6a1e56c 100644
--- a/util-linux/mkfs_ext2.c
+++ b/util-linux/mkfs_ext2.c
@@ -48,7 +48,7 @@
#include "libbb.h"
#include <linux/fs.h>
-#include <linux/ext2_fs.h>
+#include "bb_e2fs_defs.h"
#define ENABLE_FEATURE_MKFS_EXT2_RESERVED_GDT 0
#define ENABLE_FEATURE_MKFS_EXT2_DIR_INDEX 1
@@ -140,7 +140,7 @@ static uint32_t has_super(uint32_t x)
117649, 177147, 390625, 531441, 823543, 1594323, 1953125,
4782969, 5764801, 9765625, 14348907, 40353607, 43046721,
48828125, 129140163, 244140625, 282475249, 387420489,
- 1162261467, 1220703125, 1977326743, 3486784401/* >2^31 */,
+ 0x4546B3DB, 0x48C27395, 0x75DB9C97, 0xCFD41B91/* >2^31 */,
};
const uint32_t *sp = supers + ARRAY_SIZE(supers);
while (1) {
@@ -317,7 +317,7 @@ int mkfs_ext2_main(int argc UNUSED_PARAM, char **argv)
}
}
- if ((int32_t)bytes_per_inode < blocksize)
+ if ((uint32_t) bytes_per_inode < (uint32_t) blocksize)
bb_error_msg_and_die("-%c is bad", 'i');
// number of bits in one block, i.e. 8*blocksize
#define blocks_per_group (8 * blocksize)
@@ -615,7 +615,11 @@ int mkfs_ext2_main(int argc UNUSED_PARAM, char **argv)
// zero boot sectors
memset(buf, 0, blocksize);
- PUT(0, buf, 1024); // N.B. 1024 <= blocksize, so buf[0..1023] contains zeros
+ // Disabled: standard mke2fs doesn't do this, and
+ // on SPARC this destroys Sun disklabel.
+ // Users who need/want zeroing can easily do it with dd.
+ //PUT(0, buf, 1024); // N.B. 1024 <= blocksize, so buf[0..1023] contains zeros
+
// zero inode tables
for (i = 0; i < ngroups; ++i)
for (n = 0; n < inode_table_blocks; ++n)
diff --git a/util-linux/more.c b/util-linux/more.c
index 2f884a9..04ad2d1 100644
--- a/util-linux/more.c
+++ b/util-linux/more.c
@@ -37,9 +37,11 @@ struct globals {
#define new_settings (G.new_settings )
#define cin_fileno (G.cin_fileno )
-#define setTermSettings(fd, argp) do { \
- if (ENABLE_FEATURE_USE_TERMIOS) tcsetattr(fd, TCSANOW, argp); \
- } while (0)
+#define setTermSettings(fd, argp) \
+do { \
+ if (ENABLE_FEATURE_USE_TERMIOS) \
+ tcsetattr(fd, TCSANOW, argp); \
+} while (0)
#define getTermSettings(fd, argp) tcgetattr(fd, argp)
static void gotsig(int sig UNUSED_PARAM)
@@ -57,14 +59,13 @@ int more_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int more_main(int argc UNUSED_PARAM, char **argv)
{
int c = EOF; /* for compiler */
- int lines;
int input = 0;
int spaces = 0;
int please_display_more_prompt;
struct stat st;
FILE *file;
FILE *cin;
- int len;
+ unsigned len, lines;
unsigned terminal_width;
unsigned terminal_height;
@@ -83,8 +84,7 @@ int more_main(int argc UNUSED_PARAM, char **argv)
cin_fileno = fileno(cin);
getTermSettings(cin_fileno, &initial_settings);
new_settings = initial_settings;
- new_settings.c_lflag &= ~ICANON;
- new_settings.c_lflag &= ~ECHO;
+ new_settings.c_lflag &= ~(ICANON | ECHO);
new_settings.c_cc[VMIN] = 1;
new_settings.c_cc[VTIME] = 0;
setTermSettings(cin_fileno, &new_settings);
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 42e1983..ca04de7 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -38,7 +38,7 @@
//usage: )
//usage: "\n -r Read-only mount"
//usage: "\n -w Read-write mount (default)"
-//usage: "\n -t FSTYPE Filesystem type"
+//usage: "\n -t FSTYPE[,...] Filesystem type(s)"
//usage: "\n -O OPT Mount only filesystems with option OPT (-a only)"
//usage: "\n-o OPT:"
//usage: IF_FEATURE_MOUNT_LOOP(
@@ -339,6 +339,7 @@ enum { GETMNTENT_BUFSIZE = COMMON_BUFSIZE - offsetof(struct globals, getmntent_b
#endif
#define fslist (G.fslist )
#define getmntent_buf (G.getmntent_buf )
+#define INIT_G() do { } while (0)
#if ENABLE_FEATURE_MTAB_SUPPORT
/*
@@ -521,12 +522,13 @@ static llist_t *get_block_backed_filesystems(void)
while ((buf = xmalloc_fgetline(f)) != NULL) {
if (strncmp(buf, "nodev", 5) == 0 && isspace(buf[5]))
- continue;
+ goto next;
fs = skip_whitespace(buf);
if (*fs == '#' || *fs == '*' || !*fs)
- continue;
+ goto next;
llist_add_to_end(&list, xstrdup(fs));
+ next:
free(buf);
}
if (ENABLE_FEATURE_CLEAN_UP) fclose(f);
@@ -818,31 +820,31 @@ enum {
*/
struct nfs2_fh {
- char data[32];
+ char data[32];
};
struct nfs3_fh {
- unsigned short size;
- unsigned char data[64];
+ unsigned short size;
+ unsigned char data[64];
};
struct nfs_mount_data {
- int version; /* 1 */
- int fd; /* 1 */
- struct nfs2_fh old_root; /* 1 */
- int flags; /* 1 */
- int rsize; /* 1 */
- int wsize; /* 1 */
- int timeo; /* 1 */
- int retrans; /* 1 */
- int acregmin; /* 1 */
- int acregmax; /* 1 */
- int acdirmin; /* 1 */
- int acdirmax; /* 1 */
- struct sockaddr_in addr; /* 1 */
- char hostname[256]; /* 1 */
- int namlen; /* 2 */
- unsigned int bsize; /* 3 */
- struct nfs3_fh root; /* 4 */
+ int version; /* 1 */
+ int fd; /* 1 */
+ struct nfs2_fh old_root; /* 1 */
+ int flags; /* 1 */
+ int rsize; /* 1 */
+ int wsize; /* 1 */
+ int timeo; /* 1 */
+ int retrans; /* 1 */
+ int acregmin; /* 1 */
+ int acregmax; /* 1 */
+ int acdirmin; /* 1 */
+ int acdirmax; /* 1 */
+ struct sockaddr_in addr; /* 1 */
+ char hostname[256]; /* 1 */
+ int namlen; /* 2 */
+ unsigned int bsize; /* 3 */
+ struct nfs3_fh root; /* 4 */
};
/* bits in the flags field */
@@ -857,6 +859,7 @@ enum {
NFS_MOUNT_VER3 = 0x0080, /* 3 */
NFS_MOUNT_KERBEROS = 0x0100, /* 3 */
NFS_MOUNT_NONLM = 0x0200, /* 3 */
+ NFS_MOUNT_NOACL = 0x0800, /* 4 */
NFS_MOUNT_NORDIRPLUS = 0x4000
};
@@ -1121,6 +1124,7 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
int noac;
int nordirplus;
int nolock;
+ int noacl;
find_kernel_nfs_mount_version();
@@ -1140,7 +1144,7 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
pathname = s + 1;
*s = '\0';
/* Ignore all but first hostname in replicated mounts
- until they can be fully supported. (mack@sgi.com) */
+ * until they can be fully supported. (mack@sgi.com) */
s = strchr(hostname, ',');
if (s) {
*s = '\0';
@@ -1193,6 +1197,7 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
nolock = 0;
noac = 0;
nordirplus = 0;
+ noacl = 0;
retry = 10000; /* 10000 minutes ~ 1 week */
tcp = 1; /* nfs-utils uses tcp per default */
@@ -1331,7 +1336,8 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
"tcp\0"
"udp\0"
"lock\0"
- "rdirplus\0";
+ "rdirplus\0"
+ "acl\0";
int val = 1;
if (!strncmp(opt, "no", 2)) {
val = 0;
@@ -1381,6 +1387,9 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
case 11: //rdirplus
nordirplus = !val;
break;
+ case 12: // acl
+ noacl = !val;
+ break;
default:
bb_error_msg("unknown nfs mount option: %s%s", val ? "" : "no", opt);
goto fail;
@@ -1394,7 +1403,8 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
| (posix ? NFS_MOUNT_POSIX : 0)
| (nocto ? NFS_MOUNT_NOCTO : 0)
| (noac ? NFS_MOUNT_NOAC : 0)
- | (nordirplus ? NFS_MOUNT_NORDIRPLUS : 0);
+ | (nordirplus ? NFS_MOUNT_NORDIRPLUS : 0)
+ | (noacl ? NFS_MOUNT_NOACL : 0);
if (nfs_mount_version >= 2)
data.flags |= (tcp ? NFS_MOUNT_TCP : 0);
if (nfs_mount_version >= 3)
@@ -1673,7 +1683,6 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
/* Perform actual mount */
do_mount:
- mp->mnt_type = (char*)"nfs";
retval = mount_it_now(mp, vfsflags, (char*)&data);
goto ret;
@@ -1698,8 +1707,43 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
#else // !ENABLE_FEATURE_MOUNT_NFS
-// Never called. Call should be optimized out.
-int nfsmount(struct mntent *mp, long vfsflags, char *filteropts);
+/* Linux 2.6.23+ supports nfs mounts with options passed as a string.
+ * For older kernels, you must build busybox with ENABLE_FEATURE_MOUNT_NFS.
+ * (However, note that then you lose any chances that NFS over IPv6 would work).
+ */
+static int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
+{
+ len_and_sockaddr *lsa;
+ char *opts;
+ char *end;
+ char *dotted;
+ int ret;
+
+# if ENABLE_FEATURE_IPV6
+ end = strchr(mp->mnt_fsname, ']');
+ if (end && end[1] == ':')
+ end++;
+ else
+# endif
+ /* mount_main() guarantees that ':' is there */
+ end = strchr(mp->mnt_fsname, ':');
+
+ *end = '\0';
+ lsa = xhost2sockaddr(mp->mnt_fsname, /*port:*/ 0);
+ *end = ':';
+ dotted = xmalloc_sockaddr2dotted_noport(&lsa->u.sa);
+ if (ENABLE_FEATURE_CLEAN_UP) free(lsa);
+ opts = xasprintf("%s%saddr=%s",
+ filteropts ? filteropts : "",
+ filteropts ? "," : "",
+ dotted
+ );
+ if (ENABLE_FEATURE_CLEAN_UP) free(dotted);
+ ret = mount_it_now(mp, vfsflags, opts);
+ if (ENABLE_FEATURE_CLEAN_UP) free(opts);
+
+ return ret;
+}
#endif // !ENABLE_FEATURE_MOUNT_NFS
@@ -1790,10 +1834,11 @@ static int singlemount(struct mntent *mp, int ignore_busy)
}
// Might this be an NFS filesystem?
- if (ENABLE_FEATURE_MOUNT_NFS
- && (!mp->mnt_type || strcmp(mp->mnt_type, "nfs") == 0)
+ if ((!mp->mnt_type || strncmp(mp->mnt_type, "nfs", 3) == 0)
&& strchr(mp->mnt_fsname, ':') != NULL
) {
+ if (!mp->mnt_type)
+ mp->mnt_type = (char*)"nfs";
rc = nfsmount(mp, vfsflags, filteropts);
goto report_error;
}
@@ -1809,7 +1854,7 @@ static int singlemount(struct mntent *mp, int ignore_busy)
if (ENABLE_FEATURE_MOUNT_LOOP && S_ISREG(st.st_mode)) {
loopFile = bb_simplify_path(mp->mnt_fsname);
mp->mnt_fsname = NULL; // will receive malloced loop dev name
- if (set_loop(&mp->mnt_fsname, loopFile, 0) < 0) {
+ if (set_loop(&mp->mnt_fsname, loopFile, 0, /*ro:*/ 0) < 0) {
if (errno == EPERM || errno == EACCES)
bb_error_msg("%s", bb_msg_perm_denied_are_you_root);
else
@@ -1825,7 +1870,16 @@ static int singlemount(struct mntent *mp, int ignore_busy)
// If we know the fstype (or don't need to), jump straight
// to the actual mount.
if (mp->mnt_type || (vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE))) {
- rc = mount_it_now(mp, vfsflags, filteropts);
+ char *next;
+ for (;;) {
+ next = mp->mnt_type ? strchr(mp->mnt_type, ',') : NULL;
+ if (next)
+ *next = '\0';
+ rc = mount_it_now(mp, vfsflags, filteropts);
+ if (rc == 0 || !next)
+ break;
+ mp->mnt_type = next + 1;
+ }
} else {
// Loop through filesystem types until mount succeeds
// or we run out
@@ -1842,7 +1896,7 @@ static int singlemount(struct mntent *mp, int ignore_busy)
for (fl = fslist; fl; fl = fl->link) {
mp->mnt_type = fl->data;
rc = mount_it_now(mp, vfsflags, filteropts);
- if (!rc)
+ if (rc == 0)
break;
}
}
@@ -1944,6 +1998,8 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
IF_DESKTOP(int nonroot = ) sanitize_env_if_suid();
+ INIT_G();
+
// Parse long options, like --bind and --move. Note that -o option
// and --option are synonymous. Yes, this means --remount,rw works.
for (i = j = 1; argv[i]; i++) {
diff --git a/util-linux/pivot_root.c b/util-linux/pivot_root.c
index 7f49f47..83f01fa 100644
--- a/util-linux/pivot_root.c
+++ b/util-linux/pivot_root.c
@@ -24,6 +24,7 @@ int pivot_root_main(int argc, char **argv)
{
if (argc != 3)
bb_show_usage();
+
if (pivot_root(argv[1], argv[2]) < 0) {
/* prints "pivot_root: <strerror text>" */
bb_perror_nomsg_and_die();
diff --git a/util-linux/rdev.c b/util-linux/rdev.c
index 1212f84..4652817 100644
--- a/util-linux/rdev.c
+++ b/util-linux/rdev.c
@@ -23,9 +23,9 @@
int rdev_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int rdev_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
{
- char const * const root_device = find_block_device("/");
+ const char *root_device = find_block_device("/");
- if (root_device != NULL) {
+ if (root_device) {
printf("%s /\n", root_device);
return EXIT_SUCCESS;
}
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c
index f77f0d4..54867ec 100644
--- a/util-linux/swaponoff.c
+++ b/util-linux/swaponoff.c
@@ -47,6 +47,7 @@ struct globals {
#else
#define g_flags 0
#endif
+#define INIT_G() do { } while (0)
static int swap_enable_disable(char *device)
{
@@ -110,6 +111,8 @@ int swap_on_off_main(int argc UNUSED_PARAM, char **argv)
{
int ret;
+ INIT_G();
+
#if !ENABLE_FEATURE_SWAPON_PRI
ret = getopt32(argv, "a");
#else
diff --git a/util-linux/switch_root.c b/util-linux/switch_root.c
index db6ae35..a301b36 100644
--- a/util-linux/switch_root.c
+++ b/util-linux/switch_root.c
@@ -114,7 +114,7 @@ int switch_root_main(int argc UNUSED_PARAM, char **argv)
}
xchroot(".");
// The chdir is needed to recalculate "." and ".." links
- xchdir("/");
+ /*xchdir("/"); - done in xchroot */
// If a new console specified, redirect stdin/stdout/stderr to it
if (console) {
diff --git a/util-linux/umount.c b/util-linux/umount.c
index 5b716c6..4c2e882 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -22,7 +22,7 @@
//usage: "\n -l Lazy umount (detach filesystem)"
//usage: "\n -f Force umount (i.e., unreachable NFS server)"
//usage: IF_FEATURE_MOUNT_LOOP(
-//usage: "\n -d Free loop device if it has been used"
+//usage: "\n -D Don't free loop device even if it has been used"
//usage: )
//usage:
//usage:#define umount_example_usage
@@ -44,14 +44,22 @@ static struct mntent *getmntent_r(FILE* stream, struct mntent* result,
}
#endif
-/* ignored: -v -d -t -i */
-#define OPTION_STRING "fldnra" "vdt:i"
+/* Ignored: -v -t -i
+ * bbox always acts as if -d is present.
+ * -D can be used to suppress it (bbox extension).
+ * Rationale:
+ * (1) util-linux's umount does it if "loop=..." is seen in /etc/mtab:
+ * thus, on many systems, bare umount _does_ drop loop devices.
+ * (2) many users request this feature.
+ */
+#define OPTION_STRING "fldDnra" "vt:i"
#define OPT_FORCE (1 << 0) // Same as MNT_FORCE
#define OPT_LAZY (1 << 1) // Same as MNT_DETACH
-#define OPT_FREELOOP (1 << 2)
-#define OPT_NO_MTAB (1 << 3)
-#define OPT_REMOUNT (1 << 4)
-#define OPT_ALL (ENABLE_FEATURE_UMOUNT_ALL ? (1 << 5) : 0)
+//#define OPT_FREE_LOOP (1 << 2) // -d is assumed always present
+#define OPT_DONT_FREE_LOOP (1 << 3)
+#define OPT_NO_MTAB (1 << 4)
+#define OPT_REMOUNT (1 << 5)
+#define OPT_ALL (ENABLE_FEATURE_UMOUNT_ALL ? (1 << 6) : 0)
int umount_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int umount_main(int argc UNUSED_PARAM, char **argv)
@@ -165,7 +173,7 @@ int umount_main(int argc UNUSED_PARAM, char **argv)
} else {
// De-allocate the loop device. This ioctl should be ignored on
// any non-loop block devices.
- if (ENABLE_FEATURE_MOUNT_LOOP && (opt & OPT_FREELOOP) && m)
+ if (ENABLE_FEATURE_MOUNT_LOOP && !(opt & OPT_DONT_FREE_LOOP) && m)
del_loop(m->device);
if (ENABLE_FEATURE_MTAB_SUPPORT && !(opt & OPT_NO_MTAB) && m)
erase_mtab(m->dir);
diff --git a/util-linux/volume_id/get_devname.c b/util-linux/volume_id/get_devname.c
index 7c99305..230102d 100644
--- a/util-linux/volume_id/get_devname.c
+++ b/util-linux/volume_id/get_devname.c
@@ -114,12 +114,12 @@ uuidcache_check_device(const char *device,
return TRUE;
}
-static void
-uuidcache_init(void)
+static struct uuidCache_s*
+uuidcache_init(int scan_devices)
{
dbg("DBG: uuidCache=%x, uuidCache");
if (uuidCache)
- return;
+ return uuidCache;
/* We were scanning /proc/partitions
* and /proc/sys/dev/cdrom/info here.
@@ -131,12 +131,14 @@ uuidcache_init(void)
* This is unacceptably complex. Let's just scan /dev.
* (Maybe add scanning of /sys/block/XXX/dev for devices
* somehow not having their /dev/XXX entries created?) */
-
- recursive_action("/dev", ACTION_RECURSE,
- uuidcache_check_device, /* file_action */
- NULL, /* dir_action */
- NULL, /* userData */
- 0 /* depth */);
+ if (scan_devices)
+ recursive_action("/dev", ACTION_RECURSE,
+ uuidcache_check_device, /* file_action */
+ NULL, /* dir_action */
+ NULL, /* userData */
+ 0 /* depth */);
+
+ return uuidCache;
}
#define UUID 1
@@ -148,9 +150,7 @@ get_spec_by_x(int n, const char *t, int *majorPtr, int *minorPtr)
{
struct uuidCache_s *uc;
- uuidcache_init();
- uc = uuidCache;
-
+ uc = uuidcache_init(/*scan_devices:*/ 1);
while (uc) {
switch (n) {
case UUID:
@@ -215,24 +215,23 @@ get_spec_by_volume_label(const char *s, int *major, int *minor)
#endif // UNUSED
/* Used by blkid */
-void display_uuid_cache(void)
+void display_uuid_cache(int scan_devices)
{
- struct uuidCache_s *u;
-
- uuidcache_init();
- u = uuidCache;
- while (u) {
- printf("%s:", u->device);
- if (u->label[0])
- printf(" LABEL=\"%s\"", u->label);
- if (u->uc_uuid[0])
- printf(" UUID=\"%s\"", u->uc_uuid);
+ struct uuidCache_s *uc;
+
+ uc = uuidcache_init(scan_devices);
+ while (uc) {
+ printf("%s:", uc->device);
+ if (uc->label[0])
+ printf(" LABEL=\"%s\"", uc->label);
+ if (uc->uc_uuid[0])
+ printf(" UUID=\"%s\"", uc->uc_uuid);
#if ENABLE_FEATURE_BLKID_TYPE
- if (u->type)
- printf(" TYPE=\"%s\"", u->type);
+ if (uc->type)
+ printf(" TYPE=\"%s\"", uc->type);
#endif
bb_putchar('\n');
- u = u->next;
+ uc = uc->next;
}
}
@@ -265,8 +264,7 @@ char *get_devname_from_label(const char *spec)
{
struct uuidCache_s *uc;
- uuidcache_init();
- uc = uuidCache;
+ uc = uuidcache_init(/*scan_devices:*/ 1);
while (uc) {
if (uc->label[0] && strcmp(spec, uc->label) == 0) {
return xstrdup(uc->device);
@@ -280,8 +278,7 @@ char *get_devname_from_uuid(const char *spec)
{
struct uuidCache_s *uc;
- uuidcache_init();
- uc = uuidCache;
+ uc = uuidcache_init(/*scan_devices:*/ 1);
while (uc) {
/* case of hex numbers doesn't matter */
if (strcasecmp(spec, uc->uc_uuid) == 0) {
diff --git a/util-linux/volume_id/util.c b/util-linux/volume_id/util.c
index 10b6bf8..11e2c00 100644
--- a/util-linux/volume_id/util.c
+++ b/util-linux/volume_id/util.c
@@ -245,7 +245,7 @@ void *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len)
dbg("read seekbuf off:0x%llx len:0x%zx",
(unsigned long long) off, len);
do_read:
- if (lseek(id->fd, off, SEEK_SET) != off) {
+ if (lseek(id->fd, off, SEEK_SET) != (int64_t) off) {
dbg("seek(0x%llx) failed", (unsigned long long) off);
goto err;
}