diff options
334 files changed, 10427 insertions, 20869 deletions
diff --git a/.bzrignore b/.bzrignore index 348093af390..0c666cc3ae0 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1067,3 +1067,4 @@ vio/viotest-ssl include/check_abi include/mysql_h.ic mysql-test/r/blackhole.log +mysql-test/lib/init_db.sql diff --git a/BUILD/check-cpu b/BUILD/check-cpu index e207d12d972..2854ec721c6 100755 --- a/BUILD/check-cpu +++ b/BUILD/check-cpu @@ -5,9 +5,13 @@ # check_cpu () { - if test -r /proc/cpuinfo ; then + CPUINFO=/proc/cpuinfo + if test -n "$TEST_CPUINFO" ; then + CPUINFO=$TEST_CPUINFO + fi + if test -r "$CPUINFO" -a "$CPUINFO" != " " ; then # on Linux (and others?) we can get detailed CPU information out of /proc - cpuinfo="cat /proc/cpuinfo" + cpuinfo="cat $CPUINFO" # detect CPU family cpu_family=`$cpuinfo | grep 'family' | cut -d ':' -f 2 | cut -d ' ' -f 2 | head -1` @@ -28,11 +32,12 @@ check_cpu () { fi # parse CPU flags - for flag in `$cpuinfo | grep '^flags' | sed -e 's/^flags.*: //'`; do + for flag in `$cpuinfo | grep '^flags' | sed -e 's/^flags.*: //' -e 's/[^a-zA-Z0-9_ ]/_/g'`; do eval cpu_flag_$flag=yes done else # Fallback when there is no /proc/cpuinfo + CPUINFO=" " case "`uname -s`" in FreeBSD|OpenBSD) cpu_family=`uname -m`; @@ -84,6 +89,18 @@ check_cpu () { *Pentium*M*pro*) cpu_arg="pentium-m"; ;; + *Celeron\(R\)*\ M*) + cpu_arg="pentium-m"; + ;; + *Celeron*Coppermine*) + cpu_arg="pentium3" + ;; + *Celeron\(R\)*) + cpu_arg="pentium4" + ;; + *Celeron*) + cpu_arg="pentium2"; + ;; *Athlon*64*) cpu_arg="athlon64"; ;; @@ -113,7 +130,14 @@ check_cpu () { esac - if test -z "$cpu_arg"; then + if test -z "$cpu_arg" ; then + if test "$CPUINFO" != " " ; then + # fallback to uname if necessary + TEST_CPUINFO=" " + check_cpu_cflags="" + check_cpu + return + fi echo "BUILD/check-cpu: Oops, could not find out what kind of cpu this machine is using." >&2 check_cpu_cflags="" return @@ -167,8 +191,7 @@ check_cpu () { touch __test.c while [ "$cpu_arg" ] ; do - # FIXME: echo -n isn't portable - see contortions autoconf goes through - echo -n testing $cpu_arg "... " >&2 + printf "testing $cpu_arg ... " >&2 # compile check check_cpu_cflags=`eval echo $check_cpu_args` diff --git a/BitKeeper/etc/collapsed b/BitKeeper/etc/collapsed index 3b45bb4f30c..457d909ef74 100644 --- a/BitKeeper/etc/collapsed +++ b/BitKeeper/etc/collapsed @@ -3,3 +3,4 @@ 454f8960jsVT_kMKJtZ9OCgXoba0xQ 4554a95d7txO1DuO9G3nAizI3SkFAA 4554b3722d71SbPiI2Gx-RhbZjmuIQ +45ae6628gqKTsUFfnoNExadETVIkbA diff --git a/BitKeeper/etc/gone b/BitKeeper/etc/gone index 2d5522899d2..150abd46f9a 100644 --- a/BitKeeper/etc/gone +++ b/BitKeeper/etc/gone @@ -455,6 +455,12 @@ arjen@co3064164-a.bitbike.com|Docs/section.Comparisons.texi|20011108043647|22614 arjen@fred.bitbike.com|scripts/mysql_fix_extensions.sh|20020516001337|12363|f1048a78f4759b4d ccarkner@nslinuxw10.bedford.progress.com|mysql-test/r/isolation.result|20010327145543|25059|4da11e109a3d93a9 ccarkner@nslinuxw10.bedford.progress.com|mysql-test/t/isolation.test|20010327145543|39049|6a39e4138dd4a456 +jani@a88-113-38-195.elisa-laajakaista.fi|BUILD/SETUP.sh.rej|20070122013357|30052|b0650da46e7c4e54 +jani@a88-113-38-195.elisa-laajakaista.fi|configure.in.rej|20070122013357|43533|4b7ec608b9c90e83 +jani@a88-113-38-195.elisa-laajakaista.fi|include/my_global.h.rej|20070122013357|29911|dc7f1642f6061af +jani@a88-113-38-195.elisa-laajakaista.fi|include/my_pthread.h.rej|20070122013357|18348|a6b632d992e5df16 +jani@a88-113-38-195.elisa-laajakaista.fi|mysys/thr_alarm.c.rej|20070122013357|21935|c169568388079966 +jani@a88-113-38-195.elisa-laajakaista.fi|sql/mysqld.cc.rej|20070122013357|09337|84aad00c2111bc3 jani@hynda.mysql.fi|client/mysqlcheck|20010419221207|26716|363e3278166d84ec jcole@tetra.bedford.progress.com|BitKeeper/etc/logging_ok|20001004201211|30554 miguel@hegel.local|zlib/ChangeLog|20020319032513|28917|5d5425fc84737083 diff --git a/Docs/.cvsignore b/Docs/.cvsignore index 777efb1eb7b..6a00212535b 100644 --- a/Docs/.cvsignore +++ b/Docs/.cvsignore @@ -1,40 +1,5 @@ -COPYING -COPYING.LIB +INSTALL-SOURCE INSTALL-BINARY Makefile Makefile.in -Manual-updates -before-gpl-changes-manual.texi -include.texi -manual-before-gpl.texi -manual-tmp.aux -manual-tmp.cp -manual-tmp.fn -manual-tmp.ky -manual-tmp.log -manual-tmp.pdf -manual-tmp.pg -manual-tmp.texi -manual-tmp.toc -manual-tmp.tp -manual-tmp.vr -manual.aux -manual.cp -manual.cps -manual.fn -manual.fns -manual.html -manual.ky -manual.log -manual.pdf -manual.pg -manual.toc -manual.tp -manual.txt -manual.vr -manual_a4.ps -manual_a4.ps.gz -manual_letter.ps -manual_letter.ps.gz -manual_toc.html mysql.info diff --git a/Docs/Books/algor.eps b/Docs/Books/algor.eps deleted file mode 100644 index b202f02d12a..00000000000 --- a/Docs/Books/algor.eps +++ /dev/null @@ -1,1419 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /home/mwagner/work/bk/mysql/Docs/Flags/algor.eps -%%CreationDate: Sun Dec 31 14:27:48 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 254 383 -%%EndComments -%%BeginPreview: 100 154 1 154 -% fffffffffffffffffffffffff0 -% fffffffffffffffffffffffff0 -% fffffffffffffffffffffffff0 -% ffffffffff7ffffffffffffbb0 -% fbbbefffbbfefffffffffffff0 -% fffffff7fffffbdeefffffeff0 -% f7ffbf7ffffbffffffbff7bf70 -% ffffffffbeefffffffffbffff0 -% f77bfffbfffff7fffffffffdf0 -% fffffffffdffbfbffefeff7ff0 -% dfffeefffffeffffdffffffbf0 -% fb77bff7b7effffdfffbfdfff0 -% ffde3ffffde3f7bfff7ff785d0 -% 6f9f3feff977bfffff3fbf38f0 -% fe8f3f7fff33fffffbfffe7ff0 -% 774f31eb5532f4d75fb6fcfed0 -% 7e6f2c18011222224e2034fff0 -% fee72e9d3d333332ff33bcdbf0 -% 760724bc3933b3321f331cffb0 -% fcf3259cb933337b8733bc7ff0 -% 79f32f9d39373332ef333e7df0 -% f5e12049391323324e339b02f0 -% 7effce77def7deddbfd7bfd7f0 -% ffffdf7fffffffffffffffffd0 -% 6fefce7ffffffffffffffffff0 -% feff61fdfff7dffffffffffef0 -% 7ffffff7ddeffdff7efffbb7f0 -% f7deffffffff7ffdfbfbefffd0 -% 7effffdfffffffeffffffffdf0 -% 7fffeefedffbffffffefffbff0 -% f7fbffffff7f6dfdbfff7bf770 -% ffdfbffffff7ffeffffffffef0 -% 6ffffff77ffffffffdfffffff0 -% 7efffd7dfdfdddfef7dff7eff0 -% fffbfe9cffb2fdfffb9eff7f70 -% 7befbcb6aab7b955af5bfffdf0 -% effffe689138a548b0affbf7f0 -% 7fbff6ad9dbe4d568bcffffff0 -% 7ffefc88aab2b2355893bfbfb0 -% fbffeffff7dfdecbff7ffffff0 -% ffbbffffffffff5ffffffff6f0 -% 7ffffffffffffdffffffffbff0 -% 77fffffddfdfbffff7fffdfff0 -% ff7fbdfffefdfbf6ffef7fffb0 -% 7ff7ffffffffffffffbffffef0 -% f7ffffefdfffffefeffffffbf0 -% 7f7f7dfffffdfbfffffffdeff0 -% 6ffdfffffeffefdefff6fffff0 -% fef7ffdf7ff7ffffff7fffffb0 -% fffff7fffbffffbff7fffddef0 -% 6dffdffdfffffffdfffff7fff0 -% 7fefffbfefdfbeffdf77bffff0 -% ffff7fffff7ef7ffffffffbbf0 -% 6bbdff7bdffffff7bdffffffb0 -% fffffbffffffeffffffdfffff0 -% 6f7ffff7bdedbeeef7b7edddf0 -% fffbefffffffffffffffffffd0 -% 7daebaaaaaad6aad5addb77ff0 -% 6ffffffffffffffbf7b76ddbb0 -% ff756bbadb55aab6fffffffff0 -% 6db4d62100000000008a515ff0 -% fffdabbaad250896555ce7ff70 -% 6f6d76a9a449084233d7565df0 -% ffeaa73521004210891cd57ff0 -% 7da44a400a5494842041215ff0 -% 77fae53ad08021294a9e6afbb0 -% ff6dbf51442208423195b5aff0 -% 6ffd653a8c4110862adad77ff0 -% fdaaeb51410842105154a55fb0 -% 6f644044100210008401287df0 -% ffedaf29429442290956576ff0 -% 6ebad2b98c2108c6318cb57f70 -% ffeeee914a210844335aebdff0 -% bb68a10a484000814914a67bd0 -% 77ca4a50108451100221095ff0 -% ff74a4a5420800054846657f70 -% 6feeeb198c6314c4318cd6dbf0 -% 7d6aa6b08a210846229a657ff0 -% ffd4a90450882109445292df70 -% 6da40049010000100100087bf0 -% ff6aed225a52a5214a56e55ff0 -% 6feca330842288c6308c537fb0 -% fd6ad62986631844118a556ef0 -% 6fc80088204842884a50927ff0 -% ff65504208800011000104dff0 -% 7de885292252aaa44a54517bd0 -% 6f6d6611845318c4118c465ff0 -% ffd242b14c229482310852ff70 -% 7d649404209021114452885df0 -% efd1004002444224000012fff0 -% 7f645529589294894a52445fd0 -% edcd4210c4231892318c4afdf0 -% 7f6042914a4892662100515ff0 -% 7bd51424014950084849087bb0 -% ef62008020120550800012dff0 -% bfc928214ac4b2252a42887ff0 -% 7d6843188c2998c6218c425b70 -% efe110014a622545280028fff0 -% 7f4288a4108aa4100022815ff0 -% 7de524002104a9208a40947bb0 -% ef600952ca7244c62011085ff0 -% 7fcc621086251aa5318c637f70 -% fb6101154a49b04a2900005df0 -% 6fca944010820510802114fff0 -% fea21084211454000402115fd0 -% 6fe945298e61916f5150847bf0 -% fd6c4210c8451842310c635fb0 -% 7fc125294932a5922140087ff0 -% eb6a884210840000840292ddf0 -% 7fd020842108a5284020047fd0 -% 77654a3148329483294aa95bf0 -% ff6c6310866318c6318c42ffb0 -% 6dd14529245294a80908525ff0 -% ff64104411040001002204fdf0 -% 77c94482204842104400915fd0 -% ff74a539865298c4199a467bf0 -% 6f6d67208c6314a6310c6adfd0 -% fdd0a4a55210042540d2a2ff70 -% 77650840008040000a00085bf0 -% efca528a52048229405552fff0 -% 7f7ce7308c6318c6259a655fb0 -% edd5542984510844310cd7fdf0 -% 7f5aa555520200894aa4a45ff0 -% dde452000088421000020affd0 -% 7b5aad5aa81000214a28e25b70 -% f7eee6918a6218c63196affff0 -% bf5ad5394c210844294cb55ff0 -% 76eca54541004102529466fdd0 -% efca4a50100a12100022485ff0 -% 7d75e2aa820040014a94d3ffb0 -% 6fdebb315c62088a32daa6bbf0 -% fb69d6aa842110462995fb7ff0 -% 6fdaa52949084210529e455fb0 -% ff64524200509081002052fef0 -% 6dd6e739528022122a8d445ff0 -% ff6d6dd58c25084452dad7fdd0 -% 6fdad731204108822956b55ff0 -% 7d6aaa548a8841145298a3dfd0 -% fffffffffffffffffff7fefdf0 -% ed55555555555555555eadbff0 -% 7ffffffffffffffffff7fbf7b0 -% 77ffffffffffffffff7ffffff0 -% ff7fdfeeef7dbf7bb7feefdef0 -% 6fedff7ffff7fdfffffffffff0 -% fdfffdffbffff7ffffb7ff7bd0 -% 7fdfb7fffbff7fefbdff6ffff0 -% efffffedffb7ffbefffffeef70 -% 7dbbffffdfffeefff7eefffdf0 -% ffff7ddffeff7ffdfffff7ffd0 -% 6dffeffffff7fdffdeffffdbf0 -% 7ff7ffff6dffffeffff7df7fd0 -% fbbffedfffefdffefbffffff70 -% 77ff7bfdffffffffffef7efbf0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -239.288271 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 154 8 -% Transformation matrix -[ 100 0 0 154 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404 -0404045c0c735c0c735c04745c0c735c0c735c04745c04745c0c735c0c735c0c735c046c540b6c -540b6c5c0c73540b6c540b6c5c0c735c046c5004645c046c500464540b6c540b6c540b74540b74 -540b6c500464540b6c500464540b6c540b6c5004645c0c73540b6c540b6c5c15745c15745c1574 -5c1574540b74500464500464540b6c540b6c5c0c73500464540b74500464500464540b6c500464 -540b6c500464540b74540b6c540b6c540b6c540b6c500464500464540b6c540b6c5004645c0c73 -540b6c540b74540b6c500464540b6c500464500464540b6c4c086c5004644c086c5004644c086c -4c086c540b6c540b74540b6c540b6c500464540b745004644c0b74500464540b744c086c55146c -5415745415745415745c1574541574540b6c55146c541574040404 -0404045c0c7c5c0c7c5c0c735c0c73640c795c0c735c0c735c0c735c0c735c04745c0c73640c79 -5c046c5c0c735c046c5c0c73540b6c5c0c735c0c735c0c735c046c5c0c73500464540b6c5c0c73 -5004645c0c735c0c735004645c0c73540b745c0c73540b6c540b6c5c0c73540b6c540b6c5c1574 -5c1574540b6c540b6c540b74540b6c5c0c73540b74540b74540b6c5c0c73540b6c540b74540b74 -540b74540b6c540b6c540b6c540b6c540b6c540b6c540b745c0c73540b6c540b74540b6c540b74 -540b6c540b6c540b74540b74540b6c540b74540b74500464500464540b6c500464540b6c540b6c -540b6c4c086c541574540b6c540b744c086c540b6c4c086c540b6c4c0b74540b6c540b6c4c086c -5415745415745c157454157454157454157454157455146c040404 -0404045c0c735c0c735c04745c0c735c0c73640c795c0c735c04745c04745c0c73640c79540b6c -5c0c73540b6c5c0c735c0c73540b6c5c0c735c0c73540b6c5c046c5004645c04745c0c73500464 -5004645c0c735004645c0c73541574540b6c540b6c540b6c5c0c73540b6c540b6c540b6c5c0c73 -540b6c5c1574540b74500464540b6c5c1574540b74500464540b6c540b74500464540b6c540b6c -540b6c540b6c540b6c5c0c73540b6c540b6c540b6c540b6c540b6c5c0c73540b6c540b6c540b6c -540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b74540b74540b6c4c086c540b6c -540b6c540b6c540b6c4c086c5004644c086c5004644c086c4c086c5004644c086c540b6c540b6c -55146c54157454157455146c5c1574541574541574540b6c040404 -0404045c0c73640c795c0c735c04745c0c735c0c73640c795c0c735c0c735c0c735c04745c0c73 -660b655c04745c0c73540b6c5c046c540b6c5c0c735c0c735004645c0474540b6c5004645c0c73 -540b74540b6c5c0c735004645c0c73540b74540b6c5c0c73540b6c540b6c5c0c735c1574540b6c -540b6c540b6c540b6c540b745c0c73540b6c5c0c73540b6c5c1574540b6c540b74540b74540b6c -540b6c540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b74540b6c -5c0c73540b6c540b6c540b6c540b6c540b6c540b6c500464540b6c500464540b6c5004644c086c -540b6c4c086c4c086c540b6c540b6c540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c -540b6c5415745c1574541574541574540b6c55146c540b74040404 -040404540b6c5c0c735c0c736414745c0c7c5c0c735c0c735c0c735c04745c0474540b745c0474 -540b6c540b6c5c0c73540b6c5c046c540b6c5004645c0c735c0c73540b6c5004645c0c73540b6c -5c046c540b6c5c0c735c0c73540b6c540b6c540b6c5c0c73540b74540b6c540b6c540b6c540b74 -540b6c540b6c540b74540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c540b6c5c0c73 -540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b6c -540b74540b6c5c0c73540b6c540b74540b6c540b6c500464500464500464540b74540b6c540b6c -540b6c500464540b6c4c086c540b6c4c086c540b6c540b6c540b6c540b6c4c086c540b6c540b6c -540b6c540b74541574541574541574541574541574540b74040404 -0404045c1574640c795c0c735c15746414745c0c7c5c0c735c0c735c04745c0c735c04745c046c -5c0c73540b6c5c0c73540b6c5c0c735c0c735c0c73500464540b6c540b6c5c0c735c0c73500464 -540b6c540b6c5c1574540b6c540b6c540b6c540b6c540b6c5c0c73540b6c540b6c540b745c1574 -5c0c73540b6c540b6c5c0c73540b6c540b6c540b6c540b6c540b74540b6c540b6c540b6c540b74 -540b6c540b6c5c0c73540b6c540b6c540b6c540b6c540b6c540b74500464540b6c500464540b74 -5c0c73540b6c540b6c540b6c540b6c540b6c540b74540b6c540b74500464540b6c540b6c540b6c -4c086c540b6c4c086c540b6c540b6c4c086c540b6c540b6c540b6c540b6c540b6c55146c4c086c -540b6c540b6c54157455146c540b74541574541574540b6c040404 -0404046414745c0c7c5c15745c147c6414745c0c735c0c735c0c735c0c735c04745c04745c0c73 -5c0c735c0c73540b6c5c0c735c0c735c0c73500464540b6c5c04745004645c046c540b6c500464 -5c0c7355146c5c0c73540b6c540b745c0c73540b6c5c15745c1574540b6c540b6c5c0c73540b6c -5c1574540b74540b6c540b6c5c0c73540b6c540b6c540b6c540b6c5c1574540b6c540b6c540b6c -540b6c540b74540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c540b74540b74500464 -540b6c540b74500464540b6c540b74540b6c540b6c540b74500464500464540b6c540b6c540b6c -540b6c4c086c540b6c540b7454157455146c4c086c540b6c4c086c540b6c540b74540b74541574 -541c6c541574540b6c540b7455146c540b74540b6c540b6c040404 -0404045c0c735c0c735c0c73641a7c641a7c5c147c5c0c735c0c735c15745c0c73540b6c540b6c -5c0c735c046c540b6c5c0c735c046c500464540b745c0c735004645c046c5004645c0c73500464 -5c0c7c540b6c5c0c735c15745c15745c15745004645c0c735c15745c1574540b6c540b6c540b6c -5c1574540b6c500464540b74540b6c540b6c540b6c540b7455146c540b6c540b6c500464540b6c -540b6c5c0c73540b6c540b74540b6c540b6c5c0c73540b6c500464540b74500464540b74500464 -540b74540b6c540b6c540b74540b74540b74540b6c540b6c540b6c540b74540b6c4c086c540b6c -4c086c540b6c540b6c5415745415744c086c4c086c4c086c540b6c4c086c55146c540b6c540b6c -541574541574541574541574540b74541574540b6c541574040404 -0404045c147c6414745c0c73641a7c5c15745c15745c04746414745c0c735c0c735c04745c0c73 -540b6c5c0c735c046c540b6c5c046c5c0c735004645c0c735c0c735004645c0c73540b745c046c -540b6c540b6c540b6c5c0c73540b745c0c73540b745004645c0c73540b6c540b6c540b6c5c1574 -5c0c73540b6c5c1574540b6c540b6c5c0c735c0c73540b6c5c157455146c5c0c73540b6c500464 -540b6c540b6c540b6c5c0c735004645c15745c0c73540b6c540b74540b74540b74500464540b74 -540b74540b6c540b6c540b6c540b6c540b6c540b6c540b74540b6c540b6c540b6c500464540b6c -540b74540b74540b6c540b6c4c086c4c086c540b6c540b6c54157454157455146c4c086c4c086c -540b6c55146c540b6c541574540b6c541574540b74540b74040404 -0404046414746414745c0c73641a7c5c15745c0c735c0c735c0c73540b6c5c0c73660b65540b6c -640c79540b6c5c046c5c046c540b74540b6c5c0c735004645c046c5c04745c0c73500464500464 -5004645c046c5c0c735c1574540b6c5c15745c0c735c0c735c0c73540b6c540b6c5c0c735c1574 -5c1574540b6c5c15745c1574540b6c541574540b6c540b6c5c15745c0c73500464540b74540b74 -540b6c540b6c540b6c540b74540b745c1574540b6c540b6c540b6c540b74500464540b74500464 -540b6c540b74540b6c540b74540b6c540b74540b6c540b6c540b6c540b74540b6c540b74540b6c -540b6c540b74540b6c540b6c55146c4c086c4c086c540b6c540b745c15744c086c55146c55146c -4c086c540b7455146c540b6c540b6c540b6c541574540b6c040404 -0404045c147c641a7c641a7c5c15746414745c0c735c0c735c15745c0c735c0c73540b745c0c73 -5c0c735c046c5c046c5c0c73641474540b6c5c046c5c0474540b6c5c046c540b6c5c0c73540b74 -5c0474540b6c5c0c735c1574540b6c5c1574540b6c5c15745c0c735c15745c0c73540b6c540b6c -5c147c540b6c540b6c540b6c5415745c15745c0c735c0c73500464540b6c540b6c5c0c73540b6c -541574540b6c540b6c540b6c540b6c5c1574540b6c500464540b6c540b6c540b74540b6c540b6c -540b74540b6c540b6c540b6c540b6c540b6c55146c4c086c540b6c540b74540b6c540b6c540b74 -541574540b6c4c146c5415745415744c086c540b6c540b6c540b74541574540b6c4c0b74440458 -4c086c4c086c5004644c086c54157455146c540b74540b74040404 -0404045c0c73641474641a7c5c2479641a7c5c15745c0c735c0c73885b87b986805c046c5c0c73 -5c0c735c04747c4b82c8b7a8e9b899872164500464540b6c5c046c540b6c5c0c735c046c540b6c -540b6c5c15745c0c73540b6c5c0c735c0c73540b6c540b6c540b74540b6c540b6c7c4b82a37483 -6817695c0c735004645c157494788fcac4b7ca83775c0460540b6c5c15745c1574540b6c55146c -5c15745c1e6c540b6c540b6c540b7455146c540b6c500464540b74540b6c540b6c540b6c500464 -5c0c73540b6c540b6c540b74540b6c540b6c540b746b3779874d7a540b6c540b6c540b74540b74 -540b6c540b6c540b6c540b6c540b6c4c086c54157455146c55146c540b6c55146c7c4b8294788f -a48899a48899a37483885b87641c7454157455146c541574040404 -0404045c0c7c5c147c641474641a7c6414745c147c5c0c735c1574c7b8b7fad9a581205c540b74 -5c0c735c0c73540b74c19ba5fad9a5872164540b745c0474540b6c5c0474540b6c5c0c73540b6c -5c0c735c0c735c0c735c157455146c540b6c540b6c5c0c735c0c73540b6c4c086ca69798f7d8b8 -81205c6b3779885b876817696b3779faecc9c78c825c0460540b6c5c1574641c74540b6c55146c -5c157455146c540b6c540b6c5c0c735c1574540b6c540b74540b74540b6c5c0c73540b74540b74 -540b6c540b6c540b6c540b6c5c0c73540b6c55146cc7b8b7e9b8996f175c540b744c086c5c1574 -5c0c7355146c55146c55146c55146c55146c5c1574541574540b6c541c6cb8a8a7e7c7a594788f -773c7c7c4b8294788fe8dab9ca83774c146c54157455146c040404 -040404641474641a7c641474641a7c6414745c0c735c0c73773c7ce9b899f9ebb6ca83775c046c -540b745c0c734c086ca48899fad9a581205c540b745c04745004644c086c540b745c0c735c0c73 -5c04745c046c500464540b6c5c0c735c0c73500464540b6c540b74500464540b6c641c746a2976 -4c086cb8a8a7f8d094660b65541574e8dab9ca8377500464540b74500464540b745c0c73540b6c -540b74540b74540b74500464540b6c541574500464500464500464540b74540b745c0c73500464 -540b74500464540b6c540b7455146c540b6c540b6c6b3779773c7c540b6c540b6c540b74500464 -540b74500464540b6c541574540b744c146c5c1574541c6c4c1575c7b8b7f7c7a87926664c086c -540b74540b7444045894788fab5f70540b74541574541574040404 -0404046414745c0c7c641a7c641a7c6414745c147c5c0c73b89898ab5f70c8b7a8f8d0946f175c -5c147c5c0c73500464a48899fad9a5781a66540c7c7c4b8294788fa37483773372641c74641474 -641a7c885b8794788f885b87681769641c74773c7c773c7c6a2976885b877733726b3779874d7a -5c1464b8a8a7f7be9a69256b641c74e8dab9ca83776a297694788f874d7a681769540b745c1c7c -6b37797733726b377994788f773c7c5c0c64672784885b87874d7a540b6c540b74540b746a2976 -885b87885b8779266655146c540b6c5415745415745c15746a2976540b6c5c157464257c6a2976 -5c1574885b87773c7c55146c540b74540b6c55146c4c086c867389faecc9ab5f704c0b7455146c -55146c55146c540b745c2479641c7455146c5c15745c2479040404 -0404045c0c735c147c640c795c147c5c0c7c5c0c73773c7cd7a899781a66885b87f9ebb6ab5f70 -5c046c5c0c73540b74a48899fad9a5792666b89898c78c82773c7cc8a9a7f9ebb6c9a799b98680 -d9b899ab5f70773c7cc8b7a8e9b899ae7b74d9d5b8f7be9ad7a899faecc9c78c82c8b7a8fad9a5 -ab5f70d9d5b8f7d8b8c9a79992655fd8c7b8e6aa9dc78c82c8a9a7faecc9c89887681769885b87 -e8dab9e9b899c89887c8b7a8f9ebb6b98680b7898fc8b7a8f9ebb6c78c825c0c64885b87d7a899 -885b87a48899e9b899792666540b74540b74885b87d9d5b8e9b8996f175c867389e8dab9d9b899 -b99886c8b7a8f9ebb6d6998669256b5c15745415744c1575b8a8a7f9ebb68a2f624c157555146c -54157455146c55146c5415745c157454157455146c5c1574040404 -0404045c0c7c6414745c147c640c795c147c540b74a48899ca8377640c79641c74d9d5b8e6aa87 -660b655c0c7c500464a48899fad9a5ab5f70f9ebb68a2f62540b74773c7cfaecc9ab5f70b9b6a8 -e6aa875c0460540b7464257cfaecc9ca8377b89898f9ebb68f416b7c4b82792666a48899fad9a5 -8a2f62b9b6a8f7be9a681769641a7cd9d5b8e8bb88781a664c1575a48899f9ebb68a2f624c086c -c8b7a8fad9a57926664c086cb8a8a7fad9a58a2f624c086cac99a7fad9a58a2f62c7b8b7d88e7d -500464500464ab5f706817695415745c15744c146cb9b6a8f7be9a6f175c541574d8c7b8f8d094 -7926664c157594788ffaecc98f416b5415745c157455146cc8b7a8f9ebb68f416b541574541c6c -55146c5415745c15745415745c1574541574541574541574040404 -0404046414745c0c7c6414746414745c0c7c672784e7c7a5c8a886a69798b89898dad4a8f9ebb6 -99275e5c0c73540b74ac99a7fad9a5ab5f70f9ebb6ab5f70540b74885b87f8d0948f416be9d8c8 -ca83775c046c5c15745c1574d7c8a8e6aa87b89898f8d0946f175c540b74540b74a48899fad9a5 -81205cb9b6a8f7bb86660b655c1574e8dab9d699865c0c64540b6c94788ff9ebb68a2f62541574 -c8b7a8efad935c0c644c086ca48899f7be9a68176950046494788ff9ebb68a2f62a48899f9ebb6 -d9b899a4889977337255146c540b6c540b6c541574b8a8a7f7be9a6f175c55146cc7b8b7efad93 -660b654c0b747c4b82f9ebb6ab5f704c146c54157455146cc8a9a7f9ebb68f416b541c7c5c1574 -55146c541c6c54157455146c55146c5c1574541574540b74040404 -040404640c796414745c147c641a7c5c0c7ca48899d699866c1c7c6a29766c1c7c6b3779f9ebb6 -e59b87540b6c4c086cac99a7f8d094781a66a48899e9b899a3748394788f8f416b641c74f9ebb6 -e09e75660b65641474540b74c8b7a8e6aa87b89898f7be9a781a665c0c73500464a48899fad9a5 -872164c8b7a8efad935c04605c1e6cd9d5b8d69986660b65540b7494788ff9ebb68a2f62541574 -cac4a7e9b8995c1464500464a48899f7be9a6817694c0b7494788ff9ebb68a2f625c1574885b87 -a48899cac4b7f9ebb6ab5f70540b6c540b74540b6cb8a8a7f7be9a6817694c0b74c7b8b7efad93 -5c0c644c086c7c4b82faecc9ab5f704c086c5c157455146c867389faecc9d88e7d5c1e6c541574 -5415745c15745c15745c157454157454157455146c541574040404 -0404045c0c736414745c147c5c147c672784e7c7a599275e5c047c5c0c7c5c15744c0b74a69798 -f9ebb68a2f624c086ca48899fad9a56f175ca48899c898877926666414745c147c5c0c73b9b6a8 -fad9a581205c4c0b745c1574e8dab9ab5f70a48899f8d0946817695c147c540b7494788ffad9a5 -781a66b9b6a8efad93681769541c6ce8dab9d88e7d5c0460540b7494788ff9ebb699275e4c086c -c8b7a8efad9364105c4c086ca48899f7bb86660b654c086c94788ff9ebb681205ca37483781a66 -4c086c541c6ce8dab9ab5f70500464541574500464ac99a7f7be9a6f175c4c0b74cac4b7e9b899 -5c0460540b747c4b82f9ebb6ab5f705415745c1e6c55146c541574b9b6a8faecc9ae7b74540b6c -4c086c540b6c4c086c541c6c641c745c15745415745c1574040404 -040404640c79641474640c796a2976c19ba5e9d9a6ae7b747926665c0c7c5c0c73773c7cc8a9a7 -f9ebb6c89887874d7ad8b7a8fad9a5ab5f70c8b7a8f9ebb6d7c8a8d7c8a8dad4a8c89997874d7a -d9d5b8d9b899874d7aa69798c78c82773372cac4a7fad9a5ab5f706414746a2976b9b6a8f9ebb6 -ab5f70b7898ff9ebb6d7a899a37483e8dab9e9b8998f416b50046494788ff9ebb6ab5f707c4b82 -d9d5b8e7c7a58f416b6b3779b8a8a7fad9a58f416b50046494788ff9ebb6ab5f70c5b699c78c82 -773c7c94788fd7a899792666540b6c540b6c6b3779cac4a7fad9a5874d7a773c7cd9d5b8e7c7a5 -773372540b6c885b87faecc9ca83776a297654157455146c541574541c6cb89898faecc9d9b899 -a8878694788f94788fb8a8a7a3748355146c5415745c1574040404 -0404045c0c7c5c0c7c5c0c7c6c1c7c6b37796a2976773c7c6c14745c0c735c0c7c64257c773c7c -6a29766b37797733726b377964257c885b87c9a799a374837c4b827c4b82a48899f9ebb6ab5f70 -641c74885b87885b87773c7c540b6c773c7c773c7c6b37797c4b82641c746a2976773c7c773c7c -7c4b82681769885b877c4b82773c7c773c7c7c4b826b37795c0c736a2976885b877c4b82773c7c -7c4b827c4b827733727733727c4b82885b87874d7a5c0c7364257c885b87885b87874d7a94788f -94788f885b87681769540b74540b6c540b6c773c7c885b87885b87874d7a874d7a885b87885b87 -874d7a55146c5c2479885b87885b8769256b55146c540b6c5415744c086c4c146c6b377994788f -a69798a4889994788f874d7a5c15745c1574541574541574040404 -0404045c0c7c640c795c147c5c047c5c0474640c795c0c7c5c0c7c5c0c735c0c735c0c73540c7c -5c0c735c04745c04745c0474500464ac99a7e6aa875c0460540b74540b74540b6cf9ebb6ab5f70 -5004645004645c0c735c046c540b6c5c0c73500464540b74540b745c147c5c0c73540b74540b74 -540b74500464540b74540b745c0c73540b6c4c086c540b745c0c735c0474540b74540b6c540b6c -540b6c540b6c4c086c540b745004645004644c086c5c0c735004644c086c4c086c4c0b744c086c -4c0b74500464540b6c540b6c540b6c540b6c4c086c540b744c086c4c0b744c0b744c086c4c086c -4c086c540b74540b744c086c440458540b74541574540b74540b6c540b6c541574541574540b74 -4c0b74540b6c4c086c540b7455146c541574541574541574040404 -0404045c0c735c0c7c6414745c0c735c0c735c0c7c5c0c735c15745c0c735c0c735c0c735c0c73 -5c15745c0c735c0c735c0c73500464b89898f8d0946f175c50046450046494788fe9b89981205c -540b745c0c735c0c735c0c735c0c735c15745c0474540b6c6414745c0c73540b6c540b6c540b6c -5c0c73540b745004645c0c73540b6c5c0c735004645c0c73540b6c540b745c0c735c1574540b6c -540b74540b6c540b74540b6c5c0c735c0c73500464540b6c540b74540b6c5004645c0c735c0c73 -500464540b74540b74540b6c540b6c4c086c540b6c5c0c73540b74500464500464500464540b74 -500464540b6c500464500464540b74540b74540b6c540b6c540b6c540b6c540b74540b74541574 -541574540b745c1574540b74541574540b6c5c15745c1574040404 -0404046414745c147c6414746414745c0c7c640c795c0c735c0c73540b6c540b6c5c0c735c0c73 -5c0c735c0c73540b6c5c0c735c04745c1c7cb89898d7aaa794788fa48899b7898f773372540b74 -5c0c735c0c735c0c735c0c735c15745c1574540b6c5c0c73540b6c5c0c73540b74540b6c5c046c -5004645c0c735004645c0c73540b6c5c15745c1574540b74540b6c540b6c540b6c5c15745c1574 -5c1574540b74540b6c540b6c5c1574540b74540b74500464540b6c5c15745c0c73540b6c540b6c -540b6c540b6c540b6c540b6c540b6c540b6c540b74540b6c540b6c540b74540b6c540b74540b6c -540b6c4c086c540b6c540b74500464540b6c540b6c540b6c4c086c540b6c540b6c540b6c540b6c -54157454157454157455146c541574541574540b74541574040404 -0404046414745c0c7c5c0c7c6414745c0c735c0c735c0c736414745c0c735c0c735c0c735c0c73 -540b745c0c735c0c73540b745c0c735c0c73540b6c6c1c7c6b37796a29765c04745004645c0c73 -5c0c735c0c735c0c735c15745c15745c0c735004645c0c735c1574540b6c5c0c73540b6c5c0c73 -540b745c0c735c0c73540b745c1e6c5c1574540b74540b6c5c1574540b745c0c735c1574540b6c -5c15745c15745c15745c0c73540b74540b6c540b6c540b6c500464540b74540b6c540b745c1574 -540b74540b6c540b6c540b74540b6c540b6c540b74541574540b6c540b6c540b6c540b6c540b6c -540b74540b6c4c086c540b6c540b6c540b744c086c541574540b74540b6c4c086c5c157455146c -54157455146c5c15745c15745c1c7c54157455146c5c1574040404 -0404045c0c7c5c0c7c6414745c0c7c641474641a7c6414745c0c735c0c735c15745c0c73540b6c -5c0c735c0c735c0c73540b6c540b6c5c0c735c0c73540b6c5c046c5c0c73540b6c5c04745c046c -5c0c73540b6c540b745c15745c0c73540b6c5c0c735c0c735c0c735c0c73540b745c0c73540b6c -540b6c540b6c5c1574540b6c5415745c15745c0c735004645c0c735c0c735c15745c15745c0c73 -540b6c540b6c540b74540b6c540b6c5c0c73540b74540b6c540b6c540b6c5c15745c15745c1574 -540b6c540b6c540b6c540b74540b6c540b745c1574540b74540b6c540b744c086c540b6c540b6c -540b6c540b6c540b6c540b6c540b6c54157454157455146c540b6c540b74540b6c540b7455146c -55146c5415745415745c24795c1574541574541574541574040404 -0404045c0c735c0c735c147c640c795c147c5c0c736414746414746414745c0c735c0c735c0c73 -5c0c735c0c73540b745c0c735c0c735c0c735c0c735c0c735c0c735c0c73540b6c540b6c540b6c -5c0c735c0c736414745c0c73540b745c0c735c0c73540b6c5c0c73541574540b6c540b6c5c046c -540b6c540b6c5c0c735c0c735c0c735c15745415745c15745c1574540b74540b6c5c0c73540b74 -540b6c540b6c540b6c540b6c5c0c73540b74540b6c540b6c5c0c73540b6c541574540b6c5c1574 -5c1574540b6c540b745c1574540b74540b6c540b6c540b6c540b74540b6c540b74540b74540b74 -540b6c540b74540b6c540b6c540b74540b6c540b6c541574540b6c540b6c540b74541574540b74 -540b7455146c5c2479541c6c5415745415745c15745c1574040404 -0404045c0c735c15745c0c735c0c735c0c735c0c736414745c147c5c147c5c0c735c0c735c147c -5c0c735c0c735c0c735c0c73540b6c6414745c0c73540b6c540b6c5c0c73640c79640c79641474 -5c0c735c0c735c15745c157455146c5c15745c15745c0c735c15745c0c73540b74540b6c540b6c -5c046c540b74540b6c540b6c540b6c540b6c5415745c15745c15745c15745c1c7c5c1574540b6c -540b74540b6c540b6c540b7455146c540b74540b6c540b6c5c15745c0c735c1574540b6c540b6c -541574540b6c540b6c5c0c73540b6c540b6c4c086c540b6c5c1574540b6c5415745c1574540b6c -540b6c540b6c540b744c086c540b6c540b6c4c146c541574540b74540b6c55146c541574540b6c -5415745415745415745c15745c1574541574541574541c6c040404 -0404046414746414746414745c0c7c5c0c735c0c735c0c7c5c0c735c0c735c0c73540b745c0c73 -5c0c73540b6c640c79540b6c5c0c735c0c735c0c735c0c735c0c735c0c73540b6c540b745c0c73 -5c1574540b6c540b74540b6c5415745c15745c0c73540b6c540b74540b6c540b6c5004645c0c73 -540b6c5c0c735c0c73540b74540b6c5c1574540b6c5c15745c15745c15745c157455146c5c1574 -540b6c540b6c5c15745c0c735c0c73540b6c540b6c540b6c5415745c15745c1c7c5c15745c1e6c -5c1574541574500464540b6c4c086c540b6c540b6c540b6c540b6c540b6c500464540b745c1574 -540b6c540b745c1574540b74540b6c540b7455146c55146c540b6c540b74541574541574540b6c -540b6c5c24795c24795c24795c2479541c6c5415745c1c7c040404 -0404046414745c147c6414745c147c5c0c735c0c735c0c735c0474540b745c0c735c0c735c0c73 -5c0c735c0c73660b65540b6c5c0c735c0c73540b6c5c0c73540b6c540b6c5c0c735c0c73540b6c -540b745c0c735c0c73540b6c540b745c15745c15745c1574540b6c540b6c540b6c5c0c73500464 -5c0c73540b6c5c0c73500464540b6c5c15745c1574540b6c540b6c5c1574540b6c5c15745c1574 -540b6c5c0c73540b745c1574540b6c5c0c73540b6c5c0c73540b745c0c735c15745c15745c1574 -5c15745c15745c0c73540b6c540b6c540b6c540b74540b74540b6c540b74540b6c540b6c540b6c -540b74540b6c540b6c540b6c540b6c540b6c541574541574540b6c540b6c540b745415744c086c -55146c5c15745415745c15745c24795c1574541574541c6c040404 -0404045c0c736414745c0c7c5c0c7c5c0c735c0c7c5c0c73540b745c0c735c04745c04745c0c73 -5c046c5c0c735c0c735c0c735c04745c0c735c046c540b6c5c04745c0474540b745c046c540b74 -540b6c540b6c5c0c735c0c7350046454047c5c0c73540b745c046c540b6c5c046c540b6c5c0c73 -540b745c15745c0c73540b745004645c0c73540b6c5004645c0c735c0c735c15745c15745c1574 -540b6c5c0c73500464540b745c0c73540b6c540b745c0c735c15745c157455146c5c0c73541574 -5c1574540b6c5415745c0c73540b6c540b6c540b74540b6c540b74500464540b74540b74540b6c -540b6c540b6c540b74540b6c540b6c4c086c55146c55146c540b7455146c540b6c55146c540b6c -55146c54157455146c54157454157454157455146c541574040404 -0404045c0c735c147c5c0c7c6414745c0c735c147c5c0c735c0c735c0c735c0c735c0c735c0c73 -5c0c73540b6c5c0c735c04745c0c735c0c73540b6c5c0c73540b74641c746b37796b3779792666 -540b6c5c0c735c0c735c0c736b3779773c7c6414745c0c73540b745c0c73540b6c540b6c540b74 -540b745c1574500464540b74540b6c5004646a29767c4b8269256b5c0c735c157455146c540b6c -500464540b746b3779773372540b745c0c73540b6c5c15745c1574540b6c5415745c15745c1574 -540b6c540b6c540b6c54157455146c55146c540b74540b745415746b377955146c540b6c540b74 -540b6c540b6c540b6c540b74540b6c540b6c54157455146c4c1575540b6c4c086c4c086c540b74 -55146c54157455146c540b6c55146c540b7455146c540b6c040404 -0404046414746414746414745c0c735c0c735c0c7c6414745c0c735c0c735c0c735c0474640c79 -5c0c73640c795c046c5c0c735c0c735c0c735c0c73540b6c540b747c4b82e7c7a5874d7ab8a8a7 -a37483500464540b74540b7494788fd69986500464540b74540b6c540b74500464540b74540b74 -540b74540b74885b876817694c0b74885b87b7898f7c4b82b7898f681769540b74540b745c0c73 -5c04744c086cb89898a374835004644c086c540b745c0474540b74500464500464540b74540b6c -540b6c540b74540b6c540b7494788f8f416b4c086c4c086c6a2976d8b7a88a2f62540b74541574 -540b6c540b74540b6c540b6c540b74540b6c541574541574540b6c55146c54157455146c5c1574 -5415745415745c1574541574540b7455146c540b74541574040404 -0404045c147c6414745c147c5c0c736414745c15745c0c735c147c5c15745c0c735c0c735c0c73 -640c795c0c735c0c735c0c735c0c735c0c735c0c735c0c7c5004646b3779e9b89964105c94788f -d88e7d640c797c4b82874d7a7c4b82d69986885b87874d7a540b6c773c7c885b876a2976773c7c -874d7a874d7ad8b7a88f416b4c0b74b89898ab5f70540b6c69256b55146c773c7c874d7a681769 -5c24797c4b82c89997ab5f705c1e6c7c4b827733726817696a2976885b876b3779773c7c69256b -5c24796817696b3779773c7c773c7c69256b5c1574885b87773c7cc9a7997733726b37796a2976 -540b6c55146c540b7455146c540b6c540b74541574541574540b74540b7455146c540b74541574 -5c1574541574541574541574541574541574541574541574040404 -0404045c15745c147c6414746414745c147c5c0c735c0c735c0c735c0c735c0c735c0c735c0c73 -5c0c73540b6c540b6c5c0c735c0c735c15745c15745c0c735c04746b3779d8b7a8b89898b7898f -6a2976b7898f773372a48899d7a899d7a899885b87c8a9a7c89887ae7b74a37483d7a899c5b699 -c89887a37483d8b7a8ab5f70540b747c4b82c8b7a8c8a9a7a37483a37483a37483a48899c89887 -b98680773c7cc8a9a7b98680b7898f874d7ad7c8a8b7898fb99886885b87d9b899d9b8998f416b -a48899ab5f70885b87b98680b5a898a37483a37483885b87a37483c89997a37483a374836b3779 -55146c541574540b6c540b6c540b6c540b6c540b6c55146c540b7455146c540b6c55146c540b6c -5415745c1574540b6c5c157455146c541574541574541574040404 -0404045c0c735c0c735c147c6414745c0c7c640c795c0c735c0c735c0c735c0c73640c795c0474 -5c04745c0c735c0c735c0c735c0c736414745c15746414745c04746b3779e6aa9da37483d7a899 -773372e6b8ab64105c885b87f7c7a8d88e7d44045894788ff9ebb6b7898f7c4b82874d7ac89997 -8f416b4c086cc9a799792666540b7468176955146c6b3779d8b7a8fad9a5a374837c4b82b8a8a7 -d6998644045894788fb7898fc89997885b87a37483a37483d7a8997c4b82936f72a48899c78c82 -b7898fd7a899a3748369256ba69798d7a899a37483500464541574c9a799e7c7a5874d7a4c086c -540b7455146c541574540b6c540b74540b6c540b74541574540b6c541574540b6c4c086c55146c -540b6c541574540b6c540b6c55146c54157455146c55146c040404 -0404045c0c735c0c735c0c735c0c7c5c0c735c0c73640c795c0c735c15745c0c735c0c735c0c73 -5c0c7c5c0c735c0c735c0c735c0c735c0c735c0c73540b6c5c04747c4b82e7c7a579266694788f -c9a799d9b899ab5f7094788fb98680d9b899874d7aa37483a37483c89997874d7a773c7cc19ba5 -ab5f705c0c73c8a9a7a37483540b74a37483a374837c4b82a88786b7898fc89887773c7c874d7a -d7aaa7936f72c19ba5b98680a69798c8a886885b87885b87d9b899874d7a7733726b3779e7c7a5 -792666ac99a7ca8377540b6cb8a8a7c89887c9a799874d7a773c7cc5b699ae7b74c9a799ab5f70 -540b74540b6c541574541574541574540b6c540b6c540b744c146c540b6c54157455146c4c086c -55146c5415744c086c55146c540b74541574541574541574040404 -0404045c0c735c0c735c0c73641474640c79640c795c0c7c5c0c736414745c0c735c0c735c0c7c -5c0474540b6c540b745c0c73540b6c5c0c735c0c735c0c735c0c736c1c7c773c7c6a29765c0c73 -773c7c6a29767c4b82773372641474773c7c874d7a640c79540b74773c7c7c4b826a2976773c7c -6b3779500464773c7c7c4b825c157464257c7c4b827c4b82641474540b747c4b827c4b82641c74 -6b3779885b87773c7c885b87c89887885b87b89898c78c826b3779885b876b3779541574773372 -540b6c6b37796a29765c15747c4b82773c7c773c7c885b87773c7c7c4b826a29766b37797c4b82 -540b6c540b6c540b6c540b6c540b6c540b6c540b744c086c540b6c4c086c540b6c540b6c540b6c -5415745c1574541574540b6c541574541574540b744c146c040404 -0404045c0c7c5c0c735c0c736414745c0c7c640c796414745c0c73540b745c0c735c04745c0474 -5c0c735c04745c046c5c04745c0c735c04745c0c735c04745004645c0c735004645c04745c0474 -500464540b74540b745c04745c0c73540b744c086c5004645c0c735004645004645c0c73540b74 -5004645c0c7c500464540b745c15745c0474500464540b745c0c735c0c73540b74540b6c540b74 -540b7450046455146c6b3779c8999768176994788f874d7a500464540b74500464540b6c4c086c -5c157455146c540b6c540b6c4c086c540b6c540b6c4c086c540b6c4c0b744c0b745415744c086c -4c0b74540b6c4c086c540b6c4c086c540b6c540b6c4c086c540b6c540b6c540b744c086c55146c -541574541574540b6c540b6c54157454157455146c541574040404 -0404045c147c5c0c735c0c7c5c04745c0c735c0c735c0c7c5c0c735c0c735c0c735c0c7c5c0474 -5c04745c0c735c0c735c046c5c04745c0c735c0474540b745c0c735c0c735c04745c04745c0474 -5c04745c046c5c04745c046c540b74540b6c540b6c5c1574540b745c0c735c147c5c0c735c046c -540b745004645c0c735415745c0c73500464500464540b6c540b6c540b6c540b74541574540b6c -540b6c5415745c157455146c6b37797c4b826b37795c04745c0c73540b6c540b74540b6c5c1574 -540b6c540b6c540b6c540b74540b6c540b7455146c55146c500464540b6c540b6c55146c540b6c -500464540b74540b6c540b6c540b6c540b6c4c086c540b6c4c086c540b6c4c086c5c1574541574 -540b6c541574540b6c4c146c55146c540b6c5415744c146c040404 -0404045c0c735c147c640c795c0c735c0c73640c795c0c735c0c735c0c735c0c735c04745c0c7c -5c0c735c0c735c0c735c0c735c0c735c04745c0c735c046c5c0c735c04745c0c735c0c735c0474 -5c0474540b74540b745c04745c0c735c0474540b745c0c735c1574540b6c5c15745c15745c0c73 -5004645c0c73540b745c15745c0c73540b74540b74540b6c540b6c540b6c5c0c73540b6c5c1574 -540b6c5004645c1574540b74540b74500464540b745415745c15745c1574540b6c5c1574541574 -540b6c540b6c540b6c540b74540b6c540b74540b6c5c0c73540b6c4c086c55146c540b74500464 -540b6c4c086c540b6c5004644c086c540b6c500464540b6c540b74540b6c540b6c540b6c540b74 -540b6c541574540b6c540b745415744c086c55146c541574040404 -0404045c0c735c147c6414745c0c7c5c0c735c0c73640c795c0c7c5c0c7c5c0c7c5c04745c0c73 -5c0c735c0c735c0c73540b745c0c735c0c735c04745c0c735c04745c0c735c0c735c04745c0474 -5c0474540b745c0474540b745c04745c04745c0c735c0c73540b745c0c73540b6c5c0c73540b6c -5c0c735c0c735c0c735c0c73540b6c540b6c5c04745c15745c1574540b6c540b6c5c0c735c0c73 -5c15745c1574540b6c540b6c540b6c5c0c73540b6c540b6c5c15745c15745c15745c1574540b6c -540b6c540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b7454157455146c540b74 -500464540b6c540b6c4c086c540b6c540b6c540b74540b74541574540b6c540b74540b6c540b6c -540b6c540b6c4c086c541574541574541574541574541574040404 -0404045c0c735c0c735c147c5c0c7c5c0c735c0c735c0c735c0c735c15745c0c735c0c735c0c73 -5c0c735c0c73540b745c0c73540b745c04745c0c735c0c735c04745c0c735c0c735c0474540b74 -5c04745c04745c04745c04745c0474540b74540b745c0c735c1574540b6c540b74540b6c5c046c -5004645c04745c0c73540b74500464540b74540b6c5c0c7355146c540b745c0c73540b6c540b74 -5c15745c24795c0c73540b6c540b6c540b6c540b6c540b74540b6c5c15745c15745c1574540b74 -5c15745c1574540b6c540b74540b6c540b6c4c0b74540b74540b6c540b74641c74541574540b6c -540b74540b6c4c086c540b6c4c086c540b6c540b6c540b74540b6c540b6c540b6c540b6c540b6c -540b6c4c086c55146c540b6c541574540b6c55146c55146c040404 -0404045c0c735c0c7c5c0c735c0c735c0c735c0c73540b745c0c735c0c735c0c735c0c735c0c73 -5c0c735c0c735c0c735c04745c0474540b745c04745c0c735c0c735c0c735c0c735c04745c0474 -5c0474540b745c046c540b74540b745c04745c0474540b745c1574540b745c0c735c0c73540b74 -540b74540b74540b745c0474540b745004645c0c735c1574540b74540b6c540b74540b6c540b6c -5c0c735c15745415745c0c73540b6c540b6c540b6c5c0c735c0c735c15745c1574541574540b74 -540b6c540b6c540b74540b6c540b74540b6c540b6c540b6c540b6c540b6c541574540b6c540b6c -540b6c540b6c540b6c4c086c500464540b6c540b74540b6c540b74540b6c4c086c540b6c540b6c -540b74540b74540b7454157455146c541574540b6c541574040404 -0404045c147c6414745c0c7c5c0c735c0c735c0c736414745c0c735c0c735c0c735c0c73540b74 -5c0c73640c795c0c735c0c735c0c735c046c5c0c735c046c5c04745c0c735c04745c0c735c0c73 -5c04745c046c5c04745c04745c04745c0474540b745c0c735c0c735c0c73540b745c0c73540b74 -5c0474500464540b745c046c540b745c0c73540b745c15745c0c73540b6c540b6c5c0c73540b6c -540b6c5c1574540b74540b74540b74540b6c5c0c73540b6c540b6c5c147c5c1574540b6c540b6c -540b6c540b74540b6c540b6c540b6c540b74500464540b6c540b6c540b74540b6c55146c540b6c -540b6c540b74540b6c540b74540b74540b6c540b6c540b6c540b6c540b6c540b6c540b6c540b74 -54157455146c4c086c541574540b6c541574540b6c541574040404 -0404045c1574641a7c641a7c5c0c735c0c735c0c735c0c7c5c0c735c15745c0c73540b745c0c73 -5c0c735c0c735c0c735c0c735c0c735c0c735c046c540b745c04745c0c735c0c735c0474540b6c -5c0c735c0c735c0c735c0474540b745c0474540b74540b6c540b6c5c04745c0474500464540b74 -5c0c735c0c735c0474540b745c0474540b6c540b6c540b74540b6c540b6c540b6c540b6c540b74 -5c0c73541574540b6c5c0c73540b6c540b6c5415745c1574540b6c540b6c5c1574541574540b6c -540b6c540b74540b74540b6c540b6c5c1574540b74540b74540b6c540b6c4c086c5c15744c146c -5c1574541574540b6c540b74540b6c540b6c4c086c540b6c4c086c540b6c4c086c540b6c540b6c -540b6c540b6c55146c540b6c540b7455146c541574541574040404 -040404641a7c641a7c641a7c64257c6414745c147c5c15745c0c735c0c735c0c735c0c735c0c73 -5c0c735c04745c0c735c0c735c0c735c0c735c04745c04745c0c735c04745c047c5c0c735c0c73 -5c0c735415745c1574540b74540b74540b74540b6c5c0c735c046c540b6c540b6c5c0c735c0c73 -5c15745c147c540b745c0474540b6c540b745c04745c046c5c0c73540b6c540b745004645c0c73 -540b6c540b6c5c0c73540b6c5c0c73540b74540b6c540b6c540b74540b6c5c0c73540b6c540b74 -540b6c540b6c5c1574540b6c540b6c540b6c540b6c540b6c540b74540b6c500464541574540b74 -55146c540b74540b6c540b6c540b6c540b6c540b6c4c086c540b6c54157455146c55146c4c086c -540b6c4c1575540b6c541574541574541574541574541574040404 -0404045c15745c147c641474641474640c795c0c735c15745c0c735c15745c0c735c0c735c0c73 -5c0c735c0c735c04745c0c735c0c7c5c0c735c0c735c0c735c04745c04745c0c735c0c735c0c73 -5c0c735c046c5c0c735c046c5c04745c0c735c0c73540b6c5c0c735c0c735c0c735c15745c1574 -5c0c735c0c735c04745004645c0474540b74540b6c540b745c0c73540b6c540b6c5c0c73540b6c -5c0c73540b745c0c735c1574540b6c5c15745c0c73540b6c5c15745c1574541574540b6c5c1574 -541574540b6c540b74540b74540b74540b6c540b6c5c15745c1574540b74540b6c540b7455146c -540b6c540b6c540b6c540b74540b6c540b6c4c086c540b6c5c15744c086c5415744c146c55146c -540b6c540b6c4c086c540b7454157454157455146c5c1574040404 -0404046414746414745c147c5c147c5c147c5c147c6414745c15745c0c735c0c735c0c735c0c73 -5c0c735c046c5c0c735c0c73540b745c0c735c04745c04745c0c735c0474540b745c04745c0c73 -5c0c735c0c735c0c73540b745c0c735c15745c0c735c0c73540b74540b6c540b745c0c73541574 -540b6c5c0c73540b745c0c73540b745c04745c0c735c0c73540b74540b74500464540b6c5c0c73 -5c0c73540b6c540b74540b6c5c0c735c1574540b74540b745c0c73540b6c5c1574540b74540b6c -540b6c540b7455146c540b6c541574540b74540b745c15745c1574540b6c540b74540b74540b6c -541574541574540b74540b6c540b74540b6c540b6c540b6c540b7455146c4c086c5415745c1574 -4c15754c0b745415744c086c4c146c55146c540b7455146c040404 -040404641a7c5c0c7c5c147c5c15746414745c15745c147c5c0c735c0c735c0c735c15745c0c73 -540b6c540b6c540b6c5c0c735c0474540b745c04745c0474540b745c0c735c0474540b745c0c7c -5c047c5c0c73540b745c0c735c0c735c0c735c15745c157455146c5c0c735c1574540b6c5c0c73 -5c1574540b745c0474540b745c0c73540b6c5c0c73540b6c5c0c73540b6c5c0c735c15745c1574 -540b6c540b6c540b6c540b745c0c73540b74540b74540b6c540b74540b6c5c15745c1574540b74 -540b6c5c1574541574540b6c540b6c540b6c5c157455146c540b74540b6c5c15745c0c73540b74 -540b6c540b6c540b745c1574540b74540b6c540b6c540b74540b6c540b6c5415745c157455146c -4c086c540b6c540b74540b6c540b6c540b7455146c541574040404 -0404046414746414745c1574641a7c641474641a7c5c147c540b6c5c0c735c15745c0c735c0c73 -6414745c0c735c04745c0c73540b6c5c04745c0474540b745c04745c046c5c0c735c04745c0474 -5c0c735c0c735c0c73540b745c0c735c147c5c0c735c0c73540b745c0c735c0c735c0c735c0c73 -5c0c735c0c73540b745c046c540b74540b74540b6c5c0c735c0c73540b6c5c1c7c5c147c5c1574 -5415745c0c735c0c73540b6c540b6c540b6c540b74540b74540b6c5c0c735c0c735c0c73541574 -5c15745c15745c15745c1574540b745c15745c1574540b6c540b6c540b74541574540b6c540b74 -55146c540b74540b6c5c1574540b74540b6c4c086c540b6c540b6c540b6c55146c541574541574 -5c157454157455146c5415745415745415745415744c1575040404 -0404046414745c0c7c641a7c64257c6727846414745c0c735c0c735c147c5c0c735c0c735c0c73 -5c147c5c0c735c0c73540b745c0474540b745c0c73640c795c04745c04745c0c735c0c7c5c0474 -5c0c735c0c735c0c735c0c735c0c735c0c735c0c73540b745c0c735c0c73540b6c5c0c73540b74 -5c0c7c540b745c046c540b74540b6c540b6c5c0c735c15745c0c735415745c15745c15745c1c7c -5c15745c0c735c0c73540b74540b74540b74540b6c540b6c5c0c73540b74540b6c540b6c540b6c -5c1574541574540b7455146c5c15745c15745c1574540b74540b6c540b6c540b6c540b745c1574 -540b74540b6c540b745c1574540b74540b6c540b6c55146c540b74540b74540b6c54157455146c -5415745c157454157455146c54157454157454157455146c040404 -040404641a7c641a7c64257c64257c641a7c641a7c5c0c7c5c0c735c0c735c0c7c5c0c735c0c7c -5c15745c0c735c04745c0c735c046c640c79540b6c5c0c735c0c735c046c640c795c0c735c046c -540b745c0c735c0c735c0c73540b6c5c0c73540b745c0c735c0c735c0c735c0c735c0c735c0c73 -5c0c73500464540b745c0c735c15745c0c73540b6c540b745c0c7355146c5c15745c15745c1574 -5c1574540b745c15745c15745c0c735c0c73540b6c540b745c1574540b6c5c0c735c0c73541574 -5c15745c15745c1574540b74540b6c5c0c735415745c1574540b6c540b74540b6c540b6c540b6c -5c15745c1574540b6c540b74540b6c540b6c540b6c540b74540b74540b74540b6c540b6c5c1574 -5c157454157454157454157454157455146c541574541574040404 -04040464257c5c1c7c64257c641c74641a7c5c15745c15745c15745c0c735c0c735c0c735c0c73 -5c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c0c735c15745c0c73 -5c0c735c15745c1574540b6c540b6c5c0c735c0c73640c795c0c73540b6c5c0c735c0c735c1574 -5c15745c0c7c5c0c735c04745c15745c0c73540b745c15745c15745c0c73641c745c15745c1574 -55146c5c15745c15745c1574540b745c0c73540b746414745c1574540b6c5c15745c157455146c -5415745c15745c15745c1574540b6c5415745c15745c15745c1574540b6c540b6c5c1574540b74 -540b6c5c1574540b74540b6c540b6c540b74540b6c5c15745c1574540b74540b6c540b74541574 -54157455146c540b7455146c541574541574541574541574040404 -040404641a7c641a7c641a7c5c147c5c15745c147c6414745c0c7c54147c540c7c540c7c540c7c -5c0c7c540c7c540b74540b74540c7c540c7c540c7c540c7c54047c54047c540c7c540b74540b74 -54147c5c0c7c540c7c540c7c540c7c540c7c540b74540b74540c7c540c7c540b744c0b745c147c -540c7c540c7c540b74540b74540b74540b74540c7c54157454157454147c54147c5415745c1574 -5c1574541574540b744c0b7454147c540c7c540c7c54147c540b7454157454147c541c7c54147c -5c1c7c5415745415744c0b744c0b7454147c54147c540b744c0b74540b74540b74540b74540b74 -4c0b744c0b74540b74540b744c0b744c086c4c15754c0b744c0b744c15754c0b74540b744c1575 -541574540b6c55146c541574540b6c54157455146c541574040404 -040404641a7c641a7c6414746414746414745c147c5c147c681769b0254eb0254eb0254eb0254e -b0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254eb0254ea52357 -a52357b0254eb0254ea52357a52357a52357a52357a52357a52357a52357a52357a52357a52357 -a52357a52357a5235799275ea52357a52357a5235799275ea5235799275e99275e99275e99275e -99275e99275e99275e99275e99275e99275e8d1d5c99275e99275e8d1d5c99275e99275e99275e -99275e8d1d5c8d1d5c8d1d5c8d1d5c8721648d1d5c8721648d1d5c872164872164872164872164 -87216481205c872164872164781a66872164872164872164781a66781a66781a66781a66781a66 -5c1574541574540b74540b6c541574541574541574541574040404 -040404641a7c5c147c5c147c6414745c147c6414745c147c8d1d5ccd342a852415852415472415 -852415472415852415472415852415852415472415852415852415852415852415852415852415 -852415852415852415852415852415852415852415852415852415852415852415852415852415 -852415852415852415852415852415852415852415852415852415852415852415852415852415 -852415a82916852415a82916852415a82916852415a82916852415a82916b63024b63024852415 -a82916852415a82916a82916a82916a82916b63024a82916a82916a82916a82916b63024b63024 -a82916b63024a82916a82916b63024b63024b63024b63024b63024b63024b63024cd342adb3738 -81205c54147c541574541574541574540b6c5c157455146c040404 -040404641a7c641c745c147c5c147c641474641a7c54147c8d1d5ccd342a141c104d3d2c5d4c36 -5d4c366c545646423b5d4c36472f223d363051524b45535b30444339291f3d363030444345535b -30444339291f3d363045535b51524b51524b472f2251524b45535b51524b40474b4d3d2c4d3d2c -51524b51524b595c59675f464d3d2c5d4c3645535b40474b51524b4d3d2c51524b51524b51524b -675f4651524b51524b45535b595c5951524b46423b40474b40474b40474b51524b51524b40474b -40474b3d363039291f46423b30444340474b3d363039291f304443302f2a30444319271c302f2a -304443302f2a3d3630302f2a302f2a3044433d3630302f2a39291f39291f19271c141c10b63024 -8d1d5c4c0b7455146c540b74540b6c55146c540b6c55146c040404 -040404641a7c64257c64257c6414746414746414745c147c8d1d5ccd342a39291f4d3d2c8c6540 -a37483b99886d9b899666178815a556f596f9588a7d9d5b85f6b976c5456666178a8b1c9dad4a8 -7472977a687994788fc6c2cae8bb88a48899b98680c7abb5d8c7b8e8bb88d8b9b7e6aa87f7be9a -d8b9b7efad93f7c8c8f7c7a8f6c5b7d7aaa7d7aaa7f5eae7f9ebb6f8ecd8d8b9b7c8a9a7fcf8e7 -f7d8b8f8ecd8d8b7a8e6aa9df7c8c8f6c5b7f6c5b7c7b8b7e6b8abe6b8abe6aa87e6b8abe8dab9 -d8b9b7c19ba5c78c82c19ba5d8c7b8c8b7a894788f92655f82839bccd6c69897a86c5456815a55 -747297c6c2ca878aa77a687992655f7a6879c8a886a48899a37483675f465d4c364d3d2ca82916 -8d1d5c4c0b74540b74541574541574540b744c146c541574040404 -040404641a7c64257c641a7c641a7c5c147c5c147c5c147c8d1d5cb63024472f225d4c3619271c -565b68a37357c78b4f5c495a40474b4b4b6492655fa373575c495a45535b4b4b647c6267ae845d -6f596f565b687a6879be8b70d2966d7b7779595c59a48899d69986df9b5ac898877a6879c19ba5 -e6aa87e6aa87e6aa9d7b7779e6b8abe7c7a5f7be9ad8c7b8878283e8d8d8e9d8c8e9d8c8c6c2ca -878283e7c8c8e6b8abf7c7a8c8a9a7878283f6c5b7d9b899e6b8abc89997878283d7aaa7efad93 -d9a887a48899696f7aa48899d9a887be8b707a68795a6889776a86c898877c6267535f83565b77 -605170c8a886936f72565b774b4b646c5456d2966dae7b74666178302f2a8c654046423bb63024 -8d1d5c540b745c15745c0c73540b6c541574540b745c1c7c040404 -040404641474641a7c641a7c6414746414745c147c5c147ca52357a8291639291f92655f45535b -3d363092655fc78b4f92655f565b6840474b815a55ae845d40474b45535b4b5967675f46be8b70 -6051704b5967605170be8b70c8988778798859667894788fc78d61df9b5ab8989870706aa69798 -d88e7de8bb88d7aaa770706ad8b9b7e6aa9de7c7a5c8a9a77b7779e8d8d8d7a899e9d8c8d7c8c8 -7b7779e6b8abe6aa87e7c8c8b8a8a7878283e6b8abe6aa87e9c8b8a48899696f7ac89997f0ac7d -d699867b7779596678a37483d69986ae7b74596678565b776f596fae98706c5456565b774b5976 -5c495aa373577c62674b4b64666178936f72c78d6192655f40474b616568a887865d4c36a82916 -8d1d5c4c1575540b74541574540b745415745415745c1574040404 -0404045c147c6414746414745c0c7c5c147c5c15745c0c7c8d1d5ca829163d3630878283936f72 -5d4c36827668d9a8878f8b977c62675c495a878283c8a88666617840474b565b77a59887c5b699 -776a86815a55878283b8a8a7c8b7a8a37483be8b70ac99a7ca8377df9b5ad69b98d69986d6acb4 -d7a899d7aaa7e6b8abe9c8b8f7c8c8d88e7dc89997f6c5b7f8ecd8f5eae7b98680c8a9a7f7c8c8 -f8ecd8f7c8c8c78c82d7aaa7f6c5b7f7c8c8f7c8c8d69b98d3bac4d7aaa7d8b9b7d8b9b7efad93 -c7abb5b7898fb7898f999cb5d8c7b8999cb57a68797c6267747297d7c8a882839b565b685c495a -676a88c8b688867389605170936f729588a7d9b888766a4d815a55936f72a6979851524bb63024 -8d1d5c4c0b7454157455146c54157454157455146c5c1574040404 -0404045c15746414745c147c5c0c735c0c736414745c147c8d1d5ca82916472f22d9a887c78b4f -c78d61c8a671ae9870d9a887ab7b45c78d61b6a788a88786c8a6718c6540c8a671c5b699a69798 -e8bb88c78d61e9b899b9b7b4b5a898e8bb88d2966de9b899d8b7a8d7a899e6aa87f0ac7dd9a887 -d7a899d69b98e09e75efad93c89887c89997c89997c89887e7c8c8ae7b74c89887c78c82a59887 -e7c8c8c78c82c78c82d69986c89887e9b899d7a899d7aaa7d7a899e6aa87f7be9ae6b8abd8b7a8 -d8b7a8e6aa87e6aa87e9c8b8c7b8b7cac4b7e9b899d2966de7c7a5a8a6a9cac4a7ae9870a37357 -d9b899988884c8b7a8be8b70a37357d9b899b89898d9b888d2966dd2966dc9a79940474bb63024 -8d1d5c4c15755c1574540b745415745c1574541574541574040404 -040404640c796414745c147c6414745c15745c0c7c5c0c7c8d1d5ca82916302f2a6c5456815a55 -92655fb99886b6a7886c54565d4c367a6879a48899b6a7887c6267815a557c6267a59887c8b688 -747297936f72936f72b8aab7c8a9a79588a7ca8377b98680c7b8b7d9a887b8aab7e6b8abd7a899 -c8a9a7d69986d7c8c8f7c7a8e9b899c8a9a7d69b98ebdae5f5eae7f6c5b7c89997c78c82e8d8d8 -f5ebf5f6c5b7c89997d69b98e7c8c8f7c7a8d7aaa7d7aaa7d7aaa7e7c8c8e6b8abc8a9a7d8b9b7 -ac99a7c8a9a7d88e7da48899cac4b7b8aab7a48899ae7b74988884d7c8a8a697987a687992655f -936f72c5b699a69798815a556c5456776a86c9a799b5a898a37357936f7287828346423bb63024 -8d1d5c4c15755415745c157455146c54157455146c541574040404 -0404045c147c6414745c0c7c6414746414745c147c5c0c7c8d1d5cb630244724155c495a40474b -6661788c6540a3735740474b4b4b64565b77675f46a373575c495a45535b4b5976a88786e09e75 -6f596f4b5967666178c9a799e09e7586738961656882839be6b8abf7bb86a488997a6879b8aab7 -e7c8c8f7bb86c8b7a8988884e7c8c8e7c8c8e7c8c8d8b9b7878283e7c8c8c6c2cad8b9b7e7c8c8 -878283e6c9d9e8d8d8e9c8b8c7abb57b7779d3bac4e7c7a5f7be9aac99a7787988c7abb5f8d094 -d7a899776a865a688994788fe9b899c78c82666178666178867389e8bb8892655f565b774b4b64 -5c495abe8b707a68795966784b59675c495ac78d6194788f7a68794b4b64815a554d3d2cb63024 -8721644c0b7454157455146c540b745c15745415745c1574040404 -04040467278464257c641a7c672784641a7c6414745c0c7c8d1d5ca8291639291f6c545640474b -304443815a55a3735751524b45535b45535b5d4c36ab7b457a6879595c594b4b64a37357d2966d -6f596f4b5967565b77d2966dd9a8877a68794b5967787988e6aa87f7c7a8988884565b688f8b97 -f7be9afad9a5b89898616568d3bac4e9c8b8f5eae7c7abb570706ae7c8c8e7c8c8e8d8d8c7b8b7 -616568c7b8b7f6d8c8f8ecd8a8a6a9696f7ad6acb4f7be9af6d8c882839b565b68b8a8a7f7c7a8 -e6aa9d696f7a4b5967a37483f0ac7dd88e7d6661784b5976936f72e09e7592655f4b5967696f7a -936f72ab7b45675f464b59675966786f596fa37357815a5545535b565b68936f7246423bb63024 -8d1d5c541574541574540b6c54157455146c541574541574040404 -04040464257c6a2976672784641a7c641a7c5c1c7c541c7c8d1d5ccd342a39291f696f7a6c5456 -5c495a936f72c8a67178798851524b4b4b64827668d9b56ab8989892655f5c495aae9870c8b688 -696f7a936f72867389b6a788c9a799878283b998869588a7b5a898e9c8b8ac99a7d8b7a8b9b6c0 -c9a799e9c8b8c7b8b7e8d8d8d8d7dad69986d8b9b7f7c8c8ebdae5ebdae5d69b98c8a9a7f7c8c8 -e8d8d8ebdae5e59b87d8b9b7e7c8c8e8d8d8d6c8d5f7be9ac7b8b7c8a9a7cac4b7a9a7baf7c7a8 -a9a7baa69798b8989882839bdac896999cb5867389a37483676a88dac8968673896f596fa37483 -c19ba5e8bb88867389565b776c5456787988d9b8997a687960517060517077809751524bb63024 -8a2f624c1575541574541574541574540b745415745c1574040404 -04040464257c64257c641a7c641a7c5c1c7c6414745c1c7c99275ea829163d3630dac896ae9870 -c78d61c5b699a59887d9b8888c6540c78b4fc8a671c8a671efad5ec78b4fd2966db6a788ae9870 -e8bb88df9b5af7bb86b5a898b5a898f8d094f7be9af7d8b8b9b6c0b9b6a8fad9a5fad9a5f7c7a8 -d8b7a8d7aaa7f7c7a8faecc9e6b8abd8b7a8e6aa9dd8b7a8e9e7e8d6acb4d69b98d69b98d7aaa7 -e8d8d8d8b7a8d7aaa7d7aaa7e6b8abf6d8c8e9c8b8d8b9b7e9b899f7c7a8f7d8b8f7d8b8b9b6c0 -d7c8c8f7d8b8f8d094fad9a5b9b6a8cac4a7e9b899f0ac7ddac896b5a898c8b7a8d9b888c78d61 -e8bb88c8b688d9b888c78b4fa37357d9b899b5a898c8b688c78d61c9a799b9b7b440474bb63024 -87216454147c5c15745415745c15745415745c1574541574040404 -04040464257c641a7c641a7c641a7c5c147c5c157454147c99275ecd342a3d36306775886c5456 -5c495a988884c8a6716c5456815a55a37357d9a887c8a671776a86ae7b74936f72a59887b6a788 -7b7779ae7b74936f72a8a6a9c5b6999588a7d7a899a48899b9b6c0c7b8b7ac99a7e7c7a5c89997 -c7b8b7d9b899c6c2cae9e7e8d8b9b7d6acb4d7aaa7ebdae5f5ebf5f7c8c8d7aaa7d69b98e8d8d8 -f5ebf5e6b8abd8b9b7d7aaa7d8d7dae9e7e8c8a9a7d7c8c8c19ba5d7c8c8e7c7a5a69798ccd6c6 -a8a6a9c7abb5e9b899a59887cac4a79fa19ac89997be8b70988884d9b899b5a898ae7b74ae7b74 -988884c8b688d9b899ae7b7492655f787988c8b688988884815a557b7779999cb540474bcd342a -8721645415745415745c1c7c5415745415745c15745c1574040404 -040404641a7c5c1c7c641a7c64257c6414745c15745c1c7c99275ecd342a39291f4b4b644b5967 -45535b675f46a373575c495a40474b867389a37357c78b4f7a68794b5967596678be8b70f0af71 -6f596f4b5967666178e9b899f6c77c778097565b77778097e9c8b8f8d09482839b696f7a999cb5 -f8ecd8f8ecd8b8aab7787988b9b6c0e8d8d8e9d8c8b9b6c0988884e6c9d9d8d7dae9c8b8d7c8c8 -988884d6c8d5f5eae7e9c8b8b8aab7787988b5c0d5f8ecd8d8b9b7787988676a88ac99a7faecc9 -d8c7b8676a885966789588a7fad9a5c8a886535f834b4b64936f72f0ac7db99886666178565b77 -776a86d2966db986808f8b97565b775c495ac78d6170706a4b5976565b777b777946423bb63024 -8721644c15755415745415745415745c2479541c7c541c6c040404 -0404045c147c641a7c641c745c24795c1574641a7c5c1c7c99275eb6302439291f565b684b5967 -4b4b64675f46ae845d60517045535b45535ba37357c78b4f7c62674b5967666178ae845ddf9b5a -c78c82616568666178e6aa87e8bb88776a8645535b687798e9b899fad9a582839b4b596782839b -f7d8b8f5eae7a9a7ba616568a9a7baf6d9d9f5eae7a8a6a9616568c6c2caf6d8c8f5eae7b9b6c0 -696f7ab9b6c0f6d9d9f5eae7ac99a7565b68b9b6c0f8ecd8e8d8d8696f7a4b5967a8a6a9fad9a5 -e9c8b8676a884b5967a48899f8d094e6aa9d6051707b7779c89997df9b5aca83775966784b5967 -867389d2966da373574b4b644b59676f596fae845d6c54564b5967565b775c495a39291fb63024 -8721644c15755c15745415745415745415745415745c2479040404 -040404641a7c64257c64257c641a7c64257c641c745c1c7ca52357a8291640474b7b777951524b -565b68988884c8b688666178815a556c5456936f72c8a671867389ae7b74936f72ae7b74efad5e -e6b8abd699867a6879ae9870c8a886778097c8a9a79588a7b5a898c8b7a882839bcbcdc0a9a7ba -c9a799e9d8c8a9a7bac6d2e1c8c9d8d7aaa7e7c8c8d7c8c8ebdae5ebdae5d69b98d8b9b7e7c8c8 -e9e7e8d6c8d5e6b8abd7c8c8b8aab7c8c9d8a9a7bae9d9a6b9b6c0999cb5b9b6c09588a7e9d9a6 -999cb5878aa7b8aab782839bdac896a48899867389d7aaa7d8b7a8efad5e988884867389a37483 -747297d9b899936f726f596f7c6267776a86dac8968f8b974b4b6460517082839b5d4c36b63024 -8721645415745415745c15745415745415745415745c2479040404 -040404641a7c641a7c64257c64257c641a7c5c1c7c5c1c7ca52357a8291646423bd7c8a8a37357 -ae9870c5b699a69798d9b888c78b4fd9b56ac8a671a59887d9b56adf9b5adf9b5ad9b56ac89887 -f0af71f0af71f8d094b5a898b6a788f8d094fad9a5fad9a5c8b7a8b5a898fad9a5f8ecd8f8ecd8 -c7b8b7c7b8b7f7d8b8fcf8e7f6d8c8d8b7a8d8b7a8f7c8c8fcf8e7d8b9b7e6aa9dd7aaa7d8b7a8 -f8f6f7f6d8c8e6b8abd8b7a8fad9a5fcf8e7e9d8c8c7abb5c6c2caf8ecd8f8ecd8e9d9a6b9b6a8 -cac4b7f9ebb6fad9a5e9d9a6b5a898c8b7a8fad9a5f7bb86f7bb86d7a899c8a671efad5ee09e75 -d9b899a69798c8b688e09e75d2966ddac896b5a898c5b699ae845db6a788cac4b740474bb63024 -8a2f6254147c5415745c1574541574541574541c6c5c2479040404 -040404641a7c641c74641a7c641a7c641a7c5c157454147ca52357a829163d36308673896f596f -6c5456988884c8b68886738992655f827668988884c8a6717c6267ae7b74d9a887e6aa87d69986 -988884d7a899a48899a69798b5a898878283d9b899a59887a8a6a9c8b7a8a9a7bad8d7daa9a7ba -b8aab7c7b8b7a8b1c9d8d7dab8a8a7d8b9b7d8b7a8c8c9d8e9e7e8d8b9b7d6acb4d7aaa7d2dae7 -e9e7e8c7b8b7d8c7b8c19ba5c8c9d8dbe1e7ac99a7d7c8c8a8a6a9b5c0d5e8d8d89fa19acac4b7 -a8a6a9c8a9a7dac896988884d9b888a8a6a9c89997e6aa9da69798d9a887e6b8abe6aa87c78c82 -867389c8b688a59887a37483ae7b748f8b97c8b7a8a69798936f7292655f9fa19a45535bb63024 -8721644c15755c15745c15745415745415745c15745c2479040404 -040404641a7c5c1c7c5c147c5c1574641a7c641a7c5c1c7c99275eb6302439291f6c5456565b68 -4b5967936f72c78d617c62674b59674b4b64ae7b74efad5e7c626745535b94788fe09e75f0af71 -988884565b77676a88e8bb88f8d094867389565b68687798e9d8c8faecc9878aa7596678687798 -e9e7e8f5eae7878aa7696f7aa9a7baf2f4eaf8ecd89897a870706ab9b6c0e9e7e8e9d8c8a9a7ba -7b7779a8b1c9fcf8e7e9d8c8999cb566617898a8c2f8f6f7e8d8d868779859667898a8c2fcf8e7 -d8c7b85a6889565b778f8b97f8d094d8c7b8676a88676a88a48899f7bb86e9b899a48899605170 -7a6879f0af71a88786535f83596678867389e6aa87936f724b597659667886738951524bb63024 -81205c5415745c15745415745415745c1574541574541574040404 -0404045c1c7c641a7c641a7c5c1c7c641a7c5c24795c1c7c99275eb630243d36307c6267565b68 -4b596792655fd9a8877a68794b5967605170be8b70f0ac7d7a6879565b684b5967b99886f7bb86 -867389565b778f8b97e8bb88f0af71e6b8ab70706a676a88e8dab9faecc97887a8596678687798 -d9d5b8f8ecd87b8db45966788896b8f6d9d9f2f4ea999cb5677588a8b1c9e8d8d8e9e7e89897a8 -696f7a999cb5f8ecd8e9e7e8878aa75a68898896b8faecc9c8c9d86877985966788896b8faecc9 -d8c7b8565b777b7779f7c8c8f7bb86f7bb868782834b59769897a8f8d094c78c824b59764b5967 -94788ff0af71b7898f596678565b77936f72d9a887a37483565b685966787c62674d3d2ccd342a -8721645415745415745c15745c15745415745c15745c1c7c040404 -0404045c1c7c641a7c641a7c641a7c641a7c64257c541c7ca52357b6302446423b988884a37357 -936f72b5a898c8b7a8988884ae7b749888848f8b97b5a898988884c89887a88786988884c8a886 -9897a8d9b899d9a887ca8377df9b5af7c7a8e9d8c8a69798988884c8b7a89897a8d8d7daa8b1c9 -b5a898b9b7b49897a8d2dae7a8b1c9c8b7a8c7b8b7b9b6c0dbe1e7c8c9d8d8b7a8d8b9b7c6c2ca -dbe1e7b5c0d5d7c8a8b9b6c0b9b6c0dbe1e7a8b1c9d7c8a8999cb5a8b1c9c8c9d88a95a9dac896 -8f8b97a9a7baf6d8c8f6c5b7f0af71b99886c7abb5d8b7a8878aa7d8b7a8878283a88786b89898 -867389cac4a78f8b97a37483a3748382839bd3bac4999cb5936f72a374839897a846423bcd342a -781a664c15755c15745c1c7c5c1574541574541574541574040404 -040404641a7c5c1c7c641a7c641a7c5c1574641a7c5c1c7c99275eb6302451524bdac896c78d61 -d2966dc8b7a8b5a898d7c8a8e09e75f0af71b6a788b5a898e8bb88f6c77cf6c77cc8b688a59887 -f6c77cf6c77cefad5edf9b5ad2966defad5ef6d8c8f9ebb6b5a898a59887e9d9a6fcf8e7faecc9 -b9b6a8b9b6a8f9ebb6fcf8e7f8ecd8c7b8b7c7b8b7faecc9f2f4eaf6c5b7d8c7b8d8b9b7e9d8c8 -f2f4eae9d8c8c7b8b7c7b8b7fcf8e7fcf8e7e9d9a6acb4accac4a7fcf8e7fcf8e7e9d9a6b5a898 -c8b7a8faecc9f7d8b8efad5ef0ac7de09e75f0af71fad9a5e7c7a5a59887c8b688f6c77cf8d094 -e9d9a6b5a898cac4a7f7bb86e8bb88d7c8c8ac99a7d8c7b8d69986d9a887cac4a746423bb63024 -7926665415745c15745415745c15745c15745415745c1574040404 -040404641a7c641c745c1c7c641a7c641a7c5c15745c1c7ca52357b6302446423b988884936f72 -936f72ac99a7d9a887867389ae7b74827668a69798d9b888778097b99886a37483988884c8b688 -696f7ab99886f7c7a8f0ac7dd2966db9b6c0c6c2ca7b8db4b89898c8b7a8687798b8aab7878aa7 -a9a7bad7c8a88896b8c8c9d88a95a9c6c2cac7b8b798a8c2b5c0d5a9a7bad7c8c8c5b699a8b1c9 -b5c0d58896b8d7c8c8b9b7b48896b8b5c0d58a95a9d9d5b89fa19aa8b1c9b9b6c082839bdac896 -9897a898a8c2ebdae5c7abb5df9b5aefad93f6c5b7c9a7998f8b97d9b56a878283a48899b89898 -82839bd7c8a8a4889994788fae7b74878aa7d8b9b7a69798a37483ae7b74ac99a746423bcd342a -8721644c15755415745415745415745415745415745c1574040404 -040404641a7c641a7c641a7c641a7c641a7c5c1c7c5c1c7ca52357a829164d3d2ca37357595c59 -565b68be8b70df9b5a92655f4b5967565b77c89887f6c77ca374834b5967596678d9b899f6c77c -8782834b5967b89898f7d8b8f7d8b8b8aab7565b68778097e8d8d8fcf8e7878aa745535b687798 -e9e7e8fcf8e78a95a9565b688896b8f8f6f7dbe1e77b8db46661788896b8dbe1e7d8d7da8a95a9 -565b688896b8eaebf6f2f4ea7887a84b596798a8c2fcf8e7d8d7da5a6889565b6898a8c2f8ecd8 -dbe1e75a6889696f7ab5c0d5f7d8b8f6d8c8a697984b5967b89898f6c77cd8b7a8565b774b5976 -ac99a7f8d094c89887535f834b597694788fe6aa87b98680596678676a88a374833d3630cd342a -781a665415745c157454157454157455146c5415745c1574040404 -040404641a7c641a7c5c1c7c641a7c64257c5c1c7c5c1c7ca52357a829163d3630a887867b7779 -70706aae7b74e6aa87988884616568596678c89887f8d094878283565b685a6889d8b7a8f8d094 -878283565b685a6889e8dab9f7d8b87887a8696f7aa8b1c9e7c7a5e7c7a5f6d9d98782835a6889 -d9d7c8f8ecd87887a85966787887a8e9d8c8ebdae56b7eab5966787b8db4ccd6c6d2dae77887a8 -5a68897887a8d8d7dae9e7e86b7eab5a68898896b8f8ecd8d7c8c8596678988884ebdae5f7d8b8 -e8d8d8a9a7ba59667898a8c2f8ecd8d8c7b8565b774b5976b5a898f6c77cd8b7a85a6889596678 -a48899f7c7a8c8a9a75a6889696f7aa37483e09e75b7898f616568696f7ab986803d3630b63024 -87216454147c541574540b6c5415745c15745c1574541574040404 -040404641c74641a7c641a7c5c1c7c641c7464257c5c2479a52357a8291651524bc89887c78d61 -b98680b99886c8b7a8a59887c89887b89898ac99a7c8b7a8a69798d9b899a8a6a99fa19ac5b699 -a69798d8c7b89fa19ab6a788c8b688a8a6a9ebdae5d7c8c8d69986f0ac7df6c5b7e9e7e8a9a7ba -b5a898b9b6a88a95a9d2dae798a8c2b9b6a8acb4ac999cb5b5c0d598a8c2b8a8a7cac4b7a8b1c9 -c6d2e198a8c2cac4a7b9b7b498a8c2dbe1e79897a8dac8969fa19aa8b1c9e9e7e8f7c8c8f0af71 -d7a899e8d8d8c8c9d88f8b97c5b699988884b9b7b4c6c2ca878aa7d9b56a988884b8a8a7c7b8b7 -9897a8d7c8c8ac99a7b7898fd7aaa7ac99a7d9b899c19ba5b98680b7898fb8aab746423bcd342a -872164541574540b6c5415745c1574541574541574541574040404 -0404046414745c15745c15746414745c1c7c641a7c541c7ca52357a829165d4c36c5b699d2966d -c78b4fd9a887b5a898e9b899f0ac7df7bb86c8b688b8a8a7e8dab9f8d094f8d094c5b699b5a898 -dad4a8f8ecd8fad9a5b5a898b6a788e9d9a6f8ecd8f7bb86e09e75e09e75d2966df8ecd8faecc9 -c5b699b5a898e8dab9fcf8e7faecc9aab4b8cac4a7faecc9dbe1e7f8ecd8c7b8b7b9b6c0e9e7d7 -dbe1e7e8dab9c8b7a8b9b7b4f8ecd8fcf8e7e9d9a6b5a898b9b6a8f8ecd8faecc9df9b5ad88e7d -e09e75e8bb88f8ecd8e9d9a6a59887c5b699f9ebb6faecc9e9d9a69fa19acac4a7fad9a5f9ebb6 -e9c8b8b8a8a7d8c7b8f7c7a8f7be9ae6b8abc19ba5c9a799d88e7dd9a887c8a9a746423bb63024 -79266654147c541574541574540b6c5415745c1574541574040404 -0404045c147c641a7c5c147c5c15746414745c1c7c5c1c7ca52357a829164d3d2cc89887ae7b74 -b98680c8a9a7d69986a48899b99886a88786a9a7bad9b8998f8b97b89898878283a8a6a9dac896 -878aa7a8b1c97887a8b5a898b6a788747297b9b6c0f6d9d9e6aa87d2966de8d8d8d6c8d57b8db4 -b5a898cac4b777809798a8c27b8db4cac4b7b9b6c08896b8a8b1c97b8db4c6c2cab9b7b47b8db4 -a8b1c97b8db4cbcdc0b9b6a87b8db4a8b1c9687798d9b8999fa19a9897a8ebdae5d3bac4df9b5a -e6aa9df5eae7c6c2ca778097dac8968f8b97a9a7bab5c0d58a95a9d7c8a88f8b97ac99a7c9a799 -9897a8d8c7b8ac99a7c8a9a7d69b98ac99a7d7aaa7c19ba5c89887c78c82b8a8a740474bcd342a -781a665415745c157454157454157455146c540b745c1574040404 -0404045c1574641474641a7c5c147c5c147c5c1574541574b0254ea82916472f22c78d61595c59 -70706ac89887f0af71be8b70565b68696f7ae6b8abf8d094ae98704b5967677588f6d8c8faecc9 -a9a7ba45535b677588e9e7e8f8ecd8778097565b68b8a8a7f6d9d9f6d8c8c8c9d8616568677588 -e9e7e8e9e7e87887a84b59677887a8dbe1e7c6d2e16175a65966787887a8d2dae7d2dae7687798 -4b59767b8db4dbe1e7d8d7da6b7eab565b688896b8e9e7d7dbe1e75a6889787988dbe1e7e7c8c8 -f8ecd8b8a8a7565b6898a8c2fcf8e7d8d7da5a6889565b77b5c0d5faecc9d8c7b8596678565b77 -b8a8a7fad9a5d8b7a8677588676a88c8a9a7efad93d7a8997a6879787988c898873d3630b63024 -7926664c15755c15745c1574540b6c5415745415745c1574040404 -0404045c1c7c6414745c15745c1574641a7c641a7c541c7ca52357a829164d3d2cd2966d988884 -936f72d2966de09e75d8b7a87b7779787988d9a887f7bb86ac99a77b7779778097d7c8a8f8ecd8 -9897a8596678687798ccd6c6faecc96b7eab5966785a6889d9d7c8f6d8c8687798696f7ad7c8c8 -e7c8c8d8b7a8e8d8d8867389687798d8d7dac6c2ca6175a65a68896b7eabccd6c6c6d2e16175a6 -5a68896175a6d9d7c8c6c2ca5a68898f8b97e8d8d8d9b899e8d8d8c7b8b7565b68999cb5f8ecd8 -c8c9d8565b775966789897a8f9ebb6d7c8c85a6889596678b9b6c0f8ecd8d6c8d5676a88677588 -c9a799f7be9ae7c8c8787988878283d7a899e59b87d7aaa77b777994788fd88e7d4d3d2ccd342a -781a66540b745c15745c157454157455146c5415745c1574040404 -040404641a7c5c147c6414746414745c1574641a7c5c1c7ca52357a8291646423bd88e7dd2966d -d9a887b89898c89997c89887f0ac7dd9b899b5a898c9a799a69798e8dab9c6c2cab9b7b4cac4b7 -a8a6a9d8d7dab5c0d5a8a6a9b8a8a79fa19ae9e7e8a8a6a9a8a6a9b5a898999cb5dbe1e7f6d9d9 -e59b87d88e7de9c8b8c6d2e19897a8c5b699c5b69998a8c2c6d2e198a8c2b9b6a8aab4b898a8c2 -b5c0d5999cb5b9b6a89fa19a98a8c2c6d2e1e9c8b8d88e7de6aa9df7c8c8c6d2e18f8b97c5b699 -988884c6c2cad2dae78896b8d9b56aa59887b5c0d5c6d2e1999cb5d7c8c8a8a6a9c7b8b7d8d7da -b8aab7d9b899b8aab7d7aaa7e7c8c8c7abb5c89997c7abb5d69b98d7aaa7c7abb5472f22cd342a -781a665415745415745415745415745415745c1574541574040404 -0404045c1574641c746414745c1c7c641474641a7c54147ca52357a829165d4c36b99886c8a671 -e09e75c89887c8a886d7a899e8bb88f0ac7dd7a899c9a799e7c7a5f8ecd8f7d8b8d8b7a8c8b7a8 -e9d8c8fcf8e7faecc9c5b699b9b6a8e8dab9fcf8e7f9ebb6c5b699b5a898e9d9a6e9e7e8d69986 -e09e75e59b87ca8377d6c8d5e9d8c8b6a788c5b699e8dab9dbe1e7e9d8c8c8b7a8b9b6a8e9e7d7 -dbe1e7dad4a8b5a898c5b699faecc9d3bac4c78d61e59b87d2966dd9a887f5eae7d7c8a8a69798 -cac4a7f9ebb6fcf8e7e9d9a6b9b6a8cac4a7faecc9fcf8e7e9d8c8b9b7b4d8c7b8f8ecd8faecc9 -e6b8abd7aaa7d8b7a8f7c7a8efad93d69b98c8a9a7c89997e6aa87d69986c898873d3630cd342a -7926664c0b745c15745c15745415745415745c15745c2479040404 -0404045c1c7c641a7c5c1c7c6414745c1c7c5c1c7c54147cb0254ea829164d3d2ce6aa9dd9a887 -d69986e6b8abbe8b70d7aaa7d7a899c9a799d6acb4d9b899ac99a7b9b6c0a8a6a9b8aab7e7c7a5 -878aa7a8b1c98a95a9cac4b7dac8968896b8a8b1c97887a8a8a6a9dac896747297b9b6c0f6d9d9 -e6aa9dd88e7df6d9d9a8b1c95a6889b5a898b9b7b468779898a8c26b7eabcbcdc0b9b6a86b7eab -7b8db45f6b97d7c8a8a8a6a9676a88c6c2caf7c8c8ca8377e6aa9debdae598a8c2687798dac896 -9fa19a8896b8c6c2ca8a95a9d9d5b8b5a898b5c0d5b5c0d58896b8e9c8b8b8a8a7c8c9d8d6c8d5 -a9a7bad7aaa7d8b7a8d8b9b7e9b899c8a9a7c89887e6aa9de6b8abefad93d7aaa73d3630cd342a -781a66541574541574541574541574541574541574541574040404 -040404641c7464257c641a7c641a7c5c15745c15745c1c7cb0254ea829165d4c36e09e75766a4d -7c6267e9b899e09e75e8bb88595c597b7779e8dab9f6d8c8c7b8b7595c59787988dbe1e7f8ecd8 -b9b6c0565b68687798f8f6f7fcf8e7a9a7ba4b5967687798e9e7e8e9e7d78a95a9616568b8aab7 -d6c8d5c6c2cab9b6c0616568778097d8d7dac8c9d8677588565b686b7eabc6d2e1b5c0d5687798 -4b59678a95a9c6d2e1d2dae76775887b7779c8c9d8c7b8b7d6c8d5a8a6a9565b6898a8c2f8ecd8 -d8d7da677588596678a8b1c9fcf8e7e9e7d7677588676a88c6d2e1fcf8e7d6c8d5787988696f7a -d6c8d5f6d8c8e7c8c894788f7b7779d8b9b7efad93e6b8ab867389988884d7aaa73d3630db3738 -781a664c1575540b6c55146c5415745c157455146c5c1c7c040404 -040404641a7c64257c641a7c641a7c641a7c5c15745c147cb0254eb6302451524be6aa87b99886 -b99886e6aa87c8a671e6b8aba88786a69798e6b8abe9c8b8c6c2ca87828382839bd8b9b7f7d8b8 -a8b1c9787988778097ccd6c6fcf8e78896b8677588687798ccd6c6e9e7d76b7eab676a885a6889 -c8c9d8d9d5b8565b77878283e8d8d8c89997c7b8b7dbe1e77b77795a6889ccd6c6b9b7b44b5967 -8f8b97eaebf6c8a9a7c7abb5e6c9d9696f7a687798e9e7d7b9b6c0535f835a68898896b8e9e7d7 -d2dae75f6b97596678a8b1c9fcf8e7e9e7e8687798677588c6c2caf6d8c8dbe1e77780978f8b97 -d7c8c8e9c8b8e8d8d8a48899988884e6aa9de09e75e9c8b8a37483a88786e59b8739291fcd342a -7926665415745415745c15745415745415745415745c1574040404 -040404641a7c672784641a7c5c1c7c641a7c5c1c7c5c147cb0254ea829165d4c36d2966df0ac7d -e8bb88c89887b98680c89887fad9a5d8c7b8c19ba5d7a899d7a899e8d8d8d8d7dac9a799d7a899 -b89898e9e7d7c6d2e1b9b7b4c7b8b7aab4b8e9e7e8b5c0d5b9b7b4cac4b7acb4acc6d2e1a9a7ba -a8a6a9b6a7889fa19ab5c0d5d6acb4d88e7dd7a899e7c8c8a8b1c982839bb6a788a598879897a8 -b5c0d5d3bac4d69986d69986e7c8c8b5c0d5988884c5b699a59887aab4b8c6d2e198a8c2d7c8a8 -a8a6a9b9b6c0dbe1e798a8c2d8c7b8b8aab7c6c2cadbe1e7b8aab7d8b7a8c7abb5d7c8c8ebdae5 -d3bac4d7aaa7c7abb5e9c8b8e8d8d8d7aaa7b98680d7aaa7f7be9ae9c8b8d69b98472f22cd342a -7926664c15755415745c15745415745415745c1574541c7c040404 -040404641a7c6414745c15745c1c7c641a7c5c1c7c5c147cb0254ea8291651524bb6a788e09e75 -d2966dc78d61c78c82c9a799e8dab9e6aa87d88e7dc9a799d8b7a8e9e7e8f7c7a8d7a899d7a899 -d8c7b8fcf8e7faecc9d7c8a8c8b7a8e9e7d7f2f4eae9d8c8c8b7a8b9b6a8e8dab9dbe1e7e8dab9 -c5b699b6a788dad4a8d7c8c8ca8377ca8377ca8377ae7b74b5c0d5d9d5b8ae9870b6a788d9d5b8 -a9a7baae7b74c78c82d88e7dc78c82c8c9d8d8c7b8b5a898c5b699e8dab9e9e7e8dad4a8b9b6a8 -cac4a7f8ecd8ecf8fce9d8c8b9b6c0d7c8a8f8ecd8f8ecd8e6b8abd8b7a8d9b899f6d9d9e9d8c8 -c9a799d7aaa7c89997e9c8b8d8b9b7b7898fc89997ca8377d7a899c78c82b898983d3630cd342a -792666541c7c540b7455146c5c15745415745c1574541574040404 -040404641a7c64257c641a7c641a7c641a7c641a7c5c147ca52357a829165d4c36f6c5b7d9b899 -e6aa87e6b8abbe8b70f7c7a8d7c8c8e6b8abd8b9b7c89887d8b9b7c6c2cab9b6c0d7c8c8e9b899 -b8aab7b5c0d5a9a7bac6c2cadac8968896b898a8c27887a8b9b6c0dad4a87b8db48896b87887a8 -b8aab7c5b6996175a6a8b1c9f5eae7b98680d69b98eaebf6878aa745535bc5b69998888445535b -98a8c2f5ebf5c78c82d69b98eaebf698a8c26b7eabdac8969897a87b8db498a8c27887a8d9d5b8 -a8a6a98896b898a8c28896b8d9d7c8c8a9a7c8c9d8c8c9d8b8aab7d8b7a8d8b9b7d2dae7d6c8d5 -d3bac4c89997e6b8abebdae5f6d9d9e6b8abb98680e6aa9df7c7a8f7c7a8d7c8c83d3630cd342a -7926665415745c15745c15745415745415745415745c1574040404 -04040464257c5c1c7c641a7c5c1c7c5c157464257c5c1c7cb0254ea829165d4c36f7be9a7b7779 -827668e7c7a5e7c7a5e7c8c8675f46988884f6d9d9e9d8c8d6c8d5595c598f8b97f5ebf5f5eae7 -c6c2ca595c5982839bf5ebf5e9e7e8999cb5565b68687798d2dae7d8d7da8896b8565b68687798 -c6d2e1d8d7da7887a861656898a8c2b9b6c0a8b1c99897a8616568778097b9b6c0a8b1c9696f7a -70706a98a8c2a9a7bab5c0d598a8c2565b687b8db4dbe1e7c6d2e15f6b9759667898a8c2dbe1e7 -c6d2e15a6889616568a8b1c9f2f4eae9e7e8787988696f7ac6d2e1f8ecd8e8d8d88782837b7779 -d2dae7e6c9d9e8d8d894788f7b7779ebdae5e7c8c8e9c8b87a6879a69798e6b8ab4d3d2ccd342a -641c745415745c15745415745415745415745c1574541574040404 -04040464257c64257c64257c641a7c641474641a7c5c1c7ca52357a8291646423bf6d8c8cac4a7 -d7c8a8e6b8abb99886f7c8c8b5a898d8b7a8e6aa9dc9a799e7c8c8c8a9a7c7b8b7d8b7a8d8c7b8 -d6c8d5ac99a7999cb5d8c7b8e7c8c8999cb58a95a97887a8b9b6c0d8d7da6b7eab7887a86175a6 -aab4b8d8d7da6175a6687798596678c6c2cab5a8983044438a95a9ecf8fcb98680a69798ecf8fc -787988304443cbcdc0b8a8a7565b775f6b976b7eabe9d8c8b5c0d56175a66877987b8db4e9e7d7 -b5c0d56b7eab82839b98a8c2e8d8d8dbe1e78a95a99897a8d7c8c8e9c8b8dbe1e7ac99a7ac99a7 -f7c9d7c8a9a7ebdae5c8a9a7b89898f7c9d7c89997e8d8d8a69798c6c2cae9b89939291fdb3738 -781a665415745415745415745c15745415745c15745c1e6c040404 -04040464257c641a7c5c1574641a7c5c1c7c641a7c5c1c7cb0254ea8291651524bc89887e8bb88 -e9b899c89887be8b70be8b70e9c8b8d3bac4c89887c78c82c89887e9d8c8e8d8d8c9a799c89887 -c9a799e8d8d8ebdae5c8b7a8d7a899c8b7a8d8d7dac8c9d8c7b8b7c7b8b7cac4b7d2dae7c8c9d8 -b9b7b4b8a8a7b9b6a8c6c2cac8b7a8b6a788ae845da0b0a0a8b1c9b89898be8b70ca8377c89997 -a8b1c9ae9870b6a788c8b688b9b6a8b5c0d5b9b6c0cac4b7b8a8a7cbcdc0c6d2e1b9b6c0c6c2ca -b9b6a8ccd6c6d2dae7c6c2cad8b7a8c7b8b7d7c8c8eaebf6d8b9b7d7aaa7c8a9a7e8d8d8f5ebf5 -d6acb4c89887d69b98d8b9b7e8d8d8d7aaa7b98680c8a9a7f6c5b7c6c2cab8a8a73d3630cd342a -7926665415745c157455146c5415745415745415745c1574040404 -040404641a7c64257c5c15745c147c5c15745c1c7c54147cb0254ea829165d4c36c9a799e7c7a5 -e8bb88b99886ae7b74b98680d7c8c8d7a899c78c82c78c82c9a799e8d8d8d8b7a8c89887d7a899 -d8b9b7e9e7e8d7c8c8d7aaa7c8a9a7d7c8c8d2dae7d8c7b8c8b7a8b9b7b4c6c2cad2dae7cbcdc0 -b9b6a8acb4accbcdc0b5c0d5cac4a7b6a788ae9870b5a898a9a7bab98680b98680ae7b74936f72 -a8b1c9cac4b7ae9870c8a886c5b699c6d2e1cac4b7cac4b7b9b6a8d2dae7dbe1e7d7c8c8c7b8b7 -cac4b7dbe1e7d8d7dad8b7a8d8b7a8d8b7a8e9e7d7f6d9d9c19ba5d7aaa7c8a9a7e8d8d8e8d8d8 -c89997c89997c78c82c6c2cad3bac4ae7b74c19ba5b99886d8c7b8d7a899b898983d3630db3738 -6817695415745c15745c15745c157454157455146c5c1574040404 -0404045c1c7c641a7c64257c5c157464147464147454147cb0254ea829164d3d2cf7d8b8c7b8b7 -d8b9b7d8c7b8be8b70f7c7a8c8a9a7e6b8abd8b9b7c89887e6b8abb8aab7b9b6c0d6c8d5d7a899 -d3bac4a9a7ba999cb5d8d7dae7c7a5999cb58896b87887a8c8c9d8d7c8c86b7eab7b8db46b7eab -b9b6c0d9d5b86175a6687798596678c5b699a0b0a030444398a8c2f8f6f7936f72c9a799ecf8fc -7887a8304443b6a788cac4a7535f836175a66b7eabe9d8c8aab4b86b7eab7b8db47b8db4e9e7d7 -b9b6c07b8db48896b8a8b1c9e9d8c8d6acb4a8b1c9b9b6c0c8c9d8d8b7a8d6acb4c6c2cad3bac4 -e6c9d9c89997e6aa9de8d8d8e7c8c8f7c8c8b7898fe7c8c8e8d8d8e8d8d8d7c8c83d3630db3738 -681769541574541574541574541574541574541574541574040404 -0404045c1c7c641474641a7c641a7c5c147c641a7c541574b0254ea829165d4c36f7bb86616568 -827668f7c7a8e9c8b8e9c8b851524b988884f6d9d9e7c8c8d6c8d5595c597b7779e9e7e8f5eae7 -c8c9d8595c59787988e9e7e8dbe1e7999cb5565b68687798c6d2e1d2dae78896b8565b68687798 -c6d2e1c6d2e17b8db46165688896b8a8b1c998a8c278798861656898a8c2a9a7baa8b1c98a95a9 -595c59778097a8b1c9b5c0d5778097565b688896b8d2dae7c6d2e15f6b974b596798a8c2d2dae7 -d2dae77780974b5967a8b1c9e9e7e8eaebf6787988616568dbe1e7f5eae7f5eae77b7779595c59 -d8d7dae8d8d8ebdae5a48899616568ebdae5e7c8c8f7c8c870706a878283e7c7a53d3630cd342a -781a664c1575541574541c6c5415745415745c1574541574040404 -040404641a7c641a7c641a7c5c1c7c641a7c64257c5c147cb0254ea8291651524bf7c7a8d9b899 -d9a887e09e75b99886e7c8c8d7a899c8a9a7e6aa9dc8a9a7d3bac4b8aab7b8aab7d8b9b7e9c8b8 -b9b6c0999cb59897a8c7b8b7e8d8d87887a87887a86b7eabc8b7a8d9d7c86b7eab7780976175a6 -b9b7b4e8dab95f6b978a95a9eaebf6c78c82c8a9a7ecf8fc787988304443ccd6c6a59887304443 -9fa19af5ebf5b7898fb8aab7eaebf67887a86175a6e8dab9a9a7ba6175a67887a86b7eabe8dab9 -b5c0d56b7eab7887a88896b8e8dab9d2dae78a95a98a95a9c6c2cae9c8b8dbe1e7a9a7baa8a6a9 -d6c8d5d8b9b7ebdae5c7abb5c19ba5f7c8c8c89997e7c8c8c89997c7b8b7e9b899472f22db3738 -6817695415745415745415744c157555146c5415745c1574040404 -040404672784641a7c5c1c7c641a7c5c1c7c641a7c5c147cb0254e85241551524bc8a671df9b5a -e09e75c78c82c78c82c78c82e8dab9e9c8b8d69b98c89887d9a887e8d8d8e9d8c8d8b7a8d7aaa7 -c9a799f8ecd8f5eae7c8b7a8b9b7b4cac4b7e9e7e8d8d7dac8b7a8b9b6a8c8b7a8c6d2e1cbcdc0 -b5a898b5a898b9b6a8c8c9d8c8a9a7d88e7dd69b98c19ba5a8b1c9b6a788a59887ae9870acb4ac -98a8c2b89898d88e7dd69986d7aaa7c6d2e1b5a898b6a788b5a898cbcdc0c6d2e1b9b6c0c8b7a8 -c5b699d9d5b8dbe1e7b9b6c0d8b7a8c8b7a8e8d8d8f8f6f7c7b8b7d8b7a8d7aaa7e7c8c8e9e7e8 -d8b9b7d69b98d69b98f6c5b7e9e7e8d7aaa7b7898fd69b98e8bb88e6b8abb8a8a7472f22cd342a -79266654157454157454157455146c55146c5415745c2479040404 -0404045c157464257c641a7c641a7c641a7c5c1c7c5c1c7cb0254ea829165d4c36c89887d9b888 -e09e75be8b70c78c82c89887fad9a5d9a887c78c82c89887c8b7a8e8d8d8d8b7a8c89887c9a799 -c7b8b7f2f4ead8c7b8b8a8a7b8a8a7c8c9d8f2f4eaccd6c6a8a6a99fa19ab9b7b4dbe1e7cac4b7 -b6a788b6a788c8b688d6c8d5d69b98d88e7dd69986b89898b5c0d5c7b8b7b6a788ae9870c7b8b7 -a8b1c9ca8377d69b98d88e7dc19ba5d2dae7cac4b7b5a898b6a788d9d5b8dbe1e7d9d5b8b9b6a8 -acb4ace9e7d7fcf8e7d7c8c8b9b6c0c7b8b7f5eae7f5eae7d8b7a8d8b7a8d8b7a8e8d8d8e9d8c8 -c89997c8a9a7c8a9a7e7c8c8e9c8b8ca8377c89997b7898fd7a899d88e7db7898f3d3630cd342a -6c147454157455146c541574541574540b745415745c2479040404 -040404641a7c641a7c641c745c1c7c5c1c7c641a7c541c7cb0254e8524154d3d2cf0ac7dd69986 -d9a887d9b899c78b4fefad93b5a898c9a799d8c7b8d9a887c7abb5a8a6a99897a8c6c2cae7c7a5 -999cb59897a87887a8d8d7dae8dab97887a87887a8687798b5c0d5dad4a86877987887a85a6889 -a8a6a9d7c8a84b59768a95a9f6d9d9c78c82d7aaa7f5ebf5878aa74b5976dac896b5a8984b5976 -98a8c2f8f6f7c89997d69b98ebdae582839b596678e8dab9a9a7ba5f6b977887a86b7eabe9d8c8 -acb4ac7b8db48896b87b8db4e9e7d7b9b7b48896b8aab4b8a8b1c9e9c8b8c8a9a7b5c0d5c6c2ca -c8c9d8d8b9b7d7aaa7d3bac4d7c8c8e9c8b8c78c82e6aa9de6b8abe6b8abd6acb4302f2adb3738 -68176954157454157454157454157455146c5415745c1574040404 -040404641a7c641a7c5c147c641c74641a7c641a7c5c147cb0254ea829165d4c36f0af71616568 -7c6267e9b899f0af71d9a887595c59878283f7d8b8f7d8b8c7b8b7595c597b7779ebdae5f5eae7 -b9b6c051524b778097f5eae7f8f6f7999cb545535b687798e9e7e8e9e7d77b8db44b59678f8b97 -d8d7dac6c2ca9897a8595c59999cb5c8c9d8c8c9d88a95a9595c596b7eabc6d2e1b5c0d5677588 -61656898a8c2c8c9d8d6c8d59897a8616568a8b1c9c8c9d8d2dae77879884b596798a8c2f2f4ea -e9e7e86775884b5967b5c0d5f8f6f7f2f4ea778097596678d2dae7fcf8e7ebdae5677588696f7a -ebdae5f8ecd8f6d8c87b77797a6879e6b8abe9b899f7c7a87b7779936f72d7a8993d3630cd342a -681769540b745415745c15745c1574540b7455146c5c2479040404 -040404641a7c641a7c5c15745c1c7c641a7c641a7c54147cc3324e8524155d4c36efad93c78c82 -c8a886d9a887d2966dc8b7a8b99886b5a898d7a899e6b8abb8aab7a8a6a9878aa7c8a9a7e9d8c8 -8896b88a95a97887a8cac4a7e9d8c87887a8878aa7687798cac4b7d8c7b85f6b979897a8f6d9d9 -d69b98d69986f6d9d99897a84b5976d9d5b8b8a8a75a68896b7eab5f6b97cbcdc0a8b1c96175a6 -7887a85f6b97d9d7c8b9b6a84b5976b8aab7f7c9d7ca8377d8b9b7e8d8d882839b6175a6e8dab9 -aab4b86877987887a88896b8f9ebb6c8c9d8878aa7878aa7a9a7bafaecc9c8c9d8878aa79897a8 -b9b6c0f7c7a8d8d7daac99a7a69798d7aaa7d7a899e7c8c8b7898fc89997e6aa9d472f22db3738 -68176954157455146c5415745415745415745415745c2479040404 -0404045c1c7c641a7c641a7c641a7c5c24795c1c7c54147cb0254ea8291651524bd69986df9b5a -e09e75c89887c89887be8b70f0af71e9b899d8b7a8c9a799d9b899faecc9e9d8c8c8b7a8b8a8a7 -d7c8a8f5eae7e9d8c8b5a898acb4accac4a7f2f4ead8c7b8b6a788b6a788cac4a7dbe1e7d7a899 -d88e7dd88e7dd69b98c6c2cac9a799b6a788b6a788cac4b7d2dae7ccd6c6b9b6a8b9b6a8d9d5b8 -d2dae7c5b699b5a898b6a788d8d7dac6c2cad69986d88e7de59b87e6b8abe8d8d8b5a898b6a788 -b5a898f9ebb6f2f4eab9b6c0c8b7a8b9b6a8e9d8c8f8f6f7b9b6c0c8b7a8c8b7a8f8ecd8f5eae7 -d8b9b7d6acb4d7aaa7efad93f7c7a8c7abb5d69b98d69b98e6aa87e6aa9dc19ba54d3d2cdb3738 -69256b5415745415745c1574541574540b6c5415745c2479040404 -0404045c1c7c64257c5c15745c247964257c5c15745c1c7cb0254e8524155d4c36c9a799d2966d -d2966dc78c82c8a886c9a799f7be9ad9a887b89898c9a799d8b9b7f6d8c8dac896b5a898b8a8a7 -b9b6c0e9e7e8cac4b7b5a898c5b699d9d7c8fcf8e7d9d5b8a59887b6a788c5b699f5eae7efad93 -d2966de09e75d7a899d8d7dacac4a7b5a898b5a898cac4b7d2dae7b9b7b4b9b6a8b9b6a8c6d2e1 -d2dae7cac4a7c5b699b5a898cbcdc0d7c8c8d88e7de59b87e59b87e9c8b8f8f6f7cac4b7b6a788 -b5a898e8dab9fcf8e7dad4a8b9b6a8b9b6a8f2f4eafcf8e7d8c7b8c7b8b7cac4b7f8ecd8f6d8c8 -d9b899c7b8b7d8b9b7f7d8b8e6b8abc89887c8a9a7c89997e6aa9de59b87b998863d3630db3738 -69256b5415745c15745415745c15745415745c15745c2479040404 -0404045c1574641a7c641c7464257c64257c64257c541c7cc3324ea829165d4c36d69986b98680 -b99886c8b7a8d2966dc9a7999888848f8b97c7b8b7f0ac7da69798a6979882839bc6c2caf7d8b8 -82839b7780976b7eabd6c8d5dad4a87887a8878aa75f6b97c5b699dad4a85f6b978a95a9e6c9d9 -e6b8abd69b98f6d9d99897a85f6b97dad4a8b9b6a86175a67b8db46b7eabd9d7c8b9b7b46b7eab -7887a86175a6d9d5b8b9b6a85a6889b9b6c0ebdae5d69986e6b8abebdae59897a87887a8fad9a5 -a0b0a06877988896b87b8db4faecc9b9b7b47b8db48896b8999cb5f8ecd8999cb5999cb5a8a6a9 -b8aab7f7c7a8c19ba5999cb5c8a9a7d3bac4d7a899d69b98c19ba5d7aaa7c19ba5302f2adb3738 -69256b5415745c15745c15745c15745415745c1574541574040404 -0404045c1c7c641a7c641c7464257c64257c641a7c541574c3324e8524155d4c36d2966d595c59 -70706ae59b87e8bb88b99886595c597b7779f7be9af6c77ca598874b5967677588f7d8b8faecc9 -a9a7ba45535b787988f8ecd8f5eae79897a8595c598f8b97e9e7d7f8ecd8ac99a745535b999cb5 -f5eae7d8d7da9897a845535b7b8db4d2dae7c6d2e16877984b59678896b8d2dae7c6d2e1687798 -4b59677b8db4d2dae7d2dae7676a88565b68c8c9d8e9e7d7e9e7e887828345535bc8c9d8fcf8e7 -f5eae77b77794b5967b9b6c0fcf8e7e9e7e8677588616568d2dae7f8ecd8e7c8c8696f7a596678 -d8b7a8f7c7a8e6b8ab696f7a616568d7aaa7e6aa87c9a7996165687b7779ca837739291fdb3738 -6817695415745415745415745415745c15745c1c7c5c2479040404 -040404641a7c5c157464257c641c745c1c7c6414745c147cb0254ea8291651524bb99886ae7b74 -a59887d69986d9b888ac99a7a88786988884c8a886e7c7a582839b988884747297b5a898e8dab9 -7780978f8b97687798cac4a7d9b8995a68899897a8f7c9d7e59b87d9a887c6c2caa8a6a9687798 -dad4a8d9b8995f6b977780976175a6d9d5b8c6c2ca6175a67887a86b7eabd9d7c8b5c0d56175a6 -7887a86b7eabd9d5b8c6c2ca6175a67780976b7eabf9ebb6ac99a7687798b9b6c0d8d7dae09e75 -f7c8c8e7c8c882839b7887a8f9ebb6a9a7ba7780977887a89897a8f9ebb6a8b1c978798882839b -a48899fad9a5b9b6c094788f8f8b97b89898e9b899c7b8b794788fac99a7c89887472f22db3738 -68176954157454157454157455146c5415745c15745c2479040404 -0404045c24795c157464257c641c745c1574641a7c5c1574c3324e852415595c59d9a887df9b5a -e09e75d9b899c9a799d9a887f0ac7de9b899c8b7a8c8b7a8d9b899f8d094e9b899b5a898b5a898 -dac896faecc9e8dab9a59887b6a788cac4a7f8ecd8e9b899e09e75d2966de6aa87f6d9d9e9d9a6 -b6a788b6a788d7c8a8e9e7e8cbcdc0a8a6a9b9b6a8cbcdc0d2dae7d7c8c8b9b7b4b9b6c0d7c8c8 -d2dae7c6c2cab9b7b4b9b6a8e9d8c8e9e7e8c5b699b6a788b5a898e9e7d7faecc9d69986e09e75 -efad93f6c5b7fcf8e7b6a788b6a788c5b699faecc9fcf8e7c7b8b7b9b6a8b5a898f8d094f7d8b8 -b9b6c0d6acb4c8b7a8e9b899e6b8abd3bac4d7aaa7d7aaa7d2966dd7a899c8a9a73d3630db3738 -68176954157454157454157454157455146c5415745c2479040404 -040404641c7464257c641a7c641a7c641a7c64257c5c147cc3324e852415675f46c9a799b98680 -c78d61b89898c9a799c8a9a7e8bb88c89887b99886b8a8a7b9b7b4f7be9ac8b688b6a788b5a898 -b8a8a7e8dab9c5b699a59887b6a788c9a799f5eae7e9b899e09e75f0ac7de7c7a5f5eae7c7b8b7 -b6a788b6a788cac4a7f2f4eab9b7b4b9b6a8b9b6a8d8d7dadbe1e7cac4b7c7b8b7c7b8b7d2dae7 -dbe1e7cac4a7b9b6a8b9b6a8dbe1e7f2f4eadac896b5a898988884e9d8c8f6d9d9e09e75f0ac7d -e6aa87e8dab9f5eae7cac4a7b6a788b6a788f7d8b8f8ecd8cac4a7b9b6a8b9b7b4f7d8b8f7d8b8 -cac4b7c6c2cac7b8b7f6c5b7f7be9ad7a899c8a9a7c8a9a7d69986d9a887c5b69946423bdb3738 -69256b541c7c541574541574541574540b745415745c2479040404 -0404045c1c7c64257c5c1574641a7c5c147c641a7c541574c3324e8524155d4c36ae7b7470706a -7b7779c89887df9b5a9888847a68797b7779c5b699e8bb887a6879696f7a676a88c8b7a8f6c77c -878283596678666178dac896e8dab96b7eab787988b9b6c0e9c8b8f7c7a8e6c9d9878283687798 -d9d5b8e8dab96b7eab6775887887a8e9e7d7c7b8b76b7eab7887a88896b8d8d7dac7b8b77b8db4 -7887a87b8db4d8d7dad9d5b86b7eab7780977b8db4f9ebb6acb4ac676a88b9b6c0f6d9d9f7bb86 -e7c8c8b9b6c07780977b8db4fad9a5b8a8a77780977780979897a8f9ebb6ac99a77780978f8b97 -9897a8f7d8b8ac99a7778097a48899ac99a7e9b899b8989894788fa48899ac99a73d3630db3738 -69256b5415745415745415745415745415745415745c1574040404 -040404641a7c64257c64257c5c1c7c5c15745c15745c147cc3324e8524155d4c36ae7b74595c59 -616568be8b70e09e75936f72595c59596678e09e75f7bb8698888440474b596678dac896f6c77c -936f7245535bb8a8a7f7d8b8f6d8c89897a851524b778097f8ecd8f8ecd882839b45535b7887a8 -fcf8e7fcf8e77887a845535b8a95a9f8f6f7dbe1e768779861656898a8c2e8d8d8d2dae782839b -45535b8896b8f2f4eaf2f4ea7780974b596798a8c2f8f6f7e9e7e859667845535bc6c2cafcf8e7 -ebdae5677588565b68c8c9d8f8ecd8f6d8c87b777945535bc8b7a8f8d094d6acb44b59764b5967 -c9a799f7c7a8d7aaa7596678596678b98680e6aa87b986805966787b7779ae7b7439291fdb3738 -69256b54157454157454157454157455146c5415745c2479040404 -040404641c74641a7c641a7c641a7c641a7c641a7c54147cb0254e852415595c59a88786ae7b74 -936f72c8a886cac4a7878283ae7b74867389a59887dac89694788fb99886867389a59887c8a671 -787988c89887f7be9af0ac7dd2966db9b6c0c6c2ca7887a8c5b699b99886687798b9b6c08896b8 -cac4a7cac4b78a95a9a8b1c97887a8d8c7b8b9b6c08896b8aab4b898a8c2e7c7a5c8c9d8999cb5 -a8b1c98896b8d9d7c8b9b6c08896b8a8b1c97887a8e8dab998a8c27b8db49897a8687798e7c7a5 -9897a87b8db4b9b6c0b9b6c0f0af71f6c5b7e6b8ab776a8682839bf8d09482839b77809782839b -82839bfad9a5ac99a786738974729794788ff7c7a8999cb586738994788fa6979839291fdb3738 -6817695415745c15745415745415745415745415745c2479040404 -040404641a7c641a7c5c1c7c641c745c1c7c641a7c54147cc3324ea82916595c59d9b888c78d61 -c8a671c8b7a8b5a898dac896e09e75f6c77cb6a788b5a898f8d094f7bb86f6c77cb6a788a59887 -f6c77cf6c77cefad5edf9b5adf9b5af0af71faecc9f8d094b6a788b6a788fad9a5fcf8e7f9ebb6 -b9b6a8b9b6a8f9ebb6f8f6f7e9d8c8b9b6c0c7b8b7e9d8c8f5ebf5e9c8b8d8b9b7d7c8a8e8dab9 -f2f4eae9d8c8c7b8b7c7b8b7f8ecd8fcf8e7e8dab9acb4accac4a7faecc9f8ecd8d9b888b6a788 -c5b699faecc9f7d8b8d2966de09e75f0ac7df7bb86f8d094c8a886a59887c5b699f8d094f7c7a8 -c7b8b7acb4acc8b7a8f0ac7de6b8abb9b6c0c7b8b7d8b9b7d2966dd9b899b9b7b4302f2adb3738 -69256b5415745415745415745415745415745415745c2479040404 -0404045c1c7c641a7c641a7c5c1c7c6414745c1c7c54147cc3324e852415675f46a8a6a9ae7b74 -92655fac99a7b5a898a48899be8b70ae845da69798b6a788988884d69986988884936f72c8a886 -a69798e9b899c89997be8b70f0af71e6b8abe9c8b88f8b97b6a788b6a7889897a8d8d7da999cb5 -b9b7b4b5a898a8b1c9e9e7e8aab4b8d8c7b8c8b7a8d2dae7e9e7e8c7b8b7e6b8abd7aaa7d2dae7 -eaebf6c8b7a8d8b9b7c8b7a8c8c9d8e9e7e89fa19ac8b7a8a8a6a9d2dae7e9e7d79fa19ac8b688 -a88786d8c7b8f7d8b8f7be9ae09e75b99886e9b899e9d9a6b8a8a7c5b699a59887d7a899e9b899 -b5a898b8a8a7a9a7bac89997d69986b8aab7b9b6c0b8aab7b98680be8b70b5a8983d3630db3738 -641c744c1575541574541574541574541574541574541574040404 -04040464257c641a7c641a7c641a7c5c1c7c641a7c54147cc3324e8524155d4c36827668616568 -616568a88786d2966d6661786165685a6889b99886df9b5a666178565b68565b68c8a671f6c77c -8782835966788f8b97f0ac7df0af71e6b8ab696f7a787988fad9a5f9ebb66877985966787887a8 -e9e7e8e9d8c87887a867758898a8c2f8ecd8d9d7c882839b677588b5c0d5faecc9e9c8b8999cb5 -78798898a8c2f5eae7e8dab97887a85a68898896b8f8ecd8b9b6c0687798676a888896b8f9ebb6 -b5a898535f83ac99a7f6c5b7efad5ed8b7a882839b687798a48899f8d094988884565b77676a88 -747297fad9a59888845f6b97676a8882839be6b8ab94788f676a88776a868f8b973d3630db3738 -68176954157454157454157454157455146c5415745c2479040404 -04040464257c64257c64257c641a7c641c74641a7c5c1c7cc3324eb6302451524b7c626745535b -45535ba37357c78d617a687945535b616568c78d61df9b5a7c626745535b988884f0ac7df0af71 -936f7245535b787988e9d9a6f7bb867a687945535b778097f6d8c8f8ecd8878aa745535b82839b -f8ecd8f2f4ea7887a8595c59a9a7bafaecc9e9e7e88f8b9770706ac6c2cae8d8d8eaebf6ac99a7 -565b68a9a7bafcf8e7f8f6f79897a8565b68a8b1c9fcf8e7dbe1e75a68894b5967b5c0d5f8ecd8 -e9d8c85966784b5967b5a898f8d094e9c8b85966784b5976c8a9a7f7bb86e6aa9d696f7a45535b -b98680f0ac7dae7b74565b77596678ae7b74e09e75a374835966786661786c5456472415db3738 -6817694c157555146c5c15745415745415745415745c2479040404 -04040464257c5c2479641a7c64257c641a7c64257c5c1c7cc3324e85241570706a8782836c5456 -6f596fa59887c8b688696f7a92655f7a6879ae9870c8a6717a6879ae845dd69b98e8bb88c78d61 -82839bc89887867389b5a898ae9870787988b6a78882839bb9b6a8c7b8b78a95a9c8c9d8999cb5 -b9b6a8c7b8b79897a8c6c2caa9a7bad7a899c7b8b7c7b8b7d8d7dad6c8d5d7a899d7c8c8d7c8c8 -c6d2e1b9b6c0d8b7a8d3bac4a9a7bab5c0d5999cb5e9d8c8999cb5999cb5a8b1c98896b8e9d9a6 -9897a88f8b97a88786778097dac896a488999588a7a488999897a8f7bb86e6b8abc19ba5885b87 -787988e8bb88867389776a8674729782839be7c7a582839b676a88676a88778097472f22db3738 -681769540b6c5415745415745c15745415745c1574541574040404 -04040464257c64257c64257c5c24795c157464257c5c1c7cc3324e852415595c59dac896ae9870 -ae9870b6a788a59887e8bb88c78b4fefad5eae9870ae9870d9b56adf9b5aefad5ed2966dc8a671 -f0af71f0af71f6c77cae9870b6a788f8d094f8d094fad9a5b5a898c5b699f9ebb6fcf8e7f8ecd8 -c7b8b7c8b7a8fad9a5fcf8e7e9c8b8d8b7a8e9b899f6c5b7f5eae7e6b8abd7aaa7d7a899e7c7a5 -f5eae7e9c8b8d8b7a8e6b8abf7d8b8fcf8e7e9c8b8b9b6c0d8c7b8f8ecd8fcf8e7d9d5b8b9b6a8 -cac4a7fad9a5fad9a5d9b888b99886cac4a7f8d094f7bb86f0ac7dd7a899e8bb88f0af71f0af71 -c8a671b5a898c5b699d2966dd9a887c7b8b7b8a8a7b9b6a8ae7b74d8c7b8aab4b8472f22db3738 -5c1e6c5415745c15745c1574541574541574540b745c2479040404 -04040464257c672784641a7c5c15745c247964257c5c1c7cc3324e852415766a4d8f8b9751524b -595c59a59887b6a7887b7779815a55766a4d936f72ae98707b7779ae845d7b7779ae845df0af71 -d7a899d69986936f72ae9870b6a788a69798d9b8998f8b97b9b7b4b5a898a9a7bae9d8c8a8a6a9 -c7b8b7c8b7a8c8c9d8d8d7dab8aab7d8b9b7e6b8abeaebf6e9e7e8d8b9b7d7aaa7d7aaa7e9e7e8 -f5eae7d8c7b8e9c8b8d7a899d2dae7e8d8d8b8a8a7e9c8b8a8a6a9d8d7dad9d5b8a69798cbcdc0 -a8a6a9d8c7b8e8dab99fa19ac8b688988884d7a899f7be9ae7c7a5e8bb88ae9870c78c82d69986 -b5a898c5b699a59887ae7b74ae7b74b5a898b9b7b49897a8675f46988884a0b0a03d3630db3738 -6817695415745c15745c15745415745415745415745c2479040404 -0404045c157464257c641c7464257c64257c5c24795c2479c3324e852415675f46595c5945535b -45535b6c5456ab7b45565b6845535b4b4b64a37357c78d616661784b5967666178be8b70df9b5a -b99886616568596678e8bb88f0ac7d676a884b5967778097e8dab9f8d09478798859667882839b -f8ecd8f6d8c89897a8696f7ab9b6c0f8ecd8e9e7d7ac99a78f8b97d8d7daf6d9d9f6d9d9b8aab7 -878283c8c9d8f6d9d9e9c8b89897a8787988b5c0d5f8ecd8c7b8b77780976877989897a8f9ebb6 -c5b699687798676a88a48899f8d094b6a7885966789897a8e6aa9defad5ea88786676a88676a88 -94788fe8bb887c62674b4b64565b77776a86c8a8866661784b59764b5976776a8639291fdb3738 -5c1e6c5415745c15745415745c15745415745c15745c2479040404 -04040464257c5c157464257c67278464257c5c24795c1c7cc3324e8524155d4c36595c5945535b -45535b675f46ab7b455c495a40474b936f72ae845dc78b4f6f596f45535b666178d2966ddf9b5a -6f596f45535b696f7ae8bb88e8bb887879884b5967787988f7c7a8f7d8b8787988616568878aa7 -f7d8b8f5eae79897a870706ad6c8d5f7c8c8f5eae7a6979870706ae8d8d8e9d8c8f5eae7b8a8a7 -616568c6c2caf6d9d9f5eae7a8a6a9616568c6c2caf8ecd8e8d8d8787988596678b8a8a7fad9a5 -e9c8b8696f7a4b5967ac99a7f8d094d7aaa7666178565b68b98680f0af71b7898f596678565b77 -ae7b74c78d61ae7b74676a884b4b647c6267a373575c495a4b5976565b685c495a39291fdb3738 -5c1e6c5415745415745415745c15745415745415745c2479040404 -04040464257c64257c64257c64257c64257c6727845c2479c3324e8524156165687879886c5456 -5c495a878283c8a67170706a815a55a37483d9b56abe8b70867389a373577a6879b6a788ae9870 -7b7779c78d6194788fb6a788b8a8a78f8b97c89887778097b8a8a7b9b7b4a48899d9b899b9b6c0 -c9a799d8c7b8c7b8b7ebdae5e6c9d9d7a899d7c8c8e7c8c8ebdae5f7c9d7c89887d6acb4f6d9d9 -e8d8d8e6c9d9d9a887d3bac4e7c8c8d8d7dab8aab7f7c7a8b8aab7b8a8a7b8a8a79897a8e9d8c8 -999cb58f8b97a6979882839be9d9a6ac99a794788f936f72787988e8bb8894788f867389776a86 -687798e8bb88c8a9a7a374836f596f676a88e8bb88676a88605170676a887879884d3d2cdb3738 -5c1e6c540b745415745c1c7c541574541574540b745c2479040404 -0404045c157464257c67278464257c64257c5c24795c2479c3324e85241551524bdac896ae845d -ab7b45ae9870ae9870d9b56aab7b45c78b4fd9b56ad9b56aefad5ec78b4fd9b56aae9870ae9870 -efad5eefad5ee8bb88c5b699c8b7a8f8d094f7bb86f7d8b8b9b7b4c7b8b7fad9a5fad9a5f7c7a8 -d6acb4d8b7a8f8d094f8ecd8e9b899e6aa9dd7a899e6b8abe9e7e8c9a799d69b98d69b98d7a899 -e9e7d7d7aaa7d7aaa7e6aa9de6b8abf8ecd8e9c8b8d8b7a8e9b899f7be9afad9a5e8dab9c7b8b7 -cac4b7f7c7a8f7c7a8e8dab9acb4acd7c8a8f7bb86f7bb86d9b888b5a898cac4a7e09e75d2966d -c9a799c5b699f8d094c78d61c78d61c8a886b6a788b6a788a37357c5b699a9a7ba472f22db3738 -5c1e6c5415745c15745415745415745415745415745c1c7c040404 -04040464257c64257c5c24795c247964257c64257c5c1c7cc3324e852415766a4d7b77796c5456 -595c59a37357ae98707a6879675f46595c59ae845dd9b56ab7898fa37357815a55ae9870b6a788 -7b7779ae7b74867389b9b7b4b6a788ac99a7d7a899a48899c7b8b7d9b899c6c2cae7c7a5c19ba5 -d8b7a8e9b899e8d8d8e9d8c8e6b8abd7a899e6aa9df5eae7f5eae7e6b8abc89997d7a899ebdae5 -f5eae7f6c5b7e6b8abe6aa9de8d8d8f6d8c8e6b8abe6b8abc8a9a7e9d8c8f6c5b7c8b7a8d8c7b8 -a9a7bad6acb4d7a899a69798b9b7b4a8a6a9b99886c898879897a8c8b688988884ae7b74be8b70 -e6b8abd9b8889888846c5456827668b5a898c5b699a5988792655fa8878682839b3d3630db3738 -6817695415745415745415745415745415745c15745c2479040404 -04040467278464257c64257c6b377964257c64257c64257cc3324e852415675f467c626740474b -40474b8c6540ab7b4561656845535b4b4b64766a4dab7b4594788f565b684b4b64ae845ddf9b5a -6f596f4b5967676a88e6aa9ddf9b5a776a86596678878283e7c7a5f0af71867389616568ac99a7 -f6d8c8f7bb86ac99a7878283e8d8d8e8dab9f6d8c8c8a9a7a48899ebdae5d7c8c8f6c5b7d8b9b7 -988884e6c9d9e8d8d8f6c5b7b8aab78f8b97e7c8c8f7c7a8e6b8ab9588a7778097b8aab7fad9a5 -c8a8866877985a688982839bf8d094a88786676a885a6889867389f0af717c6267565b778f8b97 -b7898fc78d61616568535f835a68897a6879c8a6717a68794b5976565b777a6879472f22db3738 -5c1574540b6c54157455146c54157454157455146c541574040404 -04040464257c5c157464257c64257c64257c5c1c7c5c1c7cc3324e852415675f466c5456304443 -666178a373578c654040474b51524b565b68766a4dab7b455c495a45535b605170ae845dd2966d -6661784b5967696f7ae09e75e6aa87787988595c598f8b97f7bb86e8bb88a48899616568c8b7a8 -f7be9afad9a5a69798827668f7c8c8e9c8b8f5eae79fa19a827668e8d8d8d8b9b7e9e7e8b8a8a7 -70706ad7c8c8f6d9d9f8ecd8c8a9a770706ae6b8abf7be9af6d8c88f8b97616568c9a799f7be9a -e6b8ab787988596678b98680efad93c89887596678596678ae7b74e09e75936f724b59764b5967 -7c6267ab7b455c495a596678565b77815a55a3735792655f565b68565b68815a55472415db3738 -55146c55146c5415745c1574540b7455146c5415745c1574040404 -040404641a7c64257c64257c5c15745c1c7c6414745c1574c3324e852415766a4d8276688c6540 -92655fb6a788ae98706165685c495a7c6267b99886be8b70565b68815a556f596fb6a788b5a898 -936f72ae7b7494788fc5b699b8a8a794788fc78c82ac99a7c8a886d8b9b7b89898e9b899d3bac4 -d69986d8b9b7e6b8abf7c7a8e6b8abc89887e7c8c8f6d9d9ebdae5f6d8c8be8b70d6acb4f6d8c8 -ebdae5f6d9d9d7a899d8b9b7f6c5b7e9c8b8d3bac4e6aa87d7c8c8d8b7a8c8a9a7b8aab7e9b899 -b8aab7b7898fa488999588a7e8dab9999cb586738986738982839bdad4a8747297666178605170 -676a88dac8968673896165685c495a677588e8bb889888847a6879605170677588472f22db3738 -641474540b7454157454157455146c540b745415745c2479040404 -040404641a7c641a7c64257c641a7c5c15745c15745c1574c3324e852415675f46d9b56ac78b4f -c78b4fc78d61ae9870df9b5a8c6540df9b5aae9870ae9870d9b56a8c6540c8a671b5a898b8a8a7 -e8bb88c78d61e7c7a5b9b7b4c8a9a7e8bb88e09e75e9b899d8c7b8d8b7a8f7be9af7be9ad7a899 -d7a899d7aaa7e6aa87e9b899c89887d7a899c78c82d9b899e7c8c8b98680c89997c89997c8a886 -e8d8d8c89887d7aaa7d69b98d9a887f7c7a8d7a899e6b8abd7aaa7efad93f7c7a8e6b8abd8b9b7 -e6b8abf7bb86f7c7a8e9d8c8b9b6c0d3bac4d7a899e9b899d8c7b8b9b7b4d7c8a8be8b70c78d61 -c5b699b5a898d9b899ae845dae845dc8a886b5a898dac896be8b70d2966d98888439291fdb3738 -681769541574541574540b6c54157455146c5415745c2479040404 -040404641a7c64257c641a7c64257c64257c641c745c1574c3324e852415766a4d988884827668 -675f468c6540d9b56a8276686c5456595c59827668c8a6716f596f595c59666178a8a6a9b6a788 -7472977c62677a6879c7b8b7b5a8989588a7b98680a88786d7aaa7e8bb88d3bac4d9b899d7a899 -d7aaa7d7a899f6d9d9f7c7a8e6b8abc89887e6b8abe8d8d8faecc9e9d8c8b99886d8b7a8e9e7e8 -f6d8c8e6b8abc89997e6aa9df6d9d9f6c5b7e6b8abd7aaa7d8b9b7e9c8b8e9b899d8b9b7e9c8b8 -c8b7a8c19ba5d69986b8a8a7d7c8c8a9a7baa88786ae7b74b5a898cbcdc0999cb57c6267827668 -9fa19ac5b69998888492655fa37483c7b8b7d9b888936f72ae7b74c9a799a59887472f22db3738 -55146c540b745c1574541574540b6c5415745415745c1c7c040404 -040404641a7c64257c641c7464257c641a7c5c147c5c1c7cc3324e852415675f46a37357304443 -3044438c6540ab7b45815a5545535b40474b815a55ab7b454b4b6445535b4b4b64766a4da37357 -6051704b59677a6879ae845dca83777879884b5967988884e09e75e09e75a48899616568c8a9a7 -e6b8abf7bb86b5a8987b7779e9d8c8e9b899f7be9aa6979882839bf5eae7e9c8b8f6d8c8c6c2ca -7b7779e9c8b8e9b899f7c7a8c8b7a8878283f7c8c8e6aa9df7be9aa48899787988d6acb4efad93 -d88e7d82839b677588a48899e9b899ae7b745a68895966787a6879b6a7886165685a6889565b77 -605170c8a6716f596f4b5976677588ae7b74d9a88770706a45535b778097a37483472f22db3738 -55146c54157454157455146c5415745415745c15745c2479040404 -0404045c1c7c64257c64257c641a7c5c15745c1c7c5c1574c3324e8524158c65405d4c36302f2a -7c6267ae9870df9b5a6c545651524b4b4b64878283c8a671565b77565b68565b77ae9870b5a898 -666178616568787988d9b56ad8b7a88673897b7779b89898d9b888d9b899b5a898878283d8b7a8 -f7bb86f7c7a8d7aaa7988884f6c5b7d9a887e9d8c8b8a8a7878283f5eae7d8b7a8e9e7e8cbcdc0 -878283e9d8c8e6aa87e8dab9c8a9a7988884f6c5b7e9b899f6c5b7ac99a7787988d7a899e8bb88 -d7a8998f8b97696f7ab7898fd9b888b98680696f7a677588867389b99886616568535f83535f83 -616568b998866f596f4b59764b59677a6879d2966dae7b7445535b40474ba373574d3d2cdb3738 -55146c541574540b6c5415745c157454157455146c64257c040404 -0404045c1574641a7c641a7c5c1c7c641a7c5c15745c1574c3324e8524154d3d2c766a4dab7b45 -a373578276688276688276688c65407c62678782839fa19a8782835d4c368782839fa19a9fa19a -8782838c6540878283b5a898b8a8a7ae9870ae845db8a8a7b8a8a7c7b8b7c9a799d88e7dd8b9b7 -c8a886c7b8b7e6b8abe9b899d8b7a8c78c82cbcdc0e8dab9e8dab9e8d8d8b99886d7c8c8e9d8c8 -e8dab9e8d8d8c9a799d8b9b7f6c5b7e9c8b8f7c8c8d7a899d8b9b7efad93d7a899d8b9b7e7c7a5 -d7c8c8c89997b7898fb8a8a7e9d9a6a9a7baa374838673899897a8d9d5b87887a86661786f596f -878aa7d8c7b87780977a68797c6267867389d9b888a48899a374835d4c36595c594d3d2cdb3738 -641c745415745415745415745415745c15745415745c2479040404 -0404045c147c5c1574641a7c641a7c641a7c5c1c7c5c1c7cc3324ea8291639291f472f22472415 -472415472415472415472415472415472415472f22472415472f22472f22472f22472f22472f22 -47241547241547241539291f47241547241539291f39291f472f22472f2247241547241539291f -39291f47241539291f472f223d3630472f2239291f472f224d3d2c4d3d2c3d36303d3630472415 -4d3d2c3d3630472f22302f2a472f22472f223d36304d3d2c4d3d2c4d3d2c4d3d2c3d36303d3630 -4d3d2c4d3d2c4d3d2c46423b46423b46423b472f223d363046423b46423b46423b4d3d2c46423b -40474b3d36304d3d2c472f224d3d2c46423b46423b46423b4d3d2c46423b19271c472415db3738 -641c745415745415745415745415745415745415745c1574040404 -040404641474641474641a7c5c1c7c641a7c641a7c5c1c7cb0254edb3738cd342acd342acd342a -cd342acd342acd342acd342acd342acd342acd342acd342acd342adb3738cd342adb3738cd342a -cd342acd342acd342acd342acd342acd342acd342adb3738cd342adb3738cd342acd342acd342a -cd342acd342acd342acd342acd342acd342acd342acd342adb3738cd342acd342acd342acd342a -cd342acd342acd342acd342acd342acd342acd342acd342ab63024cd342ab63024cd342acd342a -cd342acd342acd342acd342acd342acd342ab63024b63024b63024b63024b63024b63024b63024 -b63024b63024b63024b63024b63024b63024b63024b63024b63024a82916b63024cd342adb3738 -55146c5415745c157454157454157455146c541574541c6c040404 -0404045c147c5c1c7c5c1c7c641a7c641a7c641a7c5c1c7c641c74641c74681769641474681769 -681769681769681769681769681769681769681769681769681769681769681769681769681769 -6817696817695c1464681769660b656817696f175c781a666817696817696817696f175c681769 -6f175c681769681769781a66781a66792666781a667926666a2976681769781a666f175c6f175c -6f175c781a66781a66781a666f175c781a66781a66792666872164781a6687216479266681205c -781a667926668a2f627926667926668721648721648a2f6281205c8d1d5c8721648d1d5c872164 -8721648a2f628721648d1d5c87216487216499275e8721648d1d5c8721648d1d5c8d1d5c872164 -55146c5415745415745c15745415745415745415745c2479040404 -0404045c15745c1574641a7c641a7c5c1c7c5c147c5c1574641a7c5c147c5c0c735c0c735c0c73 -540c7c5c0c73540b745c0c735c0c73540b74540b74540b74540b74540b745c0c735c0c735c0c73 -5c15745c15745c1574540b745c0c735c147c5c147c54157454157455146c5c0c735c1574541574 -540b74540b74540b6c540b744c1575540b74540b745415745c1574540b6c541574541574541574 -540b74540b74540b74540b74540c7c540b74541574540b74541574540b74540b74540b744c0b74 -5415744c157554147c54157454147c4c0b744c1575541c7c5415744c15754c0b744c0b744c1575 -4c0b744c15754c15754c15754c0b744c15754c0b744c0b744c1575540b744c0b744c0b7454147c -54157455146c5415745415745c157454157455146c5c1c7c040404 -040404641a7c641a7c641a7c641a7c641a7c5c15745c147c5c147c5c15745c0c735c15745c0c73 -540b6c5c0c735c1574540b745c15745c15745c15745c0c73540b6c5c0c735c0c73540b74540b74 -5c0c735c1574540b74540b6c5c15745c157455146c5c1e6c5c15745c157455146c5415745c0c73 -5c15745c15745415745c15745c1574540b6c55146c5c24795c24795c15745c15745c157455146c -541574540b6c540b745415745c1574540b74540b74541574540b745c15745415745415745c1574 -55146c540b745c157455146c54157455146c54157454157454157454157455146c541574540b6c -5415745415745c1c7c54157455146c54157454157454157454157455146c540b6c55146c541574 -541574541574541574541c7c54157455146c5415745c2479040404 -040404641a7c641a7c5c147c5c1c7c5c147c5c15745c15745c147c5415745c0c735c15745c0c73 -540b745c1574540b745c0c735c1574540b6c540b6c540b6c5c0c73540b74540b6c5c1574540b6c -5415745c1574540b6c5c0c735c1574540b6c55146c5c24795c15745c15745c0c735c0c73540b6c -5c15745c15745c15745c15745c157455146c5c15745c24795415745c15745415745c15745c1574 -541574540b6c55146c540b74540b6c540b745c15745c0c73540b74540b6c540b6c540b6c541574 -541574540b6c540b6c540b6c54157455146c5415745415745415745c157455146c540b6c541574 -54157455146c5415745415744c157554157455146c541574540b6c4c086c540b6c4c1575541574 -5415745415745415745415745415745415745415745c1574040404 -0404045c1c7c5c147c5c15746414745c15745c15745c15745c147c5c15745c0c735c1574540b74 -540b6c5c1574540b6c5c0c73540b745c157455146c5c0c73540b6c5c15745c0c735c0c73540b6c -5c15745c1574540b6c5c1574540b6c540b6c5c15745c1e6c55146c540b6c55146c5c1574500464 -540b7455146c5c15745c0c735c1574540b74540b6c5415745415745c15745415745415745c1574 -5415745c1574540b74540b6c540b745c15745c1574541574540b6c55146c540b7455146c540b6c -540b6c540b6c4c1575540b6c541574541574540b6c540b6c55146c541574540b7455146c4c146c -54157455146c54157454157455146c55146c541574540b6c55146c540b6c541574541574541574 -54157454157454157454157455146c5415745415745c2479040404 -0404045c1574641a7c641a7c641a7c6414746414745c147c5c15745c15745c15745c0c735c1574 -5c0c735c0c735c0c735c15745c15745c15745c15745c15745c0c73540b745c1574540b6c5c0c73 -5415745c0c7355146c540b74540b6c540b6c540b74540b6c5415745c15745415745c15745c0c73 -540b6c540b74540b6c540b6c540b6c55146c540b6c540b6c5c1574541574540b6c5c157455146c -540b6c5415745c15745c1574541574540b745c15745c15745c0c73540b6c540b6c540b6c540b6c -54157455146c5c157454157454157455146c540b6c540b6c5c157454157455146c541574541574 -540b6c4c1575541574541574540b6c541574540b6c4c086c54157455146c4c1575541574541574 -5415745415745415745415745415745415745415745c2479040404 -040404641a7c641a7c5c1c7c641a7c5c147c5c147c5c15745c15745c15745c0c735c1574641474 -5c1574540b6c5c1574540b74540b6c5c15745c15745c15745c0c73540b6c540b745415745c1574 -5c15745c15745c0c73540b6c5c15745c1574540b6c5c15745c15745c1574541574540b74540b6c -5c157455146c540b74540b6c540b6c5c1574540b6c540b745c15745c15745c1574541574541574 -5c15745415745415745c15745415745415745c1574540b745c15745415745c1574541574541574 -54157455146c5c2479541574541c6c541574540b6c540b6c541574541574541574541574541574 -5415745415745c157455146c541574541574541574540b74540b6c55146c5c2479541574541574 -54157454157454157454157454157454157454157464257c040404 -0404045c15745c147c5c15745c1c7c6414745c15745c1574641a7c5c1574540b745c15745c1574 -5c15745c0c735c157455146c5c1574540b6c540b745c1574540b6c5c0c735c1574540b6c541574 -5c15745c15745415745c157455146c5c1574540b7455146c5c15745415745c1574540b6c55146c -64147455146c540b6c55146c5415745c1574540b6c5c157455146c540b74540b6c541574541574 -5c15745c15745415745415745c15745c1574540b74540b6c540b74540b6c5c0c7355146c541574 -541574541574541574541c6c5415745c1574540b74540b6c54157455146c5415745415744c086c -55146c5415745415744c157555146c5415745c15744c0b74540b6c541574541574541574541574 -5c24795415745415745c2479541574541c7c5c15745c2479040404 -0404045c15745c15745c15746414745c1c7c6414745c0c7c64257c5c15745c0c735c0c73540b74 -540b745c15745c15745c15745c15745c157455146c540b745c15745c15745c1574540b6c5c0c73 -5c15745c15745c1574540b6c540b6c5c1574540b6c540b6c5415745c15745c1574540b6c540b74 -55146c540b6c55146c540b6c540b6c5c15745c15745c1574540b6c5c15745c1574540b6c540b6c -5c15745c157455146c55146c5c157455146c5c15745c15745c15745415745c15745415745c1574 -5c15745c15745415744c146c541574541c6c541574540b6c4c086c55146c540b6c54157455146c -4c086c55146c540b6c55146c540b6c54157455146c540b6c55146c540b6c541574541574541574 -5415745415745415745415745415745415745415745c2479040404 -0404045c0c735c147c5c15745c147c641a7c641a7c5c0c735c15745c1574540b74540b6c5c1574 -5c1574540b745c15745c1574540b745c15745c1574540b6c540b6c5c15745c1574540b745c1574 -5c15745c15745c1574540b74540b6c540b74540b6c5415745c0c735415745c1574540b6c540b6c -540b74540b6c540b7455146c540b6c5c1574541574540b6c540b6c540b6c5c1574540b6c540b6c -5c15745c1574541574540b6c540b745c1574540b6c5c1574540b6c55146c540b74541574541574 -5415745415745415745415745c15745415745c1574541574541574541574540b6c55146c540b74 -540b6c4c086c541574541574540b6c4c086c5415745415744c146c540b7455146c4c146c541574 -5415745415745c1c7c5415745415745415745415745c2479040404 -0404045c0c735c1574641a7c6414745c147c5c15745c0c735c24795c0c735c0c735c0c735c1574 -5c1574540b745c0c73540b74540b6c5c1574540b6c5415745c15745415745c157455146c540b6c -5c15745415745c1574540b6c540b6c540b6c5c15745415745c15745c15745c157455146c5c1574 -5c15745c15745c1574540b6c5c0c73541574540b6c5c1574540b6c540b7455146c5415745c1574 -540b74541574540b6c540b74540b6c55146c540b745c1574540b6c54157455146c5c1574541574 -55146c55146c5415745c15745415744c146c541574541574540b6c540b6c540b6c54157455146c -4c086c55146c540b6c540b7455146c54157455146c4c15754c146c55146c4c1575541574541574 -5415745415745415745415745415745c15745415745c2479040404 -0404045c15746414745c1c7c641a7c641a7c5c15745c15745c15745c15745c0c735c15745c1574 -5c15745c0c73540b745c0c735c0c735c0c735c0c73540b6c5c15745c15745c0c735415745c1574 -5415745c1574541574540b745004645c0c73540b6c540b745c15745c1574540b6c5415745c0c73 -5415745c0c73540b74540b6c55146c540b6c55146c5c0c73540b6c5415745c0c7355146c540b74 -540b6c540b745c0c7355146c540b745c1574540b6c540b6c540b6c540b6c540b74541574540b6c -540b6c540b6c5415745c15745415744c1575540b6c55146c540b6c4c146c540b7455146c4c086c -55146c5415744c086c540b6c55146c540b745415744c146c541574541574541574541574541574 -54157454157455146c5415745415745415745415745c1574040404 -040404641a7c641a7c5c1574641a7c641a7c5c147c5c0c735c147c5c147c5c15745415745c1574 -540b74541574540b745c15745415745c0c73540b6c540b745415745c15745c15745c1574541574 -5c15745415745c15745c0c735c0c73540b74540b6c5c15745c15745c1574540b6c540b6c540b6c -540b6c540b74540b6c540b6c540b6c540b6c540b74540b6c540b6c540b6c540b745c157455146c -540b74540b6c540b6c540b74540b6c540b74540b6c5c1574540b74540b74540b6c540b6c540b6c -541574540b6c55146c4c146c541574541574541574541574540b6c540b6c55146c4c086c55146c -540b74540b6c5415744c086c540b7455146c540b6c541574540b6c55146c4c086c55146c4c146c -55146c4c157555146c5415745415745415745415745c2479040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404040404040404040404040404 -040404040404040404040404040404040404040404040404040404 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/algor.gif b/Docs/Books/algor.gif Binary files differdeleted file mode 100644 index 6b640dee39c..00000000000 --- a/Docs/Books/algor.gif +++ /dev/null diff --git a/Docs/Books/algor.txt b/Docs/Books/algor.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/algor.txt +++ /dev/null diff --git a/Docs/Books/dbi.eps b/Docs/Books/dbi.eps deleted file mode 100644 index e636ad315e7..00000000000 --- a/Docs/Books/dbi.eps +++ /dev/null @@ -1,1212 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/dbi.eps -%%CreationDate: Sun Dec 31 14:29:02 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 296 383 -%%EndComments -%%BeginPreview: 100 131 1 131 -% fffffffffffffffffffffffff0 -% 80aaaaaaaaaaaaaaaaaaaaa810 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000004401012000000000010 -% 80000000000240200000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80a00000000400000000000010 -% 800552a4251100000000000010 -% 80900411110100000000000010 -% 80000000000000000000000010 -% 80012000020800000000000010 -% 81fedffffdf7fffffffffff810 -% 8112a4924a4a24444444444810 -% 80ed5b6db58adbbbbbbbbbb010 -% 81001555554aa000a000a02810 -% 81638aaaaa8558745c68a85010 -% 81424555554aa8aa2a2a50d410 -% 8152a555554ad4aa145428a810 -% 8142c286a88aa8ab8a5450a810 -% 8162a471484aac548a5458a810 -% 81428491048aa8ab0a01a8a810 -% 815008e14b4ad4ad4a2850a810 -% 8142b0094a8aa855445458a810 -% 8162a9d68aa554aa8a5428a810 -% 8142a92aca8aa8aa8a5728a810 -% 8152a8d54acad4ad145428a810 -% 8142a8aa8a855455165528a810 -% 8162d4514a8aa8542a5450a810 -% 8140aa068282a000d004a72810 -% 8155558935355b6f592f595010 -% 815556b6d5d56a92aadbb75810 -% 8155aaaaaa55556d555faaa810 -% 8155555555aaaaaaaadbeda810 -% 800000000000000000ffdac010 -% 800000000000000001fe754010 -% 800000000000000003dda56010 -% 800000000000000007f9bfe010 -% 80000000000000000fab6f6010 -% 80000000000000001fdb74a010 -% 8000000000000007fedd577010 -% 800000000000003fbfe8aeb010 -% 8000005a954000ff7faebfb810 -% 80000ffffffffffdefd9053810 -% 80001effffffffd52f697b5010 -% 80007bf7ffffffadffdc4fa010 -% 8000f56ab6ddf77b55abda4010 -% 8003b56b6dbbdfd7aff4a10010 -% 8007d66ddbaebcb5b7b1800010 -% 800ea9b6bed7efaedde3000010 -% 801f7abdeada5adb56d2000010 -% 801dca6db555bdfd7aa6000010 -% 803eb6ebeb77eb4eade4000010 -% 803b553dabac9bbb2a68000010 -% 807f4b6bf8d377abbac0000010 -% 807da8976fadd6b7d550000010 -% 80fe9b4af976b7766048000010 -% 80fba4a3bf555bebea90000010 -% 81ff6d54fbfb2bbf4a50000010 -% 81fbe4c15d56ebeaa2a0000010 -% 83ff5a543ffd19df6d00000010 -% 83ffbaa516b3a7bc8b30000010 -% 83f572bd4bfef97aeea0000010 -% 83af7b384eeaabf73c80000010 -% 87a5b97f0055b76af300000010 -% 85a7de7ff29f4ee9f400000010 -% 87e3b57ff925dd5b4100000010 -% 8d23ec7abe1254a76f00000010 -% 876352ef55e445d4ff00000010 -% 8b43fcdce13f5ef7fe00000010 -% 8ac1e5f6a00031b4ea00000010 -% 8f43a935600005dafc00000010 -% 8b435a7a400002b4f600000010 -% 8ac3ec246000036c6900000010 -% 8d235438800002ba5c00000010 -% 8fc3f012c00002ac5a00000010 -% 8563a82a800001d82200000010 -% 8aa36034800001f47600000010 -% 86a3d029000001583000000010 -% 85e3e026000001582e00000010 -% 8797c058000000f43400000010 -% 84afc02ad00001343100000010 -% 83a780c4880000d83500000010 -% 836b805a080000d82a00000010 -% 817380ec080000a41000000010 -% 81688075580000b43500000010 -% 80b62051a80000281900000010 -% 804d486ef00000e81400000010 -% 803dc58e600000241b00000010 -% 8005b96fc00000c80c00000010 -% 801b9b6f800000a80d00000010 -% 801edb7e800000540480000010 -% 801ebbeb000000140400000010 -% 801c055e800000580550000010 -% 801600057000002c02a8000010 -% 801500028c0000240324000010 -% 80160002b40000160294000010 -% 80140001ac0000118174000010 -% 80134000200000154000000010 -% 801540000000000ab000000010 -% 801520000000000a5000000010 -% 8015400000000004e000000010 -% 800fc000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80810000000000000000000010 -% 815a6900000000000000000010 -% 804a4100000000000000000010 -% 81022800000000281080120010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -281.300715 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 131 8 -% Transformation matrix -[ 100 0 0 131 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202 -020202ffffffffffffffffffffffffffffffd9eaec7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaecd9eaecffffffffffffffffffffffffffffffd9eaecd9eaecffffffffffffffffff -ffffffffffffd9eaecc7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d9eaecffffffffffffd9eaecffffffffffffffffffffffffd9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffc7c7c9c7c7c99b9b9fc7c7c9afafb2c7c7c99b9b9fc7c7c9afafb2c7c7c9c7c7c9c7c7c9 -afafb2d9eaecc7c7c9c7c7c9afafb2c7c7c9afafb2afafb2c7c7c9c7c7c9afafb2c7c7c99b9b9f -afafb2c7c7c99b9b9fafafb2d9eaecafafb2c7c7c9d9eaecffffffc7c7c9d9eaecd9eaecc7c7c9 -afafb2c7c7c9ffffffc7c7c9c7c7c9c7c7c9d9eaecafafb2ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaecffffffd9eaecc7c7c9c7c7c9d9eaecc7c7c9d9eaecd9eaecd9eaecd9eaecc7c7c9 -d9eaecffffffd9eaecffffffd9eaecffffffc7c7c9afafb2d9eaecd9eaecafafb2ffffffd9eaec -c7c7c9d9eaecd9eaecc7c7c9d9eaecd9eaecafafb2afafb2ffffffc7c7c9d9eaecd9eaecd9eaec -d9eaecd9eaecffffffd9eaecd9eaecd9eaecd9eaecc7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffc7c7c9d9eaecafafb2ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff9b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffff8a8a8ed9eaec7a7b80c7c7c9afafb2 -c7c7c9d9eaecd9eaecc7c7c9c7c7c9ffffffafafb2c7c7c9d9eaecc7c7c9c7c7c9d9eaecafafb2 -d9eaecc7c7c9c7c7c9c7c7c9c7c7c9d9eaecc7c7c9d9eaecafafb2d9eaecd9eaecafafb2c7c7c9 -d9eaecc7c7c9ffffffffffff9b9b9fd9eaec9b9b9fafafb2d9eaecd9eaecc7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffd9eaec8a8a8ed9eaecd9eaec9b9b9fd9eaec -8a8a8effffff6c6c71c7c7c9afafb2d9eaec9b9b9fc7c7c9c7c7c9afafb2afafb2afafb2afafb2 -afafb2afafb2c7c7c96c6c719b9b9fc7c7c9c7c7c9d9eaecafafb29b9b9fc7c7c9afafb2c7c7c9 -afafb29b9b9fffffffffffff9b9b9f9b9b9fd9eaecafafb26c6c71d9eaecc7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffafafb2afafb2ffffffd9eaecafafb2ffffff -c7c7c9d9eaecc7c7c99b9b9fc7c7c9c7c7c9d9eaecafafb29b9b9fafafb2c7c7c99b9b9fc7c7c9 -c7c7c98a8a8ed9eaecafafb2c7c7c9c7c7c9afafb2c7c7c9c7c7c99b9b9fafafb2afafb2c7c7c9 -8a8a8ed9eaecffffffc7c7c9afafb2afafb2c7c7c9c7c7c98a8a8ec7c7c9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffc7c7c9ffffffc7c7c9ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafb2 -d9eaecc7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffff7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e5d9eaecffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5d9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be7dd6e57dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e57dd6e57dd6e57dd6e5d9eaec7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e509a4be09a4be -09a4be09a4be09a4be09a4be7dd6e5d9eaecd9eaecffffffd9eaec7dd6e57dd6e57dd6e57dd6e5 -7dd6e509a4be09a4be09a4be09a4be09a4be7dd6e57dd6e57dd6e57dd6e57dd6e57dd6e509a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4bed9eaecffffff -d9eaec09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be7dd6e5ffffffffffff7dd6e509a4be09a4be09a4be09a4be7dd6e5d9eaecd9eaec7dd6e5 -09a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5 -ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e57dd6e5ffffffd9eaec7dd6e509a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5 -ffffff7dd6e509a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4bed9eaecffffff7dd6e509a4be09a4be09a4be7dd6e5 -7dd6e57dd6e57dd6e509a4be09a4be09a4be09a4be09a4be09a4be7dd6e509a4be09a4be7dd6e5 -7dd6e509a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -d9eaecffffff7dd6e509a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be7dd6e5d9eaec09a4be -09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be7dd6e5ffffff -ffffff7dd6e509a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffff7dd6e509a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -7dd6e5ffffff7dd6e509a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4bed9eaec7dd6e509a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be7dd6e5ffffffffffff7dd6e509a4be7dd6e5 -7dd6e509a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4beffffffffffff7dd6e57dd6e57dd6e57dd6e5d9eaec -d9eaec09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -d9eaec7dd6e57dd6e57dd6e57dd6e5ffffff7dd6e509a4be7dd6e5ffffff7dd6e509a4be09a4be -09a4be09a4be7dd6e5d9eaecffffff09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4beffffffd9eaec7dd6e57dd6e57dd6e57dd6e5d9eaec -ffffff7dd6e509a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be7dd6e57dd6e57dd6e57dd6e509a4be09a4bed9eaecffffff7dd6e57dd6e57dd6e5 -7dd6e57dd6e57dd6e57dd6e57dd6e509a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4beffffffffffff09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4bed9eaecd9eaec09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffd9eaec09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffff7dd6e509a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4beffffffd9eaec09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -ffffffd9eaec09a4be09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be09a4beffffffd9eaec09a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4bed9eaec -ffffff7dd6e509a4be09a4be09a4be09a4beffffff7dd6e509a4be09a4be09a4be09a4be09a4be -09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be7dd6e5ffffff7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be7dd6e5ffffff -7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5ffffffd9eaec09a4be -09a4be09a4be09a4be7dd6e57dd6e509a4be09a4be09a4be7dd6e5ffffff09a4be09a4be09a4be -09a4be09a4be09a4bed9eaecffffff09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4bed9eaecffffff7dd6e509a4be09a4be09a4be09a4be09a4be09a4bed9eaecffffff -7dd6e509a4be09a4be09a4be09a4be09a4beffffffd9eaec09a4be09a4be09a4be09a4be09a4be -7dd6e5ffffffffffff09a4be09a4be09a4be09a4be7dd6e5d9eaec7dd6e509a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be7dd6e5d9eaecffffff -d9eaec7dd6e57dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be7dd6e5d9eaecffffff -ffffffd9eaecd9eaec7dd6e509a4be09a4be09a4be7dd6e5d9eaecffffffd9eaec7dd6e509a4be -09a4be09a4be7dd6e5d9eaecffffffd9eaec7dd6e509a4be09a4be09a4be09a4be09a4be09a4be -7dd6e57dd6e5ffffffffffffffffff7dd6e57dd6e57dd6e57dd6e57dd6e5d9eaec7dd6e509a4be -09a4be09a4be09a4be09a4be7dd6e5d9eaecffffffffffff7dd6e57dd6e57dd6e57dd6e509a4be -c7c7c9d9eaec09a4be09a4be09a4be09a4be7dd6e59b9b9f6c6c716c6c717dd6e57dd6e509a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be7dd6e509a4be09a4be -09a4be7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -7dd6e57dd6e509a4be09a4be09a4be09a4be09a4be7dd6e509a4be09a4be7dd6e509a4be09a4be -09a4be09a4be7dd6e509a4be09a4be7dd6e509a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be7dd6e509a4be09a4be09a4be7dd6e509a4be7dd6e57dd6e509a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be7dd6e57dd6e509a4be09a4be7dd6e57dd6e57dd6e56c6c71444348 -1f1f2209a4be09a4be09a4be09a4be09a4be7a7b805d5e62afafb25d5e629b9b9f09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be0202027a7b80 -4443480202025050546c6c714443485050545d5e6250505450505434353909a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be3435391f1f227a7b80 -3435390202023435398a8a8e6c6c718a8a8e6c6c717a7b805d5e626c6c7109a4be09a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be -09a4be09a4be09a4be09a4be09a4be09a4be09a4be09a4be5d5e626c6c711f1f221f1f225d5e62 -1f1f221f1f220202021f1f226c6c716c6c718a8a8e5050547a7b805d5e6244434809a4be09a4be -09a4be09a4be7dd6e5ffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaecd9eaec -d9eaecd9eaecd9eaecd9eaecd9eaecffffffd9eaec5050544443483435391f1f221f1f221f1f22 -1f1f223435391f1f225050545d5e625050545050546c6c717a7b808a8a8e3435395d5e62afafb2 -d9eaecd9eaecffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd9eaec3435391f1f221f1f224443483435391f1f22020202 -5d5e625d5e628a8a8e6c6c715d5e624443487a7b808a8a8e7a7b807a7b808a8a8e5050547a7b80 -d9eaecffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd9eaec5050543435394443483435395d5e623435391f1f221f1f22 -9b9b9f8a8a8e5050545d5e626c6c716c6c719b9b9f6c6c718a8a8e9b9b9f9b9b9f505054343539 -9b9b9fffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaec5d5e621f1f221f1f223435393435395050545050540202027a7b80 -c7c7c94443485050548a8a8e7a7b805d5e627a7b805d5e623435393435393435391f1f22020202 -afafb2ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff7a7b803435393435391f1f223435394443486c6c716c6c713435399b9b9f -6c6c715050547a7b808a8a8e3435395050543435393435393435393435396c6c713435391f1f22 -c7c7c9ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaec6c6c713435393435391f1f223435391f1f223435396c6c714443484443488a8a8e -5050545050548a8a8e3435391f1f226c6c715d5e623435397a7b807a7b808a8a8e6c6c71343539 -8a8a8effffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc7c7c9c7c7c98a8a8e505054444348343539 -3435391f1f221f1f221f1f221f1f221f1f223435391f1f224443487a7b807a7b804443486c6c71 -7a7b807a7b807a7b806c6c715050545d5e627a7b803435393435398a8a8e8a8a8e7a7b80343539 -1f1f22ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffafafb26c6c711f1f221f1f221f1f22343539343539343539 -4443484443483435391f1f221f1f220202023435393435393435396c6c716c6c715d5e625d5e62 -afafb29b9b9f8a8a8e7a7b809b9b9f8a8a8e1f1f223435394443489b9b9f3435398a8a8e444348 -1f1f229b9b9fffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd9eaecd9eaecc7c7c9afafb29b9b9f -9b9b9f6c6c716c6c717a7b807a7b808a8a8e9b9b9f9b9b9f9b9b9f9b9b9f9b9b9f8a8a8e8a8a8e -8a8a8e9b9b9f9b9b9fafafb2afafb2afafb2afafb2c7c7c9c7c7c9d9eaecd9eaecd9eaecffffff -ffffffffffffd9eaecafafb24443481f1f223435391f1f223435394443483435391f1f225d5e62 -5050543435394443481f1f221f1f220202021f1f224443485d5e627a7b807a7b805050546c6c71 -7a7b809b9b9f7a7b809b9b9f6c6c715d5e624443481f1f225050544443485050548a8a8e343539 -343539343539d9eaecffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd9eaec7a7b801f1f22020202343539020202020202 -1f1f221f1f220202020202021f1f220202021f1f220202020202020202020202021f1f22020202 -0202020202020202020202020202020202020202020202020202020202020202021f1f22343539 -4443485050541f1f220202023435391f1f223435394443483435391f1f225d5e624443485d5e62 -5050544443487a7b804443481f1f221f1f223435394443483435395d5e626c6c711f1f228a8a8e -8a8a8e8a8a8eafafb29b9b9f9b9b9f9b9b9f7a7b804443485d5e621f1f229b9b9fafafb2343539 -1f1f22505054ffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff9b9b9f1f1f223435394443484443485d5e62444348343539 -1f1f221f1f223435391f1f221f1f221f1f221f1f221f1f221f1f221f1f221f1f223435391f1f22 -1f1f221f1f220202021f1f221f1f221f1f220202020202021f1f221f1f220202021f1f22020202 -0202021f1f220202021f1f224443483435397a7b805050546c6c715d5e626c6c71505054505054 -7a7b806c6c716c6c713435391f1f221f1f221f1f225d5e625050546c6c717a7b803435398a8a8e -c7c7c97a7b80afafb29b9b9f8a8a8e7a7b806c6c718a8a8e7a7b805050549b9b9fafafb29b9b9f -505054d9eaecffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc7c7c95050541f1f223435394443484443485050541f1f225d5e62343539 -1f1f223435394443483435395050544443480202024443481f1f225050543435391f1f22343539 -1f1f224443480202021f1f223435393435393435391f1f223435390202021f1f224443481f1f22 -4443483435390202023435393435397a7b805d5e628a8a8e4443481f1f228a8a8e8a8a8e444348 -5d5e621f1f223435395d5e624443481f1f220202024443485050546c6c718a8a8e4443486c6c71 -9b9b9fc7c7c99b9b9f7a7b807a7b806c6c715d5e625050544443481f1f225050547a7b807a7b80 -afafb2ffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff8a8a8e3435391f1f223435395050545050546c6c717a7b805d5e625d5e625d5e62 -3435395050545050548a8a8e7a7b806c6c71505054505054505054343539444348444348444348 -5d5e624443483435395050544443480202024443484443483435391f1f224443483435391f1f22 -5d5e624443480202024443485d5e627a7b804443486c6c714443486c6c715d5e623435395d5e62 -7a7b807a7b805d5e627a7b805d5e623435391f1f223435395050547a7b807a7b803435398a8a8e -8a8a8e6c6c716c6c715d5e626c6c715050546c6c714443481f1f225d5e629b9b9f5d5e628a8a8e -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -afafb23435393435396c6c715d5e625050544443487a7b805d5e628a8a8e9b9b9f6c6c716c6c71 -3435398a8a8e4443488a8a8e5d5e625d5e627a7b805050546c6c715d5e62505054444348505054 -4443480202026c6c713435391f1f225d5e625d5e624443481f1f22444348343539444348343539 -1f1f221f1f221f1f224443485050545050546c6c715d5e627a7b806c6c715d5e62020202505054 -6c6c714443489b9b9f4443481f1f224443483435391f1f225d5e624443485d5e626c6c718a8a8e -afafb28a8a8e3435395d5e628a8a8eafafb2c7c7c9c7c7c9d9eaecafafb2c7c7c9c7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9f -1f1f223435394443481f1f224443487a7b807a7b807a7b801f1f227a7b807a7b80afafb27a7b80 -4443486c6c718a8a8e5d5e628a8a8e6c6c715050543435395050547a7b805d5e625d5e625d5e62 -5050545050548a8a8e6c6c716c6c714443481f1f225d5e625d5e625050545050545050545d5e62 -3435390202028a8a8e7a7b805d5e625d5e625d5e623435396c6c713435397a7b805d5e62444348 -6c6c711f1f226c6c716c6c715050545050540202020202028a8a8e5050544443488a8a8ec7c7c9 -9b9b9f8a8a8e505054d9eaecffffffffffffd9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafb2343539 -3435394443485d5e623435396c6c716c6c716c6c717a7b808a8a8e9b9b9f8a8a8e4443487a7b80 -6c6c714443485d5e620202026c6c716c6c716c6c715050543435391f1f22444348343539444348 -8a8a8e5d5e621f1f227a7b806c6c717a7b806c6c714443484443485d5e621f1f22444348505054 -3435394443486c6c713435395050546c6c715d5e626c6c716c6c715d5e625d5e625d5e62444348 -4443487a7b805050543435396c6c716c6c715050541f1f22444348343539505054d9eaecc7c7c9 -6c6c71343539c7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec444348343539 -4443481f1f225d5e626c6c716c6c711f1f226c6c714443488a8a8e8a8a8e7a7b807a7b806c6c71 -6c6c711f1f225050545d5e625d5e626c6c713435395050546c6c715050546c6c71505054444348 -9b9b9f4443483435397a7b805d5e624443486c6c716c6c715d5e628a8a8e7a7b808a8a8e6c6c71 -3435395d5e625d5e624443485050545d5e626c6c713435393435397a7b803435391f1f229b9b9f -8a8a8e8a8a8e6c6c716c6c71343539343539afafb23435391f1f226c6c716c6c71d9eaecc7c7c9 -5050547a7b80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9f1f1f22343539 -1f1f226c6c715d5e621f1f226c6c715050548a8a8e8a8a8e6c6c719b9b9f7a7b80c7c7c9444348 -4443486c6c715d5e623435397a7b801f1f224443486c6c714443486c6c717a7b808a8a8e9b9b9f -9b9b9f7a7b807a7b806c6c718a8a8e8a8a8e6c6c717a7b807a7b805d5e625d5e62505054444348 -1f1f226c6c717a7b806c6c715050543435396c6c715d5e624443485d5e626c6c717a7b806c6c71 -6c6c711f1f225050544443487a7b807a7b808a8a8e5d5e625d5e62505054afafb2c7c7c9afafb2 -5d5e62d9eaecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffff4443481f1f22343539 -3435395d5e626c6c716c6c716c6c719b9b9f5d5e628a8a8e4443486c6c716c6c71afafb25d5e62 -3435396c6c717a7b806c6c716c6c711f1f225050543435391f1f227a7b805d5e626c6c717a7b80 -3435398a8a8e7a7b800202025d5e628a8a8e0202023435396c6c710202024443486c6c717a7b80 -5d5e625d5e621f1f224443485d5e626c6c716c6c716c6c713435393435395d5e627a7b809b9b9f -7a7b803435397a7b803435395050548a8a8e5050545d5e621f1f22343539afafb2c7c7c97a7b80 -afafb2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffc7c7c91f1f223435391f1f22 -5d5e623435393435396c6c716c6c719b9b9f3435398a8a8e8a8a8e6c6c717a7b809b9b9f7a7b80 -5050545d5e624443485d5e625d5e625050543435394443485050547a7b809b9b9f9b9b9f7a7b80 -1f1f225d5e625d5e626c6c715d5e626c6c716c6c717a7b807a7b807a7b806c6c717a7b80444348 -5d5e628a8a8e5050543435396c6c718a8a8e5d5e625050546c6c715d5e623435396c6c718a8a8e -9b9b9f5d5e628a8a8e5050549b9b9f5d5e62c7c7c96c6c711f1f226c6c71afafb27a7b809b9b9f -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffff5d5e620202023435391f1f22 -4443484443485050549b9b9f7a7b808a8a8eafafb26c6c717a7b808a8a8e4443489b9b9f7a7b80 -5050546c6c716c6c715050543435395050543435395050544443485d5e621f1f226c6c719b9b9f -9b9b9f7a7b803435399b9b9f6c6c716c6c718a8a8e6c6c711f1f227a7b805d5e62505054343539 -5d5e627a7b805d5e621f1f221f1f228a8a8e7a7b806c6c717a7b805d5e625d5e621f1f226c6c71 -8a8a8e5050546c6c711f1f22afafb25d5e629b9b9f9b9b9f5050549b9b9fd9eaec8a8a8ed9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffc7c7c9020202020202444348444348 -0202025d5e626c6c715050547a7b807a7b809b9b9f8a8a8e9b9b9f9b9b9f9b9b9f9b9b9f6c6c71 -8a8a8e7a7b806c6c716c6c713435395050544443481f1f224443487a7b804443486c6c716c6c71 -5d5e624443488a8a8e5d5e626c6c711f1f228a8a8e9b9b9f5d5e625d5e625d5e628a8a8e6c6c71 -7a7b804443480202025050545d5e628a8a8e5d5e626c6c715050545050545d5e62444348343539 -3435398a8a8e7a7b808a8a8e8a8a8eafafb28a8a8eafafb2505054afafb29b9b9f8a8a8effffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffff5050540202020202021f1f221f1f22 -3435395d5e625050541f1f229b9b9fc7c7c97a7b805d5e629b9b9f5050549b9b9f5d5e626c6c71 -afafb2d9eaec7a7b807a7b803435395d5e625050543435393435395d5e624443485d5e627a7b80 -5d5e626c6c717a7b801f1f227a7b808a8a8e5050546c6c717a7b806c6c715050545050545d5e62 -6c6c718a8a8e1f1f225050546c6c716c6c715050543435397a7b803435395d5e628a8a8e6c6c71 -5d5e625d5e626c6c719b9b9fafafb2afafb2afafb2c7c7c97a7b80afafb29b9b9f7a7b80ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffc7c7c90202020202021f1f22343539444348 -4443480202025050545d5e627a7b80afafb2afafb28a8a8e7a7b809b9b9f8a8a8e9b9b9f8a8a8e -9b9b9fafafb2afafb2afafb28a8a8e5d5e625050546c6c711f1f221f1f223435393435396c6c71 -5d5e626c6c715d5e627a7b805d5e629b9b9f4443485d5e627a7b809b9b9f8a8a8e8a8a8e343539 -3435397a7b800202024443484443484443483435394443484443488a8a8e3435390202027a7b80 -4443483435397a7b801f1f22c7c7c95d5e62c7c7c9afafb29b9b9fc7c7c99b9b9fafafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec4443480202021f1f220202023435391f1f22 -4443481f1f225050546c6c71505054505054c7c7c99b9b9f3435398a8a8e7a7b808a8a8e505054 -afafb27a7b809b9b9f8a8a8ec7c7c9afafb25050545d5e623435393435393435396c6c716c6c71 -1f1f225d5e623435395d5e620202025d5e627a7b807a7b804443489b9b9f9b9b9f8a8a8e9b9b9f -7a7b807a7b803435391f1f225050544443481f1f227a7b806c6c716c6c715d5e623435397a7b80 -5d5e625d5e62afafb29b9b9fc7c7c98a8a8ec7c7c98a8a8e7a7b80afafb28a8a8eafafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffafafb21f1f221f1f22020202020202343539343539 -5d5e624443481f1f225050544443484443489b9b9f8a8a8e7a7b80afafb2afafb25d5e62343539 -afafb2c7c7c9afafb2afafb2c7c7c99b9b9f9b9b9f5d5e625d5e625d5e623435395050545d5e62 -3435395050545d5e625050545050548a8a8e3435394443485d5e628a8a8e5050545050545d5e62 -7a7b809b9b9f5050541f1f224443481f1f225050545d5e621f1f225050545050546c6c71505054 -6c6c718a8a8eafafb29b9b9fc7c7c96c6c719b9b9f5d5e629b9b9f8a8a8ec7c7c9afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffff8a8a8e0202021f1f221f1f220202021f1f221f1f22 -3435391f1f223435395050546c6c715050546c6c716c6c71afafb26c6c719b9b9fafafb26c6c71 -afafb2afafb29b9b9fafafb2c7c7c9c7c7c9afafb2afafb25050543435393435391f1f22444348 -5050543435395d5e620202023435396c6c715050545d5e626c6c718a8a8e9b9b9fafafb27a7b80 -343539afafb29b9b9f1f1f221f1f223435397a7b806c6c714443485d5e620202027a7b806c6c71 -8a8a8e5d5e628a8a8e6c6c717a7b808a8a8e5050548a8a8eafafb2c7c7c99b9b9fc7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffff5050540202021f1f221f1f221f1f221f1f22343539 -1f1f221f1f223435394443487a7b801f1f225d5e623435399b9b9f5050547a7b806c6c718a8a8e -7a7b809b9b9f9b9b9f7a7b809b9b9fafafb28a8a8ec7c7c9c7c7c97a7b80343539444348444348 -4443485050545050545050545050545d5e627a7b807a7b806c6c715d5e628a8a8e4443487a7b80 -9b9b9f6c6c718a8a8e1f1f223435398a8a8e5050545050541f1f223435395d5e628a8a8e6c6c71 -6c6c71c7c7c9afafb29b9b9f6c6c711f1f22444348afafb2d9eaec8a8a8e7a7b80ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffd9eaec1f1f221f1f22444348343539343539343539444348 -4443485d5e625050545d5e625050543435395050548a8a8eafafb28a8a8ec7c7c98a8a8e7a7b80 -7a7b805d5e623435395d5e627a7b808a8a8e7a7b80afafb2afafb29b9b9f5d5e627a7b80343539 -1f1f225050540202023435395050541f1f226c6c711f1f227a7b801f1f225050541f1f225d5e62 -5050546c6c718a8a8e3435395d5e625d5e624443483435393435395d5e627a7b809b9b9f5d5e62 -4443485d5e628a8a8e3435394443485050548a8a8e5d5e629b9b9f9b9b9fc7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffff9b9b9f0202020202024443484443483435398a8a8e9b9b9f -3435393435393435398a8a8e4443483435391f1f225d5e629b9b9f6c6c715050549b9b9f9b9b9f -4443481f1f22343539505054afafb2afafb2afafb28a8a8eafafb2c7c7c97a7b806c6c71505054 -7a7b806c6c714443484443487a7b806c6c716c6c715050547a7b806c6c718a8a8e7a7b808a8a8e -5d5e628a8a8e3435391f1f226c6c714443481f1f221f1f225050543435395050545050548a8a8e -8a8a8e3435396c6c713435394443486c6c71c7c7c99b9b9fc7c7c99b9b9fd9eaecffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffff5d5e624443483435394443487a7b804443489b9b9fd9eaec -1f1f226c6c711f1f227a7b808a8a8e6c6c713435393435396c6c71afafb25d5e62c7c7c98a8a8e -1f1f220202021f1f220202023435398a8a8e9b9b9fafafb2c7c7c9d9eaecafafb28a8a8eafafb2 -afafb29b9b9f6c6c717a7b805050546c6c715d5e628a8a8e3435397a7b806c6c718a8a8e505054 -8a8a8e5d5e620202024443486c6c713435394443485d5e629b9b9f7a7b807a7b809b9b9f343539 -3435395d5e621f1f22505054afafb28a8a8e7a7b80c7c7c98a8a8ec7c7c9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffd9eaec5050545050540202024443487a7b80444348afafb2ffffff -4443483435393435391f1f225050545d5e625d5e623435393435398a8a8e5d5e62c7c7c95d5e62 -0202021f1f223435393435391f1f221f1f221f1f221f1f225d5e626c6c71d9eaecc7c7c9c7c7c9 -8a8a8e7a7b808a8a8e9b9b9f6c6c715d5e625050545050543435398a8a8e8a8a8e8a8a8e7a7b80 -5050540202026c6c718a8a8e4443483435393435396c6c716c6c719b9b9f9b9b9f5d5e62343539 -5050541f1f224443487a7b80afafb2c7c7c9c7c7c98a8a8ec7c7c9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff9b9b9f1f1f226c6c714443485050544443481f1f22c7c7c9ffffff -9b9b9f0202024443484443485d5e626c6c715d5e623435396c6c716c6c715d5e62afafb2444348 -1f1f223435391f1f223435393435391f1f223435394443481f1f223435395050549b9b9f9b9b9f -7a7b809b9b9fc7c7c99b9b9f8a8a8e8a8a8e6c6c715050547a7b801f1f225d5e628a8a8e7a7b80 -6c6c713435398a8a8e7a7b806c6c716c6c716c6c717a7b805050548a8a8e5050540202028a8a8e -5050545d5e62c7c7c9c7c7c9c7c7c99b9b9f5050549b9b9fffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff8a8a8e1f1f226c6c716c6c717a7b807a7b805d5e62d9eaecffffff -afafb20202021f1f224443481f1f223435398a8a8e5d5e625050549b9b9fc7c7c9c7c7c9343539 -3435394443481f1f223435394443485d5e625d5e625050544443481f1f221f1f224443487a7b80 -c7c7c9d9eaecc7c7c9afafb29b9b9f9b9b9fc7c7c99b9b9fc7c7c97a7b805050549b9b9f8a8a8e -8a8a8e3435398a8a8e9b9b9f7a7b806c6c717a7b807a7b808a8a8eafafb20202026c6c717a7b80 -3435396c6c718a8a8e8a8a8e4443480202021f1f22c7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff7a7b805d5e623435394443487a7b80505054505054ffffffffffff -d9eaec3435390202026c6c713435395d5e627a7b808a8a8e9b9b9f9b9b9fc7c7c9afafb21f1f22 -5050545050543435394443486c6c715d5e625d5e626c6c716c6c71343539c7c7c95d5e62444348 -5d5e627a7b807a7b807a7b80c7c7c9afafb2afafb28a8a8ec7c7c9afafb28a8a8eafafb2c7c7c9 -afafb25050548a8a8e7a7b805d5e623435397a7b809b9b9f8a8a8e6c6c715050549b9b9f7a7b80 -3435391f1f221f1f221f1f223435390202025d5e62ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff7a7b807a7b801f1f22343539c7c7c98a8a8e7a7b80ffffffffffff -ffffff5d5e620202026c6c716c6c715050545d5e62505054505054afafb2c7c7c93435391f1f22 -6c6c714443480202025050545d5e627a7b807a7b805d5e623435398a8a8effffffffffffafafb2 -8a8a8e9b9b9f8a8a8e6c6c714443485d5e625050545050546c6c718a8a8e7a7b808a8a8e7a7b80 -6c6c713435395d5e626c6c716c6c713435391f1f224443488a8a8e8a8a8e5d5e624443481f1f22 -3435393435394443483435393435394443489b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec5d5e626c6c717a7b80afafb26c6c714443489b9b9fffffffffffff -ffffff7a7b800202021f1f221f1f223435395d5e627a7b805d5e62afafb28a8a8e505054444348 -5050545d5e625050544443486c6c718a8a8e7a7b809b9b9f343539c7c7c9ffffffffffffffffff -ffffffffffffffffffd9eaecc7c7c9c7c7c97a7b80afafb2ffffffd9eaecc7c7c96c6c715d5e62 -c7c7c96c6c719b9b9f4443485d5e628a8a8e5d5e621f1f227a7b808a8a8e7a7b80afafb2020202 -0202021f1f227a7b803435394443487a7b809b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec4443485050543435395d5e627a7b801f1f229b9b9fffffffffffff -ffffff5d5e621f1f225d5e624443486c6c719b9b9f343539afafb2afafb25d5e62d9eaec6c6c71 -1f1f223435396c6c716c6c719b9b9f1f1f228a8a8e5d5e625d5e62d9eaecffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff9b9b9f8a8a8e8a8a8e3435391f1f228a8a8e6c6c713435396c6c719b9b9fffffff1f1f22 -1f1f220202025050543435391f1f227a7b80afafb2ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec5d5e626c6c710202023435399b9b9f343539afafb2ffffffffffff -ffffff6c6c711f1f226c6c716c6c716c6c716c6c711f1f22afafb25d5e629b9b9fffffff9b9b9f -1f1f225050545050548a8a8e9b9b9f8a8a8ec7c7c93435395d5e62ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffafafb27a7b807a7b805d5e625050547a7b805050545050548a8a8eafafb2ffffff5d5e62 -1f1f220202023435396c6c715d5e627a7b80afafb2d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec6c6c717a7b808a8a8eafafb28a8a8e5d5e62afafb2ffffffffffff -ffffff5d5e620202025d5e623435393435398a8a8e5050546c6c716c6c71ffffffffffffd9eaec -3435396c6c718a8a8e5050548a8a8ec7c7c9c7c7c99b9b9f7a7b80ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaec7a7b805d5e625d5e626c6c710202025d5e625d5e625d5e62afafb2ffffff9b9b9f -1f1f225d5e625d5e625d5e628a8a8e9b9b9f9b9b9fd9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffd9eaec5d5e624443487a7b808a8a8e9b9b9f6c6c719b9b9fffffffffffff -ffffff5d5e621f1f225050545050545d5e626c6c717a7b807a7b80d9eaecffffffffffffffffff -5050543435396c6c71afafb2d9eaecc7c7c9afafb28a8a8ec7c7c9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff4443488a8a8e8a8a8e6c6c710202025050546c6c714443489b9b9fffffffafafb2 -3435398a8a8e0202020202027a7b809b9b9f9b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff6c6c711f1f220202021f1f225050543435396c6c71ffffffffffff -ffffff5050540202023435395050544443480202028a8a8eafafb2ffffffffffffffffffffffff -9b9b9f7a7b809b9b9f9b9b9f6c6c719b9b9f5050546c6c71ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff4443487a7b806c6c719b9b9f8a8a8e5d5e625d5e626c6c719b9b9fffffffd9eaec -6c6c717a7b801f1f221f1f227a7b808a8a8e9b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff9b9b9f5d5e627a7b806c6c717a7b807a7b80505054ffffffffffff -ffffff5050541f1f224443487a7b805d5e627a7b809b9b9fc7c7c9ffffffffffffffffffffffff -6c6c717a7b805050549b9b9f505054c7c7c97a7b80c7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffafafb24443481f1f223435396c6c719b9b9f343539444348c7c7c9ffffffffffff -8a8a8e6c6c71afafb2c7c7c9c7c7c97a7b809b9b9fffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffff8a8a8e6c6c719b9b9f7a7b808a8a8e8a8a8e6c6c71d9eaecffffff -ffffff5050541f1f224443484443483435399b9b9f9b9b9fffffffffffffffffffffffffd9eaec -5050545d5e626c6c719b9b9fc7c7c9afafb28a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd9eaec3435393435391f1f220202025d5e625d5e627a7b80c7c7c9ffffffffffff -8a8a8e4443485d5e629b9b9f8a8a8e5d5e628a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffafafb20202025050549b9b9f6c6c717a7b806c6c71c7c7c9ffffff -d9eaec1f1f221f1f221f1f224443486c6c718a8a8effffffffffffffffffffffffffffffafafb2 -6c6c718a8a8e8a8a8e8a8a8eafafb27a7b80c7c7c9ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd9eaec5d5e628a8a8e6c6c715d5e621f1f225d5e629b9b9fc7c7c9ffffffffffff -afafb24443481f1f228a8a8eafafb28a8a8ed9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffafafb24443486c6c713435390202021f1f225050547a7b80ffffff -9b9b9f0202021f1f221f1f223435396c6c71c7c7c9ffffffffffffffffffffffffffffffafafb2 -8a8a8e9b9b9fafafb29b9b9f7a7b806c6c71ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff7a7b805d5e626c6c71c7c7c96c6c714443488a8a8ec7c7c9ffffffffffff -c7c7c94443487a7b809b9b9f5d5e626c6c71d9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffc7c7c96c6c713435391f1f225050548a8a8e9b9b9f8a8a8e9b9b9f -1f1f220202021f1f221f1f223435399b9b9fffffffffffffffffffffffffffffffffffff8a8a8e -6c6c717a7b807a7b80ffffff6c6c71c7c7c9ffffffd9eaecd9eaecc7c7c9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff9b9b9f8a8a8e5d5e620202025050545050547a7b80d9eaecffffffffffff -ffffff1f1f223435397a7b806c6c718a8a8ec7c7c9ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffff6c6c716c6c719b9b9f7a7b80c7c7c97a7b808a8a8e6c6c71 -0202020202021f1f22343539343539ffffffffffffffffffffffffffffffffffffafafb29b9b9f -8a8a8e8a8a8e6c6c718a8a8e6c6c71d9eaec9b9b9f5d5e629b9b9f6c6c71afafb2ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff8a8a8e7a7b80afafb21f1f225050546c6c718a8a8ec7c7c9ffffffffffff -ffffff1f1f220202028a8a8ec7c7c9afafb28a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffafafb25050541f1f221f1f22afafb26c6c719b9b9fafafb2 -3435390202021f1f221f1f228a8a8effffffffffffffffffffffffffffffd9eaec7a7b807a7b80 -7a7b80c7c7c9afafb25d5e629b9b9f9b9b9f8a8a8ec7c7c9c7c7c9c7c7c95d5e62afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffafafb25d5e627a7b808a8a8e7a7b805d5e629b9b9fc7c7c9ffffffffffff -ffffff4443484443489b9b9fafafb2afafb25d5e62ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffd9eaec5d5e623435396c6c718a8a8e5050546c6c71afafb2 -8a8a8e1f1f221f1f221f1f22c7c7c9ffffffffffffffffffffffffffffffafafb28a8a8e5d5e62 -7a7b809b9b9f5d5e628a8a8e6c6c71afafb2c7c7c9c7c7c9d9eaecc7c7c97a7b808a8a8effffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc7c7c95d5e621f1f229b9b9f6c6c710202027a7b80d9eaecffffffffffff -ffffff6c6c716c6c715d5e62afafb28a8a8e8a8a8effffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffafafb25d5e629b9b9f3435391f1f226c6c718a8a8e -c7c7c99b9b9f1f1f221f1f22d9eaecffffffffffffffffffffffffffffffffffff5d5e62505054 -505054c7c7c95d5e625d5e626c6c71d9eaecc7c7c9d9eaecd9eaecc7c7c96c6c71afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaec6c6c719b9b9f5050548a8a8e8a8a8e9b9b9fd9eaecffffffffffff -ffffff7a7b805d5e629b9b9fafafb29b9b9fafafb2d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec5d5e626c6c711f1f225d5e626c6c716c6c71 -afafb2c7c7c99b9b9f5d5e62d9eaecffffffffffffffffffffffffffffffffffffafafb2505054 -4443483435396c6c716c6c71afafb2afafb29b9b9fafafb2afafb29b9b9f505054c7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff6c6c71c7c7c94443485d5e628a8a8e9b9b9fd9eaecffffffffffff -ffffff8a8a8e5d5e629b9b9f9b9b9fc7c7c99b9b9fd9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffc7c7c95d5e627a7b807a7b805d5e625d5e62 -0202025d5e62afafb2c7c7c9afafb29b9b9fc7c7c9ffffffffffffffffffffffffd9eaec444348 -6c6c715050547a7b80afafb2afafb28a8a8e3435396c6c717a7b806c6c715d5e62ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff7a7b809b9b9f5d5e628a8a8e9b9b9fc7c7c9d9eaecffffffffffff -ffffff9b9b9f4443485d5e626c6c71afafb29b9b9fd9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffff9b9b9f5d5e62afafb28a8a8e020202 -0202027a7b805d5e62c7c7c99b9b9f9b9b9f9b9b9f8a8a8eafafb2c7c7c9c7c7c9c7c7c95d5e62 -6c6c718a8a8e8a8a8e7a7b807a7b809b9b9f444348343539505054444348c7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff7a7b808a8a8e343539afafb24443488a8a8ed9eaecffffffffffff -ffffffafafb26c6c718a8a8e6c6c71afafb2afafb2d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffff9b9b9f7a7b807a7b801f1f22 -6c6c71afafb26c6c714443485d5e629b9b9fd9eaecafafb29b9b9fafafb27a7b808a8a8e9b9b9f -9b9b9fafafb24443481f1f223435398a8a8e8a8a8e4443483435399b9b9fffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff6c6c719b9b9f7a7b80c7c7c98a8a8e9b9b9fc7c7c9ffffffffffff -ffffffc7c7c95050546c6c716c6c717a7b806c6c71d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c97a7b809b9b9f -6c6c718a8a8e5d5e620202028a8a8e3435396c6c71343539c7c7c9afafb25d5e62c7c7c96c6c71 -6c6c71afafb23435390202020202024443485050545050546c6c71ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff5050548a8a8e7a7b80afafb28a8a8e9b9b9fafafb2ffffffffffff -ffffffffffffafafb24443484443489b9b9f7a7b80d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec1f1f225d5e62 -8a8a8e6c6c714443481f1f229b9b9fafafb21f1f221f1f229b9b9f1f1f225050548a8a8e1f1f22 -5050547a7b805050541f1f220202021f1f224443487a7b80d9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff5050549b9b9f444348afafb26c6c719b9b9fc7c7c9ffffffffffff -ffffffffffffd9eaec3435395050549b9b9f9b9b9fc7c7c9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec1f1f22343539 -3435395d5e625d5e625050546c6c718a8a8e1f1f224443488a8a8e0202025050547a7b80020202 -1f1f225050545d5e623435393435395d5e626c6c71d9eaecffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffafafb28a8a8e6c6c715d5e627a7b80afafb2afafb2ffffffffffff -ffffffffffffffffff9b9b9f6c6c719b9b9f9b9b9f9b9b9fffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec343539444348 -1f1f221f1f228a8a8e8a8a8e5d5e625d5e623435395050548a8a8e5050545050546c6c71343539 -1f1f225d5e625050545d5e626c6c714443486c6c71ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd9eaec8a8a8ec7c7c97a7b807a7b805d5e62afafb2ffffffffffff -ffffffffffffffffffc7c7c95d5e62c7c7c9afafb2afafb2d9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec5d5e62444348 -3435396c6c71c7c7c9ffffffc7c7c9afafb2afafb28a8a8e7a7b806c6c715d5e625d5e625d5e62 -5d5e625d5e625050541f1f224443485d5e627a7b808a8a8ec7c7c9c7c7c9d9eaecffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff8a8a8e8a8a8e6c6c717a7b806c6c71c7c7c9ffffffffffff -ffffffffffffffffffd9eaec6c6c717a7b80c7c7c99b9b9f9b9b9f8a8a8e7a7b80afafb2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec6c6c716c6c71 -3435396c6c719b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd9eaecd9eaec4443486c6c718a8a8eafafb27a7b805d5e627a7b808a8a8ec7c7c9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffafafb2444348c7c7c95d5e621f1f22c7c7c9ffffffffffff -ffffffffffffffffffffffff8a8a8e0202027a7b809b9b9fc7c7c95d5e62afafb25d5e62afafb2 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c95d5e627a7b80 -4443486c6c719b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff9b9b9f5d5e62afafb28a8a8e7a7b809b9b9f9b9b9f7a7b807a7b80d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff6c6c718a8a8eafafb27a7b809b9b9fd9eaecffffff -ffffffffffffffffffffffffafafb23435395d5e628a8a8e9b9b9f8a8a8eafafb29b9b9f5d5e62 -d9eaecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c95050548a8a8e -5050546c6c71c7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaec5d5e628a8a8e7a7b809b9b9f8a8a8e6c6c718a8a8e343539c7c7c9 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffafafb26c6c719b9b9f6c6c716c6c71afafb2d9eaec -ffffffffffffffffffffffffd9eaec4443487a7b80afafb2afafb2afafb27a7b80afafb21f1f22 -9b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c96c6c719b9b9f -7a7b809b9b9fafafb2d9eaecffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffafafb25d5e625d5e626c6c716c6c716c6c715d5e626c6c71d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff444348afafb2afafb29b9b9f8a8a8e505054 -9b9b9fd9eaecffffffffffffffffffafafb25050547a7b805d5e626c6c714443487a7b809b9b9f -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c96c6c71afafb2 -9b9b9f5d5e625d5e628a8a8eafafb2ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd9eaecc7c7c9afafb29b9b9fc7c7c9c7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff5050549b9b9f8a8a8eafafb28a8a8e7a7b80 -9b9b9f8a8a8ec7c7c9ffffffffffffffffffd9eaecd9eaecc7c7c9afafb2afafb2d9eaecffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c95050549b9b9f -5050548a8a8e8a8a8e9b9b9f7a7b80c7c7c9ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff9b9b9f6c6c71afafb28a8a8e9b9b9f7a7b80 -c7c7c95d5e627a7b80c7c7c9ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c9343539afafb2 -8a8a8e7a7b809b9b9f5d5e629b9b9f9b9b9fffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc7c7c94443488a8a8e7a7b808a8a8e8a8a8e -5050547a7b804443489b9b9fffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaec6c6c719b9b9f -4443488a8a8e9b9b9f8a8a8e6c6c718a8a8effffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffafafb24443488a8a8eafafb26c6c71 -5d5e626c6c717a7b80ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7c7c97a7b80 -3435396c6c713435394443486c6c71d9eaecffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9eaecc7c7c9 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d9eaecd9eaecd9eaecd9eaecd9eaecffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffafafb29b9b9fc7c7c9ffffffc7c7c99b9b9f -d9eaecc7c7c99b9b9fc7c7c9c7c7c9c7c7c9ffffffc7c7c9d9eaecafafb2ffffffc7c7c9d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffafafb28a8a8ec7c7c96c6c71d9eaec7a7b805d5e62 -9b9b9f8a8a8e9b9b9fc7c7c97a7b806c6c71ffffff8a8a8ed9eaecafafb25d5e62c7c7c9d9eaec -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffff9b9b9fafafb2ffffff5d5e62d9eaec8a8a8e505054 -afafb28a8a8eafafb2d9eaec7a7b806c6c71ffffff8a8a8effffffd9eaec9b9b9fffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd9eaecc7c7c9c7c7c9d9eaecffffffd9eaecd9eaecffffffffffffd9eaec -ffffffd9eaecd9eaecd9eaecffffffffffffd9eaecd9eaecd9eaecffffffd9eaecffffffffffff -d9eaecffffffffffffd9eaecd9eaecd9eaecffffffd9eaecc7c7c9d9eaecffffffffffffd9eaec -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffd9eaec8a8a8e7a7b809b9b9fffffff9b9b9fc7c7c9 -c7c7c97a7b808a8a8ec7c7c99b9b9f5d5e62afafb28a8a8e9b9b9fc7c7c9c7c7c9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd9eaecafafb2c7c7c9c7c7c9afafb2c7c7c99b9b9fafafb2d9eaecc7c7c9d9eaec -c7c7c9c7c7c99b9b9fc7c7c9afafb2d9eaecafafb2afafb2d9eaecafafb2c7c7c9d9eaecd9eaec -ffffffffffffc7c7c9d9eaecafafb2afafb2ffffffd9eaec8a8a8eafafb2d9eaecc7c7c9afafb2 -d9eaecc7c7c9ffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffd9eaecffffffffffffffffffffffff -ffffffffffffd9eaecffffffffffffd9eaecd9eaecffffffd9eaecffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd9eaecffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202020202020202020202020202 -020202020202020202020202020202020202020202020202020202 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/dbi.gif b/Docs/Books/dbi.gif Binary files differdeleted file mode 100644 index de7bc2dae61..00000000000 --- a/Docs/Books/dbi.gif +++ /dev/null diff --git a/Docs/Books/dbi.txt b/Docs/Books/dbi.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/dbi.txt +++ /dev/null diff --git a/Docs/Books/dubois.eps b/Docs/Books/dubois.eps deleted file mode 100644 index 412693fe405..00000000000 --- a/Docs/Books/dubois.eps +++ /dev/null @@ -1,1203 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/dubois.eps -%%CreationDate: Sun Dec 31 14:29:20 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 383 -%%EndComments -%%BeginPreview: 100 130 1 130 -% fffffffffffffffffffffffff0 -% fe000000000000000000000010 -% d555242000000000000924aab0 -% fe000600000000000000000010 -% d5488d020000a0070440040950 -% fe00160048010004800011a010 -% d51214c0aa02400a4000437110 -% fe2821404800000940c102d050 -% aa0854410501081010b70d1410 -% fe14810240080222514184a890 -% aa223640b5114000012d4baa10 -% fe1d49140040048aaa42285490 -% ab894040800000000011552ab0 -% feb20a00000010000041215290 -% 55cab4aad28b7552aa94556a90 -% 7e34a5b78a6a555d5d75adb6b0 -% d5dfeaff8fd8ab76aabbfffff0 -% bf501c074235188eab502ff7f0 -% 6aeff76ac031702f56ea4fc9f0 -% dfbd5ad5f54de8556dd9557f70 -% 7577ed6a4aa575aadb76ddd7f0 -% 5fdbbaaaaaa9ca55eedddb6ff0 -% f576ab55554a35522beff6daf0 -% 5fdd6aaa5492852dd29bfdf7b0 -% f55695535aa474a22aaaa6ad70 -% 5f69d55adaa5baaaaaaaadfff0 -% 75debbaaf55aa556ad56daad70 -% df7bd4aad6d55faaaefb7dfbd0 -% 75dd5f75adab6aeaa2ababbf70 -% df77ebdaeadadeddd5d56ebff0 -% 75fd5aff3db7b7f55555556ab0 -% dfffff57effdffdfbabb6fdff0 -% 75d754b55aaa52b2aaa55aaaf0 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e030c01426100000000000010 -% 74030c020c3100000000000010 -% de010c02081100000000000010 -% 7401849b881900000000000010 -% de008cc0c81100000000000010 -% 7402c4406c1100000000000010 -% de044440641100000000000010 -% 74064c26462398000000000010 -% 5e00000001c010000000000010 -% f4000000006000000000000010 -% 5e0000c0001800000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 5e000000000000000000000010 -% f4080000000000000000000010 -% 5e0f9000000000000000000010 -% 740f8000000000000000000010 -% de000000000000000000000010 -% 740d0000000000000000000010 -% de0fe000000000000000000010 -% 740a9000000000000000000010 -% de000000000000000000000010 -% 74000000000000000000000010 -% 5e000000000000000000000010 -% f4000000000000000000000010 -% 7ffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -283.464567 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 130 8 -% Transformation matrix -[ 100 0 0 130 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3 -b3b3b3b3b3b3c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6c9c2c4d6d6d6c9c2c4 -c9c2c4c9c2c4d6d6d6c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4 -b3b3b3c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3 -b3b3b3c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4b3b3b3 -b3b3b3b3b3b3b3b3b3c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3b3b3b3b3b3b3c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6c9c2c4514e4f696869c9c2c4d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6e9e9e9 -e9e9e9e9e9e9d6d6d6d6d6d6e9e9e9d6d6d6e9e9e9d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6e9e9e9 -e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4b3b3b3c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4d6d6d6e9e9e9818181514e4f6968699b9b9bd6d6d6e9e9e9 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9d6d6d6e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d6d6d6b3b3b3b3b3b3b3b3b3e9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e99b9b9b818181818181b3b3b3 -e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 -c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3c9c2c4b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4 -c9c2c4c9c2c4d6d6d6c9c2c4d6d6d6d6d6d6b3b3b3818181514e4f6968698181819b9b9bd6d6d6 -d6d6d6d6d6d6d6d6d6e9e9e9e9e9e9e9e9e9d6d6d69b9b9bc9c2c4d6d6d6c9c2c49b9b9be9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d6d6d6b3b3b3b3b3b3c9c2c49b9b9bb3b3b3 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffffb3b3b3696869696869818181818181 -b3b3b3d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6 -d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69b9b9b6968699b9b9bc9c2c4818181 -b3b3b3d6d6d6b3b3b3c9c2c4c9c2c4c9c2c4c9c2c4b3b3b3010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6c9c2c4c9c2c4b3b3b3c9c2c4 -d6d6d6c9c2c4d6d6d6c9c2c4d6d6d6c9c2c49b9b9bb3b3b38181818181819b9b9b6968699b9b9b -e9e9e9e9e9e9e9e9e9d6d6d6e9e9e9e9e9e99b9b9b9b9b9b9b9b9b818181818181818181b3b3b3 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9b3b3b39b9b9bc9c2c49b9b9b9b9b9bd6d6d6 -d6d6d6ffffffe9e9e9e9e9e9e9e9e9e9e9e9ffffffd6d6d69b9b9b8181818181819b9b9bb3b3b3 -9b9b9bb3b3b3e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d6d6d6c9c2c4e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e9e9e9696869514e4f818181514e4f302f2f -696869d6d6d6c9c2c4d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6c9c2c4c9c2c49b9b9b9b9b9b -c9c2c4d6d6d6d6d6d6d6d6d6d6d6d69b9b9b9b9b9bb3b3b3b3b3b3b3b3b39b9b9b9b9b9b818181 -c9c2c4e9e9e9e9e9e9e9e9e9ffffffc9c2c49b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8181819b9b9b -c9c2c4ffffffe9e9e9e9e9e9ffffffffffffd6d6d6c9c2c4c9c2c4d6d6d6e9e9e9d6d6d6d6d6d6 -d6d6d6e9e9e9ffffffffffffe9e9e9e9e9e9ffffffb3b3b39b9b9bb3b3b39b9b9b9b9b9b9b9b9b -9b9b9b9b9b9bd6d6d6e9e9e9e9e9e9e9e9e9ffffff9b9b9b696869b3b3b3d6d6d6e9e9e9d6d6d6 -d6d6d6b3b3b3d6d6d6e9e9e9d6d6d6d6d6d6e9e9e9b3b3b3514e4fb3b3b3818181514e4f9b9b9b -514e4f9b9b9bd6d6d6c9c2c4c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6d6d6d6c9c2c4b3b3b3818181 -9b9b9bd6d6d6d6d6d6ffffff9b9b9b9b9b9b9b9b9bc9c2c49b9b9bb3b3b3b3b3b3b3b3b3818181 -c9c2c4e9e9e9e9e9e9ffffffe9e9e99b9b9bb3b3b3b3b3b3b3b3b3d6d6d6d6d6d69b9b9bc9c2c4 -b3b3b3d6d6d6ffffffffffffffffffb3b3b3d6d6d6d6d6d6c9c2c4e9e9e9e9e9e9ffffffc9c2c4 -c9c2c4b3b3b3d6d6d6ffffffffffffffffffc9c2c49b9b9bd6d6d6c9c2c4c9c2c4d6d6d6b3b3b3 -9b9b9bb3b3b3b3b3b3e9e9e9e9e9e9ffffffd6d6d66968696968698181818181819b9b9b818181 -818181514e4f818181e9e9e9d6d6d6e9e9e9b3b3b36968698181819b9b9b8181819b9b9bb3b3b3 -818181696869c9c2c4d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6d6d6d6d6d6d68181819b9b9b -818181c9c2c4d6d6d69b9b9b9b9b9b9b9b9b9b9b9bb3b3b39b9b9bb3b3b3c9c2c49b9b9b9b9b9b -c9c2c4e9e9e9ffffffe9e9e99b9b9b9b9b9bc9c2c48181819b9b9bd6d6d6c9c2c49b9b9bb3b3b3 -b3b3b3c9c2c4ffffffffffffc9c2c49b9b9bd6d6d6d6d6d6b3b3b3d6d6d6e9e9e9e9e9e9b3b3b3 -d6d6d6c9c2c49b9b9be9e9e9ffffffd6d6d68181819b9b9bb3b3b3c9c2c4b3b3b3e9e9e9c9c2c4 -9b9b9b9b9b9b9b9b9bc9c2c4ffffffe9e9e99b9b9b8181819b9b9b9b9b9b9b9b9bb3b3b3c9c2c4 -818181818181514e4fb3b3b3ffffffffffff8181816968699b9b9b9b9b9b9b9b9bb3b3b3818181 -9b9b9b696869696869d6d6d6c9c2c4c9c2c4c9c2c4c9c2c4010101 -010101f50237f50237f50237f50237f50237f50237b78794e9e9e9d6d6d6c9c2c4818181b3b3b3 -b3b3b39b9b9bc9c2c49b9b9bb3b3b39b9b9b818181b3b3b3696869818181d6d6d69b9b9b9b9b9b -b3b3b3c9c2c4d6d6d6c9c2c49b9b9bb3b3b3b3b3b3b3b3b39b9b9b818181b3b3b3b3b3b3b3b3b3 -c9c2c4b3b3b3b3b3b3d6d6d69b9b9bc9c2c4c9c2c4c9c2c4c9c2c48181818181819b9b9bd6d6d6 -e9e9e9d6d6d6c9c2c4c9c2c4ffffffb3b3b3b3b3b3e9e9e9d6d6d6d6d6d6b3b3b3b3b3b3e9e9e9 -c9c2c4d6d6d6c9c2c4b3b3b3e9e9e9c9c2c4818181b3b3b39b9b9b9b9b9bb3b3b3818181818181 -9b9b9b8181819b9b9b696869d6d6d6c9c2c4514e4f9b9b9b9b9b9b696869514e4f818181818181 -9b9b9b818181818181c9c2c4e9e9e9d6d6d6d6d6d6d6d6d6010101 -010101f50237f50237f50237f50237f50237f50237b78794d6d6d6d6d6d6d6d6d69b9b9b514e4f -6968699b9b9b818181b3b3b36968699b9b9bb3b3b3818181b3b3b39b9b9b818181b3b3b39b9b9b -c9c2c49b9b9bb3b3b3b3b3b3b3b3b3d6d6d6b3b3b3c9c2c4c9c2c49b9b9bd6d6d6b3b3b3c9c2c4 -c9c2c4b3b3b3c9c2c49b9b9bb3b3b3c9c2c4c9c2c4c9c2c4b3b3b3b3b3b3c9c2c4d6d6d6d6d6d6 -d6d6d6c9c2c4b3b3b3c9c2c49b9b9bc9c2c4d6d6d6c9c2c4c9c2c4b3b3b3b3b3b39b9b9bc9c2c4 -b3b3b3b3b3b3c9c2c49b9b9b9b9b9b9b9b9bb3b3b3b3b3b3b3b3b3c9c2c49b9b9b9b9b9bb3b3b3 -9b9b9b818181b3b3b39b9b9b9b9b9b8181819b9b9b9b9b9b9b9b9b9b9b9b9b9b9b818181818181 -8181818181818181818181819b9b9bb3b3b39b9b9bc9c2c4010101 -010101f50237f50237f50237f50237f50237f50237696869818181d6d6d6c9c2c4d6d6d6696869 -818181d6d6d6696869e9e9e9818181c9c2c4e9e9e99b9b9be9e9e9c9c2c4c9c2c4ffffff9b9b9b -e9e9e9b3b3b3d6d6d6d6d6d6b3b3b3ffffff9b9b9be9e9e9e9e9e9d6d6d6ffffffd6d6d6e9e9e9 -d6d6d6d6d6d6ffffffe9e9e9ffffffe9e9e9ffffffffffffe9e9e9ffffffffffffffffffe9e9e9 -ffffffffffffe9e9e9ffffffc9c2c4e9e9e9e9e9e9d6d6d6e9e9e99b9b9be9e9e9b3b3b3c9c2c4 -c9c2c49b9b9bd6d6d69b9b9be9e9e9b3b3b3c9c2c4c9c2c49b9b9be9e9e9818181ffffffc9c2c4 -c9c2c4696869d6d6d68181819b9b9b9b9b9bb3b3b3696869b3b3b3696869b3b3b39b9b9b9b9b9b -9b9b9b514e4fb3b3b3514e4f9b9b9b514e4f9b9b9bb3b3b3010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869696869696869818181 -b3b3b39b9b9b818181e9e9e9b3b3b3b3b3b3e9e9e9b3b3b3c9c2c4b3b3b3d6d6d6e9e9e9c9c2c4 -d6d6d6b3b3b3e9e9e9e9e9e9c9c2c4d6d6d6c9c2c4d6d6d6c9c2c4c9c2c4e9e9e9e9e9e9ffffff -e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9e9e9e9d6d6d6d6d6d6d6d6d6d6d6d6c9c2c4c9c2c4 -c9c2c4e9e9e9e9e9e9e9e9e9e9e9e9ffffffffffffe9e9e9ffffffd6d6d6ffffffe9e9e9e9e9e9 -ffffffc9c2c4ffffffd6d6d6ffffffe9e9e9d6d6d6e9e9e9b3b3b3e9e9e99b9b9be9e9e9c9c2c4 -c9c2c49b9b9bffffff8181819b9b9b696869c9c2c49b9b9bffffff818181c9c2c49b9b9b696869 -818181696869e9e9e9514e4fffffff514e4fb3b3b3d6d6d6010101 -010101f50237f50237f50237f50237f50237f50237514e4f6968696968696968699b9b9b9b9b9b -8181819b9b9b9b9b9b9b9b9b8181818181818181818181818181818181819b9b9b9b9b9b9b9b9b -9b9b9b9b9b9bb3b3b39b9b9bb3b3b39b9b9b696869818181b3b3b3b3b3b3b3b3b3c9c2c4b3b3b3 -b3b3b3b3b3b3c9c2c4b3b3b3d6d6d6b3b3b38181818181818181819b9b9b9b9b9b696869514e4f -6968699b9b9b9b9b9bb3b3b39b9b9b9b9b9b9b9b9b9b9b9bc9c2c4b3b3b39b9b9bb3b3b39b9b9b -b3b3b39b9b9bd6d6d68181819b9b9b9b9b9bb3b3b39b9b9b9b9b9bc9c2c49b9b9bb3b3b39b9b9b -b3b3b3b3b3b3c9c2c48181816968696968699b9b9b9b9b9bd6d6d66968699b9b9b696869302f2f -818181818181d6d6d6696869c9c2c4514e4f9b9b9bc9c2c4010101 -010101f50237f50237f50237f50237f50237f50237696869b78794818181818181818181818181 -8181819b9b9b9b9b9b8181819b9b9b8181818181819b9b9b818181818181818181696869818181 -696869696869818181696869696869302f2f0101019b9b9bc9c2c4c9c2c49b9b9b9b9b9b818181 -8181819b9b9b8181818181819b9b9b6968699b9b9b9b9b9bb3b3b39b9b9b696869696869696869 -8181819b9b9b6968696968698181818181816968696968696968696968696968699b9b9b818181 -6968699b9b9b818181514e4f302f2f818181818181818181696869696869302f2f6968699b9b9b -818181696869696869696869696869818181514e4f514e4f696869010101514e4f696869514e4f -696869696869514e4f696869696869818181818181302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869818181696869514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f696869696869818181818181c9c2c4696869302f2f -302f2f302f2f302f2f302f2f010101010101302f2fb3b3b3d6d6d6e9e9e9818181302f2f302f2f -514e4f514e4f514e4f514e4f010101514e4f818181c9c2c49b9b9b9b9b9bc9c2c4818181696869 -818181d6d6d6818181514e4f696869514e4f302f2f302f2f514e4f302f2f302f2fb3b3b3818181 -8181818181816968696968696968696968698181818181819b9b9b696869010101696869818181 -514e4f514e4f514e4f302f2f302f2f302f2f010101302f2f302f2f302f2f514e4f302f2f302f2f -302f2f302f2f302f2f010101302f2f302f2f010101010101010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869818181696869818181 -9b9b9b8181819b9b9b9b9b9b9b9b9b818181696869696869696869818181d6d6d6b3b3b3818181 -9b9b9b9b9b9b818181818181302f2f0101016968699b9b9bb3b3b3ffffffb3b3b3818181818181 -9b9b9bb3b3b39b9b9b9b9b9b302f2f6968699b9b9bb3b3b39b9b9be9e9e9ffffffe9e9e9302f2f -514e4fd6d6d6b3b3b39b9b9b9b9b9b8181819b9b9bb3b3b3696869302f2f302f2f9b9b9b818181 -6968699b9b9b696869818181818181696869696869696869696869696869514e4f818181c9c2c4 -9b9b9bb3b3b39b9b9b9b9b9b818181818181514e4f302f2f302f2f010101302f2f010101010101 -302f2f514e4f514e4f514e4f302f2f010101010101010101010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869696869696869514e4f -696869696869818181696869696869696869302f2f514e4f696869696869696869818181818181 -9b9b9b9b9b9b696869818181696869514e4f696869696869818181d6d6d6d6d6d6d6d6d6c9c2c4 -d6d6d6d6d6d6c9c2c4818181302f2f818181e9e9e9d6d6d6696869696869514e4f696869514e4f -c9c2c4c9c2c4d6d6d6e9e9e9d6d6d6c9c2c4c9c2c4b3b3b3514e4f302f2f010101514e4f818181 -818181696869818181696869696869696869696869514e4f514e4f6968698181818181819b9b9b -c9c2c4e9e9e9d6d6d6b3b3b39b9b9bc9c2c4696869302f2f302f2f302f2f010101514e4f818181 -9b9b9b818181696869818181302f2f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f514e4f696869514e4f -302f2f514e4f514e4f696869514e4f696869696869514e4f696869696869696869696869514e4f -514e4f696869818181818181696869818181514e4f302f2f6968698181819b9b9bb3b3b3b3b3b3 -b3b3b3b3b3b39b9b9b8181819b9b9b818181818181c9c2c4514e4f514e4f302f2f302f2f514e4f -6968699b9b9be9e9e9d6d6d6c9c2c4b3b3b39b9b9b818181818181514e4f514e4f818181818181 -514e4f696869696869818181696869514e4f696869514e4f302f2f514e4f696869696869818181 -9b9b9b9b9b9b9b9b9b818181818181818181696869696869514e4f696869514e4f514e4f514e4f -514e4f514e4f514e4f302f2f514e4f514e4f514e4f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f514e4f302f2f514e4f -696869514e4f302f2f514e4f514e4f514e4f696869514e4f514e4f818181818181696869302f2f -514e4f8181819b9b9b8181818181819b9b9b818181696869818181818181818181818181696869 -8181818181818181819b9b9b9b9b9b9b9b9b6968699b9b9b696869514e4f514e4f514e4f514e4f -6968699b9b9b9b9b9b9b9b9b818181818181818181818181818181696869818181696869514e4f -514e4f514e4f696869696869696869696869514e4f696869514e4f010101514e4f696869696869 -696869696869514e4f696869696869514e4f302f2f514e4f696869514e4f514e4f514e4f514e4f -514e4f514e4f302f2f302f2f302f2f514e4f514e4f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f696869514e4f514e4f514e4f -696869696869302f2f302f2f696869696869514e4f302f2f696869696869818181818181818181 -8181818181818181818181818181819b9b9b9b9b9b818181818181818181696869818181818181 -8181816968698181818181818181819b9b9b9b9b9b9b9b9b9b9b9b514e4f514e4f696869818181 -9b9b9b8181818181818181818181818181818181819b9b9b9b9b9b818181696869696869514e4f -514e4f514e4f696869514e4f514e4f514e4f696869514e4f696869696869514e4f514e4f514e4f -696869514e4f302f2f514e4f696869514e4f514e4f514e4f696869514e4f514e4f514e4f696869 -818181696869514e4f302f2f302f2f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f696869514e4f514e4f -302f2f696869696869696869696869818181696869696869696869514e4f696869696869696869 -8181816968698181818181818181819b9b9b9b9b9b8181816968696968698181818181819b9b9b -9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b818181818181b3b3b3818181818181818181818181 -8181818181816968698181819b9b9b9b9b9b9b9b9b8181818181819b9b9b9b9b9b818181818181 -818181696869818181818181696869302f2f302f2f302f2f302f2f514e4f696869302f2f302f2f -302f2f302f2f302f2f302f2f514e4f514e4f696869696869696869514e4f514e4f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f302f2f010101010101010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869514e4f696869696869514e4f -514e4f514e4f696869696869696869696869818181818181818181696869818181818181818181 -8181818181819b9b9b8181818181818181819b9b9b9b9b9b8181816968698181819b9b9b9b9b9b -9b9b9b9b9b9b8181819b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9bb3b3b3b3b3b3 -9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8181818181819b9b9b9b9b9b818181 -8181819b9b9b8181819b9b9b9b9b9b818181818181696869818181818181514e4f696869514e4f -302f2f302f2f302f2f302f2f302f2f302f2f514e4f514e4f514e4f696869514e4f514e4f514e4f -514e4f696869696869514e4f514e4f514e4f514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869696869696869696869696869 -6968696968698181818181818181818181818181818181818181819b9b9b9b9b9b818181696869 -8181819b9b9b9b9b9b9b9b9b8181816968698181819b9b9b818181696869696869818181818181 -9b9b9b8181819b9b9b9b9b9bb3b3b3b3b3b3b3b3b3b3b3b3b3b3b39b9b9b818181818181818181 -8181818181819b9b9b9b9b9b9b9b9b9b9b9b8181819b9b9b9b9b9b9b9b9b818181818181818181 -8181816968696968698181819b9b9b9b9b9b8181818181819b9b9b8181818181818181819b9b9b -818181818181696869696869696869818181696869696869696869696869514e4f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f514e4f696869010101 -010101f50237f50237f50237f50237f50237f50237514e4f696869696869696869696869696869 -696869818181696869696869696869818181696869818181818181818181696869696869696869 -818181696869696869818181818181696869696869514e4f696869514e4f514e4f696869818181 -8181818181819b9b9b8181819b9b9bb3b3b39b9b9b9b9b9b9b9b9b818181696869302f2f302f2f -514e4f8181819b9b9b9b9b9b8181818181818181818181818181819b9b9b8181818181819b9b9b -9b9b9b8181819b9b9b8181818181818181819b9b9b818181818181818181818181818181696869 -696869818181696869696869696869696869696869696869696869514e4f514e4f514e4f514e4f -302f2f302f2f302f2f302f2f514e4f514e4f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f514e4f514e4f514e4f -696869696869696869514e4f514e4f514e4f514e4f696869696869696869696869696869696869 -818181696869696869818181818181696869302f2f514e4f514e4f514e4f696869818181818181 -696869818181818181818181818181818181818181818181818181696869818181696869818181 -818181696869696869818181696869818181818181696869818181696869514e4f8181819b9b9b -818181818181818181696869514e4f696869818181818181696869696869696869818181696869 -696869818181818181696869696869514e4f696869696869696869696869696869696869514e4f -514e4f514e4f514e4f514e4f696869514e4f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f302f2f302f2f302f2f -514e4f696869514e4f514e4f696869696869696869818181696869696869818181818181696869 -696869818181818181818181818181818181514e4f514e4f818181696869696869696869696869 -696869696869696869818181818181696869696869696869818181696869818181818181818181 -696869514e4f514e4f514e4f6968696968696968698181818181819b9b9b696869696869818181 -818181696869818181514e4f514e4f514e4f696869302f2f514e4f696869514e4f696869818181 -514e4f514e4f696869696869696869514e4f302f2f514e4f696869514e4f514e4f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f302f2f514e4f514e4f302f2f -514e4f696869514e4f696869696869818181696869696869514e4f514e4f696869696869696869 -696869696869696869818181818181818181696869514e4f514e4f696869696869696869696869 -696869696869696869696869696869818181696869818181696869696869696869696869696869 -696869696869514e4f514e4f514e4f514e4f514e4f818181818181818181696869818181818181 -8181818181819b9b9b9b9b9b9b9b9b818181696869514e4f696869696869696869696869696869 -514e4f514e4f514e4f696869514e4f514e4f514e4f514e4f514e4f302f2f514e4f514e4f514e4f -302f2f010101010101302f2f302f2f696869514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f514e4f302f2f514e4f514e4f -514e4f514e4f514e4f514e4f514e4f514e4f696869696869696869514e4f302f2f302f2f302f2f -696869696869514e4f696869696869696869696869696869514e4f818181514e4f696869696869 -696869514e4f696869696869696869696869696869818181696869514e4f514e4f696869514e4f -514e4f514e4f514e4f696869302f2f302f2f514e4f514e4f696869514e4f696869696869696869 -514e4f8181819b9b9b9b9b9b818181818181818181696869696869696869818181696869818181 -696869514e4f696869696869696869818181818181696869514e4f514e4f696869696869514e4f -302f2f302f2f302f2f302f2f302f2f514e4f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237302f2f302f2f302f2f302f2f302f2f302f2f -514e4f514e4f302f2f514e4f514e4f514e4f302f2f696869696869514e4f514e4f514e4f514e4f -514e4f514e4f302f2f514e4f302f2f514e4f696869818181696869514e4f696869696869696869 -514e4f514e4f696869696869696869514e4f696869696869514e4f514e4f514e4f696869514e4f -514e4f302f2f514e4f514e4f514e4f302f2f514e4f514e4f514e4f696869818181696869696869 -696869696869818181818181818181818181818181818181696869818181818181818181818181 -818181818181818181696869696869696869696869696869696869818181818181696869696869 -696869696869514e4f514e4f514e4f302f2f514e4f514e4f010101 -010101f50237f50237f50237f50237f50237f50237302f2f010101302f2f302f2f302f2f302f2f -010101010101302f2f302f2f302f2f302f2f302f2f302f2f514e4f514e4f696869696869302f2f -514e4f514e4f696869302f2f302f2f514e4f302f2f302f2f696869514e4f302f2f302f2f514e4f -302f2f514e4f514e4f514e4f302f2f302f2f302f2f514e4f514e4f302f2f302f2f302f2f514e4f -514e4f302f2f010101302f2f302f2f302f2f514e4f514e4f302f2f514e4f514e4f514e4f514e4f -818181696869514e4f696869696869696869818181818181696869696869696869514e4f696869 -696869696869696869514e4f696869696869302f2f302f2f302f2f514e4f514e4f302f2f514e4f -514e4f514e4f514e4f514e4f302f2f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237514e4f514e4f302f2f514e4f514e4f514e4f -696869514e4f514e4f696869514e4f696869696869514e4f514e4f696869818181818181818181 -696869696869818181818181696869514e4f514e4f514e4f696869818181514e4f514e4f696869 -696869696869696869514e4f514e4f514e4f696869818181818181818181818181818181696869 -818181818181696869696869514e4f514e4f696869514e4f696869818181696869696869696869 -6968698181816968696968696968698181818181819b9b9b9b9b9b818181818181818181818181 -818181818181818181696869818181818181696869696869696869514e4f514e4f696869818181 -818181696869696869696869514e4f302f2f302f2f302f2f010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -ffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9ffffffffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffffffffffffffffffffffffffffe9e9e9 -e9e9e9ffffffffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9 -e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9e9e9e9ffffffffffffffffffffffffe9e9e9e9e9e9 -ffffffffffffe9e9e9e9e9e9e9e9e9ffffffe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ffffff -e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -d6d6d6d6d6d6ffffffffffffffffffffffffffffffe9e9e9d6d6d6d6d6d6ffffffffffffffffff -ffffffffffffffffffffffffffffffe9e9e9b3b3b3d6d6d6ffffffffffffffffffffffffffffff -c9c2c4c9c2c4d6d6d6ffffffffffffffffffffffffd6d6d6d6d6d6d6d6d6e9e9e9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -d6d6d6302f2f818181ffffffffffffffffffffffff818181302f2fd6d6d6ffffffffffffffffff -ffffffffffffffffffffffffb3b3b39b9b9bc9c2c4514e4fb3b3b3ffffffffffff9b9b9b696869 -d6d6d6d6d6d6818181696869e9e9e9ffffffffffffb3b3b3302f2f9b9b9be9e9e9ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffff302f2f302f2fffffffffffffffffffffffff514e4f010101ffffffffffffffffffffffff -ffffffffffffffffffe9e9e9302f2fe9e9e9ffffffc9c2c4b3b3b3ffffff9b9b9b010101d6d6d6 -ffffffffffffe9e9e9514e4f514e4fffffffffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffff818181010101b3b3b3ffffffffffffd6d6d6696869010101ffffffe9e9e9c9c2c4e9e9e9 -ffffffe9e9e9c9c2c4e9e9e90101019b9b9bffffffffffffffffffffffff302f2f9b9b9bffffff -ffffffffffffffffffd6d6d60101019b9b9bffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffb3b3b3818181514e4fffffffe9e9e9b3b3b3b3b3b3010101ffffffd6d6d60101019b9b9b -ffffff818181514e4fffffff696869010101696869e9e9e9ffffffc9c2c4010101d6d6d6ffffff -ffffffffffffffffffe9e9e9302f2f818181ffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -e9e9e9b3b3b3c9c2c4010101d6d6d6d6d6d6b3b3b3c9c2c4302f2fe9e9e9ffffff696869514e4f -ffffffc9c2c4d6d6d6ffffffffffffb3b3b3010101302f2fe9e9e9c9c2c4010101c9c2c4ffffff -ffffffffffffffffffffffff514e4f696869ffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -c9c2c4b3b3b3ffffff514e4f696869b3b3b3ffffffd6d6d6302f2fe9e9e9ffffffd6d6d6302f2f -d6d6d6c9c2c4ffffffffffffffffffffffffe9e9e9302f2f302f2fffffff302f2f696869ffffff -ffffffffffffffffffe9e9e90101019b9b9bffffffd6d6d6010101b3b3b3ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -818181b3b3b3ffffff9b9b9b010101b3b3b3ffffffe9e9e9302f2fe9e9e9ffffffffffff302f2f -818181e9e9e9ffffff9b9b9bd6d6d6ffffffffffff514e4f302f2fffffff818181010101c9c2c4 -ffffffffffffffffff9b9b9b302f2fe9e9e9ffffffe9e9e9010101b3b3b3ffffffffffffe9e9e9 -b3b3b3e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -010101514e4fe9e9e9ffffff696869ffffffffffff818181010101818181ffffffffffffb3b3b3 -302f2fffffffffffffb3b3b3514e4fb3b3b3b3b3b3514e4fd6d6d6ffffffffffff818181302f2f -9b9b9bd6d6d6d6d6d6696869c9c2c4ffffffffffff9b9b9b010101696869c9c2c4c9c2c4514e4f -818181ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -b3b3b3b3b3b3e9e9e9ffffffe9e9e9ffffffffffffc9c2c4b3b3b3b3b3b3ffffffffffffffffff -9b9b9bffffffffffffffffffc9c2c4c9c2c4c9c2c4e9e9e9ffffffffffffffffffffffffd6d6d6 -818181302f2f514e4fffffffffffffffffffffffffc9c2c4b3b3b3c9c2c4c9c2c4c9c2c49b9b9b -e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9e9e9b3b3b3 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffc9c2c4302f2f302f2f818181d6d6d6ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff514e4f818181 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff818181302f2f818181ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9e9e9ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffe9e9e9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4fffffffffffffffffffdd7e8fec2d9 -fec2d9fec2d9fec2d9fec2d9fec2d9fec2d9fec2d9fec2d9fdd7e8fdd7e8fec2d9fdd7e8ffffff -fcabc5fcabc5fdd7e8fec2d9fec2d9fec2d9fcabc5fec2d9fffffffdd7e8fcabc5fcabc5fec2d9 -fec2d9fec2d9fec2d9fdd7e8fffffffdd7e8fcabc5fec2d9fdd7e8fcabc5fcabc5fec2d9fdd7e8 -fdd7e8fdd7e8fffffffdd7e8fcabc5fcabc5fdd7e8fec2d9fdd7e8fec2d9fec2d9fffffffec2d9 -fcabc5fec2d9fec2d9fcabc5fcabc5fec2d9fec2d9fec2d9fec2d9fdd7e8ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -fdd7e8fec2d9fec2d9fec2d9fec2d9fec2d9fdd7e8fec2d9fdd7e8fdd7e8fec2d9fdd7e8ffffff -fec2d9fec2d9fdd7e8fdd7e8fdd7e8fec2d9fcabc5fec2d9fffffffffffffdd7e8fec2d9fec2d9 -fec2d9fdd7e8fec2d9ffffffffffffe9e9e9fdd7e8e9e9e9fdd7e8fcabc5fec2d9fdd7e8fdd7e8 -fec2d9fdd7e8ffffffe9e9e9fec2d9fec2d9fec2d9fdd7e8fdd7e8fec2d9fec2d9fffffffdd7e8 -fec2d9fec2d9fec2d9fcabc5fec2d9fdd7e8fec2d9fec2d9fec2d9e9e9e9ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -c9c2c4b3b3b3b3b3b3d6d6d6e9e9e9ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffc9c2c4 -ffffffffffffffffffd6d6d6c9c2c4d6d6d6ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9302f2f -9b9b9bc9c2c4d6d6d6d6d6d6ffffffc9c2c4d6d6d6ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffd6d6d6010101 -302f2f302f2f302f2f514e4fe9e9e9ffffffb3b3b3e9e9e9ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9514e4f -514e4f514e4f302f2f514e4fe9e9e9ffffffd6d6d6d6d6d6ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e99b9b9b -d6d6d6e9e9e9b3b3b3d6d6d6ffffffffffffffffffc9c2c4e9e9e9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9302f2f -818181b3b3b3818181c9c2c4c9c2c49b9b9bc9c2c4d6d6d6e9e9e9ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffd6d6d6e9e9e9ffffffffffffffffffffffffffffffe9e9e9e9e9e9e9e9e9ffffffd6d6d6 -e9e9e9ffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffd6d6d6302f2f -514e4f514e4f302f2f302f2f514e4f6968699b9b9bffffffd6d6d6ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -e9e9e9c9c2c4e9e9e9d6d6d6d6d6d6e9e9e9e9e9e9ffffffe9e9e9e9e9e9d6d6d6e9e9e9c9c2c4 -c9c2c4e9e9e9e9e9e9d6d6d6d6d6d6ffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffe9e9e9514e4f -696869696869514e4f514e4f8181819b9b9b818181ffffffd6d6d6ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffe9e9e9ffffffd6d6d6d6d6d6d6d6d6e9e9e9ffffffd6d6d6e9e9e9d6d6d6e9e9e9e9e9e9 -d6d6d6e9e9e9e9e9e9d6d6d6e9e9e9ffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffe9e9e9 -e9e9e9e9e9e9e9e9e9e9e9e9ffffffd6d6d6d6d6d6ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101f50237f50237f50237f50237f50237f50237c9c2c4ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/dubois.gif b/Docs/Books/dubois.gif Binary files differdeleted file mode 100644 index 36e0af7a41d..00000000000 --- a/Docs/Books/dubois.gif +++ /dev/null diff --git a/Docs/Books/dubois.txt b/Docs/Books/dubois.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/dubois.txt +++ /dev/null diff --git a/Docs/Books/ecomm.eps b/Docs/Books/ecomm.eps deleted file mode 100644 index 4d4bf2447e1..00000000000 --- a/Docs/Books/ecomm.eps +++ /dev/null @@ -1,1149 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/ecomm.eps -%%CreationDate: Sun Dec 31 14:29:34 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 366 -%%EndComments -%%BeginPreview: 100 124 1 124 -% fffffffffffffffffffffffff0 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 9ff0055555555000000290c210 -% 9ff807fffffff0000002fefb10 -% 90900555555550000002aad210 -% 800007fffffff0000002482910 -% 9de006aaaaaaa0000000000010 -% 9be000002ffff0000000000010 -% 9ec0000bfaaaa00000002a6f10 -% 840002feafffe000000076f210 -% 1dc007d5fa9000000000295f10 -% 95a006bf550000000000000010 -% 9ee007eafffd40000000000010 -% 0a40001faab7f0000000000010 -% 16c000002fed50000000000010 -% 9fa00555ad5ff0000000000010 -% 99e007ff7bf550000000000010 -% 0d800555d6aff0000000000010 -% 924007ff7ffaa0000000000010 -% 1fe006aad557f0000000000010 -% 9fe00000000000000000000010 -% 1fc04000000000000000000010 -% 8021c000005c00000000000010 -% 1ff9800017f400000000000010 -% 9061600bfd5c00000000000010 -% 0a81e2feabf400000000000010 -% 9fe95fb5feac00000000000010 -% 8401f6ef200000000000000010 -% 1ee0adbad54000000000000010 -% 1b607feffffc00000000000010 -% 9fe0005aaaac00000000000010 -% 80000002fff800000000000010 -% 1ff8000002ac00000000000010 -% 8a300000001400000000000010 -% 08800000000000000000000010 -% 9de000aa80aa80000000000010 -% 1b6003ffc3ffc0000000000010 -% 8ec00555455570000000000010 -% 000007ff87ffd0000000000010 -% 800005554d5570000000000010 -% 000007d54fabd0000000000010 -% 800006801a00b0000000000010 -% 000007927612e0000000000010 -% 8000057fde7fb0000000000010 -% 800007eab42ae0000000000010 -% 0000055ff87fa0000000000010 -% 000003f5502ae0000000000010 -% 80000095505500000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 8000017fffff40000000000010 -% 000003d55555e0000000000010 -% 800006bfffff50000000000010 -% 000005eaaaaaf0000000000010 -% 8000077fffffa0000000000010 -% 00000d800000f0000000000010 -% 80001b000000d0000000000010 -% 800017edb6dbb0000000000010 -% 00003d5b6db6e0000000000010 -% 000037ffffffb0000000000010 -% 800032aaaaaae0000000000010 -% 800003ffffffa0000000000010 -% 00000012244400000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 800007ffffffe0000000001110 -% 00000555555570000183023790 -% 800007ffffffd0000081023110 -% 000006aaaaaab0000040813190 -% 800005ffffffe0000040802190 -% 00000700000010000220402090 -% 80000680000000000000004090 -% 00000580000000000080002890 -% 80000500000000000200205710 -% 00000000000000000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% 80000000000000000000000010 -% 00000000000000000000000010 -% fffffffffffffffffffffffff0 -% 7ffbffffffffffffffbbfffbd0 -% edb76fefffffbf6db6baad6eb0 -% 76edfb7edbf6f5db7ef5dbeb50 -% 6db56eabfedf6ed6d55e555ed0 -% f6efdb6dabfbf5b5bb7bbfb5b0 -% b5baaad6daaeaeded6b7aa6e70 -% 6eabea2d56b175b5b56b6edad0 -% db5d55d5bbabaedb6f37e5bdf0 -% 75f34b3b6d76db6d509abb6b70 -% 7eaab4d6d6db6adbaea7f5f7d0 -% edddaabb7b6d576cab455d4db0 -% 7b7755adadb6d1aba899b65f70 -% d7aaaadb6b6d2a545744edbb70 -% 7b6d556ad59aaaab5a665f56d0 -% bedb5ab76eeaaa54aa9935ddb0 -% 6bb7936ddb5b55555b699b66f0 -% fd6aaadab6ea4aaab5502fdbb0 -% 6bad752da95555556b2512fd70 -% feb7aaa2dfb554aab6db4bb7d0 -% 5b6aba88aaaa4a5555b69d7cb0 -% 7ed56bb35b6db5aaab6e36ef70 -% d5b6d542edb6faf5765cbdddb0 -% 7bf56badb6dad552dbfdeab7d0 -% ef6d9b52d9b77cd76d55b75af0 -% 75eb75eb6f6deab5537bedefb0 -% dd7ed7aad55ab5d5eed755b3f0 -% 7b6eaad5afedfd6b1b4edbdad0 -% eadbfbf556b6b554adbfb6adf0 -% 415f55abebedfdbb766d6f7cb0 -% e4ebb5f55ddbb56edaddbafb70 -% 41dddbaadefd7d5b6dfbeef6b0 -% 68d5b5f5eb6aeaffdab6bdec90 -% c1db5bab5dbffdb6ededf7e8f0 -% 6ae56af5eb76b7ffbbdbb7f350 -% d54900d75daffcdaf5f76fcdb0 -% 6ab7ffebf7fdadfbbbdfdfadd0 -% ff7f75b6fdabffbf77febf5b70 -% 7ffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 351.496063 translate -283.464567 -351.496063 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 124 8 -% Transformation matrix -[ 100 0 0 124 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefef0edeff0edeff0edeff0edeff0edeffefefefefefefefefefefefefefefef0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ff0edefd7dade4f595b4f595b4f595b4f595b4f595b4f595b4f595b4f595b4f595b8496a4 -f0edeff0edeff0edeff0edeff0edeff0edeff0edefd7dadeed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -d7dadef0edefd7daded7daded7daded7daded7daded7daded7dadef0edeff0edeff0edeff0edef -d7daded7daded7daded7daded7daded7daded7daded7daded7daded7daded7dadef0edefa9bbc3 -8496a4d7dade4f595ba9bbc3a9bbc38496a48496a4d7daded7daded7dade8496a44f595b8496a4 -d7daded7daded7dade8496a4d7dadef0edeff0edeff0edef060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595b -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefea9bbc3 -4f595bf0edef4f595b4f595b4f595b4f595b4f595b4f595b4f595ba9bbc34f595b060e0f4f595b -4f595b4f595bd7dade4f595b4f595bd7dadefefefefefefe060e0f -060e0ffefefef0edef060e0f8496a4d7daded7dade8496a4060e0fd7daded7dade4f595b4f595b -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefea9bbc3 -4f595bd7dade4f595b4f595b4f595b4f595b4f595b4f595b4f595bfefefe4f595b060e0f4f595b -4f595b4f595bd7dade4f595b4f595bd7dadefefefefefefe060e0f -060e0ffefefefefefed7daded7dadef0edeffefefef0edefa9bbc3f0edeffefefed7daded7dade -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefed7dade -8496a4f0edef8496a48496a48496a4a9bbc38496a48496a4a9bbc3fefefea9bbc38496a48496a4 -8496a48496a4f0edefa9bbc38496a4f0edeffefefefefefe060e0f -060e0ffefefefefefe4f595b060e0f4f595bd7dade4f595b060e0f060e0f4f595bfefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edefd7dadefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefed7dade060e0f4f595b8496a44f595b060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefef0edefd7dadef0edef -fefefed7daded7daded7dadef0edeffefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0fa9bbc34f595b060e0f4f595bf0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefe8496a48496a48496a48496a48496a48496a4a9bbc3a9bbc3060e0f4f595b -8496a44f595b4f595b4f595b4f595bf0edeffefefefefefe060e0f -060e0ffefefefefefed7dade8496a48496a4a9bbc3fefefea9bbc38496a4d7dadefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edefef8b8fed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefe8496a44f595b4f595b4f595b4f595b4f595b8496a4a9bbc3060e0f4f595b -4f595b8496a48496a44f595b4f595bf0edeffefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595bf0edef4f595b4f595b4f595b8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516ed4a54ed4a54ed4a54ed4a54ef8b8fef8b8ff2c8c9f2c8c9f2c8c9f0edeff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefe8496a44f595b4f595b4f595b8496a48496a48496a4d7dade4f595b8496a4 -4f595b4f595b4f595b4f595b4f595bd7dadefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b4f595b8496a4060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -ed4a54ef8b8fef8b8ff2c8c9f2c8c9f0edeffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edefd7daded7daded7dadef0edeff0edeff0edeff0edefd7dadea9bbc3 -a9bbc3d7dadef0edefa9bbc3d7dadef0edeffefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f8496a44f595b060e0f060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54ed4a54ed4a54ed4a54ef8b8fef8b8f -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefea9bbc38496a48496a48496a4fefefe8496a48496a4a9bbc3fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8f -ed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595b4f595b4f595b4f595b4f595b8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b4f595b060e0f060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef0edefed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b4f595b8496a4060e0f4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595ba9bbc34f595b4f595b4f595b8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef8496a48496a48496a48496a48496a48496a48496a48496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b4f595b4f595b4f595b4f595b4f595b4f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f060e0f060e0f060e0f060e0f060e0f4f595bfefefefefefe -fefefef0edefef8b8fef8b8fef8b8ff2c8c9fefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefed7dadea9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc38496a4d7daded7dade -fefefef0edeff40516f40516f40516ef8b8ffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595b -fefefef0edeff40516f40516f40516ef8b8ffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b8496a4a9bbc3a9bbc3a9bbc3a9bbc38496a44f595ba9bbc3d7dade -fefefef0edeff40516f40516f40516ed4a54fefefefefefefefefefefefefefefef0edeff2c8c9 -f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef8496a48496a4a9bbc38496a4a9bbc3a9bbc38496a48496a4d7dadea9bbc3 -fefefef0edeff40516f40516f40516f40516ef8b8fef8b8fef8b8fed4a54ed4a54f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595b8496a4060e0f -fefefef0edeff40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefea9bbc3a9bbc38496a4a9bbc3d7dadea9bbc3a9bbc3d7dadef0edefd7dade -fefefefefefeed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516ed4a54ed4a54ed4a54ef8b8fef8b8fef8b8fef8b8f -f2c8c9f2c8c9f2c8c9f0edeff0edeff0edeffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f060e0f060e0fd7dade4f595b060e0f4f595bfefefefefefe -fefefefefefeef8b8ff40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8f -ef8b8fef8b8fef8b8ff2c8c9f2c8c9f2c8c9f2c8c9fefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f4f595b8496a44f595b4f595b8496a44f595b060e0ff0edeffefefe -fefefefefefefefefef2c8c9ed4a54f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef060e0f060e0f060e0f060e0f060e0f060e0f060e0f4f595bfefefefefefe -fefefefefefefefefefefefefefefef0edeff2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefea9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3d7dadefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -f2c8c9f2c8c9ef8b8fef8b8fed4a54ed4a54f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef4f595b060e0f4f595b4f595b4f595b4f595b4f595b060e0f060e0f4f595b -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edefd7dadef2c8c9ef8b8fef8b8fed4a54ed4a54 -f40516f40516f40516f40516f40516f40516f40516f2c8c9fefefefefefefefefefefefefefefe -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefef0edef8496a48496a48496a44f595b8496a48496a48496a48496a44f595b8496a4 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edeff0edeff2c8c9ef8b8fef8b8fed4a54ed4a54f2c8c9fefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edeffefefe060e0f -060e0ffefefefefefea9bbc38496a48496a4fefefea9bbc38496a48496a4a9bbc3fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edef060e0f -060e0ffefefef0edef060e0f060e0f4f595b8496a4060e0f060e0f060e0f060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edefef8b8fed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ffefefefefefefefefefefefef0edef -ef8b8fed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeffefefef0edef060e0f -060e0ffefefed7dade060e0f4f595b4f595b060e0f4f595b8496a44f595b060e0ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefef0edefed4a54f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516fefefefefefefefefef0edefed4a54 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefef0edeffefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefe8496a44f595b4f595b4f595bf0edef4f595b060e0f8496a4fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefeed4a54f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54fefefefefefefefefeed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeffefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516ed4a54fefefefefefeef8b8ff40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edef -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefef0edeff0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516fefefef0edeff40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef060e0f -060e0ff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff2c8c9f40516f40516f40516f40516f40516 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f0edefef8b8ff40516f40516f40516 -f40516f40516ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f40516f40516f40516f40516f40516 -f2c8c9f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edef -d7daded7daded7daded7daded7daded7daded7daded7dade060e0f -060e0ff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff2c8c9f40516f40516f40516f40516f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f40516f2c8c9fefefefefefef0edeff0edeff0edeffefefef2c8c9f40516f40516f40516f40516 -f2c8c9f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edefd7daded7daded7daded7dade -d7daded7daded7daded7daded7daded7daded7daded7dade060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516ed4a54 -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8ff40516f40516f40516f40516f40516 -ef8b8ffefefef2c8c9ef8b8fef8b8fef8b8fef8b8fef8b8fed4a54f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edeff0edef -fefefefefefef0edeff0edeff0edeff0edeffefefef0edef060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefeed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edeff0edef -f0edeffefefefefefefefefef0edeff0edeffefefef0edef060e0f -060e0ff0edeff0edeff0edeff0edeff0edefd7dadef0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edefd7dadef40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ef8b8f -f0edeff0edefed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edefd7daded7dade -d7daded7daded7daded7daded7daded7daded7dadef0edef060e0f -060e0ffefefefefefefefefefefefef0edeff0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edefed4a54f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54fefefe -fefefef0edefed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefef0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edef060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f0edeffefefe -fefefefefefeed4a54f40516f40516f40516f40516f40516f40516f40516f40516f40516f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef2c8c9ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff0edeffefefefefefe -fefefefefefeed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff0edeffefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edeff0edeffefefefefefef0edeff0edeff0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edef060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefef2c8c9ed4a54ed4a54f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54ed4a54f2c8c9fefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefef0edeffefefefefefef0edeffefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f2c8c9 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefeed4a54f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516ed4a54 -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fed4a54f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefeed4a54f40516f40516f40516f40516f40516f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516 -f2c8c9fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeffefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefeef8b8ff40516f40516f40516f40516f40516f40516f40516 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefeef8b8ff40516f40516ed4a54f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefeef8b8ff40516f40516ef8b8fef8b8ff40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ef8b8f -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef2c8c9ed4a54ef8b8ff0edefed4a54f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeffefefef0edefef8b8fef8b8fef8b8f -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54ef8b8ff2c8c9fefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeff0edeffefefef0edeff0edeffefefef0edeff0edef -f0edeff0edeffefefefefefefefefefefefef0edeff0edeff0edeff0edeff0edeffefefef0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefef0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeff40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516ed4a54 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7daded7daded7daded7daded7daded7daded7daded7daded7daded7dade -d7daded7daded7daded7dadea9bbc3d7daded7daded7daded7daded7daded7dadea9bbc3ef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8ff0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadefefefefefefe8496a44f595bd7dadefefefed7dadef0edeffefefe -8496a44f595bd7dadefefefed7dadef0edeffefefea9bbc3060e0fa9bbc3fefefef2c8c9f40516 -f40516ed4a54a9bbc3ed4a54f40516f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadefefefefefefe8496a44f595ba9bbc3fefefef0edeffefefefefefe -8496a44f595b8496a4fefefed7dadef0edeffefefea9bbc34f595b8496a4fefefef2c8c9f40516 -f40516ed4a54d7dadeef8b8ff40516f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadefefefef0edefdddc59dddc598496a4fefefef0edeffefefef0edef -a9bbc3dddc598496a4fefefed7dadef0edeffefefed7daded7dade8496a4fefefef2c8c9f40516 -f40516ef8b8fd7dadea9bbc3f40516f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516f40516 -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeffefefea9bbc3d7dadefefefe4f595ba9bbc3f0edeffefefea9bbc3 -d7dadefefefe4f595ba9bbc3d7dadefefefed7daded7dadefefefea9bbc3d7dadef2c8c9f40516 -ed4a54d7daded7daded7dadeed4a54f40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516ef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8f -ef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8fef8b8f -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefef0edeff0edef8496a4fefefefefefe8496a44f595bf0edeff0edefa9bbc3 -fefefefefefea9bbc38496a4d7dadef0edefd7dadef0edeff0edefd7daded7dadef2c8c9f40516 -ef8b8ff0edeff0edefd7dadeef8b8ff40516f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f0edef -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadedddc59dddc59d7dadefefefedddc59dddc59f0edeff0edefd7dade -d7dadefefefed7daded7daded7daded7dadea9bbc3d7dadef0edefd7daded7dadea9bbc3ed4a54 -d7daded7dadef0edefd7dadef2c8c9ed4a54f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef2c8c9f40516f40516f40516f40516f0edef -fefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefe -fefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7dadedddc59dddc59a9bbc38496a4dddc59dddc59f0edeff0edeff0edef -d7daded7dadef0edeff0edefd7dadef0edeff0edefd7daded7daded7dadef0edefa9bbc3ed4a54 -d7dadea9bbc3f2c8c9d7dadef2c8c9ed4a54f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edefed4a54ed4a54ed4a54ed4a54f0edef -fefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefed7daded7dadea9bbc3a9bbc3a9bbc3a9bbc3d7daded7daded7daded7dade -d7daded7daded7daded7dadea9bbc3d7daded7daded7daded7daded7daded7dadea9bbc3ed4a54 -ed4a54ed4a54ed4a54ed4a54ed4a54ed4a54f0edeffefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefe -fefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefef0edeff0edeffefefef0edeffefefef0edeff0edeff0edeff0edef -f0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeff0edeffefefe -f0edeff0edeffefefef0edeffefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefef0edeffefefefefefefefefef0edeffefefe -fefefefefefef0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -f0edeffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefef0edeffefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0ffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefe060e0f -060e0fa9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3d7dadea9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3 -a9bbc3a9bbc3a9bbc3a9bbc3d7dadea9bbc3a9bbc3d7dade060e0f -060e0f124b91060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91060e0f060e0f060e0f060e0f060e0f124b91060e0f124b91060e0f060e0f060e0f124b91 -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f124b91124b91060e0f060e0f060e0f124b913a74b8060e0f4f595b3a74b8124b91 -060e0f124b91060e0f060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b913a74b81078c8124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -3a74b8124b91124b91124b91124b91124b91124b91124b91124b91060e0f060e0f060e0f124b91 -124b91124b91060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f124b91060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f124b91060e0f124b91124b91124b91124b91 -060e0f124b91124b91060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b918496a4124b91060e0f4f595b8496a4 -124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b913a74b81078c8124b91124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -3a74b8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91060e0f060e0f -124b91124b91124b91060e0f124b91124b91060e0f124b91124b91060e0f124b91124b91124b91 -060e0f060e0f060e0f060e0f124b91124b91124b91124b91124b91124b91124b91124b91124b91 -060e0f124b91124b91124b911078c8124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b913a74b88496a4124b91124b91124b913a74b8 -8496a4124b91124b913a74b81078c8124b91124b91124b91124b91124b911078c8124b91124b91 -124b913a74b81078c8124b91124b911078c83a74b83a74b8060e0f -060e0f124b91124b911078c83a74b8124b91124b913a74b81078c8124b911078c81078c83a74b8 -3a74b83a74b8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b911078c81078c8124b911078c83a74b83a74b83a74b8124b91124b913a74b8 -124b913a74b8124b91124b91124b91124b913a74b83a74b83a74b8124b91124b91124b913a74b8 -3a74b88496a43a74b81078c83a74b81078c83a74b83a74b83a74b8124b911078c8124b91124b91 -3a74b81078c8124b91124b911078c81078c81078c83fa4e5060e0f -060e0f124b91124b911078c8124b913a74b83a74b83a74b8124b911078c81078c81078c81078c8 -1078c83a74b8124b911078c8124b91124b911078c8124b91124b91124b913a74b83a74b83fa4e5 -3a74b83a74b81078c8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b91124b91124b91124b91124b913a74b8124b91124b91124b91 -3a74b83a74b83a74b83a74b8124b91124b913a74b83fa4e53a74b83fa4e51078c83a74b83a74b8 -3a74b83a74b83a74b8124b913a74b83a74b83a74b88496a43a74b8124b91124b91124b913a74b8 -124b913a74b88496a43a74b83a74b83a74b81078c83a74b83a74b8124b911078c8124b913a74b8 -1078c81078c8124b911078c81078c81078c81078c8a9bbc3060e0f -060e0f124b91124b91124b913a74b83a74b83a74b83a74b83a74b8124b91124b91124b913a74b8 -1078c83a74b8124b91124b911078c83a74b83a74b81078c81078c81078c81078c83fa4e51078c8 -1078c83a74b81078c83a74b83a74b8124b91124b911078c81078c81078c81078c81078c8124b91 -1078c8124b91124b91124b91124b91124b91124b91124b91124b91124b91124b91124b911078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -124b911078c81078c8124b913a74b81078c81078c83fa4e58496a4124b91124b91124b913a74b8 -124b91124b913a74b88496a43a74b81078c81078c81078c8124b91124b911078c83a74b8124b91 -1078c81078c8124b911078c81078c81078c88496a43fa4e5060e0f -060e0f124b91124b91124b913a74b83a74b81078c81078c81078c81078c81078c8124b911078c8 -1078c83a74b8124b911078c81078c81078c83a74b81078c83fa4e53fa4e53fa4e51078c81078c8 -1078c83fa4e51078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c8124b911078c8124b911078c81078c8124b913a74b8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c83a74b81078c81078c81078c83fa4e53a74b8124b91124b913a74b8124b91 -124b91124b91124b913a74b88496a43a74b8124b91124b91124b911078c83fa4e51078c81078c8 -1078c8124b91124b911078c81078c88496a43a74b8124b91060e0f -060e0f124b91124b913a74b83a74b83a74b81078c81078c83a74b83a74b83a74b83a74b81078c8 -3a74b83a74b8124b911078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e51078c81078c83fa4e51078c83fa4e51078c83fa4e51078c81078c81078c81078c8 -3fa4e51078c83fa4e51078c81078c83fa4e53fa4e53fa4e53a74b83fa4e53a74b8124b913a74b8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b81078c81078c8 -1078c81078c81078c83a74b83a74b81078c81078c83fa4e53a74b81078c81078c83a74b83a74b8 -124b91124b91124b91124b913a74b8a9bbc33a74b8124b913a74b83fa4e51078c81078c81078c8 -1078c8124b911078c81078c8a9bbc33fa4e5124b91124b91060e0f -060e0f124b913a74b8124b913a74b83a74b81078c81078c83a74b8124b913fa4e53fa4e51078c8 -1078c81078c8124b911078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c83fa4e5 -3fa4e53fa4e51078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c8 -1078c81078c83a74b81078c81078c83fa4e53fa4e53fa4e51078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c83a74b81078c83fa4e5a9bbc33a74b8124b913a74b81078c8 -1078c8124b91124b911078c8124b913a74b88496a43a74b83a74b8124b911078c81078c81078c8 -1078c8124b911078c88496a43a74b8124b91124b91124b91060e0f -060e0f124b91124b91124b911078c81078c81078c8124b91124b91124b91124b911078c83a74b8 -3fa4e51078c8124b913fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e5 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8 -1078c81078c8124b911078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b8 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc3a9bbc33a74b83a74b81078c8 -1078c8124b91124b911078c8124b91124b913a74b8a9bbc34f595b124b911078c8124b91124b91 -1078c81078c88496a43a74b8124b91124b91124b91124b91060e0f -060e0f124b91124b91124b91124b913a74b81078c81078c81078c83a74b81078c83a74b81078c8 -3fa4e53a74b81078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b8 -1078c83a74b81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e58496a4d7dadea9bbc31078c8 -1078c8124b91124b91124b91124b91124b911078c83a74b88496a43a74b81078c81078c8124b91 -1078c88496a43a74b8124b91124b91124b91124b911078c8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b91124b911078c81078c8124b911078c8 -1078c83a74b81078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c81078c83fa4e5 -3fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c81078c83fa4e53fa4e51078c8 -3fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e53fa4e5a9bbc3a9bbc33fa4e5 -1078c81078c81078c81078c8124b91124b91124b911078c83a74b88496a43a74b81078c81078c8 -8496a43a74b8124b91124b91124b91124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b913a74b8124b91124b911078c8124b911078c81078c83a74b8 -1078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e51078c83a74b83fa4e5 -3fa4e51078c81078c81078c81078c83a74b81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c83fa4e53fa4e5 -3fa4e53fa4e53fa4e51078c81078c83fa4e51078c83a74b81078c81078c81078c81078c81078c8 -1078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc33fa4e51078c8a9bbc3 -8496a41078c81078c81078c81078c81078c81078c81078c81078c83fa4e58496a43a74b88496a4 -3a74b8124b91124b91124b91124b911078c83a74b81078c8060e0f -060e0f124b91124b91124b913a74b83a74b8124b91124b911078c81078c83a74b83a74b83a74b8 -3fa4e53a74b81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -1078c83fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e53fa4e5d7dade3fa4e53fa4e5 -a9bbc3a9bbc31078c81078c81078c81078c81078c8124b911078c81078c83fa4e5a9bbc33a74b8 -124b91124b91124b91124b91124b913a74b8124b91124b91060e0f -060e0f124b91124b91124b91124b913a74b8124b91124b913a74b81078c83a74b81078c81078c8 -3a74b83a74b83a74b83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c8 -1078c81078c81078c83a74b83a74b83a74b81078c81078c83a74b81078c83fa4e53fa4e51078c8 -1078c81078c83fa4e53fa4e51078c81078c83a74b83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e53fa4e5 -1078c83fa4e51078c81078c83fa4e51078c83fa4e53fa4e53fa4e51078c83fa4e5d7dade3fa4e5 -1078c8a9bbc3a9bbc31078c81078c81078c81078c8124b91124b91124b911078c83fa4e53fa4e5 -1078c81078c8124b911078c83a74b8124b91124b913a74b8060e0f -060e0f3a74b8124b91124b91124b91124b91124b913a74b8124b91124b913a74b83a74b83a74b8 -3a74b81078c8124b913fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e53fa4e53fa4e51078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e5a9bbc33fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e51078c83a74b81078c83fa4e51078c83fa4e53fa4e51078c83fa4e5d7dade -3fa4e51078c88496a4a9bbc31078c81078c81078c81078c8124b91124b91124b911078c83a74b8 -3fa4e5124b911078c83fa4e51078c81078c83a74b8124b91060e0f -060e0f124b91124b913a74b83a74b8124b91124b91124b911078c83a74b8124b911078c83a74b8 -1078c81078c8124b911078c83fa4e5a9bbc33fa4e53fa4e53fa4e51078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c8124b911078c81078c8124b911078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c83fa4e53fa4e53fa4e5 -3fa4e53fa4e51078c81078c83a74b81078c81078c83fa4e51078c83fa4e53fa4e51078c83fa4e5 -d7dade3fa4e51078c88496a4a9bbc3124b91124b911078c81078c8124b911078c81078c81078c8 -1078c83fa4e53a74b8124b913a74b83a74b81078c81078c8060e0f -060e0f124b91124b911078c8124b91124b913a74b83a74b83a74b81078c83a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c83fa4e53fa4e53fa4e5a9bbc33fa4e51078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e51078c81078c83fa4e53fa4e51078c83fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc3a9bbc3 -a9bbc3d7daded7dadea9bbc3a9bbc3a9bbc33a74b8124b911078c8124b91124b91124b911078c8 -1078c81078c81078c83a74b83a74b8124b91124b91124b91060e0f -060e0f124b91124b913a74b8124b913a74b83a74b83a74b81078c83fa4e53a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c81078c81078c81078c83fa4e53fa4e53fa4e51078c83fa4e5 -3fa4e53fa4e51078c81078c83fa4e51078c81078c83fa4e51078c83fa4e53fa4e53fa4e53fa4e5 -1078c83fa4e51078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5a9bbc33fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e51078c8 -1078c81078c81078c83fa4e53fa4e51078c81078c83fa4e5a9bbc33fa4e53fa4e5a9bbc3a9bbc3 -3fa4e5a9bbc3d7daded7dade3fa4e58496a4a9bbc33a74b8124b91124b91124b91124b91124b91 -124b91124b913a74b83a74b81078c81078c81078c8124b91060e0f -060e0f124b91124b91124b91124b91124b91124b913a74b81078c83fa4e51078c83a74b83a74b8 -3a74b83a74b8124b913a74b83fa4e51078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e51078c81078c81078c81078c81078c81078c81078c81078c81078c83a74b81078c81078c8 -3a74b81078c81078c83fa4e5a9bbc38496a43a74b83fa4e53a74b8124b911078c8124b91124b91 -124b91124b91124b913a74b8124b91124b911078c81078c8060e0f -060e0f124b91124b91124b91124b91124b91124b911078c81078c81078c81078c83a74b88496a4 -3a74b83a74b83a74b83a74b81078c81078c81078c81078c83fa4e53fa4e53fa4e53fa4e5a9bbc3 -a9bbc3a9bbc3a9bbc3d7dadea9bbc3a9bbc33fa4e53fa4e53fa4e53fa4e51078c83fa4e51078c8 -1078c81078c83fa4e53fa4e51078c83fa4e51078c83fa4e53fa4e5a9bbc33fa4e53fa4e53fa4e5 -3fa4e53fa4e53fa4e5a9bbc3a9bbc33fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e53fa4e5 -3fa4e51078c81078c83fa4e53fa4e51078c81078c81078c83a74b83fa4e51078c81078c81078c8 -1078c83fa4e51078c83fa4e5a9bbc33a74b8124b91124b913fa4e53a74b81078c8124b91124b91 -124b91124b91124b91124b918496a43a74b8124b913a74b8060e0f -060e0f124b913a74b8124b91124b91124b91124b911078c83a74b81078c83a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c83a74b81078c81078c83fa4e51078c8124b91124b911078c8 -3fa4e53fa4e5a9bbc3a9bbc33fa4e51078c81078c81078c83a74b81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c81078c8124b913a74b8 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c83a74b83fa4e53fa4e53fa4e53fa4e53fa4e5 -1078c81078c83fa4e53fa4e53fa4e51078c81078c83fa4e53fa4e5124b91124b91124b91124b91 -124b911078c8a9bbc3a9bbc33a74b8124b911078c8124b91124b913a74b83a74b8124b91124b91 -124b91124b91124b91124b91124b918496a48496a4124b91060e0f -060e0f124b913a74b81078c83a74b83a74b81078c81078c83a74b81078c83a74b83a74b83a74b8 -8496a43a74b83a74b88496a41078c81078c81078c83a74b88496a43a74b8124b911078c83fa4e5 -3fa4e5a9bbc3a9bbc3a9bbc33fa4e51078c81078c81078c81078c81078c81078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c81078c81078c83fa4e53fa4e51078c81078c8124b91124b91124b91 -3a74b8a9bbc3a9bbc33fa4e51078c8124b911078c81078c81078c83a74b81078c8124b911078c8 -1078c8124b91124b911078c8124b91124b918496a44f595b060e0f -060e0f124b91124b91124b911078c81078c8124b91124b91124b91124b91124b91124b913a74b8 -3a74b83a74b83a74b83a74b83a74b81078c81078c81078c83fa4e53a74b8124b911078c83fa4e5 -3fa4e53fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c83a74b81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c81078c8a9bbc33fa4e53fa4e51078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8124b91124b91124b91 -3a74b8a9bbc3124b911078c81078c8124b91124b911078c83fa4e51078c8124b913a74b81078c8 -1078c81078c81078c8124b91124b91124b91124b918496a4060e0f -060e0f124b91124b91124b911078c81078c81078c8124b91124b91124b91124b91124b913a74b8 -3a74b83a74b83a74b83a74b83a74b83fa4e51078c81078c83fa4e53a74b8124b911078c83fa4e5 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c81078c83a74b83fa4e5 -1078c81078c8124b91124b911078c81078c81078c81078c81078c81078c8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e51078c81078c81078c8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c81078c8124b91124b913a74b8 -8496a4124b91124b91124b911078c81078c83a74b83a74b81078c81078c83a74b83a74b83fa4e5 -1078c8124b911078c81078c81078c8124b91124b91124b91060e0f -060e0f124b91124b91124b913a74b83a74b81078c81078c8124b91124b91124b913a74b83a74b8 -3a74b83a74b83a74b81078c83a74b83a74b81078c81078c83fa4e51078c8124b91124b911078c8 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c83a74b8 -1078c81078c81078c81078c81078c81078c81078c81078c81078c8124b91124b91124b91124b91 -3a74b83fa4e53fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e51078c81078c83fa4e5 -1078c81078c81078c83fa4e53fa4e51078c81078c81078c81078c81078c8124b913a74b88496a4 -124b91124b91124b91124b91124b911078c83fa4e51078c83a74b83a74b8124b91124b913a74b8 -8496a43a74b81078c8124b91124b91124b91124b91124b91060e0f -060e0f124b91124b91124b91124b911078c81078c81078c83a74b8124b91124b91124b91124b91 -124b91124b913a74b81078c83a74b83fa4e53a74b83a74b83fa4e51078c8124b91124b911078c8 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c83fa4e51078c81078c81078c8124b91 -3a74b83a74b81078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -3a74b81078c83fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e51078c81078c81078c8 -1078c81078c83fa4e51078c81078c81078c81078c81078c81078c81078c83a74b88496a4124b91 -124b91124b91124b91124b913a74b83fa4e51078c81078c83a74b8124b91124b911078c8124b91 -1078c8a9bbc33a74b8124b91124b91124b91124b91124b91060e0f -060e0f124b91124b91124b91124b91124b913a74b81078c83a74b83a74b8124b91124b913a74b8 -124b91124b911078c83a74b81078c81078c81078c83a74b83fa4e53a74b8124b91124b91124b91 -1078c83fa4e53fa4e53fa4e53fa4e51078c81078c81078c83fa4e53fa4e51078c8124b91124b91 -124b91124b911078c81078c81078c81078c81078c81078c81078c81078c8124b91124b91124b91 -124b911078c83fa4e53fa4e53fa4e51078c81078c81078c83fa4e53fa4e51078c81078c83fa4e5 -1078c83fa4e51078c81078c81078c81078c81078c81078c81078c88496a48496a4124b91124b91 -124b91124b91124b913a74b83fa4e5124b911078c83a74b8124b91124b91124b911078c81078c8 -3a74b84f595b8496a43a74b8124b91124b91124b91124b91060e0f -060e0f124b91124b913a74b83a74b88496a43a74b83a74b8124b913a74b83a74b8124b91124b91 -124b91124b911078c81078c81078c81078c81078c81078c83fa4e51078c8124b91124b91124b91 -124b911078c83fa4e53fa4e53fa4e51078c81078c81078c83a74b83fa4e53fa4e5124b91124b91 -124b91124b913a74b81078c81078c81078c81078c81078c83a74b83a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c83fa4e53fa4e53a74b83fa4e53fa4e5 -3fa4e53fa4e53fa4e51078c81078c81078c81078c81078c8a9bbc38496a4124b91124b91124b91 -124b91124b913a74b83a74b8124b913a74b83a74b8124b91124b911078c81078c81078c83fa4e5 -4f595b060e0f4f595ba9bbc33a74b8124b91124b91124b91060e0f -060e0f124b913a74b8d7dadef0edefd7dadefefefe8496a43a74b83a74b83a74b81078c8124b91 -124b91124b91124b91124b911078c81078c81078c81078c83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c8124b913a74b81078c81078c83a74b8124b91 -124b91124b91124b91124b911078c8124b911078c81078c81078c8124b91124b91124b91124b91 -124b911078c83fa4e51078c81078c81078c81078c81078c81078c81078c81078c83fa4e51078c8 -1078c81078c81078c81078c81078c81078c81078c88496a48496a4124b91124b91124b91124b91 -124b913a74b83a74b8124b913a74b83a74b8124b91124b911078c81078c81078c83a74b84f595b -060e0f060e0f124b913a74b8a9bbc33a74b8124b91124b91060e0f -060e0f124b913a74b8d7dadea9bbc33a74b8f0edef8496a4124b91124b913a74b81078c81078c8 -1078c8124b91124b91124b911078c81078c81078c83a74b83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e53fa4e51078c81078c81078c81078c81078c8124b911078c83a74b8 -124b91124b91124b91124b913a74b81078c81078c81078c81078c8124b91124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c81078c81078c81078c81078c83a74b8 -1078c81078c81078c81078c83a74b83a74b88496a48496a4124b91124b91124b91124b91124b91 -3a74b81078c8124b913a74b83a74b8124b91124b911078c81078c81078c83fa4e54f595b060e0f -060e0f124b911078c81078c88496a4a9bbc33a74b8124b91060e0f -060e0f124b913a74b8d7dadea9bbc3a9bbc3fefefe8496a4124b91124b913a74b81078c83a74b8 -1078c81078c8124b91124b91124b913a74b81078c81078c83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c81078c81078c8124b91124b911078c8 -3a74b8124b91124b91124b91124b91124b911078c81078c81078c8124b91124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c81078c8124b91124b911078c8124b911078c8 -1078c81078c81078c81078c81078c88496a48496a4124b91124b91124b91124b91124b913a74b8 -3a74b8124b91124b913a74b8124b91124b91124b91124b911078c83fa4e54f595b060e0f060e0f -124b911078c81078c81078c81078c88496a48496a43a74b8060e0f -060e0f124b913a74b8d7dadea9bbc3d7dadefefefe8496a4124b91124b913a74b83a74b83a74b8 -3a74b83a74b83a74b8124b913a74b83a74b81078c81078c83fa4e53a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c8124b911078c81078c81078c81078c81078c8 -1078c83a74b8124b91124b91124b91124b913a74b81078c83fa4e51078c8124b91124b91124b91 -124b911078c83fa4e51078c81078c81078c81078c8124b91124b91124b91124b91124b913a74b8 -124b911078c81078c81078c83a74b88496a43a74b83a74b8124b91060e0f124b913a74b83a74b8 -124b913a74b83a74b8124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f124b91 -1078c81078c81078c8d7dadea9bbc3124b913a74b88496a4060e0f -060e0f124b913a74b8d7daded7daded7dadefefefe8496a4124b91124b913a74b83a74b83a74b8 -3a74b83a74b83a74b83a74b81078c83a74b8124b911078c83a74b83a74b8124b91124b91124b91 -124b911078c83fa4e53fa4e51078c81078c81078c8124b913a74b81078c81078c81078c81078c8 -1078c83a74b83a74b8124b91124b91124b91124b913a74b81078c8124b91124b91124b91124b91 -124b911078c81078c81078c8124b911078c8124b91124b91124b91124b91124b91124b91124b91 -124b91124b911078c8124b911078c88496a4124b91124b914f595b124b913a74b83a74b8124b91 -4f595b3a74b8124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f124b91 -3a74b83fa4e5a9bbc33fa4e5a9bbc38496a4124b918496a4060e0f -060e0f124b913a74b88496a48496a48496a48496a48496a4124b91124b914f595b8496a48496a4 -8496a43a74b83a74b88496a43a74b83a74b83a74b83a74b83fa4e58496a43a74b83a74b8124b91 -124b911078c83fa4e53fa4e51078c81078c8124b91124b913a74b81078c81078c81078c81078c8 -124b911078c83a74b83a74b8124b91124b91124b91124b913a74b83a74b8124b91124b91124b91 -124b911078c81078c81078c8124b91124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b91124b911078c88496a4124b91060e0f124b913a74b8124b91124b913a74b8 -3a74b8124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f060e0f4f595b -4f595ba9bbc3a9bbc31078c81078c83fa4e53a74b8124b91060e0f -060e0f124b913a74b88496a48496a48496a48496a43fa4e51078c8124b914f595ba9bbc38496a4 -d7dadea9bbc38496a4a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc3a9bbc33a74b8124b91 -124b911078c83fa4e53fa4e51078c8124b91124b91124b911078c81078c81078c81078c81078c8 -1078c81078c81078c83a74b84f595b124b91124b91124b91124b91124b91124b91124b91124b91 -124b91124b913fa4e53a74b8124b91124b91124b91124b91124b911078c8124b911078c81078c8 -3a74b8124b91124b911078c83a74b88496a4060e0f060e0f060e0f4f595b124b914f595b4f595b -124b91124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f060e0f4f595b4f595b -a9bbc33fa4e51078c83a74b8124b91124b913fa4e58496a4060e0f -060e0f124b913a74b83a74b83fa4e53fa4e53fa4e53fa4e53fa4e53a74b83a74b83a74b83a74b8 -3a74b83a74b8124b914f595b124b91124b91124b913a74b83a74b83a74b84f595b124b91124b91 -124b913fa4e53fa4e53fa4e5124b91124b91124b91124b91124b911078c8124b911078c8124b91 -124b91124b91124b91124b913a74b84f595b124b91124b91124b91124b91124b91124b91124b91 -124b91124b911078c8124b91124b91124b91124b91124b91124b911078c8124b911078c8124b91 -124b91124b91124b911078c83a74b83a74b8060e0f060e0f060e0f4f595b4f595b4f595b060e0f -124b91124b91124b91124b913a74b84f595b060e0f060e0f060e0f060e0f4f595b4f595b8496a4 -3fa4e51078c8124b913a74b83fa4e5124b91124b913a74b8060e0f -060e0f124b91124b91124b91124b91124b91124b91124b913a74b8124b91124b91124b91124b91 -060e0f060e0f124b91124b91124b91124b91124b911078c81078c81078c8124b91124b91124b91 -124b911078c83fa4e51078c8124b91124b91124b91060e0f124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b913a74b8124b91124b91124b91124b91124b91124b91124b91 -124b91124b91124b913a74b8124b91124b91060e0f060e0f124b91124b91124b91124b91124b91 -124b91124b91124b91124b91124b914f595b060e0f060e0f060e0f4f595b124b91060e0f060e0f -124b91124b91124b913a74b8124b91060e0f060e0f060e0f060e0f4f595b4f595b3fa4e53a74b8 -124b911078c8124b91124b91124b913a74b8060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f060e0f -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/ecomm.gif b/Docs/Books/ecomm.gif Binary files differdeleted file mode 100644 index 67552393cc6..00000000000 --- a/Docs/Books/ecomm.gif +++ /dev/null diff --git a/Docs/Books/ecomm.txt b/Docs/Books/ecomm.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/ecomm.txt +++ /dev/null diff --git a/Docs/Books/in_21.eps b/Docs/Books/in_21.eps deleted file mode 100644 index 3bacae56e2d..00000000000 --- a/Docs/Books/in_21.eps +++ /dev/null @@ -1,1149 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/in_21.eps -%%CreationDate: Sun Dec 31 14:30:10 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 366 -%%EndComments -%%BeginPreview: 100 124 1 124 -% fffffffffffffffffffffffff0 -% f6db6db56b6db6db7ffffffff0 -% db6db6d6d556db6daaaaaaaab0 -% f6db6d2d2eaab6db6ffffffff0 -% db6db5f2f2b5db6dbadb214a70 -% d6b6db174d4b6db6d7b69a11d0 -% bb6b6ce9555696db6dfff7ff70 -% edb6b52aaaaaad6db7556eedd0 -% aadadad5555556d6ddffddbbb0 -% ff6da52aaaaaab6d6ab6fbef70 -% d5b6bad5555555b5b5edaf7bf0 -% badb4aaaaaaaaa6f6f5ffbdeb0 -% d76d5555555555b5b5b55ef7f0 -% b5b6aaaaaaaaaa56ed6ff7bd70 -% dedaaaaaaaaaaab555dd6defd0 -% b56d55555555556b5ab7db5ab0 -% 6bb5555555555556eddd7ffff0 -% b6daaaaaaaaaaaadb6b7d55570 -% 6d6aaaaaaaaaaab041a52affd0 -% b6d555555555554c44424035b0 -% 6b6aaaaaaaaaaab7bdffffef70 -% b6d5555555555548a5442bbdf0 -% db555555555555588042a37750 -% 6daaaaaaaaaaaaaf7fff5feef0 -% 56eaaaaaaaaaaaa8a4aafd7dd0 -% ed55555555555554240fd7d7b0 -% 5bb5555555555552d6aabd7df0 -% b6d55555555555576dfff7db50 -% 6d6aaaaaaaaaaaadb6aabdbff0 -% b6d5555555555552db5fef7570 -% 6b6aaaaaaaaaaaad2deadbefd0 -% b6ad5555555555576abfbebdb0 -% db5aaaaaaaaaaaaadf55f7ef70 -% 6ded5555555555576aff5d7bf0 -% 5692aaaaaaaaaaaaddabf7deb0 -% edbd555555555556b2debdb7f0 -% 5b6aaaaaaaaaaabaefb5eb6d50 -% b6daaaaaaaaaaad6baff5ffbf0 -% db6d555555555555d755fadeb0 -% 6db55555555555a810802437f0 -% 56daaaaaaaaaaab9552a4d7d70 -% bb6f555555555557bffefbd7d0 -% 6db56aaaaaaaaab42015df7db0 -% b6db5555555556d8253fb5dbf0 -% db6daaaaad5555afededff7750 -% 6db6b555555556b55b7b56eef0 -% 56db5555555555db6fdffdddd0 -% ed6deeaaaaaaad6db5755bbbb0 -% 5bb6b555555576b6dfdff77770 -% f6db5ad555555bdb6abb6eeef0 -% 5d6db7555555ad6db7f6ddddd0 -% ebb6d4aaaaab76b6dd5ffbbbb0 -% 7d5b6df6f6d6db6b77f55f7770 -% d6f55bad9dadadb6ddbff5eef0 -% 7f5bfd5ae56b76dbbbeb6f7dd0 -% 6ad6d6d75d5dab6eef7eddd7b0 -% ffbba8a491b6ddbb5dd7fbbdf0 -% 55d6d8c490d56adefb7d5f7750 -% ff7db188136edb6bafdbf5eef0 -% 5aab688010db6dbefaf76f7dd0 -% f7fed42249b5b6ebb7befdd7b0 -% 5d5b706592db5bbeeeebd77df0 -% f7f6dfdf7f6db6ebdddefddb50 -% 5dbdb5b5d5b6edbb7bbbaf77f0 -% 77687f79456dbf82ef777bdeb0 -% edfcc8c961b6a493ddeeeef7f0 -% 7b548500620004137b7dddbd70 -% defc84145288d453dfd7bbefd0 -% 75b4949976024483757df77af0 -% df6c911052885153dfdb5edfb0 -% 76dc84457200440376f7f7f5f0 -% ddf7fddd6fbfddffddbebd5f50 -% 77add777db76f77d7bebeff6f0 -% 6efb7dddbeefbed7ef7edaddd0 -% fdaed7f7f7ddebfebdebbfbbb0 -% 57fbfc0e06fb0030030ef5f770 -% fd5eac0407af8038030fbf5ef0 -% 5bf7fc0606fb0e30c305ebf7d0 -% 776d6c0407b70630430f7ebd70 -% eeffdc0606ef0c30c30ed7efd0 -% bdd5bc0484398630c307fd7af0 -% 77bf748404390c30430eafdfb0 -% ddf6ec04861907f0c30dfaf5f0 -% 775ddcc0861181d0c307b7bf50 -% 6ef7bc01861b8030430eeeebf0 -% fdddf4c106136030c30fbddeb0 -% 57bb5c41861bf830c305efbbf0 -% fdf7f4c107130c30430f7af770 -% 5b5ebc4187030c18c30edfbed0 -% 77f7ecc107078c30c307f5ebf0 -% eebd7c4187068c30430ebf7eb0 -% bdefd4c106070c30c30debd7f0 -% 77bafc41878704304301befd70 -% ddefacc1068680380300edafd0 -% 777b7dffdf87aaf6877fdffaf0 -% 6edeefbefb0effefc1eefaafb0 -% fdf7db6bbe87bbbd80fbaffb70 -% 57bd7efeeb8eeeef7fdefadef0 -% fdefd7d7be0ddddfffffefb7d0 -% 5b7afd7dec0fbbfa90057ffd70 -% 77dfafdb7bfdfe000000017fd0 -% eef5faf7dfdbc00000000007f0 -% bdbf5fbef57e00000000000070 -% 77ebf5ebbfe000000000000010 -% dd7ebf7eee8001c00000000010 -% 77d7ebd7b8000778e000000010 -% 6efd7efdf0000513a000000010 -% fdafd7afc000063ac1e0000010 -% 57fafdfb00600528e190000010 -% fd5faf5e00000638a190000010 -% 5bf5fbf4006f8028c113d97810 -% 776f5eb800248030e196594810 -% eefdf7f0006d8060a190c94010 -% bdd76d70006580c0e112ca7010 -% 77bddfe0002c80c0c1964c1810 -% ddf7baa000658180c1924cc810 -% 775df7e0006d8300e1b6ced810 -% 69aa5ec000248720a152845010 -% f900f7e0000006f9c000040010 -% 58026d60000007a8a0000c0010 -% f1b8ffe00000000000001c0010 -% 5fefd570000000000000000010 -% 7b5f7fd0000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 351.496063 translate -283.464567 -351.496063 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 124 8 -% Transformation matrix -[ 100 0 0 124 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee269dee0381d50381d50381d50381d5269dee0381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee0381d50381d50381d50381d5269dee269dee269dee269dee0381d5 -0381d5269dee0381d5269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee0381d50381d50381d5269dee269dee269dee269dee269dee0381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee0381d5269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee0381d50381d50381d5 -0381d50381d5269dee269dee269dee0381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee0381d50381d5269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a070a7df70a7df4d77b470a7df4d77b470a7df70a7df4d77b44d77b44d77b470a7df -4d77b44d77b44d77b44d77b470a7df4d77b41156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee0381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a070a7df70a7df70a7df70a7df4d77b48890b1a2b3d1a2b3d170a7df70a7dfa2b3d1 -8890b170a7df70a7df70a7df70a7df4d77b41156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee0381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee269dee269dee0381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee0381d50381d50381d50381d5269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d5269dee269dee269dee269dee269dee269dee -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee0381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d51156a01156a00381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d51156a01156a01156a00381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee0381d50381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d50381d50381d50381d50381d5269deeb63a5a4d77b40381d50381d5 -0381d50381d50381d50381d54d77b44d77b40381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d50381d50381d50381d5b63a5a505287505287b63a5a -b63a5ab63a5ab63a5ab63a5ab63a5ab63a5a5052875052870381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d50381d50381d5269deeb63a5a505287505287b63a5a -b63a5ab63a5ab63a5ab63a5ab63a5ab63a5a5052875052870381d50381d50381d50381d50381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d5269deeb63a5ab63a5ab63a5ab63a5a -b63a5aed0e19ed0e19b63a5ab63a5ab63a5a5052875052870381d51156a00381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d50381d5269dee0381d50381d50381d54d77b4 -4d77b44d77b44d77b40381d50381d54d77b40381d50381d50381d51156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d5b63a5ab63a5a4d77b44d77b44d77b44d77b4 -4d77b44d77b44d77b44d77b44d77b44d77b44d77b4505287505287505287505287505287505287 -505287505287505287505287505287505287505287505287505287505287505287505287505287 -505287505287505287505287505287505287505287505287000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a00381d51156a01156a01156a00381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d570a7dfb0cfed70a7df70a7df -269dee269deeb0cfed70a7df70a7dfb0cfed70a7df1156a04d77b470a7df70a7df70a7df70a7df -1156a04d77b44d77b470a7df70a7df4d77b470a7df4d77b44d77b470a7df70a7df1156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d570a7dfb0cfedb0cfedb0cfed -70a7df70a7dfb0cfedb0cfeda2b3d1b0cfedb0cfed4d77b470a7dfb0cfeda2b3d1b0cfeda2b3d1 -4d77b4b0cfeda2b3d1a2b3d1a2b3d1a2b3d1b0cfedb0cfedb0cfeda2b3d1b0cfed4d77b41156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a04d77b41156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d5269dee269dee269dee269dee269dee269dee0381d5269dee70a7df269dee0381d5 -269dee269dee269dee269dee269dee269dee4d77b44d77b40381d570a7dfb0cfed70a7df4d77b4 -70a7df4d77b470a7df70a7df5052871156a04d77b44d77b41156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee0381d5269dee269dee269dee269dee269dee269dee0381d570a7dfb0cfedb0cfed4d77b4 -b0cfedb0cfedb0cfeddfdde4b0cfedb0cfeddfdde4b0cfed0381d570a7dfdfdde4a2b3d1b0cfed -70a7dfb0cfeda2b3d1b0cfed4d77b44d77b4b0cfedb0cfed1156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee269dee0381d5 -0381d50381d5269dee0381d50381d50381d50381d50381d51156a01156a01156a00381d5269dee -1156a01156a04d77b44d77b44d77b41156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -70a7df0381d5269dee70a7df0381d50381d5269dee4d77b44d77b44d77b44d77b41156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d570a7dfdfdde4b0cfedb0cfed -b0cfed4d77b4b0cfedb0cfed4d77b470a7dffdfdfeb0cfedb0cfedb0cfedb0cfed4d77b41156a0 -0381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee70a7df70a7df269dee269dee -269dee269dee269dee269dee0381d50381d5269dee269dee70a7df70a7df269dee0381d51156a0 -0381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d54d77b4269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d5269dee0381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5505287b63a5a4d77b4 -4d77b44d77b44d77b45052875052874d77b40381d50381d50381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee4d77b4505287b63a5ab63a5a -b63a5ab63a5ab63a5ab63a5ab63a5ab63a5a5052874d77b40381d50381d50381d51156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee4d77b4505287b63a5ab63a5a -b63a5ab63a5ab63a5aed0e19b63a5ab63a5a5052871156a00381d50381d51156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee4d77b4505287b63a5ab63a5a -ed0e19b63a5ab63a5ab63a5ab63a5ab63a5a4d77b41156a00381d50381d51156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d5269dee0381d5269dee505287 -505287b63a5a505287269dee4d77b45052874d77b41156a00381d50381d51156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d5269deeb63a5ab63a5a0381d54d77b44d77b44d77b4 -5052875052874d77b40381d55052875052875052875052871156a0505287505287505287505287 -505287505287505287505287505287505287505287505287505287505287505287505287505287 -505287505287505287505287505287505287505287505287000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee0381d50381d54d77b44d77b40381d50381d50381d50381d5 -0381d50381d50381d51156a01156a04d77b41156a01156a01156a01156a01156a01156a01156a0 -1156a01156a05052871156a01156a01156a01156a01156a01156a00829701156a01156a01156a0 -1156a01156a0505287505287505287505287505287505287000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d5269dee0381d5269dee269dee269dee0381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a00381d50381d51156a01156a0 -0381d51156a01156a01156a01156a01156a01156a01156a00381d51156a00829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d50381d50381d5269dee0381d50381d5269deeb0cfedb0cfed70a7df -70a7dfa2b3d14d77b4b0cfed70a7df70a7dfa2b3d170a7dfa2b3d1a2b3d1b0cfeda2b3d1a2b3d1 -b0cfeda2b3d1b0cfed70a7df4d77b4a2b3d1a2b3d1505287b0cfedb0cfeda2b3d170a7df1156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee0381d5269dee269dee269dee0381d50381d570a7dfb0cfed70a7df70a7df -b0cfed70a7df1156a070a7df70a7df70a7df70a7df70a7dfa2b3d170a7df70a7dfa2b3d170a7df -a2b3d1b0cfedb0cfed4d77b44d77b470a7df70a7df1156a070a7df70a7dfa2b3d170a7df1156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee0381d50381d50381d5269dee0381d50381d50381d5 -0381d50381d50381d50381d51156a01156a01156a00381d51156a01156a01156a01156a01156a0 -1156a04d77b41156a01156a01156a01156a01156a01156a01156a00829700829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee0381d5269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d5269dee269dee0381d50381d50381d50381d5269dee70a7df70a7df70a7df -b0cfed269dee70a7df70a7df70a7df70a7df70a7dfb0cfedb0cfed4d77b41156a01156a00381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d5269dee0381d50381d5269dee0381d50381d5269deeb0cfedb0cfedb0cfed -b0cfed4d77b4b0cfedb0cfeda2b3d1b0cfed70a7dfa2b3d1b0cfed4d77b41156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d5269dee0381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a00381d50381d51156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d5269dee269dee0381d5269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a00381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d5269dee0381d50381d5269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5 -0381d50381d5269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a00381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000010381d51156a01156a00381d50381d51156a00381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee0381d50381d5 -269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d5269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a00381d51156a00381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5269dee -269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a00381d51156a00381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d5269dee269dee269dee269dee269dee269dee -4d77b44d77b48890b18890b18890b18890b18890b14d77b44d77b4269dee269dee269dee269dee -269dee269dee269dee269dee269dee269dee269dee0381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d50381d50381d50381d50381d51156a00381d5 -0381d50381d50381d50381d50381d50381d54d77b44d77b4b63a5ab63a5aed0e19ed0e19ed0e19 -ed0e19ed0e19b63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5ab63a5a505287 -4d77b4269dee0381d5269dee269dee0381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a00381d51156a01156a00381d50381d50381d50381d50381d51156a00381d5 -0381d50381d50381d54d77b4b63a5aed0e19ed0e19ed0e19b63a5ab63a5a1156a01156a01156a0 -0381d50381d50381d50381d50381d50381d50381d5269dee0381d50381d50381d51156a0505287 -505287b63a5ab63a5a4d77b44d77b40381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a00381d50381d50381d50381d50381d5 -4d77b4b63a5ab63a5aed0e19ed0e19b63a5a0829701156a00381d50381d50381d5269dee269dee -269dee0381d50381d50381d50381d5269dee0381d50381d50381d50381d5269dee0381d5269dee -269dee0381d50381d55052874d77b44d77b40381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a00381d51156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d50381d50381d50381d50381d54d77b4b63a5a -ed0e19ed0e19ed0e190829701156a00381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee70a7df0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d5269dee0381d5269dee0381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d51156a01156a00381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d51156a01156a01156a04d77b4ed0e19b63a5a -b63a5a0829701156a00381d50381d50381d50381d50381d570a7dfb0cfedb0cfed4d77b40381d5 -1156a0b0cfedb0cfed1156a070a7df70a7df0381d5269deeb0cfed0381d50381d5b0cfedb0cfed -70a7df0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a00381d50381d5 -0381d51156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a0b63a5ab63a5aed0e19505287 -1156a00381d50381d50381d50381d50381d50381d50381d5dfdde4dfdde4b0cfed4d77b41156a0 -a2b3d1fdfdfe70a7df1156a0fdfdfedfdde41156a0b0cfedfdfdfe0381d5b0cfedfdfdfedfdde4 -8890b10381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a00381d5 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d5505287b63a5aed0e19ed0e190829701156a0 -0381d50381d50381d50381d50381d50381d51156a070a7dffdfdfedfdde41156a008297070a7df -fdfdfefdfdfe70a7df4d77b4fdfdfefdfdfea2b3d1fdfdfefdfdfe4d77b4dfdde4fdfdfe70a7df -1156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a00381d5b63a5aed0e19b63a5a0829700381d50381d5 -0381d50381d50381d50381d50381d50381d51156a00381d570a7dffdfdfedfdde44d77b4dfdde4 -fdfdfefdfdfea2b3d1a2b3d1fdfdfedfdde4fdfdfedfdde4dfdde41156a04d77b4dfdde4fdfdfe -8890b10381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a0505287b63a5aed0e190829701156a01156a01156a0 -0381d51156a01156a00381d50381d51156a01156a070a7df4d77b4b0cfedfdfdfefdfdfefdfdfe -505287dfdde4dfdde4fdfdfea2b3d1a2b3d1dfdde48890b1fdfdfe8890b18890b170a7dffdfdfe -8890b11156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287b63a5ab63a5aed0e191156a00381d51156a01156a0 -0381d50381d51156a00381d50381d50381d51156a0a2b3d1dfdde4dfdde4a2b3d1b0cfed4d77b4 -1156a0a2b3d1a2b3d1a2b3d15052878890b14d77b44d77b4a2b3d18890b1dfdde4dfdde48890b1 -5052871156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d50381d50381d50381d51156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052870829701156a01156a01156a01156a0 -1156a01156a01156a01156a01156a00381d50381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d5 -0381d51156a00381d51156a01156a00381d51156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052870829701156a01156a01156a01156a0 -1156a04d77b44d77b44d77b40381d51156a01156a00381d50381d51156a00381d51156a00381d5 -0381d50381d50381d50381d5269dee0381d50381d50381d50381d5269dee0381d50381d50381d5 -0381d50381d50381d50381d50381d50381d50381d50381d50381d50381d50381d51156a00381d5 -1156a00381d51156a01156a01156a01156a0269dee1156a01156a070a7df4d77b41156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052871156a01156a01156a01156a01156a0 -0381d5dfdde4fdfdfedfdde45052871156a01156a01156a01156a01156a01156a01156a00381d5 -1156a01156a01156a070a7dfdfdde44d77b41156a00381d50381d5fdfdfea2b3d18890b1b0cfed -1156a01156a01156a01156a00381d51156a00381d51156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a04d77b4dfdde48890b1dfdde4dfdde45052871156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052871156a01156a01156a01156a01156a0 -1156a08890b1fdfdfe4d77b4082970269dee269dee4d77b41156a0269dee70a7df4d77b41156a0 -269dee70a7df0381d570a7dffdfdfe4d77b44d77b40381d51156a0dfdde4b0cfeda2b3d170a7df -1156a0269dee269dee0381d50381d50381d50381d50381d54d77b44d77b4269dee4d77b470a7df -269dee1156a04d77b470a7df4d77b44d77b4fdfdfe8890b1fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287ed0e195052875052871156a01156a01156a01156a0 -1156a08890b1fdfdfe5052878890b1fdfdfedfdde4fdfdfe8890b1dfdde4a2b3d1dfdde4b0cfed -fdfdfedfdde4fdfdfe8890b1dfdde4dfdde4fdfdfe4d77b41156a08890b1fdfdfeb0cfed505287 -dfdde4dfdde4fdfdfeb0cfedfdfdfea2b3d1dfdde4a2b3d1fdfdfedfdde4b0cfedfdfdfea2b3d1 -fdfdfe8890b1fdfdfedfdde4fdfdfea2b3d1dfdde48890b1fdfdfeb0cfed1156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a0505287b63a5ab63a5ab63a5a1156a01156a01156a01156a0 -1156a08890b1fdfdfe4d77b48890b1dfdde4a2b3d1fdfdfe5052878890b18890b1b0cfeda2b3d1 -fdfdfe5052878890b18890b1b0cfeda2b3d1fdfdfe1156a01156a04d77b4fdfdfea2b3d1505287 -dfdde48890b1fdfdfedfdde4dfdde48890b1dfdde4a2b3d1fdfdfe8890b1505287fdfdfe505287 -8890b1505287fdfdfea2b3d1dfdde4a2b3d1dfdde44d77b4fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a0b63a5aed0e191156a01156a01156a01156a0 -1156a08890b1fdfdfe1156a08890b1fdfdfea2b3d18890b14d77b4b0cfeddfdde4a2b3d1a2b3d1 -fdfdfe0829701156a070a7dfb0cfeda2b3d1fdfdfe1156a01156a01156a0fdfdfe8890b1082970 -dfdde48890b1fdfdfeb0cfeddfdde48890b1dfdde4a2b3d1fdfdfea2b3d10829708890b1fdfdfe -a2b3d1505287fdfdfea2b3d18890b14d77b4dfdde48890b1fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a0b63a5aed0e195052875052871156a01156a0 -1156a08890b1fdfdfe5052878890b1dfdde48890b1a2b3d1dfdde4dfdde44d77b4b0cfeda2b3d1 -dfdde48890b1b0cfeda2b3d1b0cfeda2b3d1fdfdfe1156a01156a01156a0fdfdfe8890b1082970 -dfdde48890b1dfdde4b0cfeddfdde48890b1b0cfeda2b3d1fdfdfea2b3d1505287b0cfed4d77b4 -fdfdfe8890b1fdfdfe8890b18890b18890b1dfdde44d77b4fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a0505287ed0e19b63a5a1156a01156a0 -1156a08890b1fdfdfe5052878890b1fdfdfedfdde4fdfdfe8890b1dfdde4dfdde4b0cfeda2b3d1 -fdfdfefdfdfedfdde48890b1b0cfeda2b3d1fdfdfe1156a01156a01156a0fdfdfea2b3d1082970 -dfdde4dfdde4fdfdfea2b3d1b0cfeddfdde4dfdde4a2b3d1fdfdfea2b3d1505287fdfdfea2b3d1 -dfdde4505287fdfdfedfdde4fdfdfea2b3d1dfdde48890b1fdfdfea2b3d10829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a0505287505287b63a5a505287 -1156a01156a01156a00829700829704d77b44d77b45052870829704d77b45052875052871156a0 -4d77b44d77b41156a01156a04d77b41156a04d77b41156a01156a01156a04d77b4505287082970 -1156a04d77b44d77b40829705052874d77b45052875052874d77b41156a01156a04d77b44d77b4 -5052870829704d77b44d77b45052870829705052870829705052870829701156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0b63a5ab63a5a -5052871156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0505287 -b63a5a5052875052871156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a05052875052875052875052871156a01156a01156a01156a01156a01156a01156a0082970 -1156a01156a01156a01156a01156a01156a00829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a00829700829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a00829701156a01156a01156a0 -1156a01156a01156a00829700829701156a01156a01156a00829700829701156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a070a7dfb0cfedb0cfedb0cfed -b0cfedb0cfed4d77b40829701156a0b0cfedb0cfedb0cfedb0cfedb0cfed70a7df1156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a08890b1b0cfeddfdde4 -dfdde4dfdde4dfdde4dfdde4dfdde4b0cfed5052870829701156a070a7dfb0cfeddfdde4dfdde4 -dfdde4dfdde4dfdde4b0cfed70a7df1156a0082970a2b3d1b0cfedb0cfedb0cfed4d77b41156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfefdfdfefdfdfe -fdfdfefdfdfe8890b10829704d77b4fdfdfefdfdfefdfdfefdfdfefdfdfeb0cfed0829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a00829704d77b4fdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe5052870829704d77b4fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfe505287082970b0cfedfdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfefdfdfefdfdfe -fdfdfefdfdfea2b3d10000014d77b4fdfdfefdfdfefdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a00829704d77b4fdfdfefdfdfefdfdfe -8890b1000001505287fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe8890b1 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfefdfdfefdfdfe -fdfdfefdfdfeb0cfed0000018890b1fdfdfeb0cfedfdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a04d77b4fdfdfefdfdfefdfdfe -8890b1082970505287fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfedfdde4dfdde4 -fdfdfefdfdfedfdde40000018890b1fdfdfea2b3d1dfdde4fdfdfefdfdfea2b3d10829701156a0 -1156a01156a01156a01156a01156a01156a01156a01156a00829704d77b4fdfdfefdfdfefdfdfe -8890b10829704d77b4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfeb0cfeddfdde4 -fdfdfefdfdfedfdde4082970a2b3d1fdfdfe8890b1dfdde4fdfdfefdfdfea2b3d10829708890b1 -a2b3d1a2b3d1a2b3d11156a01156a01156a0a2b3d1b0cfed1156a04d77b4fdfdfefdfdfefdfdfe -8890b1082970505287fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfea2b3d1a2b3d1 -fdfdfefdfdfedfdde4082970dfdde4fdfdfe8890b1dfdde4fdfdfefdfdfea2b3d1000001a2b3d1 -fdfdfefdfdfefdfdfe5052870829701156a0dfdde4fdfdfe0829704d77b4fdfdfefdfdfefdfdfe -8890b10000014d77b4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1a2b3d1 -fdfdfefdfdfedfdde4505287fdfdfedfdde44d77b4dfdde4fdfdfefdfdfea2b3d10829704d77b4 -fdfdfefdfdfefdfdfe8890b10829701156a0dfdde4fdfdfe0000018890b1fdfdfefdfdfefdfdfe -dfdde40829701156a050528750528750528708297008297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b18890b1 -fdfdfefdfdfedfdde48890b1fdfdfea2b3d1505287dfdde4fdfdfefdfdfea2b3d1082970505287 -dfdde4fdfdfefdfdfea2b3d10000014d77b4dfdde4a2b3d10829704d77b4fdfdfefdfdfefdfdfe -fdfdfedfdde48890b11156a00829700829701156a01156a070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b18890b1 -fdfdfefdfdfefdfdfedfdde4fdfdfe8890b1505287fdfdfefdfdfefdfdfea2b3d1082970082970 -dfdde4fdfdfefdfdfea2b3d10000014d77b4fdfdfe8890b10829701156a0a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfedfdde44d77b408297008297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b18890b1 -fdfdfefdfdfefdfdfefdfdfefdfdfe4d77b4505287fdfdfefdfdfefdfdfea2b3d1082970082970 -b0cfedfdfdfefdfdfedfdde400000170a7dffdfdfe5052870829701156a00829704d77b4a2b3d1 -dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1505287 -fdfdfefdfdfefdfdfefdfdfefdfdfe505287505287fdfdfefdfdfefdfdfea2b3d1082970082970 -70a7dffdfdfefdfdfedfdde40829708890b1fdfdfe0829701156a01156a01156a0082970082970 -0829708890b1fdfdfefdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1505287 -fdfdfefdfdfefdfdfefdfdfefdfdfe505287505287fdfdfefdfdfefdfdfea2b3d1082970082970 -4d77b4fdfdfefdfdfefdfdfe5052878890b1fdfdfe0829701156a04d77b4b0cfedb0cfedb0cfed -082970082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -dfdde4fdfdfefdfdfefdfdfefdfdfe505287505287fdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a0fdfdfefdfdfefdfdfe8890b1a2b3d1dfdde40829700829704d77b4fdfdfefdfdfefdfdfe -1156a00829708890b1fdfdfefdfdfefdfdfe4d77b40829704d77b4fdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -dfdde4fdfdfefdfdfefdfdfedfdde40829704d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -082970fdfdfefdfdfefdfdfedfdde4fdfdfe8890b10829701156a04d77b4fdfdfefdfdfefdfdfe -0829700829708890b1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -b0cfedfdfdfefdfdfefdfdfedfdde40000014d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -082970dfdde4fdfdfefdfdfefdfdfefdfdfe4d77b40829701156a04d77b4fdfdfefdfdfefdfdfe -0829700829708890b1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1082970 -b0cfedfdfdfefdfdfefdfdfea2b3d10000014d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a0a2b3d1fdfdfefdfdfefdfdfefdfdfe5052870829701156a04d77b4fdfdfefdfdfefdfdfe -0829700829708890b1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe4d77b4 -082970a2b3d1fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfe505287082970 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a008297070a7dffdfdfe8890b1000001 -b0cfedfdfdfefdfdfefdfdfea2b3d10000014d77b4fdfdfefdfdfefdfdfea2b3d10829701156a0 -1156a04d77b4fdfdfefdfdfefdfdfefdfdfe5052870829700829704d77b4fdfdfefdfdfefdfdfe -8890b14d77b4dfdde4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfea2b3d1 -4d77b4dfdde4fdfdfefdfdfefdfdfe50528708297070a7dffdfdfefdfdfefdfdfea2b3d18890b1 -a2b3d170a7df1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0082970a2b3d1fdfdfea2b3d1082970 -a2b3d1fdfdfefdfdfefdfdfea2b3d100000170a7dffdfdfefdfdfefdfdfeb0cfed0829701156a0 -1156a0505287fdfdfefdfdfefdfdfefdfdfe0829700829701156a04d77b4fdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfedfdde40829700829701156a0fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfedfdde4082970082970b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfedfdde40829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a04d77b44d77b4505287082970 -5052874d77b45052875052875052870829704d77b44d77b44d77b44d77b45052870829701156a0 -1156a0082970fdfdfefdfdfefdfdfea2b3d10829701156a01156a05052874d77b48890b18890b1 -8890b18890b18890b18890b15052870829700829701156a01156a05052874d77b48890b18890b1 -a2b3d1fdfdfefdfdfefdfdfe5052870000010829704d77b44d77b4505287505287505287505287 -5052875052870829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a00829700829701156a0 -1156a00829700829700829700829701156a01156a00829700829700829700829705052871156a0 -1156a01156a0fdfdfefdfdfefdfdfe8890b10829701156a01156a01156a01156a0082970082970 -0829700829700829700829700829700829701156a01156a01156a01156a01156a0082970082970 -1156a0fdfdfefdfdfefdfdfedfdde48890b14d77b41156a00829700829701156a0082970082970 -0829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a0505287fdfdfefdfdfefdfdfe8890b10829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a0a2b3d1dfdde4dfdde4dfdde4dfdde470a7df0829701156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970505287fdfdfefdfdfefdfdfe5052870829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829700829700829700829700829700829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -4d77b4dfdde4fdfdfefdfdfefdfdfe5052870829701156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a0082970082970082970082970 -082970082970082970082970082970082970082970082970082970082970082970082970082970 -0829700829700829700829700829701156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0082970b0cfed -fdfdfefdfdfefdfdfefdfdfe8890b10829701156a01156a01156a01156a01156a01156a01156a0 -1156a01156a00829700829700829700829700829700829700829701156a05052875052874d77b4 -4d77b48890b18890b18890b18890b18890b18890b18890b18890b18890b18890b18890b14d77b4 -4d77b45052875052871156a00829700829700829700829700829700829700829701156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a04d77b4 -5052875052875052875052870829700829701156a01156a01156a01156a01156a0082970082970 -0829700829701156a04d77b48890b1a2b3d1a2b3d1b0cfedb0cfeddfdde4dfdde4fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfedfdde4dfdde4dfdde4b0cfeda2b3d1a2b3d18890b14d77b4505287082970082970 -0829700829700829701156a01156a01156a01156a01156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -0829700829700829701156a01156a01156a01156a00829700829700829700829704d77b4a2b3d1 -dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfedfdde4dfdde4dfdde4 -a2b3d18890b15052870829700829700829700829701156a0000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a00829700829700829700829704d77b4a2b3d1dfdde4fdfdfefdfdfefdfdfe -fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfeb0cfed8890b11156a0082970000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -0829700829700829705052874d77b4b0cfedfdfdfefdfdfefdfdfedfdde4dfdde4dfdde4fdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfedfdde4000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0082970082970 -1156a04d77b4a2b3d1fdfdfefdfdfefdfdfedfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfe -fdfdfee7949ce7949ce7949cb63a5ab63a5ae7949ce7949cdfdde4fdfdfefdfdfefdfdfedfdde4 -e7949cdfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a00829700829705052878890b1 -dfdde4fdfdfedfdde4dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeed0e19ed0e19ed0e19b63a5aed0e19ed0e19ed0e19b63a5afdfdfefdfdfedfdde4ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a0082970082970a2b3d1dfdde4fdfdfe -dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19b63a5afdfdfedfdde4b63a5aed0e19ed0e19dfdde4b63a5aed0e19ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a00829700829708890b1dfdde4fdfdfedfdde4dfdde4 -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19e7949cfdfdfefdfdfeb63a5aed0e19b63a5adfdde4ed0e19ed0e19ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe4d77b41156a05052871156a04d77b4dfdde4fdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a0082970505287dfdde4fdfdfedfdde4dfdde4dfdde4fdfdfe -fdfdfefdfdfe505287082970a2b3d1fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19b63a5afdfdfefdfdfeb63a5aed0e19ed0e19fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe082970082970a2b3d14d77b4082970a2b3d1fdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a00829700829708890b1fdfdfefdfdfedfdde4dfdde4fdfdfefdfdfefdfdfe -fdfdfefdfdfedfdde4a2b3d1fdfdfefdfdfedfdde4dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfe -fdfdfeb63a5aed0e19e7949cfdfdfedfdde4b63a5aed0e19ed0e19fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970a2b3d1fdfdfe -dfdde4b0cfeddfdde4fdfdfefdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfedfdde4dfdde4 -dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a00829708890b1fdfdfedfdde4dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe8890b11156a0dfdde48890b10829704d77b41156a01156a0dfdde4fdfdfefdfdfe -fdfdfedfdde4e7949cdfdde4fdfdfedfdde4ed0e19ed0e19ed0e19fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfedb0cfed -1156a01156a01156a0505287dfdde44d77b4505287fdfdfea2b3d170a7dfb0cfed1156a0505287 -1156a01156a0b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a00829708890b1fdfdfedfdde4a2b3d1fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1000001b0cfed4d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfee7949ced0e19ed0e19b63a5afdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfeda2b3d1 -082970fdfdfe70a7df000001dfdde44d77b4082970fdfdfea2b3d18890b14d77b4082970fdfdfe -b0cfed082970a2b3d1fdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a0082970505287fdfdfedfdde4b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfedfdde4ed0e19ed0e19b63a5adfdde4fdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a0082970fdfdfea2b3d1082970b0cfeddfdde4 -dfdde4fdfdfe4d77b4082970dfdde470a7df082970dfdde4a2b3d18890b170a7df082970dfdde4 -fdfdfea2b3d1dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970082970dfdde4fdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfedfdde4b63a5aed0e19ed0e19dfdde4fdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfedfdfdfe -4d77b44d77b41156a0082970dfdde4b0cfed08297070a7dfa2b3d1a2b3d1a2b3d1082970082970 -4d77b4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -08297070a7dffdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfee7949ced0e19ed0e19e7949cfdfdfefdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfed8890b1 -082970b0cfed70a7df082970b0cfedfdfdfe0829704d77b470a7dfb0cfedfdfdfedfdde4a2b3d1 -082970082970b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970dfdde4fdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe4d77b4082970b0cfed8890b1082970dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfefdfdfee7949ced0e19ed0e19e7949cfdfdfefdfdfefdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe1156a01156a0fdfdfea2b3d1082970b0cfed8890b1 -082970fdfdfea2b3d1082970b0cfedfdfdfe5052870829704d77b4fdfdfe8890b11156a0fdfdfe -a2b3d108297070a7dffdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a04d77b41156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0082970 -505287dfdde4fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe505287082970b0cfed4d77b4000001dfdde44d77b4082970a2b3d1fdfdfefdfdfe -fdfdfee7949ced0e19ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe082970082970b0cfed4d77b4082970b0cfed8890b1 -082970b0cfed4d77b4000001b0cfedfdfdfe5052870829704d77b4fdfdfe4d77b4082970b0cfed -8890b108297070a7dffdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a070a7dfa2b3d11156a04d77b4b0cfed1156a08890b14d77b4 -70a7df4d77b4a2b3d14d77b41156a01156a01156a01156a01156a01156a01156a01156a0082970 -505287fdfdfefdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfe8890b1505287b0cfeda2b3d1505287dfdde470a7df505287dfdde4fdfdfefdfdfe -dfdde4ed0e19ed0e19ed0e19e7949ce7949ce7949ce7949ce7949cdfdde4fdfdfea2b3d1ed0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfe4d77b45052874d77b45052874d77b4dfdde4b0cfed -5052874d77b48890b1505287b0cfedfdfdfea2b3d10829708890b1fdfdfea2b3d15052874d77b4 -1156a0505287b0cfedfdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a0dfdde4dfdde41156a0dfdde4fdfdfe8890b1fdfdfedfdde4 -b0cfedb0cfedfdfdfe4d77b40829701156a01156a01156a01156a01156a01156a01156a0082970 -505287dfdde4fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -e7949ced0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19e7949cfdfdfee7949ced0e19 -ed0e19b63a5afdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfea2b3d108297070a7dffdfdfefdfdfedfdde4dfdde4 -dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a0b0cfedfdfdfedfdde4b0cfedfdfdfedfdde4dfdde4fdfdfe -b0cfeda2b3d1fdfdfe70a7df0829701156a01156a01156a01156a01156a01156a01156a01156a0 -082970dfdde4fdfdfedfdde4fdfdfefdfdfefdfdfefdfdfefdfdfe8890b1a2b3d1fdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -e7949ced0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19ed0e19e7949cfdfdfee7949ced0e19 -ed0e19b63a5adfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe4d77b408297070a7dffdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfedfdde4fdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a0b0cfeda2b3d170a7df1156a070a7df70a7df1156a04d77b4 -269dee70a7dfa2b3d11156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -082970a2b3d1fdfdfefdfdfedfdde4fdfdfefdfdfefdfdfefdfdfedfdde4fdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfedfdde4dfdde4dfdde4dfdde4dfdde4dfdde4dfdde4dfdde4fdfdfefdfdfefdfdfedfdde4 -dfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfe4d77b40829701156a0dfdde4fdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829701156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -0829701156a0fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfedfdde4dfdde4fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -0000011156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a01156a0 -1156a00829708890b1fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe -fdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfefdfdfe000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001000001000001000001000001 -000001000001000001000001000001000001000001000001000001 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/in_21.gif b/Docs/Books/in_21.gif Binary files differdeleted file mode 100644 index cffd7789395..00000000000 --- a/Docs/Books/in_21.gif +++ /dev/null diff --git a/Docs/Books/in_21.txt b/Docs/Books/in_21.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/in_21.txt +++ /dev/null diff --git a/Docs/Books/manual.eps b/Docs/Books/manual.eps deleted file mode 100644 index 8bb88345060..00000000000 --- a/Docs/Books/manual.eps +++ /dev/null @@ -1,1221 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/manual.eps -%%CreationDate: Sun Dec 31 14:30:17 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 294 383 -%%EndComments -%%BeginPreview: 100 132 1 132 -% fffffffffffffffffffffffff0 -% 800000000000000000ff7c0010 -% 8000000000000000007fde0010 -% 8000000000000000003fef0010 -% 8000000000000000000ff7c010 -% 80000000000000000007bbe010 -% 80000000000000000001cef810 -% 80000000000000000000fb3c10 -% 800000000020000100007ffe10 -% 80000025130509400a603fef90 -% 800000000000000000000f7bd0 -% 8000000000000000000007fdf0 -% 8000aaaaaaaaaa55550543def0 -% 800100002410009012549cf770 -% 800024200041000100000079b0 -% 8001014a948855244924921ef0 -% 80002800201200011000040f70 -% 800102524540955422aaa007b0 -% 80002400800a52aa84000401f0 -% 8001089414954a4951492200f0 -% 80002101205250025510040070 -% 80010424454a82a894a2a00010 -% 80002088895410012544040010 -% 80010a11152924921490900010 -% 8000204224a201004aa2040010 -% 800109085554522a0484500010 -% 8000204149208040a2a0840010 -% 80010514aaa214890924100010 -% 800020229244410022a1240010 -% 80010a44aa88882a4488440010 -% 8000200a949112408822000010 -% 800104a4a50220091144940010 -% 8000210a94a404a02008040010 -% 80010824aa08a1050521240010 -% 8000224a929008204804440010 -% 80010415542292491150840010 -% 800120924a8400822202100010 -% 8001092aa910a4104048440010 -% 800110124a2209248a02040010 -% 800102aaa904400100a8a40010 -% 800124124a4892a82901040010 -% 800108aaa88100024024240010 -% 80011109251225240a40840010 -% 8001202aaa204000a08a100010 -% 8001051249050a540410440010 -% 8001104aaa4820012122040010 -% 80010214921109484840a40010 -% 8001288aaa824002020a000010 -% 80000129242415289090440010 -% 80012405558880010422140010 -% 80000894921024a42104800010 -% 80012102aaa288008848240010 -% 8000042a4940112a1211040010 -% 80012082aa4a42004082440010 -% 80010a11254008520924140010 -% 80012044a9294100a240840010 -% 800104889550142404a9240010 -% 80011011249240892120040010 -% 80012282155409104a85440010 -% 800104244924a02204a0100010 -% 80002088055505049549240010 -% 800109115124a0482902040010 -% 80002220045554814a90440010 -% 800104452089252aa924940010 -% 800020800912aaa52401040010 -% 80010914a22001284148240010 -% 80012200044488020812440010 -% 80010452908022a4a240040010 -% 80011080021550000409540010 -% 8001220820414a2120a2040010 -% 80010442890a54840000440010 -% 800129fffffffffbfffc940010 -% 800101fffffffffffffc000010 -% 800101fffffffffffffc040010 -% 8000bfffffff9ffffffdf80010 -% 800001ffffff9ffffffc000010 -% 800001ffffffdffffff8000010 -% 800001ffffff4ffffffc000010 -% 800001ffffff4ffffff8000010 -% 800001ffffff67fffffc000010 -% 800001ffffff7ffffff8000010 -% 800001fffffffffffffc000010 -% 80000186109470bdc41c000010 -% 800003d2f3bc979dbafc000010 -% 80000b927b9db7cf3efd000010 -% 800013d65296b0a57ebc400010 -% 80000bc6fbbc77b33ef9400010 -% 80000396f3bdb7f93efd000010 -% 800001da539492b99adc000010 -% 800001fbbfeffdffe6b8000010 -% 800001ffffffffdffffc000010 -% 800001ff7bbb933b9ff8000010 -% 800001fe73b9d7bbbffc000010 -% 800001fe739cf7bbbff8000010 -% 800001ff335a5739bffc000010 -% 800001fe9b1b37b5bff8000010 -% 800001fedacbb32cbffc000010 -% 800001fedaebb92c93f8000010 -% 800001fffffffdfffffc000010 -% 800001fffffffffffff8000010 -% 80000000000aab000248000010 -% 80000000000124000000000010 -% 80000000000090000000000010 -% 80000000000040000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000040000000000001000010 -% 80004200000002004240000010 -% 80000022110410240004400010 -% 80000000400000000800000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000010000004000000010 -% 80000000200202000020000010 -% 80000109000000004040000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 8002aaaaaaaaaaaaaa90000010 -% 80000000000000000825540010 -% 80000000000000000000000010 -% 80000000004020000000000010 -% 80000000020100100000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -279.169649 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 132 8 -% Transformation matrix -[ 100 0 0 132 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102 -010102c6c8cdffffffececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefececefececefececefececefececefececefececefececef -ececefececefececefececefececefffffffc6c8cd010102010102010102010102010102010102 -0101021c2026969aa13b424a0101020101020101023b424ae2effaffffffffffffececefececef -ececefececefececefececefececefececefececefececef010102 -010102ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffe2effa1c2026010102010102010102010102 -0101020101021c2026777f88777f881c20260101020101021c2026ececefffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff5d636c010102010102010102 -0101025d636c1c20260101025d636c969aa13b424a010102010102010102969aa1ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffadb4bc010102010102 -0101023b424a3b424a0101020101023b424ac6c8cd5d636c0101020101020101023b424affffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effa1c2026 -010102010102010102777f88777f88010102010102969aa15d636c010102010102010102010102 -c6c8cdffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -777f880101020101021c2026777f8867a3d11c20261c20265d636c5d636c777f88010102010102 -010102777f88ffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffadb4bc0101020101020101023b424a5d636c5d636c0101021c2026adb4bc969aa11c2026 -0101020101023b424affffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -969aa1c6c8cdffffffc6c8cdadb4bcadb4bcececefececefc6c8cdc6c8cdececefffffff969aa1 -adb4bcffffffd7dde5777f88d7dde5ffffffc6c8cdc6c8cdc6c8cdffffffffffffffffffececef -969aa1ececefffffffadb4bcadb4bcd7dde5ffffffc6c8cdd7dde5ffffff9ec8e8969aa1ffffff -ececefc6c8cdffffffd7dde5c6c8cdc6c8cdffffffececefc6c8cdd7dde5ffffffffffffffffff -ffffffffffffececef1c20260101020101021c20265d636c1c20260101020101025d636c5d636c -3b424a010102010102010102c6c8cdffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -777f88c6c8cdffffff969aa1c6c8cdadb4bcc6c8cdffffffadb4bc969aa1d7dde5ffffff5d636c -777f88ffffffffffff777f88ffffffffffff969aa1777f88adb4bcffffffffffffffffffd7dde5 -777f88ececefffffff969aa1c6c8cd777f88ffffffc6c8cdc6c8cdffffffc6c8cdadb4bcffffff -d7dde5adb4bcffffff777f88c6c8cd969aa1ececefececef5d636c777f88ffffffffffffffffff -ffffffffffffffffffffffff777f880101020101020101023b424a3b424a0101020101023b424a -5d636c1c20261c2026010102010102777f88ffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d7dde5ffffffffffffffffffd7dde5d7dde5ffffffffffffc6c8cdadb4bcffffffffffffc6c8cd -c6c8cdffffffffffffc6c8cdffffffffffffececefececefececefffffffffffffffffffffffff -c6c8cdececefffffffc6c8cdc6c8cdd7dde5ffffffd7dde5ececefffffffd7dde5d7dde5ffffff -ececefd7dde5ffffffd7dde5c6c8cdc6c8cdffffffffffffd7dde5adb4bcececefffffffffffff -ffffffffffffffffffffffffffffffc6c8cd0101020101020101020101025d636c3b424a010102 -0101023b424a777f880101020101020101023b424affffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff3b424a0101020101020101023b424a5d636c -0101020101025d636c777f88010102010102010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffadb4bc3b424a777f88777f88969aa1777f88969aa1777f88969aa1969aa1777f88 -969aa1969aa1969aa1969aa1969aa1969aa1969aa1777f88777f88777f88777f88777f88777f88 -777f88777f88777f88777f88777f88777f88777f88777f88777f88969aa1969aa1969aa1969aa1 -969aa1969aa1969aa1adb4bcadb4bc969aa1777f88969aa1969aa1777f88969aa1969aa1969aa1 -969aa1969aa1777f88969aa1969aa1969aa1969aa1adb4bcadb4bcadb4bcadb4bcadb4bc969aa1 -969aa1969aa1969aa1969aa1969aa1969aa1adb4bcc6c8cd5d636c010102010102010102777f88 -777f881c20260101025d636cadb4bc5d636c010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88969aa1d7dde5adb4bcc6c8cdadb4bcc6c8cdadb4bcc6c8cdadb4bcc6c8cd -c6c8cdadb4bcc6c8cdadb4bcc6c8cdadb4bcc6c8cd9ec8e8969aa1969aa1adb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bc -c6c8cdadb4bcc6c8cdc6c8cdadb4bcadb4bcadb4bc969aa1adb4bcadb4bcadb4bcadb4bcadb4bc -adb4bcadb4bc969aa1969aa1969aa1969aa1adb4bc969aa1969aa1adb4bc969aa1adb4bc969aa1 -969aa1969aa1969aa1969aa1969aa1969aa1969aa15d636cd7dde5d7dde5010102010102010102 -5d636cadb4bc3b424a0101021c2026969aa15d636c010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5e2effa9ec8e89ec8e8b6daf59ec8e8b6daf59ec8e8b6daf5b6daf5 -9ec8e89ec8e8b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5d7dde5b6daf5d7dde5b6daf5ffffff969aa1adb4bcffffffffffff3b424a010102 -0101021c2026969aa1969aa11c2026010102777f88777f88010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf584b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd9ec8e8 -9ec8e89ec8e89ec8e884b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1adb4bcffffffffffffffffff777f88 -0101020101020101025d636c969aa13b424a0101025d636c010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1969aa1ffffffffffffffffffffffff -c6c8cd0101020101020101023b424aadb4bc5d636c010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1adb4bcffffffffffffffffffffffff -ffffffffffff3b424a010102010102010102777f883b424a010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd84b7dd67a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88adb4bcffffffffffffffffffffffff -ffffffffffffffffff777f88010102010102010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd84b7dd84b7dd9ec8e884b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1969aa1ffffffffffffffffffffffff -ffffffffffffffffffffffffc6c8cd010102010102010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd67a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1adb4bcffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff3b424a010102010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff777f88010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cc6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88c6c8cdb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf5 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde5b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88c6c8cdffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff969aa1d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa969aa1d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececefb6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cd7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ffffff777f88d7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88d7dde59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cd7dde5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d184b7dd9ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff5d636cececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88e2effaffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88ececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ececef9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e884b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d184b7dd9ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa777f88ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e884b7dd84b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d184b7dd84b7dd84b7dd84b7dd84b7dd67a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d19ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd84b7dd67a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d167a3d167a3d184b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88ffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf59ec8e89ec8e89ec8e884b7dd84b7dd -84b7dd84b7dd84b7dd67a3d167a3d167a3d167a3d167a3d184b7dd84b7dd84b7dd84b7dd84b7dd -84b7dd84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf5b6daf5b6daf5 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e884b7dd67a3d19ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e867a3d167a3d167a3d167a3d1 -84b7dd9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8ececef5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636ce2effa9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8b6daf5 -b6daf59ec8e89ec8e8b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf59ec8e89ec8e8b6daf5b6daf59ec8e884b7dd67a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d184b7dd9ec8e8b6daf5b6daf59ec8e89ec8e8b6daf5b6daf5b6daf59ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8e2effa5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffff9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -b6daf59ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8 -9ec8e89ec8e89ec8e89ec8e8b6daf584b7dd67a3d167a3d167a3d167a3d167a3d167a3d167a3d1 -67a3d167a3d167a3d184b7dd9ec8e89ec8e8b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5b6daf5 -9ec8e89ec8e89ec8e89ec8e89ec8e89ec8e8d7dde5777f88ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636ce2effa84b7dd84b7dd84b7dd84b7dd9ec8e884b7dd1c20261c20263b424a -3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a -3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a3b424a -3b424a3b424a3b424a3b424a3b424a3b424a5d636c5d636c5d636c5d636c5d636c5d636c5d636c -5d636c5d636c5d636c5d636c3b424a5d636c5d636c5d636c5d636c5d636c5d636c5d636c777f88 -9ec8e89ec8e89ec8e884b7dd84b7dd9ec8e8d7dde55d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef5d636cffffffb6daf5b6daf5e2effab6daf5e2effa9ec8e80101023b424a1c2026 -1c20261c20261c20261c20261c20261c20261c20261c20261c20261c20261c20260101021c2026 -0101020101020101020101020101021c20261c20263b424a1c20261c20261c20261c20261c2026 -1c20260101021c20261c20261c20261c20261c20261c20261c20261c20261c20261c20261c2026 -1c20261c20261c20261c20261c20261c20261c20261c20261c20260101021c20260101021c2026 -b6daf59ec8e89ec8e89ec8e89ec8e89ec8e8ececef777f88ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffececef3b424ad7dde5c6c8cdc6c8cdc6c8cdc6c8cdd7dde5c6c8cd1c20263b424a010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101023b424a010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101023b424a3b424a -ffffffffffffe2effae2effae2effaffffffffffff5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff777f88777f88777f88777f88777f88777f88777f885d636c0101021c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102777f88ececef010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101023b424a1c2026 -777f88777f885d636c5d636c5d636c5d636c5d636c5d636cffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102adb4bcffffff1c2026 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20263b424a -ececefd7dde5d7dde5d7dde5d7dde5d7dde5c6c8cdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0101021c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101023b424a5d636cadb4bc969aa1 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102969aa1777f88969aa1ececef -010102010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effa1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102adb4bc777f88777f88ffffff -3b424a010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef1c20261c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102777f88adb4bc010102010102ececef -adb4bc010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffececef0101023b424a1c2026 -1c20261c20261c20261c20261c20261c20261c20261c20260101021c20261c2026010102010102 -0101021c20261c20260101020101020101021c20260101025d636c5d636c0101020101025d636c -777f88010102010102010102010102010102010102010102010102010102010102010102010102 -0101020101020101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0101023b424a3b424a -3b424a3b424a3b424a1c20263b424a3b424a3b424a3b424a3b424a3b424a1c20261c20263b424a -3b424a3b424a1c20261c20261c20263b424a3b424a3b424a1c20261c20261c20261c20261c2026 -1c20263b424a3b424a3b424a1c20261c20261c20263b424a3b424a3b424a1c20263b424a1c2026 -1c20261c20263b424a3b424a3b424a3b424a3b424a3b424a5d636c3b424a0101020101025d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7dde5010102010102777f88 -e2effa777f88adb4bc010102010102c6c8cdadb4bc777f88c6c8cd1c2026969aa1c6c8cd777f88 -adb4bc3b424aadb4bcadb4bc777f88c6c8cd1c2026777f88c6c8cd777f88777f88010102010102 -d7dde5adb4bc969aa1c6c8cd010102777f883b424a0101020101021c2026c6c8cd1c2026010102 -3b424a969aa1777f88adb4bc5d636c3b424aadb4bc777f88adb4bc777f880101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffb6daf5777f88010102010102777f88 -d7dde5010102c6c8cdc6c8cd010102d7dde5777f880101021c2026010102969aa1ececef010102 -010102010102ececef777f880101021c2026010102969aa1c6c8cd010102ececef777f88010102 -ffffff5d636c0101025d636c010102c6c8cdffffff010102010102010102c6c8cd0101025d636c -ffffff1c20260101021c2026969aa13b424affffff0101021c2026777f880101023b424a3b424a -b6daf5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffb6daf567a3d167a3d1777f88010102010102777f88 -c6c8cd010102969aa1c6c8cd010102d7dde5969aa1010102010102010102969aa1d7dde5010102 -010102010102d7dde5777f88010102010102010102969aa1adb4bc010102d7dde5969aa1010102 -e2effa5d636c010102010102010102777f88ffffffececef010102010102777f88010102ffffff -969aa10101020101020101020101021c2026ffffff0101020101020101020101023b424a1c2026 -67a3d167a3d1d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff67a3d167a3d167a3d184b7dd777f880101020101025d636c -ececef5d636cadb4bc1c2026010102c6c8cdd7dde5777f88c6c8cd010102777f88ffffff777f88 -adb4bc010102c6c8cdc6c8cd777f88d7dde5010102777f88c6c8cd5d636cadb4bc010102010102 -e2effaadb4bc777f88969aa1010102777f881c2026ffffffadb4bc010102777f88010102ffffff -5d636c0101020101020101020101021c2026ffffff777f88969aa15d636c0101023b424a3b424a -84b7dd67a3d167a3d167a3d1e2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffe2effa84b7dd67a3d167a3d1777f880101020101025d636c -d7dde5ffffff969aa1010102010102d7dde5969aa11c20263b424a010102777f88d7dde51c2026 -1c2026010102c6c8cd777f881c20263b424a010102777f88d7dde5ffffff5d636c010102010102 -e2effa777f883b424a3b424a010102969aa1010102010102ffffff969aa15d636c010102ffffff -777f880101020101020101020101021c2026ffffff3b424a3b424a3b424a0101023b424a3b424a -84b7dd67a3d167a3d167a3d1e2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffe2effa9ec8e8777f88010102010102777f88 -adb4bc1c2026ffffff3b424a010102d7dde55d636c010102010102010102777f88c6c8cd010102 -010102010102d7dde53b424a010102010102010102969aa1777f883b424affffff1c2026010102 -e2effa3b424a010102010102010102969aa11c20260101023b424affffffc6c8cd010102c6c8cd -ececef0101020101020101020101021c2026ffffff0101020101020101020101023b424a3b424a -67a3d184b7dde2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffadb4bc010102010102777f88 -d7dde50101025d636cececef1c2026d7dde5adb4bc3b424aadb4bc1c2026969aa1d7dde5010102 -010102010102ffffffadb4bc5d636c969aa13b424a969aa1c6c8cd010102adb4bcececef1c2026 -ffffffadb4bc3b424a969aa13b424ac6c8cd5d636c010102010102969aa1d7dde5010102010102 -d7dde5adb4bc1c20265d636c777f885d636cffffff3b424a3b424a969aa11c20263b424a3b424a -e2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c20263b424a3b424a -3b424a1c20261c20265d636c3b424a3b424a5d636c777f88777f883b424a5d636c5d636c3b424a -1c20261c20265d636c5d636c777f885d636c1c20263b424a5d636c1c20261c20265d636c3b424a -3b424a5d636c5d636c5d636c1c20263b424a3b424a0101020101020101023b424a010102010102 -0101025d636c969aa1969aa15d636c3b424a777f885d636c777f88777f880101020101025d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7dde51c20263b424a010102 -0101021c20261c20260101020101021c20261c20261c20261c20263b424a1c20261c20263b424a -1c20261c20261c20260101021c20261c20261c20261c20261c20263b424a3b424a3b424a1c2026 -1c20261c20261c20261c20263b424a3b424a3b424a3b424a3b424a3b424a1c20263b424a3b424a -3b424a1c20261c20261c20261c20263b424a1c20261c20261c20261c20260101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101020101025d636c5d636c0101020101020101021c2026777f88010102 -010102010102777f88010102010102010102c6c8cd3b424a0101020101025d636cadb4bc010102 -e2effa777f88010102010102777f88d7dde50101020101020101025d636c010102010102010102 -d7dde5777f880101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102adb4bcffffff010102010102010102d7dde5c6c8cd010102 -0101025d636cffffff1c2026010102010102ffffffffffff0101020101023b424a969aa1010102 -ffffff5d636c010102010102777f88ffffff0101020101023b424affffff1c2026010102010102 -ffffff777f880101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102969aa1ffffff5d636c0101021c2026ffffffc6c8cd010102 -0101025d636cffffff777f88010102010102777f88ffffffd7dde50101021c2026777f88010102 -ececef3b424a0101020101025d636cd7dde50101020101025d636cffffff777f88010102010102 -d7dde55d636c0101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101020101025d636cadb4bcd7dde50101025d636cadb4bcc6c8cd010102 -1c20265d636c5d636cd7dde5010102010102777f88010102ffffff969aa11c2026777f88010102 -e2effa5d636c0101020101025d636ce2effa0101021c20263b424a5d636cd7dde5010102010102 -ececef5d636c0101020101020101020101020101020101020101020101020101021c20265d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102777f88010102d7dde5adb4bc5d636c5d636cececef010102 -5d636cd7dde5969aa1ffffff1c2026010102969aa10101021c2026ffffffadb4bc5d636c010102 -e2effa5d636c0101020101025d636cd7dde50101023b424ac6c8cd777f88ffffff1c2026010102 -e2effa5d636c0101020101020101020101020101020101020101020101020101021c2026777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101021c2026adb4bc010102777f88ffffff1c20261c2026ffffff010102 -969aa15d636c010102d7dde5969aa1010102adb4bc0101020101025d636cffffff777f88010102 -e2effaadb4bc010102010102adb4bcd7dde5010102969aa15d636c010102ececef969aa1010102 -d7dde55d636c0101020101021c20260101020101020101020101020101020101021c2026777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -0101020101020101020101021c2026d7dde5010102010102777f880101023b424ad7dde55d636c -c6c8cd010102010102777f88d7dde53b424ad7dde51c2026010102010102969aa1777f88010102 -3b424affffffc6c8cd777f88d7dde5c6c8cd3b424ad7dde51c2026010102777f88ececef010102 -e2effaadb4bc3b424ad7dde5777f88010102010102010102010102010102010102010102777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c2026010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -1c20260101020101020101021c20261c20263b424a0101020101020101020101021c2026010102 -0101021c2026777f881c20260101021c20260101021c20260101020101020101021c2026010102 -1c20261c20261c20263b424a0101020101020101020101020101020101020101021c2026777f88 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cd0101021c20261c2026 -1c20261c20261c20261c20260101020101020101021c20260101021c2026010102010102010102 -0101020101021c20260101020101020101021c20261c20261c20261c20261c20261c20261c2026 -1c20260101020101020101020101020101020101020101020101020101020101020101021c2026 -0101020101020101020101020101020101020101020101020101020101021c20260101025d636c -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6c8cdc6c8cdc6c8cd -c6c8cdc6c8cdc6c8cdd7dde5c6c8cdd7dde5d7dde5d7dde5d7dde5d7dde5d7dde5c6c8cdd7dde5 -c6c8cdadb4bcc6c8cdc6c8cd969aa1777f88777f885d636c777f885d636c777f88777f885d636c -777f885d636c777f885d636c777f88adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bc969aa1969aa1969aa1969aa1969aa1969aa1777f88c6c8cd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff9ec8e867a3d167a3d184b7dd84b7dd67a3d184b7dd -67a3d167a3d184b7dde2effaffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffe2effa67a3d167a3d167a3d167a3d167a3d1 -67a3d1b6daf5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffb6daf567a3d167a3d19ec8e8 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effaffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd7dde5b6daf5e2effaffffffe2effaffffffffffffffffffececef -ffffffffffffe2effaffffffb6daf5e2effaffffffd7dde5e2effad7dde5d7dde5d7dde5e2effa -b6daf5ffffffffffffffffffffffffd7dde5b6daf5e2effaffffffffffffffffffffffffd7dde5 -ffffffffffffd7dde5ffffffffffffececefffffffffffffd7dde5d7dde5e2effaffffffe2effa -e2effaffffffffffffe2effaffffffe2effad7dde5ffffffffffffe2effae2effae2effaffffff -ffffffffffffffffffffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffd7dde59ec8e8ffffffffffffffffff9ec8e89ec8e8ffffffd7dde567a3d1 -ffffffffffff67a3d1ffffff84b7dde2effaffffff9ec8e8d7dde59ec8e8e2effaffffffe2effa -84b7dde2effaffffffffffffffffff9ec8e8b6daf5b6daf5b6daf5ffffffffffffe2effa84b7dd -ffffffffffff84b7ddffffffffffff84b7ddffffffffffff84b7ddd7dde59ec8e8e2effa9ec8e8 -e2effab6daf5b6daf59ec8e8d7dde5d7dde5ffffffe2effab6daf5b6daf5ffffffb6daf5b6daf5 -e2effa67a3d1ffffffffffffb6daf5ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff67a3d19ec8e8ffffffffffffb6daf584b7ddffffffe2effa67a3d1 -e2effaffffff84b7ddffffff9ec8e8ffffffffffffb6daf5e2effab6daf5b6daf5e2effae2effa -9ec8e8ffffffffffffffffffffffffb6daf5b6daf5b6daf5d7dde5ffffffffffffffffff84b7dd -e2effab6daf584b7ddffffffffffff84b7ddb6daf5ffffff9ec8e8d7dde5b6daf5ffffff9ec8e8 -9ec8e8d7dde5e2effa9ec8e8d7dde584b7ddffffffffffff67a3d1e2effaffffffffffff84b7dd -e2effa9ec8e884b7ddffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff9ec8e8b6daf5e2effad7dde584b7ddd7dde5ececefd7dde5 -84b7ddd7dde5b6daf5ececef9ec8e8e2effaffffff9ec8e8e2effa9ec8e8e2effaffffffe2effa -9ec8e8ffffffffffffffffffffffffb6daf59ec8e8ffffffffffffffffffffffffffffff84b7dd -ffffffffffff84b7ddffffffb6daf59ec8e89ec8e8ffffffb6daf567a3d1d7dde5ffffff9ec8e8 -d7dde5b6daf5e2effa9ec8e8ffffffe2effa84b7dd9ec8e884b7dde2effaffffffffffff67a3d1 -e2effaffffffe2effa67a3d1b6daf5ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffb6daf5e2effad7dde5b6daf5ffffffe2effa9ec8e8e2effaffffff -d7dde5ffffffb6daf5e2effae2effa84b7dde2effa84b7ddd7dde59ec8e8d7dde5e2effae2effa -9ec8e8d7dde5b6daf5ffffffffffff9ec8e8d7dde5ffffffe2effaffffffffffffe2effa84b7dd -ffffffffffff9ec8e8d7dde5b6daf5ffffff9ec8e8b6daf5b6daf5ececef9ec8e8e2effa9ec8e8 -d7dde5b6daf5d7dde59ec8e8ffffffffffffd7dde5b6daf5d7dde5b6daf5ffffffb6daf5b6daf5 -e2effab6daf5ffffffb6daf584b7ddffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effae2effaffffff -ffffffe2effae2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effaffffff -ffffffffffffffffffffffffffffffe2effaffffffffffffffffffe2effae2effae2effaffffff -ffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effad7dde5e2effa -e2effae2effad7dde5ffffffffffffd7dde5e2effae2effaffffffe2effaffffffffffffe2effa -e2effaffffffffffffffffffffffffffffffffffffe2effad7dde5d7dde5d7dde5d7dde5d7dde5 -e2effae2effae2effae2effaffffffe2effad7dde5e2effaffffffe2effaffffffffffffffffff -e2effae2effaffffffffffffffffffe2effaffffffe2effaececefffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd7dde584b7ddffffffffffff -ffffffb6daf59ec8e8ffffffffffff84b7dde2effa9ec8e8e2effab6daf5ffffffffffffb6daf5 -84b7ddffffffffffffffffffffffffffffffe2effab6daf5ffffffe2effaffffff9ec8e89ec8e8 -ffffff9ec8e89ec8e8ffffffffffff84b7ddb6daf5ffffffececef84b7ddffffffffffffd7dde5 -84b7ddffffffffffffffffffffffff9ec8e8b6daf59ec8e8d7dde59ec8e8e2effaffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff84b7ddb6daf5ffffffffffff -ffffffd7dde5b6daf5ffffffffffff9ec8e8ffffffb6daf584b7ddffffffffffffffffffd7dde5 -9ec8e8ffffffffffffffffffffffffffffffececef67a3d1b6daf5ffffffffffffd7dde5b6daf5 -ffffffd7dde59ec8e8d7dde5ffffff9ec8e8b6daf5e2effaffffff9ec8e8ffffffffffffececef -84b7dde2effae2effaffffffffffff84b7dde2effad7dde5d7dde59ec8e8e2effaffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffb6daf59ec8e8ffffffffffff -d7dde59ec8e89ec8e8ffffffe2effa84b7ddffffffe2effa84b7ddffffffffffffffffffd7dde5 -9ec8e8ffffffffffffffffffffffffffffffffffffe2effa84b7ddb6daf5ffffffd7dde5b6daf5 -ffffffd7dde59ec8e8e2effaffffffb6daf5d7dde5ffffffffffff9ec8e8ffffffffffffe2effa -84b7dde2effaffffffffffffffffff9ec8e8e2effad7dde567a3d1d7dde5ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6daf5e2effae2effa -9ec8e8ffffff9ec8e8d7dde5d7dde59ec8e8ffffffe2effa9ec8e8ffffffffffffffffffe2effa -9ec8e8e2effae2effae2effaffffffffffffffffffe2effad7dde5e2effaffffffb6daf5b6daf5 -ffffffd7dde59ec8e8ffffffffffff9ec8e8b6daf5ffffffe2effa9ec8e8e2effae2effab6daf5 -9ec8e8ffffffe2effaffffffffffff9ec8e8e2effad7dde5d7dde59ec8e8e2effaffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffd7dde5ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -c6c8cd969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1 -777f88777f88777f88969aa1777f88969aa1969aa1969aa1969aa1969aa1969aa1969aa1777f88 -777f88777f88969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1 -969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1969aa1adb4bc969aa1 -969aa1969aa1969aa1777f88777f88969aa1adb4bc969aa1969aa1adb4bcadb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -e2effad7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5d7dde5 -c6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdd7dde5d7dde5c6c8cdc6c8cdd7dde5c6c8cd -adb4bcc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdadb4bcc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdadb4bc -c6c8cdc6c8cdadb4bcc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdc6c8cdadb4bcadb4bc -adb4bcadb4bcadb4bc969aa1adb4bcc6c8cdadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bc -adb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcadb4bcffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffd7dde5e2effaffffffffffffffffff -ffffffd7dde5e2effae2effae2effab6daf5ffffffffffffffffffffffffb6daf5ffffffffffff -e2effaffffffffffffffffffe2effaffffffe2effaffffffffffffffffffe2effaffffffe2effa -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff9ec8e8e2effaffffff9ec8e8d7dde5 -ffffffb6daf59ec8e8ffffffe2effa9ec8e8ffffffd7dde59ec8e8ffffff9ec8e89ec8e8ffffff -e2effaffffffffffffffffff9ec8e8e2effa9ec8e8e2effaffffffb6daf5b6daf5ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff9ec8e8ffffffe2effa9ec8e89ec8e8 -e2effa9ec8e89ec8e8ffffffd7dde5b6daf5ffffffb6daf584b7dde2effae2effad7dde584b7dd -e2effaffffffffffffffffff9ec8e8e2effaececef9ec8e8b6daf59ec8e8b6daf5ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffb6daf5e2effae2effaffffffb6daf5 -b6daf5e2effab6daf5e2effae2effab6daf5e2effae2effad7dde59ec8e8d7dde5ffffffd7dde5 -b6daf5ececefffffffffffffb6daf5e2effaffffffffffffb6daf5e2effab6daf5e2effae2effa -ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffe2effaffffffffffffffffffffffffffffffffffffffffffffffffffffffe2effaffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102ececefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102d7dde5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102010102010102010102010102 -010102010102010102010102010102010102010102010102010102 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/manual.gif b/Docs/Books/manual.gif Binary files differdeleted file mode 100644 index fff578e3312..00000000000 --- a/Docs/Books/manual.gif +++ /dev/null diff --git a/Docs/Books/manual.txt b/Docs/Books/manual.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/manual.txt +++ /dev/null diff --git a/Docs/Books/msql.eps b/Docs/Books/msql.eps deleted file mode 100644 index 338e152dc48..00000000000 --- a/Docs/Books/msql.eps +++ /dev/null @@ -1,1221 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/msql.eps -%%CreationDate: Sun Dec 31 14:30:35 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 294 383 -%%EndComments -%%BeginPreview: 100 132 1 132 -% fffffffffffffffffffffffff0 -% 8000000000008492aaaaaaa810 -% 80000000000000000000000010 -% 80002000800000000000000010 -% 80054a912aa4a154a2048a0010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000002000010 -% 8000000000000000003ff00010 -% 800000000000000000781c0010 -% 800000000000000000f1e40010 -% 8000001e000000000567f20010 -% 8000001bc00000003a803d0010 -% 8000003730000000d7fa570010 -% 8000003918000001bfe87f0010 -% 800000738e00000000019e8010 -% 80000063d30000000040430010 -% 80000063dd8000000010260010 -% 80000043eac000000028010010 -% 80000051f6c000000028020010 -% 800000203e6000000050050010 -% 800001080560000000e0018010 -% 80000fe143e0000000d1a74010 -% 80003bf802a0000001d28d8010 -% 80006dfe29f0000001fa3bc010 -% 8000fb6e02b8000001f4efa010 -% 8001d51ba848000003fdbb9010 -% 8003ff4f5034000001ff6fa010 -% 80076afae00e000001fadb3010 -% 800fdfebe80a000001dfb75010 -% 801d7a97b8070000007d7e7010 -% 803fafbff80280000193d0b010 -% 803dbb6b700180000100513010 -% 807f15dfd000c0000150071810 -% 80f75b7fb00020000037fc3010 -% 80fe87ff600000000120801010 -% 81ea60fb000000000080003810 -% 83df17b6000000000080001810 -% 83ddc2fe0000000000a000e810 -% 838dd5f80000000000d0009810 -% 87e3efd00000000000b006f010 -% 87a7ffa00000000000d0048810 -% 87baaf4000000000005113e810 -% 8f6f9e80000000000040421010 -% 8ff83c00000000000002803010 -% 8fa22000000000000041405010 -% 8ed0400000000000000100a010 -% 8f52910000000000007aa26010 -% 9db7d3200000000001f6aac010 -% fb6aadfffffffffffffbfef810 -% fe577e555555555555ad5fa810 -% eabad3eedffeabed5ff776d810 -% de6f615a155552b10a45bdb010 -% fb5ad1ec7b6e69a6e38d6fd810 -% afb774b42edabacbb14bdd6810 -% 9ddad0da6ab46d96d98eb6d810 -% 9db7b4b22186371db08b6db010 -% 9c6d666a636a0d16d8cddb6810 -% bcbbb45532cd032db48b6db810 -% 9e6d6636519bc11b688edb6810 -% bfb7d5243956b116d8cb6db010 -% bb6d672e68bb691db48db6d810 -% f9dbb50a34acd88b698b6db010 -% f0b6d79c6c5969cdb14eab6810 -% f1dda516366cb343678a3ed810 -% f376c2f81a5a26f08a0055b010 -% e2dbbfafeeefddae3dffbb6810 -% 81b6eaf558b56b746b556ed810 -% 836dbf5ef5ddbdae1dbbb5b010 -% 81db6aeba16b6b7580eeded810 -% 82b6ddbd73bdb6deebb5b5b010 -% 81edb76baed6d5b5ad6edb6810 -% 82bb6ddd757594da0781b6d810 -% 81d6db6bdfaf34b1f0e2db6810 -% 837db6deb5752ea35ca76db810 -% 81ab6db5d6deb566e862db6810 -% 82f6d76e21830fc5b64776d810 -% 81ada9b82862854edc22dbb010 -% 837b596e5cd38185b6276d6810 -% 81aecbda68b2f04eda22dbb810 -% 82f5a4363cd35845b6276ed010 -% 81af46ed54b2ee46da62db7810 -% 8375315a38ea5a45b4576da810 -% 81ae69ee6cb16c636ce2cb7010 -% 82fb345a34d336b1b1459ed810 -% 81ad846c2860896c43a115b010 -% 82db5db5db5dabb61eaaaee810 -% 81b6f76f6deb76db95df75b810 -% 836dadb5b6b6ddb68eb5aed010 -% 81b6dadedb6db6db415adb7810 -% 82db776b6ddb6b6df0b776d010 -% 81248894922555551755555810 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 81528900000000000000000010 -% 824a4200000000000000000010 -% 8014a800004000000040000010 -% 80810000000921204a04089010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -279.169649 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 132 8 -% Transformation matrix -[ 100 0 0 132 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -000000fffffffffffffffffffffefffffffffdcdf5fcadeefcb4effcb4effcadeefcb4effcb4ef -fcadeefcadeefcadeefca2eef69fe9fcadeefca2eef69fe9f69fe9fca2eeef9fe2f69fe9fca2ee -fca2eefca2eeef9fe2f69fe9fca2eefca2eefca2eefca2eefb99e9fb99e9fca2eefc98eafc98ea -fc98eafb8de7fb8de7fb8de7fb8de7fc82e6fc82e6fc82e6fb73e3f96fe0f86ee0f965e1fb73e3 -fb73e3f86ee0fb73e3f965e1f965e1f86ee0f86ee0f965e1f861ddf861ddf861ddf456daf456da -f456daf456daf456daf456daf456daf456daf34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5 -f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f34ad5f740d6f34ad5f64ad9 -f64ad9f735d3fb99e9fffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffefffffefffffefffffdfefffffff4f4f4f2f2f3 -fffffffffffffdfdfefeffffffffffeeeeeefdfefefffffffffefefffffffffefffefefeffffff -f2f2f3f1f0f0fffffffffffffdfcfdf7f7f7fafafbfcf3fafffffffffffff1f0f0fefefeffffff -fffffffffefffffdfefffefffffefffffcfefcf3fafcf3fafdfdfefffffffffbfffffefff2f2f3 -fcf3fafcf3faf2f2f3fffefffffefffffbfefffbfefffcfefffcfefffcfefcf3fafefefefffbff -fff9fefff9fefff5fefcf3fafff5fefcf3fafcf3fafcf3fafdecf9fdecf9fdecf9fdecf9fdecf9 -fdecf9fdecf9fff5fefdecf9fcf3fafff5fefcf3fafcf3fafff5fefff5fefff9fefff5fefff5fe -fff5fefcf3fafff9feffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffc5c6c7d2d2d4 -cfd0d1dfdedec5c6c7e1e1e2d3d5d5b1b1b4dadadbdfdeded3d5d5e1e1e2d3d5d5d3d5d5ffffff -bcbcbdd2d2d4e3e4e5d2d2d4fafafbb8babcbcbcbdc5c6c7eaeaeae3e4e5bcbcbde1e1e2cccdce -dfdededfdedecac9cbdadadbeaeaeaeeeeeeb8babcd3d5d5dadadbe1e1e2e1e1e2eaeaeac3c3c4 -eaeaeacfd0d1dfdedecccdcedadadbe1e1e2eaeaeadfdededfdedee3e4e5dadadbdadadbeaeaea -e6e5e6d2d2d4cfd0d1e1e1e2eeeeeedfdedee1e1e2e6e8e8fffdfecac9cbdfdedefffeffb8babc -b7b7b8d3d5d5e3e4e5b7b7b8eaeaeaeeeeeec5c6c7dadadbd2d2d4eeeeeee3e4e5f4f4f4ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffff1f0f0c7c9c9d6d7d8 -a5a4a7b1b1b4b1b1b4b4b4b8afaeb0c5c6c7a5a4a7acadaeb1b1b4a8a8abbfbec1b7b7b8f1f0f0 -b7b7b8cac9cbafaeb0d6d7d8f4f4f4b4b4b8a5a4a7c5c6c7afaeb0a8a8aba2a1a4bfbec1b8babc -b1b1b4a5a4a7acadaeafaeb0d2d2d4d3d5d5bcbcbdb8babcc5c6c7afaeb0b1b1b4a5a4a7bcbcbd -eeeeeecccdcecccdcea5a4a7bfbec1a8a8aba8a8abacadaeacadaeacadaebcbcbdb7b7b8acadae -a2a1a4acadaeacadaeb7b7b8b8babca2a1a4a8a8abc3c3c4dfdedebcbcbdd3d5d5ffffffa5a4a7 -a5a4a7c3c3c4b1b1b4a5a4a7cac9cbeeeeeeacadaeb1b1b4a5a4a7b1b1b4acadaedfdedeffffff -fefefefffeffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffafafbf5f6f5f9f8f9 -f7f7f7f7f7f7f9f8f9f5f6f5fafafbfafafbf5f6f5f4f4f4f7f7f7f7f7f7f5f6f5fcfcfcd3d5d5 -eaeaeafafafbf5f6f5fffffff5f6f5f7f7f7f5f6f5f7f7f7f4f4f4f2f2f3f4f4f4f5f6f5fafafb -f2f2f3f2f2f3f5f6f5f2f2f3fffffff5f6f5f4f4f4f2f2f3eaeaeaeeeeeef2f2f3eaeaeaf2f2f3 -fffffff2f2f3eeeeeef7f7f7d2d2d4cccdceeaeaeaf1f0f0f1f0f0eeeeeeeeeeeee3e4e5e6e5e6 -eaeaeaeeeeeef1f0f0eeeeeef1f0f0f1f0f0e6e5e6f2f2f3fafafbeaeaeafafafbfffffff1f0f0 -f2f2f3eeeeeeeeeeeeeeeeeefafafbf1f0f0eeeeeee6e5e6eaeaeaeaeaeaeeeeeef7f7f7ffffff -fffffeffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -fffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffdfdfd -fefefefffffffefefefefefefffffffffffffffffffffffffefefefffffffffffffffffffefefe -fffffffffffffffffffffffffefefeffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefefefefefefefffffffffffffffffffefefeffffffffffffffffffffffff -fffffffffffffffffffffffffffffffefefeffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefffffffefeffffffffffffffffffffffffffffffffffffffffffffffff -fffffeffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffefeffffffffffffff -fefefefffffffffffffffffffffffffffffffffffffefefefefffffefefefefefffefefeffffff -fefefefefefefffffffefefefffffffefefefefefefffffffefefefefefefefefefefefefefefe -fffffffffefefefefefefefffffffffffffffefefefefefefefefffefefefefefefefefefefefe -fefefefefefefefefefefefefefefefefefefefefefefefefffffffefefefffffffffffffefefe -fefefefefefefefefefefefefffffffefefefefefefefefefefefefefefefefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffefffffeffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfcfdfdfcfcfc -fcfcfcfcfcfcfcfcfcfcfcfcfefefdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefeffffffffffffffffff -fffffffffffffffffffffffffffffffefefefcfcfcffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffefefefffffffafafbd3d5d5b8babca5a4a7 -a5a4a7acadaea8a8abb7b7b8e6e5e6fdfdfdfffffffdfdfdfefefeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefefdfdfdfefefeffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffefefcfcfcffffffdadadb595a5f35363b2b2b31181a1f -2e2f3342444c3c3e4114151900020625272da5a4a7fffffffdfdfdfefefeffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfefefcfcfcfefefeffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefdfdfdfdfdfdfefefdffffffe1e1e235363b07080b0f10141f212678787c -d2d2d4cccdcea2a1a4cac9cbcccdce595a5f07080b58585dfcfcfcfffffffefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f5f6f5dfdeded3d5d5e6e5e6fffffffffffffffffffdfdfdfcfcfcffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -fdfdfdfefefefffffffffffffffffff7f7f7d3d5d582818425272d0000000f1014b7b7b8ffffff -b1b1b46a6a6d4243472f3137898a8cd3d5d5d3d5d554565c797d7dfffffffefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffff -d3d5d56a6a6d42434735363b6d6e72a8a8abe6e5e6fffffffffffffdfdfdfdfdfdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff -ffffffffffffeaeaeac3c3c496959878787c6a6a6d5c5d615c5d61353a3bc5c6c7ffffff898a8c -25272d57545a353a3b49474d000000515256a5a4a7fefefd797d7db1b1b4fffffffdfcfdffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefffffff7f7f7 -a8a8ab5152565152564243470f101449494f5152564c4d52afaeb0fffffffffffffdfdfdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff5f6f5 -bcbcbd8585896a6a6d6262666a6a6d797d7d7d7e82717275807e8399999ee1e1e2eeeeeed6d7d8 -acadae969598828184797d7d46464c3334391f2126424347a8a8ab595a5ff4f4f4fffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffe3e4e5 -54565c2e2f335d5f658c8c90353a3b393b40c3c3c4898a8c0f101449494fd2d2d4fffffffcfcfc -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3c3c478787c -595a5f58565b5c5d61595a5f58565b46464c49494f46464c46464c49494f49474d515256828184 -a5a4a7d3d5d5cac9cb78787c7273796a6a6d5c5d610f101425272d46464cacadaefffffffdfdfd -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffacadae -1c1c222323285d5f65bfbec18281841415197d7e82ffffffc3c3c40002060f10149d9ea0ffffff -fefefefdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffffcac9cb4c4d524c4d52 -4c4d5246464c42444c353a3b2f31372e2f332f313735363b2f31372b2b315152567d7e829d9ea0 -c5c6c7c7c9c9cac9cba5a4a76a6a6d515256353a3b0f1014000206424347898a8cf5f6f5ffffff -fefefeffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffff717275 -00000035363b9d9ea0cac9cb58585d353a3b35363bafaeb0e1e1e2c3c3c4828184393b406d6e72 -f2f2f3fffffffdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6f5eeeeeedfdede -d2d2d4d3d5d5dadadbe1e1e2d6d7d8d6d7d8b8babc7d7e82909194b7b7b8dfdedefafafbeeeeee -bcbcbd99999e797d7db7b7b8b7b7b854565c1c1c22232328424347595a5fa8a8abfafafbffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff7f7f75c5d61 -141519727379fafafbc5c6c754565c4c4d52141519373940afaeb099999ebfbec1bcbcbd3e3f45 -46464ce1e1e2fffffffdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffafafb99999e898a8ce3e4e5e6e5e6e1e1e2 -c3c3c4afaeb0969598717275909194afaeb0a2a1a496959878787c595a5fdfdedefffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffeeeeee49494f -35363bb1b1b4ffffffc7c9c951525642444c1f21261415197d7e8267656a2f31376262669d9ea0 -2f31374c4d52f1f0f0fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefdfdfd -fdfdfdfdfdfdfdfdfdfdfdfefdfdfdfdfdfdfdfdfdfefefeffffffa8a8ab858589cccdceeeeeee -fdfcfdffffffeeeeeec3c3c499999ea5a4a7cac9cb9d9ea0515256717275eeeeeefffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff5f6f5595a5f -54565ccccdcef2f2f3eaeaea6262662b2b3123232800020665656a8c8c9057545a4c4d526a6a6d -b1b1b407080b63696bfffffffefefdffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffcfcfcffffff898a8c727379898a8cb7b7b8 -eeeeeefafafbeeeeeeeeeeeed3d5d5d2d2d4d2d2d4a8a8ab807e8399999ef5f6f5fffffffffeff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffefefefcfcfcfffffff1f0f05c5d61 -7d7e82c3c3c4e6e5e6ffffffc7c9c954565c2e2f330f10140f10146262665c5d610f10143e3f45 -f1f0f0353a3b000000c5c6c7fffffffcfcfcffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffdfdfdffffffa5a4a7515256807e83a09ea2909194 -bcbcbdf9f8f9fffffffefefefffffffefefefafafbdadadb858589909194fafafbffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffefefefcfcfcfffffffefefeffffffdfdede858589 -9d9ea09d9ea0c3c3c4e6e5e6f1f0f0dfdedeb1b1b49d9ea046464c00020600020625272d5c5d61 -f4f4f4afaeb00000007d7e82fffffffcfcfcffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffdfdfdffffffbcbcbd57545a8281847d7e8299999ecac9cb -d3d5d5f9f8f9fffffffeffffffffffffffffcfd0d1969598a8a8ab727379909194fffffffdfdfd -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefefcfdfdfffffffffffff7f7f7bfc1c26d6e72828184c5c6c7 -c5c6c7bfbec1afaeb0a5a4a7b7b7b8bfbec1c3c3c4c3c3c4e6e5e6d2d2d4b8babc8c8c90828184 -6d6e72a2a1a42323285d5f65fffffffdfdfdffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefefffffff4f4f4353a3b71727567656a898a8cd2d2d4e6e5e6 -f2f2f3e3e4e5f4f4f4dadadbe1e1e2e1e1e2c3c3c4c3c3c4acadae717275626266c5c6c7ffffff -fdfdfdffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefefefdfdfdffffffeaeaea8c8c904c4d52141519000000000206181a1f -42444c99999ec3c3c4dfdedecac9cbb7b7b8b8babc99999ea5a4a7cfd0d1eeeeeecac9cb4c4d52 -42444c2b2b314c4d5249494feaeaeafffffffefefeffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffcfcfcffffff9091940002065c5d616262662f3137d3d5d5d6d7d8 -c5c6c790919478787c828184909194dadadbd2d2d462626667656a46464c78787c6d6e72f1f0f0 -fffffffefefeffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffcfcfcfffffff1f0f0898a8c393b402e2f3346464c3e3f4525272d0f101407080b -0f10140f101442444ccccdceffffffffffffdadadbcac9cbe1e1e2e6e5e6dadadbd2d2d4828184 -54565c5d5f6547484d35363b828184fffffffdfdfdffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffeffffffffff4243470000001e1e2278787c797d7d969598e6e5e6 -bfbec1a09ea26d6e72898a8cd2d2d4cccdce67656a62646b6d6e7249474d424347797d7dc3c3c4 -fffffffdfdfdffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffcfcfcffffffe3e4e54c4d521e1e2242444c65656a62646b63696b54565c25272d0f1014 -2323282f31370f101425272d858589eaeaeaf2f2f3b1b1b4a8a8abb4b4b8bcbcbdbcbcbdc5c6c7 -7d7e825c5d615c5d61353a3b25272dbfc1c2fffffffcfcfcffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffe1e1e2181a1f0002061e1e2235363b49494f65656a858589 -828184696b71bcbcbdc3c3c471727546464c4c4d525d5f653c3e414c4d522323286a6a6d969598 -eeeeeefffffffefeffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fcfcfcffffffc5c6c7393b4023232847484d35363b595a5f54565c6d6e72515256595a5f626266 -353a3b54565c3e3f450f10142e2f33727379d3d5d5f7f7f7c3c3c49d9ea09d9ea0afaeb0969598 -898a8c65656a54565c6d6e72353a3b47484deeeeeefffffffefefeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffcfcfcffffffbcbcbd07080b141519181a1f2b2b313334395c5d61a5a4a7 -cac9cbc3c3c490919454565c5152565c5d614c4d5258585d49494f3334391f2126717275828184 -bcbcbdfffffffdfdfdffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfdfd -ffffffb8babc2f31371e1e2254565c5d5f6547484d54565c54565c797d7d696b717d7e82b1b1b4 -acadae5d5f6565656a54565c393b4042444c6d6e72898a8cacadaeb7b7b8c3c3c4fffffff2f2f3 -d6d7d8acadae6a6a6d5c5d617d7e822b2b31727379fffffffefefeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffcfcfcffffff9091940f10141f21260f1014181a1f1c1c221c1c2242444c -6d6e7267656a57545a4c4d5258575d65656a51525657545a46464c25272d1c1c22a2a1a4acadae -99999efffffffdfdfdffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff -a5a4a74243472e2f3347484d42444c25272d5c5d614c4d5262646b51525654565c7172758c8c90 -e1e1e2a2a1a465656a3739403334393e3f4551525647484d9695987d7e82a2a1a4fcfdfdffffff -fefefefffffff1f0f0898a8c67656a7d7e8225272db1b1b4fffffffcfcfcffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffcfcfcffffff8585891415192323282e2f332b2b311f212625272d393b40 -4c4d5249494f595a5f595a5f595a5f5c5d614c4d5246464c2b2b312323283c3e41cccdcea09ea2 -969598f9f8f9ffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffffb1b1b4 -33343946464c42444c5c5d61515256353a3b49494f5c5d6165656a35363b4c4d52515256333439 -3e3f452e2f33393b405d5f6562626662626642434746464c65656aa8a8ab909194f1f0f0ffffff -fcfcfcfdfdfdfffffff7f7f772737963696b65656a3c3e41e3e4e5fffffffefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffa2a1a41e1e2223232842444c2f31371415192b2b313e3f45 -49474d57545a6262665c5d61595a5f57545a54565c3e3f452b2b311c1c22828184eaeaea626266 -515256f2f2f3fffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffffbcbcbd393b40 -5152562323284c4d5235363b51525646464c35363b4c4d524c4d525d5f654243473c3e4135363b -46464c65656a7273796a6a6d696b7149494f4c4d5247484d23232872737967656ae6e5e6ffffff -fefefefffffffdfdfdffffffeaeaea5d5f6567656a47484d6d6e72fffffffdfdfdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffcccdce7d7e822b2b312b2b3142444c35363b35363b3e3f45 -4c4d5254565c57545a5c5d6154565c4c4d5251525633343914151942444cbfbec178787c6d6e72 -49474dc3c3c4fffffffcfdfdffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffefefeffffffe6e8e835363b2b2b31 -3739404c4d5235363b5c5d613c3e416a6a6d62646b3e3f455c5d614c4d52515256515256727379 -7d7e827d7e8265656a4c4d5251525635363b2f31373c3e412f31373e3f45393b40dadadbffffff -fdfdfdfffffffffffffdfdfdffffffe1e1e25c5d61626266393b40a5a4a7fffffffcfcfcffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffcac9cb9695989091944243472b2b31353a3b3e3f4535363b -42444c49474d58585d57545a46464c46464c3e3f4546464c2f3137dadadbacadae25272d5c5d61 -46464c898a8cfffffffafafbffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffefffffffffafafb65656a33343946464c -2b2b3146464c4c4d5247484d62646b6d6e723c3e4142444c4c4d5233343949494f5c5d61898a8c -8c8c9062626642434754565c393b400f10143e3f4549494f181a1f1c1c2247484deeeeeeffffff -fefefefffffffffffffffffffcfdfdffffffdadadb595a5f4c4d524c4d52e1e1e2fffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfeffffffcfd0d15c5d61a09ea2f2f2f3797d7d7d7e82dfdede8c8c90 -46464c36343e3e3f4546464c57545a3e3f45595a5fdadadbd6d7d8cccdce7172756d6e7257545a -49494f7d7e82fffffffcfcfcffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffcfdfdffffff9091942323282f313736343e -3334394c4d52393b401c1c2299999e696b713e3f4542434742444c42434749494f58585d696b71 -5d5f6546464c6d6e724c4d522f313746464c47484d25272d1f212600000054565cfffffffefefe -fffffffffffffffffffffffffffffffdfdfdffffffe1e1e254565c393b408c8c90fffffffdfdfd -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffdfdfdffffffd2d2d462646b6d6e72c5c6c7fefffff9f8f9fefefdfafafb -afaeb0969598969598828184a8a8ab898a8cd3d5d5f5f6f5a09ea24243477d7e82dadadb717275 -2e2f33717275fffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffdfdfdffffffc3c3c4181a1f3c3e412b2b31353a3b -36343e14151947484d5d5f65d6d7d899999e78787c54565c5d5f6582818442434742444c49494f -54565c3e3f452f31372f31370f10141e1e221f21262f3137595a5f0f1014b4b4b8fffffffcfdfd -fffffffffffffffffffffffffffffffffffffcfdfdffffffe3e4e55d5f6542444cd3d5d5ffffff -fdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefefeffffffe3e4e57172757273796a6a6da09ea2a8a8ab909194b1b1b4 -e6e5e6e3e4e5d3d5d5b7b7b89d9ea0a09ea2bfbec16262665152566d6e72afaeb0e1e1e2b1b1b4 -353a3b7d7e82fffffffdfdfdffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffefefefffffffafafb4c4d521f21263e3f4542444c333439 -393b40393b4047484d78787cb8babc99999e72737962646b8585897d7e82424347595a5f353a3b -07080b2e2f3307080b25272d3e3f4535363b2b2b3154565c4c4d5262646bfffffffffffeffffff -fffffffffffffffffffffffffffffffffffffffffffdfdfdfffffff7f7f7797d7d6d6e72ffffff -fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff9f8f9858589e1e1e2bcbcbd5c5d616a6a6d7172756d6e72 -78787c7d7e82807e8365656a6a6a6d58575d35363b4c4d52c5c6c7fffffffcfcfce6e5e6acadae -3e3f45797d7dfffffffdfdfdffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffdfdfdffffff9d9ea02323282b2b31181a1f2f313742444c -3e3f453e3f45858589898a8c5d5f65e3e4e5eaeaead2d2d482818436343e3334392f31372f3137 -353a3b4c4d52393b4035363b2f31371f212654565c99999e353a3be6e8e8fffffffefefeffffff -fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefeffffffb1b1b4e1e1e2 -fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffff909194bcbcbdffffff8585897d7e82a2a1a4dfdede -cccdce9d9ea067656a5d5f65b8babcd3d5d5b1b1b4dfdedefefffff4f4f4fcf3faffffffacadae -2f3137797d7dfffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffefefeffffffe3e4e53334392b2b3125272d3e3f455d5f6554565c -54565c4c4d52696b71b4b4b8858589858589a5a4a7c5c6c7cac9cba5a4a77172753e3f45515256 -2e2f330f1014353a3b3e3f452f31371c1c22a8a8abc7c9c9bfbec1fffffffdfdfdffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefdfdfdfffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffff9091948c8c90fffffff9f8f9f9f8f9fcfcfcffffff -fffffffafafbcccdced2d2d4f9f8f9fffffffffffffffffffefefefdfdfdfcfdfdffffff969598 -25272d717275fffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffffffffcfcfcffffff7273791f212625272d1415195152568585890f1014 -42444c25272d62646bb8babcf4f4f4bcbcbd5d5f65a2a1a46d6e7285858971727554565c46464c -46464c393b403e3f451f212625272d78787ceaeaeaeeeeeefffffffefefeffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffa2a1a46d6e72dfdedebfbec1f1f0f0fffffffdfdfd -fdfdfdfefefefffffffffffffcfcfcfcfcfcfdfcfdfafafbfdfdfdfffffffdfdfde1e1e2a5a4a7 -46464c353a3bfffffffefefeffffffffffffffffffffffff000000 -000000fffffffffffffdfdfdffffffdfdede1f21261f21261f212647484dbcbcbd898a8c000206 -3e3f457273796a6a6d1f21265c5d61afaeb0d6d7d8eaeaeab4b4b863696b5c5d61595a5f353a3b -07080b232328141519141519696b71e6e5e6f4f4f4fefefefdfdfeffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffb7b7b878787c6a6a6d54565cdfdedefffffffefefe -fffffffefefefdfdfdfffffff4f4f4f4f4f4fffffffdfdfdffffffdadadb6a6a6d49494f717275 -6a6a6d424347f9f8f9fffffffefefeffffffffffffffffff000000 -000000fffffffffffffcfcfcffffff8c8c900f10141e1e221c1c22969598dadadb8281841c1c22 -42444c62646b14151936343e3e3f45696b719d9ea08c8c906d6e7296959849494f0f1014181a1f -2b2b31353a3b49494f858589cfd0d1f2f2f3fffffffefefeffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffc5c6c75c5d616d6e72727379969598eaeaeaffffff -fdfdfdfffffffdfdfdffffffd3d5d5d6d7d8fffefea8a8abb7b7b8d3d5d54243476d6e72807e83 -5c5d61424347f7f7f7fffffffefefeffffffffffffffffff000000 -000000fffffffffffffeffffffffff47484d0f10141e1e223334395152565d5f65b4b4b8cac9cb -dadadb5c5d6114151925272d35363b4c4d5267656a46464c62646b1f2126141519353a3b47484d -46464c6a6a6dc7c9c9e1e1e2eeeeeefffffffefefeffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffdfdfdffffffdadadb54565c7172754c4d526a6a6deeeeeefafafb -e3e4e5f9f8f9fafafbf2f2f3bfbec1d6d7d8e6e5e614151954565ce6e8e865656a57545a6d6e72 -3c3e41626266f4f4f4fffffffefefeffffffffffffffffff000000 -000000fffffffdfdfdffffffdfdede2f313725272d42444c2e2f3347484d696b716d6e72e6e5e6 -96959846464c353a3b2f31372e2f3335363b47484d4c4d521f21260f10141c1c22353a3b424347 -7d7e82cac9cbe3e4e5f7f7f7fffffffefefeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefeffffffeaeaea6262666262668c8c90727379898a8cffffff -cccdceb7b7b8e6e8e8f2f2f3b8babcdadadbfcfcfc898a8ca5a4a7a09ea272737965656a898a8c -909194828184f9f8f9ffffffffffffffffffffffffffffff000000 -000000fffffffcfcfcffffffafaeb00002060f10143334393e3f4562646b696b7154565c6d6e72 -54565c62646b6a6a6d54565c353a3b5c5d6162626625272d0f10141e1e2225272d4c4d527d7e82 -b4b4b8dadadbfcfdfdfffffffefefeffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffefefefffffff2f2f385858946464cc5c6c7595a5f909194fffeff -c3c3c4a2a1a4dadadbf2f2f3bcbcbdd2d2d4f1f0f0e3e4e56262663c3e4154565c35363b797d7d -9091948c8c90fffffffdfdfeffffffffffffffffffffffff000000 -000000fffffffcfcfcffffff8585891c1c2225272d3e3f4551525665656a54565c5c5d614c4d52 -5d5f655c5d614c4d5254565c858589c3c3c44243470f10141e1e222e2f336d6e72a5a4a7b8babc -eeeeeefffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffb1b1b46d6e72f2f2f3f7f7f7f7f7f7e1e1e2 -bcbcbdb7b7b8b7b7b8a8a8abb1b1b4f1f0f0f1f0f0f1f0f06a6a6d47484dbcbcbd909194969598 -717275b1b1b4fffffffdfdfdffffffffffffffffffffffff000000 -000000fdfdfdfffffff5f6f542444c0f101425272d232328353a3b33343946464c54565c54565c -5c5d616d6e729d9ea0c5c6c7eaeaea595a5f0002062b2b3154565cd6d7d8eeeeeebfbec1e3e4e5 -fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffefefeffffffb1b1b4cac9cbf2f2f3fffffff5f6f5d3d5d5 -a8a8aba5a4a78c8c90898a8cb1b1b4eaeaeaeeeeeee3e4e5f7f7f7e1e1e2f4f4f4d6d7d8a39fa4 -58585dc5c6c7fffffffdfdfdffffffffffffffffffffffff000000 -000000fafafbffffffbfbec11415191f21262f31371f21263334394c4d525c5d615d5f65797d7d -b1b1b4cfd0d1eeeeeee6e5e6cac9cb797d7d7d7e82b4b4b8d6d7d8ffffffd3d5d5d2d2d4ffffff -fdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffefefeffffffcccdcea8a8abe3e4e5f4f4f4f2f2f3f9f8f9 -b1b1b4858589898a8c8c8c90e1e1e2eeeeeedfdedefcfcfcfcfcfcfefefddfdedea5a4a7807e83 -57545ae6e8e8fffffffefefeffffffffffffffffffffffff000000 -000000f9f8f9ffffffb1b1b41c1c221f21262e2f333e3f4554565c62646b696b71717275b4b4b8 -e1e1e2e6e5e6dadadbafaeb0afaeb0c5c6c7a5a4a7dfdedef9f8f9fefefdc3c3c4eaeaeaffffff -fefbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfe -fffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfe -fffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfefffbfe -fffbfefffbfefffbfefffbfefffbfefffbfefffefffcfcfca8a8aba39fa4c5c6c7cac9cbe6e5e6 -b1b1b4858589807e839d9ea0dadadbe6e8e8cccdcee6e5e6eeeeeec5c6c7a8a8ab90919457545a -797d7dfffffffdfcfdffffffffffffffffffffffffffffff000000 -000000f9f8f9ffffffbfbec12323283e3f4542444c54565c63696b6d6e72727379727379b8babc -cfd0d1a8a8ab797d7d727379969598afaeb09d9ea0d2d2d4f4f4f4dadadb78787cf1f0f0ffffff -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff99999e1f21261f2126515256717275909194 -969598898a8c85858999999ea39fa4bfbec1c5c6c7cccdcec3c3c4b7b7b8898a8c85858949494f -b8babcfffffffcfdfdffffffffffffffffffffffffffffff000000 -000000ffffffbfbec125272d1e1e2246464c54565c62646b65656a67656a5d5f65696b71969598 -6d6e7271476fa02d907c597b696b7178787c909194a5a4a7bfbec1afaeb0353a3ba37c9ffc82e6 -f678dff881e2f881e2f881e2f881e2f881e2f881e2f881e2f881e2f881e2f881e2fc82e6fc82e6 -fa86e6fa86e6fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7fb8de7 -fb8de7fb8de7fb8de7fb8de7fb8de7fc98eafc98eafc98eafc98eafc98eafc9deafc9deafc9dea -fc9deafc9deafca2eefca2eef69fe9fcadee8c798d07080b1e1e224f274c25272d924789924789 -8c5f887c597b8c798d858589797d7d9091949d9ea0969598969598a39fa47d7e8251525649494f -ef9fe2fcb4effee3fafffffffffeffffffffffffffffffff000000 -00000046464c33343949494f54565c5152565d5f655d5f655d5f6562646b62646b807e83797d7d -7c597be204bbfc00cffc00cfd30ab071476f797d7d8c8c907d7e824c4d525d5f6571476fec00bf -f101c4f000c3f000c3f100c4f200c3f200c3f200c3f300c4f300c5f300c4f400c3f200c2f400c3 -f400c4f400c3f300c4f400c4f400c4f400c4f500c5f400c5f400c5f500c5f500c5f500c6f600c6 -f600c5f500c5f400c3f600c4f600c4f600c5f600c5f600c5f600c5f600c5f600c5f500c5f600c4 -f600c4f600c4f500c1f400c3f400c5f700c72f0e2f4f274c7c28725e2357951082fc00cffc00cf -f501c7ed00c2ec00c1c514a87c28724f274c353a3b58575d595a5f626266353a3b353a3b862f7c -fc00cff000c0fb99e9fffffffffbfeffffffffffffffffff000000 -0000002b2b312f313735363b393b404c4d5254565c6d6e729d9ea0858589727379797d7d8c5f88 -f700c9f700c9ee00c4ee00c4f703c9e204bb9510824c4d522f313747484d9091948c8c90e204bb -f503c9f104c7f203c7f503c8f507c8f203c7f400c6f400c7f400c7f503c8f503c7f503c7f503c7 -f503c8f503c8f503c8f503c8f503c9f503c8f503c8f503c8f703c9f507c8f500c6f500c5f600c5 -f600c5f501c7f603c8f603c8f603c8f703c9f703c9f703c9f809cbf603c8f700c7f600c4f600c5 -f600c5f700c9f507c8f503c7fc00cfe204bb401b3c4b354cb10b984f274cb10b98fc00cff101c4 -f502c6f601c7f700c9fc00cffc00cfa00e89333439401b3c2f0e2f5e2357a02d90a02d90e204bb -fc00cff200c2fb99e9fffffffffbfeffffffffffffffffff000000 -000000373940393b4042444c4c4d5254565c4c4d52909194b7b7b8807e8362646b924789ec03c2 -f503c9ee00c4f503c8ee00c4fc00cfc514a8696b71807e83727379353a3b47484d515256c514a8 -fc00cff000c5f600c8f600c8f300c7f609caf712cdf724d0f625d0f400c6f400c6f400c6f400c7 -f500c7f500c7f400c7f500c7f500c7f500c7f500c7f600c8f600c8f500c5f332d0f949d9f955db -f949d9f712cdf600c7f600c8f600c8f600c7f703c9fc00cff600c5fc00cff735d3f949d9f955db -f940d6f712cdf500c1f502c4f503c7f700c7c300a27f146f57124f57124fb10b98f712cdf507c8 -f400c6f400c6f400c6f003c5fc00cf7c28727c287257124fb10b985e2357fc00cffc00cffc00cf -f206c7f400c4fb99e9fffffffffbfeffffffffffffffffff000000 -0000006a6a6d47484d4c4d524c4d524c4d5254565ca5a4a7b7b7b863696b862f7cf703c9f503c9 -ee00c4f503c8ee00c4f000c7f700c971476fd76cc6fdc0f2f7f7f7a59aa67c597b5c5d61a02d90 -fc00cff000c5f201c7f201c7f503c9fdcdf5fffffffcb4eff861ddf203c7f400c6f400c6f400c7 -f400c6f400c6f400c7f500c7f500c7f400c7f501c7f500c7f609cafb8de7f96fe0f939d5f735d3 -fa76e3fff5fef949d9f600c5f603c8f703c9f601c7f600c7f86ee0fcb4effc82e6f861ddf861dd -fc82e6fdc0f2fca2eef61bcef600c4f500c5f712cdd76cc67c597bd0a9ccfcb4effc98eaf949d9 -f400c4f502c6f500c7f300c5fc00cf65195ea00e8971476fb10b984f274ce204bbf601c7f300c4 -f503c8f400c4fb99e9fffffffffbfeffffffffffffffffff000000 -0000005c5d6142444c42444c3e3f4551525625272d5d5f65afaeb07c597be204bbf503c9ee00c4 -f000c7ee00c4f000c7ee00c4fc00cfb10b98d30ab0f955dbfffefffdecf9f61bce9247897c2872 -fc00cff000c5f503c8f300c5f64ad9fedaf8fffffff740d6f200c2f503c8f501c7f501c7f501c7 -f400c6f500c7f400c7f501c7f501c7f501c7f503c8f500c5fcadeefa86e6f500c1f502c5f502c5 -f500c1fc98eafc82e6f600c4f507c8f600c6f712cdfdcdf5fdc0f2f61bcef600c4f600c4f600c5 -f600c5fc00cffb99e9fffbfff949d9f600c6f507c8fc00cff740d6fffffffcadeef600c5f503c7 -f500c6f500c7f600c7f300c5fc00cf951082951082401b3cb10b987f146fd30ab0fc00cff400c5 -f503c8f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000797d7d5d5f6546464c37394046464c25272d1c1c2263696bd53abcf503c8ee00c4f000c7 -f000c7f000c7f000c7f000c7f503c8f703c9f000c7f86ee0fb8de7fdfefef96fe0c514a87c2872 -fc00cff201c7f300c7f503c9fa86e6fc82e6fffffff940d6f300c4f503c7f400c6f400c6f400c5 -f400c6f400c7f400c6f400c5f600c8f603c8f500c5f61bcefff9fef939d5f600c5f507c8f603c8 -f600c6f929d3f86ee0f700c7f700c9f809cbfedaf8fdc0f2f700c7f700c7fc00cff703c9fc00cf -f603c8f603c7f600c4fb8de7fffffff949d9f700c7f500c5f625d0fefffffb99e9f600c5f703c9 -f600c7f600c7f700c7f500c6fc00cfee00c2e204bb7f146fec00bfd30ab0f200c3f600c6f600c6 -f503c8f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffffdfdede424347393b4025272d65656a2e2f331f2126df22c2f000c5ee00c4ee00c4 -ee00c4ee00c4f000c7f000c5ee00c4ee00c4f101c4fc82e6f53cd4fdcdf5fedaf8d30ab0a00e89 -fc00cff104c7f400c3f64ad9f56dddf965e1fffffff939d5f503c9f61bcef609caf611cbf61bce -f609caf500c6f609caf61bcef609caf712cdf703c9f735d3fffffff881e2f500c1f603c8f703c9 -f600c8f603c8f703c9f703c9f600c6fc9deafffffff724d0f700c7f703c9f600c6f700c9f600c7 -f700c9f703c9f700c9f809cbfee3fafee3faf611cbf600c4f929d3fffffffc9deaf700c7f703c9 -f700c7f600c7f600c7f600c7f400c5f600c7fc00cff400c4f500c6f700c9f600c8f500c6f600c6 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffffd2d2d4393b4046464c1c1c2290919499999e2e2f33d30ab0f600c8ee00c4ee00c4 -ee00c4ee00c4ee00c4f000c5f000c7f104c7ee00c4fc98eaf61bcef56dddffffffef31cbf003c5 -f503c8f203c7f300c4fc98eaf61bcef86ee0fffffff53cd4f724d0fcadeefcf3fafdcdf5fa76e3 -f323cef500c5f323cef881e2fedaf8fdc0f2f735d3f609cafdecf9fffffffb73e3f703c9f600c4 -f601c7f503c8f603c8f600c6f724d0fffffffdc0f2f700c7f703c9f600c6f600c7f700c7f600c8 -f600c7f600c7f603c7f600c4f881e2fffffff56dddf500c1f929d3fffffffc9deaf600c4f703c9 -f700c7f600c7f600c6f600c7f600c7f500c7f400c5f600c7f500c6f300c5f400c6f500c6f600c6 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffffb4b4b842444c4c4d52353a3bb7b7b8d6d7d8a37c9fe204bbee00c4ee00c4ed00c3 -ee00c4ee00c4ee00c4ee00c4f000c5f003c5f000c5fb8de7f61bcef61bcefffffffca2eef200c2 -f206c7f100c4f332d0fb99e9f200c2f881e2fffffff53cd4f200c2f609cafdecf9fdcdf5f400c3 -f601c7f501c7f400c6f400c6fcb4eff323cef502c4f502c5f861ddfffffffffffffdcdf5f96fe0 -f712cdf600c4f507c8f600c4f965e1fffffffc82e6f600c4f703c9f600c7f700c7f600c7f600c6 -f600c7f600c6f603c7f600c5f940d6fffffffcb4eff400c3f929d3fffffffc98eaf600c4f703c9 -f600c7f500c6f600c6f700c7f600c8f500c7f500c6f500c6f500c6f500c7f500c6f500c6f600c6 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000ffffff8585893c3e4136343e232328b4b4b8e1e1e2d57fc9ec03c2ec03c2ed00c3ed00c3 -ee00c3ee00c4ee00c4ee00c4ee00c4f000c5f000c7fc9deaf61bceed00c2fcb4effffbfef113c9 -f201c7f200c3fc82e6f34ad5f500c1f881e2fffffff53cd4f400c6f400c5fc82e6fffffff735d3 -f400c5f503c8f400c3f949d9f881e2f600c4f703c9f603c8f500c5f939d5fdc0f2ffffffffffff -fdecf9f965e1f603c7f600c5fb8de7fffffff56dddf600c4fc00cff601c7f700c7f600c7f600c7 -f600c7f600c6f603c7f600c5f82fd4fffffffedaf8f700c7f625d0fffffffc98eaf600c5f703c9 -f700c9f600c7f600c6f600c7f600c8f600c7f600c7f500c6f600c6f600c7f500c6f500c6f600c7 -f503c8f600c4fb99e9fffffffffbfeffffffffffffffffff000000 -000000f9f8f978787c4c4d5235363b00020642444ccfd0d1d57fc9ec00c1ec03c2ed00c3ed00c3 -ee00c2ee00c4ee00c4ee00c4ee00c4ee00c4f000c7fb99e9f113c9ee00c2f64ad9fffffff56ddd -f000c0f61bcefc9deaf203c7f300c4fa76e3fffffff939d5f300c4f400c6f724d0fffffffc98ea -f400c3f507c8f400c5fb8de7f332d0f600c5f501c7f501c7f503c8f500c5f502c6f939d5fcadee -fffcfefffffffc82e6f500c1fc98eafffffffb73e3f600c4f603c8f600c7f700c7f600c7f600c6 -f600c7f700c7f603c7f600c5f82fd4fffffffedaf8f700c7f625d0fffffffc98eaf600c4f603c7 -f600c7f600c7f600c7f600c6f500c6f500c6f600c6f500c7f500c6f500c6f500c6f500c6f600c6 -f503c8f600c4fc98eafffffffffbfeffffffffffffffffff000000 -000000d6d7d8696b71595a5f1f21261f21260f101463696bdf22c2ee00c2ec00c1ed00c3ed00c2 -ed00c2ed00c3ee00c4ee00c3ee00c3ee00c3f609caf89feaee00c4ee00c4f609cafee3fafdcdf5 -f000c0f56dddf861ddf200c3f300c4f881e2fffffff53cd4f300c4f507c8f300c4fcadeefff5fe -f611cbf400c3f332d0fb8de7f400c3f503c7f500c6f400c6f500c6f503c7f503c7f400c5f600c5 -f949d9fff9fefff5fef609caf861ddfffffffc9deaf600c5f703c9f600c7f700c7f700c9f600c7 -f500c7f700c7f703c9f600c4f940d6fffffffdc0f2f600c4f929d3fffffffc98eaf600c4f603c7 -f600c6f500c6f600c6f603c7f600c6f500c6f500c6f500c6f500c6f400c5f500c7f500c6f500c5 -f503c7f400c3fb99e9fffffffffbfeffffffffffffffffff000000 -000000a5a4a754565c2e2f331415199695984243471c1c22e204bbf000c5ed00c2ed00c3ed00c2 -ee00c3ed00c3ee00c3ee00c3ee00c3ee00c3f113c9fc98eaee00c3ee00c4ee00c2fb8de7ffffff -f740d6fc98eaf113c9f201c7f200c3f881e2fffffff939d5f300c4f507c8f300c4f740d6ffffff -f56dddf500c1f881e2f940d6f400c4f503c8f500c6f609caf609caf500c7f501c7f503c7f507c8 -f400c3f881e2fffffff939d5f61bcefffffffedaf8f609caf700c9f700c9f700c7f700c7f600c7 -f600c7f700c7f703c9f600c4f881e2fffffff86ee0f500c1f929d3fffffffc98eaf600c4f603c7 -f600c6f600c7f601c7f600c5f600c7f500c7f600c7f600c6f500c5f400c5f500c6f400c6f500c6 -f503c7f600c4fb99e9fffffffffbfeffffffffffffffffff000000 -00000063696b36343e0f10142f3137cccdcea8a8ab71476fea00c0ee00c4ed00c3ee00c4ed00c2 -ee00c3ee00c4ed00c3ed00c3ee00c3ee00c2f323cefb99e9ee00c2ec03c2ee00c2f332d0fffcfe -fee3faf56dddf200c2f507c8f200c3fc82e6fffffff53cd4f300c5f503c8f400c6f400c6fdcdf5 -fdcdf5f611cbfb99e9f503c7f400c7f503c8f400c3f86ee0f955dbf400c3f503c7f400c7f603c8 -f600c7f735d3fffffff940d6f400c3fc9deafffffff861ddf600c5f507c8f700c7f700c7f600c7 -f600c7f603c7f600c6f609cafee3fafee3faf609caf600c4f929d3fffffffc98eaf600c4f703c9 -f600c6f501c7f603c7f82fd4f600c7f500c7f600c7f500c6f500c6f500c6f600c6f500c6f500c6 -f603c7f500c5fc98eafffffffffbfeffffffffffffffffff000000 -0000004c4d5225272d00020654565cd6d7d8cfd0d1d76cc6ee00c2ec03c2ee00c4ee00c3ed00c3 -ee00c4ee00c3ed00c3ee00c4ee00c4ee00c2ef31cbfb8de7ee00c2f003c5f000c5f100c4fdc0f2 -fffdfef61bcef300c5f206c7f200c2f881e2fffffff53cd4f400c5f503c8f503c8f400c3f86ee0 -fffffffca2eef955dbf400c5f503c8f503c8f400c3fa86e6fb8de7f500c1f507c8f603c8f703c9 -f500c1f861ddfee3faf703c9f700c7f609cafdcdf5fdecf9f61bcef600c4f703c9f703c9f703c9 -f703c9f603c7f600c4fb99e9fffffff939d5f603c7f700c7f724d0fffffffc98eaf600c4f507c8 -f603c8f400c3f735d3fc9deaf600c5f703c9f700c9f600c6f600c6f600c7f600c7f600c6f600c6 -f703c9f600c5fc98eafffffffffbfeffffffffffffffffff000000 -00000035363b1f21260f1014a2a1a4e6e8e8c7c9c9d53abcf400c6ee00c4ee00c4ee00c4ee00c4 -ee00c4ee00c4ee00c4ee00c4ee00c4ee00c3f456dafdcdf5f609caec03c2ee00c4ee00c2f678df -fca2eef000c0f203c7f203c7f300c7fca2eefffffff861ddf300c4f503c7f501c7f400c6f611cb -fdecf9f9e3f5f603c7f400c6f400c6f503c7f400c3fb73e3fffbfff323cef600c4f502c4f400c4 -f61bcefdc0f2f940d6f502c4f703c9f600c5f609cafdc0f2fee3faf735d3f600c4f600c4f600c5 -f600c4f609cafca2eefff5fef939d5f502c4f703c9f600c4f939d5fffffffdc0f2f700c7f502c5 -f500c5f712cdfdcdf5fa86e6f600c4f703c9f600c7f600c7f600c7f600c6f600c7f600c6f600c6 -f703c9f600c5fc98eafffffffffbfeffffffffffffffffff000000 -00000042444c14151925272dbfbec1cfd0d1d0a9cced00c3ee00c4ee00c4ee00c4ee00c4ed00c3 -ee00c4ee00c3ee00c3ee00c3ec03c2f678dffca2eefcb4eff89feaf456daee00c2ee00c4f609ca -f61bcef100c4f000c3f740d6fb99e9fcb4effdc0f2fcadeef975e2f507c8f300c5f503c7f400c3 -fca2eefc82e6f200c2f503c7f400c7f501c7f400c6f609cafa86e6fcb4eff86ee0f955dbf861dd -fa86e6f332d0f600c4f603c8f300c5f300c5f603c7f600c5f955dbfdc0f2fc98eaf861ddf861dd -fc82e6fcb4effb8de7f611cbf600c5f600c7f712cdfc82e6fcadeefedaf8fedaf8fc9deafa76e3 -fc98eafdcdf5fffffff955dbf600c5f603c8f600c7f500c7f600c6f500c6f600c7f500c7f600c7 -f603c8f600c4fc98eafffffffffbfeffffffffffffffffff000000 -0000001f21261e1e22858589cac9cbcccdcef34ad5ec03c2ee00c4ee00c4ee00c4ee00c4ee00c4 -ee00c4ee00c3ee00c3ee00c3ee00c2ee00c4ee00c2ee00c2ee00c4ee00c4ee00c3ee00c4ee00c4 -ee00c2f100c4f100c4f104c7f206c7f200c3f200c2f400c6f609caf201c7f400c6f503c7f300c4 -fc98eaef31cbf600c4f501c7f500c7f500c6f500c7f400c5f400c3f507c8f323cef929d3f61bce -f600c5f600c4f503c7f600c7f300c5f500c6f601c7f603c8f600c5f600c5f939d5fffffffff5fe -f939d5f809cbf500c1f502c5f703c9f600c6f603c8f61bcef609caf700c9f703c9f809cbf712cd -f61bcef712cdf809cbf703c9f700c9f600c7f600c7f600c7f600c7f600c7f700c7f700c7f700c7 -f603c8f600c5fc98eafffffffffbfeffffffffffffffffff000000 -000000acadaec5c6c7eeeeeef1f0f0fcfdfdf456daed00c2ee00c4ee00c4ee00c4ee00c4ed00c3 -ee00c3ed00c2ed00c3ee00c3ee00c3ee00c3ee00c4ec03c2ee00c3ee00c3ee00c3ee00c3ee00c3 -ee00c3f100c4f100c4f100c4f100c4f101c4f003c5f300c5f400c6f400c6f503c7f400c3f735d3 -fc98eaf400c3f502c6f500c7f500c7f400c6f400c6f501c7f503c8f501c7f600c4f400c4f400c5 -f603c7f503c7f500c6f700c9f300c4f400c6f500c7f600c7f703c9f601c7f603c7fdcdf5ffffff -f949d9f500c1f206c7f603c7f603c7f603c7f600c6f500c5f600c5f500c7f500c6f601c7f400c4 -f400c4f600c6f600c5f600c7f600c7f600c6f600c7f500c7f600c7f600c7f600c7f600c7f600c7 -f603c8f600c5fc98eafffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffbfefffffff456daed00c2ec03c2ed00c3ed00c3ed00c3ed00c3 -ed00c2ed00c3ed00c3ed00c3ed00c2ed00c2ee00c2ee00c2ee00c2ee00c3ee00c2ee00c3ee00c3 -ee00c3f100c4f000c3f100c4f100c4f100c4f100c4f300c4f400c6f400c6f203c7f400c3fb8de7 -f740d6f200c2f503c7f400c6f400c7f400c5f400c6f400c7f400c6f400c5f400c6f400c6f502c6 -f600c7f500c6f500c6f500c7f300c4f500c7f600c7f600c7f700c9f603c8f600c4f735d3fdecf9 -fffffff86ee0f600c6f500c1f500c1f400c3f507c8f503c7f502c5f601c7f502c6f601c7f502c6 -f400c5f502c6f601c7f500c6f600c7f600c7f500c6f500c7f600c7f600c7f500c7f500c6f600c7 -f603c8f600c5fc98eafffffffffbfeffffffffffffffffff000000 -000000fcfcfcfdfdfdfefefefefbfefffffff456daed00c2ec03c2ed00c3ed00c2ed00c3ed00c2 -ed00c2ed00c2ed00c2ed00c2ed00c2ed00c2ee00c3ed00c2ed00c2ee00c2ee00c2ee00c3ee00c3 -ee00c3f000c3f100c4f100c4f100c4f100c4f100c4f300c5f203c7f200c3fb8de7fffffffcb4ef -f300c4f502c6f400c6f400c6f400c6f400c6f400c6f400c6f400c6f400c5f400c6f400c6f502c6 -f501c7f501c7f502c6f500c6f300c5f600c7f600c7f600c7f600c8f500c6f603c7f600c5f61bce -fc9deafff9fefedaf8fc9deaf881e2fb8de7f96fe0f600c5f601c7f500c6f500c5f600c6f500c6 -f500c6f500c6f600c7f600c7f600c7f500c6f500c6f500c7f600c7f500c7f500c6f500c7f700c9 -f503c8f600c5fc9deafffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff456daee00c2ee00c4ee00c4ed00c3ed00c2ed00c2 -ed00c2ed00c2ed00c2ed00c2ee00c2ed00c2ed00c2ee00c2ee00c2ee00c2ee00c2ee00c3ee00c3 -ee00c2f000c3f100c4f100c4f100c4f300c5f300c4f300c5f203c7f300c4f56dddfdcdf5f740d6 -f400c3f503c7f400c6f400c6f500c7f600c7f500c6f400c6f500c7f500c6f502c6f503c7f500c5 -f500c5f400c4f500c6f603c8f300c5f500c7f600c7f600c6f600c7f600c7f603c7f703c9f600c5 -f500c1f609caf939d5f56dddf861ddf735d3f507c8f500c6f601c7f502c6f603c7f703c9f603c7 -f603c8f501c7f600c7f600c7f600c7f600c6f600c6f600c7f600c7f600c7f600c7f600c7f700c9 -f603c8f600c5fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff456daed00c2ec03c2ed00c2ed00c2ed00c2ed00c2 -ed00c2ed00c2ec00c1ed00c2ed00c2ec00c1ec00c1ed00c2ed00c2ed00c2ee00c2ee00c3ee00c2 -ee00c3ee00c3f000c3f000c3f000c3f100c4f100c4f300c4f300c5f400c6f400c3f200c2f300c4 -f400c6f400c5f300c5f400c6f400c7f400c5f400c6f400c6f500c6f501c7f502c5f400c3f611cb -f625d0f323cef609caf600c4f200c3f500c7f600c7f600c7f603c7f603c8f400c3f600c4f609ca -f625d0f61bcef502c6f500c1f500c1f600c4f500c6f500c6f500c5f600c4f400c3f400c3f400c3 -f400c3f400c5f500c6f500c6f500c6f500c6f500c7f400c5f500c6f500c7f500c6f500c5f600c6 -f503c7f500c5fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff456daed00c2ee00c4ed00c3ed00c2ec00c1ec00c1 -ec00c1ec00c1ec00c1ec00c1ec00c1ec00c1ec00c1ed00c2ed00c2ed00c2ed00c2ee00c3ee00c3 -ee00c2ee00c3f000c3f000c3f100c4f100c4f100c4f300c5f300c5f400c6f203c7f203c7f502c6 -f400c6f400c6f400c6f400c6f400c6f400c6f400c6f400c6f600c8f400c6f206c7fa76e3fb73e3 -f955dbf861ddfcb4effca2eef609caf500c7f601c7f503c7f502c5f400c4f949d9fc98eafc98ea -fc82e6fa86e6fca2eefca2eef939d5f400c3f503c7f500c5f332d0fb8de7fb8de7fa86e6fb8de7 -fa86e6f724d0f600c4f502c6f500c7f500c6f500c6f400c6f400c6f500c6f500c6f400c6f500c6 -f503c7f600c4fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ed00c3ed00c2ed00c2ea00c0 -ec00c1ed00c2ec00c1ec00c1ec00c1ec00c1ed00c2ed00c2ed00c2ec00c1ed00c2ee00c2ee00c2 -ee00c2ee00c3f000c3f000c3f200c3f100c4f100c4f100c4f300c4f300c5f201c7f400c6f400c6 -f300c5f300c5f400c5f400c5f400c6f400c6f400c6f400c7f400c7f400c6fcb4eff56dddf500c1 -f502c4f400c3f61bcefee3faf735d3f400c4f603c8f600c5f611cbfdc0f2fdc0f2f735d3f600c7 -f500c5f600c4f507c8f861ddfdecf9fb99e9f603c7f500c6f809cbf61bcefca2eefffffffb8de7 -f712cdf609caf500c7f500c7f500c7f500c5f500c6f500c6f500c6f500c6f400c6f400c5f400c5 -f503c7f400c4fca2eefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ee00c3ed00c2ec00c1ec00c1 -ec00c1ec00c1ec00c1ec00c1ec00c1ec00c1ec03c2ec03c2ec03c2ec00c1ee00c2ee00c2ee00c2 -f000c3ee00c2f000c3f100c4f200c3f101c4f101c4f300c4f203c7f502c5f300c4f400c6f503c7 -f300c5f400c5f503c7f400c5f400c5f503c7f501c7f503c7f400c3f955dbfee3faf603c7f502c6 -f503c7f507c8f500c1f881e2f949d9f600c4f700c7f712cdfedaf8fcb4eff600c4f400c3f601c7 -f503c7f502c6f502c6f500c1f625d0fff9fefcb4eff600c6f603c7f500c1f56dddfffffff34ad5 -f500c1f503c7f500c6f500c7f500c6f500c6f500c5f400c6f400c5f400c6f400c5f400c5f400c5 -f503c7f300c4fcadeefffffffffbfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ed00c3ec00c1ec00c1ec00c1 -ea00c0ea00c0ea00c0ea00c0ec00bfea00c0ec00bfec00bfec00bfec03c2ed00c2ee00c2ee00c3 -ee00c2ee00c3f000c3f100c4f003c5f100c4f101c4f507c8f200c3f502c5f611cbf507c8f200c2 -f203c7f400c5f400c3f609caf609caf400c4f502c6f503c9f400c3fc82e6fffffff61bcef400c3 -f507c8f502c6f400c4f611cbf611cbf500c5f500c6fdc0f2fdecf9f609caf502c5f503c7f500c6 -f500c7f600c6f500c5f206c7f500c1f861ddfffffff881e2f600c4f400c3fb73e3fffffff955db -f400c3f503c7f400c5f400c5f400c5f400c5f400c5f300c4f400c5f400c5f300c4f300c5f400c5 -f203c7f400c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ed00c2ec00c1ec00c1ea00c0 -ea00c0ea00c0ec00bfea00c0ec00bfec00bfef31cbef31cbef31cbec00bfed00c2ee00c2ee00c2 -ee00c2f000c3f000c3f101c4f200c2f300c5fc98eaf53cd4f332d0fc98eafdcdf5fdecf9fb73e3 -f200c2f113c9fc82e6fdc0f2fee3fafcadeef712cdf400c7f400c3f861ddfffffffcb4eff712cd -f400c3f400c4f503c7f502c6f502c5f600c4f949d9fffffffc82e6f502c4f603c7f500c5f500c6 -f500c7f500c6f500c6f500c6f500c6f603c7f9e3f5fff5fef61bcef500c1f678dffffffff949d9 -f200c2f503c7f400c5f400c6f400c6f300c5f400c5f300c5f300c5f300c4f300c4f300c5f300c5 -f502c5f200c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ed00c2ea00c0ea00c0ea00c0 -ea00c0ec00bfec00bfea00c0ec00bff56dddf740d6ec03c2f678dff678dfec00bfec03c2ee00c2 -ee00c2f000c3f101c4f000c3f53cd4fdcdf5fffffffc98eaf949d9f61bcef503c8fc82e6ffffff -f861ddf861ddf939d5f609caf53cd4fff9fefcb4eff400c6f500c7f609cafdcdf5fffffffee3fa -fa76e3f61bcef600c4f502c5f503c7f600c4fca2eefffffff940d6f600c4f603c7f600c6f600c7 -f600c7f600c6f500c5f500c5f603c7f400c3fc98eafffffff861ddf500c1f975e2fffffff949d9 -f200c2f503c7f400c6f400c5f400c6f400c6f300c4f200c3f300c4f300c5f300c5f300c4f300c4 -f203c7f200c2fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c2ee00c4ed00c2ec00c1ec00c1ea00c0 -ea00c0ea00c0ea00c0ec00bff113c9fdc0f2f113c9ec00bfef31cbfdc0f2ee00c2ec03c2ee00c2 -ec00c1f100c4f100c4f101c4f206c7f96fe0fffffff881e2f200c2f203c7f400c5f206c7fee3fa -fee3faf609caf502c4f503c7f500c1f987e5fffffff712cdf501c7f500c6f712cdfca2eefffcfe -fffffffff5fefb8de7f712cdf500c5f600c8fdcdf5fffffff929d3f600c5f502c6f600c6f600c6 -f500c6f600c6f500c6f500c5f503c7f500c1f975e2fffffffb8de7f500c1f975e2fffffff949d9 -f400c3f503c7f400c5f400c5f400c6f400c6f300c4f300c4f300c5f300c5f300c5f300c4f300c5 -f203c7f200c2fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ed00c2ec00c1ec00c1ec00c1 -ec00c1ea00c0ea00c0ec00c1ea00c0fdcdf5f678dfec00bff678dff678dfec00bfec00bfee00c2 -ee00c3f100c4f100c4f003c5f000c0f53cd4fffffff53cd4f300c4f206c7f501c7f400c6fee3fa -fcb4eff400c3f206c7f507c8f400c4f86ee0fffffff61bcef400c5f503c8f502c5f400c4f82fd4 -fb99e9fff5fefffffffedaf8f61bcef500c7fedaf8fffffff929d3f500c5f603c7f500c6f500c6 -f500c6f600c7f500c6f500c5f502c5f400c3f678dffffffffc98eaf500c1f975e2fffffff949d9 -f200c2f203c7f400c5f400c5f300c5f300c5f300c5f300c4f200c3f100c4f100c4f200c3f300c5 -f003c5f200c2fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ec03c2ed00c2ec00c1ec00c1ed00c2 -ed00c2ec00c1ec00c1ec03c2ec00bff34ad5fffffffb8de7f61bceec03c2f34ad5f56dddf53cd4 -f100c4f100c4f100c4f003c5f200c2f740d6fffffff53cd4f200c3f503c7f400c7f400c6fee3fa -fcb4eff400c3f503c8f503c8f400c3f96fe0fffffff61bcef400c5f503c7f502c6f503c7f400c4 -f400c3f61bcefdc0f2fffffffc9deaf600c4fdc0f2fffffff949d9f600c4f603c7f500c6f500c6 -f600c6f600c6f500c6f500c5f503c7f400c3f881e2fffffff881e2f500c1f975e2fffffff949d9 -f200c2f502c5f400c5f400c5f300c5f300c5f300c4f300c4f200c3f200c3f300c4f300c5f300c5 -f203c7f200c2fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ed00c2ee00c4ee00c4ed00c3ed00c2ed00c2 -ee00c2ed00c2ed00c2ed00c2f456daf53cd4f456dafff5feef31cbec00bff861ddfb8de7f206c7 -f000c5f100c4f100c4f203c7f200c2f740d6fffffff939d5f200c3f503c7f400c7f400c7fee3fa -fcb4eff400c3f503c7f503c8f400c3f96fe0fffffff61bcef500c5f503c7f502c6f400c7f603c8 -f503c8f400c4f609cafedaf8fdecf9f600c7f881e2fffffffc82e6f600c4f603c8f500c6f600c7 -f500c6f500c5f500c6f500c5f503c7f400c3fcb4effffffff53cd4f500c1fb73e3fffffff949d9 -f400c3f203c7f400c5f400c5f400c5f300c4f300c4f300c4f200c3f200c3f100c4f100c4f300c4 -f203c7f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c3ee00c4ee00c4ee00c4ee00c4ee00c3 -ee00c3ec03c2ec00bff678dffb99e9ee00c2ee00c2f678dffcf3faf332d0f34ad5f003c5f100c4 -f201c7f201c7f201c7f203c7f200c3f740d6fffffff939d5f300c4f503c8f500c7f500c7fee3fa -fcadeef500c5f503c8f503c8f600c4f96fe0fffffff61bcef400c5fb73e3f712cdf500c6f501c7 -f600c7f507c8f400c3fb8de7fff9fef700c9f61bcefffbfefedaf8f609caf600c6f601c7f600c7 -f600c7f500c5f400c4f502c6f600c4f323cefffffffdc0f2f502c5f200c2fb73e3fffffff949d9 -f400c3f503c7f400c5f400c6f206c7f609caf300c4f300c4f300c4f200c3f200c3f100c4f200c3 -f003c5f000c0fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c3ee00c4ee00c4ee00c4ee00c4ee00c4 -ee00c4ee00c4ee00c2fdc0f2f861ddec00bff609caee00c2f678dfffffffef31cbf000c3f104c7 -f000c7f201c7f201c7f203c7f300c5f740d6fffffff939d5f300c5f503c8f501c7f600c8fee3fa -fcb4eff400c5f503c8f503c8f400c4f96fe0fffffff61bcef400c6fcb4eff332d0f500c5f503c8 -f603c8f507c8f500c1fc98eafdc0f2f502c5f600c5f861ddfffffffc82e6f500c1f603c8f603c8 -f502c6f502c4f503c7f502c5f500c1fcadeefffffff735d3f400c4f400c3fb73e3fffffff949d9 -f400c3f206c7f206c7f200c2f456daf861ddf000c0f203c7f200c3f100c4f100c4f100c4f000c3 -f003c5ee00c2fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffefffffffffcfefffffff64ad9ee00c4f104c7ee00c4f000c7f000c7ee00c4 -ee00c4ee00c4ee00c2f89feafdc0f2f000c3ee00c2f113c9f53cd4fca2eefdcdf5f609caee00c2 -f201c7f201c7f201c7f203c7f200c2f740d6fffffff940d6f200c2f503c9f400c6f400c5fee3fa -fcb4eff400c3f503c7f503c8f400c3f96fe0fffffff323cef500c1fdcdf5fc98eaf500c1f502c5 -f502c6f400c3f61bcefedaf8f735d3f500c5f703c9f601c7f96fe0fffffffa76e3f600c4f400c3 -f300c4f400c3f400c3f500c5fb99e9fffbfff940d6f400c3f206c7f000c0f678dffffffff861dd -f500c1f502c4f200c2f206c7fdcdf5f740d6f200c2f003c5f200c3f200c3f100c4f100c4f100c4 -f003c5f000c3fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffcfefffffff64ad9ee00c4f503c8ee00c4ee00c4f000c7f000c7 -f000c7f000c7f000c5f113c9fdc0f2fdcdf5fb8de7f975e2f61bcef740d6fffbfefcadeef53cd4 -f203c7f300c7f201c7f300c7f64ad9fdc0f2fff9fefcb4eff949d9f501c7f724d0fa86e6fdecf9 -fee3fafb73e3f712cdf503c9f955dbfdc0f2fffffffc9deaf332d0f955dbfee3fafc82e6f735d3 -f82fd4f949d9fc9deaf939d5f500c5f703c9f700c9f703c9f700c7f735d3fdc0f2fcadeef949d9 -f61bcef929d3f861ddfdc0f2fcb4eff61bcef502c4f400c5f323cef861ddfdcdf5fffffffedaf8 -f56dddf955dbf881e2fee3fafffffff625d0f200c3f101c4f300c4f100c4f300c4f100c4f100c4 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fdfdfdfafafbfffffffffcfefffffff64ad9ee00c4f104c7f503c8ee00c4f000c7f600c8 -f000c7f000c7f000c7f000c5f003c5f332d0f735d3f203c7f104c7f323cef609caf61bcef323ce -f201c7f300c7f400c7f300c7f323cef724d0f609caf625d0f332d0f500c7f712cdf735d3f712cd -f61bcef939d5f609caf600c8f735d3f332d0f61bcef735d3f724d0f400c5f609caf940d6f955db -f949d9f939d5f609caf600c5f503c8f600c7f600c7f700c9f703c9f600c6f603c7f82fd4fc9dea -fffffffdc0f2f861ddf929d3f600c4f502c4f502c5f300c4f61bcef949d9f735d3f332d0f735d3 -f940d6f939d5f955dbf955dbf939d5f507c8f300c5f100c4f200c3f100c4f100c4f300c4f300c4 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fefefefafafbfffffffffdfefffffff64ad9ee00c4f104c7ee00c4f503c8f503c8f000c7 -f000c7f000c7f000c7f201c7f203c7f100c4f000c5f201c7f503c8f000c7f000c7f201c7f400c6 -f300c7f300c7f300c7f300c7f300c5f400c6f201c7f400c6f500c6f600c8f400c6f400c5f400c6 -f400c7f400c6f501c7f600c8f400c6f500c6f500c7f400c6f500c6f503c9f501c7f400c5f400c4 -f500c5f500c6f600c8f703c9f600c8f500c7f600c7f700c9f700c9f603c8f703c9f500c1f939d5 -fffffffdcdf5f600c5f500c5f507c8f507c8f503c7f503c8f502c5f200c2f400c4f500c5f400c4 -f400c3f300c4f400c4f300c4f300c4f300c5f300c5f300c4f200c3f200c3f300c5f100c4f000c3 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffdfefffffff64ad9ee00c4f503c9f503c8f000c7f503c8f503c8 -f503c8f503c8f000c7f000c7f000c7f203c7f503c8f201c7f201c7f503c8f000c7f201c7f201c7 -f600c8f600c8f300c7f300c7f203c7f201c7f201c7f503c8f503c8f400c7f503c8f503c8f501c7 -f600c8f503c8f600c8f600c8f503c8f503c9f503c8f503c9f600c8f600c8f600c8f503c8f503c8 -f503c8f703c9f600c8f700c9f600c8f600c8f700c9f600c8f600c8f600c8f600c8f603c8f501c7 -fca2eefffffffcadeef609caf600c4f600c5f600c5f600c4f601c7f503c7f503c7f503c7f503c8 -f503c7f503c7f503c8f503c8f503c8f400c7f400c6f300c5f300c4f300c4f100c4f200c3f100c4 -f003c5f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffdfefffffff64ad9ee00c4f206c7f104c7f104c7f104c7f503c9 -f503c9f503c9f503c9f503c9f503c8f503c8f503c9f503c9f503c9f503c9f503c8f503c8f503c9 -f503c9f503c8f503c8f503c9f503c8f503c8f503c8f503c9f503c9f503c9f503c9f503c9f503c8 -f503c9f503c9f503c9f503c9f503c9f503c9f503c8f503c9f703c9f503c9f503c9f503c8f503c8 -f703c9f703c9f703c9f703c9f703c9f703c9f703c9f703c9fc00cff603c8f703c9f703c9f600c8 -fc00cff881e2fff9fefdecf9fb8de7f955dbf949d9f96fe0f949d9f500c6f603c8f603c8f603c8 -f503c8f503c7f703c9f503c8f503c7f503c7f203c7f203c7f203c7f101c4f101c4f101c4f003c5 -f104c7f200c3fcb4effffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffdfefffffff740d6ee00c3ee00c4ee00c4ee00c4ee00c3ee00c4 -ee00c4ee00c4ed00c3ed00c3ee00c3f000c5f000c5f300c5f300c5f300c5f300c5f300c5f400c6 -f400c6f400c6f300c5f300c5f300c5f300c5f400c6f400c6f201c7f400c6f400c6ec00bff300c4 -f400c7f400c6f400c6f500c7f500c7f500c6f500c7f600c8f600c7f500c7f600c7f500c7f500c6 -f600c7f600c8f600c8f600c8f700c9f700c9f700c9fc00cff500c5f700c7f600c7f600c7f600c7 -f502c6f600c5f609caf955dbfb8de7fc98eafc82e6f955dbf809cbf601c7f601c7f600c6f500c7 -f500c7f500c6f500c7f500c6f400c6f400c5f300c5f300c5f300c4f100c4f300c5f100c4f300c5 -f203c7f000c3fcadeefffffffffcfeffffffffffffffffff000000 -000000fffffffffffffffffffffefffffffffb8de7f456daf965e1f861ddf861ddf456daf861dd -f456daf456daf456daf456daf456daf456daf456daf456daf456daf64ad9f949d9f949d9f949d9 -f64ad9f64ad9f949d9f64ad9f64ad9f949d9f64ad9f949d9f949d9f64ad9f949d9f949d9f64ad9 -f740d6f64ad9f53cd4f53cd4f53cd4f939d5f740d6f939d5f735d3f939d5f82fd4f929d3f929d3 -f929d3f929d3f929d3f929d3f929d3f82fd4f929d3f929d3f929d3f929d3f929d3f929d3f929d3 -f332d0f929d3f724d0f712cdf809cbf712cdf712cdf712cdf61bcef724d0f61bcef724d0f61bce -f61bcef724d0f61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bcef61bce -f61bcef609cafdc0f2fffffffffcfeffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffeff -fffbfffffefffffefffffffffffffffffefffffefffffefffffbfffff9fefff9fefff5fefff5fe -fff9fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fefff5fe -fff5fefff5fefffbfeffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffcfefffbfefffbfefffbfefffbfefffbfefffcfe -fffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffcfefffdfe -fffdfefffdfefffdfefffdfefffdfefffdfefffdfefffdfefffefffffefffffefffffdfefffdfe -fffefffffefffffefffffefffffefffffefffffefffffefffffeffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffeff -fffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffeff -fffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffeff -fffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffeff -fffefffffeffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffdfdfdfdfdfdfffffffffefffefefefdfdfd -fffffffefefefdfdfdfefefefefefefffffffffffffefefefffffffefefefffffffefefefefefe -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffdfdfdfffffffffffffdfdfeffffffffffffffffff -fefefefffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfdfdfdffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffd2d2d4cccdcefcfcfcfdecf9e6e5e6d6d7d8 -ffffffe6e5e6cccdceeeeeeef1f0f0f9f8f9fefefdf5f6f5f1f0f0f2f2f3fafafbeaeaeaf2f2f3 -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefffffffffffffffffffffffffefefefffffffffffffefefeffffffffffff -fffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -fffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffffffffffffffffffff -fffffffffffffefefefffffffefefefefefeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffdfdfdffffffa8a8ab99999e99999e99999efc98ea807e837d7e82 -bcbcbd858589afaeb0afaeb06a6a6dc7c9c9f2f2f38c8c90e6e5e690919499999eb1b1b4a8a8ab -f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffefefefefefefefefefefefefefefffffefefefffffffffffffefefefefefe -fefefefffffffffffffffffffefefefefefefefefefefefefefefefffefefffffffefefeffffff -fefefefdfefefefefefefefefefefefdfefefefefefffffffffffffefefefefefefefefefefefe -fefefefefefefffffffffffffffffffffffffefefefdfdfdfefefefffffffffffffffffffefefe -fefefefefefeffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffcfcfc797d7df7f7f7ffffff78787cf9e3f5898a8c54565c -cccdce828184b7b7b8b1b1b465656ac7c9c9f4f4f4858589ffffffa2a1a47d7e82fffffff5f6f5 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffafafbe6e8e8fafafbfffffffefefeffffffeeeeeef5f6f5fffffff2f2f3fafafbffffff -fffffffafafbf1f0f0fafafbfffffffefefefffffffffffffffffffffffefffffffafafbf1f0f0 -fafafbfffffffefefefffffffffffffffffffffffffafafbf1f0f0fefefeffffffffffffffffff -fffffffdfcfdeeeeeefffffff1f0f0f1f0f0fcfcfcfffffffffffffefefef7f7f7f7f7f7fefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffefffffffffffffdfdfdffffff99999ea8a8abb1b1b48c8c90ffffff909194acadae -99999e797d7db8babcacadae65656a9d9ea0cccdce6d6e72e3e4e5bcbcbda5a4a7fffffffcfcfc -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd -ffffffd3d5d599999ec5c6c7bcbcbdb8babccccdceb1b1b4bcbcbdf1f0f0bcbcbdbcbcbdc7c9c9 -d3d5d5f5f6f5b1b1b4cccdcebcbcbdc3c3c4c5c6c7cac9cbbfc1c2d2d2d4fffefec7c9c9d3d5d5 -c3c3c4cac9cbcfd0d1c5c6c7cccdcec7c9c9eaeaeacccdce9d9ea0cccdcecccdcecac9cbcccdce -dfdedee6e5e6c3c3c4fafafbcac9cbb8babcc5c6c7bcbcbde1e1e2e1e1e2a8a8abd3d5d5c5c6c7 -d2d2d4d2d2d4f4f4f4fffffffffefeffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffafafbbcbcbdb8babcf5f6f5ffffffdadadbfafafb -d3d5d5bfc1c2b1b1b4d6d7d8d3d5d5acadaebfbec1b8babcb1b1b4dfdedee3e4e5fffffffdfdfe -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe -ffffffd3d5d5c3c3c4c3c3c4c7c9c9cac9cbbfc1c2c5c6c7cac9cbe6e5e6b8babcbfc1c2bcbcbd -d3d5d5fffefecac9cbbfc1c2bfbec1cccdcea8a8abb8babccfd0d1d3d5d5fafafbd3d5d5c5c6c7 -bfc1c2cccdcec3c3c4c5c6c7acadaeb1b1b4f2f2f3c5c6c7b8babcbfc1c2bfbec1c5c6c7acadae -eaeaead3d5d5dadadbfafafbd3d5d5d3d5d5bfc1c2b1b1b4dadadbdadadbb8babccccdcebcbcbd -acadaea8a8abf5f6f5fffffffefefeffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffefefefffffffffffffefefefffffffffffffefefd -fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffefefefffffffffffffffffffffffff4f4f4f9f8f9f2f2f3f7f7f7fffffff1f0f0 -fefefefefefdfefefffffffffffffff5f6f5eaeaeafcfcfcfffffff9f8f9fefefefdfdfdfdfdfd -fffffffdfdfefffffff2f2f3e6e5e6fcfdfdfffffffefefefdfefefefefefefefefefefefffffe -fffffffefefefefefefffffffcfdfdfefefefefffffefffffffffffdfefefdfdfdfcfcfcffffff -f1f0f0e6e5e6fcfdfdffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffdfdfdfcfcfcfffffffffffffefefeffffff -fdfdfdfdfdfdfcfcfcfdfdfdfdfdfdfcfcfcfdfdfdfcfcfcfcfcfcfefefefefefeffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefefefefefefefefefefefefefefefefefefefefffffffffffffefefefefefeffffff -fffefefffffffefefefefefefefefefefefefffffffefefefefefefefefefffffffefefefefefe -fefefefefefefefefefefefefffffffefefefffffffffffefefefefefefefefefefefefefefefe -fffffffefefefefefefffffffffffffffffffefefefefefefffffffffffffefefefffffffefefe -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffefffffffffffffefefe -fffffffffffefffffffffffffffffffffffffefefeffffffffffffffffffffffffffffffffffff -fffffffffffffffffffefefefefefefffffeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fefefefefefeffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffdfefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefdffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffefeffffffffffffffffffffffffffffffffffff000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/msql.gif b/Docs/Books/msql.gif Binary files differdeleted file mode 100644 index 27a7b17afb2..00000000000 --- a/Docs/Books/msql.gif +++ /dev/null diff --git a/Docs/Books/msql.txt b/Docs/Books/msql.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/msql.txt +++ /dev/null diff --git a/Docs/Books/prof.eps b/Docs/Books/prof.eps deleted file mode 100644 index 13cdb24afb1..00000000000 --- a/Docs/Books/prof.eps +++ /dev/null @@ -1,1167 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/prof.eps -%%CreationDate: Sun Dec 31 14:30:51 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 372 -%%EndComments -%%BeginPreview: 100 126 1 126 -% fffffffffffffffffffffffff0 -% fffffffffffffffffffc010050 -% ffbf7bffbefbfffffffd552a90 -% fffffffffffffffffffc004030 -% fffeffbffbeffffffff9bb5b50 -% d555d56aaebaaaaaaaad46a490 -% ffffbffffbeffffffff8100930 -% d555eaaaaedd5555555aa4a050 -% ffff7ffffbbbfffffff4000910 -% ab5bd6b5aef76b6b6b6caaa250 -% fef6bdef7bbededededdaabdb0 -% 57dff7bdeeebfbfbfbfbffef70 -% fd755def7bbeaeaeaeaf56baf0 -% 57dff77bdeebfbfbfbfafdefd0 -% 7d76bddef7bededededfd7bb70 -% efddef75adedf7b7b7b57deef0 -% 5a22108a521208484c6ad75dd0 -% fc000f000000000008e075cbb0 -% 56007fc0000000000bf0cfc770 -% 7c00ffe0000000000bfc6e23f0 -% ec03faf00000000009e0c86350 -% 5a03e0500000000009c86e26f0 -% fe0380380000a8000d80cc0bd0 -% 540328500003be000c226a26f0 -% fe034018000d61800886d643b0 -% 54073ad8000bc2a00d82f54370 -% fe06eda8001f00a009e55f13f0 -% 540728d80015c0900f77f576b0 -% fe024aa0001f80680ddd5feff0 -% 54029410001700d80830e002b0 -% 7e028940003c00300ce84203f0 -% ea016d4000102a6c098c640350 -% 5c009280001e88380d846413f0 -% fa015ea0000d802408a4640370 -% 5e00a140000d00080ca06103d0 -% 740056000004880408006402b0 -% ee00a9400004a2140c686003f0 -% bc01b5600001440c0840620370 -% 6a01ae40000154180da46203d0 -% fe07f8f0000161000fafc20370 -% 543fc7fe000050000fef7ffef0 -% 7fffffffe00081400d5dd557b0 -% ebfffffff800a2000ff767c5f0 -% 5ffffffffe0054800afdcfe350 -% fbffffffff8054000dd76263f0 -% 5fffffffff80d4000d09c42370 -% 75ffffffffc169000a176483d0 -% efffffffffc214000d52c20370 -% 5dffffffff0010200d25a283d0 -% fbfffffffe0040180b1566a370 -% 5ffffffefc00c0020c97dd7fd0 -% f7fffffe780088000d9abebeb0 -% 5dfffffff80024000b67ff4ff0 -% f7fffffef7ffffffffdf6fbd70 -% 5d555555aed6d56db575daefd0 -% f63c21e31f11619f08c867c2f0 -% 5c0223f23510311988846fe7b0 -% 762027f3219021b08904cc32f0 -% ec4022022310510089446837b0 -% 5e2825a31491119a8894e2e2f0 -% fa5020a2019021000c805027b0 -% 5da0228304108184085460c2f0 -% 775022820410310508d8c8a7b0 -% eea721030a10a98808d06055f0 -% bdaa2142171035178d74c15350 -% 6f4fe46353d15fb4eb0760a7f0 -% fafadfffffbff6ffdffedffd70 -% 5fdfbb5aad76bdd5baedfb57d0 -% 7575f6f7fbefefbf77bbaefd70 -% efdf5fdeaf7abaf5eeef7bdbd0 -% 5d75f577fbdfefbf7dddeef770 -% fbdf5d4a0c4454c2a6677bbef0 -% 5f76f42b65cdce591c66deebd0 -% 75dddce2644c64dd466df7beb0 -% ef77b9a665cf32954527bdebf0 -% 5dddf4c94cc866496da5eb7ed0 -% fbbb5fffbfb7ddf7fb7b5fd7b0 -% 5f77f6aaeafef7beafdffafdf0 -% f5eebdffbfabbdebfaf55faf50 -% 5f7defab75feef5eafbff5faf0 -% f5d7bafeef57bbfbfb6abf5fd0 -% 5f7defaddbfdeeaedeffebf570 -% f6ef7ab3b15b7bfbb7d5bebfd0 -% 5ddbdf06e1f7deb77d7f6beaf0 -% 77beb5c7b5bef7eeefd6febfb0 -% eef7ff4dfde55abbb56fd7eb70 -% 5dbd558751a43061031d7d7ef0 -% fbebff8dc3071c71c337d7d7d0 -% 5f7f5a8771c50c51607d7d7d70 -% 75d5f78dd3471871e0efdbd7d0 -% ef7f5ec761c69c61b0daf77d70 -% bdd6f78dd3471471e87fbeeff0 -% 6f7ddd4731c61c514c2aebdab0 -% fbdbbb8521450a008c1fbefff0 -% 5ef777105492aeb7554b77aad0 -% 75beeefffffffbfdfffeedffb0 -% efebdddbaaad56af555bdf55f0 -% 5d7efbbefffbfffaffd77bff50 -% fb01af77aadf5aafda8ed6adf0 -% 5f19fbdd7fb5f7faf7edfffb70 -% 7599061a94298815094c8817d0 -% ef1124c9912899c8c888cdcef0 -% 5d9738c499f5cc8c9dccc89db0 -% fb1d29cc99a489d9c88ccc97f0 -% 5f9b3ca971c8dc8c8ccc8abd50 -% f5169458094484888888c40ff0 -% 5f7f7ff54fffbfffffffbd0ab0 -% f5ebd6a9cd5b75556d55f1cff0 -% 5f7efdfc5ff6efffdfff5c5db0 -% f6d7afaff55fdd5afab5f7fb70 -% 5dfd7afb5ff57bf7afef5daff0 -% 77afefaef6bfdf6efaddf7fab0 -% eefabafbbdeab5dbafb75d57f0 -% 5c005756d6addb6d756db6ed50 -% fa003dfdbdfb77dbdfdb7dbff0 -% 5e086f57edaedd6b757febeab0 -% 74043bfd7a512b1a8b42bf7ff0 -% ee026eafdffff6fffeffebd550 -% bc7f3bfaf5ad5fd557ad7ebff0 -% 6ec06d575b76eabbbd76d5d570 -% fa0037adeddbbd6ed6ddaf77d0 -% 5e766d7f5f76ebfbbdf7fadd70 -% 74003ed5b5adb6aad6ad576bd0 -% ee006b7aed6d6dedbdbaedb770 -% 5c003ed7bbdfdf5feb77bb6df0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 357.165354 translate -283.464567 -357.165354 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 126 8 -% Transformation matrix -[ 100 0 0 126 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c095754520d0c095754520d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c095754520d0c090d0c090d0c090d0c090d0c095754520d0c09 -0d0c090d0c090d0c090d0c090d0c095754520d0c095754520d0c095754520d0c090d0c090d0c09 -5754520d0c090d0c090d0c090d0c090d0c095754520d0c090d0c095754520d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c18d8b8eb8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c18d8b8eb8b3c10d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c095754520d0c095754520d0c095754520d0c09 -0d0c095754525754525754520d0c095754520d0c095754525754525754520d0c095754520d0c09 -0d0c090d0c090d0c095754520d0c090d0c090d0c095754520d0c095754520d0c095754520d0c09 -5754520d0c090d0c095754525754520d0c095754520d0c090d0c095754520d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c18d8b8eb8b3c1b8b3c1b8b3c18d8b8eb8b3c1b8b3c1b8b3c18d8b8e8d8b8eb8b3c1b8b3c1 -b8b3c18d8b8eb8b3c1b8b3c1b8b3c1b8b3c18d8b8eb8b3c10d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534 -b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534b01534a6385a -b8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e -8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c18d8b8e8d8b8e5754528d8b8e8d8b8e8d8b8e8d8b8e5754528d8b8e8d8b8e8d8b8e8d8b8e -8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1dfd9dab8b3c1b8b3c1dfd9dab8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1dfd9dab8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1dfd9dab8b3c1b8b3c1dfd9dadfd9dab8b3c1b8b3c1dfd9da -b8b3c1b8b3c1dfd9dab8b3c1b8b3c1b8b3c1dfd9dab8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c10d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104b -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c0d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104be16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e16e8fe16e8fe16e8fdd0046e02c5ce16e8fe16e8fe16e8fa6385ab01534e16e8fe16e8fe16e8f -e16e8fe16e8fe02c5cdd0046d7104ba6385aa6385aa6385aa6385aa6385aa6385aa6385aa6385a -a6385ab01534b01534dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e5754525754528d8b8edfd9dafdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfddfd9da5754520d0c090d0c098d8b8efdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046d7104b5754528d8b8e5754525754520d0c090d0c09575452dfd9da -b8b3c1575452575452dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da8d8b8e5754520d0c090d0c090d0c090d0c090d0c090d0c09575452 -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8fb8b3c10d0c090d0c090d0c095754520d0c09b8b3c1fdfdfd -dfd9dafdfdfde16e8fdd0046d7104b8d8b8e8d8b8e0d0c095754525754520d0c09575452b8b3c1 -fdfdfddfd9da575452dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdb8b3c15754520d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8f8d8b8e0d0c090d0c090d0c090d0c090d0c09575452575452 -dfd9dafdfdfde16e8fdd0046d7104bb8b3c15754520d0c09575452b8b3c18d8b8e8d8b8e8d8b8e -fdfdfdfdfdfd8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfd8d8b8e0d0c090d0c090d0c090d0c090d0c095754525754528d8b8e5754520d0c090d0c09 -0d0c09575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8fdfd9da0d0c090d0c090d0c090d0c098d8b8e8d8b8eb8b3c1 -fdfdfdfdfdfde16e8fdd0046d7104bdfd9da575452575452b8b3c1fdfdfddfd9da8d8b8e575452 -b8b3c1fdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfd5754520d0c090d0c090d0c09575452b8b3c1b8b3c1dfd9dadfd9dadfd9dab8b3c18d8b8e -5754520d0c098d8b8efdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfd0d0c090d0c09575452b8b3c1dfd9dab8b3c1dfd9da -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c1575452575452575452dfd9dab8b3c1dfd9da575452 -8d8b8edfd9da8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -dfd9da0d0c090d0c095754528d8b8eb8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dadfd9da -8d8b8e0d0c09575452fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8eb8b3c18d8b8e8d8b8e -8d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5c8d8b8e575452575452b8b3c1b8b3c1b8b3c1dfd9dadfd9da -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c15754525754528d8b8edfd9dafdfdfdfdfdfd8d8b8e -b8b3c1b8b3c1575452dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -b8b3c10d0c090d0c098d8b8eb8b3c1b8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dab8b3c1 -b8b3c1575452575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8e5754525754525754528d8b8e575452 -5754525754525754528d8b8edfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cdfd9dab8b3c18d8b8eb8b3c1b8b3c1dfd9dadfd9dab8b3c1 -8d8b8edfd9dae6a5b7dd0046d7104b8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1dfd9dafdfdfdb8b3c1 -dfd9dadfd9da8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -b8b3c10d0c095754528d8b8eb8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c1 -b8b3c1575452575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e5754525754525754525754525754520d0c09575452 -8d8b8eb8b3c18d8b8e5754528d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfddfd9da8d8b8edfd9dab8b3c1dfd9dadfd9dab8b3c1 -5754528d8b8ea6385add0046d7104b8d8b8e8d8b8e575452575452b8b3c1b8b3c1b8b3c1b8b3c1 -dfd9dadfd9da8d8b8edd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -8d8b8e0d0c09575452b8b3c18d8b8e5754525754528d8b8eb8b3c1b8b3c1b8b3c18d8b8e8d8b8e -b8b3c18d8b8e0d0c09dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdb8b3c15754525754525754525754525754525754528d8b8edfd9da -dfd9dadfd9dab8b3c18d8b8e5754528d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd8d8b8e0d0c09b8b3c1b8b3c1dfd9dadfd9da8d8b8e -5754528d8b8ea6385add0046d7104b5754528d8b8e5754525754528d8b8e8d8b8e8d8b8edfd9da -dfd9dadfd9dae6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -5754520d0c095754528d8b8e575452575452575452575452575452b8b3c1575452575452575452 -5754528d8b8e575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da5754525754525754525754520d0c095754528d8b8edfd9dafdfdfd -dfd9dadfd9dadfd9dab8b3c15754528d8b8e8d8b8e8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e16e8fdfd9da5754520d0c090d0c098d8b8edfd9dadfd9da8d8b8e -8d8b8e8d8b8ea6385add0046b015345754525754525754525754525754528d8b8edfd9da8d8b8e -b8b3c1fdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -5754520d0c095754528d8b8e8d8b8e5754528d8b8e8d8b8e8d8b8eb8b3c18d8b8e575452575452 -8d8b8e8d8b8e575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da5754525754525754525754520d0c090d0c098d8b8edfd9dafdfdfd -fdfdfddfd9dadfd9dadfd9da8d8b8e8d8b8eb8b3c18d8b8e8d8b8efdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046d7104ba6385ab01534b01534b01534b01534a6385ae16e8fa6385a -a6385aa6385ab01534dd0046dd0046b01534b01534b01534b01534a6385ae16e8fa6385aa6385a -b01534a6385ae02c5cdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -b8b3c15754528d8b8eb8b3c1b8b3c18d8b8eb8b3c18d8b8e8d8b8eb8b3c18d8b8e8d8b8e8d8b8e -8d8b8e8d8b8e8d8b8efdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c15754525754525754520d0c090d0c09575452b8b3c1fdfdfddfd9da -fdfdfdfdfdfdfdfdfddfd9dab8b3c15754528d8b8e8d8b8e575452dfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -dfd9da5754528d8b8e8d8b8eb8b3c1b8b3c1b8b3c18d8b8e8d8b8eb8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c18d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c15754525754520d0c09575452575452b8b3c1dfd9dadfd9dafdfdfd -fdfdfddfd9dadfd9dadfd9dab8b3c15754525754525754525754528d8b8efdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5ce6a5b7e6a5b7e6a5b78d8b8e5754525754528d8b8ee6a5b7 -e6a5b7e6a5b7e16e8fdd0046d7104be6a5b7e6a5b7e6a5b7e6a5b78d8b8ee16e8fe6a5b7e6a5b7 -e6a5b7e6a5b7e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -dfd9da8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1b8b3c18d8b8eb8b3c1b8b3c18d8b8eb8b3c1b8b3c1 -b8b3c1b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfd8d8b8e0d0c09575452575452b8b3c1dfd9dadfd9dadfd9dadfd9dadfd9da -b8b3c1dfd9dadfd9dadfd9dadfd9da8d8b8e0d0c095754528d8b8eb8b3c1fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdfdfdfd8d8b8e575452575452575452575452b8b3c1 -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfdfdfdfddfd9da8d8b8eb8b3c1dfd9dadfd9dadfd9da -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e5754525754528d8b8e8d8b8e8d8b8e8d8b8e -b8b3c1dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c15754525754528d8b8eb8b3c1b8b3c1b8b3c1dfd9dab8b3c1b8b3c1 -8d8b8eb8b3c1b8b3c1dfd9dadfd9dab8b3c15754525754525754528d8b8efdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd8d8b8e0d0c09575452dfd9dafdfdfd8d8b8e575452 -b8b3c1fdfdfde6a5b7dd0046d7104bfdfdfdfdfdfd575452b8b3c1fdfdfdfdfdfdfdfdfddfd9da -dfd9dafdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfddfd9da8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfddfd9da5754525754528d8b8e8d8b8e8d8b8e575452b8b3c1dfd9dab8b3c1 -8d8b8e8d8b8eb8b3c1dfd9dadfd9dab8b3c1575452575452575452575452fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd5754520d0c098d8b8efdfdfdfdfdfdfdfdfd575452 -8d8b8efdfdfde6a5b7dd0046d7104bfdfdfddfd9da575452dfd9dafdfdfdfdfdfdfdfdfddfd9da -b8b3c1fdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfd8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e5754525754525754528d8b8e8d8b8e8d8b8e -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfd8d8b8e0d0c095754528d8b8e575452575452b8b3c1dfd9dadfd9da -b8b3c1dfd9dadfd9dadfd9dadfd9dadfd9da8d8b8e5754528d8b8e575452dfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfd8d8b8e5754528d8b8e8d8b8edfd9da8d8b8e8d8b8e -b8b3c1fdfdfde6a5b7dd0046d7104bfdfdfddfd9da575452b8b3c1dfd9dafdfdfdfdfdfddfd9da -b8b3c1fdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8e -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfddfd9da5754525754528d8b8e8d8b8e8d8b8eb8b3c1dfd9dadfd9da -dfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dab8b3c1b8b3c18d8b8edfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdb8b3c18d8b8e8d8b8e8d8b8eb8b3c1b8b3c1b8b3c1 -dfd9dafdfdfde6a5b7dd0046d7104bfdfdfddfd9da8d8b8eb8b3c1b8b3c1fdfdfdfdfdfddfd9da -dfd9dafdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c18d8b8eb8b3c1 -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e575452b8b3c1b8b3c18d8b8eb8b3c1dfd9dadfd9da -b8b3c1dfd9dafdfdfddfd9dadfd9dadfd9dadfd9dadfd9dadfd9da8d8b8eb8b3c1fdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfddfd9dab8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9da -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfddfd9da8d8b8eb8b3c1b8b3c1fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1b8b3c18d8b8e8d8b8e8d8b8e -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e8d8b8eb8b3c18d8b8e8d8b8eb8b3c1b8b3c1 -b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c18d8b8e575452b8b3c1fdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdfdfdfddfd9da8d8b8e8d8b8eb8b3c1b8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfdfdfdfdb8b3c1b8b3c1dfd9dafdfdfdfdfdfddfd9da -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfd5754525754528d8b8e5754525754528d8b8e8d8b8e8d8b8e8d8b8eb8b3c1575452 -575452fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8eb8b3c18d8b8e5754528d8b8eb8b3c1 -dfd9dab8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c1575452575452dfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8eb8b3c1b8b3c1b8b3c1fdfdfd -fdfdfdfdfdfde6a5b7dd0046d7104bfdfdfdfdfdfdb8b3c18d8b8edfd9dafdfdfdfdfdfddfd9da -dfd9dafdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdb8b3c10d0c095754528d8b8e5754525754525754525754525754528d8b8eb8b3c1575452 -575452fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8e8d8b8e8d8b8e8d8b8eb8b3c1 -8d8b8e8d8b8e8d8b8edfd9dadfd9dadfd9dadfd9dab8b3c15754528d8b8efdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046e02c5cb8b3c15754525754528d8b8e8d8b8eb8b3c1b8b3c1b8b3c1 -dfd9dafdfdfde6a5b7dd0046d7104bfdfdfdfdfdfdfdfdfd575452b8b3c1dfd9dadfd9dafdfdfd -fdfdfdfdfdfddfd9dadd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da -8d8b8e0d0c090d0c090d0c095754525754525754525754525754528d8b8eb8b3c18d8b8e0d0c09 -0d0c098d8b8eb8b3c1dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da8d8b8eb8b3c1575452575452b8b3c1 -b8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dab8b3c1dfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046b015340d0c090d0c090d0c098d8b8e8d8b8e8d8b8e5754520d0c09 -0d0c09575452a6385add0046d7104bfdfdfdfdfdfddfd9da5754528d8b8edfd9dadfd9dafdfdfd -dfd9dafdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8e5754520d0c09 -0d0c090d0c090d0c090d0c090d0c095754528d8b8e8d8b8e8d8b8e8d8b8e5754520d0c090d0c09 -0d0c090d0c090d0c090d0c095754528d8b8eb8b3c1dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8eb8b3c18d8b8e8d8b8e8d8b8e -b8b3c1dfd9dadfd9dab8b3c1dfd9dab8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046dd0046b01534b01534b01534d7104bd7104be02c5cb01534b01534 -b01534b01534dd0046dd0046dd0046e02c5ce02c5cd7104bb01534e02c5ce02c5ce02c5ce02c5c -e02c5ce02c5cd7104bdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104b5754525754520d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c095754525754520d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452575452b8b3c1fdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c18d8b8e8d8b8eb8b3c1b8b3c1 -b8b3c1dfd9dadfd9dab8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452b8b3c1fdfdfd -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8d8b8e8d8b8e8d8b8eb8b3c1 -dfd9dadfd9dab8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046b015345754525754525754525754520d0c09575452575452575452 -575452575452b01534dd0046e02c5ce6a5b7e6a5b75754520d0c090d0c090d0c090d0c09e6a5b7 -e6a5b7e6a5b7e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09575452 -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9da5754528d8b8e8d8b8e -b8b3c18d8b8eb8b3c1b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a5754525754525754520d0c090d0c090d0c09575452575452 -575452575452a6385add0046e02c5cfdfdfd8d8b8e0d0c090d0c090d0c090d0c090d0c09575452 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c09575452dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb8b3c15754528d8b8e8d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8e5754520d0c09575452575452575452575452 -575452575452a6385add0046e02c5cfdfdfd8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1575452575452 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c098d8b8efdfdfdfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e5754528d8b8e8d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8edfd9dadfd9dadfd9dab8b3c18d8b8e8d8b8e -8d8b8e575452a6385add0046e02c5cfdfdfdb8b3c18d8b8edfd9dadfd9dadfd9dab8b3c1575452 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c09575452fdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8eb8b3c15754525754528d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1dfd9dadfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8eb8b3c1dfd9dadfd9da8d8b8e8d8b8e8d8b8e -575452575452a6385add0046e02c5cfdfdfddfd9da8d8b8e8d8b8eb8b3c18d8b8eb8b3c1b8b3c1 -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c09575452fdfdfddfd9dadfd9dadfd9dab8b3c18d8b8edfd9dab8b3c18d8b8e8d8b8e -8d8b8e8d8b8eb8b3c1b8b3c1dfd9dadfd9dadfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8eb8b3c1b8b3c18d8b8e8d8b8e8d8b8eb8b3c1 -575452575452a6385add0046e02c5cfdfdfdfdfdfd8d8b8e8d8b8eb8b3c1b8b3c1b8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c098d8b8edfd9dafdfdfdfdfdfddfd9dadfd9dadfd9dab8b3c1dfd9dafdfdfdb8b3c18d8b8e -b8b3c1b8b3c1b8b3c1dfd9dadfd9dadfd9dab8b3c18d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e575452b8b3c1dfd9da5754528d8b8eb8b3c1b8b3c1 -8d8b8e575452a6385add0046e02c5cfdfdfdfdfdfdb8b3c18d8b8eb8b3c1b8b3c1b8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -b8b3c1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dadfd9dadfd9dadfd9dab8b3c1fdfdfddfd9da -dfd9dadfd9dadfd9dadfd9dadfd9dadfd9dab8b3c18d8b8e8d8b8eb8b3c1dfd9dafdfdfdfdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e575452b8b3c1dfd9dab8b3c18d8b8eb8b3c18d8b8e -8d8b8e575452a6385add0046e02c5cfdfdfdfdfdfd8d8b8e5754525754528d8b8e8d8b8e575452 -dfd9dafdfdfde6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c098d8b8e5754520d0c090d0c090d0c090d0c090d0c09b8b3c1 -fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dafdfdfddfd9da8d8b8e575452dfd9dafdfdfd -dfd9dadfd9dadfd9dafdfdfddfd9dafdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8eb8b3c1fdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385a8d8b8e8d8b8e8d8b8edfd9dab8b3c18d8b8e8d8b8e8d8b8e -575452575452a6385add0046e02c5c8d8b8e0d0c090d0c095754528d8b8e8d8b8e8d8b8e0d0c09 -0d0c09575452a6385add0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c09dfd9da8d8b8e0d0c090d0c090d0c090d0c098d8b8efdfdfd -dfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dafdfdfdb8b3c18d8b8e8d8b8e8d8b8eb8b3c1 -8d8b8edfd9dafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfd9dadfd9dafdfdfd -fdfdfdfdfdfde6a5b7dd0046a6385ab8b3c18d8b8e5754528d8b8edfd9da8d8b8e575452575452 -0d0c09575452a6385add0046b015340d0c090d0c090d0c090d0c098d8b8e8d8b8e8d8b8e575452 -0d0c090d0c090d0c09dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015340d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c095754525754520d0c090d0c090d0c09575452b8b3c1dfd9da -dfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dab8b3c1dfd9dab8b3c1b8b3c1b8b3c1b8b3c1 -b8b3c18d8b8edfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9dadfd9da -dfd9dadfd9dae6a5b7dd0046a6385a5754525754525754525754528d8b8eb8b3c18d8b8e575452 -0d0c09575452b01534dd0046b015340d0c090d0c090d0c090d0c09575452b8b3c18d8b8eb8b3c1 -8d8b8e0d0c090d0c09dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bdd0046dd0046dd0046b01534b01534d7104bd7104bd7104bd7104bd7104bd7104b -b01534b01534dd0046dd0046dd0046b01534b01534b01534b01534b01534d7104bd7104bd7104b -d7104bb01534dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046d7104bd7104bd7104bd7104bdd0046dd0046 -dd0046d7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bdd0046dd0046dd0046 -d7104bd7104bd7104bd7104bdd0046dd0046d7104bd7104bd7104bd7104bdd0046dd0046dd0046 -d7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bdd0046dd0046d7104bd7104b -d7104bd7104bd7104bdd0046dd0046d7104bd7104bd7104bdd0046dd0046dd0046dd0046d7104b -d7104bd7104bd7104bdd0046dd0046d7104bd7104bd7104bdd0046dd0046dd0046d7104bd7104b -d7104bd7104bdd0046dd0046dd0046d7104bd7104bd7104bdd0046dd0046dd0046dd0046d7104b -d7104bd7104bdd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cdfd9dafdfdfddfd9da575452575452575452 -5754528d8b8edfd9dafdfdfde6a5b7dd0046e6a5b7fdfdfdfdfdfd8d8b8e0d0c090d0c090d0c09 -0d0c09b8b3c1fdfdfddfd9dadd0046e02c5cdfd9dafdfdfdb8b3c10d0c090d0c090d0c090d0c09 -575452dfd9dafdfdfde6a5b7dd0046e6a5b7fdfdfdb8b3c18d8b8e8d8b8e575452575452b8b3c1 -fdfdfddfd9dadfd9dad7104bd7104bdfd9dafdfdfd5754520d0c090d0c090d0c090d0c098d8b8e -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfddfd9da5754525754528d8b8e8d8b8e8d8b8edfd9da -fdfdfdfdfdfde16e8fdd0046b015348d8b8eb8b3c15754525754520d0c090d0c09575452575452 -b8b3c1b8b3c1e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfddfd9da8d8b8e8d8b8eb8b3c1 -8d8b8e575452dfd9dafdfdfde6a5b7dd0046dfd9dafdfdfddfd9da0d0c090d0c090d0c090d0c09 -0d0c090d0c09fdfdfdfdfdfddd0046e02c5cfdfdfdfdfdfd5754525754528d8b8e8d8b8e575452 -0d0c098d8b8efdfdfde6a5b7dd0046dfd9dafdfdfdb8b3c1b8b3c1dfd9dab8b3c1575452575452 -fdfdfdfdfdfdfdfdfdd7104bd7104bfdfdfddfd9da0d0c09575452b8b3c1b8b3c15754520d0c09 -fdfdfdfdfdfddfd9dadd0046e16e8ffdfdfdb8b3c1575452b8b3c1dfd9dadfd9dab8b3c18d8b8e -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c18d8b8e0d0c095754520d0c095754520d0c090d0c09 -b8b3c1dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8edfd9dafdfdfd -fdfdfddfd9dadfd9dafdfdfde6a5b7dd0046dfd9dafdfdfd8d8b8e0d0c090d0c09575452575452 -575452575452dfd9dafdfdfddd0046e02c5cfdfdfdb8b3c1575452fdfdfdfdfdfdfdfdfddfd9da -575452575452fdfdfde6a5b7dd0046dfd9dafdfdfddfd9dadfd9dadfd9dadfd9da8d8b8e575452 -fdfdfdfdfdfdfdfdfdd7104bd7104bfdfdfd8d8b8e0d0c09dfd9dafdfdfdfdfdfddfd9da0d0c09 -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfd5754528d8b8edfd9dadfd9dafdfdfddfd9da575452 -b8b3c1fdfdfde16e8fdd0046d7104bb8b3c1575452575452b8b3c1dfd9dadfd9dab8b3c10d0c09 -575452dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfd8d8b8e8d8b8eb8b3c1fdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfd8d8b8e5754528d8b8e8d8b8edfd9da -dfd9da8d8b8edfd9dafdfdfddd0046e02c5cfdfdfddfd9da8d8b8e8d8b8eb8b3c1b8b3c1575452 -575452575452fdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dadfd9dadfd9dab8b3c18d8b8e575452 -dfd9dafdfdfdfdfdfdd7104bd7104bfdfdfdb8b3c18d8b8edfd9dafdfdfddfd9dadfd9da575452 -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfd8d8b8e8d8b8eb8b3c1dfd9dadfd9dab8b3c18d8b8e -dfd9dafdfdfde16e8fdd0046b01534b8b3c1575452b8b3c1fdfdfdfdfdfdfdfdfdb8b3c1575452 -575452dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cfdfdfdfdfdfd8d8b8e8d8b8e8d8b8eb8b3c1 -dfd9dadfd9dafdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfd8d8b8eb8b3c15754525754528d8b8e -8d8b8e8d8b8efdfdfddfd9dadd0046e02c5cfdfdfddfd9da8d8b8e8d8b8eb8b3c1b8b3c18d8b8e -8d8b8e575452fdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dab8b3c1b8b3c1b8b3c1b8b3c1575452 -b8b3c1fdfdfdfdfdfdd7104bd7104bfdfdfddfd9da8d8b8e5754528d8b8e8d8b8e8d8b8e8d8b8e -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfdb8b3c18d8b8e8d8b8eb8b3c18d8b8e8d8b8e8d8b8e -fdfdfdfdfdfde16e8fdd0046b015348d8b8eb8b3c1b8b3c18d8b8eb8b3c18d8b8e575452575452 -8d8b8edfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5cdfd9da8d8b8e8d8b8eb8b3c18d8b8eb8b3c1 -b8b3c1dfd9dafdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfdb8b3c1b8b3c1b8b3c18d8b8e8d8b8e -8d8b8edfd9dafdfdfddfd9dadd0046e02c5cfdfdfdfdfdfddfd9dafdfdfdfdfdfddfd9dadfd9da -8d8b8e575452fdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dadfd9dab8b3c1dfd9dab8b3c18d8b8e -dfd9dafdfdfdfdfdfdd7104bd7104bfdfdfdfdfdfdb8b3c1b8b3c1b8b3c1b8b3c1b8b3c1b8b3c1 -dfd9dafdfdfde6a5b7dd0046e16e8ffdfdfdb8b3c18d8b8edfd9dab8b3c1dfd9dadfd9dab8b3c1 -fdfdfdfdfdfde16e8fdd0046d7104b8d8b8eb8b3c1fdfdfddfd9dadfd9da8d8b8eb8b3c1575452 -b8b3c1dfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046e02c5c5754525754528d8b8e8d8b8e8d8b8edfd9da -dfd9dafdfdfdfdfdfdfdfdfde6a5b7dd0046dfd9dafdfdfddfd9da8d8b8e8d8b8e575452b8b3c1 -b8b3c1fdfdfdfdfdfddfd9dadd0046e02c5cfdfdfdfdfdfdfdfdfddfd9dadfd9da8d8b8eb8b3c1 -b8b3c1dfd9dafdfdfde6a5b7dd0046e6a5b7fdfdfddfd9dadfd9dab8b3c1dfd9dab8b3c1b8b3c1 -fdfdfdfdfdfdfdfdfdd7104bd7104bfdfdfdfdfdfddfd9dadfd9dab8b3c1b8b3c1dfd9dadfd9da -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfddfd9da8d8b8e8d8b8e8d8b8e8d8b8eb8b3c1b8b3c1 -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c1b8b3c1dfd9dadfd9dab8b3c15754528d8b8e8d8b8e -dfd9dadfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015345754525754528d8b8e8d8b8e8d8b8edfd9da -dfd9dab8b3c1dfd9dafdfdfde6a5b7dd0046dfd9dafdfdfdb8b3c18d8b8e8d8b8e8d8b8eb8b3c1 -b8b3c1fdfdfdfdfdfddfd9dadd0046e02c5cfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e8d8b8e -dfd9dafdfdfdfdfdfde6a5b7dd0046e6a5b7fdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8e8d8b8e -dfd9dafdfdfdfdfdfdd7104bd7104bfdfdfdfdfdfddfd9dab8b3c18d8b8e8d8b8eb8b3c1dfd9da -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfdfdfdfd5754525754528d8b8e8d8b8e575452dfd9da -fdfdfdfdfdfde16e8fdd0046d7104bb8b3c1b8b3c1dfd9dadfd9dadfd9da8d8b8e8d8b8e8d8b8e -b8b3c1b8b3c1e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015345754525754528d8b8e575452b8b3c1dfd9da -8d8b8e5754528d8b8efdfdfde6a5b7dd0046dfd9dafdfdfdfdfdfd8d8b8e5754528d8b8eb8b3c1 -dfd9dafdfdfdfdfdfddfd9dadd0046e02c5cfdfdfdfdfdfdfdfdfdb8b3c1b8b3c1b8b3c18d8b8e -b8b3c1fdfdfdfdfdfde6a5b7dd0046e6a5b7fdfdfdfdfdfddfd9dab8b3c18d8b8e8d8b8e575452 -8d8b8edfd9dafdfdfdd7104bd7104bfdfdfdfdfdfddfd9da8d8b8eb8b3c1b8b3c1b8b3c1b8b3c1 -fdfdfdfdfdfde6a5b7dd0046e16e8ffdfdfdfdfdfd5754525754528d8b8e575452575452fdfdfd -fdfdfdfdfdfde16e8fdd0046e02c5cdfd9dafdfdfdfdfdfddfd9dadfd9dab8b3c18d8b8e575452 -575452b8b3c1e16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046b015345754525754528d8b8e8d8b8eb8b3c18d8b8e -575452575452575452b8b3c1e6a5b7dd0046dfd9dafdfdfddfd9dadfd9da8d8b8e8d8b8e575452 -b8b3c1fdfdfdfdfdfdfdfdfddd0046e02c5cfdfdfdfdfdfdb8b3c18d8b8e8d8b8e575452575452 -0d0c09dfd9dafdfdfde6a5b7dd0046dfd9dafdfdfdfdfdfddfd9dab8b3c1b8b3c18d8b8e575452 -5754525754528d8b8ed7104bd7104bfdfdfddfd9da5754528d8b8e5754525754528d8b8e575452 -8d8b8efdfdfddfd9dadd0046e16e8fdfd9da5754528d8b8e5754525754525754528d8b8e8d8b8e -dfd9dafdfdfde16e8fdd0046e02c5cfdfdfdfdfdfdfdfdfddfd9dab8b3c18d8b8e5754528d8b8e -8d8b8edfd9dae6a5b7dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104b5754525754528d8b8ee6a5b78d8b8e575452 -575452575452575452575452a6385add0046e6a5b7b8b3c1b8b3c1e6a5b7e6a5b7b8b3c1575452 -575452e6a5b7dfd9dae6a5b7dd0046e02c5cb8b3c18d8b8e8d8b8e8d8b8eb8b3c18d8b8e0d0c09 -0d0c090d0c098d8b8ee16e8fdd0046e6a5b7dfd9dae6a5b78d8b8e8d8b8eb8b3c1575452575452 -5754525754520d0c09dd0046d7104b8d8b8e575452575452b8b3c15754525754528d8b8e575452 -0d0c098d8b8ee16e8fdd0046a6385a5754520d0c098d8b8eb8b3c18d8b8eb8b3c1b8b3c1575452 -0d0c09575452a6385add0046e02c5cdfd9dadfd9dadfd9dab8b3c1b8b3c18d8b8e8d8b8e8d8b8e -8d8b8edfd9dae16e8fdd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e16e8fe16e8fe6a5b7d7104b -e02c5ce6a5b7e16e8fe16e8fdd0046dd0046e16e8fe16e8fe16e8fe16e8fdd0046dd0046e16e8f -e6a5b7e16e8fdd0046e16e8fe6a5b7e16e8fd7104be02c5ce16e8fe16e8fd7104bd7104be16e8f -e16e8fe02c5cdd0046e6a5b7e02c5cdd0046e02c5ce16e8fe16e8fe6a5b7e02c5cdd0046e16e8f -e16e8fdd0046d7104be16e8fdd0046dd0046e16e8fe16e8fdd0046dd0046e16e8fe16e8fdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dfd9dae16e8fdfd9dae16e8f -e02c5cdfd9dae02c5cfdfdfdd7104be02c5cdfd9dad7104bdd0046dfd9dae16e8fdd0046dfd9da -e16e8fd7104bdd0046e6a5b7e6a5b7d7104bdd0046e6a5b7e16e8fd7104bdd0046e16e8fe6a5b7 -d7104bd7104bdd0046dfd9dae16e8fdd0046dfd9dae16e8fdd0046e16e8fdfd9dadd0046e16e8f -fdfdfde16e8fdd0046e16e8fdd0046dd0046dfd9dadfd9dadd0046dd0046e6a5b7e6a5b7dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e6a5b7e6a5b7e6a5b7e02c5c -e02c5cdfd9dae6a5b7e16e8fdd0046e6a5b7e6a5b7dd0046dd0046e16e8fdfd9dadd0046e6a5b7 -e6a5b7e16e8fdd0046e6a5b7dfd9dae16e8fdd0046e16e8ffdfdfde6a5b7d7104be02c5cdfd9da -dfd9dae02c5cdd0046dfd9dae02c5ce02c5cfdfdfddd0046dd0046e02c5cfdfdfdd7104be16e8f -e16e8ffdfdfde16e8fe16e8fdd0046e02c5ce16e8fdfd9dae02c5cdd0046e6a5b7e16e8fdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dfd9dae16e8fdd0046dd0046 -e02c5cdfd9dadfd9dae16e8fdd0046e16e8fdfd9dadd0046dd0046e6a5b7e6a5b7dd0046dfd9da -e16e8fdd0046dd0046e6a5b7e6a5b7dd0046dd0046dd0046e02c5cdfd9dae16e8fdd0046d7104b -e6a5b7e6a5b7dd0046dfd9dae02c5cd7104bfdfdfde02c5cdd0046e02c5cfdfdfddd0046e16e8f -d7104be16e8ffdfdfde6a5b7dd0046e16e8fe16e8fdfd9dae6a5b7dd0046e6a5b7e16e8fdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dfd9dae16e8fdd0046dd0046 -e02c5cdfd9dae02c5cdfd9dae02c5cd7104be6a5b7e16e8fe16e8fe6a5b7e02c5cdd0046dfd9da -e16e8fdd0046dd0046e6a5b7e6a5b7e16e8fdd0046e16e8fe16e8fe6a5b7e02c5ce02c5ce16e8f -e16e8fe16e8fdd0046dfd9dae16e8fdd0046e16e8fe6a5b7e02c5ce6a5b7e16e8fdd0046e16e8f -e02c5cdd0046e16e8fe6a5b7d7104be16e8fdd0046e02c5cdfd9dadd0046e6a5b7e6a5b7e16e8f -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd7104bdd0046dd0046 -dd0046d7104bdd0046d7104bd7104bdd0046dd0046e02c5ce02c5cdd0046dd0046dd0046d7104b -d7104bdd0046dd0046d7104be02c5ce02c5cdd0046d7104be02c5cd7104bdd0046d7104be02c5c -e02c5cdd0046dd0046d7104bd7104bdd0046dd0046e02c5ce02c5cd7104bdd0046dd0046d7104b -dd0046dd0046dd0046d7104bdd0046d7104bdd0046dd0046d7104bdd0046d7104be02c5ce02c5c -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104be02c5cdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427d86427 -e02c5ce02c5cd86427d86427e02c5cdd0046dd0046dd0046dd0046e02c5cf9f302f9f302d8ac0f -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427f9f302 -f9f302f9f302f9f302d8ac0fb01534dd0046dd0046dd0046dd0046d86427f9f302f9f302f9f302 -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046d7104bd8ac0fd8ac0fd86427 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046b01534d86427 -dd0046dd0046dd0046dd0046d7104bd86427dd0046d7104bd86427d86427e02c5cdd0046dd0046 -d7104be02c5ce02c5ce02c5ce02c5cdd0046d7104be02c5ce02c5ce02c5ce02c5cdd0046e02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5cdd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427f9f302d8ac0f -dd0046dd0046d7104bd86427f9f302f9f302d86427d8ac0ff9f302f9f302f9f302d86427dd0046 -e02c5cd8ac0ff9f302f9f302f9f302d7104be02c5cd8ac0ff9f302f9f302f9f302d7104bd86427 -d8ac0ff9f302f9f302f9f302f9f302a6385ae02c5cd8ac0ff9f302d8ac0fd86427dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046d86427f9f302f9f302f9f302d8ac0f -dd0046e02c5cd8ac0ff9f302f9f302f9f302d86427b01534b01534f9f302f9f302f9f302e02c5c -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -d7104bd8ac0ff9f302f9f302f9f302d7104bdd0046d8ac0fd8ac0fb01534dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046d86427f9f302f9f302d8ac0f -dd0046dd0046b01534f9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302d86427 -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046d7104bf9f302f9f302f9f302d8ac0fd86427d8ac0fb01534dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d8ac0f -dd0046dd0046dd0046f9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046dd0046e02c5cf9f302f9f302f9f302f9f302b01534dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d8ac0f -dd0046dd0046d7104bf9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046dd0046dd0046d8ac0ff9f302f9f302f9f302d86427dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046dd0046e02c5cd7104be02c5cf9f302f9f302d8ac0f -dd0046dd0046d7104bf9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046f9f302f9f302f9f302d7104bdd0046dd0046f9f302f9f302f9f302d7104bdd0046 -dd0046dd0046e02c5cd8ac0fd8ac0ff9f302f9f302f9f302e02c5cdd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427 -f9f302f9f302d8ac0fdd0046dd0046dd0046e02c5cf9f302b01534d7104bf9f302f9f302d8ac0f -dd0046dd0046dd0046f9f302f9f302f9f302dd0046dd0046dd0046d8ac0ff9f302f9f302a6385a -dd0046dd0046d8ac0ff9f302f9f302e02c5cdd0046e02c5cf9f302f9f302f9f302d7104bdd0046 -dd0046d7104bf9f302a6385add0046d8ac0ff9f302f9f302f9f302d7104bdd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302 -f9f302f9f302f9f302d86427e02c5cd86427f9f302f9f302b01534d86427f9f302f9f302f9f302 -e02c5cd7104bd86427f9f302f9f302f9f302d86427dd0046e02c5cf9f302f9f302f9f302d8ac0f -e02c5cdd0046d86427f9f302f9f302f9f302d8ac0fd8ac0ff9f302f9f302f9f302d8ac0fe02c5c -d86427f9f302f9f302d7104bdd0046d86427f9f302f9f302f9f302d8ac0fe02c5cdd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd8ac0fd8ac0f -d8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd86427d8ac0fd8ac0fd8ac0fd8ac0f -d8ac0fd86427d8ac0fd8ac0fd8ac0fd8ac0fd8ac0fb01534d8ac0fd8ac0fd8ac0fd8ac0fd8ac0f -d86427dd0046dd0046d86427d8ac0fd8ac0fd86427b01534d8ac0fd8ac0fd86427b01534d86427 -d8ac0fd8ac0fd8ac0fd86427e02c5cd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd8ac0fd7104bdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046b01534dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427d86427dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046e02c5cd8ac0fd8ac0fd8ac0fd86427d8ac0f -d8ac0fd86427dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d7104bdd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046d86427f9f302f9f302b01534e02c5c -f9f302f9f302e02c5cdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104b -dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bd86427d86427dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046d7104bdd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302dd0046dd0046 -f9f302f9f302d86427e02c5cd8ac0fd86427d8ac0fd8ac0fd7104bd7104bd86427d86427d8ac0f -d8ac0fe02c5cdd0046dd0046d86427d8ac0fd86427d8ac0fd86427d86427d7104be02c5cd8ac0f -d86427f9f302d8ac0fdd0046d86427d8ac0fd8ac0fd8ac0fe02c5cdd0046d7104bd86427d8ac0f -d86427d8ac0fd8ac0fd86427d8ac0ff9f302d8ac0fe02c5cdd0046d7104bd86427d8ac0fd86427 -d8ac0fd8ac0fd86427d86427d8ac0fd8ac0fe02c5cdd0046d7104bd86427d8ac0fdd0046d7104b -d86427d8ac0fd86427d8ac0ff9f302d86427dd0046dd0046d86427d8ac0fd86427d8ac0fd86427 -d86427d7104bdd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d7104bd86427 -f9f302f9f302a6385af9f302f9f302d8ac0fd8ac0ff9f302a6385ad8ac0ff9f302b01534dd0046 -f9f302f9f302e02c5cd86427f9f302d86427dd0046d8ac0ff9f302d86427d86427f9f302f9f302 -d8ac0ff9f302d8ac0fd8ac0ff9f302a6385ae02c5cf9f302d8ac0fd7104bd8ac0ff9f302d8ac0f -b01534d86427f9f302d8ac0fb01534d86427f9f302d8ac0fdd0046d8ac0ff9f302f9f302b01534 -d86427f9f302f9f302b01534d86427f9f302d8ac0fdd0046d86427f9f302f9f302dd0046d86427 -f9f302f9f302a6385ab01534f9f302f9f302e02c5ce02c5cf9f302d8ac0fb01534d86427f9f302 -d8ac0fb01534dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302d86427d8ac0f -d8ac0fa6385add0046d8ac0ff9f302d86427d7104bb01534d86427f9f302d8ac0fdd0046dd0046 -d86427f9f302d8ac0fd8ac0ff9f302d86427dd0046d8ac0ff9f302d86427dd0046f9f302f9f302 -b01534b01534b01534a6385ab01534d7104bd86427f9f302d8ac0fdd0046e02c5cf9f302d8ac0f -dd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046 -e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046d7104bf9f302f9f302dd0046dd0046 -f9f302f9f302d7104bdd0046d8ac0ff9f302a6385ad86427f9f302d8ac0fdd0046d86427f9f302 -d86427dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302b01534b01534 -b01534dd0046dd0046d8ac0ff9f302d86427dd0046dd0046d86427f9f302d8ac0fdd0046dd0046 -d86427f9f302d8ac0fd7104bf9f302d8ac0fe02c5cf9f302d8ac0fb01534dd0046f9f302f9f302 -b01534dd0046dd0046d7104bd8ac0fd8ac0fd86427f9f302d8ac0fdd0046e02c5cf9f302d8ac0f -dd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046 -e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046d7104bf9f302f9f302dd0046dd0046 -f9f302f9f302d7104bdd0046d8ac0ff9f302a6385ad7104bd8ac0ff9f302e02c5cd8ac0ff9f302 -b01534dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cf9f302f9f302dd0046dd0046 -dd0046dd0046dd0046d8ac0ff9f302d86427dd0046dd0046e02c5cf9f302f9f302dd0046dd0046 -d86427f9f302d86427d7104bd8ac0fd8ac0fd86427d86427b01534dd0046dd0046f9f302f9f302 -b01534dd0046dd0046d8ac0ff9f302b01534d86427f9f302d8ac0fd7104be02c5cf9f302d8ac0f -dd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046 -e02c5cf9f302d8ac0fdd0046e02c5cf9f302d8ac0fdd0046d7104bf9f302f9f302dd0046dd0046 -f9f302f9f302d7104bdd0046d8ac0ff9f302e02c5cd7104bd8ac0ff9f302d86427d86427b01534 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046d7104bd8ac0ff9f302f9f302d86427dd0046 -dd0046dd0046e02c5cd8ac0ff9f302d8ac0fd7104bdd0046dd0046d86427f9f302d8ac0fd86427 -d8ac0fd86427dd0046e02c5cf9f302f9f302f9f302f9f302f9f302d86427d86427f9f302f9f302 -d86427d7104bdd0046d8ac0ff9f302d8ac0fd86427f9f302f9f302d86427d8ac0ff9f302f9f302 -e02c5cd86427f9f302f9f302e02c5cd8ac0ff9f302f9f302d86427d86427f9f302f9f302e02c5c -d86427f9f302f9f302e02c5cd86427f9f302f9f302d86427d86427f9f302f9f302d86427d86427 -f9f302f9f302d86427e02c5cf9f302f9f302d8ac0fd7104bd8ac0ff9f302f9f302f9f302f9f302 -d8ac0fdd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046d7104ba6385ab01534b01534a6385add0046 -dd0046dd0046d7104ba6385ab01534a6385ab01534dd0046dd0046dd0046b01534a6385aa6385a -b01534dd0046dd0046e02c5cd8ac0fd8ac0fd8ac0fd8ac0ff9f302f9f302a6385ab01534b01534 -a6385ad7104bdd0046d7104ba6385ab01534dd0046b01534b01534d7104ba6385ab01534a6385a -b01534a6385ab01534a6385ab01534a6385ab01534b01534a6385aa6385ab01534a6385ab01534 -a6385ab01534b01534b01534a6385ab01534b01534a6385aa6385ab01534b01534a6385aa6385a -b01534b01534b01534b01534a6385ab01534a6385ae02c5cd8ac0fd8ac0fd8ac0fd8ac0ff9f302 -f9f302e02c5cdd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046f9f302f9f302dd0046dd0046dd0046f9f302d8ac0fdd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046d8ac0ff9f302d7104bdd0046dd0046d8ac0f -f9f302b01534dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046e02c5cd8ac0fd8ac0fd86427d86427d86427b01534dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5cd8ac0fd8ac0fd86427d86427d8ac0f -b01534dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046b01534b01534b01534dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046b01534b01534b01534dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bd7104bd7104bd7104bd7104bd7104bdd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bdfd9dadfd9dadfd9dadfd9dadfd9dadfd9da -dfd9dadfd9dadfd9dadfd9dae16e8fe02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104bdd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfde6a5b7dfd9da -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfde6a5b7d7104b -e6a5b7fdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -e02c5cd7104be02c5ce02c5cd7104be02c5ce02c5cd7104be02c5ce02c5ce02c5cd7104bd7104b -d7104bd7104bdd0046dd0046d7104bd7104bd7104be02c5cd7104be16e8fe02c5cd7104be02c5c -e02c5cd7104bd7104bd7104be02c5cd7104be02c5ce02c5cd7104bd7104bd7104bd7104bd7104b -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfde6a5b7fdfdfde6a5b7 -b01534e6a5b7fdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046e02c5c -e16e8fe16e8fe02c5ce02c5cd7104be16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8fe16e8f -e02c5ce16e8fd7104be02c5ce16e8fe16e8fe16e8fe02c5cd7104be16e8fe02c5ce02c5ce02c5c -e16e8fe16e8fe16e8fe02c5ce16e8fd7104be02c5ce16e8fe02c5ce16e8fe16e8fe16e8fe16e8f -e02c5cdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfde16e8fdfd9dafdfdfdfdfdfd -e6a5b7b01534e6a5b7fdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -d7104bd7104bd7104bd7104bdd0046d7104bd7104be02c5cd7104bd7104bd7104bd7104bd7104b -d7104bd7104bdd0046d7104bd7104bd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104b -d7104be02c5cd7104bd7104bd7104bdd0046d7104bd7104bd7104bd7104bd7104bd7104bd7104b -d7104bdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfde6a5b7e02c5ce16e8fe02c5ce02c5c -e02c5cb01534e02c5cfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bdfd9dae02c5ce02c5ce02c5ce16e8fe16e8f -e6a5b7e6a5b7e6a5b7fdfdfde16e8fdd0046e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104b -e02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5cd7104be02c5ce02c5ce02c5cdd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bdfd9dae6a5b7dfd9dafdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046d7104be02c5cd7104bd7104bd7104bd7104be02c5c -e02c5ce02c5cd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104bd7104be02c5ce02c5c -d7104bd7104bd7104bd7104be02c5cd7104be02c5cd7104bd7104be02c5ce02c5cd7104bd7104b -d7104bd7104be02c5ce02c5ce02c5cd7104bd7104be02c5cd7104bd7104bd7104bd7104bd7104b -d7104be02c5ce02c5cd7104bd7104bd7104be02c5cd7104bd7104bd7104bd7104bd7104bd7104b -e02c5cd7104bd7104bd7104be02c5ce02c5ce02c5cd7104bd7104bd7104be02c5ce02c5cd7104b -d7104be02c5cd7104bd7104bd7104bd7104bdd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdb8b3c15754525754525754528d8b8e -5754525754528d8b8efdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfddfd9dab8b3c1b8b3c1dfd9dadfd9da -b8b3c1b8b3c1b8b3c1fdfdfde16e8fdd0046dd0046dd0046dd0046e02c5ce02c5ce02c5ce02c5c -d7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5c -e02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5cd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5cd7104be02c5ce02c5c -e02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5ce02c5c -e02c5ce02c5ce02c5cd7104bdd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046d7104be02c5ce02c5ce02c5c -d7104bd7104bd7104be02c5ce02c5ce02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5c -d7104bd7104be02c5ce02c5ce02c5cd7104bd7104be02c5cd7104be02c5cd7104be02c5ce02c5c -e02c5cd7104be02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5cd7104bd7104b -e02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5ce02c5cd7104bd7104bd7104be02c5c -e02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5cd7104bd7104be02c5ce02c5ce02c5c -e02c5ce02c5ce02c5cd7104bdd0046dd0046dd0046dd00460d0c09 -0d0c09dd0046dd0046dd0046dd0046dd0046d7104bfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd -fdfdfdfdfdfdfdfdfdfdfdfde16e8fdd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd0046 -dd0046dd0046dd0046dd0046dd0046dd0046dd0046dd00460d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -0d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c090d0c09 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/prof.gif b/Docs/Books/prof.gif Binary files differdeleted file mode 100644 index 8bb86295ab7..00000000000 --- a/Docs/Books/prof.gif +++ /dev/null diff --git a/Docs/Books/prof.txt b/Docs/Books/prof.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/prof.txt +++ /dev/null diff --git a/Docs/Books/pthreads.eps b/Docs/Books/pthreads.eps deleted file mode 100644 index 183b792c639..00000000000 --- a/Docs/Books/pthreads.eps +++ /dev/null @@ -1,1212 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/pthreads.eps -%%CreationDate: Sun Dec 31 14:31:11 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 296 383 -%%EndComments -%%BeginPreview: 100 131 1 131 -% fffffffffffffffffffffffff0 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000008000000000000000010 -% 80000020000004028000000010 -% 80000044110004020000000010 -% 80000010511325224989251010 -% 80000083111249024099082010 -% 80000020000020200a00000010 -% 80000000000000000100002010 -% 80002000000000000000000010 -% 80004000000000000000000010 -% 80020800880000400808830010 -% 80002008000102100000048010 -% 80000009400100000008500010 -% 80020000000092406000008010 -% 80100008404000000008080010 -% 80002000080140400200022010 -% 80420008400000044849008010 -% 80004800000141410000140010 -% 80000000000000000000000010 -% 80020000000000000000000010 -% 80100000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000004000000000000000010 -% 80000004000000000000000010 -% 8000000d000000000000000010 -% 8000000c080000000000000010 -% 8000000d947000000000000010 -% 8000000f68a000000098000010 -% 8000000ca87800000000000010 -% 80000007208000000000000010 -% 80000004a1cc00000094800010 -% 80000001564200000000000010 -% 800000065a4200000000000010 -% 8000000b604400000005c00010 -% 8000000d904200000080000010 -% 8000000b784100000000000010 -% 8000000d466600000000000010 -% 8000000d846200000000000010 -% 8000141d223600000000000010 -% 8000fb9f932c000100a2ca0010 -% 80034e9ea13c00029002000010 -% 800ef79b2934000b3000000010 -% 8017570c919c0008e5baac0010 -% 802eed0c91980005c000000010 -% 8017ba4f8da8000a8000000010 -% 8015c4ad034c0012036d700010 -% 800f725f42e40027004a500010 -% 8007d4bb802c00280000000010 -% 80036836ac14004b8000000010 -% 8007dead180800910000000010 -% 8006ffdfba0e01480000000010 -% 8003dffd370405b00391000010 -% 80015dff7f0605e00028000010 -% 8002afdb360209600000000010 -% 80058fb7e90611b00000000010 -% 800abdff7401010802e4e80010 -% 800557eff40340b00000000010 -% 80010fbeac8281c00000000010 -% 8006abfb770182400164000010 -% 800d5fefd40286c00000000010 -% 8035ebfff50504f00000000010 -% 807f7d5dd3f94d800000000010 -% 8005d7a7bed60d000000000010 -% 800bbfffed7fdb000000000010 -% 801ef77f76b5fe4000d3a00010 -% 8035adebaf7f7e000000000010 -% 800b6f7f7eebda800000000010 -% 80005aefdbdf740402ab400010 -% 80005f7b7ef5b0000090000010 -% 8002d2def7bb80000000000010 -% 8000ab75beee20040000000010 -% 8002aa8437b4011002a8000010 -% 80055500d5ea01000000000010 -% 8000014012a804000000000010 -% 80000a9a04e000000000000010 -% 800024a0000000000000000010 -% 8000552a400000400000080010 -% 800092ec8000000001de580010 -% 8000553e040000000000000010 -% 8000a4b4420000000000000010 -% 8000aaa1040000000154a80010 -% 8000552c580000040000000010 -% 80001ca2a00000080000000010 -% 80001faac00000100179b00010 -% 80003bffc00000800000000010 -% 8000dfdb400013000000000010 -% 8002af76d00110000000000010 -% 800dfeedd56880000000000010 -% 80375bfb280000000000000010 -% 802af7dec41200000000000010 -% 8035feba7c4000000184000010 -% 802b5bf54900000003cfc00010 -% 800d6fa97000000003c9400010 -% 8003b77f8000000001cf400010 -% 80005ab9000000000008000010 -% 80000240000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% 80000000000000000000000010 -% ffffffffffffd4924924924930 -% edb6db6ddddb41249249249250 -% dbedf6df7776d4492492492490 -% febf5fb2dddfa1224924924930 -% d5ebf579b77554881209249250 -% ff7eafd19d15c1202040092490 -% d5d5faffb77b504a9515524930 -% ff7f5faafdd6ca9040a0049250 -% d5d5f5ffab7fd125150aa92490 -% ff7f5f55ffd54448a251124930 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -281.300715 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 131 8 -% Transformation matrix -[ 100 0 0 131 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffffffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffff7ffffffffffff -f7f7f7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7ffffff -f7f7f7fffffffffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffff -f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffefefeffffffffffffff7f7f7 -fffffffffff7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff7f7f7fffffff7f7f7fffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7ffffffff -ffffffefeff7fffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -efefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7ffffffff -fffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffefeff7 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffff7ff -ffffffffffffefeefffffffffffffff7f7f7f7f7f7ffffffffffffffffffefefeffffffff7f7f7 -fffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7fffffffffffffffffffffffff7f7fffff7ffffffffefeeffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d6d6dee7e6ef9991aaffffffffffffffffffffffffefefeff7f7effffffffffffff7f7f7ffffff -fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffefefeffffffff7f7f7fffffffffffffffffffffffffff7ffffffffa8a8b5a8a8b5fff7ff -f7effff7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefeeffdedef0 -979ca9d6d6eb796e82f7f7ffffffffffffffffffffd6d6d6dededed6d6d6f7f7f7e7e7e7f7f7f7 -d6d6d6fffffff7f7f7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -dedede81897cffffffffffffffffffffffffffffffd6d6def7f7f7fff7ff555682e7e6ef7e7b9c -fffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffefefefcbcec5d6d6d6efefefffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c7b7c -cbcedbb7b3c4d6d6eb9c9fc0ffffffefefeff7f7ffd6d6ebd6d6eb67687ccbcedbffffffdedde7 -7c7b7cf7f7ffefeff7d6d6ded6d6ebefeff7efeff7d6d6ebe7e6eff7f7ffffffffdedef0efeff7 -d6d6de7c7b7cffffffdedde7efeeffe7e6efd6d6ded6d6ebf7f7ffffffff7e7b9cd6d6dea8aac6 -e7e3f7f7f7ffefeff7d6d6deefeff7ffffffe7e6efdedde7ffffffefeff7ffffffdedde7efeff7 -efeff7e7e6effff7ffffffffdedde7efeff7ffffffe7e6efffffffe7e6efdedde7fffffff7f7f7 -e7e6efffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7f7fffffffffffff7f7ef -fffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff7ffe7e7e7c8c5d5 -efeff7848e9bd6d6eba5a5a6cbcedb979ca9ffffff9c9fc0bac6d8848e9bcbcedbffffffefeff7 -7e7b9cf7f7ffffffffa8aac667687ccbcedbc4d3ed5556824c5299efeff7dedef05556829c9fc0 -c4d3ed7e86b0d6d6de52457ac4d3edb7b3c47e7b9cd6d6ebfffffff7f7ff796e827e86b0bac6d8 -7e7b9cefeeff9c9fc07e86b0c8c5d5d6d6eb55568252457adedef0d6d6ebbac6d85556829c9fc0 -a8aac67e7b9cffffffdedef07e7b9ccbcedbd6d6eb9c9fc0e7e3f7848e9b9991aaffffffbbc1c8 -9991aaffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffff7fffff7fffff7fffff7fffffff7f7f7fffffffffffff7f7ffffffffffffff7c7b7cdedef0 -bdbdbda8aac6efeff7efeff77e7b9c7e7b9cefeff79c9fc0a8aac67e7b9cbac6d8d6d6dea3c4da -67687cd6d6ebf7f7ffbac6d867687ccbcedbffffff7e86b0555682bac6d89c9fc0555682c4d3ed -b7b3c47e7b9cd6d6eb412f549c9fc0efeeffbac6d8cbcedbf7f7ffffffff67687cffffffdedde7 -67687cffffffbac6d8cbcedbbac6d8a3c4da9c9fc0557085dedef0d6d6eb7e86b0555682979ca9 -d6d6eb9c9fc0ffffffd6d6ebc4d3ede7e3f77e7b9c7e7b9ce1eeffbac6d8ffffffd6d6dea8a8b5 -c8c5d5fffffffffffff7f7ffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff7f7f7fffff7ffffffffffffffffffffffffc6cecef7efff -979ca9ffffffdedef0dedde7979ca9979ca9bbc1c8ffffffa8b9bda8a8b5bac6d8bac6d8cbcedb -9c9fc0cbcedbe7e3f7d6d6deb7b3c4dedef0ffffffbac6d8a8aac6bac6d8a8aac6a8aac6d6d6eb -a8aac6bac6d8e7e3f7979ca9e7e6efd6e6ed9991aabac6d8f7f7ffffffffa8b9bdf7ffffefefef -a8aac6ffffffefeff79c9fc0c8c5d5b7b3c4c4d3eda8aac6efeff7b7b3c4bac6d8b7b3c4bac6d8 -efeff7cbcedbf7f7ffefeeffe7e6efeff7ffb5bdbda8a8b5deedeed6d6ebffffffdedde7848e9b -e7e6effffffffffffffff7ffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7ffe7e7e7e7dde7dedede -d6d6d6cddadadae0d6efefefe7e7e7fffffffffffffffffff7f7f7fffffff7f7ffffffffffffff -fffffff7f7fffffffffffffffffffffffffff7f7fffffffffffffff7fffff7f7ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7fffffffff7f7fff7f7fffffffffffffffffffff7fffffffffffffffff7ffff -f7fffff7f7f7f7fffff7f7ffffffffb7b3c467687ce7e6efffffffffffffffffffffffffffffff -f7fffff7f7fffffffffffffff7fffffffffffffffffffffffffffff7ffffffffffe7e6efa8a8b5 -dedde7ffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffe7e6efe7e7e7efefefefefef -e7e7e7efefefe7e7e7f7f7f7dedede9a9291d6dedefffffff7f7f7ffffffffffffffffffffffff -f7f7ffffffffffffffffffffffffffe7f4f7f7f7f7f7f7f7f7fffffffffffffffff7f7f7ffffff -fffffff7fffffffffffffffff7fffff7fffffffffff7f7fff7f7ffffffffffffffffffffffffff -f7fffff7f7f7ffffffffffffffffffffffffe7f4f7fffffffffffffffff7ffffffffffffffffff -fffffff7fffffffffff7f7f7f7f7fff7ffffa8a8b5deedeeffffffffffffffffffffffffffffff -fffffffffffff7f7fff7ffffffffffefefeff7fff7ffffffe7f2edffffffffffffffffffd6d6de -d6d6defffffffff7ffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffefeff7e7e6efd6d6d6f7f7f7 -f7f7efbdbdbddededec6c6c6a5a5a6efefefaeadadd6d6d6ffffffefefefdedde7cececee7e7e7 -dededed6d6d6d6d6d6cecececececee7e7e7e7f2edcddadacddadacdd8ccd6d6d6f7fff7ddeade -dededec6ceced6d6d6deedeee7f2ede7f2edd6dedec6ceced6d6dededde7bbc1c8efefeff7f7f7 -ffffffe7f4f7cddadad6d6d6c6c6c6d6dededededecbcec5dae0d6fffffffffff7fffffff7fff7 -efefefd6dedecdd8cce7f4f7fffffff7f7f7ffffffffffffd6dedec6cecec6c6c6d6deded6d6d6 -c6ceced6dedefffffffffffffffffff7f7f7f7fff7cdd8ccc6c6c6cdd8ccb7bcadf7fff7f7f7ff -efeff7ffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffefeff7b5b5b5efefef -f7f7f79b9c9cf7f7f7f7f7f7b5b5b5b5b5b5ffffff9b9c9cc6c6c6c6c6c6e7e7e7d6d6d6dedede -f7f7efdedededededecbcec5f7f7f7cececeb5b5b5d6dedeefefe7f7f7f7b5b5b5d6d6d6c6c6c6 -e7f2edf7fff7d6dedecececeddeadec7c6bcdededef7f7ffc6ceced6dedef7f7efe7f4f7aeadad -f7fff7bcc8bcc7c6bcf7f7efcddadab9bdb5cdd8ccf7fff7efefe7efefe7fffffffffffff7fff7 -dededeffffffbdbdbda5a5a6ffffffffffffffffffe7e7e7b5bdbdefefefdeedeeb5b5b5bbc1c8 -ffffffcececea5a5a6e7f2edf7fff7ffffffaeadadddeade9fa89c7c7b7cefefe7bdbdbde7e6ef -fffffff7f7fffffffff7f7ffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7f7fffffffff7f7ffbbc1c8ffffff -f7f7f7bdbdbdffffffffffffdededea5a5a6ffffffffffffc6c6c6bdbdbdefefe7d6dedecec6c6 -fffffff7f7ef898c8caeadaddae0d6bdbdbdb5b5b59fa89cc6c6c6ffffffbdbdbdefefefdedede -cdd8ccffffffcdd8ccefefefffffffcececed6dedeffffff9a92919b9c9cf7f7f7fffff7e7f2ed -e7f2edcdd8ccb5b5b5ffffffcbcec5b9bdb5efefe77c7b7cdae0d6ddeadef7f7f7fffffff7f7f7 -b5b5b5efefefe7f2edbcc8bce7e6effffffff7ffffffffffa8b9bdfffffff7f7f79a9291dedede -c6c6c6ffffffb5b5b5aeadadffffffa8b9bddedede7c7b7cb9bdb5c6c6c67c7b7ccdd8cce7e7e7 -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffefeff7b5b5b5f7f7f7 -ffffffaeadadffffffffffffdededebdbdbdffffffffffffbdbdbde7e7e7cec6c6efefefd6dede -ffffffdae0d6898c8cffffffcdd8cca5a5a6d6dede898c8cbbc1c8ffffffdededef7f7ffefefef -c6ceceefefefc6cecefffffffffffff7f7f7efefefffffff848e9b9b9c9cefefefffffffefefef -f7f7f7dededeaeadadffffffcececec6c6c6ffffffd6d6d6f7f7f7cececef7fff7ffffffefefef -b5b5b5f7f7f7ffffffbdbdbdbdbdbdffffffffffffffffffbdbdbdefeff7f7fff7a8a8b5ffffff -d6d6debbc1c8ffffffa5a5a6c6c6c69b9c9cdededeffffff9a9291bbc1c8aeadadffffffefefef -fffffffff7ffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffd6cdd7bbc1c8efefefd6d6def7f7ff -ffffffaeadadffffffffffffdededec6c6c6ffffffffffffbdbdbdc7c6bcefefefffffffdae0d6 -ffffffefefe79b9c9cfffffff7f7f7efefefffffff81897cb5b5b5ffffffbbc1c8d6cdd7c6cece -efeff7f7f7f7c6c6c6ffffffffffffd6d6dee7e6efffffff898c8c7c7b7cf7f7f7dedede9a9291 -ffffffd6d6de9b9c9cffffffaeadad7c7b7ca8b9bddededeefefefe7e7e7fffffffffffff7f7f7 -7c7b7c898c8cffffffe7dde7d6d6defffffffff7ffffffffb5b5b5ffffffefeff7848e9bffffff -e7e6efd6cdd7fffffff7f7f7efeff7c6b9c6d6d6d6ffffffffffffdedede898c8cc6c6c6f7f7f7 -fffffff7f7f7ffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffe7e6efefe6f2efeff7b5b5b5efeff7 -f7f7f7b5b5b5f7f7f7ffffffc6cecebdbdbdffffffffffffc6c6c6e7e7e7fffffff7f7f7e7e7e7 -ffffffe7e7e7898c8cf7f7f7fffffff7f7f7ffffff9b9c9ccececeffffffefefefe7e6eff7f7f7 -fff7ffefefefbbc1c8f7f7ffffffffefeff7efefefffffffb5b5b5cececedededea5a5a6bbc1c8 -ffffffe7e7e7c6c6c6f7f7f7f7ffffe7e7e7e7dde7dededeefeff7fffffffffffff7f7f7c6b9c6 -ffffff898c8ca5a5a6ffffffbdbdbdcececeffffffffffffb5b5b5fff7fffff7f7b5b5b5ffffff -e7dde7dededeffffffffffffe7dde7ffffff979ca9dededee7e6efffffffffffffdededecbcec5 -fffffff7f7f7f7f7f7fffffffffff7ffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffefefefcbcedbf7f7ffc6cecefff7ff -ffffffaeadadffffffffffffd6d6d6aeadadffffffe7e7e7efefeff7f7f7ffffffffffffdedede -ffffffe7e7e79b9c9cfffffffffffff7f7ffffffff7c7b7cbdbdbdffffff979ca9e7e7e7dedde7 -bdbdbdffffffd6d6deffffffffffffe7e7e7e7e7e7ffffff898c8cbdbdbd81897cefefefffffff -e7e7e7efefefc6c6c6ffffffb5b5b5aeadadefefeff7f7ffd6d6d6cececeffffffe7e6efaeadad -e7e7e7fffffff7f7f7ffffffc6c6c6c6c6c6ffffffffffffbdbdbdffffffefeff7b5b5b5ffffff -e7e7e7bbc1c8ffffffdedde7dedde7e7e7e7e7e6efbbc1c8848e9befefefe7e7e7e7e7e79b9c9c -fffffffffff7fffff7fffffffffffffffff7ffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffc6cece898c8cd6d6ded6cdd7f7f7ff -f7f7f7616f61e7e6efdededeaeadadc6c6c6ffffffaeadadcececeffffffffffffffffffbbc1c8 -ffffffe7dde77c7b7cffffffefeff7ffffffffffff796e82bdbdbdffffffd6cdd7ffffffe7e7e7 -d6cdd7f7f7f7bbc1c8efefefffffffe7e7e7e7e7e7ffffff898c8ccececea5a5a6f7f7f7f7f7f7 -bdbdbdf7f7f7d6d6d6efefefbdbdbdaeadadf7f7f7aeadadf7f7f7aeadade7e7e7b5b5b5efefef -9fa89cdededea5a5a6a5a5a6ffffffb9bdb5cdd8ccffffffa5a5a6f7f7eff7f7f79b9c9cefefef -bdbdbda5a5a6ffffffa5a5a6c6c6c6c6c6c6f7f7f7bdbdbddededea5a5a69b9c9cefefef9fa89c -fffffffffffffffff7fffffffffffffffff7ffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffefeff7f7f7f7ffffffcececef7f7f7 -fff7ffa5a5a6d6d6d6c6c6c6a5a5a6f7f7f79b9c9cc6c6c6ffffffffffffffffffe7e6efe7e6ef -ffffffefefefa8a8b5f7f7f7f7f7f7fffffff7f7f7aeadadd6d6d6ffffffd6d6d6e7e7e7dedede -efefefffffffe7e7e7e7e7e7f7f7f7cececeefefe7ffffff9fa89ccdd8ccaeadadfffffff7f7f7 -cbcec5ffffffd6d6d69b9c9cbdbdbdaeadade7e7e7aeadadc7c6bcb5b5b5dededeaeadaddedede -d6d6d6ffffffc7c6bccdd8ccffffffcecececdd8ccdae0d6aeadadfffff7f7f7f77c7b7cc7c6bc -dae0d6dedede9fa89cc7c6bcffffffaeadadcec6c69b9c9cbdbdbdd6d6d6dededed6d6d6dedede -fffffffffff7fffffffffff7ffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffdedde7b5b5b5d6d6d6c6ceceffffff -fffff7dedde7efefefefefe7f7f7f7b5b5b5d6d6d6fffffffffffff7ffffffffffdeedeeffffff -deedeef7f7f7fffffff7fffff7fffffffffffff7ffffffffe7f4f7e7f2edf7ffffe7f2edf7fff7 -f7f7f7efefefe7f2edf7ffffefeff7efe6f2fff7fff7f7efffffffdededefffffff7f7eff7f7f7 -f7f7f7f7f7f7ffffffdedededededeffffffe7e7e7ffffffc7c6bce7e7e7f7f7f7efefeffffff7 -e7e7e7efefe7fffffffffff7efefe7f7f7eff7f7efdedededededeefefe7efefe7cdd8ccfff7f7 -fffff7d6d6d6c7c6bcfffffffffffffff7f7bdbdbdf7f7f7fff7fff7f7f7dededed6d6d6ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffc6c6c6dededed6d6d6f7f7f7 -f7f7f7a5a5a6efefefdededef7f7efffffffffffffffffffffffffffffffffffffffffffe7f4f7 -e7f2eddeedeee7f4f7f7fffff7fffff7ffffffffffefeff7efefefdeedeee5ffffe5fffffffff7 -efefefefefe7e7f4f7f7fffffffffffff7ffefeff7f7f7f7e7f2edfffff7efefeff7f7f7f7f7f7 -f7f7f7fffffffffffffffffff7f7f7e7e7e7efefefefefeffffffffffffff7f7f7f7f7f7f7f7f7 -fffff7fffffff7f7f7efefefefefe7efefeffffff7fffffff7f7efdededeefefe7fffff7efefef -dededef7f7efffffffffffffffffffffffffffffffefeff7e7e7e7efefeffffff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffe7e7e7bdbdbdf7f7f7 -ffffff9a9291e7f2edfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffe5ffffefffffffffff -fffff7fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7f7cececee7e7e7ffffff -ffffffaeadadcdd8ccf7f7f7f7f7fffffffffffffffffffffffffffffffffffff7fffff7fffff7 -fffff7fffff7fffffffffffffffffffffffffffffffff7fffff7fff7ffffeffffff7fffffffff7 -fff7fffffff7fffffff7fffff7fffffff7ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffff -fffffffffffffffffffffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffdededebdbdbdd6d6d6c6c6c6 -b5b5b5c6c6c6d6d6d6f7fffff7fffffffffffffffffffffffffffffffffffffff7ffffefffffef -ffffeffffff7fffff7fffffffffffffffffffff7fffff7ffffffffffffffffffffffffffffffff -fff7fffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7efefefefefef -efefeffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7ffffef -ffffeffffff7fffffffff7fffff7fffffffffffffffff7fffffffffffffffffffffffff7ffffff -fffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7f7f7f7f7f7fffffff7f7f7ffffff -fffffffffffff7f7f7fffffff7fffffffffff7fffffffffffffffffffffffffff7fffff7fffff7 -fffff7fffffffff7fff7f7ffe1eeffeff7fffffffffffffffff7fffff7ffffffffffffffffffff -fffffffffffffffffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffff -f7fffff7ffffefffffe1eeffc4d3edbac6d8effffffffffffffffffffffffffffffffffffff7ff -fffffff7fffff7fffff7fffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7ffffffffffffffffffffffffffffffffffffeffffff7ffff -efffffefffffcee0ef285297a3c4daf7ffffeffffff7fffff7fffffff7f7fffff7ffffffffffff -f7ffffeffffff7ffffeffffff7fffff7fff7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff7f7ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffff7fffffffffffffffffffffffff7ffffefffffefffff -e5ffffe5ffffa3c4da4f6c9fa3c4dae7f4f7f7ffffe7f4f7f7ffeffffffffffffffffff7ffffff -effffff7fffff7f7f7efeff7fffff7f7f7efffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7fffff7fff7f7f7fffffff7f7ffffffffffffffffffffffffffffffffffffff -fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffff7fffffffffffffffffffffffff7ffffefffffe5ffff -e5ffffc4d3ed1550782852976784bda8a8b5e7f4f7fffffffff7efded6ccdac7abfff7eff7fff7 -f7fffff7f7f7fffffffbefeffdefe7fef7e7fff7efffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffff7fff7f7fffff7fff7f7fffff7ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffffffffffffffffffffffffffffff7fffff7fffff7ffff -f7ffffcee0ef1426574f6c9f8ba1c79991aac7c6bcded6cceee1c3e6c196b99f9bdac7abfbfbde -fffff7fffffffce6eed7ad9dd6aa8afdcfc4fff7efffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7f7f7f7fffffffffffffffffffffffffffffffffffffffffff7f7ff -fffffffff7fff7f7fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffff7ffff -f7ffffd6dede1426572f537967687c9d716f9d716fa38457f6cdabc28268e6c196a2763ffbfbde -fef7e7ded6ccc38a81bf4d3ed66b42d6aa8affffeffffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffff7ffe7dde7dedde7a8a8b5d6d6ebdedef0c8c5d5b7b3c4ffffff -f7f7fffffffff7f7f7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffff7fffff7ffffefffffeffffff7 -ffffffd6dede1e1f3a1e1f3a4d48538040497d3d30a16d56c18040c48756bf4d3ed2a46af2ebd6 -eee1c3a16d56a16d569e2e11bf4d3ee18855fdd0ceffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffff7ffffffffb5b5b5cbcedb67687cd6d6dee7e6ef67687c67687cffffff -f7f7fffffffff7f7f7f7f7effffffffffff7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffffffffff7ffffefffffefffffef -fffff7efefef7a68703f3235804049c28268e78673a0563f954713c18040954713f6cdabfdffe7 -fdffe7d7ad9dbf4d3eb62b10b62b10f13f3df3ac92fdefe7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffefefeff7efffe7dde7f7f7f7ffffffd6d6dec8c5d5ffffff -fffffff7f7ffefeff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffffffffffffffffffffffffffffffffff7ffffefffffef -fffff7ede8de9d716f9d716f804049bf4d3ed7ad9df3ac92c28268d7ad9deee1c3fdffe7f7f7ff -b7b3c4c38a81a13e30d66b42f3ac92c28268d6aa8afbfbdefff7effffffff7f7fff7ffffffffff -ffffeffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffff7fffff7fffffffffffffaeef7ffffffffffffffffffffffffffffffffffffffffffffffff -fff7fffffffff7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7fffff7fffffffffffffff7fffffffffffffffffffffffff7fffff7 -ffffeffdefe7ddcacb846a4ca16d56e88683a13e30e886839d716fc6ceceffffffcee0ef8ba1c7 -616cbf804049a00d08d6aa8afff7f7bab69da16d56f6cdabf2ebd6efefe7f7ffffefffffffffff -ffffefffffefffffeffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff7 -fffff7fffff7fffff7ffffffffffffb5b5b5e7dde79b9c9cefefefbbc1c87e7b9c9991aa7e7b9c -bac6d8bac6d8848e9b9991aae7e3f7a8a8b5c8c5d5f7f7ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffe7f4f7f7ffffffffff -efefeffffffffff7fff3d2dac38a81e88683e78673bf4d3ec6b9c6677e83677e836784bd1e4253 -9991aae78673a00d08c38a81ffffeffbefefd6aa8aa0563feee1c3fffffff7f7f7f7fffffffff7 -ffffefffffeffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffff7fffff7fffff7f7f7f7ffffffdedde7efe6f2e7e6eff7fffff7f7f7efeff7dedef0efeff7 -fff7fff7efffdedef0efeff7fff7ffefeff7f7f7fffffffff7f7ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7ffffffffff -f7fffffff7ffc8c5d5796e827a6870c38a81e886839d716f9d716f557085477285557085677e83 -fce6eee88683bf4d3ebea476ffecd0ffffffc38a81bc6a39f6cdabfdefe7fffffff7fffffffff7 -fffff7fffff7fffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffffffffff7efffffffff -f7f7ffe7e3f7fffffff7f7fff7f7fff7efffffffffe7e3f7f7ffffffffffefeff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffffff7fffff7fffff7ffffefffff -f7ffffdeedee6175a76175a72f537967687c7e7b9c9d716f5d324bddcacbffeefffff7f7efefe7 -fdefe7e88683812d0dbea476ffffeffef7e7d2a46ab55d18e28e67fdcfc4fff7ffffffffffffff -fffffffffff7fffff7fffffff7fffffffffffffffffffffffffffffffffffffffffffffff7ffff -ffffffffffffffffffefeff7f7f7ffdedef0dedef0f7f7f7c8c5d5efefefffffffefefef796e82 -979ca9848e9b67687c67687cbbc1c8efeeffefeff7efeff7c6c6c6f7f7fffffffff7f7ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffefffff -efffffcddada142657506fb66784bd4f6c9f2f53799991aac28268a0563fc38a81fce6eeffffef -ffffefe2c9b9661b0cbea476fbfbdefdffe7f6cdabd66b42e18855f2ebd6fce6eeffffffffffff -fffffffffff7fffffff7fffff7fffffffffffffffffffffffffffff7fffff7fffff7ffffffffff -ffffffffffffffffffffffffffffffbbc1c8efeff7a8a8b5e7e6efb5b5b5ffffffefeff7979ca9 -e7e7e7ffffffe7e6efa8a8b5dedde7ffffffa8a8b5e7e6effffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7f7fff7f7ffff -f7ffffcee0ef3f70b43f70b43f70b41b6ea38ba1c76175a77e5640b62b10a00d08f3ac92e2c9b9 -f2ebd6e2c9b9812d0ddea372fff6b6fdffe7eca872ef883abc6a39fdcfc4ffffffefeff7ffffff -fffffffffffffffffff7fffff7fffffffffffffffffffffffffffff7fffffffffffffffffffff7 -fffff7fffffff7fffff7f7fff7ffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7f7e7e6effffffffffffff7f7fff7f7ffffffffe7e6effffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffff7fffff7fff7effff7effffff7ffffeffdffe7fdffe7fdffe7fffff7ffffff -f7ffffdeedee2852973f70b43f70b41b6ea33f70b46784bd9d716fc28268d66b42bf4d3ebf4d3e -ffffefdac7ab812d0dd66b42e6c196ffffffdea372b62b10b55d18fdd0cefff7ffffffffffffff -fffffffffffffffffff7fffff7fffffffffffffffffffff7f7fff7fffffffffff7ffffeffffff7 -ffffeffff7efffffffffffffeff7fff7f7fff7fffff7f7f7fffffffffffffffffffffff7e7f4f7 -fffffffffffff7f7f7fffffff7f7fffffffff7f7f7fffffffffffff7f7ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffefefeffffff7 -f7f7effffff7fef7e7ffffeffef7e7ffecd0f2ebd6ffecd0fbfbdeffecd0f2ebd6fffff7fff7ff -f7f7ff9c9fc01534701b6ea3616cbf3f70b41b6ea3e1eeffc38a81e2c9b9ffeeffbf4d3ed66b42 -d6aa8af2de95954713b62b10bf4d3efffff7c28268b62b10d66b42fdcfc4fff7ffefeff7ffffff -f7f7f7ffffffffffffefffffeffffffffffffff7f7ffffefffffeffef7e7ffffefded6ccfbfbde -fbfbdefef7e7fffff7fffff7fffffff7fffffffffff7f7f7fffffffffff7fffff7fffff7f7f7f7 -fffffff7f7f7fffff7f7f7f7f7f7fffffffff7f7f7e7f4f7fffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff7 -efefe7ffffeff2ebd6dac7abdac7abbea47683814ea18b74bea476a38457d6aa8ae2c9b9fce6ee -efe6f21426571a378a2852973f70b47b8dc86784bdeff7ff9d716fe88683fdd0cee2c9b9a13e30 -ef883afff6b6e18855bc1111f13f3dc28268d66b429e2e11e28e67f2ebd6fff7ffefeff7ffffff -f7f7f7fffff7fffffffffffff7fffffffffffffff7fffff7fbfbdefdffe7dac7abbea476ffecd0 -fbfbdefef7e7f2ebd6f7f7eff7fff7f7ffffbcc8bce7f2edfff7efffffffffffffefefe7fffff7 -ffffffffffffffffffffffffffffffefeff7fffffffffffff7f7f7efefeff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffff7f7fff7effffff7fef7e7 -fdffe7c7c6bcbea476846a4c81753383814e626e1f626e1f81753383814ea2763fa16d56fff7ef -a8a8b50000211a378a2852971a378a2852974c5299b99f9bc38a81e88683d7ad9df3d2dab55d18 -bc6a39e6c196e6c196a00d08f13f3ddd250fb62b109e2e11dac7abfff7f7fff7ffffffffefeff7 -fffffffffff7fffffffffffff7fffff7fffff7f7f7fff7eff2ebd6dac7abd6aa8aa38457ffffef -eee1c3f2ebd6ffffffefefe7fffff7d6dedecdd8cc616f61ded6cc9a9291aeadadcdd8ccaeadad -4d48539b9c9c898c8c272522b5b5b5ffffff898c8cb5b5b54d4853bcc8bcf7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffefffffefdac7ab -bab69d83814e83814e817533626e1f817533817533626e1f42500d605622605622846a4cb99f9b -a8a8b51426571426571a378a1a378a5058b05058b0c38a81c28268c28268d6aa8af2ebd6e6c196 -954713bea476f3ac92a00d08d30f15dc0c02b70d05c48756f2ebd6fff7fffff7fff7f7fff7f7ff -fffffffffff7fffffffffffff7fffff7fffffffffffef7e7fbfbdebea476d2a46ac28268c28268 -fffff7bab69da18b74fffffff7f7f7deedeeffffffaeadadefefe7c7c6bccdd8ccefefefcdd8cc -a5a5a6cececeb5b5b5898c8cdededeffffffc6c6c6cececeaeadadefefeffffff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffff7effffff7dac7ab83814e -5c553b5c553b626e1f626e1f42500d626e1f55884455884442500d27381342500d5c553be2c9b9 -d6d6eb142657153470285297616cbf1a378ac4d3edb99f9ba0563fe88683d6aa8afdd0cefdd0ce -812d0de28e67ffecd0c38a81cc0004dd250fb70d05d7ad9dfffffffaeef7fffffff7f7ffffffff -fffff7fff7effff7effffffffffffffffffffffffffffff7a38457dea372c28268a13e30a13e30 -c38a817d3d30846a4cfffffffffff7f7f7fff7fffffffffffbefefffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffff7ffffefc7c6bc846a4c7e5640 -42500d5c3f1b42500d626e1f626e1f43711e626e1f55884443711e42500d273813bab69defefe7 -ffffff8ba1c71426573f70b4a6c8eb506fb6142657c7c6bcb99f9b9d716fe78673fdcfc4f3d2da -a13e30b62b10f3ac92c38a81860002dd250f9e2e11e6c196ffffffffeefff7f7fff7fffff7f7ff -fffff7ffffefffffeffffffff7fffff7f7f7ffffffc7c6bca16d56f3ac92e28e67c180407e1006 -812d0d661b0c9d716fffffff7c7b7cbdbdbd616f61101715efe6f23f32353f3235545656bbc1c8 -272522979ca95456569b9c9c7c7b7c979ca99a9291101715e7e7e7ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffffffffffffffffffffffffffffffffffffff7effffff7a18b74846a4c605622 -5c553b413d1242500d817533626e1f626e1f43711e1c4e0e42500d43711e413d12eee1c3fbfbde -fff7f7e7e6ef1426571426578ba1c7a3c4da000021aeadadffffff9d716fa16d56fdd0cefdcfc4 -a00d08b62b10e18855f6cdabb62b10b62b10bf4d3ee2c9b9fffff7fffffff7ffffeff7ffffffff -fff7f7fff7effffffffffffff7ffffffffffffffffd7ad9ddea372a0563fd66b42a13e30812d0d -a13e309d716ffff7fffff7ffe7e6efdeedeeefeff7e7e7e7efefefe7e6efe7e7e7efefefffffff -e7e6efefeff7efefefefeff7efeff7f7f7f7f7f7f7dededefffff7f7f7efffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffff7fffffff7fffffffffffffffffffffffff7efffffefa18b747e564083814e -42500d27381342500d413d12626e1f626e1f626e1f626e1f8c611b817533b6a042b6a042bea476 -bea476bab69d796e821e1f3a616cbf555682555682d6e6edfffffffff7ffa16d569e2e11f6cdab -9e2e11b62b10d35113f3ac92dea372a00d08bc6a39ddcacbfffffff7ffeff7fff7f7fff7ffffff -ffffffffffffffffffefffffeffffff7fff7fdffe7bea476e28e67e78673e88683a0563f804049 -9d716ffff7fffff7fffff7f7ffffffefeff7f7f7f7f7fffff7fff7f7f7f7ffffffefefefffffff -fffffff7f7f7ffffffefefefe7e7e7f7f7ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffffffffffff7fffff7fffffffffffffffffff7efffffefbea47681753383814e -1c4e0e43711e103a155c553b5c553b817533a38457b6a042b6a042d2a46ad2a46ac48756ebc07c -a38457a3845710171552457a9991aa412f54c4d3ede1eefff7f7f7fff7fff2ebd6a0563f9e2e11 -b62b10b62b10d35113e28e67d6aa8a9e2e117d3d30ddcacbffffffeff8eeffffeffffff7ffffff -fff7fffffffff7ffffe5fffff7fffff2ebd6e6c196c18040da8539eca8729e2e11a16d56d7ad9d -fff7f7fff7fffff7ffffffff979ca97c7b7c101715c6c6c6616f613154499a9291000000272522 -898c8c616f61ffffff4d48535456564d463cbbc1c8ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffff7fffffffffffffffffff7f7ffffefffffefffffef7da572 -1c4e0e103a1543711e31653542500d626e1f817533b6a042d2a46ac48756d2a46adea372a2763f -8175337e564027252252457a1e42532f53799991aa9a9291e2c9b9fce6eefffffffffff7a16d56 -c28268a13e30a13e30a13e30b99f9ba8a8b51e1f3ad6cdd7fffffff7ffeff7ffeffffff7fffff7 -fffffffffffff7ffffe7f2edffffefbea476a2763ffcdf6ae18855da8539a0563f8c611bfffff7 -fff7effffffffffffffffffffff7ffffffff7c7b7ce7e7e7545656898c8cc6c6c6a5a5a6616f61 -aeadad898c8ccecece3f32359b9c9c616f61d6cdd7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffff7efefe7fdffe7f2ebd6 -2b67201c4e0e1c4e0e2b67202b672043711e626e1fb6a042d2a46ae28e67eca872c48756c48756 -817533413d123f32355570850000212445383f3235a18b74b99f9bf2ebd6e2c9b9ddcacbd7ad9d -fbefeff2ebd6846a4c7a6870c6b9c67e86b0142657b5bdbdfffffffffffff7fff7ffffeffffff7 -fffffffffffffff7effdffe7fff6b6ebc07cc18040ffbc38bc6a39b55d18bc6a39c48756eee1c3 -ffffeffffff7fff7f7f7f7f7fff7f7efefeffffffffffffffffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fff7eff8eeddeade -558844103a151963201963202b672042500d626e1f817533bc6a39eca872f3ac92eca872f3ac92 -a16d56492717616f6167687c67687c846a4c7e5640a16d56bab69ddac7ab605622817533d7ad9d -fbfbdefff7efffffffc6b9c64c5299477285477285a6c8ebeff7fffffffffffffffffff7f7f7ef -fffff7fffff7ffffeffbfbded2a46ab6a042ffbc38da8539b55d18a2763feca872a38457846a4c -fffff7fdffe7f7f7eff7f7eff7f7f7efeff7fff7f7fff7fffff7ffefe6f2fffffffffffff7f7f7 -f7f7f7fffffff7f7f7efefeffffffffffffff7f7f7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7fffff7ffffffffffe7f2edddeade -7da5721c4e0e103a151c4e0e2b672043711e42500d5c3f1b812d0dd66b42c28268e78673e18855 -c282685c3f1b0000004d48537a6870a16d56e6c196bea47698ae892b672042500d817533e6c196 -fbfbdedeedeedeedeee1eeff8ba1c72852976784bda3c4dacee0effff7fffff7f7fffff7f7fff7 -fffff7ede8dedac7abbea476c18040ef883ae7a330b55d18b55d18ebc07cbea4765c3f1bdac7ab -fdffe7ffffeffffffffff7f7fff7f7fff7f7fffffffff7f7fff7fffffffff7f7f7fffffff7f7f7 -fffffffffffff7f7f7f7f7f7ffffffefefeff7f7f7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7ffffeff7fff7ffffeff8eef7ffef -566f421d4f261c4e0e2b67201c4e0e42500d413d12661b0c661b0c7e10067e10067e1006bf4d3e -bc6a397d3d305c2e355d324b661b0ca13e307e1006fdd0ce83814e27381343711e83814e7da572 -7da572deedeed6e6edefffffcee0ef3f70b42f5379153470bac6d8fffffffffffffffffff7fff7 -f7f7efded6ccd6aa8aa0563fda8539da8539de9d2ede9d2eb6a042f2de95fff6b6dac7abffffef -fef7e7fffff7fffff7fffff7ffffffc7c6bcb99f9befeff7fffffffff7ffffffffffffffffffff -fffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffe7f4f7f7f7fffffffffdffe7 -cbcec560562242500d413d12413d12413d12492717661b0c7e10067e10067e10067e10067e1006 -7e1006661b0c7e10065c2e359e2e11860002a0563fd7ad9d5c553b3f3235316535315449336b4d -103a15e5ffffe5ffffeffffff7ffff9c9fc02852974f6c9fd6e6edffffffffffffffffffffffff -dedede81897cd7ad9d954713954713d35113b55d18bc6a39fdf5abfdffe7fbfbdefffffffffff7 -fffff7ffffffffffffefefefffffff7c7b7c5d324b7c7b7cd6cdd7bdbdbd898c8c9b9c9cefefef -cecece81897caeadadb5b5b5fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffff7fffff7fffff7fffffffffffffff7fff7f7fffffffffff7effbfbde -fbfbdea384577e564083814e846a4ca38457a2763f812d0d7e10067e1006860002860002860002 -a00d08a00d08a00d087e1006a13e30860002c38a81a384572d00001e1f3a1e1f3a142657142657 -52457affeeffefeff7fffffff7ffeffff7f77e86b02f5379c4d3edf7ffffe7f4f7f7ffffffffff -dedede5c553bc38a81812d0d9e2e11812d0d812d0dc18040eee1c3ffffeffffff7ffffffffffff -fffffffffffffffffffff7f7ffffffddcacbddcacba18b74ddcacb7a68709b9c9c9a9291deedee -b5b5b5c6b9c6cececed6d6d6fffffffffffffffffffffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffff7fffff7fffff7fffff7fffffff7f7fffff7fffff7f7fff7effdffe7 -d6aa8ac18040c18040a16d56c48756c48756eca872a13e30661b0ca00d087e1006860002a00d08 -a00d08a00d08a00d08a60003a00d087e1006d6aa8ab99f9b7e56405d324b52457a52457a52457a -e7dde7b99f9bb99f9beff8eeeff8eeffffffa6c8eb1550788ba1c7efffffe7f4f7ffffffefefef -796e82ffeeffd6aa8a812d0db55d18954713812d0dc28268fdcfc4fffffffff7fffff7ffffffff -f7f7fffffffffffffffffffffbefeffff7effffffffff7ffffffffe7e7e7fffffff7f7f7ffffff -f7f7f7fffffffffffffffffffffffffffffff7f7f7fffffffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffff7ffffefffffeffffff7fffff7fffffffffffffce6eefbefefdac7ab -c282688c611bb55d18812d0d8c611be18855e28e67a13e30a00d08661b0c860002a00d08b70d05 -b70d05b70d05dd250fd30f159e2e11661b0c5c553b5c553b5c2e359d716fa18b749d716fd7ad9d -9d716ffdd0ced7ad9dfffff7efefe7ffffff7e86b01534706784bddeedeee5ffffe5ffff848e9b -e7dde7ffffffbab69d661b0cb55d18954713812d0d804049a18b74fff7fff7f7fff7fffff7ffff -f7f7fffffffffffffffff7f7fff7effffff7fdefe7ffffffdededefff7f7ffffffffffffffffff -e7e7e7f7f7f7f7f7f7fffffff7f7f7fffffffffffffffffffffffff7f7f7f7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffff7ffffeffffff7fffffff7f7fffff7ffffffffffffff846a4c -a0563fc18040da8539b55d18da8539b55d189547139e2e117e1006a00d08860002a00d08a60003 -a60003b70d05bc1111bc11117e1006413d125c3f1b4927177d3d305c2e35817533626e1fe6c196 -eee1c3fbfbdefce6eeede8def2ebd6f7ffff8ba1c77b8dc8155078a3c4dae5ffffa8b9bdd6d6de -fffffffff7ffd6aa8a661b0cc18040f2de95eee1c3a16d567a6870e7e6effffffff7f7ffffffff -f7fffffffffffffffffff7f7ffffff5456567c7b7c7a68703f32353f3235e7f4f7aeadad3f3235 -d6d6d6bdbdbd1017152725224d463cf7f7f73f3235c6cecef7f7f7ffffffffffffefefefffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffff7fffff7fffff7fffffffffffff7f7fffff7ffffffffa38457 -a38457bc6a39b55d188c611bb55d18e7a330b55d18954713a00d087e1006860002a00d08b70d05 -b70d05b70d05bc1111a600037e1006413d1242500d413d12492717413d12817533a38457bea476 -e6c196eee1c3fef7e7fff7f7f7fff7e5ffffe5ffff506fb62d707fcee0ef677e83e5fffff7ffff -fff7ffffeefffdffe7d2a46a605622ebc07ca2763f846a4c9a9291fff7effffffff7fffff7ffff -fffffffffffffffff7fffff7ffffeff2ebd6fffff7fffffffffffffffffffffffff7f7f7ffffff -fffffff7f7f7f7f7f7f7f7f7f7f7f7fffffff7f7f7fffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7fffffffffffffffffffffffff7f7fffff7fffef7e7 -eee1c3ebc07cb55d18de9d2ede9d2ef5bb36ef883ad66b427e1006860002a00d08a00d08a60003 -b70d05bc1111b70d05a00d08661b0c60562260562242500d43711e43711e83814e42500dbea476 -eee1c383814edae0d6fff7efffffffe1eefff7ffff6175a72d707f6784bdcee0efe5ffffe1eeff -ffeeffe7dde7ffecd0b6a0428c611b8c611b7e5640fdd0ceffecd0f7f7effffff7fffff7ffffff -f7fff7fffff7fffff7ffffeffff7efffffffded6ccefefefd6deded6dedee7e7e7efefefdedede -efefefffffffffffffffffffffffffefefefffffffefefeffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7f7ffffffffded6cc -a0563f8c611bc18040b6a042b6a042de9d2ede9d2ed66b42b62b10860002860002a00d08a60003 -a60003b70d05a00d08a00d08661b0c5c3f1b81753343711e1d4f2643711e558844605622846a4c -846a4cbab69dffffeffffff7f7f7ffefeeffffffff6784bd4f6c9f2d707fd6e6eddeedeeffffff -fff7ffcec6c6492717817533b6a0425c3f1bbab69dfffffffffff7ffffeffffff7fffff7ffffff -f7fff7f7f7efffffffffffefefefe7ffffff545656cecece848e9b67687c81897cdedede616f61 -c6c6c6fffffff7f7f7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7f7fffff7fffff7ffffffffffefe6f2d6d6de7a6870 -7e56407e56407e56408c611b8c611b817533a13e30a13e309e2e117e1006860002860002a00d08 -a00d08a00d08a00d08a00d087e1006492717626e1f626e1f83814e558844817533626e1f817533 -a38457bea476fffff7fff7f7fffffff7ffffcee0ef4f6c9f6784bd477285ddeadedeedeeffffff -ffffff9a92917e5640d6aa8aa0563f8c611bc38a81ddcacbfce6eef7fffffffffffffffff7fff7 -fffffffffffffffffffffff7fffffff7f7f7ffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff7f7f7fffffff7f7f7fffffffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffff7fffff7fffff7fffff7ffffdedde77e7b9c5456567a6870 -5d324b7a68707e56409d716f5c553b7e5640a0563fa13e30a13e30a13e30a00d087e1006860002 -8600028600027e10067e1006661b0c413d122738132738131c4e0e1c4e0e7da5727da57283814e -b7bcada18b74ded6ccdededecee0efc4d3ed8ba1c76784bd677e83a3c4dabac6d8fffffffbefef -b99f9b5c3f1bb99f9bb99f9b5d324b8040494927175c2e35cececef7fffff7ffffffffffffffff -ffffffffffffffffffffffffffffffefeff7f7f7f7fffffff7f7fff7f7fff7f7f7fffffff7f7f7 -f7f7f7fffffff7f7f7f7f7f7f7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7f7ffffefffffffffff677e831e1f3a412f54142657 -52457a3f32355456565456563f32355c2e357e5640804049804049a13e30a0563fbf4d3ea13e30 -a13e30a0563f812d0d661b0c7d3d30413d12273813103a151c4e0e2b6720a5c2a77da572616f61 -616f61545656545656557085477285677e83a6c8eba3c4da6784bde5ffff677e83f7f7ffefefef -5c3f1b7e5640846a4c5d324b7e7b9cb99f9ba5a5a69fa89cdae0d6e7f4f7f7ffffffffffffffff -fffffffffffffffff7fff7f7fffffffffffff7f7f7fffffff7ffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffff7fffff7fffffff7fffff7ffffbac6d8a8aac6bac6d8bbc1c8 -5556825556822f5379412f544d48534d48534d48535c2e355c2e355d324b5c2e35804049a16d56 -a16d56a16d56846a4c5c3f1b413d12273813273813316535336b4d316535336b4d1d4f26566f42 -2445383154493154491659532d707f2d707f2d707f2d707f477285a8b9bdcbcedbffffff9991aa -5d324b7e5640846a4c796e82a5a5a6fff7ffffffffddeadee7f4f7f7ffffffffffffffffffffff -fffffffffffffffffff7f7f7f7f7f7fffffffffffffffffff7f7f7e7f4f7fff7fff7fff7ffffff -f7f7f7efefeff7f7f7fffffff7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7fffffffffffff7ffffffffffffffff8ba1c77e86b0 -4f6c9f2852971534702f537952457a412f5452457a412f54412f545d324b3f32353f32355c2e35 -3f32351017154d463c3f3235413d12103a15103a151d4f261d4f26336b4d244538315449315449 -677e83616f611e4253336b4d165f35165953165953165953165953315449616f61898c8c3f3235 -1e1f3a616f612725227c7b7cffffffddeadee7f4f7a3c4dadeedeeffffffffffffffffffffffff -fffffffffffffffffffffff7ffffffd6d6d6dededef7ffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7fffffff7f7f7fffffffffffffffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffff7ffffffffffffffffffffffff8ba1c74f6c9f285297 -5058b05058b04c52994c52994c529915347052457a52457a52457a1e1f3a1e1f3a52457a4d4853 -1e1f3a2445383154492445382445382738131d4f261d4f26273813616f61677e83316535272522 -9fa89c81897c616f61336b4d0a4438165f35165f35336b4d2445381d4f261d4f26103a15101715 -315449272522272522a8b9bda8b9bd90aaaaffffffa6c8ebe7f4f7fffffff7fffff7ffffffffff -ffffffffffffffffffffffffffffffbdbdbdefefef7c7b7c272522898c8c898c8cefeff7898c8c -616f61616f614d4853dedede7c7b7ca5a5a6ffffffa5a5a6f7f7f7ffffffefefefffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffff7fffffff7f7ffffffff7e7b9c52457a6784bd -4c52993f70b4506fb6285297616cbf4c52995058b052457a1a378a52457a52457a1426572f5379 -1e42531e42531659531550781d4f261d4f2642500d558844316535316535616f612725224d463c -315449566f423165353165351d4f26196320103a15315449244538315449316535101715103a15 -0a4438244538103a15677e83d6e6edd6dedef7ffffeff7ffeffffff7fffff7fffff7ffffffffff -fffffffffffffffffffffffffffffffffffff7f7f7dededebbc1c8d6dededededeffffffdedede -d6d6d6cececec6c6c6f7f7f7d6d6d6e7e7e7ffffffdededefffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000f7fffffffffffffffffffffffffffffffff7fffff7fffff7fffffff7f7ffb7b3c46175a7 -5556826175a74c52994c52994c52995058b0616cbf4c52992f53794c52992852972f53792f5379 -1534701550781550782d707f165953103a153165357da572315449316535315449244538273813 -4d463c2445382445381d4f262b67201963203165351d4f26336b4d244538316535165f35103a15 -3165351c4e0e677e83a3c4da848e9bd6e6edeffffff7ffffeff7fff7ffffeff7ffffffffffffff -fffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000f7fffff7fffffffffffffffffffffffffffffffff7fffff7fffff7fffffffffffff7f7ff -f7f7fff7f7ffcee0efa6c8eb7b8dc8506fb62f53792852974c52995058b0285297285297153470 -1550781550781550781534700a44380a44381d4f26336b4d244538244538244538244538315449 -566f422445383165353165353165351c4e0e2b67202b67201d4f26165f351d4f261d4f26336b4d -316535558844e7f2ed90aaaacee0efeffffff7ffffe7f4f7cddada979ca9deedeeffffffe7f4f7 -fffffffffffffff7f7ffffffcbcec59a92917c7b7c2725229b9c9c7c7b7c7c7b7c244538fff7f7 -4d48537c7b7cffffff616f61898c8cffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000f7fffff7fffffffffffffffffffffffffffffffff7ffffeffff7effffff7ffffffffffff -fff7ffdedef0efeeffa3c4da5058b06175a74c52995058b05058b04c52994c52994f6c9f285297 -2852971550781550781550781659530a44382d707f336b4d0a44382d707f0a4438244538336b4d -336b4d3154491d4f26336b4d196320316535196320316535196320336b4d558844316535244538 -f7ffffddeadef7fff7fffffff7fffff7fff7efffffefffffdeedeed6dededeedeef7f7ffffffff -f7f7f7fffffffffffffffffff7f7efffffffcecece9a9291e7f4f7b5b5b59b9c9cfff7ffaeadad -9b9c9ccdd8ccffffffc6c6c6c6c6c6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffff7fffff7fff7effffff7fff7ff -efe6f27e86b07e86b04f6c9f4f6c9f7b8dc87b8dc86175a74f6c9f5058b04f6c9f506fb64c5299 -2f53791550782f53792f53791659531659530a44381659530a44380a4438336b4d0a44380a4438 -165953165f35165f35165f35165f35336b4d558844165f351d4f2631653555884498ae899b9c9c -fffffff7f7efefefefe7f4f7e7f2edf7fff7eff8f7f7ffffffffff979ca9f7f7ffeff7fff7f7ff -ffffffffffffffffffefefefefefefffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffff7f7ffffeffffff7fffff7ffffff -ffffffe7e3f7d6d6eb6175a78ba1c74f6c9f4f6c9f6784bd7b8dc84f6c9f4c52996175a74f6c9f -2f5379555682477285477285557085677e83477285477285315449165953336b4d0a4438165f35 -165f35165f35165f35165f35316535336b4d5588442b6720336b4dbcc8bca5c2a7a5c2a7ffffff -f7f7fff7f7efffffffffffffffffffeff8f7d6e6edbbc1c8e1eeffa8b9bdf7f7fff7ffffffffff -ffffffffffffffffffffffffdededecbcec5c7c6bca5a5a6dae0d6b5bdbdd6d6d6b5b5b5d6d6d6 -cececef7f7f7dedededededeffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffeffffff7fffffffffffffffffffffffffffffffffffffffff7f7ffeff7fff7f7ffff -cee0ef7e86b06175a76175a76784bd4f6c9f6784bd6784bd6784bd6784bd4f6c9f6175a77e86b0 -8ba1c7979ca9979ca9848e9b90aaaaa8b9bd90aaaac6cece616f61244538244538165f35165f35 -165f3519632019632031653555884455884455884481897ceff8eedae0d6dae0d6f7fff7f7ffff -efffffffffffd6e6ed7e86b0cbcedbffffffbbc1c8898c8cdeedeef7fffff7fffff7fffff7f7f7 -ffffffffffffffffffffffffaeadadaeadad898c8c272522d6dede7c7b7cb5b5b54d4853cecece -d6d6d6ffffffcecececececeffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffefffffeffffffffffffffffffffffffffffffff7fffff7fffff7fffff7ffffe1eeff -848e9b7e7b9c7b8dc87b8dc86175a77b8dc88ba1c76175a76175a77e86b05570857e86b0bac6d8 -f7ffffffffffffffffffffffdededeb5b5b57c7b7c7c7b7c898c8c616f617da572558844196320 -1963202b67202b67202b67202b672043711e7da57283814ec6c6c6fffffff7ffefeff8f7efffff -d6e6edbac6d8cee0ef677e83b5bdbdffffffffffffffffffffffffd6e6edf7ffffffffffefeff7 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffff7fffffffffffffffffffffffffffffff7fffff7fffff7fffff7fffff7ffff -bac6d8bac6d8cee0efcee0efcee0efe1eeffcbcedbbdbdbdcececea5a5a6a18b749d716f9a9291 -dac7abdac7abe6c196e6c196e6c196ffecd0f2ebd6dac7abded6cc616f61ddeade7da5727da572 -558844336b4d2b67205588445588447da572a5c2a7cbcec5dededefff7ffffffffefffffffffff -cddada557085fffffffffffffffffff7fffff7fffffffffff7f7fffffffff7f7ffffffffffffff -fffff7fffffffffff7fffff7fffff7fffff7fffffff7f7f7fffffff7f7f7f7fffff7f7f7ffffff -fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffeffffff7fff7ffffffe2c9b9d6aa8af6cdabdea372c48756c48756dea372 -e28e67c18040da8539da8539c48756f2de95f6cdabeee1c3e2c9b9c7c6bcb9bdb581897cdeedee -a5c2a755884431653531653598ae89cdd8cceff8eeffffffffffffffffffffffffffffffffffff -f7ffffa8a8b5a8a8b5fffffff7fffff7fffffffffff7fffffffffffffffff7f7f7fffffffffff7 -fff7f7fffff7fffff7fffff7fffffff7f7eff7f7f7fffffffffffffffffff7f7f7ffffffffffff -fffffffffffffffffffffffffffffffffffff7f7f7f7f7f7fffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7fffffffffff7f7fff7eff2ebd6c28268c48756e18855954713d66b42e28e67c48756e28e67 -d2a46aebc07cebc07ceca872eca872ebc07cf6cdabdac7abeee1c3fbefefb7bcaddae0d6f7ffef -ddeadea5c2a7bcc8bca5c2a7bcc8bcdeedeeeff8f7fffff7ffffffffffffffffffffffffffffff -ffffffe7e6efc6cecec6cecea8b9bdfffffff7fffff7fffff7fffffffffffffff7ffffffffffff -fffff7fffffffff7effff7f7ffffffffffffffffffefefefd6dedeffffffffffffffffffffffff -fffffff7f7f7f7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffff7f7f6cdabc38a81c18040d66b42d66b42da8539e18855e18855e28e67c48756 -a2763fa0563fa2763fd2a46adea372e6c196e6c196d6aa8affecd0ddcacbfff7efcbcec5ede8de -b7bcadeff8eeddeadeffffffcddadaddeadeefffffffffffffffffffffffffffffffffffffffff -fffffff7ffffffffffdeedeed6e6eda8b9bdcbcedbffffffeff7fffffffff7fffff7f7f7ffffff -fffffffffffffffffff7f7effffff7dededec6c6c6cddadaffffffe7f4f7d6d6d6aeadadcecece -f7f7f7fffffff7f7f7f7f7f7b5b5b5c6c6c6a5a5a6efefefffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffff7ded6ccc28268c18040e18855da8539d66b42ef883ada8539da8539bc6a39954713 -9547138c611ba0563f812d0d8c611beca872d6aa8af6cdabe2c9b9f2ebd6fffff7c7c6bceff8ee -ddeadeefefe7f7ffeff7fff7e7f4f7e7f2edffffffffffffffffffffffffffffffffffffffffff -fffffff7fffff7ffffffffffffffffdeedeeffffff979ca9d6dedeffffffffffffffffffffffff -fffffffffffffffffffffff7ffffff9fa89c7c7b7c5456564d4853e7f4f79b9c9c616f61272522 -616f61aeadadbdbdbda5a5a6bdbdbd3f3235616f61e7e7e7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff7f7efe2c9b9c28268e28e67bc6a39da8539ef883ada8539d66b42b55d18b55d18bc6a39 -a0563fa13e30954713661b0c954713dea372e6c196f3ac92f6cdabeee1c3c7c6bcb7bcadb7bcad -eff8eef7ffefefefe7fffffffffffffff7fffff7fffffffffffffffffffffffff7fffffffffff7 -fffffffffffffffffff7fffff7ffffeff7fff7ffffd6e6edcee0efd6d6ebf7ffffffffffffffff -ffffffffffffffffffffffffffffffe7e7e7efefefcddadad6dedefffffffffffff7f7f7e7e7e7 -e7e7e7f7f7f7ffffffefefefffffffd6dedeefeff7ffffffffffffffffffefefefffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7 -fffffffffff7ded6ccbc6a39e28e67da8539d66b42da8539da8539ef883ada8539da8539c48756 -b55d18661b0c812d0da0563fbc6a39dea372ebc07cf3ac92f6cdabf6cdabffecd0ffecd0a18b74 -ffffeffff7effffff7fff7fff7f7f7fffffffffffffffffffffffffffff7fffff7fffff7fffff7 -ffffeff7ffeff7fffff7ffffffffffeff7ffefffffffffffe1eeffbac6d8e1eefffffffff7ffff -fffffffffffffffffffffffffffffff7fff7d6dedefffffff7ffffe7f2eddeedeefffffff7f7f7 -ffffffffffffdededef7f7f7efefeff7f7f7f7f7f7f7f7f7f7f7f7ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffff7fffff7 -fffff7ffffffeee1c37d3d30bc6a39c48756e28e67e18855bc6a39c18040da8539bc6a39c18040 -c48756c18040c48756d2a46adea372c48756d2a46aebc07cd6aa8ae6c196f6cdaba18b74d7ad9d -fbefeffffff7fffffffffffff7f7fff7f7fffffffffffffffffffffffffffffff7fffff7ffffef -fffff7f7fff7fffffff7ffffe1eefff7fffff7ffffefffffffffffbbc1c8efeefff7ffffeff7ff -fffffffffffffffffff7f7f7ffffff9fa89c000000cddada898c8c9b9c9c9b9c9ccecece4d4853 -dededeffffff7c7b7c9b9c9c9a9291c6cece545656d6d6d6fffffff7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7fff7f7f7f7ffffffded6cca0563f846a4ca16d56a38457c48756c48756c18040a2763fd2a46a -c18040c48756c48756c48756d6aa8aebc07ce6c196bea476d6aa8abea4767e5640a38457fff7ef -fff7effff7f7fffffffffffffffffffffffffffffffffffffff7fffffff7fffff7fffff7ffffef -f7ffefe7f2edf7fff7efffffefffffefffffe1eeffffffffd6dede67687ce7f4f7ffffffe7f4f7 -fffffffffffffffffff7fff7f7fff7fffffffffffff7fff7ffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff7 -fffffffffffffffff7efefe7ffffffbab69d4927175c3f1b5c553bbea476a38457c48756d2a46a -a38457c48756dea372dea372c28268bea476bea476d6aa8a846a4ca38457a18b74fdffe7fdffe7 -ffffeffffffffffffffffffffff7ffffffffffffffffffffffffffe7f4f7fffffffffffff7fff7 -e7f2edffffffe7f2edefffffffffffdeedeeeff7ffcbcedb67687cefefeff7fffff7ffffffffff -f7f7fffffffff7fff7ffffffefefe7dededeb5b5b5f7fff7a8b9bdc6c6c6b5b5b5c6c6c6efefef -e7e7e7c6c6c6b5b5b5dededec6c6c6dededef7f7f7efefeffffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7fffffffffff7f7f7f7effffff7a5a5a62445382445382725223f3235413d125c553ba38457 -c28268c38a81c38a81c38a81a384577e56405c553b5c553b83814ef2ebd6fdffe7fdffe7ffffef -fffffffffffffffffffffffffffffffffffffffffff7fffffffffff7fffff7fffff7ffffefffff -efffffffffffffffffffffffdeedeecddadacbcedb557085e7e7e7ffffffdeedeefffffff7f7f7 -fffffff7f7f7ffffffffffffdae0d6b5b5b5616f61dedede545656616f613f32354d4853fffff7 -aeadad2725224d463cd6d6d65456567c7b7cffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f7f7fffff7ffffffffe2c9b9bab69d9a92914d4853412f543154491e1f3a1e1f3a4d48534d463c -4d463c4d463c3f32354d463c4d48534d4853272522244538b7bcadfffff7eff8eeffffeffffff7 -fffffffffffff7f7fff7fffff7fffff7fffff7ffffefffffdeedeeeff7fff7ffffffffffffffff -ffffffdeedeea8b9bdd6dede979ca9979ca9bac6d8f7f7f7e7f4f7eff7ffffffffffffffefefef -fffffffffffffffff7fffff7fffffffffffff7f7f7d6dedeffffffd6dedecececec6c6c6ffffff -f7f7f7bbc1c8e7e7e7ffffffdedededededeffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffe7e3f7f7f7ff -fffffff7efffa5a5a6a16d56a16d569d716f4d4853412f542f53791426571e42531e42531e1f3a -1e42532f53791e425316595314265716595347728531544990aaaabcc8bccbcec5fbefeffff7ff -fff7fff7f7ffefffffe5ffffe5ffffe5ffffe5fffff7fffff7ffffffffffefffffa8b9bd979ca9 -a8b9bde7e6ef2f5379848e9bcddadad6e6edffffffefffffefeff7fffffff7f7f7ffffffffffff -f7f7f7fffffffffff7fffffffffff7efefeff7f7f7ffffffefefefffffffffffffffffffffffff -efefeffffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7f7ffffffffffffffefeeff -a8a8b59991aa9d716f7d3d30a0563f846a4c67687c1e42531e1f3a142657155078153470142657 -1550781b6ea31b6ea31b6ea31b6ea33f70b44f6c9f47728590aaaa90aaaa90aaaad6e6edffffff -fffffffffffffffffff7ffffefffffefffffefffffa8b9bd677e836175a7d6e6eda3c4da7e86b0 -557085bac6d8cbcedbd6dedeffffffe7f4f7eff7fffffffff7fff7f7f7f7f7fff7fffff7fffff7 -fffff7fffffffffff7fffff7fffffff7f7effffffff7f7f7e7f4f7fffffff7f7f7ffffffffffff -f7f7f7efefeffffffffffffff7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffdedef0a8a8b57e7b9c -55708567687c7a6870812d0d5c3f1b5c3f1b5c553b4d4853142657153470155078153470155078 -1a378a1b6ea31b6ea31b6ea31b6ea34f6c9f153470165953557085557085677e83848e9b848e9b -677e837e7b9c6175a75570854f6c9f848e9bcee0efcee0efbac6d890aaaaa8aac6a3c4dacee0ef -cee0efd6e6edfffffffffffff7ffffeffffff7fffffffffff7fff7f7fff7f7f7effffff7ffffff -fffff7fffff7fffff7fffff7fffff7fffffffffffffffffffffffffffffffffffffffffff7f7f7 -f7f7f7fffffffffffff7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffff7fffffffffffffffffffffffffffffff7ffffdedef07b8dc86175a75058b0 -5058b05058b052457a5c3f1b661b0c7e56405c3f1b3f32352445381e42531e1f3a1550781b6ea3 -1550781b6ea31b6ea31b6ea31b6ea3315449616f61a5a5a6898c8c83814eb99f9bb99f9bcec6c6 -c8c5d5d6d6decddadacddadaa3c4daa6c8eba6c8ebbac6d8bac6d8bac6d8c4d3edd6e6edeff7ff -fffffffffffff7fffff7fffffffffffffffffffffffffffffffffffffffffffff7ffffffffffff -fffffffffffffffffffffffffffffffffff7fffffff7f7f7fffffffffffffffffff7f7f7ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffff7fffffffffffffffffffffffff7ffffffffff8ba1c74c52996175a7616cbf -616cbf5058b04c52995c2e35846a4c492717605622605622413d122445383154491e4253142657 -155078155078155078165953336b4d566f4242500d83814ed6aa8ad7ad9dc38a81c38a81ffffff -ffffffffffffcee0efa3c4daa6c8eba3c4daa3c4dabac6d8cee0efe7f4f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffff -f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7ffffffffffffffffffffffffffffffffffffeff7ffa3c4da52457a616cbf616cbf -616cbf616cbf5058b05d324b3f32355c2e355c2e355c3f1b4927175c553b5d324b4d48534d4853 -412f5427252231544927381383814ea18b74bea476a384575c553b5c3f1b4d463c4d463c898c8c -a8a8b5bac6d8a8aac6a8b9bda6c8ebe1eeffe1eeffeff7fffffffffffffffffffff7fffff7ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffefefefffffff545656000000e7e7e7ffffffbdbdbdcecece272522 -fffffff7f7f7f7f7f7f7f7f7f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffff7fffffffffffffffffffffffff7ffffffffffe1eeff6175a76175a74c5299 -7b8dc8616cbf5058b05556827a6870412f543f32355c2e355c553b5c2e355c2e358040495c2e35 -7d3d305c2e35a16d56c48756a38457c18040c28268a18b74a18b749b9c9c4d4853848e9ba8b9bd -bac6d8d6e6edeff7fffff7fffffffffffffffffffffffffff7ffffeff7ffffffffffffffffffff -f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffff7f7f7efefefffffff545656000000000000000000e7e7e7a5a5a6616f6167687c -1017155456564d4853000000a5a5a6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffff7fffffffffff7fffffffffffffffffffffffff7ffffeff7ffcee0ef7b8dc84f6c9f -616cbf5058b0616cbf7b8dc84c529952457a67687c4d48533f32355c2e355c2e355c2e35804049 -804049a0563fbc6a39e18855c48756c28268d2a46a9d716f5c553b4d463cddeadeffffffefffff -effffff7fffffffffffffffffff7ffffeeffffeeffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffc6c6c63f3235000000101715000000a5a5a6e7e7e7101715efefef -616f61272522b5b5b51017159a9291ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffff7ffffffffffffffffffffffffffffffdeedeef7f7ffeff7fff7f7ffa6c8eb -7e86b06175a75058b05058b0616cbf4c52994c529967687c555682412f54412f547a68705c2e35 -5c2e358040495c2e357d3d30661b0c5c2e35661b0c846a4c9a9291fff7f7f7ffffe7f4f7e5ffff -e5ffffeffffff7f7fffff7fffff7fffff7fffff7ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff7f7f7ffffffd6dede3f3235101715616f61f7f7f7d6d6d6000000272522 -3f32352725229b9c9c9b9c9ca5a5a6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7ffffffffff -ffffffa8aac6a3c4daa6c8eb5058b07b8dc85058b05058b06175a74c52995058b04c5299616cbf -52457a412f54412f5467687c9a92919d716f9a9291fce6eeffffffffffefeff8eeffffefffffef -fffff7fffff7fffffffffffffff7fffff7fffffffffffffffffff7f7f7f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd6d6d6f7f7f7f7f7f7ffffffd6d6d6545656ffffff -f7f7f7efeff7f7f7f7efefefffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffff7fffffffffff7ffffeff7fff7ffff -eff7fffffffffff7fffff7ffe7e3f7a8aac6a3c4da9c9fc09c9fc09c9fc09c9fc09c9fc09991aa -7e86b09991aa7e86b0c6b9c6ffeefffffffffffffffff7fffff7f7fffff7ffffeffdffe7ffffef -ffffeffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff7f7f7ffffffffffffffffffffffffc6c6c6e7e7e7efefef -bdbdbdbdbdbddededee7e7e7e7e7e7ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffff7fff7ffffeffffff7fffff7fffffffffffffff7fffff7ffffefffffef -ffffeffffff7fffff7f7fffff7fffff7fffff7fffffffffffffffffffffffffff7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffff7fffff7fffff7fffff7fffffffffffffffffffffffffff7ff -fffffff7f7fffff7fffffffff7fffff7fffff7fffff7fffff7ffffffffffffffffffffffffffff -fffffffffffffffffff7fffff7fffff7fffffffffffffff7ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffff7fffffffffffffffff7ffffffffffffffffffffff -fffffffffffffffffffffffffffff7ffffeffffff7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff7fffff7fffffffffffffffffffffffffffffffffffffff7fffff7 -fffff7fffffffffffffffffffffff7fffff7fffff7fffffffffffffffffff7fffff7ffffffffff -fffffffffffffffffffffffffffff7ffffeffffff7ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffff7fffff7f7fff7f7fffff7fffff7fffff7fffff7fffffffffffffff7fffff7fffff7 -fffff7fffff7fffff7fffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffff7fffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff7 -fffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff7ff -fffffffff7fffffffffff7fffffffffff7fffff7ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffff7fffff7 -fffff7fffff7fffff7fff7f7fff7f7fff7fffff7fffffffffffffffffffffffffffffff7fff7f7 -fff7f7fff7f7ffeeffffeeffffeeffffeeffffeefffaeef7fbefeffce6eefdefe7fdefe7fdefe7 -fce6eefbefeffce6eeffeeffffeeffffeefffaeef7fce6eefaeef7faeef7faeef7fff7efffffef -ffffeffffff7fffff7ffffefffffeffdffe7ffffefffffefffffefffffefffffefffffefffffef -ffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffef -ffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffefffffef -ffffefffffefffffefffffefffffefffffefffffefffffef000000 -000000fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4fdcfc4 -fdcfc4fdcfc4fdd0cefdd0cefdd0cefdd0cefdd0cefdd0cefdd0ceeee1c3fdcfc4fdcfc4fdcfc4 -fdd0cefdcfc4fdd0cefdd0cefdd0cef3d2dafdd0cefdd0cef3d2dafdcfc4fdd0cef3d2dafdd0ce -fdd0cef3d2dafdd0cefdd0cef3d2daf3d2daf3d2daf3d2daf3d2daf3d2dafdcfc4eee1c3fff6b6 -fff6b6fff6b6fff6b6fff6b6fdf5abfdf5abfdf5abfdf5abfff6b6fdf5abfdf5abfdf5abfdf5ab -fdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abfdf5abf2de95 -fdf5abfdf5abfdf5abfdf5abfff6b6fdf5abfff6b6fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6 -fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6fff6b6000000 -000000bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111 -bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111a00d08bc1111b70d05bc1111bc1111 -d30f15b70d05bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111bc1111b70d05 -bc1111b70d05bc1111d30f15bc1111bc1111d30f15bc1111bc1111d30f15b70d05ef883ade9d2e -de9d2eb6a042de9d2ede9d2ee7a330e7a330de9d2ee7a330e7a330de9d2ede9d2ede9d2ee7a330 -e7a330de9d2ee7a330e7a330e7a330de9d2ede9d2ede9d2ede9d2ede9d2ede9d2ee7a330de9d2e -de9d2ee7a330de9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2e -de9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2ede9d2e000000 -000000ee000cee000cee000cee000cee000cee000cee000cee000cee000cee000cee000cee000c -ee000cee000cee000cf7000ff7000fee000cf50f10f50f10f50f10f50f10f50f10dc0c02f7000f -ee000cf50f10d30f15d30f15d30f15f50f10ee000cee000ceb0000f50f10ee000cee000cf50f10 -f50f10dc0c02ee000cdc0c02f50f10f50f10dc0c02dc0c02dc0c02dc0c02bc1111ec8311ffa21c -f3a015e7a330f3a829ffa21cf3940bff9403f3a015f3940bf3a829f3a015ffa21cffa21cffa21c -ffa21cec8311ffa21cf3a015f3a015f3940bffa21cf3a829f3940bf3a829f3a015f3940bffa110 -f3940bf3a015ff9c08f3940bff9c08ffa110f3a015f3a015f3a015ffa110f3a015ffa110ffa110 -ffa110ffa110ffa110ffa110ffa110ffa110ffa110ffa110000000 -000000ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008ff0008 -ff0008ff0008ff0008f7000ff7000ff7000ff7000fff0008ff0008ff0008ff0008ff0008ff0008 -f50f10f50f10d30f15dc0c02ee000cf50f10f70000f80900ff0000ff0000f70000f80900ff0000 -f70000f50f10f50f10f50f10ee000cf50f10f80900f70000f80900f50f10dd250fec8311ff9403 -f3940bf3940bf3940bf3940bff9c08ff9c00ff9c08ff9c08ff9c08ff9c08ff9403ff9c08ff9403 -ff9403ff9c00f3940bff9403f3940bf3940bff9c08ff9c08ff9403ff9403ffa110ff9c08ff9c08 -ffa110ff9403ff9c08ff9c08ff9c08ff9403ff9403ff9403ff9403ff9403ff9403ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000f70000f70000f70000ff0000ff0000ff0000ff0000ff0000ff0000f50f10 -dc0c02dc0c02b62b10d66b42f13f3df70000f70000f80900eb0000f70000ff0000ff0000ff0000 -ff0000eb0000eb0000f50f10f80900f70000eb0000eb0000f80900dc0c02dd250fec8311ff9403 -f3a829ffbc38f5bb36f3940bff9c08ff9403f3940bf3940bf3940bf69d04f3940bff9c00ff9c00 -f3940bffa508ff9c00ff9c00ff9c00ff9c00ff9403ff9403ff9c00f3940bf3940bec8311ff9c08 -f3940bf3940bf3940bff9c08f3940bff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000f80900f80900f70000ff0000ff0000ff0000ff0000f70000f80900f70000 -ee000ccc0004bf4d3efdffe7e78673dc0c02f70000dd250ff50f10eb0000f50f10dc0c02eb0000 -f50f10f13f3ddd250feb0000f50f10f13f3df50f10f13f3df50f10dc0c02dd250fec8311ec8311 -f5bb36f5bb36fcdf6af3940bec8311f3940bffbc38f3a829f3a015f3a015f5bb36f3a829f5bb36 -f3a015f3a015ec8311f3a829f5bb36f3a015f3a015ffbc38f5bb36f5bb36f3a829f5bb36e7a330 -f5bb36e7a330ffbc38f3a829f3a015f3a015ff9c08ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000f80900f80900f80900ff0000ff0000ff0000ff0000f70000f80900f80900 -f50f10dc0c02b62b10ffffefe78673dc0c02eb0000e88683f3ac92f50f10d30f15dc0c02d30f15 -f13f3dfdcfc4e88683e78673dc0c02e18855f13f3de88683f13f3ddc0c02cc0004ef883af3a015 -f3a829fcdf6affbc38e7a330f5bb36f3a015f5bb36fcdf6afcdf6ade9d2ef2de95fcdf6af2de95 -fcdf6ade9d2ede9d2efcdf6aebc07cec8311de9d2ef2de95ffbc38f2de95fcdf6afcdf6ae7a330 -f5bb36e7a330fdf5abffbc38f3a015f3a015f3a015f3a015f3a015f3a015f3a015f3940bffa508 -f3a015ff9c08f3a015ff9c08f3a015ff9c08f3a015ff9c08000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000f70000 -f80900ee000cd30f15f13f3df13f3ddc0c02ee000cf13f3df13f3df50f10ee000cf50f10d30f15 -dc0c02f13f3df13f3df13f3ddc0c02f50f10f50f10f13f3df50f10ee000cdc0c02ef883af3940b -f3a829f5bb36f5bb36f3a829f3a829f69d04f3940bf3a015f3a829f3940bf5bb36f3a015f5bb36 -f3a829f3a015f3940bf3a829f3a015f3940bf3a015f5bb36f3a015f5bb36f3a829f5bb36e7a330 -f3a015f3a829f5bb36f3a829f3a015f3a015f3940bffa500ff9c00ff9c00ff9c00ffa500ff9c00 -ff9c00ff9c08ff9c00ff9c08ff9c00f3940bffa500f3940b000000 -000000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0008ff0008f7000feb0000ee000cee000cee000cf7000ff7000fee000cee000cee000cee000c -ee000cdc0c02eb0000dc0c02ee000cee000cee000cff0000ff0008f80900dc0c02ec8311ff9403 -ff9c00f3940bf3940bff9c00ff9c00ff9c00ffa500f3940bf69d04ffa500f69d04f69d04ff9c00 -f69d04ffa500f69d04f69d04f69d04f69d04f69d04f69d04ffa500f69d04f3940bf3940bf3a015 -f3a015ff9c08ff9403ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ffa500ff9c00ffa500ff9c00ffa500ffa500ff9c00ffa500000000 -000000ff0000f70000ff0000f70000ff0000f70000ff0000f70000ff0000f70000ff0000f70000 -ff0000f70000ff0000ff0000ff0000ff0000f70000dc0c02f80900eb0000f70000f70000ff0008 -ff0008ff0008f7000ff7000fff0008ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -f70000ff0008f70000ff0000f70000f70000f70000ff0000ff0000f80900dc0c02ec8311ff9403 -ff9c00ffa508ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c08 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c08ff9c08ff9c08 -ff9c08ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000f70000f70000f70000f70000f70000f70000f70000f70000f70000f70000f70000f70000 -f70000f70000f70000ff0000ff0000f70000dc0c02dc0c02dc0c02dc0c02dc0c02f70000f7000f -ff0008ff0008f7000ff7000fff0008ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000 -ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000ff0000f80900dc0c02ec8311ff9403 -ff9c00ff9c00ff9c00ff9c00ff9403ff9c00ff9c00ff9c00ff9c08ff9c08f3940bff9c08f3940b -ff9c08f3940bff9c08f3940bff9c08f3940bff9c08f3940bff9c08ff9c08ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00 -ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00ff9c00000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/pthreads.gif b/Docs/Books/pthreads.gif Binary files differdeleted file mode 100644 index 3dcd86b2c41..00000000000 --- a/Docs/Books/pthreads.gif +++ /dev/null diff --git a/Docs/Books/pthreads.txt b/Docs/Books/pthreads.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/pthreads.txt +++ /dev/null diff --git a/Docs/Books/realmen.eps b/Docs/Books/realmen.eps deleted file mode 100644 index c04e3fd8ffa..00000000000 --- a/Docs/Books/realmen.eps +++ /dev/null @@ -1,1167 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/realmen.eps -%%CreationDate: Sun Dec 31 14:31:25 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 298 372 -%%EndComments -%%BeginPreview: 100 126 1 126 -% fffffffffffffffffffffffff0 -% aaaaaaaaaaaaaaaaaaab7b5550 -% d5555555555555555555add4b0 -% aaaaaaaaaaaaaaaaaaaeff6b50 -% d555555555555555555556aab0 -% aaaaaaaaaaaaaaaaaaabaf5450 -% d5555555555555555556feaa10 -% aaaaaaaaaaaaaaaaaaaaa548b0 -% d5555555555555555556aa9210 -% aaaaaaaaaaaaaaaaaaa9542450 -% d5555555555555555552254a90 -% aaaaaaaaaaaaaaaaaaa89a1030 -% d555555555555555555054a7b0 -% aaaaaaaaaaaaaaaaaaa92a0ad0 -% d555555555555555555054a550 -% aaaaaaaaaaaaaaaaaaaaaa4af0 -% d55577d5555555555550fd5490 -% aaabdd7aaaaa90a24aabfe5530 -% d556b7ad55554a489551fb5490 -% aaabd4b6aaaaa55252afef2d10 -% d556ab5d55552aad5553feaa30 -% aaadd556aaaad552aaabfe5490 -% d5576aaaabaaaaed5557dd5530 -% aaadaaaaaaaaaaaaaaabfeaad0 -% d556d55557aaaaeaaaabfa57f0 -% aaadaaaaaaaaaad55555fd5570 -% d5576aaaabaaabaaaaa9eaabd0 -% aaadd55556aaaaeaaaa9fd56b0 -% d556aaaab5db76b755527556b0 -% aaadd555ef76adddaaa8955510 -% d5576aaabadd7b775554555650 -% aaadaaaad7ab56d55551555a90 -% d556d555555555aaaaaa2b6d10 -% aaadaaaaabaaaaeaaaaadedab0 -% d5576aaaaaaaaaaaaaad6bee90 -% aaadd55557aaaaeaad52b7bbf0 -% d556aaaaaad555aaaab7fff770 -% aaadeaaaab55556ab7fffffff0 -% d557555eaaaaaaabfffffffff0 -% aaadd5aaaaaaad5ffffbfcbf70 -% d556aabd5555557ffff7fd7fb0 -% aaabff6aaaaaabfffff51dd970 -% d55555dab55557fffff6fcd570 -% aaaaeeb555aaafffffedbb5570 -% d555555555555ffffff7fffff0 -% aaaaaaaaaaaabff9ffdffffff0 -% d555555555555ff6fffffffff0 -% aaaaaaaaaaaaaffaa495084970 -% d55555555555abf76dbabb5b70 -% aaaaaaaaaaaaabf76db3ad5ef0 -% d55555555555557ffafffffff0 -% aaaaaaaaaaaaaaaffffffffff0 -% d555555555555555fffffffff0 -% aaaaaaaaaaaaaaaa57fffffff0 -% d555555555555555a8555f5c10 -% aaaaaaaaaaaaaaaaaba856dab0 -% d55555555555b555555557b750 -% aaaaaaaaaaaaaad6aaa817aef0 -% d55555555555555555552b7bb0 -% aaaaaaaaaaaaaaaaaaa82fd550 -% d5555555555555555554935bf0 -% aaaaaaaaaaaaaaaaaaa817d550 -% d55555556d556d5555544b5d30 -% aaaaaaaaaaaaaaaaaaa817d510 -% d55555555555aad55554ab6c50 -% aaaaaaaaaab6ad56aaa80baa90 -% d5555555555555555554abd630 -% aaaaaab5aaaaaaaaaaa8155d50 -% d5555555556ad5555554abaab0 -% aaaaaaaaaaad5ab6aaa826aff0 -% d555555556d555aad554aaaab0 -% aaaaaaaaaaaaaaaaaaa856d770 -% d5555555b555555556d4ab55b0 -% aaaaaab6aaaadaaaaaa82ed650 -% d55555555556ab555555575d10 -% aaaaadaaaadaaab6b6a85db450 -% d5555555555555555554abfe90 -% aaaaaaaaadaaaaaaaaa92fda10 -% d555555b55556d5555595efeb0 -% aaaaaaaab55aaab6b6aa5dea90 -% d55556d55555aad55554bfdf70 -% aaaaaaaaaaaab5556aa977f5b0 -% d5555555556aaaaaaad56edb50 -% aaaaaaab6aad55b5555addf6b0 -% d555b55556d5aaaad6abb7dab0 -% aaaaaaad55555b555aaafff510 -% d55555556aaaaaab555756ea50 -% aaaaaad5ad555555556afff510 -% d555555aaaab6aad6aadabdc50 -% aaab6b55556d556aad56def510 -% d5555555aaaaab5555aab7ea50 -% ad5aaaaab5aab555aab76dddb0 -% d56aad5556ab56aab555bf7550 -% aaaad5adaab55556aaaad5fab0 -% d555555555556ab555576fead0 -% aaaaaaaaad56ad556b6abb7b50 -% d6d5555555aad5aaad56d7ea10 -% aaab6adab55aaab55555bdf550 -% d5555555aaaaad56aaaeabac10 -% aaaaab5555b5b5aad555dffa90 -% d56d5d6b6d56aab55ab6aaed30 -% daaaaaad56daad56ab5527b610 -% d5aadb75b56ad5aad5569aed50 -% aab6aaaaab56aab5556a2b5bf0 -% d555555555555b56ad5494aa90 -% fffffffffffffffffad5115bf0 -% fffffffffffffffffb5a4ed6b0 -% f7ffeff7ffbfbff7f56a9114b0 -% f488305512616c147aad14b510 -% f6b7b7baf7effff7fb55551410 -% fffffffffffffffff56d16f490 -% fffffffffffffffffaab55a210 -% d5555555555554952b6da54a50 -% d5555555555555b56aaadff510 -% db6db6db6dadb6aad6d77455f0 -% d5555555556aaad6aab5a92ab0 -% dadb6db6db5b6d5adb56d2ad50 -% d6aaaaaaaaaaab6b556b71aaf0 -% dad6db6db6d6daad6aada54a90 -% d55aaaaaaabaab55adb5749510 -% d6ab56db6dab5ab6b555a91630 -% dadab55555556b5556da505490 -% d5556db6db6dad6daaa94aaa10 -% d6b6aaaaaaaab5aab5b4105690 -% dad5b56db6db56b556a8a52ab0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 357.165354 translate -283.464567 -357.165354 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 126 8 -% Transformation matrix -[ 100 0 0 126 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -00000048b33423ad2331bf0d22b50b31bf0d25b52129bd0822b50b23b50021bd0821bd0821bd08 -21bd0021bd0821bd0021bd0821bd0821bd0821bd0821bd0821bd0821bd0821bd0829bd0821bd00 -21bd0021bd0021bd0021bd0021bd0021bd0021bd0021c60021c60018bd0018c60018c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60021c60021c60021c60018c60021c60018c60021c60018c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60018c60805974b -06aa6d02946f06aa6d00955f04787005775608911a08911a05983505974b00955f00955f06aa6d -06aa6d43b66d43b66d6ec36843b66d25a75822a63223ad23000000 -00000031bf0d31bf0d31bf0d29c60029c60829c60029c60021c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c600 -21c60018c60021c60021c60021c60021c60018c60021c60018c60021c60021c60021c60021c600 -21c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60800955f -06aa6d00955f00955f00955f0577560c751808911a08911a05983505974b00955f00955f06aa6d -06aa6d23a57923a57925a7586ec36850bf4f25a75848b334000000 -00000029bd0831bf0d31bf0d29c60029c60029c60821c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c60018c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60805974b -00955f06aa6d00955f00955f0c751808911a185d2829312926642208911a00955f05775605974b -18a2753da88306aa6d25a75843b66d6ec36850bf4f409651000000 -00000031bf0d31bf0d31bf0d29c60829c60029c60029c60029c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c600 -21c60018c60021c60021c60021c60021c60018c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021bd0800955f -02946f00955f00955f05775608911a059835333631293129253021188a0d05974b00955f05974b -43b66d43b66d25a75825a75843b66d649e6a649e6a409651000000 -00000031bf0d31bf0d31bf0d29c60829c60829c60829c60029c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60800955f -00955f00955f00955f05974b059835239a3a3336312530212931293e822705974b18a2753fa46b -43b66d43b66d3fa46b48b33489bc5aafb869a89971a58f55000000 -00000029bd0831bf0d29c60829bd0829c60829c60829c60029c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -21c60018c60021c60021c60021c60021c60021c60018c60021c60018c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60805974b -05974b05974b06aa4705974b059835239a3a4d5d572530212931293e822705974b3da88362a788 -4eb58850bf4f3fa46b91bf3bafb869ddc17eeab65ef3b50f000000 -00000031bf0d31bf0d31bf0d29c60829c60829c60829c60829c60829c60821c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c60018c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18c60021c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60807aa32 -05983507aa3205983507aa3205974b25a758649e6a4b572e637e2405983523a57970b68c70b68c -70b68c649e6a89bc5a91bf3bddc17eddc17ef8af56f5bd00000000 -00000023bf1131bf0d31bf0d29bd0829c60829c60829c60029c60829c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60018c60021c60018c600 -21c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c60806aa47 -05974b08a62907aa323fa46b3fa46b43b66d649e6a63c74d6a92543da88370b68c88ad9788ad97 -88ad97abb37eabb37ecbb062ddc17efab77bf8af56f5bd00000000 -00000029bd0831bf0d31bf0d29c60829c60829c60821c60029c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60018c60018c60018c60021c60018c60021c60018c600 -21c60018c60021c60018c60021c60021c60018c60021c60018c60021c60018c60018c60018c600 -18c60021c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60018c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021bd0850bf4f -6ec3686ec368649e6a6ec36870b68c649e6a70b68c62a78870b68c88ad9788ad978bc1a38bc1a3 -a1ad9ea1ad9e88a87acbb062d9ac7bfab77bf5af30f5bd00000000 -00000029bd0831bf0d31bf0d29bd0829bd0029c60829c60021c60029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -18bd0018c60021c60021c60021c60021c60021c60018c60021c60018c60021c60018c60021c600 -21c60021c60021c60021c60018c60021c60021c60018c60021c60018c60021c60018c60021c600 -18c60021c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60029bd08afb869 -d9ac7b85c17685c17685c176649e6a4eb58862a78862a7884eb58862a7888bc1a38bc1a3a3b8af -a1ad9e929b9c8f8f7ab88d5bd9ac7bcbb062f5af30f3b50f000000 -00000029bd0829bd0831bf0d29bd0829c60829bd0829c60029c60021c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60018c60021c60018c60018c60018c60021c60018c600 -21c60018c60021c60018c60021c60018c60021c60021c60018c60018c60018c60018c60018c600 -18c60018c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c60021c600 -21c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60029bd08ddc17e -ddc17eabb37eabb37e85c17670b68c3fa46b23a57918a27506aa6d4eb5888bc1a3a3b8afa3b8af -a3b8afa1ad9e88ad9789bc5acbb062d99755eab65ee4ac2c000000 -00000029bd0829bd0831bf0d29c60029bd0829c60021c60029c60029c60021c60821c60821bd00 -21c60021c60021c60021c60021c60021c60021c60021c60021c60018c60021c60018c60021c600 -18bd0018c60021c60018c60021c60018c60021c60018c60018c60018c60018c60018c60021c600 -18c60021c60018c60021c60018c60021c60018c60021c60018c60018c60018c60018c60018c600 -18c60018c60018c60018c60021c60018c60021c60021c60021c60021c60021c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c608ddc17e -fdca81ddc17eabb37eabb37e88a87a62a7883da88323a5793da8838bc1a38bc1a3a3b8afa3b8af -a3b8afa1ad9e83959818a2754096516a92547f8a518b873b000000 -00000029bd0031bf0d31bf0d29bd0829c60029bd0829c60829bd0821c60821c60021c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60018c600 -18c60021c60018c60021c60021c60021c60021c60021c60018c60018bd0018c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60018c60021c60021c60021c60021c60021c600 -18bd0021c60021c60018c60021c60021c60018c60021c60018c60021c60018c60021c60018c600 -21c60018c60018c60021c60018c60021c60021c60021c60021c60021c60021c60029bd08abb37e -fdca81ddc17ed9ac7ba8997188a87a88a87a7d957862a78870b68c8bc1a38bc1a38bc1a3a3b8af -8bc1a3a3b8af62a78800967b06aa6d00955f05974b278c56000000 -00000029bd0829bd0831bf0d29c60029bd0029c60029bd0029c60029bd0021c60021c60021c600 -21c60021c60021c60021bd0021c60021c60021c60021c60021c60021c60021c60018c60018c600 -18bd0018c60021c60021c60021c60021c60021c60018c60018c60018c60021c60018c60018bd00 -21c60021c60018c60021c60018c60021c60018c60021c60018c60018c60018c60018c60018c600 -18c60018c60018c60018bd0018c60018c60021c60018c60021c60018c60018c60021c60021c600 -18c60021c60018c60021c60021c60021c60021c60021c60021c60021c60021c60029c608ddc17e -fdca81d9ac7bd9ac7ba8997191875d818c647d95787d957870b68c88ad978bc1a38bc1a38bc1a3 -8bc1a38bc1a34eb58800967b00955f06aa47409651497651000000 -00000029bd0029bd0829bd0029bd0029c60029bd0029c60021bd0029c60021c60021c60021c600 -21c60021c60021c60021c60021c60021c60021bd0021c60021c60021bd0021c60021bd0018bd00 -18c60021c60021c60021bd0021c60021c60021c60018c60018c60018c60021c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60018c60021c60018c60021c60821c60821c600 -18c60018bd0023bf1131bf0d31bf0d21c60818c60018c60018c60023bf1129c60821c60021c600 -21c60021c60021c60021c60021c60021c60021c60021c60021c60021c60021c60029bd08d9ac7b -fab77bd89076b88d5ba58f557f8a51816e5a818c647d95787d957870b68c88ad978bc1a38bc1a3 -8bc1a38bc1a362a7883fa46b25a75825a758278263497651000000 -00000029bd0829bd0831bf0d29bd0829bd0029c60829bd0029c60821bd0021c60021c60021bd00 -21bd0021c60023bf11239a3a29846d347382347382347382296e87296e87296e87296e87347382 -29846d239a3a21bd0821c60021c60021c60021c60021c60018c60018bd0018c60021c60021c600 -18c60021c60018c60021c60018c60021c60018c60021c60021c60018bd0063c74d70d75610c600 -10bd0023bf1163c74d63c74d63c74d21c60818bd0085c17621c60063c74d50d03810c60018c600 -18c60018c60018c60018c60018c60021c60021c60021c60021c60021c60021c60021c608d9ac7b -fab77bd89076906a58493e28493e28344833493e284b572e818c6488a87a70b68c4eb5884eb588 -4eb58870b68c62a788649e6a89bc5a7f8a518b873b927820000000 -00000029bd0029bd0831bf0d29bd0029bd0829bd0029c60829bd0029c60821c60021c60021bd00 -21c60023ad23296e87315aad315aad315aa5315aa5315aa5315aa5315aa5315aa5315aa5315aa5 -315aa5315aad296e8725b52121c60021c60021c60018c60018c60018c60018c60018c60018c600 -21c60018c60021c60018c60021c60018c60021c60021c60021c60010c60063c74d63c74d25b521 -63c74d70d75670d75685c17650d03810bd0031bf0d8bc1a350d03850d03863c74d50d03870d756 -50d03863c74d50d03870d75650d03821c60021c60021c60021c60021c60021c60021bd00cbb062 -d89076906a58333631222929213129253021213129222929344833818c6488ad974eb5883da883 -109c8423a57906aa6d48b334cfad02cfad02e4ab00e4ab00000000 -00000029bd0829bd0029bd0829bd0829bd0029c60829bd0021c60829bd0021c60821bd0821c600 -23ad23296598315aad31629c31629c31629c315aa5315aa5315aa5315aa5315aa5315aa5315aa5 -315aad31629c315aa5296e8721b51821c60021c60018c60018c60018c60018c60018c60018c600 -21c60021c60018c60018bd0018c60018bd0021c60021bd0021c60010bd0050d03870d75670d756 -63c74d50bf4f70d75670d75650d03810bd0050d03863c74d70d75650d03870d75670d7566cc951 -70d75670d75650d03885c17631bf0d21c60021c60021c60021c60021c60021c60021bd00d9ac7b -d8907633363125302129312929312929312929312926393125302160604288a87a70b68c23a579 -06aa6d06aa6d06aa6d90b112cfad02cfad02f5bd00f5bd00000000 -00000021bd0029bd0829bd0829bd0821bd0829bd0821c60029bd0021c60821c60021c60021bd00 -287b7b315aa531629c3163a5315aa5287b7b23ad2322a63223ad2323ad2323ad2323ad2321a427 -27826331629c31629c315aad278c5621c60018bd0018c60018bd0018c60018c60018c60018c600 -18bd0018c60021c60021c60018c60018c60018bd0018c60021bd0010bd0050d03863c74d63c74d -63c74d50d03850d03863c74d31bf0d23bf1150d03823bf1170d75670d75650d03885c17670d756 -50d03870d75648b33470d75621c60818c60021c60021c60021c60021c60021c60021bd00b88d5b -7f5a5822292929312929312929312929312929312929312925302160604288a87a70b68c3da883 -109c8406aa6d05974b90b112cfad02f5bd00f5bd00f5bd00000000 -00000022b50b29bd0829bd0821bd0029c60021bd0029c60021c60029bd0021c60821c60023ad23 -3163a531629c3163a531629c315aad27826321ce0018c60018c60018c60018c60018c60018c600 -18ce00239a3a315aa531629c296e8723bf1118c60018bd0018c60018c60018c60018c60018c600 -18bd0021c60018c60018bd0018c60018bd0021c60021c60010bd0050d03870d75629c60810c600 -29c60818c60021c60018c60021c60018c60021c60021c60021c60018c60025b52170d75663c74d -29c60818c60021ce0018c60021c60021c60021c60021c60021c60021c60021c60021c600b88d5b -5c4c512229292931292931292931292931292931292131292530217f8a518f8f7a70b68c23a579 -06aa6d06aa6d05974b90b112cfad02e4ab00f5bd00f5b500000000 -00000029bd0829bd0829bd0829bd0029bd0829c60021bd0029c60021c60029bd0821c600299452 -315aa53163a531629c31629c315aa529846d21c60021bd0018bd0018c60018bd0018c60018bd00 -18c60021b518296e87315ab52963a623ad2318c60018c60018bd0018c60018c60018c60018c600 -18c60018c60018c60018c60021bd0018c60021c60018c60018c60021c60021c60018bd0018c600 -18c60018c60018c60018c60018c60018c60018c60018c60021c60021c60029c60031bf0d29c608 -18c60021c60018c60021c60018c60021c60021c60021c60021c60021c60021c60029c60091875d -333631253021293129293129293129293129293129253021493e2891875da8997170b68c3da883 -18a27518a275239a3a8e8c16cfad02e4ab00e4ab00f2ad00000000 -00000023b50029bd0831bf0d29bd0829c60029bd0829c60021c60029c60021c60821c600278c56 -3163ad3163a53163a531629c3163ad29846d21c60021c60018bd0018c60018c60018bd0018c600 -18bd0018c60022a632239a3a239a3a23bf1118c60018bd0018c60018bd0018c60021bd00278c56 -287b71287b7123ad2321c60018c60021c60018c60021c60021c60018c60018bd0018c60018bd00 -18c60021bd0018c60021b518287b7b34738229846d23bf1118c60021c60018c60018c60018c600 -21c60018c60021c60021c60021c60021c60021c60021c60021c60021c60021c60029c60091875d -3336312530212931292931292931292530212931292229296a5922a58f558f8f7a88a87a3da883 -25a75825a7584096518e8c16c2920acfad02e4ab00e4ab00000000 -00000021bd0029bd0829bd0029c60021bd0029c60021bd0029c60021bd0021bd0821c600278c56 -315aad3163a53163a531629c3163a529846d18c60021bd0021c60018bd0021bd0018c60018bd00 -18c60018bd0018c60021ce0021ce0021c60021bd0018c60018bd0021c60018c60021c608287b7b -3152ae315aad22a63221c60021c60021bd0018c60018bd0018bd0021c60018c60018bd0018c600 -18bd0018c60018c60023ad2331629c3152ae29659818bd0818c60021c60021c60021c60021c600 -18bd0018c60018bd0018c60021c60021c60021c60021c60021c60021c60021c60029bd00a47953 -3336312530212931292530212931292931292931292530216a5922a58f55a8997188a87a3fa46b -3fa46b3fa46b617e3e637e24927820927820966b1d927820000000 -00000021bd0029bd0829bd0029bd0029c60029bd0021c60021bd0029c60021bd0021c600278c56 -3163ad3163a53163a531629c315aa529846d21c60021c60021bd0021c60021c60021c60018c600 -18bd0021c60021bd0021c60021bd0021c60021c60018c60018c60018bd0018c60018bd00287b7b -315aa529659821a42721c60021c60018c60018bd0018c60018bd0018c60018bd0018c60018bd00 -18c60018bd0018c60025b521296598315aa5296e8721bd0818c60018c60018c60018c60021c600 -18c60018bd0018c60018bd0018c60021c60021c60021c60021c60021c60021c60021bd00b88d5b -5c4c51222929253021293129253021253021213129493e2896733ab88d5ba899717d95783fa46b -3fa46b6a92546a9254617e3e3b54533b5453244d50244d50000000 -00000021bd0829bd0029bd0829c60029bd0029c60029bd0021c60021bd0029c60021c600278c56 -3163ad3163a53163a53163a53163a529846d21c60021c60021c60021c60021c60018c60018bd00 -18c60021c60021c60021c60021c60021c60018bd0021c60018c60018c60018bd0021c608287b7b -315aa5295aa522a63218c60018bd0018c60018c60018bd0018c60018bd0018c60018bd0018c600 -18bd0018c60018c60023ad23296598315aa5296e8721bd0818c60018bd0018c60021c60018c600 -18bd0018c60018bd0018c60021c60018c60021c60021c60021c60021c60021c60021bd00b88d5b -7f5a582229292530212530212931292931292530216a5922a47953b88d5ba89971649e6a3fa46b -649e6a6a925468725168725149765126642218605c244d50000000 -00000023b50029bd0829bd0021bd0021bd0029bd0821c60021bd0029c60021bd0018c600299452 -315aad31629c3163a531629c315aad29846d18c60021bd0018bd0021c60018c60021c60021c600 -18bd0018c60021c60018c60021c60021bd0021bd0018bd0018c60018bd0018c60018bd08287b7b -315aa52963a622a63218c60018bd0018bd0018bd0018c60018bd0021c60018bd0018bd0018bd00 -18c60018bd0018c60023ad23296598315aa5296e8721b51818c60018bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018c60021c60021bd0021c60021c60021c60021c60021bd00cbb062 -d890763336312530212639312530212931292530218c5e20a58f55b88d5ba58f55649e6a6a9254 -6a92547f8a516872516060423b545318605c244d500d5549000000 -00000023b50029bd0829bd0029bd0821bd0029c60821bd0021c60021bd0021c60021c600299452 -3163a53163a53163a531629c3163ad287b7121c60021bd0021c60018c60021c60021c60018c600 -18c60021c60021c60021c60021bd0021c60021c60018ce0018c60018c60018c60018c600287b71 -315aa5315aa522a63218ce0018c60018c60018c60018c60018c60021c60018c60018c60018c600 -18c60018c60018ce0021b518296e87315aa5296e8721bd0818c60021c60018c60018c60018c600 -18c60018c60018bd0018c60021c60018c60021c60021c60021c60021c60021c60021bd00b88d5b -fab77b906a58333631253021253021213129493e2896733aa47953a58f5591875d649e6a6a9254 -8b873b8b873b687251497651244d503b54533b54533b5453000000 -00000029bd0029bd0829bd0021c60029bd0829c60021c60029bd0021c60029bd0021c600299452 -315aa531629c31629c3163a53163a529846d21c60021c60021bd0021bd0021c60021c60021c600 -18bd0021c60021c60021c60021c60023bf11299452299452299452299452299452299452296e87 -315aa531629c29846d299452278c56278c56278c56278c56239a3a18c60023ad23278263278263 -278c56278263278c5629846d296598315aa529659829846d27826329846d27826329846d29846d -18b51818c60018bd0018c60018c60021c60021c60021c60021c60021c60021c60021c600cbb062 -d89076d89076906a58493e28493e28333631493e2896733aa4795391875d818c647f8a517f8a51 -7f8a517f8a516060424b572e9278208e8c16c2920ac2920a000000 -00000022b50b29bd0829bd0821bd0021bd0021bd0029c60021c60021bd0021bd0818c600299452 -3163ad3163a53163a53163a53163a5287b7121c60021bd0021c60018c60018bd0018c60018bd00 -18c60018bd0021bd0021c60018c60025b521296598315aad315aa5315aad315aad315aad315aa5 -3163a53163a5295aa5315aad315aad315aad3152a5315ab527826318ce00239a3a315ab5295aa5 -295aa5315aad3152ae315aad315aa531629c315aa53152a53152ae315aa53152a5315aa53152ae -189d2e18c60018c60018bd0021c60018c60021c60021c60021c60021c60021c60021bd00afb869 -fab77bd9ac7bd89076a2826791875d816e5a8b873b91875d91875d7f8a516a92547f8a517f8a51 -7f8a517f8a514d5d57637e24c2920acfad02e4ab00e4ab00000000 -00000021bd0029bd0829bd0821bd0021bd0021bd0021bd0029bd0021bd0021c60021c600299452 -315aad3163a53163a53163a53163a5287b7b18c60021bd0018bd0018c60018c60018bd0018c600 -18bd0021c60021c60021bd0021c60025b52131629c315aa5315aa5315aa5315aa5315aad295aa5 -3163a5315aa5315aa5315aad315aad315aa5315aa53152ae27826318ce00239a3a315ab5315aad -315aad295aa5315aa5315aad31629c31629c315aa5315aa5315aa5315aad315aa5315aad315aad -22a63218c60021bd0018c60018bd0021c60021c60021c60021c60021c60021c60021bd00afb869 -fdca81d9ac7babb37ea899718f8f7a818c64818c64818c64818c647f8a516a92547f8a516a9254 -7f8a51816e5a497651927820cfad02e29602e4ab00f5b500000000 -00000021bd0029bd0829bd0821bd0021bd0021bd0029c60821bd0021bd0021bd0821c600299452 -315aa53163a53163a531629c315aa5287b7121c60018bd0021c60018bd0018c60018c60018bd00 -18c60021c60021c60021c60021c60021b518278263287b71287b71287b71287b71287b71296e87 -315aa52963a6287b7b278263278263278263278263278263239a3a18c60022a632278263278c56 -278263278c56278c56278263296598315aa5296598278263278c56278c56278c56278c56278c56 -18b51821c60018bd0018c60018c60018bd0021c60021c60021c60021c60021c60021bd00afb869 -ddc17eabb37eabb37e88a87a8f8f7a818c647d95786a92546a92546a92546a92546a9254687251 -687251576d67497651927820cfad02e4ab00f5b500f5b500000000 -00000022b50b29bd0821bd0021bd0021bd0021bd0021c60021c60821c60021bd0821c600299452 -315aad31629c3163a53163a53163a5287b7b18c60021bd0018bd0018c60018bd0018bd0018c600 -18bd0021c60021c60021c60021c60021c60018c60018c60018c60018c60018c60021c600287b71 -315aa5295aa522a63218ce0018c60018c60018c60018c60018c60018bd0018c60018c60018c600 -18c60018c60018ce0021b518296e87315aa5296e8718bd0818c60018c60018c60018c60018c600 -18bd0018bd0018c60018bd0018bd0018c60021c60021c60021c60018bd0021bd0021c6006ec368 -abb37eafb86985c17688a87a649e6a3fa46b278c56278c56278c5642863d3e8227617e3e497651 -49765127826318605c8e8c16c2920acfad02e4ab00f5b500000000 -00000022b50b29bd0829bd0821bd0029bd0029c60821bd0821bd0021bd0021c60821c600299452 -315aa53163a53163a53163a53163a5287b7b21c60018bd0021bd0018c60018bd0018c60018bd00 -18c60021bd0021c60021c60021c60021c60021c60018bd0018c60021bd0018c60021c600287b71 -315aa52963a6239a3a18c60018bd0018c60018bd0018bd0018bd0018c60018bd0018bd0018bd00 -18bd0018bd0018c60021b518296598315aa529659821b51818c60018bd0018c60018bd0018bd00 -18c60018bd0018c60018c60018c60018bd0021c60021c60021c60021c60018bd0021bd0043b66d -06aa6d43b66d43b66d06aa6d06aa6d01877b02946f047870057756186d16186d163e8227497651 -2782632782630c5a6c637e24c2920ac2920ae4ab00e4ab00000000 -00000023b50029bd0829bd0029bd0029bd0021bd0021bd0021bd0021bd0021bd0021c600299452 -315aad31629c3163a53163a53163a5287b7b21c60021bd0018bd0018c60021c60018bd0018c600 -18bd0021c60021c60021c60021c60021c60021c60018c60018bd0018c60018bd0021c600287b71 -315aa52963a622a63218c60018c60018bd0018c60018bd0018c60018bd0018c60018bd0018c600 -18bd0018bd0018c60025b521296e87315aa5296e8718b51018c60018bd0018c60018c60018c600 -18bd0018c60018bd0018c60018bd0018c60021c60021bd0021c60021bd0021c60018bd0006aa47 -06aa6d06aa6d06aa6d06aa6d02946f02946f057756057756185d2825463b25463b185d28247952 -27826304787018605c4976518e8c168e8c16c2920ac2920a000000 -00000023b50029bd0021bd0021bd0021bd0029c60021bd0021c60021bd0021bd0021c600299452 -3163a53163a53163a53163a53163a5287b7121c60021c60821c60021bd0018bd0021c60018bd00 -18c60021c60021bd0021c60021bd0021c60018bd0021bd0018c60018bd0018bd0018c600287b71 -2963a62963a6239a3a18c60018bd0018c60018bd0018c60018bd0018c60018bd0018c60018bd00 -18bd0018bd0018c60021b518296598315aa5296e8718b51018c60018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0021c60018c60018c60021c60021c60018ce0010c631 -25a75806aa6d06aa6d06aa6d06aa6d05974b05974b0d5549244d5025463b25463b0d5549057756 -04787004787004787004787018605c3b54533b54534a4e50000000 -00000021bd0029bd0829bd0029bd0029c60029bd0029c60021bd0021bd0021bd0021c600299452 -3163a53163a531629c31629c315aa5287b7b21c60021bd0018bd0018c60021c60018bd0018c600 -18bd0021c60021c60021c60021c60018c60021bd0018c60018bd0018c60018bd0018c600287b71 -315aad295aa5239a3a18c60018bd0018bd0018c60018bd0018c60018bd0018c60018bd0018c600 -18bd0018c60018c60021b518296598315aa529659818b51018c60018c60018bd0018bd0018bd00 -18bd0018c60018c60021c60021ce0018ce0018c60021c60021bd0018a80818a80818a80808911a -08911a2479520577560d55490d5549104821266422263931213131213131213131183e33183e33 -0d55490d55490d55490d55490d554918605c0d5549244d50000000 -00000023b50029bd0029bd0829c60029bd0029c60021bd0829c60021bd0021c60821c600299452 -3163ad31629c3163a531629c3163ad287b7121c60018bd0021bd0018bd0018bd0018c60018bd00 -18c60018c60021b51821b51823ad2321bd0818c60018bd0018c60018bd0018c60018c600278263 -29659829659822a63218c60018bd0018c60018bd0018c60018bd0018c60018bd0018c60018bd00 -18c60018bd0018c60021b518287b71296e87287b7118b51018c60018bd0018c60018c60018ce00 -18c60021bd0018a80818a8080c7518186d16266422184418103521103521182121182121181821 -181821181c18181c18182121181c18181821101821181821102121102118102121182121182121 -182121182121182121182121182121182121182121182121000000 -00000023b50029bd0029bd0021bd0021bd0021bd0021bd0021bd0021bd0821bd0018c600299452 -3163a53163a53163a531629c295aa5287b7b18bd0021bd0018bd0018bd0018bd0018bd0018bd00 -18bd0021bd08287b7b3163ad29659822a63218c60018bd0018bd0018bd0018bd0021bd0018bd08 -18bd0818bd0818bd0818bd0018bd0018bd0018c60018bd0018c60018c60018c60018bd0018bd00 -18bd0018bd0018bd0018c60018bd0018bd0018bd0018c60018ce0018c60018b507188a0d0c7518 -185d28184418182921182129181821181821181821182129182121182121182121182121182121 -213129182921182921182921182929182921182121182921182929182121102121101821182921 -182929182921182121182121182121182921182921182921000000 -00000021bd0029bd0029bd0029bd0021bd0021bd0021bd0021bd0021bd0021bd0018c60022a632 -3163a531629c31629c2963a62963a6287b7b21c60018bd0018bd0018bd0018bd0018bd0018bd00 -18ce0022a63231629c3163a529659823ad2318c60018bd0018c60018bd0018c60018bd0018c600 -18c60018c60018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018c60018ce0018c60018a8080c7518185d28182921182121181821 -181821182121182129182921182921182121182921182921182121182921182121222929576d67 -6c76721829211821211821211821211821211829211021216c76727d81826c7672364742102118 -1821211829211829211021211018214d5d57707d7b101821000000 -00000023b50021bd0829bd0021bd0021bd0021bd0021bd0021bd0021bd0021bd0018c60021b518 -296e873163a52965983163a53163ad287b7b18bd0021bd0018bd0021bd0018bd0021bd0018bd08 -22a632296e872963a63163a5287b7b18bd0821bd0018bd0018bd0018bd0018bd0018c60018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018c60018b5070c7518184418182921181821181821182121182121182921 -182921182121182121182121182121182121182921182121182921182929081821707d7b4d5d57 -1018212131291821212131292131312131291829290c1716818c8c39494f7d81826c76720c1716 -2931311821211829293336311021216c7672576d67102118000000 -00000023b50021bd0029bd0021bd0021bd0029bd0821bd0021bd0021bd0018bd0021bd0018c600 -239a3a315aad3163a531629c3163a5296598296e87296e87296e87296e87296e87296e87296e87 -3163a5295aa53163a52963a6189d2e21c60018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018c60018b507186d16103521181821182129102121182921182921182121182121182121 -182121182121182121182921182121182921182121182921182121182121293131a3b8af5f6266 -636f6b6c76724a4e50839598707d7b4a4e50102121182121929b9c84948c636f6b222929576d67 -84948c333631576d67929b9c39494f818c8c263931182121000000 -00000023b50021bd0021bd0821bd0021bd0021bd0021bd0021bd0021bd0021bd0018bd0821bd00 -21c608278c562963a63163ad3163a53163a53163a5315aa53163a53163a53163a5315aa5315aa5 -2963a6315aa52963a6239a3a21c60018bd0021bd0018c60018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018c60010bd0018bd0018bd00 -18c600188a0d184418181821182121182921182921182121182921182121182921182121182121 -1821211821211829211821211821211821211829211821211829291821212639317d81824d5d57 -6c76726c76725f6266929b9c2131291821211821213336318c9794929b9c4d5d57263931929b9c -333631636f6b6c7672818c8c39494f8c9794222929182921000000 -00000023b50021bd0829bd0021bd0021bd0021bd0021bd0021bd0021bd0018bd0021bd0018bd08 -18c60021c600239a3a296e872965982963a63163a52963a6295aa53163a5315aa52963a62963a6 -296598287b7123ad2321c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -188a0d182921182129182921182921102121182921102121182121182921182121182921182121 -1821211821211821211829211821211829211821211829291829211018214a4e50707d7b364742 -7d8182636f6b576d67636f6b1018211829291018215d727c84948c364742929b9c4a4e50929b9c -22393e84948c818c8c707d7b576d6784948c182921222929000000 -00000022b50b21bd0029bd0821bd0021bd0021bd0021bd0021bd0021bd0021bd0018bd0021bd00 -21bd0018bd0021c60021c60025b52121a42722a63221a42721a42721a42721a42721a42723ad23 -18b51018c60018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0010bd0010bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010c60022b50b -103521182121182921182121182921182121182921182121182921102118182121101821182121 -1829211821211829211821211821211821211829211829212229290c1716636f6b4d5d570c1716 -364742182921222929222929182121182921182921293131263931222929293131213129333631 -213129213129213129182929222929222929182921182929000000 -00000023b50021bd0829bd0821bd0021bd0021bd0021bd0021bd0021bd0018bd0018bd0018c600 -18bd0018c60018bd0021bd0018c60018c60018c60018c60018c60018c60018c60018c60018c600 -18c60018bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0010c60010bd0018c600188a0d -182121182929182921182929182121182921182929182121333631839598636f6b5f6266102121 -1821211821211821211821211829211821211821211829211021184d5d57636f6b182921102121 -101821182121102121182121182921182121182121102118101821182121102118102121182121 -182121182121102121102118182121102121182121182121000000 -00000022b50b21bd0829bd0821bd0021bd0021bd0021bd0021bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60021bd0021bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0010bd0018bd0010c60018a808 -182921182121182921182121182929182121182921102121364742929b9c182121a3b8af293131 -182921213129182121213129102121182921213129222929222929263931293131102118293131 -293131213129293131293131222929293131182929263931293131213131213131293131102118 -29313122292926393133363122393e263931293131182121000000 -00000022b50b21bd0821bd0821bd0021bd0021bd0021bd0021bd0021bd0018bd0018bd0018bd00 -18bd0018c60018bd0021bd0021c60018c60018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018c60018bd0018bd0018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd0010bd0018bd0018c608 -186d161818211829291829211821212229292229290818215f62668c9794576d67707d7b6c7672 -7d81825d727c636f6b707d7b3647425d727c707d7b6c7672738085818c8c636f6b39494f7d8182 -818c8c636f6b8c9794818c8c7d8182929b9c4d5d57929b9c7d81828c97948c9794576d674a4e50 -8c9794576d678c9794707d7b6c767273808539494f182121000000 -00000022b50b22b50b21bd0021bd0021bd0021bd0021bd0018bd0021bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd0018bd0018bd0010c600 -18bd00186d161821211821291829211829212131290c17167d8182576d6722292910182184948c -4d5d57364742707d7b636f6b707d7b636f6b7d81823336318c97944a4e50293131707d7b818c8c -3b5453707d7b707d7b818c8c707d7b7d81823647428c9794707d7b7d8182818c8c4a4e50929b9c -36474239494f929b9c1021182639318c9794182121182921000000 -00000022b50b21bd0829bd0821bd0021bd0021bd0021bd0021bd0018bd0018c60018bd0018bd00 -18bd0018c60018bd0021c60821c60021c60818bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018c60018bd0010bd0010bd0010bd0018bd00 -10c60018c600188a0d184418182129182129182121222929a3b8af3647421021182131298c9794 -102118364742707d7b6c7672293131929b9c4d5d5721312984948c0c1716636f6b818c8c929b9c -3647427d81824d5d57636f6b6c76725f6266636f6b5f62666c76724d5d5784948c3647428c9794 -3647424d5d57576d671021215d727c636f6b222929182121000000 -00000023b50021bd0829bd0821bd0021bd0021bd0021bd0021bd0021bd0018bd0018c60018bd00 -18c60018bd0021c60021bd0021bd0821bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018bd0018bd0021bd0018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd00 -18bd0010bd0018c60018c608188a0d104e17182921212931364742293131182121222929213129 -1821211821213336311829294d5d57636f6b8c97943b5453182121182121222929293131222929 -182921222929182929182121213129182121182921182121182929182121182921101821293129 -222929182121182121182121293131182121182121182921000000 -00000023b50029bd0829bd0821bd0021bd0021bd0021bd0021bd0821bd0821c60018bd0018bd00 -18bd0021c60018c60021bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018c60018bd0021bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -10bd0018bd0018bd0018bd0018c60018c60018a8080c7518104e17103521182121181821181821 -1821211829291821211829216c7672364742576d67333631102118182921182121182121182121 -182121182121102121182121102121182921182121182121182121102121182121182121102121 -182121182121182121182121102121182121182921182921000000 -00000022b50b21bd0829bd0821bd0021bd0021bd0021bd0021bd0021bd0021c60818c60018bd00 -18bd0018bd0018bd0021bd0021bd0021bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010c60018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018c60018ce0021c60018b507188a0d0c751810601b -103521182921182129182129101821252f39182121101821182121182121182921182921182121 -182921182121182121182921182121182921182121182121182121182121182121182921182121 -182121182121182121182121182121182121182129182129000000 -00000022b50b21bd0821bd0821bd0021bd0021bd0821bd0021bd0821bd0821c60821bd0818bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -10bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018ce0021ce0021c600 -18bd0018a808188a0d0c7518186d16104e17184418103521182921182121182121181821081821 -081821081821081821081821081821101821102118102121182121101821081821101821101821 -102121182121182121102121102121182921222929253021000000 -00000022b50b21bd0821bd0821bd0021bd0821bd0021bd0821bd0821bd0821bd0821c60821bd08 -18c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd0010bd0018c60018bd0018bd00 -18bd0018bd0010bd0018c60010bd0010bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018c60018ce0021ce0018ce0021ce0021c60018bd0018a80818a80818a808188a0d637e24 -966b1d8c5e206a59226a59226a592234483325463b1829311829213448334b572e4b572e4b572e -4b572e23395122393e6a59228e8c16c2920acfad02e4ab00000000 -00000022b50b22b50b21bd0821bd0818bd0021bd0821bd0021bd0821bd0018c60818bd0018bd00 -18bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018c60018bd0018c60018bd0018c60010bd0018c60010bd0018c60010bd00 -18bd0018bd0018bd0010c60018bd0018c60018bd0018bd0018bd0010bd0010bd0010bd0010bd00 -10bd0010bd0018bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018c60018c60021c60010c60090b112 -f2ad00f2ad00f2ad00d0780ac2920a88a87a29846d184d65263931266422637e2418a808637e24 -816e5a2345692345696a5922e4ab00e29423e4ab00f5b500000000 -00000022b50b21bd0821bd0821bd0021bd0821bd0021bd0821bd0018bd0818bd0018c60818bd00 -18c60018bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018c60010bd0018c60018bd0018c600 -18bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0010bd0010bd0010bd0018bd00 -10bd0018bd0010bd0018bd0010bd0018bd0010c60018bd0018bd0018bd0018c60018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0021bd0018bd0090b112 -e29602f5af30f5af30bf912e8b873b91875d649e6a18605c2339512931310c751808911a239a3a -655d513b5453234569584b42927820c2920ac2920ac2920a000000 -00000022b50b22b50b29bd0821bd0821bd0021bd0821bd0021bd0821bd0018c60818bd0018c608 -18bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0018c60018bd0018c60018bd00 -18bd0018bd0018c60018bd0018bd0018bd0018bd0018c60010bd0018c60018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018bd0018bd0018bd0018bd0010c60010bd0018c60010bd00 -18bd0010bd0018bd0010bd0018bd0010bd0018bd0018bd0018c60018bd0018bd0018c60018bd00 -18bd0018bd0018bd0018bd0018bd0018c60018bd0018c60018bd0021bd0021bd0018bd0090b112 -f8af56f8af56f8af56f8af5689bc5a649e6a7d957818605c224255293129185d28059835239a3a -4d5d573b54534e5c70184d6539494f3647425c4c514a4e50000000 -00000022b50b21bd0821bd0821bd0021bd0021bd0821bd0021bd0021bd0018bd0818c60818bd00 -18c60018bd0018c60018bd0021c60818bd0018bd0018bd0018bd0018bd0018bd0018bd0018c600 -18bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0018bd0018c60010bd0018c600 -10bd0018c60010bd0018c60018bd0018bd0018c60018bd0018bd0010bd0010c60010bd0018bd00 -10bd0018bd0010bd0018bd0010c60018bd0010c60018bd0018bd0018bd0018c60018bd0018bd00 -18bd0018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018bd0021bd0018bd0091bf3b -f8af56eab65ef8af56f9b4667d95783fa46b8f8f7a29846d184d65252f39185d28059835189d2e -5f62665f6266687251655d513b5453244d50687251655d51000000 -00000022b50b21bd0829bd0821bd0021bd0821bd0018bd0021bd0018bd0818c60018bd0818bd00 -18bd0018c60018bd0018c60818bd0018bd0018c60018bd0018c60018bd0018bd0018bd0018bd00 -18c60018bd0018c60018bd0018bd0018c60018bd0018c60018bd0018bd0010bd0018c60010bd00 -18c60010bd0018c60018bd0018c60018bd0018bd0018c60010bd0018bd0010bd0018bd0010bd00 -10bd0010c60010bd0010c60018bd0010c60018bd0018bd0018bd0018bd0018bd0018c60018bd00 -18bd0018bd0018bd0018c60018bd0018c60018bd0018c60018bd0018bd0021c60010bd0091bf3b -f9b466eab65eeab65ef9b466a899713fa46b649e6a576d67184d65252f39185d28059835239a3a -576d67655d517f5a58816e5a816e5a4a4e50606042906a58000000 -00000022b50b21bd0821bd0821bd0018bd0021bd0818bd0818bd0821bd0818bd0818c60818bd08 -18c60018bd0018c60018bd0818bd0018bd0818bd0018c60018bd0018c60018bd0018bd0010c600 -18bd0018c60018bd0018c60018bd0018bd0018bd0018bd0010c60010bd0018c60010bd0018c600 -10bd0018c60010bd0018bd0018bd0018c60010bd0018c60010bd0010bd0018bd0010bd0010bd00 -10bd0018bd0010c60010bd0010c60010bd0010c60018bd0018bd0018bd0018c60018bd0018bd00 -18bd0018bd0018bd0018bd0018c60018bd0018c60018bd0018c60018bd0021bd0010bd0091bf3b -fdca81f9b466fab77bfab77bd9ac7b88a87a818c64649e6a184d65252f39185d28059835189d2e -5f6266655d51816e5a906a587f5a585c4c514a4e50606042000000 -00000018b51022b50b21bd0821bd0821bd0818bd0821bd0821bd0821c60823bf1118bd0818bd08 -18bd0818bd0018bd0818bd0018bd0818bd0018bd0018bd0018bd0018bd0018c60818c60018bd00 -10c60018bd0018c60018bd0018c60018bd0018bd0018bd0010bd0018bd0010bd0018c60010bd00 -18c60010bd0018c60010bd0018c60010bd0018c60010bd0018c60010bd0010bd0010bd0018bd00 -10bd0010bd0010bd0010bd0010bd0010c60010bd0010c60018bd0010c60018bd0018bd0018bd00 -18bd0018bd0018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018c60010bd0091bf3b -fdca81ddc17efab77bfab77bd9ac7ba8997191875d649e6a234569293131185d28059835239a3a -687251655d5184603a96733a9b643884603a84603a84603a000000 -00000018b51021bd0821bd0821bd0018bd0821bd0818bd0821bd0821bd0818bd1018bd1018bd08 -18c60818bd0818c60818bd0818c60018bd0818bd0018bd0018bd0018bd0018bd0018bd0818c600 -18bd0018bd0018bd0018c60018bd0018c60018bd0010bd0010bd0010bd0018c60010bd0018c600 -10bd0018c60010bd0018bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010c60010bd0010c60018bd0018bd0018bd0018bd0018c60018bd00 -18c60018bd0018c60018bd0018c60018bd0018bd0018bd0018bd0018c60021bd0010bd0091bf3b -fdca81fdca81fab77bfab77bd9ac7ba89971a58f55818c643b5453252f39185d28059835239a3a -687251816e5a5c4c519b6438c2920ae29602e29602e29602000000 -00000018b51022b50b21bd0821bd0818bd0821bd0821bd0818bd0821bd0818bd1018c60818bd08 -18bd0818c60818bd0818c60818bd0818c60818bd0018bd0018bd0018bd0018bd0818c60018bd08 -10c60018bd0018bd0018bd0018c60018bd0018bd0018bd0010bd0010bd0018bd0018c60010bd00 -18c60010bd0018bd0010bd0018bd0010bd0018c60010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010c60010bd0018bd0018bd0018bd0018c60018bd0018c600 -18bd0018c60018bd0018c60018bd0018c60018bd0018bd0018bd0021bd0021c60010bd0089bc5a -fdca81fdca81fab77bd9ac7beab65ecbb06296733a91875d385777212931185d28059835239a3a -636f6b5f62665f6266966b1de29602cfad02f2ad00f2ad00000000 -00000022b50b21bd0821bd0821bd0818bd0821bd0818bd0821bd0818bd0818c60818bd0818bd08 -18bd0818bd0821c60818bd0818c60818bd0818c60810bd0818bd0010bd0018c60018bd0810c600 -18bd0010bd0018c60010bd0018bd0818bd0018bd0010c60010bd0010bd0010bd0010bd0018c600 -10bd0010bd0010bd0018bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018c60010bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0018c60021bd0021bd0010bd0091bf3b -fdca81ddc17efab77bfab77bcbb062d99755bf912e91875d4e5c70212931185d28059835239a3a -816e5a6c767239494f966b1de4ab00e4ab00f5b500f5b500000000 -00000022b50b21bd0821bd0821bd0821bd0818bd0821bd0818bd0821bd0818bd0818bd0818bd08 -18c60818bd0818bd0818c60818bd0818bd0818bd0018c60010bd0018bd0010bd0010bd0018bd00 -10bd0018bd0010bd0018c60018bd0018bd0018bd0010bd0010bd0010bd0818c60018bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0018bd0018bd0018bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010c60010bd0010c60010bd0010bd0018bd0018c60018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018c60018bd0018c60018bd0021bd0021c60010bd0089bc5a -fdca81fdca81fab77beab65ed99755e29423c2920aa58f55385777252f39185d28059835239a3a -7f8a51818c644e5c70966b1de4ab00e4ab00f5b500f5bd00000000 -00000018b51021bd0821bd0821bd0818bd0821bd0818bd0821bd0818bd0818bd0818bd0818bd08 -18bd0818c60818bd0818bd0818bd0818bd0018c60010bd0018c60010bd0018bd0010bd0018c608 -10bd0010bd0018bd0010bd0018bd0018bd0018bd0010bd0010bd0010bd0010bd0010c60018bd00 -10bd0010bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010c60010bd0010c60018bd0010c60018bd0018bd0018bd0018bd00 -18bd0018bd0018bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0021bd0010bd0091bf3b -fdca81fab77bf9b466f9b466f8af56e29423c2920aa479534e5c70293131185d2805983521a427 -816e5a91875d4e5c708c5e20e29602e4ab00e4ab00f5b500000000 -00000018b51022b50b21bd0821bd0821bd0823bf1121bd0818bd0821bd0818bd0818bd0818bd08 -18bd0818bd0818bd0818c60818bd0818bd0818bd0018c60010bd0018bd0010bd0018bd0010bd08 -18bd0010bd0018c60018bd0010c60018bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd00 -18bd0010bd0018bd0010bd0818bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60018bd0010c60018bd0010c60018bd00 -18bd0018bd0018bd0018bd0018bd0018c60018bd0018bd0018bd0018bd0021c60010bd0091bf3b -fdca81ddc17ef9b466f8af56e29423d0780abf912ea58f554e5c70252f39266422059835617e3e -816e5a6c76724e5c706a5922e29423e29423f2ad00f2ad00000000 -00000022b50b21b51818bd0821bd0818bd0821bd0818bd0821bd0818bd0818bd1018bd0818bd08 -18c60818bd0818c60818bd0818bd0818bd0818bd0810bd0818bd0010bd0018c60010bd0818c608 -10bd0818bd0818bd0818bd0818bd0818bd0818bd0818bd0810bd0818bd0818bd0818bd0018bd08 -10bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0010bd00 -18bd0010bd0018c60018bd0018bd0018bd0018bd0018c60018bd0018bd0021bd0010bd0091bf3b -fab77bf9b466f9b466f8af56cc742dd0780abf912ea282673b545325463b637e248b873b8b873b -8b873b7f5a584e5c705c4c51b0702eb0702eb16f14b16f14000000 -00000021b51821b51821bd0818bd0821bd0818bd0821bd0818bd0821bd0818bd1018bd1018bd08 -18bd0818c60818bd0818c60818bd0818bd0818bd0018bd0810bd0018bd0010bd0818c60810bd08 -18bd0810bd0818bd0018bd0818bd0018bd0018bd0010bd0818bd0810bd0810bd0810bd0810bd08 -18bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd00 -10bd0010bd0010bd0018bd0018bd0018bd0018bd0018bd0018c60018bd0021c60010bd0091bf3b -fab77beab65ef9b466e29423e29602e29423b88d5b91875d39494f4b572e927820b16f14b16f14 -bf912e906a587f5a585f62665f62664a4e502339515c4c51000000 -00000018b51021bd0818bd0823bf1118bd0821bd0818bd0821bd0818bd1018bd1018bd1018bd10 -18bd0818bd0818bd0818bd0818bd0818bd0818bd0810bd0018bd0810bd0818bd0010bd0818bd08 -10bd0818bd0810bd0818bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0010bd0018bd0010bd00 -10bd0010bd0018bd0010bd0010bd0018c60010bd0010bd0018bd0018bd0018bd0010bd0091bf3b -fab77beab65ef8af56e29423d0780ae29423b88d5b91875d39494f8b873b9b6438b0702eb0702e -b16f14a479537f5a585c4c51655d517f5a585c4c515c4c51000000 -00000018b51022b50b23bf1118bd0818bd0818bd0821bd0818bd0821bd0818bd1018bd1018bd08 -10bd0810bd0810bd0818c60818bd0018bd0810bd0018bd0810bd0818bd0810bd0818bd0810c600 -10bd0010bd0818bd0010bd0818bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0018bd0010bd0010bd0018c60018bd0010bd0018bd0018c60008bd0091bf3b -fab77beab65ef9b466e29423d0780abf912ea282676c7672244d5096733a9b64389b6438cc742d -cc742da47953906a58655d515c4c51655d517f5a585c4c51000000 -00000018b51021bd0823bf1118bd0818bd0818bd0818bd0818bd0818bd0818bd1018bd0818bd10 -18bd0818bd1018bd0818bd0810bd0818bd0010bd0810bd0018bd0810bd0818bd0810bd0018bd08 -10bd0018bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0010bd0010bd00 -10bd0010bd0018bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0018bd0010bd0091bf3b -fab77bf9b466d89076d99755d0780a8b873ba28267347382244d5084603a7f5a588c5e209b6438 -cc742da479537f5a587f5a5884603a7f5a587f5a585c4c51000000 -00000018b51021b51821bd0818bd0818bd0818bd0818bd0818bd0818bd0818bd1018bd1010bd08 -18bd1018bd0818bd1018c60818bd0010bd0818bd0010bd0810bd0018bd0810bd0018bd0810bd00 -10bd0010bd0018bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0818bd0010bd0010bd00 -10bd0010bd0010bd0018bd0010bd0018bd0018bd0018bd0018bd0018bd0018bd0008bd0091bf3b -f9b466f9b466f8af56e29423966b1d6872518f8f7a287b71224255637e24906a5884603a8c5e20 -b0702e906a587f5a589b6438cc742dd0780ad0780ad0780a000000 -00000018b51022b50b18bd0818bd0818bd0818bd0818bd0818bd0818bd0818bd1010bd1018bd10 -18bd1018bd1018bd0818bd0810bd0818bd0810bd0018bd0010bd0810bd0010bd0810bd0010bd08 -10bd0810bd0010bd0010bd0810bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd00 -10bd0018bd0010bd0010bd0018bd0010bd0018c60010bd0018c60018bd0018bd0008bd0091bf3b -fab77bd99755f8af56cc742d8b873b818c646c76720278812242553b545368725184603a96733a -816e5a5c4c51655d51b0702ec2920ae4ab00e4ab00f5bd00000000 -00000018b51018b51018bd0818b51018bd0818bd0818bd0818bd0818bd1018bd0818bd1010bd08 -18bd1010bd1018bd1018bd1018bd0818bd0810bd0810bd0010bd0010bd0010bd0010bd0810bd00 -10bd0010bd0010bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0018bd0008bd0091bf3b -f8af56f9b466d99755d9975591875d8f8f7a287b710c5a6c184d6518605c4976516872514d5d57 -4a4e503b54534a4e50966b1de4ab00e4ab00f5b500f5bd00000000 -00000018b51018b51018bd0818bd0818b51018bd0818bd0818bd1018bd0818bd1010bd1018bd10 -10bd1010bd1018bd1018bd1018bd1018bd0810bd0810bd0010bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0018bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0018bd0018bd0008bd0091bf3b -f8af56f5af30e29423d99755a28267707d7b287b71184d6518605c244d50224255244d50244d50 -244d503b5453224255966b1de29602e4ab00f5bd00f5bd00000000 -00000018b51021b51818bd0818b51018bd0818bd0818bd0818bd0818bd1018bd1010bd1010bd10 -10bd0810bd0810bd1018bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0018bd0018bd0008bd0090b112 -f5af30e29423d99755a899718f8f7a5d727c184d6523456922425523395125463b22393e25463b -18605c244d50224255966b1dcfad02e4ab00f5b500f5bd00000000 -00000018b51018b51018b51018bd0818bd0818bd0818bd1018bd1018bd0818bd1010bd1018bd10 -18bd1018bd0818bd1018bd1018bd1018c60810bd0810bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd00 -10bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0010bd0018bd0018bd0000bd0090b112 -f5af30e29423bf912ea89971707d7b18605c234569234569244d5022425522393e21313125463b -244d50244d502242556a5922c2920ae4ab00e4ab00f5b500000000 -00000018b51018b51018bd0818b51023bf1118bd1018bd1018bd1018bd1018bd0810bd1010bd08 -18bd1018bd1018bd1018bd1018c60818bd1010bd0818bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd00 -08bd0010bd0008bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0000bd0090b112 -f5af30e4ac2ca58f558f8f7a5d727c184d65184d6523456922425522425523395126393125463b -3b54533b545339494f584b42b16f14d0780ae29602e29602000000 -00000018b51018bd0818b51018bd0821b51823bf1118bd1018bd1018bd1018bd1018bd0818bd10 -10bd0818bd1018bd1018c60810bd0818bd0818bd0810bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0018bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0810bd08 -10bd0010bd0010bd0010bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0018bd0008bd0090b112 -cfad02bf912ea89971649e6a184d6522425523456922425522425522425523395125463b244d50 -3b54534a4e506060424a4e505c4c5184603a8c5e209b6438000000 -00000018b51018b51018bd0818b51018bd1018bd1018bd1018bd1018bd1018bd1010bd0810bd08 -18bd0810bd0810bd0818bd1010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd08 -10bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd00 -08bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0000bd004cb50a -e4b210a58f557d95784e5c70184d6518605c184d6523456922425523395122393e25463b25463b -3647424d5d57606042655d5160604284603ab0702e9b6438000000 -00000018b51018b51021b51818bd1018bd1021b51818bd1018bd1018bd1018bd1010bd1018bd10 -10bd0810bd0810bd0818bd1010bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd0010bd08 -10bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd00 -10bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0008bd00 -10bd0008bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd004cb50a -bf912e88a87a4096510b627c18605c18605c18605c184d6522425525463b22393e25463b25463b -4b572e606042816e5a606042655d5184603ab16f14b0702e000000 -00000018b51021b51823bf1118b51018bd1821b51818bd1018bd1018bd1018bd1010bd1010bd10 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd08 -10bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd00 -10bd0010bd0810bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd08 -08bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd004cb50a -91875d3fa46b0b627c05775605775604787018605c18605c184d6525463b25463b183e33266422 -36474260604284603a60604284603a84603a8c5e209b6438000000 -00000018b51018b51018b51021b51818bd1021b51818bd1018bd1018bd1018bd1010bd1010bd10 -10bd0810bd1010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0818bd10 -10bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd00 -10bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0008b50810bd0008bd0010bd00 -10bd0008bd0010bd0808bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018bd0010bd0048b334 -3da88302788104787005775605775618605c057756184d65244d5022425525463b263931344833 -4b572e60604296733a84603a966b1db16f14b16f14cc742d000000 -00000018b51018b51018bd1818bd1021b51818bd1018bd1018bd1018bd1018bd1010bd1010bd10 -10bd0810bd1010bd1018bd0810bd0810bd0810bd0810bd0818bd0818bd0818bd0810bd0810bd08 -10bd0810bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0810bd0010bd0010bd0010bd0010bd0008b50810bd0008bd00 -10bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c600239a3a -0278810478700478700478700c5a6c18605c0c5a6c184d65184d6522393e22393e263931263931 -4b572e84603a96733a9b6438c2920ae4ab00f2ad00f2ad00000000 -00000018b51018b51018b51018bd1818bd1018bd1821b51821b51818bd1018bd1010bd1010bd10 -10bd0818bd1010bd0818bd0810bd0818bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd00 -10bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0008b50810bd0008bd0010bd00 -10bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0018c60006aa47 -01877b00967b01877b01877b0478700478700b627c0c5a6c23456922425522393e22393e25463b -4b572e84603a96733ab16f14e29602e4ab00f5b500f5bd00000000 -00000021b51821b51821b51818bd1818b51818bd1018bd1018bd1018bd1018bd1018bd1810bd10 -18bd1010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd0010bd08 -10bd0010bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0808bd0010bd0010bd0010bd0010bd0008bd0010bd0810bd0008bd00 -08bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00898800948400898801877b01877b0478700478700c5a6c23456923456923395122393e263931 -4b572e617e3e9b6438b16f14e4ab00f5b500f5bd00f5bd00000000 -00000021b51821b51821b51818bd1818b51018bd1818bd1818bd1018bd1818bd1010bd1018bd10 -10bd0818bd0810bd0818bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0810bd00 -10bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd00 -10bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948400898801877b01877b0478700478700b627c184d6523456923395122393e25463b -4b572e60604284603ab16f14e4ab00f5b500f5bd00f5bd00000000 -00000025b52121b51821b51818bd1018b51818bd1018b51821b51818bd1018bd1010bd1010bd10 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd08 -10bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0008bd0010bd0008bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948d00898800898801877b0478700478700b627c0c5a6c23456922425523395122393e -3b545360604284603ab16f14cfad02f2ad00f5bd00f5bd00000000 -00000025b52125b52121b51818b51018b51018bd1821b51818bd1818bd1018bd1010bd1018bd08 -10bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd00 -08bd0010bd0010bd0010bd0008bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948d00948400898801877b0278810478700b627c0c5a6c23456923456922393e22393e -3b545360604296733a966b1de29602e4ab00f2ad00f5b500000000 -00000021b51821b51821b51818b51818b51018b51018bd1818bd1818bd1018bd0810bd0810bd08 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d0094840094840094840089880278810278810b627c0c5a6c23456923456922393e25463b -364742655d5184603a96733a966b1dd0780ad0780ab16f14000000 -00000018b51021b51821b51821b51818bd1821b51818bd1018bd1018bd1010bd1010bd0810bd08 -10bd0810bd0810bd0810bd0810bd0810bd0818bd0810bd0810bd0810bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948d00948d00948401877b0278810478700b627c0c5a6c234569234569233951263931 -39494f655d5184603a96733a9b643896733ab0702eb0702e000000 -00000018b51018b51021b51821b51821b51821b51818bd1018bd1018bd1010bd0810bd0810bd08 -10bd0810bd0010bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0008bd0010bd0010bd0010bd00 -10bd0010bd0010bd0008bd0010bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948d0094840094840089880278810278810b627c0b627c184d65224255224255233951 -39494f655d51816e5a96733aa479539b64389b64389b6438000000 -00000021b51821b51821b51821b51818bd1018bd1818bd1018bd1018b51010bd1010bd0810bd08 -10bd0810bd0810bd0810bd0010bd0010bd0010bd0810bd0810bd0810bd0810bd0810bd0810bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd00 -10bd0010bd0010bd0010bd0808bd0010bd0010bd0010bd0010bd0008bd0008bd0008bd0010bd00 -08bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948d00948400948d0089880089880278810278810b627c234569224255233951224255 -3b54535f6266816e5a96733aa4795384603a9b643896733a000000 -00000018b51021b51821b51821b51818b51818b51818bd1018b51018bd1010bd1010bd0810bd08 -10bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd08 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0008bd0010bd00 -10bd0010bd0010bd0010bd0010bd0810bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd00 -10bd0008bd0010bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010c60006aa47 -00948d00948d00948d00948d0094840089880278810278810b627c184d6523456922393e224255 -39494f655d51816e5a906a58906a5884603a9b64389b6438000000 -00000018b51018b51021b51818b51018b51018b51018b51018b51018b51810bd1010bd1010bd10 -10bd0810bd0810bd0810bd0810bd0810bd0810bd0810bd0010bd0810bd0010bd0810bd0010bd00 -10bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0010bd0010bd00 -10bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0008bd0010bd0008bd00 -10bd0008bd0008bd0010bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948400948400948d00948d0089880089880089880278810b627c23456922425522425525463b -3b54535f6266816e5aa47953bf912ee29423e4ab00f3b50f000000 -00000018b51018b51025b52118b51018bd1018b51018bd0818b51018bd1010bd0810bd0810bd08 -10bd0810bd0010bd0810bd0010bd0810bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0010bd0008bd0010bd0008bd00 -10bd0008bd0010bd0008bd0008bd0008bd0010bd0010bd0010bd0008bd0008bd0008bd0010bd00 -08bd0008bd0008bd0010bd0008bd0008bd0008bd0008bd0010bd0008bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d0094840094840094840094840089880278810278810b627c234569233951233951224255 -3b54536c7672816e5a96733acbab21e4b210f3b50ff5bd00000000 -00000018b51023ad2325b52121b51818b51018bd1018b51018bd1018b51010bd0810bd0810bd08 -10bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0810bd0010bd0008bd0010bd0008bd00 -08bd0010bd0010bd0010bd0010bd0010bd0010bd0008bd0008bd0008bd0010bd0008bd0010bd00 -08bd0010bd0008bd0008bd0008b50008bd0010bd0010bd0008bd0008b50008b50008bd0008bd00 -08bd0008bd0008bd0008bd0008bd0008bd0008bd0010bd0008bd0010bd0010bd0010bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00948400948400948400948400948d0089880278810b627c23456923395126393125463b -3b54535f6266816e5a96733ae4ac2ce4b210f5bd00f5bd00000000 -00000018b51021b51825b52118b51018bd1018b51018b51018b51010b50810bd0810bd0810bd08 -10bd0810bd0810bd0810bd0010bd0810bd0010bd0010bd0010bd0008b50808bd0008b50008bd00 -08b50010bd0010bd0010bd0010bd0010bd0008bd0008bd0008b50008bd0008bd0008bd0008bd00 -08bd0008b50008bd0008b50008bd0008b50010bd0008b50010bd0008b50008bd0008b50008b500 -08b50008bd0008bd0008bd0008bd0008bd0008bd0008bd0008b50010bd0008bd0010bd0008bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -00948d00948400948400948d00948d00948d00948d0089880b627c23456922393e22393e224255 -184d653857775f6266927820cbab21f3b50ff5bd00f9c800000000 -00000009a70818b51018b51018bd1018b51018bd1018b51010bd0810b50810bd0810bd0810bd00 -08bd0010bd0010bd0010bd0810bd0010bd000baf1407aa320aa92110bd0008bd0010bd0008b508 -08b50810bd0008bd0010bd0010b5080aa92110b50008a6290baf1408b5080aa9210aa92110bd00 -08b50808b50810bd0008bd0008b50008bd0008b50010bd0008b50008bd0008b50008bd0008bd00 -08bd0008b50008bd0008bd0008bd0008bd0008bd0008bd0008bd0010bd0010bd0008bd0010bd00 -10bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0006aa47 -00948d00967b109c843da8833da88362a78800898800948d0278810b627c234569233951224255 -3857773857775f626696733acbab21e4ab00f5bd00f5bd00000000 -00000010b50810b50818b51018b51018bd0810b50810bd0818b51010bd0810bd0810bd0810bd08 -08bd0008bd0010bd0010bd0810bd0010bd000baf1405974b08a6290baf140aa9210aa9210aa921 -0aa9210aa9210aa9210aa9210aa92108a62910b50005974b0baf140baf1408a62908a62908a629 -0aa9210aa9210aa9210aa92108a6290aa92110bd0008b50008bd0008b50008bd0008b50008bd00 -08b50008bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0010bd0010bd0008bd00 -10bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -00948d109c8462a78888ad9784948c8c9794839598287b7b008988296598234569184d65385777 -4e5c705d727c385777606042cbab21cbab21f3b50ff6cb11000000 -00000009a70818b51018b51018b51010b50818b51010b50810bd0818b51010bd0010bd0810bd00 -08bd0008bd0010bd0010bd0010bd0810bd000baf14059835189d2e07aa3208a62908a6290aa921 -07aa3205983522a63208a62907aa320aa92110b5080598350baf1407aa3208a629189d2e07aa32 -08a629189d2e08a629189d2e0598350aa92108bd0008b50008bd0008bd0008b50008bd0008b500 -08bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0010bd0010bd00 -08bd0010bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -109c844eb58870b68ca1ad9eabb37ea899717d81825d727c0b627c0c5a6c234569184d65184d65 -4e5c705d727c3857773b545384603abf912ec2920ac2920a000000 -00000010b50818b51018b50710b50818b51010b50818b51010b50818b51010bd0810b50810b508 -10b50010b50008b50010bd0810b50010bd0010b5080baf140baf140baf1410b50810b50810b508 -09a70818b51010b50810b50810b50808b50810b50808b50808b50810b50810b50808b50808b508 -08b50808b50808b50008b50008b50008b50010b50008b50008b50008b50008b50008b50008bd00 -08b50008bd0008b50008bd0008b50008bd0008b50008bd0008b50008bd0010b50008bd0010bd00 -08bd0008bd0008bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0010bd0007aa32 -23a57970b68c88a87aabb37eddc17e91875d4b572e4096516a925442863d42863d49765142863d -4d5d575d727c5d727c4e5c703857774a4e507f5a5884603a000000 -00000010bd0018bd0018bd0010bd0010bd0010bd0010c60018bd0810c60010c60010c60010c600 -10c60008bd0010c60010bd0010c60010c60010c60010c60010c60010c60008bd0010c60010bd00 -10c60008bd0010c60010bd0010c60010bd0008bd0010c60008bd0008bd0008bd0008bd0010bd00 -10bd0010bd0008bd0010bd0010bd0010bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd00 -08bd0008bd0008bd0008bd0008bd0008bd0008bd0008b50008bd0008b50010bd0010b50008b500 -10b50010b50010b50008b50010b50010bd0008bd0010bd0010bd0010bd0010bd0010bd0007aa32 -3da88385c176afb869eab65efab77ba58f5540965163c74d70d7566cc95150bf4f42863d63c74d -4976515d727c5d727c5d727c4e5c706c7672816e5a96733a000000 -000000186d16186d16186d16186d16186d16186d16186d16186d16186d16186d1610601b10601b -186d16186d16186d1610601b10601b10601b185d2810601b10601b10601b10601b10601b185d28 -10601b10601b185d2810601b104e1710601b104e17104e17104e17104e17104821104e17104e17 -104821104821104821104821104e17104821185d28104e17104821104821104821104e17104821 -104821104821104821104821104821104821104821104821104821104821104821104821104821 -103521183e33103521188a0d08bd0008b50008b50008b50008b50008b50010b50010bd0007aa32 -3da88388a87aafb869eab65ef9b466a8997142863d63c74d70d7566cc95148b33442863d50bf4f -4976515d727c5d727c5d727c347382385777584b42606042000000 -000000182131182131182131182131182131182131182131182131182131182131182131182931 -182131182131182131182131182131182131101829102129102129101829182131182131182129 -101829182131101829102129182131182129182129182129182129102129102129182131182129 -182129102929101821102129101821101821101829182129182129101821101821182129102129 -182129102129102121102129102129182129182129102121101821102129102129102129182129 -1829291829291018290c751808bd0008b50008bd0008b50008b50008b50008b50010bd0007aa32 -3da88385c176cbb062eab65ef9b466a58f5542863d42863d617e3e42863d42863d42863d48b334 -687251738085738085385777707d7b4e5c7039494f4d5d57000000 -000000182929182929213131364742182929102929102929102929102929213131102929102929 -18292910292921313126393110292118292939494f36474222393e25463b213131102121102929 -25463b18292936474221313110212110292918292910292910212121313125463b102929182929 -1029291829293b545321313136474239494f10292118292910212136474239494f102921182929 -10292121313122393e29313122393e18292910292925463b364742182929213131263931213131 -1029291829291021290c751808bd0008b50008b50008b50008b50008b50010b50008bd0007aa32 -23a57985c176afb869eab65efab77ba58f5563c74d6cc95150bf4f63c74d63c74d63c74d6cc951 -497651738085818c8c7d8182b88d5bb88d5bbf912ebf912e000000 -00000021313118292939494fa3b8af707d7b636f6b7380855d727c6c7672738085738085707d7b -707d7b707d7b738085839598707d7b364742707d7b84948c818c8c839598818c8c818c8c707d7b -929b9c18292983959873808584948c6c76726c7672707d7b839598738085818c8c818c8c213131 -818c8c818c8c818c8c22393e929b9c929b9c818c8c929b9c3647427d81823b5453576d67576d67 -3b5453364742a3b8af929b9c929b9c839598818c8c7d8182839598929b9c818c8c738085818c8c -1021211829291821290c751808bd0008b50008b50008b50008b50008b50008b50010bd0007aa32 -18a27588a87aafb869cbb062f9b466a58f5548b3346cc9516cc9516cc9516cc9516cc9516cc951 -4976517d8182a28267d89076cbab21e4b210f5bd00f5bd00000000 -00000021313118292939494f636f6b576d67636f6b8c9794818c8c818c8c7380858c97947d8182 -8c9794707d7b818c8c707d7ba3b8af4a4e503b54536c7672636f6b6c76727d8182738085707d7b -707d7b222929576d67707d7b6c7672636f6b5f62664d5d57707d7b4d5d57576d676c7672213131 -707d7b5f6266364742293131636f6b576d67636f6b636f6b222929576d67364742293131213131 -2131293336313336314d5d576c7672636f6b5f62663b54535f62665f62663b54533647424d5d57 -1021212131291021290c751808bd0008b50008b50008b50008b50008b50008b50008b50007aa32 -00967b649e6a88a87aafb869cbb06291875d40965142863d70d75670d75670d75670d75670d756 -617e3e7d8182a28267d89076e4ac2cf6c329f6c329f6cb11000000 -000000182929182929212931182929182929182929182929182931182929182929182929182929 -1829291829291021291829294d5d57213131182929102929102129182929102121102129102121 -182929182929102121102121102121102121102121102121102121102121102121102121102929 -102121102121102121102129102121101821081821102121102121101821102121102121102121 -102129102129102121101821081821101821101821102121101821102121101821102121101821 -1821291021291018210c751808bd0008b50008b50008b50008b50008b50008b50008b50007aa32 -00967b25a758649e6a88a87aabb37e7f8a5142863d42863d42863d42863d42863d42863d42863d -4d5d57a28267a28267d99755f5af30f6c329f6cb11f6cb11000000 -000000182129182931182929182931182931182931182129182929182129182931182929182929 -102129182929182929182929102121102129182929182929182929102929182929182929182929 -102929182929182929102929102929103521182929103521102929213129103521103521103521 -213129103521213129103521103521103521213129103521103521103521103521213129183e33 -103521103521103521183e33103521103521104821103521103521104821103521104821104821 -103521104821103521188a0d08bd0008b50008b50008b50008b50008b50008b50008b50007aa32 -00948402946f299452649e6a88a87a7d9578707d7b29846d027881296e8723456918605c497651 -818c64a89971d89076bf912ef5af30f6c329f6cb11f6cb11000000 -000000188a0d188a0d08911a188a0d08911a0a980808911a0a980808911a0a980808911a0a9808 -08911a0a980808911a0a98080a98080a98080a98080a98080a98080a98080a980809a70809a708 -09a70809a70809a70809a70809a70809a70809a70809a70809a70809a70809a70809a70809a708 -00b50009a70800b50009a70809a70809a70800b50009a7080aad000aad000aad000aad000aad00 -0aad000aad000aad000aad0008b50008b50008b50008b50008b50008b50808b50008b50008b508 -08b50008b50008b50008b50008b50008b50008bd0008b50008b50008b50008b50008bd0007aa32 -00948400948402946f18a27570b68c62a7888bc1a33da8837380858395988395983da883839598 -a1ad9ea1ad9ed9ac7ba47953e4ac2cf6c329f6c329f6c329000000 -00000008b50808b50010bd0010bd0010b50010bd0010bd0010bd0008bd0008bd0008bd0008bd00 -08bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd0008bd00 -00b50008bd0008bd0008bd0008bd0008bd0008b50008bd0008bd0008b50008bd0008bd0008b500 -08b50008bd0008b50008bd0008b50008b50008b50008bd0008b50008b50008b50008b50000b500 -08b50000b50008b50008bd0008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b00967b01877b00948d0089880278810278810b627c0c5a6c0c5a6c0c5a6c3e8227 -816e5a91875db88d5bb0702ec2920ae29423e4b210e4b210000000 -0000000aad0009a7080aad0010b50010b50009a70810b50008b50010b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008bd0008b50008b50008b50008b50008bd0007aa32 -00948400948400948401877b01877b01877b0278810b627c4976518b873b8b873b2479523b5453 -687251906a58a47953a4795384603a966b1db16f146a5922000000 -0000000aad0010b50010b50010b50010b50010b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b00898800948401877b01877b047870cbab21f9c800f9c800f9c800e4b2108b873b -816e5a816e5a816e5a816e5a906a589b6438b0702e606042000000 -0000000aad000aad000aad0008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50000b50008b50000b50008b500 -08b50008b50008b50008b50000b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b01877b01877b01877b04787090b112f9c800f5bd00c2920a927820cfad02c2920a -8b873b6c7672816e5a816e5aa28267906a5884603a655d51000000 -0000000aad000aad0010b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50000b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50000b50008b50008b50008b50008b50000b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -00948400967b01877b02946f01877b278263e4b210f5bd00cfad029278206a5922cfad028e8c16 -bf912e816e5a816e5aa28267816e5a5c4c516060424a4e50000000 -0000000aad000aad000aad0010b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50000b50008b50008b50008b50008b500 -08b50008b50008b50008b50000b50008b50008b50008b50008b50008b50008b50000b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50007aa32 -02946f00967b01877b01877b01877b278c56f9c800cfad02c2920a8e8c168c5e20c2920acfad02 -cbab21816e5aa28267906a58a47953b88d5b9b6438bf912e000000 -0000000aad000aad0010b50010b50010b50010b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50000b50008b50000b50008b50008b50008b500 -08b50008b50008b50000b50008b50000b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50000b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b50023ad23 -109c8401877b00967b01877b01877b278c56cbab21c2920af9c800c2920a6a5922e4b210f9c800 -cbab21816e5a816e5a906a58cbab21e4ac2cf3b50ff6c329000000 -0000000aad000aad0010b50010b50010b50010b50010b50010b50010b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -00b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b50025b521 -649e6a02946f01877b02946f00955f00955f8e8c16f5bd00f9c800cfad02cfad02f5bd00f6cb11 -b0702e906a58655d5196733ae4ac2cf6c329f6c329f6c329000000 -0000000aad0010b5000aad0010b50010b50010b50010b50010b50010b50808b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50000b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b50031bf0d -91bf3ba58f553fa46b3fa46b409651649e6a6a9254cfad02f5bd00f5bd00f9c800f5bd00c2920a -cc742da4795384603a8c5e20e4b210e4b210f6cb11f6cb11000000 -0000000aad000aad0018b50710b50010b50010b50010b50010b50010b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50000b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b5004cb50a -cfad02cbab21cbb062bf912ecbab21cbab21cbb062cbab21cfad02cfad02e29602d0780abf912e -e29423cc742d84603a8c5e20e4b210e4b210f6cb11f6cb11000000 -0000000aad0018a80810b50010b50010b50010b50010b50010b50010b50008b50010b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50010b50000b5004cb50a -f5bd00f6cb11f5af30e4ac2ce4ab00cfad02e4b210f6c329e4ac2ce4ac2ce4ac2ce29423e29423 -d0780ad0780ab16f14966b1de29423e4b210e4b210f6cb11000000 -0000000aad0010b50018a80810b50010b50010b50010b50010b50010b50008b50008b50010b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b500 -08b50008b50008b50008b50008b50008b50008b50008b50008b50008b50008b50000b5004cb50a -f5bd00f6cb11f6c329f3b50ff5b500f5b500f5b500e4ab00f3b50ff3b50fe29423e29602d0780a -d0780ad0780ad0780a8c5e20b16f14c2920abf912ec2920a000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/realmen.gif b/Docs/Books/realmen.gif Binary files differdeleted file mode 100644 index 41cb7d0e5ae..00000000000 --- a/Docs/Books/realmen.gif +++ /dev/null diff --git a/Docs/Books/realmen.txt b/Docs/Books/realmen.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/realmen.txt +++ /dev/null diff --git a/Docs/Books/sql-99.eps b/Docs/Books/sql-99.eps deleted file mode 100644 index df55f1ad06b..00000000000 --- a/Docs/Books/sql-99.eps +++ /dev/null @@ -1,1248 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner -%%Title: /opt/local/x1/work/bk/mysql/Docs/Books/sql-99.eps -%%CreationDate: Sun Dec 31 14:31:42 2000 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 14 14 288 383 -%%EndComments -%%BeginPreview: 100 135 1 135 -% fffffffffffffffffffffffff0 -% ffffffbddb55b6db5555aad6d0 -% d555556b6efb6db6fbbb775b50 -% efffffdedbaedb6dad6dad6df0 -% daaaaab5b6f5b6db56d6dbb6b0 -% ef7fffeeedaf6db6fb6db56dd0 -% b1a2aabb5b7adb6b555b6edb70 -% c0419f60e1d06dadad2d556db0 -% a48895a040a25b76f71b4bb6d0 -% c78c9b664ce7e6894934c65b70 -% a1188ec648a2810041100016d0 -% e08c9b644ca6992248a244cdb0 -% b8540c1040e389264c104c0b50 -% d60c9a1060a5182248a0440ef0 -% ac488bfe596391264897ccfb50 -% 60c08140c1b0412241104002d0 -% a160a5b1a6d046664188421370 -% bfbefeef7b6ffbbd8ef7bde5b0 -% 6ad5ab5ad6daad6acb556b56d0 -% b77b75af6db76b5756ddb6bb70 -% 60d6dc4adb6dbdedbab76dd6d0 -% a03db49db6db6b5ad76ddb7bb0 -% a6634c8b6db6d6b76db6b6ad70 -% 622104929b6dbb6d5adbdb6bd0 -% a04ca49136db6ddbb76d6ddeb0 -% 60c0a4892db6d6b56dbbb6b5d0 -% a44104993b6dbb6edad6db6f70 -% 624f30886ddb6db5b77db6dad0 -% a600044c5b6edadb6dab6db7b0 -% e561924476db6db6db7edb6d70 -% 5fbf7fbedbb6db6db6d5b6dfd0 -% 756ad5606d6db6db6dbf6db570 -% dedfbfd9dbdb6db6db6adb7fd0 -% 6bb56ab776b6db6db6ddb6d570 -% b557feeadb6dbdb6dbb76dbfd0 -% 6aec95bab5db76edb6dadb6ab0 -% d6ab6b55556eedbf6db777ffd0 -% 75dadd5b6adbdefadb6ddd5570 -% aaaaab7556bdb5ef6edb37ffd0 -% bf6efaab55eb7ffdddb66d5550 -% 6abbabfeff5fdffffbedbbfff0 -% ab6efe95aab57bb7ff76eeaab0 -% 7555abad6d6efeed5feab5ffd0 -% aaaaaab5b6bbfdbbb5fddf5570 -% 6ddddbab54eafbd6eeb575ffd0 -% b5555ad6a9bbf6bfbbefdf5570 -% 6dddabb5abeffdeffeabfdffd0 -% b6b77eff76b5eb5fdfbdf75570 -% 6dadabaacbaff6ffff5f7effd0 -% d56dbeffae1bdbbfffbfafaab0 -% 6baad2aa9a97f57ffebf7ffff0 -% b575aeff6c3fedfffeffd5d550 -% 6badd5555957f57ffdffbfffd0 -% d6db7bfe747feb7ffaffd57b70 -% 7dbed6aad1d5fd7ff5fff7afd0 -% 57ebfff9a57df5ffebffeb7ff0 -% e95aaaab69d6f57fefffffd5d0 -% 5756afeac379aabfdffffff770 -% faed75578fd1777fafffffdad0 -% 5555afd52ab2debf7fffc16dd0 -% ed7aeaae97e06b5ebfff3f5af0 -% 5bd7bf5a2e84bfaeffff45aff0 -% 777d6ab55da1edbd7ffebef5f0 -% ddd7deda7b0abfa2fffd255ad0 -% 6abab574deb3ef5dfffa955550 -% d54feda9b52abd6bfffaaaaab0 -% 6add5ad2fc4ffed5fffa8d5550 -% 6db7f3a5a9957b5bfffaa35550 -% d7faaea7fa26f5557ffd4aaab0 -% 6debd54d52e9f73efffca19550 -% d7faaf57e5036dd75ffa955550 -% 6eabb51eaad6dabffffea8aab0 -% dad55d75c90b557fdfff285550 -% 7cd5b45f16adbbdfafff552950 -% 76aaf576b51b6f6f4bff2a1550 -% ffc9a8de4276dabee7ffd50d50 -% b77eebbaa8adb7ff52ffe28b50 -% 7ef3a2f48a76debdb9ffea52b0 -% ffeaabd952db7bfb6d7ff52150 -% 6dd7a77335b6d6f6d75fe888b0 -% 7fdd4ee4c2dbbfedbbbffe5250 -% ff569dcd576d75fb2feffb0810 -% 6dad77a94adbefd65bebff5350 -% ff5bff5597b77fbd06f7ff8950 -% 7e7bff122d6dd7ea6bfaff5550 -% aad75feebbbf7f58b1f57eb550 -% 556ebfc456d5dff34bfbbd7a90 -% 8aab5fd57b7f7ea4a7eebbfd50 -% b0556398d6d6ffea8fdb57fa90 -% 7f895d32bdfdfd415fb6eff5b0 -% ff7a9265eb5bff961fefb9efd0 -% 6eaf7d535efffaaa7fbafeebd0 -% fe1ddb4bf5d7ff14bfeffeb7d0 -% 797bff57dbbff45a7fdaafbfd0 -% 6c5f579fef77fd28fffcff6fd0 -% fdf6bdebfbeff463ffd52fb7f0 -% 7cbe577feebff9aafff25adbd0 -% effcaefdfdffe2a7ffe907b550 -% 7efa55d7efbfea8bffd257fed0 -% f7f8a97fbbffc557ffa49fab50 -% 7ff355ddff7fab1fff8f2fffd0 -% 6fe57377f7ff8c7fff285f7dd0 -% fdcbeaddbfff32bffd557fefd0 -% dfa6dfb7fffe48fffe54bfffd0 -% 7bcfb57eeffcaafff8b2fedab0 -% 7faaefd7fffd51fff525fffad0 -% edffbabf6ff8a7fff293fdb450 -% 7fed6ffbfff2cbffe8a7fff290 -% fbbefab7ffe557ffc32fbec930 -% 6fb5d7ff7fca8fffad4fffd250 -% 7ebfbd6fffd6bfff551eff9490 -% ed6aebfdff8a2fff0abffd4230 -% 7fbbbfdfff257ffeb47fff2950 -% d5576b7bfe58bffc297ffccad0 -% 7feddffffd557ffd52fefaa150 -% f6bfbbdffcd1fff8a9fff9aad0 -% 5ff7fffff96bfff2a5fff54bd0 -% ff6ffffff2c5ffe993ffe297d0 -% 6dffbffff557ffd2a7ffd74dd0 -% d55fffffe50fffc68fffaa2fd0 -% 557f7fffd55fff955fff955fd0 -% 557fffffacbfff363ffd34bfd0 -% d77bfffbeabffaa977df527f50 -% c97d6db75abb7a556ed5557fd0 -% 537b6b7d6aeefaaadbead57df0 -% 557b6ff5aadab65575dd55ffd0 -% d57ffdfd77fff9abdff557ffd0 -% ddfffffdcbfff287fbe997ffd0 -% 7beffff757ffe5afffd64effb0 -% 7fbdfffdcfffca9fffd52fff90 -% edfffeffdfff952fff9a5fff30 -% 7bb6ffffffff4a5fff353ffe50 -% efffffbf5ffe9abffea8bffc90 -% 7ffffffffffffffffffffffff0 -% fffffffffffffffffffffffff0 -%%EndPreview -%%BeginProlog -% Use own dictionary to avoid conflicts -5 dict begin -%%EndProlog -%%Page: 1 1 -% Translate for offset -14.400000 14.400000 translate -% Translate to begin of first scanline -0.000000 368.503937 translate -272.965879 -368.503937 scale -% Variable to keep one line of raster data -/scanline 100 3 mul string def -% Image geometry -100 135 8 -% Transformation matrix -[ 100 0 0 135 0 0 ] -{ currentfile scanline readhexstring pop } false 3 -colorimage -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -00000052526b4a526b4a526b4a526b4a526b4a526b4a526b4a526b4a526b464a604a52634a526b -52526b4a526b4a526b4a526b4a526b52526b52526b52526b525a6b52526b525a6b525a6b525a6b -525a6b525a6b525a6b4a5a6b5a5a6b525a6b525a6b5b5a735a636b5a636b5a636b636373626b73 -5a636b626b6b626b6b6b737a74767882858c7476786b737a6b6b725a63735a636b63636b63636b -626b7363637363636b6b6b726b6b72626b6b626b736b6b72626b6b626b6b626b73626b6b747678 -6b6b727476786b6b727476787476787476787476787476787476787476787476787476786b6b72 -6b6b726b6b726b6b72747678626b6b747678626b6b7476786b6b726b6b72747678626b6b6b6b72 -626b6b6b6b726b6b7263636b626b6b63635f5a5a5a626b6b000000 -0000004a526b52526b4a526b4a4a6b424a6b464a60464a60464a60464a604a4a6b4a526b4a526b -4a526b4a526b4a526b4a4a6b4a4a6b4a4a6b4a4a6b4a526b464a604a526b4a526b4a52634a5263 -52526b525a6b525a6b4a526b525a6b52526b525a6b525a6b525a6b5a636b525a6b5a636b525a6b -525a63525a6b525a6b5a636b5a636b5a636b5a63735a636b52636b525a63525a63525a6b5a5a63 -525a635a5a6b5a5a635a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b -63636b5a636b5a636b63636b63636b63637363636b63636b63636b63636b63636b63636b636373 -63637363637363636b6363736363736363736c6373636373636373626b73626b6b6b6b72626b73 -63637363637363637363637363636b5a63735a5a6b767984000000 -000000525b735b5a735b5a73525a6b52526b52526b52526b525a6b52526b525a6b525b7352526b -4a526b4a526b4a526b4a526b4a4a6b424a6b4a526b4a4a6b4a4a6b4a52634a526b4a526b52526b -525a6b52526b525a6b525a6b525a6b525a6b525a6b525a6b525a63525a6b525a63525a63525a63 -525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63525a63 -525a6b5a5a6b5a636b5a5a6b5a636b5a5a6b5a636b5a63605a636b5a636b63636b5a636b5a636b -5a636b5a636b5a636b63636b635a6b63636b63636b5a636b5a636b63637363636b5a636b5a636b -63636b63636b5a6373636373636373636373636373636373636373636373636373636373636373 -5a636b5a636b5a63735a636b5a63735b5a7352526b686b7d000000 -0000005b5a73525b735b5a73525b735b5a735a63735a63735a6373525b735a5a6b525a6b525273 -4a526b52526b4a526b4a4a6b4a4a6b4a4a6b4a52634a526b4a526b4a526b52526b525a6b4a526b -52526b4a526b525a6b525a6b5a636b525a6b52636b525a6b525a63525a6b525a6b525a63525a63 -525a6b525a63525a63525a63525a63525a63525a63525a6b525a63525a6b525a6b525a63525a63 -5a5a635a636b5a5a6b5a636b5a636b5a636b5a636b5a636b5a636b5a636b63636b5a636b5a636b -5a636b5a636b5a636b63636b63636b63636b63636b63637363636b636373635a6b63636b5a6373 -5b5a735b5a735a637363637363636b63637363636b6363736363736363736363736363735a636b -6363735a636b5a636b5a636b5b5a735a5a6b525a6b686b7d000000 -000000525b73525b735a63735a6373525a6b525a6b525b735a6373525a6b5b5a73525b734a4a6b -4a526b4953744953744a4a6b4a4a6b424a6b4a4a6b4a4a6b4a52634a526b4a526b52526b52526b -525a6b525a6b5a5a6b5a636b5a636b5a636b5a636b5a636b525a6b5a636b5a5a6b5263635a636b -525a6b525a6b525a63525a63525a63525a6b525a634a5263525a63525a6b525a6b525a6b5a5a63 -5a5a6b5a636b5a636b5a636b5a636b5a636b5a636b63636b63636b63636b5a636b636373636373 -63636b5a636b63636b63636b6363736363736363736363735a5a6b6363736363735b5a735a636b -63636b6363735b5a7363637363637363637363637363637363637363636b63637363636b636373 -63636b5a636b5a63735b5a73525a6b5b5a7352526b686b7d000000 -000000525b735a63735a63736b737a8789958789956b737a52636b5a6373525a6b686b7d82858c -7679844a526b4a526b4a526b5252735b5a734a526b4a526b4a4a6b4a526b52526b525a6b525a6b -525a6b525a6b525a63525a6b5a636b525a63525a6b5a636b5a636b4a5263525a63525a6b4a5263 -525a6b525a63525a6b525a63525a6b4a5263525a6b686b7d5a636b4a525a5a5a6b5a5a6b5a5a6b -5a5a6b5a636b5a636b63636b63636b63636b63636b6363735a636b63636b6363735a636b63636b -63636b63636b63637363637363636b63637363636b6b6b7282858c686b7d63636b636373636373 -63637363637363636b63637363636b5a5a6b6363736363736363736363736363736363735a6373 -5a5a6b5a63735a636b5b5a735b5a735b5a734a526b65637f000000 -000000686b7d5a6373949d9eeae9ecffffffffffffffffffa4a8ae525a6b949d9ef6f5f8ffffff -ffffffcacad15a6373464a60b7bdbceae9ec686b7d4a526b52526b525a6b525a6b5a5a6b5a636b -5a636b525a6b9ca0a3eae9ecf6f5f8b7bdbc626b6b52636b525a639ca0a3eae9eceae9ecb1b2b4 -52636b5a636b525a6b5a636b525a63878995eae9ecfffffff6f5f8a4a8ae5a5a6b5a636b636373 -6363736363735a636b636373636373626b73636373626b73626b73636373636373626b73636373 -6363736c6373626b736b6b726b6b72686b7d5a52619ca0a3ffffff87899563636b636373636373 -6b6b726b6b7263637363637376798482858c686b7d6c6373626b736363736b6b72626b73636373 -5a5a6b5a637363637363636b5b5a735b5a7352526b686b7d000000 -000000686b7d686b7ddedfe2f6f5f88a9e9c82858cb7bdbc878995686b7df6f5f8f6f5f882858c -a4a8aeffffffb1b2b43e525acacad1ffffff6b737a4a526b525a6b525a6b525a6b5a5a6b5a636b -525a6b878995ffffffd4d7d5b7bdbcffffffb7bdbc4a525a949d9effffffd4d7d5b6c8c1ffffff -a4a8ae525a635a636b525a6b6b737affffffeae9ec878995b7bdbccacad1525a635a636b525a63 -525a635a636b6363735a636b5a5a6363636b5a636b525a635a636b6363735a5a6b5a5a6b636373 -63636b5a5a6b63636b63636b5a5a6b6b6b725a5a639ca0a3ffffff82858c635a6b65637f635a6b -5a5a6b5a5a6b6b6b7252525fb1b2b4ffffff76798463636b6b6b726363735a636b5a636b636373 -6363735a63736363735a5a6b5b5a735b5a73525273686b7d000000 -0000006363736b737affffffd4d7d55a5a6b5a63735a6373525a6b9ca0a3ffffffa4a8ae4a5263 -52636beae9eceae9ec4a526bcacad1ffffff6b737a4a526b5a5a6b525a6b525a6b5a636b5a6373 -4a525acacad1ffffff626b6b393f41d4d7d5ffffff525a63cacad1f6f5f85a636b464a48dedfe2 -eae9ec5a636b5a63734a525aa4a8aeffffff8789953e525a4a525a5a5a63525a63626b739ca0a3 -a4a8ae7679845a5a6b626b73949d9e747678767984a4a8ae76798463636b949d9e9ca0a36b6b72 -626b6b8789957476788789959ca0a376798452525f9ca0a3ffffff8789955a5a6b5a5a6b82858c -9ca0a382858c636373626b73b6c8c1ffffff8789957679846363736b6b72949d9e8789956c6373 -5a636b6363735b5a735b5a73525b735a5a6b52526b686b7d000000 -000000686b7d5a6373dedfe2ffffffcacad182858c626b735a636bb7bdbcffffff949d9e525b73 -525a6bdedfe2ffffff686b7dcacad1ffffff6b737a525a6b525a6b525a6b5a636b5a636b5a6373 -4a525ad4d7d5eae9ec626b73525a63b6c8c1ffffff626b73dedfe2dedfe25a636b5a636bd4d7d5 -ffffff6b6b725a6373525a63cacad1ffffff7476785a636b6363735a636b6b6b72eae9ecffffff -f6f5f8fff7ff8789956b6b72ffffffdedfe2eae9ecffffffeae9ecdedfe2ffffffffffffb1b2b4 -6b6b72ffffffeae9ecf6f5f8fffffff6f5f86b6b729ca0a3ffffff878995525a6bb1b2b4ffffff -f6f5f8ffffff949d9ecacad1fffffffffff7ffffffdedfe2747678eae9ecffffffffffffdedfe2 -6b6b726363735b5a735b5a735b5a735b5a7352526b686b7d000000 -000000686b7d5a636b767984dedfe2ffffffffffffb7bdbc525a6bcacad1ffffff878995525b73 -525a6bd4d7d5ffffff6b737acacad1ffffff6b737a525a6b5a63735a636b5a63735a636b5a6373 -4a525acacad1ffffff6b737a525a63dedfe2ffffff626b73d4d7d5f6f5f85a636b5a636beae9ec -fff7ff62736c5a6373525a63dedfe2f6f5f87476785a5a6b626b73525a63a4a8aeffffff878995 -5a5a63f6f5f8dedfe263636bf6f5f8eae9ec6b6b72b1b2b4ffffffb1b2b4626b73ffffffdedfe2 -5a5a6bf6f5f8eae9ec626b6b82858cffffffa4a8ae949d9effffff82858c747678ffffffa4a8ae -393f41d4d7d5fff7ff6b6b72b6c8c1ffffff949d9e626b73cacad1f6f5f85a6360767984ffffff -a4a8ae5a5a6b6363735b5a735b5a735b5a7352526b686b7d000000 -000000626b73686b7d5a63735a636b878995dedfe2ffffff949d9eb1b2b4ffffff878995525a6b -525a6bd4d7d5ffffff6b737acacad1ffffff7679845a6373525a6b878995eae9eceae9eceae9ec -a4a8ae767984ffffffeae9eceae9ecfffffff6f5f85a636b878995ffffffdedfe2dedfe2ffffff -eae9ec626b73626b73525a63dedfe2ffffff7679845a636b626b73525a63d4d7d5f6f5f8747678 -52525fcacad1ffffff747678f6f5f8cacad1464a609ca0a3ffffff82858c5a5a5aeae9ecdedfe2 -5a6360f6f5f8d4d7d55a5a6b626b6bffffffb7bdbc9ca0a3ffffff767984949d9effffffcacad1 -b1b2b4dedfe2ffffff747678b1b2b4ffffff7679845a5a63eae9eceae9ecb1b2b4b1b2b4ffffff -cacad15a5a6b6363735b5a735b5a735b5a735a526b747678000000 -000000626b73626b73626b6b626b73525a6b6b737affffffb6c8c1a4a8aeffffff949d9e525a6b -5a6373eae9ecfff7ff5a636bcacad1ffffff6b737a525a6b525a63747678dedfe2d4d7d5dedfe2 -a4a8ae4a525a878995d4d7d5b1b2b4dedfe2dedfe2626b6b525a63949d9ededfe2b1b2b4eae9ec -d4d7d55a5a6b626b7352525fcacad1ffffff7679845a636b626b7352525fdedfe2f6f5f8747678 -5a5a63cacad1ffffff767984f6f5f8d4d7d552525fa4a8aeffffff8789955a5a63f6f5f8dedfe2 -5a6360fff7ffd4d7d56363736b6b72ffffffb7bdbc9ca0a3ffffff767984a4a8aeffffffdedfe2 -dedfe2dedfe2dedfe2747678b1b2b4ffffff82858c63636bf6f5f8f6f5f8dedfe2eae9ecdedfe2 -b1b2b45b5a735a63735b5a735b5a735b5a735b5a73686b7d000000 -000000626b73626b738a9e9c7679845a636b82858cffffffb7bdbc6b737affffffcacad14a526b -82858cffffffcacad14a5263d4d7d5ffffff82858c767984767984686b7d4a52634a5b62525a63 -525a6b5a636b525f5a3e525a878995ffffffa4a8ae525a636363734a525a3e525a949d9effffff -949d9e525a63626b734a525aa4a8aeffffffa4a8ae4a525a686b7d5a5a63b7bdbcffffff747678 -4a525adedfe2f6f5f86b6b72f6f5f8d4d7d54a525aa4a8aeffffff8789955a5a63eae9ecdedfe2 -5a636bffffffcacad152525f747678ffffffb1b2b49ca0a3ffffff767984878995ffffff878995 -464a605a636b63637352525fb7bdbcffffff7679844a525af6f5f8d4d7d552525f52525f525a63 -63637363637365637f65637f5b5a735b5a735a526b686b7d000000 -000000626b73626b73f6f5f8ffffffeae9ecfffffffff7ff82858c4a5263cacad1ffffffeae9ec -f6f5f8ffffff9ca0a33e525ad4d7d5ffffffffffffffffffffffffb1b2b4525a63636373626b73 -5a636b767984eae9ecdedfe2ffffffd4d7d563636b525a6b82858cdedfe2dedfe2ffffffcacad1 -5a63605a636b6363735a636b5a636beae9ecffffffcacad1eae9eccacad1747678ffffffdedfe2 -cacad1ffffffb1b2b463635fffffffd4d7d54a525a9ca0a3ffffff8789955a5a63f6f5f8dedfe2 -5a636bf6f5f8f6f5f8b1b2b4d4d7d5ffffff82858c949a91ffffffdedfe2878995eae9ecf6f5f8 -b7bdbcd4d7d5dedfe25a5261a4a8aeffffffdedfe2b7bdbcb7bdbcffffffcacad1b1b2b4eae9ec -82858cb7bdbceae9ec7679845b5a735b5a735a5a6b747678000000 -000000626b735a636b767984a4a8aeb6c8c1b7bdbc767984525b735a63734a5263949d9ecacad1 -b1b2b4eae9ecffffff76798482858ca4a8ae9ca0a39ca0a3a4a8ae767984525a6b5a636b5a636b -525a6b626b73cacad1d4d7d5a4a8ae5a636b5a636b525a6b747678dedfe2d4d7d5a4a8ae5a6360 -5a636b5a636b5a636b63636b525a636b6b72b7bdbcdedfe2d4d7d59ca0a352525f82858cd4d7d5 -dedfe2a4a8ae6b6b725a6360b7bdbca4a8ae5a52617b8a84cacad17679845a5a63b7bdbcb1b2b4 -63635ff6f5f8eae9ecdedfe2eae9ecb1b2b463637363636bcacad1fff7ff949d9e6b737adedfe2 -f6f5f8eae9ecb1b2b46363736b6b72dedfe2f6f5f8d4d7d5636373b7bdbcf6f5f8f6f5f8dedfe2 -82858cf6f5f8cacad15a5a6b6363735b5a735b5a73747678000000 -000000626b735a63735a636b525a6b4a52634a5b62525a6b525b73525a6b5a63734a52634a5263 -3e525a6b6b72a4a8ae686b7d4a52634a52634a52634a52634a525a525a6b5a636b525a6b5a636b -5a636b525a6b4a525a4a5b62525a635a636b5a636b5a636b525a6b4a525a525a63525a635a636b -5a636b5a5a6b5a636b5a636b5a636b5a5a6b52525f525a63525a6352525f63636b525a6352525f -5a5a635a5a6363636b63636b52525f5a636b63636b635a6b525a6363636b6363735a5a6363636b -63636bf6f5f8cacad152525f626b6b63636b63637363636b5a5a6363636b636373635a6b525a63 -63636b5a636b5a5a6b6363735a5a6b5a5a6363636b5a636b6363735a5a635a636b626b7352525f -878995ffffff686b7d5a5a6b635a6b5b5a735b5a73747678000000 -0000005a63735a63735a63735a63735a63735a63735a63735b5a73525a6b525a6b5b5a735a6373 -5a6373525a6b4a5263525a6b5a5a6b5a636b52636b5a636b5a636b525a6b525a635a5a6b525a63 -525a63525a6b5a63735a636b5a636b5a5a6b525a6b5a5a6b5a636b5a636b5a636b5a636b5a5a6b -525a6b5a636b5a636b5a5a6b5a5a6b5a636b63636b5a636b5a636b5a636b5a5a6b5a636b63636b -63637363636b5a636b63636b63637363636b63636b626b736b6b726363736363736b6b726b6b72 -63635fffffffd4d7d5635a6b6b6b726c637363636b6363736b6b726c63736363736c63736c6373 -63637363637363637363637363637363637363636b6363736363736363736c63736b6b725a5a63 -7b8a849ca0a35a5a6b5b5a735b5a735b5a735a526b686b7d000000 -0000005a63735a63735a63735a636b525a6b525a6b4a5263525a6b5b5a73525a6b525a6b5a636b -5a5a6b5a636b5a6373525a6b525a6b5a5a6b525a6b525a6b525a6b626b737679845a63735a636b -7679846b737a52636b5a636b5a5a6b5263635a5a6b5a636b525a6b5a5a6b5a636b525a6b5a636b -5a636b5a5a6b5a636b5a5a6b5a636b5a5a6b5a636b5a5a6b5a5a6b5a636b63636b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63637363636b63637363636b6c6373 -63636ba4a8ae82858c6363736c63736363736363736c63736363736363736c6373636373636373 -6363735b5a73636373635a6b635a6b63636b6363735b5a7363636b636373636373636373636373 -5a5a635a5a6b6363735a5a6b5b5a735a63735a5a6b686b7d000000 -000000626b73525a6b8a9e9cdedfe2dedfe2eae9eccacad1767984525a6b525b735a63735a6373 -525b73525a6b5a5a6b525a6b5a5a6b5a636b5a636b5a636b4a525acacad1ffffff5a636b82858c -ffffff949d9e52525f5a636b5a636b5a5a6b5a636b5a636b5a636b5a636b5a636b5a5a6b525a6b -5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a63605a636b5a5a6b635a6b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b -63636b5a5a63635a6b63637363637363636b63637363636b63636b63636b635a6b5a5a6b5b5a73 -5b5a735b5a735a5a6b5a5a6b5a5a6b635a6b6363735b5a7363637363636b63637363636b63636b -6363735a636b5a5a6b5a5a6b5b5a735b5a735a526b686b7d000000 -000000626b734a5263949d9effffffd4d7d5cacad1ffffffeae9ec686b7d525a6b525a6b4a5263 -4a5263525a6b5a636b525a6b525a6b4a52634a52635a636b4a525acacad1ffffff5a6360878995 -ffffff8789954a525a5a5a6b5a636b5a636b525a6b525a635a5a6b5a636b5a5a6b525a6b5a636b -5a5a635a5a6b525a6b5a5a635a5a6b5a5a6b5a5a6b5a636b5a5a6b5a5a635a636b5a5a6b5a636b -63636b63636b5a5a6b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b -63636b63636b63637363636b63637363636b63636b63637363636b5a5a6b635a6b635a6b5a5a6b -5a526b5b5a735a5a6b5a526b5a5a6b635a6b5a5a6b635a6b63636b5a5a6b63636b63636b635a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a526b52526b686b7d000000 -000000686b7d525a63949d9effffff949d9e2b423ab7bdbcffffff8789954a5263686b7d949d9e -8a9e9c5a6373525a6b626b7382858c8a9e9c878995626b734a525acacad1ffffff5a636b878995 -ffffff949d9e6363737679845a636b525a6b626b737679845a63735a5a6b5a636b5a636b5a636b -5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a636b5a636b5a636b5a636b5a636b5a636b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63637363637363636b -63636b63636b63637363637363636b63636b63636b63636b636373635a6b635a6b63636b5a5a6b -5a5a6b5a5a6b5a5a6b5b5a735b5a73635a6b635a6b63636b63636b63636b63636b63637363636b -63636b635a6b5a5a6b5a5a6b52526b5a526b52526b686b7d000000 -000000686b7d4a5b62949d9effffff949d9e464a60cacad1ffffff82858c6b737aeae9ecf6f5f8 -ffffffdedfe25a6360949d9efffffffff7ffffffffdedfe24a525acacad1ffffff5a636b878995 -ffffff767984b1b2b4ffffff7476784a525a949d9effffff82858c4a525a5a636b525a6b5a636b -5a5a6b5a636b5a5a6b5a636b5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a636b5a5a6b655a605a636b -63636b63636b63636b63636b63636b63636b63636b63636b63637363636b63636b636373636373 -63636b63637363636b63637363637363636b63636b6363736363736363735a636b5a5a6b5b5a73 -5b5a735a5a6b635a6b635a6b5a5a6b636373635a6b5a5a6b63637363637363637363636b636373 -5a5a6b5a5a6b5a5a6b5a526b5a5a6b52526b524a6b686b7d000000 -000000686b7d525a639ca0a3ffffffdedfe2d4d7d5ffffffdedfe24a5b62cacad1f6f5f84a525a -767984ffffff9ca0a3525a638789953e525aa4a8aeffffff6b737acacad1ffffff5a636b878995 -ffffff82858c767984ffffff9ca0a3464a48b7bdbcffffff626b73525a6b5a5a6b5a5a6b5a636b -5a636b5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a636b5a5a6b5a5a6b5a636b -63636b63636b635a6b63636b5a5a6b5a5a6b63636b63636b635a6b5a636b635a6b63636b63636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b635a6b5a5a6b5a5a6b5a5a6b -5b5a73635a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b635a6b63637363636b63636b5a5a6b5a5a6b -5a5a6b5a5a6b52526b5a5a6b5a526b52526b524a6b686b7d000000 -000000626b734a5b629ca0a3ffffffdedfe2ffffffeae9ec626b735a636bf6f5f8eae9ecb1b2b4 -b7bdbcffffffcacad14a5b6282858ca4a8aecacad1ffffff747678cacad1ffffff5a6360878995 -ffffff8a9e9c464a60ffffffcacad13e525aeae9ecd4d7d5525a635a636b5a636b5a636b5a636b -5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a635a636b5a636b5a5a6b5a636b5a636b5a636b5a636b -63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b63636b -63636b63636b63636b63636b63636b63636b635a6b63636b635a6b5a5a6b5a526b5a5a6b5a526b -5a5a6b5b5a735a5a6b5a5a6b5a5a6b5a5a6b5a5a6b635a6b63636b63636b5a5a6b635a6b635a6b -5a5a6b5a5a6b5a526b5a526b52526b525273524a6b686b7d000000 -000000626b734a5263949d9effffff82858c9ca0a3ffffff82858c5a636bfff7ffeae9ecd4d7d5 -dedfe2d4d7d5a4a8aeb1b2b4ffffffd4d7d5d4d7d5ffffff6b737acacad1ffffff5a636b878995 -ffffff949d9e393f41cacad1eae9ec63636bffffffa4a8ae4a52635a636b5a5a6b5a636b5a636b -5a636b5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a635a5a6b -5a5a6b5a5a6b5a636b63636b63636b63636b5a5a6b635a6b635a6b63636b63636b635a6b63636b -63636b63636b63636b63636b63636b635a6b5a5a6b5a5a6b5a5a6b5a526b52526b52526b52526b -5a526b5a526b5a526b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b635a6b5a5a6b5a5a6b -5a5a6b5a5a6b52526b52526b52526b525273524a6b686b7d000000 -0000005a63734a52639ca0a3ffffff8a9e9c4a5263ffffffdedfe24a5263f6f5f8d4d7d53e525a -3e525a464a60525a63fff7ffcacad1393f41878995ffffff6b737acacad1f6f5f8525f5a878995 -ffffff8789953e525a878995ffffff949d9effffff7b8a8452525f5a5a6b5a636b5a5a6b5a5a6b -5a636b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a636b5a636b5a5a6b63636b5a636b5a636b -5a636b63636b63636b63636b5a5a6b63636b63636b5a5a6b63636b635a6b63636b63636b63636b -63637363636b635a6b63636b5b5a7363636b635a6b5a5a6b5a526b5a526b52526b52526b5a526b -5a526b5a526b5a5a6b5a5a6b5a526b5a5a6b5a5a6b5a5a6b5a5a6b635a6b5a5a6b5a5a6b635a6b -5a5a6b5a526b524a6b52526b524a6b525273524a6b686b7d000000 -00000065637f4a52639ca0a3ffffff9ca0a33e525aa4a8aeffffff878995a4a8aeffffffcacad1 -b1b2b4eae9ec82858cdedfe2eae9ec949d9ededfe2ffffff7b8a84b1b2b4ffffffb7bdbc949d9e -ffffffdedfe282858c52525feae9ecdedfe2eae9ec5a636b525a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b5a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a636b5a5a6b5a5a6b5a636b -5a5a6b635a6b63636b63636b63636b63636b63636b5a5a6b635a6b63636b635a6b63636b636373 -63636b63636b636373635a6b63636b63636b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a526b -5a526b52526b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5b5a735a5a6b5a5a6b5a5a6b5a5a6b -5a527352526b52526b524a6b52526b52526b4a4a6b686b7d000000 -0000005a63734a526b767984cacad17679844a526b5a636bd4d7d5a4a8ae4a525aa4a8aeeae9ec -eae9ecd4d7d56b737a767984eae9eceae9eca4a8aed4d7d57679846b737aeae9eceae9ec767984 -cacad1ffffffa4a8ae3e525a9ca0a3ffffffb7bdbc52525f525a6b5a5a6b5a636b525a635a5a6b -5a5a6b5a5a635a5a6b5a636b5a5a635a5a6b5a636b5a5a6b5a5a6b5a5a6b5a5a635a636b5a5a6b -63636b63636b63636b63636b63636b63636b635a6b63636b635a6b63636b63636b63636b63636b -63636b63636b635a6b63636b63636b635a6b5a5a6b5a5a6b5a5a6b5a526b5a526b5a5a6b52526b -5252735252735a5a6b635a6b5a526b5a5a6b5a5a6b5a5a6b5b5a735a5a6b5a526b5a5a6b5a5a6b -52526b525273524a6b52526b524a6b525273524a6b65637f000000 -000000525a6b5b5a734a526b464a604a526b525a6b4a526b4a5263525a6b525a6b4a525a525a63 -525a63464a604a5a6b3e525a4a526352526b3e525a464a604a5263464a604a5263525a634a5263 -464a60525a6b5a5a6b52525f5a636bffffff949d9e4a525a5a5a6b5a5a6b5a5a63525a6b5a5a6b -5a636b5a5a635a636b5a5a6b5a5a6b5a636b5a5a6b5a63605a5a6b5a5a6b5a5a6b635a6b63636b -5a5a6363636b63636b63636b63636b63636b63636b635a6b63636b635a6b63636b63636b63636b -63636b635a6b63636b635a6b63636b5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b52526b52526b -5252735a526b5a5a6b5a5a6b5a526b5a5a6b5a526b5a5a6b5a526b5a5a6b5a5a6b52527352526b -524a6b524a6b524a6b524a6b524a6b5252734a4a6b686b7d000000 -000000525b73525b73525a6b525b73525a6b525a6b525a6b5a6373525a6b525a6b5a636b525a6b -525a6b525a6b525a6b52526b525a6b4a526b52526b52525f4a526352526b52526b4a526352525f -5a636b464a60b7bdbceae9eceae9eceae9ec63636b525a6b525a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a635a5a6b5a5a6b5a5a6b5a5a635a5a6b5a636b5a5a6b5a5a63635a6b5a5a6b63635f5a5a6b -655a605a5a6b63636b5a5a6b5a5a6b63636b5a5a6b63636b63636b63636b635a6b63636b635a6b -63636b635a6b63636b635a6b5a5a6b635a6b635a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b5a526b -5a526b52526b5a5a6b5a526b5a5a6b5a5a6b5a526b5a5a6b5a5a6b5a5a6b5a5a6b524a6b52526b -52526b524a6b4a4a6b524a6b524a6b524a6b4a4a6b686b7d000000 -000000525b73525a6b525a6b5a5a6b525a6b525a6b5a636b525a6b525a6b525a6b4a5a6b525a6b -525a63525a6b525a6b525a6b4a52634a52634a526b52526b4a52634a52634a526b52526b52526b -5a5a6b4a525a82858cb7bdbccacad174767852525f5a5a63525a6b525a6b5a5a635a5a6b5a5a63 -525a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a5a635a5a6b5a5a6b5a5a6b5a636b5a63735a6373 -5a6373635a6b635a6b63636b63636b635a6b63636b63636b63636b635a6b63636b63636b63636b -63636b63636b635a6b63636b635a6b5a636b635a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b52526b52526b52526b -524a6b524a6b494a73524a6b524a6b52526b4a4a6b686b7d000000 -000000525a6b5a636b52636b5a636b525a6b5a636b525a6b525a6b5a636b52636b646b635a5a63 -525a6b4a526b52526b525a6b4a526352525f4a52634a5263464a604a52635a52614a526352525f -525a6b52526b4a52634a525a3e525a52525f5a5a6b525a63525a63525a635a5a63525a635a5a6b -63635f5a5a6b5a5a635a5a6b5a5a635a5a6b5a636b5a636b655a605a636b5a5261794e457c4626 -794e45655a605a636b63636b63636b63636b5a63735a637363636b63636b635a6b63636b635a6b -5a5a6b635a6b63636b635a6b635a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b5a5a6b52526b524a6b525273524a6b -524a6b4a4a6b525273524a6b524a6b524a6b464a60686b7d000000 -0000005a5a6b5a63734a52639c7e3c62736c525b734953745a5a6b4a5a6b7274429b9218646b63 -4a526b4a526b494a734a52634a4a6b424a6b424a6b464a60494a733e525a7b7a314a526b4a4a6b -525a634a526b5c63509b9218807c45525b73525a6b525a6b52526b525a6b4a526b5a636b464a60 -727442635a6b5a5a6b5a5a6b5a5a6b5a5a6b655a60655a605a636b5a5a63a92b0cd31f00b11700 -b11700a6342163636b5a5a6b635a6b63636b794e45794e455a526163636b5a6373635a6b63636b -635a6b635a6b635a6b5a5a6b63636b635a6b5a5a6b5a5a6b635a6b5a5a6b5a5a6b5a5a6b5a5a6b -5a5a6b635a6b5a5a6b5a5a6b5a5a6b5a526b5a5a6b5a5a6b5a5a6b52526b52526b525273524a6b -524a6b525273524a6b524a6b4a4a6b52526b4a4a6b686b7d000000 -0000005a636b5a6373525f5a9b921862736c5f735a807c455a636b49537476612c646b63525a63 -646b635a6360807c455a63605b6b51807c45646b5a52525f807c454c524d7b7a31525a63807c45 -525a6b52526b52634a7b7a317b7a316b7366807c455a5a6b807c455a5a6b807c455a5a6b727442 -8c86225a5a6b5a5a6b635a6b5a5a6ba63421d31f00c630115a6373a63421c21e00b11700d31f00 -b224009f1a00655a6063636b5a6373794e45b11700b117009f1a0081250c794e455a5a6b63636b -63636b635a6b63636b635a6b63636b63636b635a6b5a5a6b5a5a6b5a5a6b635a6b635a6b5a5a6b -5a5a6b5a5a6b5a5a6b5a5a6b5a526b5a526b5a5a6b5a526b52526b52526b52526b524a6b524a6b -5252734a4a6b524a6b524a6b524a6b52526b4a4a6b686b7d000000 -0000005a636b5a63735c63508c8622646b5a7d7a249b9218626b6b4953747b7a319b92185a5a5a -9b921872694676612c7b7a317d7a249b92188c86225b633a9b92187274425d6b3f7269469b9218 -646b5a525273555a429b9218807c45535a4c8c86227b7a31807c455c63509b92187274428c8622 -8c86225b5a73655a605a6373794e45e22300d31f00c63011a63421ca2a009f1a00b22400d31f00 -b224009f1a00794e455a6373794e459f1a00b117009f1a009f1a007d15009f1a00794e4563636b -635a6b63636b635a6b5a5a6b635a6b63636b635a6b5a5a6b635a6b5a5a6b5a5a6b5a5a6b5a5a6b -635a6b5a5a6b5a5a6b5b5a735a5a6b5a526b5a526b525273524a6b52526b524a6b494a73524a6b -524a6b524a6b4a4a6b524a6b5252735252734a4a6b686b7d000000 -0000005a636b525b735d6b3f9b9218807c455d6b3f727442646b5a4953745d6b3f807c45424a6b -9b92185a636b8c8622807c455b633a76612c5d6b3f5b633a5b633a7b7a315d6b3f7d7a249b9218 -7274429c7e3c5d6b3f8c8622807c45646b5a9b9218575a33807c4576612c9b92187b7a315d6b3f -7b7a31635a6b5a5a6b5a5a5ae62f10e22300d31f00e22300d31f00a92b0cb11700d31f00c21e00 -9f1a00794e456363735a5a5a9f1a00b11700b117009f1a009f1a009f1a00b11700794e455b5a73 -635a6b635a6b635a6b63636b5a63735a6373636373635a6b5a5a6b635a6b635a6b5a5a6b635a6b -5a5a6b5a5a6b5a5a6b5a5a635a527352526b5a526b52526b52526b524a6b525273524a6b4a4a6b -525273494a73524a6b524a6b524a6b5252734a4a6b686b7d000000 -00000063636b525b737b7a317b7a317b7a3176612c7b7a316b73664953747b7a31778469535a4c -9b92187274428c862272744276612c7d7a247b7a315b633a7d7a247b7a3176612c7d7a24727442 -4a525a525f5a5b633a7b7a317d7a247b7a318c862263635f76612c7d7a24807c45555a427d7a24 -7b7a31635a6b5a636bc63011e223009f1a00e22300e22300a92b0c9f1a00d31f00ca2a009f1a00 -a634215a637363636b81250c4c1b0d4c1b0d4c1b0d9f1a009f1a00b11700a92b0c6b5a6b63636b -6c637363636b6363735a52617732237732235a52616363735a6373635a6b63636b5a5a6b63636b -63636b525a6b7b8a846273634a525a5b5a735a526b5a526b524a6b52526b525273524a6b524a6b -524a6b524a6b525273494a73524a6b52526b4a4a6b686b7d000000 -000000626b73525a6b726946525a635d6b3f5c63505b6b515a6b5c495374575a339b9218726946 -555a42575a338c8622726946555a425b633a555a425b633a9b92185a5a5a7b7a31575a339b9218 -63636b525b734c524d9b92187d7765575a339b92185d6b3f9c7e3c4b52429b92185a5a5a8c8622 -9c7e3c525b73a63421ef1800c21e00c21e00f422009f1a009f1a00d31f00d31f0081250c50451e -4a3e40525a6b7732234c1b0d060f10060f1025161881250c5b341b81250c4c524d393f412b2821 -393f414a525a5a526b773223b11700b117007d1500773223655a6063637363636b635a6b63636b -5a5a6b74767894a5926380665263525a526b5a5a6b52526b524a6b525273525273524a6b524a6b -525273524a6b4a4a6b524a6b4a526b5252734a4a6b686b7d000000 -0000005a636b5a63735a6373626b6b4953745a6373525b73626b6b6b7b6252526b42526b525a6b -4a526b4a526b424a6b4a526b4a4a6b424a6b494a73575a33726946424a6b464a604a526b424a6b -525a6b525a63525a6b52526b52526b52525f4953744a5263525a6b525a6b4a4a6b5a5a6352525f -495374794e45a63421ef1800e22300e22300a92b0c9f1a00d31f00d31f00a92b0c7c46262b2821 -1821184a3e404c1b0d0d16182a31292c39292a33202a31292129212129212b28212b2821212118 -1821101821102d2718b11700b1170081250c81250c7d15007d1500773223655a60636373635a6b -63636b94a5926b89665b6b515b5a735a526b5a526b524a6b52526b52526b524a6b4a4a6b524a6b -494a734a4a6b4a4a6b4a4a6b524a6b52526b4a4a6b686b7d000000 -0000005a636b525b737274429b92187d7765495374495374727442807c45495374525a6b4a526b -4a526b4a4a6b4a526b424a6b424a6b52525f494a734a525a4a4a6b4a4a6b4a526b535a4c807c45 -7b7a31646b5a494a73525a6b525a6b495374525a6b52526b52526b5252734a4a6b7b7a31626b6b -794e459d7a66a5523aef1800f42200ef18007c46267c4626d31f00c21e0050451e3940311a1610 -555a4250451e212118394031394031394031394031394031394031394031394a3a3940312e3734 -2c39292b28212121182d27184c1b0d7d1500a92b0cc21e009f1a00c21e00794e455a637363636b -525f5a5a6b5c5f735a5a636b5a52735a5a6b5a526b52526b52526b52526b524a6b525273524a6b -524a6b524a6b524a6b524a6b52526b4a4a6b464a60686b7d000000 -0000005a636b525b735d6b3f7b7a31807c456b7b62646b5a8c86227d77656b7b62646b5a646b5a -646b5a807c455a5a635c6350807c45494a73807c4552525f7274425a52614953744b52429b9218 -9b9218646b5a807c4563636b646b5a807c455a5a6363635f5a5a63807c4563635f5d6b3f726946 -84635f949d9ecd4825ef1800e22300f42200794e455b6b5176612c7c4626394031251618100810 -3940312b2821394031415240394a3a3940314152404b52424b5242535a4c4c524d535a4c4c524d -4b5242464a4841524039403121372e1826222b282177322381250c5b341b5b5a73636373626b6b -6b80755b6b515a636b5a5a6b5a5a6b5a526b5a5a6b52526b52526b524a6b525273524a6b52526b -4953744a4a6b524a6b52526b52526b4a4a6b464a60686b7d000000 -00000052636b4953747b7a31c0852f5f735a8c86227b7a317b7a31807c458c86227b7a318c8622 -807c458c86227b7a317d7a248c86227269467b7a317269468c8622807c45494a73464a489b9218 -9b92185c63507b7a317274427d7a249b92187269467b7a317269465b633a8c86225d6b3fa5523a -94a592bc7a65f42200ca2a00e22300c630115b6b517269465d6b3f555a42212118101010181818 -1008102e37344c524d4152404152404c524d535a4c535a4c52634a5c63505c63505c63505c6350 -5c63505c63505a63605c6350535a4c4152402e37341826221826220d16182129215a6360646b63 -5f735a5a6b5c5a5a6b5a5a6b525b7352526b52526b52526b52526b4a526b52526b524a6b4a4a6b -52526b4a4a6b4a4a6b4a526b4a526b4a526b424a6b686b7d000000 -0000005a636b525b737b7a319b92185b6b519b9218807c457274425d6b3f9b9218807c45727442 -5b633a9b92187b7a315b633a5b633a7d7a2452526b555a429b9218807c45494a734b52429b9218 -8c862263635f8c86227b7a315b633a5d6b3f72744276612c727442807c45807c457d7a249a9680 -9a9680f42200d31f00a92b0cc630117269465b6b515b633a5c635041311d100810181818212118 -212921535a4c555a424b5242535a4c52635252634a535a4c5b6b514b52424152404c524d495a4b -535a4c535a4c525f5a535a4c5263525c63505c6350485a424152402a3320394a3a495a4b627363 -6273635b5a735a637352525f7732235a5261525b7352526b52526b52526b5252734a4a6b524a6b -4a526b524a6b4a4a6b4a4a6b4a526b4a526b464a60686b7d000000 -0000005a636b525b735d6b3f7d7a247b7a317b7a315a636b7b7a315d6b3f8c8622525a637b7a31 -5b633a807c454a525a7b7a315d6b3f7d7a24646b5a575a337b7a314a4a6b494a73555a4276612c -5b633a7b7a317d7a247b7a3176612c7b7a317b7a317b7a317b7a317b7a318c86228c8622a5ae97 -e62f10e22300a92b0cb2240077322352634a7269467269463949291008102121211818182b2821 -495a4b5c6350535a4c535a4c52634a535a4c535a4c52634a495a4b182118181818394a3a394a3a -4152404152404b52424152404c524d4b5242535a4c5263525c63505263528789956380664f6b50 -2e37344a525a5a52619f1a00c21e0081250c5b341b5a5273525b7352526b52526b4a4a6b4a526b -525273524a6b4a4a6b4a526b4a4a6b4a4a6b464a6065637f000000 -0000005a6373525b735c63505d6b3f52634a7b7a31807c455c635052525f7b7a31807c455c6350 -4a525a8c86227274424b52425d6b3f474a369b9218464a488c8622646b5a494a734b524263635f -464a48555a428c862272744252634a555a424b52429b92187269468c86229c7e3c807c45cd4825 -f42200b22400b22400e22300c63011555a42726946474a36100810212118182118212118415240 -5c6350526352535a4c52634a526352535a4c52634a4152402c3929212118060f102b2821394031 -394a3a464a483940312e37344152404b52424b5242415240495a4b5a63605a6b5c6b8966535a4c -2a31291821182d271881250cb117007d15007d15007d15004c524d494a735252734a4a6b52526b -4a526b4a4a6b4a4a6b4a4a6b4a4a6b4a4a6b424a6b636373000000 -0000005a6373525b73525a6b525b73525b73646b5a5a636b525b73525b7342526b525a634a526b -52526b464a604a4a6b4a526b4a4a6b494a73424a6b4a4a6b424a6b4a4a6b464a604a4a6b4a4a6b -4a4a6b4a4a6b464a6049537452526b5252734a4a6b4a4a6b464a60a5523a8cb0a1bd734ff42200 -ca2a00b11700bd734fc63011f42200a64b235f735a474a36181818212118101010181818394a3a -5a6b5c5c635052634a526352535a4c52634a535a4c3940312c3929212118101010101010212921 -3940313940311010100808081010102c3929495a4b495a4b62736c525f5a5f735a495a4b5c6350 -5a6b5c4b52422a31292121182d27187d1500b117009f1a007d1500773223524a6b4a4a6b52526b -4a4a6b4a4a6b4a526b4a4a6b4a4a6b4a4a6b464a6065637f000000 -000000525b73525a6b525b73525b73525a638c8622626b6b525b73646b5a525f5a727442495374 -4a526b494a7352525f424a6b727442726946726946424a6b424a6b424a6b4a4a6b4a4a6b4a526b -4a4a6b52526b52526b52526b5b5a7352526b52526b525273794e459ca28fb7937bf42200d31f00 -9f1a00a5523aa1c1b7cb543bef1800f42200c63011485a422121211818182121212129214b5242 -5a6b5c5a6b5c5c63505c6350535a4c535a4c2c39292121183940311818181818180d1618101010 -2121212c39290811081010101010100718102a31295a6b5c8aa0946273635f735a181818101810 -4152405c63505263524b52422a31292b28214c1b0d25161881250cd31f00794e4549537452526b -4a4a6b4a4a6b4a526b4a4a6b4a4a6b4a526b464a60686b7d000000 -000000525a6b4953745a636b7784695b6b519b9218525b734a526b9b92185b6b518c86226b7366 -52525f807c454a526b424a6b7d7a248c86225d6b3f5a5a6363635f52525f52526b5a5a634a526b -4a4a6b524a6b524a6b4a526b52526b52526b495374794e459d7a66a5ae97e62f10e22300b22400 -c63011b1b2b4a1c1b7b7937bf42200e22300f422004c1b0d0d16182121182121214152405c6350 -5b6b51646b635b6b515a6b5c485a424b524227272c1018101818181826221818181818181a1610 -1010101010100808081010101010100008052e37345a6360627363587b4e4b5242071810000000 -0808082a3129535a4c5c63505c63504152402129210d16180d161841311d464a6052527352526b -4a526b4a4a6b4a4a6b4a4a6b4a4a6b4a4a6b464a6065637f000000 -0000005a63734953747b7a318c86227274429c7e3c5a6373464a608c86227269468c86227b7a31 -7274429b921863635f424a6b5b633a9b92187274427b7a318c86225b633a8c86227b7a315a5a63 -4a4a6b52526b524a6b52526b52526b495374655a609d7a669cada5cd4825ef1800b22400b22400 -b09f93a1c1b7b1b2b4b6c8c1cd4825f42200f4220081250c0d16182b28212d27182b2821526352 -646b5a627363646b635f735a535a4c485a422c3929212121181818181818181818181818101010 -1018101010101010101010101010101821185a63606b7b6b587b4e4c524d2e3734101010001008 -0808082e37344c524d4b5242535a4c5c6350535a4c3940312129180d1618181818393f41524a6b -52526b4a4a6b4a4a6b4a4a6b4a4a6b4a4a6b464a6065637f000000 -0000005a63734a526b7274425d6b3f7b7a31587b4e52527342526b7274424a525a5d6b3f5b633a -8c86229b921863635f463d7b575a339b92187b7a318c86228c8622575a339b92187d7a24494a73 -4a4a6b4a4a6b4a526b52526b4a526b524a6ba5523a94b3a5cb543bf42200c63011b11700bc7a65 -a1c1b7a5b4a5b6c8c1bc7a65f42200e22300c21e002121182121212b28212b28212b28214b5242 -5f735a6273636273636b736652634a212921212118182118181818181818181818181818101010 -1818181010101010101010101018104a525a62736c5f735a2f4231394a3a212121081108101010 -0808082129215263524b5242415240495a4b5263525c63504b52422c392918181827272c525b73 -4a4a6b4a4a6b4a4a6b4a4a6b494a734a4a6b464a60686b7d000000 -0000005a63734a526b7b7a317b7a317b7a31807c45495374464a607b7a315c63507b7a315b633a -7d7a24646b5a4a4a6b424a6b5b633a7d7a248c86227b7a31524a6b575a339b92187b7a31494a73 -4a4a6b4a4a6b52526b4a4a6b495374a5523a8a9e9cbc7a65f42200c63011b11700bc633ca1c1b7 -a5b4a5b6c8c1b09f93f42200d31f009f1a002d27180d16182a31292d27182b28212b2821415240 -6273636b73666b73666273635a6b5c212118181818181818181818181818181818101010101010 -0d1618181818181818001008525f5a9ca0a35f735a485a42080808101010101010101010081108 -101010080808394a3a5a6b5c5263524b5242415240535a4c526352535a4c394a3a21291827272c -3e525a494a734a4a6b424a6b4a3e40524a6b424a6b686b7d000000 -000000525a6b525b734b52429c7e3c525f5a5c6350495374494a735d6b3f807c45555a42535a4c -4b52429b9218525273424a6b535a4c555a42535a4c76612c807c45464a48575a335c6350525273 -52526b4a4a6b524a6b495374794e459d7a669ca28ff42200e22300b11700a64b23a5b4a5b1b2b4 -a1c1b7b1b4a2e62f10d31f00b224005b341b39492939403125161825161841311d2b2821394a3a -5f735a6b73666b73666b73665f735a2e37340d1618181818181818101810181818181818101810 -1010101018100808084152409cada56b896652634a071810101010080808071810101010101010 -1010100718101010104b5242646b5a6b7b6b525f5a415240555a4252635252634a4b52422c3929 -1821182e37344a4a6b4a3e40b117009f1a004a3e4065637f000000 -000000525b73525b734953745a6b5c495374494a734a526b52526b424a6b4a4a6b4a4a6b494a73 -524a6b424a6b4a4a6b4a4a6b4a4a6b424a6b494a73464a60424a6b4a4a6b4a4a6b494a734a4a6b -4a4a6b524a6b495374794e4584635f9cad9ce62f10e22300b22400c63011a5ae97b1b2b4a1c1b7 -b6c8c1cd4825e22300c21e007732234e52345b633a587b4e4f6b502a33202b2821182118182622 -646b5a6b73666b7b6b6b73665f735a415240181818212118101810181818101810101810181818 -1818181010102129215a6360788c7b5f735a182118080808101010071810100810101010101010 -0718101010100808081821184152405a6b5c8aa094646b63415240495a4b525f5a52634a535a4c -41524021291818262281250cb2240081250c7d1500794e45000000 -000000525a6b494a73807c459b92185a63605a5a63494a73424a6b494a73494a73424a6b424a6b -5b633a63635f463d7b424a6b424a6b463d7b464a48646b5a463d7b4a4a6b4a4a6b4a4a6b525273 -4a4a6b4953745a5261a5523a8cb0a1cb543bf42200b22400b11700b7937ba1c1b7a5b4a5b6c8c1 -cb543be62f10c21e0081250c4e52344e5234516b3d76612ca64b232c39292b2821181818182110 -646b5a62736c6b7b6b6b73666273634b5242182118212118182622181818181818101810101010 -1818181010106b737a7384765f735a21372e080808101010080808080808071810101010101010 -0808080718100718100808082a3129394a3a535a4c6273630d16182a332041524048634d526352 -535a4c4b52422e37341821184c1b0d531100531100a5523a000000 -0000005a6373424a6b8c86224953745d6b3f9b92185b5a73807c45494a73807c4563635f52525f -9b921863635f807c454a526b646b5a5a5a638c8622726946494a734a4a6b4a4a6b5252734a4a6b -4a4a6b5252737c4626879488bc7a65f42200c630119f1a00bd734fa1c1b7a5b4a5b6c8c1b7937b -ef1800ca2a00a92b0c474c294e52344e52345d6b3fcd4825f422005b341b0d1618081108415240 -6b73666b73666b7b6b6b73666273635c6350212118181818181818182118181818181818181818 -080808525f5a7384766b8966394031081108101010101010081108080808080808101010101010 -081108100810080808060f101010104152404152402c3929101010081108101810394031485a42 -5a6b5c526352495a4b41524021372e1818180010084c524d000000 -000000525a6b494a73575a339c7e3c535a4c9c7e3c3e525a8c86225c63508c86227b7a31727442 -9b921852525f7d7a245d6b3f8c86227274429b9218646b5a494a734a4a6b4a4a6b524a6b524a6b -495374a5523a7d8476b7937bef1800d31f009f1a00a5523a9bb5ada5b4a5b6c8c1b09f93e22300 -d31f00a92b0c5b341b4e52344e5234474c29b09f93b7937bf42200f42200a92b0c4a3e405a6b5c -5f735a6b736662736c6b7b6b6b73665a6b5c2a3320101010181818181818212118182622101010 -393f4162736c778469485a42071810101010101010101010101010101010080808071810100810 -0718100808081010100808080000001818182f42310808080808081010100808082a312962736c -4152405b6b51525f5a52634a495a4b4152401818184c524d000000 -0000004a526b5252733f33657d7a247274425a636052525f9b92185c63505b633a76612c5d6b3f -5d6b3f63635f9b9218726946555a427274425b633a646b5a494a734a4a6b4a4a6b524a6b495374 -794e4584635f94a592e62f10e22300a92b0cc63011a5b4a5a5b4a5a1c1b7b7c7b2e62f10d31f00 -b224007732233e52314e52343e52319d7a66b6c8c1b6c8c1cb543bf42200f42200cd48254f6b50 -6273634c524d4b52426b80756b7b6b6273634152401818181818181818181818181818182e3734 -646b636b7b6b4f6b50181818101010101010101010101010101010071810101010060f10071810 -10081010101008080808080827272c2e3734394a3a2c39292121211018100808080010086b8075 -6b7b6b495a4b5a6b5c5b6b51526352495a4b415240646b63000000 -0000005252734a526b5a63607b7a317b7a317274425d6b3f8c862272694676612c5d6b3f7b7a31 -7b7a317b7a318c86225d6b3f7269465b633a8c8622646b5a494a73494a734a4a6b495374655a60 -9d7a66949d9ecd4825f42200b22400b22400b09f939bb5ada5b4a5a1c1b7cb543be22300ca2a00 -81250c3e52314e52343e5231726946b7bdbcb6c8c1b6c8c1b1b2b4e62f10f42200f42200a5523a -48634d4a3e403940315c63506b807562736c646b5a2a31291818181818181018102121215a6b5c -6273635f735a2129210718101a1610101810101010101010101010101010101010101010071810 -1010100811080d16185c63507a8c7284947b8c947b8c947b7d84766b73665c63502a31292b2821 -5a6b5c5a6b5c5263526273635a6b5c526352394a3a6b8075000000 -000000525273424a6b76612c9c7e3c3e525a7b7a315b633a9c7e3c535a4c555a42535a4c575a33 -9b92184b52429b92185c63505a5a5a464a489b9218646b5a494a73524a6b494a735a526ba5523a -8a9e9cbd734ff42200c63011b224009d7a667b8a84a5b4a5b6c8c1bc7a65f42200ca2a00a92b0c -474c294e52343e52315b633ab1b2b4b6c8c1b7c7b2b7c7b2b6c8c1b09f93f42200f42200a63421 -495a4b394a3a464a48394a3a62736c6b7b6b6b7b6b4b52421821181821180d16185a636062736c -6b89662f4231181818181818101010101010101010101010101010101010101010101010101010 -1010100718106b736684947b788c7b858c757784697d84765b6b515b6b517784697a8c726b7b6b -5c63504b5242495a4b5a6b5c6b7b6b2e37340000005a5a5a000000 -000000494a73495374424a6b494a73494a73494a73494a73424a6b494a73494a73494a73494a73 -463d7b424a6b494a73424a6b494a734a4a6b424a6b494a734a4a6b4a4a6b495374a5523a879488 -bc7a65f42200ca2a009f1a00bc633c7679849cad9ca1c1b7b7937bf42200ca2a00a92b0c50451e -474a363e5231474c29b09f93b6c8c1b7c7b2b6c8c1b6c8c1b6c8c1b7937bf42200cd4825464a48 -2c3929464a48464a48394a3a4c524d7384766b7b6b5f735a2e37341821184c524d7476786b8966 -415240101010181818212118181818101010101010101810101010101010101010101810181818 -0718104b52428c947b858c758c947b8c947b6b7b62525f5a535a4c535a4c535a4c5b6b515b6b51 -7784697784695b6b51495a4b394a3a0718100000004a525a000000 -0000004953744953744953744a526b494a73494a73495374495374494a734a526b4a526b4a526b -52526b52526b4a526b4a4a6b495374494a734953744a4a6b4a4a6b495374794e457d7765949a91 -e22300e22300a92b0ccd48257b8a848aa094a1c1b7b1b4a2e62f10d31f00b224005b341b474a36 -4e5234474c299d7a66b6c8c1b1b2b4b6c8c1b7c7b2b6c8c1b1b4a2f42200d31f004e5234394a3a -1008102c3929474a362c39292e37346b7b6b6b7b6b6b7b6b485a422b423a949d9e6b7b624f6b50 -1821181818181818181818181018101018101010101010101018101818180d1618101810071810 -3940316b89668c9c7b8794888c947b7d8476646b5a5a636052634a5a6b5c6b7b62535a4c5b6b51 -5c63505263526b7b626b8966555a421818180000004c524d000000 -0000004953744a4a6b494a73494a73525273494a734a4a6b4a4a6b424a6b494a7349537442526b -4953744a526b4a4a6b4a4a6b494a734a526b4a526b4a4a6b494a73655a60a5523a8a9e9ce62f10 -e22300b22400c630117d77657b8a84a5b4a5b6c8c1cd4825e22300b224007732234e52344e5234 -39492984635fb7c7b2a1c1b7b6c8c1b6c8c1b6c8c1b1b2b4e62f10f422007c4626394929476336 -5c63502b28212c39292121184c524d6b7b6b6b7b6b62736c6b7b6b8789955a6b5c5f735a2a3320 -18262221212118181810181010101010101010101010101010101010101010181010101027272c -6b7b626b7b6b9ca28f9ca28f84947b94a59284947b646b5a646b5a849473646b5a5f735a6b7366 -646b5a495a4b5b6b517784695f735a6b73662c39295a5a5a000000 -000000495374494a733ba1683ba1683ba1683ba1683ba1683ba1686b7b6276612c7c4626a5523a -655a60524a6b4a526b4953744a4a6b49537452526b4953745a5261a5523a8a9e9ccb543bf42200 -b22400b2240084635f6b80759cada5b6c8c1bd734fef1800c21e0081250c474c294e5234474a36 -5b633ab1b4a2b6c8c1b7937be62f10b1b4a2b6c8c1cb543bf422007c4626394929474c293e5231 -516b3d2a33201818184152406b7b6b62736c6b7b6b6b7b6b7b8a847384766b7b622c3929101010 -1818181821182121211818181818180d16181a16101018100d16181818181010101821185f735a -7d847677846984947ba5b4a5889e8a8c9c7b84947b6b7b6b778469646b5a6b7b6b788c7b858c75 -7784697784695f735a6b7b626b73666b7b626b7b62879488000000 -000000495374494a733ba1683ba1683ba1683ba1688cb0a1526363738476b09f93cb543b794e45 -5a2586524a6b52526b525273494a73524a6b4a526b525273a5523a7b8a84bc7a65ef1800c63011 -9f1a00a5523a6b8075949d9ea1c1b7b7937bef1800ca2a009f1a00474c294e52343e52314e5234 -b09f93b6c8c1b1b4a2cb543be62f10e62f10bd734ff42200a92b0c394929474c293949293e5231 -212918181818394a3a5f735a646b636b73666b7b6b6b8075646b636b7b6252634a181818181818 -1018101818181818181818181821181818181010101818181818181018101010102a3320738476 -7d84767a8c727a8c72a5b4a5a5ae978c9c7b7d84765b6b517d84766b73668c947b8c947b849473 -858c757a8c727d84766b7b6b6b73666b7b626b7b62949a91000000 -0000004953745252733ba1683ba1683ba1687a9487686b7d393f415a52618789957476785a2586 -4b188a5a5273525273495374494a73525273495374794e457d77659a9680ef1800e223009f1a00 -cb543b8aa0948aa094a1c1b7b09f93e62f10d31f00a92b0c5b341b4e52344e5234474c299a9680 -b6c8c1a1c1b7cb543bb1b4a2b1b2b4e62f10f42200e62f104e5234474c29474c293e52312a3320 -1818183940316273635a6b5c646b5a5f735a646b635a63606b89665f735a62736c4152400d1618 -2121210d16181010101010101818181821181818181818181818181818181010102e37347a8c72 -858c7584947b788c7b8c9c7bb7c7b29ca28f8c947b646b635f735a6b7b6b84947b8c947b84947b -858c757a8c727a8c727a8c727784696b7b62646b5a879488000000 -000000495374494a733ba1683ba168626b735a63737679844c524d6b6b726b6b72393f41767984 -733f73524a6b5252734a4a6b525273495374794e459d7a6694a592e62f10e22300a92b0ca92b0c -8794889bb5ada5b4a5b1b2b4cd4825e22300b224007732233e52314e52343e52319d7a66b6c8c1 -8a9e9ca5523abc7a65a1c1b7a1c1b7b7937bd31f00f42200c63011394a203e52312a3320101810 -2a31295a6b5c5b6b515a6b5c5c63506b80756b737a6273635f735a6b7b6b6b7b6b6273632a3129 -1818182121181818181818181018101010100d1618181818182118212118181818394a3a858c75 -7a8c728494738c947b858c75a5ae97b7c7b2a5ae978c947b646b5a6b7b627a8c728c9c7b84947b -84947b858c75858c757a8c727a8c727a8c726b7b62949a91000000 -000000495374494a733ba1683ba1683f33654c524d5a5a6327272c393f41393f41393f41464a60 -cb543b733f734953745252734953745a526ba5523a8a9e9ccd4825ef1800b22400b117009a9680 -8794889cada5a1c1b7cb543be22300c21e0081250c4e52344e52343e5231794e45b1b4a294b3a5 -84635fbd734fa1c1b76b8075a5b4a5a1c1b7bc7a65d31f00f42200a634212f4231101010182118 -5c63505a6b5c5a6b5c5a6b5c6273638794889cad9c5f735a5263524152406b7b6b6b7b6b5c6350 -2121211821181821181818181818181818181818181010101818181821182121211818185b6b51 -889e8a84947b8c947b84947b8c947bb1b4a2b7c7b29cad946b7366646b5a77846984947b8c947b -788c7b858c757a8c727a8c727a8c727a8c726b8966949a91000000 -0000005252734953746b89666b7b62393f41464a4818262241311d2624102e37344a3e403e525a -bd734f794e45495374495374525273a5523a8a9e9cbd734fef1800ca2a00b11700bd734f8cb0a1 -9cad9ca1c1b7bc7a65f42200ca2a00a92b0c474c294e5234415a31575a33b1b4a2a1c1b77d7765 -cb543b9ca0a36b736663635f738476a5b4a5a1c1b7bd734fe22300a92b0c101810101010415240 -646b5a5b6b515a6b5c5263527384769bb5ad587b4e5b6b51394a3a3940314152406b807562736c -4b52421818181818181821181821181818181818181821181818181818180d1618182118394031 -8c9c7b8794888c9c7b8794888c947b889e8ab7c7b2b1b4a29cad946b73665a6b5c7a8c72889e8a -8c947b84947b858c75858c757a8c727a8c72778469949a91000000 -0000005252734953749c7e3c84635f393f41464a48393f412b282127272c393f413f3365464a48 -bc7a656b5a6b494a73495374794e457d77659a9680ef1800ca2a009f1a00a5523a6b8075889e8a -a1c1b7b09f93e22300ca2a009f1a0050451e4e5234476336474c299a9680a1c1b77b8a84cb543b -b09f938aa094747678949d9e9bb5ada5b4a59dbdad9d7a66e2230077322310251b2c39295a6b5c -5b6b515a6b5c5b6b516273635a6b5c6b7b625f735a415240394a3a394a3a3940314c524d6b7b62 -627363394a3a0808081818181818181821181818182121212121182121212129211821184b5242 -8c9c7b8794888c947b8c947b8c947b84947b9cad94b7c7b2b1b4a26b73667d8476778469858c75 -889e8a8c947b84947b849473858c757a8c727a8c72949a91000000 -0000005a5273495374a64b23bc7a653e525a393f4182858c6b6b725263525c63502f4231526352 -9d7a664b5242495374794e4584635f949a91e62f10e22300a92b0cc630116b80757384769cada5 -b1b4a2e62f10ca2a00b224005b341b474a364e5234474c299d7a66b6c8c17b8a84a5523abc7a65 -7a94877476787384769cada5a5b4a59dbdad9a9680d31f00a634216b7b625f735a6b7b625f735a -5a6b5c5b6b5162736c5a63606b7b6b587b4e415240394a3a394a3a394a3a2c39292129212a3129 -4b52425c63502a31290010080811081010101010101818181818181821181826222b28212c3929 -4b52428c947b8794888c947b8c947b8c947b84947ba5ae97b6c8c1b1b4a27d84766b7366646b5a -84947b8c9c7b84947b84947b7a8c72858c757a8c72949a91000000 -0000003e525a424a6b733f73733f737679846b6b72a4a8ae6b7b622b50203ba168587b4e3ba168 -6b89666b89662b5020516b3d94ad9ccd4825ef1800b22400a92b0c84635f7a94879cada5a1c1b7 -cb543bd31f00b2240081250c3e52314e52343e5231726946b6c8c18cb0a1794e45bd734f9bb5ad -7b8a84738476878995a5b4a59bb5ad94a592c63011e62f105d6b3f5d6b3f587b4e587b4e5f735a -5f735a587b4e7d8476738476587b4e5c63504152401818181018102c39292a31292a3320182118 -3940314152403940311818180811080718100808080010080811081010100d1618182118212921 -1829185c63509ca28f889e8a8c947b889e8a8c947b8c9c7bb7c7b2b6c8c1a5ae978c947b858c75 -7a8c7284947b8c9c7b84947b849473788c7b7a8c7294a592000000 -000000214231214231463d7b4b188a5a2586a4a8aeb7bdbc4f6b5b2b50203ba1688494736b8966 -94af9494af942b50203ba168cb543bf42200b22400b2240084635f7a948794a592a1c1b7bd734f -e22300c21e0081250c474c294e52343e52315b633ab1b4a28cb0a17d7765cb543b949a91738476 -7b8a847a94879cb5a59bb5ad94ad9ca64b23e2230076612c516b3d5d6b3f5d6b3f5d6b3f5d6b3f -5d6b3f5d6b3f476336485a42395229516b3d5f735a5b6b512f4231212918212918182118212918 -627363949d9e6273634152401821181818180d1618101010101010071810081108071810101810 -2129212a33207784698c9c7b8c9c7b8794888794888494738c947bb7c7b2d4d7d59cad9494a592 -8c9c7b77846984947b8c9c7b84947b84947b7a8c7294a592000000 -0000002b423a214231463d7b5a2586733f73e62f10cb543b9d7a662b50203ba1683ba1683ba168 -3ba1686b89663ba1687d7a24f42200ca2a009f1a00bc633c7b8a84879488a1c1b7b7937be22300 -ca2a009f1a00474c293e52313e52314e5234b09f93a1c1b7738476cd4825b1b2b47a9487738476 -6b8075a5b4a5a5b4a59dbdada5523aef18007c46264f6b505d6b3f516b3d5d6b3f5d6b3f516b3d -4f6b50476336394929394929516b3d516b3d516b3d516b3d5d6b3f213218101810182118535a4c -5f735a7b8a84b1b2b47384765263522b2821212118212121212121212121182118182118181818 -2129182c3929788c7b9ca28f8c947b8c947b84947384947b8c947b8c9c7bd4d7d5b7c7b29cad94 -8c9c7b788c7b5f735a84947b8c947b84947b858c75949a91000000 -0000002b423a2f4231393f414a3e407732234a3e404a3e40415a292b502094af9494af948c9c7b -94af9494af943ba168a92b0ce223009f1a00a634218aa094a5b4a5a1c1b7b09f93e62f10ca2a00 -a92b0c50451e3949293e5231394a209d7a66b6c8c17a9487bc633cbc7a659bb5adb1b4a27b8a84 -94a592a5b4a59dbdad9d7a66d31f00a64b23516b3d5b633a516b3d5d6b3f5d6b3f516b3d587b4e -4763363e52313949294763365d6b3f5d6b3f476336474c292129181018101821184b52425f735a -646b5a5f735a889e8ab1b2b47784695c635018211818181818211821212127272c2a33202a3320 -27272c2c3929535a4c646b5a8c947b84947b84947b8c947b8c9c7b8c9c7b9cad94d4d7d5cacad1 -9cad946b7b625c63507784697a8c728c9c7b858c75949a91000000 -0000002b423a2142392142392142311742362142311742361a42241a42241a42241a42242b5020 -5d6b3f587b4ea64b23ca2a00a92b0ca92b0c9ca28f7b8a849bb5ad9bb5adcd4825d31f00b22400 -5b341b3949293e523139492984635fb7c7b28cb0a19d7a66bc633ca1c1b77384769bb5ad9bb5ad -a5b4a59bb5ad949a91ca2a00c630115b633a516b3d5d6b3f5d6b3f516b3d516b3d5d6b3f476336 -395229394929415a31516b3d516b3d52634a3e52312942180718101018104152405b6b51526352 -5a6b5c5f735a646b5a8aa094b1b2b46b7b6b495a4b101810101010182118182622182118212121 -2129212a312921292121292152635294a5928c9c7b949a919ca28f9ca28f8c9c7b9ca28fd4d7d5 -d4d7d59ca28f8c947b525f5a646b5a7d847684947b949a91000000 -0000002142392142392b423a2142392b423a2142312b423a214239214231174236314222a5523a -8aa094cb543bf42200b22400b2240084635f94ad9c9cad9c9dbdadcb543bd31f00b2240081250c -394929474c293949295b633ab1b2b49dbdad7d7765cb543ba1c1b79bb5ad9cada57384769cada5 -9cb5a594ad9ca63421e223005b633a5d6b3f5d6b3f516b3d516b3d516b3d5d6b3f4763363e5231 -394a3a395229415a31415a313e52313e52313142220811081018103940315b6b5152635252634a -5c63505a6b5c5f735a5f735a889e8a8cb0a16b7b6b4c524d071810080808080808101010101010 -1018101818182b28212a31292a3320646b5a9ca28f889e8a9ca28f889e8a8c9c7b8c9c7b9ca28f -b7c7b2d4d7d59cad947784697d84766b7b626b8966949a91000000 -0000002142392142392142312142392142312142392142312142312142312142317c4626879488 -bd734fef1800b224009f1a00bc633c52636b94a592a1c1b7bc7a65d31f00c21e0081250c394929 -394929394929474c29b09f939dbdad6b7b6bcd4825b1b4a287948862736ca5b4a59cad9c949d9e -9dbdada5523ae223007c4626516b3d5b633a516b3d5d6b3f516b3d5d6b3f516b3d415a31394929 -395229415a31415a313e52313e5231394a201018100811082a31295c635052634a52634a52634a -52635252634a5a6b5c646b5a646b5a788c7b8794886b7b6b4c524d081108080808080808080808 -0808080811081010101821182a33202a33208c947b889e8a8c9c7b8c9c7b9ca28f9ca28f9ca28f -9cad94b7c7b2d4d7d5a5ae97858c755c6350646b5a949a91000000 -0000002b423a2f42312142392142312142392142312142312142311742367c46267d84769d7a66 -e22300ca2a009f1a00a5523a788c7b7a9487a1c1b7b7937bd31f00ca2a009f1a00474c29394929 -394929394a209a9680a1c1b7879488a64b23b7937b94b3a563635f62736c94ad9ca5b4a59dbdad -9d7a66d31f00a64b2348634d5b633a516b3d516b3d516b3d516b3d516b3d476336395229394929 -415a31415a31415a313952293e52311821180808082129215c635052634a52634a5c635048634d -7c4626e62f107269464f6b5b6273634c524d394a3a7384766b7b6b535a4c181818080808080808 -0010080811080d16182129181018105c63509ca28f8c9c7b9ca28f94a5929ca28f9cad94a5ae97 -9cad949cad94b7c7b2d4d7d5b1b4a28c947b7a8c72738476000000 -0000002b423a2142312b423a2142392142392142312e37341742364a3e409d7a66889e8ae62f10 -e223009f1a00c630117476787b8a849dbdada5ae97c63011d31f009f1a005b341b314222394929 -3142227d7765b6c8c17a9487a5523abc7a6594b3a562736c646b63889e8a9cada59cb5a58c947b -d31f00c63011476336516b3d516b3d5d6b3f516b3d516b3d5d6b3f485a423e5231394929415a31 -415a313e52313e52313e523121321808080818211852634a52634a52634a52634a48634d794e45 -cb543bef1800d31f00a63421794e452a31292121182c39296b7b6b6b7b6b525f5a101810080808 -0811081010102121182121182a33204b52424b5242394a3a778469a5ae97a5ae97a5ae97a5ae97 -9cad949ca28f9cad94b7c7b2d4d7d5b7c7b28c947b949a91000000 -000000214239214239214239214231214231214231174236394031a5523a8cb0a1cd4825f42200 -a92b0ca92b0c9d7a666b80759cb5a5a5b4a5cd4825d31f00b11700773223314222394a20314222 -794e45a5b4a56b8075726946bc633c9bb5ad6b80756b7b6b949d9ea5b4a59cada594a592c63011 -d31f005b633a516b3d5b633a516b3d516b3d52634a516b3d4763363952293949293e5231415a31 -415a313e5231415a293142220808081018104b524252634a555a42535a4c52634a555a42cb543b -b6c8c1bc7a65d31f00f42200e223004c1b0d1818182516182b28216273636b7b6b5c6350212921 -1821182129211821182121182129212129212c39292c39292942216b7b6ba5ae979cad94a5ae97 -9cad94a5ae979cad949cad94b1b4a2b7c7b2b1b4a2a5b4a5000000 -0000002142312b423a2142312142312142312142392c3929a5523a8cb0a1bc633cef1800b22400 -9f1a009d7a666b737a767984878995733f73c63011a92b0c81250c3142223949292b5020575a33 -b09f937a9487949d9ea63421b1b4a287948862736c889e8a9cada59cad9c8cb0a1a5523ad31f00 -7c4626516b3d516b3d516b3d516b3d516b3d516b3d4763363e5231394929395229415a31415a31 -3952293e5231394929081108081108415240535a4c485a42555a42535a4c485a42a64b23b1b4a2 -9bb5ada1c1b7bc7a65c21e00e22300e62f105311001a16101a16102b28215a6b5c6b7b6b5c6350 -2a33201826222b28212129212121182129212a33202c39292e37342a33206b7b6ba5ae979cad94 -a5ae979cad949cad94a5ae97858c75849473a5b4a5b7c7b2000000 -0000002b423a2142392142392f42312142311742365b341b949a919d7a66f42200ca2a009f1a00 -a5523a686b7d4b188a4b188a4b188a4b188a4b188a4b188a3f3365393f412b5020474c299a9680 -a1c1b77b8a84bc633cb7937b8cb0a1525f5a646b639cada59cad9c94b3a59d7a66d31f00a64b23 -4763365b633a516b3d516b3d516b3d516b3d516b3d3e52313e5231395229415a313e52313e5231 -3e52313949291021100000002e373452634a555a42555a42535a4c48634da64b23b7937ba1c1b7 -a5b4a594a5929dbdadbc7a65d31f00f42200c630111010102121181008102e37346380666b7b6b -5a6b5c27272c0d16182129181826221821181818182129182129211821185b6b519cad949cad94 -9cad94a5ae97a5ae978c9c7b7a8c727a8c72849473a5b4a5000000 -0000002f42312142312142311742362142392e37346b8075949a91e22300e223009f1a00a63421 -7d84763f33654b188a4b188a4b188a4b188a1906351906351906351906353f336584635f9cada5 -94b3a5bc7a65bd734f8cb0a16b807562736c7a9487a5b4a58cb0a1858c75d31f00c63011476336 -52634a5d6b3f516b3d516b3d516b3d516b3d3e52314763363e52313e52313e52313e5231395229 -395229182918000805101810485a42555a42495a4b535a4c48634d7c4626bc7a65b6c8c1a5b4a5 -9cada5738476879488a1c1b7b7937bd31f00d31f004c1b0d101010251618394031627363627363 -6b7b6b5a6b5c2a3129071810101010181818101810181818101810394031778469889e8a8c947b -9cad94a5b4a5889e8a7a8c72858c757a8c727a8c72949a91000000 -0000006273634f6b5b495a4b4152402b423a4f6b5b949a91cd4825ef1800a92b0ca92b0c7d7765 -494a735a25865a2586767984733f733f33651906351906351906351906351906354b188a767984 -84635fbd734f7b8a8462736c525f5a7b8a84a5b4a594ad9c949a91c63011ca2a00555a42516b3d -516b3d516b3d516b3d516b3d516b3d415a313e52313e52313952293e52313e5231395229395229 -2a33200008050811082c392952634a495a4b555a4248634d575a33cb543bb6c8c1a5b4a57a9487 -646b637476785a6b5ca5b4a59dbdadb7937bef180081250c060f102b2821294221535a4c627363 -6273636273635f735a2a31290811081010101818181010102c39295f735a778469858c752a3320 -41524084947b84947b858c757a8c72858c75858c75949d9e000000 -0000007a94877a9487788c7b7384766b7b6b6b80756b7b62a5523a7c4626a92b0c84635f5a636b -5a2586463d7b4f6b5b6b7b6b7d7765646b63393f41190635100810190635190635190635190635 -cb543ba5b4a58aa094646b6394a5929cad9c9cad9c8cb0a1a64b23d31f0076612c476336476336 -516b3d516b3d516b3d52634a485a423952293e52313e52313e52313952293952293e5231314222 -081108080808182110415240485a42555a42495a4b4b5242cb543bb1b2b49cb5a56b8075646b63 -6b8075879488788c7b949d9ea1c1b7cd482581250c0010082121182a33202f42315263525b6b51 -5f735a5f735a627363627363394a3a1018101010102129185b6b515f735a5f735a3940312a3129 -2129212132185f735a7a8c727a8c72858c7584947b9cad9c000000 -000000a1c1b7b1b2b49dbdad9cad9c949d9e7a94877b8a846b80756b80756b89666b7b6b5a6b5c -5b5a73495a4b5b6b516273636b73666b73666b7b6b415240190635190635190635190635a63421 -9a96806b8075a5b4a58aa094949d9e9cad9c8cb0a19c7e3cd31f007c4626516b3d516b3d516b3d -4763364763364763364763363949293e5231395229395229395229395229394929394929071810 -001008101810213121485a42485a42485a42485a42a63421b1b4a2a1c1b77384768aa0949cada5 -5a636094a5929bb5ad9dbdadcb543bb117000800081818182a33202c392952634a52634a495a4b -52634a5a6b5c627363627363627363495a4b182118555a426b7b625c63502a31292a31292a3129 -2c392921291839403184947b84947384947b889e8aa5b4a5000000 -0000006273636b80757a94878aa0949cb5a59dbdad9dbdada5b4a59cad9c8aa0947a9487788c7b -7384767384766b80756b7b6b6b73666b73666b7b6b6b7b62858c7574767819063581250cbc7a65 -94b3a562736c6b7b6b9cb5a594ad9c94ad9c9d7a66c21e00a63421516b3d575a33476336516b3d -476336516b3d476336395229415a313e52313e52313e5231395229394929395229102110000805 -101810182110394031485a424b5242495a4b7c4626b7937ba1c1b7b1b2b4889e8a6b80757a9487 -646b63a5b4a5a1c1b7bc7a65c21e001810070808082a33202c3929535a4c52634a495a4b4b5242 -495a4b48634d4f6b505f735a627363627363526352394a3a4b52422a33202129212131212a3129 -2b28212c39295f735a6b7b626b8966858c75a5b4a5a5b4a5000000 -0000002e37342c39292f4231394a3a495a4b4f6b5b6b7b6b788c7b889e8a94ad9c9cad9c9cad9c -949d9e94a592889e8a7b8a84889e8a788c7b6273636b7b6b7384768aa09484635fa5523aa1c1b7 -62736c6273637a94879cad9c94ad9c879488c63011c63011575a33476336476336476336476336 -4763364763363952293e52313952293952293e5231395229394a3a395229182918001008101010 -1821181829184b5242485a42495a4b7c4626bc7a65b1b2b4a5b4a594a5929bb5ad879488738476 -a5b4a5a1c1b79a9680e223004c1b0d0000082b28212c3929485a4252634a535a4c485a42415240 -4b5242485a42485a425263525a6b5c6273636273635b6b512e373418211821292127272c213121 -2129215c63505f735a6b7b623940312c3929849473a5b4a5000000 -000000274a3721423921423921372e1826221531212a3129394a3a394a3a41524048634d4f6b5b -6b89667384767a9487949d9e9cb5a57a94877b8a847384766b7b6b6b7b6bbd734fa5ae97738476 -62736c6b7b6b9cad9c949d9e8aa094a64b23d31f005b633a516b3d52634a516b3d516b3d516b3d -516b3d3e52313e52313e5231394929395229394929394929395229294221001008080808182918 -1821102f4231535a4c495a4b4e5234cb543ba1c1b7a5b4a59dbdad6b7b6b879488a1c1b7a5b4a5 -a1c1b7a5b4a5e62f105311000000081821182129212f423152635248634d495a4b4b52424b5242 -415240415240485a42495a4b4b52422a31295263526380665f735a415240212921182622182118 -4b52426b7b625f735a555a421818182a31292a3320738476000000 -00000021423921423921423917372b071810071810526352949d9e889e8a7b8a84794e455b341b -394031394031394a3a4f6b5b62736341524052634a5a63606b7b6b5f735a788c7b9cad9c5a6360 -5c63509cada594a5928cb0a184635fe223007c4626516b3d516b3d516b3d476336476336476336 -415a31394a3a3e52313949293e52313949293952293952292b5020081108001008102110182118 -182118415240485a42415240a64b23b1b2b4a5b4a5a5b4a57384766b7b6b738476a5b4a59bb5ad -a1c1b7cb543b9f1a000000001a16102129211829181821102f4231485a424b5242415240415240 -4152407c4626794e45274a371821181a16102121184c524d627363627363495a4b212921394031 -6b89665f735a5b6b511818181018102c39292a31296b8075000000 -000000214239214239274a372b423a153121415240949d9e94ad9c9dbdadb7937bca2a00ca2a00 -9f1a0039492921321821372e485a42485a42393f414b188a463d7b6c6373626b7394ad9c6b8075 -7a948794ad9c8cb0a19d7a66d31f00a92b0c393f4147633647633647633648634d516b3d476336 -395229485a423e52313e52313e5231395229394929394929101810001008101810212118102108 -2a3320535a4c415240a63421b09f93a5b4a594a592738476646b6362736c94a592a5b4a5a1c1b7 -bd734fb11700000008101010212918212918212918212921213121415240415240415240415240 -4e5234c21e00c21e0081250c7d15000d16181a1610181818415240627363627363526352394a3a -555a426b7b622121180718101018102a3129213121747678000000 -0000002b423a2142392b423a214231394a3a889e8a94af9494ad9c9ca0a3c63011ca2a009f1a00 -50451e394929394929213218394a3a394a3a3f3365463d7b463d7b4b188a4b188a767984889e8a -949d9e8aa0948c947ba92b0cc21e001906351906353f3365476336476336476336516b3d3e5231 -3e52313952293e5231395229395229394929395229182910000805071810182110182110182118 -415240495a4b7c4626bc7a65a1c1b7a5b4a5889e8a646b635a6b5c7b8a849cada5a1c1b7b7937b -d31f001810070808082129182129182129182129211829182a33204152404b52424152404e5234 -a634219d7a66b22400e22300f4220081250c1a16101a16101a16102e37345a6b5c6273635a6b5c -394a3a2b282107181018181810181021372e2a33206b8075000000 -0000002142312142392142392142317c462694a59294ad9c9cb5a5cb543bd31f00b224005b341b -214231394929294221646b5a6b7b6b3f3365463d7b463d7b463d7b5a25864b188a4b188a82858c -8cb0a1889e8aa63421d31f0027272c1906351008101906354c524d516b3d516b3d415a31395229 -3e52313952293952293952293949293e5231294221000008081108182110182118182110212921 -41524050451ebd734fa1c1b7a5b4a594af9462736c7a948762736ca5b4a59dbdadb09f93e62f10 -5311000000002121182131212129182129182129211829182a31294b5242415240415240a63421 -9d7a668cb0a1949a91c63011ca2a00f42200b117002d2718212118251618485a425f735a5a6b5c -5f735a415240182118071810101810212921212921747678000000 -0000002142392142392b423a1742367c4626b7937b9dbdadbd734fd31f00b2240081250c394929 -3e5231395229575a33b09f93788c7b767984463d7b463d7b463d7b463d7b463d7b4b188a4b188a -65637f84635fb117007c4626190635100810060f101906353f3365516b3d415a313e52313e5231 -3949293952293952293949293e52313142220010080008051821101821181821101018102f4231 -474a36cb543ba5b4a5a5b4a5a5b4a57384766b8075788c7b94a5929bb5ada5b4a5cd48257d1500 -0000001818182129182129182129182129182129181829182a332041524041524081250c9d7a66 -8cb0a194a5928cb0a1949a91a64b23c21e00f4220081250c060f10394a3a5a6b5c4f6b505b6b51 -5a6b5c5f735a535a4c213121071810212921182918747678000000 -000000274a37214239274a371742364c1b0dbc7a659a9680d31f00b2240081250c2f4231153121 -21372e3949299a96809bb5ad62736ca5523a9d7a66463d7b463d7b463d7b463d7b463d7b5a2586 -4b188a4b188a7732233e525a3949290000081008101906354b188a4a525a3952293e5231394929 -3952293952293e52313949292b5020071810000805101810182118182110182110182918394a3a -a64b23b09f939bb5ada5b4a5788c7b6b80756b80759cad9c9bb5ad9dbdadcb543b9f1a00000000 -1010102129182129182129181829182129182129182129182b28212b543e773223bc633c8cb0a1 -949d9e9cad9c949d9e9cad9c9cada5bc633cc21e00c21e005b341b495a4b48634d52634a526352 -5b6b515b6b515a6b5c4f6b502e3734182118182118738476000000 -000000214239214239214239214231181818c63011e62f10ca2a00a92b0c2a332017372b174236 -1010107d7765a5b4a59dbdad9a9680a5523aa1c1b76b737a463d7b463d7b463d7b463d7b463d7b -463d7b5a25864b188a4b188a5a25863f33654b188a4b188a4b188a3f3365395229394929395229 -3952293949293952293e523118211000000010181018211818211018211818211021372e7c4626 -b7937b9dbdad9cada5889e8a62736c788c7b879488a5b4a59dbdadbc7a65c21e00080008080808 -21291818291821291821291821291818291818291821291818262241311da64b23949d9e94ad9c -94ad9c94ad9c9cad9c9cad9c94ad9c94b3a59d7a66c6301181250c2b543e535a4c48634d495a4b -485a4252634a5a6b5c5a6b5c5b6b51394a3a10251b7b8a84000000 -0000002142392142392142392b423a10251b4c1b0da92b0c81250c2d2718072219182622071810 -794e45a5b4a59dbdad9ca28fa5523a9cada5738476495a4b6b7b6b686b7d463d7b463d7b463d7b -463d7b5a2586463d7b5a25864b188a4b188a4b188a4b188a4b188a2b50203949293e5231395229 -3949292b50203952292129180008050811081821181821101821101821100722195b341bbc7a65 -a1c1b79cad9c889e8a5a6b5c6273637b8a849cad9c9dbdadb7937bd31f00251618000000212118 -2129182129182129212129181829182129182129181826222d2718a92b0c9ca28f94ad9c9cad9c -9cad9c9cad9c9cada594ad9c9cad9c8cb0a1b09f93a634211531212a3320394031495a4b394a3a -394a3a415240495a4b4f6b504f6b5b5a6b5c4152407b8a84000000 -000000214231214231214239274a3717372b0722190722190722190722190d1618060f104a3e40 -a5ae979cb5a59cb5a5bc633c9a96807a9487646b636b80758aa09494af9482858c733f735a2586 -463d7b5a2586463d7b463d7b4b188a1906354b188a3f33652a3320394a202b5020394a20314222 -3142222b50202a332000100800100818211010251b18211018181810251b2d2718cb543ba1c1b7 -94a592646b636b80755a6b5c6b7b6ba5b4a59dbdad9ca28fe62f10531100000000181818212918 -2129181829181829181829181821181829182129211829189f1a00b7937b8cb0a19cad9c5a6b5c -8aa09494ad9c8aa0949cad9c8cb0a19ca28fa634212a33202131212131212131212f42312f4231 -394a3a394a3a394a3a41524048634d587b4e4f6b5b949a91000000 -00000021423121423121423921423121423110251b1018100d1618072219060f102d27189ca28f -9cb5a5a1c1b7794e459d7a668cb0a1525f5a6273638aa094889e8a8a9e9c7d7765d31f007c4626 -495374463d7b5a25864b188a3f33654b188a4b188a2b28212b50202f4231314222294218294221 -2942182942210811080008051018101021101018101821101021101a1610a63421a5b4a59cb5a5 -646b63788c7b5a63606b7b6b949d9e9cb5a59bb5adcd48257d1500000000182108212918182918 -21291821291821291821291818291821291810251b81250cbc7a658cb0a19cada5889e8a627363 -62736c73847694ad9c9cada59cb5a5bc633c41311d2131212a33202129212c39292131212c3929 -2f42312f4231394031394a3a394a3a2a3129485a42949a91000000 -0000002142392142392142312142392142312142311531211531210722191818188c947b9bb5ad -9dbdad858c755b341b788c7b4152402c392948634d7a94878aa0947d8476c21e00c63011415a29 -415a29476336485a42393f41393f413f336527272c2b5020314222294218294221314222294221 -314222101810000805101810182110102110182110182110071810a63421b09f9394b3a59cb5a5 -889e8a4c524d94ad9c949d9ea5b4a59dbdadcb543b9f1a00000008101010212918182918212918 -182918212918182918182918212918153121531100bc633c8cb0a19cad9c94a5925263527b8a84 -738476949d9e94ad9c94b3a5bd734f4c1b0d1531212a33202131212a31292c39292129182e3734 -2f42312f42312f4231394a3a2129211a161018181882858c000000 -00000021423921423121423921423921423121423921423121423917372b7d7765a5b4a59cb5a5 -94a59277322348634d485a4221372e394a3a5263525f735a889e8aa63421ca2a00575a33415a31 -476336476336476336415a29415a31394a202b5020314222294221314222294221294221314222 -18211000080508110818211010181018211818211008211081250cb7937b9dbdad889e8a738476 -9dbdad889e8a7b8a849cb5a59dbdadbc7a65b11700080500080808212918182918212918212921 -21291821291821291821292115312141311dcd48258cb0a19cada59dbdad62736c738476788c7b -94ad9c94ad9c94b3a5bc7a6581250c17372b2a33202131212131212a33202131212c39292f4231 -3940312f42312b423a2b28211010100d16181018107b8a84000000 -000000214231274a372142392f423121423921423921423117372b794e459cb5a594b3a59cb5a5 -7c46264b52424152402c3929394a3a48634d4f6b504f6b507c4626d31f0076612c415a31415a29 -415a29415a29476336415a313949292b5020394929314222294218294221294218294221213218 -00100800100818211018211810251b1818180722194c1b0dbc7a659dbdad8aa0949cb5a57b8a84 -7384769dbdada5b4a59dbdadb7937bd31f00181007080500182118212918212918182918212918 -2129181829182129181829182b2821a92b0c949a919dbdad6b736662736c7384766b7b6b8aa094 -9cad9c94b3a59a9680a634211531212131212131212a33202131212131212c39292f42312f4231 -2f42312f42313940319f1a0081250c81250c2d271882858c000000 -000000274a37214231274a3721423921423121423121423121372ea64b239cad9c9dbdad794e45 -555a42394a3a2a31292f423148634d4f6b504f6b50474c29c21e007c4626476336415a31415a31 -415a29415a314763363952293142222b5020314222294221314222294221314222213921001008 -001008101810102110102110181818082110251618bc633c9bb5ad94ad9c646b636b8075a1c1b7 -7b8a84788c7b9bb5ad9cad94e62f10531100000008181818212918182918212918182918182918 -212918212918212918182622a92b0cb7937b94b3a59cb5a5879488495a4b5a6b5c788c7b9cad9c -94b3a5a5ae97a634212d271821312121292121321821372e2131212c39292f42312f42312f4231 -2f42312c392981250ca5523ac63011ca2a00ca2a009a9680000000 -0000002142392142392142312142312b543e2b423a21423117423681250cbc7a65858c755b341b -4f6b504f6b50394a3a4f6b504f6b504f6b504b52429f1a00c63011476336485a42476336415a31 -415a31415a29415a293142222b5020314222294221314222294221294218294221101010000805 -071810102110182110101810102110101810a63421a5b4a594b3a594a592627363627363889e8a -9dbdad949d9e9cb5a5cd48257d1500000008101010212918182918182918212918182918212918 -21292121312115312181250cbc7a658cb0a1889e8a9cb5a59dbdad646b5a8aa0949bb5ad9cada5 -9cb5a5a64b2341311d1531212a33202131212131212129182a31292f42312b423a3940312f4231 -2f42317d150084635f8cb0a1879488a64b23ca2a00b7937b000000 -0000002142392142392142392142312b543e214239214231174236213121a634217732234f6b50 -2e3734485a424f6b5048634d4f6b5048634d81250cc63011575a33415a31476336415a31415a31 -415a29415a292b50202b5020314222294218314222294221314222314222102110000805071810 -10211010181010211018211807181081250cb09f9394b3a59cad9c788c7b6273636b7b6b889e8a -9cada59dbdadbc633c9f1a00000008080808182918182910182918182918182918212918182918 -2129181531214c1b0dbc633c94b3a59cb5a5889e8a6b80759cb5a59cad9c8aa0949cad9c94b3a5 -bd734f5b341b1531212a33202131212131212129212131212f42312f42312f42312f42312b423a -4c1b0da5523a8aa0948aa09494ad9c949d9ea5523ab09f93000000 -000000274a37274a37274a372142312142312142312142391742360722194c1b0d5c6350485a42 -394a3a2b423a4f6b505263524f6b505b341bca2a0076612c415a31415a31415a31415a29415a29 -415a312b5020314222314222294221314222294221294221294221213218001008001008101810 -101810102110182110072219531100b7937b94b3a59cad9c94a5925a63605a6b5c8794889cb5a5 -94b3a5bc7a65ca2a001008100808081821101829182129181829182129182129182129182b2821 -1531212d2718cd48259cada594b3a594ad9c9cada594a5926b80758aa0949cb5a594b3a5bc7a65 -81250c1531212131212a31292131212131212129212e37342f42312f42312f42312f423141311d -a634218aa0948aa09494a592949d9e8cb0a19bb5ada4a8ae000000 -000000214239274a3721423921423921423921423121423917423681250c794e4548634d2c3929 -2c39294f6b505263524f6b5050451eb117007c4626415a31415a31476336415a29415a31476336 -3952292942212b5020314222294221294221294221294221213921001008001008101810102110 -0d16181821100722194c1b0dbd734f9dbdad94ad9c6b8075638066646b636b8075949d9e9dbdad -9a9680e22300181007080500181818182918182918182918212918182918212918212918153121 -2b2821c630119ca28f9bb5ada5b4a5889e8a6b80759dbdad949d9e788c7b94b3a59a9680a63421 -1531212131212a33202a31292129212129212131212131212c39293940312f42312c3929a92b0c -8794888a9e9c94a59294ad9c94ad9c94af9494ad9ca4a8ae000000 -000000274a37214239274a372142312142392f42311742365b341ba5523a4f6b5b2f4231415240 -495a4b4f6b504f6b504b52429f1a00a63421476336415a31476336415a31415a314763363e5231 -2b50202f4231314222294221314222294221294221294218081108001008101810101810102110 -18211010251b1a1610a5523a9bb5ad94a5926b807562736373847687948894ad9c9cb5a59cad9c -e62f10531100080500101810182910182110182918212918182918212918182918212918153121 -a92b0cb7937b94b3a5788c7b6b8075788c7b495a4b7a94879dbdad9cb5a59cad9ca64b232d2718 -21372e2a33202a31292a31292131212131212131212129212131212c39292e37347d15009d7a66 -8cb0a194a59294ad9c94ad9c94ad9c949d9e9cb5a5b1b2b4000000 -000000274a37274a37274a37274a372b423a174236394031a5523a788c7b48634d2f4231415240 -4f6b504f6b50495a4b7d1500c63011415a29415a29415a31415a31415a31415a31415a292b5020 -314222314222314222294218294221294218294221101810000805101810102110101810182118 -182118071810a63421b09f9394b3a562736c6b7b6b62736c62736c8aa09494ad9c94b3a5cb543b -7d150000000010101018291818211818211021291818291818291818291821291815312181250c -bd734f9bb5ad7b8a8462736c62736362736c889e8a62736c9cb5a594b3a5bc633c4c1b0d17372b -2a332021372e2c39292131212129212131212129212131212a33201531217d15009d7a668cb0a1 -94a59294ad9c949d9e94ad9c94ad9c94ad9c9cb5a5a4a8ae000000 -0000002b543e2b543e2b543e274a37274a37274a37a92b0c9a96804f6b5b495a4b48634d526352 -48634d48634d5b341bca2a00575a33415a29415a31415a31415a31415a31415a292b5020314222 -314222294221294218294221294221314222182910000805081108102110181818102110182110 -08211081250cb7937b8cb0a194ad9c788c7b62736c6b7b6b7b8a849cb5a594b3a5bd734fb11700 -0000000808081821181829181821101829182129181829182129182129181531214c1b0dcb543b -94b3a59cb5a59cad9c5a6360788c7b6b807594a5929cad9c94b3a5bd734f4c1b0d17372b213121 -2131212131212a312921372e21292121312121292121312117372b4c1b0da5523a8a9e9c94a592 -94ad9c94ad9c94ad9c94ad9c94ad9c94ad9c9cb5a5a4a8ae000000 -000000274a372b543e2b543e2b543e2b543e773223ca2a00a5523a6b80754152404f6b50526352 -4f6b5050451eb117007c4626415a294763363e5231415a31415a31415a292b5020314222314222 -294221294218294218294221294221213218001008001008101810182110101810181818082110 -4c1b0dbc7a6594b3a594ad9c889e8a9cada58794886b80759cad9c94b3a5bc7a65c21e00181007 -0000081821101821101821181829181821181829182129182129181826222d2718cd48259cad9c -9cb5a5788c7b889e8a9dbdad62736c788c7b9bb5ad94b3a5b7937b81250c1531212b2821213121 -21312121312121312121292121312121312121312117372b4c1b0da6342194ad9c9cb5a594a592 -94ad9c94ad9c94ad9c94ad9c94ad9c94b3a5bc7a65b7937b000000 -000000274a37274a372b543e2b543e50451eca2a00a92b0cb224009d7a6663806648634d4f6b50 -474a369f1a00a63421476336415a31415a29415a31415a29476336395229314222314222294221 -314222294221294221294221294218080808000805101810102110101810182110072219262410 -bc633c9bb5ad94ad9c8794885a6b5c6b80759cad9c9cb5a594b3a59ca28fc63011531100000000 -101810182118182110182918182118212918212918212918182918182918a92b0cb09f9394b3a5 -a5b4a57384765a63607a94879dbdada5b4a594b3a59a9680a92b0c182918213121213121212921 -2131212a31292131212129182129212129212131212d2718a92b0c9ca28f788c7b6273639cb5a5 -94ad9c94ad9c94ad9c94ad9c8cb0a19a9680a634217b8a84000000 -000000274a37274a372b543e2b543e773223b22400a92b0cb22400b224005b633a4f6b50485a42 -81250cc63011415a29476336415a29476336415a29415a313e52312b5020294221314222294218 -29421829421829421829422107181000080508110810211010181010211010251b1a1610a63421 -9cad9c8aa0947a94876273636b80757a94878aa0949cb5a594ad9ccd4825531100000000101010 -18291818211018291818211018291821291821292121291810251b81250cbc7a6594b3a5a5b4a5 -94a59262736c7b8a84646b639cb5a594b3a59cad9ca64b232d27181531212a332021372e213121 -2129212a312921292121312121292121312118262281250c9d7a6694b3a56b8075525f5a62736c -8aa09494ad9c94ad9c94ad9c9ca28fa64b23294221878995000000 -000000274a372b423a2f42312b543e2b543e81250cb22400b22400b2240081250c4b52425b341b -c21e0050451e174236274a372b50203e5231415a29415a312b5020294221294221294221294221 -29421829421829422110210800080508110810181010181010211018181807181081250cb09f93 -9bb5ad788c7b4152406b80755a6b5c94a5929cb5a594b3a5cb543b9f1a00000000080808182110 -18211818211018211818211018291818291826241010251b7d1500bd734f94b3a59cad9c94ad9c -7384766b7b6b788c7b94ad9c9cada594b3a5bc633c4c1b0d182622212921213121213218213121 -2a31292131212131212129212132181826227d15009d7a6694b3a57384765a6b5c6b8075738476 -8aa09494ad9c94ad9c8cb0a1a64b2341311d21372e879488000000 -0000002b543e2b543e274a37274a37214239415240a92b0ca92b0ca92b0c81250c531100c21e00 -5b341b17423621372e17372b17372b17372b17372b1a422410251b0d1618153121213218294218 -294218294218212918000805080808101810102110101810182110082110531100b7937b8cb0a1 -7384767a948762736c5a63607a94879cad9c94b3a5bd734fb11700000008000805182110102110 -1821101821181821181829181829102129181531214c1b0dcb543b8cb0a19cada5a5b4a5627363 -7b8a845a6b5c9cb5a59cada594b3a5bd734f4c1b0d182622212918212918212918212918212918 -21312121372e2a3320213121153121531100a5523a94ad9c8aa09462736362736c7a948794ad9c -94ad9c94ad9c94b3a5bc633c5b341b17372b2c3929879488000000 -000000274a372142311742362142391531210718102624109f1a00a92b0c7d1500a92b0c81250c -07221910211010251b21372e17372b17372b17372b17372b10251b060f10001008081108060f10 -1021102a33200010080010081018101018101021101818180821104c1b0dbd734f8cb0a19cad9c -6273634152405a6b5c6b80759cad9c94b3a5b7937bca2a00181007000000181818182110182118 -1821101821101821101829182129181826222d2718a634219ca28f9cada59cada57384765a6b5c -889e8a9bb5ad9cad9c94b3a5b7937b81250c182918212918182918182918212918182918212921 -1531212129182a33201531212d2718a634219cad9c94ad9c7b8a846b80755a6b5c8aa0949cad9c -94a5928cb0a1bc7a657732231531212a33202c3929878995000000 -000000153121464a485a52611818180d16184c524d4a525a21211881250cb22400b22400182118 -0722190811080d16182f4231394a3a21423117372b17372b17372b072219071810080808001008 -0808080718100808081018101018101018101018101021101010107c46269cada5879488738476 -9cada56b807562736c94a59294b3a59ca28fc63011531100000000101010182110182110182110 -182110182110182118182118212918182918a92b0c9a968094b3a59bb5ad788c7b738476738476 -7b8a849cad9c9cb5a5b09f93a92b0c182918182918212918182918212918212921212921213121 -2129212131212131212d2718a92b0c949a9194ad9c7384765a6b5c5a6b5c7384769cb5a594af94 -8cb0a19a968081250c2139212131212a31292c3929879488000000 -000000153121a4a8ae82858c8794882e3734a4a8ae7d847682858c4c1b0da92b0c2d2718072219 -10251b10251b3f33653f33653142223940312e373418262215312117372b071810081108081108 -0718100811081010101021101018101818181021101018104c1b0d7d847694ad9c8aa0946b8075 -7384769cad9c94a5929cada594ad9ccd48257d150000000010101018211018211010251b182110 -1821181821101821102129181531217d1500bc7a6594b3a59cad9c889e8a646b63646b6362736c -9cada59cada59cad9ca64b23262410153121212918182918212921182918212918212918213121 -21292121312118262281250c9d7a669dbdad7384766b807562736c8794889cb5a594ad9c94ad9c -9ca28fa634212a33202131212131212131212c3929878995000000 -0000001531219ca0a34a525a949a91393f41878995393f41949a9100100818262208211010251b -07221910251b27272c3f336510081018291821291818211807181008211010251b060f10071810 -0808080808081018101018101018101018101021104c1b0d555a4273847694a5927b8a8494ad9c -7384767384769cad9c94b3a5bc633c9f1a00000000080808182110182118182110182110182110 -182110182118262410072219531100bd734f8cb0a19cad9c9cb5a5646b638794886b7b6b738476 -949d9e9cb5a5bc633c4c1b0d182918212918212918212918212918212921212918212918213121 -2131211531217d1500bd734f9bb5ad7a94875a63605a6b5c6b7b6b94ad9c94ad9c94ad9c94ad9c -a64b2341311d1531212a33202131212129182c3929879488000000 -0000001826229ca0a34a525a949a912e3734949a914a525a8794880010081531210d1618072219 -0722190722190d1618190635190635190635182622182110182918071810060f10071810071810 -0010080808080010081018101018100718102624107c462648634d788c7b7384765263526b8075 -9cad9c7a94878cb0a1bc7a65b11700080500080500182118182118212918212921182118182118 -1821181821100722194c1b0dcd48258cb0a19bb5ad4f6b5b6b7b6b6b8075525f5a7b8a84a5b4a5 -94b3a5bd734f5311001531212b282121292121291818291821291810251b10251b1829182a3320 -17372b4c1b0dbc633c94b3a58794884c524d7384766b80759cad9c94ad9c949d9e8cb0a1bc633c -5b341b1531212a33202131212131212131212c3929878995000000 -000000072219a4a8ae747678879488393f41949a91464a48878995072219182622072219212918 -a5523aa5523a2a33200718100d1618190635733f73190635071810071810001008001008001008 -0811080010085b341bbc633c5b341b1a16105b341b4f6b5b5b633a9d7a66525f5a6b7b6b7b8a84 -889e8a9ca28fb7937bb11700181007000000101010102110102110101810102110182110182110 -2b28217c4626a64b23a6342194a592949a91bd734fbd734f72694662736c7a9487889e8a94b3a5 -b7937b7d15003949297c462607221921291810251b2129181829187c4626a5523a41311d153121 -4c1b0da92b0cb7937b9cb5a54f6b5b7384766b807594b3a594ad9c94ad9c8cb0a1bc7a655b341b -1826222132182131212131212131212a332018211882858c000000 -000000072219b1b2b4b6c8c182858cb1b2b48794884a525a87948807181018262207221941311d -a5523aa5523a7c46267c46267c462650451ec0852f41311d5b341b7c46262d27187c46267c4626 -001008181818bc633c2624101a1610a634217269467269467c46269c7e3c7269469d7a669d7a66 -9d7a66c0852fcd4825a64b237732232d271876612c5b341b50451e7c46267c462610251b102110 -41311dbc633cbc633c9a96809cb5a56b80759c7e3cbd734f646b5ab7937bb7937b9ca28f9ca28f -a6342150451ebc633c7c462650451e41311d50451e1829182b2821bc633c7c4626a5523a41311d -bc633c84635fbc633c858c759d7a6684635f9ca28fbc7a659cad949a9680b7937b81250c213121 -213121213121213218213121213121101810071810949a91000000 -00000010251b9ca0a37b8a84b7bdbcd4d7d57476784a525a8794880010081826220722192b2821 -c0852f7c46267c4626bc633ca5523a5b341ba64b2341311dbc633ca5523a7c4626a5523a262410 -060f10262410a5523a41311dbc633ca5523a727442a5523a76612c84635f794e459d7a66bd734f -7d7765cd48255311005b341b7c4626262410a5523a7c4626a64b237c4626a5523a212918102110 -41311dbc633cbd734fb7937b9cada58aa094794e45b7937b9d7a66bd734f9d7a66bc633cbc633c -7c4626a64b237c46267c4626a64b237c46267c46261021102d2718bc633ca5523a76612cbc633c -bc633c9d7a669c7e3c464a48bc633c9d7a66bd734fbc633cbd734fbd734fa64b232132182a3320 -2131212131212131212a3320182118000000101810878995000000 -0000001826229ca0a3626b6b82858c4a525a82858c464a4887899500080510251b07181041311d -a5523a060f1050451ebc633c5b341b41311dbc633c5b341bbc633c7c46262d2718a5523a071810 -071810081108a5523a7c4626bd734f9c7e3ca5523a9c7e3c773223bd734f76612cbd734fbd734f -9c7e3ccd48255b341bbc633c41311da5523abc633c76612ca5523a50451ea5523a2a3320082110 -7c4626bc633ca64b23b7937b94a5928cb0a19d7a66bd734f7d7765bc7a65889e8acd4825bc633c -7c4626a64b237c462676612c5b341bbc633c3142221821182b2821bc633c2129184c1b0dbc633c -9d7a669d7a66bc633c726946bc7a658c9c7bbc633cbd734f778469bc633c50451e1826222a3320 -2a3320212921213121212918001008000000181818879488000000 -000000182622a4a8ae4c524d949a912e3734949d9e5a636087948807221921372e153121182918 -41311d1826220722195b341b5b341b0718105b341b41311d2d27185b341b2624102d2718081108 -0718100010084c1b0da64b239a9680646b5a7c4626575a3339403184635f7d77659d7a66a64b23 -9f1a005b341b5b341b5b341b5b341b41311d7c462641311d41311d41311d50451e10251b4c1b0d -7c46269d7a669d7a66b7937b6b7b6b7b8a84858c759a96806b7b629ca28f9d7a667732237c4626 -2a33205b341b7c462641311d41311dbc633c18211021291821291850451e7d1500a5523a726946 -bd734f646b5a9c7e3c9d7a66bd734f9a96807269469c7e3ca64b23773223314222213121213121 -213121213121212918081108080808000000212918949a91000000 -00000015312174767827272c6b6b72393f41879488767984393f4117372b2b543e274a37274a37 -174236153121071810071810072219102110071810072219072219001008001008001008081108 -001008262410b22400b11700a5523a6b807548634d415240535a4c889e8a8aa0949a9680c63011 -181007080500001008071810071810071810071810102110102110182118102110262410a92b0c -949a9194ad9c9cada56b807562736c6b7b6b8aa0949cb5a59dbdadbc7a6581250c102108102110 -18291010211010251b1821107c46265b341b10251b21291810251b262410a634219cad9c8cb0a1 -94ad9c7b8a8462736c8aa0948a9e9c94a5928cb0a1bd734f4c1b0d153121212918213121213218 -213121213218071810000000080808001008773223b09f93000000 -0000001826225a5a635a5261464a485a5a5a464a48393f41464a481a4224274a37214231214231 -274a3721423115312107181010251b07221910211007221921372e213921072219081108071810 -060f107d1500ca2a00b22400b117007732234f6b505b6b516b7b6b94a592889e8ac63011531100 -08050010101018210818181818211018211018211018211026241018211010251b81250cb7937b -8cb0a19cad9c889e8a5a63605a6b5c7b8a849cad9c94ad9c9a9680a92b0c102110212918212918 -212918212918212918212118182110182110212918182918262410a92b0cb09f9394ad9c62736c -788c7ba5b4a5889e8a7b8a849cad9c8cb0a19d7a6681250c1531212a3320213121212918212921 -2132181018100000000808080010084c1b0da64b23b09f93000000 -000000274a372f42312142312142312142312f4231214231214231214231214231214231214231 -214231274a37274a3710251b07181007221907181007181010251b274a37214231153121102110 -060f100010087d1500b22400a92b0c7d15005b341b5b6b51788c7b8cb0a1cd48257d1500000000 -08080810181010181018210810181018211018211018211018211010251b7d1500bd734f8cb0a1 -94a5926b7b6b6b7b6b6273636b807594a5929cad9c9cad94a63421262410182918182110182110 -1821101821181821182129181821102129181829181018109f1a009d7a668aa0947384764c524d -5a6b5c7a94879cada59cad9c8cb0a19a9680a63421182918212921213218212921213218213121 -1821180000000805000008052d2718b224009a9680a4a8ae000000 -0000002b543e2b543e2b543e274a37274a37274a37274a37274a37274a37274a37214239274a37 -274a37274a37274a37274a3710251b07181010251b10181007221921423121423121423121372e -15312110211010181081250cb117007d15007d15005b341b889e8abd734f9f1a00080500000000 -10181018181818181818211018211018211018211018211010251b4c1b0da5523a8cb0a19cad9c -8aa0945a6360738476889e8a94a5929cad9c94b3a5a5523a4c1b0d10251b212918212918212918 -21291821291821291818211021291821291810251b7d1500bc7a659dbdad646b63525f5a5a6b5c -62736c94a59294ad9c94a59294a592a64b232d27181531212a3320213218213121213121212918 -0010080808080000002624109f1a009d7a669dbdad9ca0a3000000 -0000002b543e2b543e2b543e2b543e2b543e2b543e2b543e2b543e274a372b543e274a37274a37 -274a37274a37274a37274a37274a371531210718100718100718101531212f42312142312f4231 -21423110251b0718101818187d15007d15007d15007d1500a63421b11700181007000000000805 -081108101810101810101810101810101810182110102110262410a634219cad9c9cad9c9cada5 -6b7b6b889e8a62736c94a5929cad9c94b3a5bd734f81250c1531212a33202129182129182a3320 -212918182110182918182110212918102910531100bc633c9cb5a5788c7b525f5a62736362736c -94a59294a59294a5928cb0a1a5523a4c1b0d153121212918212921212921213121213121081108 -08050000000808211081250ca5523a94ad9ca5b4a59ca0a3000000 -0000002b423a2e37342c39292e37342e373421372e21372e2e373421372e2e37342e37342f4231 -2142312142312142312b423a21423121372e21312118262218262227272c2b423a2f42312f4231 -2e373421372e10251b0d16181826224c1b0d7d150081250ca92b0c4c1b0d060f10101010101010 -101810181818101810182118212118212118212918212918a634219a968094a5929cad9c879488 -62736c627363788c7ba5b4a59cb5a5b7937b81250c1531212a33202131212131212a3320212921 -2129182129182129212129181829184c1b0dcd48258a9e9c889e8a738476525f5a5263529cad9c -94ad9c9cad9c94b3a5bd734f4c1b0d2131212b28212129182129182a3320213121101010000000 -08080807181081250ccd4825a5b4a594ad9c9dbdada4a8ae000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000080008000000080008080808080808080808000000000000000000 -000008080808080008080500080008001008000008000008080008001008000000000805080808 -0800080010080000000805000808080808080808081008101a1610101810101010181818101810 -101010101810212118182118182622251618100810081108101010101010101010101010101010 -10101008110810101010101007181025161841311d1826220808082a31291821182129212e3734 -2a31292e37343940314c1b0d081108101010101010101010101010101810101010000805080808 -0808081a16104c1b0d4a3e40495a4b4c524d525f5a393f41000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000 -showpage -%%Trailer -end -%%EOF diff --git a/Docs/Books/sql-99.gif b/Docs/Books/sql-99.gif Binary files differdeleted file mode 100644 index a1f3b7403e7..00000000000 --- a/Docs/Books/sql-99.gif +++ /dev/null diff --git a/Docs/Books/sql-99.txt b/Docs/Books/sql-99.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Docs/Books/sql-99.txt +++ /dev/null diff --git a/Docs/Makefile.am b/Docs/Makefile.am index 85a362133a1..ab4288ba9d9 100644 --- a/Docs/Makefile.am +++ b/Docs/Makefile.am @@ -18,7 +18,7 @@ noinst_SCRIPTS = Support/generate-text-files.pl EXTRA_DIST = $(noinst_SCRIPTS) mysql.info INSTALL-BINARY -TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \ +TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE \ INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt all-local: $(TXT_FILES) @@ -51,9 +51,6 @@ GT = $(srcdir)/Support/generate-text-files.pl INSTALL-BINARY: $(srcdir)/mysql.info $(GT) perl -w $(GT) $(srcdir)/mysql.info "installing-binary" "installing-source" > $@ -../EXCEPTIONS-CLIENT: $(srcdir)/mysql.info $(GT) - perl -w $(GT) $(srcdir)/mysql.info "mysql-floss-license-exception" "function-index" > $@ - ../support-files/MacOSX/ReadMe.txt: $(srcdir)/mysql.info $(GT) perl -w $(GT) $(srcdir)/mysql.info "mac-os-x-installation" "netware-installation" > $@ diff --git a/Docs/MySQL-logos/mysql-01.gif b/Docs/MySQL-logos/mysql-01.gif Binary files differdeleted file mode 100644 index 773453f8dd7..00000000000 --- a/Docs/MySQL-logos/mysql-01.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-02.gif b/Docs/MySQL-logos/mysql-02.gif Binary files differdeleted file mode 100644 index 12d984b55e0..00000000000 --- a/Docs/MySQL-logos/mysql-02.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-03.gif b/Docs/MySQL-logos/mysql-03.gif Binary files differdeleted file mode 100644 index abb16f2aa59..00000000000 --- a/Docs/MySQL-logos/mysql-03.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-04.gif b/Docs/MySQL-logos/mysql-04.gif Binary files differdeleted file mode 100644 index e207e1790f7..00000000000 --- a/Docs/MySQL-logos/mysql-04.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-05.gif b/Docs/MySQL-logos/mysql-05.gif Binary files differdeleted file mode 100644 index f78b8a17b93..00000000000 --- a/Docs/MySQL-logos/mysql-05.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-06.gif b/Docs/MySQL-logos/mysql-06.gif Binary files differdeleted file mode 100644 index c660e1d1f4f..00000000000 --- a/Docs/MySQL-logos/mysql-06.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-07.gif b/Docs/MySQL-logos/mysql-07.gif Binary files differdeleted file mode 100644 index be309d0de1c..00000000000 --- a/Docs/MySQL-logos/mysql-07.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-08.gif b/Docs/MySQL-logos/mysql-08.gif Binary files differdeleted file mode 100644 index 3d5b2135655..00000000000 --- a/Docs/MySQL-logos/mysql-08.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-09.gif b/Docs/MySQL-logos/mysql-09.gif Binary files differdeleted file mode 100644 index 75d08592795..00000000000 --- a/Docs/MySQL-logos/mysql-09.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-10.gif b/Docs/MySQL-logos/mysql-10.gif Binary files differdeleted file mode 100644 index 8d0a8551e9e..00000000000 --- a/Docs/MySQL-logos/mysql-10.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-11.gif b/Docs/MySQL-logos/mysql-11.gif Binary files differdeleted file mode 100644 index e5f3770a7bd..00000000000 --- a/Docs/MySQL-logos/mysql-11.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-12.gif b/Docs/MySQL-logos/mysql-12.gif Binary files differdeleted file mode 100644 index b045aaf3549..00000000000 --- a/Docs/MySQL-logos/mysql-12.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-13.gif b/Docs/MySQL-logos/mysql-13.gif Binary files differdeleted file mode 100644 index 0d5aaf88f6f..00000000000 --- a/Docs/MySQL-logos/mysql-13.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-14.gif b/Docs/MySQL-logos/mysql-14.gif Binary files differdeleted file mode 100644 index 9bce287b4b3..00000000000 --- a/Docs/MySQL-logos/mysql-14.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-15.gif b/Docs/MySQL-logos/mysql-15.gif Binary files differdeleted file mode 100644 index d70ffec83dd..00000000000 --- a/Docs/MySQL-logos/mysql-15.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-16.gif b/Docs/MySQL-logos/mysql-16.gif Binary files differdeleted file mode 100644 index 9b30833dc1d..00000000000 --- a/Docs/MySQL-logos/mysql-16.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-17.gif b/Docs/MySQL-logos/mysql-17.gif Binary files differdeleted file mode 100644 index 5b228496b66..00000000000 --- a/Docs/MySQL-logos/mysql-17.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql-compatible.jpg b/Docs/MySQL-logos/mysql-compatible.jpg Binary files differdeleted file mode 100644 index cce9cf84b91..00000000000 --- a/Docs/MySQL-logos/mysql-compatible.jpg +++ /dev/null diff --git a/Docs/MySQL-logos/mysql_anim-01.gif b/Docs/MySQL-logos/mysql_anim-01.gif Binary files differdeleted file mode 100644 index f537d60da41..00000000000 --- a/Docs/MySQL-logos/mysql_anim-01.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql_anim-02.gif b/Docs/MySQL-logos/mysql_anim-02.gif Binary files differdeleted file mode 100644 index cfd3e1cfc3e..00000000000 --- a/Docs/MySQL-logos/mysql_anim-02.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql_anim-03.gif b/Docs/MySQL-logos/mysql_anim-03.gif Binary files differdeleted file mode 100644 index 6ac6b3ebcc1..00000000000 --- a/Docs/MySQL-logos/mysql_anim-03.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql_anim-04.gif b/Docs/MySQL-logos/mysql_anim-04.gif Binary files differdeleted file mode 100644 index d3150860ecf..00000000000 --- a/Docs/MySQL-logos/mysql_anim-04.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql_anim-05.gif b/Docs/MySQL-logos/mysql_anim-05.gif Binary files differdeleted file mode 100644 index 46f288ef71d..00000000000 --- a/Docs/MySQL-logos/mysql_anim-05.gif +++ /dev/null diff --git a/Docs/MySQL-logos/mysql_anim-06.gif b/Docs/MySQL-logos/mysql_anim-06.gif Binary files differdeleted file mode 100644 index 3dc283dbfb6..00000000000 --- a/Docs/MySQL-logos/mysql_anim-06.gif +++ /dev/null diff --git a/Docs/Support/.cvsignore b/Docs/Support/.cvsignore deleted file mode 100644 index 8772614a6b6..00000000000 --- a/Docs/Support/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -manual.html -manual_toc.html diff --git a/Docs/Support/colspec-fix.pl b/Docs/Support/colspec-fix.pl deleted file mode 100755 index 6c64edd1441..00000000000 --- a/Docs/Support/colspec-fix.pl +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/perl -w - -# -# Script to rewrite colspecs from relative values to absolute values -# - -# arjen 2002-03-14 append "cm" specifier to colwidth field. - -use strict; - -my $table_width = 12.75; # Specify the max width of the table in cm -my $gutter_width = 0.55; # Specify the width of the gutters in cm - -my $str = join '', <>; # Push stdin (or file) - -$str =~ s{([\t ]*(<colspec colwidth=\".+?\" />\s*)+)} - {&rel2abs($1)}ges; - -print STDOUT $str; -exit; - -# -# Definitions for helper sub-routines -# - -sub msg { - print STDERR shift, "\n"; -} - -sub rel2abs { - my $str = shift; - my $colnum = 1; - - my @widths = (); - my $total = 0; - my $output = ''; - - my $gutters; - my $content_width; - my $total_width; - my @num_cache; - - $str =~ /^(\s+)/; - my $ws = $1; - - while ($str =~ m/<colspec colwidth="(\d+)\*" \/>/g) { - $total += $1; - push @widths, $1; - } - - msg("!!! WARNING: Total Percent > 100%: $total%") if $total > 100; - - if (! $total) { - die 'Something bad has happened - the script believes that there are no columns'; - } - - $gutters = $#widths * $gutter_width; - $content_width = $table_width - $gutters; - # Don't forget that $#... is the last offset not the count - - foreach (@widths) { - my $temp = sprintf ("%0.2f", $_/100 * $content_width); - $total_width += $temp; - - if ($total_width > $content_width) { - $temp -= $total_width - $content_width; - msg("!!! WARNING: Column width reduced from " . - ($temp + ($total_width - $content_width)) . " to $temp !!!"); - $total_width -= $total_width - $content_width; - } - - $output .= $ws . '<colspec colnum="'. $colnum .'" colwidth="'. $temp .'cm" />' . "\n"; - ++$colnum; - push @num_cache, $temp; - } - - return $output . "\n$ws"; -} diff --git a/Docs/Support/docbook-fixup.pl b/Docs/Support/docbook-fixup.pl deleted file mode 100755 index 48ab085ad3e..00000000000 --- a/Docs/Support/docbook-fixup.pl +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/perl -w - -# Fix the output of `makeinfo --docbook` version 4.0c -# Convert the broken docbook output to well-formed XML that conforms to the O'Reilly idiom -# See code for detailed comments -# Authors: Arjen Lentz and Zak Greant (original code by Jeremy Cole) - -use strict; - -my $data = ''; -my @apx = (); -my $apx = ''; -my @nodes = (); -my $nodes = ''; - -msg ("-- Post-processing `makeinfo --docbook` output --"); -msg ("** Written to work with makeinfo version 4.0c **\n"); - -msg ("Discarding DTD - not required by subsequent scripts"); -# <> is a magic filehandle - either reading lines from stdin or from file(s) specified on the command line -<>; - -msg ("Create an XML PI with ISO-8859-1 character encoding"); -$data = "<?xml version='1.0' encoding='ISO-8859-1'?>"; - -msg ("Get the rest of the data"); -$data = $data . join "", <>; - -msg ("Add missing <bookinfo> and <abstract> opening tags"); -# Note the absence of the g (global) pattern modified. This situation can only happen once. -# ...as soon as we find the first instance, we can stop looking. -$data =~ s/<book lang="en">/<book lang="en"><bookinfo><abstract>/; - - -# arjen 2002-05-01 -msg ("Processing docbook-prefix special strings"); -$data =~ s/FIXUPmdashFIXUP/\&mdash\;/g; - -$data =~ s/FIXUPdoubledashFIXUP/--/g; - -$data =~ s/FIXUPstrongFIXUP/<emphasis\ role\=\"bold\">/g; -$data =~ s/FIXUPendstrongFIXUP/<\/emphasis>/g; - -$data =~ s/FIXUPemphFIXUP/<emphasis>/g; -$data =~ s/FIXUPendemphFIXUP/<\/emphasis>/g; - -$data =~ s/FIXUPfileFIXUP/<filename>/g; -$data =~ s/FIXUPendfileFIXUP/<\/filename>/g; - -$data =~ s/FIXUPsampFIXUP/<literal>/g; -$data =~ s/FIXUPendsampFIXUP/<\/literal>/g; - - -msg ("Removing mailto: from email addresses..."); -$data =~ s/mailto://g; - -msg ("Removing INFORMALFIGURE..."); -$data =~ s{<informalfigure>.+?</informalfigure>} - {}gs; - -msg ("Convert ampersand to XML escape sequence..."); -$data =~ s/&(?!\w+;)/&/g; - -# arjen 2002-05-01 -msg ("Changing (TM) to XML escape sequence..."); -$data =~ s/MySQL \(TM\)/MySQL™/g; -$data =~ s{<command>TM</command>} - {™}g; - -# arjen 2002-05-01 -msg ("Changing ' -- ' to XML escape sequence..."); -$data =~ s/ -- /—/g; - -msg ("Changing @@ to @..."); -$data =~ s/@@/@/g; - -msg ("Rework references of the notation '<n>'"); -# Need to talk to Arjen about what the <n> bits are for -$data =~ s/<(\d)>/[$1]/g; - -msg ("Changing '_' to '-' in references..."); -$data =~ s{((?:id|linkend)=\".+?\")} - {&underscore2hyphen($1)}gex; - -msg ("Changing ULINK to SYSTEMITEM..."); -$data =~ s{<ulink url=\"(.+?)\">\s*</ulink>} - {<systemitem role=\"url\">$1</systemitem>}gs; - -msg ("Adding PARA inside ENTRY..."); -$data =~ s{<entry>(.*?)</entry>} - {<entry><para>$1</para></entry>}gs; - -msg ("Fixing spacing problem with titles..."); -$data =~ s{(</\w+>)(\w{2,})} - {$1 $2}gs; - -msg ("Adding closing / to XREF and COLSPEC tags..."); -$data =~ s{<(xref|colspec) (.+?)>} - {<$1 $2 />}gs; - -# arjen 2002-04-26 -msg ("Removing separate target titles from LINKs and make them XREFs..."); -$data =~ s{<link (linkend=.+?)>.+?</link>} - {<xref $1 />}gs; - -# Probably need to strip these -msg ('Adding "See " to XREFs that used to be @xref...'); -$data =~ s{([.'!)])\s*<xref } - {$1 See <xref }gs; - -msg ('Adding "see " to (XREFs) that used to be (@pxref)...'); -$data =~ s{([([,;])(\s*)<xref } - {$1$2see <xref }gs; - -msg ("Making first row in table THEAD..."); -$data =~ s{( *)<tbody>(\s*<row>.+?</row>)} - {$1<thead>$2\n$1</thead>\n$1<tbody>}gs; - -msg ("Removing EMPHASIS inside THEAD..."); -$data =~ s{<thead>(.+?)</thead>} - {"<thead>".&strip_tag($1, 'emphasis')."</thead>"}gsex; - -msg ("Removing empty PARA..."); -$data =~ s{<para>\s*</para>} - {}gs; - -msg ("Removing lf before /PARA in ENTRY..."); -$data =~ s{\n(</para></entry>)} - {$1}gs; - -msg ("Removing whitespace before /PARA if not on separate line..."); -$data =~ s{(\S+)[\t ]+</para>} - {$1</para>}g; - -msg ("Removing PARA around INDEXTERM if no text in PARA..."); -$data =~ s{<para>((?:<indexterm role=\"[^"]+\">(?:<(primary|secondary)>[^>]+</\2>)+?</indexterm>)+?)\s*</para>} - {$1}gs; - -@apx = ("Users", "MySQL Testimonials", "News", "GPL-license", "LGPL-license"); - -foreach $apx (@apx) { - msg ("Removing appendix $apx..."); - $data =~ s{<appendix id=\"$apx\">(.+?)</appendix>} - {}gs; - - # Skip to next appendix regex if the regex did not match anything - next unless (defined $&); - - msg ("...Building list of removed nodes..."); - - # Split the last bracketed regex match into an array - # Extract the node names from the tags and push them into an array - foreach (split "\n", $&) { - push @nodes, $1 if /<\w+ id=\"(.+?)\">/ - } -} - -# 2002-02-22 arjen@mysql.com (added fix " /" to end of regex, to make it match) -msg ("Fixing references to removed nodes..."); -# Merge the list of node names into a set of regex alternations -$nodes = join "|", @nodes; - -# Find all references to removed nodes and convert them to absolute URLs -$data =~ s{<\w+ linkend="($nodes)" />} - {&xref2link($1)}ges; - -print STDOUT $data; -exit; - -# -# Definitions for helper sub-routines -# - -sub msg { - print STDERR "docbook-fixup:", shift, "\n"; -} - -sub strip_tag($$) { - (my $str, my $tag) = @_; - $str =~ s{<$tag>(.+?)</$tag>}{$1}gs; - return $str; -} - -sub underscore2hyphen($) { - my $str = shift; - $str =~ tr/_/-/; - return $str; -} - -sub xref2link { - my $ref = shift; - $ref =~ tr/ /_/; - $ref =~ s{^((.)(.).+)$}{$2/$3/$1.html}; - return "http://www.mysql.com/doc/" . $ref; -} - -# We might need to encode the high-bit characters to ensure proper representation -# msg ("Converting high-bit characters to entities"); -# $data =~ s/([\200-\400])/&get_entity($1)>/gs; -# There is no get_entity function yet - no point writing it til we need it :) diff --git a/Docs/Support/docbook-prefix.pl b/Docs/Support/docbook-prefix.pl deleted file mode 100755 index e76d84dbfe0..00000000000 --- a/Docs/Support/docbook-prefix.pl +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/perl -w - -# Preprocess the input of `makeinfo --docbook` version 4.0c -# Authors: Arjen Lentz and Zak Greant (started by arjen 2002-05-01) - -use strict; - -my $data = ''; - -msg ("-- Pre-processing `makeinfo --docbook` input --"); -msg ("** Written to work with makeinfo version 4.0c **\n"); - -# <> is a magic filehandle - either reading lines from stdin or from file(s) specified on the command line -msg ("Get the data"); -$data = join "", <>; - -msg ("Replacing '\@-' with FIXUPmdashFIXUP"); -$data =~ s/\@-/FIXUPmdashFIXUP/g; - -msg ("Replacing '--' with FIXUPdoubledashFIXUP"); -$data =~ s/--/FIXUPdoubledashFIXUP/g; - -msg ("Turning \@strong{} into LITERAL blocks"); -$data =~ s/\@strong\{(.*?)\}/FIXUPstrongFIXUP$1FIXUPendstrongFIXUP/gs; - -msg ("Turning \@emph{} into LITERAL blocks"); -$data =~ s/\@emph\{(.*?)\}/FIXUPemphFIXUP$1FIXUPendemphFIXUP/gs; - -msg ("Turning \@file{} into LITERAL blocks"); -$data =~ s/\@file\{(.*?)\}/FIXUPfileFIXUP$1FIXUPendfileFIXUP/gs; - -msg ("Turning \@samp{} into LITERAL blocks"); -$data =~ s/\@samp\{\@\{\}/FIXUPsampFIXUP\@\{FIXUPendsampFIXUP/g; -$data =~ s/\@samp\{\@\}\}/FIXUPsampFIXUP\@\}FIXUPendsampFIXUP/g; -$data =~ s/\@samp\{\@\{n\@\}\}/FIXUPsampFIXUP\@\{n\@\}FIXUPendsampFIXUP/g; -$data =~ s/\@samp\{(.*?)\}/FIXUPsampFIXUP$1FIXUPendsampFIXUP/gs; - - -msg ("Write the data"); -print STDOUT $data; -exit; - -# -# Definitions for helper sub-routines -# - -sub msg { - print STDERR "docbook-prefix: ", shift, "\n"; -} - diff --git a/Docs/Support/docbook-split b/Docs/Support/docbook-split deleted file mode 100755 index eafb437efe4..00000000000 --- a/Docs/Support/docbook-split +++ /dev/null @@ -1,70 +0,0 @@ -#! /usr/bin/perl -w -# O'Reilly's Perl script to chop mysql.xml into separate ch/apps/index files. -# The indexes are actually not used, they're created straight from the xrefs. -# Breaks the MySQL reference manual into chapters, appendices, and indexes. - -use strict; - -my $app_letter = "a"; # Start appendix letters at "a" -my $chap_num = 1; # Start chapter numbers at one (there is no preface) -my $directory = "mysql_refman_" . time; -my $ext = ".xml"; -my $line = ""; -my $output_name = ""; -my $start_text = ""; - -mkdir $directory unless -d $directory; - -while (defined $line) { - if ($line =~ /(<chapter.+)/i ) { - $start_text = $1; - $output_name = sprintf("ch%02d%s", $chap_num, $ext); - ++$chap_num; - &process_file("chapter"); - } - elsif ($line =~ /(<appendix.+)/i ) { - $start_text = $1 ; - $output_name = "app$app_letter$ext"; - ++$app_letter; - &process_file("appendix"); - } - elsif ($line =~ /(<index\s+id=")(.*?)(">.*)/i ) { - $start_text = $1 . $2 . $3; - $output_name = lc($2) . $ext; - &process_file("index"); - } - else { - # Skip junk in between chapters, appendices and indexes. - $line = <>; - } -} - -sub process_file { - my $marker = shift; - my $path = "$directory/$output_name"; - - open (OUTPUT_FILE, ">$path") or die "Cannot open $path"; - - print STDERR "Creating $path\n"; - - # Print out XML PI - print OUTPUT_FILE "<?xml version='1.0' encoding='ISO-8859-1'?>\n"; - - # Print whatever happened to appear at the end of the previous chapter. - print OUTPUT_FILE "$start_text\n" if $start_text; - - while (defined $line) { - $line = <>; - - # Note: Anything after the terminating marker is lost, just like - # lines in between chapters. - if ($line =~ /(.*<\/\s*$marker\s*>)/i ) { - print OUTPUT_FILE "$1\n" if $1; - close OUTPUT_FILE; - return; - } - print OUTPUT_FILE $line; - } -} - -exit 0; diff --git a/Docs/Support/make-docbook b/Docs/Support/make-docbook deleted file mode 100755 index 93dbc56c0f8..00000000000 --- a/Docs/Support/make-docbook +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -# 2002-01-30 arjen@mysql.com -# Use this to create mysql.xml (the DocBook XML format output of manual.texi) -# Requires makeinfo 4.0c - -#create include.texi with version/port # - echo "@c This file is autogenerated by the Makefile" > include.texi - echo -n "@set mysql_version " >> include.texi -# grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ -# sed -e 's;AM_INIT_AUTOMAKE(mysql, ;;' -e 's;);;' >> include.texi -# 2002-04-26 arjen - the below just picks #.# instead of #.#.#-alpha -# (code by mwagner - tnx) - grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ - perl -p -e 's/AM_INIT_AUTOMAKE\(mysql,\s(\d+\.\d+)\..+/$1/' >> include.texi - echo -n "@set default_port " >> include.texi - grep "MYSQL_TCP_PORT_DEFAULT=" ../configure.in | \ - sed -e 's;MYSQL_TCP_PORT_DEFAULT=;;' >> include.texi - -# produce DocBook XML - Support/docbook-prefix.pl < manual.texi |\ - makeinfo --force --no-ifinfo --docbook -o - |\ - Support/docbook-fixup.pl > mysql.xml - - # See if the XML output is well-formed - xmlwf mysql.xml - - # If all is well, keep processing - cat mysql.xml | Support/colspec-fix.pl | Support/docbook-split; - diff --git a/Docs/Support/make-makefile b/Docs/Support/make-makefile deleted file mode 100755 index 79cf06091fe..00000000000 --- a/Docs/Support/make-makefile +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# Use this when you have deleted Makefile and do not want to do a full -# build to get it back - -cd .. -automake --gnu Docs/Makefile -CONFIG_FILES=Docs/Makefile CONFIG_HEADERS= sh ./config.status diff --git a/Docs/Support/test-make-manual b/Docs/Support/test-make-manual deleted file mode 100755 index bd4ed4b04e3..00000000000 --- a/Docs/Support/test-make-manual +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/sh - -needed_flags=0 -needed_texi2html=0 -needed_texinfo_tex=0 -needed_include_texi=0 - -if [ -z $BROWSER ]; then - BROWSER=netscape - echo "BROWSER not set, using $BROWSER" -fi - -die () -{ - echo - echo $1 - cleanup - exit 1 -} - -cleanup () -{ - echo "Cleaning up..." - if [ $needed_flags ]; then - bk clean Flags - fi - - if [ $needed_texi2html ]; then - bk clean Support/texi2html - fi - - if [ $needed_texinfo_tex ]; then - bk clean Support/texinfo.tex - fi - - if [ $needed_include_texi ]; then - rm -f include.texi - fi - - for file in \ - manual.aux manual.cp manual.cps manual.dvi \ - manual.fn manual.fns manual.ky manual.html \ - manual.pg manual.toc manual.tp manual.vr \ - mysql.info manual_toc.html ; - do - rm -f $file - done - -} - - -if [ -e Flags/usa.txt ]; then - echo "Good, Flags are there." -else - echo -n "Checking out Flags..." - bk edit Flags >/dev/null 2>&1 - echo " Done." - needed_flags=1 -fi - -if [ -e Support/texi2html ]; then - echo "Good, texi2html is there." -else - echo -n "Checking out texi2html..." - bk edit Support/texi2html >/dev/null 2>&1 - echo " Done." - needed_texi2html=1 -fi - -if [ -e Support/texinfo.tex ]; then - echo "Good, texinfo.tex is there." -else - echo -n "Checking out texinfo.tex..." - bk edit Support/texinfo.tex >/dev/null 2>&1 - echo " Done." - needed_texinfo_tex=1 -fi - -if [ -e include.texi ]; then - echo "Good, include.texi is there." -else - echo -n "Creating include.texi..." - bk edit ../configure.in >/dev/null 2>&1 - echo "@c This file was generated by test-make-manual" > include.texi - echo -n "@set mysql_version " >> include.texi - grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ - sed -e 's;AM_INIT_AUTOMAKE(mysql, ;;' -e 's;);;' >> include.texi - echo -n "@set default_port " >> include.texi - grep "MYSQL_TCP_PORT_DEFAULT=" ../configure.in | \ - sed -e 's;MYSQL_TCP_PORT_DEFAULT=;;' >> include.texi - echo " Done." - needed_include_texi=1 -fi - -echo -n "Running makeinfo..." -makeinfo --no-split -I . manual.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2html..." -/usr/bin/perl ./Support/texi2html -iso -number manual.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2dvi..." -texi2dvi --batch manual.texi > texi2dvi.out - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit (saved in texi2dvi.out)" -else - rm texi2dvi.out - echo " Looks good." -fi - -echo -echo -echo "Please examine your modifications in \`manual.html'." -echo -echo "If you would like to use a different browser, set the 'BROWSER' environment" -echo "variable." -echo - -$BROWSER file:`pwd`/manual_toc.html - -echo "-- Press Enter to Continue --" -read junk -cleanup diff --git a/Docs/Support/test-make-manual-de b/Docs/Support/test-make-manual-de deleted file mode 100755 index a5c03001bda..00000000000 --- a/Docs/Support/test-make-manual-de +++ /dev/null @@ -1,137 +0,0 @@ -#!/bin/sh - -needed_flags=0 -needed_texi2html=0 -needed_texinfo_tex=0 -needed_include_texi=0 - -if [ -z $BROWSER ]; then - BROWSER=netscape - echo "BROWSER not set, using $BROWSER" -fi - -die () -{ - echo - echo $1 - cleanup - exit 1 -} - -cleanup () -{ - echo "Cleaning up..." - if [ $needed_flags ]; then - bk clean Flags - fi - - if [ $needed_texi2html ]; then - bk clean Support/texi2html - fi - - if [ $needed_texinfo_tex ]; then - bk clean Support/texinfo.tex - fi - - if [ $needed_include_texi ]; then - rm -f include.texi - fi - - for file in \ - manual.de.aux manual.de.cp manual.de.cps manual.de.dvi \ - manual.de.fn manual.de.fns manual.de.ky manual.de.html \ - manual.de.pg manual.de.toc manual.de.tp manual.de.vr \ - mysql.de.info manual.de_toc.html ; - do - rm -f $file - done - -} - - -if [ -e Flags/usa.txt ]; then - echo "Good, Flags are there." -else - echo -n "Checking out Flags..." - bk edit Flags >/dev/null 2>&1 - echo " Done." - needed_flags=1 -fi - -if [ -e Support/texi2html ]; then - echo "Good, texi2html is there." -else - echo -n "Checking out texi2html..." - bk edit Support/texi2html >/dev/null 2>&1 - echo " Done." - needed_texi2html=1 -fi - -if [ -e Support/texinfo.tex ]; then - echo "Good, texinfo.tex is there." -else - echo -n "Checking out texinfo.tex..." - bk edit Support/texinfo.tex >/dev/null 2>&1 - echo " Done." - needed_texinfo_tex=1 -fi - -if [ -e include.texi ]; then - echo "Good, include.texi is there." -else - echo -n "Creating include.texi..." - bk edit ../configure.in >/dev/null 2>&1 - echo "@c This file was generated by test-make-manual" > include.texi - echo -n "@set mysql_version " >> include.texi - grep "AM_INIT_AUTOMAKE(mysql, " ../configure.in | \ - sed -e 's;AM_INIT_AUTOMAKE(mysql, ;;' -e 's;);;' >> include.texi - echo -n "@set default_port " >> include.texi - grep "MYSQL_TCP_PORT_DEFAULT=" ../configure.in | \ - sed -e 's;MYSQL_TCP_PORT_DEFAULT=;;' >> include.texi - echo " Done." - needed_include_texi=1 -fi - -echo -n "Running makeinfo..." -makeinfo --no-split -I . manual.de.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2html..." -/usr/bin/perl ./Support/texi2html -iso -number manual.de.texi - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit" -else - echo " Looks good." -fi - - -echo -n "Running texi2dvi..." -texi2dvi --batch manual.de.texi > texi2dvi.out - -if [ $? != 0 ]; then - die "Manual has errors - fix before you commit (saved in texi2dvi.out)" -else - rm texi2dvi.out - echo " Looks good." -fi - -echo -echo -echo "Please examine your modifications in \`manual.de.html'." -echo -echo "If you would like to use a different browser, set the 'BROWSER' environment" -echo "variable." -echo - -$BROWSER file:`pwd`/manual.de_toc.html - -echo "-- Press Enter to Continue --" -read junk -cleanup diff --git a/Docs/Support/trivial-makeinfo-4.0c.patch b/Docs/Support/trivial-makeinfo-4.0c.patch deleted file mode 100644 index b2446c0e8bb..00000000000 --- a/Docs/Support/trivial-makeinfo-4.0c.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- alt-multi.c Sun Apr 14 10:03:19 2002 -+++ multi.c Tue May 22 20:52:33 2001 -@@ -287,7 +287,7 @@ - && *params != '\n' && *params != '@') - params++; - setup_output_environment (i, -- (int) ((columnfrac * 100.00) + 0.49)); -+ (int) (columnfrac * (fill_column - current_indent) + .5)); - } - } - diff --git a/Docs/Support/xwf b/Docs/Support/xwf deleted file mode 100755 index 38f89774fe8..00000000000 --- a/Docs/Support/xwf +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl -w -# -# Parse document and report first syntax (well-formedness) error found. -# - -use strict; -use XML::Parser; -use Getopt::Std; - -my %opts; -getopts('e', \%opts); -my $ENTREFS = exists( $opts{'e'} ); # flag: check ent refs - -my $parser = XML::Parser->new( - ErrorContext => 2, # output error context - ); - -# get input from files -if( @ARGV ) { - foreach( @ARGV ) { - my $file = $_; - unless( -r $file ) { - print STDERR "ERROR: Can't open '$file'.\n"; - return; - } - my $input = ''; - open( F, $file ); - while( <F> ) { $input .= $_; } - close F; - - # parse and report errors - if( &parse_string( $input )) { - print STDERR "ERROR in $file:\n$@\n"; - } else { - print STDERR "'$file' is well-formed.\n"; - } - } - print "All files checked.\n"; - -# get input from STDIN -} else { - my $input = ""; - while( <STDIN> ) { $input .= $_; } - if( &parse_string( $input )) { - print STDERR "ERROR in stream:\n$@\n"; - } else { - print STDERR "No syntax errors found in XML stream.\n"; - } -} - - -# parse the string and return error message -# -# NOTE: By default, entity refs are not expanded. XML::Parser can be -# told not to expand entity refs, but will still try to find -# replacement text just in case, which we don't want. Therefore, we -# need to do a stupid regexp replacement, removing entities from input. -# -sub parse_string { - my $string = shift; - unless( $ENTREFS ) { - $string =~ s/\&[^\s;]+;//g; # remove entity references - } - eval { $parser->parse( $string ); }; - $@ =~ s/at \/.*?$//s; # remove module line number - return $@; -} diff --git a/Docs/Tutorial-MySQL-final.txt b/Docs/Tutorial-MySQL-final.txt deleted file mode 100644 index bd52554a611..00000000000 --- a/Docs/Tutorial-MySQL-final.txt +++ /dev/null @@ -1,1643 +0,0 @@ -8 Tutorial MySQL -======================= - -Este capítulo ofrece un tutorial de introducción a MySQL, mostrando cómo usar el programa cliente -mysql para crear y usar una simple base de datos. mysql (al que algunas veces nos referimos como -"monitor terminal" o simplemente "monitor") es un programa interactivo que te permite conectarte a -un servidor MySQL, ejecutar consultas y observar los resultados. mysql puede ser usado también en -modo batch: escribes tus consultas en un fichero de texto, para después pedirle a mysql que -ejecute el contenido del fichero. Se cubren aquí esas dos formas de usar de usar mysql. - -Para ver una lista de opciones proporcionadas por mysql, lánzalo con las opción --help : - - shell> mysql --help - -Este capítulo asume que mysql está instalado en tu máquina, y que hay disponible un servidor al que -te puedes conectar. Si esto no es así, contacta con tu administrador MySQL. (Si el administrador -eres tú, necesitarás consultar otra sección de este manual). - -El capítulo describe el proceso completo de configurar y usar una base de datos. Si estás interesado -sólo en acceder una base de datos ya existente, querrás saltar las secciones que describen cómo -crear la base de datos y las tablas que la contienen. - -Dado que este capítulo es un tutorial básico, se dejarán en el tintero muchos -detalles. Consulta las secciones relevantes del manual para más información sobre los temas -aquí cubiertos. - - -8.1 Conectando y desconectando del servidor -============================================= - - -Para conectarse al servidor, generalmente necesitarás facilitar un nombre de usuario MySQL cuando -lances el cliente mysql y, lo más probable, también un password. Si el servidor se está ejecutando -en una máquina distinta a la que estás conectado, necesitarás especificar también un nombre de -host. Contacta con tu administrador para averiguar qué parámetros de conexión necesitas usar para -conectar (es decir, qué host, nombre de usuario y password usar). Una vez que conozcas los -parámetros adecuados, deberás ser capaz de conectar de la siguiente forma: - -shell> mysql -h host -u user -p -Enter password: ******* -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 459 to server version: 3.22.20a-log - -Type 'help' for help. - -mysql> - -El prompt te indica que mysql ya está listo para la introducción de comandos. - -Algunas instalaciones MySQL permiten a los usuarios conectarse como usuarios "anonymous" (sin -nombre) al servidor ejecutándose en el host local. Si este es el caso en tu máquina, deberías ser -capaz de conectar a ese servidor invocando mysql sin ninguna opción: - -shell> mysql - -Una vez que hayas conectado con éxito, puedes desconectarte en cualquier momento tecleando QUIT en -el prompt mysql> : - -mysql> QUIT -Bye - -También puedes desconectar tecleando control-D. - -La mayor parte de los ejemplos en las siguientes secciones asumen que estás conectado al -servidor. Lo indicarán por el prompt mysql> - - -8.2 Haciendo consultas -======================== - -Asegúrate de que estás conectado al servidor, como se ha discutido en secciones anteriores. El -hacerlo no implica que tengas seleccionada ninguna base de datos con la que trabajar, pero está -bien. En este punto, es más importante averiguar un poco sobre cómo lanzar consultas que lanzarse -directamente a la creación de tablas, cargar datos en ellas y recuperar los datos de las -mismas. Esta sección describe los principios básicos de la entrada de comandos, usando varias -consultas que puedes probar para familiarizarte con la forma de trabajo de mysql. - -Aquí presentamos un comando simple que pide al servidor que nos diga su número de versión y fecha -actual. Tecléalo como se muestra a continuación siguiendo el prompt mysql> y pulsa la tecla RETURN: - - -mysql> SELECT VERSION(), CURRENT_DATE; -+-----------+--------------+ -| version() | CURRENT_DATE | -+-----------+--------------+ -| 3.22.23b | 2000-01-05 | -+-----------+--------------+ -1 row in set (0.06 sec) - -mysql> - -Esta consulta ilustra muchas cosas sobre mysql: - -* Un comando consiste normalmente de una sentencia SQL seguida por un punto y coma. (Existen algunas - excepciones donde no es necesario el punto y coma. QUIT, mencionado más adelante, es una de - ellas. Conoceremos otras más adelante.) - -* Cuando lanzas un comando, mysql lo envía al servidor para su ejecución y muestra los resultados, - después imprime otro mysql> para indicar que está listo para otro comando. - -* mysql muestra la salida de una consulta como una tabla (filas y columnas). La primera fila - contiene etiquetas para las columnas. Las siguientes filas son el resultado de la - consulta. Normalmente, las etiquetas de las columnas son los nombres de las columnas que has - obtenido de la base de datos. Si pides el valor de una expresión en vez de una columna de una - tabla (como en el ejemplo anterior), mysql etiqueta la columna usando la propia expresión. - -* mysql muestra el número de filas que se han dado como resultado, y cuánto tiempo llevó la - ejecución de la consulta, lo que te da una idea aproximada del rendimiento del servidor. Estos - valores son imprecisos porque representan tiempo real (no tiempo de CPU o máquina), y porque están - afectados por factores como la carga del servidor y la latencia de la red. (Por cuestiones de - brevedad, la línea "rows in set" no se mostrará en los ejemplos posteriores de este capítulo.) - -Las palabras clave pueden ser tecleadas en cualquier combinación mayúscula/minúscula. Las siguientes -consultas son equivalentes: - -mysql> SELECT VERSION(), CURRENT_DATE; -mysql> select version(), current_date; -mysql> SeLeCt vErSiOn(), current_DATE; - -He aquí otra consulta. Demuestra que puedes usar mysql como una calculadora sencilla: - -mysql> SELECT SIN(PI()/4), (4+1)*5; -+-------------+---------+ -| SIN(PI()/4) | (4+1)*5 | -+-------------+---------+ -| 0.707107 | 25 | -+-------------+---------+ - -Los comandos vistos hasta aquí han sido relativamente cortos, sentencias de una sola línea. También puedes -insertar múltiples sentencias en una sola línea. Simplemente, termina cada una con un punto y coma: - -mysql> SELECT VERSION(); SELECT NOW(); - -+-----------+ -| version() | -+-----------+ -| 3.22.23b | -+-----------+ - -+---------------------+ -| NOW() | -+---------------------+ -| 2000-01-05 17:33:16 | -+---------------------+ - -Un comando no necesita ser dado todo en una sóla línea, así pues, los comandos largos que requieran -varias lineas no son un problema. mysql determina cuando termina tu sentencia buscando el punto y -coma final, no buscando el final de la línea de entrada. (En otras palabras, mysql acepta entrada de -libre formato: recoleta las líneas de entrada pero no las ejecutahasta que vea el punto y coma.) - -Aquí tenemos un simple ejemplo de múltiples líneas: - -mysql> SELECT - -> USER() - -> , - -> CURRENT_DATE; -+----------------+--------------+ -| USER() | CURRENT_DATE | -+----------------+--------------+ -| root@localhost | 2000-01-05 | -+----------------+--------------+ - -En este ejemplo, observa como cambia el prompt de mysql> a -> una vez que has insertado la primera -línea de una consulta multi-línea. Esta es la forma en que mysql indica que no ha encontrado una -sentencia completa y que está esperando por el resto. El prompt es tu amigo, dado que ofrece una -retroalimentación (feedback) significativa. Si usas ese feedback, siempre sabrás a qué está -esperando mysql. - -Si decides que no quieres ejecutar un comando que está en proceso de introducción, puedes cancelarlo -tecleando \c : - -mysql> SELECT - -> USER - -> \c -mysql> - -Observa aquí también el prompt. Ha vuelto a mysql> tras haber tecleado \c, ofreciendo un feedback -que indica que mysql está listo para un nuevo comando. - -La siguiente tabla muestra cada uno de los prompts que puedes ver y resume qué es lo que significan -y el estado en el que se encontrará mysql: - -Prompt Significado -mysql> Listo para un nuevo comando - -> Esperando una nueva línea de una consulta multi-línea - '> Esperando la siguiente línea, se ha insertado una línea que comienza con (') - "> Esperando la siguiente línea, se ha insertado una línea que comienza con (") - -Las sentencias multi-línea ocurren comúnmente "por accidente" cuando intentas lanzar un comando en -una única línea, pero olvidas el punto y coma del final. En este caso, mysql espera más entrada: - -mysql> SELECT USER() - -> - -Si esto es lo que te ocurre (crees que has introducido una sentencia pero la única respuesta es un -prompt como ->), lo más probable es que mysql esté esperando por el punto y coma. Si no observas qué -es lo que te dice el prompt, podrías quedarte esperando un buen rato antes de enterarte de qué es lo -que sucede. Introduce un punto y coma para completar la sentencia, y mysql la ejecutará: - -mysql> SELECT USER() - -> ; -+----------------+ -| USER() | -+----------------+ -| root@localhost | -+----------------+ - -Los prompts '> y "> ocurren durante la recogida de strings. En MySQL, puedes escribir strings -encerrados por comillas simples (') o dobles (") (por ejemplo, 'hola' o "adios"), y mysql te permite -introducir también strings que se cortan en múltiples líneas. Cuando veas un prompt como '> ó ">, -significa que has introducido una línea que contenía un string que comenzaba por (') o ("), pero que -no has introducido aún la comilla (simple o doble) de cierre. Esto está bien si realmente estabas -introduciendo un string multi-línea, pero no es lo más normal. Lo que sí es más normal, es que los -prompts '> ó "> indiquen que te has olvidado del caracter de cierre " ó '. Por ejemplo: - -mysql> SELECT * FROM mi_tabla WHERE nombre ="García AND edad < 30; - "> - -Si tecleas esta sentencia SELECT, después pulsas ENTER y esperas por el resultado, no sucederá -nada. En lugar de preocuparte, "¿por qué tarda tanto esta consulta?", observa la pista que te ofrece -el prompt "> . Esto te indica que mysql espera ver el resto de un string que aún no ha -terminado. (¿Ves el error en la sentencia? La cadena "García ha perdido las comillas de cierre.) - -Llegados a este punto, ¿qué puedes hacer?. Lo más fácil es cancelar el comando. Sin embargo, no -puedes teclear simplemente \c en este ejemplo, dado que mysql ¡lo interpretará como parte del string -que está leyendo! En vez de eso, introduce las comillas de cierre (para que mysql sepa que ya has -terminado de introducir el string), y después teclea \c : - -mysql> SELECT * FROM mi_tabla WHERE nombre ="García AND edad < 30; - "> "\c -mysql> - -El prompt vuelve a cambiar a mysql>, indicando que mysql está listo para un nuevo comando. - -Es importante saber qué significan los prompts '> y ">, dado que si introduces por error un string -sin cerrar, cualquier otra línea que introduzcas serán ignoradas por mysql - ¡incluyendo una línea -que contenga QUIT! Esto puede ser bastante confuso, especialmente si no sabes que debes introducir -la comilla de cierre antes de poder cancelar el comando actual. - -8.3 Creando y usando una base de datos -========================================== - -Ahora que sabes como introducir comandos, es hora de acceder a la base de datos. - -Supon que tienes varias mascotas en tu casa (tu pequeño "zoo") y que te gustaría llevar un control -de varios tipos de información sobre estos animales. Puedes hacerlo creando tablas que guarden tus -datos y cargandolas con la información deseada. Después puedes responder a diferentes series de -preguntas sobre tus animales extrayendo los datos de las tablas. Esta sección explica cómo hacer -todo esto: - -* Cómo crear una base de datos -* Cómo crear una tabla -* Cómo cargar los datos en la tabla -* Cómo extraer información de la tabla de varias maneras -* Cómo usar múltiples tablas - -La base de datos del zoo será simple (deliberadamente), pero no es difícil pensar en situaciones del -mundo real en las que se pudiera utilizar una base de datos similar. Por ejemplo, se podría usar una base -de datos como ésta en una granja para llevar un control del ganado, o por un veterinario para -controlar el historial de sus pacientes. - -Usa la sentencia SHOW para averiguar qué bases de datos existen actualmente en el servidor: - -mysql> SHOW DATABASES; -+----------+ -| Database | -+----------+ -| mysql | -| test | -+----------+ - -Probablemente, la lista de las bases de datos será diferente en tu máquina, pero las bases de datos -mysql y test es probable que se encuentren en esa lista. Se requiere la base de datos mysql pues -describe los privilegios de acceso de los usuarios. La base de datos test se ofrece como campo de -pruebas para que los usuarios prueben ahí sus teorías. - -Si la base de datos test existe, intenta acceder a ella: - -mysql> USE test -Database changed - -Observa que USE, como QUIT, no requiere un punto y coma. (Puedes terminar este tipo de sentencias -con un punto y coma si quieres, pero no es necesario.) La sentencia USE es especial en otro sentido, -también: debe ser tecleada en una sola línea. - -Puedes usar la base de datos test (si tienes acceso a ella) para los ejemplos que siguen, pero -cualquier cosa que crees en dicha base de datos puede ser eliminada por cualquiera que tenga acceso -a ella. Por esta razón, deberías pedir a tu administrador MySQL permisos para usar una base de datos -propia. Suponte que le quieres llamar zoo. El administrador necesitará ejecutar entonces la -siguiente orden: - -mysql> GRANT ALL ON zoo.* TO tu_nombre; - -donde tu_nombre es el nombre de usuario MySQL que tengas asignado. - -ejemplo: - -mysql> GRANT ALL ON zoo.* TO chessy@localhost; -Query OK, 0 rows affected (0.08 sec) - - -8.3.1 Creando y seleccionando una base de datos -================================================== - -Si el administrador creó la base de datos para tí cuando te configuró los permisos, puedes comenzar -a usarla. En otro caso, deberás crearla tú mismo: - -[chessy@bishito chessy]$ mysql -u chessy -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 6 to server version: 3.22.23b - -Type 'help' for help. - -mysql> CREATE DATABASE zoo; -Query OK, 1 row affected (0.02 sec) - - -Bajo Unix, los nombres de bases de datos son sensibles a las mayúsculas/minúsculas (a diferencia de -los comandos SQL), así que deberás referirte siempre a tu base de datos con el nombre zoo, no como -Zoo, ZOO o cualquier otra variante. Es es así también para las tablas. (Bajo Windows, esta -restricción desaparece, aunque deberías referirte a las bases de datos y a las tablas usando la -misma sintaxis en tus consultas.) - -Crear una base de datos no la selecciona para su uso, debes hacerlo explícitamente. Para hacer que -la base de datos zoo sea tu base de datos de trabajo, usa el comando: - -mysql> USE zoo; -Database changed - -Tu base de datos sólo necesita ser creada una vez, pero debes seleccionarla para usarla cada vez que -comiences una sesión mysql. Puedes hacerlo lanzando un comando USE como se ha visto en el -ejemplo. Alternativamente, puedes seleccionar la base de datos desde la línea de comandos cuando -lanzas mysql. Simplemente especifica su nombre tras los parámetros de conexión que hayas -escrito. Por ejemplo: - -shell> mysql -h host -u user -p zoo -Enter password: ******** - -Observa que en la línea de comandos del ejemplo, zoo no es tu password. Si quieres introducir tu -password como parámetro en la línea de comandos tras la opción -p, debes hacerlo sin teclear un -espacio en blanco intermedio (es decir, como -pmi_password, no como -p mi_password). Sin embargo, no -es recomendable poner tu password en la línea de comandos, pues hacerlo lo expone a posibles -miradas de otros usuarios conectados a tu máquina. - -8.3.2 Creando una tabla -============================ - -Crear una tabla es la parte fácil, pero hasta este momento está vacía, como te dice la orden SHOW -TABLES: - -mysql> SHOW TABLES; -Empty set (0.00 sec) - -La parte más dura consiste en decidir cual va a ser la estructura de tu base de datos: qué tablas -necesitarás, y qué columnas tendrá cada una de ellas. - -Querrás seguramente una tabla que contenga un registro por cada una de tus mascotas. Esta tabla -puede llamarse mascotas, y debería contener, como mínimo, el nombre de cada animal. Dado que el -nombre por sí solo no es muy interesante, la tabla debería contener otra información. Por ejemplo, -si más de una persona de tu familia tiene mascotas, probablemente quieras listar el propietario de -cada animal. También querrás guardar información descriptiva básica como puede ser la especie y el -sexo de cada mascota. - -¿Qué pasa con la edad? Podría ser de interés, pero no es una buena cosa a guardar en una base de -datos. La edad cambia a medida que pasa el tiempo, lo que significa que tendrás que actualizar tus -registros a menudo. En vez de eso, es mejor almacenar un valor fijo como la edad de -nacimiento. Después, cada vez que necesites saber la edad, puedes calcularla como la diferencia -entre la fecha actual y la fecha de nacimiento. MySQL ofrece funciones para realizar cálculos -aritméticos entre fechas, por lo que esto no es difícil. Almacenar la fecha de nacimiento en lugar -de la edad tiene también otras ventajas: - -* Puedes usar la base de datos para generar recordatorios de cumpleaños de mascotas. (Si crees que - este tipo de consulta es algo tonta, observa que es la misma pregunta que necesitarás hacer en el - contexto de una base de datos de un negocio para identificar clientes a los que pronto necesitarás - mandar un saludo por su cumpleaños, para ese toque personal asistido por ordenador :-) - -* Puedes calcular la edad en relación a fechas distintas a la fecha actual. Por ejemplo, si - almacenas la fecha de muerte en la base de datos, puedes calcular fácilmente lo vieja que era una - mascota cuando murió. - -Seguramente puedas pensar en otros tipos de información que sería útil en la tabla mascota, pero los -identificados hasta ahora son suficientes por el momento: nombre, propietarios, especie, sexo, fecha -de nacimiento y muerte. - -Usa una sentencia CREATE TABLE para especificar la estructura de tu tabla: - -mysql> CREATE TABLE mascota (nombre VARCHAR(20), propietario VARCHAR(20), - -> especie VARCHAR(20), sexo CHAR(1), nacimiento DATE, muerte DATE); - -VARCHAR es una buena elección para las columnas nombre, propietario y especie dado que los valores -de estas columnas variarán su longitud. Las longitudes de estas columnas no necesitan ser iguales, y -no necesitan ser 20. Puedes elegir cualquier longitud entre 1 y 255, cualquiera que te parezca -razonable. (Si realizar una elección pobre y resulta que más adelante necesitas un campo mayor, -MySQL ofrece una sentencia ALTER TABLE.) - -El sexo del animal puede ser representado en una variedad de formas, por ejemplo, "m" y "f", o -quizás "masculino" y "femenino". Es más simple usar un único caracter, "m" ó "f". - -El uso del tipo de datos DATE para las columnas de nacimiento y muerte es una opción bastante -obvia. - -Ahora que ya has creado una tabla, SHOW TABLES debería producir alguna salida: - -mysql> SHOW TABLES; -+---------------+ -| Tables in zoo | -+---------------+ -| mascota | -+---------------+ - -Para verificar que tu tabla fue creada de la forma que esperabas, usa una sentencia DESCRIBE: - -mysql> DESCRIBE mascota; -+-------------+-------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------------+-------------+------+-----+---------+-------+ -| nombre | varchar(20) | YES | | NULL | | -| propietario | varchar(20) | YES | | NULL | | -| especie | varchar(20) | YES | | NULL | | -| sexo | char(1) | YES | | NULL | | -| nacimiento | date | YES | | NULL | | -| muerte | date | YES | | NULL | | -+-------------+-------------+------+-----+---------+-------+ - -Puedes usar DESCRIBE en cualquier momento, por ejemplo, si olvidas los nombres de las columnas de tu -tabla o a qué tipo de datos pertenecen. - -8.3.3 Cargando datos en una tabla -===================================== - -Una vez creada tu tabla, necesitas poblarla. Las sentencias LOAD DATA e INSERT son útiles para esto. - -Suponte que tus registros de mascotas pueden ser descritos como se muestra más abajo. (Observa que -MySQL espera que las fechas se introduzcan en formato AAAA-MM-DD; esto podría ser diferente a lo que -estás acostumbrado.) - -nombre propietario especie sexo nacimiento muerte -Fluffy Harold gato f 1993-02-04 -Claws Gwen gato m 1994-03-17 -Buffy Harold perro f 1989-05-13 -Fang Benny perro m 1990-08-27 -Bowser Diane perro m 1998-08-31 1995-07-29 -Chirpy Gwen pájaro f 1998-09-11 -Whistler Gwen pájaro 1997-12-09 -Slim Benny serpiente m 1996-04-29 - -Dado que estás comenzando con una tabla vacía, una forma sencilla de poblarla consiste en crear un -fichero de texto conteniendo una fila para cada uno de tus animales, y después cargar el contenido del -fichero en la tabla con una sola sentencia. - -Puedes crear un fichero de texto "mascota.txt" conteniendo un registro por línea, con valores separados -por tabuladores, y dados en el orden en el que las columnas fueron listadas en la sentencia CREATE -TABLE. Para valores perdidos (como sexos desconocidos, o fechas de muerte de animales que aún están -vivos), puedes usar valores NULL. Para representar estos en tu fichero de texto, use \N. Por -ejemplo, el registro para Whistler el pájaro sería algo como esto (donde el espacio en blanco entre -valores es un simple caracter de tabulación): - -Whistler Gwen pájaro \N 1997-12-09 \N - -Para cargar el fichero de texto "mascota.txt" en la tabla mascota, usa este comando: - -mysql> LOAD DATA LOCAL INFILE "mascota.txt" INTO TABLE mascota; - -Puedes especificar el valor de separación de columna y el marcador de final de línea explícitamente -en la sentencia LOAD DATA si lo deseas, pero por defecto equivalen a TAB y LF (intro). Estos valores -por defecto son suficientes para que la sentencia que lee el fichero "mascota.txt" funcione -correctamente. - -Cuando quieras añadir nuevos registros uno a uno, la sentencia INSERT es muy útil. En su forma más -simple, ofreces valores para cada columna, en el orden en el que las columnas fueron listadas en la -sentencia CREATE TABLE. Supón que Diane consige un nuevo hamster llamado Puffball. Podrías añadir un -nuevo registro usando una sentencia INSERT como esta: - -mysql> INSERT INTO mascota - -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL); - -Observa que los valores string y fecha se espefican encerrados entre comillas. Observa también que, -con INSERT, puedes insertar NULL directamente para representar un valor perdido. No usamos \N como -hacíamos con LOAD DATA. - -De este ejemplo, deberías ser capaz de ver que hubiera dido mucho más costoso teclear todos los -datos necesarios en la tabla mascota con sentencias INSERT que hacerlo como lo hemos hecho con una -única sentencia LOAD DATA. - - -8.3.4 Extrayendo información de una tabla -=============================================== - - -La sentencia SELECT se usa para recabar información de una tabla. La forma -general de la sentencia es: - -SELECT qué_seleccionar -FROM de_qué_tabla -WHERE condiciones_a_satisfacer - -qué_seleccionar indica qué es lo que quieres seleccionar. Puede ser una lista de -columnas, o * para indicar "todas las columnas". de_qué_tabla indica la tabla de -la que quieres extraer datos. La claúsula WHERE es opcional. Si está presente, -condiciones_a_satisfacer especifica las codiciones que las filas deben cumplir -para estar presentes en el resultado de la selección. - -8.3.4.1 Seleccionando todos los datos -======================================= - -La forma más simplede SELECT recoge toda la información de una tabla: - -mysql> SELECT * FROM mascota; -+----------+-------------+-----------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+-----------+------+------------+------------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -| Fang | Benny | perro | m | 1990-08-27 | NULL | -| Bowser | Diane | perro | m | 1998-08-31 | 1995-07-29 | -| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -| Slim | Benny | serpiente | m | 1996-04-29 | NULL | -| Puffball | Diane | hamster | f | 1999-03-30 | NULL | -+----------+-------------+-----------+------+------------+------------+ - -Esta forma de SELECT es útil si quieres revisar tu tabla al completo, por -ejemplo, tras haberla cargado con tu conjunto inicial de datos. Como suele -suceder, la salida ya muestra un error en tu fichero de datos: Bowser ¡parece -haber nacido tras su muerte! Consultando tus papeles originales sobre el -pedigree del perro, descubres que la fecha correcta de nacimiento es 1989, no -1998. - -Existen al menos un par de maneras de arreglar esto: - -* Edita el fichero "mascota.txt" para corregir el error, después vacía la tabla - y vuelve a cargarla usando DELETE y LOAD DATA: - -mysql> DELETE from mascota; -mysql> LOAD DATA LOCAL INFILE "mascota.txt" INTO TABLE mascota; - -Sin embargo, si haces esto, debes re-escribir el registro para Puffball. - -* Arreglar sólo el registro erróneo con la sentencia UPDATE: - -mysql> UPDATE mascota SET nacimiento="1989-08-31" WHERE nombre="Bowser"; - -Como se muestra más arriba, es fácil recuperar el cuerpo de una data. Pero -típicamente no querrás hacer eso, en particular cuando la tabla sea muy -larga. Generalmente, estarás más interesado en responder a una pregunta en -particular, en cuyo caso deberás especificar algunas restricciones en la -información que deseas. Veamos algunas consultas de selección en términos de -preguntas sobre tus mascotas que se deben responder. - -8.3.4.2 Seleccionando filas en particular -============================================= - -Puedes seleccionar sólo filas en particular de tu tabla. Por ejemplo, si quieres -verificar el cambio que has realizado a la fecha de nacimiento de Bowser, -selecciona el registro de Bowser de la siguiente forma: - -mysql> SELECT * FROM mascota WHERE nombre="Bowser"; -+--------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+------------+ -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -+--------+-------------+---------+------+------------+------------+ - -La salida confirma que el año está correctamente registrado como 1989, no 1998. - -Las comparaciones de cadenas de texto son normalmente insensibles a las -mayúsculas/minúsculas, por lo que puedes especificar el nombre como "bowser", -"BOWSER", etc. El resultado de la consulta será el mismo. - -Puedes especificar condiciones en cualquier columna, no sólo el nombre. Por -ejemplo, si quisieras saber qué animales nacieron a partir de 1998, examina la -columna nacimiento: - -mysql> SELECT * FROM mascota WHERE nacimiento >= "1998-1-1"; -+----------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+---------+------+------------+--------+ -| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL | -| Puffball | Diane | hamster | f | 1999-03-30 | NULL | -+----------+-------------+---------+------+------------+--------+ - -Puedes combinar condiciones, por ejemplo, para localizar los perros hembra: - -mysql> SELECT * FROM mascota WHERE especie="perro" AND sexo="f"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -La consulta anterior usa el operador lógico AND. Existe también un operador OR: - -mysql> SELECT * FROM mascota WHERE especie="serpiente" OR especie="pájaro"; -+----------+-------------+-----------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+-----------+------+------------+--------+ -| Chirpy | Gwen | pájaro | f | 1998-09-11 | NULL | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -| Slim | Benny | serpiente | m | 1996-04-29 | NULL | -+----------+-------------+-----------+------+------------+--------+ - -AND y OR pueden entremezclarse. Si lo haces, es una buena idea el utilizar -paréntesis para indicar cómo deberían agruparse las condiciones: - -mysql> SELECT * FROM mascota WHERE (especie="gato" AND sexo="m") - -> OR (especie="perro" AND sexo="f"); -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -8.3.4.3 Seleccionando columnas en particular -=================================================== - -Si no quieres ver filas completas de tu tabla, simplemente nombra las columnas -en las cuales estás interesado, separadas por comas. Por ejemplo, si quieres -saber cuándo nacieron tus animales, selecciona las columnas nombre y nacimiento: - -mysql> SELECT nombre, nacimiento FROM mascota; -+----------+------------+ -| nombre | nacimiento | -+----------+------------+ -| Bluffy | 1993-02-04 | -| Claws | 1994-03-17 | -| Buffy | 1989-05-13 | -| Fang | 1990-08-27 | -| Bowser | 1989-08-31 | -| Chirpy | 1998-09-11 | -| Whistler | 1997-12-09 | -| Slim | 1996-04-29 | -| Puffball | 1999-03-30 | -+----------+------------+ - -Para averiguar quién posee mascotas, usa esta consulta: - -mysql> SELECT propietario FROM mascota; -+-------------+ -| propietario | -+-------------+ -| Harold | -| Gwen | -| Harold | -| Benny | -| Diane | -| Gwen | -| Gwen | -| Benny | -| Diane | -+-------------+ - -Sin embargo, observa que la consulta simplemente obtiene el campo propietario de -cada registro, y algunos de ellos aparecen más de una vez. Para minimizar la -salida, obtén cada registro de salida único una sola vez añadiendo la palabra -reservada DISTINCT: - -mysql> SELECT DISTINCT propietario FROM mascota; -+-------------+ -| propietario | -+-------------+ -| Benny | -| Diane | -| Gwen | -| Harold | -+-------------+ - -Puedes usar una claúsula WHERE para combinar la selección de filas con la -selección de columnas. Por ejemplo, para conseguir sólo las fechas de nacimiento -de perros y gatos, usa esta consulta: - -mysql> SELECT nombre, especie, nacimiento FROM mascota - -> WHERE especie = "perro" OR especie = "gato"; -+--------+---------+------------+ -| nombre | especie | nacimiento | -+--------+---------+------------+ -| Bluffy | gato | 1993-02-04 | -| Claws | gato | 1994-03-17 | -| Buffy | perro | 1989-05-13 | -| Fang | perro | 1990-08-27 | -| Bowser | perro | 1989-08-31 | -+--------+---------+------------+ - -8.3.4.4 Ordenando filas -=========================== - -Tal vez hayas observado que en los ejemplos anteriores las filas del resultado -se muestran sin ningún tipo de orden en particular. Sin embargo, a menudo es más -fácil de examinar la salida de una consulta cuando las filas están ordenadas de -alguna manera en particular. Para ordenar un resultado, usa la claúsula ORDER -BY. - -Aquí mostramos las fechas de nacimiento de los animales, ordenadas por fecha: - -mysql> SELECT nombre, nacimiento FROM mascota ORDER BY nacimiento; -+----------+------------+ -| nombre | nacimiento | -+----------+------------+ -| Buffy | 1989-05-13 | -| Bowser | 1989-08-31 | -| Fang | 1990-08-27 | -| Bluffy | 1993-02-04 | -| Claws | 1994-03-17 | -| Slim | 1996-04-29 | -| Whistler | 1997-12-09 | -| Chirpy | 1998-09-11 | -| Puffball | 1999-03-30 | -+----------+------------+ - -Para ordenar de forma inversa, añade la palabra reservada DESC (descendente) al -nombre de la columna por la que estás ordenando: - -mysql> SELECT nombre, nacimiento FROM mascota ORDER BY nacimiento DESC; -+----------+------------+ -| nombre | nacimiento | -+----------+------------+ -| Puffball | 1999-03-30 | -| Chirpy | 1998-09-11 | -| Whistler | 1997-12-09 | -| Slim | 1996-04-29 | -| Claws | 1994-03-17 | -| Bluffy | 1993-02-04 | -| Fang | 1990-08-27 | -| Bowser | 1989-08-31 | -| Buffy | 1989-05-13 | -+----------+------------+ - -Puedes ordenar por múltiples columnas. Por ejemplo, para ordenar por tipo de -animal, después por fecha de nacimiento dentro del mismo tipo de animal estando -los animales más jóvenes primero, usa la siguiente consulta: - -mysql> SELECT nombre, especie, nacimiento FROM mascota ORDER BY especie, nacimiento DESC; -+----------+-----------+------------+ -| nombre | especie | nacimiento | -+----------+-----------+------------+ -| Claws | gato | 1994-03-17 | -| Bluffy | gato | 1993-02-04 | -| Puffball | hamster | 1999-03-30 | -| Chirpy | pájaro | 1998-09-11 | -| Whistler | pájaro | 1997-12-09 | -| Fang | perro | 1990-08-27 | -| Bowser | perro | 1989-08-31 | -| Buffy | perro | 1989-05-13 | -| Slim | serpiente | 1996-04-29 | -+----------+-----------+------------+ - -Observa que la palabra reservada DESC se aplica sólo al nombre de columna que -preceda a la palabra reservada (nacimiento); los valores especie siguen siendo -ordenados en forma ascendente. - -8.3.4.5 Cálculos de fecha -============================ - -MySQL ofrece muchas funciones que puedes usar para realizar cálculos con fechas, -por ejemplo, para calcular edades o extraer partes de fechas. - -Para determinar cuantos años tiene cada una de tus mascotas, puedes calcular la -edad como la diferencia entre la fecha de nacimiento y la fecha actual. Puedes -hacerlo convirtiendo las dos fechas a dias, coge la diferencia, y divídela por -365 (el número de dias en un año): - -mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 FROM mascota; -+----------+------------------------------------------+ -| nombre | (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 | -+----------+------------------------------------------+ -| Bluffy | 6.94 | -| Claws | 5.83 | -| Buffy | 10.68 | -| Fang | 9.39 | -| Bowser | 10.38 | -| Chirpy | 1.34 | -| Whistler | 2.10 | -| Slim | 3.71 | -| Puffball | 0.79 | -+----------+------------------------------------------+ - -Aunque la consulta funcione, existen algunos puntos que podrían ser -mejorados. Primero, el resultado podría ser revisado más fácilmente si las filas -se presentaran ordenadas de alguna manera. Segundo, la cabecera de la columna -edad no es muy significativa. - -El primer problema puede ser solucionado añadiendo una cláusula ORDER BY nombre -para ordenar la salida por nombre. Para arreglar el tema del encabezamiento de -columna, puedes darle un nombre a dicha columna de tal forma que aparezca una -etiqueta diferente en la salida (esto es lo que se llama un alias de columna): - -mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad - -> FROM mascota ORDER BY nombre; -+----------+-------+ -| nombre | edad | -+----------+-------+ -| Bluffy | 6.94 | -| Bowser | 10.38 | -| Buffy | 10.68 | -| Chirpy | 1.34 | -| Claws | 5.83 | -| Fang | 9.39 | -| Puffball | 0.79 | -| Slim | 3.71 | -| Whistler | 2.10 | -+----------+-------+ - -Para ordenar la salida por edad en lugar de por nombre, puedes hacerlo usando -símplemente una cláusula ORDER BY diferente: - -mysql> select nombre, (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad - -> FROM mascota ORDER BY edad; -+----------+-------+ -| nombre | edad | -+----------+-------+ -| Puffball | 0.79 | -| Chirpy | 1.34 | -| Whistler | 2.10 | -| Slim | 3.71 | -| Claws | 5.83 | -| Bluffy | 6.94 | -| Fang | 9.39 | -| Bowser | 10.38 | -| Buffy | 10.68 | -+----------+-------+ - -Puede usarse una consulta similar para determinar la edad de la muerte para los -animales que hayan muerto. Puedes determinar qué animales son estos comprobando -si el valor muerte es NULL o no. Después, para aquellos que no tengan un valor -NULL, calcular la diferencia entre los valores muerte y nacimiento: - -mysql> select nombre, nacimiento, muerte, - -> (TO_DAYS(NOW())-TO_DAYS(nacimiento))/365 AS edad - -> FROM mascota WHERE muerte IS NOT NULL ORDER BY edad; -+--------+------------+------------+-------+ -| nombre | nacimiento | muerte | edad | -+--------+------------+------------+-------+ -| Bowser | 1989-08-31 | 1995-07-29 | 10.38 | -+--------+------------+------------+-------+ - -La consulta usa muerte IS NOT NULL en lugar de muerte != NULL dado que NULL es -un valor especial. Esto se explica más adelante. [Puedes consultar la sección -[Working with NULL] del manual de MySQL. - -¿Qué harías si quisieras saber qué animales cumplen años el mes que viene? Para -este tipo de cálculos, año y día son irrelevantes, simplemente querrás extraer -la parte mes de la columna nacimiento. MySQL ofrece muchas funciones de -extracción de parte-de-fecha, como YEAR(),MONTH() y DAY(). La función apropiada -para nuestro problema es MONTH(). Para ver cómo funciona, ejecuta una consulta -rápida que muestre el valor de la fecha de nacimiento y el mes de nacimiento -(MONTH(nacimiento)): - -mysql> SELECT nombre, nacimiento, MONTH(nacimiento) FROM mascota; -+----------+------------+-------------------+ -| nombre | nacimiento | MONTH(nacimiento) | -+----------+------------+-------------------+ -| Bluffy | 1993-02-04 | 2 | -| Claws | 1994-03-17 | 3 | -| Buffy | 1989-05-13 | 5 | -| Fang | 1990-08-27 | 8 | -| Bowser | 1989-08-31 | 8 | -| Chirpy | 1998-09-11 | 9 | -| Whistler | 1997-12-09 | 12 | -| Slim | 1996-04-29 | 4 | -| Puffball | 1999-03-30 | 3 | -+----------+------------+-------------------+ - -Buscar animales que hayan nacido en el mes próximo es también sencillo de -realizar. Suponte que Abril es el mes actual. Entonces el valor del mes es 4 y -lo que buscas son animales nacidos en Mayo (mes 5): - -mysql> SELECT nombre, nacimiento FROM mascota WHERE MONTH(nacimiento) = 5; -+--------+------------+ -| nombre | nacimiento | -+--------+------------+ -| Buffy | 1989-05-13 | -+--------+------------+ - -Existe una pequeña complicación si el mes actual es Diciembre, por supuesto. No -puedes añadir simplemente uno al número de mes (12) y buscar animales nacidos en -el mes 13, dado que no existe tal mes. En lugar de eso, debes buscar animales -nacidos en Enero (mes 1). - -Puedes escribir la consulta de tal forma que funcione independientemente del mes -en el que estemos. De esa forma no tendrás que usar un número de mes en -particular en la consulta. DATE_ADD() te permite añadir un intervalo de tiempo a -una fecha dada. Si añades un mes al valor de NOW(), y después extraes la parte -del mes con MONTH(), el resultado produce el mes del cumpleaños que buscamos: - - -mysql> select NOW(); -+---------------------+ -| NOW() | -+---------------------+ -| 2000-01-13 18:13:09 | -+---------------------+ - -mysql> SELECT nombre, nacimiento FROM mascota - -> WHERE MONTH(nacimiento) = MONTH(DATE_ADD(NOW(),INTERVAL 1 MONTH)); -+--------+------------+ -| nombre | nacimiento | -+--------+------------+ -| Bluffy | 1993-02-04 | -+--------+------------+ - -Una manera difente de conseguir los mismos resultados es añadir 1 al mes actual -para conseguir el mes siguiente (tras usar la función módulo (MOD) para -convertir el valor de mes actual en 0 si estamos en Diciembre (mes 12)): - -mysql> SELECT nombre, nacimiento FROM mascota - -> WHERE MONTH(nacimiento) = MOD(MONTH(NOW()),12) +1; -+--------+------------+ -| nombre | nacimiento | -+--------+------------+ -| Bluffy | 1993-02-04 | -+--------+------------+ - - -8.3.4.6 Trabajando con valores NULL -======================================= - -Los valores NULL pueden ser sorprenderte hasta que te acostumbras a -usarlos. Conceptualmente, NULL significa "valor perdido" o "valor desconocido" y -se trata de forma diferente que otros valores. Para realizar comparaciones -respecto a NULL, no puedes utilizar los operadores de comparación aritméticos -como =, < o != . Puedes realizar una demostración de esto, prueba la siguiente consulta: - -mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL; -+----------+-----------+----------+----------+ -| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL | -+----------+-----------+----------+----------+ -| NULL | NULL | NULL | NULL | -+----------+-----------+----------+----------+ - -Ciertamente, de estas comparaciones no se pueden extraer resultados -significativos. Para conseguirlo, usa los operadores IS NULL y IS NOT NULL: - -mysql> SELECT 1 IS NULL, 1 IS NOT NULL; -+-----------+---------------+ -| 1 IS NULL | 1 IS NOT NULL | -+-----------+---------------+ -| 0 | 1 | -+-----------+---------------+ - -En MySQL, 0 significa falso y 1 significa VERDADERO. - -Este tratamiento especial de NULL fue la causa de que en la sección anterior -fuera necesario determinar qué animales ya no vivían usando "muerte IS NOT NULL" -en lugar de "muerte != NULL". - -8.3.4.7 Asociación/Coincidencia de patrones (PATTERN MATCHING) -================================================================ - -MySQL ofrece las características de asociación de patrones estándar así como -una forma de coincidencia de patrones basadas en expresiones regulares -extendidas similares a las usadas por utilidades UNIX como vi, grep y sed. - -La asociación de patrones SQL te permite usar '_' para asociar cualquier -caracter simple, y '%' para asociar un número arbitrario de caracteres -(incluyendo cero caracteres). Los patrones SQL no toman en cuenta las -diferencias entre mayúsculas y minúsculas. Se muestran debajo algunos -ejemplos. Observa que no se utiliza = o != en el trabajo con patrones SQL; -utiliza en su lugar los operadores de comparación LIKE o NOT LIKE. - -Para buscar nombres que comienzan por "b": - -mysql> SELECT * FROM mascota WHERE nombre LIKE "b%"; -+--------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+------------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -+--------+-------------+---------+------+------------+------------+ - -Para buscar nombres que terminen por "fy": - -mysql> SELECT * FROM mascota WHERE nombre LIKE "%fy"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -Para buscar nombres que contengan una "w": - -mysql> SELECT * FROM mascota WHERE nombre LIKE "%w%"; -+----------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+---------+------+------------+------------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -+----------+-------------+---------+------+------------+------------+ - -Para buscar nombres de longitud cinco caracteres, usa el patrón "_" : - -mysql> SELECT * FROM mascota WHERE nombre LIKE "_____"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -El otro tipo de asociación de patrones ofrecido por MySQL utiliza expresiones -regulares extendidas. Cuando se realiza una comprobación buscando una coincidencia -para este tipo de patrón, se deben usar los operadores REGEXP y NOT REGEXP (o -RLIKE y NOT RLIKE, dado que son sinónimos). - -Algunas características de las expresiones regulares extendidas son: - -* `.' se asocia con cualquier caracter (pero sólo uno) - -* Una clase de caracteres `[...]' se asocia con culquier caracter contenido - dentro de los corchetes. Por ejemplo, `[abc]' se asocia con 'a', 'b' ó - -* 'c'. Para nombrar un rango de caracteres, usa un guión. `[a-z]' se asocia con -cualquier letra en minúscula, donde '[0-9]' se asocia con cualquier dígito. - -* '*' se asocia con 0 o más instancias de lo que preceda al asterisco. Por - ejemplo,'a*' coincide con cualquier número de a's,'[0-9]*' se asocia con - cualquier número de dígitos, y '.*' se asocia con cualquier cosa. - -* Las expresiones regulares son sensibles a las mayúsculas/minúsculas, pero - puedes utilizar una clase caracter para asociar ambos casos si los deseas. Por - ejemplo, '[aA]' coincide tanto con la letra a minúscula como con la letra A - mayúscula y '[a-zA-Z]' coincide con cualquier letra en cualquier modo - mayúscula/minúscula. - -* El patrón se asocia si ocurre en cualquier lugar dentro del valor a ser - probado (los patrones SQL coinciden sólo si se asocian con el valor - completo). - -* Para anclar un patrón de manera que se busque la coincidencia bien al comienzo - o bien al final del valor a ser comprobado, usa '^' al comienzo del patrón o - '$' al final del patrón, respectivamente. - -Para demostrar cómo funcionan las expresiones regulares, las consultas LIKE -mostradas antes son reescritas debajo para usar REGEXP: - -Para buscar nombres que comiencen por "b", usa '^' para buscar la coincidencia -al comienzo del nombre y '[bB]' para buscar la asociación tanto con la b -minúscula como con la b mayúscula: - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "^[bB]"; -+--------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+------------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -+--------+-------------+---------+------+------------+------------+ - -Para buscar nombres que terminen por "fy", usa "$" para buscar la coincidencia -al final del nombre: - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "fy$"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Bluffy | Harold | gato | f | 1993-02-04 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -Para buscar nombres que contengan una "w", utiliza "[wW]" para buscar la -asociación tanto en mayúsculas como minúsculas: - - mysql> SELECT * FROM mascota WHERE nombre REGEXP "[wW]"; -+----------+-------------+---------+------+------------+------------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+----------+-------------+---------+------+------------+------------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Bowser | Diane | perro | m | 1989-08-31 | 1995-07-29 | -| Whistler | Gwen | pájaro | NULL | 1997-12-09 | NULL | -+----------+-------------+---------+------+------------+------------+ - -Dado que un patrón de una expresión regular se asocia si ocurre en cualquier -lugar del valor, no es necesario poner un caracter comodín en ningún lado del -patrón para conseguir que se asocie con el valor completo como harías si usaras -un patrón SQL. - -Para buscar nombres conteniendo exactamente cinco caracteres, usa "^" y "$" para -asociar el comienzo y el final de un nombre, y cinco instancias de "." entre -ellos: - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "^.....$"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - -También podrías haber escrito la consulta anterior usando el operador '{n}' -"repetir n veces": - -mysql> SELECT * FROM mascota WHERE nombre REGEXP "^.{5}$"; -+--------+-------------+---------+------+------------+--------+ -| nombre | propietario | especie | sexo | nacimiento | muerte | -+--------+-------------+---------+------+------------+--------+ -| Claws | Gwen | gato | m | 1994-03-17 | NULL | -| Buffy | Harold | perro | f | 1989-05-13 | NULL | -+--------+-------------+---------+------+------------+--------+ - - -8.3.4.8 Contando filas -======================= - -Las bases de datos son usadas a menudo para responder a la pregunta, "¿cuantas -veces aparece un determinado tipo de datos en una tabla?". Por ejemplo, podrías -querer saber cuántas mascotas tienes, o cuántas mascotas tiene cada propietario, -o podrías querer realizar varios tipos de censos respecto a tus animales. - -Contar el número total de animales que tienes es lo mismo que preguntar -"¿cuántas filas hay en la tabla mascota?", dado que hay sólo una fila por -mascota. La función COUNT() cuenta el número de resultados no-NULL , así pues, -la consulta a realizar para contar el número de animales tiene la siguiente forma: - -mysql> SELECT COUNT(*) FROM mascota; -+----------+ -| COUNT(*) | -+----------+ -| 9 | -+----------+ - -Antes, conseguiste los nombres de las personas que poseen una mascota. Puedes -usar COUNT() para averiguar cuántas mascotas tiene cada propietario: - -mysql> SELECT propietario, COUNT(*) FROM mascota GROUP BY propietario; -+-------------+----------+ -| propietario | COUNT(*) | -+-------------+----------+ -| Benny | 2 | -| Diane | 2 | -| Gwen | 3 | -| Harold | 2 | -+-------------+----------+ - -Observa el uso de GROUP BY para agrupar todos los registros de cada -propietario. Si no lo hubiéramos puesto, todo lo que conseguirias sería un -mensaje de error: - -mysql> SELECT propietario, COUNT(propietario) FROM mascota; -ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP -columns is illegal if there is no GROUP BY clause - -COUNT() y GROUP BY son útiles para la caracterización de tus datos de varias -formas. Los siguientes ejemplos muestran difentes maneras para realizar -operaciones de censo animal. - -Número de animales por especies: - -mysql> SELECT especie, COUNT(*) FROM mascota GROUP BY especie; -+-----------+----------+ -| especie | COUNT(*) | -+-----------+----------+ -| gato | 2 | -| hamster | 1 | -| pájaro | 2 | -| perro | 3 | -| serpiente | 1 | -+-----------+----------+ - -Número de animales por sexo: - -mysql> SELECT sexo , COUNT(*) FROM mascota GROUP BY sexo; -+------+----------+ -| sexo | COUNT(*) | -+------+----------+ -| NULL | 1 | -| f | 4 | -| m | 4 | -+------+----------+ - -(En este resultado, NULL indica "sexo desconocido") - -El número de animales por combinación de especies y sexo: - -mysql> SELECT especie , sexo, COUNT(*) FROM mascota GROUP BY especie, sexo; -+-----------+------+----------+ -| especie | sexo | COUNT(*) | -+-----------+------+----------+ -| gato | f | 1 | -| gato | m | 1 | -| hamster | f | 1 | -| pájaro | NULL | 1 | -| pájaro | f | 1 | -| perro | f | 1 | -| perro | m | 2 | -| serpiente | m | 1 | -+-----------+------+----------+ - -No necesitas recuperar una tabla completa cuando uses COUNT(). Por ejemplo, la -consulta anterior, cuando se realiza sólo sobre perros y gatos, se escribe así: - -mysql> SELECT especie , sexo, COUNT(*) FROM mascota - -> WHERE especie = "perro" OR especie = "gato" - -> GROUP BY especie, sexo; -+---------+------+----------+ -| especie | sexo | COUNT(*) | -+---------+------+----------+ -| gato | f | 1 | -| gato | m | 1 | -| perro | f | 1 | -| perro | m | 2 | -+---------+------+----------+ - -O, si quieres conocer el número de animales por sexo sólo para animales de sexo -conocido: - -mysql> SELECT especie , sexo, COUNT(*) FROM mascota - -> WHERE sexo IS NOT NULL - -> GROUP BY especie, sexo; -+-----------+------+----------+ -| especie | sexo | COUNT(*) | -+-----------+------+----------+ -| gato | f | 1 | -| gato | m | 1 | -| hamster | f | 1 | -| pájaro | f | 1 | -| perro | f | 1 | -| perro | m | 2 | -| serpiente | m | 1 | -+-----------+------+----------+ - - -8.3.5 Usando más de una tabla -=============================== - -La tabla mascota guarda datos sobre las mascotas que posees. Si quieres guardar -otra información sobre ellos, como eventos en sus vidas, visitas al veterinario -o cuándo han tenido hermanos, necesitas otra tabla. ¿Cómo debería ser esta otra -tabla? - -* Deberá contener el nombre de la mascota de tal forma que pudieras saber a qué - animal corresponde cada evento almacenado en la misma. - -* Necesitará una fecha para conocer cuándo ocurrió el evento. - -* Necesitará un campo para describir el evento - -* Si quieres ser capaz de categorizar los eventos, sería útil tener un campo de - tipo evento. - -Dadas estas consideraciones, la sentencia CREATE TABLE para la tabla "evento" se -parecería a esto: - -mysql> CREATE TABLE evento (nombre VARCHAR(20), fecha DATE, - -> tipo VARCHAR(15), anotación VARCHAR(255)); - -Como ocurría con la tabla mascota, es más fácil cargar los registros iniciales -creando un fichero de texto delimitado por tabuladores conteniendo la -información: - -Fluffy 1995-05-15 parto 4 cachorros, 3 hembras, 1 macho -Buffy 1993-06-23 parto 5 cachorros, 2 hembras, 3 machos -Buffy 1994-06-19 parto 3 cachorros, 3 hembras -Chirpy 1999-03-21 veterinario necesitó enderezamiento de pico -Slim 1997-08-03 veterinario costilla rota -Bowser 1991-10-12 perrera -Fang 1991-10-12 perrera -Fang 1998-08-28 cumpleaños Se le regala un nuevo juguete de goma -Claws 1998-03-17 cumpleaños Se le regala un nuevo collar de pulgas -Whistler 1998-12-09 cumpleaños Primer cumpleaños - - -Carga los registros así: - -mysql> LOAD DATA LOCAL INFILE "evento.txt" INTO TABLE evento; - -Basándote en lo que has aprendido de las consultas que has ejecutado em la tabla -mascota, deberías ser capaz de realizar recuperaciones de datos en los registros -de la tabla "evento"; los principios son los mismos. ¿Pero qué hacer cuando la -tabla evento no sea suficiente por sí sola de responder a cuestiones que -podrías llegar a realizar? - -Supón que quisieras averiguar las edades de cada mascota al tener cachorros. La -tabla evento indica cuándo ha ocurrido esto, pero para calcular la edad de la -madre, necesitas su fecha de nacimiento. Dado que eso está almacenado en la -tabla mascota, necesitas ambas tablas para la consulta: - -mysql> SELECT mascota.nombre , (TO_DAYS(fecha) - TO_DAYS(nacimiento))/365 AS edad, anotación - -> FROM mascota, evento - -> WHERE mascota.nombre = evento.nombre AND tipo = "parto"; -+--------+------+----------------------------------+ -| nombre | edad | anotación | -+--------+------+----------------------------------+ -| Fluffy | 2.27 | 4 cachorros, 3 hembras, 1 macho | -| Buffy | 4.12 | 5 cachorros, 2 hembras, 3 machos | -| Buffy | 5.10 | 3 cachorros, 3 hembras | -+--------+------+----------------------------------+ - -Existen varios puntos que anotar sobre esta consulta: - -* La cláusula FROM lista dos tablas dado que la consulta necesita extraer - información de las dos. - -* Cuando se combina la información de múltiples tablas, necesitas especificar - cómo pueden ser asociados los registros de una tabla con los registros de la - otra. Esto es fácil dado que ambas tienen una columna nombre (N.T.: nombre es - una clave extranjera). La consulta usa la cláusula WHERE para combinar los - registros de las dos tablas basándose en los valores de nombre. - -* Dado que la columna nombre aparece en ambas tablas, debes ser específico sobre - a qué tabla te refieres cuando estés hablando de esa columna. Esto se realiza - poniendo el nombre de la tabla como prefijo de la columna. - -No necesitas tener dos tablas diferentes para realizar un join. En algunas -ocasiones es útil realizar un join de una tabla consigo misma, si quieres comparar -registros de una tabla con otros registros en la misma tabla. Por ejemplo, para buscar -parejas de sexos entre tus mascotas, puedes enlazar la tabla mascota consigo -mismo para emaparejar machos y hembras de las mismas especies: - -mysql> SELECT p1.nombre, p1.sexo, p2.nombre, p2.sexo, p1.especie - -> FROM mascota AS p1, mascota AS p2 - -> WHERE p1.especie = p2.especie AND p1.sexo = "f" AND p2.sexo = "m"; -+--------+------+--------+------+---------+ -| nombre | sexo | nombre | sexo | especie | -+--------+------+--------+------+---------+ -| Fluffy | f | Claws | m | gato | -| Buffy | f | Fang | m | perro | -| Buffy | f | Bowser | m | perro | -+--------+------+--------+------+---------+ - - -En esta consulta, especificamos un par de alias para el nombre de las tablas -y ser capaces así de referirnos a las columnas y saber en todo momento a qué -instancia de qué tabla se asocia cada referencia de columna. - -8.4 Obtener información sobre bases de datos y tablas -================================================================ - -¿Qué ocurre si olvidas el nombre de una base de datos o de una tabla, o cuál es -la estructura de una tabla dada (ejm. : ¿cómo se llaman sus columnas?) MySQL -soluciona este problema a través de numerosas sentencias que ofrecen información -sobre las bases de datos y las tablas que soporta. - -Ya hemos visto SHOW DATABASES, que lista las bases de datos gestionadas por el -servidor. Para averiguar qué base de datos está actualmente seleccionada, usa la -función DATABASE(): - -mysql> SELECT DATABASE(); -+------------+ -| DATABASE() | -+------------+ -| zoo | -+------------+ - -Si aún no has seleccionado ninguna base de datos, el resultado estará en blanco. - -Para averiguar qué tablas contiene la base de datos actual (por ejemplo, cuando -no estás seguro sobre el nombre de una tabla), usa este comando: - -mysql> SHOW TABLES; -+---------------+ -| Tables in zoo | -+---------------+ -| evento | -| mascota | -+---------------+ - -Si quieres averiguar la estructura de una tabla, el comando DESCRIBE te será -útil; muestra información sobre cada columna de una tabla: - -mysql> DESCRIBE mascota; -+-------------+-------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------------+-------------+------+-----+---------+-------+ -| nombre | varchar(20) | YES | | NULL | | -| propietario | varchar(20) | YES | | NULL | | -| especie | varchar(20) | YES | | NULL | | -| sexo | char(1) | YES | | NULL | | -| nacimiento | date | YES | | NULL | | -| muerte | date | YES | | NULL | | -+-------------+-------------+------+-----+---------+-------+ - -Field indica el nombre de la columna, Type es el tipo de datos para la columna, -Null indica si la columna puede contener o no valores NULL, Key indica si la -columna está indexada o no, y Default especifica el valor por defecto para la -columna. - -Si tienes índices en una tabla, SHOW INDEX FROM nombre_tabla te mostrará -información sobre ellos. - -8.5 Usando mysql en modo batch -================================= - -En las secciones previas, hemos usado mysql interactivamente para introducir -consultas y observar los resultados. También puedes ejecutar mysql en modo -batch. Para realizarlo, escribe los comandos que quieras ejecutar en un fichero, -después pídele a mysql que lea su entrada desde el fichero: - -shell> mysql < fichero-batch - -(N.T.: en ocasiones se traduce como fichero por lotes) - -Si necesitas especificar parámetros de conexión en la línea de comandos, el -comando podría parecerse a esto: - -shell> mysql -h host -u user -p < fichero-batch -Enter password: ******** - -Cuando usas MySQL de esta manera, estás creando un fichero script (de guión), y -después ejecutando el script. - -¿Por qué usar un script? He aquí algunas razones: - -* Si ejecutas una consulta repetidamente (digamos, cada día o cada semana), el - construir un script con esta consulta te permite evitar volver a teclearla - cada vez que la ejecutes. - -* Puedes generar nuevas consultas a partir de consultas ya existentes similares - simplemente copiando y editando los ficheros script. - -* El modo batch puede ser también muy útil cuando estés desarrollando una - consulta, particularmente para comandos multi-línea o múltiples secuencias de - comandos de múltiples sentencias. Si cometes un error, no necesitas reescribir - todo. Símplemente edita el script para corregir el error, y después pídele a - mysql que lo vuelva a ejecutar. - -* Si tienes una consulta que produce resultados muy largos, puedes usar un - paginador para filtrar esta salida en lugar de ver cómo se desplaza fuera del - alcance de tu pantalla: - - -shell> mysql < fichero_batch | more - -* Puedes redirigir la salida a un fichero para un procesamiento posterior: - -shell> mysql < fichero_batch > mysql.out - -* Puedes distribuir tu script a otras personas para que puedan ejecutar también - tus comandos. - -* Algunas situaciones no permiten un uso interactivo, por ejemplo, cuando - ejecutas una consulta como una tarea de cron. (N.T.: cron es un comando UNIX - que sirve para planificar y ejecutar comandos UNIX en el tiempo). En este - caso, debes usar el procesamiento por lotes. - -El formato de salida por defecto es diferente (más conciso) cuando ejecutas -mysql en modo batch que cuando lo usas de manera interactiva. Por ejemplo, la -salida de SELECT DISTINCT especie FROM mascota es la siguiente cuando se -ejecuta de manera interactiva: - -mysql> SELECT DISTINCT especie FROM mascota; -+-----------+ -| especie | -+-----------+ -| gato | -| hamster | -| pájaro | -| perro | -| serpiente | -+-----------+ - -Y la siguiente si se ejecuta en modo batch: - -especie -gato -hamster -pájaro -perro -serpiente - -Si quieres obtener el formato de salida del modo interactivo también en modo -batch, usa mysql -t. Para redirigir a salida estándar los comandos que se están -ejecutando, usa mysql -vvv. - - - -8.6 Consultas del proyecto gemelos - -En Analytikerna y Lentus, hemos estado realizando el trabajo de campo y sistemas para -un gran proyecto de investigación. Este proyecto es una colaboración entre el Instituto de -Medicina Medioambiental en el Karolinska Institutet Stockholm y la Sección en Investigación -Clínica en Envejecimiento y Psicología en la Universidad del Sur de California. - -El proyecto consistió en una parte de selección donde todos los gemelos en Suecia mayores de -65 años eran entrevistados por teléfono. Los gemelos que reunían ciertos criterios pasaban a la -siguiente fase. En esta fase posterior, los gemelos que querían participar eran visitados por -un equipo doctor/enfermera. Algunos de los exámenes incluían exámenes físicos y neuropsicológicos, -pruebas de laboratorio, neuroimágenes, valoración del estado psicológico, y recopilación de la -historia familiar. Además, se recogieron datos sobre los factores de riesgo médicos y -medioambientales. - -Puede encontrarse más información sobre los estudios de gemelos en : - - http://www.imm.ki.se/TWIN/TWINUKW.HTM - -La última parte del proyecto se administra con un interfaz web escrito usando Perl y MySQL. -Cada noche, todos los datos de las entrevistas son movidos a una base de datos MySQL. - -8.6.1 Buscar todos los gemelos no-distribuidos - -La siguiente consulta se usa para determinar quién pasa a la segunda parte del proyecto: - - select - concat(p1.id, p1.tvab) + 0 as tvid, - concat(p1.christian_name, " ", p1.surname) as Name, - p1.postal_code as Code, - p1.city as City, - pg.abrev as Area, - if(td.participation = "Aborted", "A", " ") as A, - p1.dead as dead1, - l.event as event1, - td.suspect as tsuspect1, - id.suspect as isuspect1, - td.severe as tsevere1, - id.severe as isevere1, - p2.dead as dead2, - l2.event as event2, - h2.nurse as nurse2, - h2.doctor as doctor2, - td2.suspect as tsuspect2, - id2.suspect as isuspect2, - td2.severe as tsevere2, - id2.severe as isevere2, - l.finish_date - from - twin_project as tp - /* For Twin 1 */ - left join twin_data as td on tp.id = td.id and tp.tvab = td.tvab - left join informant_data as id on tp.id = id.id and tp.tvab = id.tvab - left join harmony as h on tp.id = h.id and tp.tvab = h.tvab - left join lentus as l on tp.id = l.id and tp.tvab = l.tvab - /* For Twin 2 */ - left join twin_data as td2 on p2.id = td2.id and p2.tvab = td2.tvab left join informant_data as id2 on p2.id = id2.id and p2.tvab = id2.tvab - left join harmony as h2 on p2.id = h2.id and p2.tvab = h2.tvab - left join lentus as l2 on p2.id = l2.id and p2.tvab = l2.tvab, - person_data as p1, - person_data as p2, - postal_groups as pg - where - /* p1 gets main twin and p2 gets his/her twin. */ - /* ptvab is a field inverted from tvab */ - p1.id = tp.id and p1.tvab = tp.tvab and - p2.id = p1.id and p2.ptvab = p1.tvab and - /* Just the sceening survey */ - tp.survey_no = 5 and - /* Skip if partner died before 65 but allow emigration (dead=9) */ - (p2.dead = 0 or p2.dead = 9 or - (p2.dead = 1 and - (p2.death_date = 0 or - (((to_days(p2.death_date) - to_days(p2.birthday)) / 365) - >= 65)))) - and - ( - /* Twin is suspect */ - (td.future_contact = 'Yes' and td.suspect = 2) or - /* Twin is suspect - Informant is Blessed */ - (td.future_contact = 'Yes' and td.suspect = 1 and id.suspect = 1) o - /* No twin - Informant is Blessed */ - (ISNULL(td.suspect) and id.suspect = 1 and id.future_contact = 'Yes') or - /* Twin broken off - Informant is Blessed */ - (td.participation = 'Aborted' - and id.suspect = 1 and id.future_contact = 'Yes') or - /* Twin broken off - No inform - Have partner */ - (td.participation = 'Aborted' and ISNULL(id.suspect) and p2.dead = 0)) - and - l.event = 'Finished' - /* Get at area code */ - and substring(p1.postal_code, 1, 2) = pg.code - /* Not already distributed */ - and (h.nurse is NULL or h.nurse=00 or h.doctor=00) - /* Has not refused or been aborted */ - and not (h.status = 'Refused' or h.status = 'Aborted' - or h.status = 'Died' or h.status = 'Other') - order by - tvid; - -Algunas explicaciones: - -`concat(p1.id, p1.tvab) + 0 as tvid' - Queremos ordenar por la concatenación de `id' y `tvab' en orden numérico. - Añadiendo `0' al resultado provocamos que *MySQL* trate el resultado como - un número. - -column `id' - Esto identifica un par de gemelos. Es una clave en todas las tablas. - -column `tvab' - Esto identifica un gemelo de una pareja. Tiene un valor de `1' ó `2' - -column `ptvab' - Esto es la inversa de `tvab'. Cuando `tvab' es `1' esto es `2', y - vice versa. Esto existe para ahorrarnos teclear y para hacer más fácil - la optimización de la consulta a MySQL. - - -Esta consulta demuestra, entre otras cosas, cómo realizar búsquedas en una tabla -enlazada con la misma tabla a través de un join (p1 y p2). En el ejemplo, ésto -se usa para comprobar cuándo un gemelo de una pareja murió antes de cumplir 65. -En caso afirmativo, la fila no es devuelta. - -Todo lo anterior existe en todas las tablas con información relacionada con los gemelos. -Tenemos una clave tanto en id, tvab (todas las tablas) como en id,ptvab (person_data) para -construir consultas más rápidas. - -En nuestra máquina de producción (una UltraSPARC 200MHz), esta consulta devuelve alrededor -de 150-200 filas y tarda menos de un segundo. - -El número actual de registros en las tablas usadas arriba: - -Tabla Filas - -person_data 71074 -lentus 5291 -twin_project 5286 -twin_data 2012 -informant_data 663 -harmony 381 -postal_groups 100 - - - - -8.6.2 Mostrar una tabla con el estado de la pareja de gemelos. - -Cada entrevista finaliza con un código de estado llamado event. La consulta mostrada -debajo se usa para imprimir una tabla sobre todas las parejas de gemelos combinadas por evento. -Esto indica en cuántas parejas ambos gemelos han finalizado, en cuántas parejas -ha finalizado un gemelo y el otro se rechazó, etc. - - select - t1.event, - t2.event, - count(*) - from - lentus as t1, - lentus as t2, - twin_project as tp - where - /* We are looking at one pair at a time */ - t1.id = tp.id - and t1.tvab=tp.tvab - and t1.id = t2.id - /* Just the sceening survey */ - and tp.survey_no = 5 - /* This makes each pair only appear once */ - and t1.tvab='1' and t2.tvab='2' - group by - t1.event, t2.event; - - - diff --git a/Docs/bk.txt b/Docs/bk.txt deleted file mode 100644 index b9274901653..00000000000 --- a/Docs/bk.txt +++ /dev/null @@ -1,65 +0,0 @@ -Mail by sasha, should be rewritten as a HOWTO sometimes -vva added point C) for Windows-project ------------ - -I have set up a repository with BitKeeper on work. There are still some things -about it that I would like to learn, but I have gotten far enough with it to -replace CVS functionality were are currently using, so let's just go ahead and -get started on it. Please follow the instructions below (make sure to save the -message for future reference): - -a) http://www.bitmover.com/download - user: beta - password: get bitkeeper - - get the version appropriate for your platform - download it to a temp -directory, chmod +x and then run it. You will have to tell it which directory -to install, for consistency, let's use /usr/local/bin - -b) we will take advantage of bk capablity of working with master/slave -repositories. The master will be on work.mysql.com, the slaves will be our -individual machines. The master repository has already been set up on work, so -you will need just to set up a slave repository on your machine: - - mkdir bk - cd bk - bk clone yourusername@work:/home/bk/mysql mysql - cd mysql - bk -r edit - -Now you have the entire source tree in the current directory. Let's compile it: - - BUILD/compile-pentium-debug - -C) Windows project. - - Compile Linux-project (see points above) - - run VC++Files/prepare - - make repository accessible for Windows (using samba) - - open VC++Files/mysql.dsw in Microsoft Visual Stidio (5.0 or above) - -After you edit a file, you need to check it in using bk citool or bk ci -filename. Note that ci is different than commit - you ci a file, but you commit -a change set. This is a very nice concept - instead of thinking of each -individual file as CVS does, bk groups the changes you are making and allows you -to document what you actually did between the commits as a whole, rather than -just commenting on every file. When you commit, bk will ask you to comment on -the change set. - -Commit is done just to your local repository. To make your changes global, you -will need to run bk push. Be careful with that - it is a good idea to run bk -push -l -n first too see what you are just about to push to the master -repository. - -When somebody does a push, you will be getting a email ( I will set this up to -day). You will then need to execute bk pull to update your sources. If there are -any conflicts, bk will force you to resolve them by asking you questions on what -to do with each conflict. - -To learn more about bk, use bk helptool - I will be doing this a lot in the next -couple of days :-) If you find bugs or have questions/feature -suggestions/comments for developers, feel free to e-mail dev@bitmover.com . -Their developers, and especially the president of the company Larry McVoy really -like MySQL and are very anxious to help us. Make sure it is obvious that you -work for MySQL, of course. And, of course, do not bug them with little things -that you can figure out on your own or with my help - they were nice to offer us -support, but we should not abuse it.
\ No newline at end of file diff --git a/Docs/internals.texi b/Docs/internals.texi deleted file mode 100644 index e1462531270..00000000000 --- a/Docs/internals.texi +++ /dev/null @@ -1,101 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c -@c ********************************************************* -@c -@c This is a dummy placeholder file for internals.texi in the -@c MySQL source trees. -@c -@c Note, that the internals documentation has been moved into a separate -@c BitKeeper source tree named "mysqldoc" - do not attempt to edit this -@c file! All changes to internals.texi should be done in the mysqldoc tree. -@c -@c See http://www.mysql.com/doc/en/Installing_source_tree.html -@c for information about how to work with BitKeeper source trees. -@c -@c This dummy file is being replaced with the actual file from the -@c mysqldoc tree when building the official source distribution. -@c -@c Please e-mail docs@mysql.com for more information or if -@c you are interested in doing a translation. -@c -@c ********************************************************* -@c -@c %**start of header - -@setfilename internals.info - -@c We want the types in the same index -@syncodeindex tp fn - -@ifclear tex-debug -@c This removes the black squares in the right margin -@finalout -@end ifclear - -@c Set background for HTML -@set _body_tags BGCOLOR=silver TEXT=#000000 LINK=#101090 VLINK=#7030B0 -@c Set some style elements for the manual in HTML form. 'suggested' -@c natural language colors: aqua, black, blue, fuchsia, gray, green, -@c lime, maroon, navy, olive, purple, red, silver, teal, white, and -@c yellow. From Steeve Buehler <ahr@YogElements.com> -@set _extra_head <style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style> - -@settitle Dummy MySQL internals documentation for version @value{mysql_version}. - -@c We want single-sided heading format, with chapters on new pages. To -@c get double-sided format change 'on' below to 'odd' -@setchapternewpage on - -@paragraphindent 0 - -@c %**end of header - -@ifinfo -@format -START-INFO-DIR-ENTRY -* mysql: (mysql). MySQL documentation. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@titlepage -@sp 10 -@center @titlefont{Empty placeholder for the MySQL Internals Documentation} -@sp 10 -@center Copyright @copyright{} 1995-2003 MySQL AB -@c blank page after title page makes page 1 be a page front. -@c also makes the back of the title page blank. -@page -@end titlepage - -@c This should be added. The HTML conversion also needs a MySQL version -@c number somewhere. - -@iftex -@c change this to double if you want formatting for double-sided -@c printing -@headings single - -@oddheading @thischapter @| @| @thispage -@evenheading @thispage @| @| MySQL Internal Reference for Version @value{mysql_version} - -@end iftex - -@node Top, (dir), (dir), (dir) - -@ifinfo -This is an empty placeholder file for the MySQL internals documentation. - -The real version of this file is now maintained in a separate BitKeeper -source tree! Please see -@url{http://www.mysql.com/doc/en/Installing_source_tree.html} for more info -on how to work with BitKeeper. - -Please do not attempt to edit this file directly - use the one in the -@code{mysqldoc} BK tree instead. - -This file will be replaced with the current @code{internals.texi} when -building the official source distribution. -@end ifinfo - -@bye diff --git a/Docs/linuxthreads.txt b/Docs/linuxthreads.txt index 30270125c0d..552415fe794 100644 --- a/Docs/linuxthreads.txt +++ b/Docs/linuxthreads.txt @@ -1,3 +1,5 @@ +[Note this information is obsolete] + Notes on compiling glibc for the standard MySQL binary: - make sure you have gcc 2.95 and gmake 3.79 or newer diff --git a/Docs/my_sys.txt b/Docs/my_sys.txt deleted file mode 100644 index 85ffc13ecb4..00000000000 --- a/Docs/my_sys.txt +++ /dev/null @@ -1,140 +0,0 @@ -Functions i mysys: (For flags se my_sys.h) - - int my_copy _A((const char *from,const char *to,myf MyFlags)); - - Copy file - - int my_delete _A((const char *name,myf MyFlags)); - - Delete file - - int my_getwd _A((string buf,uint size,myf MyFlags)); - int my_setwd _A((const char *dir,myf MyFlags)); - - Get and set working directory - - string my_tempnam _A((const char *pfx,myf MyFlags)); - - Make a uniq temp file name by using dir and adding something after - pfx to make name uniq. Name is made by adding a uniq 6 length-string - and TMP_EXT after pfx. - Returns pointer to malloced area for filename. Should be freed by - free(). - - File my_open _A((const char *FileName,int Flags,myf MyFlags)); - File my_create _A((const char *FileName,int CreateFlags, - int AccsesFlags, myf MyFlags)); - int my_close _A((File Filedes,myf MyFlags)); - uint my_read _A((File Filedes,byte *Buffer,uint Count,myf MyFlags)); - uint my_write _A((File Filedes,const byte *Buffer,uint Count, - myf MyFlags)); - ulong my_seek _A((File fd,ulong pos,int whence,myf MyFlags)); - ulong my_tell _A((File fd,myf MyFlags)); - - Use instead of open,open-with-create-flag, close read and write - to get automatic error-messages (flag: MYF_WME) and only have - to test for != 0 if error (flag: MY_NABP). - - int my_rename _A((const char *from,const char *to,myf MyFlags)); - - Rename file - - FILE *my_fopen _A((const char *FileName,int Flags,myf MyFlags)); - FILE *my_fdopen _A((File Filedes,int Flags,myf MyFlags)); - int my_fclose _A((FILE *fd,myf MyFlags)); - uint my_fread _A((FILE *stream,byte *Buffer,uint Count,myf MyFlags)); - uint my_fwrite _A((FILE *stream,const byte *Buffer,uint Count, - myf MyFlags)); - ulong my_fseek _A((FILE *stream,ulong pos,int whence,myf MyFlags)); - ulong my_ftell _A((FILE *stream,myf MyFlags)); - - Same read-interface for streams as for files - - gptr _mymalloc _A((uint uSize,const char *sFile, - uint uLine, myf MyFlag)); - gptr _myrealloc _A((string pPtr,uint uSize,const char *sFile, - uint uLine, myf MyFlag)); - void _myfree _A((gptr pPtr,const char *sFile,uint uLine)); - int _sanity _A((const char *sFile,unsigned int uLine)); - gptr _myget_copy_of_memory _A((const byte *from,uint length, - const char *sFile, uint uLine, - myf MyFlag)); - - malloc(size,myflag) is mapped to this functions if not compiled - with -DSAFEMALLOC - - void TERMINATE _A((void)); - - Writes malloc-info on stdout if compiled with -DSAFEMALLOC. - - int my_chsize _A((File fd,ulong newlength,myf MyFlags)); - - Change size of file - - void my_error _D((int nr,myf MyFlags, ...)); - - Writes message using error number (se mysys/errors.h) on - stdout or curses if MYSYS_PROGRAM_USES_CURSES() is called. - - void my_message _A((const char *str,myf MyFlags)); - - Writes message-string on - stdout or curses if MYSYS_PROGRAM_USES_CURSES() is called. - - void my_init _A((void )); - - Start each program (in main) with this. - void my_end _A((int infoflag)); - - Gives info about program. - - If infoflag & MY_CHECK_ERROR prints if some files are left open - - If infoflag & MY_GIVE_INFO prints timing info and malloc info - about prog. - - int my_redel _A((const char *from, const char *to, int MyFlags)); - - Delete from before rename of to to from. Copyes state from old - file to new file. If MY_COPY_TIME is set sets old time. - - int my_copystat _A((const char *from, const char *to, int MyFlags)); - - Copye state from old file to new file. - If MY_COPY_TIME is set sets copy also time. - - string my_filename _A((File fd)); - - Give filename of open file. - - int dirname _A((string to,const char *name)); - - Copy name of directory from filename. - - int test_if_hard_path _A((const char *dir_name)); - - Test if dirname is a hard path (Starts from root) - - void convert_dirname _A((string name)); - - Convert dirname acording to system. - - In MSDOS changes all caracters to capitals and changes '/' to - '\' - string fn_ext _A((const char *name)); - - Returns pointer to extension in filename - string fn_format _A((string to,const char *name,const char *dsk, - const char *form,int flag)); - format a filename with replace of library and extension and - converts between different systems. - params to and name may be identicall - function dosn't change name if name != to - Flag may be: 1 force replace filnames library with 'dsk' - 2 force replace extension with 'form' */ - 4 force Unpack filename (replace ~ with home) - 8 Pack filename as short as possibly for output to - user. - All open requests should allways use at least: - "open(fn_format(temp_buffe,name,"","",4),...)" to unpack home and - convert filename to system-form. - - string fn_same _A((string toname,const char *name,int flag)); - - Copys directory and extension from name to toname if neaded. - copy can be forced by same flags that in fn_format. - - int wild_compare _A((const char *str,const char *wildstr)); - - Compare if str matches wildstr. Wildstr can contain "*" and "?" - as match-characters. - Returns 0 if match. - - void get_date _A((string to,int timeflag)); - - Get current date in a form ready for printing. - - void soundex _A((string out_pntr, string in_pntr)) - - Makes in_pntr to a 5 chars long string. All words that sounds - alike have the same string. - - int init_key_cache _A((ulong use_mem,ulong leave_this_much_mem)); - - Use cacheing of keys in MISAM, PISAM, and ISAM. - KEY_CACHE_SIZE is a good size. - - Remember to lock databases for optimal cacheing - - void end_key_cache _A((void)); - - End key-cacheing. diff --git a/Docs/net_doc.txt b/Docs/net_doc.txt deleted file mode 100644 index 4f21383c06d..00000000000 --- a/Docs/net_doc.txt +++ /dev/null @@ -1,943 +0,0 @@ - MySQL Client/Server Protocol Documentation - - - -Introduction ------------- - - -This paper has the objective of presenting a through description -of the client/server protocol that is embodied in MySQL. Particularly, -this paper aims to document and describe: - -- manner in which MySQL server detects client connection requests and - creates connection -- manner in which MySQL client C API call connects to server - the - entire protocol of sending/receiving data by MySQL server and C API - code -- manner in which queries are sent by client C API calls to server -- manner in which query results are sent by server -- manner in which query results are resolved by server -- sending and receiving of error messages - - -This paper does not have the goal or describing nor documenting other -related MySQL issues, like usage of thread libraries, MySQL standard -library set, MySQL strings library and other MySQL specific libraries, -type definitions and utilities. - -Issues that are covered by this paper are contained in the following -source code files: - -- libmysql/net.c and sql/net_serv.cc, the two being identical -- client/libmysql.c (not entire file is covered) -- include/mysql_com.h -- include/mysql.h -- sql/mysqld.cc (not entire file is covered) -- sql/net_pkg.cc -- sql/sql_base.cc (not entire file is covered) -- sql/sql_select.cc (not entire file is covered) -- sql/sql_parse.cc (not entire file is covered) - -Note: libmysql/net.c was client/net.c prior to MySQL 3.23.11. -sql/net_serv.cc was sql/net_serv.c prior to MySQL 3.23.16. - -Beside this introduction this paper presents basic definitions, -constants, structures and global variables, all related functions in -server and in C API. Textual description of the entire protocol -functioning is described in the last chapter of this paper. - - -Constants, structures and global variables ------------------------------------------- - -This chapter will describe all constants, structures and -global variables relevant to client/server protocol. - -Constants - -They are important as they contain default values, the ones -that are valid if options are not set in any other way. Beside that -MySQL source code does not contain a single non-defined constant in -its code. This description of constants does not include -configuration and conditional compilation #defines. - -NAME_LEN - field and table name length, current value 64 -HOSTNAME_LENGTH - length of the hostname, current value 64 -USERNAME_LENGTH - username length, current value 16 -MYSQL_PORT - default TCP/IP port number, current value 3306 -MYSQL_UNIX_ADDR - full path of the default Unix socket file, current value - "/tmp/mysql.sock" -MYSQL_NAMEDPIPE - full path of the default NT pipe file, current value - "MySQL" -MYSQL_SERVICENAME - name of the MySQL Service on NT, current value "MySQL" -NET_HEADER_SIZE - size of the network header, when no - compression is used, current value 4 -COMP_HEADER_SIZE - additional size of network header when - compression is used, current value 3 - -What follows are set of constants, defined in source only, which -define capabilities of the client built with that version of C -API. Simply, when some new feature is added in client, that client -feature is defined, so that server can detect what capabilities a -client program has. - -CLIENT_LONG_PASSWORD - client supports new more secure passwords -CLIENT_LONG_FLAG - client uses longer flags -CLIENT_CONNECT_WITH_DB - client can specify db on connect -CLIENT_COMPRESS - client can use compression protocol -CLIENT_ODBC - ODBC client -CLIENT_LOCAL_FILES - client can use LOAD DATA INFILE LOCAL -CLIENT_IGNORE_SPACE - client can ignore spaces before '(' -CLIENT_CHANGE_USER - client supports the mysql_change_user() - -What follows are other constants, pertaining to timeouts and sizes - -MYSQL_ERRMSG_SIZE - maximum size of error message string, current value 200 -NET_READ_TIMEOUT - read timeout, current value 30 seconds -NET_WRITE_TIMEOUT - write timeout, current value 60 seconds -NET_WAIT_TIMEOUT - wait for new query timeout, current value 8*60*60 - seconds, that is, 8 hours -packet_error - value returned in case of socket errors, current - value -1 -TES_BLOCKING - used in debug mode for setting up blocking testing -RETRY COUNT - number of times network read and write will be - retried, current value 1 - -There are also error messages for last_errno, which depict system -errors, and are used on the server only. - -ER_NET_PACKAGE_TOO_LARGE - packet is larger than max_allowed_packet -ER_OUT_OF_RESOURCES - practically no more memory -ER_NET_ERROR_ON_WRITE - error in writing to NT Named Pipe -ER_NET_WRITE_INTERRUPTED - some signal or interrupt happened - during write -ER_NET_READ_ERROR_FROM_PIPE - error in reading from NT Named Pipe -ER_NET_FCNTL_ERROR - error in trying to set fcntl on socket - descriptor -ER_NET_PACKETS_OUT_OF_ORDER - packet numbers on client and - server side differ -ER_NET_UNCOMPRESS_ERROR - error in uncompress of compressed packet - - - Structs and enums - - -struct NET - -This is MySQL's network handle structure, used in all client/server -read/write functions. On the server, it is initialized and preserved -in each thread. On the client, it is a part of the MYSQL struct, -which is the MySQL handle used in all C API functions. This structure -uniquely identifies a connection, either on the server or client -side. It consists of the following fields: - - Vio* vio - explained above - HANDLE hPipe - Handle for NT Named Pipe file - my_socket fd - file descriptor used for both TCP/IP socket and - Unix socket file - int fcntl - contains info on fcntl options used on fd. Mostly - used for saving info if blocking is used or not - unsigned char *buff - network buffer used for storing data for - reading from/writing to socket - unsigned char,*buff_end - points to the end of buff - unsigned char *write_pos - present writing position in buff - unsigned char *read_pos - present reading position in buff. This - pointer is used for reading data after - calling my_net_read function and function - that are just its wrappers - char last_error[MYSQL_ERRMSG_SIZE] - holds last error message - unsigned int last_errno - holds last error code of the network - protocol. Its possible values are listed - in above constants. It is used only on - the server side - unsigned int max_packet - holds current value of buff size - unsigned int timeout - stores read timeout value for that connection - unsigned int pkt_nr - stores the value of the current packet number in - a batch of packets. Used primarily for - detection of protocol errors resulting in a - mismatch - my_bool error - holds either 1 or 0 depending on the error condition - my_bool return_errno - if its value != 0 then there is an error in - protocol mismatch between client and server - my_bool compress - if true compression is used in the protocol - unsigned long remain_in_buf - used only in reading compressed packets. - Explained in my_net_read - unsigned long length - used only for storing the length of the read - packet. Explained in my_net_read - unsigned long buf_length - used only in reading compressed packets. - Explained in my_net_read - unsigned long where_b - used only in reading compressed packets. - Explained in my_net_read - short int more - used for reporting in mysql_list_processes - char save_char - used in reading compressed packets for saving chars - in order to make zero-delimited strings. Explained - in my_net_read - -A few typedefs will be defined for easier understanding of the text that -follows. - -typedef char **MYSQL_ROW - data containing one row of values - -typedef unsigned int MYSQL_FIELD_OFFSET - offset in bytes of the current field - -typedef MYSQL_ROWS *MYSQL_ROW_OFFSET - offset in bytes of the current row - -struct MYSQL_FIELD - contains all info on the attributes of a -specific column in a result set, plus info on lengths of the column in -a result set. This struct is tagged as st_mysql_field. This structure -consists of the following fields: - - char *name - name of column - char *table - table of column if column was a field and not - an expression or constant - char *def - default value (set by mysql_list_fields) - enum enum_field_types type - see above - unsigned int length - width of column in the current row - unsigned int max_length - maximum width of that column in entire - result set - unsigned int flags - corresponding to Extra in DESCRIBE - unsigned int decimals - number of decimals in field - - -struct MYSQL_ROWS - a node for each row in the single linked -list forming entire result set. This struct is tagged as -st_mysql_rows, and has two fields: - - struct st_mysql_rows *next - pointer to the next one - MYSQL_ROW data - see above - - -struct MYSQL_DATA - contains all rows from result set. It is -tagged as st_mysql_data and has following fields: - - my_ulonglong rows - how many rows - unsigned int fields - how many columns - MYSQL_ROWS *data - see above. This is the first node of the linked list - MEM_ROOT alloc - MEM_ROOT is MySQL memory allocation structure, and - this field is used to store all fields and rows. - - -struct st_mysql_options - holds various client options, and -contains following fields: - - unsigned int connect_timeout - time in seconds for connection - unsigned int client_flag - used to hold client capabilities - my_bool compress - boolean for compression - my_bool named_pipe - is Named Pipe used? (on NT) - unsigned int port - what TCP port is used - char *host - host to connect to - char *init_command - command to be executed upon connection - char *user - account name on MySQL server - char *password - password for the above - char *unix_socket - full path for Unix socket file - char *db - default database - char *my_cnf_file - optional configuration file - char *my_cnf_group - optional header for options - - -struct MYSQL - MySQL client's handle. Required for any -operation issued from client to server. Tagged as st_mysql and having -following fields: - - NET net - see above - char *host - host on which MySQL server is running - char *user - MySQL username - char *passwd - password for above - char *unix_socket- full path of Unix socket file - char *server_version - version of the server - char *host_info - contains info on how has connection been - established, TCP port, socket or Named Pipe - char *info - used to store information on the query results, - like number of rows affected etc. - char *db - current database - unsigned int port - TCP port in use - unsigned int client_flag - client capabilities - unsigned int server_capabilities - server capabilities - unsigned int protocol_version - version of the protocol - unsigned int field_count - used for storing number of fields - immediately upon execution of a query, - but before fetching rows - unsigned long thread_id - server thread to which this connection - is attached - my_ulonglong affected_rows - used for storing number of rows - immediately upon execution of a query, - but before fetching rows - my_ulonglong insert_id - fetching LAST_INSERT_ID() through client C API - my_ulonglong extra_info - used by mysqlshow -unsigned long packet_length - saving size of the first packet upon - execution of a query - enum mysql_status status - see above - MYSQL_FIELD *fields - see above - MEM_ROOT field_alloc - memory used for storing previous field (fields) - my_bool free_me - boolean that flags if MYSQL was allocated in mysql_init - my_bool reconnect - used to automatically reconnect - struct st_mysql_options options - see above - char scramble_buff[9] - key for scrambling password before sending it - to server - - -struct MYSQL_RES - tagged as st_mysql_res and used to store -entire result set from a single query. Contains following fields: - - my_ulonglong row_count - number of rows - unsigned int field_count - number of columns - unsigned int current_field - cursor for fetching fields - MYSQL_FIELD *fields - see above - MYSQL_DATA *data - see above, and used in buffered reads, that is, - mysql_store_result only - MYSQL_ROWS *data_cursor - pointing to the field of above "data" - MEM_ROOT field_alloc - memory allocation for above "fields" - MYSQL_ROW row - used for storing row by row in unbuffered reads, - that is, in mysql_use_result - MYSQL_ROW current_row - cursor to the current row for buffered reads - unsigned long *lengths - column lengths of current row - MYSQL *handle - see above, used in unbuffered reads, that is, in - mysql_use_result - my_bool eof - used by mysql_fetch_row as a marker for end of data - - - - Global variables - - -unsigned long max_allowed_packet - maximum allowable value of network - buffer. Default value - 1MB - -unsigned long net_buffer_length - default, starting value of network - buffer - 8KB - -unsigned long bytes_sent - total number of bytes written since startup - of the server - -unsigned long bytes_received - total number of bytes read since startup - of the server - - -Synopsis of the basic client/server protocol --------------------------------------------- - -Purpose of this chapter is to provide a complete picture of -the basic client/server protocol implemented in MySQL. It was felt -it is necessary after writing descriptions for all of the functions -involved in basic protocol. There are at present 11 functions -involved, with several structures, many constants etc, which are all -described in detail. But as a forest could not be seen from the trees, -so the concept of the protocol could not be deciphered easily from a -thorough documentation of minutiae. - -Although the concept of the protocol was not changed with the -introduction of vio system, embodied in violate.cc source file and VIO -system, the introduction of these has changed the code substantially. Before -VIO was introduced, functions for reading from/writing to network -connection had to deal with various network standards. So, these functions -depended on whether TCP port or Unix socket file or NT Named Pipe file is -used. This is all changed now and single vio_ functions are called, while -all this diversity is covered by vio_ functions. - -In MySQL a specific buffered network input/output transport model -has been implemented. Although each operating system may have its -own buffering for network connections, MySQL has added its own -buffering model. This same for each of the three transport protocol -types that are used in MySQL client/server communications, which -are TCP/IP sockets (on all systems), Unix socket files on Unix and -Unix-like operating systems and Named Pipe files on NT. Although -TCP/IP sockets are omnipresent, the latter two types have been added -for local connections. Those two connection types can be used in -local mode only, that is, when both client and server reside on the -same host, and are introduced because they enable better speeds for -local connections. This is especially useful for WWW type of -applications. Startup options of MySQL server allow that either -TCP/IP sockets or local connection (OS dependent) can be disallowed. - -In order to implement buffered input/output, MySQL allocates a -buffer. The starting size of this buffer is determined by the value -of the global variable net_buffer_length, which can be changed at -MySQL server startup. This is, as explained, only the startup length -of MySQL network buffer. Because a single item that has to be read -or written can be larger than that value, MySQL will increase buffer -size as long as that size reaches value of the global variable -max_allowed_packet, which is also settable at server startup. Maximum -value of this variable is limited by the way MySQL stores/reads -sizes of packets to be sent/read, which means by the way MySQL -formats packages. - -Basically each packet consists of two parts, a header and data. In -the case when compression is not used, header consists of 4 bytes -of which 3 contain the length of the packet to be sent and one holds -the packet number. When compression is used there are onother 3 -bytes which store the size of uncompressed data. Because of the way -MySQL packs length into 3 bytes, plus due to the usage of some -special values in the most significant byte, maximum size of -max_allowed_packet is limited to 24MB at present. So, if compression -is not used, at first 4 bytes are written to the buffer and then -data itself. As MySQL buffers I/O logical packets are packet together -until packets fill up entire size of the buffer. That size no less -than net_buffer_size, but no greater than max_allowed_packet. So, -actual writing to the network is done when this buffer is filled -up. As frequently sequence of buffers make a logical unit, like a -result set, then at the end of sending data, even if buffer is not -full, data is written (flushed to the connection) with a call of -the net_flush function. So that no single packet can be larger than -this value, checks are made throughout the code to make sure that -no single field or command could exceed that value. - -In order to maintain coherency in consecutive packets, each packet -is numbered and their number stored as a part of a header, as -explained above. Packets start with 0, so whenever a logical packet -is written, that number is incremented. On the other side when -packets are read, value that is fetched is compared with the value -stored and if there is no mismatch that value is incremented, too. -Packet number is reset on the client side when unwanted connections -are removed from the connection and on the server side when a new -command has been started. - - -So, before writing, the buffer contains a sequence of logical -packets, consisting of header plus data consecutively. If compression -is used, packet numbers are not stored in each header of the logical -packets, but a whole buffer, or a part of it if flushing is done, -containing one or more logical packets are compressed. In that case -a new larger header, is formed, and all logical packets contained -in the buffer are compressed together. This way only one packet is -formed which makes several logical packets, which improves both -speed and compression ratio. On the other side, when this large -compressed packet is read, it is first uncompressed, and then logical -packets are sent, one by one, to the calling functions. - - -All this functionality is described in detail in the following -chapter. It does not contain functions that form logical packets, or -that read and write to connections but also functions that are used -for initialization, clearing of connections. There are functions at -higher level dealing with sending fields, rows, establishing -connections, sending commands, but those are not explained in the -following chapter. - - -Functions utilized in client/server protocol --------------------------------------------- - -First of all, functions are described that are involved in preparing, -reading, or writing data over TCP port, Unix socket file, or named -pipe, and functions directly related to those. All of these functions -are used both in server and client. Server and client specific code -segments are documented in each function description. - -Each MySQL function checks for errors in memory allocation and -freeing, as well as in every OS call, like the one dealing with -files and sockets, and for errors in indigenous MySQL function -calls. This is expected, but has to be said here so as not to repeat -it in every function description. - -Older versions of MySQL have utilized the following macros for -reading from or writing to a socket. - -raw_net_read - calls OS function recv function that reads N bytes -from a socket into a buffer. Number of bytes read is returned. - -raw_net_write - calls OS function send to write N bytes from a -buffer to socket. Number of bytes written is returned. - -These macros are replaced with VIO (Virtual I/O) functions. - - -Function name: my_net_init - -Parameters: struct NET *, enum_net_type, struct Vio - -Return value: 1 for error, 0 for success - -Function purpose: To initialize properly all NET fields, - allocate memory and set socket options - -Function description - -First of all, buff field of NET struct is allocated to the size of -net_buffer_length, and on failure function exits with 0. All fields -in NET are set to their default or starting values. As net_buffer_length -and max_allowed_packet are configurable, max_allowed_packet is set -equal to net_buffer_length if the latter one is greater. max_packet -is set for that NET to net_buffer_length, and buff_end points to -buff end. vio field is set to the second parameter. If it is a -real connection, which is the case when second parameter is not -null, then fd field is set by calling vio_fd function. read_pos and -write_pos to buff, while remaining integers are set to 0. If function -is run on the MySQL server on Unix and server is started in a test -mode that would require testing of blocking, then vio_blocking -function is called. Last, fast throughput mode is set by a call to -vio_fastsend function. - - -Function name: net_end - -Parameters: struct NET * - -Return value: void - -Function purpose: To release memory allocated to buff - - - -Function name: net_realloc (private, static function) - -Parameters: struct NET, ulong (unsigned long) - -Return value: 1 for error, 0 for success - -Function purpose: To change memory allocated to buff - -Function description - -New length of buff field of NET struct is passed as second parameter. -It is first checked versus max_allowed_packet and if greater, an -error is returned. New length is aligned to 4096-byte boundary. Then, -buff is reallocated, buff_end, max_packet, and write_pas reset to -the same values as in my_net_init. - - - -Function name: net_clear (used on client side only) - -Parameters: struct NET * - -Return value: void - -Function purpose: To read unread packets - -Function description - -This function is used on client side only, and is executed -only if a program is not started in test mode. This function reads -unread packets without processing them. First, non-blocking mode is -set on systems that do not have non-blocking mode defined. This is -performed by checking the mode with vio_is_blocking function. and -setting non-blocking mode by vio_blocking function. If this operation -was successful, then packets are read by vio_read function, to which -vio field of NET is passed together with buff and max_packet field -values. field of the same struct at a length of max_packet. If -blocking was active before reading is performed, blocking is set with -vio_blocking function. After reading has been performed, pkt_nr is -reset to 0 and write_pos reset to buff. In order to clarify some -matters non-blocking mode enables executing program to dissociate from -a connection, so that error in connection would not hang entire -program or its thread. - -Function name: net_flush - -Parameters: struct NET * - -Return value: 1 for error, 0 for success - -Function purpose: To write remaining bytes in buff to socket - -Function description - -net_real_write (described below) is performed is write_pos -differs from buff, both being fields of the only parameter. write_pos -is reset to buff. This function has to be used, as MySQL uses buffered -writes (as will be explained more in the function net_write_buff). - - -Function name: my_net_write - -Parameters: struct NET *, const char *, ulong - -Return value: 1 for error, 0 for success - -Function purpose: Write a logical packet in the second parameter - of third parameter length - -Function description - -The purpose of this function is to prepare a logical packet such -that entire content of data, pointed to by second parameter and in -length of third parameter is sent to the other side. In case of -server, it is used for sending result sets, and in case of client -it is used for sending local data. This function foremost prepares -a header for the packet. Normally, the header consists of 4 bytes, -of which the first 3 bytes contain the length of the packet, thereby -limiting a maximum allowable length of a packet to 16MB, while the -fourth byte contains the packet number, which is used when one large -packet has to be divided into sequence of packets. This way each -sub-packet gets its number which should be matched on the other -side. When compression is used another three bytes are added to -packet header, thus packet header is in that case increased to 7 -bytes. Additional three bytes are used to save the length of -compressed data. As in connection that uses compression option, -code packs packets together,, a header prepared by this function -is later not used in writing to / reading from network, but only -to distinguish logical packets within a buffered read operation. - - -This function, first stores the value of the third parameter into the -first 3 bytes of local char variable of NET_HEADER_SIZE size by usage -of function int3store. Then, at this point, if compression is not -used, pkt_nr is increased, and its value stored in the last byte of -the said local char[] variable. If compression is used, 0 is stored in -both values. Then those four bytes are sent to other side by the usage -of the function net_write_buff(to be explained later on), and if -successful, entire packet in second parameter of the length described -in third parameter is sent by the usage of the same function. - - -Function name: net_write_command - -Parameters: struct NET *, char, const char *, ulong - -Return value: 1 for error, 0 for success - -Function purpose: Send a command with a packet as in previous function - -Function description - -This function is very similar to the previous one. The only -difference is that first packet is enlarged by one byte, so that the -command precedes the packet to be sent. This is implemented by -increasing first packet by one byte, which contains a command code. As -command codes do not use the range of values that are used by character -sets, so when the other side receives a packet, first byte after -header contains a command code. This function is used by client for -sending all commands and queries, and by server in connection process -and for sending errors. - - -Function name: net_write_buff (private, static function) - -Parameters: struct NET *, const char *, uint - -Return value: 1 for error, 0 for success - -Function purpose: To write a packet of any size by cutting it -and using next function for writing it - -Function description - -This function was created after compression feature has been -added to MySQL. This function supposes that packets have already been -properly formatted, regarding packet header etc. The principal reason for -this function to exist is because a packet that is sent by client or -server does not have to be less than max_packet. So this function -first calculates how much data has been left in a buff, by getting a -difference between buff_end and write_pos and storing it to local -variable left_length. Then a loop is run as long as the length to be -sent is greater than length of left bytes (left_length). In a loop -data from second parameter is copied to buff at write_pos, as much as -it can be, that is, by left_length. Then net_real_write function is called -(see below) with NET, buff, and max_packet parameters. This function -is the lowest level function that writes data over established -connection. In the loop, write_pos is reset to buff, the pointer to data -(second parameter) is moved by the amount of data sent (left_length), -length of data to be sent (third parameter) is decreased by the amount -sent (left_length) and left_length is reset to max_packet value, which -ends the loop. This logic was necessary, as there could have been some -data yet unsent (write_pos != buf), while data to be sent could be as -large as necessary, thus requiring many loops. At the end of function, -remaining data in second parameter are copied to buff at write_pos, by -the remaining length of data to be sent (third parameter). So, in the -next call of this function remaining data will be sent, as buff is -used in the call to net_real_write. It is very important to note that if -a packet to be sent is less than the number of bytes that are still -available in buff, then there will be no writing over network, but -only logical packets will be added one after another. This will -accelerate network traffic, plus if compression is used, the -expected compression rate would be higher. That is why server or -client functions that sends data uses at the end of data net_flush -function described above. - - -Function name: net_real_write - -Parameters: struct NET *, const char *, ulong - -Return value: 1 for error, 0 for success - -Function purpose: To write data to a socket or pipe, with -compression if used - -Function description - -First, more field is set to 2, to enable reporting in -mysql_list_processes. Then if compression is enabled on that -connection, a new local buffer (variable b) is initialized to the -length of total header (normal header + compression header) and if no -memory is available, an error is returned. This buffer (b) is used for -holding the final, compressed packet to be written over the -connection. Furthermore in compression initialization, second -parameter at length of third parameter is copied to the local buffer -b, and MySQL's wrapped zlib's compression function is run at total -header offset of the local buffer. Please, do note that this function -does not test effectiveness of compression. If compression is turned -on in some connection, it is used all of the time. Also, it is very -important to be cognizant of the fact that this algorithm makes -possible that a single compressed packet contains several logical -packets. In this way compression rate is increased and network -throughput is increased as well. However, this algorithm has -consequences on the other side, that reads compressed packet, which -is covered in my_net_read function. After compression is done, the full -compression header is properly formed with the packet number, -compressed and uncompressed lengths. At the end of compression code, -third parameter is increased by total header length, as the original -header is not used (see above), and second parameter, pointer to data, -is set to point to local buffer b, in order that the further flow of -function is independent of compression. If a function is executed -on server side, a thread alarm initialized and if non-blocking is -active set at NET_WRITE_TIMEOUT. Two local (char *) pointers are -initialized, pos at beginning of second parameter, and end at end of -data. Then the loop is run as long as all data is written, which means -as long as pos != end. First vio_write function is called, with -parameters of vio field, pos and size of data (end - pos). Number of -bytes written over connection is saved in local variable (length). If -error is returned local bool variable (interrupted) is set according -to the return value of the vio_should_retry called with vio field as -parameter. This bool variable indicates whether writing was -interrupted in some way or not. - -Further, error from vio_write is treated differently on Unix versus -other OS's (Win32 or OS/2). On Unix an alarm is set if one is not -in use, no bytes have been written and there has been no interruption. -Also, in that case, if connection is not in blocking mode, a sub-loop -is run as long as blocking is not set with vio_blocking function. -Within the loop another run of above vio_write is run based on -return value of vio_is_retry function, provided number of repeated -writes is less than RETRY_COUNT. If that is not the case, error -field of struct NET is set to 1 and function exits. At the exit -of sub-loop number of reruns already executed is reset to zero and -another run of above vio_write function is attempted. If the function -is run on Win32 and OS/2, and in the case that function flow was -not interrupted and thread alarm is not in use, again the main loop -is continued until pos != end. In the case that this function is -executed on thread safe client program, a communication flow is -tested on EINTR, caused by context switching, by use of vio_errno -function, in which case the loop is continued. At the end of -processing of the error from vio_write, error field of struct NET -is set, and if on server last_errno field is set to -ER_NET_WRITE_INTERRUPTED in the case that local bool variable -(interrupted) is true or to ER_NET_ERROR_ON_WRITE. Before the end -of loop, in order to make possible evaluation of the loop condition, -pos is increased by the value written in last iteration (length). -Also global variable bytes_sent is increased by the same value, for -status purposes. At the end of the functions more fields is reset, -in case of compression, compression buffer (b) memory is released -and if thread is still in use, it is ended and blocking state is -reset to its original state, and function returns error is all bytes -are not written. - - - -Function name: my_real_read (private, static function) - -Parameters: struct NET *, ulong * - -Return value: length of bytes read - -Function purpose: low level network connection read function - -Function description - -This function has made as a separate one when compression was -introduced in MySQL client/server protocol . It contains basic, low -level network reading functionality, while all dealings with -compressed packets are handled in next function. Compression in this -function is only handled in as much to unfold the length of uncompressed -data. First blocking state of connection is saved in local bool -variable net_blocking, and field more is set 1 for detailed reporting -in mysqld_list_processes. A new thread alarm is initialized, in order -to enable read timeout handling, and if on server and a connection can -block a program, the alarm is set at a value of timeout field. Local -pointer is set to the position of the next logical packet, with its -header skipped, which is at field where_b offset from buff. Next, a -two time run code is entered. A loop is run exactly two times because -first time number of bytes to be fetched (remain) are set to the -header size, which is different when compression is used or not used -on the connection. After first fetch has been done, number of packets -that will be received in second iteration is well known, as fetched -header contains the size of packet, packet number, and in the case of -compression, the size of the uncompressed packet. Then, as long as there are -bytes to read the loop is entered with first reading data from network -connection with vio_read function, called with parameters of field -vio, current position and remaining number of bytes, which value is -hold by local variable (remain) initialized at the value of header size, -which differs if compression is used. Number of bytes read are -returned in local length variable. If error is returned local bool -variable (interrupted) is set according to the return value of the -vio_should_retry called with vio field as parameter. This bool -variable indicates whether reading was interrupted in some way or not. - -Further, error from vio_read is treated differently on Unix versus -other OS's (Win32 or OS/2). On Unix an alarm is set if one is not -in use, no bytes have been read and there has been no interruption. -Also, in that case, if connection is not in blocking mode, a sub-loop -is run as long as blocking is not set with vio_blocking function. -Within the loop another run of above vio_read is run based on return -value of vio_is_retry function, provided number of repeated writes -is less than RETRY_COUNT. If that is not the case, error field of -struct NET is set to 1 and function exits. At the exit of sub-loop -number of reruns already executed is reset to zero and another run -of above vio_read function is attempted. If the function is run on -Win32 and OS/2, and in the case that function flow was not interrupted -and thread alarm is not in use, again the main loop is continued -as long as there are bytes remaining. In the case that this function -is executed on thread safe client program, then if another run -should be made, which is decided by the output of vio_should_retry -function, in which case the loop is continued. At the end of -processing of the error from vio_read, error field of struct NET -is set, and if on server last_errno field is set to ER_NET_READ_INTERRUPTED -in the case that local bool variable (interrupted) is true or to -ER_NET_ERROR_ON_READ. In case of such an error this function exits -and returns error. In the case when there is no error, number of -remaining bytes (remain) is decreased by the number of bytes read, -which should be zero, but in case it is not the entire code is still -in while (remain > 0) loop, which will be exited immediately if it -is. This has been done to accommodate errors in the traffic level -and for the very slow connections. Current position in field buff -is also moved by the amount of bytes read by vio_read function, and -global variable bytes_received is increased by the same value in a -thread safe manner. When the loop that is run until necessary bytes -are read (remain) is finished, then if external loop is in its first -run, of the two, packet sequencing is tested for consistency by -comparing the number contained at 4th byte in header with pkt_nr -field. Header location is found at where_b offset to field_b. Usage -of where_b is obligatory due to the possible compression usage. If -there is no compression on a connection, then where_b is always 0. -If there is a discrepancy, then first byte of the header is checked -whether it is equal to 255, because when error is sent by the server, -or by a client if it is sending data (like in LOAD DATA INFILE -LOCAL...), then first byte in header is set to 255. If it is not -255, then an error on packets being out of order is printed. In any -case, on server, last_errno field is set to ER_NET_PACKETS_OUT_OF_ORDER -and the function returns with an error, that is, the value returned is -packet_error. If a check on serial number of packet is successful, -pkt_nr field is incremented in order to enable checking packet order -with next packet and if compression is used, uncompressed length -is extracted from a proper position in header and returned in the -second parameter of this function. Length of the packet is saved, -for the purpose of a proper return value from this function. Still -in the first iteration of the main loop, a check must be made if -field buff could accommodate entire package that comes, in its -compressed or uncompressed form. This is done in such a way, because -zlib's compress and uncompress functions use the same memory area -for compression and uncompression. Necessary field buff length is -equal to current offset where data are (where_b which is zero for -non-compression), plus the larger value of compressed or uncompressed -package to be read in a second run. If this value is larger than -the current length of field buff, which is read from field max_packet, -then field buff has to be reallocated. If reallocation with net_realloc -function fails, the function returns an error. Before a second -loop is started, length to be read is set to the length of expected -data and current position (pos) is set at where_b offset from field -buff. At the end of function, if alarm is set, which is the case -if it is run on server or on a client if a function is interrupted -and another run of vio_read is attempted, alarm is ended and blocking -state is restored from the saved local bool variable net_blocking. -Function returns number of bytes read or the error (packet_error). - - -Function name: my_net_read - -Parameters: struct NET * - -Return value: length of bytes read - -Function purpose: Highest level general purpose reading function - -Function description - -First, if compression is not used, my_real_read is called, with -struct NET * a first parameter, and pointer to local ulong complen -as a second parameter, but its value is not used here. Number of -bytes read is returned in local ulong variable len. read_pos field -is set to an offset of value of where_b field from field buff. -where_b field actually denotes where in field buff is the current -packet. If returned number of bytes read (local variable len) does -not signal that an error in packet transmission occurred (that is, -it is not set to packet_error), then the string contained in read_pos -is zero terminated. Simply, the end of the string starting at -read_pos, and ending at read_pos + len, is set to zero. This is -done in that way, because mysql_use_result expects a zero terminated -string, and function returns with a value local variable len. This -ends this function in the case that compression is not used and the -remaining code is executed only if compression is enabled on the -connection. - -In order to explain how a compressed packet logically is cut into -meningful packets, the full meaning of several NET fields should -be explained. First of all, fields in NET are used and not local -variables, as all values should be saved between consecutive calls -of this function. Simply, this function is called in order to return -logical packets, but this function does not need to call my_real_read -function everytime, because when a large packet is uncompressed, -it may, but not necessarily so, contain several logical packets. -Therefore, in order to preserve data on logical packets local -variables are not used. Instead fields in NET struct are used. Field -remain_in_buf denotes how many bytes of entire uncompressed packets -is still contained within buff. field buf_length saves the value -of the length of entire uncompressed packet. field save_char is -used to save the character at the position where the packet ends, -which character has to be replaced with a zero, '\0', in order to -make a logical packet zero delimited, for mysql_use_result. Field -length stores the value of the length of compressed packet. Field -read_pos as usual, points to the current reading position. This -char * pointer is used by all functions that call this function in -order to fetch their data. Field buff is not used for that purpose, -but read_pos is used instead. This change was introduced with -compression, when algorithm accommodated grouping of several packets -together. - -Now that meanings of all relevant NET fields are explained, -we can proceed with the flow of this function for the case when -compression is active. First, if there are remaining portions of -compressed packet in a field buff, saved character value is set at -the position where zero char '\0' was inserted to enable the string -to be zero delimited for mysql_use_result. Then a loop is started. -In the first part of the loop, if there are remaining bytes, local -uchar *pos variable is set at the current position in field buff -where a new packet starts. This position is an (buf_length - -remain_in_buf) offset in field buff. As it is possible that next -logical packet is not read to the full length in the remaining of -the field buf, several things had to be inspected. It should be -noted that data that is read from net_real_read contains only logical -packets containing 4 byte headers only, being 4 byte headers prepared -by my_net_write or net_write_command. But, when written, logical -packet could be so divided that only a part of header is read in. -Therefore after pointer to the start of the next packet has been -saved, a check is made whether number of remaining bytes in buffer -is less than 4, being 3 bytes for length and one byte for packet -number. If it is greater, then the length of the logical packet is -extracted and saved a length field. Then a check is made whether -entire packet is contained within a buf, that is, a check is made -that the logical packet is fully contained in the buffer. In that -case, number of bytes remaining in buffer is decreased by the full -length of logical packet (4 + length field), read_pos is moved -forward by 4 bytes to skip header and be set at a beginning of data -in logical packet, length field is saved for the value to be returned -in function and the loop is exited. In the case that the entire -logical packet is not contained within the buffer, then if length of -the entire buffer differs from remaining length of logical packet, -it (logical packet) is moved to the beginning of the field buff. -If length of the entire buffer equals the remaining length of logical -packet, where_b and buf_length fields are set to 0. This is done -so that in both cases buffer is ready to accept next part of packet. - -In order to get a next part of a packet, still within a loop, -my_real_read function is called and length of compressed packet is -returned to a local len variable, and length of compressed data is -returned in complen variable. In the case of non-compression value -of complen is zero. If packet_error is from my_real_read function, -this function returns also with packet_error. If it is not a -packet_error, my_uncompress function is called to uncompress data. -It is called with offset of where_b data from field buff, as it is -the position where compressed packet starts, and with len and complen -values, being lengths of compressed and uncompressed data. If there -is no compression, 0 is returned for uncompressed size from -my_real_read function, and my_uncompress wrapper function is made -to skip zlib uncompress in that case. If error is returned from -my_uncompress, error field is set to 1, if on server last_errno is -set to ER_NET_UNCOMPRESS_ERROR and loop is exited and function -returns with packet_error. If not, buf_length and remain_in_buf -fields are set to the uncompressed size of buffer and the loop is -continued. When the loop is exited save_char field is used to save -the char at end of a logical packet, which is an offset of field -len from position in field buff pointed by field read_pos, in order -that zero char is set at the same position, for mysql_use_result. -Function returns the length of the logical packet without its header. diff --git a/EXCEPTIONS-CLIENT b/EXCEPTIONS-CLIENT new file mode 100644 index 00000000000..c570ff7ba24 --- /dev/null +++ b/EXCEPTIONS-CLIENT @@ -0,0 +1,119 @@ +MySQL FLOSS License Exception + +The MySQL AB Exception for Free/Libre and Open Source +Software-only Applications Using MySQL Client Libraries (the +"FLOSS Exception"). + +Version 0.6, 7 March 2007 + +Exception Intent + +We want specified Free/Libre and Open Source Software (``FLOSS'') +applications to be able to use specified GPL-licensed MySQL client +libraries (the ``Program'') despite the fact that not all FLOSS +licenses are compatible with version 2 of the GNU General Public +License (the ``GPL''). + +Legal Terms and Conditions + +As a special exception to the terms and conditions of version 2.0 +of the GPL: + + 1. You are free to distribute a Derivative Work that is formed + entirely from the Program and one or more works (each, a + "FLOSS Work") licensed under one or more of the licenses + listed below in section 1, as long as: + a. You obey the GPL in all respects for the Program and the + Derivative Work, except for identifiable sections of the + Derivative Work which are not derived from the Program, + and which can reasonably be considered independent and + separate works in themselves, + b. all identifiable sections of the Derivative Work which + are not derived from the Program, and which can + reasonably be considered independent and separate works + in themselves, + i. are distributed subject to one of the FLOSS licenses + listed below, and + ii. the object code or executable form of those sections + are accompanied by the complete corresponding + machine-readable source code for those sections on + the same medium and under the same FLOSS license as + the corresponding object code or executable forms of + those sections, and + c. any works which are aggregated with the Program or with a + Derivative Work on a volume of a storage or distribution + medium in accordance with the GPL, can reasonably be + considered independent and separate works in themselves + which are not derivatives of either the Program, a + Derivative Work or a FLOSS Work. + If the above conditions are not met, then the Program may only + be copied, modified, distributed or used under the terms and + conditions of the GPL or another valid licensing option from + MySQL AB. + + 2. FLOSS License List + +License name Version(s)/Copyright Date +Academic Free License 2.0 +Apache Software License 1.0/1.1/2.0 +Apple Public Source License 2.0 +Artistic license From Perl 5.8.0 +BSD license "July 22 1999" +Common Development and Distribution License (CDDL) 1.0 +Common Public License 1.0 +Eclipse Public License 1.0 +GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1 +Jabber Open Source License 1.0 +MIT license (As listed in file MIT-License.txt) --- +Mozilla Public License (MPL) 1.0/1.1 +Open Software License 2.0 +OpenSSL license (with original SSLeay license) "2003" ("1998") +PHP License 3.0 +Python license (CNRI Python License) --- +Python Software Foundation License 2.1.1 +Sleepycat License "1999" +University of Illinois/NCSA Open Source License --- +W3C License "2001" +X11 License "2001" +Zlib/libpng License --- +Zope Public License 2.0 + + Due to the many variants of some of the above licenses, we + require that any version follow the 2003 version of the Free + Software Foundation's Free Software Definition + (http://www.gnu.org/philosophy/free-sw.html) or version 1.9 of + the Open Source Definition by the Open Source Initiative + (http://www.opensource.org/docs/definition.php). + + 3. Definitions + + a. Terms used, but not defined, herein shall have the + meaning provided in the GPL. + b. Derivative Work means a derivative work under copyright + law. + + 4. Applicability: This FLOSS Exception applies to all Programs + that contain a notice placed by MySQL AB saying that the + Program may be distributed under the terms of this FLOSS + Exception. If you create or distribute a work which is a + Derivative Work of both the Program and any other work + licensed under the GPL, then this FLOSS Exception is not + available for that work; thus, you must remove the FLOSS + Exception notice from that work and comply with the GPL in all + respects, including by retaining all GPL notices. You may + choose to redistribute a copy of the Program exclusively under + the terms of the GPL by removing the FLOSS Exception notice + from that copy of the Program, provided that the copy has + never been modified by you or any third party. + +Appendix A. Qualified Libraries and Packages + +The following is a non-exhaustive list of libraries and packages +which are covered by the FLOSS License Exception. Please note that +this appendix is provided merely as an additional service to +specific FLOSS projects wishing to simplify licensing information +for their users. Compliance with one of the licenses noted under +the "FLOSS license list" section remains a prerequisite. + +Package Name Qualifying License and Version +Apache Portable Runtime (APR) Apache Software License 2.0 diff --git a/Makefile.am b/Makefile.am index 36175ce55e4..f620f5d8ab8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -95,7 +95,11 @@ dist-hook: tags: support-files/build-tags -.PHONY: init-db bin-dist + +.PHONY: init-db bin-dist \ + test test-force test-full test-force-full test-force-mem \ + test-pl test-force-pl test-full-pl test-force-full-pl test-force-pl-mem \ + test-ps test-ns # Target 'test' will run the regression test suite using the built server. # @@ -105,36 +109,39 @@ tags: # will then calculate the various port numbers it needs from this, # making sure each user use different ports. -test: +test-ps: cd mysql-test ; \ - ./mysql-test-run && \ - ./mysql-test-run --ps-protocol + @PERL@ ./mysql-test-run.pl $(force) --ps-protocol -test-force: - cd mysql-test; \ - ./mysql-test-run --force && \ - ./mysql-test-run --ps-protocol --force +test-ns: + cd mysql-test ; \ + @PERL@ ./mysql-test-run.pl $(force) -test-force-mem: - cd mysql-test; \ - ./mysql-test-run --force --mem && \ - ./mysql-test-run --ps-protocol --force --mem +test: test-ns test-ps +# To ease script-writing, although in 4.1 it is identical to 'test' +test-full: test -# We are testing a new Perl version of the test script -test-pl: - cd mysql-test; \ - ./mysql-test-run.pl && \ - ./mysql-test-run.pl --ps-protocol +test-force: + $(MAKE) force=--force test -test-force-pl: - cd mysql-test; \ - ./mysql-test-run.pl --force && \ - ./mysql-test-run.pl --ps-protocol --force +test-force-full: + $(MAKE) force=--force test-full #used by autopush.pl to run memory based tests -test-force-pl-mem: - cd mysql-test; \ - ./mysql-test-run.pl --force --mem && \ - ./mysql-test-run.pl --ps-protocol --force --mem +test-force-mem: + $(MAKE) 'force=--force --mem' test + +test-bt: + -cd mysql-test ; MTR_BUILD_THREAD=auto \ + @PERL@ ./mysql-test-run.pl --force --comment=normal --report-features + -cd mysql-test ; MTR_BUILD_THREAD=auto \ + @PERL@ ./mysql-test-run.pl --force --comment=ps --ps-protocol + +# Keep these for a while +test-pl: test +test-full-pl: test-full +test-force-pl: test-force +test-force-pl-mem: test-force-mem +test-force-full-pl: test-force-full diff --git a/VC++Files/mysys/mysys.dsp b/VC++Files/mysys/mysys.dsp index 2f3d7bb272c..34030287645 100644 --- a/VC++Files/mysys/mysys.dsp +++ b/VC++Files/mysys/mysys.dsp @@ -545,11 +545,6 @@ SOURCE=.\my_windac.c # End Source File # Begin Source File - -SOURCE=.\my_winsem.c -# End Source File -# Begin Source File - SOURCE=.\my_winthread.c # End Source File # Begin Source File diff --git a/VC++Files/mysys/mysys.vcproj b/VC++Files/mysys/mysys.vcproj index f728c47fb40..a7550b0b4bd 100644 --- a/VC++Files/mysys/mysys.vcproj +++ b/VC++Files/mysys/mysys.vcproj @@ -4095,49 +4095,6 @@ </FileConfiguration> </File> <File - RelativePath="my_winsem.c"> - <FileConfiguration - Name="Debug|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - <FileConfiguration - Name="Max|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - <FileConfiguration - Name="TLS_DEBUG|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - <FileConfiguration - Name="TLS|Win32"> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - AdditionalIncludeDirectories="" - PreprocessorDefinitions=""/> - </FileConfiguration> - </File> - <File RelativePath="my_winthread.c"> <FileConfiguration Name="Debug|Win32"> diff --git a/VC++Files/mysys/mysys_ia64.dsp b/VC++Files/mysys/mysys_ia64.dsp index 622ae1d5bce..3095f8b2f8d 100644 --- a/VC++Files/mysys/mysys_ia64.dsp +++ b/VC++Files/mysys/mysys_ia64.dsp @@ -542,10 +542,6 @@ SOURCE=.\my_wincond.c # End Source File # Begin Source File -SOURCE=.\my_winsem.c -# End Source File -# Begin Source File - SOURCE=.\my_winthread.c # End Source File # Begin Source File diff --git a/VC++Files/sql/mysqld.dsp b/VC++Files/sql/mysqld.dsp index 67521a77c6b..9ea209264a9 100644 --- a/VC++Files/sql/mysqld.dsp +++ b/VC++Files/sql/mysqld.dsp @@ -1610,7 +1610,7 @@ SOURCE=.\sql_load.cpp # End Source File # Begin Source File -SOURCE=.\sql\sql_locale.cpp +SOURCE=.\sql_locale.cpp # End Source File # Begin Source File diff --git a/acinclude.m4 b/acinclude.m4 index 811e9c0b183..eaf6d628e4e 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1817,6 +1817,14 @@ AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [ ndbcluster_system_libs="" ndb_mgmclient_libs="\$(top_builddir)/ndb/src/mgmclient/libndbmgmclient.la" MYSQL_CHECK_NDB_OPTIONS + + # libndbclient versioning when linked with GNU ld. + if $LD --version 2>/dev/null|grep -q GNU; then + NDB_LD_VERSION_SCRIPT="-Wl,--version-script=\$(top_builddir)/ndb/src/libndb.ver" + AC_CONFIG_FILES(ndb/src/libndb.ver) + fi + AC_SUBST(NDB_LD_VERSION_SCRIPT) + ;; * ) AC_MSG_RESULT([Not using NDB Cluster]) diff --git a/client/echo.c b/client/echo.c new file mode 100644 index 00000000000..4483eaad293 --- /dev/null +++ b/client/echo.c @@ -0,0 +1,45 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + echo is a replacement for the "echo" command builtin to cmd.exe + on Windows, to get a Unix eqvivalent behaviour when running commands + like: + $> echo "hello" | mysql + + The windows "echo" would have sent "hello" to mysql while + Unix echo will send hello without the enclosing hyphens + + This is a very advanced high tech program so take care when + you change it and remember to valgrind it before production + use. + +*/ + +#include <stdio.h> + +int main(int argc, char **argv) +{ + int i; + for (i= 1; i < argc; i++) + { + fprintf(stdout, "%s", argv[i]); + if (i < argc - 1) + fprintf(stdout, " "); + } + fprintf(stdout, "\n"); + return 0; +} diff --git a/client/mysqldump.c b/client/mysqldump.c index 2d2fe439f76..3bf9fff1b86 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -2589,6 +2589,8 @@ static char *primary_key_fields(const char *table_name) char show_keys_buff[15 + 64 * 2 + 3]; uint result_length = 0; char *result = 0; + char buff[NAME_LEN * 2 + 3]; + char *quoted_field; my_snprintf(show_keys_buff, sizeof(show_keys_buff), "SHOW KEYS FROM %s", table_name); @@ -2612,8 +2614,10 @@ static char *primary_key_fields(const char *table_name) { /* Key is unique */ do - result_length += strlen(row[4]) + 1; /* + 1 for ',' or \0 */ - while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1); + { + quoted_field= quote_name(row[4], buff, 0); + result_length+= strlen(quoted_field) + 1; /* + 1 for ',' or \0 */ + } while ((row= mysql_fetch_row(res)) && atoi(row[3]) > 1); } /* Build the ORDER BY clause result */ @@ -2627,9 +2631,13 @@ static char *primary_key_fields(const char *table_name) } mysql_data_seek(res, 0); row = mysql_fetch_row(res); - end = strmov(result, row[4]); - while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1) - end = strxmov(end, ",", row[4], NullS); + quoted_field= quote_name(row[4], buff, 0); + end= strmov(result, quoted_field); + while ((row= mysql_fetch_row(res)) && atoi(row[3]) > 1) + { + quoted_field= quote_name(row[4], buff, 0); + end= strxmov(end, ",", quoted_field, NullS); + } } cleanup: diff --git a/client/mysqltest.c b/client/mysqltest.c index c6cbf6aabe0..04dfce28ab4 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -32,7 +32,7 @@ Holyfoot */ -#define MTEST_VERSION "3.1" +#define MTEST_VERSION "3.2" #include <my_global.h> #include <mysql_embed.h> @@ -61,6 +61,11 @@ # endif #endif +/* Use cygwin for --exec and --system before 5.0 */ +#if MYSQL_VERSION_ID < 50000 +#define USE_CYGWIN +#endif + #define MAX_VAR_NAME_LENGTH 256 #define MAX_COLUMNS 256 #define MAX_EMBEDDED_SERVER_ARGS 64 @@ -81,12 +86,13 @@ enum { OPT_SSL_CA, OPT_SSL_CAPATH, OPT_SSL_CIPHER, OPT_PS_PROTOCOL, OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL, OPT_SSL_VERIFY_SERVER_CERT, OPT_MAX_CONNECT_RETRIES, - OPT_MARK_PROGRESS, OPT_CHARSETS_DIR + OPT_MARK_PROGRESS, OPT_CHARSETS_DIR, OPT_LOG_DIR }; static int record= 0, opt_sleep= -1; static char *db= 0, *pass= 0; const char *user= 0, *host= 0, *unix_sock= 0, *opt_basedir= "./"; +const char *opt_logdir= ""; const char *opt_include= 0, *opt_charsets_dir; static int port= 0; static int opt_max_connect_retries; @@ -98,12 +104,13 @@ static my_bool sp_protocol= 0, sp_protocol_enabled= 0; static my_bool view_protocol= 0, view_protocol_enabled= 0; static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0; static my_bool parsing_disabled= 0; -static my_bool display_result_vertically= FALSE, display_metadata= FALSE; +static my_bool display_result_vertically= FALSE, + display_metadata= FALSE, display_result_sorted= FALSE; static my_bool disable_query_log= 0, disable_result_log= 0; -static my_bool disable_warnings= 0, disable_ps_warnings= 0; +static my_bool disable_warnings= 0; static my_bool disable_info= 1; static my_bool abort_on_error= 1; - +static my_bool is_windows= 0; static char **default_argv; static const char *load_default_groups[]= { "mysqltest", "client", 0 }; static char line_buffer[MAX_DELIMITER_LENGTH], *line_buffer_pos= line_buffer; @@ -259,21 +266,20 @@ enum enum_commands { Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG, Q_WAIT_FOR_SLAVE_TO_STOP, Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS, - Q_ENABLE_PS_WARNINGS, Q_DISABLE_PS_WARNINGS, Q_ENABLE_INFO, Q_DISABLE_INFO, Q_ENABLE_METADATA, Q_DISABLE_METADATA, Q_EXEC, Q_DELIMITER, Q_DISABLE_ABORT_ON_ERROR, Q_ENABLE_ABORT_ON_ERROR, Q_DISPLAY_VERTICAL_RESULTS, Q_DISPLAY_HORIZONTAL_RESULTS, - Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL, + Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL, Q_SORTED_RESULT, Q_START_TIMER, Q_END_TIMER, Q_CHARACTER_SET, Q_DISABLE_PS_PROTOCOL, Q_ENABLE_PS_PROTOCOL, Q_DISABLE_RECONNECT, Q_ENABLE_RECONNECT, Q_IF, Q_DISABLE_PARSING, Q_ENABLE_PARSING, Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST, - Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, - Q_CHMOD_FILE, + Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP, + Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ @@ -323,8 +329,6 @@ const char *command_names[]= "wait_for_slave_to_stop", "enable_warnings", "disable_warnings", - "enable_ps_warnings", - "disable_ps_warnings", "enable_info", "disable_info", "enable_metadata", @@ -337,6 +341,7 @@ const char *command_names[]= "horizontal_results", "query_vertical", "query_horizontal", + "sorted_result", "start_timer", "end_timer", "character_set", @@ -356,7 +361,11 @@ const char *command_names[]= "die", /* Don't execute any more commands, compare result */ "exit", + "skip", "chmod", + "append_file", + "cat_file", + "diff_files", 0 }; @@ -407,6 +416,8 @@ TYPELIB command_typelib= {array_elements(command_names),"", DYNAMIC_STRING ds_res, ds_progress, ds_warning_messages; +char builtin_echo[FN_REFLEN]; + void die(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2); void abort_not_supported_test(const char *fmt, ...) @@ -415,6 +426,8 @@ void verbose_msg(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2); void warning_msg(const char *fmt, ...) ATTRIBUTE_FORMAT(printf, 1, 2); +void log_msg(const char *fmt, ...) + ATTRIBUTE_FORMAT(printf, 1, 2); VAR* var_from_env(const char *, const char *); VAR* var_init(VAR* v, const char *name, int name_len, const char *val, @@ -432,6 +445,7 @@ void dump_progress(); void do_eval(DYNAMIC_STRING *query_eval, const char *query, const char *query_end, my_bool pass_through_escape_chars); void str_to_file(const char *fname, char *str, int size); +void str_to_file2(const char *fname, char *str, int size, my_bool append); #ifdef __WIN__ void free_tmp_sh_file(); @@ -473,6 +487,7 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val, int len); void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val); void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val); +void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING* ds_input); void handle_error(struct st_command*, unsigned int err_errno, const char *err_error, @@ -578,6 +593,7 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query, dynstr_append_mem(query_eval, p, 1); break; default: + escaped= 0; dynstr_append_mem(query_eval, p, 1); break; } @@ -780,27 +796,66 @@ void free_used_memory() } +static void cleanup_and_exit(int exit_code) +{ + free_used_memory(); + my_end(MY_CHECK_ERROR); + + if (!silent) + { + switch (exit_code) + { + case 1: + printf("not ok\n"); + break; + case 0: + printf("ok\n"); + break; + case 62: + printf("skipped\n"); + break; + default: + printf("unknown exit code: %d\n", exit_code); + DBUG_ASSERT(0); + } + } + + exit(exit_code); +} + void die(const char *fmt, ...) { + static int dying= 0; va_list args; DBUG_ENTER("die"); DBUG_PRINT("enter", ("start_lineno: %d", start_lineno)); + /* + Protect against dying twice + first time 'die' is called, try to write log files + second time, just exit + */ + if (dying) + cleanup_and_exit(1); + dying= 1; + /* Print the error message */ - va_start(args, fmt); + fprintf(stderr, "mysqltest: "); + if (cur_file && cur_file != file_stack) + fprintf(stderr, "In included file \"%s\": ", + cur_file->file_name); + if (start_lineno > 0) + fprintf(stderr, "At line %u: ", start_lineno); if (fmt) { - fprintf(stderr, "mysqltest: "); - if (cur_file && cur_file != file_stack) - fprintf(stderr, "In included file \"%s\": ", - cur_file->file_name); - if (start_lineno > 0) - fprintf(stderr, "At line %u: ", start_lineno); + va_start(args, fmt); vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - fflush(stderr); + va_end(args); } - va_end(args); + else + fprintf(stderr, "unknown error"); + fprintf(stderr, "\n"); + fflush(stderr); /* Dump the result that has been accumulated so far to .log file */ if (result_file_name && ds_res.length) @@ -810,14 +865,7 @@ void die(const char *fmt, ...) if (result_file_name && ds_warning_messages.length) dump_warning_messages(); - /* Clean up and exit */ - free_used_memory(); - my_end(MY_CHECK_ERROR); - - if (!silent) - printf("not ok\n"); - - exit(1); + cleanup_and_exit(1); } @@ -850,14 +898,7 @@ void abort_not_supported_test(const char *fmt, ...) } va_end(args); - /* Clean up and exit */ - free_used_memory(); - my_end(MY_CHECK_ERROR); - - if (!silent) - printf("skipped\n"); - - exit(62); + cleanup_and_exit(62); } @@ -913,10 +954,10 @@ void warning_msg(const char *fmt, ...) dynstr_append_mem(&ds_warning_messages, buff, len); } -#ifndef __WIN__ - len= vsnprintf(buff, sizeof(buff), fmt, args); + + len= my_vsnprintf(buff, sizeof(buff), fmt, args); dynstr_append_mem(&ds_warning_messages, buff, len); -#endif + dynstr_append(&ds_warning_messages, "\n"); va_end(args); @@ -924,6 +965,25 @@ void warning_msg(const char *fmt, ...) } +void log_msg(const char *fmt, ...) +{ + va_list args; + char buff[512]; + size_t len; + DBUG_ENTER("log_msg"); + + memset(buff, 0, sizeof(buff)); + va_start(args, fmt); + len= my_vsnprintf(buff, sizeof(buff)-1, fmt, args); + va_end(args); + + dynstr_append_mem(&ds_res, buff, len); + dynstr_append(&ds_res, "\n"); + + DBUG_VOID_RETURN; +} + + /* Compare content of the string ds to content of file fname */ @@ -951,7 +1011,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) die(NullS); if (!eval_result && (uint) stat_info.st_size != ds->length) { - DBUG_PRINT("info",("Size differs: result size: %u file size: %llu", + DBUG_PRINT("info",("Size differs: result size: %u file size: %lu", ds->length, stat_info.st_size)); DBUG_PRINT("info",("result: '%s'", ds->str)); DBUG_RETURN(RESULT_LENGTH_MISMATCH); @@ -1065,6 +1125,50 @@ void check_require(DYNAMIC_STRING* ds, const char *fname) } +/* + Remove surrounding chars from string + + Return 1 if first character is found but not last +*/ +static int strip_surrounding(char* str, char c1, char c2) +{ + char* ptr= str; + + /* Check if the first non space character is c1 */ + while(*ptr && my_isspace(charset_info, *ptr)) + ptr++; + if (*ptr == c1) + { + /* Replace it with a space */ + *ptr= ' '; + + /* Last non space charecter should be c2 */ + ptr= strend(str)-1; + while(*ptr && my_isspace(charset_info, *ptr)) + ptr--; + if (*ptr == c2) + { + /* Replace it with \0 */ + *ptr= 0; + } + else + { + /* Mismatch detected */ + return 1; + } + } + return 0; +} + + +static void strip_parentheses(struct st_command *command) +{ + if (strip_surrounding(command->first_argument, '(', ')')) + die("%.*s - argument list started with '%c' must be ended with '%c'", + command->first_word_len, command->query, '(', ')'); +} + + static byte *get_var_key(const byte* var, uint* len, my_bool __attribute__((unused)) t) { @@ -1240,7 +1344,9 @@ void var_set(const char *var_name, const char *var_name_end, v->int_dirty= 0; v->str_val_len= strlen(v->str_val); } - strxmov(buf, v->name, "=", v->str_val, NullS); + my_snprintf(buf, sizeof(buf), "%.*s=%.*s", + v->name_len, v->name, + v->str_val_len, v->str_val); if (!(v->env_s= my_strdup(buf, MYF(MY_WME)))) die("Out of memory"); putenv(v->env_s); @@ -1249,23 +1355,31 @@ void var_set(const char *var_name, const char *var_name_end, DBUG_VOID_RETURN; } + +void var_set_string(const char* name, const char* value) +{ + var_set(name, name + strlen(name), value, value + strlen(value)); +} + + +void var_set_int(const char* name, int value) +{ + char buf[21]; + my_snprintf(buf, sizeof(buf), "%d", value); + var_set_string(name, buf); +} + + /* Store an integer (typically the returncode of the last SQL) - statement in the mysqltest builtin variable $mysql_errno, by - simulating of a user statement "let $mysql_errno= <integer>" + statement in the mysqltest builtin variable $mysql_errno */ void var_set_errno(int sql_errno) { - /* TODO MASV make easier */ - const char *var_name= "$mysql_errno"; - char var_val[21]; - uint length= my_sprintf(var_val, (var_val, "%d", sql_errno)); - var_set(var_name, var_name + 12, var_val, var_val + length); - return; + var_set_int("$mysql_errno", sql_errno); } - /* Set variable from the result of a query @@ -1296,6 +1410,7 @@ void var_query_set(VAR *var, const char *query, const char** query_end) MYSQL_RES *res; MYSQL_ROW row; MYSQL* mysql = &cur_con->mysql; + DYNAMIC_STRING ds_query; DBUG_ENTER("var_query_set"); LINT_INIT(res); @@ -1305,13 +1420,16 @@ void var_query_set(VAR *var, const char *query, const char** query_end) die("Syntax error in query, missing '`'"); ++query; - if (mysql_real_query(mysql, query, (int)(end - query)) || - !(res = mysql_store_result(mysql))) - { - *end = 0; - die("Error running query '%s': %d %s", query, + /* Eval the query, thus replacing all environment variables */ + init_dynamic_string(&ds_query, 0, (end - query) + 32, 256); + do_eval(&ds_query, query, end, FALSE); + + if (mysql_real_query(mysql, ds_query.str, ds_query.length)) + die("Error running query '%s': %d %s", ds_query.str, mysql_errno(mysql), mysql_error(mysql)); - } + if (!(res= mysql_store_result(mysql))) + die("Query '%s' didn't return a result set", ds_query.str); + dynstr_free(&ds_query); if ((row = mysql_fetch_row(res)) && row[0]) { @@ -1365,6 +1483,130 @@ void var_query_set(VAR *var, const char *query, const char** query_end) } +/* + Set variable from the result of a field in a query + + This function is useful when checking for a certain value + in the output from a query that can't be restricted to only + return some values. A very good example of that is most SHOW + commands. + + SYNOPSIS + var_set_query_get_value() + + DESCRIPTION + let $variable= query_get_value(<query to run>,<column name>,<row no>); + + <query to run> - The query that should be sent to the server + <column name> - Name of the column that holds the field be compared + against the expected value + <row no> - Number of the row that holds the field to be + compared against the expected value + +*/ + +void var_set_query_get_value(struct st_command *command, VAR *var) +{ + ulong row_no; + int col_no= -1; + MYSQL_RES* res; + MYSQL* mysql= &cur_con->mysql; + + static DYNAMIC_STRING ds_query; + static DYNAMIC_STRING ds_col; + static DYNAMIC_STRING ds_row; + const struct command_arg query_get_value_args[] = { + "query", ARG_STRING, TRUE, &ds_query, "Query to run", + "column name", ARG_STRING, TRUE, &ds_col, "Name of column", + "row number", ARG_STRING, TRUE, &ds_row, "Number for row", + }; + + DBUG_ENTER("var_set_query_get_value"); + LINT_INIT(res); + + strip_parentheses(command); + DBUG_PRINT("info", ("query: %s", command->query)); + check_command_args(command, command->first_argument, query_get_value_args, + sizeof(query_get_value_args)/sizeof(struct command_arg), + ','); + + DBUG_PRINT("info", ("query: %s", ds_query.str)); + DBUG_PRINT("info", ("col: %s", ds_col.str)); + + /* Convert row number to int */ + if (!str2int(ds_row.str, 10, (long) 0, (long) INT_MAX, &row_no)) + die("Invalid row number: '%s'", ds_row.str); + DBUG_PRINT("info", ("row: %s, row_no: %ld", ds_row.str, row_no)); + dynstr_free(&ds_row); + + /* Remove any surrounding "'s from the query - if there is any */ + if (strip_surrounding(ds_query.str, '"', '"')) + die("Mismatched \"'s around query '%s'", ds_query.str); + + /* Run the query */ + if (mysql_real_query(mysql, ds_query.str, ds_query.length)) + die("Error running query '%s': %d %s", ds_query.str, + mysql_errno(mysql), mysql_error(mysql)); + if (!(res= mysql_store_result(mysql))) + die("Query '%s' didn't return a result set", ds_query.str); + + { + /* Find column number from the given column name */ + uint i; + uint num_fields= mysql_num_fields(res); + MYSQL_FIELD *fields= mysql_fetch_fields(res); + + for (i= 0; i < num_fields; i++) + { + if (strcmp(fields[i].name, ds_col.str) == 0 && + strlen(fields[i].name) == ds_col.length) + { + col_no= i; + break; + } + } + if (col_no == -1) + { + mysql_free_result(res); + die("Could not find column '%s' in the result of '%s'", + ds_col.str, ds_query.str); + } + DBUG_PRINT("info", ("Found column %d with name '%s'", + i, fields[i].name)); + } + dynstr_free(&ds_col); + + { + /* Get the value */ + MYSQL_ROW row; + ulong rows= 0; + const char* value= "No such row"; + + while ((row= mysql_fetch_row(res))) + { + if (++rows == row_no) + { + + DBUG_PRINT("info", ("At row %ld, column %d is '%s'", + row_no, col_no, row[col_no])); + /* Found the row to get */ + if (row[col_no]) + value= row[col_no]; + else + value= "NULL"; + + break; + } + } + eval_expr(var, value, 0); + } + dynstr_free(&ds_query); + mysql_free_result(res); + + DBUG_VOID_RETURN; +} + + void var_copy(VAR *dest, VAR *src) { dest->int_val= src->int_val; @@ -1388,26 +1630,47 @@ void var_copy(VAR *dest, VAR *src) void eval_expr(VAR *v, const char *p, const char **p_end) { - static int MIN_VAR_ALLOC= 32; /* MASV why 32? */ - VAR *vp; + + DBUG_ENTER("eval_expr"); + DBUG_PRINT("enter", ("p: '%s'", p)); + if (*p == '$') { + VAR *vp; if ((vp= var_get(p, p_end, 0, 0))) - { var_copy(v, vp); - return; - } + DBUG_VOID_RETURN; } - else if (*p == '`') + + if (*p == '`') { var_query_set(v, p, p_end); + DBUG_VOID_RETURN; } - else + + { + /* Check if this is a "let $var= query_get_value()" */ + const char* get_value_str= "query_get_value"; + const size_t len= strlen(get_value_str); + if (strncmp(p, get_value_str, len)==0) + { + struct st_command command; + memset(&command, 0, sizeof(command)); + command.query= (char*)p; + command.first_word_len= len; + command.first_argument= command.query + len; + command.end= (char*)*p_end; + var_set_query_get_value(&command, v); + DBUG_VOID_RETURN; + } + } + { int new_val_len = (p_end && *p_end) ? (int) (*p_end - p) : (int) strlen(p); if (new_val_len + 1 >= v->alloced_len) { + static int MIN_VAR_ALLOC= 32; v->alloced_len = (new_val_len < MIN_VAR_ALLOC - 1) ? MIN_VAR_ALLOC : new_val_len + 1; if (!(v->str_val = @@ -1420,9 +1683,10 @@ void eval_expr(VAR *v, const char *p, const char **p_end) memcpy(v->str_val, p, new_val_len); v->str_val[new_val_len] = 0; v->int_val=atoi(p); + DBUG_PRINT("info", ("atoi on '%s', returns: %d", p, v->int_val)); v->int_dirty=0; } - return; + DBUG_VOID_RETURN; } @@ -1495,29 +1759,36 @@ void do_source(struct st_command *command) } -#ifdef __WIN__ +#if defined __WIN__ + +#ifdef USE_CYGWIN /* Variables used for temporary sh files used for emulating Unix on Windows */ char tmp_sh_name[64], tmp_sh_cmd[70]; +#endif void init_tmp_sh_file() { +#ifdef USE_CYGWIN /* Format a name for the tmp sh file that is unique for this process */ my_snprintf(tmp_sh_name, sizeof(tmp_sh_name), "tmp_%d.sh", getpid()); /* Format the command to execute in order to run the script */ my_snprintf(tmp_sh_cmd, sizeof(tmp_sh_cmd), "sh %s", tmp_sh_name); +#endif } void free_tmp_sh_file() { +#ifdef USE_CYGWIN my_delete(tmp_sh_name, MYF(0)); +#endif } #endif FILE* my_popen(DYNAMIC_STRING *ds_cmd, const char *mode) { -#ifdef __WIN__ +#if defined __WIN__ && defined USE_CYGWIN /* Dump the command into a sh script file and execute with popen */ str_to_file(tmp_sh_name, ds_cmd->str, ds_cmd->length); return popen(tmp_sh_cmd, mode); @@ -1527,6 +1798,64 @@ FILE* my_popen(DYNAMIC_STRING *ds_cmd, const char *mode) } +static void init_builtin_echo(void) +{ +#ifdef __WIN__ + + /* Look for "echo.exe" in same dir as mysqltest was started from */ + dirname_part(builtin_echo, my_progname); + fn_format(builtin_echo, ".\\echo.exe", + builtin_echo, "", MYF(MY_REPLACE_DIR)); + + /* Make sure echo.exe exists */ + if (access(builtin_echo, F_OK) != 0) + builtin_echo[0]= 0; + return; + +#else + + builtin_echo[0]= 0; + return; + +#endif +} + + +/* + Replace a substring + + SYNOPSIS + replace + ds_str The string to search and perform the replace in + search_str The string to search for + search_len Length of the string to search for + replace_str The string to replace with + replace_len Length of the string to replace with + + RETURN + 0 String replaced + 1 Could not find search_str in str +*/ + +static int replace(DYNAMIC_STRING *ds_str, + const char *search_str, ulong search_len, + const char *replace_str, ulong replace_len) +{ + DYNAMIC_STRING ds_tmp; + const char *start= strstr(ds_str->str, search_str); + if (!start) + return 1; + init_dynamic_string(&ds_tmp, "", + ds_str->length + replace_len, 256); + dynstr_append_mem(&ds_tmp, ds_str->str, start - ds_str->str); + dynstr_append_mem(&ds_tmp, replace_str, replace_len); + dynstr_append(&ds_tmp, start + search_len); + dynstr_set(ds_str, ds_tmp.str); + dynstr_free(&ds_tmp); + return 0; +} + + /* Execute given command. @@ -1545,13 +1874,13 @@ FILE* my_popen(DYNAMIC_STRING *ds_cmd, const char *mode) NOTE Although mysqltest is executed from cygwin shell, the command will be executed in "cmd.exe". Thus commands like "rm" etc can NOT be used, use - system for those commands. + mysqltest commmand(s) like "remove_file" for that */ void do_exec(struct st_command *command) { int error; - char buf[1024]; + char buf[512]; FILE *res_file; char *cmd= command->first_argument; DYNAMIC_STRING ds_cmd; @@ -1567,10 +1896,28 @@ void do_exec(struct st_command *command) init_dynamic_string(&ds_cmd, 0, command->query_len+256, 256); /* Eval the command, thus replacing all environment variables */ - do_eval(&ds_cmd, cmd, command->end, TRUE); + do_eval(&ds_cmd, cmd, command->end, !is_windows); + + /* Check if echo should be replaced with "builtin" echo */ + if (builtin_echo[0] && strncmp(cmd, "echo", 4) == 0) + { + /* Replace echo with our "builtin" echo */ + replace(&ds_cmd, "echo", 4, builtin_echo, strlen(builtin_echo)); + } + +#ifdef __WIN__ +#ifndef USE_CYGWIN + /* Replace /dev/null with NUL */ + while(replace(&ds_cmd, "/dev/null", 9, "NUL", 3) == 0) + ; + /* Replace "closed stdout" with non existing output fd */ + while(replace(&ds_cmd, ">&-", 3, ">&4", 3) == 0) + ; +#endif +#endif DBUG_PRINT("info", ("Executing '%s' as '%s'", - command->first_argument, cmd)); + command->first_argument, ds_cmd.str)); if (!(res_file= my_popen(&ds_cmd, "r")) && command->abort_on_error) die("popen(\"%s\", \"r\") failed", command->first_argument); @@ -1594,7 +1941,11 @@ void do_exec(struct st_command *command) my_bool ok= 0; if (command->abort_on_error) + { + log_msg("exec of '%s failed, error: %d, status: %d, errno: %d", + ds_cmd.str, error, status, errno); die("command \"%s\" failed", command->first_argument); + } DBUG_PRINT("info", ("error: %d, status: %d", error, status)); @@ -1618,6 +1969,8 @@ void do_exec(struct st_command *command) command->expected_errors.err[0].code.errnum != 0) { /* Error code we wanted was != 0, i.e. not an expected success */ + log_msg("exec of '%s failed, error: %d, errno: %d", + ds_cmd.str, error, errno); die("command \"%s\" succeeded - should have failed with errno %d...", command->first_argument, command->expected_errors.err[0].code.errnum); } @@ -1688,7 +2041,7 @@ int do_modify_var(struct st_command *command, int my_system(DYNAMIC_STRING* ds_cmd) { -#ifdef __WIN__ +#if defined __WIN__ && defined USE_CYGWIN /* Dump the command into a sh script file and execute with system */ str_to_file(tmp_sh_name, ds_cmd->str, ds_cmd->length); return system(tmp_sh_cmd); @@ -1722,7 +2075,16 @@ void do_system(struct st_command *command) init_dynamic_string(&ds_cmd, 0, command->query_len + 64, 256); /* Eval the system command, thus replacing all environment variables */ - do_eval(&ds_cmd, command->first_argument, command->end, TRUE); + do_eval(&ds_cmd, command->first_argument, command->end, !is_windows); + +#ifdef __WIN__ +#ifndef USE_CYGWIN + /* Replace /dev/null with NUL */ + while(replace(&ds_cmd, "/dev/null", 9, "NUL", 3) == 0) + ; +#endif +#endif + DBUG_PRINT("info", ("running system command '%s' as '%s'", command->first_argument, ds_cmd.str)); @@ -1943,6 +2305,38 @@ void read_until_delimiter(DYNAMIC_STRING *ds, } +void do_write_file_command(struct st_command *command, my_bool append) +{ + static DYNAMIC_STRING ds_content; + static DYNAMIC_STRING ds_filename; + static DYNAMIC_STRING ds_delimiter; + const struct command_arg write_file_args[] = { + "filename", ARG_STRING, TRUE, &ds_filename, "File to write to", + "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until" + }; + DBUG_ENTER("do_write_file"); + + check_command_args(command, + command->first_argument, + write_file_args, + sizeof(write_file_args)/sizeof(struct command_arg), + ' '); + + /* If no delimiter was provided, use EOF */ + if (ds_delimiter.length == 0) + dynstr_set(&ds_delimiter, "EOF"); + + init_dynamic_string(&ds_content, "", 1024, 1024); + read_until_delimiter(&ds_content, &ds_delimiter); + DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str)); + str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append); + dynstr_free(&ds_content); + dynstr_free(&ds_filename); + dynstr_free(&ds_delimiter); + DBUG_VOID_RETURN; +} + + /* SYNOPSIS do_write_file @@ -1972,36 +2366,174 @@ void read_until_delimiter(DYNAMIC_STRING *ds, void do_write_file(struct st_command *command) { - static DYNAMIC_STRING ds_content; + do_write_file_command(command, FALSE); +} + + +/* + SYNOPSIS + do_append_file + command called command + + DESCRIPTION + append_file <file_name> [<delimiter>]; + <what to write line 1> + <...> + < what to write line n> + EOF + + --append_file <file_name>; + <what to write line 1> + <...> + < what to write line n> + EOF + + Append everything between the "append_file" command + and 'delimiter' to "file_name" + + Default <delimiter> is EOF + +*/ + +void do_append_file(struct st_command *command) +{ + do_write_file_command(command, TRUE); +} + + +/* + SYNOPSIS + do_cat_file + command called command + + DESCRIPTION + cat_file <file_name>; + + Print the given file to result log + +*/ + +void do_cat_file(struct st_command *command) +{ + int fd; + uint len; + char buff[512]; static DYNAMIC_STRING ds_filename; - static DYNAMIC_STRING ds_delimiter; - const struct command_arg write_file_args[] = { - "filename", ARG_STRING, TRUE, &ds_filename, "File to write to", - "delimiter", ARG_STRING, FALSE, &ds_delimiter, "Delimiter to read until" + const struct command_arg cat_file_args[] = { + "filename", ARG_STRING, TRUE, &ds_filename, "File to read from" }; - DBUG_ENTER("do_write_file"); + DBUG_ENTER("do_cat_file"); check_command_args(command, command->first_argument, - write_file_args, - sizeof(write_file_args)/sizeof(struct command_arg), + cat_file_args, + sizeof(cat_file_args)/sizeof(struct command_arg), ' '); - /* If no delimiter was provided, use EOF */ - if (ds_delimiter.length == 0) - dynstr_set(&ds_delimiter, "EOF"); + DBUG_PRINT("info", ("Reading from, file: %s", ds_filename.str)); - init_dynamic_string(&ds_content, "", 1024, 1024); - read_until_delimiter(&ds_content, &ds_delimiter); - DBUG_PRINT("info", ("Writing to file: %s", ds_filename.str)); - str_to_file(ds_filename.str, ds_content.str, ds_content.length); - dynstr_free(&ds_content); + if ((fd= my_open(ds_filename.str, O_RDONLY, MYF(0))) < 0) + die("Failed to open file %s", ds_filename.str); + while((len= my_read(fd, (byte*)&buff, + sizeof(buff), MYF(0))) > 0) + { + char *p= buff, *start= buff; + while (p < buff+len) + { + /* Convert cr/lf to lf */ + if (*p == '\r' && *(p+1) && *(p+1)== '\n') + { + /* Add fake newline instead of cr and output the line */ + *p= '\n'; + p++; /* Step past the "fake" newline */ + dynstr_append_mem(&ds_res, start, p-start); + p++; /* Step past the "fake" newline */ + start= p; + } + else + p++; + } + /* Output any chars that migh be left */ + dynstr_append_mem(&ds_res, start, p-start); + } + my_close(fd, MYF(0)); dynstr_free(&ds_filename); - dynstr_free(&ds_delimiter); DBUG_VOID_RETURN; } + +/* + SYNOPSIS + do_diff_files + command called command + + DESCRIPTION + diff_files <file1> <file2>; + + Fails if the two files differ. + +*/ + +void do_diff_files(struct st_command *command) +{ + int error= 0; + int fd, fd2; + uint len, len2; + char buff[512], buff2[512]; + static DYNAMIC_STRING ds_filename; + static DYNAMIC_STRING ds_filename2; + const struct command_arg diff_file_args[] = { + "file1", ARG_STRING, TRUE, &ds_filename, "First file to diff", + "file2", ARG_STRING, TRUE, &ds_filename2, "Second file to diff" + }; + DBUG_ENTER("do_diff_files"); + + check_command_args(command, + command->first_argument, + diff_file_args, + sizeof(diff_file_args)/sizeof(struct command_arg), + ' '); + + if ((fd= my_open(ds_filename.str, O_RDONLY, MYF(0))) < 0) + die("Failed to open first file %s", ds_filename.str); + if ((fd2= my_open(ds_filename2.str, O_RDONLY, MYF(0))) < 0) + { + my_close(fd, MYF(0)); + die("Failed to open second file %s", ds_filename2.str); + } + while((len= my_read(fd, (byte*)&buff, + sizeof(buff), MYF(0))) > 0) + { + if ((len2= my_read(fd2, (byte*)&buff2, + sizeof(buff2), MYF(0))) != len) + { + /* File 2 was smaller */ + error= 1; + break; + } + if ((memcmp(buff, buff2, len))) + { + /* Content of this part differed */ + error= 1; + break; + } + } + if (my_read(fd2, (byte*)&buff2, + sizeof(buff2), MYF(0)) > 0) + { + /* File 1 was smaller */ + error= 1; + } + + my_close(fd, MYF(0)); + my_close(fd2, MYF(0)); + dynstr_free(&ds_filename); + dynstr_free(&ds_filename2); + handle_command_error(command, error); + DBUG_VOID_RETURN; +} + /* SYNOPSIS do_perl @@ -2968,7 +3500,12 @@ void safe_connect(MYSQL* mysql, const char *name, const char *host, if ((mysql_errno(mysql) == CR_CONN_HOST_ERROR || mysql_errno(mysql) == CR_CONNECTION_ERROR) && failed_attempts < opt_max_connect_retries) + { + verbose_msg("Connect attempt %d/%d failed: %d: %s", failed_attempts, + opt_max_connect_retries, mysql_errno(mysql), + mysql_error(mysql)); my_sleep(connection_retry_sleep); + } else { if (failed_attempts > 0) @@ -3084,7 +3621,6 @@ void do_connect(struct st_command *command) int con_port= port; char *con_options; bool con_ssl= 0, con_compress= 0; - char *ptr; static DYNAMIC_STRING ds_connection_name; static DYNAMIC_STRING ds_host; @@ -3112,20 +3648,7 @@ void do_connect(struct st_command *command) DBUG_ENTER("do_connect"); DBUG_PRINT("enter",("connect: %s", command->first_argument)); - /* Remove parenteses around connect arguments */ - if ((ptr= strstr(command->first_argument, "("))) - { - /* Replace it with a space */ - *ptr= ' '; - if ((ptr= strstr(command->first_argument, ")"))) - { - /* Replace it with \0 */ - *ptr= 0; - } - else - die("connect - argument list started with '(' must be ended with ')'"); - } - + strip_parentheses(command); check_command_args(command, command->first_argument, connect_args, sizeof(connect_args)/sizeof(struct command_arg), ','); @@ -3825,16 +4348,12 @@ int read_command(struct st_command** command_ptr) DBUG_RETURN(0); } if (!(*command_ptr= command= - (struct st_command*) my_malloc(sizeof(*command), MYF(MY_WME))) || + (struct st_command*) my_malloc(sizeof(*command), + MYF(MY_WME|MY_ZEROFILL))) || insert_dynamic(&q_lines, (gptr) &command)) die(NullS); - - command->require_file[0]= 0; - command->first_word_len= 0; - command->query_len= 0; - command->type= Q_UNKNOWN; - command->query_buf= command->query= 0; + read_command_buf[0]= 0; if (read_line(read_command_buf, sizeof(read_command_buf))) { @@ -3906,6 +4425,8 @@ static struct my_option my_long_options[] = GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"include", 'i', "Include SQL before each test case.", (gptr*) &opt_include, (gptr*) &opt_include, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"logdir", OPT_LOG_DIR, "Directory for log files", (gptr*) &opt_logdir, + (gptr*) &opt_logdir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"mark-progress", OPT_MARK_PROGRESS, "Write linenumber and elapsed time to <testname>.progress ", (gptr*) &opt_mark_progress, (gptr*) &opt_mark_progress, 0, @@ -4146,21 +4667,22 @@ int parse_args(int argc, char **argv) return 0; } - /* Write the content of str into file SYNOPSIS - str_to_file + str_to_file2 fname - name of file to truncate/create and write to str - content to write to file size - size of content witten to file + append - append to file instead of overwriting old file */ -void str_to_file(const char *fname, char *str, int size) +void str_to_file2(const char *fname, char *str, int size, my_bool append) { int fd; char buff[FN_REFLEN]; + int flags= O_WRONLY | O_CREAT; if (!test_if_hard_path(fname)) { strxmov(buff, opt_basedir, fname, NullS); @@ -4168,14 +4690,33 @@ void str_to_file(const char *fname, char *str, int size) } fn_format(buff, fname, "", "", MY_UNPACK_FILENAME); - if ((fd= my_open(buff, O_WRONLY | O_CREAT | O_TRUNC, + if (!append) + flags|= O_TRUNC; + if ((fd= my_open(buff, flags, MYF(MY_WME | MY_FFNF))) < 0) die("Could not open %s: errno = %d", buff, errno); + if (append && my_seek(fd, 0, SEEK_END, MYF(0)) == MY_FILEPOS_ERROR) + die("Could not find end of file %s: errno = %d", buff, errno); if (my_write(fd, (byte*)str, size, MYF(MY_WME|MY_FNABP))) die("write failed"); my_close(fd, MYF(0)); } +/* + Write the content of str into file + + SYNOPSIS + str_to_file + fname - name of file to truncate/create and write to + str - content to write to file + size - size of content witten to file +*/ + +void str_to_file(const char *fname, char *str, int size) +{ + str_to_file2(fname, str, size, FALSE); +} + void dump_result_to_reject_file(char *buf, int size) { @@ -4188,15 +4729,18 @@ void dump_result_to_reject_file(char *buf, int size) void dump_result_to_log_file(char *buf, int size) { char log_file[FN_REFLEN]; - str_to_file(fn_format(log_file, result_file_name, "", ".log", + str_to_file(fn_format(log_file, result_file_name, opt_logdir, ".log", + *opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT : MY_REPLACE_EXT), buf, size); } void dump_progress(void) { - char log_file[FN_REFLEN]; - str_to_file(fn_format(log_file, result_file_name, "", ".progress", + char progress_file[FN_REFLEN]; + str_to_file(fn_format(progress_file, result_file_name, + opt_logdir, ".progress", + *opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT : MY_REPLACE_EXT), ds_progress.str, ds_progress.length); } @@ -4205,7 +4749,8 @@ void dump_warning_messages(void) { char warn_file[FN_REFLEN]; - str_to_file(fn_format(warn_file, result_file_name, "", ".warnings", + str_to_file(fn_format(warn_file, result_file_name, opt_logdir, ".warnings", + *opt_logdir ? MY_REPLACE_DIR | MY_REPLACE_EXT : MY_REPLACE_EXT), ds_warning_messages.str, ds_warning_messages.length); } @@ -4678,10 +5223,9 @@ void run_query_normal(struct st_connection *cn, struct st_command *command, } /* - Store the result. If res is NULL, use mysql_field_count to - determine if that was expected + Store the result of the query if it will return any fields */ - if (!(res= mysql_store_result(mysql)) && mysql_field_count(mysql)) + if (mysql_field_count(mysql) && ((res= mysql_store_result(mysql)) == 0)) { handle_error(command, mysql_errno(mysql), mysql_error(mysql), mysql_sqlstate(mysql), ds); @@ -4733,7 +5277,10 @@ void run_query_normal(struct st_connection *cn, struct st_command *command, } if (res) + { mysql_free_result(res); + res= 0; + } counter++; } while (!(err= mysql_next_result(mysql))); if (err > 0) @@ -4800,7 +5347,7 @@ void handle_error(struct st_command *command, err_errno, err_error); /* Abort the run of this test, pass the failed query as reason */ - abort_not_supported_test("Query '%s' failed, required functionality" \ + abort_not_supported_test("Query '%s' failed, required functionality " \ "not supported", command->query); } @@ -5011,8 +5558,9 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command, /* If we got here the statement succeeded and was expected to do so, get data. Note that this can still give errors found during execution! + Store the result of the query if if will return any fields */ - if (mysql_stmt_store_result(stmt)) + if (mysql_stmt_field_count(stmt) && mysql_stmt_store_result(stmt)) { handle_error(command, mysql_stmt_errno(stmt), mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt), ds); @@ -5154,7 +5702,9 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags) { MYSQL *mysql= &cn->mysql; DYNAMIC_STRING *ds; + DYNAMIC_STRING *save_ds= NULL; DYNAMIC_STRING ds_result; + DYNAMIC_STRING ds_sorted; DYNAMIC_STRING ds_warnings; DYNAMIC_STRING eval_query; char *query; @@ -5295,6 +5845,18 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags) dynstr_free(&query_str); } + if (display_result_sorted) + { + /* + Collect the query output in a separate string + that can be sorted before it's added to the + global result string + */ + init_dynamic_string(&ds_sorted, "", 1024, 1024); + save_ds= ds; /* Remember original ds */ + ds= &ds_sorted; + } + /* Find out how to run this query @@ -5312,6 +5874,14 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags) run_query_normal(cn, command, flags, query, query_len, ds, &ds_warnings); + if (display_result_sorted) + { + /* Sort the result set and append it to result */ + dynstr_append_sorted(save_ds, &ds_sorted); + ds= save_ds; + dynstr_free(&ds_sorted); + } + if (sp_created) { if (util_query(mysql, "DROP PROCEDURE mysqltest_tmp_sp ")) @@ -5599,12 +6169,18 @@ int main(int argc, char **argv) 1024, 0, 0, get_var_key, var_free, MYF(0))) die("Variable hash initialization failed"); + var_set_string("$MYSQL_SERVER_VERSION", MYSQL_SERVER_VERSION); + memset(&master_pos, 0, sizeof(master_pos)); parser.current_line= parser.read_lines= 0; memset(&var_reg, 0, sizeof(var_reg)); + init_builtin_echo(); #ifdef __WIN__ +#ifndef USE_CYGWIN + is_windows= 1; +#endif init_tmp_sh_file(); init_win_path_patterns(); #endif @@ -5614,6 +6190,11 @@ int main(int argc, char **argv) init_dynamic_string(&ds_warning_messages, "", 0, 2048); parse_args(argc, argv); + var_set_int("$PS_PROTOCOL", ps_protocol); + var_set_int("$SP_PROTOCOL", sp_protocol); + var_set_int("$VIEW_PROTOCOL", view_protocol); + var_set_int("$CURSOR_PROTOCOL", cursor_protocol); + DBUG_PRINT("info",("result_file: '%s'", result_file_name ? result_file_name : "")); if (mysql_server_init(embedded_server_arg_count, @@ -5721,8 +6302,6 @@ int main(int argc, char **argv) case Q_DISABLE_RESULT_LOG: disable_result_log=1; break; case Q_ENABLE_WARNINGS: disable_warnings=0; break; case Q_DISABLE_WARNINGS: disable_warnings=1; break; - case Q_ENABLE_PS_WARNINGS: disable_ps_warnings=0; break; - case Q_DISABLE_PS_WARNINGS: disable_ps_warnings=1; break; case Q_ENABLE_INFO: disable_info=0; break; case Q_DISABLE_INFO: disable_info=1; break; case Q_ENABLE_METADATA: display_metadata=1; break; @@ -5738,6 +6317,9 @@ int main(int argc, char **argv) case Q_REMOVE_FILE: do_remove_file(command); break; case Q_FILE_EXIST: do_file_exist(command); break; case Q_WRITE_FILE: do_write_file(command); break; + case Q_APPEND_FILE: do_append_file(command); break; + case Q_DIFF_FILES: do_diff_files(command); break; + case Q_CAT_FILE: do_cat_file(command); break; case Q_COPY_FILE: do_copy_file(command); break; case Q_CHMOD_FILE: do_chmod_file(command); break; case Q_PERL: do_perl(command); break; @@ -5750,41 +6332,33 @@ int main(int argc, char **argv) case Q_DISPLAY_HORIZONTAL_RESULTS: display_result_vertically= FALSE; break; + case Q_SORTED_RESULT: + /* + Turn on sorting of result set, will be reset after next + command + */ + display_result_sorted= TRUE; + break; case Q_LET: do_let(command); break; case Q_EVAL_RESULT: eval_result = 1; break; case Q_EVAL: + case Q_QUERY_VERTICAL: + case Q_QUERY_HORIZONTAL: if (command->query == command->query_buf) { + /* Skip the first part of command, i.e query_xxx */ command->query= command->first_argument; command->first_word_len= 0; } /* fall through */ - case Q_QUERY_VERTICAL: - case Q_QUERY_HORIZONTAL: - { - my_bool old_display_result_vertically= display_result_vertically; - - /* Remove "query_*" if this is first iteration */ - if (command->query == command->query_buf) - command->query= command->first_argument; - - display_result_vertically= (command->type == Q_QUERY_VERTICAL); - if (save_file[0]) - { - strmake(command->require_file, save_file, sizeof(save_file)); - save_file[0]= 0; - } - run_query(cur_con, command, QUERY_REAP_FLAG|QUERY_SEND_FLAG); - display_result_vertically= old_display_result_vertically; - command->last_argument= command->end; - command_executed++; - break; - } case Q_QUERY: case Q_REAP: { - int flags; + my_bool old_display_result_vertically= display_result_vertically; + /* Default is full query, both reap and send */ + int flags= QUERY_REAP_FLAG | QUERY_SEND_FLAG; + if (q_send_flag) { /* Last command was an empty 'send' */ @@ -5795,11 +6369,9 @@ int main(int argc, char **argv) { flags= QUERY_REAP_FLAG; } - else - { - /* full query, both reap and send */ - flags= QUERY_REAP_FLAG | QUERY_SEND_FLAG; - } + + /* Check for special property for this query */ + display_result_vertically|= (command->type == Q_QUERY_VERTICAL); if (save_file[0]) { @@ -5809,6 +6381,10 @@ int main(int argc, char **argv) run_query(cur_con, command, flags); command_executed++; command->last_argument= command->end; + + /* Restore settings */ + display_result_vertically= old_display_result_vertically; + break; } case Q_SEND: @@ -5920,6 +6496,9 @@ int main(int argc, char **argv) /* Stop processing any more commands */ abort_flag= 1; break; + case Q_SKIP: + abort_not_supported_test("%s", command->first_argument); + break; case Q_RESULT: die("result, deprecated command"); @@ -5961,6 +6540,9 @@ int main(int argc, char **argv) the replace structures should be cleared */ free_all_replace(); + + /* Also reset "sorted_result" */ + display_result_sorted= FALSE; } last_command_executed= command_executed; @@ -6033,14 +6615,9 @@ int main(int argc, char **argv) dynstr_free(&ds_res); timer_output(); - free_used_memory(); - my_end(MY_CHECK_ERROR); - /* Yes, if we got this far the test has suceeded! Sakila smiles */ - if (!silent) - printf("ok\n"); - exit(0); - return 0; /* Keep compiler happy */ + cleanup_and_exit(0); + return 0; /* Keep compiler happy too */ } @@ -7418,3 +7995,73 @@ void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val) char *end= longlong10_to_str(val, buff, 10); replace_dynstr_append_mem(ds, buff, end - buff); } + + + +/* + Build a list of pointer to each line in ds_input, sort + the list and use the sorted list to append the strings + sorted to the output ds + + SYNOPSIS + dynstr_append_sorted + ds - string where the sorted output will be appended + ds_input - string to be sorted + +*/ + +static int comp_lines(const char **a, const char **b) +{ + return (strcmp(*a,*b)); +} + +void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING *ds_input) +{ + unsigned i; + char *start= ds_input->str; + DYNAMIC_ARRAY lines; + DBUG_ENTER("dynstr_append_sorted"); + + if (!*start) + DBUG_VOID_RETURN; /* No input */ + + my_init_dynamic_array(&lines, sizeof(const char*), 32, 32); + + /* First line is result header, skip past it */ + while (*start && *start != '\n') + start++; + start++; /* Skip past \n */ + dynstr_append_mem(ds, ds_input->str, start - ds_input->str); + + /* Insert line(s) in array */ + while (*start) + { + char* line_end= (char*)start; + + /* Find end of line */ + while (*line_end && *line_end != '\n') + line_end++; + *line_end= 0; + + /* Insert pointer to the line in array */ + if (insert_dynamic(&lines, (gptr) &start)) + die("Out of memory inserting lines to sort"); + + start= line_end+1; + } + + /* Sort array */ + qsort(lines.buffer, lines.elements, + sizeof(char**), (qsort_cmp)comp_lines); + + /* Create new result */ + for (i= 0; i < lines.elements ; i++) + { + const char **line= dynamic_element(&lines, i, const char**); + dynstr_append(ds, *line); + dynstr_append(ds, "\n"); + } + + delete_dynamic(&lines); + DBUG_VOID_RETURN; +} diff --git a/configure.in b/configure.in index 4ac0637e42c..5d60de7fe34 100644 --- a/configure.in +++ b/configure.in @@ -5,7 +5,7 @@ AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! # remember to also change ndb version below and update version.c in ndb -AM_INIT_AUTOMAKE(mysql, 4.1.23) +AM_INIT_AUTOMAKE(mysql, 4.1.24) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 @@ -14,10 +14,14 @@ DOT_FRM_VERSION=6 SHARED_LIB_MAJOR_VERSION=14 SHARED_LIB_VERSION=$SHARED_LIB_MAJOR_VERSION:0:0 +NDB_SHARED_LIB_MAJOR_VERSION=1 +NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0 + + # ndb version NDB_VERSION_MAJOR=4 NDB_VERSION_MINOR=1 -NDB_VERSION_BUILD=23 +NDB_VERSION_BUILD=24 NDB_VERSION_STATUS="" # Set all version vars based on $VERSION. How do we do this more elegant ? @@ -73,6 +77,9 @@ AC_DEFINE_UNQUOTED([DOT_FRM_VERSION], [$DOT_FRM_VERSION], [Version of .frm files]) AC_SUBST(SHARED_LIB_MAJOR_VERSION) AC_SUBST(SHARED_LIB_VERSION) +AC_SUBST(NDB_SHARED_LIB_MAJOR_VERSION) +AC_SUBST(NDB_SHARED_LIB_VERSION) + AC_SUBST(AVAILABLE_LANGUAGES) AC_SUBST(AVAILABLE_LANGUAGES_ERRORS) AC_SUBST_FILE(AVAILABLE_LANGUAGES_ERRORS_RULES) @@ -442,6 +449,8 @@ if $LD --version 2>/dev/null|grep -q GNU; then fi AC_SUBST(LD_VERSION_SCRIPT) + + # Avoid bug in fcntl on some versions of linux AC_MSG_CHECKING([if we should use 'skip-external-locking' as default for $target_os]) # Any wariation of Linux @@ -836,8 +845,9 @@ AC_CHECK_FUNC(bind, , AC_CHECK_LIB(bind, bind)) # Check if crypt() exists in libc or libcrypt, sets LIBS if needed AC_SEARCH_LIBS(crypt, crypt, AC_DEFINE(HAVE_CRYPT, 1, [crypt])) -# For sem_xxx functions on Solaris 2.6 -AC_CHECK_FUNC(sem_init, , AC_CHECK_LIB(posix4, sem_init)) +# For the sched_yield() function on Solaris +AC_CHECK_FUNC(sched_yield, , AC_CHECK_LIB(posix4, sched_yield)) + MYSQL_CHECK_ZLIB_WITH_COMPRESS #-------------------------------------------------------------------- @@ -2990,10 +3000,14 @@ AM_CONDITIONAL(HAVE_NETWARE, test "$netware_dir" = "netware") export CC CXX CFLAGS CXXFLAGS LD LDFLAGS AR ac_configure_args="$ac_configure_args CFLAGS='$CFLAGS' CXXFLAGS='$CXXFLAGS'" -if test "$with_server" = "yes" -o "$THREAD_SAFE_CLIENT" != "no" +if test "$with_server" != "no" -o "$THREAD_SAFE_CLIENT" != "no" then AC_DEFINE([THREAD], [1], [Define if you want to have threaded code. This may be undef on client code]) +fi + +if test "$with_server" != "no" +then # Avoid _PROGRAMS names THREAD_LPROGRAMS="test_thr_alarm\$(EXEEXT) test_thr_lock\$(EXEEXT)" AC_SUBST(THREAD_LPROGRAMS) diff --git a/extra/perror.c b/extra/perror.c index 69cd6f87aab..764f54eafe3 100644 --- a/extra/perror.c +++ b/extra/perror.c @@ -217,8 +217,11 @@ int main(int argc,char *argv[]) On some system, like NETWARE, strerror(unknown_error) returns a string 'Unknown Error'. To avoid printing it we try to find the error string by asking for an impossible big error message. + + On Solaris 2.8 it might return NULL */ - msg= strerror(10000); + if ((msg= strerror(10000)) == NULL) + msg= "Unknown Error"; /* Allocate a buffer for unknown_error since strerror always returns diff --git a/heap/hp_block.c b/heap/hp_block.c index f26b208b521..4ae97581adb 100644 --- a/heap/hp_block.c +++ b/heap/hp_block.c @@ -76,7 +76,7 @@ int hp_get_new_block(HP_BLOCK *block, ulong *alloc_length) and my_default_record_cache_size we get about 1/128 unused memory. */ *alloc_length=sizeof(HP_PTRS)*i+block->records_in_block* block->recbuffer; - if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(0)))) + if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(MY_WME)))) return 1; if (i == 0) diff --git a/heap/hp_write.c b/heap/hp_write.c index 808fe6608b1..59dfca31fd9 100644 --- a/heap/hp_write.c +++ b/heap/hp_write.c @@ -68,11 +68,17 @@ int heap_write(HP_INFO *info, const byte *record) DBUG_RETURN(0); err: - DBUG_PRINT("info",("Duplicate key: %d", keydef - share->keydef)); + if (my_errno == HA_ERR_FOUND_DUPP_KEY) + DBUG_PRINT("info",("Duplicate key: %d", keydef - share->keydef)); info->errkey= keydef - share->keydef; - if (keydef->algorithm == HA_KEY_ALG_BTREE) + /* + We don't need to delete non-inserted key from rb-tree. Also, if + we got ENOMEM, the key wasn't inserted, so don't try to delete it + either. Otherwise for HASH index on HA_ERR_FOUND_DUPP_KEY the key + was inserted and we have to delete it. + */ + if (keydef->algorithm == HA_KEY_ALG_BTREE || my_errno == ENOMEM) { - /* we don't need to delete non-inserted key from rb-tree */ keydef--; } while (keydef >= share->keydef) @@ -100,7 +106,6 @@ int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *record, heap_rb_param custom_arg; uint old_allocated; - info->last_pos= NULL; /* For heap_rnext/heap_rprev */ custom_arg.keyseg= keyinfo->seg; custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos); if (keyinfo->flag & HA_NOSAME) diff --git a/include/Makefile.am b/include/Makefile.am index 3a3b319505c..740267ef027 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -18,7 +18,7 @@ BUILT_SOURCES = mysql_version.h my_config.h abi_check pkginclude_HEADERS = my_dbug.h m_string.h my_sys.h my_list.h my_xml.h \ mysql.h mysql_com.h mysqld_error.h mysql_embed.h \ - my_semaphore.h my_pthread.h my_no_pthread.h raid.h \ + my_pthread.h my_no_pthread.h raid.h \ errmsg.h my_global.h my_net.h my_alloc.h \ my_getopt.h sslopt-longopts.h my_dir.h typelib.h \ sslopt-vars.h sslopt-case.h sql_common.h keycache.h \ diff --git a/include/my_global.h b/include/my_global.h index 41b660227b5..b7b200fdcf4 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -85,6 +85,42 @@ #endif /* + The macros below are used to allow build of Universal/fat binaries of + MySQL and MySQL applications under darwin. +*/ +#ifdef TARGET_FAT_BINARY +# undef SIZEOF_CHARP +# undef SIZEOF_INT +# undef SIZEOF_LONG +# undef SIZEOF_LONG_LONG +# undef SIZEOF_OFF_T +# undef SIZEOF_SHORT + +#if defined(__i386__) +# undef WORDS_BIGENDIAN +# define SIZEOF_CHARP 4 +# define SIZEOF_INT 4 +# define SIZEOF_LONG 4 +# define SIZEOF_LONG_LONG 8 +# define SIZEOF_OFF_T 8 +# define SIZEOF_SHORT 2 + +#elif defined(__ppc__) +# define WORDS_BIGENDIAN +# define SIZEOF_CHARP 4 +# define SIZEOF_INT 4 +# define SIZEOF_LONG 4 +# define SIZEOF_LONG_LONG 8 +# define SIZEOF_OFF_T 8 +# define SIZEOF_SHORT 2 + +#else +# error Building FAT binary for an unknown architecture. +#endif +#endif /* TARGET_FAT_BINARY */ + + +/* The macros below are borrowed from include/linux/compiler.h in the Linux kernel. Use them to indicate the likelyhood of the truthfulness of a condition. This serves two purposes - newer versions of gcc will be @@ -102,7 +138,7 @@ /* Fix problem with S_ISLNK() on Linux */ -#if defined(TARGET_OS_LINUX) +#if defined(TARGET_OS_LINUX) || defined(__GLIBC__) #undef _GNU_SOURCE #define _GNU_SOURCE 1 #endif diff --git a/include/my_pthread.h b/include/my_pthread.h index 8d03de49574..14dbc9825d4 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -676,6 +676,14 @@ extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); */ extern pthread_t shutdown_th, main_th, signal_th; +/* Which kind of thread library is in use */ + +#define THD_LIB_OTHER 1 +#define THD_LIB_NPTL 2 +#define THD_LIB_LT 4 + +extern uint thd_lib_detected; + /* statistics_xxx functions are for not essential statistic */ #ifndef thread_safe_increment diff --git a/include/my_semaphore.h b/include/my_semaphore.h deleted file mode 100644 index 7f182bea6bf..00000000000 --- a/include/my_semaphore.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Module: semaphore.h - * - * Purpose: - * Semaphores aren't actually part of the PThreads standard. - * They are defined by the POSIX Standard: - * - * POSIX 1003.1b-1993 (POSIX.1b) - * - * Pthreads-win32 - POSIX Threads Library for Win32 - * Copyright (C) 1998 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA - */ - -/* This is hacked by Monty to be included in mysys library */ - -#ifndef _my_semaphore_h_ -#define _my_semaphore_h_ - -#ifdef THREAD - -C_MODE_START -#ifdef HAVE_SEMAPHORE_H -#include <semaphore.h> -#elif !defined(__bsdi__) -#ifdef __WIN__ -typedef HANDLE sem_t; -#else -typedef struct { - pthread_mutex_t mutex; - pthread_cond_t cond; - uint count; -} sem_t; -#endif /* __WIN__ */ - -int sem_init(sem_t * sem, int pshared, unsigned int value); -int sem_destroy(sem_t * sem); -int sem_trywait(sem_t * sem); -int sem_wait(sem_t * sem); -int sem_post(sem_t * sem); -int sem_post_multiple(sem_t * sem, unsigned int count); -int sem_getvalue(sem_t * sem, unsigned int * sval); - -#endif /* !__bsdi__ */ - -C_MODE_END - -#endif /* THREAD */ - -#endif /* !_my_semaphore_h_ */ diff --git a/include/my_sys.h b/include/my_sys.h index 4c9a7a7964c..759531fa649 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -73,8 +73,8 @@ extern int NEAR my_errno; /* Last error in mysys */ #define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */ #define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */ #define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */ -#define MY_THREADSAFE 128 /* pread/pwrite: Don't allow interrupts */ #define MY_DONT_OVERWRITE_FILE 1024 /* my_copy; Don't overwrite file */ +#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */ #define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ #define MY_GIVE_INFO 2 /* Give time info about process*/ diff --git a/include/thr_alarm.h b/include/thr_alarm.h index 7a10d6886ce..1d7ebbcb9f5 100644 --- a/include/thr_alarm.h +++ b/include/thr_alarm.h @@ -25,11 +25,6 @@ extern "C" { #ifndef USE_ALARM_THREAD #define USE_ONE_SIGNAL_HAND /* One must call process_alarm */ #endif -#ifdef HAVE_LINUXTHREADS -#define THR_CLIENT_ALARM SIGALRM -#else -#define THR_CLIENT_ALARM SIGUSR1 -#endif #ifdef HAVE_rts_threads #undef USE_ONE_SIGNAL_HAND #define USE_ALARM_THREAD @@ -98,6 +93,9 @@ typedef struct st_alarm { my_bool malloced; } ALARM; +extern uint thr_client_alarm; +extern pthread_t alarm_thread; + #define thr_alarm_init(A) (*(A))=0 #define thr_alarm_in_use(A) (*(A)!= 0) void init_thr_alarm(uint max_alarm); diff --git a/innobase/dict/dict0dict.c b/innobase/dict/dict0dict.c index 4b23ce047b2..1e2511f88fa 100644 --- a/innobase/dict/dict0dict.c +++ b/innobase/dict/dict0dict.c @@ -27,6 +27,9 @@ Created 1/8/1996 Heikki Tuuri #include "que0que.h" #include "rem0cmp.h" +/* Implement isspace() in a locale-independent way. (Bug #24299) */ +#define ib_isspace(c) ((char) (c) && strchr(" \v\f\t\r\n", c)) + dict_sys_t* dict_sys = NULL; /* the dictionary system */ rw_lock_t dict_operation_lock; /* table create, drop, etc. reserve @@ -2374,7 +2377,7 @@ dict_accept( *success = FALSE; - while (isspace(*ptr)) { + while (ib_isspace(*ptr)) { ptr++; } @@ -2419,7 +2422,7 @@ dict_scan_id( *id = NULL; - while (isspace(*ptr)) { + while (ib_isspace(*ptr)) { ptr++; } @@ -2450,7 +2453,7 @@ dict_scan_id( len++; } } else { - while (!isspace(*ptr) && *ptr != '(' && *ptr != ')' + while (!ib_isspace(*ptr) && *ptr != '(' && *ptr != ')' && (accept_also_dot || *ptr != '.') && *ptr != ',' && *ptr != '\0') { @@ -2480,12 +2483,12 @@ dict_scan_id( if (heap && !quote) { /* EMS MySQL Manager sometimes adds characters 0xA0 (in latin1, a 'non-breakable space') to the end of a table name. - But isspace(0xA0) is not true, which confuses our foreign key - parser. After the UTF-8 conversion in ha_innodb.cc, bytes 0xC2 - and 0xA0 are at the end of the string. + After the UTF-8 conversion in ha_innodb.cc, bytes 0xC2 + and 0xA0 are at the end of the string, and ib_isspace() + does not work for multi-byte UTF-8 characters. - TODO: we should lex the string using thd->charset_info, and - my_isspace(). Only after that, convert id names to UTF-8. */ + In MySQL 5.1 we lex the string using thd->charset_info, and + my_isspace(). This workaround is not needed there. */ b = (byte*)(*id); id_len = strlen(b); @@ -2956,11 +2959,11 @@ loop: ut_a(success); - if (!isspace(*ptr) && *ptr != '"' && *ptr != '`') { + if (!ib_isspace(*ptr) && *ptr != '"' && *ptr != '`') { goto loop; } - while (isspace(*ptr)) { + while (ib_isspace(*ptr)) { ptr++; } @@ -2990,7 +2993,7 @@ loop: goto loop; } - if (!isspace(*ptr)) { + if (!ib_isspace(*ptr)) { goto loop; } @@ -3078,7 +3081,7 @@ col_loop1: } ptr = dict_accept(ptr, "REFERENCES", &success); - if (!success || !isspace(*ptr)) { + if (!success || !ib_isspace(*ptr)) { dict_foreign_report_syntax_err(name, start_of_latest_foreign, ptr); return(DB_CANNOT_ADD_CONSTRAINT); @@ -3461,7 +3464,7 @@ loop: ptr = dict_accept(ptr, "DROP", &success); - if (!isspace(*ptr)) { + if (!ib_isspace(*ptr)) { goto loop; } diff --git a/innobase/include/hash0hash.h b/innobase/include/hash0hash.h index 51315e40875..13f46760698 100644 --- a/innobase/include/hash0hash.h +++ b/innobase/include/hash0hash.h @@ -18,6 +18,9 @@ typedef struct hash_cell_struct hash_cell_t; typedef void* hash_node_t; +/* Fix Bug #13859: symbol collision between imap/mysql */ +#define hash_create hash0_create + /***************************************************************** Creates a hash table with >= n array cells. The actual number of cells is chosen to be a prime number slightly bigger than n. */ diff --git a/libmysqld/examples/test-run b/libmysqld/examples/test-run index c7434488259..aea5b13eaba 100755 --- a/libmysqld/examples/test-run +++ b/libmysqld/examples/test-run @@ -10,7 +10,7 @@ top_builddir=../.. mysql_test_dir=$top_builddir/mysql-test examples=$top_builddir/libmysqld/examples -mysqltest=$examples/mysqltest +mysqltest=$examples/mysqltest_embedded datadir=$mysql_test_dir/var/master-data test_data_dir=test gdb=0 diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 804c4e001d2..9ee8d48eec4 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -66,6 +66,20 @@ void embedded_get_error(MYSQL *mysql) } } + +static void emb_free_rows(THD *thd) +{ + if (!thd->data) + return; + + if (thd->current_stmt) + free_root(&thd->data->alloc,MYF(0)); + else + free_rows(thd->data); + thd->data= NULL; +} + + static my_bool emb_advanced_command(MYSQL *mysql, enum enum_server_command command, const char *header, ulong header_length, @@ -76,11 +90,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, THD *thd=(THD *) mysql->thd; NET *net= &mysql->net; - if (thd->data) - { - free_rows(thd->data); - thd->data= 0; - } + emb_free_rows(thd); + /* Check that we are calling the client functions in right order */ if (mysql->status != MYSQL_STATUS_READY) { @@ -133,13 +144,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, static void emb_flush_use_result(MYSQL *mysql) { - MYSQL_DATA *data= ((THD*)(mysql->thd))->data; - - if (data) - { - free_rows(data); - ((THD*)(mysql->thd))->data= NULL; - } + emb_free_rows((THD*) (mysql->thd)); } static MYSQL_DATA * @@ -181,6 +186,7 @@ static my_bool emb_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt) stmt->stmt_id= thd->client_stmt_id; stmt->param_count= thd->client_param_count; stmt->field_count= mysql->field_count; + mysql->warning_count= thd->total_warn_count; if (stmt->field_count != 0) { @@ -247,9 +253,23 @@ static int emb_stmt_execute(MYSQL_STMT *stmt) int emb_read_binary_rows(MYSQL_STMT *stmt) { - MYSQL_DATA *data; - if (!(data= emb_read_rows(stmt->mysql, 0, 0))) + MYSQL *mysql= stmt->mysql; + embedded_get_error(mysql); + if (mysql->net.last_errno) + { + set_stmt_errmsg(stmt, mysql->net.last_error, + mysql->net.last_errno, mysql->net.sqlstate); return 1; + } + + if (((THD*)mysql->thd)->data) + { + DBUG_ASSERT(((THD*) mysql->thd)->data == &stmt->result); + stmt->result.prev_ptr= NULL; + ((THD*)mysql->thd)->data= NULL; + } + else + stmt->result.rows= 0; return 0; } @@ -264,7 +284,7 @@ int emb_unbuffered_fetch(MYSQL *mysql, char **row) *row= NULL; if (data) { - free_rows(data); + free_root(&data->alloc,MYF(0)); ((THD*)mysql->thd)->data= NULL; } } @@ -279,8 +299,7 @@ int emb_unbuffered_fetch(MYSQL *mysql, char **row) static void emb_free_embedded_thd(MYSQL *mysql) { THD *thd= (THD*)mysql->thd; - if (thd->data) - free_rows(thd->data); + emb_free_rows(thd); thread_count--; delete thd; mysql->thd=0; @@ -521,6 +540,7 @@ void *create_embedded_thd(int client_flag) thd->set_time(); thd->init_for_queries(); thd->client_capabilities= client_flag; + thd->real_id= (pthread_t) thd; thd->db= NULL; thd->db_length= 0; @@ -819,6 +839,9 @@ void Protocol_simple::prepare_for_resend() DBUG_ENTER("send_data"); + if (!thd->mysql) // bootstrap file handling + DBUG_VOID_RETURN; + if (!data) { if (!(data= (MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), diff --git a/myisam/mi_check.c b/myisam/mi_check.c index 3a7817b7f03..ce8fb04874e 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -336,7 +336,7 @@ int chk_size(MI_CHECK *param, register MI_INFO *info) flush_key_blocks(info->s->key_cache, info->s->kfile, FLUSH_FORCE_WRITE); - size=my_seek(info->s->kfile,0L,MY_SEEK_END,MYF(0)); + size= my_seek(info->s->kfile, 0L, MY_SEEK_END, MYF(MY_THREADSAFE)); if ((skr=(my_off_t) info->state->key_file_length) != size) { if (skr > size) @@ -595,7 +595,8 @@ static int chk_index_down(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo, { /* purecov: begin tested */ /* Give it a chance to fit in the real file size. */ - my_off_t max_length= my_seek(info->s->kfile, 0L, MY_SEEK_END, MYF(0)); + my_off_t max_length= my_seek(info->s->kfile, 0L, MY_SEEK_END, + MYF(MY_THREADSAFE)); mi_check_print_error(param, "Invalid key block position: %s " "key block size: %u file_length: %s", llstr(page, llbuff), keyinfo->block_length, @@ -4039,10 +4040,10 @@ int test_if_almost_full(MI_INFO *info) { if (info->s->options & HA_OPTION_COMPRESS_RECORD) return 0; - return (my_seek(info->s->kfile,0L,MY_SEEK_END,MYF(0))/10*9 > - (my_off_t) (info->s->base.max_key_file_length) || - my_seek(info->dfile,0L,MY_SEEK_END,MYF(0))/10*9 > - (my_off_t) info->s->base.max_data_file_length); + return my_seek(info->s->kfile, 0L, MY_SEEK_END, MYF(MY_THREADSAFE)) / 10 * 9 > + (my_off_t) info->s->base.max_key_file_length || + my_seek(info->dfile, 0L, MY_SEEK_END, MYF(0)) / 10 * 9 > + (my_off_t) info->s->base.max_data_file_length; } /* Recreate table with bigger more alloced record-data */ diff --git a/myisam/mi_create.c b/myisam/mi_create.c index da9e0887b00..5e363a4e670 100644 --- a/myisam/mi_create.c +++ b/myisam/mi_create.c @@ -158,6 +158,10 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, rec--; if (rec->type == (int) FIELD_SKIP_ZERO && rec->length == 1) { + /* + NOTE1: here we change a field type FIELD_SKIP_ZERO -> + FIELD_NORMAL + */ rec->type=(int) FIELD_NORMAL; packed--; min_pack_length++; diff --git a/myisam/mi_open.c b/myisam/mi_open.c index 047686278b4..b007eb63e63 100644 --- a/myisam/mi_open.c +++ b/myisam/mi_open.c @@ -435,6 +435,13 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags) offset+=share->rec[i].length; } share->rec[i].type=(int) FIELD_LAST; /* End marker */ + if (offset > share->base.reclength) + { + /* purecov: begin inspected */ + my_errno= HA_ERR_CRASHED; + goto err; + /* purecov: end */ + } if (! lock_error) { diff --git a/myisam/mi_packrec.c b/myisam/mi_packrec.c index 5363a3ecf23..51b0222e876 100644 --- a/myisam/mi_packrec.c +++ b/myisam/mi_packrec.c @@ -590,8 +590,7 @@ static void fill_quick_table(uint16 *table, uint bits, uint max_bits, static uint copy_decode_table(uint16 *to_pos, uint offset, uint16 *decode_table) { - uint prev_offset; - prev_offset= offset; + uint prev_offset= offset; DBUG_ENTER("copy_decode_table"); /* Descent on the left side. */ diff --git a/myisam/mi_range.c b/myisam/mi_range.c index 4248fa7f04b..e9bec50f971 100644 --- a/myisam/mi_range.c +++ b/myisam/mi_range.c @@ -145,8 +145,42 @@ static ha_rows _mi_record_pos(MI_INFO *info, const byte *key, uint key_len, if (!(nextflag & (SEARCH_FIND | SEARCH_NO_FIND | SEARCH_LAST))) key_len=USE_WHOLE_KEY; + /* + my_handler.c:mi_compare_text() has a flag 'skip_end_space'. + This is set in my_handler.c:ha_key_cmp() in dependence on the + compare flags 'nextflag' and the column type. + + TEXT columns are of type HA_KEYTYPE_VARTEXT. In this case the + condition is skip_end_space= ((nextflag & (SEARCH_FIND | + SEARCH_UPDATE)) == SEARCH_FIND). + + SEARCH_FIND is used for an exact key search. The combination + SEARCH_FIND | SEARCH_UPDATE is used in write/update/delete + operations with a comment like "Not real duplicates", whatever this + means. From the condition above we can see that 'skip_end_space' is + always false for these operations. The result is that trailing space + counts in key comparison and hence, emtpy strings ('', string length + zero, but not NULL) compare less that strings starting with control + characters and these in turn compare less than strings starting with + blanks. + + When estimating the number of records in a key range, we request an + exact search for the minimum key. This translates into a plain + SEARCH_FIND flag. Using this alone would lead to a 'skip_end_space' + compare. Empty strings would be expected above control characters. + Their keys would not be found because they are located below control + characters. + + This is the reason that we add the SEARCH_UPDATE flag here. It makes + the key estimation compare in the same way like key write operations + do. Olny so we will find the keys where they have been inserted. + + Adding the flag unconditionally does not hurt as it is used in the + above mentioned condition only. So it can safely be used together + with other flags. + */ pos=_mi_search_pos(info,keyinfo,key_buff,key_len, - nextflag | SEARCH_SAVE_BUFF, + nextflag | SEARCH_SAVE_BUFF | SEARCH_UPDATE, info->s->state.key_root[inx]); if (pos >= 0.0) { diff --git a/myisam/mi_rkey.c b/myisam/mi_rkey.c index b2d40288645..e34799da6ed 100644 --- a/myisam/mi_rkey.c +++ b/myisam/mi_rkey.c @@ -50,7 +50,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len, key_buff=info->lastkey+info->s->base.max_key_length; pack_key_length= key_len; bmove(key_buff,key,key_len); - last_used_keyseg= 0; + last_used_keyseg= info->s->keyinfo[inx].seg + info->last_used_keyseg; } else { @@ -62,6 +62,8 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len, key_len, &last_used_keyseg); /* Save packed_key_length for use by the MERGE engine. */ info->pack_key_length= pack_key_length; + info->last_used_keyseg= (uint16) (last_used_keyseg - + info->s->keyinfo[inx].seg); DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE, keyinfo->seg, key_buff, pack_key_length);); } diff --git a/myisam/mi_search.c b/myisam/mi_search.c index 517fc9c25ff..34cd1ec96fd 100644 --- a/myisam/mi_search.c +++ b/myisam/mi_search.c @@ -918,11 +918,16 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag, /* Keys are compressed the following way: - prefix length Packed length of prefix for the prev key. (1 or 3 bytes) + prefix length Packed length of prefix common with prev key (1 or 3 bytes) for each key segment: [is null] Null indicator if can be null (1 byte, zero means null) [length] Packed length if varlength (1 or 3 bytes) + key segment 'length' bytes of key segment value pointer Reference to the data file (last_keyseg->length). + + get_key_length() is a macro. It gets the prefix length from 'page' + and puts it into 'length'. It increments 'page' by 1 or 3, depending + on the packed length of the prefix length. */ get_key_length(length,page); if (length) @@ -935,34 +940,44 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag, my_errno=HA_ERR_CRASHED; DBUG_RETURN(0); /* Wrong key */ } - from=key; from_end=key+length; + /* Key is packed against prev key, take prefix from prev key. */ + from= key; + from_end= key + length; } else { - from=page; from_end=page_end; /* Not packed key */ + /* Key is not packed against prev key, take all from page buffer. */ + from= page; + from_end= page_end; } /* - The trouble is that key is split in two parts: - The first part is in from ...from_end-1. - The second part starts at page + The trouble is that key can be split in two parts: + The first part (prefix) is in from .. from_end - 1. + The second part starts at page. + The split can be at every byte position. So we need to check for + the end of the first part before using every byte. */ for (keyseg=keyinfo->seg ; keyseg->type ;keyseg++) { if (keyseg->flag & HA_NULL_PART) { + /* If prefix is used up, switch to rest. */ if (from == from_end) { from=page; from_end=page_end; } if (!(*key++ = *from++)) continue; /* Null part */ } if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART | HA_SPACE_PACK)) { - /* Get length of dynamic length key part */ + /* If prefix is used up, switch to rest. */ if (from == from_end) { from=page; from_end=page_end; } + /* Get length of dynamic length key part */ if ((length= (*key++ = *from++)) == 255) { + /* If prefix is used up, switch to rest. */ if (from == from_end) { from=page; from_end=page_end; } length= (uint) ((*key++ = *from++)) << 8; + /* If prefix is used up, switch to rest. */ if (from == from_end) { from=page; from_end=page_end; } length+= (uint) ((*key++ = *from++)); } @@ -982,20 +997,33 @@ uint _mi_get_binary_pack_key(register MI_KEYDEF *keyinfo, uint nod_flag, key+=length; from+=length; } + /* + Last segment (type == 0) contains length of data pointer. + If we have mixed key blocks with data pointer and key block pointer, + we have to copy both. + */ length=keyseg->length+nod_flag; if ((tmp=(uint) (from_end-from)) <= length) { + /* Remaining length is less or equal max possible length. */ memcpy(key+tmp,page,length-tmp); /* Get last part of key */ *page_pos= page+length-tmp; } else { + /* + Remaining length is greater than max possible length. + This can happen only if we switched to the new key bytes already. + 'page_end' is calculated with MI_MAX_KEY_BUFF. So it can be far + behind the real end of the key. + */ if (from_end != page_end) { DBUG_PRINT("error",("Error when unpacking key")); my_errno=HA_ERR_CRASHED; DBUG_RETURN(0); /* Error */ } + /* Copy data pointer and, if appropriate, key block pointer. */ memcpy((byte*) key,(byte*) from,(size_t) length); *page_pos= from+length; } diff --git a/myisam/myisamdef.h b/myisam/myisamdef.h index 6365f0e1b0c..6ed041e8b9d 100644 --- a/myisam/myisamdef.h +++ b/myisam/myisamdef.h @@ -263,6 +263,7 @@ struct st_myisam_info { enum ha_rkey_function last_key_func; /* CONTAIN, OVERLAP, etc */ uint save_lastkey_length; uint pack_key_length; /* For MYISAMMRG */ + uint16 last_used_keyseg; /* For MyISAMMRG */ int errkey; /* Got last error on this key */ int lock_type; /* How database was locked */ int tmp_lock_type; /* When locked by readinfo */ diff --git a/myisam/rt_index.c b/myisam/rt_index.c index 1806476dc39..238432006a4 100644 --- a/myisam/rt_index.c +++ b/myisam/rt_index.c @@ -186,6 +186,7 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length, /* Save searched key, include data pointer. The data pointer is required if the search_flag contains MBR_DATA. + (minimum bounding rectangle) */ memcpy(info->first_mbr_key, key, keyinfo->keylength); info->last_rkey_length = key_length; @@ -540,16 +541,19 @@ static int rtree_insert_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uint nod_flag; uchar *page_buf; int res; + DBUG_ENTER("rtree_insert_req"); if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length + MI_MAX_KEY_BUFF))) { my_errno = HA_ERR_OUT_OF_MEM; - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } if (!_mi_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0)) goto err1; nod_flag = mi_test_if_nod(page_buf); + DBUG_PRINT("rtree", ("page: %lu level: %d ins_level: %d nod_flag: %u", + (ulong) page, level, ins_level, nod_flag)); if ((ins_level == -1 && nod_flag) || /* key: go down to leaf */ (ins_level > -1 && ins_level > level)) /* branch: go down to ins_level */ @@ -601,11 +605,11 @@ static int rtree_insert_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, ok: my_afree((byte*)page_buf); - return res; + DBUG_RETURN(res); err1: my_afree((byte*)page_buf); - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } @@ -625,20 +629,21 @@ static int rtree_insert_level(MI_INFO *info, uint keynr, uchar *key, MI_KEYDEF *keyinfo = info->s->keyinfo + keynr; int res; my_off_t new_page; - + DBUG_ENTER("rtree_insert_level"); + if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) { int res; if ((old_root = _mi_new(info, keyinfo, DFLT_INIT_HITS)) == HA_OFFSET_ERROR) - return -1; + DBUG_RETURN(-1); info->buff_used = 1; mi_putint(info->buff, 2, 0); res = rtree_add_key(info, keyinfo, key, key_length, info->buff, NULL); if (_mi_write_keypage(info, keyinfo, old_root, DFLT_INIT_HITS, info->buff)) - return 1; + DBUG_RETURN(1); info->s->state.key_root[keynr] = old_root; - return res; + DBUG_RETURN(res); } switch ((res = rtree_insert_req(info, keyinfo, key, key_length, @@ -655,11 +660,12 @@ static int rtree_insert_level(MI_INFO *info, uint keynr, uchar *key, uchar *new_key; uint nod_flag = info->s->base.key_reflength; + DBUG_PRINT("rtree", ("root was split, grow a new root")); if (!(new_root_buf = (uchar*)my_alloca((uint)keyinfo->block_length + MI_MAX_KEY_BUFF))) { my_errno = HA_ERR_OUT_OF_MEM; - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } mi_putint(new_root_buf, 2, nod_flag); @@ -685,12 +691,14 @@ static int rtree_insert_level(MI_INFO *info, uint keynr, uchar *key, DFLT_INIT_HITS, new_root_buf)) goto err1; info->s->state.key_root[keynr] = new_root; + DBUG_PRINT("rtree", ("new root page: %lu level: %d nod_flag: %u", + (ulong) new_root, 0, mi_test_if_nod(new_root_buf))); my_afree((byte*)new_root_buf); break; err1: my_afree((byte*)new_root_buf); - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } default: case -1: /* error */ @@ -698,7 +706,7 @@ err1: break; } } - return res; + DBUG_RETURN(res); } @@ -712,8 +720,10 @@ err1: int rtree_insert(MI_INFO *info, uint keynr, uchar *key, uint key_length) { - return (!key_length || - (rtree_insert_level(info, keynr, key, key_length, -1) == -1)) ? -1 : 0; + DBUG_ENTER("rtree_insert"); + DBUG_RETURN((!key_length || + (rtree_insert_level(info, keynr, key, key_length, -1) == -1)) ? + -1 : 0); } @@ -728,6 +738,8 @@ int rtree_insert(MI_INFO *info, uint keynr, uchar *key, uint key_length) static int rtree_fill_reinsert_list(stPageList *ReinsertList, my_off_t page, int level) { + DBUG_ENTER("rtree_fill_reinsert_list"); + DBUG_PRINT("rtree", ("page: %lu level: %d", (ulong) page, level)); if (ReinsertList->n_pages == ReinsertList->m_pages) { ReinsertList->m_pages += REINSERT_BUFFER_INC; @@ -739,10 +751,10 @@ static int rtree_fill_reinsert_list(stPageList *ReinsertList, my_off_t page, ReinsertList->pages[ReinsertList->n_pages].offs = page; ReinsertList->pages[ReinsertList->n_pages].level = level; ReinsertList->n_pages++; - return 0; + DBUG_RETURN(0); err1: - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } @@ -766,15 +778,18 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uint nod_flag; uchar *page_buf; int res; + DBUG_ENTER("rtree_delete_req"); if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length))) { my_errno = HA_ERR_OUT_OF_MEM; - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } if (!_mi_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0)) goto err1; nod_flag = mi_test_if_nod(page_buf); + DBUG_PRINT("rtree", ("page: %lu level: %d nod_flag: %u", + (ulong) page, level, nod_flag)); k = rt_PAGE_FIRST_KEY(page_buf, nod_flag); last = rt_PAGE_END(page_buf); @@ -795,6 +810,7 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, if (*page_size + key_length >= rt_PAGE_MIN_SIZE(keyinfo->block_length)) { /* OK */ + /* Calculate a new key value (MBR) for the shrinked block. */ if (rtree_set_key_mbr(info, keyinfo, k, key_length, _mi_kpos(nod_flag, k))) goto err1; @@ -804,10 +820,23 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, } else { - /* too small: delete key & add it descendant to reinsert list */ + /* + Too small: delete key & add it descendant to reinsert list. + Store position and level of the block so that it can be + accessed later for inserting the remaining keys. + */ + DBUG_PRINT("rtree", ("too small. move block to reinsert list")); if (rtree_fill_reinsert_list(ReinsertList, _mi_kpos(nod_flag, k), level + 1)) goto err1; + /* + Delete the key that references the block. This makes the + block disappear from the index. Hence we need to insert + its remaining keys later. Note: if the block is a branch + block, we do not only remove this block, but the whole + subtree. So we need to re-insert its keys on the same + level later to reintegrate the subtrees. + */ rtree_delete_key(info, page_buf, k, key_length, nod_flag); if (_mi_write_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf)) @@ -867,11 +896,11 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, ok: my_afree((byte*)page_buf); - return res; + DBUG_RETURN(res); err1: my_afree((byte*)page_buf); - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } @@ -889,12 +918,15 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) stPageList ReinsertList; my_off_t old_root; MI_KEYDEF *keyinfo = info->s->keyinfo + keynr; + DBUG_ENTER("rtree_delete"); if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR) { my_errno= HA_ERR_END_OF_FILE; - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } + DBUG_PRINT("rtree", ("starting deletion at root page: %lu", + (ulong) old_root)); ReinsertList.pages = NULL; ReinsertList.n_pages = 0; @@ -903,12 +935,12 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) switch (rtree_delete_req(info, keyinfo, key, key_length, old_root, &page_size, &ReinsertList, 0)) { - case 2: + case 2: /* empty */ { info->s->state.key_root[keynr] = HA_OFFSET_ERROR; - return 0; + DBUG_RETURN(0); } - case 0: + case 0: /* deleted */ { uint nod_flag; ulong i; @@ -928,16 +960,34 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) DFLT_INIT_HITS, page_buf, 0)) goto err1; nod_flag = mi_test_if_nod(page_buf); + DBUG_PRINT("rtree", ("reinserting keys from " + "page: %lu level: %d nod_flag: %u", + (ulong) ReinsertList.pages[i].offs, + ReinsertList.pages[i].level, nod_flag)); + k = rt_PAGE_FIRST_KEY(page_buf, nod_flag); last = rt_PAGE_END(page_buf); for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag)) { - if (rtree_insert_level(info, keynr, k, key_length, - ReinsertList.pages[i].level) == -1) + int res; + if ((res= rtree_insert_level(info, keynr, k, key_length, + ReinsertList.pages[i].level)) == -1) { my_afree((byte*)page_buf); goto err1; } + if (res) + { + ulong j; + DBUG_PRINT("rtree", ("root has been split, adjust levels")); + for (j= i; j < ReinsertList.n_pages; j++) + { + ReinsertList.pages[j].level++; + DBUG_PRINT("rtree", ("keys from page: %lu now level: %d", + (ulong) ReinsertList.pages[i].offs, + ReinsertList.pages[i].level)); + } + } } my_afree((byte*)page_buf); if (_mi_dispose(info, keyinfo, ReinsertList.pages[i].offs, @@ -964,20 +1014,20 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length) info->s->state.key_root[keynr] = new_root; } info->update= HA_STATE_DELETED; - return 0; + DBUG_RETURN(0); err1: - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } case 1: /* not found */ { my_errno = HA_ERR_KEY_NOT_FOUND; - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } default: case -1: /* error */ { - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ } } } diff --git a/myisam/rt_key.c b/myisam/rt_key.c index e2a402fbefd..b969ac30569 100644 --- a/myisam/rt_key.c +++ b/myisam/rt_key.c @@ -35,6 +35,7 @@ int rtree_add_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, { uint page_size = mi_getint(page_buf); uint nod_flag = mi_test_if_nod(page_buf); + DBUG_ENTER("rtree_add_key"); if (page_size + key_length + info->s->base.rec_reflength <= keyinfo->block_length) @@ -43,22 +44,26 @@ int rtree_add_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, if (nod_flag) { /* save key */ + DBUG_ASSERT(_mi_kpos(nod_flag, key) < info->state->key_file_length); memcpy(rt_PAGE_END(page_buf), key - nod_flag, key_length + nod_flag); page_size += key_length + nod_flag; } else { /* save key */ + DBUG_ASSERT(_mi_dpos(info, nod_flag, key + key_length + + info->s->base.rec_reflength) < + info->state->data_file_length + info->s->base.pack_reclength); memcpy(rt_PAGE_END(page_buf), key, key_length + info->s->base.rec_reflength); page_size += key_length + info->s->base.rec_reflength; } mi_putint(page_buf, page_size, nod_flag); - return 0; + DBUG_RETURN(0); } - return (rtree_split_page(info, keyinfo, page_buf, key, key_length, - new_page) ? -1 : 1); + DBUG_RETURN((rtree_split_page(info, keyinfo, page_buf, key, key_length, + new_page) ? -1 : 1)); } /* @@ -90,11 +95,13 @@ int rtree_delete_key(MI_INFO *info, uchar *page_buf, uchar *key, int rtree_set_key_mbr(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key, uint key_length, my_off_t child_page) { + DBUG_ENTER("rtree_set_key_mbr"); + if (!_mi_fetch_keypage(info, keyinfo, child_page, DFLT_INIT_HITS, info->buff, 0)) - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ - return rtree_page_mbr(info, keyinfo->seg, info->buff, key, key_length); + DBUG_RETURN(rtree_page_mbr(info, keyinfo->seg, info->buff, key, key_length)); } #endif /*HAVE_RTREE_KEYS*/ diff --git a/myisam/rt_split.c b/myisam/rt_split.c index 87da22a93c7..d400274064b 100644 --- a/myisam/rt_split.c +++ b/myisam/rt_split.c @@ -268,13 +268,15 @@ int rtree_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key, info->s->base.rec_reflength); int max_keys = (mi_getint(page)-2) / (full_length); + DBUG_ENTER("rtree_split_page"); + DBUG_PRINT("rtree", ("splitting block")); n_dim = keyinfo->keysegs / 2; if (!(coord_buf= (double*) my_alloca(n_dim * 2 * sizeof(double) * (max_keys + 1 + 4) + sizeof(SplitStruct) * (max_keys + 1)))) - return -1; + DBUG_RETURN(-1); /* purecov: inspected */ task= (SplitStruct *)(coord_buf + n_dim * 2 * (max_keys + 1 + 4)); @@ -346,12 +348,13 @@ int rtree_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key, else err_code= _mi_write_keypage(info, keyinfo, *new_page_offs, DFLT_INIT_HITS, new_page); + DBUG_PRINT("rtree", ("split new block: %lu", (ulong) *new_page_offs)); my_afree((byte*)new_page); split_err: my_afree((byte*) coord_buf); - return err_code; + DBUG_RETURN(err_code); } #endif /*HAVE_RTREE_KEYS*/ diff --git a/myisam/sort.c b/myisam/sort.c index fe9459e572b..b909a16e8e6 100644 --- a/myisam/sort.c +++ b/myisam/sort.c @@ -152,7 +152,7 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages, keys < (uint) maxbuffer) { mi_check_print_error(info->sort_info->param, - "sort_buffer_size is to small"); + "myisam_sort_buffer_size is too small"); goto err; } } @@ -176,7 +176,7 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages, } if (memavl < MIN_SORT_MEMORY) { - mi_check_print_error(info->sort_info->param,"Sort buffer to small"); /* purecov: tested */ + mi_check_print_error(info->sort_info->param,"MyISAM sort buffer too small"); /* purecov: tested */ goto err; /* purecov: tested */ } (*info->lock_in_memory)(info->sort_info->param);/* Everything is allocated */ @@ -370,7 +370,7 @@ pthread_handler_decl(thr_find_all_keys,arg) keys < (uint) maxbuffer) { mi_check_print_error(sort_param->sort_info->param, - "sort_buffer_size is to small"); + "myisam_sort_buffer_size is too small"); goto err; } } @@ -393,7 +393,7 @@ pthread_handler_decl(thr_find_all_keys,arg) } if (memavl < MIN_SORT_MEMORY) { - mi_check_print_error(sort_param->sort_info->param, "Sort buffer too small"); + mi_check_print_error(sort_param->sort_info->param, "MyISAM sort buffer too small"); goto err; /* purecov: tested */ } diff --git a/myisammrg/myrg_rkey.c b/myisammrg/myrg_rkey.c index f87b264081e..b72334ea7dd 100644 --- a/myisammrg/myrg_rkey.c +++ b/myisammrg/myrg_rkey.c @@ -41,12 +41,14 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key, { byte *key_buff; uint pack_key_length; + uint16 last_used_keyseg; MYRG_TABLE *table; MI_INFO *mi; int err; DBUG_ENTER("myrg_rkey"); LINT_INIT(key_buff); LINT_INIT(pack_key_length); + LINT_INIT(last_used_keyseg); if (_myrg_init_queue(info,inx,search_flag)) DBUG_RETURN(my_errno); @@ -61,10 +63,12 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key, /* Get the saved packed key and packed key length. */ key_buff=(byte*) mi->lastkey+mi->s->base.max_key_length; pack_key_length=mi->pack_key_length; + last_used_keyseg= mi->last_used_keyseg; } else { mi->once_flags|= USE_PACKED_KEYS; + mi->last_used_keyseg= last_used_keyseg; err=mi_rkey(mi,0,inx,key_buff,pack_key_length,search_flag); } info->last_used_table=table+1; diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index f8bf5c490f0..02a1a801d36 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -33,9 +33,9 @@ endif benchdir_root= $(prefix) testdir = $(benchdir_root)/mysql-test EXTRA_SCRIPTS = mysql-test-run-shell.sh install_test_db.sh \ - $(PRESCRIPTS) + valgrind.supp $(PRESCRIPTS) EXTRA_DIST = $(EXTRA_SCRIPTS) -GENSCRIPTS = mysql-test-run-shell mysql-test-run install_test_db mtr +GENSCRIPTS = mysql-test-run-shell mysql-test-run install_test_db mtr lib/init_db.sql PRESCRIPTS = mysql-test-run.pl test_SCRIPTS = $(GENSCRIPTS) $(PRESCRIPTS) test_DATA = std_data/client-key.pem \ @@ -119,6 +119,11 @@ mysql-test-run: $(RM) -f mysql-test-run $(LN_S) mysql-test-run.pl mysql-test-run +# Build init_db.sql by executing mysql_create_system_tables +lib/init_db.sql: + $(top_builddir)/scripts/mysql_create_system_tables \ + test . \@HOSTNAME\@ > lib/init_db.sql + SUFFIXES = .sh .sh: diff --git a/mysql-test/init_db.sql b/mysql-test/init_db.sql deleted file mode 100644 index 63483af00d6..00000000000 --- a/mysql-test/init_db.sql +++ /dev/null @@ -1,58 +0,0 @@ -CREATE DATABASE mysql; -CREATE DATABASE test; - -USE mysql; - - -CREATE TABLE db (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,References_priv enum('N','Y') DEFAULT 'N' NOT NULL,Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,PRIMARY KEY Host (Host,Db,User),KEY User (User)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Database privileges'; - -INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); -INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); - - -CREATE TABLE host (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,References_priv enum('N','Y') DEFAULT 'N' NOT NULL,Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,PRIMARY KEY Host (Host,Db)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Host privileges; Merged with database privileges'; - -CREATE TABLE user (Host char(60) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Password char(41) binary DEFAULT '' NOT NULL,Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,File_priv enum('N','Y') DEFAULT 'N' NOT NULL,Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL,References_priv enum('N','Y') DEFAULT 'N' NOT NULL,Index_priv enum('N','Y') DEFAULT 'N' NOT NULL,Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL,Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL,Super_priv enum('N','Y') DEFAULT 'N' NOT NULL,Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL,Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL,Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL,ssl_type enum('','ANY','X509', 'SPECIFIED') DEFAULT '' NOT NULL,ssl_cipher BLOB NOT NULL,x509_issuer BLOB NOT NULL,x509_subject BLOB NOT NULL,max_questions int(11) unsigned DEFAULT 0 NOT NULL,max_updates int(11) unsigned DEFAULT 0 NOT NULL,max_connections int(11) unsigned DEFAULT 0 NOT NULL,PRIMARY KEY Host (Host,User)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Users and global privileges'; - -INSERT INTO user VALUES ('%','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('%','','','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0); - -CREATE TABLE func (name char(64) binary DEFAULT '' NOT NULL,ret tinyint(1) DEFAULT '0' NOT NULL,dl char(128) DEFAULT '' NOT NULL,type enum ('function','aggregate') NOT NULL,PRIMARY KEY (name)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User defined functions'; - -CREATE TABLE tables_priv (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Table_name char(64) binary DEFAULT '' NOT NULL,Grantor char(77) DEFAULT '' NOT NULL,Timestamp timestamp(14),Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,PRIMARY KEY (Host,Db,User,Table_name),KEY Grantor (Grantor)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Table privileges'; - -CREATE TABLE columns_priv (Host char(60) binary DEFAULT '' NOT NULL,Db char(64) binary DEFAULT '' NOT NULL,User char(16) binary DEFAULT '' NOT NULL,Table_name char(64) binary DEFAULT '' NOT NULL,Column_name char(64) binary DEFAULT '' NOT NULL,Timestamp timestamp(14),Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,PRIMARY KEY (Host,Db,User,Table_name,Column_name)) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Column privileges'; - -CREATE TABLE help_topic (help_topic_id int unsigned not null,name varchar(64) not null,help_category_id smallint unsigned not null,description text not null,example text not null,url varchar(128) not null,primary key (help_topic_id),unique index (name)) engine=MyISAM CHARACTER SET utf8 comment='help topics'; - -CREATE TABLE help_category (help_category_id smallint unsigned not null,name varchar(64) not null,parent_category_id smallint unsigned null,url varchar(128) not null,primary key (help_category_id),unique index (name)) engine=MyISAM CHARACTER SET utf8 comment='help categories'; - -CREATE TABLE help_keyword (help_keyword_id int unsigned not null,name varchar(64) not null,primary key (help_keyword_id),unique index (name)) engine=MyISAM CHARACTER SET utf8 comment='help keywords'; - -CREATE TABLE help_relation (help_topic_id int unsigned not null references help_topic,help_keyword_id int unsigned not null references help_keyword,primary key (help_keyword_id, help_topic_id)) engine=MyISAM CHARACTER SET utf8 comment='keyword-topic relation'; - -CREATE TABLE time_zone_name (Name char(64) NOT NULL,Time_zone_id int unsigned NOT NULL,PRIMARY KEY Name (Name)) engine=MyISAM CHARACTER SET utf8 comment='Time zone names'; - -INSERT INTO time_zone_name (Name, Time_Zone_id) VALUES ('MET', 1), ('UTC', 2), ('Universal', 2), ('Europe/Moscow',3), ('leap/Europe/Moscow',4), ('Japan', 5); - - -CREATE TABLE time_zone (Time_zone_id int unsigned NOT NULL auto_increment,Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,PRIMARY KEY TzId (Time_zone_id)) engine=MyISAM CHARACTER SET utf8 comment='Time zones'; - -INSERT INTO time_zone (Time_zone_id, Use_leap_seconds) VALUES (1,'N'), (2,'N'), (3,'N'), (4,'Y'), (5,'N'); - - -CREATE TABLE time_zone_transition (Time_zone_id int unsigned NOT NULL,Transition_time bigint signed NOT NULL,Transition_type_id int unsigned NOT NULL,PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)) engine=MyISAM CHARACTER SET utf8 comment='Time zone transitions'; - -INSERT INTO time_zone_transition (Time_zone_id, Transition_time, Transition_type_id) VALUES (1, -1693706400, 0) ,(1, -1680483600, 1),(1, -1663455600, 2) ,(1, -1650150000, 3),(1, -1632006000, 2) ,(1, -1618700400, 3),(1, -938905200, 2) ,(1, -857257200, 3),(1, -844556400, 2) ,(1, -828226800, 3),(1, -812502000, 2) ,(1, -796777200, 3),(1, 228877200, 2) ,(1, 243997200, 3),(1, 260326800, 2) ,(1, 276051600, 3),(1, 291776400, 2) ,(1, 307501200, 3),(1, 323830800, 2) ,(1, 338950800, 3),(1, 354675600, 2) ,(1, 370400400, 3),(1, 386125200, 2) ,(1, 401850000, 3),(1, 417574800, 2) ,(1, 433299600, 3),(1, 449024400, 2) ,(1, 465354000, 3),(1, 481078800, 2) ,(1, 496803600, 3),(1, 512528400, 2) ,(1, 528253200, 3),(1, 543978000, 2) ,(1, 559702800, 3),(1, 575427600, 2) ,(1, 591152400, 3),(1, 606877200, 2) ,(1, 622602000, 3),(1, 638326800, 2) ,(1, 654656400, 3),(1, 670381200, 2) ,(1, 686106000, 3),(1, 701830800, 2) ,(1, 717555600, 3),(1, 733280400, 2) ,(1, 749005200, 3),(1, 764730000, 2) ,(1, 780454800, 3),(1, 796179600, 2) ,(1, 811904400, 3),(1, 828234000, 2) ,(1, 846378000, 3),(1, 859683600, 2) ,(1, 877827600, 3),(1, 891133200, 2) ,(1, 909277200, 3),(1, 922582800, 2) ,(1, 941331600, 3),(1, 954032400, 2) ,(1, 972781200, 3),(1, 985482000, 2) ,(1, 1004230800, 3),(1, 1017536400, 2) ,(1, 1035680400, 3),(1, 1048986000, 2) ,(1, 1067130000, 3),(1, 1080435600, 2) ,(1, 1099184400, 3),(1, 1111885200, 2) ,(1, 1130634000, 3),(1, 1143334800, 2) ,(1, 1162083600, 3),(1, 1174784400, 2) ,(1, 1193533200, 3),(1, 1206838800, 2) ,(1, 1224982800, 3),(1, 1238288400, 2) ,(1, 1256432400, 3),(1, 1269738000, 2) ,(1, 1288486800, 3),(1, 1301187600, 2) ,(1, 1319936400, 3),(1, 1332637200, 2) ,(1, 1351386000, 3),(1, 1364691600, 2) ,(1, 1382835600, 3),(1, 1396141200, 2) ,(1, 1414285200, 3),(1, 1427590800, 2) ,(1, 1445734800, 3),(1, 1459040400, 2) ,(1, 1477789200, 3),(1, 1490490000, 2) ,(1, 1509238800, 3),(1, 1521939600, 2) ,(1, 1540688400, 3),(1, 1553994000, 2) ,(1, 1572138000, 3),(1, 1585443600, 2) ,(1, 1603587600, 3),(1, 1616893200, 2) ,(1, 1635642000, 3),(1, 1648342800, 2) ,(1, 1667091600, 3),(1, 1679792400, 2) ,(1, 1698541200, 3),(1, 1711846800, 2) ,(1, 1729990800, 3),(1, 1743296400, 2) ,(1, 1761440400, 3),(1, 1774746000, 2) ,(1, 1792890000, 3),(1, 1806195600, 2) ,(1, 1824944400, 3),(1, 1837645200, 2) ,(1, 1856394000, 3),(1, 1869094800, 2) ,(1, 1887843600, 3),(1, 1901149200, 2) ,(1, 1919293200, 3),(1, 1932598800, 2) ,(1, 1950742800, 3),(1, 1964048400, 2) ,(1, 1982797200, 3),(1, 1995498000, 2) ,(1, 2014246800, 3),(1, 2026947600, 2) ,(1, 2045696400, 3),(1, 2058397200, 2) ,(1, 2077146000, 3),(1, 2090451600, 2) ,(1, 2108595600, 3),(1, 2121901200, 2) ,(1, 2140045200, 3),(3, -1688265000, 2) ,(3, -1656819048, 1),(3, -1641353448, 2) ,(3, -1627965048, 3),(3, -1618716648, 1) ,(3, -1596429048, 3),(3, -1593829848, 5) ,(3, -1589860800, 4),(3, -1542427200, 5) ,(3, -1539493200, 6),(3, -1525323600, 5) ,(3, -1522728000, 4),(3, -1491188400, 7) ,(3, -1247536800, 4),(3, 354920400, 5) ,(3, 370728000, 4),(3, 386456400, 5) ,(3, 402264000, 4),(3, 417992400, 5) ,(3, 433800000, 4),(3, 449614800, 5) ,(3, 465346800, 8),(3, 481071600, 9) ,(3, 496796400, 8),(3, 512521200, 9) ,(3, 528246000, 8),(3, 543970800, 9) ,(3, 559695600, 8),(3, 575420400, 9) ,(3, 591145200, 8),(3, 606870000, 9) ,(3, 622594800, 8),(3, 638319600, 9) ,(3, 654649200, 8),(3, 670374000, 10) ,(3, 686102400, 11),(3, 695779200, 8) ,(3, 701812800, 5),(3, 717534000, 4) ,(3, 733273200, 9),(3, 748998000, 8) ,(3, 764722800, 9),(3, 780447600, 8) ,(3, 796172400, 9),(3, 811897200, 8) ,(3, 828226800, 9),(3, 846370800, 8) ,(3, 859676400, 9),(3, 877820400, 8) ,(3, 891126000, 9),(3, 909270000, 8) ,(3, 922575600, 9),(3, 941324400, 8) ,(3, 954025200, 9),(3, 972774000, 8) ,(3, 985474800, 9),(3, 1004223600, 8) ,(3, 1017529200, 9),(3, 1035673200, 8) ,(3, 1048978800, 9),(3, 1067122800, 8) ,(3, 1080428400, 9),(3, 1099177200, 8) ,(3, 1111878000, 9),(3, 1130626800, 8) ,(3, 1143327600, 9),(3, 1162076400, 8) ,(3, 1174777200, 9),(3, 1193526000, 8) ,(3, 1206831600, 9),(3, 1224975600, 8) ,(3, 1238281200, 9),(3, 1256425200, 8) ,(3, 1269730800, 9),(3, 1288479600, 8) ,(3, 1301180400, 9),(3, 1319929200, 8) ,(3, 1332630000, 9),(3, 1351378800, 8) ,(3, 1364684400, 9),(3, 1382828400, 8) ,(3, 1396134000, 9),(3, 1414278000, 8) ,(3, 1427583600, 9),(3, 1445727600, 8) ,(3, 1459033200, 9),(3, 1477782000, 8) ,(3, 1490482800, 9),(3, 1509231600, 8) ,(3, 1521932400, 9),(3, 1540681200, 8) ,(3, 1553986800, 9),(3, 1572130800, 8) ,(3, 1585436400, 9),(3, 1603580400, 8) ,(3, 1616886000, 9),(3, 1635634800, 8) ,(3, 1648335600, 9),(3, 1667084400, 8) ,(3, 1679785200, 9),(3, 1698534000, 8) ,(3, 1711839600, 9),(3, 1729983600, 8) ,(3, 1743289200, 9),(3, 1761433200, 8) ,(3, 1774738800, 9),(3, 1792882800, 8) ,(3, 1806188400, 9),(3, 1824937200, 8) ,(3, 1837638000, 9),(3, 1856386800, 8) ,(3, 1869087600, 9),(3, 1887836400, 8) ,(3, 1901142000, 9),(3, 1919286000, 8) ,(3, 1932591600, 9),(3, 1950735600, 8) ,(3, 1964041200, 9),(3, 1982790000, 8) ,(3, 1995490800, 9),(3, 2014239600, 8) ,(3, 2026940400, 9),(3, 2045689200, 8) ,(3, 2058390000, 9),(3, 2077138800, 8) ,(3, 2090444400, 9),(3, 2108588400, 8) ,(3, 2121894000, 9),(3, 2140038000, 8),(4, -1688265000, 2) ,(4, -1656819048, 1),(4, -1641353448, 2) ,(4, -1627965048, 3),(4, -1618716648, 1) ,(4, -1596429048, 3),(4, -1593829848, 5) ,(4, -1589860800, 4),(4, -1542427200, 5) ,(4, -1539493200, 6),(4, -1525323600, 5) ,(4, -1522728000, 4),(4, -1491188400, 7) ,(4, -1247536800, 4),(4, 354920409, 5) ,(4, 370728010, 4),(4, 386456410, 5) ,(4, 402264011, 4),(4, 417992411, 5) ,(4, 433800012, 4),(4, 449614812, 5) ,(4, 465346812, 8),(4, 481071612, 9) ,(4, 496796413, 8),(4, 512521213, 9) ,(4, 528246013, 8),(4, 543970813, 9) ,(4, 559695613, 8),(4, 575420414, 9) ,(4, 591145214, 8),(4, 606870014, 9) ,(4, 622594814, 8),(4, 638319615, 9) ,(4, 654649215, 8),(4, 670374016, 10) ,(4, 686102416, 11),(4, 695779216, 8) ,(4, 701812816, 5),(4, 717534017, 4) ,(4, 733273217, 9),(4, 748998018, 8) ,(4, 764722818, 9),(4, 780447619, 8) ,(4, 796172419, 9),(4, 811897219, 8) ,(4, 828226820, 9),(4, 846370820, 8) ,(4, 859676420, 9),(4, 877820421, 8) ,(4, 891126021, 9),(4, 909270021, 8) ,(4, 922575622, 9),(4, 941324422, 8) ,(4, 954025222, 9),(4, 972774022, 8) ,(4, 985474822, 9),(4, 1004223622, 8) ,(4, 1017529222, 9),(4, 1035673222, 8) ,(4, 1048978822, 9),(4, 1067122822, 8) ,(4, 1080428422, 9),(4, 1099177222, 8) ,(4, 1111878022, 9),(4, 1130626822, 8) ,(4, 1143327622, 9),(4, 1162076422, 8) ,(4, 1174777222, 9),(4, 1193526022, 8) ,(4, 1206831622, 9),(4, 1224975622, 8) ,(4, 1238281222, 9),(4, 1256425222, 8) ,(4, 1269730822, 9),(4, 1288479622, 8) ,(4, 1301180422, 9),(4, 1319929222, 8) ,(4, 1332630022, 9),(4, 1351378822, 8) ,(4, 1364684422, 9),(4, 1382828422, 8) ,(4, 1396134022, 9),(4, 1414278022, 8) ,(4, 1427583622, 9),(4, 1445727622, 8) ,(4, 1459033222, 9),(4, 1477782022, 8) ,(4, 1490482822, 9),(4, 1509231622, 8) ,(4, 1521932422, 9),(4, 1540681222, 8) ,(4, 1553986822, 9),(4, 1572130822, 8) ,(4, 1585436422, 9),(4, 1603580422, 8) ,(4, 1616886022, 9),(4, 1635634822, 8) ,(4, 1648335622, 9),(4, 1667084422, 8) ,(4, 1679785222, 9),(4, 1698534022, 8) ,(4, 1711839622, 9),(4, 1729983622, 8) ,(4, 1743289222, 9),(4, 1761433222, 8) ,(4, 1774738822, 9),(4, 1792882822, 8) ,(4, 1806188422, 9),(4, 1824937222, 8) ,(4, 1837638022, 9),(4, 1856386822, 8) ,(4, 1869087622, 9),(4, 1887836422, 8) ,(4, 1901142022, 9),(4, 1919286022, 8) ,(4, 1932591622, 9),(4, 1950735622, 8) ,(4, 1964041222, 9),(4, 1982790022, 8) ,(4, 1995490822, 9),(4, 2014239622, 8) ,(4, 2026940422, 9),(4, 2045689222, 8) ,(4, 2058390022, 9),(4, 2077138822, 8) ,(4, 2090444422, 9),(4, 2108588422, 8) ,(4, 2121894022, 9),(4, 2140038022, 8); - - -CREATE TABLE time_zone_transition_type (Time_zone_id int unsigned NOT NULL,Transition_type_id int unsigned NOT NULL,Offset int signed DEFAULT 0 NOT NULL,Is_DST tinyint unsigned DEFAULT 0 NOT NULL,Abbreviation char(8) DEFAULT '' NOT NULL,PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)) engine=MyISAM CHARACTER SET utf8 comment='Time zone transition types'; - -INSERT INTO time_zone_transition_type (Time_zone_id,Transition_type_id, Offset, Is_DST, Abbreviation) VALUES (1, 0, 7200, 1, 'MEST') ,(1, 1, 3600, 0, 'MET') ,(1, 2, 7200, 1, 'MEST') ,(1, 3, 3600, 0, 'MET') ,(2, 0, 0, 0, 'UTC') ,(3, 0, 9000, 0, 'MMT') ,(3, 1, 12648, 1, 'MST') ,(3, 2, 9048, 0, 'MMT') ,(3, 3, 16248, 1, 'MDST') ,(3, 4, 10800, 0, 'MSK') ,(3, 5, 14400, 1, 'MSD') ,(3, 6, 18000, 1, 'MSD') ,(3, 7, 7200, 0, 'EET') ,(3, 8, 10800, 0, 'MSK') ,(3, 9, 14400, 1, 'MSD') ,(3, 10, 10800, 1, 'EEST') ,(3, 11, 7200, 0, 'EET') ,(4, 0, 9000, 0, 'MMT') ,(4, 1, 12648, 1, 'MST') ,(4, 2, 9048, 0, 'MMT') ,(4, 3, 16248, 1, 'MDST') ,(4, 4, 10800, 0, 'MSK') ,(4, 5, 14400, 1, 'MSD') ,(4, 6, 18000, 1, 'MSD') ,(4, 7, 7200, 0, 'EET') ,(4, 8, 10800, 0, 'MSK') ,(4, 9, 14400, 1, 'MSD') ,(4, 10, 10800, 1, 'EEST') ,(4, 11, 7200, 0, 'EET') ,(5, 0, 32400, 0, 'CJT') ,(5, 1, 32400, 0, 'JST'); - -CREATE TABLE time_zone_leap_second (Transition_time bigint signed NOT NULL,Correction int signed NOT NULL,PRIMARY KEY TranTime (Transition_time)) engine=MyISAM CHARACTER SET utf8 comment='Leap seconds information for time zones'; - -INSERT INTO time_zone_leap_second (Transition_time, Correction) VALUES (78796800, 1) ,(94694401, 2) ,(126230402, 3) ,(157766403, 4) ,(189302404, 5) ,(220924805, 6) ,(252460806, 7) ,(283996807, 8) ,(315532808, 9) ,(362793609, 10) ,(394329610, 11) ,(425865611, 12) ,(489024012, 13) ,(567993613, 14) ,(631152014, 15) ,(662688015, 16) ,(709948816, 17) ,(741484817, 18) ,(773020818, 19) ,(820454419, 20) ,(867715220, 21) ,(915148821, 22); - - diff --git a/mysql-test/lib/init_db.sql b/mysql-test/lib/init_db.sql deleted file mode 100644 index 6d5ec55a6ae..00000000000 --- a/mysql-test/lib/init_db.sql +++ /dev/null @@ -1,471 +0,0 @@ -use mysql; -set table_type=myisam; - -CREATE TABLE db ( - Host char(60) binary DEFAULT '' NOT NULL, - Db char(64) binary DEFAULT '' NOT NULL, - User char(16) binary DEFAULT '' NOT NULL, - Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - PRIMARY KEY Host (Host,Db,User), - KEY User (User) -) engine=MyISAM -CHARACTER SET utf8 COLLATE utf8_bin -comment='Database privileges'; - - -INSERT INTO db VALUES ('%','test' ,'','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); -INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y'); - - -CREATE TABLE host ( - Host char(60) binary DEFAULT '' NOT NULL, - Db char(64) binary DEFAULT '' NOT NULL, - Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - PRIMARY KEY Host (Host,Db) -) engine=MyISAM -CHARACTER SET utf8 COLLATE utf8_bin -comment='Host privileges; Merged with database privileges'; - - -CREATE TABLE user ( - Host char(60) binary DEFAULT '' NOT NULL, - User char(16) binary DEFAULT '' NOT NULL, - Password char(41) binary DEFAULT '' NOT NULL, - Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Reload_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Shutdown_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Process_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL, - ssl_cipher BLOB NOT NULL, - x509_issuer BLOB NOT NULL, - x509_subject BLOB NOT NULL, - max_questions int(11) unsigned DEFAULT 0 NOT NULL, - max_updates int(11) unsigned DEFAULT 0 NOT NULL, - max_connections int(11) unsigned DEFAULT 0 NOT NULL, - PRIMARY KEY Host (Host,User) -) engine=MyISAM -CHARACTER SET utf8 COLLATE utf8_bin -comment='Users and global privileges'; - - -INSERT INTO user VALUES ('localhost' ,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user VALUES ('@HOSTNAME@%','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -REPLACE INTO user VALUES ('127.0.0.1' ,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0); -INSERT INTO user (host,user) VALUES ('localhost',''); -INSERT INTO user (host,user) VALUES ('@HOSTNAME@%',''); - - -CREATE TABLE func ( - name char(64) binary DEFAULT '' NOT NULL, - ret tinyint(1) DEFAULT '0' NOT NULL, - dl char(128) DEFAULT '' NOT NULL, - type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL, - PRIMARY KEY (name) -) engine=MyISAM -CHARACTER SET utf8 COLLATE utf8_bin -comment='User defined functions'; - - -CREATE TABLE tables_priv ( - Host char(60) binary DEFAULT '' NOT NULL, - Db char(64) binary DEFAULT '' NOT NULL, - User char(16) binary DEFAULT '' NOT NULL, - Table_name char(64) binary DEFAULT '' NOT NULL, - Grantor char(77) DEFAULT '' NOT NULL, - Timestamp timestamp(14), - Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') COLLATE utf8_general_ci DEFAULT '' NOT NULL, - Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, - PRIMARY KEY (Host,Db,User,Table_name),KEY Grantor (Grantor) -) engine=MyISAM -CHARACTER SET utf8 COLLATE utf8_bin -comment='Table privileges'; - - -CREATE TABLE columns_priv ( - Host char(60) binary DEFAULT '' NOT NULL, - Db char(64) binary DEFAULT '' NOT NULL, - User char(16) binary DEFAULT '' NOT NULL, - Table_name char(64) binary DEFAULT '' NOT NULL, - Column_name char(64) binary DEFAULT '' NOT NULL, - Timestamp timestamp(14), - Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL, - PRIMARY KEY (Host,Db,User,Table_name,Column_name) -) engine=MyISAM -CHARACTER SET utf8 COLLATE utf8_bin -comment='Column privileges'; - - -CREATE TABLE help_topic ( - help_topic_id int unsigned not null, - name varchar(64) not null, - help_category_id smallint unsigned not null, - description text not null, - example text not null, - url varchar(128) not null, - primary key (help_topic_id), - unique index (name) -) engine=MyISAM -CHARACTER SET utf8 -comment='help topics'; - - -CREATE TABLE help_category ( - help_category_id smallint unsigned not null, - name varchar(64) not null, - parent_category_id smallint unsigned null, - url varchar(128) not null, - primary key (help_category_id),unique index (name) -) engine=MyISAM -CHARACTER SET utf8 -comment='help categories'; - - -CREATE TABLE help_keyword ( - help_keyword_id int unsigned not null, - name varchar(64) not null, - primary key (help_keyword_id),unique index (name) -) engine=MyISAM -CHARACTER SET utf8 -comment='help keywords'; - - -CREATE TABLE help_relation ( - help_topic_id int unsigned not null references help_topic, - help_keyword_id int unsigned not null references help_keyword, - primary key (help_keyword_id, help_topic_id) -) engine=MyISAM -CHARACTER SET utf8 -comment='keyword-topic relation'; - - -CREATE TABLE time_zone_name ( - Name char(64) NOT NULL, - Time_zone_id int unsigned NOT NULL, - PRIMARY KEY Name (Name) -) engine=MyISAM -CHARACTER SET utf8 -comment='Time zone names'; - - -INSERT INTO time_zone_name (Name, Time_Zone_id) VALUES - ('MET', 1), ('UTC', 2), ('Universal', 2), - ('Europe/Moscow',3), ('leap/Europe/Moscow',4), - ('Japan', 5); - - -CREATE TABLE time_zone ( - Time_zone_id int unsigned NOT NULL auto_increment, - Use_leap_seconds enum('Y','N') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL, - PRIMARY KEY TzId (Time_zone_id) -) engine=MyISAM -CHARACTER SET utf8 -comment='Time zones'; - - -INSERT INTO time_zone (Time_zone_id, Use_leap_seconds) - VALUES (1,'N'), (2,'N'), (3,'N'), (4,'Y'), (5,'N'); - - -CREATE TABLE time_zone_transition ( - Time_zone_id int unsigned NOT NULL, - Transition_time bigint signed NOT NULL, - Transition_type_id int unsigned NOT NULL, - PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time) -) engine=MyISAM -CHARACTER SET utf8 -comment='Time zone transitions'; - - -INSERT INTO time_zone_transition - (Time_zone_id, Transition_time, Transition_type_id) -VALUES - (1, -1693706400, 0) ,(1, -1680483600, 1) - ,(1, -1663455600, 2) ,(1, -1650150000, 3) - ,(1, -1632006000, 2) ,(1, -1618700400, 3) - ,(1, -938905200, 2) ,(1, -857257200, 3) - ,(1, -844556400, 2) ,(1, -828226800, 3) - ,(1, -812502000, 2) ,(1, -796777200, 3) - ,(1, 228877200, 2) ,(1, 243997200, 3) - ,(1, 260326800, 2) ,(1, 276051600, 3) - ,(1, 291776400, 2) ,(1, 307501200, 3) - ,(1, 323830800, 2) ,(1, 338950800, 3) - ,(1, 354675600, 2) ,(1, 370400400, 3) - ,(1, 386125200, 2) ,(1, 401850000, 3) - ,(1, 417574800, 2) ,(1, 433299600, 3) - ,(1, 449024400, 2) ,(1, 465354000, 3) - ,(1, 481078800, 2) ,(1, 496803600, 3) - ,(1, 512528400, 2) ,(1, 528253200, 3) - ,(1, 543978000, 2) ,(1, 559702800, 3) - ,(1, 575427600, 2) ,(1, 591152400, 3) - ,(1, 606877200, 2) ,(1, 622602000, 3) - ,(1, 638326800, 2) ,(1, 654656400, 3) - ,(1, 670381200, 2) ,(1, 686106000, 3) - ,(1, 701830800, 2) ,(1, 717555600, 3) - ,(1, 733280400, 2) ,(1, 749005200, 3) - ,(1, 764730000, 2) ,(1, 780454800, 3) - ,(1, 796179600, 2) ,(1, 811904400, 3) - ,(1, 828234000, 2) ,(1, 846378000, 3) - ,(1, 859683600, 2) ,(1, 877827600, 3) - ,(1, 891133200, 2) ,(1, 909277200, 3) - ,(1, 922582800, 2) ,(1, 941331600, 3) - ,(1, 954032400, 2) ,(1, 972781200, 3) - ,(1, 985482000, 2) ,(1, 1004230800, 3) - ,(1, 1017536400, 2) ,(1, 1035680400, 3) - ,(1, 1048986000, 2) ,(1, 1067130000, 3) - ,(1, 1080435600, 2) ,(1, 1099184400, 3) - ,(1, 1111885200, 2) ,(1, 1130634000, 3) - ,(1, 1143334800, 2) ,(1, 1162083600, 3) - ,(1, 1174784400, 2) ,(1, 1193533200, 3) - ,(1, 1206838800, 2) ,(1, 1224982800, 3) - ,(1, 1238288400, 2) ,(1, 1256432400, 3) - ,(1, 1269738000, 2) ,(1, 1288486800, 3) - ,(1, 1301187600, 2) ,(1, 1319936400, 3) - ,(1, 1332637200, 2) ,(1, 1351386000, 3) - ,(1, 1364691600, 2) ,(1, 1382835600, 3) - ,(1, 1396141200, 2) ,(1, 1414285200, 3) - ,(1, 1427590800, 2) ,(1, 1445734800, 3) - ,(1, 1459040400, 2) ,(1, 1477789200, 3) - ,(1, 1490490000, 2) ,(1, 1509238800, 3) - ,(1, 1521939600, 2) ,(1, 1540688400, 3) - ,(1, 1553994000, 2) ,(1, 1572138000, 3) - ,(1, 1585443600, 2) ,(1, 1603587600, 3) - ,(1, 1616893200, 2) ,(1, 1635642000, 3) - ,(1, 1648342800, 2) ,(1, 1667091600, 3) - ,(1, 1679792400, 2) ,(1, 1698541200, 3) - ,(1, 1711846800, 2) ,(1, 1729990800, 3) - ,(1, 1743296400, 2) ,(1, 1761440400, 3) - ,(1, 1774746000, 2) ,(1, 1792890000, 3) - ,(1, 1806195600, 2) ,(1, 1824944400, 3) - ,(1, 1837645200, 2) ,(1, 1856394000, 3) - ,(1, 1869094800, 2) ,(1, 1887843600, 3) - ,(1, 1901149200, 2) ,(1, 1919293200, 3) - ,(1, 1932598800, 2) ,(1, 1950742800, 3) - ,(1, 1964048400, 2) ,(1, 1982797200, 3) - ,(1, 1995498000, 2) ,(1, 2014246800, 3) - ,(1, 2026947600, 2) ,(1, 2045696400, 3) - ,(1, 2058397200, 2) ,(1, 2077146000, 3) - ,(1, 2090451600, 2) ,(1, 2108595600, 3) - ,(1, 2121901200, 2) ,(1, 2140045200, 3) - ,(3, -1688265000, 2) ,(3, -1656819048, 1) - ,(3, -1641353448, 2) ,(3, -1627965048, 3) - ,(3, -1618716648, 1) ,(3, -1596429048, 3) - ,(3, -1593829848, 5) ,(3, -1589860800, 4) - ,(3, -1542427200, 5) ,(3, -1539493200, 6) - ,(3, -1525323600, 5) ,(3, -1522728000, 4) - ,(3, -1491188400, 7) ,(3, -1247536800, 4) - ,(3, 354920400, 5) ,(3, 370728000, 4) - ,(3, 386456400, 5) ,(3, 402264000, 4) - ,(3, 417992400, 5) ,(3, 433800000, 4) - ,(3, 449614800, 5) ,(3, 465346800, 8) - ,(3, 481071600, 9) ,(3, 496796400, 8) - ,(3, 512521200, 9) ,(3, 528246000, 8) - ,(3, 543970800, 9) ,(3, 559695600, 8) - ,(3, 575420400, 9) ,(3, 591145200, 8) - ,(3, 606870000, 9) ,(3, 622594800, 8) - ,(3, 638319600, 9) ,(3, 654649200, 8) - ,(3, 670374000, 10) ,(3, 686102400, 11) - ,(3, 695779200, 8) ,(3, 701812800, 5) - ,(3, 717534000, 4) ,(3, 733273200, 9) - ,(3, 748998000, 8) ,(3, 764722800, 9) - ,(3, 780447600, 8) ,(3, 796172400, 9) - ,(3, 811897200, 8) ,(3, 828226800, 9) - ,(3, 846370800, 8) ,(3, 859676400, 9) - ,(3, 877820400, 8) ,(3, 891126000, 9) - ,(3, 909270000, 8) ,(3, 922575600, 9) - ,(3, 941324400, 8) ,(3, 954025200, 9) - ,(3, 972774000, 8) ,(3, 985474800, 9) - ,(3, 1004223600, 8) ,(3, 1017529200, 9) - ,(3, 1035673200, 8) ,(3, 1048978800, 9) - ,(3, 1067122800, 8) ,(3, 1080428400, 9) - ,(3, 1099177200, 8) ,(3, 1111878000, 9) - ,(3, 1130626800, 8) ,(3, 1143327600, 9) - ,(3, 1162076400, 8) ,(3, 1174777200, 9) - ,(3, 1193526000, 8) ,(3, 1206831600, 9) - ,(3, 1224975600, 8) ,(3, 1238281200, 9) - ,(3, 1256425200, 8) ,(3, 1269730800, 9) - ,(3, 1288479600, 8) ,(3, 1301180400, 9) - ,(3, 1319929200, 8) ,(3, 1332630000, 9) - ,(3, 1351378800, 8) ,(3, 1364684400, 9) - ,(3, 1382828400, 8) ,(3, 1396134000, 9) - ,(3, 1414278000, 8) ,(3, 1427583600, 9) - ,(3, 1445727600, 8) ,(3, 1459033200, 9) - ,(3, 1477782000, 8) ,(3, 1490482800, 9) - ,(3, 1509231600, 8) ,(3, 1521932400, 9) - ,(3, 1540681200, 8) ,(3, 1553986800, 9) - ,(3, 1572130800, 8) ,(3, 1585436400, 9) - ,(3, 1603580400, 8) ,(3, 1616886000, 9) - ,(3, 1635634800, 8) ,(3, 1648335600, 9) - ,(3, 1667084400, 8) ,(3, 1679785200, 9) - ,(3, 1698534000, 8) ,(3, 1711839600, 9) - ,(3, 1729983600, 8) ,(3, 1743289200, 9) - ,(3, 1761433200, 8) ,(3, 1774738800, 9) - ,(3, 1792882800, 8) ,(3, 1806188400, 9) - ,(3, 1824937200, 8) ,(3, 1837638000, 9) - ,(3, 1856386800, 8) ,(3, 1869087600, 9) - ,(3, 1887836400, 8) ,(3, 1901142000, 9) - ,(3, 1919286000, 8) ,(3, 1932591600, 9) - ,(3, 1950735600, 8) ,(3, 1964041200, 9) - ,(3, 1982790000, 8) ,(3, 1995490800, 9) - ,(3, 2014239600, 8) ,(3, 2026940400, 9) - ,(3, 2045689200, 8) ,(3, 2058390000, 9) - ,(3, 2077138800, 8) ,(3, 2090444400, 9) - ,(3, 2108588400, 8) ,(3, 2121894000, 9) - ,(3, 2140038000, 8) - ,(4, -1688265000, 2) ,(4, -1656819048, 1) - ,(4, -1641353448, 2) ,(4, -1627965048, 3) - ,(4, -1618716648, 1) ,(4, -1596429048, 3) - ,(4, -1593829848, 5) ,(4, -1589860800, 4) - ,(4, -1542427200, 5) ,(4, -1539493200, 6) - ,(4, -1525323600, 5) ,(4, -1522728000, 4) - ,(4, -1491188400, 7) ,(4, -1247536800, 4) - ,(4, 354920409, 5) ,(4, 370728010, 4) - ,(4, 386456410, 5) ,(4, 402264011, 4) - ,(4, 417992411, 5) ,(4, 433800012, 4) - ,(4, 449614812, 5) ,(4, 465346812, 8) - ,(4, 481071612, 9) ,(4, 496796413, 8) - ,(4, 512521213, 9) ,(4, 528246013, 8) - ,(4, 543970813, 9) ,(4, 559695613, 8) - ,(4, 575420414, 9) ,(4, 591145214, 8) - ,(4, 606870014, 9) ,(4, 622594814, 8) - ,(4, 638319615, 9) ,(4, 654649215, 8) - ,(4, 670374016, 10) ,(4, 686102416, 11) - ,(4, 695779216, 8) ,(4, 701812816, 5) - ,(4, 717534017, 4) ,(4, 733273217, 9) - ,(4, 748998018, 8) ,(4, 764722818, 9) - ,(4, 780447619, 8) ,(4, 796172419, 9) - ,(4, 811897219, 8) ,(4, 828226820, 9) - ,(4, 846370820, 8) ,(4, 859676420, 9) - ,(4, 877820421, 8) ,(4, 891126021, 9) - ,(4, 909270021, 8) ,(4, 922575622, 9) - ,(4, 941324422, 8) ,(4, 954025222, 9) - ,(4, 972774022, 8) ,(4, 985474822, 9) - ,(4, 1004223622, 8) ,(4, 1017529222, 9) - ,(4, 1035673222, 8) ,(4, 1048978822, 9) - ,(4, 1067122822, 8) ,(4, 1080428422, 9) - ,(4, 1099177222, 8) ,(4, 1111878022, 9) - ,(4, 1130626822, 8) ,(4, 1143327622, 9) - ,(4, 1162076422, 8) ,(4, 1174777222, 9) - ,(4, 1193526022, 8) ,(4, 1206831622, 9) - ,(4, 1224975622, 8) ,(4, 1238281222, 9) - ,(4, 1256425222, 8) ,(4, 1269730822, 9) - ,(4, 1288479622, 8) ,(4, 1301180422, 9) - ,(4, 1319929222, 8) ,(4, 1332630022, 9) - ,(4, 1351378822, 8) ,(4, 1364684422, 9) - ,(4, 1382828422, 8) ,(4, 1396134022, 9) - ,(4, 1414278022, 8) ,(4, 1427583622, 9) - ,(4, 1445727622, 8) ,(4, 1459033222, 9) - ,(4, 1477782022, 8) ,(4, 1490482822, 9) - ,(4, 1509231622, 8) ,(4, 1521932422, 9) - ,(4, 1540681222, 8) ,(4, 1553986822, 9) - ,(4, 1572130822, 8) ,(4, 1585436422, 9) - ,(4, 1603580422, 8) ,(4, 1616886022, 9) - ,(4, 1635634822, 8) ,(4, 1648335622, 9) - ,(4, 1667084422, 8) ,(4, 1679785222, 9) - ,(4, 1698534022, 8) ,(4, 1711839622, 9) - ,(4, 1729983622, 8) ,(4, 1743289222, 9) - ,(4, 1761433222, 8) ,(4, 1774738822, 9) - ,(4, 1792882822, 8) ,(4, 1806188422, 9) - ,(4, 1824937222, 8) ,(4, 1837638022, 9) - ,(4, 1856386822, 8) ,(4, 1869087622, 9) - ,(4, 1887836422, 8) ,(4, 1901142022, 9) - ,(4, 1919286022, 8) ,(4, 1932591622, 9) - ,(4, 1950735622, 8) ,(4, 1964041222, 9) - ,(4, 1982790022, 8) ,(4, 1995490822, 9) - ,(4, 2014239622, 8) ,(4, 2026940422, 9) - ,(4, 2045689222, 8) ,(4, 2058390022, 9) - ,(4, 2077138822, 8) ,(4, 2090444422, 9) - ,(4, 2108588422, 8) ,(4, 2121894022, 9) - ,(4, 2140038022, 8) - ,(5, -1009875600, 1); - - -CREATE TABLE time_zone_transition_type ( - Time_zone_id int unsigned NOT NULL, - Transition_type_id int unsigned NOT NULL, - Offset int signed DEFAULT 0 NOT NULL, - Is_DST tinyint unsigned DEFAULT 0 NOT NULL, - Abbreviation char(8) DEFAULT '' NOT NULL, - PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id) -) engine=MyISAM -CHARACTER SET utf8 -comment='Time zone transition types'; - - -INSERT INTO time_zone_transition_type ( - Time_zone_id,Transition_type_id, Offset, Is_DST, Abbreviation) VALUES - (1, 0, 7200, 1, 'MEST') ,(1, 1, 3600, 0, 'MET') - ,(1, 2, 7200, 1, 'MEST') ,(1, 3, 3600, 0, 'MET') - ,(2, 0, 0, 0, 'UTC') - ,(3, 0, 9000, 0, 'MMT') ,(3, 1, 12648, 1, 'MST') - ,(3, 2, 9048, 0, 'MMT') ,(3, 3, 16248, 1, 'MDST') - ,(3, 4, 10800, 0, 'MSK') ,(3, 5, 14400, 1, 'MSD') - ,(3, 6, 18000, 1, 'MSD') ,(3, 7, 7200, 0, 'EET') - ,(3, 8, 10800, 0, 'MSK') ,(3, 9, 14400, 1, 'MSD') - ,(3, 10, 10800, 1, 'EEST') ,(3, 11, 7200, 0, 'EET') - ,(4, 0, 9000, 0, 'MMT') ,(4, 1, 12648, 1, 'MST') - ,(4, 2, 9048, 0, 'MMT') ,(4, 3, 16248, 1, 'MDST') - ,(4, 4, 10800, 0, 'MSK') ,(4, 5, 14400, 1, 'MSD') - ,(4, 6, 18000, 1, 'MSD') ,(4, 7, 7200, 0, 'EET') - ,(4, 8, 10800, 0, 'MSK') ,(4, 9, 14400, 1, 'MSD') - ,(4, 10, 10800, 1, 'EEST') ,(4, 11, 7200, 0, 'EET') - ,(5, 0, 32400, 0, 'CJT') ,(5, 1, 32400, 0, 'JST'); - - -CREATE TABLE time_zone_leap_second ( - Transition_time bigint signed NOT NULL, - Correction int signed NOT NULL, - PRIMARY KEY TranTime (Transition_time) -) engine=MyISAM -CHARACTER SET utf8 -comment='Leap seconds information for time zones'; - - -INSERT INTO time_zone_leap_second ( - Transition_time, Correction) VALUES - (78796800, 1) ,(94694401, 2) ,(126230402, 3) - ,(157766403, 4) ,(189302404, 5) ,(220924805, 6) - ,(252460806, 7) ,(283996807, 8) ,(315532808, 9) - ,(362793609, 10) ,(394329610, 11) ,(425865611, 12) - ,(489024012, 13) ,(567993613, 14) ,(631152014, 15) - ,(662688015, 16) ,(709948816, 17) ,(741484817, 18) - ,(773020818, 19) ,(820454419, 20) ,(867715220, 21) - ,(915148821, 22); diff --git a/mysql-test/lib/mtr_cases.pl b/mysql-test/lib/mtr_cases.pl index 9e943fec9ef..2eda77db08e 100644 --- a/mysql-test/lib/mtr_cases.pl +++ b/mysql-test/lib/mtr_cases.pl @@ -288,6 +288,7 @@ sub collect_one_test_case($$$$$$$) { $tinfo->{'timezone'}= "GMT-3"; # for UNIX_TIMESTAMP tests to work $tinfo->{'slave_num'}= 0; # Default, no slave + $tinfo->{'master_num'}= 1; # Default, 1 master if ( defined mtr_match_prefix($tname,"rpl") ) { if ( $::opt_skip_rpl ) @@ -297,13 +298,8 @@ sub collect_one_test_case($$$$$$$) { return; } - $tinfo->{'slave_num'}= 1; # Default for rpl* tests, use one slave - if ( $tname eq 'rpl_failsafe' or $tname eq 'rpl_chain_temp_table' ) - { - # $tinfo->{'slave_num'}= 3; # Not 3 ? Check old code, strange - } } if ( defined mtr_match_prefix($tname,"federated") ) @@ -344,6 +340,13 @@ sub collect_one_test_case($$$$$$$) { next; } + $value= mtr_match_prefix($opt, "--slave-num="); + if ( defined $value ) + { + $tinfo->{'slave_num'}= $value; + next; + } + $value= mtr_match_prefix($opt, "--result-file="); if ( defined $value ) { @@ -541,6 +544,8 @@ sub collect_one_test_case($$$$$$$) { $tinfo->{'comment'}= "No ndbcluster tests(--skip-ndbcluster)"; return; } + # Ndb tests run with two mysqld masters + $tinfo->{'master_num'}= 2; } else { @@ -556,7 +561,7 @@ sub collect_one_test_case($$$$$$$) { if ( $tinfo->{'innodb_test'} ) { - # This is a test that need inndob + # This is a test that need innodb if ( $::mysqld_variables{'innodb'} eq "FALSE" ) { # innodb is not supported, skip it diff --git a/mysql-test/lib/mtr_misc.pl b/mysql-test/lib/mtr_misc.pl index c016f3dc34f..ef7dda358f2 100644 --- a/mysql-test/lib/mtr_misc.pl +++ b/mysql-test/lib/mtr_misc.pl @@ -8,6 +8,7 @@ use strict; sub mtr_full_hostname (); sub mtr_short_hostname (); +sub mtr_native_path($); sub mtr_init_args ($); sub mtr_add_arg ($$@); sub mtr_path_exists(@); @@ -49,6 +50,22 @@ sub mtr_short_hostname () { return $hostname; } +# Convert path to OS native format +sub mtr_native_path($) +{ + my $path= shift; + + # MySQL version before 5.0 still use cygwin, no need + # to convert path + return $path + if ($::mysql_version_id < 50000); + + $path=~ s/\//\\/g + if ($::glob_win32); + return $path; +} + + # FIXME move to own lib sub mtr_init_args ($) { diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl index cf0dc0dc6f8..ad0fea465d6 100644 --- a/mysql-test/lib/mtr_process.pl +++ b/mysql-test/lib/mtr_process.pl @@ -8,7 +8,7 @@ use Socket; use Errno; use strict; -use POSIX 'WNOHANG'; +use POSIX qw(WNOHANG SIGHUP); sub mtr_run ($$$$$$;$); sub mtr_spawn ($$$$$$;$); @@ -125,19 +125,18 @@ sub spawn_impl ($$$$$$$$) { { if ( $! == $!{EAGAIN} ) # See "perldoc Errno" { - mtr_debug("Got EAGAIN from fork(), sleep 1 second and redo"); + mtr_warning("Got EAGAIN from fork(), sleep 1 second and redo"); sleep(1); redo FORK; } - else - { - mtr_error("$path ($pid) can't be forked"); - } + + mtr_error("$path ($pid) can't be forked, error: $!"); + } if ( $pid ) { - spawn_parent_impl($pid,$mode,$path); + return spawn_parent_impl($pid,$mode,$path); } else { @@ -202,8 +201,11 @@ sub spawn_impl ($$$$$$$$) { { mtr_child_error("failed to execute \"$path\": $!"); } + mtr_error("Should never come here 1!"); } + mtr_error("Should never come here 2!"); } + mtr_error("Should never come here 3!"); } @@ -216,11 +218,21 @@ sub spawn_parent_impl { { if ( $mode eq 'run' ) { - # Simple run of command, we wait for it to return + # Simple run of command, wait blocking for it to return my $ret_pid= waitpid($pid,0); if ( $ret_pid != $pid ) { - mtr_error("$path ($pid) got lost somehow"); + # The "simple" waitpid has failed, print debug info + # and try to handle the error + mtr_warning("waitpid($pid, 0) returned $ret_pid " . + "when waiting for '$path', error: '$!'"); + if ( $ret_pid == -1 ) + { + # waitpid returned -1, that would indicate the process + # no longer exist and waitpid couldn't wait for it. + return 1; + } + mtr_error("Error handling failed"); } return mtr_process_exit_status($?); @@ -1074,6 +1086,13 @@ sub mtr_kill_processes ($) { foreach my $pid (@$pids) { + + if ($pid <= 0) + { + mtr_warning("Trying to kill illegal pid: $pid"); + next; + } + foreach my $sig (15, 9) { last if mtr_im_kill_process([ $pid ], $sig, 10, 1); @@ -1088,12 +1107,6 @@ sub mtr_kill_processes ($) { # ############################################################################## -# FIXME something is wrong, we sometimes terminate with "Hangup" written -# to tty, and no STDERR output telling us why. - -# FIXME for some reason, setting HUP to 'IGNORE' will cause exit() to -# write out "Hangup", and maybe loose some output. We insert a sleep... - sub mtr_exit ($) { my $code= shift; mtr_timer_stop_all($::glob_timers); @@ -1105,7 +1118,7 @@ sub mtr_exit ($) { # set ourselves as the group leader at startup (with # POSIX::setpgrp(0,0)), but then care must be needed to always do # proper child process cleanup. - kill('HUP', -$$) if !$::glob_win32_perl and $$ == getpgrp(); + POSIX::kill(SIGHUP, -$$) if !$::glob_win32_perl and $$ == getpgrp(); exit($code); } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 5002f778da5..e3d4c33cba9 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -58,6 +58,7 @@ $Devel::Trace::TRACE= 0; # Don't trace boring init stuff use File::Path; use File::Basename; use File::Copy; +use File::Temp qw / tempdir /; use Cwd; use Getopt::Long; use Sys::Hostname; @@ -222,10 +223,12 @@ our $opt_ndbconnectstring_slave; our $opt_record; our $opt_report_features; our $opt_check_testcases; +our $opt_mark_progress; our $opt_skip; our $opt_skip_rpl; our $max_slave_num= 0; +our $max_master_num= 0; our $use_innodb; our $opt_skip_test; our $opt_skip_im; @@ -298,6 +301,8 @@ our %mysqld_variables; my $source_dist= 0; +our $opt_max_save_core= 5; +my $num_saved_cores= 0; # Number of core files saved in vardir/log/ so far. ###################################################################### # @@ -342,6 +347,7 @@ sub stop_all_servers (); sub run_mysqltest ($); sub usage ($); + ###################################################################### # # Main program @@ -403,6 +409,15 @@ sub main () { $max_slave_num= $test->{slave_num}; mtr_error("Too many slaves") if $max_slave_num > 3; } + + # Count max number of masters used by a test case + if ( $test->{master_num} > $max_master_num) + { + $max_master_num= $test->{master_num}; + mtr_error("Too many masters") if $max_master_num > 2; + mtr_error("Too few masters") if $max_master_num < 1; + } + $use_innodb||= $test->{'innodb_test'}; } @@ -555,6 +570,7 @@ sub command_line_setup () { # Test case authoring 'record' => \$opt_record, 'check-testcases' => \$opt_check_testcases, + 'mark-progress' => \$opt_mark_progress, # Extra options used when starting mysqld 'mysqld=s' => \@opt_extra_mysqld_opt, @@ -571,11 +587,13 @@ sub command_line_setup () { 'manual-debug' => \$opt_manual_debug, 'ddd' => \$opt_ddd, 'client-ddd' => \$opt_client_ddd, + 'manual-ddd' => \$opt_manual_ddd, 'debugger=s' => \$opt_debugger, 'client-debugger=s' => \$opt_client_debugger, 'strace-client' => \$opt_strace_client, 'master-binary=s' => \$exe_master_mysqld, 'slave-binary=s' => \$exe_slave_mysqld, + 'max-save-core=i' => \$opt_max_save_core, # Coverage, profiling etc 'gcov' => \$opt_gcov, @@ -1030,6 +1048,11 @@ sub command_line_setup () { my $sockdir = $opt_tmpdir; $sockdir =~ s|/+$||; + # On some operating systems, there is a limit to the length of a + # UNIX domain socket's path far below PATH_MAX, so try to avoid long + # socket path names. + $sockdir = tempdir(CLEANUP => 0) if ( length($sockdir) >= 70 ); + # Put this into a hash, will be a C struct $master->[0]= @@ -1215,14 +1238,28 @@ sub command_line_setup () { $path_ndb_testrun_log= "$opt_vardir/log/ndb_testrun.log"; $path_snapshot= "$opt_tmpdir/snapshot_$opt_master_myport/"; + + if ( $opt_valgrind and $opt_debug ) + { + # When both --valgrind and --debug is selected, send + # all output to the trace file, making it possible to + # see the exact location where valgrind complains + foreach my $mysqld (@{$master}, @{$slave}) + { + my $sidx= $mysqld->{idx} ? "$mysqld->{idx}" : ""; + $mysqld->{path_myerr}= + "$opt_vardir/log/" . $mysqld->{type} . "$sidx.trace"; + } + } } sub datadir_list_setup () { # Make a list of all data_dirs - @data_dir_lst = ( - $master->[0]->{'path_myddir'}, - $master->[1]->{'path_myddir'}); + for (my $idx= 0; $idx < $max_master_num; $idx++) + { + push(@data_dir_lst, $master->[$idx]->{'path_myddir'}); + } for (my $idx= 0; $idx < $max_slave_num; $idx++) { @@ -1483,7 +1520,8 @@ sub executable_setup () { sub generate_cmdline_mysqldump ($) { my($mysqld) = @_; return - "$exe_mysqldump --no-defaults -uroot " . + mtr_native_path($exe_mysqldump) . + " --no-defaults -uroot " . "--port=$mysqld->{'port'} " . "--socket=$mysqld->{'path_sock'} --password="; } @@ -1589,14 +1627,14 @@ sub environment_setup () { my $deb_version; if ( $opt_valgrind and -d $debug_libraries_path and (! -e '/etc/debian_version' or - ($deb_version= mtr_grab_file('/etc/debian_version')) == 0 or + ($deb_version= mtr_grab_file('/etc/debian_version')) !~ /^[0-9]+\.[0-9]$/ or $deb_version > 3.1 ) ) { push(@ld_library_paths, $debug_libraries_path); } $ENV{'LD_LIBRARY_PATH'}= join(":", @ld_library_paths, - $ENV{'LD_LIBRARY_PATHS'} ? + $ENV{'LD_LIBRARY_PATH'} ? split(':', $ENV{'LD_LIBRARY_PATH'}) : ()); mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}"); @@ -1686,9 +1724,10 @@ sub environment_setup () { # Setup env so childs can execute mysqlcheck # ---------------------------------------------------- my $cmdline_mysqlcheck= - "$exe_mysqlcheck --no-defaults -uroot " . - "--port=$master->[0]->{'port'} " . - "--socket=$master->[0]->{'path_sock'} --password="; + mtr_native_path($exe_mysqlcheck) . + " --no-defaults -uroot " . + "--port=$master->[0]->{'port'} " . + "--socket=$master->[0]->{'path_sock'} --password="; if ( $opt_debug ) { @@ -1720,7 +1759,8 @@ sub environment_setup () { if ( $exe_mysqlslap ) { my $cmdline_mysqlslap= - "$exe_mysqlslap -uroot " . + mtr_native_path($exe_mysqlslap) . + " -uroot " . "--port=$master->[0]->{'port'} " . "--socket=$master->[0]->{'path_sock'} --password= " . "--lock-directory=$opt_tmpdir"; @@ -1737,7 +1777,8 @@ sub environment_setup () { # Setup env so childs can execute mysqlimport # ---------------------------------------------------- my $cmdline_mysqlimport= - "$exe_mysqlimport -uroot " . + mtr_native_path($exe_mysqlimport) . + " -uroot " . "--port=$master->[0]->{'port'} " . "--socket=$master->[0]->{'path_sock'} --password="; @@ -1753,7 +1794,8 @@ sub environment_setup () { # Setup env so childs can execute mysqlshow # ---------------------------------------------------- my $cmdline_mysqlshow= - "$exe_mysqlshow -uroot " . + mtr_native_path($exe_mysqlshow) . + " -uroot " . "--port=$master->[0]->{'port'} " . "--socket=$master->[0]->{'path_sock'} --password="; @@ -1768,7 +1810,7 @@ sub environment_setup () { # Setup env so childs can execute mysqlbinlog # ---------------------------------------------------- my $cmdline_mysqlbinlog= - "$exe_mysqlbinlog" . + mtr_native_path($exe_mysqlbinlog) . " --no-defaults --local-load=$opt_tmpdir"; if ( $mysql_version_id >= 50000 ) { @@ -1786,7 +1828,8 @@ sub environment_setup () { # Setup env so childs can execute mysql # ---------------------------------------------------- my $cmdline_mysql= - "$exe_mysql --no-defaults --host=localhost --user=root --password= " . + mtr_native_path($exe_mysql) . + " --no-defaults --host=localhost --user=root --password= " . "--port=$master->[0]->{'port'} " . "--socket=$master->[0]->{'path_sock'} ". "--character-sets-dir=$path_charsetsdir"; @@ -1815,17 +1858,17 @@ sub environment_setup () { # ---------------------------------------------------- # Setup env so childs can execute my_print_defaults # ---------------------------------------------------- - $ENV{'MYSQL_MY_PRINT_DEFAULTS'}= $exe_my_print_defaults; + $ENV{'MYSQL_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults); # ---------------------------------------------------- # Setup env so childs can execute mysqladmin # ---------------------------------------------------- - $ENV{'MYSQLADMIN'}= $exe_mysqladmin; + $ENV{'MYSQLADMIN'}= mtr_native_path($exe_mysqladmin); # ---------------------------------------------------- # Setup env so childs can execute perror # ---------------------------------------------------- - $ENV{'MY_PERROR'}= $exe_perror; + $ENV{'MY_PERROR'}= mtr_native_path($exe_perror); # ---------------------------------------------------- # Add the path where mysqld will find udf_example.so @@ -1983,6 +2026,16 @@ sub remove_stale_vardir () { mtr_verbose("Removing $opt_vardir/"); rmtree("$opt_vardir/"); } + + if ( $opt_mem ) + { + # A symlink from var/ to $opt_mem will be set up + # remove the $opt_mem dir to assure the symlink + # won't point at an old directory + mtr_verbose("Removing $opt_mem"); + rmtree($opt_mem); + } + } else { @@ -2090,16 +2143,23 @@ sub check_running_as_root () { close FILE; } - chmod(oct("0755"), $test_file); - unlink($test_file); + # Some filesystems( for example CIFS) allows reading a file + # although mode was set to 0000, but in that case a stat on + # the file will not return 0000 + my $file_mode= (stat($test_file))[2] & 07777; $ENV{'MYSQL_TEST_ROOT'}= "NO"; - if ($result eq "MySQL") + mtr_verbose("result: $result, file_mode: $file_mode"); + if ($result eq "MySQL" && $file_mode == 0) { mtr_warning("running this script as _root_ will cause some " . "tests to be skipped"); $ENV{'MYSQL_TEST_ROOT'}= "YES"; } + + chmod(oct("0755"), $test_file); + unlink($test_file); + } @@ -2629,8 +2689,10 @@ sub mysql_install_db () { install_db('master', $master->[0]->{'path_myddir'}); - # FIXME check if testcase really is using second master - copy_install_db('master', $master->[1]->{'path_myddir'}); + if ($max_master_num) + { + copy_install_db('master', $master->[1]->{'path_myddir'}); + } # Install the number of slave databses needed for (my $idx= 0; $idx < $max_slave_num; $idx++) @@ -3267,10 +3329,12 @@ sub save_files_before_restore($$) { # Look for core files foreach my $core_file ( glob("$data_dir/core*") ) { + last if $opt_max_save_core > 0 && $num_saved_cores >= $opt_max_save_core; my $core_name= basename($core_file); mtr_report("Saving $core_name"); mkdir($save_name) if ! -d $save_name; rename("$core_file", "$save_name/$core_name"); + ++$num_saved_cores; } } @@ -3432,11 +3496,10 @@ sub mysqld_arguments ($$$$$) { if ( $glob_use_embedded_server ) { $prefix= "--server-arg="; - } else { - # We can't pass embedded server --no-defaults - mtr_add_arg($args, "--no-defaults"); } + mtr_add_arg($args, "%s--no-defaults", $prefix); + mtr_add_arg($args, "%s--console", $prefix); mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir); mtr_add_arg($args, "%s--character-sets-dir=%s", $prefix, $path_charsetsdir); @@ -3596,7 +3659,7 @@ sub mysqld_arguments ($$$$$) { if ( $mysql_version_id <= 50106 ) { # Force mysqld to use log files up until 5.1.6 - mtr_add_arg($args, "%s--log=%s", $prefix, $master->[0]->{'path_mylog'}); + mtr_add_arg($args, "%s--log=%s", $prefix, $slave->[0]->{'path_mylog'}); } else { @@ -4165,7 +4228,8 @@ sub run_testcase_start_servers($) { } - if ( $clusters->[0]->{'pid'} and ! $master->[1]->{'pid'} ) + if ( $clusters->[0]->{'pid'} and ! $master->[1]->{'pid'} and + $tinfo->{'master_num'} > 1 ) { # Test needs cluster, start an extra mysqld connected to cluster @@ -4376,6 +4440,10 @@ sub run_mysqltest ($) { mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir); mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); + # Log line number and time for each line in .test file + mtr_add_arg($args, "--mark-progress") + if $opt_mark_progress; + if ($tinfo->{'component_id'} eq 'im') { mtr_add_arg($args, "--socket=%s", $instance_manager->{'path_sock'}); @@ -4473,7 +4541,8 @@ sub run_mysqltest ($) { # ---------------------------------------------------------------------- # export MYSQL_TEST variable containing <path>/mysqltest <args> # ---------------------------------------------------------------------- - $ENV{'MYSQL_TEST'}= "$exe_mysqltest " . join(" ", @$args); + $ENV{'MYSQL_TEST'}= + mtr_native_path($exe_mysqltest) . " " . join(" ", @$args); # ---------------------------------------------------------------------- # Add arguments that should not go into the MYSQL_TEST env var @@ -4586,8 +4655,7 @@ sub gdb_arguments { if ( $opt_manual_gdb ) { print "\nTo start gdb for $type, type in another window:\n"; - print "cd $glob_mysql_test_dir;\n"; - print "gdb -x $gdb_init_file $$exe\n"; + print "gdb -cd $glob_mysql_test_dir -x $gdb_init_file $$exe\n"; # Indicate the exe should not be started $$exe= undef; @@ -4651,8 +4719,7 @@ sub ddd_arguments { if ( $opt_manual_ddd ) { print "\nTo start ddd for $type, type in another window:\n"; - print "cd $glob_mysql_test_dir;\n"; - print "ddd -x $gdb_init_file $$exe\n"; + print "ddd -cd $glob_mysql_test_dir -x $gdb_init_file $$exe\n"; # Indicate the exe should not be started $$exe= undef; @@ -4684,9 +4751,7 @@ sub debugger_arguments { my $exe= shift; my $debugger= $opt_debugger || $opt_client_debugger; - # FIXME Need to change the below "eq"'s to - # "case unsensitive string contains" - if ( $debugger eq "vcexpress" or $debugger eq "vc") + if ( $debugger =~ /vcexpress|vc|devenv/ ) { # vc[express] /debugexe exe arg1 .. argn @@ -4694,22 +4759,38 @@ sub debugger_arguments { unshift(@$$args, "/debugexe"); unshift(@$$args, "$$exe"); + # Set exe to debuggername + $$exe= $debugger; + } - elsif ( $debugger eq "windbg" ) + elsif ( $debugger =~ /windbg/ ) { # windbg exe arg1 .. argn # Add name of the exe before args unshift(@$$args, "$$exe"); + # Set exe to debuggername + $$exe= $debugger; + + } + elsif ( $debugger eq "dbx" ) + { + # xterm -e dbx -r exe arg1 .. argn + + unshift(@$$args, $$exe); + unshift(@$$args, "-r"); + unshift(@$$args, $debugger); + unshift(@$$args, "-e"); + + $$exe= "xterm"; + } else { mtr_error("Unknown argument \"$debugger\" passed to --debugger"); } - # Set exe to debuggername - $$exe= $debugger; } @@ -4829,6 +4910,7 @@ Options for test case authoring record TESTNAME (Re)genereate the result file for TESTNAME check-testcases Check testcases for sideeffects + mark-progress Log line number and elapsed time to <testname>.progress Options that pass on options @@ -4858,6 +4940,9 @@ Options for debugging the product master-binary=PATH Specify the master "mysqld" to use slave-binary=PATH Specify the slave "mysqld" to use strace-client Create strace output for mysqltest client + max-save-core Limit the number of core files saved (to avoid filling + up disks for heavily crashing server). Defaults to + $opt_max_save_core, set to 0 for no limit. Options for coverage, profiling etc diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result index 60830cd9c45..8957e1ee7a1 100644 --- a/mysql-test/r/alter_table.result +++ b/mysql-test/r/alter_table.result @@ -690,3 +690,121 @@ SHOW INDEX FROM bug24219_2; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment bug24219_2 1 a 1 a A NULL NULL NULL YES BTREE disabled DROP TABLE bug24219_2; +drop table if exists table_24562; +create table table_24562( +section int, +subsection int, +title varchar(50)); +insert into table_24562 values +(1, 0, "Introduction"), +(1, 1, "Authors"), +(1, 2, "Acknowledgements"), +(2, 0, "Basics"), +(2, 1, "Syntax"), +(2, 2, "Client"), +(2, 3, "Server"), +(3, 0, "Intermediate"), +(3, 1, "Complex queries"), +(3, 2, "Stored Procedures"), +(3, 3, "Stored Functions"), +(4, 0, "Advanced"), +(4, 1, "Replication"), +(4, 2, "Load balancing"), +(4, 3, "High availability"), +(5, 0, "Conclusion"); +select * from table_24562; +section subsection title +1 0 Introduction +1 1 Authors +1 2 Acknowledgements +2 0 Basics +2 1 Syntax +2 2 Client +2 3 Server +3 0 Intermediate +3 1 Complex queries +3 2 Stored Procedures +3 3 Stored Functions +4 0 Advanced +4 1 Replication +4 2 Load balancing +4 3 High availability +5 0 Conclusion +alter table table_24562 add column reviewer varchar(20), +order by title; +select * from table_24562; +section subsection title reviewer +1 2 Acknowledgements NULL +4 0 Advanced NULL +1 1 Authors NULL +2 0 Basics NULL +2 2 Client NULL +3 1 Complex queries NULL +5 0 Conclusion NULL +4 3 High availability NULL +3 0 Intermediate NULL +1 0 Introduction NULL +4 2 Load balancing NULL +4 1 Replication NULL +2 3 Server NULL +3 3 Stored Functions NULL +3 2 Stored Procedures NULL +2 1 Syntax NULL +update table_24562 set reviewer="Me" where section=2; +update table_24562 set reviewer="You" where section=3; +alter table table_24562 +order by section ASC, subsection DESC; +select * from table_24562; +section subsection title reviewer +1 2 Acknowledgements NULL +1 1 Authors NULL +1 0 Introduction NULL +2 3 Server Me +2 2 Client Me +2 1 Syntax Me +2 0 Basics Me +3 3 Stored Functions You +3 2 Stored Procedures You +3 1 Complex queries You +3 0 Intermediate You +4 3 High availability NULL +4 2 Load balancing NULL +4 1 Replication NULL +4 0 Advanced NULL +5 0 Conclusion NULL +alter table table_24562 +order by table_24562.subsection ASC, table_24562.section DESC; +select * from table_24562; +section subsection title reviewer +5 0 Conclusion NULL +4 0 Advanced NULL +3 0 Intermediate You +2 0 Basics Me +1 0 Introduction NULL +4 1 Replication NULL +3 1 Complex queries You +2 1 Syntax Me +1 1 Authors NULL +4 2 Load balancing NULL +3 2 Stored Procedures You +2 2 Client Me +1 2 Acknowledgements NULL +4 3 High availability NULL +3 3 Stored Functions You +2 3 Server Me +alter table table_24562 order by 12; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '12' at line 1 +alter table table_24562 order by (section + 12); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(section + 12)' at line 1 +alter table table_24562 order by length(title); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'length(title)' at line 1 +alter table table_24562 order by (select 12 from dual); +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select 12 from dual)' at line 1 +alter table table_24562 order by no_such_col; +ERROR 42S22: Unknown column 'no_such_col' in 'order clause' +drop table table_24562; +CREATE TABLE t1 (c1 CHAR(255)); +INSERT INTO t1 VALUES (REPEAT("x", 255)), (REPEAT("x", 255)); +ALTER TABLE t1 ADD UNIQUE (c1); +ERROR 23000: Duplicate entry 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' for key 1 +DROP TABLE t1; diff --git a/mysql-test/r/blackhole.result b/mysql-test/r/blackhole.result index 4b779094376..2d020e0eed7 100644 --- a/mysql-test/r/blackhole.result +++ b/mysql-test/r/blackhole.result @@ -123,3 +123,7 @@ master-bin.000001 # Query 1 # use `test`; create table t3 like t1 master-bin.000001 # Query 1 # use `test`; insert into t1 select * from t3 master-bin.000001 # Query 1 # use `test`; replace into t1 select * from t3 drop table t1,t2,t3; +CREATE TABLE t1(a INT) ENGINE=BLACKHOLE; +INSERT DELAYED INTO t1 VALUES(1); +ERROR HY000: Table storage engine for 't1' doesn't have this option +DROP TABLE t1; diff --git a/mysql-test/r/cast.result b/mysql-test/r/cast.result index 101b9ac3f7e..f6f46bd4079 100644 --- a/mysql-test/r/cast.result +++ b/mysql-test/r/cast.result @@ -278,3 +278,13 @@ double_val cast_val -1e+30 -9223372036854775808 1e+30 9223372036854775807 DROP TABLE t1; +select isnull(date(NULL)), isnull(cast(NULL as DATE)); +isnull(date(NULL)) isnull(cast(NULL as DATE)) +1 1 +SELECT CAST(cast('01-01-01' as date) AS UNSIGNED); +CAST(cast('01-01-01' as date) AS UNSIGNED) +20010101 +SELECT CAST(cast('01-01-01' as date) AS SIGNED); +CAST(cast('01-01-01' as date) AS SIGNED) +20010101 +End of 4.1 tests diff --git a/mysql-test/r/ctype_hebrew.result b/mysql-test/r/ctype_hebrew.result new file mode 100644 index 00000000000..d938b2e47f3 --- /dev/null +++ b/mysql-test/r/ctype_hebrew.result @@ -0,0 +1,11 @@ +DROP TABLE IF EXISTS t1; +SET NAMES hebrew; +CREATE TABLE t1 (a char(1)) DEFAULT CHARSET=hebrew; +INSERT INTO t1 VALUES (0xFD),(0xFE); +ALTER TABLE t1 CONVERT TO CHARACTER SET utf8; +SELECT HEX(a) FROM t1; +HEX(a) +E2808E +E2808F +DROP TABLE t1; +End of 4.1 tests diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index fdf21a50a02..24f29b23e87 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -124,12 +124,34 @@ create table t1 select date_format("2004-01-19 10:10:10", "%Y-%m-%d"); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `date_format("2004-01-19 10:10:10", "%Y-%m-%d")` binary(10) default NULL + `date_format("2004-01-19 10:10:10", "%Y-%m-%d")` char(10) character set utf8 default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 select * from t1; date_format("2004-01-19 10:10:10", "%Y-%m-%d") 2004-01-19 drop table t1; +set names utf8; +set LC_TIME_NAMES='fr_FR'; +create table t1 (s1 char(20) character set latin1); +insert into t1 values (date_format('2004-02-02','%M')); +select hex(s1) from t1; +hex(s1) +66E97672696572 +drop table t1; +create table t1 (s1 char(20) character set koi8r); +set LC_TIME_NAMES='ru_RU'; +insert into t1 values (date_format('2004-02-02','%M')); +insert into t1 values (date_format('2004-02-02','%b')); +insert into t1 values (date_format('2004-02-02','%W')); +insert into t1 values (date_format('2004-02-02','%a')); +select hex(s1), s1 from t1; +hex(s1) s1 +E6C5D7D2C1CCD1 Ð¤ÐµÐ²Ñ€Ð°Ð»Ñ +E6C5D7 Фев +F0CFCEC5C4C5CCD8CEC9CB Понедельник +F0CEC4 Пнд +drop table t1; +set LC_TIME_NAMES='en_US'; set names koi8r; create table t1 (s1 char(1) character set utf8); insert into t1 values (_koi8r'ÁÂ'); diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result index d4f9a4f0c56..07cc37fe6bc 100644 --- a/mysql-test/r/date_formats.result +++ b/mysql-test/r/date_formats.result @@ -181,12 +181,12 @@ date format datetime 2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 2003-01-02 02:11:12.123450 2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 2003-01-02 00:11:12.123450 2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12 -10:20:10 %H:%i:%s 0000-00-00 00:00:00 -10:20:10 %h:%i:%s.%f 0000-00-00 00:00:00 -10:20:10 %T 0000-00-00 00:00:00 -10:20:10AM %h:%i:%s%p 0000-00-00 00:00:00 -10:20:10AM %r 0000-00-00 00:00:00 -10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 00:00:00 +10:20:10 %H:%i:%s 0000-00-00 10:20:10 +10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10 +10:20:10 %T 0000-00-00 10:20:10 +10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10 +10:20:10AM %r 0000-00-00 10:20:10 +10:20:10.44AM %h:%i:%s.%f%p 0000-00-00 10:20:10.440000 15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58 15 September 2001 %d %M %Y 2001-09-15 00:00:00 15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00 @@ -203,13 +203,6 @@ Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00 15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00 15-01-20 %d-%m-%y 2020-01-15 00:00:00 15-2001-1 %d-%Y-%c 2001-01-15 00:00:00 -Warnings: -Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect datetime value: '0000-00-00 10:20:10.440000' select date,format,DATE(str_to_date(date, format)) as date2 from t1; date format date2 2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 @@ -250,12 +243,12 @@ date format time 2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 02:11:12.123450 2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 00:11:12.123450 2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12 -10:20:10 %H:%i:%s NULL -10:20:10 %h:%i:%s.%f NULL -10:20:10 %T NULL -10:20:10AM %h:%i:%s%p NULL -10:20:10AM %r NULL -10:20:10.44AM %h:%i:%s.%f%p NULL +10:20:10 %H:%i:%s 10:20:10 +10:20:10 %h:%i:%s.%f 10:20:10 +10:20:10 %T 10:20:10 +10:20:10AM %h:%i:%s%p 10:20:10 +10:20:10AM %r 10:20:10 +10:20:10.44AM %h:%i:%s.%f%p 10:20:10.440000 15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58 15 September 2001 %d %M %Y 00:00:00 15 SEPTEMB 2001 %d %M %Y 00:00:00 @@ -272,13 +265,6 @@ Tuesday 52 2001 %W %V %X 00:00:00 15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00 15-01-20 %d-%m-%y 00:00:00 15-2001-1 %d-%Y-%c 00:00:00 -Warnings: -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10.440000' select date,format,concat(TIME(str_to_date(date, format))) as time2 from t1; date format time2 2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 10:11:12 @@ -288,12 +274,12 @@ date format time2 2003-01-02 02:11:12.12345AM %Y-%m-%d %h:%i:%S.%f %p 02:11:12.123450 2003-01-02 12:11:12.12345 am %Y-%m-%d %h:%i:%S.%f%p 00:11:12.123450 2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12 -10:20:10 %H:%i:%s NULL -10:20:10 %h:%i:%s.%f NULL -10:20:10 %T NULL -10:20:10AM %h:%i:%s%p NULL -10:20:10AM %r NULL -10:20:10.44AM %h:%i:%s.%f%p NULL +10:20:10 %H:%i:%s 10:20:10 +10:20:10 %h:%i:%s.%f 10:20:10 +10:20:10 %T 10:20:10 +10:20:10AM %h:%i:%s%p 10:20:10 +10:20:10AM %r 10:20:10 +10:20:10.44AM %h:%i:%s.%f%p 10:20:10.440000 15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58 15 September 2001 %d %M %Y 00:00:00 15 SEPTEMB 2001 %d %M %Y 00:00:00 @@ -310,13 +296,6 @@ Tuesday 52 2001 %W %V %X 00:00:00 15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00 15-01-20 %d-%m-%y 00:00:00 15-2001-1 %d-%Y-%c 00:00:00 -Warnings: -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10' -Warning 1292 Truncated incorrect time value: '0000-00-00 10:20:10.440000' select concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d')); concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d')) 2003-01-02 08:11:02.123456 diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result index 7a6af8fd905..a5c22e66569 100644 --- a/mysql-test/r/delete.result +++ b/mysql-test/r/delete.result @@ -186,4 +186,11 @@ select count(*) from t1; count(*) 0 drop table t1; +create table t1(f1 int primary key); +insert into t1 values (4),(3),(1),(2); +delete from t1 where (@a:= f1) order by f1 limit 1; +select @a; +@a +1 +drop table t1; End of 4.1 tests diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result index c1dd5f80d5c..3700ace4b19 100644 --- a/mysql-test/r/fulltext.result +++ b/mysql-test/r/fulltext.result @@ -447,3 +447,10 @@ a MATCH(a) AGAINST('test1 test') test1 0.68526661396027 DEALLOCATE PREPARE stmt; DROP TABLE t1; +CREATE TABLE t1 (a VARCHAR(255), FULLTEXT(a)); +SELECT * FROM t1 IGNORE INDEX(a) WHERE MATCH(a) AGAINST('test'); +a +ALTER TABLE t1 DISABLE KEYS; +SELECT * FROM t1 WHERE MATCH(a) AGAINST('test'); +ERROR HY000: Can't find FULLTEXT index matching the column list +DROP TABLE t1; diff --git a/mysql-test/r/fulltext_left_join.result b/mysql-test/r/fulltext_left_join.result index f3dad290525..fdf11c14cc4 100644 --- a/mysql-test/r/fulltext_left_join.result +++ b/mysql-test/r/fulltext_left_join.result @@ -50,3 +50,43 @@ venue_id venue_text dt name entity_id 1 a1 2003-05-23 19:30:00 aberdeen town hall 1 NULL a2 2003-05-23 19:30:00 NULL NULL drop table t1,t2; +create table t1 (id int not null primary key, d char(200) not null, e char(200)); +insert into t1 values (1, 'aword', null), (2, 'aword', 'bword'), (3, 'bword', null), (4, 'bword', 'aword'), (5, 'aword and bword', null); +select * from t1 where match(d, e) against ('+aword +bword' in boolean mode); +id d e +2 aword bword +4 bword aword +5 aword and bword NULL +create table t2 (m_id int not null, f char(200), key (m_id)); +insert into t2 values (1, 'bword'), (3, 'aword'), (5, ''); +select * from t1 left join t2 on m_id = id where match(d, e, f) against ('+aword +bword' in boolean mode); +id d e m_id f +1 aword NULL 1 bword +2 aword bword NULL NULL +3 bword NULL 3 aword +4 bword aword NULL NULL +5 aword and bword NULL 5 +drop table t1,t2; +CREATE TABLE t1 ( +id int(10) NOT NULL auto_increment, +link int(10) default NULL, +name mediumtext default NULL, +PRIMARY KEY (id), +FULLTEXT (name) +); +INSERT INTO t1 VALUES (1, 1, 'string'); +INSERT INTO t1 VALUES (2, 0, 'string'); +CREATE TABLE t2 ( +id int(10) NOT NULL auto_increment, +name mediumtext default NULL, +PRIMARY KEY (id), +FULLTEXT (name) +); +INSERT INTO t2 VALUES (1, 'string'); +SELECT t1.*, MATCH(t1.name) AGAINST('string') AS relevance +FROM t1 LEFT JOIN t2 ON t1.link = t2.id +WHERE MATCH(t1.name, t2.name) AGAINST('string' IN BOOLEAN MODE); +id link name relevance +1 1 string 0 +2 0 string 0 +DROP TABLE t1,t2; diff --git a/mysql-test/r/func_sapdb.result b/mysql-test/r/func_sapdb.result index 447cadb9898..7c46b966dab 100644 --- a/mysql-test/r/func_sapdb.result +++ b/mysql-test/r/func_sapdb.result @@ -229,9 +229,7 @@ a 10000 select microsecond(19971231235959.01) as a; a -0 -Warnings: -Warning 1292 Truncated incorrect time value: '19971231235959.01' +10000 select date_add("1997-12-31",INTERVAL "10.09" SECOND_MICROSECOND) as a; a 1997-12-31 00:00:10.090000 diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result index 2c15e5581e8..af6a4d20cff 100644 --- a/mysql-test/r/func_str.result +++ b/mysql-test/r/func_str.result @@ -806,7 +806,7 @@ explain extended select md5('hello'), sha('abc'), sha1('abc'), soundex(''), 'moo id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: -Note 1003 select md5(_latin1'hello') AS `md5('hello')`,sha(_latin1'abc') AS `sha('abc')`,sha(_latin1'abc') AS `sha1('abc')`,soundex(_latin1'') AS `soundex('')`,(soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`,aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`,concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`,reverse(_latin1'abc') AS `reverse('abc')`,rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`,lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`,concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`,make_set(255,_latin2'a',_latin2'b',_latin2'c') AS `make_set(255,_latin2'a',_latin2'b',_latin2'c')`,elt(2,1) AS `elt(2,1)`,locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`,format(130,10) AS `format(130,10)`,char(0) AS `char(0)`,conv(130,16,10) AS `conv(130,16,10)`,hex(130) AS `hex(130)`,cast(_latin1'HE' as char charset binary) AS `binary 'HE'`,export_set(255,_latin2'y',_latin2'n',_latin2' ') AS `export_set(255,_latin2'y',_latin2'n',_latin2' ')`,field((_latin1'b' collate _latin1'latin1_bin'),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`,find_in_set(_latin1'B',_latin1'a,b,c,d') AS `FIND_IN_SET(_latin1'B',_latin1'a,b,c,d')`,collation(conv(130,16,10)) AS `collation(conv(130,16,10))`,coercibility(conv(130,16,10)) AS `coercibility(conv(130,16,10))`,length(_latin1'\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`,length(_latin1'hello') AS `length('hello')`,char(ascii(_latin1'h')) AS `char(ascii('h'))`,ord(_latin1'h') AS `ord('h')`,quote((1 / 0)) AS `quote(1/0)`,crc32(_latin1'123') AS `crc32("123")`,replace(_latin1'aaaa',_latin1'a',_latin1'b') AS `replace('aaaa','a','b')`,insert(_latin1'txs',2,1,_latin1'hi') AS `insert('txs',2,1,'hi')`,left(_latin2'a',1) AS `left(_latin2'a',1)`,right(_latin2'a',1) AS `right(_latin2'a',1)`,lcase(_latin2'a') AS `lcase(_latin2'a')`,ucase(_latin2'a') AS `ucase(_latin2'a')`,substr(_latin1'abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`,substr_index(_latin1'1abcd;2abcd;3abcd;4abcd',_latin1';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`,trim(_latin2' a ') AS `trim(_latin2' a ')`,ltrim(_latin2' a ') AS `ltrim(_latin2' a ')`,rtrim(_latin2' a ') AS `rtrim(_latin2' a ')`,decode(encode(repeat(_latin1'a',100000))) AS `decode(encode(repeat("a",100000),"monty"),"monty")` +Note 1003 select md5(_latin1'hello') AS `md5('hello')`,sha(_latin1'abc') AS `sha('abc')`,sha(_latin1'abc') AS `sha1('abc')`,soundex(_latin1'') AS `soundex('')`,(soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`,aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`,concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`,reverse(_latin1'abc') AS `reverse('abc')`,rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`,lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`,concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`,make_set(255,_latin2'a',_latin2'b',_latin2'c') AS `make_set(255,_latin2'a',_latin2'b',_latin2'c')`,elt(2,1) AS `elt(2,1)`,locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`,format(130,10) AS `format(130,10)`,char(0) AS `char(0)`,conv(130,16,10) AS `conv(130,16,10)`,hex(130) AS `hex(130)`,cast(_latin1'HE' as char charset binary) AS `binary 'HE'`,export_set(255,_latin2'y',_latin2'n',_latin2' ') AS `export_set(255,_latin2'y',_latin2'n',_latin2' ')`,field((_latin1'b' collate _latin1'latin1_bin'),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`,find_in_set(_latin1'B',_latin1'a,b,c,d') AS `FIND_IN_SET(_latin1'B',_latin1'a,b,c,d')`,collation(conv(130,16,10)) AS `collation(conv(130,16,10))`,coercibility(conv(130,16,10)) AS `coercibility(conv(130,16,10))`,length(_latin1'\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`,length(_latin1'hello') AS `length('hello')`,char(ascii(_latin1'h')) AS `char(ascii('h'))`,ord(_latin1'h') AS `ord('h')`,quote((1 / 0)) AS `quote(1/0)`,crc32(_latin1'123') AS `crc32("123")`,replace(_latin1'aaaa',_latin1'a',_latin1'b') AS `replace('aaaa','a','b')`,insert(_latin1'txs',2,1,_latin1'hi') AS `insert('txs',2,1,'hi')`,left(_latin2'a',1) AS `left(_latin2'a',1)`,right(_latin2'a',1) AS `right(_latin2'a',1)`,lcase(_latin2'a') AS `lcase(_latin2'a')`,ucase(_latin2'a') AS `ucase(_latin2'a')`,substr(_latin1'abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`,substr_index(_latin1'1abcd;2abcd;3abcd;4abcd',_latin1';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`,trim(_latin2' a ') AS `trim(_latin2' a ')`,ltrim(_latin2' a ') AS `ltrim(_latin2' a ')`,rtrim(_latin2' a ') AS `rtrim(_latin2' a ')`,decode(encode(repeat(_latin1'a',100000),'monty'),'monty') AS `decode(encode(repeat("a",100000),"monty"),"monty")` SELECT lpad(12345, 5, "#"); lpad(12345, 5, "#") 12345 @@ -1064,4 +1064,16 @@ id select_type table type possible_keys key key_len ref rows Extra Warnings: Note 1003 select test.t1.s AS `s` from test.t1 where (trim(both _latin1'y' from test.t1.s) > _latin1'ab') DROP TABLE t1; +create table t1(f1 varchar(4)); +explain extended select encode(f1,'zxcv') as 'enc' from t1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found +Warnings: +Note 1003 select encode(test.t1.f1,'zxcv') AS `enc` from test.t1 +explain extended select decode(f1,'zxcv') as 'enc' from t1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found +Warnings: +Note 1003 select decode(test.t1.f1,'zxcv') AS `enc` from test.t1 +drop table t1; End of 4.1 tests diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index fdfb42c878d..fc218067d29 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -854,4 +854,8 @@ H select last_day('0000-00-00'); last_day('0000-00-00') NULL +select isnull(week(now() + 0)), isnull(week(now() + 0.2)), +week(20061108), week(20061108.01), week(20061108085411.000002); +isnull(week(now() + 0)) isnull(week(now() + 0.2)) week(20061108) week(20061108.01) week(20061108085411.000002) +0 0 45 45 45 End of 4.1 tests diff --git a/mysql-test/r/gis-rtree.result b/mysql-test/r/gis-rtree.result index bdb3de4de75..762dda4e501 100644 --- a/mysql-test/r/gis-rtree.result +++ b/mysql-test/r/gis-rtree.result @@ -868,3 +868,555 @@ SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0)); 1 1 DROP TABLE t1; +CREATE TABLE t1 (id bigint(12) unsigned NOT NULL auto_increment, +c2 varchar(15) collate utf8_bin default NULL, +c1 varchar(15) collate utf8_bin default NULL, +c3 varchar(10) collate utf8_bin default NULL, +spatial_point point NOT NULL, +PRIMARY KEY(id), +SPATIAL KEY (spatial_point(32)) +)ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES +('y', 's', 'j', GeomFromText('POINT(167 74)')), +('r', 'n', 'd', GeomFromText('POINT(215 118)')), +('g', 'n', 'e', GeomFromText('POINT(203 98)')), +('h', 'd', 'd', GeomFromText('POINT(54 193)')), +('r', 'x', 'y', GeomFromText('POINT(47 69)')), +('t', 'q', 'r', GeomFromText('POINT(109 42)')), +('a', 'z', 'd', GeomFromText('POINT(0 154)')), +('x', 'v', 'o', GeomFromText('POINT(174 131)')), +('b', 'r', 'a', GeomFromText('POINT(114 253)')), +('x', 'z', 'i', GeomFromText('POINT(163 21)')), +('w', 'p', 'i', GeomFromText('POINT(42 102)')), +('g', 'j', 'j', GeomFromText('POINT(170 133)')), +('m', 'g', 'n', GeomFromText('POINT(28 22)')), +('b', 'z', 'h', GeomFromText('POINT(174 28)')), +('q', 'k', 'f', GeomFromText('POINT(233 73)')), +('w', 'w', 'a', GeomFromText('POINT(124 200)')), +('t', 'j', 'w', GeomFromText('POINT(252 101)')), +('d', 'r', 'd', GeomFromText('POINT(98 18)')), +('w', 'o', 'y', GeomFromText('POINT(165 31)')), +('y', 'h', 't', GeomFromText('POINT(14 220)')), +('d', 'p', 'u', GeomFromText('POINT(223 196)')), +('g', 'y', 'g', GeomFromText('POINT(207 96)')), +('x', 'm', 'n', GeomFromText('POINT(214 3)')), +('g', 'v', 'e', GeomFromText('POINT(140 205)')), +('g', 'm', 'm', GeomFromText('POINT(10 236)')), +('i', 'r', 'j', GeomFromText('POINT(137 228)')), +('w', 's', 'p', GeomFromText('POINT(115 6)')), +('o', 'n', 'k', GeomFromText('POINT(158 129)')), +('j', 'h', 'l', GeomFromText('POINT(129 72)')), +('f', 'x', 'l', GeomFromText('POINT(139 207)')), +('u', 'd', 'n', GeomFromText('POINT(125 109)')), +('b', 'a', 'z', GeomFromText('POINT(30 32)')), +('m', 'h', 'o', GeomFromText('POINT(251 251)')), +('f', 'r', 'd', GeomFromText('POINT(243 211)')), +('b', 'd', 'r', GeomFromText('POINT(232 80)')), +('g', 'k', 'v', GeomFromText('POINT(15 100)')), +('i', 'f', 'c', GeomFromText('POINT(109 66)')), +('r', 't', 'j', GeomFromText('POINT(178 6)')), +('y', 'n', 'f', GeomFromText('POINT(233 211)')), +('f', 'y', 'm', GeomFromText('POINT(99 16)')), +('z', 'q', 'l', GeomFromText('POINT(39 49)')), +('j', 'c', 'r', GeomFromText('POINT(75 187)')), +('c', 'y', 'y', GeomFromText('POINT(246 253)')), +('w', 'u', 'd', GeomFromText('POINT(56 190)')), +('n', 'q', 'm', GeomFromText('POINT(73 149)')), +('d', 'y', 'a', GeomFromText('POINT(134 6)')), +('z', 's', 'w', GeomFromText('POINT(216 225)')), +('d', 'u', 'k', GeomFromText('POINT(132 70)')), +('f', 'v', 't', GeomFromText('POINT(187 141)')), +('r', 'r', 'a', GeomFromText('POINT(152 39)')), +('y', 'p', 'o', GeomFromText('POINT(45 27)')), +('p', 'n', 'm', GeomFromText('POINT(228 148)')), +('e', 'g', 'e', GeomFromText('POINT(88 81)')), +('m', 'a', 'h', GeomFromText('POINT(35 29)')), +('m', 'h', 'f', GeomFromText('POINT(30 71)')), +('h', 'k', 'i', GeomFromText('POINT(244 78)')), +('z', 'v', 'd', GeomFromText('POINT(241 38)')), +('q', 'l', 'j', GeomFromText('POINT(13 71)')), +('s', 'p', 'g', GeomFromText('POINT(108 38)')), +('q', 's', 'j', GeomFromText('POINT(92 101)')), +('l', 'h', 'g', GeomFromText('POINT(120 78)')), +('w', 't', 'b', GeomFromText('POINT(193 109)')), +('b', 's', 's', GeomFromText('POINT(223 211)')), +('w', 'w', 'y', GeomFromText('POINT(122 42)')), +('q', 'c', 'c', GeomFromText('POINT(104 102)')), +('w', 'g', 'n', GeomFromText('POINT(213 120)')), +('p', 'q', 'a', GeomFromText('POINT(247 148)')), +('c', 'z', 'e', GeomFromText('POINT(18 106)')), +('z', 'u', 'n', GeomFromText('POINT(70 133)')), +('j', 'n', 'x', GeomFromText('POINT(232 13)')), +('e', 'h', 'f', GeomFromText('POINT(22 135)')), +('w', 'l', 'f', GeomFromText('POINT(9 180)')), +('a', 'v', 'q', GeomFromText('POINT(163 228)')), +('i', 'z', 'o', GeomFromText('POINT(180 100)')), +('e', 'c', 'l', GeomFromText('POINT(182 231)')), +('c', 'k', 'o', GeomFromText('POINT(19 60)')), +('q', 'f', 'p', GeomFromText('POINT(79 95)')), +('m', 'd', 'r', GeomFromText('POINT(3 127)')), +('m', 'e', 't', GeomFromText('POINT(136 154)')), +('w', 'w', 'w', GeomFromText('POINT(102 15)')), +('l', 'n', 'q', GeomFromText('POINT(71 196)')), +('p', 'k', 'c', GeomFromText('POINT(47 139)')), +('j', 'o', 'r', GeomFromText('POINT(177 128)')), +('j', 'q', 'a', GeomFromText('POINT(170 6)')), +('b', 'a', 'o', GeomFromText('POINT(63 211)')), +('g', 's', 'o', GeomFromText('POINT(144 251)')), +('w', 'u', 'w', GeomFromText('POINT(221 214)')), +('g', 'a', 'm', GeomFromText('POINT(14 102)')), +('u', 'q', 'z', GeomFromText('POINT(86 200)')), +('k', 'a', 'm', GeomFromText('POINT(144 222)')), +('j', 'u', 'r', GeomFromText('POINT(216 142)')), +('q', 'k', 'v', GeomFromText('POINT(121 236)')), +('p', 'o', 'r', GeomFromText('POINT(108 102)')), +('b', 'd', 'x', GeomFromText('POINT(127 198)')), +('k', 's', 'a', GeomFromText('POINT(2 150)')), +('f', 'm', 'f', GeomFromText('POINT(160 191)')), +('q', 'y', 'x', GeomFromText('POINT(98 111)')), +('o', 'f', 'm', GeomFromText('POINT(232 218)')), +('c', 'w', 'j', GeomFromText('POINT(156 165)')), +('s', 'q', 'v', GeomFromText('POINT(98 161)')); +SET @@RAND_SEED1=692635050, @@RAND_SEED2=297339954; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=159925977, @@RAND_SEED2=942570618; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=328169745, @@RAND_SEED2=410451954; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=178507359, @@RAND_SEED2=332493072; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=1034033013, @@RAND_SEED2=558966507; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +UPDATE t1 set spatial_point=GeomFromText('POINT(230 9)') where c1 like 'y%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(95 35)') where c1 like 'j%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(93 99)') where c1 like 'a%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(19 81)') where c1 like 'r%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(20 177)') where c1 like 'h%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(221 193)') where c1 like 'u%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(195 205)') where c1 like 'd%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(15 213)') where c1 like 'u%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(214 63)') where c1 like 'n%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(243 171)') where c1 like 'c%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(198 82)') where c1 like 'y%'; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES +('f', 'y', 'p', GeomFromText('POINT(109 235)')), +('b', 'e', 'v', GeomFromText('POINT(20 48)')), +('i', 'u', 'f', GeomFromText('POINT(15 55)')), +('o', 'r', 'z', GeomFromText('POINT(105 64)')), +('a', 'p', 'a', GeomFromText('POINT(142 236)')), +('g', 'i', 'k', GeomFromText('POINT(10 49)')), +('x', 'z', 'x', GeomFromText('POINT(192 200)')), +('c', 'v', 'r', GeomFromText('POINT(94 168)')), +('y', 'z', 'e', GeomFromText('POINT(141 51)')), +('h', 'm', 'd', GeomFromText('POINT(35 251)')), +('v', 'm', 'q', GeomFromText('POINT(44 90)')), +('j', 'l', 'z', GeomFromText('POINT(67 237)')), +('i', 'v', 'a', GeomFromText('POINT(75 14)')), +('b', 'q', 't', GeomFromText('POINT(153 33)')), +('e', 'm', 'a', GeomFromText('POINT(247 49)')), +('l', 'y', 'g', GeomFromText('POINT(56 203)')), +('v', 'o', 'r', GeomFromText('POINT(90 54)')), +('r', 'n', 'd', GeomFromText('POINT(135 83)')), +('j', 't', 'u', GeomFromText('POINT(174 239)')), +('u', 'n', 'g', GeomFromText('POINT(104 191)')), +('p', 'q', 'y', GeomFromText('POINT(63 171)')), +('o', 'q', 'p', GeomFromText('POINT(192 103)')), +('f', 'x', 'e', GeomFromText('POINT(244 30)')), +('n', 'x', 'c', GeomFromText('POINT(92 103)')), +('r', 'q', 'z', GeomFromText('POINT(166 20)')), +('s', 'a', 'j', GeomFromText('POINT(137 205)')), +('z', 't', 't', GeomFromText('POINT(99 134)')), +('o', 'm', 'j', GeomFromText('POINT(217 3)')), +('n', 'h', 'j', GeomFromText('POINT(211 17)')), +('v', 'v', 'a', GeomFromText('POINT(41 137)')), +('q', 'o', 'j', GeomFromText('POINT(5 92)')), +('z', 'y', 'e', GeomFromText('POINT(175 212)')), +('j', 'z', 'h', GeomFromText('POINT(224 194)')), +('a', 'g', 'm', GeomFromText('POINT(31 119)')), +('p', 'c', 'f', GeomFromText('POINT(17 221)')), +('t', 'h', 'k', GeomFromText('POINT(26 203)')), +('u', 'w', 'p', GeomFromText('POINT(47 185)')), +('z', 'a', 'c', GeomFromText('POINT(61 133)')), +('u', 'k', 'a', GeomFromText('POINT(210 115)')), +('k', 'f', 'h', GeomFromText('POINT(125 113)')), +('t', 'v', 'y', GeomFromText('POINT(12 239)')), +('u', 'v', 'd', GeomFromText('POINT(90 24)')), +('m', 'y', 'w', GeomFromText('POINT(25 243)')), +('d', 'n', 'g', GeomFromText('POINT(122 92)')), +('z', 'm', 'f', GeomFromText('POINT(235 110)')), +('q', 'd', 'f', GeomFromText('POINT(233 217)')), +('a', 'v', 'u', GeomFromText('POINT(69 59)')), +('x', 'k', 'p', GeomFromText('POINT(240 14)')), +('i', 'v', 'r', GeomFromText('POINT(154 42)')), +('w', 'h', 'l', GeomFromText('POINT(178 156)')), +('d', 'h', 'n', GeomFromText('POINT(65 157)')), +('c', 'k', 'z', GeomFromText('POINT(62 33)')), +('e', 'l', 'w', GeomFromText('POINT(162 1)')), +('r', 'f', 'i', GeomFromText('POINT(127 71)')), +('q', 'm', 'c', GeomFromText('POINT(63 118)')), +('c', 'h', 'u', GeomFromText('POINT(205 203)')), +('d', 't', 'p', GeomFromText('POINT(234 87)')), +('s', 'g', 'h', GeomFromText('POINT(149 34)')), +('o', 'b', 'q', GeomFromText('POINT(159 179)')), +('k', 'u', 'f', GeomFromText('POINT(202 254)')), +('u', 'f', 'g', GeomFromText('POINT(70 15)')), +('x', 's', 'b', GeomFromText('POINT(25 181)')), +('s', 'c', 'g', GeomFromText('POINT(252 17)')), +('a', 'c', 'f', GeomFromText('POINT(89 67)')), +('r', 'e', 'q', GeomFromText('POINT(55 54)')), +('f', 'i', 'k', GeomFromText('POINT(178 230)')), +('p', 'e', 'l', GeomFromText('POINT(198 28)')), +('w', 'o', 'd', GeomFromText('POINT(204 189)')), +('c', 'a', 'g', GeomFromText('POINT(230 178)')), +('r', 'o', 'e', GeomFromText('POINT(61 116)')), +('w', 'a', 'a', GeomFromText('POINT(178 237)')), +('v', 'd', 'e', GeomFromText('POINT(70 85)')), +('k', 'c', 'e', GeomFromText('POINT(147 118)')), +('d', 'q', 't', GeomFromText('POINT(218 77)')), +('k', 'g', 'f', GeomFromText('POINT(192 113)')), +('w', 'n', 'e', GeomFromText('POINT(92 124)')), +('r', 'm', 'q', GeomFromText('POINT(130 65)')), +('o', 'r', 'r', GeomFromText('POINT(174 233)')), +('k', 'n', 't', GeomFromText('POINT(175 147)')), +('q', 'm', 'r', GeomFromText('POINT(18 208)')), +('l', 'd', 'i', GeomFromText('POINT(13 104)')), +('w', 'o', 'y', GeomFromText('POINT(207 39)')), +('p', 'u', 'o', GeomFromText('POINT(114 31)')), +('y', 'a', 'p', GeomFromText('POINT(106 59)')), +('a', 'x', 'z', GeomFromText('POINT(17 57)')), +('v', 'h', 'x', GeomFromText('POINT(170 13)')), +('t', 's', 'u', GeomFromText('POINT(84 18)')), +('z', 'z', 'f', GeomFromText('POINT(250 197)')), +('l', 'z', 't', GeomFromText('POINT(59 80)')), +('j', 'g', 's', GeomFromText('POINT(54 26)')), +('g', 'v', 'm', GeomFromText('POINT(89 98)')), +('q', 'v', 'b', GeomFromText('POINT(39 240)')), +('x', 'k', 'v', GeomFromText('POINT(246 207)')), +('k', 'u', 'i', GeomFromText('POINT(105 111)')), +('w', 'z', 's', GeomFromText('POINT(235 8)')), +('d', 'd', 'd', GeomFromText('POINT(105 4)')), +('c', 'z', 'q', GeomFromText('POINT(13 140)')), +('m', 'k', 'i', GeomFromText('POINT(208 120)')), +('g', 'a', 'g', GeomFromText('POINT(9 182)')), +('z', 'j', 'r', GeomFromText('POINT(149 153)')), +('h', 'f', 'g', GeomFromText('POINT(81 236)')), +('m', 'e', 'q', GeomFromText('POINT(209 215)')), +('c', 'h', 'y', GeomFromText('POINT(235 70)')), +('i', 'e', 'g', GeomFromText('POINT(138 26)')), +('m', 't', 'u', GeomFromText('POINT(119 237)')), +('o', 'w', 's', GeomFromText('POINT(193 166)')), +('f', 'm', 'q', GeomFromText('POINT(85 96)')), +('x', 'l', 'x', GeomFromText('POINT(58 115)')), +('x', 'q', 'u', GeomFromText('POINT(108 210)')), +('b', 'h', 'i', GeomFromText('POINT(250 139)')), +('y', 'd', 'x', GeomFromText('POINT(199 135)')), +('w', 'h', 'p', GeomFromText('POINT(247 233)')), +('p', 'z', 't', GeomFromText('POINT(148 249)')), +('q', 'a', 'u', GeomFromText('POINT(174 78)')), +('v', 't', 'm', GeomFromText('POINT(70 228)')), +('t', 'n', 'f', GeomFromText('POINT(123 2)')), +('x', 't', 'b', GeomFromText('POINT(35 50)')), +('r', 'j', 'f', GeomFromText('POINT(200 51)')), +('s', 'q', 'o', GeomFromText('POINT(23 184)')), +('u', 'v', 'z', GeomFromText('POINT(7 113)')), +('v', 'u', 'l', GeomFromText('POINT(145 190)')), +('o', 'k', 'i', GeomFromText('POINT(161 122)')), +('l', 'y', 'e', GeomFromText('POINT(17 232)')), +('t', 'b', 'e', GeomFromText('POINT(120 50)')), +('e', 's', 'u', GeomFromText('POINT(254 1)')), +('d', 'd', 'u', GeomFromText('POINT(167 140)')), +('o', 'b', 'x', GeomFromText('POINT(186 237)')), +('m', 's', 's', GeomFromText('POINT(172 149)')), +('t', 'y', 'a', GeomFromText('POINT(149 85)')), +('x', 't', 'r', GeomFromText('POINT(10 165)')), +('g', 'c', 'e', GeomFromText('POINT(95 165)')), +('e', 'e', 'z', GeomFromText('POINT(98 65)')), +('f', 'v', 'i', GeomFromText('POINT(149 144)')), +('o', 'p', 'm', GeomFromText('POINT(233 67)')), +('t', 'u', 'b', GeomFromText('POINT(109 215)')), +('o', 'o', 'b', GeomFromText('POINT(130 48)')), +('e', 'm', 'h', GeomFromText('POINT(88 189)')), +('e', 'v', 'y', GeomFromText('POINT(55 29)')), +('e', 't', 'm', GeomFromText('POINT(129 55)')), +('p', 'p', 'i', GeomFromText('POINT(126 222)')), +('c', 'i', 'c', GeomFromText('POINT(19 158)')), +('c', 'b', 's', GeomFromText('POINT(13 19)')), +('u', 'y', 'a', GeomFromText('POINT(114 5)')), +('a', 'o', 'f', GeomFromText('POINT(227 232)')), +('t', 'c', 'z', GeomFromText('POINT(63 62)')), +('d', 'o', 'k', GeomFromText('POINT(48 228)')), +('x', 'c', 'e', GeomFromText('POINT(204 2)')), +('e', 'e', 'g', GeomFromText('POINT(125 43)')), +('o', 'r', 'f', GeomFromText('POINT(171 140)')); +UPDATE t1 set spatial_point=GeomFromText('POINT(163 157)') where c1 like 'w%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(53 151)') where c1 like 'd%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(96 183)') where c1 like 'r%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(57 91)') where c1 like 'q%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(202 110)') where c1 like 'c%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(120 137)') where c1 like 'w%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(207 147)') where c1 like 'c%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(31 125)') where c1 like 'e%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(27 36)') where c1 like 'r%'; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES +('b', 'c', 'e', GeomFromText('POINT(41 137)')), +('p', 'y', 'k', GeomFromText('POINT(50 22)')), +('s', 'c', 'h', GeomFromText('POINT(208 173)')), +('x', 'u', 'l', GeomFromText('POINT(199 175)')), +('s', 'r', 'h', GeomFromText('POINT(85 192)')), +('j', 'k', 'u', GeomFromText('POINT(18 25)')), +('p', 'w', 'h', GeomFromText('POINT(152 197)')), +('e', 'd', 'c', GeomFromText('POINT(229 3)')), +('o', 'x', 'k', GeomFromText('POINT(187 155)')), +('o', 'b', 'k', GeomFromText('POINT(208 150)')), +('d', 'a', 'j', GeomFromText('POINT(70 87)')), +('f', 'e', 'k', GeomFromText('POINT(156 96)')), +('u', 'y', 'p', GeomFromText('POINT(239 193)')), +('n', 'v', 'p', GeomFromText('POINT(223 98)')), +('z', 'j', 'r', GeomFromText('POINT(87 89)')), +('h', 'x', 'x', GeomFromText('POINT(92 0)')), +('r', 'v', 'r', GeomFromText('POINT(159 139)')), +('v', 'g', 'g', GeomFromText('POINT(16 229)')), +('z', 'k', 'u', GeomFromText('POINT(99 52)')), +('p', 'p', 'o', GeomFromText('POINT(105 125)')), +('w', 'h', 'y', GeomFromText('POINT(105 154)')), +('v', 'y', 'z', GeomFromText('POINT(134 238)')), +('x', 'o', 'o', GeomFromText('POINT(178 88)')), +('z', 'w', 'd', GeomFromText('POINT(123 60)')), +('q', 'f', 'u', GeomFromText('POINT(64 90)')), +('s', 'n', 't', GeomFromText('POINT(50 138)')), +('v', 'p', 't', GeomFromText('POINT(114 91)')), +('a', 'o', 'n', GeomFromText('POINT(78 43)')), +('k', 'u', 'd', GeomFromText('POINT(185 161)')), +('w', 'd', 'n', GeomFromText('POINT(25 92)')), +('k', 'w', 'a', GeomFromText('POINT(59 238)')), +('t', 'c', 'f', GeomFromText('POINT(65 87)')), +('g', 's', 'p', GeomFromText('POINT(238 126)')), +('d', 'n', 'y', GeomFromText('POINT(107 173)')), +('l', 'a', 'w', GeomFromText('POINT(125 152)')), +('m', 'd', 'j', GeomFromText('POINT(146 53)')), +('q', 'm', 'c', GeomFromText('POINT(217 187)')), +('i', 'r', 'r', GeomFromText('POINT(6 113)')), +('e', 'j', 'b', GeomFromText('POINT(37 83)')), +('w', 'w', 'h', GeomFromText('POINT(83 199)')), +('k', 'b', 's', GeomFromText('POINT(170 64)')), +('s', 'b', 'c', GeomFromText('POINT(163 130)')), +('c', 'h', 'a', GeomFromText('POINT(141 3)')), +('k', 'j', 'u', GeomFromText('POINT(143 76)')), +('r', 'h', 'o', GeomFromText('POINT(243 92)')), +('i', 'd', 'b', GeomFromText('POINT(205 13)')), +('r', 'y', 'q', GeomFromText('POINT(138 8)')), +('m', 'o', 'i', GeomFromText('POINT(36 45)')), +('v', 'g', 'm', GeomFromText('POINT(0 40)')), +('f', 'e', 'i', GeomFromText('POINT(76 6)')), +('c', 'q', 'q', GeomFromText('POINT(115 248)')), +('x', 'c', 'i', GeomFromText('POINT(29 74)')), +('l', 's', 't', GeomFromText('POINT(83 18)')), +('t', 't', 'a', GeomFromText('POINT(26 168)')), +('u', 'n', 'x', GeomFromText('POINT(200 110)')), +('j', 'b', 'd', GeomFromText('POINT(216 136)')), +('s', 'p', 'w', GeomFromText('POINT(38 156)')), +('f', 'b', 'v', GeomFromText('POINT(29 186)')), +('v', 'e', 'r', GeomFromText('POINT(149 40)')), +('v', 't', 'm', GeomFromText('POINT(184 24)')), +('y', 'g', 'a', GeomFromText('POINT(219 105)')), +('s', 'f', 'i', GeomFromText('POINT(114 130)')), +('e', 'q', 'h', GeomFromText('POINT(203 135)')), +('h', 'g', 'b', GeomFromText('POINT(9 208)')), +('o', 'l', 'r', GeomFromText('POINT(245 79)')), +('s', 's', 'v', GeomFromText('POINT(238 198)')), +('w', 'w', 'z', GeomFromText('POINT(209 232)')), +('v', 'd', 'n', GeomFromText('POINT(30 193)')), +('q', 'w', 'k', GeomFromText('POINT(133 18)')), +('o', 'h', 'o', GeomFromText('POINT(42 140)')), +('f', 'f', 'h', GeomFromText('POINT(145 1)')), +('u', 's', 'r', GeomFromText('POINT(70 62)')), +('x', 'n', 'q', GeomFromText('POINT(33 86)')), +('u', 'p', 'v', GeomFromText('POINT(232 220)')), +('z', 'e', 'a', GeomFromText('POINT(130 69)')), +('r', 'u', 'z', GeomFromText('POINT(243 241)')), +('b', 'n', 't', GeomFromText('POINT(120 12)')), +('u', 'f', 's', GeomFromText('POINT(190 212)')), +('a', 'd', 'q', GeomFromText('POINT(235 191)')), +('f', 'q', 'm', GeomFromText('POINT(176 2)')), +('n', 'c', 's', GeomFromText('POINT(218 163)')), +('e', 'm', 'h', GeomFromText('POINT(163 108)')), +('c', 'f', 'l', GeomFromText('POINT(220 115)')), +('c', 'v', 'q', GeomFromText('POINT(66 45)')), +('w', 'v', 'x', GeomFromText('POINT(251 220)')), +('f', 'w', 'z', GeomFromText('POINT(146 149)')), +('h', 'n', 'h', GeomFromText('POINT(148 128)')), +('y', 'k', 'v', GeomFromText('POINT(28 110)')), +('c', 'x', 'q', GeomFromText('POINT(13 13)')), +('e', 'd', 's', GeomFromText('POINT(91 190)')), +('c', 'w', 'c', GeomFromText('POINT(10 231)')), +('u', 'j', 'n', GeomFromText('POINT(250 21)')), +('w', 'n', 'x', GeomFromText('POINT(141 69)')), +('f', 'p', 'y', GeomFromText('POINT(228 246)')), +('d', 'q', 'f', GeomFromText('POINT(194 22)')), +('d', 'z', 'l', GeomFromText('POINT(233 181)')), +('c', 'a', 'q', GeomFromText('POINT(183 96)')), +('m', 'i', 'd', GeomFromText('POINT(117 226)')), +('z', 'y', 'y', GeomFromText('POINT(62 81)')), +('g', 'v', 'm', GeomFromText('POINT(66 158)')); +SET @@RAND_SEED1=481064922, @@RAND_SEED2=438133497; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=280535103, @@RAND_SEED2=444518646; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=1072017234, @@RAND_SEED2=484203885; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=358851897, @@RAND_SEED2=358495224; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=509031459, @@RAND_SEED2=675962925; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +UPDATE t1 set spatial_point=GeomFromText('POINT(61 203)') where c1 like 'y%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(202 194)') where c1 like 'f%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(228 18)') where c1 like 'h%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(88 18)') where c1 like 'l%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(176 94)') where c1 like 'e%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(44 47)') where c1 like 'g%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(95 191)') where c1 like 'b%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(179 218)') where c1 like 'y%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(239 40)') where c1 like 'g%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(248 41)') where c1 like 'q%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(167 82)') where c1 like 't%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(13 104)') where c1 like 'u%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(139 84)') where c1 like 'a%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(145 108)') where c1 like 'p%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(147 57)') where c1 like 't%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(217 144)') where c1 like 'n%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(160 224)') where c1 like 'w%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(38 28)') where c1 like 'j%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(104 114)') where c1 like 'q%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(88 19)') where c1 like 'c%'; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES +('f', 'x', 'p', GeomFromText('POINT(92 181)')), +('s', 'i', 'c', GeomFromText('POINT(49 60)')), +('c', 'c', 'i', GeomFromText('POINT(7 57)')), +('n', 'g', 'k', GeomFromText('POINT(252 105)')), +('g', 'b', 'm', GeomFromText('POINT(180 11)')), +('u', 'l', 'r', GeomFromText('POINT(32 90)')), +('c', 'x', 'e', GeomFromText('POINT(143 24)')), +('x', 'u', 'a', GeomFromText('POINT(123 92)')), +('s', 'b', 'h', GeomFromText('POINT(190 108)')), +('c', 'x', 'b', GeomFromText('POINT(104 100)')), +('i', 'd', 't', GeomFromText('POINT(214 104)')), +('r', 'w', 'g', GeomFromText('POINT(29 67)')), +('b', 'f', 'g', GeomFromText('POINT(149 46)')), +('r', 'r', 'd', GeomFromText('POINT(242 196)')), +('j', 'l', 'a', GeomFromText('POINT(90 196)')), +('e', 't', 'b', GeomFromText('POINT(190 64)')), +('l', 'x', 'w', GeomFromText('POINT(250 73)')), +('q', 'y', 'r', GeomFromText('POINT(120 182)')), +('s', 'j', 'a', GeomFromText('POINT(180 175)')), +('n', 'i', 'y', GeomFromText('POINT(124 136)')), +('s', 'x', 's', GeomFromText('POINT(176 209)')), +('u', 'f', 's', GeomFromText('POINT(215 173)')), +('m', 'j', 'x', GeomFromText('POINT(44 140)')), +('v', 'g', 'x', GeomFromText('POINT(177 233)')), +('u', 't', 'b', GeomFromText('POINT(136 197)')), +('f', 'g', 'b', GeomFromText('POINT(10 8)')), +('v', 'c', 'j', GeomFromText('POINT(13 81)')), +('d', 's', 'q', GeomFromText('POINT(200 100)')), +('a', 'p', 'j', GeomFromText('POINT(33 40)')), +('i', 'c', 'g', GeomFromText('POINT(168 204)')), +('k', 'h', 'i', GeomFromText('POINT(93 243)')), +('s', 'b', 's', GeomFromText('POINT(157 13)')), +('v', 'l', 'l', GeomFromText('POINT(103 6)')), +('r', 'b', 'k', GeomFromText('POINT(244 137)')), +('l', 'd', 'r', GeomFromText('POINT(162 254)')), +('q', 'b', 'z', GeomFromText('POINT(136 246)')), +('x', 'x', 'p', GeomFromText('POINT(120 37)')), +('m', 'e', 'z', GeomFromText('POINT(203 167)')), +('q', 'n', 'p', GeomFromText('POINT(94 119)')), +('b', 'g', 'u', GeomFromText('POINT(93 248)')), +('r', 'v', 'v', GeomFromText('POINT(53 88)')), +('y', 'a', 'i', GeomFromText('POINT(98 219)')), +('a', 's', 'g', GeomFromText('POINT(173 138)')), +('c', 'a', 't', GeomFromText('POINT(235 135)')), +('q', 'm', 'd', GeomFromText('POINT(224 208)')), +('e', 'p', 'k', GeomFromText('POINT(161 238)')), +('n', 'g', 'q', GeomFromText('POINT(35 204)')), +('t', 't', 'x', GeomFromText('POINT(230 178)')), +('w', 'f', 'a', GeomFromText('POINT(150 221)')), +('z', 'm', 'z', GeomFromText('POINT(119 42)')), +('l', 'j', 's', GeomFromText('POINT(97 96)')), +('f', 'z', 'x', GeomFromText('POINT(208 65)')), +('i', 'v', 'c', GeomFromText('POINT(145 79)')), +('l', 'f', 'k', GeomFromText('POINT(83 234)')), +('u', 'a', 's', GeomFromText('POINT(250 49)')), +('o', 'k', 'p', GeomFromText('POINT(46 50)')), +('d', 'e', 'z', GeomFromText('POINT(30 198)')), +('r', 'r', 'l', GeomFromText('POINT(78 189)')), +('y', 'l', 'f', GeomFromText('POINT(188 132)')), +('d', 'q', 'm', GeomFromText('POINT(247 107)')), +('p', 'j', 'n', GeomFromText('POINT(148 227)')), +('b', 'o', 'i', GeomFromText('POINT(172 25)')), +('e', 'v', 'd', GeomFromText('POINT(94 248)')), +('q', 'd', 'f', GeomFromText('POINT(15 29)')), +('w', 'b', 'b', GeomFromText('POINT(74 111)')), +('g', 'q', 'f', GeomFromText('POINT(107 215)')), +('o', 'h', 'r', GeomFromText('POINT(25 168)')), +('u', 't', 'w', GeomFromText('POINT(251 188)')), +('h', 's', 'w', GeomFromText('POINT(254 247)')), +('f', 'f', 'b', GeomFromText('POINT(166 103)')); +SET @@RAND_SEED1=866613816, @@RAND_SEED2=92289615; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES +('l', 'c', 'l', GeomFromText('POINT(202 98)')), +('k', 'c', 'b', GeomFromText('POINT(46 206)')), +('r', 'y', 'm', GeomFromText('POINT(74 140)')), +('y', 'z', 'd', GeomFromText('POINT(200 160)')), +('s', 'y', 's', GeomFromText('POINT(156 205)')), +('u', 'v', 'p', GeomFromText('POINT(86 82)')), +('j', 's', 's', GeomFromText('POINT(91 233)')), +('x', 'j', 'f', GeomFromText('POINT(3 14)')), +('l', 'z', 'v', GeomFromText('POINT(123 156)')), +('h', 'i', 'o', GeomFromText('POINT(145 229)')), +('o', 'r', 'd', GeomFromText('POINT(15 22)')), +('f', 'x', 't', GeomFromText('POINT(21 60)')), +('t', 'g', 'h', GeomFromText('POINT(50 153)')), +('g', 'u', 'b', GeomFromText('POINT(82 85)')), +('v', 'a', 'p', GeomFromText('POINT(231 178)')), +('n', 'v', 'o', GeomFromText('POINT(183 25)')), +('j', 'n', 'm', GeomFromText('POINT(50 144)')), +('e', 'f', 'i', GeomFromText('POINT(46 16)')), +('d', 'w', 'a', GeomFromText('POINT(66 6)')), +('f', 'x', 'a', GeomFromText('POINT(107 197)')), +('m', 'o', 'a', GeomFromText('POINT(142 80)')), +('q', 'l', 'g', GeomFromText('POINT(251 23)')), +('c', 's', 's', GeomFromText('POINT(158 43)')), +('y', 'd', 'o', GeomFromText('POINT(196 228)')), +('d', 'p', 'l', GeomFromText('POINT(107 5)')), +('h', 'a', 'b', GeomFromText('POINT(183 166)')), +('m', 'w', 'p', GeomFromText('POINT(19 59)')), +('b', 'y', 'o', GeomFromText('POINT(178 30)')), +('x', 'w', 'i', GeomFromText('POINT(168 94)')), +('t', 'k', 'z', GeomFromText('POINT(171 5)')), +('r', 'm', 'a', GeomFromText('POINT(222 19)')), +('u', 'v', 'e', GeomFromText('POINT(224 80)')), +('q', 'r', 'k', GeomFromText('POINT(212 218)')), +('d', 'p', 'j', GeomFromText('POINT(169 7)')), +('d', 'r', 'v', GeomFromText('POINT(193 23)')), +('n', 'y', 'y', GeomFromText('POINT(130 178)')), +('m', 'z', 'r', GeomFromText('POINT(81 200)')), +('j', 'e', 'w', GeomFromText('POINT(145 239)')), +('v', 'h', 'x', GeomFromText('POINT(24 105)')), +('z', 'm', 'a', GeomFromText('POINT(175 129)')), +('b', 'c', 'v', GeomFromText('POINT(213 10)')), +('t', 't', 'u', GeomFromText('POINT(2 129)')), +('r', 's', 'v', GeomFromText('POINT(209 192)')), +('x', 'p', 'g', GeomFromText('POINT(43 63)')), +('t', 'e', 'u', GeomFromText('POINT(139 210)')), +('l', 'e', 't', GeomFromText('POINT(245 148)')), +('a', 'i', 'k', GeomFromText('POINT(167 195)')), +('m', 'o', 'h', GeomFromText('POINT(206 120)')), +('g', 'z', 's', GeomFromText('POINT(169 240)')), +('z', 'u', 's', GeomFromText('POINT(202 120)')), +('i', 'b', 'a', GeomFromText('POINT(216 18)')), +('w', 'y', 'g', GeomFromText('POINT(119 236)')), +('h', 'y', 'p', GeomFromText('POINT(161 24)')); +UPDATE t1 set spatial_point=GeomFromText('POINT(33 100)') where c1 like 't%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(41 46)') where c1 like 'f%'; +CHECK TABLE t1 EXTENDED; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1; diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index ce2b5deadbd..643a3d6b434 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -578,7 +578,7 @@ create table t1 select POINT(1,3); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `POINT(1,3)` longblob NOT NULL + `POINT(1,3)` longblob ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; CREATE TABLE `t1` (`object_id` bigint(20) unsigned NOT NULL default '0', `geo` @@ -677,3 +677,51 @@ load data infile '../../std_data/bad_gis_data.dat' into table t1; ERROR 01000: Data truncated; NULL supplied to NOT NULL column 'b' at row 1 alter table t1 enable keys; drop table t1; +create table t1 (a int, b blob); +insert into t1 values (1, ''), (2, NULL), (3, '1'); +select * from t1; +a b +1 +2 NULL +3 1 +select +geometryfromtext(b) IS NULL, geometryfromwkb(b) IS NULL, astext(b) IS NULL, +aswkb(b) IS NULL, geometrytype(b) IS NULL, centroid(b) IS NULL, +envelope(b) IS NULL, startpoint(b) IS NULL, endpoint(b) IS NULL, +exteriorring(b) IS NULL, pointn(b, 1) IS NULL, geometryn(b, 1) IS NULL, +interiorringn(b, 1) IS NULL, multipoint(b) IS NULL, isempty(b) IS NULL, +issimple(b) IS NULL, isclosed(b) IS NULL, dimension(b) IS NULL, +numgeometries(b) IS NULL, numinteriorrings(b) IS NULL, numpoints(b) IS NULL, +area(b) IS NULL, glength(b) IS NULL, srid(b) IS NULL, x(b) IS NULL, +y(b) IS NULL +from t1; +geometryfromtext(b) IS NULL geometryfromwkb(b) IS NULL astext(b) IS NULL aswkb(b) IS NULL geometrytype(b) IS NULL centroid(b) IS NULL envelope(b) IS NULL startpoint(b) IS NULL endpoint(b) IS NULL exteriorring(b) IS NULL pointn(b, 1) IS NULL geometryn(b, 1) IS NULL interiorringn(b, 1) IS NULL multipoint(b) IS NULL isempty(b) IS NULL issimple(b) IS NULL isclosed(b) IS NULL dimension(b) IS NULL numgeometries(b) IS NULL numinteriorrings(b) IS NULL numpoints(b) IS NULL area(b) IS NULL glength(b) IS NULL srid(b) IS NULL x(b) IS NULL y(b) IS NULL +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +select +within(b, b) IS NULL, contains(b, b) IS NULL, overlaps(b, b) IS NULL, +equals(b, b) IS NULL, disjoint(b, b) IS NULL, touches(b, b) IS NULL, +intersects(b, b) IS NULL, crosses(b, b) IS NULL +from t1; +within(b, b) IS NULL contains(b, b) IS NULL overlaps(b, b) IS NULL equals(b, b) IS NULL disjoint(b, b) IS NULL touches(b, b) IS NULL intersects(b, b) IS NULL crosses(b, b) IS NULL +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 +select +point(b, b) IS NULL, linestring(b) IS NULL, polygon(b) IS NULL, multipoint(b) IS NULL, +multilinestring(b) IS NULL, multipolygon(b) IS NULL, +geometrycollection(b) IS NULL +from t1; +point(b, b) IS NULL linestring(b) IS NULL polygon(b) IS NULL multipoint(b) IS NULL multilinestring(b) IS NULL multipolygon(b) IS NULL geometrycollection(b) IS NULL +0 1 1 1 1 1 1 +1 1 1 1 1 1 1 +0 1 1 1 1 1 1 +drop table t1; +CREATE TABLE t1(a POINT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1; +a +NULL +DROP TABLE t1; +End of 4.1 tests diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index 1960f3a76b9..4e4e2ccff48 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -492,3 +492,14 @@ delete from mysql.db where user='mysqltest1'; delete from mysql.tables_priv where user='mysqltest1'; flush privileges; drop database mysqltest; +create database db27515; +use db27515; +create table t1 (a int); +grant alter on db27515.t1 to user27515@localhost; +grant insert, create on db27515.t2 to user27515@localhost; +rename table t1 to t2; +ERROR 42000: DROP command denied to user 'user27515'@'localhost' for table 't1' +revoke all privileges, grant option from user27515@localhost; +drop user user27515@localhost; +drop database db27515; +End of 4.1 tests diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index 6bb9d0c87ee..b19ccca2f44 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -294,7 +294,7 @@ drop table t1; create table t1 (c char(255), primary key(c(90))); insert into t1 values ("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"); insert into t1 values ("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"); -ERROR 23000: Duplicate entry 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl' for key 1 +ERROR 23000: Duplicate entry 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl' for key 1 drop table t1; CREATE TABLE t1 (a int, key(a)) engine=heap; insert into t1 values (0); diff --git a/mysql-test/r/heap_btree.result b/mysql-test/r/heap_btree.result index e6492e90b80..72be6a3e400 100644 --- a/mysql-test/r/heap_btree.result +++ b/mysql-test/r/heap_btree.result @@ -280,4 +280,31 @@ a 1 1 drop table t1; +CREATE TABLE t1 ( +c1 CHAR(3), +c2 INTEGER, +KEY USING BTREE(c1), +KEY USING BTREE(c2) +) ENGINE= MEMORY; +INSERT INTO t1 VALUES ('ABC',0), ('A',0), ('B',0), ('C',0); +UPDATE t1 SET c2= c2 + 1 WHERE c1 = 'A'; +SELECT * FROM t1; +c1 c2 +ABC 0 +A 1 +B 0 +C 0 +DROP TABLE t1; +CREATE TABLE t1 ( +c1 ENUM('1', '2'), +UNIQUE USING BTREE(c1) +) ENGINE= MEMORY DEFAULT CHARSET= utf8; +INSERT INTO t1 VALUES('1'), ('2'); +DROP TABLE t1; +CREATE TABLE t1 ( +c1 SET('1', '2'), +UNIQUE USING BTREE(c1) +) ENGINE= MEMORY DEFAULT CHARSET= utf8; +INSERT INTO t1 VALUES('1'), ('2'); +DROP TABLE t1; End of 4.1 tests diff --git a/mysql-test/r/help.result b/mysql-test/r/help.result index edf7d0e91cb..690d7dee5dc 100644 --- a/mysql-test/r/help.result +++ b/mysql-test/r/help.result @@ -1,47 +1,47 @@ -insert into mysql.help_category(help_category_id,name)values(1,'impossible_category_1'); -select @category1_id:= 1; -@category1_id:= 1 -1 -insert into mysql.help_category(help_category_id,name)values(2,'impossible_category_2'); -select @category2_id:= 2; -@category2_id:= 2 -2 -insert into mysql.help_category(help_category_id,name,parent_category_id)values(3,'impossible_category_3',@category2_id); -select @category3_id:= 3; -@category3_id:= 3 -3 -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(1,'impossible_function_1',@category1_id,'description of \n impossible_function1\n','example of \n impossible_function1'); -select @topic1_id:= 1; -@topic1_id:= 1 -1 -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(2,'impossible_function_2',@category1_id,'description of \n impossible_function2\n','example of \n impossible_function2'); -select @topic2_id:= 2; -@topic2_id:= 2 -2 -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(3,'impossible_function_3',@category2_id,'description of \n impossible_function3\n','example of \n impossible_function3'); -select @topic3_id:= 3; -@topic3_id:= 3 -3 -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(4,'impossible_function_4',@category2_id,'description of \n impossible_function4\n','example of \n impossible_function4'); -select @topic4_id:= 4; -@topic4_id:= 4 -4 -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(5,'impossible_function_7',@category3_id,'description of \n impossible_function5\n','example of \n impossible_function7'); -select @topic5_id:= 5; -@topic5_id:= 5 -5 -insert into mysql.help_keyword(help_keyword_id,name)values(1,'impossible_function_1'); -select @keyword1_id:= 1; -@keyword1_id:= 1 -1 -insert into mysql.help_keyword(help_keyword_id,name)values(2,'impossible_function_5'); -select @keyword2_id:= 2; -@keyword2_id:= 2 -2 -insert into mysql.help_keyword(help_keyword_id,name)values(3,'impossible_function_6'); -select @keyword3_id:= 3; -@keyword3_id:= 3 -3 +insert into mysql.help_category(help_category_id,name)values(10001,'impossible_category_1'); +select @category1_id:= 10001; +@category1_id:= 10001 +10001 +insert into mysql.help_category(help_category_id,name)values(10002,'impossible_category_2'); +select @category2_id:= 10002; +@category2_id:= 10002 +10002 +insert into mysql.help_category(help_category_id,name,parent_category_id)values(10003,'impossible_category_3',@category2_id); +select @category3_id:= 10003; +@category3_id:= 10003 +10003 +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10101,'impossible_function_1',@category1_id,'description of \n impossible_function1\n','example of \n impossible_function1'); +select @topic1_id:= 10101; +@topic1_id:= 10101 +10101 +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10102,'impossible_function_2',@category1_id,'description of \n impossible_function2\n','example of \n impossible_function2'); +select @topic2_id:= 10102; +@topic2_id:= 10102 +10102 +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10103,'impossible_function_3',@category2_id,'description of \n impossible_function3\n','example of \n impossible_function3'); +select @topic3_id:= 10103; +@topic3_id:= 10103 +10103 +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10104,'impossible_function_4',@category2_id,'description of \n impossible_function4\n','example of \n impossible_function4'); +select @topic4_id:= 10104; +@topic4_id:= 10104 +10104 +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10105,'impossible_function_7',@category3_id,'description of \n impossible_function5\n','example of \n impossible_function7'); +select @topic5_id:= 10105; +@topic5_id:= 10105 +10105 +insert into mysql.help_keyword(help_keyword_id,name)values(10201,'impossible_function_1'); +select @keyword1_id:= 10201; +@keyword1_id:= 10201 +10201 +insert into mysql.help_keyword(help_keyword_id,name)values(10202,'impossible_function_5'); +select @keyword2_id:= 10202; +@keyword2_id:= 10202 +10202 +insert into mysql.help_keyword(help_keyword_id,name)values(10203,'impossible_function_6'); +select @keyword3_id:= 10203; +@keyword3_id:= 10203 +10203 insert into mysql.help_relation(help_keyword_id,help_topic_id)values(@keyword1_id,@topic2_id); insert into mysql.help_relation(help_keyword_id,help_topic_id)values(@keyword2_id,@topic1_id); insert into mysql.help_relation(help_keyword_id,help_topic_id)values(@keyword3_id,@topic3_id); diff --git a/mysql-test/r/init_file.result b/mysql-test/r/init_file.result index 5404a7b2064..509d382aadd 100644 --- a/mysql-test/r/init_file.result +++ b/mysql-test/r/init_file.result @@ -1,2 +1,9 @@ +INSERT INTO init_file.startup VALUES ( NOW() ); +SELECT * INTO @X FROM init_file.startup limit 0,1; +SELECT * INTO @Y FROM init_file.startup limit 1,1; +SELECT YEAR(@X)-YEAR(@Y); +YEAR(@X)-YEAR(@Y) +0 +DROP DATABASE init_file; ok End of 4.1 tests diff --git a/mysql-test/r/innodb_mysql.result b/mysql-test/r/innodb_mysql.result index 2cd6f7826ca..029f3768f9b 100644 --- a/mysql-test/r/innodb_mysql.result +++ b/mysql-test/r/innodb_mysql.result @@ -128,4 +128,58 @@ show /*!50002 GLOBAL */ status like 'Handler_rollback'; Variable_name Value Handler_rollback 0 drop table t1; +CREATE TABLE t1(c1 TEXT, UNIQUE (c1(1)), cnt INT DEFAULT 1) +ENGINE=INNODB CHARACTER SET UTF8; +INSERT INTO t1 (c1) VALUES ('1a'); +SELECT * FROM t1; +c1 cnt +1a 1 +INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; +SELECT * FROM t1; +c1 cnt +1a 2 +DROP TABLE t1; +CREATE TABLE t1(c1 VARCHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1) +ENGINE=INNODB CHARACTER SET UTF8; +INSERT INTO t1 (c1) VALUES ('1a'); +SELECT * FROM t1; +c1 cnt +1a 1 +INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; +SELECT * FROM t1; +c1 cnt +1a 2 +DROP TABLE t1; +CREATE TABLE t1(c1 CHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1) +ENGINE=INNODB CHARACTER SET UTF8; +INSERT INTO t1 (c1) VALUES ('1a'); +SELECT * FROM t1; +c1 cnt +1a 1 +INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; +SELECT * FROM t1; +c1 cnt +1a 2 +DROP TABLE t1; +CREATE TABLE t1 ( +a1 decimal(10,0) DEFAULT NULL, +a2 blob, +a3 time DEFAULT NULL, +a4 blob, +a5 char(175) DEFAULT NULL, +a6 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', +a7 tinyblob, +INDEX idx (a6,a7(239),a5) +) ENGINE=InnoDB; +EXPLAIN SELECT a4 FROM t1 WHERE +a6=NULL AND +a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS'; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +EXPLAIN SELECT t1.a4 FROM t1, t1 t WHERE +t.a6=t.a6 AND t1.a6=NULL AND +t1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS'; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +DROP TABLE t1; End of 4.1 tests diff --git a/mysql-test/r/join.result b/mysql-test/r/join.result index dc763472b0e..9ac8825fcb8 100644 --- a/mysql-test/r/join.result +++ b/mysql-test/r/join.result @@ -376,3 +376,53 @@ i i i 2 NULL 4 2 2 2 drop table t1,t2,t3; +CREATE TABLE t1 (a int, b int default 0, c int default 1); +INSERT INTO t1 (a) VALUES (1),(2),(3),(4),(5),(6),(7),(8); +INSERT INTO t1 (a) SELECT a + 8 FROM t1; +INSERT INTO t1 (a) SELECT a + 16 FROM t1; +CREATE TABLE t2 (a int, d int, e int default 0); +INSERT INTO t2 (a, d) VALUES (1,1),(2,2),(3,3),(4,4); +INSERT INTO t2 (a, d) SELECT a+4, a+4 FROM t2; +INSERT INTO t2 (a, d) SELECT a+8, a+8 FROM t2; +EXPLAIN +SELECT STRAIGHT_JOIN t2.e FROM t1,t2 WHERE t2.d=1 AND t1.b=t2.e +ORDER BY t1.b, t1.c; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 32 Using temporary; Using filesort +1 SIMPLE t2 ALL NULL NULL NULL NULL 16 Using where +SELECT STRAIGHT_JOIN t2.e FROM t1,t2 WHERE t2.d=1 AND t1.b=t2.e +ORDER BY t1.b, t1.c; +e +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +DROP TABLE t1,t2; diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result index a1ef7597143..b12e4eb2d3a 100644 --- a/mysql-test/r/merge.result +++ b/mysql-test/r/merge.result @@ -770,7 +770,7 @@ CREATE TABLE t1(a INT); INSERT INTO t1 VALUES(2),(1); CREATE TABLE t2(a INT, KEY(a)) ENGINE=MERGE UNION=(t1); SELECT * FROM t2 WHERE a=2; -ERROR HY000: Got error 124 from storage engine +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE t1, t2; CREATE TABLE t1(a INT) ENGINE=MEMORY; CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1); @@ -781,3 +781,52 @@ CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3); SELECT * FROM t2; ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist DROP TABLE t2; +CREATE TABLE t1(a INT, b TEXT); +CREATE TABLE tm1(a TEXT, b INT) ENGINE=MERGE UNION=(t1); +SELECT * FROM tm1; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +DROP TABLE t1, tm1; +CREATE TABLE t1(a SMALLINT, b SMALLINT); +CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1); +SELECT * FROM tm1; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +DROP TABLE t1, tm1; +CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(a, b)); +CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1); +SELECT * FROM tm1; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +DROP TABLE t1, tm1; +CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(b)); +CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1); +SELECT * FROM tm1; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +DROP TABLE t1, tm1; +CREATE TABLE t1(c1 INT) ENGINE=MyISAM; +CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1); +INSERT DELAYED INTO t2 VALUES(1); +ERROR HY000: Table storage engine for 't2' doesn't have this option +DROP TABLE t1, t2; +CREATE TABLE t1(c1 VARCHAR(1)); +CREATE TABLE m1 LIKE t1; +ALTER TABLE m1 ENGINE=MERGE UNION=(t1); +SELECT * FROM m1; +c1 +DROP TABLE t1, m1; +CREATE TABLE t1(c1 VARCHAR(4), c2 TINYINT, c3 TINYINT, c4 TINYINT, +c5 TINYINT, c6 TINYINT, c7 TINYINT, c8 TINYINT, c9 TINYINT); +CREATE TABLE m1 LIKE t1; +ALTER TABLE m1 ENGINE=MERGE UNION=(t1); +SELECT * FROM m1; +c1 c2 c3 c4 c5 c6 c7 c8 c9 +DROP TABLE t1, m1; +CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci, +b INT, INDEX(a,b)); +CREATE TABLE t2 LIKE t1; +CREATE TABLE t3 LIKE t1; +ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2); +INSERT INTO t1 VALUES ('ss',1); +INSERT INTO t2 VALUES ('ss',2),(0xDF,2); +SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2; +COUNT(*) +2 +DROP TABLE t1,t2,t3; diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index 41d2d48f82e..4aae100695a 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -944,3 +944,154 @@ SHOW TABLE STATUS LIKE 't1'; Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment t1 MyISAM 9 Dynamic X X X 72057594037927935 X X X X X X latin1_swedish_ci X max_rows=4100100100 avg_row_length=70100 DROP TABLE t1; +CREATE TABLE t1 (c1 TEXT NOT NULL, KEY c1 (c1(10))) ENGINE=MyISAM; +INSERT INTO t1 VALUES +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), +(''), (''), (''), (''), +(' B'), (' B'), (' B'), (' B'); +SELECT DISTINCT COUNT(*) FROM t1 WHERE c1 = ''; +COUNT(*) +4 +SELECT DISTINCT length(c1), c1 FROM t1 WHERE c1 = ''; +length(c1) c1 +0 +SELECT DISTINCT COUNT(*) FROM t1 IGNORE INDEX (c1) WHERE c1 = ''; +COUNT(*) +4 +SELECT DISTINCT length(c1), c1 FROM t1 IGNORE INDEX (c1) WHERE c1 = ''; +length(c1) c1 +0 +SELECT DISTINCT length(c1), c1 FROM t1 ORDER BY c1; +length(c1) c1 +0 +2 A +2 B +DROP TABLE t1; +End of 4.1 tests diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 721982e11e3..498fee2d037 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -1584,4 +1584,66 @@ CREATE TABLE `t1` ( /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; drop table t1; +CREATE TABLE `t1` ( +`a b` INT, +`c"d` INT, +`e``f` INT, +PRIMARY KEY (`a b`, `c"d`, `e``f`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +insert into t1 values (0815, 4711, 2006); +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS "t1"; +CREATE TABLE "t1" ( + "a b" int(11) NOT NULL default '0', + "c""d" int(11) NOT NULL default '0', + "e`f" int(11) NOT NULL default '0', + PRIMARY KEY ("a b","c""d","e`f") +); + +LOCK TABLES "t1" WRITE; +/*!40000 ALTER TABLE "t1" DISABLE KEYS */; +INSERT INTO "t1" VALUES (815,4711,2006); +/*!40000 ALTER TABLE "t1" ENABLE KEYS */; +UNLOCK TABLES; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +DROP TABLE IF EXISTS `t1`; +CREATE TABLE `t1` ( + `a b` int(11) NOT NULL default '0', + `c"d` int(11) NOT NULL default '0', + `e``f` int(11) NOT NULL default '0', + PRIMARY KEY (`a b`,`c"d`,`e``f`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +LOCK TABLES `t1` WRITE; +/*!40000 ALTER TABLE `t1` DISABLE KEYS */; +INSERT INTO `t1` VALUES (815,4711,2006); +/*!40000 ALTER TABLE `t1` ENABLE KEYS */; +UNLOCK TABLES; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +DROP TABLE `t1`; End of 4.1 tests diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index 3ddb82d4a8d..92265c94c4b 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -210,7 +210,6 @@ source database "MySQL: The world's most popular ;open source database" echo message echo message -mysqltest: At line 1: Empty variable mysqltest: At line 1: command "false" failed mysqltest: At line 1: Missing argument in exec MySQL @@ -269,6 +268,9 @@ mysqltest: At line 1: Missing assignment operator in let 1 # Execute: echo $success ; 1 +var2: content of variable 1 +var3: content of variable 1 content of variable 1 +length of var3 is longer than 0 mysqltest: At line 1: Missing required argument 'filename' to command 'source' mysqltest: At line 1: Could not open file ./non_existingFile mysqltest: In included file "MYSQLTEST_VARDIR/tmp/recursive.sql": At line 1: Source directives are nesting too deep @@ -507,8 +509,10 @@ drop table t1; mysqltest: At line 1: Missing required argument 'filename' to command 'remove_file' mysqltest: At line 1: Missing required argument 'filename' to command 'write_file' mysqltest: At line 1: End of file encountered before 'EOF' delimiter was found -mysqltest: At line 1: End of line junk detected: "write_file filename "; -" +Some data +for cat_file command +of mysqltest +mysqltest: At line 1: Failed to open file non_existing_file mysqltest: At line 1: Missing required argument 'filename' to command 'file_exists' mysqltest: At line 1: Missing required argument 'from_file' to command 'copy_file' mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file' @@ -526,4 +530,168 @@ hello hello mysqltest: At line 1: test of die Some output +create table t1( a int, b char(255), c timestamp); +insert into t1 values(1, 'Line 1', '2007-04-05'), (2, "Part 2", '2007-04-05'); +insert into t1 values(1, 'Line 1', '2007-04-05'), (2, "Part 3", '2007-04-05'); +select * from t1; +a b c +1 Line 1 2007-04-05 00:00:00 +2 Part 2 2007-04-05 00:00:00 +1 Line 1 2007-04-05 00:00:00 +2 Part 3 2007-04-05 00:00:00 +select * from t1; +a b c +1 Line 1 2007-04-05 00:00:00 +1 Line 1 2007-04-05 00:00:00 +2 Part 2 2007-04-05 00:00:00 +2 Part 3 2007-04-05 00:00:00 +select * from t1; +a b c +1 Line 1 2007-04-05 00:00:00 +2 Part 2 2007-04-05 00:00:00 +1 Line 1 2007-04-05 00:00:00 +2 Part 3 2007-04-05 00:00:00 +select * from t1; +select ''; + + +select "h"; +h +h +select "he"; +he +he +select "hep"; +hep +hep +select "hepp"; +hepp +hepp +drop table t1; +SELECT 2 as "my_col" +UNION +SELECT 1; +my_col +1 +2 +SELECT 2 as "my_col" UNION SELECT 1; +my_col +1 +2 +SELECT 2 as "my_col" +UNION +SELECT 1; +my_col +1 +2 +SELECT '2' as "3" +UNION +SELECT '1'; +3 +1 +2 +CREATE TABLE t1( a CHAR); +SELECT * FROM t1; +a +DROP TABLE t1; +SELECT NULL as "my_col1",2 AS "my_col2" +UNION +SELECT NULL,1; +my_col1 my_col2 +NULL 2 +NULL 1 +SELECT NULL as "my_col1",2 AS "my_col2" +UNION +SELECT NULL,1; +my_col1 my_col2 +NULL 1 +NULL 2 +SELECT 2 as "my_col1",NULL AS "my_col2" +UNION +SELECT 1,NULL; +my_col1 my_col2 +2 NULL +1 NULL +SELECT 2 as "my_col1",NULL AS "my_col2" +UNION +SELECT 1,NULL; +my_col1 my_col2 +1 NULL +2 NULL +SET @a = 17; +SELECT 2 as "my_col" +UNION +SELECT 1; +my_col +2 +1 +SELECT 2 as "my_col" +UNION +SELECT 1; +my_col +1 +2 +SELECT '2' as "my_col1",2 as "my_col2" +UNION +SELECT '1',1 from t2; +ERROR 42S02: Table 'test.t2' doesn't exist +SELECT '1' as "my_col1",2 as "my_col2" +UNION +SELECT '2',1; +my_col1 my_col2 +# 1 +# 2 +CREATE TABLE t1 (f1 INT); +INSERT INTO t1 SET f1 = 1024; +INSERT INTO t1 SELECT f1 - 1 FROM t1; +INSERT INTO t1 SELECT f1 - 2 FROM t1; +INSERT INTO t1 SELECT f1 - 4 FROM t1; +INSERT INTO t1 SELECT f1 - 8 FROM t1; +INSERT INTO t1 SELECT f1 - 16 FROM t1; +INSERT INTO t1 SELECT f1 - 32 FROM t1; +INSERT INTO t1 SELECT f1 - 64 FROM t1; +INSERT INTO t1 SELECT f1 - 128 FROM t1; +INSERT INTO t1 SELECT f1 - 256 FROM t1; +INSERT INTO t1 SELECT f1 - 512 FROM t1; +SELECT * FROM t1; +DROP TABLE t1; +CREATE TABLE t1( +a int, b varchar(255), c datetime +); +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a int(11) YES NULL +b varchar(255) YES NULL +c datetime YES NULL +statement=SHOW COLUMNS FROM t1 row_number=1, column_name="Type", Value=int(11) +statement="SHOW COLUMNS FROM t1" row_number=1, column_name="Type", Value=int(11) +statement=SHOW COLUMNS FROM t1 row_number=1, column_name=Default, Value=NULL +value= ->A B<- +value= 1 +mysqltest: At line 1: query_get_value - argument list started with '(' must be ended with ')' +mysqltest: At line 1: Missing required argument 'query' to command 'query_get_value' +mysqltest: At line 1: Missing required argument 'column name' to command 'query_get_value' +mysqltest: At line 1: Missing required argument 'row number' to command 'query_get_value' +value= No such row +value= No such row +mysqltest: At line 1: Invalid row number: 'notnumber' +mysqltest: At line 1: Could not find column 'column_not_exists' in the result of 'SHOW COLUMNS FROM t1' +mysqltest: At line 1: Query 'SET @A = 1' didn't return a result set +mysqltest: At line 1: Could not find column '1 AS B' in the result of 'SELECT 1 AS A' +value= No such row +mysqltest: At line 1: Error running query 'SHOW COLNS FROM t1': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLNS FROM t1' at line 1 + +Field Type Null Key Default Extra +a int(11) YES -><- NULL +b varchar(255) YES -><- NULL +c datetime YES -><- NULL + +Number of columns with Default NULL: 3 + +SHOW COLUMNS FROM t1; +Field Type Null Key Default Extra +a int(11) YES NULL +b varchar(255) YES NULL +c datetime YES NULL +drop table t1; End of tests diff --git a/mysql-test/r/ndb_index_unique.result b/mysql-test/r/ndb_index_unique.result index f9fb6f89aa2..3bc41e8a197 100644 --- a/mysql-test/r/ndb_index_unique.result +++ b/mysql-test/r/ndb_index_unique.result @@ -133,6 +133,21 @@ a b c 6 7 2 7 8 3 8 2 3 +create unique index bi using hash on t2(b); +insert into t2 values(9, 3, 1); +ERROR 23000: Duplicate entry '' for key 0 +alter table t2 drop index bi; +insert into t2 values(9, 3, 1); +select * from t2 order by a; +a b c +2 3 5 +3 4 6 +4 5 8 +5 6 2 +6 7 2 +7 8 3 +8 2 3 +9 3 1 drop table t2; CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, diff --git a/mysql-test/r/ndb_types.result b/mysql-test/r/ndb_types.result index 5afa9c57e38..6620ddc7c53 100644 --- a/mysql-test/r/ndb_types.result +++ b/mysql-test/r/ndb_types.result @@ -70,3 +70,4 @@ select time_stamp>@now from t1; time_stamp>@now 1 drop table t1; +End of 4.1 tests diff --git a/mysql-test/r/olap.result b/mysql-test/r/olap.result index 74b7570ea2a..0300fc1759e 100644 --- a/mysql-test/r/olap.result +++ b/mysql-test/r/olap.result @@ -556,3 +556,64 @@ x a sum(b) 2006-07-01 NULL 11 NULL NULL 11 drop table t1; +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 +VALUES (2,10),(3,30),(2,40),(1,10),(2,30),(1,20),(2,10); +SELECT a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +a SUM(b) +1 30 +2 90 +3 30 +NULL 150 +SELECT DISTINCT a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +a SUM(b) +1 30 +2 90 +3 30 +NULL 150 +SELECT a, b, COUNT(*) FROM t1 GROUP BY a,b WITH ROLLUP; +a b COUNT(*) +1 10 1 +1 20 1 +1 NULL 2 +2 10 2 +2 30 1 +2 40 1 +2 NULL 4 +3 30 1 +3 NULL 1 +NULL NULL 7 +SELECT DISTINCT a, b, COUNT(*) FROM t1 GROUP BY a,b WITH ROLLUP; +a b COUNT(*) +1 10 1 +1 20 1 +1 NULL 2 +2 10 2 +2 30 1 +2 40 1 +2 NULL 4 +3 30 1 +3 NULL 1 +NULL NULL 7 +SELECT 'x', a, SUM(b) FROM t1 GROUP BY 1,2 WITH ROLLUP; +x a SUM(b) +x 1 30 +x 2 90 +x 3 30 +x NULL 150 +NULL NULL 150 +SELECT DISTINCT 'x', a, SUM(b) FROM t1 GROUP BY 1,2 WITH ROLLUP; +x a SUM(b) +x 1 30 +x 2 90 +x 3 30 +x NULL 150 +NULL NULL 150 +SELECT DISTINCT 'x', a, SUM(b) FROM t1 GROUP BY 1,2 WITH ROLLUP; +x a SUM(b) +x 1 30 +x 2 90 +x 3 30 +x NULL 150 +NULL NULL 150 +DROP TABLE t1; diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 320bb89b62e..79b163dc1ee 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -847,3 +847,119 @@ num (select num + 2 FROM t1 LIMIT 1) SELECT a.a + 1 AS num FROM t1 a JOIN t1 b ON num = b.a; ERROR 42S22: Unknown column 'num' in 'on clause' DROP TABLE t1; +CREATE TABLE bug25126 ( +val int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY +); +UPDATE bug25126 SET MissingCol = MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'field list' +UPDATE bug25126 SET val = val ORDER BY MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +UPDATE bug25126 SET val = val ORDER BY val; +UPDATE bug25126 SET val = 1 ORDER BY val; +UPDATE bug25126 SET val = 1 ORDER BY MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +UPDATE bug25126 SET val = 1 ORDER BY val, MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +UPDATE bug25126 SET val = MissingCol ORDER BY MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +UPDATE bug25126 SET MissingCol = 1 ORDER BY val, MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +UPDATE bug25126 SET MissingCol = 1 ORDER BY MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +UPDATE bug25126 SET MissingCol = val ORDER BY MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +UPDATE bug25126 SET MissingCol = MissingCol ORDER BY MissingCol; +ERROR 42S22: Unknown column 'MissingCol' in 'order clause' +DROP TABLE bug25126; +CREATE TABLE t1 (a int); +SELECT p.a AS val, q.a AS val1 FROM t1 p, t1 q ORDER BY val > 1; +val val1 +SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val; +ERROR 23000: Column 'val' in order clause is ambiguous +SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1; +ERROR 23000: Column 'val' in order clause is ambiguous +DROP TABLE t1; +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (3), (2), (4), (1); +SELECT a, IF(a IN (2,3), a, a+10) FROM t1 +ORDER BY IF(a IN (2,3), a, a+10); +a IF(a IN (2,3), a, a+10) +2 2 +3 3 +1 11 +4 14 +SELECT a, IF(a NOT IN (2,3), a, a+10) FROM t1 +ORDER BY IF(a NOT IN (2,3), a, a+10); +a IF(a NOT IN (2,3), a, a+10) +1 1 +4 4 +2 12 +3 13 +SELECT a, IF(a IN (2,3), a, a+10) FROM t1 +ORDER BY IF(a NOT IN (2,3), a, a+10); +a IF(a IN (2,3), a, a+10) +1 11 +4 14 +2 2 +3 3 +SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1 +ORDER BY IF(a BETWEEN 2 AND 3, a, a+10); +a IF(a BETWEEN 2 AND 3, a, a+10) +2 2 +3 3 +1 11 +4 14 +SELECT a, IF(a NOT BETWEEN 2 AND 3, a, a+10) FROM t1 +ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10); +a IF(a NOT BETWEEN 2 AND 3, a, a+10) +1 1 +4 4 +2 12 +3 13 +SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1 +ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10); +a IF(a BETWEEN 2 AND 3, a, a+10) +1 11 +4 14 +2 2 +3 3 +SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2 +FROM t1 GROUP BY x1, x2; +x1 x2 + 3 + 4 +1 +2 +SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2 +FROM t1 GROUP BY x1, IF(a NOT IN (1,2), a, ''); +x1 x2 + 3 + 4 +1 +2 +SELECT a, a IN (1,2) FROM t1 ORDER BY a IN (1,2); +a a IN (1,2) +3 0 +4 0 +2 1 +1 1 +SELECT a FROM t1 ORDER BY a IN (1,2); +a +3 +4 +2 +1 +SELECT a+10 FROM t1 ORDER BY a IN (1,2); +a+10 +13 +14 +12 +11 +SELECT a, IF(a IN (1,2), a, a+10) FROM t1 +ORDER BY IF(a IN (3,4), a, a+10); +a IF(a IN (1,2), a, a+10) +3 13 +4 14 +1 1 +2 2 +DROP TABLE t1; diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index 94c51fdc18b..49e4bf2f318 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -1035,4 +1035,78 @@ EXECUTE stmt USING @a; 0 0 DEALLOCATE PREPARE stmt; DROP TABLE t1; +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 (i INT); +PREPARE st_19182 +FROM "CREATE TABLE t2 (i INT, j INT, KEY (i), KEY(j)) SELECT i FROM t1"; +EXECUTE st_19182; +DESC t2; +Field Type Null Key Default Extra +j int(11) YES MUL NULL +i int(11) YES MUL NULL +DROP TABLE t2; +EXECUTE st_19182; +DESC t2; +Field Type Null Key Default Extra +j int(11) YES MUL NULL +i int(11) YES MUL NULL +DEALLOCATE PREPARE st_19182; +DROP TABLE t2, t1; +drop database if exists mysqltest; +drop table if exists t1, t2; +create database mysqltest character set utf8; +prepare stmt1 from "create table mysqltest.t1 (c char(10))"; +prepare stmt2 from "create table mysqltest.t2 select 'test'"; +execute stmt1; +execute stmt2; +show create table mysqltest.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` char(10) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +show create table mysqltest.t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `test` char(4) character set latin1 NOT NULL default '' +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +drop table mysqltest.t1; +drop table mysqltest.t2; +alter database mysqltest character set latin1; +execute stmt1; +execute stmt2; +show create table mysqltest.t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` char(10) character set utf8 default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +show create table mysqltest.t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `test` char(4) NOT NULL default '' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop database mysqltest; +deallocate prepare stmt1; +deallocate prepare stmt2; +CREATE TABLE t1(a int); +INSERT INTO t1 VALUES (2), (3), (1); +PREPARE st1 FROM +'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a'; +EXECUTE st1; +a +1 +2 +3 +11 +12 +13 +EXECUTE st1; +a +1 +2 +3 +11 +12 +13 +DEALLOCATE PREPARE st1; +DROP TABLE t1; End of 4.1 tests. diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index 24363ea27ab..4d0c262898b 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -1008,3 +1008,55 @@ Variable_name Value Qcache_hits 1 drop table t1; set GLOBAL query_cache_size=0; +create table t1 (a int); +insert into t1 values (1),(2),(3); +set GLOBAL query_cache_type=1; +set GLOBAL query_cache_limit=10000; +set GLOBAL query_cache_min_res_unit=0; +set GLOBAL query_cache_size= 100000; +reset query cache; +set LOCAL default_week_format = 0; +select week('2007-01-04'); +week('2007-01-04') +0 +select week('2007-01-04') from t1; +week('2007-01-04') +0 +0 +0 +set LOCAL default_week_format = 2; +select week('2007-01-04'); +week('2007-01-04') +53 +select week('2007-01-04') from t1; +week('2007-01-04') +53 +53 +53 +drop table t1; +CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b)); +INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'), +('Full-text indexes', 'are called collections'), +('Only MyISAM tables','support collections'), +('Function MATCH ... AGAINST()','is used to do a search'), +('Full-text search in MySQL', 'implements vector space model'); +set GLOBAL ft_boolean_syntax='+ -><()~*:""&|'; +select *, MATCH(a,b) AGAINST("+called +collections" IN BOOLEAN MODE) as x from t1; +a b x +MySQL has now support for full-text search 0 +Full-text indexes are called collections 1 +Only MyISAM tables support collections 0 +Function MATCH ... AGAINST() is used to do a search 0 +Full-text search in MySQL implements vector space model 0 +set GLOBAL ft_boolean_syntax='- +><()~*:""&|'; +select *, MATCH(a,b) AGAINST("+called +collections" IN BOOLEAN MODE) as x from t1; +a b x +MySQL has now support for full-text search 0 +Full-text indexes are called collections 0 +Only MyISAM tables support collections 0 +Function MATCH ... AGAINST() is used to do a search 0 +Full-text search in MySQL implements vector space model 0 +set GLOBAL query_cache_type=default; +set GLOBAL query_cache_limit=default; +set GLOBAL query_cache_min_res_unit=default; +set GLOBAL query_cache_size=default; diff --git a/mysql-test/r/range.result b/mysql-test/r/range.result index f25d94f8066..4aaa114c0f9 100644 --- a/mysql-test/r/range.result +++ b/mysql-test/r/range.result @@ -504,8 +504,8 @@ select count(*) from t1 where x = 18446744073709551601; count(*) 1 create table t2 (x bigint not null); -insert into t2(x) values (0xfffffffffffffff0); -insert into t2(x) values (0xfffffffffffffff1); +insert into t2(x) values (-16); +insert into t2(x) values (-15); select * from t2; x -16 @@ -658,4 +658,188 @@ select a from t1 where a > 'x'; a xx drop table t1; +CREATE TABLE t1 ( +OXID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '', +OXPARENTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT 'oxrootid', +OXLEFT int NOT NULL DEFAULT '0', +OXRIGHT int NOT NULL DEFAULT '0', +OXROOTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '', +PRIMARY KEY (OXID), +KEY OXNID (OXID), +KEY OXLEFT (OXLEFT), +KEY OXRIGHT (OXRIGHT), +KEY OXROOTID (OXROOTID) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci; +INSERT INTO t1 VALUES +('d8c4177d09f8b11f5.52725521','oxrootid',1,40,'d8c4177d09f8b11f5.52725521'), +('d8c4177d151affab2.81582770','d8c4177d09f8b11f5.52725521',2,3, +'d8c4177d09f8b11f5.52725521'), +('d8c4177d206a333d2.74422679','d8c4177d09f8b11f5.52725521',4,5, +'d8c4177d09f8b11f5.52725521'), +('d8c4177d225791924.30714720','d8c4177d09f8b11f5.52725521',6,7, +'d8c4177d09f8b11f5.52725521'), +('d8c4177d2380fc201.39666693','d8c4177d09f8b11f5.52725521',8,9, +'d8c4177d09f8b11f5.52725521'), +('d8c4177d24ccef970.14957924','d8c4177d09f8b11f5.52725521',10,11, +'d8c4177d09f8b11f5.52725521'); +EXPLAIN +SELECT s.oxid FROM t1 v, t1 s +WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND +v.oxrootid ='d8c4177d09f8b11f5.52725521' AND +s.oxleft > v.oxleft AND s.oxleft < v.oxright; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE v ref OXLEFT,OXRIGHT,OXROOTID OXROOTID 32 const 5 Using where +1 SIMPLE s ALL OXLEFT NULL NULL NULL 5 Range checked for each record (index map: 0x4) +SELECT s.oxid FROM t1 v, t1 s +WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND +v.oxrootid ='d8c4177d09f8b11f5.52725521' AND +s.oxleft > v.oxleft AND s.oxleft < v.oxright; +oxid +d8c4177d151affab2.81582770 +d8c4177d206a333d2.74422679 +d8c4177d225791924.30714720 +d8c4177d2380fc201.39666693 +d8c4177d24ccef970.14957924 +DROP TABLE t1; +create table t1 ( +c1 char(10), c2 char(10), c3 char(10), c4 char(10), +c5 char(10), c6 char(10), c7 char(10), c8 char(10), +c9 char(10), c10 char(10), c11 char(10), c12 char(10), +c13 char(10), c14 char(10), c15 char(10), c16 char(10), +index(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,c13,c14,c15,c16) +); +insert into t1 (c1) values ('1'),('1'),('1'),('1'); +select * from t1 where +c1 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c2 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c3 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c4 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c5 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c6 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c7 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c8 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c9 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c10 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC"); +c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 +drop table t1; End of 4.1 tests diff --git a/mysql-test/r/repair.result b/mysql-test/r/repair.result index bf46d19777f..355a8c25434 100644 --- a/mysql-test/r/repair.result +++ b/mysql-test/r/repair.result @@ -77,7 +77,7 @@ INSERT INTO t1 VALUES SET myisam_repair_threads=2; REPAIR TABLE t1; Table Op Msg_type Msg_text -test.t1 repair error sort_buffer_size is to small +test.t1 repair error myisam_sort_buffer_size is too small test.t1 repair warning Number of rows changed from 0 to 157 test.t1 repair status OK SET myisam_repair_threads=@@global.myisam_repair_threads; diff --git a/mysql-test/r/row.result b/mysql-test/r/row.result index 76d6fa13766..6169619712b 100644 --- a/mysql-test/r/row.result +++ b/mysql-test/r/row.result @@ -53,7 +53,7 @@ SELECT (1,2,3)=(1,NULL,3); NULL SELECT (1,2,3)=(1,NULL,0); (1,2,3)=(1,NULL,0) -NULL +0 SELECT ROW(1,2,3)=ROW(1,2,3); ROW(1,2,3)=ROW(1,2,3) 1 @@ -170,3 +170,118 @@ ROW(2,10) <=> ROW(3,4) SELECT ROW(NULL,10) <=> ROW(3,NULL); ROW(NULL,10) <=> ROW(3,NULL) 0 +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),ROW(1,1)); +ERROR 21000: Operand should contain 2 column(s) +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),ROW(1,1),ROW(1,ROW(2,3))); +ERROR 21000: Operand should contain 2 column(s) +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),ROW(1,ROW(2,2,2))); +ERROR 21000: Operand should contain 2 column(s) +SELECT ROW(1,ROW(2,3,4)) IN (ROW(1,ROW(2,3,4)),ROW(1,ROW(2,2))); +ERROR 21000: Operand should contain 3 column(s) +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),(SELECT 1,1)); +ERROR 21000: Operand should contain 2 column(s) +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),(SELECT 1,1),ROW(1,ROW(2,4))); +ERROR 21000: Operand should contain 2 column(s) +SELECT ROW(1,ROW(2,3)) IN ((SELECT 1,1),ROW(1,ROW(2,3))); +ERROR 21000: Operand should contain 2 column(s) +SELECT ROW(2,1) IN (ROW(21,2),ROW(ROW(1,1,3),0)); +ERROR 21000: Operand should contain 1 column(s) +SELECT ROW(2,1) IN (ROW(ROW(1,1,3),0),ROW(21,2)); +ERROR 21000: Operand should contain 1 column(s) +CREATE TABLE t1(a int, b int, c int); +INSERT INTO t1 VALUES (1, 2, 3), +(NULL, 2, 3 ), (1, NULL, 3 ), (1, 2, NULL), +(NULL, 2, 3+1), (1, NULL, 3+1), (1, 2+1, NULL), +(NULL, 2, 3-1), (1, NULL, 3-1), (1, 2-1, NULL); +SELECT (1,2,3) = (1, NULL, 3); +(1,2,3) = (1, NULL, 3) +NULL +SELECT (1,2,3) = (1+1, NULL, 3); +(1,2,3) = (1+1, NULL, 3) +0 +SELECT (1,2,3) = (1, NULL, 3+1); +(1,2,3) = (1, NULL, 3+1) +0 +SELECT * FROM t1 WHERE (a,b,c) = (1,2,3); +a b c +1 2 3 +SELECT (1,2,3) <> (1, NULL, 3); +(1,2,3) <> (1, NULL, 3) +NULL +SELECT (1,2,3) <> (1+1, NULL, 3); +(1,2,3) <> (1+1, NULL, 3) +1 +SELECT (1,2,3) <> (1, NULL, 3+1); +(1,2,3) <> (1, NULL, 3+1) +1 +SELECT * FROM t1 WHERE (a,b,c) <> (1,2,3); +a b c +NULL 2 4 +1 NULL 4 +1 3 NULL +NULL 2 2 +1 NULL 2 +1 1 NULL +SELECT (1,2,3) < (NULL, 2, 3); +(1,2,3) < (NULL, 2, 3) +NULL +SELECT (1,2,3) < (1, NULL, 3); +(1,2,3) < (1, NULL, 3) +NULL +SELECT (1,2,3) < (1-1, NULL, 3); +(1,2,3) < (1-1, NULL, 3) +0 +SELECT (1,2,3) < (1+1, NULL, 3); +(1,2,3) < (1+1, NULL, 3) +1 +SELECT * FROM t1 WHERE (a,b,c) < (1,2,3); +a b c +1 1 NULL +SELECT (1,2,3) <= (NULL, 2, 3); +(1,2,3) <= (NULL, 2, 3) +NULL +SELECT (1,2,3) <= (1, NULL, 3); +(1,2,3) <= (1, NULL, 3) +NULL +SELECT (1,2,3) <= (1-1, NULL, 3); +(1,2,3) <= (1-1, NULL, 3) +0 +SELECT (1,2,3) <= (1+1, NULL, 3); +(1,2,3) <= (1+1, NULL, 3) +1 +SELECT * FROM t1 WHERE (a,b,c) <= (1,2,3); +a b c +1 2 3 +1 1 NULL +SELECT (1,2,3) > (NULL, 2, 3); +(1,2,3) > (NULL, 2, 3) +NULL +SELECT (1,2,3) > (1, NULL, 3); +(1,2,3) > (1, NULL, 3) +NULL +SELECT (1,2,3) > (1-1, NULL, 3); +(1,2,3) > (1-1, NULL, 3) +1 +SELECT (1,2,3) > (1+1, NULL, 3); +(1,2,3) > (1+1, NULL, 3) +0 +SELECT * FROM t1 WHERE (a,b,c) > (1,2,3); +a b c +1 3 NULL +SELECT (1,2,3) >= (NULL, 2, 3); +(1,2,3) >= (NULL, 2, 3) +NULL +SELECT (1,2,3) >= (1, NULL, 3); +(1,2,3) >= (1, NULL, 3) +NULL +SELECT (1,2,3) >= (1-1, NULL, 3); +(1,2,3) >= (1-1, NULL, 3) +1 +SELECT (1,2,3) >= (1+1, NULL, 3); +(1,2,3) >= (1+1, NULL, 3) +0 +SELECT * FROM t1 WHERE (a,b,c) >= (1,2,3); +a b c +1 2 3 +1 3 NULL +DROP TABLE t1; diff --git a/mysql-test/r/rpl_ignore_table.result b/mysql-test/r/rpl_ignore_table.result index 356a9dcb2f8..28bb4a448e0 100644 --- a/mysql-test/r/rpl_ignore_table.result +++ b/mysql-test/r/rpl_ignore_table.result @@ -14,3 +14,106 @@ SELECT * FROM t4; a DROP TABLE t1; DROP TABLE t4; +**** Test case for BUG#25482 **** +**** Adding GRANTS on master **** +create table test.t1(a int); +create table test.t4(a int); +GRANT SELECT ON test.t1 TO mysqltest1@localhost; +GRANT INSERT ON test.t4 TO mysqltest2@localhost; +GRANT select, update, insert, references on t1 +to mysqltest2@localhost; +GRANT SELECT ON test.* TO mysqltest3@localhost; +GRANT INSERT ON test.t4 TO mysqltest3@localhost; +GRANT select(a), update(a), insert(a), references(a) on t4 +to mysqltest3@localhost; +create database mysqltest2; +create table mysqltest2.t2 (id int); +GRANT SELECT ON mysqltest2.t2 TO mysqltest4@localhost IDENTIFIED BY 'pass'; +insert into mysql.user (user, host) values ("mysqltest5", "somehost"); +GRANT SELECT ON *.* TO mysqltest6@localhost; +GRANT INSERT ON *.* TO mysqltest6@localhost; +GRANT INSERT ON test.* TO mysqltest6@localhost; +GRANT INSERT ON test.t1 TO mysqltest6@localhost; +show grants for mysqltest1@localhost; +Grants for mysqltest1@localhost +GRANT USAGE ON *.* TO 'mysqltest1'@'localhost' +GRANT SELECT ON `test`.`t1` TO 'mysqltest1'@'localhost' +show grants for mysqltest2@localhost; +Grants for mysqltest2@localhost +GRANT USAGE ON *.* TO 'mysqltest2'@'localhost' +GRANT SELECT, INSERT, UPDATE, REFERENCES ON `test`.`t1` TO 'mysqltest2'@'localhost' +GRANT INSERT ON `test`.`t4` TO 'mysqltest2'@'localhost' +show grants for mysqltest3@localhost; +Grants for mysqltest3@localhost +GRANT USAGE ON *.* TO 'mysqltest3'@'localhost' +GRANT SELECT ON `test`.* TO 'mysqltest3'@'localhost' +GRANT SELECT (a), INSERT, INSERT (a), UPDATE (a), REFERENCES (a) ON `test`.`t4` TO 'mysqltest3'@'localhost' +show grants for mysqltest4@localhost; +Grants for mysqltest4@localhost +GRANT USAGE ON *.* TO 'mysqltest4'@'localhost' IDENTIFIED BY PASSWORD '*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7' +GRANT SELECT ON `mysqltest2`.`t2` TO 'mysqltest4'@'localhost' +show grants for mysqltest6@localhost; +Grants for mysqltest6@localhost +GRANT SELECT, INSERT ON *.* TO 'mysqltest6'@'localhost' +GRANT INSERT ON `test`.* TO 'mysqltest6'@'localhost' +GRANT INSERT ON `test`.`t1` TO 'mysqltest6'@'localhost' +flush privileges; +show grants for mysqltest5@somehost; +Grants for mysqltest5@somehost +GRANT USAGE ON *.* TO 'mysqltest5'@'somehost' +**** Checking grants on slave **** +show grants for mysqltest2@localhost; +Grants for mysqltest2@localhost +GRANT USAGE ON *.* TO 'mysqltest2'@'localhost' +GRANT INSERT ON `test`.`t4` TO 'mysqltest2'@'localhost' +show grants for mysqltest3@localhost; +Grants for mysqltest3@localhost +GRANT USAGE ON *.* TO 'mysqltest3'@'localhost' +GRANT SELECT ON `test`.* TO 'mysqltest3'@'localhost' +GRANT SELECT (a), INSERT, INSERT (a), UPDATE (a), REFERENCES (a) ON `test`.`t4` TO 'mysqltest3'@'localhost' +show grants for mysqltest4@localhost; +Grants for mysqltest4@localhost +GRANT USAGE ON *.* TO 'mysqltest4'@'localhost' IDENTIFIED BY PASSWORD '*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7' +GRANT SELECT ON `mysqltest2`.`t2` TO 'mysqltest4'@'localhost' +show grants for mysqltest5@somehost; +Grants for mysqltest5@somehost +GRANT USAGE ON *.* TO 'mysqltest5'@'somehost' +show grants for mysqltest6@localhost; +Grants for mysqltest6@localhost +GRANT SELECT, INSERT ON *.* TO 'mysqltest6'@'localhost' +GRANT INSERT ON `test`.* TO 'mysqltest6'@'localhost' +show grants for mysqltest1@localhost; +ERROR 42000: There is no such grant defined for user 'mysqltest1' on host 'localhost' +**** Revoking grants on master **** +REVOKE SELECT ON test.t1 FROM mysqltest1@localhost; +REVOKE SELECT ON mysqltest2.t2 FROM mysqltest4@localhost; +REVOKE select(a) on t4 +from mysqltest3@localhost; +show grants for mysqltest1@localhost; +Grants for mysqltest1@localhost +GRANT USAGE ON *.* TO 'mysqltest1'@'localhost' +show grants for mysqltest3@localhost; +Grants for mysqltest3@localhost +GRANT USAGE ON *.* TO 'mysqltest3'@'localhost' +GRANT SELECT ON `test`.* TO 'mysqltest3'@'localhost' +GRANT INSERT, INSERT (a), UPDATE (a), REFERENCES (a) ON `test`.`t4` TO 'mysqltest3'@'localhost' +show grants for mysqltest4@localhost; +Grants for mysqltest4@localhost +GRANT USAGE ON *.* TO 'mysqltest4'@'localhost' IDENTIFIED BY PASSWORD '*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7' +**** Checking grants on slave **** +show grants for mysqltest1@localhost; +ERROR 42000: There is no such grant defined for user 'mysqltest1' on host 'localhost' +show grants for mysqltest3@localhost; +Grants for mysqltest3@localhost +GRANT USAGE ON *.* TO 'mysqltest3'@'localhost' +GRANT SELECT ON `test`.* TO 'mysqltest3'@'localhost' +GRANT INSERT, INSERT (a), UPDATE (a), REFERENCES (a) ON `test`.`t4` TO 'mysqltest3'@'localhost' +show grants for mysqltest4@localhost; +Grants for mysqltest4@localhost +GRANT USAGE ON *.* TO 'mysqltest4'@'localhost' IDENTIFIED BY PASSWORD '*196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7' +drop table t1, t4, mysqltest2.t2; +drop database mysqltest2; +delete from mysql.user where user like "mysqltest%"; +delete from mysql.db where user like "mysqltest%"; +delete from mysql.tables_priv where user like "mysqltest%"; +delete from mysql.columns_priv where user like "mysqltest%"; diff --git a/mysql-test/r/rpl_locale.result b/mysql-test/r/rpl_locale.result new file mode 100644 index 00000000000..5de5bab9a0b --- /dev/null +++ b/mysql-test/r/rpl_locale.result @@ -0,0 +1,16 @@ +stop slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +start slave; +create table t1 (s1 char(10)); +set lc_time_names= 'de_DE'; +insert into t1 values (date_format('2001-01-01','%W')); +select * from t1; +s1 +Montag +select * from t1; +s1 +Montag +drop table t1; diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index f09143fcaa6..6dc971a953c 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -2819,3 +2819,20 @@ select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5; min(key1) 0.37619999051094 DROP TABLE t1,t2; +create table t1(a bigint unsigned, b bigint); +insert into t1 values (0xfffffffffffffffff, 0xfffffffffffffffff), +(0x10000000000000000, 0x10000000000000000), +(0x8fffffffffffffff, 0x8fffffffffffffff); +Warnings: +Warning 1264 Data truncated; out of range for column 'a' at row 1 +Warning 1264 Data truncated; out of range for column 'b' at row 1 +Warning 1264 Data truncated; out of range for column 'a' at row 2 +Warning 1264 Data truncated; out of range for column 'b' at row 2 +Warning 1264 Data truncated; out of range for column 'b' at row 3 +select hex(a), hex(b) from t1; +hex(a) hex(b) +FFFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF +8FFFFFFFFFFFFFFF 7FFFFFFFFFFFFFFF +drop table t1; +End of 4.1 tests diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 89315342f5e..5bb79a53771 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -913,7 +913,7 @@ select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a'),(select c from t a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,2,'a') (select c from t1 where a=t2.a) 1 1 a 2 0 b -NULL NULL NULL +NULL 0 NULL select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b'),(select c from t1 where a=t2.a) from t2; a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,3,'b') (select c from t1 where a=t2.a) 1 0 a @@ -923,7 +923,7 @@ select a, (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c'),(select c from t a (select a,b,c from t1 where t1.a=t2.a) = ROW(a,4,'c') (select c from t1 where a=t2.a) 1 0 a 2 0 b -NULL NULL NULL +NULL 0 NULL drop table t1,t2; create table t1 (a int, b real, c varchar(10)); insert into t1 values (1, 1, 'a'), (2,2,'b'), (NULL, 2, 'b'); @@ -3013,3 +3013,90 @@ t3 CREATE TABLE `t3` ( `a` datetime default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1,t2,t3; +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (1), (2); +SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) > 0; +a +SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL; +a +1 +2 +EXPLAIN SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 +2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE +DROP TABLE t1; +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (2), (4), (1), (3); +CREATE TABLE t2 (b int, c int); +INSERT INTO t2 VALUES +(2,1), (1,3), (2,1), (4,4), (2,2), (1,4); +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2 ); +a +2 +4 +1 +3 +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1); +ERROR 21000: Subquery returns more than 1 row +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2), a; +a +1 +2 +3 +4 +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1), a; +ERROR 21000: Subquery returns more than 1 row +SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 2); +b MAX(c) +1 4 +2 2 +4 4 +SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 1); +ERROR 21000: Subquery returns more than 1 row +SELECT a FROM t1 GROUP BY a +HAVING IFNULL((SELECT b FROM t2 WHERE b > 2), +(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3; +a +1 +2 +3 +4 +SELECT a FROM t1 GROUP BY a +HAVING IFNULL((SELECT b FROM t2 WHERE b > 1), +(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3; +ERROR 21000: Subquery returns more than 1 row +SELECT a FROM t1 GROUP BY a +HAVING IFNULL((SELECT b FROM t2 WHERE b > 4), +(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3; +a +4 +SELECT a FROM t1 GROUP BY a +HAVING IFNULL((SELECT b FROM t2 WHERE b > 4), +(SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)) > 3; +ERROR 21000: Subquery returns more than 1 row +SELECT a FROM t1 +ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 2), +(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)); +a +2 +4 +1 +3 +SELECT a FROM t1 +ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 1), +(SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)); +ERROR 21000: Subquery returns more than 1 row +SELECT a FROM t1 +ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4), +(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)); +a +2 +1 +3 +4 +SELECT a FROM t1 +ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4), +(SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)); +ERROR 21000: Subquery returns more than 1 row +DROP TABLE t1,t2; diff --git a/mysql-test/r/symlink.result b/mysql-test/r/symlink.result index b104ce50a56..9b21dc7e952 100644 --- a/mysql-test/r/symlink.result +++ b/mysql-test/r/symlink.result @@ -123,3 +123,19 @@ select * from t1; a 42 drop table t1; +execute stmt; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` char(10) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' +drop table t1; +execute stmt; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c` char(10) default NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' +drop table t1; +deallocate prepare stmt; +End of 4.1 tests diff --git a/mysql-test/r/type_datetime.result b/mysql-test/r/type_datetime.result index f313a6b934b..64337bd2c2f 100644 --- a/mysql-test/r/type_datetime.result +++ b/mysql-test/r/type_datetime.result @@ -166,3 +166,6 @@ dt 0000-00-00 00:00:00 0000-00-00 00:00:00 drop table t1; +select cast('2006-12-05 22:10:10' as datetime) + 0; +cast('2006-12-05 22:10:10' as datetime) + 0 +20061205221010.000000 diff --git a/mysql-test/r/type_enum.result b/mysql-test/r/type_enum.result index 0fe3f674fba..b5ec72ffe5a 100644 --- a/mysql-test/r/type_enum.result +++ b/mysql-test/r/type_enum.result @@ -1754,3 +1754,28 @@ t1 CREATE TABLE `t1` ( `f2` enum('ÿÿ') default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; +create table t1(russian enum('E','F','EÿF','FÿE') NOT NULL DEFAULT'E'); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `russian` enum('E','F','EÿF','FÿE') NOT NULL default 'E' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop table t1; +create table t1(denormal enum('E','F','E,F','F,E') NOT NULL DEFAULT'E'); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `denormal` enum('E','F','E,F','F,E') NOT NULL default 'E' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop table t1; +create table t1(russian_deviant enum('E','F','EÿF','F,E') NOT NULL DEFAULT'E'); +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `russian_deviant` enum('E','F','EÿF','F,E') NOT NULL default 'E' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +drop table t1; +create table t1(exhausting_charset enum('ABCDEFGHIJKLMNOPQRSTUVWXYZ',' +
!"','#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~','xx\','yy\€','zz‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ')); +ERROR 42000: Field separator argument is not what is expected; check the manual +End of 4.1 tests diff --git a/mysql-test/r/type_float.result b/mysql-test/r/type_float.result index f157bbc602d..3e66fa70dc1 100644 --- a/mysql-test/r/type_float.result +++ b/mysql-test/r/type_float.result @@ -278,4 +278,75 @@ select 1e-308, 1.00000001e-300, 100000000e-300; select 10e307; 10e307 1e+308 +create table t1(a int, b double(8, 2)); +insert into t1 values +(1, 28.50), (1, 121.85), (1, 157.23), (1, 1351.00), (1, -1965.35), (1, 81.75), +(1, 217.08), (1, 7.94), (4, 96.07), (4, 6404.65), (4, -6500.72), (2, 100.00), +(5, 5.00), (5, -2104.80), (5, 2033.80), (5, 0.07), (5, 65.93), +(3, -4986.24), (3, 5.00), (3, 4857.34), (3, 123.74), (3, 0.16), +(6, -1695.31), (6, 1003.77), (6, 499.72), (6, 191.82); +explain select sum(b) s from t1 group by a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 26 Using temporary; Using filesort +select sum(b) s from t1 group by a; +s +0.00 +100.00 +0.00 +-0.00 +-0.00 +0.00 +select sum(b) s from t1 group by a having s <> 0; +s +100.00 +select sum(b) s from t1 group by a having s <> 0 order by s; +s +100.00 +select sum(b) s from t1 group by a having s <=> 0; +s +0.00 +0.00 +-0.00 +-0.00 +0.00 +select sum(b) s from t1 group by a having s <=> 0 order by s; +s +-0.00 +-0.00 +0.00 +0.00 +0.00 +alter table t1 add key (a, b); +explain select sum(b) s from t1 group by a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL a 14 NULL 26 Using index +select sum(b) s from t1 group by a; +s +0.00 +100.00 +0.00 +-0.00 +0.00 +0.00 +select sum(b) s from t1 group by a having s <> 0; +s +100.00 +select sum(b) s from t1 group by a having s <> 0 order by s; +s +100.00 +select sum(b) s from t1 group by a having s <=> 0; +s +0.00 +0.00 +-0.00 +0.00 +0.00 +select sum(b) s from t1 group by a having s <=> 0 order by s; +s +-0.00 +0.00 +0.00 +0.00 +0.00 +drop table t1; End of 4.1 tests diff --git a/mysql-test/r/type_ranges.result b/mysql-test/r/type_ranges.result index 90207f39417..2e8fa4c26b7 100644 --- a/mysql-test/r/type_ranges.result +++ b/mysql-test/r/type_ranges.result @@ -54,7 +54,7 @@ ushort smallint(5) unsigned zerofill NULL MUL 00000 # umedium mediumint(8) unsigned NULL MUL 0 # ulong int(11) unsigned NULL MUL 0 # ulonglong bigint(13) unsigned NULL MUL 0 # -time_stamp timestamp NULL YES CURRENT_TIMESTAMP # +time_stamp timestamp NULL CURRENT_TIMESTAMP # date_field date NULL YES NULL # time_field time NULL YES NULL # date_time datetime NULL YES NULL # @@ -222,7 +222,7 @@ ushort smallint(5) unsigned zerofill NULL 00000 # umedium mediumint(8) unsigned NULL MUL 0 # ulong int(11) unsigned NULL MUL 0 # ulonglong bigint(13) unsigned NULL MUL 0 # -time_stamp timestamp NULL YES CURRENT_TIMESTAMP # +time_stamp timestamp NULL CURRENT_TIMESTAMP # date_field varchar(10) latin1_swedish_ci YES NULL # time_field time NULL YES NULL # date_time datetime NULL YES NULL # @@ -248,7 +248,7 @@ ushort smallint(5) unsigned zerofill NULL 00000 # umedium mediumint(8) unsigned NULL 0 # ulong int(11) unsigned NULL 0 # ulonglong bigint(13) unsigned NULL 0 # -time_stamp timestamp NULL YES 0000-00-00 00:00:00 # +time_stamp timestamp NULL 0000-00-00 00:00:00 # date_field varchar(10) latin1_swedish_ci YES NULL # time_field time NULL YES NULL # date_time datetime NULL YES NULL # diff --git a/mysql-test/r/type_timestamp.result b/mysql-test/r/type_timestamp.result index c0396e4640d..4e71d76785a 100644 --- a/mysql-test/r/type_timestamp.result +++ b/mysql-test/r/type_timestamp.result @@ -188,9 +188,9 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 show columns from t1; Field Type Null Key Default Extra -t1 timestamp YES 2003-01-01 00:00:00 +t1 timestamp 2003-01-01 00:00:00 t2 datetime YES NULL -t3 timestamp YES 0000-00-00 00:00:00 +t3 timestamp 0000-00-00 00:00:00 drop table t1; create table t1 (t1 timestamp default now(), t2 datetime, t3 timestamp); SET TIMESTAMP=1000000002; @@ -212,9 +212,9 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 show columns from t1; Field Type Null Key Default Extra -t1 timestamp YES CURRENT_TIMESTAMP +t1 timestamp CURRENT_TIMESTAMP t2 datetime YES NULL -t3 timestamp YES 0000-00-00 00:00:00 +t3 timestamp 0000-00-00 00:00:00 drop table t1; create table t1 (t1 timestamp default '2003-01-01 00:00:00' on update now(), t2 datetime); SET TIMESTAMP=1000000004; @@ -238,7 +238,7 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 show columns from t1; Field Type Null Key Default Extra -t1 timestamp YES 2003-01-01 00:00:00 +t1 timestamp 2003-01-01 00:00:00 t2 datetime YES NULL drop table t1; create table t1 (t1 timestamp default now() on update now(), t2 datetime); @@ -263,7 +263,7 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 show columns from t1; Field Type Null Key Default Extra -t1 timestamp YES CURRENT_TIMESTAMP +t1 timestamp CURRENT_TIMESTAMP t2 datetime YES NULL drop table t1; create table t1 (t1 timestamp, t2 datetime, t3 timestamp); @@ -289,9 +289,9 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 show columns from t1; Field Type Null Key Default Extra -t1 timestamp YES CURRENT_TIMESTAMP +t1 timestamp CURRENT_TIMESTAMP t2 datetime YES NULL -t3 timestamp YES 0000-00-00 00:00:00 +t3 timestamp 0000-00-00 00:00:00 drop table t1; create table t1 (t1 timestamp default current_timestamp on update current_timestamp, t2 datetime); SET TIMESTAMP=1000000009; @@ -315,7 +315,7 @@ t1 CREATE TABLE `t1` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 show columns from t1; Field Type Null Key Default Extra -t1 timestamp YES CURRENT_TIMESTAMP +t1 timestamp CURRENT_TIMESTAMP t2 datetime YES NULL delete from t1; insert into t1 values ('2004-04-01 00:00:00', '2004-04-01 00:00:00'); diff --git a/mysql-test/r/update.result b/mysql-test/r/update.result index 0f86a959250..186e0955e61 100644 --- a/mysql-test/r/update.result +++ b/mysql-test/r/update.result @@ -377,3 +377,7 @@ create table t1(f1 int, `*f2` int); insert into t1 values (1,1); update t1 set `*f2`=1; drop table t1; +create table t1(f1 int); +update t1 set f2=1 order by f2; +ERROR 42S22: Unknown column 'f2' in 'order clause' +drop table t1; diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result index 0aa7ea7f83c..14f1eb7d306 100644 --- a/mysql-test/r/variables.result +++ b/mysql-test/r/variables.result @@ -499,6 +499,63 @@ set names latin1; select @@have_innodb; @@have_innodb # +*** Various tests with LC_TIME_NAMES +*** LC_TIME_NAMES: testing case insensitivity +set @@lc_time_names='ru_ru'; +select @@lc_time_names; +@@lc_time_names +ru_RU +*** LC_TIME_NAMES: testing with a user variable +set @lc='JA_JP'; +set @@lc_time_names=@lc; +select @@lc_time_names; +@@lc_time_names +ja_JP +*** LC_TIME_NAMES: testing with string expressions +set lc_time_names=concat('de','_','DE'); +select @@lc_time_names; +@@lc_time_names +de_DE +set lc_time_names=concat('de','+','DE'); +ERROR HY000: Unknown locale: 'de+DE' +select @@lc_time_names; +@@lc_time_names +de_DE +LC_TIME_NAMES: testing with numeric expressions +set @@lc_time_names=1+2; +select @@lc_time_names; +@@lc_time_names +sv_SE +set @@lc_time_names=1/0; +ERROR 42000: Incorrect argument type to variable 'lc_time_names' +select @@lc_time_names; +@@lc_time_names +sv_SE +set lc_time_names=en_US; +LC_TIME_NAMES: testing NULL and a negative number: +set lc_time_names=NULL; +ERROR 42000: Variable 'lc_time_names' can't be set to the value of 'NULL' +set lc_time_names=-1; +ERROR HY000: Unknown locale: '-1' +select @@lc_time_names; +@@lc_time_names +en_US +LC_TIME_NAMES: testing locale with the last ID: +set lc_time_names=108; +select @@lc_time_names; +@@lc_time_names +zh_HK +LC_TIME_NAMES: testing a number beyond the valid ID range: +set lc_time_names=109; +ERROR HY000: Unknown locale: '109' +select @@lc_time_names; +@@lc_time_names +zh_HK +LC_TIME_NAMES: testing that 0 is en_US: +set lc_time_names=0; +select @@lc_time_names; +@@lc_time_names +en_US set @test = @@query_prealloc_size; set @@query_prealloc_size = @test; select @@query_prealloc_size = @test; diff --git a/mysql-test/r/windows.result b/mysql-test/r/windows.result index 039c5b1476e..1702fd28c18 100644 --- a/mysql-test/r/windows.result +++ b/mysql-test/r/windows.result @@ -6,3 +6,9 @@ use prn; ERROR 42000: Unknown database 'prn' create table nu (a int); drop table nu; +drop table if exists t1; +CREATE TABLE t1 ( `ID` int(6) ) data directory 'c:/tmp/' index directory 'c:/tmp/' engine=MyISAM; +Warnings: +Warning 0 DATA DIRECTORY option ignored +Warning 0 INDEX DIRECTORY option ignored +drop table t1; diff --git a/mysql-test/std_data/init_file.dat b/mysql-test/std_data/init_file.dat index 6105ca2ac1b..91e456e725d 100644 --- a/mysql-test/std_data/init_file.dat +++ b/mysql-test/std_data/init_file.dat @@ -1 +1,9 @@ select * from mysql.user as t1, mysql.user as t2, mysql.user as t3; + +# +# Bug#23240 --init-file statements with NOW() reports '1970-01-01 11:00:00'as the date time +# +CREATE DATABASE IF NOT EXISTS init_file; +CREATE TABLE IF NOT EXISTS init_file.startup ( startdate DATETIME ); +INSERT INTO init_file.startup VALUES ( NOW() ); + diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test index 3e1e7952af1..874c42ac0b6 100644 --- a/mysql-test/t/alter_table.test +++ b/mysql-test/t/alter_table.test @@ -518,4 +518,81 @@ SHOW INDEX FROM bug24219_2; DROP TABLE bug24219_2; +# +# Bug#24562 (ALTER TABLE ... ORDER BY ... with complex expression asserts) +# + +--disable_warnings +drop table if exists table_24562; +--enable_warnings + +create table table_24562( + section int, + subsection int, + title varchar(50)); + +insert into table_24562 values +(1, 0, "Introduction"), +(1, 1, "Authors"), +(1, 2, "Acknowledgements"), +(2, 0, "Basics"), +(2, 1, "Syntax"), +(2, 2, "Client"), +(2, 3, "Server"), +(3, 0, "Intermediate"), +(3, 1, "Complex queries"), +(3, 2, "Stored Procedures"), +(3, 3, "Stored Functions"), +(4, 0, "Advanced"), +(4, 1, "Replication"), +(4, 2, "Load balancing"), +(4, 3, "High availability"), +(5, 0, "Conclusion"); + +select * from table_24562; + +alter table table_24562 add column reviewer varchar(20), +order by title; + +select * from table_24562; + +update table_24562 set reviewer="Me" where section=2; +update table_24562 set reviewer="You" where section=3; + +alter table table_24562 +order by section ASC, subsection DESC; + +select * from table_24562; + +alter table table_24562 +order by table_24562.subsection ASC, table_24562.section DESC; + +select * from table_24562; + +--error 1064 +alter table table_24562 order by 12; +--error 1064 +alter table table_24562 order by (section + 12); +--error 1064 +alter table table_24562 order by length(title); +--error 1064 +alter table table_24562 order by (select 12 from dual); + +--error 1054 +alter table table_24562 order by no_such_col; + +drop table table_24562; + +# +# Bug #20710: adding unique index of column with duplicated +# long values to reproduce error message with truncated key value. +# + +CREATE TABLE t1 (c1 CHAR(255)); +INSERT INTO t1 VALUES (REPEAT("x", 255)), (REPEAT("x", 255)); +--error 1062 +ALTER TABLE t1 ADD UNIQUE (c1); +DROP TABLE t1; + # End of 4.1 tests + diff --git a/mysql-test/t/backup.test b/mysql-test/t/backup.test index b6b3ef1c060..0f1881368a9 100644 --- a/mysql-test/t/backup.test +++ b/mysql-test/t/backup.test @@ -51,5 +51,6 @@ unlock tables; connection con1; reap; drop table t5; +--system rm $MYSQLTEST_VARDIR/tmp/t?.* # End of 4.1 tests diff --git a/mysql-test/t/blackhole.test b/mysql-test/t/blackhole.test index 257770d311c..4375f1c13ce 100644 --- a/mysql-test/t/blackhole.test +++ b/mysql-test/t/blackhole.test @@ -126,4 +126,13 @@ show binlog events; drop table t1,t2,t3; +# +# BUG#27998 - mysqld crashed when executing INSERT DELAYED on a BLACKHOLE +# table +# +CREATE TABLE t1(a INT) ENGINE=BLACKHOLE; +--error 1031 +INSERT DELAYED INTO t1 VALUES(1); +DROP TABLE t1; + # End of 4.1 tests diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test index b214cef10fa..8eef66f9e1b 100644 --- a/mysql-test/t/cast.test +++ b/mysql-test/t/cast.test @@ -167,4 +167,16 @@ INSERT INTO t1 SET f1 = +1.0e+30 ; SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1; DROP TABLE t1; -# End of 4.1 tests +# +# Bug #23938: cast(NULL as DATE) +# + +select isnull(date(NULL)), isnull(cast(NULL as DATE)); + +# +# Bug#23656: Wrong result of CAST from DATE to int +# +SELECT CAST(cast('01-01-01' as date) AS UNSIGNED); +SELECT CAST(cast('01-01-01' as date) AS SIGNED); + +--echo End of 4.1 tests diff --git a/mysql-test/t/ctype_hebrew.test b/mysql-test/t/ctype_hebrew.test new file mode 100644 index 00000000000..f786d05141d --- /dev/null +++ b/mysql-test/t/ctype_hebrew.test @@ -0,0 +1,16 @@ +# +# BUG #24037: Lossy Hebrew to Unicode conversion +# +# Test if LRM and RLM characters are correctly converted to UTF-8 +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +SET NAMES hebrew; +CREATE TABLE t1 (a char(1)) DEFAULT CHARSET=hebrew; +INSERT INTO t1 VALUES (0xFD),(0xFE); +ALTER TABLE t1 CONVERT TO CHARACTER SET utf8; +SELECT HEX(a) FROM t1; +DROP TABLE t1; + +--echo End of 4.1 tests diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index af40121852f..0b3f9ed2400 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -94,6 +94,26 @@ select * from t1; drop table t1; # +# Bug#22646 LC_TIME_NAMES: Assignment to non-UTF8 target fails +# +set names utf8; +set LC_TIME_NAMES='fr_FR'; +create table t1 (s1 char(20) character set latin1); +insert into t1 values (date_format('2004-02-02','%M')); +select hex(s1) from t1; +drop table t1; +create table t1 (s1 char(20) character set koi8r); +set LC_TIME_NAMES='ru_RU'; +insert into t1 values (date_format('2004-02-02','%M')); +insert into t1 values (date_format('2004-02-02','%b')); +insert into t1 values (date_format('2004-02-02','%W')); +insert into t1 values (date_format('2004-02-02','%a')); +select hex(s1), s1 from t1; +drop table t1; +set LC_TIME_NAMES='en_US'; + + +# # Bug #2366 Wrong utf8 behaviour when data is truncated # set names koi8r; diff --git a/mysql-test/t/delayed.test b/mysql-test/t/delayed.test index a32eec536ea..961bcc946bf 100644 --- a/mysql-test/t/delayed.test +++ b/mysql-test/t/delayed.test @@ -1,3 +1,5 @@ +# delayed works differently in embedded server +--source include/not_embedded.inc # # test of DELAYED insert and timestamps # (Can't be tested with purify :( ) diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test index 2036b59d810..301b2cdbb99 100644 --- a/mysql-test/t/delete.test +++ b/mysql-test/t/delete.test @@ -174,4 +174,14 @@ delete from t1 where a is null; select count(*) from t1; drop table t1; +# +# Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and +# non-restricting WHERE is present. +# +create table t1(f1 int primary key); +insert into t1 values (4),(3),(1),(2); +delete from t1 where (@a:= f1) order by f1 limit 1; +select @a; +drop table t1; + --echo End of 4.1 tests diff --git a/mysql-test/t/distinct.test b/mysql-test/t/distinct.test index a057eee8e37..bd46115231e 100644 --- a/mysql-test/t/distinct.test +++ b/mysql-test/t/distinct.test @@ -1,3 +1,5 @@ +# test script should specify proper directories for embedded +--source include/not_embedded.inc # # Bug with distinct and INSERT INTO # Bug with group by and not used fields diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test index d5ce6241490..1a9a6b578dc 100644 --- a/mysql-test/t/fulltext.test +++ b/mysql-test/t/fulltext.test @@ -369,4 +369,14 @@ EXECUTE stmt; DEALLOCATE PREPARE stmt; DROP TABLE t1; +# +# BUG#25951 - ignore/use index does not work with fulltext +# +CREATE TABLE t1 (a VARCHAR(255), FULLTEXT(a)); +SELECT * FROM t1 IGNORE INDEX(a) WHERE MATCH(a) AGAINST('test'); +ALTER TABLE t1 DISABLE KEYS; +--error 1191 +SELECT * FROM t1 WHERE MATCH(a) AGAINST('test'); +DROP TABLE t1; + # End of 4.1 tests diff --git a/mysql-test/t/fulltext_left_join.test b/mysql-test/t/fulltext_left_join.test index 3bb1f0b7309..516c006b109 100644 --- a/mysql-test/t/fulltext_left_join.test +++ b/mysql-test/t/fulltext_left_join.test @@ -45,4 +45,45 @@ select * from t1 left join t2 on (venue_id = entity_id and match(name) against(' select * from t1 left join t2 on (venue_id = entity_id and match(name) against('aberdeen')) where dt = '2003-05-23 19:30:00'; drop table t1,t2; +# +# BUG#14708 +# Inconsistent treatment of NULLs in LEFT JOINed FULLTEXT matching without index +# + +create table t1 (id int not null primary key, d char(200) not null, e char(200)); +insert into t1 values (1, 'aword', null), (2, 'aword', 'bword'), (3, 'bword', null), (4, 'bword', 'aword'), (5, 'aword and bword', null); +select * from t1 where match(d, e) against ('+aword +bword' in boolean mode); +create table t2 (m_id int not null, f char(200), key (m_id)); +insert into t2 values (1, 'bword'), (3, 'aword'), (5, ''); +select * from t1 left join t2 on m_id = id where match(d, e, f) against ('+aword +bword' in boolean mode); +drop table t1,t2; + +# +# BUG#25637: LEFT JOIN with BOOLEAN FULLTEXT loses left table matches +# (this is actually the same bug as bug #14708) +# + +CREATE TABLE t1 ( + id int(10) NOT NULL auto_increment, + link int(10) default NULL, + name mediumtext default NULL, + PRIMARY KEY (id), + FULLTEXT (name) +); +INSERT INTO t1 VALUES (1, 1, 'string'); +INSERT INTO t1 VALUES (2, 0, 'string'); +CREATE TABLE t2 ( + id int(10) NOT NULL auto_increment, + name mediumtext default NULL, + PRIMARY KEY (id), + FULLTEXT (name) +); +INSERT INTO t2 VALUES (1, 'string'); + +SELECT t1.*, MATCH(t1.name) AGAINST('string') AS relevance + FROM t1 LEFT JOIN t2 ON t1.link = t2.id + WHERE MATCH(t1.name, t2.name) AGAINST('string' IN BOOLEAN MODE); + +DROP TABLE t1,t2; + # End of 4.1 tests diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test index 3c855a32eed..5897674d1d4 100644 --- a/mysql-test/t/func_str.test +++ b/mysql-test/t/func_str.test @@ -713,4 +713,12 @@ EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(BOTH 'y' FROM s) > 'ab'; DROP TABLE t1; +# +# Bug#23409: ENCODE() and DECODE() functions aren't printed correctly +# +create table t1(f1 varchar(4)); +explain extended select encode(f1,'zxcv') as 'enc' from t1; +explain extended select decode(f1,'zxcv') as 'enc' from t1; +drop table t1; + --echo End of 4.1 tests diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index fa12c45db04..2fb5ea04a19 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -492,4 +492,11 @@ union select last_day('0000-00-00'); +# +# Bug 23616: datetime functions with double argumets +# + +select isnull(week(now() + 0)), isnull(week(now() + 0.2)), + week(20061108), week(20061108.01), week(20061108085411.000002); + --echo End of 4.1 tests diff --git a/mysql-test/t/gis-rtree.test b/mysql-test/t/gis-rtree.test index cdd8d1f3f0f..f28a718cc11 100644 --- a/mysql-test/t/gis-rtree.test +++ b/mysql-test/t/gis-rtree.test @@ -242,4 +242,560 @@ INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,1))); INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,0))); SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0)); DROP TABLE t1; + +# +# Bug#25673 - spatial index corruption, error 126 incorrect key file for table +# +CREATE TABLE t1 (id bigint(12) unsigned NOT NULL auto_increment, + c2 varchar(15) collate utf8_bin default NULL, + c1 varchar(15) collate utf8_bin default NULL, + c3 varchar(10) collate utf8_bin default NULL, + spatial_point point NOT NULL, + PRIMARY KEY(id), + SPATIAL KEY (spatial_point(32)) + )ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +# +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES + ('y', 's', 'j', GeomFromText('POINT(167 74)')), + ('r', 'n', 'd', GeomFromText('POINT(215 118)')), + ('g', 'n', 'e', GeomFromText('POINT(203 98)')), + ('h', 'd', 'd', GeomFromText('POINT(54 193)')), + ('r', 'x', 'y', GeomFromText('POINT(47 69)')), + ('t', 'q', 'r', GeomFromText('POINT(109 42)')), + ('a', 'z', 'd', GeomFromText('POINT(0 154)')), + ('x', 'v', 'o', GeomFromText('POINT(174 131)')), + ('b', 'r', 'a', GeomFromText('POINT(114 253)')), + ('x', 'z', 'i', GeomFromText('POINT(163 21)')), + ('w', 'p', 'i', GeomFromText('POINT(42 102)')), + ('g', 'j', 'j', GeomFromText('POINT(170 133)')), + ('m', 'g', 'n', GeomFromText('POINT(28 22)')), + ('b', 'z', 'h', GeomFromText('POINT(174 28)')), + ('q', 'k', 'f', GeomFromText('POINT(233 73)')), + ('w', 'w', 'a', GeomFromText('POINT(124 200)')), + ('t', 'j', 'w', GeomFromText('POINT(252 101)')), + ('d', 'r', 'd', GeomFromText('POINT(98 18)')), + ('w', 'o', 'y', GeomFromText('POINT(165 31)')), + ('y', 'h', 't', GeomFromText('POINT(14 220)')), + ('d', 'p', 'u', GeomFromText('POINT(223 196)')), + ('g', 'y', 'g', GeomFromText('POINT(207 96)')), + ('x', 'm', 'n', GeomFromText('POINT(214 3)')), + ('g', 'v', 'e', GeomFromText('POINT(140 205)')), + ('g', 'm', 'm', GeomFromText('POINT(10 236)')), + ('i', 'r', 'j', GeomFromText('POINT(137 228)')), + ('w', 's', 'p', GeomFromText('POINT(115 6)')), + ('o', 'n', 'k', GeomFromText('POINT(158 129)')), + ('j', 'h', 'l', GeomFromText('POINT(129 72)')), + ('f', 'x', 'l', GeomFromText('POINT(139 207)')), + ('u', 'd', 'n', GeomFromText('POINT(125 109)')), + ('b', 'a', 'z', GeomFromText('POINT(30 32)')), + ('m', 'h', 'o', GeomFromText('POINT(251 251)')), + ('f', 'r', 'd', GeomFromText('POINT(243 211)')), + ('b', 'd', 'r', GeomFromText('POINT(232 80)')), + ('g', 'k', 'v', GeomFromText('POINT(15 100)')), + ('i', 'f', 'c', GeomFromText('POINT(109 66)')), + ('r', 't', 'j', GeomFromText('POINT(178 6)')), + ('y', 'n', 'f', GeomFromText('POINT(233 211)')), + ('f', 'y', 'm', GeomFromText('POINT(99 16)')), + ('z', 'q', 'l', GeomFromText('POINT(39 49)')), + ('j', 'c', 'r', GeomFromText('POINT(75 187)')), + ('c', 'y', 'y', GeomFromText('POINT(246 253)')), + ('w', 'u', 'd', GeomFromText('POINT(56 190)')), + ('n', 'q', 'm', GeomFromText('POINT(73 149)')), + ('d', 'y', 'a', GeomFromText('POINT(134 6)')), + ('z', 's', 'w', GeomFromText('POINT(216 225)')), + ('d', 'u', 'k', GeomFromText('POINT(132 70)')), + ('f', 'v', 't', GeomFromText('POINT(187 141)')), + ('r', 'r', 'a', GeomFromText('POINT(152 39)')), + ('y', 'p', 'o', GeomFromText('POINT(45 27)')), + ('p', 'n', 'm', GeomFromText('POINT(228 148)')), + ('e', 'g', 'e', GeomFromText('POINT(88 81)')), + ('m', 'a', 'h', GeomFromText('POINT(35 29)')), + ('m', 'h', 'f', GeomFromText('POINT(30 71)')), + ('h', 'k', 'i', GeomFromText('POINT(244 78)')), + ('z', 'v', 'd', GeomFromText('POINT(241 38)')), + ('q', 'l', 'j', GeomFromText('POINT(13 71)')), + ('s', 'p', 'g', GeomFromText('POINT(108 38)')), + ('q', 's', 'j', GeomFromText('POINT(92 101)')), + ('l', 'h', 'g', GeomFromText('POINT(120 78)')), + ('w', 't', 'b', GeomFromText('POINT(193 109)')), + ('b', 's', 's', GeomFromText('POINT(223 211)')), + ('w', 'w', 'y', GeomFromText('POINT(122 42)')), + ('q', 'c', 'c', GeomFromText('POINT(104 102)')), + ('w', 'g', 'n', GeomFromText('POINT(213 120)')), + ('p', 'q', 'a', GeomFromText('POINT(247 148)')), + ('c', 'z', 'e', GeomFromText('POINT(18 106)')), + ('z', 'u', 'n', GeomFromText('POINT(70 133)')), + ('j', 'n', 'x', GeomFromText('POINT(232 13)')), + ('e', 'h', 'f', GeomFromText('POINT(22 135)')), + ('w', 'l', 'f', GeomFromText('POINT(9 180)')), + ('a', 'v', 'q', GeomFromText('POINT(163 228)')), + ('i', 'z', 'o', GeomFromText('POINT(180 100)')), + ('e', 'c', 'l', GeomFromText('POINT(182 231)')), + ('c', 'k', 'o', GeomFromText('POINT(19 60)')), + ('q', 'f', 'p', GeomFromText('POINT(79 95)')), + ('m', 'd', 'r', GeomFromText('POINT(3 127)')), + ('m', 'e', 't', GeomFromText('POINT(136 154)')), + ('w', 'w', 'w', GeomFromText('POINT(102 15)')), + ('l', 'n', 'q', GeomFromText('POINT(71 196)')), + ('p', 'k', 'c', GeomFromText('POINT(47 139)')), + ('j', 'o', 'r', GeomFromText('POINT(177 128)')), + ('j', 'q', 'a', GeomFromText('POINT(170 6)')), + ('b', 'a', 'o', GeomFromText('POINT(63 211)')), + ('g', 's', 'o', GeomFromText('POINT(144 251)')), + ('w', 'u', 'w', GeomFromText('POINT(221 214)')), + ('g', 'a', 'm', GeomFromText('POINT(14 102)')), + ('u', 'q', 'z', GeomFromText('POINT(86 200)')), + ('k', 'a', 'm', GeomFromText('POINT(144 222)')), + ('j', 'u', 'r', GeomFromText('POINT(216 142)')), + ('q', 'k', 'v', GeomFromText('POINT(121 236)')), + ('p', 'o', 'r', GeomFromText('POINT(108 102)')), + ('b', 'd', 'x', GeomFromText('POINT(127 198)')), + ('k', 's', 'a', GeomFromText('POINT(2 150)')), + ('f', 'm', 'f', GeomFromText('POINT(160 191)')), + ('q', 'y', 'x', GeomFromText('POINT(98 111)')), + ('o', 'f', 'm', GeomFromText('POINT(232 218)')), + ('c', 'w', 'j', GeomFromText('POINT(156 165)')), + ('s', 'q', 'v', GeomFromText('POINT(98 161)')); +SET @@RAND_SEED1=692635050, @@RAND_SEED2=297339954; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=159925977, @@RAND_SEED2=942570618; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=328169745, @@RAND_SEED2=410451954; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=178507359, @@RAND_SEED2=332493072; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=1034033013, @@RAND_SEED2=558966507; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +UPDATE t1 set spatial_point=GeomFromText('POINT(230 9)') where c1 like 'y%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(95 35)') where c1 like 'j%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(93 99)') where c1 like 'a%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(19 81)') where c1 like 'r%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(20 177)') where c1 like 'h%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(221 193)') where c1 like 'u%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(195 205)') where c1 like 'd%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(15 213)') where c1 like 'u%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(214 63)') where c1 like 'n%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(243 171)') where c1 like 'c%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(198 82)') where c1 like 'y%'; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES + ('f', 'y', 'p', GeomFromText('POINT(109 235)')), + ('b', 'e', 'v', GeomFromText('POINT(20 48)')), + ('i', 'u', 'f', GeomFromText('POINT(15 55)')), + ('o', 'r', 'z', GeomFromText('POINT(105 64)')), + ('a', 'p', 'a', GeomFromText('POINT(142 236)')), + ('g', 'i', 'k', GeomFromText('POINT(10 49)')), + ('x', 'z', 'x', GeomFromText('POINT(192 200)')), + ('c', 'v', 'r', GeomFromText('POINT(94 168)')), + ('y', 'z', 'e', GeomFromText('POINT(141 51)')), + ('h', 'm', 'd', GeomFromText('POINT(35 251)')), + ('v', 'm', 'q', GeomFromText('POINT(44 90)')), + ('j', 'l', 'z', GeomFromText('POINT(67 237)')), + ('i', 'v', 'a', GeomFromText('POINT(75 14)')), + ('b', 'q', 't', GeomFromText('POINT(153 33)')), + ('e', 'm', 'a', GeomFromText('POINT(247 49)')), + ('l', 'y', 'g', GeomFromText('POINT(56 203)')), + ('v', 'o', 'r', GeomFromText('POINT(90 54)')), + ('r', 'n', 'd', GeomFromText('POINT(135 83)')), + ('j', 't', 'u', GeomFromText('POINT(174 239)')), + ('u', 'n', 'g', GeomFromText('POINT(104 191)')), + ('p', 'q', 'y', GeomFromText('POINT(63 171)')), + ('o', 'q', 'p', GeomFromText('POINT(192 103)')), + ('f', 'x', 'e', GeomFromText('POINT(244 30)')), + ('n', 'x', 'c', GeomFromText('POINT(92 103)')), + ('r', 'q', 'z', GeomFromText('POINT(166 20)')), + ('s', 'a', 'j', GeomFromText('POINT(137 205)')), + ('z', 't', 't', GeomFromText('POINT(99 134)')), + ('o', 'm', 'j', GeomFromText('POINT(217 3)')), + ('n', 'h', 'j', GeomFromText('POINT(211 17)')), + ('v', 'v', 'a', GeomFromText('POINT(41 137)')), + ('q', 'o', 'j', GeomFromText('POINT(5 92)')), + ('z', 'y', 'e', GeomFromText('POINT(175 212)')), + ('j', 'z', 'h', GeomFromText('POINT(224 194)')), + ('a', 'g', 'm', GeomFromText('POINT(31 119)')), + ('p', 'c', 'f', GeomFromText('POINT(17 221)')), + ('t', 'h', 'k', GeomFromText('POINT(26 203)')), + ('u', 'w', 'p', GeomFromText('POINT(47 185)')), + ('z', 'a', 'c', GeomFromText('POINT(61 133)')), + ('u', 'k', 'a', GeomFromText('POINT(210 115)')), + ('k', 'f', 'h', GeomFromText('POINT(125 113)')), + ('t', 'v', 'y', GeomFromText('POINT(12 239)')), + ('u', 'v', 'd', GeomFromText('POINT(90 24)')), + ('m', 'y', 'w', GeomFromText('POINT(25 243)')), + ('d', 'n', 'g', GeomFromText('POINT(122 92)')), + ('z', 'm', 'f', GeomFromText('POINT(235 110)')), + ('q', 'd', 'f', GeomFromText('POINT(233 217)')), + ('a', 'v', 'u', GeomFromText('POINT(69 59)')), + ('x', 'k', 'p', GeomFromText('POINT(240 14)')), + ('i', 'v', 'r', GeomFromText('POINT(154 42)')), + ('w', 'h', 'l', GeomFromText('POINT(178 156)')), + ('d', 'h', 'n', GeomFromText('POINT(65 157)')), + ('c', 'k', 'z', GeomFromText('POINT(62 33)')), + ('e', 'l', 'w', GeomFromText('POINT(162 1)')), + ('r', 'f', 'i', GeomFromText('POINT(127 71)')), + ('q', 'm', 'c', GeomFromText('POINT(63 118)')), + ('c', 'h', 'u', GeomFromText('POINT(205 203)')), + ('d', 't', 'p', GeomFromText('POINT(234 87)')), + ('s', 'g', 'h', GeomFromText('POINT(149 34)')), + ('o', 'b', 'q', GeomFromText('POINT(159 179)')), + ('k', 'u', 'f', GeomFromText('POINT(202 254)')), + ('u', 'f', 'g', GeomFromText('POINT(70 15)')), + ('x', 's', 'b', GeomFromText('POINT(25 181)')), + ('s', 'c', 'g', GeomFromText('POINT(252 17)')), + ('a', 'c', 'f', GeomFromText('POINT(89 67)')), + ('r', 'e', 'q', GeomFromText('POINT(55 54)')), + ('f', 'i', 'k', GeomFromText('POINT(178 230)')), + ('p', 'e', 'l', GeomFromText('POINT(198 28)')), + ('w', 'o', 'd', GeomFromText('POINT(204 189)')), + ('c', 'a', 'g', GeomFromText('POINT(230 178)')), + ('r', 'o', 'e', GeomFromText('POINT(61 116)')), + ('w', 'a', 'a', GeomFromText('POINT(178 237)')), + ('v', 'd', 'e', GeomFromText('POINT(70 85)')), + ('k', 'c', 'e', GeomFromText('POINT(147 118)')), + ('d', 'q', 't', GeomFromText('POINT(218 77)')), + ('k', 'g', 'f', GeomFromText('POINT(192 113)')), + ('w', 'n', 'e', GeomFromText('POINT(92 124)')), + ('r', 'm', 'q', GeomFromText('POINT(130 65)')), + ('o', 'r', 'r', GeomFromText('POINT(174 233)')), + ('k', 'n', 't', GeomFromText('POINT(175 147)')), + ('q', 'm', 'r', GeomFromText('POINT(18 208)')), + ('l', 'd', 'i', GeomFromText('POINT(13 104)')), + ('w', 'o', 'y', GeomFromText('POINT(207 39)')), + ('p', 'u', 'o', GeomFromText('POINT(114 31)')), + ('y', 'a', 'p', GeomFromText('POINT(106 59)')), + ('a', 'x', 'z', GeomFromText('POINT(17 57)')), + ('v', 'h', 'x', GeomFromText('POINT(170 13)')), + ('t', 's', 'u', GeomFromText('POINT(84 18)')), + ('z', 'z', 'f', GeomFromText('POINT(250 197)')), + ('l', 'z', 't', GeomFromText('POINT(59 80)')), + ('j', 'g', 's', GeomFromText('POINT(54 26)')), + ('g', 'v', 'm', GeomFromText('POINT(89 98)')), + ('q', 'v', 'b', GeomFromText('POINT(39 240)')), + ('x', 'k', 'v', GeomFromText('POINT(246 207)')), + ('k', 'u', 'i', GeomFromText('POINT(105 111)')), + ('w', 'z', 's', GeomFromText('POINT(235 8)')), + ('d', 'd', 'd', GeomFromText('POINT(105 4)')), + ('c', 'z', 'q', GeomFromText('POINT(13 140)')), + ('m', 'k', 'i', GeomFromText('POINT(208 120)')), + ('g', 'a', 'g', GeomFromText('POINT(9 182)')), + ('z', 'j', 'r', GeomFromText('POINT(149 153)')), + ('h', 'f', 'g', GeomFromText('POINT(81 236)')), + ('m', 'e', 'q', GeomFromText('POINT(209 215)')), + ('c', 'h', 'y', GeomFromText('POINT(235 70)')), + ('i', 'e', 'g', GeomFromText('POINT(138 26)')), + ('m', 't', 'u', GeomFromText('POINT(119 237)')), + ('o', 'w', 's', GeomFromText('POINT(193 166)')), + ('f', 'm', 'q', GeomFromText('POINT(85 96)')), + ('x', 'l', 'x', GeomFromText('POINT(58 115)')), + ('x', 'q', 'u', GeomFromText('POINT(108 210)')), + ('b', 'h', 'i', GeomFromText('POINT(250 139)')), + ('y', 'd', 'x', GeomFromText('POINT(199 135)')), + ('w', 'h', 'p', GeomFromText('POINT(247 233)')), + ('p', 'z', 't', GeomFromText('POINT(148 249)')), + ('q', 'a', 'u', GeomFromText('POINT(174 78)')), + ('v', 't', 'm', GeomFromText('POINT(70 228)')), + ('t', 'n', 'f', GeomFromText('POINT(123 2)')), + ('x', 't', 'b', GeomFromText('POINT(35 50)')), + ('r', 'j', 'f', GeomFromText('POINT(200 51)')), + ('s', 'q', 'o', GeomFromText('POINT(23 184)')), + ('u', 'v', 'z', GeomFromText('POINT(7 113)')), + ('v', 'u', 'l', GeomFromText('POINT(145 190)')), + ('o', 'k', 'i', GeomFromText('POINT(161 122)')), + ('l', 'y', 'e', GeomFromText('POINT(17 232)')), + ('t', 'b', 'e', GeomFromText('POINT(120 50)')), + ('e', 's', 'u', GeomFromText('POINT(254 1)')), + ('d', 'd', 'u', GeomFromText('POINT(167 140)')), + ('o', 'b', 'x', GeomFromText('POINT(186 237)')), + ('m', 's', 's', GeomFromText('POINT(172 149)')), + ('t', 'y', 'a', GeomFromText('POINT(149 85)')), + ('x', 't', 'r', GeomFromText('POINT(10 165)')), + ('g', 'c', 'e', GeomFromText('POINT(95 165)')), + ('e', 'e', 'z', GeomFromText('POINT(98 65)')), + ('f', 'v', 'i', GeomFromText('POINT(149 144)')), + ('o', 'p', 'm', GeomFromText('POINT(233 67)')), + ('t', 'u', 'b', GeomFromText('POINT(109 215)')), + ('o', 'o', 'b', GeomFromText('POINT(130 48)')), + ('e', 'm', 'h', GeomFromText('POINT(88 189)')), + ('e', 'v', 'y', GeomFromText('POINT(55 29)')), + ('e', 't', 'm', GeomFromText('POINT(129 55)')), + ('p', 'p', 'i', GeomFromText('POINT(126 222)')), + ('c', 'i', 'c', GeomFromText('POINT(19 158)')), + ('c', 'b', 's', GeomFromText('POINT(13 19)')), + ('u', 'y', 'a', GeomFromText('POINT(114 5)')), + ('a', 'o', 'f', GeomFromText('POINT(227 232)')), + ('t', 'c', 'z', GeomFromText('POINT(63 62)')), + ('d', 'o', 'k', GeomFromText('POINT(48 228)')), + ('x', 'c', 'e', GeomFromText('POINT(204 2)')), + ('e', 'e', 'g', GeomFromText('POINT(125 43)')), + ('o', 'r', 'f', GeomFromText('POINT(171 140)')); +UPDATE t1 set spatial_point=GeomFromText('POINT(163 157)') where c1 like 'w%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(53 151)') where c1 like 'd%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(96 183)') where c1 like 'r%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(57 91)') where c1 like 'q%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(202 110)') where c1 like 'c%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(120 137)') where c1 like 'w%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(207 147)') where c1 like 'c%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(31 125)') where c1 like 'e%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(27 36)') where c1 like 'r%'; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES + ('b', 'c', 'e', GeomFromText('POINT(41 137)')), + ('p', 'y', 'k', GeomFromText('POINT(50 22)')), + ('s', 'c', 'h', GeomFromText('POINT(208 173)')), + ('x', 'u', 'l', GeomFromText('POINT(199 175)')), + ('s', 'r', 'h', GeomFromText('POINT(85 192)')), + ('j', 'k', 'u', GeomFromText('POINT(18 25)')), + ('p', 'w', 'h', GeomFromText('POINT(152 197)')), + ('e', 'd', 'c', GeomFromText('POINT(229 3)')), + ('o', 'x', 'k', GeomFromText('POINT(187 155)')), + ('o', 'b', 'k', GeomFromText('POINT(208 150)')), + ('d', 'a', 'j', GeomFromText('POINT(70 87)')), + ('f', 'e', 'k', GeomFromText('POINT(156 96)')), + ('u', 'y', 'p', GeomFromText('POINT(239 193)')), + ('n', 'v', 'p', GeomFromText('POINT(223 98)')), + ('z', 'j', 'r', GeomFromText('POINT(87 89)')), + ('h', 'x', 'x', GeomFromText('POINT(92 0)')), + ('r', 'v', 'r', GeomFromText('POINT(159 139)')), + ('v', 'g', 'g', GeomFromText('POINT(16 229)')), + ('z', 'k', 'u', GeomFromText('POINT(99 52)')), + ('p', 'p', 'o', GeomFromText('POINT(105 125)')), + ('w', 'h', 'y', GeomFromText('POINT(105 154)')), + ('v', 'y', 'z', GeomFromText('POINT(134 238)')), + ('x', 'o', 'o', GeomFromText('POINT(178 88)')), + ('z', 'w', 'd', GeomFromText('POINT(123 60)')), + ('q', 'f', 'u', GeomFromText('POINT(64 90)')), + ('s', 'n', 't', GeomFromText('POINT(50 138)')), + ('v', 'p', 't', GeomFromText('POINT(114 91)')), + ('a', 'o', 'n', GeomFromText('POINT(78 43)')), + ('k', 'u', 'd', GeomFromText('POINT(185 161)')), + ('w', 'd', 'n', GeomFromText('POINT(25 92)')), + ('k', 'w', 'a', GeomFromText('POINT(59 238)')), + ('t', 'c', 'f', GeomFromText('POINT(65 87)')), + ('g', 's', 'p', GeomFromText('POINT(238 126)')), + ('d', 'n', 'y', GeomFromText('POINT(107 173)')), + ('l', 'a', 'w', GeomFromText('POINT(125 152)')), + ('m', 'd', 'j', GeomFromText('POINT(146 53)')), + ('q', 'm', 'c', GeomFromText('POINT(217 187)')), + ('i', 'r', 'r', GeomFromText('POINT(6 113)')), + ('e', 'j', 'b', GeomFromText('POINT(37 83)')), + ('w', 'w', 'h', GeomFromText('POINT(83 199)')), + ('k', 'b', 's', GeomFromText('POINT(170 64)')), + ('s', 'b', 'c', GeomFromText('POINT(163 130)')), + ('c', 'h', 'a', GeomFromText('POINT(141 3)')), + ('k', 'j', 'u', GeomFromText('POINT(143 76)')), + ('r', 'h', 'o', GeomFromText('POINT(243 92)')), + ('i', 'd', 'b', GeomFromText('POINT(205 13)')), + ('r', 'y', 'q', GeomFromText('POINT(138 8)')), + ('m', 'o', 'i', GeomFromText('POINT(36 45)')), + ('v', 'g', 'm', GeomFromText('POINT(0 40)')), + ('f', 'e', 'i', GeomFromText('POINT(76 6)')), + ('c', 'q', 'q', GeomFromText('POINT(115 248)')), + ('x', 'c', 'i', GeomFromText('POINT(29 74)')), + ('l', 's', 't', GeomFromText('POINT(83 18)')), + ('t', 't', 'a', GeomFromText('POINT(26 168)')), + ('u', 'n', 'x', GeomFromText('POINT(200 110)')), + ('j', 'b', 'd', GeomFromText('POINT(216 136)')), + ('s', 'p', 'w', GeomFromText('POINT(38 156)')), + ('f', 'b', 'v', GeomFromText('POINT(29 186)')), + ('v', 'e', 'r', GeomFromText('POINT(149 40)')), + ('v', 't', 'm', GeomFromText('POINT(184 24)')), + ('y', 'g', 'a', GeomFromText('POINT(219 105)')), + ('s', 'f', 'i', GeomFromText('POINT(114 130)')), + ('e', 'q', 'h', GeomFromText('POINT(203 135)')), + ('h', 'g', 'b', GeomFromText('POINT(9 208)')), + ('o', 'l', 'r', GeomFromText('POINT(245 79)')), + ('s', 's', 'v', GeomFromText('POINT(238 198)')), + ('w', 'w', 'z', GeomFromText('POINT(209 232)')), + ('v', 'd', 'n', GeomFromText('POINT(30 193)')), + ('q', 'w', 'k', GeomFromText('POINT(133 18)')), + ('o', 'h', 'o', GeomFromText('POINT(42 140)')), + ('f', 'f', 'h', GeomFromText('POINT(145 1)')), + ('u', 's', 'r', GeomFromText('POINT(70 62)')), + ('x', 'n', 'q', GeomFromText('POINT(33 86)')), + ('u', 'p', 'v', GeomFromText('POINT(232 220)')), + ('z', 'e', 'a', GeomFromText('POINT(130 69)')), + ('r', 'u', 'z', GeomFromText('POINT(243 241)')), + ('b', 'n', 't', GeomFromText('POINT(120 12)')), + ('u', 'f', 's', GeomFromText('POINT(190 212)')), + ('a', 'd', 'q', GeomFromText('POINT(235 191)')), + ('f', 'q', 'm', GeomFromText('POINT(176 2)')), + ('n', 'c', 's', GeomFromText('POINT(218 163)')), + ('e', 'm', 'h', GeomFromText('POINT(163 108)')), + ('c', 'f', 'l', GeomFromText('POINT(220 115)')), + ('c', 'v', 'q', GeomFromText('POINT(66 45)')), + ('w', 'v', 'x', GeomFromText('POINT(251 220)')), + ('f', 'w', 'z', GeomFromText('POINT(146 149)')), + ('h', 'n', 'h', GeomFromText('POINT(148 128)')), + ('y', 'k', 'v', GeomFromText('POINT(28 110)')), + ('c', 'x', 'q', GeomFromText('POINT(13 13)')), + ('e', 'd', 's', GeomFromText('POINT(91 190)')), + ('c', 'w', 'c', GeomFromText('POINT(10 231)')), + ('u', 'j', 'n', GeomFromText('POINT(250 21)')), + ('w', 'n', 'x', GeomFromText('POINT(141 69)')), + ('f', 'p', 'y', GeomFromText('POINT(228 246)')), + ('d', 'q', 'f', GeomFromText('POINT(194 22)')), + ('d', 'z', 'l', GeomFromText('POINT(233 181)')), + ('c', 'a', 'q', GeomFromText('POINT(183 96)')), + ('m', 'i', 'd', GeomFromText('POINT(117 226)')), + ('z', 'y', 'y', GeomFromText('POINT(62 81)')), + ('g', 'v', 'm', GeomFromText('POINT(66 158)')); +SET @@RAND_SEED1=481064922, @@RAND_SEED2=438133497; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=280535103, @@RAND_SEED2=444518646; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=1072017234, @@RAND_SEED2=484203885; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=358851897, @@RAND_SEED2=358495224; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +SET @@RAND_SEED1=509031459, @@RAND_SEED2=675962925; +DELETE FROM t1 ORDER BY RAND() LIMIT 10; +UPDATE t1 set spatial_point=GeomFromText('POINT(61 203)') where c1 like 'y%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(202 194)') where c1 like 'f%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(228 18)') where c1 like 'h%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(88 18)') where c1 like 'l%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(176 94)') where c1 like 'e%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(44 47)') where c1 like 'g%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(95 191)') where c1 like 'b%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(179 218)') where c1 like 'y%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(239 40)') where c1 like 'g%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(248 41)') where c1 like 'q%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(167 82)') where c1 like 't%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(13 104)') where c1 like 'u%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(139 84)') where c1 like 'a%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(145 108)') where c1 like 'p%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(147 57)') where c1 like 't%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(217 144)') where c1 like 'n%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(160 224)') where c1 like 'w%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(38 28)') where c1 like 'j%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(104 114)') where c1 like 'q%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(88 19)') where c1 like 'c%'; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES + ('f', 'x', 'p', GeomFromText('POINT(92 181)')), + ('s', 'i', 'c', GeomFromText('POINT(49 60)')), + ('c', 'c', 'i', GeomFromText('POINT(7 57)')), + ('n', 'g', 'k', GeomFromText('POINT(252 105)')), + ('g', 'b', 'm', GeomFromText('POINT(180 11)')), + ('u', 'l', 'r', GeomFromText('POINT(32 90)')), + ('c', 'x', 'e', GeomFromText('POINT(143 24)')), + ('x', 'u', 'a', GeomFromText('POINT(123 92)')), + ('s', 'b', 'h', GeomFromText('POINT(190 108)')), + ('c', 'x', 'b', GeomFromText('POINT(104 100)')), + ('i', 'd', 't', GeomFromText('POINT(214 104)')), + ('r', 'w', 'g', GeomFromText('POINT(29 67)')), + ('b', 'f', 'g', GeomFromText('POINT(149 46)')), + ('r', 'r', 'd', GeomFromText('POINT(242 196)')), + ('j', 'l', 'a', GeomFromText('POINT(90 196)')), + ('e', 't', 'b', GeomFromText('POINT(190 64)')), + ('l', 'x', 'w', GeomFromText('POINT(250 73)')), + ('q', 'y', 'r', GeomFromText('POINT(120 182)')), + ('s', 'j', 'a', GeomFromText('POINT(180 175)')), + ('n', 'i', 'y', GeomFromText('POINT(124 136)')), + ('s', 'x', 's', GeomFromText('POINT(176 209)')), + ('u', 'f', 's', GeomFromText('POINT(215 173)')), + ('m', 'j', 'x', GeomFromText('POINT(44 140)')), + ('v', 'g', 'x', GeomFromText('POINT(177 233)')), + ('u', 't', 'b', GeomFromText('POINT(136 197)')), + ('f', 'g', 'b', GeomFromText('POINT(10 8)')), + ('v', 'c', 'j', GeomFromText('POINT(13 81)')), + ('d', 's', 'q', GeomFromText('POINT(200 100)')), + ('a', 'p', 'j', GeomFromText('POINT(33 40)')), + ('i', 'c', 'g', GeomFromText('POINT(168 204)')), + ('k', 'h', 'i', GeomFromText('POINT(93 243)')), + ('s', 'b', 's', GeomFromText('POINT(157 13)')), + ('v', 'l', 'l', GeomFromText('POINT(103 6)')), + ('r', 'b', 'k', GeomFromText('POINT(244 137)')), + ('l', 'd', 'r', GeomFromText('POINT(162 254)')), + ('q', 'b', 'z', GeomFromText('POINT(136 246)')), + ('x', 'x', 'p', GeomFromText('POINT(120 37)')), + ('m', 'e', 'z', GeomFromText('POINT(203 167)')), + ('q', 'n', 'p', GeomFromText('POINT(94 119)')), + ('b', 'g', 'u', GeomFromText('POINT(93 248)')), + ('r', 'v', 'v', GeomFromText('POINT(53 88)')), + ('y', 'a', 'i', GeomFromText('POINT(98 219)')), + ('a', 's', 'g', GeomFromText('POINT(173 138)')), + ('c', 'a', 't', GeomFromText('POINT(235 135)')), + ('q', 'm', 'd', GeomFromText('POINT(224 208)')), + ('e', 'p', 'k', GeomFromText('POINT(161 238)')), + ('n', 'g', 'q', GeomFromText('POINT(35 204)')), + ('t', 't', 'x', GeomFromText('POINT(230 178)')), + ('w', 'f', 'a', GeomFromText('POINT(150 221)')), + ('z', 'm', 'z', GeomFromText('POINT(119 42)')), + ('l', 'j', 's', GeomFromText('POINT(97 96)')), + ('f', 'z', 'x', GeomFromText('POINT(208 65)')), + ('i', 'v', 'c', GeomFromText('POINT(145 79)')), + ('l', 'f', 'k', GeomFromText('POINT(83 234)')), + ('u', 'a', 's', GeomFromText('POINT(250 49)')), + ('o', 'k', 'p', GeomFromText('POINT(46 50)')), + ('d', 'e', 'z', GeomFromText('POINT(30 198)')), + ('r', 'r', 'l', GeomFromText('POINT(78 189)')), + ('y', 'l', 'f', GeomFromText('POINT(188 132)')), + ('d', 'q', 'm', GeomFromText('POINT(247 107)')), + ('p', 'j', 'n', GeomFromText('POINT(148 227)')), + ('b', 'o', 'i', GeomFromText('POINT(172 25)')), + ('e', 'v', 'd', GeomFromText('POINT(94 248)')), + ('q', 'd', 'f', GeomFromText('POINT(15 29)')), + ('w', 'b', 'b', GeomFromText('POINT(74 111)')), + ('g', 'q', 'f', GeomFromText('POINT(107 215)')), + ('o', 'h', 'r', GeomFromText('POINT(25 168)')), + ('u', 't', 'w', GeomFromText('POINT(251 188)')), + ('h', 's', 'w', GeomFromText('POINT(254 247)')), + ('f', 'f', 'b', GeomFromText('POINT(166 103)')); +SET @@RAND_SEED1=866613816, @@RAND_SEED2=92289615; +INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES + ('l', 'c', 'l', GeomFromText('POINT(202 98)')), + ('k', 'c', 'b', GeomFromText('POINT(46 206)')), + ('r', 'y', 'm', GeomFromText('POINT(74 140)')), + ('y', 'z', 'd', GeomFromText('POINT(200 160)')), + ('s', 'y', 's', GeomFromText('POINT(156 205)')), + ('u', 'v', 'p', GeomFromText('POINT(86 82)')), + ('j', 's', 's', GeomFromText('POINT(91 233)')), + ('x', 'j', 'f', GeomFromText('POINT(3 14)')), + ('l', 'z', 'v', GeomFromText('POINT(123 156)')), + ('h', 'i', 'o', GeomFromText('POINT(145 229)')), + ('o', 'r', 'd', GeomFromText('POINT(15 22)')), + ('f', 'x', 't', GeomFromText('POINT(21 60)')), + ('t', 'g', 'h', GeomFromText('POINT(50 153)')), + ('g', 'u', 'b', GeomFromText('POINT(82 85)')), + ('v', 'a', 'p', GeomFromText('POINT(231 178)')), + ('n', 'v', 'o', GeomFromText('POINT(183 25)')), + ('j', 'n', 'm', GeomFromText('POINT(50 144)')), + ('e', 'f', 'i', GeomFromText('POINT(46 16)')), + ('d', 'w', 'a', GeomFromText('POINT(66 6)')), + ('f', 'x', 'a', GeomFromText('POINT(107 197)')), + ('m', 'o', 'a', GeomFromText('POINT(142 80)')), + ('q', 'l', 'g', GeomFromText('POINT(251 23)')), + ('c', 's', 's', GeomFromText('POINT(158 43)')), + ('y', 'd', 'o', GeomFromText('POINT(196 228)')), + ('d', 'p', 'l', GeomFromText('POINT(107 5)')), + ('h', 'a', 'b', GeomFromText('POINT(183 166)')), + ('m', 'w', 'p', GeomFromText('POINT(19 59)')), + ('b', 'y', 'o', GeomFromText('POINT(178 30)')), + ('x', 'w', 'i', GeomFromText('POINT(168 94)')), + ('t', 'k', 'z', GeomFromText('POINT(171 5)')), + ('r', 'm', 'a', GeomFromText('POINT(222 19)')), + ('u', 'v', 'e', GeomFromText('POINT(224 80)')), + ('q', 'r', 'k', GeomFromText('POINT(212 218)')), + ('d', 'p', 'j', GeomFromText('POINT(169 7)')), + ('d', 'r', 'v', GeomFromText('POINT(193 23)')), + ('n', 'y', 'y', GeomFromText('POINT(130 178)')), + ('m', 'z', 'r', GeomFromText('POINT(81 200)')), + ('j', 'e', 'w', GeomFromText('POINT(145 239)')), + ('v', 'h', 'x', GeomFromText('POINT(24 105)')), + ('z', 'm', 'a', GeomFromText('POINT(175 129)')), + ('b', 'c', 'v', GeomFromText('POINT(213 10)')), + ('t', 't', 'u', GeomFromText('POINT(2 129)')), + ('r', 's', 'v', GeomFromText('POINT(209 192)')), + ('x', 'p', 'g', GeomFromText('POINT(43 63)')), + ('t', 'e', 'u', GeomFromText('POINT(139 210)')), + ('l', 'e', 't', GeomFromText('POINT(245 148)')), + ('a', 'i', 'k', GeomFromText('POINT(167 195)')), + ('m', 'o', 'h', GeomFromText('POINT(206 120)')), + ('g', 'z', 's', GeomFromText('POINT(169 240)')), + ('z', 'u', 's', GeomFromText('POINT(202 120)')), + ('i', 'b', 'a', GeomFromText('POINT(216 18)')), + ('w', 'y', 'g', GeomFromText('POINT(119 236)')), + ('h', 'y', 'p', GeomFromText('POINT(161 24)')); +UPDATE t1 set spatial_point=GeomFromText('POINT(33 100)') where c1 like 't%'; +UPDATE t1 set spatial_point=GeomFromText('POINT(41 46)') where c1 like 'f%'; +CHECK TABLE t1 EXTENDED; +DROP TABLE t1; + # End of 4.1 tests diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index 1ae4f0ae62f..7182e040d46 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -377,4 +377,46 @@ load data infile '../../std_data/bad_gis_data.dat' into table t1; alter table t1 enable keys; drop table t1; -# End of 4.1 tests +# +# Bug #26038: is null and bad data +# + +create table t1 (a int, b blob); +insert into t1 values (1, ''), (2, NULL), (3, '1'); +select * from t1; + +select + geometryfromtext(b) IS NULL, geometryfromwkb(b) IS NULL, astext(b) IS NULL, + aswkb(b) IS NULL, geometrytype(b) IS NULL, centroid(b) IS NULL, + envelope(b) IS NULL, startpoint(b) IS NULL, endpoint(b) IS NULL, + exteriorring(b) IS NULL, pointn(b, 1) IS NULL, geometryn(b, 1) IS NULL, + interiorringn(b, 1) IS NULL, multipoint(b) IS NULL, isempty(b) IS NULL, + issimple(b) IS NULL, isclosed(b) IS NULL, dimension(b) IS NULL, + numgeometries(b) IS NULL, numinteriorrings(b) IS NULL, numpoints(b) IS NULL, + area(b) IS NULL, glength(b) IS NULL, srid(b) IS NULL, x(b) IS NULL, + y(b) IS NULL +from t1; + +select + within(b, b) IS NULL, contains(b, b) IS NULL, overlaps(b, b) IS NULL, + equals(b, b) IS NULL, disjoint(b, b) IS NULL, touches(b, b) IS NULL, + intersects(b, b) IS NULL, crosses(b, b) IS NULL +from t1; + +select + point(b, b) IS NULL, linestring(b) IS NULL, polygon(b) IS NULL, multipoint(b) IS NULL, + multilinestring(b) IS NULL, multipolygon(b) IS NULL, + geometrycollection(b) IS NULL +from t1; + +drop table t1; + +# +# Bug #27164: Crash when mixing InnoDB and MyISAM Geospatial tables +# +CREATE TABLE t1(a POINT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1; +DROP TABLE t1; + +--echo End of 4.1 tests diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test index 3365145650a..ea148c67262 100644 --- a/mysql-test/t/grant.test +++ b/mysql-test/t/grant.test @@ -451,4 +451,25 @@ delete from mysql.tables_priv where user='mysqltest1'; flush privileges; drop database mysqltest; -# End of 4.1 tests +# +# Bug #27515: DROP previlege is not required for RENAME TABLE +# +connection master; +create database db27515; +use db27515; +create table t1 (a int); +grant alter on db27515.t1 to user27515@localhost; +grant insert, create on db27515.t2 to user27515@localhost; + +connect (conn27515, localhost, user27515, , db27515); +connection conn27515; +--error 1142 +rename table t1 to t2; +disconnect conn27515; + +connection master; +revoke all privileges, grant option from user27515@localhost; +drop user user27515@localhost; +drop database db27515; + +--echo End of 4.1 tests diff --git a/mysql-test/t/grant_cache.test b/mysql-test/t/grant_cache.test index 703ad5d8004..7e17a03ec21 100644 --- a/mysql-test/t/grant_cache.test +++ b/mysql-test/t/grant_cache.test @@ -14,7 +14,7 @@ set GLOBAL query_cache_size=1355776; reset query cache; flush status; -connect (root,localhost,root,,test,$MASTER_MYPORT,master.sock); +connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); connection root; show grants for current_user; show grants; @@ -29,7 +29,7 @@ insert into mysqltest.t2 values (3,3,3); create table test.t1 (a char (10)); insert into test.t1 values ("test.t1"); select * from t1; -connect (root2,localhost,root,,mysqltest,$MASTER_MYPORT,master.sock); +connect (root2,localhost,root,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK); connection root2; # put queries in cache select * from t1; @@ -47,7 +47,7 @@ grant SELECT on test.t1 to mysqltest_2@localhost; grant SELECT(a) on mysqltest.t1 to mysqltest_3@localhost; # The following queries should be fetched from cache -connect (user1,localhost,mysqltest_1,,mysqltest,$MASTER_MYPORT,master.sock); +connect (user1,localhost,mysqltest_1,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK); connection user1; show grants for current_user(); show status like "Qcache_queries_in_cache"; @@ -72,12 +72,12 @@ show status like "Qcache_hits"; show status like "Qcache_not_cached"; # Don't use '' as user because it will pick Unix login -connect (unkuser,localhost,unkuser,,,$MASTER_MYPORT,master.sock); +connect (unkuser,localhost,unkuser,,,$MASTER_MYPORT,$MASTER_MYSOCK); connection unkuser; show grants for current_user(); # The following queries should be fetched from cache -connect (user2,localhost,mysqltest_2,,mysqltest,$MASTER_MYPORT,master.sock); +connect (user2,localhost,mysqltest_2,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK); connection user2; select "user2"; select * from t1; @@ -92,7 +92,7 @@ show status like "Qcache_hits"; show status like "Qcache_not_cached"; # The following queries should not be fetched from cache -connect (user3,localhost,mysqltest_3,,mysqltest,$MASTER_MYPORT,master.sock); +connect (user3,localhost,mysqltest_3,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK); connection user3; select "user3"; --replace_result 127.0.0.1 localhost @@ -113,7 +113,7 @@ show status like "Qcache_hits"; show status like "Qcache_not_cached"; # Connect without a database -connect (user4,localhost,mysqltest_1,,*NO-ONE*,$MASTER_MYPORT,master.sock); +connect (user4,localhost,mysqltest_1,,*NO-ONE*,$MASTER_MYPORT,$MASTER_MYSOCK); connection user4; select "user4"; show grants; diff --git a/mysql-test/t/heap_btree.test b/mysql-test/t/heap_btree.test index 9aa820becd9..f8d6afbad04 100644 --- a/mysql-test/t/heap_btree.test +++ b/mysql-test/t/heap_btree.test @@ -182,4 +182,35 @@ delete from t1 where a >= 2; select a from t1 order by a; drop table t1; +# +# Bug#26996 - Update of a Field in a Memory Table ends with wrong result +# +CREATE TABLE t1 ( + c1 CHAR(3), + c2 INTEGER, + KEY USING BTREE(c1), + KEY USING BTREE(c2) +) ENGINE= MEMORY; +INSERT INTO t1 VALUES ('ABC',0), ('A',0), ('B',0), ('C',0); +UPDATE t1 SET c2= c2 + 1 WHERE c1 = 'A'; +SELECT * FROM t1; +DROP TABLE t1; + +# +# Bug#24985 - UTF8 ENUM primary key on MEMORY using BTREE +# causes incorrect duplicate entries +# +CREATE TABLE t1 ( + c1 ENUM('1', '2'), + UNIQUE USING BTREE(c1) +) ENGINE= MEMORY DEFAULT CHARSET= utf8; +INSERT INTO t1 VALUES('1'), ('2'); +DROP TABLE t1; +CREATE TABLE t1 ( + c1 SET('1', '2'), + UNIQUE USING BTREE(c1) +) ENGINE= MEMORY DEFAULT CHARSET= utf8; +INSERT INTO t1 VALUES('1'), ('2'); +DROP TABLE t1; + --echo End of 4.1 tests diff --git a/mysql-test/t/help.test b/mysql-test/t/help.test index ff431fb4ebd..de0cefab76c 100644 --- a/mysql-test/t/help.test +++ b/mysql-test/t/help.test @@ -13,30 +13,30 @@ # impossible_category_3 # impossible_function_7 -insert into mysql.help_category(help_category_id,name)values(1,'impossible_category_1'); -select @category1_id:= 1; -insert into mysql.help_category(help_category_id,name)values(2,'impossible_category_2'); -select @category2_id:= 2; -insert into mysql.help_category(help_category_id,name,parent_category_id)values(3,'impossible_category_3',@category2_id); -select @category3_id:= 3; - -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(1,'impossible_function_1',@category1_id,'description of \n impossible_function1\n','example of \n impossible_function1'); -select @topic1_id:= 1; -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(2,'impossible_function_2',@category1_id,'description of \n impossible_function2\n','example of \n impossible_function2'); -select @topic2_id:= 2; -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(3,'impossible_function_3',@category2_id,'description of \n impossible_function3\n','example of \n impossible_function3'); -select @topic3_id:= 3; -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(4,'impossible_function_4',@category2_id,'description of \n impossible_function4\n','example of \n impossible_function4'); -select @topic4_id:= 4; -insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(5,'impossible_function_7',@category3_id,'description of \n impossible_function5\n','example of \n impossible_function7'); -select @topic5_id:= 5; - -insert into mysql.help_keyword(help_keyword_id,name)values(1,'impossible_function_1'); -select @keyword1_id:= 1; -insert into mysql.help_keyword(help_keyword_id,name)values(2,'impossible_function_5'); -select @keyword2_id:= 2; -insert into mysql.help_keyword(help_keyword_id,name)values(3,'impossible_function_6'); -select @keyword3_id:= 3; +insert into mysql.help_category(help_category_id,name)values(10001,'impossible_category_1'); +select @category1_id:= 10001; +insert into mysql.help_category(help_category_id,name)values(10002,'impossible_category_2'); +select @category2_id:= 10002; +insert into mysql.help_category(help_category_id,name,parent_category_id)values(10003,'impossible_category_3',@category2_id); +select @category3_id:= 10003; + +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10101,'impossible_function_1',@category1_id,'description of \n impossible_function1\n','example of \n impossible_function1'); +select @topic1_id:= 10101; +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10102,'impossible_function_2',@category1_id,'description of \n impossible_function2\n','example of \n impossible_function2'); +select @topic2_id:= 10102; +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10103,'impossible_function_3',@category2_id,'description of \n impossible_function3\n','example of \n impossible_function3'); +select @topic3_id:= 10103; +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10104,'impossible_function_4',@category2_id,'description of \n impossible_function4\n','example of \n impossible_function4'); +select @topic4_id:= 10104; +insert into mysql.help_topic(help_topic_id,name,help_category_id,description,example)values(10105,'impossible_function_7',@category3_id,'description of \n impossible_function5\n','example of \n impossible_function7'); +select @topic5_id:= 10105; + +insert into mysql.help_keyword(help_keyword_id,name)values(10201,'impossible_function_1'); +select @keyword1_id:= 10201; +insert into mysql.help_keyword(help_keyword_id,name)values(10202,'impossible_function_5'); +select @keyword2_id:= 10202; +insert into mysql.help_keyword(help_keyword_id,name)values(10203,'impossible_function_6'); +select @keyword3_id:= 10203; insert into mysql.help_relation(help_keyword_id,help_topic_id)values(@keyword1_id,@topic2_id); insert into mysql.help_relation(help_keyword_id,help_topic_id)values(@keyword2_id,@topic1_id); diff --git a/mysql-test/t/init_file.test b/mysql-test/t/init_file.test index bbe0c4ff884..34d738415c8 100644 --- a/mysql-test/t/init_file.test +++ b/mysql-test/t/init_file.test @@ -6,5 +6,14 @@ # mysql-test/t/init_file-master.opt for the actual test # +# +# Bug#23240 --init-file statements with NOW() reports '1970-01-01 11:00:00'as the date time +# +INSERT INTO init_file.startup VALUES ( NOW() ); +SELECT * INTO @X FROM init_file.startup limit 0,1; +SELECT * INTO @Y FROM init_file.startup limit 1,1; +SELECT YEAR(@X)-YEAR(@Y); +DROP DATABASE init_file; + --echo ok --echo End of 4.1 tests diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test index 3e53cadf76c..7e594c358f2 100644 --- a/mysql-test/t/innodb.test +++ b/mysql-test/t/innodb.test @@ -1299,6 +1299,7 @@ drop table test_checksum; set foreign_key_checks=0; create table t2 (a int primary key, b int, foreign key (b) references t1(a)) engine = innodb; +--replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / -- error 1005 create table t1(a char(10) primary key, b varchar(20)) engine = innodb; set foreign_key_checks=1; @@ -1309,6 +1310,7 @@ drop table t2; set foreign_key_checks=0; create table t1(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=latin1; +--replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / -- error 1005 create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=utf8; set foreign_key_checks=1; @@ -1338,6 +1340,7 @@ drop table t2,t1; set foreign_key_checks=0; create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=latin1; create table t3(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=utf8; +--replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ / -- error 1025 rename table t3 to t1; set foreign_key_checks=1; diff --git a/mysql-test/t/innodb_mysql.test b/mysql-test/t/innodb_mysql.test index c5a5e997775..b5e7fc6e405 100644 --- a/mysql-test/t/innodb_mysql.test +++ b/mysql-test/t/innodb_mysql.test @@ -161,4 +161,59 @@ show /*!50002 GLOBAL */ status like 'Handler_rollback'; connection default; drop table t1; disconnect con1; + +# +# Bug #13191: INSERT...ON DUPLICATE KEY UPDATE of UTF-8 string fields +# used in partial unique indices. +# + +CREATE TABLE t1(c1 TEXT, UNIQUE (c1(1)), cnt INT DEFAULT 1) + ENGINE=INNODB CHARACTER SET UTF8; +INSERT INTO t1 (c1) VALUES ('1a'); +SELECT * FROM t1; +INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1(c1 VARCHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1) + ENGINE=INNODB CHARACTER SET UTF8; +INSERT INTO t1 (c1) VALUES ('1a'); +SELECT * FROM t1; +INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t1(c1 CHAR(2), UNIQUE (c1(1)), cnt INT DEFAULT 1) + ENGINE=INNODB CHARACTER SET UTF8; +INSERT INTO t1 (c1) VALUES ('1a'); +SELECT * FROM t1; +INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1; +SELECT * FROM t1; +DROP TABLE t1; + +# +# Bug #28272: EXPLAIN for SELECT from an empty InnoDB table +# + +CREATE TABLE t1 ( + a1 decimal(10,0) DEFAULT NULL, + a2 blob, + a3 time DEFAULT NULL, + a4 blob, + a5 char(175) DEFAULT NULL, + a6 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + a7 tinyblob, + INDEX idx (a6,a7(239),a5) +) ENGINE=InnoDB; + +EXPLAIN SELECT a4 FROM t1 WHERE +a6=NULL AND +a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS'; + +EXPLAIN SELECT t1.a4 FROM t1, t1 t WHERE +t.a6=t.a6 AND t1.a6=NULL AND +t1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS'; + +DROP TABLE t1; + --echo End of 4.1 tests diff --git a/mysql-test/t/join.test b/mysql-test/t/join.test index 2715f30b6cf..0fe5de8c9b7 100644 --- a/mysql-test/t/join.test +++ b/mysql-test/t/join.test @@ -326,4 +326,28 @@ select t1.i,t2.i,t3.i from t2 natural right join t3,t1 order by t1.i,t2.i,t3.i; select t1.i,t2.i,t3.i from t2 right join t3 on (t2.i=t3.i),t1 order by t1.i,t2.i,t3.i; drop table t1,t2,t3; +# +# Bug #27531: Query performance degredation in 4.1.22 and greater +# +CREATE TABLE t1 (a int, b int default 0, c int default 1); + +INSERT INTO t1 (a) VALUES (1),(2),(3),(4),(5),(6),(7),(8); +INSERT INTO t1 (a) SELECT a + 8 FROM t1; +INSERT INTO t1 (a) SELECT a + 16 FROM t1; + +CREATE TABLE t2 (a int, d int, e int default 0); + +INSERT INTO t2 (a, d) VALUES (1,1),(2,2),(3,3),(4,4); +INSERT INTO t2 (a, d) SELECT a+4, a+4 FROM t2; +INSERT INTO t2 (a, d) SELECT a+8, a+8 FROM t2; + +# should use join cache +EXPLAIN +SELECT STRAIGHT_JOIN t2.e FROM t1,t2 WHERE t2.d=1 AND t1.b=t2.e + ORDER BY t1.b, t1.c; +SELECT STRAIGHT_JOIN t2.e FROM t1,t2 WHERE t2.d=1 AND t1.b=t2.e + ORDER BY t1.b, t1.c; + +DROP TABLE t1,t2; + # End of 4.1 tests diff --git a/mysql-test/t/kill.test b/mysql-test/t/kill.test index 50c4239b45e..1cf871d5f9f 100644 --- a/mysql-test/t/kill.test +++ b/mysql-test/t/kill.test @@ -70,11 +70,14 @@ insert into t2 select id from t1; create table t3 (kill_id int); insert into t3 values(connection_id()); +connect (conn2, localhost, root,,); +connection conn2; + +connection conn1; -- disable_result_log send select id from t1 where id in (select distinct id from t2); -- enable_result_log -connect (conn2, localhost, root,,); connection conn2; select ((@id := kill_id) - kill_id) from t3; -- sleep 1 diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test index bb03b7b8d62..377160d0312 100644 --- a/mysql-test/t/merge.test +++ b/mysql-test/t/merge.test @@ -383,7 +383,7 @@ drop table t1, t2, t3; CREATE TABLE t1(a INT); INSERT INTO t1 VALUES(2),(1); CREATE TABLE t2(a INT, KEY(a)) ENGINE=MERGE UNION=(t1); ---error 1030 +--error 1168 SELECT * FROM t2 WHERE a=2; DROP TABLE t1, t2; @@ -401,4 +401,70 @@ CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3); SELECT * FROM t2; DROP TABLE t2; +# +# Underlying table definition conformance tests. +# +CREATE TABLE t1(a INT, b TEXT); +CREATE TABLE tm1(a TEXT, b INT) ENGINE=MERGE UNION=(t1); +--error 1168 +SELECT * FROM tm1; +DROP TABLE t1, tm1; + +CREATE TABLE t1(a SMALLINT, b SMALLINT); +CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1); +--error 1168 +SELECT * FROM tm1; +DROP TABLE t1, tm1; + +CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(a, b)); +CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1); +--error 1168 +SELECT * FROM tm1; +DROP TABLE t1, tm1; + +CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(b)); +CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1); +--error 1168 +SELECT * FROM tm1; +DROP TABLE t1, tm1; + +# +# Bug#26464 - insert delayed + update + merge = corruption +# +CREATE TABLE t1(c1 INT) ENGINE=MyISAM; +CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1); +--error 1031 +INSERT DELAYED INTO t2 VALUES(1); +DROP TABLE t1, t2; + +# +# BUG#26881 - Large MERGE tables report incorrect specification when no +# differences in tables +# +CREATE TABLE t1(c1 VARCHAR(1)); +CREATE TABLE m1 LIKE t1; +ALTER TABLE m1 ENGINE=MERGE UNION=(t1); +SELECT * FROM m1; +DROP TABLE t1, m1; + +CREATE TABLE t1(c1 VARCHAR(4), c2 TINYINT, c3 TINYINT, c4 TINYINT, + c5 TINYINT, c6 TINYINT, c7 TINYINT, c8 TINYINT, c9 TINYINT); +CREATE TABLE m1 LIKE t1; +ALTER TABLE m1 ENGINE=MERGE UNION=(t1); +SELECT * FROM m1; +DROP TABLE t1, m1; + +# +# BUG#24342 - Incorrect results with query over MERGE table +# +CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci, + b INT, INDEX(a,b)); +CREATE TABLE t2 LIKE t1; +CREATE TABLE t3 LIKE t1; +ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2); +INSERT INTO t1 VALUES ('ss',1); +INSERT INTO t2 VALUES ('ss',2),(0xDF,2); +SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2; +DROP TABLE t1,t2,t3; + # End of 4.1 tests diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index 0abe0a25f44..f882a393621 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -495,7 +495,7 @@ insert into t1 values (1),(2),(3),(4),(5),(6); insert into t2 values (1,1),(2,1); lock tables t1 read local, t2 read local; select straight_join * from t1,t2 force index (primary) where t1.a=t2.a; -connect (root,localhost,root,,test,$MASTER_MYPORT,master.sock); +connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); insert into t2 values(2,0); disconnect root; connection default; @@ -882,4 +882,148 @@ CREATE TABLE t1 (c1 TEXT) AVG_ROW_LENGTH=70100 MAX_ROWS=4100100100; SHOW TABLE STATUS LIKE 't1'; DROP TABLE t1; -# End of 4.1 tests +# +# Bug#26231 - select count(*) on myisam table returns wrong value +# when index is used +# +CREATE TABLE t1 (c1 TEXT NOT NULL, KEY c1 (c1(10))) ENGINE=MyISAM; +# Fill at least two key blocks. "Tab, A" must be in both blocks. +INSERT INTO t1 VALUES + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), (CHAR(9,65)), + (''), (''), (''), (''), + (' B'), (' B'), (' B'), (' B'); +SELECT DISTINCT COUNT(*) FROM t1 WHERE c1 = ''; +SELECT DISTINCT length(c1), c1 FROM t1 WHERE c1 = ''; +SELECT DISTINCT COUNT(*) FROM t1 IGNORE INDEX (c1) WHERE c1 = ''; +SELECT DISTINCT length(c1), c1 FROM t1 IGNORE INDEX (c1) WHERE c1 = ''; +SELECT DISTINCT length(c1), c1 FROM t1 ORDER BY c1; +DROP TABLE t1; + +--echo End of 4.1 tests diff --git a/mysql-test/t/mysqladmin.test b/mysql-test/t/mysqladmin.test index 7c016fd7416..3fa03fa910e 100644 --- a/mysql-test/t/mysqladmin.test +++ b/mysql-test/t/mysqladmin.test @@ -1,3 +1,5 @@ +# Embedded server doesn't support external clients +--source include/not_embedded.inc # # Test "mysqladmin ping" # @@ -15,7 +17,7 @@ database=db1 EOF ---replace_regex /\/.*mysqladmin/mysqladmin/ +--replace_regex /.*mysqladmin.*: unknown/mysqladmin: unknown/ --error 7 --exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 @@ -27,6 +29,6 @@ EOF loose-database=db2 EOF ---replace_regex /Warning: .*mysqladmin/Warning: mysqladmin/ +--replace_regex /Warning: .*mysqladmin.*: unknown/Warning: mysqladmin: unknown/ --exec $MYSQLADMIN --defaults-file=$MYSQLTEST_VARDIR/tmp/bug10608.cnf -S $MASTER_MYSOCK -P $MASTER_MYPORT -u root --password= ping 2>&1 diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index b0df2bb9db2..4a077f1ffa3 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -702,4 +702,19 @@ create table t1 (a int); --exec $MYSQL_DUMP --skip-comments --force test t1 --where='xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 2>&1 drop table t1; +# +# BUG#13926: --order-by-primary fails if PKEY contains quote character +# +CREATE TABLE `t1` ( + `a b` INT, + `c"d` INT, + `e``f` INT, + PRIMARY KEY (`a b`, `c"d`, `e``f`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +insert into t1 values (0815, 4711, 2006); + +--exec $MYSQL_DUMP --skip-comments --compatible=ansi --order-by-primary test t1 +--exec $MYSQL_DUMP --skip-comments --order-by-primary test t1 +DROP TABLE `t1`; + --echo End of 4.1 tests diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index c06d51d9d49..8dae94e271e 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -552,8 +552,8 @@ echo ; # Illegal use of echo ---error 1 ---exec echo "echo \$;" | $MYSQL_TEST 2>&1 +#--error 1 +#--exec echo "echo \$;" | $MYSQL_TEST 2>&1 # ---------------------------------------------------------------------------- @@ -686,6 +686,21 @@ echo # <whatever> success: $success ; echo $success ; # ---------------------------------------------------------------------------- +# Test let from query with $variable +# let $<var_name>=`<query with $variable>`; +# ---------------------------------------------------------------------------- + +let $var1=content of variable 1; +let $var2= `select "$var1"`; +let $var3= `select concat("$var1", " ", "$var2")`; +echo var2: $var2; +echo var3: $var3; +if (`select length("$var3") > 0`) +{ + echo length of var3 is longer than 0; +} + +# ---------------------------------------------------------------------------- # Test to assign let from query # let $<var_name>=`<query>`; # ---------------------------------------------------------------------------- @@ -1469,8 +1484,8 @@ remove_file non_existing_file; --error 1 --exec echo "write_file filename ;" | $MYSQL_TEST 2>&1 ---error 1 ---exec echo "write_file filename \";" | $MYSQL_TEST 2>&1 +#--error 1 +#--exec echo "write_file filename \";" | $MYSQL_TEST 2>&1 write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; Content for test_file1 @@ -1485,6 +1500,74 @@ file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; # ---------------------------------------------------------------------------- +# test for append_file +# ---------------------------------------------------------------------------- + +write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; +Content for test_file1 +EOF +file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; + +append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; +Appended text +EOF +file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp; + +remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; +append_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; +Appended text on nonexisting file +EOF + +# ---------------------------------------------------------------------------- +# test for cat_file +# ---------------------------------------------------------------------------- + +--write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp +Some data +for cat_file command +of mysqltest +EOF +cat_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp; + +--error 1 +--exec echo "cat_file non_existing_file;" | $MYSQL_TEST 2>&1 + +# ---------------------------------------------------------------------------- +# test for diff_files +# ---------------------------------------------------------------------------- + +--write_file $MYSQLTEST_VARDIR/tmp/diff1.tmp +Some data +for diff_file command +of mysqltest +EOF + +--write_file $MYSQLTEST_VARDIR/tmp/diff2.tmp +Some data +for diff_file command +of mysqltest +EOF + +--write_file $MYSQLTEST_VARDIR/tmp/diff3.tmp +Some other data +for diff_file command +of mysqltest +EOF + +# Compare equal files +--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp +--diff_files $MYSQLTEST_VARDIR/tmp/diff2.tmp $MYSQLTEST_VARDIR/tmp/diff1.tmp + +# Compare files that differ +--error 1 +--diff_files $MYSQLTEST_VARDIR/tmp/diff3.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp +--error 1 +--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff3.tmp + +# Compare equal files, again... +--diff_files $MYSQLTEST_VARDIR/tmp/diff1.tmp $MYSQLTEST_VARDIR/tmp/diff2.tmp + +# ---------------------------------------------------------------------------- # test for file_exist # ---------------------------------------------------------------------------- --error 1 @@ -1602,5 +1685,251 @@ EOF --exec echo "echo Some output; exit; echo Not this;" | $MYSQL_TEST 2>&1 +# ---------------------------------------------------------------------------- +# test for sorted_result +# ---------------------------------------------------------------------------- + +create table t1( a int, b char(255), c timestamp); +insert into t1 values(1, 'Line 1', '2007-04-05'), (2, "Part 2", '2007-04-05'); +insert into t1 values(1, 'Line 1', '2007-04-05'), (2, "Part 3", '2007-04-05'); +select * from t1; +--sorted_result +select * from t1; +# Should not be sorted +select * from t1; +disable_result_log; +sorted_result; +select * from t1; +enable_result_log; +--sorted_result +select ''; +sorted_result; +select "h"; +--sorted_result +select "he"; +--sorted_result +select "hep"; +--sorted_result +select "hepp"; + +drop table t1; + +# 1. Assignment of result set sorting +sorted_result; + SELECT 2 as "my_col" +UNION +SELECT 1; +# +--sorted_result +SELECT 2 as "my_col" UNION SELECT 1; +--sorted_result +SELECT 2 as "my_col" +UNION +SELECT 1; + +# 2. Ensure that the table header will be not sorted into the result +--sorted_result +SELECT '2' as "3" +UNION +SELECT '1'; + +# 3. Ensure that an empty result set does not cause problems +CREATE TABLE t1( a CHAR); +--sorted_result +SELECT * FROM t1; +DROP TABLE t1; + +# 4. Ensure that NULL values within the result set do not cause problems +SELECT NULL as "my_col1",2 AS "my_col2" +UNION +SELECT NULL,1; +--sorted_result +SELECT NULL as "my_col1",2 AS "my_col2" +UNION +SELECT NULL,1; +# +SELECT 2 as "my_col1",NULL AS "my_col2" +UNION +SELECT 1,NULL; +--sorted_result +SELECT 2 as "my_col1",NULL AS "my_col2" +UNION +SELECT 1,NULL; + +# 5. "sorted_result" changes nothing when applied to a non query statement. +sorted_result; + SET @a = 17; +# +# 6. Show that "sorted_result;" before the "SET @a = 17;" above does not affect +# the now following query. +SELECT 2 as "my_col" +UNION +SELECT 1; + +# 7. Ensure that "sorted_result" in combination with $variables works +let $my_stmt=SELECT 2 as "my_col" +UNION +SELECT 1; +--sorted_result +eval $my_stmt; + +# 8. Ensure that "sorted_result " does not change the semantics of +# "--error ...." or the protocol output after such an expected failure +--sorted_result +--error 1146 +SELECT '2' as "my_col1",2 as "my_col2" +UNION +SELECT '1',1 from t2; + +# 9. Ensure that several result formatting options including "sorted_result" +# - have all an effect +# - "--sorted_result" does not need to be direct before the statement +# - Row sorting is applied after modification of the column content +--sorted_result +--replace_column 1 # +SELECT '1' as "my_col1",2 as "my_col2" +UNION +SELECT '2',1; + +# 10. Ensure that at least 1024 rows within a result set do not cause problems +# +CREATE TABLE t1 (f1 INT); +INSERT INTO t1 SET f1 = 1024; +INSERT INTO t1 SELECT f1 - 1 FROM t1; +INSERT INTO t1 SELECT f1 - 2 FROM t1; +INSERT INTO t1 SELECT f1 - 4 FROM t1; +INSERT INTO t1 SELECT f1 - 8 FROM t1; +INSERT INTO t1 SELECT f1 - 16 FROM t1; +INSERT INTO t1 SELECT f1 - 32 FROM t1; +INSERT INTO t1 SELECT f1 - 64 FROM t1; +INSERT INTO t1 SELECT f1 - 128 FROM t1; +INSERT INTO t1 SELECT f1 - 256 FROM t1; +INSERT INTO t1 SELECT f1 - 512 FROM t1; +--disable_result_log +--sorted_result +SELECT * FROM t1; +--enable_result_log +DROP TABLE t1; + +# ---------------------------------------------------------------------------- +# test for query_get_value +# ---------------------------------------------------------------------------- + +CREATE TABLE t1( + a int, b varchar(255), c datetime +); +SHOW COLUMNS FROM t1; + +#------------ Positive tests ------------ +# 1. constant parameters +# value is simple string without spaces +let $value= query_get_value(SHOW COLUMNS FROM t1, Type, 1); +--echo statement=SHOW COLUMNS FROM t1 row_number=1, column_name="Type", Value=$value +let $value= query_get_value("SHOW COLUMNS FROM t1", Type, 1); +--echo statement="SHOW COLUMNS FROM t1" row_number=1, column_name="Type", Value=$value +# +# 2. $variables as parameters +# value IS NULL +let $my_show= SHOW COLUMNS FROM t1; +let $column_name= Default; +let $row_number= 1; +let $value= query_get_value($my_show, $column_name, $row_number); +--echo statement=$my_show row_number=$row_number, column_name=$column_name, Value=$value +# +# 3. result set of a SELECT (not recommended, because projection and +# selection could be done much better by pure SELECT functionality) +# value is string with space in the middle +let $value= query_get_value(SELECT 'A B' AS "MyColumn", MyColumn, 1); +--echo value= ->$value<- +# +# 4. column name with space +let $value= query_get_value(SELECT 1 AS "My Column", My Column, 1); +--echo value= $value +# +#------------ Negative tests ------------ +# 5. Incomplete statement including missing parameters +# 5.1 incomplete statement +--error 1 +--exec echo "let \$value= query_get_value(SHOW;" | $MYSQL_TEST 2>&1 +# 5.2 missing query +--error 1 +--exec echo "let \$value= query_get_value;" | $MYSQL_TEST 2>&1 +# 5.3 missing column name +--error 1 +--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1);" | $MYSQL_TEST 2>&1 +# 5.4 missing row number +--error 1 +--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1, Field);" | $MYSQL_TEST 2>&1 +# +# 6. Somehow "wrong" value of parameters +# 6.1 row parameter +# 6.1.1 non sense number 0 +let $value= initialized; +let $value= query_get_value(SHOW COLUMNS FROM t1, Field, 0); +--echo value= $value +# 6.1.2 after the last row +let $value= initialized; +let $value= query_get_value(SHOW COLUMNS FROM t1, Field, 10); +--echo value= $value +# 6.1.3 invalid row number +--error 1 +--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1, Field, notnumber);" | $MYSQL_TEST 2>&1 +# 6.2 column name parameter, name of not existing column +--error 1 +--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1, column_not_exists, 1);" | $MYSQL_TEST 2>&1 +# 6.3. statement which never gives a result set +--error 1 +--exec echo "let \$value= query_get_value(SET @A = 1, Field, 1);" | $MYSQL_TEST 2>&1 +# 6.4. statement contains a "," +# Note: There is no need to improve this, because we need query_get_value +# for SHOW commands only. +--error 1 +--exec echo "let \$value= query_get_value(SELECT 1 AS "A", 1 AS "B", 1);" | $MYSQL_TEST 2>&1 +# +# 7. empty result set +let $value= initialized; +let $value= query_get_value(SELECT a FROM t1, a, 1); +--echo value= $value +# +# 9. failing statement +--error 1 +--exec echo "let \$value= query_get_value(SHOW COLNS FROM t1, Field, 1);" | $MYSQL_TEST 2>&1 +# +# 10. Artificial example how to process a complete SHOW result set: +let $show_statement= SHOW COLUMNS FROM t1; +let $rowno= 1; +let $run=1; +let $count= 0; +--echo +--echo Field Type Null Key Default Extra +while ($run) +{ + let $Field= query_get_value($show_statement, Field, $rowno); + if (`SELECT '$Field' = 'No such row'`) + { + let $run= 0; + } + if (`SELECT '$Field' <> 'No such row'`) + { + let $Type= query_get_value($show_statement, Type, $rowno); + let $Null= query_get_value($show_statement, Null, $rowno); + if (`SELECT '$Null' = 'YES'`) + { + inc $count; + } + let $Key= query_get_value($show_statement, Key, $rowno); + let $Default= query_get_value($show_statement, Default, $rowno); + let $Extra= query_get_value($show_statement, Extra, $rowno); + --echo $Field $Type $Null ->$Key<- $Default $Extra + inc $rowno; + } +} +--echo +--echo Number of columns with Default NULL: $count +--echo +eval $show_statement; + +drop table t1; --echo End of tests + diff --git a/mysql-test/t/ndb_index_unique.test b/mysql-test/t/ndb_index_unique.test index 458f6a165f8..2bf4a763313 100644 --- a/mysql-test/t/ndb_index_unique.test +++ b/mysql-test/t/ndb_index_unique.test @@ -83,6 +83,14 @@ delete from t2 where a = 1; insert into t2 values(8, 2, 3); select * from t2 order by a; +# Bug #24818 CREATE UNIQUE INDEX (...) USING HASH on a NDB table crashes mysqld +create unique index bi using hash on t2(b); +-- error 1062 +insert into t2 values(9, 3, 1); +alter table t2 drop index bi; +insert into t2 values(9, 3, 1); +select * from t2 order by a; + drop table t2; -- error 1121 diff --git a/mysql-test/t/ndb_types.test b/mysql-test/t/ndb_types.test index 1ca89447892..7b0b4972248 100644 --- a/mysql-test/t/ndb_types.test +++ b/mysql-test/t/ndb_types.test @@ -1,5 +1,5 @@ --- source include/have_ndb.inc --- source include/not_embedded.inc +--source include/have_ndb.inc +--source include/not_embedded.inc --disable_warnings DROP TABLE IF EXISTS t1; @@ -48,7 +48,7 @@ CREATE TABLE t1 ( ); set @now = now(); -sleep 1; +--sleep 1.5 insert into t1 (string,vstring,bin,vbin,tiny,short,medium,long_int,longlong, real_float,real_double, utiny, ushort, umedium,ulong,ulonglong, @@ -64,7 +64,7 @@ from t1; select time_stamp>@now from t1; set @now = now(); -sleep 1; +--sleep 1.5 update t1 set string="bbbb",vstring="bbbb",bin=0xBBBB,vbin=0xBBBB, tiny=-2,short=-2,medium=-2,long_int=-2,longlong=-2,real_float=2.2, real_double=2.2,utiny=2,ushort=2,umedium=2,ulong=2,ulonglong=2, @@ -79,4 +79,4 @@ select time_stamp>@now from t1; drop table t1; -# End of 4.1 tests +--echo End of 4.1 tests diff --git a/mysql-test/t/olap.test b/mysql-test/t/olap.test index 683e1402678..61c1bd45e5f 100644 --- a/mysql-test/t/olap.test +++ b/mysql-test/t/olap.test @@ -281,4 +281,23 @@ select left(a,10), a, sum(b) from t1 group by 1,2 with rollup; select left(a,10) x, a, sum(b) from t1 group by x,a with rollup; drop table t1; +# +# Bug #24856: ROLLUP by const item in a query with DISTINCT +# + +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 + VALUES (2,10),(3,30),(2,40),(1,10),(2,30),(1,20),(2,10); + +SELECT a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +SELECT DISTINCT a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +SELECT a, b, COUNT(*) FROM t1 GROUP BY a,b WITH ROLLUP; +SELECT DISTINCT a, b, COUNT(*) FROM t1 GROUP BY a,b WITH ROLLUP; + +SELECT 'x', a, SUM(b) FROM t1 GROUP BY 1,2 WITH ROLLUP; +SELECT DISTINCT 'x', a, SUM(b) FROM t1 GROUP BY 1,2 WITH ROLLUP; +SELECT DISTINCT 'x', a, SUM(b) FROM t1 GROUP BY 1,2 WITH ROLLUP; + +DROP TABLE t1; + # End of 4.1 tests diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index a8024be7032..5c607608462 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -575,4 +575,83 @@ SELECT a + 1 AS num, (select num + 2 FROM t1 LIMIT 1) FROM t1; SELECT a.a + 1 AS num FROM t1 a JOIN t1 b ON num = b.a; DROP TABLE t1; +# +# Bug#25126: Reference to non-existant column in UPDATE...ORDER BY... +# crashes server +# +CREATE TABLE bug25126 ( + val int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY +); +--error 1054 +UPDATE bug25126 SET MissingCol = MissingCol; +--error 1054 +UPDATE bug25126 SET val = val ORDER BY MissingCol; +UPDATE bug25126 SET val = val ORDER BY val; +UPDATE bug25126 SET val = 1 ORDER BY val; +--error 1054 +UPDATE bug25126 SET val = 1 ORDER BY MissingCol; +--error 1054 +UPDATE bug25126 SET val = 1 ORDER BY val, MissingCol; +--error 1054 +UPDATE bug25126 SET val = MissingCol ORDER BY MissingCol; +--error 1054 +UPDATE bug25126 SET MissingCol = 1 ORDER BY val, MissingCol; +--error 1054 +UPDATE bug25126 SET MissingCol = 1 ORDER BY MissingCol; +--error 1054 +UPDATE bug25126 SET MissingCol = val ORDER BY MissingCol; +--error 1054 +UPDATE bug25126 SET MissingCol = MissingCol ORDER BY MissingCol; +DROP TABLE bug25126; + +# +# Bug #25427: crash when order by expression contains a name +# that cannot be resolved unambiguously +# + +CREATE TABLE t1 (a int); + +SELECT p.a AS val, q.a AS val1 FROM t1 p, t1 q ORDER BY val > 1; +--error 1052 +SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val; +--error 1052 +SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1; + +DROP TABLE t1; + +# +# Bug #27532: ORDER/GROUP BY expressions with IN/BETWEEN and NOT IN/BETWEEN +# + +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (3), (2), (4), (1); + +SELECT a, IF(a IN (2,3), a, a+10) FROM t1 + ORDER BY IF(a IN (2,3), a, a+10); +SELECT a, IF(a NOT IN (2,3), a, a+10) FROM t1 + ORDER BY IF(a NOT IN (2,3), a, a+10); +SELECT a, IF(a IN (2,3), a, a+10) FROM t1 + ORDER BY IF(a NOT IN (2,3), a, a+10); + +SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1 + ORDER BY IF(a BETWEEN 2 AND 3, a, a+10); +SELECT a, IF(a NOT BETWEEN 2 AND 3, a, a+10) FROM t1 + ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10); +SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1 + ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10); + +SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2 + FROM t1 GROUP BY x1, x2; +SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2 + FROM t1 GROUP BY x1, IF(a NOT IN (1,2), a, ''); + +# The remaining queries are for better coverage +SELECT a, a IN (1,2) FROM t1 ORDER BY a IN (1,2); +SELECT a FROM t1 ORDER BY a IN (1,2); +SELECT a+10 FROM t1 ORDER BY a IN (1,2); +SELECT a, IF(a IN (1,2), a, a+10) FROM t1 + ORDER BY IF(a IN (3,4), a, a+10); + +DROP TABLE t1; + # End of 4.1 tests diff --git a/mysql-test/t/outfile.test b/mysql-test/t/outfile.test index 81fcc7fd564..149c92ece38 100644 --- a/mysql-test/t/outfile.test +++ b/mysql-test/t/outfile.test @@ -39,9 +39,9 @@ select load_file(concat(@tmpdir,"/outfile-test.3")); #eval select * into dumpfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.3" from t1; #enable_query_log; select load_file(concat(@tmpdir,"/outfile-test.not-exist")); ---exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.1 ---exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.2 ---exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.3 +--remove_file $MYSQL_TEST_DIR/var/tmp/outfile-test.1 +--remove_file $MYSQL_TEST_DIR/var/tmp/outfile-test.2 +--remove_file $MYSQL_TEST_DIR/var/tmp/outfile-test.3 drop table t1; # Bug#8191 @@ -49,7 +49,7 @@ disable_query_log; eval select 1 into outfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.4"; enable_query_log; select load_file(concat(@tmpdir,"/outfile-test.4")); ---exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.4 +--remove_file $MYSQL_TEST_DIR/var/tmp/outfile-test.4 # # Bug #5382: 'explain select into outfile' crashes the server diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index fbeaaa494e0..5e5dcc36b19 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -1068,5 +1068,82 @@ EXECUTE stmt USING @a; DEALLOCATE PREPARE stmt; DROP TABLE t1; +# +# Bug#19182: CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work +# from stored procedure. +# +# The cause of a bug was that cached LEX::create_list was modified, +# and then together with LEX::key_list was reset. +# +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +CREATE TABLE t1 (i INT); + +PREPARE st_19182 +FROM "CREATE TABLE t2 (i INT, j INT, KEY (i), KEY(j)) SELECT i FROM t1"; + +EXECUTE st_19182; +DESC t2; + +DROP TABLE t2; + +# Check that on second execution we don't loose 'j' column and the keys +# on 'i' and 'j' columns. +EXECUTE st_19182; +DESC t2; + +DEALLOCATE PREPARE st_19182; +DROP TABLE t2, t1; + +# +# Bug #22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server" +# +# Code which implemented CREATE/ALTER TABLE and CREATE DATABASE +# statement modified HA_CREATE_INFO structure in LEX, making these +# statements PS/SP-unsafe (their re-execution might have resulted +# in incorrect results). +# +--disable_warnings +drop database if exists mysqltest; +drop table if exists t1, t2; +--enable_warnings +# CREATE TABLE and CREATE TABLE ... SELECT +create database mysqltest character set utf8; +prepare stmt1 from "create table mysqltest.t1 (c char(10))"; +prepare stmt2 from "create table mysqltest.t2 select 'test'"; +execute stmt1; +execute stmt2; +show create table mysqltest.t1; +show create table mysqltest.t2; +drop table mysqltest.t1; +drop table mysqltest.t2; +alter database mysqltest character set latin1; +execute stmt1; +execute stmt2; +show create table mysqltest.t1; +show create table mysqltest.t2; +drop database mysqltest; +deallocate prepare stmt1; +deallocate prepare stmt2; +# + +# +# Bug #27937: crash on the second execution for prepared statement +# from UNION with ORDER BY an expression containing RAND() +# + +CREATE TABLE t1(a int); +INSERT INTO t1 VALUES (2), (3), (1); + +PREPARE st1 FROM + '(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a'; + +EXECUTE st1; +EXECUTE st1; + +DEALLOCATE PREPARE st1; +DROP TABLE t1; --echo End of 4.1 tests. diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index 3140739309e..d447df9187b 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -729,4 +729,50 @@ drop table t1; set GLOBAL query_cache_size=0; +# +# Bug #27792 query cache returns wrong result, with certain system variables +# + +create table t1 (a int); +insert into t1 values (1),(2),(3); +set GLOBAL query_cache_type=1; +set GLOBAL query_cache_limit=10000; +set GLOBAL query_cache_min_res_unit=0; +set GLOBAL query_cache_size= 100000; + +# default_week_format +reset query cache; +set LOCAL default_week_format = 0; +select week('2007-01-04'); +select week('2007-01-04') from t1; + +set LOCAL default_week_format = 2; +select week('2007-01-04'); +select week('2007-01-04') from t1; + +drop table t1; + +CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b)); +INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'), + ('Full-text indexes', 'are called collections'), + ('Only MyISAM tables','support collections'), + ('Function MATCH ... AGAINST()','is used to do a search'), + ('Full-text search in MySQL', 'implements vector space model'); + + +set GLOBAL ft_boolean_syntax='+ -><()~*:""&|'; + +select *, MATCH(a,b) AGAINST("+called +collections" IN BOOLEAN MODE) as x from t1; + +# swap +/- +set GLOBAL ft_boolean_syntax='- +><()~*:""&|'; + +select *, MATCH(a,b) AGAINST("+called +collections" IN BOOLEAN MODE) as x from t1; + +set GLOBAL query_cache_type=default; +set GLOBAL query_cache_limit=default; +set GLOBAL query_cache_min_res_unit=default; +set GLOBAL query_cache_size=default; + + # End of 4.1 tests diff --git a/mysql-test/t/query_cache_notembedded.test b/mysql-test/t/query_cache_notembedded.test index fd4785ffe95..20baf3450e2 100644 --- a/mysql-test/t/query_cache_notembedded.test +++ b/mysql-test/t/query_cache_notembedded.test @@ -81,12 +81,12 @@ drop table t1, t2, t3, t11, t21; # # do not use QC if tables locked (BUG#12385) # -connect (root,localhost,root,,test,$MASTER_MYPORT,master.sock); +connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); connection root; CREATE TABLE t1 ( a INT NOT NULL PRIMARY KEY AUTO_INCREMENT ) ENGINE = MyISAM; LOCK TABLE t1 READ LOCAL; -connect (root2,localhost,root,,test,$MASTER_MYPORT,master.sock); +connect (root2,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); connection root2; INSERT INTO t1 VALUES (), (), (); connection root; diff --git a/mysql-test/t/range.test b/mysql-test/t/range.test index 245178d7d4a..0dbfde92bd5 100644 --- a/mysql-test/t/range.test +++ b/mysql-test/t/range.test @@ -400,8 +400,8 @@ select count(*) from t1 where x = 18446744073709551601; create table t2 (x bigint not null); -insert into t2(x) values (0xfffffffffffffff0); -insert into t2(x) values (0xfffffffffffffff1); +insert into t2(x) values (-16); +insert into t2(x) values (-15); select * from t2; select count(*) from t2 where x>0; select count(*) from t2 where x=0; @@ -520,4 +520,190 @@ explain select a from t1 where a > 'x'; select a from t1 where a > 'x'; drop table t1; +# +# Bug #24776: assertion abort for 'range checked for each record' +# + +CREATE TABLE t1 ( + OXID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '', + OXPARENTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT 'oxrootid', + OXLEFT int NOT NULL DEFAULT '0', + OXRIGHT int NOT NULL DEFAULT '0', + OXROOTID varchar(32) COLLATE latin1_german2_ci NOT NULL DEFAULT '', + PRIMARY KEY (OXID), + KEY OXNID (OXID), + KEY OXLEFT (OXLEFT), + KEY OXRIGHT (OXRIGHT), + KEY OXROOTID (OXROOTID) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci; + +INSERT INTO t1 VALUES +('d8c4177d09f8b11f5.52725521','oxrootid',1,40,'d8c4177d09f8b11f5.52725521'), +('d8c4177d151affab2.81582770','d8c4177d09f8b11f5.52725521',2,3, + 'd8c4177d09f8b11f5.52725521'), +('d8c4177d206a333d2.74422679','d8c4177d09f8b11f5.52725521',4,5, + 'd8c4177d09f8b11f5.52725521'), +('d8c4177d225791924.30714720','d8c4177d09f8b11f5.52725521',6,7, + 'd8c4177d09f8b11f5.52725521'), +('d8c4177d2380fc201.39666693','d8c4177d09f8b11f5.52725521',8,9, + 'd8c4177d09f8b11f5.52725521'), +('d8c4177d24ccef970.14957924','d8c4177d09f8b11f5.52725521',10,11, + 'd8c4177d09f8b11f5.52725521'); + +EXPLAIN +SELECT s.oxid FROM t1 v, t1 s + WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND + v.oxrootid ='d8c4177d09f8b11f5.52725521' AND + s.oxleft > v.oxleft AND s.oxleft < v.oxright; + +SELECT s.oxid FROM t1 v, t1 s + WHERE s.oxrootid = 'd8c4177d09f8b11f5.52725521' AND + v.oxrootid ='d8c4177d09f8b11f5.52725521' AND + s.oxleft > v.oxleft AND s.oxleft < v.oxright; + +DROP TABLE t1; + +# BUG#26624 high mem usage (crash) in range optimizer (depends on order of fields in where) +create table t1 ( + c1 char(10), c2 char(10), c3 char(10), c4 char(10), + c5 char(10), c6 char(10), c7 char(10), c8 char(10), + c9 char(10), c10 char(10), c11 char(10), c12 char(10), + c13 char(10), c14 char(10), c15 char(10), c16 char(10), + index(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,c13,c14,c15,c16) +); +insert into t1 (c1) values ('1'),('1'),('1'),('1'); + +# This must run without crash and fast: +select * from t1 where + c1 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c2 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c3 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c4 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c5 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c6 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c7 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c8 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c9 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c10 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC"); +drop table t1; --echo End of 4.1 tests diff --git a/mysql-test/t/row.test b/mysql-test/t/row.test index d8d9a244134..6f845607d8c 100644 --- a/mysql-test/t/row.test +++ b/mysql-test/t/row.test @@ -83,4 +83,74 @@ drop table t1; SELECT ROW(2,10) <=> ROW(3,4); SELECT ROW(NULL,10) <=> ROW(3,NULL); +# +# Bug #27484: nested row expressions in IN predicate +# + +--error 1241 +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),ROW(1,1)); +--error 1241 +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),ROW(1,1),ROW(1,ROW(2,3))); +--error 1241 +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),ROW(1,ROW(2,2,2))); +--error 1241 +SELECT ROW(1,ROW(2,3,4)) IN (ROW(1,ROW(2,3,4)),ROW(1,ROW(2,2))); + +--error 1241 +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),(SELECT 1,1)); +--error 1241 +SELECT ROW(1,ROW(2,3)) IN (ROW(1,ROW(2,3)),(SELECT 1,1),ROW(1,ROW(2,4))); +--error 1241 +SELECT ROW(1,ROW(2,3)) IN ((SELECT 1,1),ROW(1,ROW(2,3))); + +--error 1241 +SELECT ROW(2,1) IN (ROW(21,2),ROW(ROW(1,1,3),0)); +--error 1241 +SELECT ROW(2,1) IN (ROW(ROW(1,1,3),0),ROW(21,2)); + +# +# Bug#27704: erroneous comparison of rows with NULL components +# +CREATE TABLE t1(a int, b int, c int); +INSERT INTO t1 VALUES (1, 2, 3), + (NULL, 2, 3 ), (1, NULL, 3 ), (1, 2, NULL), + (NULL, 2, 3+1), (1, NULL, 3+1), (1, 2+1, NULL), + (NULL, 2, 3-1), (1, NULL, 3-1), (1, 2-1, NULL); + +SELECT (1,2,3) = (1, NULL, 3); +SELECT (1,2,3) = (1+1, NULL, 3); +SELECT (1,2,3) = (1, NULL, 3+1); +SELECT * FROM t1 WHERE (a,b,c) = (1,2,3); + +SELECT (1,2,3) <> (1, NULL, 3); +SELECT (1,2,3) <> (1+1, NULL, 3); +SELECT (1,2,3) <> (1, NULL, 3+1); +SELECT * FROM t1 WHERE (a,b,c) <> (1,2,3); + +SELECT (1,2,3) < (NULL, 2, 3); +SELECT (1,2,3) < (1, NULL, 3); +SELECT (1,2,3) < (1-1, NULL, 3); +SELECT (1,2,3) < (1+1, NULL, 3); +SELECT * FROM t1 WHERE (a,b,c) < (1,2,3); + +SELECT (1,2,3) <= (NULL, 2, 3); +SELECT (1,2,3) <= (1, NULL, 3); +SELECT (1,2,3) <= (1-1, NULL, 3); +SELECT (1,2,3) <= (1+1, NULL, 3); +SELECT * FROM t1 WHERE (a,b,c) <= (1,2,3); + +SELECT (1,2,3) > (NULL, 2, 3); +SELECT (1,2,3) > (1, NULL, 3); +SELECT (1,2,3) > (1-1, NULL, 3); +SELECT (1,2,3) > (1+1, NULL, 3); +SELECT * FROM t1 WHERE (a,b,c) > (1,2,3); + +SELECT (1,2,3) >= (NULL, 2, 3); +SELECT (1,2,3) >= (1, NULL, 3); +SELECT (1,2,3) >= (1-1, NULL, 3); +SELECT (1,2,3) >= (1+1, NULL, 3); +SELECT * FROM t1 WHERE (a,b,c) >= (1,2,3); + +DROP TABLE t1; + # End of 4.1 tests diff --git a/mysql-test/t/rpl000015.test b/mysql-test/t/rpl000015.test index 4e329fc87ea..a23a4b0ba5f 100644 --- a/mysql-test/t/rpl000015.test +++ b/mysql-test/t/rpl000015.test @@ -1,5 +1,5 @@ -connect (master,localhost,root,,test,$MASTER_MYPORT,master.sock); -connect (slave,localhost,root,,test,$SLAVE_MYPORT,slave.sock); +connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); +connect (slave,localhost,root,,test,$SLAVE_MYPORT,$SLAVE_MYSOCK); connection master; reset master; show master status; diff --git a/mysql-test/t/rpl000017.test b/mysql-test/t/rpl000017.test index 7b4e6bf4d3a..ea3aba8fb75 100644 --- a/mysql-test/t/rpl000017.test +++ b/mysql-test/t/rpl000017.test @@ -1,5 +1,5 @@ -connect (master,localhost,root,,test,$MASTER_MYPORT,master.sock); -connect (slave,localhost,root,,test,$SLAVE_MYPORT,slave.sock); +connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); +connect (slave,localhost,root,,test,$SLAVE_MYPORT,$SLAVE_MYSOCK); connection master; reset master; grant replication slave on *.* to replicate@localhost identified by 'aaaaaaaaaaaaaaab'; diff --git a/mysql-test/t/rpl_ignore_table.test b/mysql-test/t/rpl_ignore_table.test index bc651779208..660921a94be 100644 --- a/mysql-test/t/rpl_ignore_table.test +++ b/mysql-test/t/rpl_ignore_table.test @@ -26,3 +26,101 @@ SELECT * FROM t4; connection master; DROP TABLE t1; DROP TABLE t4; + + +# +# Bug#25482 GRANT statements are not replicated if +# you use "replicate-ignore-table" +# + +--echo **** Test case for BUG#25482 **** +--echo **** Adding GRANTS on master **** + +connection master; +create table test.t1(a int); +create table test.t4(a int); + +# Simple user that should not replicate +GRANT SELECT ON test.t1 TO mysqltest1@localhost; + +# Partial replicate +GRANT INSERT ON test.t4 TO mysqltest2@localhost; +GRANT select, update, insert, references on t1 + to mysqltest2@localhost; + +# Partial replicate 2 +GRANT SELECT ON test.* TO mysqltest3@localhost; +GRANT INSERT ON test.t4 TO mysqltest3@localhost; +GRANT select(a), update(a), insert(a), references(a) on t4 + to mysqltest3@localhost; + +# Create another database and table +create database mysqltest2; +create table mysqltest2.t2 (id int); +# Create a grant that should replicate +GRANT SELECT ON mysqltest2.t2 TO mysqltest4@localhost IDENTIFIED BY 'pass'; + +# Create a grant manually +insert into mysql.user (user, host) values ("mysqltest5", "somehost"); + +# Partial replicate 3 with *.* +GRANT SELECT ON *.* TO mysqltest6@localhost; +GRANT INSERT ON *.* TO mysqltest6@localhost; +GRANT INSERT ON test.* TO mysqltest6@localhost; +GRANT INSERT ON test.t1 TO mysqltest6@localhost; + +show grants for mysqltest1@localhost; +show grants for mysqltest2@localhost; +show grants for mysqltest3@localhost; +show grants for mysqltest4@localhost; +show grants for mysqltest6@localhost; + +flush privileges; +show grants for mysqltest5@somehost; + + +sync_slave_with_master; + +--echo **** Checking grants on slave **** + +# Check that grants are replicated to slave +show grants for mysqltest2@localhost; +show grants for mysqltest3@localhost; +show grants for mysqltest4@localhost; +show grants for mysqltest5@somehost; +show grants for mysqltest6@localhost; + +# mysqltest1 should not be on slave +--error 1141 +show grants for mysqltest1@localhost; + +--echo **** Revoking grants on master **** +connection master; +REVOKE SELECT ON test.t1 FROM mysqltest1@localhost; +REVOKE SELECT ON mysqltest2.t2 FROM mysqltest4@localhost; +REVOKE select(a) on t4 + from mysqltest3@localhost; + +show grants for mysqltest1@localhost; +show grants for mysqltest3@localhost; +show grants for mysqltest4@localhost; + +sync_slave_with_master; + +--echo **** Checking grants on slave **** + +# mysqltest1 should not be on slave +--error 1141 +show grants for mysqltest1@localhost; +show grants for mysqltest3@localhost; +show grants for mysqltest4@localhost; + +# Cleanup +connection master; +drop table t1, t4, mysqltest2.t2; +drop database mysqltest2; +delete from mysql.user where user like "mysqltest%"; +delete from mysql.db where user like "mysqltest%"; +delete from mysql.tables_priv where user like "mysqltest%"; +delete from mysql.columns_priv where user like "mysqltest%"; +sync_slave_with_master; diff --git a/mysql-test/t/rpl_locale.test b/mysql-test/t/rpl_locale.test new file mode 100644 index 00000000000..530a3d77636 --- /dev/null +++ b/mysql-test/t/rpl_locale.test @@ -0,0 +1,22 @@ +# Replication of locale variables + +source include/master-slave.inc; + +# +# Bug#22645 LC_TIME_NAMES: Statement not replicated +# +connection master; +create table t1 (s1 char(10)); +set lc_time_names= 'de_DE'; +insert into t1 values (date_format('2001-01-01','%W')); +select * from t1; +sync_slave_with_master; +connection slave; +select * from t1; +connection master; +drop table t1; +sync_slave_with_master; + +# End of 4.1 tests + + diff --git a/mysql-test/t/rpl_rotate_logs.test b/mysql-test/t/rpl_rotate_logs.test index 891582a167c..8d751e43958 100644 --- a/mysql-test/t/rpl_rotate_logs.test +++ b/mysql-test/t/rpl_rotate_logs.test @@ -9,11 +9,11 @@ # changes # - Test creating a duplicate key error and recover from it -connect (master,localhost,root,,test,$MASTER_MYPORT,master.sock); +connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); --disable_warnings drop table if exists t1, t2, t3, t4; --enable_warnings -connect (slave,localhost,root,,test,$SLAVE_MYPORT,slave.sock); +connect (slave,localhost,root,,test,$SLAVE_MYPORT,$SLAVE_MYSOCK); system cat /dev/null > var/slave-data/master.info; system chmod 000 var/slave-data/master.info; connection slave; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 3f9fb59d26f..0dc179e9b4b 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -2342,4 +2342,15 @@ select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5; DROP TABLE t1,t2; --enable_ps_protocol -# End of 4.1 tests +# +# Bug #22533: storing large hex strings +# + +create table t1(a bigint unsigned, b bigint); +insert into t1 values (0xfffffffffffffffff, 0xfffffffffffffffff), + (0x10000000000000000, 0x10000000000000000), + (0x8fffffffffffffff, 0x8fffffffffffffff); +select hex(a), hex(b) from t1; +drop table t1; + +--echo End of 4.1 tests diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 804cc2274c9..67a18e7a30f 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -1981,4 +1981,75 @@ SHOW CREATE TABLE t3; DROP TABLE t1,t2,t3; +# +# Bug 24670: subquery witout tables but with a WHERE clause +# + +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (1), (2); + +SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) > 0; +SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL; +EXPLAIN SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL; + +DROP TABLE t1; + +# +# Bug 24653: sorting by expressions containing subselects +# that return more than one row +# + +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (2), (4), (1), (3); + +CREATE TABLE t2 (b int, c int); +INSERT INTO t2 VALUES + (2,1), (1,3), (2,1), (4,4), (2,2), (1,4); + +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2 ); +--error 1242 +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1); +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2), a; +--error 1242 +SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1), a; + +SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 2); +--error 1242 +SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 1); + + +SELECT a FROM t1 GROUP BY a + HAVING IFNULL((SELECT b FROM t2 WHERE b > 2), + (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3; +--error 1242 +SELECT a FROM t1 GROUP BY a + HAVING IFNULL((SELECT b FROM t2 WHERE b > 1), + (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3; + +SELECT a FROM t1 GROUP BY a + HAVING IFNULL((SELECT b FROM t2 WHERE b > 4), + (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3; +--error 1242 +SELECT a FROM t1 GROUP BY a + HAVING IFNULL((SELECT b FROM t2 WHERE b > 4), + (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)) > 3; + +SELECT a FROM t1 + ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 2), + (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)); +--error 1242 +SELECT a FROM t1 + ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 1), + (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)); + +SELECT a FROM t1 + ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4), + (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)); +--error 1242 +SELECT a FROM t1 + ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4), + (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)); + +DROP TABLE t1,t2; + # End of 4.1 tests diff --git a/mysql-test/t/symlink.test b/mysql-test/t/symlink.test index 201a2866c4f..010ef496399 100644 --- a/mysql-test/t/symlink.test +++ b/mysql-test/t/symlink.test @@ -170,4 +170,23 @@ connection default; select * from t1; drop table t1; -# End of 4.1 tests +# +# CREATE TABLE with DATA DIRECTORY option +# +# Protect ourselves from data left in tmp/ by a previos possibly failed +# test +--system rm -f $MYSQLTEST_VARDIR/tmp/t1.* +--disable_query_log +eval prepare stmt from "create table t1 (c char(10)) data directory='$MYSQLTEST_VARDIR/tmp'"; +--enable_query_log +execute stmt; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; +drop table t1; +execute stmt; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; +drop table t1; +deallocate prepare stmt; + +--echo End of 4.1 tests diff --git a/mysql-test/t/type_datetime.test b/mysql-test/t/type_datetime.test index 4b6741b4242..87b86b55fc9 100644 --- a/mysql-test/t/type_datetime.test +++ b/mysql-test/t/type_datetime.test @@ -113,4 +113,10 @@ insert into t1 values ("00-00-00"), ("00-00-00 00:00:00"); select * from t1; drop table t1; +# +# Bug #16546 DATETIME+0 not always coerced the same way +# +select cast('2006-12-05 22:10:10' as datetime) + 0; + + # End of 4.1 tests diff --git a/mysql-test/t/type_enum.test b/mysql-test/t/type_enum.test index 68f5664c36d..4b3429d9ea0 100644 --- a/mysql-test/t/type_enum.test +++ b/mysql-test/t/type_enum.test @@ -136,4 +136,24 @@ alter table t1 add f2 enum(0xFFFF); show create table t1; drop table t1; -# End of 4.1 tests +# +# Bug#24660 "enum" field type definition problem +# +create table t1(russian enum('E','F','EÿF','FÿE') NOT NULL DEFAULT'E'); +show create table t1; +drop table t1; + +create table t1(denormal enum('E','F','E,F','F,E') NOT NULL DEFAULT'E'); +show create table t1; +drop table t1; + +create table t1(russian_deviant enum('E','F','EÿF','F,E') NOT NULL DEFAULT'E'); +show create table t1; +drop table t1; + +# ER_WRONG_FIELD_TERMINATORS +--error 1083 +create table t1(exhausting_charset enum('ABCDEFGHIJKLMNOPQRSTUVWXYZ',' +
!"','#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~','xx\','yy\€','zz‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ')); + +--echo End of 4.1 tests diff --git a/mysql-test/t/type_float.test b/mysql-test/t/type_float.test index 8a484f7bcd0..8c22d22ca66 100644 --- a/mysql-test/t/type_float.test +++ b/mysql-test/t/type_float.test @@ -188,4 +188,29 @@ select 1e-308, 1.00000001e-300, 100000000e-300; # check if overflows are detected correctly select 10e307; +# +# Bug #19690: ORDER BY eliminates rows from the result +# +create table t1(a int, b double(8, 2)); +insert into t1 values +(1, 28.50), (1, 121.85), (1, 157.23), (1, 1351.00), (1, -1965.35), (1, 81.75), +(1, 217.08), (1, 7.94), (4, 96.07), (4, 6404.65), (4, -6500.72), (2, 100.00), +(5, 5.00), (5, -2104.80), (5, 2033.80), (5, 0.07), (5, 65.93), +(3, -4986.24), (3, 5.00), (3, 4857.34), (3, 123.74), (3, 0.16), +(6, -1695.31), (6, 1003.77), (6, 499.72), (6, 191.82); +explain select sum(b) s from t1 group by a; +select sum(b) s from t1 group by a; +select sum(b) s from t1 group by a having s <> 0; +select sum(b) s from t1 group by a having s <> 0 order by s; +select sum(b) s from t1 group by a having s <=> 0; +select sum(b) s from t1 group by a having s <=> 0 order by s; +alter table t1 add key (a, b); +explain select sum(b) s from t1 group by a; +select sum(b) s from t1 group by a; +select sum(b) s from t1 group by a having s <> 0; +select sum(b) s from t1 group by a having s <> 0 order by s; +select sum(b) s from t1 group by a having s <=> 0; +select sum(b) s from t1 group by a having s <=> 0 order by s; +drop table t1; + --echo End of 4.1 tests diff --git a/mysql-test/t/update.test b/mysql-test/t/update.test index c69c56f0331..e5287eacbc8 100644 --- a/mysql-test/t/update.test +++ b/mysql-test/t/update.test @@ -306,4 +306,12 @@ create table t1(f1 int, `*f2` int); insert into t1 values (1,1); update t1 set `*f2`=1; drop table t1; + +# +# Bug#25126: Wrongly resolved field leads to a crash +# +create table t1(f1 int); +--error 1054 +update t1 set f2=1 order by f2; +drop table t1; # End of 4.1 tests diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 8322c0f84bd..808dc0973d4 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -397,6 +397,50 @@ set names latin1; select @@have_innodb; # +# Tests for lc_time_names +# Note, when adding new locales, please fix ID accordingly: +# - to test the last ID (currently 108) +# - and the next after the last (currently 109) +# +--echo *** Various tests with LC_TIME_NAMES +--echo *** LC_TIME_NAMES: testing case insensitivity +set @@lc_time_names='ru_ru'; +select @@lc_time_names; +--echo *** LC_TIME_NAMES: testing with a user variable +set @lc='JA_JP'; +set @@lc_time_names=@lc; +select @@lc_time_names; +--echo *** LC_TIME_NAMES: testing with string expressions +set lc_time_names=concat('de','_','DE'); +select @@lc_time_names; +--error 1105 +set lc_time_names=concat('de','+','DE'); +select @@lc_time_names; +--echo LC_TIME_NAMES: testing with numeric expressions +set @@lc_time_names=1+2; +select @@lc_time_names; +--error 1232 +set @@lc_time_names=1/0; +select @@lc_time_names; +set lc_time_names=en_US; +--echo LC_TIME_NAMES: testing NULL and a negative number: +--error 1231 +set lc_time_names=NULL; +--error 1105 +set lc_time_names=-1; +select @@lc_time_names; +--echo LC_TIME_NAMES: testing locale with the last ID: +set lc_time_names=108; +select @@lc_time_names; +--echo LC_TIME_NAMES: testing a number beyond the valid ID range: +--error 1105 +set lc_time_names=109; +select @@lc_time_names; +--echo LC_TIME_NAMES: testing that 0 is en_US: +set lc_time_names=0; +select @@lc_time_names; + +# # Bug #13334: query_prealloc_size default less than minimum # set @test = @@query_prealloc_size; diff --git a/mysql-test/t/windows.test b/mysql-test/t/windows.test index d6bcfeb8cb3..b5377a9b9b0 100644 --- a/mysql-test/t/windows.test +++ b/mysql-test/t/windows.test @@ -17,4 +17,13 @@ use prn; create table nu (a int); drop table nu; +# +# Bug17489: ailed to put data file in custom directory use "data directory" option +# +--disable_warnings +drop table if exists t1; +--enable_warnings +CREATE TABLE t1 ( `ID` int(6) ) data directory 'c:/tmp/' index directory 'c:/tmp/' engine=MyISAM; +drop table t1; + # End of 4.1 tests diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp new file mode 100644 index 00000000000..716dca491ce --- /dev/null +++ b/mysql-test/valgrind.supp @@ -0,0 +1,437 @@ +# +# Suppress some common (not fatal) errors in system libraries found by valgrind +# + +# +# Pthread doesn't free all thread specific memory before program exists +# +{ + pthread allocate_tls memory loss + Memcheck:Leak + fun:calloc + fun:_dl_allocate_tls + fun:allocate_stack + fun:pthread_create* +} + +{ + pthread allocate_tls memory loss + Memcheck:Leak + fun:calloc + fun:_dl_allocate_tls + fun:pthread_create* +} + +{ + pthread allocate_dtv memory loss + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls_storage + fun:__GI__dl_allocate_tls + fun:pthread_create +} + +{ + pthread allocate_dtv memory loss second + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls + fun:pthread_create* +} + +{ + pthread memalign memory loss + Memcheck:Leak + fun:memalign + fun:_dl_allocate_tls_storage + fun:__GI__dl_allocate_tls + fun:pthread_create +} + +{ + pthread pthread_key_create + Memcheck:Leak + fun:malloc + fun:* + fun:* + fun:pthread_key_create + fun:my_thread_global_init +} + +{ + pthread strstr uninit + Memcheck:Cond + fun:strstr + obj:/lib/tls/libpthread.so.* + obj:/lib/tls/libpthread.so.* + fun:call_init + fun:_dl_init + obj:/lib/ld-*.so +} + +{ + pthread errno + Memcheck:Leak + fun:calloc + fun:_dlerror_run + fun:dlsym + fun:__errno_location +} + + +# +# Warnings in libz becasue it works with aligned memory(?) +# + +{ + libz tr_flush_block + Memcheck:Cond + fun:_tr_flush_block + fun:deflate_slow + fun:deflate + fun:do_flush + fun:gzclose +} + +{ + libz tr_flush_block2 + Memcheck:Cond + fun:_tr_flush_block + fun:deflate_slow + fun:deflate + fun:compress2 +} + +{ + libz longest_match + Memcheck:Cond + fun:longest_match + fun:deflate_slow + fun:deflate + fun:do_flush +} + +{ + libz longest_match2 + Memcheck:Cond + fun:longest_match + fun:deflate_slow + fun:deflate + fun:compress2 +} + +{ + libz longest_match 3 + Memcheck:Cond + fun:longest_match + fun:deflate_slow + fun:deflate + fun:gzclose +} + +{ + libz longest_match 4 + Memcheck:Cond + fun:longest_match + fun:deflate_slow + fun:deflate + fun:gzflush +} + +{ + libz deflate + Memcheck:Cond + obj:*/libz.so.* + obj:*/libz.so.* + fun:deflate + fun:compress2 +} + +{ + libz deflate2 + Memcheck:Cond + obj:*/libz.so.* + obj:*/libz.so.* + fun:deflate + obj:*/libz.so.* + fun:gzflush +} + + +# +# Warning from my_thread_init becasue mysqld dies before kill thread exists +# + +{ + my_thread_init kill thread memory loss second + Memcheck:Leak + fun:calloc + fun:my_thread_init + fun:kill_server_thread +} + +# +# Leaks reported in _dl_* internal functions on Linux amd64 / glibc2.3.2. +# + +{ + _dl_start invalid write8 + Memcheck:Addr8 + fun:_dl_start +} + +{ + _dl_start invalid write4 + Memcheck:Addr4 + fun:_dl_start +} + +{ + _dl_start/_dl_setup_hash invalid read8 + Memcheck:Addr8 + fun:_dl_setup_hash + fun:_dl_start +} + +{ + _dl_sysdep_start invalid write8 + Memcheck:Addr8 + fun:_dl_sysdep_start +} + +{ + _dl_init invalid write8 + Memcheck:Addr8 + fun:_dl_init +} + +{ + _dl_init invalid write4 + Memcheck:Addr4 + fun:_dl_init +} + +{ + _dl_init/_dl_init invalid read8 + Memcheck:Addr8 + fun:_dl_debug_initialize + fun:_dl_init +} + +{ + _dl_init/_dl_debug_state invalid read8 + Memcheck:Addr8 + fun:_dl_debug_state + fun:_dl_init +} + +{ + init invalid write8 + Memcheck:Addr8 + fun:init +} + +{ + fixup invalid write8 + Memcheck:Addr8 + fun:fixup +} + +{ + fixup/_dl_lookup_versioned_symbol invalid read8 + Memcheck:Addr8 + fun:_dl_lookup_versioned_symbol + fun:fixup +} + +{ + _dl_runtime_resolve invalid read8 + Memcheck:Addr8 + fun:_dl_runtime_resolve +} + +{ + __libc_start_main invalid write8 + Memcheck:Addr8 + fun:__libc_start_main +} + +{ + __libc_start_main/__sigjmp_save invalid write4 + Memcheck:Addr4 + fun:__sigjmp_save + fun:__libc_start_main +} + +# +# These seem to be libc threading stuff, not related to MySQL code (allocations +# during pthread_exit()). Googling shows other projects also using these +# suppressions. +# +# Note that these all stem from pthread_exit() deeper in the call stack, but +# Valgrind only allows the top four calls in the suppressions. +# + +{ + libc pthread_exit 1 + Memcheck:Leak + fun:malloc + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + +{ + libc pthread_exit 2 + Memcheck:Leak + fun:malloc + fun:_dl_map_object + fun:dl_open_worker + fun:_dl_catch_error +} + +{ + libc pthread_exit 3 + Memcheck:Leak + fun:malloc + fun:_dl_map_object_deps + fun:dl_open_worker + fun:_dl_catch_error +} + +{ + libc pthread_exit 4 + Memcheck:Leak + fun:calloc + fun:_dl_check_map_versions + fun:dl_open_worker + fun:_dl_catch_error +} + +{ + libc pthread_exit 5 + Memcheck:Leak + fun:calloc + fun:_dl_new_object + fun:_dl_map_object_from_fd + fun:_dl_map_object +} + + + +# +# This is seen internally in the system libraries on 64-bit RHAS3. +# + +{ + __lll_mutex_unlock_wake uninitialized + Memcheck:Param + futex(utime) + fun:__lll_mutex_unlock_wake +} + +# +# BUG#19940: NDB sends uninitialized parts of field buffers across the wire. +# This is "works as designed"; the uninitialized part is not used at the +# other end (but Valgrind cannot see this). +# +{ + bug19940 + Memcheck:Param + socketcall.sendto(msg) + fun:send + fun:_ZN15TCP_Transporter6doSendEv + fun:_ZN19TransporterRegistry11performSendEv + fun:_ZN19TransporterRegistry14forceSendCheckEi +} + +{ + OpenSSL_1 + Memcheck:Cond + fun:BN_num_bits_word + fun:BN_num_bits + fun:BN_mod_exp_mont_consttime + fun:BN_mod_exp_mont + obj:*libcrypto.so.* + obj:*libcrypto.so.* + fun:DH_generate_key + fun:ssl3_ctx_ctrl + fun:SSL_CTX_ctrl + fun:new_VioSSLAcceptorFd + fun:main +} + +{ + OpenSSL_2 + Memcheck:Value4 + fun:BN_num_bits_word + fun:BN_num_bits + fun:BN_mod_exp_mont_consttime + fun:BN_mod_exp_mont + obj:*libcrypto.so.* + obj:*libcrypto.so.* + fun:DH_generate_key + fun:ssl3_ctx_ctrl + fun:SSL_CTX_ctrl + fun:new_VioSSLAcceptorFd + fun:main +} + +{ + OpenSSL_3 + Memcheck:Value4 + fun:BN_mod_exp_mont_consttime + fun:BN_mod_exp_mont + obj:*libcrypto.so.* + obj:*libcrypto.so.* + fun:DH_generate_key + fun:ssl3_ctx_ctrl + fun:SSL_CTX_ctrl + fun:new_VioSSLAcceptorFd + fun:main +} + +{ + OpenSSL_4 + Memcheck:Cond + fun:BN_bin2bn + obj:*libcrypto.so.* + obj:*libcrypto.so.* + fun:DH_generate_key + fun:ssl3_ctx_ctrl + fun:SSL_CTX_ctrl + fun:new_VioSSLAcceptorFd + fun:main +} + +{ + OpenSSL_5 + Memcheck:Leak + fun:realloc + obj:*libcrypto.so.* + fun:CRYPTO_realloc + fun:lh_insert + fun:OBJ_NAME_add + fun:EVP_add_cipher + fun:OpenSSL_add_all_ciphers + fun:OPENSSL_add_all_algorithms_noconf + fun:new_VioSSLAcceptorFd + fun:main +} + +{ + OpenSSL_6 + Memcheck:Leak + fun:malloc + obj:*libcrypto.so.* + fun:CRYPTO_malloc + fun:lh_new + fun:OBJ_NAME_init + fun:OBJ_NAME_add + fun:EVP_add_cipher + fun:SSL_library_init + fun:new_VioSSLAcceptorFd + fun:main +} diff --git a/mysys/Makefile.am b/mysys/Makefile.am index a80df810c1c..90a28a9ce4b 100644 --- a/mysys/Makefile.am +++ b/mysys/Makefile.am @@ -51,7 +51,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c \ my_quick.c my_lockmem.c my_static.c \ my_sync.c my_getopt.c my_mkdir.c \ default.c my_compress.c checksum.c raid.cc \ - my_net.c my_semaphore.c my_port.c my_sleep.c \ + my_net.c my_port.c my_sleep.c \ charset.c charset-def.c my_bitmap.c my_bit.c md5.c \ my_gethostbyname.c rijndael.c my_aes.c sha1.c \ my_handler.c my_netware.c my_windac.c my_access.c diff --git a/mysys/default.c b/mysys/default.c index 6e40c48d82a..fadf6efbc5b 100644 --- a/mysys/default.c +++ b/mysys/default.c @@ -308,7 +308,7 @@ static int search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc, { char **ext; - for (ext= (char**) f_extensions; *ext; *ext++) + for (ext= (char**) f_extensions; *ext; ext++) { int error; if ((error= search_default_file_with_ext(args, alloc, dir, *ext, @@ -708,7 +708,7 @@ void print_defaults(const char *conf_file, const char **groups) #endif for (dirs=default_directories ; *dirs; dirs++) { - for (ext= (char**) f_extensions; *ext; *ext++) + for (ext= (char**) f_extensions; *ext; ext++) { const char *pos; char *end; diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index b17df3da260..a91002d3b4c 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -199,11 +199,11 @@ int init_io_cache(IO_CACHE *info, File file, uint cachesize, if (type != READ_NET && type != WRITE_NET) { /* Retry allocating memory in smaller blocks until we get one */ + cachesize=(uint) ((ulong) (cachesize + min_cache-1) & + (ulong) ~(min_cache-1)); for (;;) { uint buffer_block; - cachesize=(uint) ((ulong) (cachesize + min_cache-1) & - (ulong) ~(min_cache-1)); if (cachesize < min_cache) cachesize = min_cache; buffer_block = cachesize; @@ -222,7 +222,8 @@ int init_io_cache(IO_CACHE *info, File file, uint cachesize, } if (cachesize == min_cache) DBUG_RETURN(2); /* Can't alloc cache */ - cachesize= (uint) ((long) cachesize*3/4); /* Try with less memory */ + /* Try with less memory */ + cachesize= (uint) ((ulong) cachesize*3/4 & (ulong)~(min_cache-1)); } } diff --git a/mysys/my_error.c b/mysys/my_error.c index 8a377f63c7e..0f8ffb7c05f 100644 --- a/mysys/my_error.c +++ b/mysys/my_error.c @@ -82,6 +82,11 @@ int my_error(int nr,myf MyFlags, ...) If "%.*u" or "%.*d" are encountered, the precision number is read from the variable argument list but its value is ignored. */ + if (*tpos == '-') + { + tpos++; + olen--; + } prec_supplied= 0; if (*tpos== '.') { @@ -94,6 +99,14 @@ int my_error(int nr,myf MyFlags, ...) prec_chars= va_arg(ap, int); /* get length parameter */ prec_supplied= 1; } + else + { + for (prec_chars= 0; my_isdigit(&my_charset_latin1, *tpos); tpos++, olen--) + { + prec_supplied= 1; + prec_chars= prec_chars * 10 + *tpos - '0'; + } + } } if (!prec_supplied) diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c index 3f87186ccc3..075956c7af9 100644 --- a/mysys/my_getopt.c +++ b/mysys/my_getopt.c @@ -70,6 +70,7 @@ static void default_reporter(enum loglevel level, fprintf(stderr, "%s", "Info: "); vfprintf(stderr, format, args); va_end(args); + fflush(stderr); } /* diff --git a/mysys/my_pthread.c b/mysys/my_pthread.c index 315e966bf43..14ba6aabf0e 100644 --- a/mysys/my_pthread.c +++ b/mysys/my_pthread.c @@ -30,6 +30,8 @@ #define SCHED_POLICY SCHED_OTHER #endif +uint thd_lib_detected; + #ifndef my_pthread_setprio void my_pthread_setprio(pthread_t thread_id,int prior) { @@ -316,8 +318,6 @@ void sigwait_handle_sig(int sig) pthread_mutex_unlock(&LOCK_sigwait); } -extern pthread_t alarm_thread; - void *sigwait_thread(void *set_arg) { sigset_t *set=(sigset_t*) set_arg; @@ -336,7 +336,9 @@ void *sigwait_thread(void *set_arg) sigaction(i, &sact, (struct sigaction*) 0); } } - sigaddset(set,THR_CLIENT_ALARM); + /* Ensure that init_thr_alarm() is called */ + DBUG_ASSERT(thr_client_alarm); + sigaddset(set, thr_client_alarm); pthread_sigmask(SIG_UNBLOCK,(sigset_t*) set,(sigset_t*) 0); alarm_thread=pthread_self(); /* For thr_alarm */ diff --git a/mysys/my_seek.c b/mysys/my_seek.c index a9ae68cd5f0..805a5654ffc 100644 --- a/mysys/my_seek.c +++ b/mysys/my_seek.c @@ -24,7 +24,9 @@ my_off_t pos The expected position (absolute or relative) int whence A direction parameter and one of {SEEK_SET, SEEK_CUR, SEEK_END} - myf MyFlags Not used. + myf MyFlags MY_THREADSAFE must be set in case my_seek may be mixed + with my_pread/my_pwrite calls and fd is shared among + threads. DESCRIPTION The my_seek function is a wrapper around the system call lseek and @@ -51,7 +53,16 @@ my_off_t my_seek(File fd, my_off_t pos, int whence, whence, MyFlags)); DBUG_ASSERT(pos != MY_FILEPOS_ERROR); /* safety check */ - newpos=lseek(fd, pos, whence); +#if defined(THREAD) && !defined(HAVE_PREAD) + if (MyFlags & MY_THREADSAFE) + { + pthread_mutex_lock(&my_file_info[fd].mutex); + newpos= lseek(fd, pos, whence); + pthread_mutex_unlock(&my_file_info[fd].mutex); + } + else +#endif + newpos= lseek(fd, pos, whence); if (newpos == (os_off_t) -1) { my_errno=errno; diff --git a/mysys/my_semaphore.c b/mysys/my_semaphore.c deleted file mode 100644 index aa216cbc289..00000000000 --- a/mysys/my_semaphore.c +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 2002 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Simple implementation of semaphores, needed to compile MySQL on systems - that doesn't support semaphores. -*/ - -#include <my_global.h> -#include <my_semaphore.h> -#include <errno.h> - -#if !defined(__WIN__) && !defined(HAVE_SEMAPHORE_H) && defined(THREAD) - -int sem_init(sem_t * sem, int pshared, uint value) -{ - sem->count=value; - pthread_cond_init(&sem->cond, 0); - pthread_mutex_init(&sem->mutex, 0); - return 0; -} - -int sem_destroy(sem_t * sem) -{ - int err1,err2; - err1=pthread_cond_destroy(&sem->cond); - err2=pthread_mutex_destroy(&sem->mutex); - if (err1 || err2) - { - errno=err1 ? err1 : err2; - return -1; - } - return 0; -} - -int sem_wait(sem_t * sem) -{ - if ((errno=pthread_mutex_lock(&sem->mutex))) - return -1; - while (!sem->count) - pthread_cond_wait(&sem->cond, &sem->mutex); - if (errno) - return -1; - sem->count--; /* mutex is locked here */ - pthread_mutex_unlock(&sem->mutex); - return 0; -} - -int sem_trywait(sem_t * sem) -{ - if ((errno=pthread_mutex_lock(&sem->mutex))) - return -1; - if (sem->count) - sem->count--; - else - errno=EAGAIN; - pthread_mutex_unlock(&sem->mutex); - return errno ? -1 : 0; -} - - -int sem_post(sem_t * sem) -{ - if ((errno=pthread_mutex_lock(&sem->mutex))) - return -1; - sem->count++; - pthread_mutex_unlock(&sem->mutex); /* does it really matter what to do */ - pthread_cond_signal(&sem->cond); /* first: x_unlock or x_signal ? */ - return 0; -} - -int sem_post_multiple(sem_t * sem, uint count) -{ - if ((errno=pthread_mutex_lock(&sem->mutex))) - return -1; - sem->count+=count; - pthread_mutex_unlock(&sem->mutex); /* does it really matter what to do */ - pthread_cond_broadcast(&sem->cond); /* first: x_unlock or x_broadcast ? */ - return 0; -} - -int sem_getvalue(sem_t * sem, uint *sval) -{ - if ((errno=pthread_mutex_lock(&sem->mutex))) - return -1; - *sval=sem->count; - pthread_mutex_unlock(&sem->mutex); - return 0; -} - -#endif /* !defined(__WIN__) && !defined(HAVE_SEMAPHORE_H) && defined(THREAD) */ diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c index 878e1f6bfc6..42f025c39f3 100644 --- a/mysys/my_thr_init.c +++ b/mysys/my_thr_init.c @@ -21,6 +21,7 @@ #include "mysys_priv.h" #include <m_string.h> +#include <signal.h> #ifdef THREAD #ifdef USE_TLS @@ -44,6 +45,8 @@ pthread_mutexattr_t my_fast_mutexattr; pthread_mutexattr_t my_errorcheck_mutexattr; #endif +static uint get_thread_lib(void); + /* initialize thread environment @@ -57,6 +60,8 @@ pthread_mutexattr_t my_errorcheck_mutexattr; my_bool my_thread_global_init(void) { + thd_lib_detected= get_thread_lib(); + if (pthread_key_create(&THR_KEY_mysys,0)) { fprintf(stderr,"Can't initialize threads: error %d\n",errno); @@ -290,4 +295,20 @@ const char *my_thread_name(void) } #endif /* DBUG_OFF */ + +static uint get_thread_lib(void) +{ + char buff[64]; + +#ifdef _CS_GNU_LIBPTHREAD_VERSION + confstr(_CS_GNU_LIBPTHREAD_VERSION, buff, sizeof(buff)); + + if (!strncasecmp(buff, "NPTL", 4)) + return THD_LIB_NPTL; + if (!strncasecmp(buff, "linuxthreads", 12)) + return THD_LIB_LT; +#endif + return THD_LIB_OTHER; +} + #endif /* THREAD */ diff --git a/mysys/my_winsem.c b/mysys/my_winsem.c deleted file mode 100644 index e2713d189b2..00000000000 --- a/mysys/my_winsem.c +++ /dev/null @@ -1,406 +0,0 @@ -/* - * ------------------------------------------------------------- - * - * Module: my_semaphore.c (Original: semaphore.c from pthreads library) - * - * Purpose: - * Semaphores aren't actually part of the PThreads standard. - * They are defined by the POSIX Standard: - * - * POSIX 1003.1b-1993 (POSIX.1b) - * - * ------------------------------------------------------------- - * - * Pthreads-win32 - POSIX Threads Library for Win32 - * Copyright (C) 1998 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - * MA 02111-1307, USA - */ - -/* - NEED_SEM is not used in MySQL and should only be needed under - Windows CE. - - The big changes compared to the original version was to not allocate - any additional memory in sem_init() but to instead store everthing - we need in sem_t. - - TODO: - To get HAVE_CREATESEMAPHORE we have to define the struct - in my_semaphore.h -*/ - -#include "mysys_priv.h" -#ifdef __WIN__ -#include "my_semaphore.h" -#include <errno.h> - -/* - DOCPUBLIC - This function initializes an unnamed semaphore. the - initial value of the semaphore is 'value' - - PARAMETERS - sem Pointer to an instance of sem_t - - pshared If zero, this semaphore may only be shared between - threads in the same process. - If nonzero, the semaphore can be shared between - processes - - value Initial value of the semaphore counter - - RESULTS - 0 Successfully created semaphore, - -1 Failed, error in errno - - ERRNO - EINVAL 'sem' is not a valid semaphore, - ENOSPC A required resource has been exhausted, - ENOSYS Semaphores are not supported, - EPERM The process lacks appropriate privilege - -*/ - -int -sem_init (sem_t *sem, int pshared, unsigned int value) -{ - int result = 0; - - if (pshared != 0) - { - /* - We don't support creating a semaphore that can be shared between - processes - */ - result = EPERM; - } - else - { -#ifndef HAVE_CREATESEMAPHORE - sem->value = value; - sem->event = CreateEvent(NULL, - FALSE, /* manual reset */ - FALSE, /* initial state */ - NULL); - if (!sem->event) - result = ENOSPC; - else - { - if (value) - SetEvent(sem->event); - InitializeCriticalSection(&sem->sem_lock_cs); - } -#else /* HAVE_CREATESEMAPHORE */ - *sem = CreateSemaphore (NULL, /* Always NULL */ - value, /* Initial value */ - 0x7FFFFFFFL, /* Maximum value */ - NULL); /* Name */ - if (!*sem) - result = ENOSPC; -#endif /* HAVE_CREATESEMAPHORE */ - } - if (result != 0) - { - errno = result; - return -1; - } - return 0; -} /* sem_init */ - - -/* - DOCPUBLIC - This function destroys an unnamed semaphore. - - PARAMETERS - sem Pointer to an instance of sem_t - - RESULTS - 0 Successfully destroyed semaphore, - -1 Failed, error in errno - ERRNO - EINVAL 'sem' is not a valid semaphore, - ENOSYS Semaphores are not supported, - EBUSY Threads (or processes) are currently blocked on 'sem' -*/ - -int -sem_destroy (sem_t * sem) -{ - int result = 0; - -#ifdef EXTRA_DEBUG - if (sem == NULL || *sem == NULL) - { - errno=EINVAL; - return; - } -#endif /* EXTRA_DEBUG */ - -#ifndef HAVE_CREATESEMAPHORE - if (! CloseHandle(sem->event)) - result = EINVAL; - else - DeleteCriticalSection(&sem->sem_lock_cs); -#else /* HAVE_CREATESEMAPHORE */ - if (!CloseHandle(*sem)) - result = EINVAL; -#endif /* HAVE_CREATESEMAPHORE */ - if (result) - { - errno = result; - return -1; - } - *sem=0; /* Safety */ - return 0; -} /* sem_destroy */ - - -/* - DOCPUBLIC - This function tries to wait on a semaphore. If the - semaphore value is greater than zero, it decreases - its value by one. If the semaphore value is zero, then - this function returns immediately with the error EAGAIN - - PARAMETERS - sem Pointer to an instance of sem_t - - RESULTS - 0 Successfully decreased semaphore, - -1 Failed, error in errno - - ERRNO - EAGAIN The semaphore was already locked, - EINVAL 'sem' is not a valid semaphore, - ENOSYS Semaphores are not supported, - EINTR The function was interrupted by a signal, - EDEADLK A deadlock condition was detected. -*/ - -int -sem_trywait(sem_t * sem) -{ -#ifndef HAVE_CREATESEMAPHORE - /* not yet implemented! */ - int errno = EINVAL; - return -1; -#else /* HAVE_CREATESEMAPHORE */ -#ifdef EXTRA_DEBUG - if (sem == NULL || *sem == NULL) - { - errno=EINVAL; - return -1; - } -#endif /* EXTRA_DEBUG */ - if (WaitForSingleObject (*sem, 0) == WAIT_TIMEOUT) - { - errno= EAGAIN; - return -1; - } - return 0; -#endif /* HAVE_CREATESEMAPHORE */ - -} /* sem_trywait */ - - -#ifndef HAVE_CREATESEMAPHORE - -static void -ptw32_decrease_semaphore(sem_t * sem) -{ - EnterCriticalSection(&sem->sem_lock_cs); - DBUG_ASSERT(sem->value != 0); - sem->value--; - if (sem->value != 0) - SetEvent(sem->event); - LeaveCriticalSection(&sem->sem_lock_cs); -} - -static BOOL -ptw32_increase_semaphore(sem_t * sem, unsigned int n) -{ - BOOL result=FALSE; - - EnterCriticalSection(&sem->sem_lock_cs); - if (sem->value + n > sem->value) - { - sem->value += n; - SetEvent(sem->event); - result = TRUE; - } - LeaveCriticalSection(&sem->sem_lock_cs); - return result; -} - -#endif /* HAVE_CREATESEMAPHORE */ - - -/* - ------------------------------------------------------ - DOCPUBLIC - This function waits on a semaphore. If the - semaphore value is greater than zero, it decreases - its value by one. If the semaphore value is zero, then - the calling thread (or process) is blocked until it can - successfully decrease the value or until interrupted by - a signal. - - PARAMETERS - sem Pointer to an instance of sem_t - - RESULTS - 0 Successfully decreased semaphore, - -1 Failed, error in errno - - ERRNO - EINVAL 'Sem' is not a valid semaphore, - ENOSYS Semaphores are not supported, - EINTR The function was interrupted by a signal, - EDEADLK A deadlock condition was detected. -*/ - -int -sem_wait(sem_t *sem) -{ - int result; - -#ifdef EXTRA_DEBUG - if (sem == NULL || *sem == NULL) - { - errno=EINVAL; - return -1; - } -#endif /* EXTRA_DEBUG */ - -#ifndef HAVE_CREATESEMAPHORE - result=WaitForSingleObject(sem->event, INFINITE); -#else - result=WaitForSingleObject(*sem, INFINITE); -#endif - if (result == WAIT_FAILED || result == WAIT_ABANDONED_0) - result = EINVAL; - else if (result == WAIT_TIMEOUT) - result = ETIMEDOUT; - else - result=0; - if (result) - { - errno = result; - return -1; - } -#ifndef HAVE_CREATESEMAPHORE - ptw32_decrease_semaphore(sem); -#endif /* HAVE_CREATESEMAPHORE */ - return 0; -} - - -/* - ------------------------------------------------------ - DOCPUBLIC - This function posts a wakeup to a semaphore. If there - are waiting threads (or processes), one is awakened; - otherwise, the semaphore value is incremented by one. - - PARAMETERS - sem Pointer to an instance of sem_t - - RESULTS - 0 Successfully posted semaphore, - -1 Failed, error in errno - - ERRNO - EINVAL 'sem' is not a valid semaphore, - ENOSYS Semaphores are not supported, - -*/ - -int -sem_post (sem_t * sem) -{ -#ifdef EXTRA_DEBUG - if (sem == NULL || *sem == NULL) - { - errno=EINVAL; - return -1; - } -#endif /* EXTRA_DEBUG */ - -#ifndef HAVE_CREATESEMAPHORE - if (! ptw32_increase_semaphore(sem, 1)) -#else /* HAVE_CREATESEMAPHORE */ - if (! ReleaseSemaphore(*sem, 1, 0)) -#endif /* HAVE_CREATESEMAPHORE */ - { - errno=EINVAL; - return -1; - } - return 0; -} - - -/* - ------------------------------------------------------ - DOCPUBLIC - This function posts multiple wakeups to a semaphore. If there - are waiting threads (or processes), n <= count are awakened; - the semaphore value is incremented by count - n. - - PARAMETERS - sem Pointer to an instance of sem_t - count Counter, must be greater than zero. - - RESULTS - 0 Successfully posted semaphore, - -1 Failed, error in errno - - ERRNO - EINVAL 'sem' is not a valid semaphore or count is less - than or equal to zero. -*/ - -int -sem_post_multiple (sem_t * sem, unsigned int count) -{ -#ifdef EXTRA_DEBUG - if (sem == NULL || *sem == NULL || count <= 0) - { - errno=EINVAL; - return -1; - } -#endif /* EXTRA_DEBUG */ -#ifndef HAVE_CREATESEMAPHORE - if (! ptw32_increase_semaphore (sem, count)) -#else /* HAVE_CREATESEMAPHORE */ - if (! ReleaseSemaphore(*sem, count, 0)) -#endif /* HAVE_CREATESEMAPHORE */ - { - errno = EINVAL; - return -1; - } - return 0; -} - -int -sem_getvalue (sem_t *sem, unsigned int *sval) -{ - errno = ENOSYS; - return -1; -} /* sem_getvalue */ - -#endif /* __WIN__ */ diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c index e5b77de5e38..759544af17b 100644 --- a/mysys/thr_alarm.c +++ b/mysys/thr_alarm.c @@ -36,6 +36,7 @@ #define ETIME ETIMEDOUT #endif +uint thr_client_alarm; static int alarm_aborted=1; /* No alarm thread */ my_bool thr_alarm_inited= 0; volatile my_bool alarm_thread_running= 0; @@ -58,9 +59,7 @@ static void *alarm_handler(void *arg); #define reschedule_alarms() pthread_kill(alarm_thread,THR_SERVER_ALARM) #endif -#if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD) static sig_handler thread_alarm(int sig __attribute__((unused))); -#endif static int compare_ulong(void *not_used __attribute__((unused)), byte *a_ptr,byte* b_ptr) @@ -79,9 +78,16 @@ void init_thr_alarm(uint max_alarms) sigfillset(&full_signal_set); /* Neaded to block signals */ pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST); pthread_cond_init(&COND_alarm,NULL); -#if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD) - my_sigset(THR_CLIENT_ALARM,thread_alarm); + if (thd_lib_detected == THD_LIB_LT) + thr_client_alarm= SIGALRM; + else + thr_client_alarm= SIGUSR1; +#ifndef USE_ALARM_THREAD + if (thd_lib_detected != THD_LIB_LT) #endif + { + my_sigset(thr_client_alarm, thread_alarm); + } sigemptyset(&s); sigaddset(&s, THR_SERVER_ALARM); alarm_thread=pthread_self(); @@ -99,10 +105,11 @@ void init_thr_alarm(uint max_alarms) } #elif defined(USE_ONE_SIGNAL_HAND) pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */ -#if THR_SERVER_ALARM == THR_CLIENT_ALARM - my_sigset(THR_CLIENT_ALARM,process_alarm); /* Linuxthreads */ - pthread_sigmask(SIG_UNBLOCK, &s, NULL); -#endif + if (thd_lib_detected == THD_LIB_LT) + { + my_sigset(thr_client_alarm, process_alarm); /* Linuxthreads */ + pthread_sigmask(SIG_UNBLOCK, &s, NULL); + } #else my_sigset(THR_SERVER_ALARM, process_alarm); pthread_sigmask(SIG_UNBLOCK, &s, NULL); @@ -153,7 +160,7 @@ my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data) now=(ulong) time((time_t*) 0); pthread_sigmask(SIG_BLOCK,&full_signal_set,&old_mask); - pthread_mutex_lock(&LOCK_alarm); /* Lock from threads & alarms */ + pthread_mutex_lock(&LOCK_alarm); /* Lock from threads & alarms */ if (alarm_aborted > 0) { /* No signal thread */ DBUG_PRINT("info", ("alarm aborted")); @@ -273,18 +280,17 @@ sig_handler process_alarm(int sig __attribute__((unused))) This must be first as we can't call DBUG inside an alarm for a normal thread */ -#if THR_SERVER_ALARM == THR_CLIENT_ALARM - if (!pthread_equal(pthread_self(),alarm_thread)) + if (thd_lib_detected == THD_LIB_LT && + !pthread_equal(pthread_self(),alarm_thread)) { #if defined(MAIN) && !defined(__bsdi__) - printf("thread_alarm\n"); fflush(stdout); + printf("thread_alarm in process_alarm\n"); fflush(stdout); #endif #ifdef DONT_REMEMBER_SIGNAL - my_sigset(THR_CLIENT_ALARM,process_alarm); /* int. thread system calls */ + my_sigset(thr_client_alarm, process_alarm); /* int. thread system calls */ #endif return; } -#endif /* We have to do do the handling of the alarm in a sub function, @@ -328,7 +334,7 @@ static sig_handler process_alarm_part2(int sig __attribute__((unused))) alarm_data=(ALARM*) queue_element(&alarm_queue,i); alarm_data->alarmed=1; /* Info to thread */ if (pthread_equal(alarm_data->thread,alarm_thread) || - pthread_kill(alarm_data->thread, THR_CLIENT_ALARM)) + pthread_kill(alarm_data->thread, thr_client_alarm)) { #ifdef MAIN printf("Warning: pthread_kill couldn't find thread!!!\n"); @@ -352,7 +358,7 @@ static sig_handler process_alarm_part2(int sig __attribute__((unused))) alarm_data->alarmed=1; /* Info to thread */ DBUG_PRINT("info",("sending signal to waiting thread")); if (pthread_equal(alarm_data->thread,alarm_thread) || - pthread_kill(alarm_data->thread, THR_CLIENT_ALARM)) + pthread_kill(alarm_data->thread, thr_client_alarm)) { #ifdef MAIN printf("Warning: pthread_kill couldn't find thread!!!\n"); @@ -429,16 +435,13 @@ void end_thr_alarm(my_bool free_structures) if (error == ETIME || error == ETIMEDOUT) break; /* Don't wait forever */ } - if (!alarm_queue.elements) + delete_queue(&alarm_queue); + alarm_aborted= 1; + pthread_mutex_unlock(&LOCK_alarm); + if (!alarm_thread_running) /* Safety */ { - delete_queue(&alarm_queue); - alarm_aborted= 1; - pthread_mutex_unlock(&LOCK_alarm); - if (!alarm_thread_running) /* Safety */ - { - pthread_mutex_destroy(&LOCK_alarm); - pthread_cond_destroy(&COND_alarm); - } + pthread_mutex_destroy(&LOCK_alarm); + pthread_cond_destroy(&COND_alarm); } } else @@ -495,7 +498,7 @@ void thr_alarm_info(ALARM_INFO *info) ARGSUSED */ -#if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD) + static sig_handler thread_alarm(int sig) { #ifdef MAIN @@ -505,7 +508,6 @@ static sig_handler thread_alarm(int sig) my_sigset(sig,thread_alarm); /* int. thread system calls */ #endif } -#endif #ifdef HAVE_TIMESPEC_TS_SEC @@ -933,9 +935,7 @@ static void *signal_hand(void *arg __attribute__((unused))) sigaddset(&set,SIGINT); sigaddset(&set,SIGQUIT); sigaddset(&set,SIGTERM); -#if THR_CLIENT_ALARM != SIGHUP sigaddset(&set,SIGHUP); -#endif #ifdef SIGTSTP sigaddset(&set,SIGTSTP); #endif @@ -947,7 +947,7 @@ static void *signal_hand(void *arg __attribute__((unused))) #endif #endif /* OS2 */ printf("server alarm: %d thread alarm: %d\n", - THR_SERVER_ALARM,THR_CLIENT_ALARM); + THR_SERVER_ALARM, thr_client_alarm); DBUG_PRINT("info",("Starting signal and alarm handling thread")); for(;;) { @@ -1019,11 +1019,11 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) sigaddset(&set,SIGTSTP); #endif sigaddset(&set,THR_SERVER_ALARM); - sigdelset(&set,THR_CLIENT_ALARM); + sigdelset(&set, thr_client_alarm); (void) pthread_sigmask(SIG_SETMASK,&set,NULL); #ifdef NOT_USED sigemptyset(&set); - sigaddset(&set,THR_CLIENT_ALARM); + sigaddset(&set, thr_client_alarm); VOID(pthread_sigmask(SIG_UNBLOCK, &set, (sigset_t*) 0)); #endif #endif /* OS2 */ @@ -1073,8 +1073,8 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused))) } } pthread_mutex_unlock(&LOCK_thread_count); - end_thr_alarm(1); thr_alarm_info(&alarm_info); + end_thr_alarm(1); printf("Main_thread: Alarms: %u max_alarms: %u next_alarm_time: %lu\n", alarm_info.active_alarms, alarm_info.max_used_alarms, alarm_info.next_alarm_time); diff --git a/ndb/src/Makefile.am b/ndb/src/Makefile.am index eb1cf1c6543..056bb5a1734 100644 --- a/ndb/src/Makefile.am +++ b/ndb/src/Makefile.am @@ -6,6 +6,8 @@ ndblib_LTLIBRARIES = libndbclient.la libndbclient_la_SOURCES = +libndbclient_la_LDFLAGS = -version-info @NDB_SHARED_LIB_VERSION@ @NDB_LD_VERSION_SCRIPT@ + libndbclient_la_LIBADD = \ ndbapi/libndbapi.la \ common/transporter/libtransporter.la \ diff --git a/ndb/src/common/transporter/Packer.cpp b/ndb/src/common/transporter/Packer.cpp index 9eba335330d..503ff453e7e 100644 --- a/ndb/src/common/transporter/Packer.cpp +++ b/ndb/src/common/transporter/Packer.cpp @@ -21,7 +21,12 @@ #include <TransporterCallback.hpp> #include <RefConvert.hpp> +#ifdef ERROR_INSERT +Uint32 MAX_RECEIVED_SIGNALS = 1024; +#else #define MAX_RECEIVED_SIGNALS 1024 +#endif + Uint32 TransporterRegistry::unpack(Uint32 * readPtr, Uint32 sizeOfData, diff --git a/ndb/src/common/transporter/TCP_Transporter.hpp b/ndb/src/common/transporter/TCP_Transporter.hpp index 151ec261506..d081c6175a0 100644 --- a/ndb/src/common/transporter/TCP_Transporter.hpp +++ b/ndb/src/common/transporter/TCP_Transporter.hpp @@ -100,6 +100,10 @@ private: virtual void updateReceiveDataPtr(Uint32 bytesRead); virtual Uint32 get_free_buffer() const; + + inline bool hasReceiveData () const { + return receiveBuffer.sizeOfData > 0; + } protected: /** * Setup client/server and perform connect/accept diff --git a/ndb/src/common/transporter/TransporterRegistry.cpp b/ndb/src/common/transporter/TransporterRegistry.cpp index 3f190d16264..c459b5640dc 100644 --- a/ndb/src/common/transporter/TransporterRegistry.cpp +++ b/ndb/src/common/transporter/TransporterRegistry.cpp @@ -807,28 +807,13 @@ TransporterRegistry::poll_OSE(Uint32 timeOutMillis) Uint32 TransporterRegistry::poll_TCP(Uint32 timeOutMillis) { + bool hasdata = false; if (false && nTCPTransporters == 0) { tcpReadSelectReply = 0; return 0; } - struct timeval timeout; -#ifdef NDB_OSE - // Return directly if there are no TCP transporters configured - - if(timeOutMillis <= 1){ - timeout.tv_sec = 0; - timeout.tv_usec = 1025; - } else { - timeout.tv_sec = timeOutMillis / 1000; - timeout.tv_usec = (timeOutMillis % 1000) * 1000; - } -#else - timeout.tv_sec = timeOutMillis / 1000; - timeout.tv_usec = (timeOutMillis % 1000) * 1000; -#endif - NDB_SOCKET_TYPE maxSocketValue = -1; // Needed for TCP/IP connections @@ -851,8 +836,27 @@ TransporterRegistry::poll_TCP(Uint32 timeOutMillis) // Put the connected transporters in the socket read-set FD_SET(socket, &tcpReadset); } + hasdata |= t->hasReceiveData(); } + timeOutMillis = hasdata ? 0 : timeOutMillis; + + struct timeval timeout; +#ifdef NDB_OSE + // Return directly if there are no TCP transporters configured + + if(timeOutMillis <= 1){ + timeout.tv_sec = 0; + timeout.tv_usec = 1025; + } else { + timeout.tv_sec = timeOutMillis / 1000; + timeout.tv_usec = (timeOutMillis % 1000) * 1000; + } +#else + timeout.tv_sec = timeOutMillis / 1000; + timeout.tv_usec = (timeOutMillis % 1000) * 1000; +#endif + // The highest socket value plus one maxSocketValue++; @@ -867,7 +871,7 @@ TransporterRegistry::poll_TCP(Uint32 timeOutMillis) } #endif - return tcpReadSelectReply; + return tcpReadSelectReply || hasdata; } #endif @@ -902,25 +906,26 @@ TransporterRegistry::performReceive() #endif #ifdef NDB_TCP_TRANSPORTER - if(tcpReadSelectReply > 0) + for (int i=0; i<nTCPTransporters; i++) { - for (int i=0; i<nTCPTransporters; i++) - { - checkJobBuffer(); - TCP_Transporter *t = theTCPTransporters[i]; - const NodeId nodeId = t->getRemoteNodeId(); - const NDB_SOCKET_TYPE socket = t->getSocket(); - if(is_connected(nodeId)){ - if(t->isConnected() && FD_ISSET(socket, &tcpReadset)) + checkJobBuffer(); + TCP_Transporter *t = theTCPTransporters[i]; + const NodeId nodeId = t->getRemoteNodeId(); + const NDB_SOCKET_TYPE socket = t->getSocket(); + if(is_connected(nodeId)){ + if(t->isConnected()) + { + if (FD_ISSET(socket, &tcpReadset)) { - const int receiveSize = t->doReceive(); - if(receiveSize > 0) - { - Uint32 * ptr; - Uint32 sz = t->getReceiveData(&ptr); - Uint32 szUsed = unpack(ptr, sz, nodeId, ioStates[nodeId]); - t->updateReceiveDataPtr(szUsed); - } + t->doReceive(); + } + + if (t->hasReceiveData()) + { + Uint32 * ptr; + Uint32 sz = t->getReceiveData(&ptr); + Uint32 szUsed = unpack(ptr, sz, nodeId, ioStates[nodeId]); + t->updateReceiveDataPtr(szUsed); } } } diff --git a/ndb/src/common/util/File.cpp b/ndb/src/common/util/File.cpp index 12626f29e7d..00741d3a576 100644 --- a/ndb/src/common/util/File.cpp +++ b/ndb/src/common/util/File.cpp @@ -123,13 +123,25 @@ bool File_class::close() { bool rc = true; + int retval = 0; + if (m_file != NULL) { ::fflush(m_file); - rc = (::fclose(m_file) == 0 ? true : false); - m_file = NULL; // Try again? + retval = ::fclose(m_file); + while ( (retval != 0) && (errno == EINTR) ){ + retval = ::fclose(m_file); + } + if( retval == 0){ + rc = true; + } + else { + rc = false; + ndbout_c("ERROR: Close file error in File.cpp for %s",strerror(errno)); + } } - + m_file = NULL; + return rc; } diff --git a/ndb/src/kernel/blocks/ERROR_codes.txt b/ndb/src/kernel/blocks/ERROR_codes.txt index 874c128a56d..a1472cf8376 100644 --- a/ndb/src/kernel/blocks/ERROR_codes.txt +++ b/ndb/src/kernel/blocks/ERROR_codes.txt @@ -6,7 +6,7 @@ Next DBTUP 4014 Next DBLQH 5043 Next DBDICT 6006 Next DBDIH 7178 -Next DBTC 8038 +Next DBTC 8039 Next CMVMI 9000 Next BACKUP 10022 Next DBUTIL 11002 @@ -285,6 +285,11 @@ ABORT OF TCKEYREQ 8037 : Invalid schema version in TCINDXREQ +------ + +8038 : Simulate API disconnect just after SCAN_TAB_REQ + + CMVMI ----- 9000 Set RestartOnErrorInsert to restart -n diff --git a/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp b/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp index f9290a75afb..75a6117ce08 100644 --- a/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp +++ b/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp @@ -135,6 +135,7 @@ Cmvmi::~Cmvmi() #ifdef ERROR_INSERT NodeBitmask c_error_9000_nodes_mask; +extern Uint32 MAX_RECEIVED_SIGNALS; #endif void Cmvmi::execNDB_TAMPER(Signal* signal) @@ -164,6 +165,22 @@ void Cmvmi::execNDB_TAMPER(Signal* signal) kill(getpid(), SIGABRT); } #endif + +#ifdef ERROR_INSERT + if (signal->theData[0] == 9003) + { + if (MAX_RECEIVED_SIGNALS < 1024) + { + MAX_RECEIVED_SIGNALS = 1024; + } + else + { + MAX_RECEIVED_SIGNALS = 1 + (rand() % 128); + } + ndbout_c("MAX_RECEIVED_SIGNALS: %d", MAX_RECEIVED_SIGNALS); + CLEAR_ERROR_INSERT_VALUE; + } +#endif }//execNDB_TAMPER() void Cmvmi::execSET_LOGLEVELORD(Signal* signal) @@ -311,6 +328,16 @@ void Cmvmi::execSTTOR(Signal* signal) jamEntry(); if (theStartPhase == 1){ jam(); + + if(theConfig.lockPagesInMainMemory()) + { + int res = NdbMem_MemLockAll(); + if(res != 0){ + g_eventLogger.warning("Failed to memlock pages"); + warningEvent("Failed to memlock pages"); + } + } + sendSTTORRY(signal); return; } else if (theStartPhase == 3) { @@ -331,18 +358,6 @@ void Cmvmi::execSTTOR(Signal* signal) execOPEN_COMREQ(signal); globalData.theStartLevel = NodeState::SL_STARTED; sendSTTORRY(signal); - } else { - jam(); - - if(theConfig.lockPagesInMainMemory()){ - int res = NdbMem_MemLockAll(); - if(res != 0){ - g_eventLogger.warning("Failed to memlock pages"); - warningEvent("Failed to memlock pages"); - } - } - - sendSTTORRY(signal); } } diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp index 59e6bd35baf..cdab0635dce 100644 --- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp +++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp @@ -8619,6 +8619,20 @@ void Dbtc::execSCAN_TABREQ(Signal* signal) * IF ANY TO RECEIVE. **********************************************************/ scanptr.p->scanState = ScanRecord::WAIT_AI; + + if (ERROR_INSERTED(8038)) + { + /** + * Force API_FAILREQ + */ + DisconnectRep * const rep = (DisconnectRep *)signal->getDataPtrSend(); + rep->nodeId = refToNode(apiConnectptr.p->ndbapiBlockref); + rep->err = 8038; + + EXECUTE_DIRECT(CMVMI, GSN_DISCONNECT_REP, signal, 2); + CLEAR_ERROR_INSERT_VALUE; + } + return; SCAN_error_check: @@ -8706,6 +8720,7 @@ void Dbtc::initScanrec(ScanRecordPtr scanptr, jam(); ScanFragRecPtr ptr; ndbrequire(list.seize(ptr)); + ptr.p->scanFragState = ScanFragRec::IDLE; ptr.p->scanRec = scanptr.i; ptr.p->scanFragId = 0; ptr.p->m_apiPtr = cdata[i]; @@ -9457,9 +9472,17 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){ ScanRecord* scanP = scanPtr.p; ndbrequire(scanPtr.p->scanState != ScanRecord::IDLE); + ScanRecord::ScanState old = scanPtr.p->scanState; scanPtr.p->scanState = ScanRecord::CLOSING_SCAN; scanPtr.p->m_close_scan_req = req_received; + if (old == ScanRecord::WAIT_FRAGMENT_COUNT) + { + jam(); + scanPtr.p->scanState = old; + return; // Will continue on execDI_FCOUNTCONF + } + /** * Queue : Action * ============= : ================= @@ -9487,11 +9510,22 @@ Dbtc::close_scan_req(Signal* signal, ScanRecordPtr scanPtr, bool req_received){ ScanFragRecPtr curr = ptr; // Remove while iterating... running.next(ptr); - if(curr.p->scanFragState == ScanFragRec::WAIT_GET_PRIMCONF){ + switch(curr.p->scanFragState){ + case ScanFragRec::IDLE: + jam(); // real early abort + ndbrequire(old == ScanRecord::WAIT_AI); + running.release(curr); + continue; + case ScanFragRec::WAIT_GET_PRIMCONF: jam(); continue; + case ScanFragRec::LQH_ACTIVE: + jam(); + break; + default: + jamLine(curr.p->scanFragState); + ndbrequire(false); } - ndbrequire(curr.p->scanFragState == ScanFragRec::LQH_ACTIVE); curr.p->startFragTimer(ctcTimer); curr.p->scanFragState = ScanFragRec::LQH_ACTIVE; diff --git a/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp b/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp index e16d3df6d8d..37bf33f0313 100644 --- a/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp +++ b/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp @@ -390,6 +390,7 @@ Dbtup::commitRecord(Signal* signal, fragptr.p = regFragPtr; tabptr.p = regTabPtr; + Uint32 hashValue = firstOpPtr.p->hashValue; if (opType == ZINSERT_DELETE) { ljam(); @@ -412,6 +413,7 @@ Dbtup::commitRecord(Signal* signal, //-------------------------------------------------------------------- Uint32 saveOpType = regOperPtr->optype; regOperPtr->optype = ZINSERT; + regOperPtr->hashValue = hashValue; operPtr.p = regOperPtr; checkDetachedTriggers(signal, @@ -444,6 +446,8 @@ Dbtup::commitRecord(Signal* signal, befOpPtr.p->changeMask.clear(); befOpPtr.p->changeMask.bitOR(attributeMask); befOpPtr.p->gci = regOperPtr->gci; + befOpPtr.p->optype = ZUPDATE; + befOpPtr.p->hashValue = hashValue; befOpPtr.p->optype = opType; operPtr.p = befOpPtr.p; @@ -478,11 +482,13 @@ Dbtup::commitRecord(Signal* signal, Uint32 fragPageId = befOpPtr.p->fragPageId; Uint32 pageIndex = befOpPtr.p->pageIndex; + befOpPtr.p->optype = ZDELETE; befOpPtr.p->realPageId = befOpPtr.p->realPageIdC; befOpPtr.p->pageOffset = befOpPtr.p->pageOffsetC; befOpPtr.p->fragPageId = befOpPtr.p->fragPageIdC; befOpPtr.p->pageIndex = befOpPtr.p->pageIndexC; befOpPtr.p->gci = regOperPtr->gci; + befOpPtr.p->hashValue = hashValue; befOpPtr.p->optype = opType; operPtr.p = befOpPtr.p; diff --git a/ndb/src/kernel/vm/SimulatedBlock.cpp b/ndb/src/kernel/vm/SimulatedBlock.cpp index 9b52ac65331..d5ba3ac63c1 100644 --- a/ndb/src/kernel/vm/SimulatedBlock.cpp +++ b/ndb/src/kernel/vm/SimulatedBlock.cpp @@ -658,24 +658,26 @@ SimulatedBlock::allocRecord(const char * type, size_t s, size_t n, bool clear) void * p = NULL; size_t size = n*s; + Uint64 real_size = (Uint64)((Uint64)n)*((Uint64)s); refresh_watch_dog(); - if (size > 0){ + if (real_size > 0){ #ifdef VM_TRACE_MEM - ndbout_c("%s::allocRecord(%s, %u, %u) = %u bytes", + ndbout_c("%s::allocRecord(%s, %u, %u) = %llu bytes", getBlockName(number()), type, s, n, - size); + real_size); #endif - p = NdbMem_Allocate(size); + if( real_size == (Uint64)size ) + p = NdbMem_Allocate(size); if (p == NULL){ char buf1[255]; char buf2[255]; BaseString::snprintf(buf1, sizeof(buf1), "%s could not allocate memory for %s", getBlockName(number()), type); - BaseString::snprintf(buf2, sizeof(buf2), "Requested: %ux%u = %u bytes", - (Uint32)s, (Uint32)n, (Uint32)size); + BaseString::snprintf(buf2, sizeof(buf2), "Requested: %ux%u = %llu bytes", + (Uint32)s, (Uint32)n, (Uint64)real_size); ERROR_SET(fatal, ERR_MEMALLOC, buf1, buf2); } diff --git a/ndb/src/libndb.ver.in b/ndb/src/libndb.ver.in new file mode 100644 index 00000000000..72bf93d196f --- /dev/null +++ b/ndb/src/libndb.ver.in @@ -0,0 +1,2 @@ +libndbclient_@NDB_SHARED_LIB_MAJOR_VERSION@ { global: *; }; + diff --git a/ndb/src/mgmclient/CommandInterpreter.cpp b/ndb/src/mgmclient/CommandInterpreter.cpp index 65d5b038707..e38c1109077 100644 --- a/ndb/src/mgmclient/CommandInterpreter.cpp +++ b/ndb/src/mgmclient/CommandInterpreter.cpp @@ -1627,6 +1627,19 @@ CommandInterpreter::executeStatus(int processId, ndbout << processId << ": Node not found" << endl; return -1; } + if (cl->node_states[i].node_type != NDB_MGM_NODE_TYPE_NDB){ + if (cl->node_states[i].version != 0){ + version = cl->node_states[i].version; + ndbout << "Node "<< cl->node_states[i].node_id <<": connected" ; + ndbout_c(" (Version %d.%d.%d)", + getMajor(version) , + getMinor(version), + getBuild(version)); + + }else + ndbout << "Node "<< cl->node_states[i].node_id <<": not connected" << endl; + return 0; + } status = cl->node_states[i].node_status; startPhase = cl->node_states[i].start_phase; version = cl->node_states[i].version; diff --git a/ndb/test/ndbapi/testNdbApi.cpp b/ndb/test/ndbapi/testNdbApi.cpp index 3a06269f8dc..1ef8c628dd4 100644 --- a/ndb/test/ndbapi/testNdbApi.cpp +++ b/ndb/test/ndbapi/testNdbApi.cpp @@ -1131,7 +1131,36 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ return result; } +int +runBug28443(NDBT_Context* ctx, NDBT_Step* step) +{ + int result = NDBT_OK; + int records = ctx->getNumRecords(); + + NdbRestarter restarter; + + restarter.insertErrorInAllNodes(9003); + + for (Uint32 i = 0; i<ctx->getNumLoops(); i++) + { + HugoTransactions hugoTrans(*ctx->getTab()); + if (hugoTrans.loadTable(GETNDB(step), records, 2048) != 0) + { + result = NDBT_FAILED; + goto done; + } + if (runClearTable(ctx, step) != 0) + { + result = NDBT_FAILED; + goto done; + } + } + +done: + restarter.insertErrorInAllNodes(9003); + return result; +} NDBT_TESTSUITE(testNdbApi); TESTCASE("MaxNdb", @@ -1212,6 +1241,11 @@ TESTCASE("Bug_11133", INITIALIZER(runBug_11133); FINALIZER(runClearTable); } +TESTCASE("Bug28443", + ""){ + INITIALIZER(runBug28443); + FINALIZER(runClearTable); +} NDBT_TESTSUITE_END(testNdbApi); int main(int argc, const char** argv){ diff --git a/ndb/test/ndbapi/testScan.cpp b/ndb/test/ndbapi/testScan.cpp index f1018d29846..e228c9c0bd1 100644 --- a/ndb/test/ndbapi/testScan.cpp +++ b/ndb/test/ndbapi/testScan.cpp @@ -622,7 +622,7 @@ int runRestarter(NDBT_Context* ctx, NDBT_Step* step){ int nodeId = restarter.getDbNodeId(lastId); lastId = (lastId + 1) % restarter.getNumDbNodes(); - if(restarter.restartOneDbNode(nodeId) != 0){ + if(restarter.restartOneDbNode(nodeId, false, false, true) != 0){ g_err << "Failed to restartNextDbNode" << endl; result = NDBT_FAILED; break; @@ -1080,6 +1080,39 @@ int runScanRestart(NDBT_Context* ctx, NDBT_Step* step){ } +int +runBug24447(NDBT_Context* ctx, NDBT_Step* step){ + int loops = 1; //ctx->getNumLoops(); + int records = ctx->getNumRecords(); + int abort = ctx->getProperty("AbortProb", 15); + NdbRestarter restarter; + HugoTransactions hugoTrans(*ctx->getTab()); + int i = 0; + while (i<loops && !ctx->isTestStopped()) + { + g_info << i++ << ": "; + + int nodeId = restarter.getRandomNotMasterNodeId(rand()); + if (nodeId == -1) + nodeId = restarter.getMasterNodeId(); + if (restarter.insertErrorInNode(nodeId, 8038) != 0) + { + ndbout << "Could not insert error in node="<<nodeId<<endl; + return NDBT_FAILED; + } + + for (Uint32 j = 0; i<10; i++) + { + hugoTrans.scanReadRecords(GETNDB(step), records, abort, 0, + NdbOperation::LM_CommittedRead); + } + + } + restarter.insertErrorInAllNodes(0); + + return NDBT_OK; +} + NDBT_TESTSUITE(testScan); TESTCASE("ScanRead", "Verify scan requirement: It should be possible "\ @@ -1540,6 +1573,12 @@ TESTCASE("ScanRestart", STEP(runScanRestart); FINALIZER(runClearTable); } +TESTCASE("Bug24447", + ""){ + INITIALIZER(runLoadTable); + STEP(runBug24447); + FINALIZER(runClearTable); +} NDBT_TESTSUITE_END(testScan); int main(int argc, const char** argv){ diff --git a/ndb/test/run-test/daily-basic-tests.txt b/ndb/test/run-test/daily-basic-tests.txt index 39782ecbbc7..fffe1ac9046 100644 --- a/ndb/test/run-test/daily-basic-tests.txt +++ b/ndb/test/run-test/daily-basic-tests.txt @@ -439,6 +439,10 @@ cmd: testScan args: -l 100 -n Scan-bug8262 T7 max-time: 500 +cmd: testScan +args: -n Bug24447 T1 + +max-time: 500 cmd: testNodeRestart args: -n Bug15587 T1 @@ -602,6 +606,10 @@ max-time: 500 cmd: testNdbApi args: -n Bug_11133 T1 +max-time: 1000 +cmd: testNdbApi +args: -n BugBug28443 + #max-time: 500 #cmd: testInterpreter #args: T1 diff --git a/scripts/fill_func_tables.sh b/scripts/fill_func_tables.sh deleted file mode 100644 index b7bd3736392..00000000000 --- a/scripts/fill_func_tables.sh +++ /dev/null @@ -1,239 +0,0 @@ -#!@PERL@ -# -# Copyright (C) 2003 MySQL AB -# For a more info consult the file COPYRIGHT distributed with this file. -# -# fill_func_tables - parse ../Docs/manual.texi -# -# Original version by Victor Vagin <vva@mysql.com> -# - -my $cat_name= ""; -my $func_name= ""; -my $text= ""; -my $example= ""; - -local $mode= ""; - -sub prepare_name -{ - my ($a)= @_; - - $a =~ s/(\@itemize \@bullet)/ /g; - $a =~ s/(\@end itemize)/ /g; - $a =~ s/(\@end multitable)/ /g; - $a =~ s/(\@end table)/ /g; - $a =~ s/(\@cindex(.*?)\n)/ /g; - $a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g; - $a =~ s/(\@node(.*?)\n)/ /g; - $a =~ s/(\@tab)/\t/g; - $a =~ s/\@item/ /g; - $a =~ s/\@code\{((.|\n)+?)\}/$1/go; - $a =~ s/\@strong\{(.+?)\}/$1/go; - $a =~ s/\@samp\{(.+?)\}/$1/go; - $a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go; - $a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go; - $a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go; - $a =~ s/\'/\'\'/g; - $a =~ s/\\/\\\\/g; - $a =~ s/\`/\`\`/g; - - $a =~ s/\@table \@code/ /g; - - $a =~ s/\(\)//g; - - $a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3/gxs; #$a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3 $1/gxs; - $a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1/gxs;#$a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1 $2/gxs; - $a =~ s/((\w|\s)+)\((.+)\)/$1/gxs; - - return $a; -} - -sub prepare_text -{ - my ($a)= @_; - - $a =~ s/(\@itemize \@bullet)/ /g; - $a =~ s/(\@end itemize)/ /g; - $a =~ s/(\@end multitable)/ /g; - $a =~ s/(\@end table)/ /g; - $a =~ s/(\@cindex(.*?)\n)/ /g; - $a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g; - $a =~ s/(\@node(.*?)\n)/ /g; - $a =~ s/(\@tab)/\t/g; - $a =~ s/\@itemx/ /g; - $a =~ s/\@item/ /g; - $a =~ s/\@code\{((.|\n)+?)\}/$1/go; - $a =~ s/\@strong\{(.+?)\}/$1/go; - $a =~ s/\@samp\{(.+?)\}/$1/go; - $a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go; - $a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go; - $a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go; - $a =~ s/\'/\'\'/g; - $a =~ s/\\/\\\\/g; - $a =~ s/\`/\`\`/g; - $a =~ s/(\n*?)$//g; - $a =~ s/\n/\\n/g; - - $a =~ s/\@table \@code/ /g; - - return $a; -} - -sub prepare_example -{ - my ($a)= @_; - - $a =~ s/\'/\'\'/g; - $a =~ s/\\/\\\\/g; - $a =~ s/\`/\`\`/g; - $a =~ s/(\n*?)$//g; - $a =~ s/\n/\\n/g; - - return $a; -} - -sub flush_all -{ - my ($mode) = @_; - - if ($mode eq ""){return;} - - $func_name= prepare_name($func_name); - $text= prepare_text($text); - $example= prepare_example($example); - - if ($func_name ne "" && $text ne "" && !($func_name =~ /[abcdefghikjlmnopqrstuvwxyz]/)){ - print "INSERT INTO function (name,description,example) VALUES ("; - print "'$func_name',"; - print "'$text',"; - print "'$example'"; - print ");\n"; - print "INSERT INTO function_category (cat_id,func_id) VALUES (\@cur_category,LAST_INSERT_ID());\n"; - } - - $func_name= ""; - $text= ""; - $example= ""; - $mode= ""; -} - -sub new_category -{ - my ($category)= @_; - - $category= prepare_text($category); - - print "INSERT INTO function_category_name (name) VALUES (\'$category\');\n"; - print "SELECT \@cur_category:=LAST_INSERT_ID();\n"; -} - -print "INSERT INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n"; -print "CREATE DATABASE mysql_help;\n"; - -print "USE mysql_help;\n"; - -print "DROP TABLE IF EXISTS function;\n"; -print "CREATE TABLE function ("; -print " func_id int unsigned not null auto_increment,"; -print " name varchar(64) not null,"; -print " url varchar(128) not null,"; -print " description text not null,"; -print " example text not null,"; -print " min_args tinyint not null,"; -print " max_args tinyint,"; -print " date_created datetime not null,"; -print " last_modified timestamp not null,"; -print " primary key (func_id)"; -print ") type=myisam;\n\n"; - -print "DROP TABLE IF EXISTS function_category_name;\n"; -print "CREATE TABLE function_category_name ("; -print " cat_id smallint unsigned not null auto_increment,"; -print " name varchar(64) not null,"; -print " url varchar(128) not null,"; -print " date_created datetime not null,"; -print " last_modified timestamp not null,"; -print " primary key (cat_id)"; -print ") type=myisam;\n\n"; - -print "DROP TABLE IF EXISTS function_category;\n"; -print "CREATE TABLE function_category ("; -print " cat_id smallint unsigned not null references function_category_name,"; -print " func_id int unsigned not null references function,"; -print " primary key (cat_id, func_id)"; -print ") type=myisam;\n\n"; - -print "DELETE FROM function_category_name;\n"; -print "DELETE FROM function_category;\n"; -print "DELETE FROM function;\n"; -print "SELECT \@cur_category:=null;\n\n"; - -my $in_section_6_3= 0; - -for(<>) -{ - if ($_=~/\@section Functions for Use in \@code{SELECT} and \@code{WHERE} Clauses/ && - !$in_section_6_3){ - $in_section_6_3= 1; - next; - } - - if ($_=~/\@section/ && $in_section_6_3){ - $in_section_6_3= 0; - next; - } - - if (!$in_section_6_3) { next; } - - my $c_name= ""; - - ($c_name)=m|\@c for_mysql_help,(.+?)$|; - if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){ - ($cat_name)= $c_name; - new_category($cat_name); - next; - } - - ($c_name)=m|\@subsubsection (.+?)$|; - if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){ - ($cat_name)= $c_name; - new_category($cat_name); - next; - } - - ($c_name)=m|\@subsection (.+?)$|; - if (!($c_name eq "") && ! ($c_name =~ m/$cat_name/i)){ - ($cat_name)= $c_name; - new_category($cat_name); - next; - } - - ($f_name)=m|\@findex (.+?)$|; - if (!($f_name eq "")){ - flush_all($mode); - ($func_name)= ($f_name); - $mode= "text"; - next; - } - - if ($_=~/\@example/ && ($mode eq "text")){ - $mode= "example"; - next; - } - - if ($_=~/\@end example/ && ($mode eq "example")){ - flush_all($mode); - next; - } - - if ($mode eq "text") { $text .= $_; } - if ($mode eq "example") { $example .= $_; } -} - - -print "DELETE function_category_name "; -print "FROM function_category_name "; -print "LEFT JOIN function_category ON function_category.cat_id=function_category_name.cat_id "; -print "WHERE function_category.cat_id is null;" - diff --git a/scripts/fill_help_tables.sh b/scripts/fill_help_tables.sh deleted file mode 100644 index fc0c684c2dc..00000000000 --- a/scripts/fill_help_tables.sh +++ /dev/null @@ -1,603 +0,0 @@ -#!@PERL@ -# -# Copyright (C) 2003 MySQL AB -# For a more info consult the file COPYRIGHT distributed with this file. -# -# This script generates the SQL statements required by mysql_install_db to -# fill up the tables for the server-side online function help, which can be -# invoked with "help <function>" from the MySQL client. -# -# Usage: -# fill_help_tables OPTIONS < manual.texi > fill_help_tables.sql -# -# --help display this helpscreen and exit -# --verbose print information about help completeness to STDERR -# --lexems=path path to file with lexems. it is used with verbose option. -# default value is ../sql/lex.h -# Examples: -# ./fill_help_tables --help -# ./fill_help_tables --verbose < manual.texi > fill_help_tables.sql -# ./fill_help_tables < manual.texi > fill_help_tables.sql -# -# Please note, that you first need to update Docs/manual.texi with the -# manual file from the separate "mysqldoc" BitKeeper-Tree! The manual.texi -# included in the source tree is just an empty stub file - the full manual -# is now maintained in a separate tree. -# -# extra tags in manual.texi: -# -# @c help_category <category_name>[@<parent_category_name>] -# -# @c description_for_help_topic <topic_name> <keyword1> <keyword2> -# .... -# @c end_description_for_help_topic -# -# @c example_for_help_topic <topic_name> -# @example -# .... -# @end example -# -# -# Original version by Victor Vagin <vva@mysql.com> -# - -use strict; -use Getopt::Long; - -my $insert_portion_size= 15; -my $error_prefix= "---- help parsing errors :"; - -my $path_to_lex_file= "../sql/lex.h"; -my $verbose_option= 0; -my $help_option= 0; - -my $cur_line= 0; -my $count_errors= 0; - -GetOptions( - "help",\$help_option, - "verbose",\$verbose_option, - "lexems=s",\$path_to_lex_file -); - -if ($help_option ne 0) -{ - print <<_HELP; - -This script generates the SQL statements required by mysql_install_db to -fill up the tables for the server-side online function help, which can be -invoked with "help <function>" from the MySQL client. - -Usage: - fill_help_tables OPTIONS < manual.texi > fill_help_tables.sql - - --help display this helpscreen and exit - --verbose print information about help completeness to STDERR - --lexems=path path to file with lexems. it is used with verbose option. - default value is ../sql/lex.h - -Examples: - ./fill_help_tables --help - ./fill_help_tables --verbose < manual.texi > fill_help_tables.sql - ./fill_help_tables < manual.texi > fill_help_tables.sql - -_HELP - exit; -} - -my $current_category= ""; -my $current_parent_category= ""; -my $next_example_for_topic= ""; - -my %topics; -my %categories; -my %keywords; - -$categories{Contents}->{__parent_category__}= ""; - -sub print_error -{ - my ($text)= @_; - if ($count_errors==0) - { - print STDERR "$error_prefix\n"; - } - print STDERR "line $cur_line : $text"; - $count_errors++; -} - -sub add_topic_to_category -{ - my ($topic_name)= @_; - - $categories{$current_category}->{$topic_name}= $topics{$topic_name}; - my $category= $categories{$current_category}; - $category->{__name__}= $current_category; - - if (exists($category->{__parent_category__})) - { - my $old_parent= $category->{__parent_category__}; - if ($old_parent ne $current_parent_category) - { - print_error "wrong parent for $current_category\n"; - } - } - - if ($current_parent_category ne "") - { - $category->{__parent_category__}= $current_parent_category; - } - - if (exists($topics{$topic_name}->{category})) - { - my $old_category= $topics{$topic_name}->{category}; - if ($old_category ne $category) - { - print_error "wrong category for $topic_name (first one's \"$old_category->{__name__}\" second one's \"$current_category\")\n"; - } - } - - $topics{$topic_name}->{category}= $category; -} - -sub add_example -{ - my ($topic_name,$example)= @_; - - $topic_name=~ tr/a-z/A-Z/; - - if (exists($topics{$topic_name}->{example})) - { - print_error "double example for $topic_name\n"; - } - - $topics{$topic_name}->{example}= $example; - add_topic_to_category($topic_name); -} - -sub add_description -{ - my ($topic_name,$description)= @_; - - $topic_name=~ tr/a-z/A-Z/; - - if (exists($topics{$topic_name}->{description})) - { - print_error "double description for $topic_name\n"; - } - $topics{$topic_name}->{description}= $description; - add_topic_to_category($topic_name); -} - -sub add_keyword -{ - my ($topic_name,$keyword)= @_; - - $topic_name=~ tr/a-z/A-Z/; - $keyword=~ tr/a-z/A-Z/; - - push(@{$topics{$topic_name}->{keywords}},$keyword); - if (exists($keywords{$keyword}->{$topic_name})) - { - print_error "double keyword $keyword for $topic_name\n"; - } - $keywords{$keyword}->{$topic_name}= $topics{$topic_name}; -} - -sub prepare_name -{ - my ($a)= @_; - - $a =~ s/(\@itemize \@bullet)/ /g; - $a =~ s/(\@end itemize)/ /g; - $a =~ s/(\@end multitable)/ /g; - $a =~ s/(\@end table)/ /g; - $a =~ s/(\@cindex(.*?)\n)/ /g; - $a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g; - $a =~ s/(\@node(.*?)\n)/ /g; - $a =~ s/(\@tab)/\t/g; - $a =~ s/\@item/ /g; - $a =~ s/\@minus\{\}/-/g; - $a =~ s/\@dots\{\}/.../g; - $a =~ s/\@var\{((.|\n)+?)\}/$1/go; - $a =~ s/\@command\{((.|\n)+?)\}/$1/go; - $a =~ s/\@code\{((.|\n)+?)\}/$1/go; - $a =~ s/\@strong\{(.+?)\}/$1/go; - $a =~ s/\@samp\{(.+?)\}/'$1'/go; - $a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go; - $a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go; - $a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go; - $a =~ s/\'/\'\'/g; - $a =~ s/\\/\\\\/g; - $a =~ s/\`/\`\`/g; - - $a =~ s/\@table \@code/ /g; - $a =~ s/\(\)//g; - $a =~ s/\"/\\\"/g; - - $a =~ s/((\w|\s)+)\(([\+-=><\/%*!<>\s]+)\)/$3/gxs; - $a =~ s/([\+-=><\/%*!<>\s]+)\(((\w|\s)+)\)/$1/gxs; - $a =~ s/((\w|\s)+)\((.+)\)/$1/gxs; - - $a =~ s/((\s)+)$//g; - - return $a; -} - -sub prepare_description -{ - my ($a)= @_; - - $a =~ s/(\@itemize \@bullet\n)//g; - $a =~ s/(\@c help_keyword (.*?)\n)//g; - $a =~ s/(\@end itemize\n)//g; - $a =~ s/(\@end example\n)//g; - $a =~ s/(\@example\n)//g; - $a =~ s/(\@{)/{/g; - $a =~ s/(\@})/}/g; - $a =~ s/(\@end multitable)/ /g; - $a =~ s/(\@end table)/ /g; - $a =~ s/(\@cindex(.*?)\n)//g; - $a =~ s/(\@findex(.*?)\n)//g; - $a =~ s/(\@table(.*?)\n)//g; - $a =~ s/(\@multitable \@columnfractions(.*?)\n)/ /g; - $a =~ s/(\@node(.*?)\n)/ /g; - $a =~ s/(\@tab)/\t/g; - $a =~ s/\@itemx/ /g; - $a =~ s/(\@item\n(\s*?))(\S)/ --- $3/g; - $a =~ s/(\@item)/ /g; - $a =~ s/(\@tindex\s(.*?)\n)//g; - $a =~ s/(\@c\s(.*?)\n)//g; - $a =~ s/\@minus\{\}/-/g; - $a =~ s/\@dots\{\}/.../g; - $a =~ s/\@var\{((.|\n)+?)\}/$1/go; - $a =~ s/\@command\{((.|\n)+?)\}/$1/go; - $a =~ s/\@code\{((.|\n)+?)\}/$1/go; - $a =~ s/\@strong\{(.+?)\}/$1/go; - $a =~ s/\@samp\{(.+?)\}/'$1'/go; - $a =~ s/\@emph\{((.|\n)+?)\}/\/$1\//go; - $a =~ s/\@xref\{((.|\n)+?)\}/See also : [$1]/go; - $a =~ s/\@ref\{((.|\n)+?)\}/[$1]/go; - $a =~ s/\@w\{((.|\n)+?)\}/$1/go; - $a =~ s/\@strong\{((.|\n)+?)\}/\n!!!!\n$1\n!!!!\n/go; - $a =~ s/\@file\{((.|\n)+?)\}/\*$1/go; - $a =~ s/\\/\\\\/g; - $a =~ s/\n\n$/\n/g; - $a =~ s/\n\n$/\n/g; - $a =~ s/\n\n$/\n/g; - $a =~ s/\n\n$/\n/g; - $a =~ s/\n\n$/\n/g; - $a =~ s/\n/\\n/g; - $a =~ s/\"/\\\"/g; - - $a =~ s/\@table \@code/ /g; - - return $a; -} - -sub prepare_example -{ - my ($a)= @_; - - $a =~ s/(^\@c for_help_topic(.*?)\n)//g; - - $a =~ s/\@var\{((.|\n)+?)\}/$1/go; - $a =~ s/\@dots\{\}/.../g; - $a =~ s/\\/\\\\/g; - $a =~ s/(\@{)/{/g; - $a =~ s/(\@})/}/g; - $a =~ s/(\@\@)/\@/g; - $a =~ s/(\n*?)$//g; - $a =~ s/\n/\\n/g; - $a =~ s/\"/\\\"/g; - - return $a; -} - -sub parse_example -{ - return if (!($_=~/\@example/)); - return if ($next_example_for_topic eq ""); - - my $topic_name= $next_example_for_topic; - $next_example_for_topic= ""; - my $text= ""; - - while (<>) - { - $cur_line++; - last if ($_=~/\@end example/); - $text .= $_; - } - - $text= prepare_example($text); - $topic_name= prepare_name($topic_name); - add_example($topic_name,$text) if ($topic_name ne ""); -} - -sub parse_example_for_topic -{ - my ($for_topic)= m|\@c example_for_help_topic (.+?)$|; - return if ($for_topic eq ""); - - $next_example_for_topic= $for_topic; -} - -sub parse_description -{ - my ($topic_description)= m|\@c description_for_help_topic (.+?)$|; - return if ($topic_description eq ""); - - my ($topic_name,$topic_keywords)= split(/ /,$topic_description); - - if ($topic_name eq "" || $topic_keywords eq "") - { - $topic_name= $topic_description; - } - else - { - my $keyword; - foreach $keyword (split(/ /,$topic_keywords)) - { - add_keyword($topic_name,$keyword) if ($keyword ne ""); - } - } - - my $text= ""; - - while (<>) - { - $cur_line++; - last if ($_=~/\@c end_description_for_help_topic/); - $text .= $_; - } - - $text= prepare_description($text); - $topic_name= prepare_name($topic_name); - add_description($topic_name,$text); -} - -sub parse_category -{ - my ($c_name,$pc_name)= m|\@c help_category (.+?)\@(.+?)$|; - - if ($pc_name ne "") - { - $current_category= prepare_name($c_name); - $current_parent_category= prepare_name($pc_name); - } - else - { - my ($c_name)=m|\@c help_category (.+?)$|; - return if ($c_name eq ""); - - $current_category= prepare_name($c_name); - $current_parent_category= "Contents" - } -} - -# parse manual: - -while (<>) -{ - parse_example_for_topic (); - parse_example (); - parse_description (); - parse_category (); - $cur_line++; -} - -# test results of parsing: - -sub print_bad_names -{ - my($names,$prompt)= @_; - if (scalar(@{$names})) - { - print STDERR "\n-------------- $prompt : \n\n"; - my $name; - foreach $name (@{$names}) - { - print STDERR "$name\n"; - } - print STDERR "\n"; - } -} - -sub print_verbose_errors -{ - my($name_of_log_file)= @_; - - my @without_help; - my @description_with_at; - my @example_with_at; - my @without_description; - my @without_example; - - print STDERR "\n-------------- parameters of help completeness : \n\n"; - - my $count_lex= 0; - if (!open (TLEX,"<$path_to_lex_file")) - { - print STDERR "Error opening lex file \"$path_to_lex_file\" $!\n"; - } - else - { - for (<TLEX>) - { - my ($a,$lex,$b)=m|(.+?)\"(.+?)\"(.+?)$|; - next if ($lex eq ""); - $count_lex++; - next if (exists($topics{$lex}) || exists($keywords{$lex})); - push(@without_help,$lex); - } - close(TLEX); - print STDERR "number of lexems in \"$path_to_lex_file\" - $count_lex\n"; - } - - my $name; - my @topic_names= keys(%topics); - foreach $name (@topic_names) - { - my $topic= $topics{$name}; - push(@description_with_at,$name) if ($topic->{description}=~/\@/); - push(@example_with_at,$name) if ($topic->{example}=~/\@/); - push(@without_description,$name) if (!exists($topic->{description})); - push(@without_example,$name) if (!exists($topic->{example})); - } - - my $count_categories= scalar(keys(%categories)); - print STDERR "number of help categories - ",$count_categories,"\n"; - my $count_topics= scalar(@topic_names); - print STDERR "number of help topics - ",$count_topics,"\n"; - my $count_keywords= scalar(keys(%keywords)); - print STDERR "number of help keywords - ",$count_keywords,"\n"; - - my $count_without_help= scalar(@without_help); - my $percent_without_help= $count_lex ? - int (($count_without_help/$count_lex)*100) : - "100"; - print_bad_names(\@without_help,"lexems without help (". - $count_without_help." ~ ". - $percent_without_help."%)"); - print_bad_names(\@description_with_at, - " topics below have symbol \'@\' in their descriptions.\n". - "it's probably the litter from 'texi' tags (script needs fixing)"); - print_bad_names(\@example_with_at, - " topics below have symbol \'@\' in their examples.\n". - "it's probably the litter from 'texi' tags (script needs fixing)"); - print_bad_names(\@without_description,"topics without description"); - - my $count_without_example= scalar(@without_example); - my $percent_without_example= $count_topics ? - int (($count_without_example/$count_topics)*100) : - "100"; - print_bad_names(\@without_example,"topics without example (". - $count_without_example." ~ ". - $percent_without_example."%)"); -} - -print_verbose_errors if ($verbose_option ne 0); - -# output result - -sub print_insert_header -{ - my($count,$header)= @_; - - if ($count % $insert_portion_size ne 0) { - print ","; - } else { - print ";\n" if ($count ne 0); - print "$header"; - } -} - -print <<EOF; --- Copyright (C) 2000-2005 MySQL AB --- --- This program is free software; you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation; either version 2 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program; if not, write to the Free Software --- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -EOF -print "delete from help_topic;\n"; -print "delete from help_category;\n"; -print "delete from help_keyword;\n"; -print "delete from help_relation;\n\n"; - -my @category_names= keys(%categories); -if (scalar(@category_names)) -{ - my $cat_name; - my $count= 0; - foreach $cat_name (@category_names) - { - $categories{$cat_name}->{__id__}= $count; - $count++; - } - - my $header= "insert into help_category ". - "(help_category_id,name,parent_category_id) values "; - $count= 0; - foreach $cat_name (@category_names) - { - print_insert_header($count,$header); - my $parent_cat_name= $categories{$cat_name}->{__parent_category__}; - my $parent_cat_id= $parent_cat_name eq "" - ? "-1" : $categories{$parent_cat_name}->{__id__}; - print "($count,\"$cat_name\",$parent_cat_id)"; - $count++; - } - printf ";\n\n"; -} - -my @topic_names= keys(%topics); -if (scalar(@topic_names)) -{ - my $header= "insert into help_topic ". - "(help_topic_id,help_category_id,name,description,example) values "; - my $topic_name; - my $count= 0; - foreach $topic_name (@topic_names) - { - print_insert_header($count,$header); - my $topic= $topics{$topic_name}; - print "($count,"; - print "$topic->{category}->{__id__},"; - print "\"$topic_name\","; - print "\"$topic->{description}\","; - print "\"$topic->{example}\")"; - $topics{$topic_name}->{__id__}= $count; - $count++; - } - printf ";\n\n"; -} - -my @keywords_names= keys(%keywords); -if (scalar(@keywords_names)) -{ - my $header= "insert into help_keyword (help_keyword_id,name) values "; - my $keyword_name; - my $count= 0; - foreach $keyword_name (@keywords_names) - { - print_insert_header($count,$header); - print "($count,\"$keyword_name\")"; - $count++; - } - printf ";\n\n"; - - $header= "insert into help_relation ". - "(help_topic_id,help_keyword_id) values "; - $count= 0; - my $count_keyword= 0; - foreach $keyword_name (@keywords_names) - { - my $topic_name; - foreach $topic_name (keys(%{$keywords{$keyword_name}})) - { - print_insert_header($count,$header); - print "($topics{$topic_name}->{__id__},$count_keyword)"; - $count++; - } - $count_keyword++; - } - printf ";\n\n"; -} - -if ($count_errors) -{ - print STDERR "$count_errors errors !!!\n"; - exit 1; -} diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 6359eb009ce..917ac0a19c1 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -322,7 +322,7 @@ BASE=$BASE2 # if [ x"@GXX@" = x"yes" ] ; then - gcclib=`@CC@ --print-libgcc-file` + gcclib=`@CC@ @CFLAGS@ --print-libgcc-file` if [ $? -ne 0 ] ; then echo "Warning: Couldn't find libgcc.a!" else diff --git a/scripts/mysql_secure_installation.sh b/scripts/mysql_secure_installation.sh index 1c7ca34ad59..e42e83233c3 100644 --- a/scripts/mysql_secure_installation.sh +++ b/scripts/mysql_secure_installation.sh @@ -22,6 +22,16 @@ command=".mysql.$$" trap "interrupt" 2 rootpass="" +echo_n= +echo_c= + +set_echo_compat() { + case `echo "testing\c"`,`echo -n testing` in + *c*,-n*) echo_n= echo_c= ;; + *c*,*) echo_n=-n echo_c= ;; + *) echo_n= echo_c='\c' ;; + esac +} prepare() { touch $config $command @@ -45,7 +55,7 @@ get_root_password() { status=1 while [ $status -eq 1 ]; do stty -echo - echo -n "Enter current password for root (enter for none): " + echo $echo_n "Enter current password for root (enter for none): $echo_c" read password echo stty echo @@ -65,10 +75,10 @@ get_root_password() { set_root_password() { stty -echo - echo -n "New password: " + echo $echo_n "New password: $echo_c" read password1 echo - echo -n "Re-enter new password: " + echo $echo_n "Re-enter new password: $echo_c" read password2 echo stty echo @@ -173,6 +183,7 @@ cleanup() { # The actual script starts here prepare +set_echo_compat echo echo @@ -201,11 +212,11 @@ echo "root user without the proper authorisation." echo if [ $hadpass -eq 0 ]; then - echo -n "Set root password? [Y/n] " + echo $echo_n "Set root password? [Y/n] $echo_c" else echo "You already have a root password set, so you can safely answer 'n'." echo - echo -n "Change the root password? [Y/n] " + echo $echo_n "Change the root password? [Y/n] $echo_c" fi read reply @@ -232,7 +243,7 @@ echo "go a bit smoother. You should remove them before moving into a" echo "production environment." echo -echo -n "Remove anonymous users? [Y/n] " +echo $echo_n "Remove anonymous users? [Y/n] $echo_c" read reply if [ "$reply" = "n" ]; then @@ -251,7 +262,7 @@ echo "Normally, root should only be allowed to connect from 'localhost'. This" echo "ensures that someone cannot guess at the root password from the network." echo -echo -n "Disallow root login remotely? [Y/n] " +echo $echo_n "Disallow root login remotely? [Y/n] $echo_c" read reply if [ "$reply" = "n" ]; then echo " ... skipping." @@ -270,7 +281,7 @@ echo "access. This is also intended only for testing, and should be removed" echo "before moving into a production environment." echo -echo -n "Remove test database and access to it? [Y/n] " +echo $echo_n "Remove test database and access to it? [Y/n] $echo_c" read reply if [ "$reply" = "n" ]; then echo " ... skipping." @@ -288,7 +299,7 @@ echo "Reloading the privilege tables will ensure that all changes made so far" echo "will take effect immediately." echo -echo -n "Reload privilege tables now? [Y/n] " +echo $echo_n "Reload privilege tables now? [Y/n] $echo_c" read reply if [ "$reply" = "n" ]; then echo " ... skipping." diff --git a/scripts/mysqlaccess.sh b/scripts/mysqlaccess.sh index 22e9d121f9a..bcaf9f8af8e 100644 --- a/scripts/mysqlaccess.sh +++ b/scripts/mysqlaccess.sh @@ -465,6 +465,9 @@ MySQLaccess::Report::Print_Header(); elsif (-f "@sysconfdir@/$script_conf") { require "@sysconfdir@/$script_conf"; } + elsif (-f "/etc/$script_conf") { + require "/etc/$script_conf"; + } # **************************** # Read in all parameters @@ -930,6 +933,7 @@ sub MergeConfigFile { sub MergeConfigFiles { my ($name,$pass,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwuid $<; MergeConfigFile("@sysconfdir@/my.cnf"); + MergeConfigFile("/etc/my.cnf"); MergeConfigFile("$dir/.my.cnf"); } diff --git a/scripts/mysqlbug.sh b/scripts/mysqlbug.sh index 6aed140b79d..880ab248a90 100644 --- a/scripts/mysqlbug.sh +++ b/scripts/mysqlbug.sh @@ -132,7 +132,13 @@ if test -z "$VISUAL" then if test -z "$EDITOR" then - EDIT=emacs + # Honor debian sensible-editor + if test -x "/usr/bin/sensible-editor" + then + EDIT=/usr/bin/sensible-editor + else + EDIT=emacs + fi else EDIT="$EDITOR" fi diff --git a/scripts/mysqld_multi.sh b/scripts/mysqld_multi.sh index ce778c03206..18ac8c6fc26 100644 --- a/scripts/mysqld_multi.sh +++ b/scripts/mysqld_multi.sh @@ -432,6 +432,9 @@ sub find_groups if (-f "@sysconfdir@/my.cnf" && -r "@sysconfdir@/my.cnf") { open(MY_CNF, "<@sysconfdir@/my.cnf") && (@tmp=<MY_CNF>) && close(MY_CNF); + } elsif (-f "/etc/my.cnf" && -r "/etc/my.cnf") + { + open(MY_CNF, "</etc/my.cnf") && (@tmp=<MY_CNF>) && close(MY_CNF); } for ($i = 0; ($line = shift @tmp); $i++) { @@ -446,7 +449,7 @@ sub find_groups $data[$i] = $line; } } - chop @data; + chomp @data; # Make a list of the wanted group ids if (defined($raw_gids)) { diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index c655910dc2c..c867d15a389 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -195,6 +195,7 @@ if [ ! -d $mysql_unix_port_dir ] then mkdir $mysql_unix_port_dir chown $user $mysql_unix_port_dir + chmod 755 $mysql_unix_port_dir fi # Use the mysqld-max binary by default if the user doesn't specify a binary diff --git a/scripts/mysqldumpslow.sh b/scripts/mysqldumpslow.sh index ccb006f692d..ff82a35ec3f 100644 --- a/scripts/mysqldumpslow.sh +++ b/scripts/mysqldumpslow.sh @@ -40,6 +40,7 @@ unless (@ARGV) { warn "basedir=$basedir\n" if $opt{v}; my $datadir = ($defaults =~ m/--datadir=(.*)/)[0]; + my $slowlog = ($defaults =~ m/--log-slow-queries=(.*)/)[0]; if (!$datadir or $opt{i}) { # determine the datadir from the instances section of /etc/my.cnf, if any my $instances = `my_print_defaults instances`; @@ -55,8 +56,13 @@ unless (@ARGV) { warn "datadir=$datadir\n" if $opt{v}; } - @ARGV = <$datadir/$opt{h}-slow.log>; - die "Can't find '$datadir/$opt{h}-slow.log'\n" unless @ARGV; + if ( -f $slowlog ) { + @ARGV = ($slowlog); + die "Can't find '$slowlog'\n" unless @ARGV; + } else { + @ARGV = <$datadir/$opt{h}-slow.log>; + die "Can't find '$datadir/$opt{h}-slow.log'\n" unless @ARGV; + } } warn "\nReading mysql slow query log from @ARGV\n"; diff --git a/sql-common/client.c b/sql-common/client.c index 87e22624dd9..431c1bdf418 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1881,11 +1881,17 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, goto error; } vio_keepalive(net->vio,TRUE); - /* Override local client variables */ + + /* If user set read_timeout, let it override the default */ if (mysql->options.read_timeout) net->read_timeout= mysql->options.read_timeout; + vio_timeout(net->vio, 0, net->read_timeout); + + /* If user set write_timeout, let it override the default */ if (mysql->options.write_timeout) net->write_timeout= mysql->options.write_timeout; + vio_timeout(net->vio, 1, net->write_timeout); + if (mysql->options.max_allowed_packet) net->max_packet_size= mysql->options.max_allowed_packet; diff --git a/sql-common/my_time.c b/sql-common/my_time.c index 2d3d71e646c..8f3646e84eb 100644 --- a/sql-common/my_time.c +++ b/sql-common/my_time.c @@ -145,7 +145,7 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, digits= (uint) (pos-str); start_loop= 0; /* Start of scan loop */ date_len[format_position[0]]= 0; /* Length of year field */ - if (pos == end) + if (pos == end || *pos == '.') { /* Found date in internal format (only numbers like YYYYMMDD) */ year_length= (digits == 4 || digits == 8 || digits >= 14) ? 4 : 2; @@ -350,10 +350,7 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, l_time->year > 9999 || l_time->month > 12 || l_time->day > 31 || l_time->hour > 23 || l_time->minute > 59 || l_time->second > 59 || - (!(flags & TIME_FUZZY_DATE) && - (l_time->month == 0 || l_time->day == 0)) || - (l_time->year == 0 && l_time->month == 0 && l_time->day == 0 && - (l_time->hour != 0 || l_time->minute != 0 || l_time->second != 0))) + (!(flags & TIME_FUZZY_DATE) && (l_time->month == 0 || l_time->day == 0))) { /* Only give warning for a zero date if there is some garbage after */ if (!not_zero_date) /* If zero date */ diff --git a/sql/Makefile.am b/sql/Makefile.am index 43a7617df52..cf7bc0a1452 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -142,7 +142,8 @@ sql_yacc.o: sql_yacc.cc sql_yacc.h $(HEADERS) # this avoid the rebuild of the built files in a source dist lex_hash.h: gen_lex_hash.cc lex.h $(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT) - ./gen_lex_hash$(EXEEXT) > $@ + ./gen_lex_hash$(EXEEXT) > $@-t + $(MV) $@-t $@ # For testing of udf_example.so; Works on platforms with gcc # (This is not part of our build process but only provided as an example) diff --git a/sql/examples/ha_tina.cc b/sql/examples/ha_tina.cc index 0091e1f40a0..a3b05d298c2 100644 --- a/sql/examples/ha_tina.cc +++ b/sql/examples/ha_tina.cc @@ -220,6 +220,18 @@ static int free_share(TINA_SHARE *share) } +bool tina_end() +{ + if (tina_init) + { + hash_free(&tina_open_tables); + VOID(pthread_mutex_destroy(&tina_mutex)); + } + tina_init= 0; + return FALSE; +} + + /* Finds the end of a line. Currently only supports files written on a UNIX OS. diff --git a/sql/examples/ha_tina.h b/sql/examples/ha_tina.h index d8cd0fa9cfe..266db1bc1fe 100644 --- a/sql/examples/ha_tina.h +++ b/sql/examples/ha_tina.h @@ -136,3 +136,5 @@ class ha_tina: public handler int find_current_row(byte *buf); int chain_append(); }; + +bool tina_end(); diff --git a/sql/field.cc b/sql/field.cc index e88b8b313e2..1b27e12e078 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -3318,7 +3318,7 @@ int Field_double::store(double nr) else { double max_value; - if (dec >= NOT_FIXED_DEC) + if (not_fixed) { max_value= DBL_MAX; } @@ -5204,6 +5204,16 @@ uint Field_string::max_packed_col_length(uint max_length) return (max_length > 255 ? 2 : 1)+max_length; } +uint Field_string::get_key_image(char *buff, uint length, CHARSET_INFO *cs, + imagetype type_arg) +{ + uint bytes = my_charpos(cs, ptr, ptr + field_length, + length / field_charset->mbmaxlen); + memcpy(buff, ptr, bytes); + if (bytes < length) + bzero(buff + bytes, length - bytes); + return bytes; +} /**************************************************************************** ** VARCHAR type (Not available for the end user yet) @@ -5414,8 +5424,8 @@ uint Field_varstring::max_packed_col_length(uint max_length) return (max_length > 255 ? 2 : 1)+max_length; } -void Field_varstring::get_key_image(char *buff, uint length, CHARSET_INFO *cs, - imagetype type) +uint Field_varstring::get_key_image(char *buff, uint length, CHARSET_INFO *cs, + imagetype type) { uint f_length=uint2korr(ptr); if (f_length > length) @@ -5426,6 +5436,7 @@ void Field_varstring::get_key_image(char *buff, uint length, CHARSET_INFO *cs, if (f_length < length) bzero(buff+HA_KEY_BLOB_LENGTH+f_length, (length-f_length)); #endif + return HA_KEY_BLOB_LENGTH+f_length; } void Field_varstring::set_key_image(char *buff,uint length, CHARSET_INFO *cs) @@ -5724,8 +5735,8 @@ int Field_blob::cmp_binary(const char *a_ptr, const char *b_ptr, /* The following is used only when comparing a key */ -void Field_blob::get_key_image(char *buff,uint length, - CHARSET_INFO *cs, imagetype type) +uint Field_blob::get_key_image(char *buff,uint length, + CHARSET_INFO *cs, imagetype type) { uint32 blob_length= get_length(ptr); char *blob; @@ -5737,16 +5748,17 @@ void Field_blob::get_key_image(char *buff,uint length, MBR mbr; Geometry_buffer buffer; Geometry *gobj; + const uint image_length= SIZEOF_STORED_DOUBLE*4; if (blob_length < SRID_SIZE) { - bzero(buff, SIZEOF_STORED_DOUBLE*4); - return; + bzero(buff, image_length); + return image_length; } get_ptr(&blob); gobj= Geometry::construct(&buffer, blob, blob_length); if (gobj->get_mbr(&mbr, &dummy)) - bzero(buff, SIZEOF_STORED_DOUBLE*4); + bzero(buff, image_length); else { float8store(buff, mbr.xmin); @@ -5754,7 +5766,7 @@ void Field_blob::get_key_image(char *buff,uint length, float8store(buff+16, mbr.ymin); float8store(buff+24, mbr.ymax); } - return; + return image_length; } #endif /*HAVE_SPATIAL*/ @@ -5774,6 +5786,7 @@ void Field_blob::get_key_image(char *buff,uint length, } int2store(buff,length); memcpy(buff+HA_KEY_BLOB_LENGTH, blob, length); + return HA_KEY_BLOB_LENGTH+length; } void Field_blob::set_key_image(char *buff,uint length, CHARSET_INFO *cs) @@ -6021,8 +6034,8 @@ uint Field_blob::max_packed_col_length(uint max_length) #ifdef HAVE_SPATIAL -void Field_geom::get_key_image(char *buff, uint length, CHARSET_INFO *cs, - imagetype type) +uint Field_geom::get_key_image(char *buff, uint length, CHARSET_INFO *cs, + imagetype type) { char *blob; const char *dummy; @@ -6030,16 +6043,17 @@ void Field_geom::get_key_image(char *buff, uint length, CHARSET_INFO *cs, ulong blob_length= get_length(ptr); Geometry_buffer buffer; Geometry *gobj; + const uint image_length= SIZEOF_STORED_DOUBLE*4; if (blob_length < SRID_SIZE) { - bzero(buff, SIZEOF_STORED_DOUBLE*4); - return; + bzero(buff, image_length); + return image_length; } get_ptr(&blob); gobj= Geometry::construct(&buffer, blob, blob_length); if (gobj->get_mbr(&mbr, &dummy)) - bzero(buff, SIZEOF_STORED_DOUBLE*4); + bzero(buff, image_length); else { float8store(buff, mbr.xmin); @@ -6047,6 +6061,7 @@ void Field_geom::get_key_image(char *buff, uint length, CHARSET_INFO *cs, float8store(buff + 16, mbr.ymin); float8store(buff + 24, mbr.ymax); } + return image_length; } diff --git a/sql/field.h b/sql/field.h index e4991ba1961..20f1209a439 100644 --- a/sql/field.h +++ b/sql/field.h @@ -228,9 +228,43 @@ public: { memcpy(buff,ptr,length); } inline void set_image(char *buff,uint length, CHARSET_INFO *cs) { memcpy(ptr,buff,length); } - virtual void get_key_image(char *buff,uint length, CHARSET_INFO *cs, - imagetype type) - { get_image(buff,length,cs); } + + + /* + Copy a field part into an output buffer. + + SYNOPSIS + Field::get_key_image() + buff [out] output buffer + length output buffer size + cs charset, always same as this->charset(), + (to be removed in 5.x) + type itMBR for geometry blobs, otherwise itRAW + + DESCRIPTION + This function makes a copy of field part of size equal to or + less than "length" parameter value. + For fields of string types (CHAR, VARCHAR, TEXT) the rest of buffer + is padded by zero byte. + + NOTES + For variable length character fields (i.e. UTF-8) the "length" + parameter means a number of output buffer bytes as if all field + characters have maximal possible size (mbmaxlen). In the other words, + "length" parameter is a number of characters multiplied by + field_charset->mbmaxlen. + + RETURN + Number of copied bytes (excluding padded zero bytes -- see above). + */ + + virtual uint get_key_image(char *buff, uint length, + CHARSET_INFO *cs, + imagetype type) + { + get_image(buff,length,cs); + return length; + } virtual void set_key_image(char *buff,uint length, CHARSET_INFO *cs) { set_image(buff,length,cs); } inline longlong val_int_offset(uint row_offset) @@ -616,6 +650,7 @@ public: class Field_double :public Field_num { public: + my_bool not_fixed; Field_double(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg, @@ -623,12 +658,20 @@ public: uint8 dec_arg,bool zero_arg,bool unsigned_arg) :Field_num(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg, table_arg, - dec_arg, zero_arg,unsigned_arg) + dec_arg, zero_arg, unsigned_arg), + not_fixed(dec_arg >= NOT_FIXED_DEC) {} Field_double(uint32 len_arg, bool maybe_null_arg, const char *field_name_arg, struct st_table *table_arg, uint8 dec_arg) - :Field_num((char*) 0, len_arg, maybe_null_arg ? (uchar*) "": 0, (uint) 0, - NONE, field_name_arg, table_arg,dec_arg,0,0) + :Field_num((char *) 0, len_arg, maybe_null_arg ? (uchar *) "" : 0, (uint) 0, + NONE, field_name_arg, table_arg,dec_arg, 0, 0), + not_fixed(dec_arg >= NOT_FIXED_DEC) + {} + Field_double(uint32 len_arg, bool maybe_null_arg, const char *field_name_arg, + struct st_table *table_arg, uint8 dec_arg, my_bool not_fixed_srg) + :Field_num((char *) 0, len_arg, maybe_null_arg ? (uchar *) "" : 0, (uint) 0, + NONE, field_name_arg, table_arg, dec_arg, 0, 0), + not_fixed(not_fixed_srg) {} enum_field_types type() const { return FIELD_TYPE_DOUBLE;} enum ha_base_keytype key_type() const { return HA_KEYTYPE_DOUBLE; } @@ -645,6 +688,7 @@ public: uint32 pack_length() const { return sizeof(double); } void sql_type(String &str) const; uint32 max_length() { return 53; } + uint size_of() const { return sizeof(*this); } }; @@ -937,6 +981,8 @@ public: enum_field_types real_type() const { return FIELD_TYPE_STRING; } bool has_charset(void) const { return charset() == &my_charset_bin ? FALSE : TRUE; } + virtual uint get_key_image(char *buff,uint length, CHARSET_INFO *cs, + imagetype type); }; @@ -971,7 +1017,7 @@ public: String *val_str(String*,String *); int cmp(const char *,const char*); void sort_string(char *buff,uint length); - void get_key_image(char *buff,uint length, CHARSET_INFO *cs, imagetype type); + uint get_key_image(char *buff,uint length, CHARSET_INFO *cs, imagetype type); void set_key_image(char *buff,uint length, CHARSET_INFO *cs); void sql_type(String &str) const; char *pack(char *to, const char *from, uint max_length=~(uint) 0); @@ -1050,7 +1096,7 @@ public: store_length(length); memcpy_fixed(ptr+packlength,&data,sizeof(char*)); } - void get_key_image(char *buff,uint length, CHARSET_INFO *cs, imagetype type); + uint get_key_image(char *buff,uint length, CHARSET_INFO *cs, imagetype type); void set_key_image(char *buff,uint length, CHARSET_INFO *cs); void sql_type(String &str) const; inline bool copy() @@ -1105,9 +1151,9 @@ public: int store(const char *to, uint length, CHARSET_INFO *charset); int store(double nr) { return 1; } int store(longlong nr) { return 1; } - int reset(void) { return !maybe_null(); } + int reset(void) { return !maybe_null() || Field_blob::reset(); } - void get_key_image(char *buff,uint length, CHARSET_INFO *cs,imagetype type); + uint get_key_image(char *buff,uint length, CHARSET_INFO *cs,imagetype type); void set_key_image(char *buff,uint length, CHARSET_INFO *cs); }; #endif /*HAVE_SPATIAL*/ diff --git a/sql/field_conv.cc b/sql/field_conv.cc index d61b3735c91..59b550572c3 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -605,6 +605,10 @@ void field_conv(Field *to,Field *from) from->charset() == to->charset() && to->table->db_low_byte_first == from->table->db_low_byte_first) { // Identical fields +#ifdef HAVE_purify + /* This may happen if one does 'UPDATE ... SET x=x' */ + if (to->ptr != from->ptr) +#endif memcpy(to->ptr,from->ptr,to->pack_length()); return; } diff --git a/sql/filesort.cc b/sql/filesort.cc index 63a8515020b..38a49e24263 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -387,7 +387,8 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, byte *ref_pos,*next_pos,ref_buff[MAX_REFLENGTH]; my_off_t record; TABLE *sort_form; - volatile my_bool *killed= ¤t_thd->killed; + THD *thd= current_thd; + volatile my_bool *killed= &thd->killed; handler *file; DBUG_ENTER("find_all_keys"); DBUG_PRINT("info",("using: %s",(select?select->quick?"ranges":"where":"every row"))); @@ -474,6 +475,9 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, } else file->unlock_row(); + /* It does not make sense to read more keys in case of a fatal error */ + if (thd->net.report_error) + DBUG_RETURN(HA_POS_ERROR); } (void) file->extra(HA_EXTRA_NO_CACHE); /* End cacheing of records */ if (!next_pos) diff --git a/sql/ha_blackhole.h b/sql/ha_blackhole.h index 177b59fa970..e5f5ee69a82 100644 --- a/sql/ha_blackhole.h +++ b/sql/ha_blackhole.h @@ -46,8 +46,7 @@ public: { return(HA_NULL_IN_KEY | HA_CAN_FULLTEXT | HA_CAN_SQL_HANDLER | HA_DUPP_POS | HA_CAN_INDEX_BLOBS | HA_AUTO_PART_KEY | - HA_FILE_BASED | HA_CAN_GEOMETRY | HA_READ_RND_SAME | - HA_CAN_INSERT_DELAYED); + HA_FILE_BASED | HA_CAN_GEOMETRY | HA_READ_RND_SAME); } ulong index_flags(uint inx, uint part, bool all_parts) const { diff --git a/sql/ha_heap.cc b/sql/ha_heap.cc index 3e981087df7..dd3a84aaaee 100644 --- a/sql/ha_heap.cc +++ b/sql/ha_heap.cc @@ -549,7 +549,10 @@ int ha_heap::create(const char *name, TABLE *table_arg, seg->start= (uint) key_part->offset; seg->length= (uint) key_part->length; seg->flag = 0; - seg->charset= field->charset(); + if (field->flags & (ENUM_FLAG | SET_FLAG)) + seg->charset= &my_charset_bin; + else + seg->charset= field->charset(); if (field->null_ptr) { seg->null_bit= field->null_bit; diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 2e29d929352..ef44cbdbb32 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -91,6 +91,331 @@ static void mi_check_print_msg(MI_CHECK *param, const char* msg_type, return; } + +/* + Convert TABLE object to MyISAM key and column definition + + SYNOPSIS + table2myisam() + table_arg in TABLE object. + keydef_out out MyISAM key definition. + recinfo_out out MyISAM column definition. + records_out out Number of fields. + + DESCRIPTION + This function will allocate and initialize MyISAM key and column + definition for further use in mi_create or for a check for underlying + table conformance in merge engine. + + RETURN VALUE + 0 OK + !0 error code +*/ + +int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out, + MI_COLUMNDEF **recinfo_out, uint *records_out) +{ + uint i, j, recpos, minpos, fieldpos, temp_length, length; + uint options= table_arg->db_options_in_use; + enum ha_base_keytype type= HA_KEYTYPE_BINARY; + KEY *pos; + MI_KEYDEF *keydef; + MI_COLUMNDEF *recinfo, *recinfo_pos; + HA_KEYSEG *keyseg; + + DBUG_ENTER("table2myisam"); + if (!(my_multi_malloc(MYF(MY_WME), + recinfo_out, (table_arg->fields * 2 + 2) * sizeof(MI_COLUMNDEF), + keydef_out, table_arg->keys * sizeof(MI_KEYDEF), + &keyseg, + (table_arg->key_parts + table_arg->keys) * sizeof(HA_KEYSEG), + NullS))) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); /* purecov: inspected */ + keydef= *keydef_out; + recinfo= *recinfo_out; + pos= table_arg->key_info; + for (i= 0; i < table_arg->keys; i++, pos++) + { + keydef[i].flag= (pos->flags & (HA_NOSAME | HA_FULLTEXT | HA_SPATIAL)); + keydef[i].key_alg= pos->algorithm == HA_KEY_ALG_UNDEF ? + (pos->flags & HA_SPATIAL ? HA_KEY_ALG_RTREE : HA_KEY_ALG_BTREE) : + pos->algorithm; + keydef[i].seg= keyseg; + keydef[i].keysegs= pos->key_parts; + for (j= 0; j < pos->key_parts; j++) + { + keydef[i].seg[j].flag= pos->key_part[j].key_part_flag; + Field *field= pos->key_part[j].field; + type= field->key_type(); + + if (options & HA_OPTION_PACK_KEYS || + (pos->flags & (HA_PACK_KEY | HA_BINARY_PACK_KEY | + HA_SPACE_PACK_USED))) + { + if (pos->key_part[j].length > 8 && + (type == HA_KEYTYPE_TEXT || + type == HA_KEYTYPE_NUM || + (type == HA_KEYTYPE_BINARY && !field->zero_pack()))) + { + /* No blobs here */ + if (j == 0) + keydef[i].flag|= HA_PACK_KEY; + if (!(field->flags & ZEROFILL_FLAG) && + (field->type() == FIELD_TYPE_STRING || + field->type() == FIELD_TYPE_VAR_STRING || + ((int) (pos->key_part[j].length - field->decimals())) >= 4)) + keydef[i].seg[j].flag|= HA_SPACE_PACK; + } + else if (j == 0 && (!(pos->flags & HA_NOSAME) || pos->key_length > 16)) + keydef[i].flag|= HA_BINARY_PACK_KEY; + } + keydef[i].seg[j].type= (int) type; + keydef[i].seg[j].start= pos->key_part[j].offset; + keydef[i].seg[j].length= pos->key_part[j].length; + keydef[i].seg[j].bit_start= keydef[i].seg[j].bit_end= 0; + keydef[i].seg[j].language= field->charset()->number; + + if (field->null_ptr) + { + keydef[i].seg[j].null_bit= field->null_bit; + keydef[i].seg[j].null_pos= (uint) (field->null_ptr- + (uchar*) table_arg->record[0]); + } + else + { + keydef[i].seg[j].null_bit= 0; + keydef[i].seg[j].null_pos= 0; + } + if (field->type() == FIELD_TYPE_BLOB || + field->type() == FIELD_TYPE_GEOMETRY) + { + keydef[i].seg[j].flag|= HA_BLOB_PART; + /* save number of bytes used to pack length */ + keydef[i].seg[j].bit_start= (uint) (field->pack_length() - + table_arg->blob_ptr_size); + } + } + keyseg+= pos->key_parts; + } + if (table_arg->found_next_number_field) + keydef[table_arg->next_number_index].flag|= HA_AUTO_KEY; + recpos= 0; + recinfo_pos= recinfo; + while (recpos < (uint) table_arg->reclength) + { + Field **field, *found= 0; + minpos= table_arg->reclength; + length= 0; + + for (field= table_arg->field; *field; field++) + { + if ((fieldpos= (*field)->offset()) >= recpos && + fieldpos <= minpos) + { + /* skip null fields */ + if (!(temp_length= (*field)->pack_length())) + continue; /* Skip null-fields */ + if (! found || fieldpos < minpos || + (fieldpos == minpos && temp_length < length)) + { + minpos= fieldpos; + found= *field; + length= temp_length; + } + } + } + DBUG_PRINT("loop", ("found: %lx recpos: %d minpos: %d length: %d", + (long) found, recpos, minpos, length)); + if (recpos != minpos) + { // Reserved space (Null bits?) + bzero((char*) recinfo_pos, sizeof(*recinfo_pos)); + recinfo_pos->type= (int) FIELD_NORMAL; + recinfo_pos++->length= (uint16) (minpos - recpos); + } + if (!found) + break; + + if (found->flags & BLOB_FLAG) + { + recinfo_pos->type= (int) FIELD_BLOB; + } + else if (!(options & HA_OPTION_PACK_RECORD)) + recinfo_pos->type= (int) FIELD_NORMAL; + else if (found->zero_pack()) + recinfo_pos->type= (int) FIELD_SKIP_ZERO; + else + recinfo_pos->type= (int) ((length <= 3 || + (found->flags & ZEROFILL_FLAG)) ? + FIELD_NORMAL : + found->type() == FIELD_TYPE_STRING || + found->type() == FIELD_TYPE_VAR_STRING ? + FIELD_SKIP_ENDSPACE : + FIELD_SKIP_PRESPACE); + if (found->null_ptr) + { + recinfo_pos->null_bit= found->null_bit; + recinfo_pos->null_pos= (uint) (found->null_ptr - + (uchar*) table_arg->record[0]); + } + else + { + recinfo_pos->null_bit= 0; + recinfo_pos->null_pos= 0; + } + (recinfo_pos++)->length= (uint16) length; + recpos= minpos + length; + DBUG_PRINT("loop", ("length: %d type: %d", + recinfo_pos[-1].length,recinfo_pos[-1].type)); + } + *records_out= (uint) (recinfo_pos - recinfo); + DBUG_RETURN(0); +} + + +/* + Check for underlying table conformance + + SYNOPSIS + check_definition() + t1_keyinfo in First table key definition + t1_recinfo in First table record definition + t1_keys in Number of keys in first table + t1_recs in Number of records in first table + t2_keyinfo in Second table key definition + t2_recinfo in Second table record definition + t2_keys in Number of keys in second table + t2_recs in Number of records in second table + strict in Strict check switch + + DESCRIPTION + This function compares two MyISAM definitions. By intention it was done + to compare merge table definition against underlying table definition. + It may also be used to compare dot-frm and MYI definitions of MyISAM + table as well to compare different MyISAM table definitions. + + For merge table it is not required that number of keys in merge table + must exactly match number of keys in underlying table. When calling this + function for underlying table conformance check, 'strict' flag must be + set to false, and converted merge definition must be passed as t1_*. + + Otherwise 'strict' flag must be set to 1 and it is not required to pass + converted dot-frm definition as t1_*. + + RETURN VALUE + 0 - Equal definitions. + 1 - Different definitions. + + TODO + - compare FULLTEXT keys; + - compare SPATIAL keys; + - compare FIELD_SKIP_ZERO which is converted to FIELD_NORMAL correctly + (should be corretly detected in table2myisam). +*/ + +int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, + uint t1_keys, uint t1_recs, + MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo, + uint t2_keys, uint t2_recs, bool strict) +{ + uint i, j; + DBUG_ENTER("check_definition"); + if ((strict ? t1_keys != t2_keys : t1_keys > t2_keys)) + { + DBUG_PRINT("error", ("Number of keys differs: t1_keys=%u, t2_keys=%u", + t1_keys, t2_keys)); + DBUG_RETURN(1); + } + if (t1_recs != t2_recs) + { + DBUG_PRINT("error", ("Number of recs differs: t1_recs=%u, t2_recs=%u", + t1_recs, t2_recs)); + DBUG_RETURN(1); + } + for (i= 0; i < t1_keys; i++) + { + HA_KEYSEG *t1_keysegs= t1_keyinfo[i].seg; + HA_KEYSEG *t2_keysegs= t2_keyinfo[i].seg; + if (t1_keyinfo[i].flag & HA_FULLTEXT && t2_keyinfo[i].flag & HA_FULLTEXT) + continue; + else if (t1_keyinfo[i].flag & HA_FULLTEXT || + t2_keyinfo[i].flag & HA_FULLTEXT) + { + DBUG_PRINT("error", ("Key %d has different definition", i)); + DBUG_PRINT("error", ("t1_fulltext= %d, t2_fulltext=%d", + test(t1_keyinfo[i].flag & HA_FULLTEXT), + test(t2_keyinfo[i].flag & HA_FULLTEXT))); + DBUG_RETURN(1); + } + if (t1_keyinfo[i].flag & HA_SPATIAL && t2_keyinfo[i].flag & HA_SPATIAL) + continue; + else if (t1_keyinfo[i].flag & HA_SPATIAL || + t2_keyinfo[i].flag & HA_SPATIAL) + { + DBUG_PRINT("error", ("Key %d has different definition", i)); + DBUG_PRINT("error", ("t1_spatial= %d, t2_spatial=%d", + test(t1_keyinfo[i].flag & HA_SPATIAL), + test(t2_keyinfo[i].flag & HA_SPATIAL))); + DBUG_RETURN(1); + } + if (t1_keyinfo[i].keysegs != t2_keyinfo[i].keysegs || + t1_keyinfo[i].key_alg != t2_keyinfo[i].key_alg) + { + DBUG_PRINT("error", ("Key %d has different definition", i)); + DBUG_PRINT("error", ("t1_keysegs=%d, t1_key_alg=%d", + t1_keyinfo[i].keysegs, t1_keyinfo[i].key_alg)); + DBUG_PRINT("error", ("t2_keysegs=%d, t2_key_alg=%d", + t2_keyinfo[i].keysegs, t2_keyinfo[i].key_alg)); + DBUG_RETURN(1); + } + for (j= t1_keyinfo[i].keysegs; j--;) + { + if (t1_keysegs[j].type != t2_keysegs[j].type || + t1_keysegs[j].language != t2_keysegs[j].language || + t1_keysegs[j].null_bit != t2_keysegs[j].null_bit || + t1_keysegs[j].length != t2_keysegs[j].length) + { + DBUG_PRINT("error", ("Key segment %d (key %d) has different " + "definition", j, i)); + DBUG_PRINT("error", ("t1_type=%d, t1_language=%d, t1_null_bit=%d, " + "t1_length=%d", + t1_keysegs[j].type, t1_keysegs[j].language, + t1_keysegs[j].null_bit, t1_keysegs[j].length)); + DBUG_PRINT("error", ("t2_type=%d, t2_language=%d, t2_null_bit=%d, " + "t2_length=%d", + t2_keysegs[j].type, t2_keysegs[j].language, + t2_keysegs[j].null_bit, t2_keysegs[j].length)); + + DBUG_RETURN(1); + } + } + } + for (i= 0; i < t1_recs; i++) + { + MI_COLUMNDEF *t1_rec= &t1_recinfo[i]; + MI_COLUMNDEF *t2_rec= &t2_recinfo[i]; + /* + FIELD_SKIP_ZERO can be changed to FIELD_NORMAL in mi_create, + see NOTE1 in mi_create.c + */ + if ((t1_rec->type != t2_rec->type && + !(t1_rec->type == (int) FIELD_SKIP_ZERO && + t1_rec->length == 1 && + t2_rec->type == (int) FIELD_NORMAL)) || + t1_rec->length != t2_rec->length || + t1_rec->null_bit != t2_rec->null_bit) + { + DBUG_PRINT("error", ("Field %d has different definition", i)); + DBUG_PRINT("error", ("t1_type=%d, t1_length=%d, t1_null_bit=%d", + t1_rec->type, t1_rec->length, t1_rec->null_bit)); + DBUG_PRINT("error", ("t2_type=%d, t2_length=%d, t2_null_bit=%d", + t2_rec->type, t2_rec->length, t2_rec->null_bit)); + DBUG_RETURN(1); + } + } + DBUG_RETURN(0); +} + + extern "C" { volatile my_bool *killed_ptr(MI_CHECK *param) @@ -557,8 +882,8 @@ int ha_myisam::optimize(THD* thd, HA_CHECK_OPT *check_opt) param.sort_buffer_length= check_opt->sort_buffer_size; if ((error= repair(thd,param,1)) && param.retry_repair) { - sql_print_warning("Warning: Optimize table got errno %d, retrying", - my_errno); + sql_print_warning("Warning: Optimize table got errno %d on %s.%s, retrying", + my_errno, param.db_name, param.table_name); param.testflag&= ~T_REP_BY_SORT; error= repair(thd,param,1); } @@ -577,6 +902,22 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize) ha_rows rows= file->state->records; DBUG_ENTER("ha_myisam::repair"); + /* + Normally this method is entered with a properly opened table. If the + repair fails, it can be repeated with more elaborate options. Under + special circumstances it can happen that a repair fails so that it + closed the data file and cannot re-open it. In this case file->dfile + is set to -1. We must not try another repair without an open data + file. (Bug #25289) + */ + if (file->dfile == -1) + { + sql_print_information("Retrying repair of: '%s' failed. " + "Please try REPAIR EXTENDED or myisamchk", + table->path); + DBUG_RETURN(HA_ADMIN_FAILED); + } + param.db_name = table->table_cache_key; param.table_name = table->table_name; param.tmpfile_createflag = O_RDWR | O_TRUNC; @@ -932,8 +1273,8 @@ int ha_myisam::enable_indexes(uint mode) param.tmpdir=&mysql_tmpdir_list; if ((error= (repair(thd,param,0) != HA_ADMIN_OK)) && param.retry_repair) { - sql_print_warning("Warning: Enabling keys got errno %d, retrying", - my_errno); + sql_print_warning("Warning: Enabling keys got errno %d on %s.%s, retrying", + my_errno, param.db_name, param.table_name); param.testflag&= ~(T_REP_BY_SORT | T_QUICK); error= (repair(thd,param,0) != HA_ADMIN_OK); } @@ -1345,181 +1686,30 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, HA_CREATE_INFO *info) { int error; - uint i,j,recpos,minpos,fieldpos,temp_length,length, create_flags= 0; - bool found_real_auto_increment=0; - enum ha_base_keytype type; + uint create_flags= 0, options= table_arg->db_options_in_use, records; char buff[FN_REFLEN]; - KEY *pos; MI_KEYDEF *keydef; - MI_COLUMNDEF *recinfo,*recinfo_pos; - HA_KEYSEG *keyseg; - uint options=table_arg->db_options_in_use; - DBUG_ENTER("ha_myisam::create"); - - type=HA_KEYTYPE_BINARY; // Keep compiler happy - if (!(my_multi_malloc(MYF(MY_WME), - &recinfo,(table_arg->fields*2+2)*sizeof(MI_COLUMNDEF), - &keydef, table_arg->keys*sizeof(MI_KEYDEF), - &keyseg, - ((table_arg->key_parts + table_arg->keys) * - sizeof(HA_KEYSEG)), - NullS))) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - - pos=table_arg->key_info; - for (i=0; i < table_arg->keys ; i++, pos++) - { - keydef[i].flag= (pos->flags & (HA_NOSAME | HA_FULLTEXT | HA_SPATIAL)); - keydef[i].key_alg= pos->algorithm == HA_KEY_ALG_UNDEF ? - (pos->flags & HA_SPATIAL ? HA_KEY_ALG_RTREE : HA_KEY_ALG_BTREE) : - pos->algorithm; - keydef[i].seg=keyseg; - keydef[i].keysegs=pos->key_parts; - for (j=0 ; j < pos->key_parts ; j++) - { - keydef[i].seg[j].flag=pos->key_part[j].key_part_flag; - Field *field=pos->key_part[j].field; - type=field->key_type(); - - if (options & HA_OPTION_PACK_KEYS || - (pos->flags & (HA_PACK_KEY | HA_BINARY_PACK_KEY | - HA_SPACE_PACK_USED))) - { - if (pos->key_part[j].length > 8 && - (type == HA_KEYTYPE_TEXT || - type == HA_KEYTYPE_NUM || - (type == HA_KEYTYPE_BINARY && !field->zero_pack()))) - { - /* No blobs here */ - if (j == 0) - keydef[i].flag|=HA_PACK_KEY; - if (!(field->flags & ZEROFILL_FLAG) && - (field->type() == FIELD_TYPE_STRING || - field->type() == FIELD_TYPE_VAR_STRING || - ((int) (pos->key_part[j].length - field->decimals())) - >= 4)) - keydef[i].seg[j].flag|=HA_SPACE_PACK; - } - else if (j == 0 && (!(pos->flags & HA_NOSAME) || pos->key_length > 16)) - keydef[i].flag|= HA_BINARY_PACK_KEY; - } - keydef[i].seg[j].type= (int) type; - keydef[i].seg[j].start= pos->key_part[j].offset; - keydef[i].seg[j].length= pos->key_part[j].length; - keydef[i].seg[j].bit_start=keydef[i].seg[j].bit_end=0; - keydef[i].seg[j].language = field->charset()->number; - - if (field->null_ptr) - { - keydef[i].seg[j].null_bit=field->null_bit; - keydef[i].seg[j].null_pos= (uint) (field->null_ptr- - (uchar*) table_arg->record[0]); - } - else - { - keydef[i].seg[j].null_bit=0; - keydef[i].seg[j].null_pos=0; - } - if (field->type() == FIELD_TYPE_BLOB || - field->type() == FIELD_TYPE_GEOMETRY) - { - keydef[i].seg[j].flag|=HA_BLOB_PART; - /* save number of bytes used to pack length */ - keydef[i].seg[j].bit_start= (uint) (field->pack_length() - - table_arg->blob_ptr_size); - } - } - keyseg+=pos->key_parts; - } - - if (table_arg->found_next_number_field) - { - keydef[table_arg->next_number_index].flag|= HA_AUTO_KEY; - found_real_auto_increment= table_arg->next_number_key_offset == 0; - } - - recpos=0; recinfo_pos=recinfo; - while (recpos < (uint) table_arg->reclength) - { - Field **field,*found=0; - minpos=table_arg->reclength; length=0; - - for (field=table_arg->field ; *field ; field++) - { - if ((fieldpos=(*field)->offset()) >= recpos && - fieldpos <= minpos) - { - /* skip null fields */ - if (!(temp_length= (*field)->pack_length())) - continue; /* Skip null-fields */ - if (! found || fieldpos < minpos || - (fieldpos == minpos && temp_length < length)) - { - minpos=fieldpos; found= *field; length=temp_length; - } - } - } - DBUG_PRINT("loop",("found: %lx recpos: %d minpos: %d length: %d", - found,recpos,minpos,length)); - if (recpos != minpos) - { // Reserved space (Null bits?) - bzero((char*) recinfo_pos,sizeof(*recinfo_pos)); - recinfo_pos->type=(int) FIELD_NORMAL; - recinfo_pos++->length= (uint16) (minpos-recpos); - } - if (! found) - break; - - if (found->flags & BLOB_FLAG) - { - recinfo_pos->type= (int) FIELD_BLOB; - } - else if (!(options & HA_OPTION_PACK_RECORD)) - recinfo_pos->type= (int) FIELD_NORMAL; - else if (found->zero_pack()) - recinfo_pos->type= (int) FIELD_SKIP_ZERO; - else - recinfo_pos->type= (int) ((length <= 3 || - (found->flags & ZEROFILL_FLAG)) ? - FIELD_NORMAL : - found->type() == FIELD_TYPE_STRING || - found->type() == FIELD_TYPE_VAR_STRING ? - FIELD_SKIP_ENDSPACE : - FIELD_SKIP_PRESPACE); - if (found->null_ptr) - { - recinfo_pos->null_bit=found->null_bit; - recinfo_pos->null_pos= (uint) (found->null_ptr- - (uchar*) table_arg->record[0]); - } - else - { - recinfo_pos->null_bit=0; - recinfo_pos->null_pos=0; - } - (recinfo_pos++) ->length=(uint16) length; - recpos=minpos+length; - DBUG_PRINT("loop",("length: %d type: %d", - recinfo_pos[-1].length,recinfo_pos[-1].type)); - - } + MI_COLUMNDEF *recinfo; MI_CREATE_INFO create_info; - bzero((char*) &create_info,sizeof(create_info)); - create_info.max_rows=table_arg->max_rows; - create_info.reloc_rows=table_arg->min_rows; - create_info.with_auto_increment=found_real_auto_increment; - create_info.auto_increment=(info->auto_increment_value ? - info->auto_increment_value -1 : - (ulonglong) 0); + DBUG_ENTER("ha_myisam::create"); + if ((error= table2myisam(table_arg, &keydef, &recinfo, &records))) + DBUG_RETURN(error); /* purecov: inspected */ + bzero((char*) &create_info, sizeof(create_info)); + create_info.max_rows= table_arg->max_rows; + create_info.reloc_rows= table_arg->min_rows; + create_info.with_auto_increment= table_arg->next_number_key_offset == 0; + create_info.auto_increment= (info->auto_increment_value ? + info->auto_increment_value -1 : + (ulonglong) 0); create_info.data_file_length= ((ulonglong) table_arg->max_rows * - table_arg->avg_row_length); - create_info.raid_type=info->raid_type; + table_arg->avg_row_length); + create_info.raid_type= info->raid_type; create_info.raid_chunks= (info->raid_chunks ? info->raid_chunks : - RAID_DEFAULT_CHUNKS); - create_info.raid_chunksize=(info->raid_chunksize ? info->raid_chunksize : - RAID_DEFAULT_CHUNKSIZE); + RAID_DEFAULT_CHUNKS); + create_info.raid_chunksize= (info->raid_chunksize ? info->raid_chunksize : + RAID_DEFAULT_CHUNKSIZE); create_info.data_file_name= info->data_file_name; - create_info.index_file_name=info->index_file_name; + create_info.index_file_name= info->index_file_name; if (info->options & HA_LEX_CREATE_TMP_TABLE) create_flags|= HA_CREATE_TMP_TABLE; @@ -1531,13 +1721,13 @@ int ha_myisam::create(const char *name, register TABLE *table_arg, create_flags|= HA_CREATE_DELAY_KEY_WRITE; /* TODO: Check that the following fn_format is really needed */ - error=mi_create(fn_format(buff,name,"","",2+4), - table_arg->keys,keydef, - (uint) (recinfo_pos-recinfo), recinfo, - 0, (MI_UNIQUEDEF*) 0, - &create_info, create_flags); - - my_free((gptr) recinfo,MYF(0)); + error= mi_create(fn_format(buff, name, "", "", + MY_UNPACK_FILENAME|MY_REPLACE_EXT), + table_arg->keys, keydef, + records, recinfo, + 0, (MI_UNIQUEDEF*) 0, + &create_info, create_flags); + my_free((gptr) recinfo, MYF(0)); DBUG_RETURN(error); } diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc index 1fed5cc35f0..53923add49a 100644 --- a/sql/ha_myisammrg.cc +++ b/sql/ha_myisammrg.cc @@ -32,6 +32,13 @@ ** MyISAM MERGE tables *****************************************************************************/ +extern int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out, + MI_COLUMNDEF **recinfo_out, uint *records_out); +extern int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, + uint t1_keys, uint t1_recs, + MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo, + uint t2_keys, uint t2_recs, bool strict); + const char **ha_myisammrg::bas_ext() const { static const char *ext[]= { ".MRG", NullS }; return ext; } @@ -49,6 +56,12 @@ const char *ha_myisammrg::index_type(uint key_number) int ha_myisammrg::open(const char *name, int mode, uint test_if_locked) { + MI_KEYDEF *keyinfo; + MI_COLUMNDEF *recinfo; + MYRG_TABLE *u_table; + uint recs; + uint keys= table->keys; + int error; char name_buff[FN_REFLEN]; DBUG_PRINT("info", ("ha_myisammrg::open")); @@ -69,20 +82,45 @@ int ha_myisammrg::open(const char *name, int mode, uint test_if_locked) if (table->reclength != mean_rec_length && mean_rec_length) { - DBUG_PRINT("error",("reclength: %d mean_rec_length: %d", + DBUG_PRINT("error",("reclength: %d mean_rec_length: %lu", table->reclength, mean_rec_length)); + error= HA_ERR_WRONG_MRG_TABLE_DEF; goto err; } + if ((error= table2myisam(table, &keyinfo, &recinfo, &recs))) + { + /* purecov: begin inspected */ + DBUG_PRINT("error", ("Failed to convert TABLE object to MyISAM " + "key and column definition")); + goto err; + /* purecov: end */ + } + for (u_table= file->open_tables; u_table < file->end_table; u_table++) + { + if (check_definition(keyinfo, recinfo, keys, recs, + u_table->table->s->keyinfo, u_table->table->s->rec, + u_table->table->s->base.keys, + u_table->table->s->base.fields, false)) + { + my_free((gptr) recinfo, MYF(0)); + error= HA_ERR_WRONG_MRG_TABLE_DEF; + goto err; + } + } + my_free((gptr) recinfo, MYF(0)); #if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4 /* Merge table has more than 2G rows */ if (table->crashed) + { + error= HA_ERR_WRONG_MRG_TABLE_DEF; goto err; + } #endif return (0); err: myrg_close(file); file=0; - return (my_errno= HA_ERR_WRONG_MRG_TABLE_DEF); + return (my_errno= error); } int ha_myisammrg::close(void) diff --git a/sql/ha_myisammrg.h b/sql/ha_myisammrg.h index 84eaae04590..84af55b262e 100644 --- a/sql/ha_myisammrg.h +++ b/sql/ha_myisammrg.h @@ -37,7 +37,7 @@ class ha_myisammrg: public handler { return (HA_REC_NOT_IN_SEQ | HA_AUTO_PART_KEY | HA_READ_RND_SAME | HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_FILE_BASED | - HA_CAN_INSERT_DELAYED | HA_ANY_INDEX_MAY_BE_UNIQUE); + HA_ANY_INDEX_MAY_BE_UNIQUE); } ulong index_flags(uint inx, uint part, bool all_parts) const { diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index fd9a5720e3d..d16e00f4e52 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -5373,7 +5373,7 @@ ndb_get_table_statistics(ha_ndbcluster* file, bool report_error, Ndb* ndb, retry: if(report_error) { - if (file) + if (file && pTrans) { reterr= file->ndb_err(pTrans); } diff --git a/sql/handler.cc b/sql/handler.cc index 0476b855e3c..82fff72f0da 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -341,6 +341,10 @@ int ha_panic(enum ha_panic_function flag) if (have_archive_db == SHOW_OPTION_YES) error|= archive_db_end(); #endif +#ifdef HAVE_CSV_DB + if (have_csv_db == SHOW_OPTION_YES) + error|= tina_end(); +#endif return error; } /* ha_panic */ diff --git a/sql/init.cc b/sql/init.cc index 4beb8db0c6f..5e1b6532c75 100644 --- a/sql/init.cc +++ b/sql/init.cc @@ -45,6 +45,12 @@ void unireg_init(ulong options) { /* It's used by filesort... */ log_10[i]= nr ; nr*= 10.0; } + /* Make a tab of powers of 0.1 */ + for (i= 0, nr= 0.1; i < array_elements(log_01); i++) + { + log_01[i]= nr; + nr*= 0.1; + } specialflag|=options; /* Set options from argv */ DBUG_VOID_RETURN; } diff --git a/sql/item.cc b/sql/item.cc index 45d7856b2c1..bf96fdf3f43 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -47,6 +47,7 @@ Item::Item(): collation.set(&my_charset_bin, DERIVATION_COERCIBLE); name= 0; decimals= 0; max_length= 0; + with_subselect= 0; /* Put item in free list so that we can free all items at end */ THD *thd= current_thd; @@ -1761,6 +1762,8 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) Item** res= find_item_in_list(this, thd->lex->current_select->item_list, &counter, REPORT_EXCEPT_NOT_FOUND, ¬_used); + if (!res) + return 1; if (res != (Item **)not_found_item) { if ((*res)->type() == Item::FIELD_ITEM) @@ -1771,7 +1774,18 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) use the field from the Item_field in the select list and leave the Item_field instance in place. */ - set_field((*((Item_field**)res))->field); + + Field *field= (*((Item_field**)res))->field; + + if (field == NULL) + { + /* The column to which we link isn't valid. */ + my_error(ER_BAD_FIELD_ERROR, MYF(0), (*res)->name, + current_thd->where); + return(1); + } + + set_field(field); return 0; } else @@ -2367,18 +2381,31 @@ longlong Item_varbinary::val_int() int Item_varbinary::save_in_field(Field *field, bool no_conversions) { - int error; field->set_notnull(); if (field->result_type() == STRING_RESULT) + return field->store(str_value.ptr(), str_value.length(), + collation.collation); + + ulonglong nr; + uint32 length= str_value.length(); + if (length > 8) { - error=field->store(str_value.ptr(),str_value.length(),collation.collation); + nr= field->flags & UNSIGNED_FLAG ? ULONGLONG_MAX : LONGLONG_MAX; + goto warn; } - else + nr= (ulonglong) val_int(); + if ((length == 8) && !(field->flags & UNSIGNED_FLAG) && (nr > LONGLONG_MAX)) { - longlong nr=val_int(); - error=field->store(nr); + nr= LONGLONG_MAX; + goto warn; } - return error; + return field->store((longlong) nr); + +warn: + if (!field->store((longlong) nr)) + field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, + 1); + return 1; } diff --git a/sql/item.h b/sql/item.h index ad8bea663f1..f2136c4997a 100644 --- a/sql/item.h +++ b/sql/item.h @@ -142,6 +142,9 @@ public: my_bool with_sum_func; my_bool fixed; /* If item fixed with fix_fields */ DTCollation collation; + my_bool with_subselect; /* If this item is a subselect or some + of its arguments is or contains a + subselect */ // alloc & destruct is done as start of select using sql_alloc Item(); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 859b4e0ecc1..be44d490415 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -62,6 +62,42 @@ static void agg_result_type(Item_result *type, Item **items, uint nitems) /* + Compare row signature of two expressions + + SYNOPSIS: + cmp_row_type() + item1 the first expression + item2 the second expression + + DESCRIPTION + The function checks that two expressions have compatible row signatures + i.e. that the number of columns they return are the same and that if they + are both row expressions then each component from the first expression has + a row signature compatible with the signature of the corresponding component + of the second expression. + + RETURN VALUES + 1 type incompatibility has been detected + 0 otherwise +*/ + +static int cmp_row_type(Item* item1, Item* item2) +{ + uint n= item1->cols(); + if (item2->check_cols(n)) + return 1; + for (uint i=0; i<n; i++) + { + if (item2->el(i)->check_cols(item1->el(i)->cols()) || + (item1->el(i)->result_type() == ROW_RESULT && + cmp_row_type(item1->el(i), item2->el(i)))) + return 1; + } + return 0; +} + + +/* Aggregates result types from the array of items. SYNOPSIS: @@ -75,14 +111,32 @@ static void agg_result_type(Item_result *type, Item **items, uint nitems) This function aggregates result types from the array of items. Found type supposed to be used later for comparison of values of these items. Aggregation itself is performed by the item_cmp_type() function. + The function also checks compatibility of row signatures for the + submitted items (see the spec for the cmp_row_type function). + + RETURN VALUES + 1 type incompatibility has been detected + 0 otherwise */ -static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) +static int agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) { uint i; type[0]= items[0]->result_type(); for (i= 1 ; i < nitems ; i++) + { type[0]= item_cmp_type(type[0], items[i]->result_type()); + /* + When aggregating types of two row expressions we have to check + that they have the same cardinality and that each component + of the first row expression has a compatible row signature with + the signature of the corresponding component of the second row + expression. + */ + if (type[0] == ROW_RESULT && cmp_row_type(items[0], items[i])) + return 1; // error found: invalid usage of rows + } + return 0; } static void my_coll_agg_error(DTCollation &c1, DTCollation &c2, @@ -352,6 +406,17 @@ int Arg_comparator::set_compare_func(Item_bool_func2 *item, Item_result type) func= &Arg_comparator::compare_e_int_diff_signedness; } } + else if (type == REAL_RESULT) + { + if ((*a)->decimals < NOT_FIXED_DEC && (*b)->decimals < NOT_FIXED_DEC) + { + precision= 5 * log_01[max((*a)->decimals, (*b)->decimals)]; + if (func == &Arg_comparator::compare_real) + func= &Arg_comparator::compare_real_fixed; + else if (func == &Arg_comparator::compare_e_real) + func= &Arg_comparator::compare_e_real_fixed; + } + } return 0; } @@ -459,6 +524,44 @@ int Arg_comparator::compare_e_real() return test(val1 == val2); } + +int Arg_comparator::compare_real_fixed() +{ + /* + Fix yet another manifestation of Bug#2338. 'Volatile' will instruct + gcc to flush double values out of 80-bit Intel FPU registers before + performing the comparison. + */ + volatile double val1, val2; + val1= (*a)->val(); + if (!(*a)->null_value) + { + val2= (*b)->val(); + if (!(*b)->null_value) + { + owner->null_value= 0; + if (val1 == val2 || fabs(val1 - val2) < precision) + return 0; + if (val1 < val2) + return -1; + return 1; + } + } + owner->null_value= 1; + return -1; +} + + +int Arg_comparator::compare_e_real_fixed() +{ + double val1= (*a)->val(); + double val2= (*b)->val(); + if ((*a)->null_value || (*b)->null_value) + return test((*a)->null_value && (*b)->null_value); + return test(val1 == val2 || fabs(val1 - val2) < precision); +} + + int Arg_comparator::compare_int_signed() { longlong val1= (*a)->val_int(); @@ -577,17 +680,45 @@ int Arg_comparator::compare_e_int_diff_signedness() int Arg_comparator::compare_row() { int res= 0; + bool was_null= 0; (*a)->bring_value(); (*b)->bring_value(); uint n= (*a)->cols(); for (uint i= 0; i<n; i++) { - if ((res= comparators[i].compare())) - return res; + res= comparators[i].compare(); if (owner->null_value) - return -1; + { + // NULL was compared + switch (owner->functype()) { + case Item_func::NE_FUNC: + break; // NE never aborts on NULL even if abort_on_null is set + case Item_func::LT_FUNC: + case Item_func::LE_FUNC: + case Item_func::GT_FUNC: + case Item_func::GE_FUNC: + return -1; // <, <=, > and >= always fail on NULL + default: // EQ_FUNC + if (owner->abort_on_null) + return -1; // We do not need correct NULL returning + } + was_null= 1; + owner->null_value= 0; + res= 0; // continue comparison (maybe we will meet explicit difference) + } + else if (res) + return res; } - return res; + if (was_null) + { + /* + There was NULL(s) in comparison in some parts, but there was no + explicit difference in other parts, so we have to return NULL. + */ + owner->null_value= 1; + return -1; + } + return 0; } int Arg_comparator::compare_e_row() @@ -789,6 +920,26 @@ longlong Item_func_strcmp::val_int() } +bool Item_func_opt_neg::eq(const Item *item, bool binary_cmp) const +{ + /* Assume we don't have rtti */ + if (this == item) + return 1; + if (item->type() != FUNC_ITEM) + return 0; + Item_func *item_func=(Item_func*) item; + if (arg_count != item_func->arg_count || + functype() != item_func->functype()) + return 0; + if (negated != ((Item_func_opt_neg *) item_func)->negated) + return 0; + for (uint i=0; i < arg_count ; i++) + if (!args[i]->eq(item_func->arguments()[i], binary_cmp)) + return 0; + return 1; +} + + void Item_func_interval::fix_length_and_dec() { if (row->cols() > 8) @@ -915,7 +1066,8 @@ void Item_func_between::fix_length_and_dec() */ if (!args[0] || !args[1] || !args[2]) return; - agg_cmp_type(thd, &cmp_type, args, 3); + if ( agg_cmp_type(thd, &cmp_type, args, 3)) + return; if (cmp_type == STRING_RESULT && agg_arg_charsets(cmp_collation, args, 3, MY_COLL_CMP_CONV)) return; @@ -1463,7 +1615,8 @@ void Item_func_case::fix_length_and_dec() for (nagg= 0; nagg < ncases/2 ; nagg++) agg[nagg+1]= args[nagg*2]; nagg++; - agg_cmp_type(current_thd, &cmp_type, agg, nagg); + if (agg_cmp_type(current_thd, &cmp_type, agg, nagg)) + return; if ((cmp_type == STRING_RESULT) && agg_arg_charsets(cmp_collation, agg, nagg, MY_COLL_CMP_CONV)) return; @@ -1944,7 +2097,8 @@ void Item_func_in::fix_length_and_dec() uint const_itm= 1; THD *thd= current_thd; - agg_cmp_type(thd, &cmp_type, args, arg_count); + if (agg_cmp_type(thd, &cmp_type, args, arg_count)) + return; if (cmp_type == STRING_RESULT && agg_arg_charsets(cmp_collation, args, arg_count, MY_COLL_CMP_CONV)) @@ -2139,6 +2293,7 @@ Item_cond::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) and_tables_cache&= tmp_table_map; const_item_cache&= item->const_item(); with_sum_func= with_sum_func || item->with_sum_func; + with_subselect|= item->with_subselect; if (item->maybe_null) maybe_null=1; } @@ -2351,7 +2506,7 @@ longlong Item_func_isnull::val_int() Handle optimization if the argument can't be null This has to be here because of the test in update_used_tables(). */ - if (!used_tables_cache) + if (!used_tables_cache && !with_subselect) return cached_value; return args[0]->is_null() ? 1: 0; } @@ -2360,7 +2515,7 @@ longlong Item_is_not_null_test::val_int() { DBUG_ASSERT(fixed == 1); DBUG_ENTER("Item_is_not_null_test::val_int"); - if (!used_tables_cache) + if (!used_tables_cache && !with_subselect) { owner->was_null|= (!cached_value); DBUG_PRINT("info", ("cached :%d", cached_value)); @@ -2387,7 +2542,7 @@ void Item_is_not_null_test::update_used_tables() else { args[0]->update_used_tables(); - if (!(used_tables_cache=args[0]->used_tables())) + if (!(used_tables_cache=args[0]->used_tables()) && !with_subselect) { /* Remember if the value is always NULL or never NULL */ cached_value= (longlong) !args[0]->is_null(); diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index 0e157fd412c..7dbbdc7a63b 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -33,6 +33,7 @@ class Arg_comparator: public Sql_alloc arg_cmp_func func; Item_bool_func2 *owner; Arg_comparator *comparators; // used only for compare_row() + double precision; public: DTCollation cmp_collation; @@ -77,6 +78,8 @@ public: int compare_e_int(); // compare args[0] & args[1] int compare_e_int_diff_signedness(); int compare_e_row(); // compare args[0] & args[1] + int compare_real_fixed(); + int compare_e_real_fixed(); static arg_cmp_func comparator_matrix [4][2]; @@ -203,10 +206,11 @@ class Item_bool_func2 :public Item_int_func protected: Arg_comparator cmp; String tmp_value1,tmp_value2; + bool abort_on_null; public: Item_bool_func2(Item *a,Item *b) - :Item_int_func(a,b), cmp(tmp_arg, tmp_arg+1) {} + :Item_int_func(a,b), cmp(tmp_arg, tmp_arg+1), abort_on_null(FALSE) {} void fix_length_and_dec(); void set_cmp_func() { @@ -219,6 +223,7 @@ public: bool is_null() { return test(args[0]->is_null() || args[1]->is_null()); } bool is_bool_func() { return 1; } CHARSET_INFO *compare_collation() { return cmp.cmp_collation.collation; } + void top_level_item() { abort_on_null= TRUE; } friend class Arg_comparator; }; @@ -402,6 +407,7 @@ public: negated= !negated; return this; } + bool eq(const Item *item, bool binary_cmp) const; }; @@ -843,7 +849,8 @@ public: else { args[0]->update_used_tables(); - if ((const_item_cache= !(used_tables_cache= args[0]->used_tables()))) + if ((const_item_cache= !(used_tables_cache= args[0]->used_tables())) && + !with_subselect) { /* Remember if the value is always NULL or never NULL */ cached_value= (longlong) args[0]->is_null(); diff --git a/sql/item_func.cc b/sql/item_func.cc index 117ae19137b..12bb6571369 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -177,6 +177,7 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) used_tables_cache|= item->used_tables(); not_null_tables_cache|= item->not_null_tables(); const_item_cache&= item->const_item(); + with_subselect|= item->with_subselect; } } fix_length_and_dec(); @@ -476,7 +477,8 @@ longlong Item_func_signed::val_int() longlong value; int error; - if (args[0]->cast_to_int_type() != STRING_RESULT) + if (args[0]->cast_to_int_type() != STRING_RESULT || + args[0]->result_as_longlong()) { value= args[0]->val_int(); null_value= args[0]->null_value; @@ -528,7 +530,8 @@ longlong Item_func_unsigned::val_int() return (longlong) (dvalue + (dvalue > 0 ? 0.5 : -0.5)); } - if (args[0]->cast_to_int_type() != STRING_RESULT) + if (args[0]->cast_to_int_type() != STRING_RESULT || + args[0]->result_as_longlong()) { value= args[0]->val_int(); null_value= args[0]->null_value; @@ -2239,7 +2242,11 @@ longlong Item_func_release_lock::val_int() } else { +#ifdef EMBEDDED_LIBRARY + if (ull->locked && pthread_equal(current_thd->real_id,ull->thread)) +#else if (ull->locked && pthread_equal(pthread_self(),ull->thread)) +#endif { result=1; // Release is ok item_user_lock_release(ull); @@ -2469,8 +2476,9 @@ bool Item_func_set_user_var::update_hash(void *ptr, uint length, char *pos= (char*) entry+ ALIGN_SIZE(sizeof(user_var_entry)); if (entry->value == pos) entry->value=0; - if (!(entry->value=(char*) my_realloc(entry->value, length, - MYF(MY_ALLOW_ZERO_PTR)))) + entry->value= (char*) my_realloc(entry->value, length, + MYF(MY_ALLOW_ZERO_PTR | MY_WME)); + if (!entry->value) goto err; } } @@ -3152,7 +3160,7 @@ bool Item_func_match::fix_index() for (keynr=0 ; keynr < table->keys ; keynr++) { if ((table->key_info[keynr].flags & HA_FULLTEXT) && - (table->keys_in_use_for_query.is_set(keynr))) + (table->keys_in_use.is_set(keynr))) { ft_to_key[fts]=keynr; ft_cnt[fts]=0; @@ -3243,7 +3251,7 @@ double Item_func_match::val() if (ft_handler == NULL) DBUG_RETURN(-1.0); - if (table->null_row) /* NULL row from an outer join */ + if (key != NO_SUCH_KEY && table->null_row) /* NULL row from an outer join */ return 0.0; if (join_key) diff --git a/sql/item_func.h b/sql/item_func.h index 467b88eda76..ebe3a589aa1 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -590,6 +590,31 @@ public: }; +/* + Objects of this class are used for ROLLUP queries to wrap up + each constant item referred to in GROUP BY list. +*/ + +class Item_func_rollup_const :public Item_func +{ +public: + Item_func_rollup_const(Item *a) :Item_func(a) + { name= a->name; } + double val() { return args[0]->val(); } + longlong val_int() { return args[0]->val_int(); } + String *val_str(String *str) { return args[0]->val_str(str); } + const char *func_name() const { return "rollup_const"; } + bool const_item() const { return 0; } + Item_result result_type() const { return args[0]->result_type(); } + void fix_length_and_dec() + { + collation= args[0]->collation; + max_length= args[0]->max_length; + decimals=args[0]->decimals; + } +}; + + class Item_func_length :public Item_int_func { String value; diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index 6bd2e65632f..6cb8c790319 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -30,6 +30,7 @@ void Item_geometry_func::fix_length_and_dec() collation.set(&my_charset_bin); decimals=0; max_length=MAX_BLOB_WIDTH; + maybe_null= 1; } @@ -109,6 +110,7 @@ String *Item_func_as_wkt::val_str(String *str) void Item_func_as_wkt::fix_length_and_dec() { max_length=MAX_BLOB_WIDTH; + maybe_null= 1; } @@ -356,7 +358,8 @@ String *Item_func_spatial_collection::val_str(String *str) for (i= 0; i < arg_count; ++i) { String *res= args[i]->val_str(&arg_value); - if (args[i]->null_value) + uint32 len; + if (args[i]->null_value || ((len= res->length()) < WKB_HEADER_SIZE)) goto err; if (coll_type == Geometry::wkb_geometrycollection) @@ -365,13 +368,12 @@ String *Item_func_spatial_collection::val_str(String *str) In the case of GeometryCollection we don't need any checkings for item types, so just copy them into target collection */ - if (str->append(res->ptr(), res->length(), (uint32) 512)) + if (str->append(res->ptr(), len, (uint32) 512)) goto err; } else { enum Geometry::wkbType wkb_type; - uint32 len=res->length(); const char *data= res->ptr() + 1; /* @@ -379,8 +381,6 @@ String *Item_func_spatial_collection::val_str(String *str) are of specific type, let's do this checking now */ - if (len < 5) - goto err; wkb_type= (Geometry::wkbType) uint4korr(data); data+= 4; len-= 5; @@ -502,9 +502,13 @@ longlong Item_func_spatial_rel::val_int() longlong Item_func_isempty::val_int() { DBUG_ASSERT(fixed == 1); - String tmp; - null_value=0; - return args[0]->null_value ? 1 : 0; + String tmp; + String *swkb= args[0]->val_str(&tmp); + Geometry_buffer buffer; + + null_value= args[0]->null_value || + !(Geometry::construct(&buffer, swkb->ptr(), swkb->length())); + return null_value ? 1 : 0; } @@ -512,10 +516,11 @@ longlong Item_func_issimple::val_int() { DBUG_ASSERT(fixed == 1); String tmp; - String *wkb=args[0]->val_str(&tmp); - - if ((null_value= (!wkb || args[0]->null_value))) - return 0; + String *swkb= args[0]->val_str(&tmp); + Geometry_buffer buffer; + + null_value= args[0]->null_value || + !(Geometry::construct(&buffer, swkb->ptr(), swkb->length())); /* TODO: Ramil or Holyfoot, add real IsSimple calculation */ return 0; } diff --git a/sql/item_geofunc.h b/sql/item_geofunc.h index a466b606dc1..2719cbb0bab 100644 --- a/sql/item_geofunc.h +++ b/sql/item_geofunc.h @@ -33,6 +33,7 @@ public: Item_geometry_func(List<Item> &list) :Item_str_func(list) {} void fix_length_and_dec(); enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; } + bool is_null() { (void) val_int(); return null_value; } }; class Item_func_geometry_from_text: public Item_geometry_func @@ -80,6 +81,7 @@ public: void fix_length_and_dec() { max_length=20; // "GeometryCollection" is the most long + maybe_null= 1; }; }; @@ -221,6 +223,8 @@ public: } } void print(String *str) { Item_func::print(str); } + void fix_length_and_dec() { maybe_null= 1; } + bool is_null() { (void) val_int(); return null_value; } }; class Item_func_isempty: public Item_bool_func @@ -230,6 +234,7 @@ public: longlong val_int(); optimize_type select_optimize() const { return OPTIMIZE_NONE; } const char *func_name() const { return "isempty"; } + void fix_length_and_dec() { maybe_null= 1; } }; class Item_func_issimple: public Item_bool_func @@ -239,6 +244,7 @@ public: longlong val_int(); optimize_type select_optimize() const { return OPTIMIZE_NONE; } const char *func_name() const { return "issimple"; } + void fix_length_and_dec() { maybe_null= 1; } }; class Item_func_isclosed: public Item_bool_func @@ -248,6 +254,7 @@ public: longlong val_int(); optimize_type select_optimize() const { return OPTIMIZE_NONE; } const char *func_name() const { return "isclosed"; } + void fix_length_and_dec() { maybe_null= 1; } }; class Item_func_dimension: public Item_int_func @@ -257,7 +264,7 @@ public: Item_func_dimension(Item *a): Item_int_func(a) {} longlong val_int(); const char *func_name() const { return "dimension"; } - void fix_length_and_dec() { max_length=10; } + void fix_length_and_dec() { max_length= 10; maybe_null= 1; } }; class Item_func_x: public Item_real_func @@ -267,6 +274,11 @@ public: Item_func_x(Item *a): Item_real_func(a) {} double val(); const char *func_name() const { return "x"; } + void fix_length_and_dec() + { + Item_real_func::fix_length_and_dec(); + maybe_null= 1; + } }; @@ -277,6 +289,11 @@ public: Item_func_y(Item *a): Item_real_func(a) {} double val(); const char *func_name() const { return "y"; } + void fix_length_and_dec() + { + Item_real_func::fix_length_and_dec(); + maybe_null= 1; + } }; @@ -287,7 +304,7 @@ public: Item_func_numgeometries(Item *a): Item_int_func(a) {} longlong val_int(); const char *func_name() const { return "numgeometries"; } - void fix_length_and_dec() { max_length=10; } + void fix_length_and_dec() { max_length= 10; maybe_null= 1; } }; @@ -298,7 +315,7 @@ public: Item_func_numinteriorring(Item *a): Item_int_func(a) {} longlong val_int(); const char *func_name() const { return "numinteriorrings"; } - void fix_length_and_dec() { max_length=10; } + void fix_length_and_dec() { max_length= 10; maybe_null= 1; } }; @@ -309,7 +326,7 @@ public: Item_func_numpoints(Item *a): Item_int_func(a) {} longlong val_int(); const char *func_name() const { return "numpoints"; } - void fix_length_and_dec() { max_length=10; } + void fix_length_and_dec() { max_length= 10; maybe_null= 1; } }; @@ -320,6 +337,11 @@ public: Item_func_area(Item *a): Item_real_func(a) {} double val(); const char *func_name() const { return "area"; } + void fix_length_and_dec() + { + Item_real_func::fix_length_and_dec(); + maybe_null= 1; + } }; @@ -330,6 +352,11 @@ public: Item_func_glength(Item *a): Item_real_func(a) {} double val(); const char *func_name() const { return "glength"; } + void fix_length_and_dec() + { + Item_real_func::fix_length_and_dec(); + maybe_null= 1; + } }; @@ -340,7 +367,7 @@ public: Item_func_srid(Item *a): Item_int_func(a) {} longlong val_int(); const char *func_name() const { return "srid"; } - void fix_length_and_dec() { max_length= 10; } + void fix_length_and_dec() { max_length= 10; maybe_null= 1; } }; #define GEOM_NEW(obj_constructor) new obj_constructor diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index f7408cb5e9f..7c98f0c6380 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1583,6 +1583,19 @@ String *Item_func_encode::val_str(String *str) return res; } +void Item_func_encode::print(String *str) +{ + str->append(func_name()); + str->append('('); + args[0]->print(str); + str->append(','); + str->append('\''); + str->append(seed); + str->append('\''); + str->append(')'); +} + + String *Item_func_decode::val_str(String *str) { DBUG_ASSERT(fixed == 1); diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index b7cecad9516..4bd8574ff04 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -343,19 +343,24 @@ class Item_func_encode :public Item_str_func { protected: SQL_CRYPT sql_crypt; + String seed; public: - Item_func_encode(Item *a, char *seed): - Item_str_func(a),sql_crypt(seed) {} + Item_func_encode(Item *a, char *seed_arg): + Item_str_func(a), sql_crypt(seed_arg) + { + seed.copy(seed_arg, strlen(seed_arg), default_charset_info); + } String *val_str(String *); void fix_length_and_dec(); const char *func_name() const { return "encode"; } + void print(String *str); }; class Item_func_decode :public Item_func_encode { public: - Item_func_decode(Item *a, char *seed): Item_func_encode(a,seed) {} + Item_func_decode(Item *a, char *seed_arg): Item_func_encode(a, seed_arg) {} String *val_str(String *); const char *func_name() const { return "decode"; } }; diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index cd1f8f83821..cdbcde8b56b 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -39,6 +39,7 @@ Item_subselect::Item_subselect(): engine(0), old_engine(0), used_tables_cache(0), have_to_be_excluded(0), const_item_cache(1), engine_changed(0), changed(0) { + with_subselect= 1; reset(); /* item value is NULL if select_subselect not changed this value @@ -201,6 +202,9 @@ bool Item_subselect::exec() mem root */ thd->mem_root= &thd->main_mem_root; + if (thd->net.report_error) + /* Do not execute subselect in case of a fatal error */ + return 1; res= engine->exec(); thd->mem_root= old_root; @@ -350,6 +354,7 @@ Item_singlerow_subselect::select_transformer(JOIN *join) */ !(select_lex->item_list.head()->type() == FIELD_ITEM || select_lex->item_list.head()->type() == REF_ITEM) && + !join->conds && !join->having && /* switch off this optimisation for prepare statement, because we do not rollback this changes @@ -374,8 +379,6 @@ Item_singlerow_subselect::select_transformer(JOIN *join) */ substitution->walk(&Item::remove_dependence_processor, (byte *) select_lex->outer_select()); - /* SELECT without FROM clause can't have WHERE or HAVING clause */ - DBUG_ASSERT(join->conds == 0 && join->having == 0); return RES_REDUCE; } return RES_OK; @@ -1796,6 +1799,22 @@ bool subselect_single_select_engine::no_tables() /* + Check statically whether the subquery can return NULL + + SINOPSYS + subselect_single_select_engine::may_be_null() + + RETURN + FALSE can guarantee that the subquery never return NULL + TRUE otherwise +*/ +bool subselect_single_select_engine::may_be_null() +{ + return ((no_tables() && !join->conds && !join->having) ? maybe_null : 1); +} + + +/* Report about presence of tables in subquery SINOPSYS diff --git a/sql/item_subselect.h b/sql/item_subselect.h index 7b064bfe92c..539dcc5676a 100644 --- a/sql/item_subselect.h +++ b/sql/item_subselect.h @@ -301,7 +301,7 @@ public: enum Item_result type() { return res_type; } enum_field_types field_type() { return res_field_type; } virtual void exclude()= 0; - bool may_be_null() { return maybe_null; }; + virtual bool may_be_null() { return maybe_null; }; virtual table_map upper_select_const_tables()= 0; static table_map calc_const_tables(TABLE_LIST *); virtual void print(String *str)= 0; @@ -335,6 +335,7 @@ public: void print (String *str); int change_item(Item_subselect *si, select_subselect *result); bool no_tables(); + bool may_be_null(); }; diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index d6465406c68..4bd3d68b9c1 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -595,16 +595,10 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time, uint weekday; ulong length; const char *ptr, *end; - MY_LOCALE *locale; THD *thd= current_thd; - char buf[128]; - String tmp(buf, sizeof(buf), thd->variables.character_set_results); - uint errors= 0; + MY_LOCALE *locale= thd->variables.lc_time_names; - tmp.length(0); str->length(0); - str->set_charset(&my_charset_bin); - locale = thd->variables.lc_time_names; if (l_time->neg) str->append("-", 1); @@ -618,41 +612,37 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time, { switch (*++ptr) { case 'M': - if (!l_time->month) - return 1; - tmp.copy(locale->month_names->type_names[l_time->month-1], - strlen(locale->month_names->type_names[l_time->month-1]), - system_charset_info, tmp.charset(), &errors); - str->append(tmp.ptr(), tmp.length()); - break; + if (!l_time->month) + return 1; + str->append(locale->month_names->type_names[l_time->month-1], + strlen(locale->month_names->type_names[l_time->month-1]), + system_charset_info); + break; case 'b': - if (!l_time->month) - return 1; - tmp.copy(locale->ab_month_names->type_names[l_time->month-1], - strlen(locale->ab_month_names->type_names[l_time->month-1]), - system_charset_info, tmp.charset(), &errors); - str->append(tmp.ptr(), tmp.length()); - break; + if (!l_time->month) + return 1; + str->append(locale->ab_month_names->type_names[l_time->month-1], + strlen(locale->ab_month_names->type_names[l_time->month-1]), + system_charset_info); + break; case 'W': - if (type == MYSQL_TIMESTAMP_TIME) - return 1; - weekday= calc_weekday(calc_daynr(l_time->year,l_time->month, - l_time->day),0); - tmp.copy(locale->day_names->type_names[weekday], - strlen(locale->day_names->type_names[weekday]), - system_charset_info, tmp.charset(), &errors); - str->append(tmp.ptr(), tmp.length()); - break; + if (type == MYSQL_TIMESTAMP_TIME) + return 1; + weekday= calc_weekday(calc_daynr(l_time->year,l_time->month, + l_time->day),0); + str->append(locale->day_names->type_names[weekday], + strlen(locale->day_names->type_names[weekday]), + system_charset_info); + break; case 'a': - if (type == MYSQL_TIMESTAMP_TIME) - return 1; - weekday=calc_weekday(calc_daynr(l_time->year,l_time->month, - l_time->day),0); - tmp.copy(locale->ab_day_names->type_names[weekday], - strlen(locale->ab_day_names->type_names[weekday]), - system_charset_info, tmp.charset(), &errors); - str->append(tmp.ptr(), tmp.length()); - break; + if (type == MYSQL_TIMESTAMP_TIME) + return 1; + weekday=calc_weekday(calc_daynr(l_time->year,l_time->month, + l_time->day),0); + str->append(locale->ab_day_names->type_names[weekday], + strlen(locale->ab_day_names->type_names[weekday]), + system_charset_info); + break; case 'D': if (type == MYSQL_TIMESTAMP_TIME) return 1; @@ -1638,8 +1628,9 @@ longlong Item_func_sec_to_time::val_int() void Item_func_date_format::fix_length_and_dec() { + THD* thd= current_thd; decimals=0; - collation.set(&my_charset_bin); + collation.set(thd->variables.collation_connection); if (args[1]->type() == STRING_ITEM) { // Optimize the normal case fixed_length=1; @@ -1653,17 +1644,14 @@ void Item_func_date_format::fix_length_and_dec() args[1]->collation.set( get_charset_by_csname(args[1]->collation.collation->csname, MY_CS_BINSORT,MYF(0)), DERIVATION_COERCIBLE); - /* - The result is a binary string (no reason to use collation->mbmaxlen - This is becasue make_date_time() only returns binary strings - */ - max_length= format_length(((Item_string*) args[1])->const_string()); + max_length= format_length(((Item_string*) args[1])->const_string()) * + collation.collation->mbmaxlen; } else { fixed_length=0; - /* The result is a binary string (no reason to use collation->mbmaxlen */ - max_length=min(args[1]->max_length,MAX_BLOB_WIDTH) * 10; + max_length= min(args[1]->max_length,MAX_BLOB_WIDTH) * 10 * + collation.collation->mbmaxlen; set_if_smaller(max_length,MAX_BLOB_WIDTH); } maybe_null=1; // If wrong date @@ -1783,6 +1771,7 @@ String *Item_func_date_format::val_str(String *str) date_time_format.format.length= format->length(); /* Create the result string */ + str->set_charset(collation.collation); if (!make_date_time(&date_time_format, &l_time, is_time_format ? MYSQL_TIMESTAMP_TIME : MYSQL_TIMESTAMP_DATE, @@ -2502,7 +2491,10 @@ longlong Item_date_typecast::val_int() DBUG_ASSERT(fixed == 1); TIME ltime; if (args[0]->get_date(<ime, TIME_FUZZY_DATE)) + { + null_value= 1; return 0; + } return (longlong) (ltime.year * 10000L + ltime.month * 100 + ltime.day); } diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index 45cad627c05..2383b4f86ac 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -751,12 +751,19 @@ public: String *val_str(String *str); const char *cast_type() const { return "datetime"; } enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; } + void fix_length_and_dec() + { + Item_typecast_maybe_null::fix_length_and_dec(); + decimals= DATETIME_DEC; + } + Field *tmp_table_field(TABLE *t_arg) { return (new Field_datetime(maybe_null, name, t_arg, &my_charset_bin)); } bool result_as_longlong() { return TRUE; } longlong val_int(); + double val() { return (double) val_int(); } }; class Item_func_makedate :public Item_str_func diff --git a/sql/key.cc b/sql/key.cc index 7ddd40de2c9..5bb389fcb45 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -89,20 +89,21 @@ void key_copy(byte *key,TABLE *table,uint idx,uint key_length) } if (key_part->key_part_flag & HA_BLOB_PART) { - char *pos; - ulong blob_length=((Field_blob*) key_part->field)->get_length(); - key_length-=2; - ((Field_blob*) key_part->field)->get_ptr(&pos); - length=min(key_length,key_part->length); - set_if_smaller(blob_length,length); - int2store(key,(uint) blob_length); - key+=2; // Skip length info - memcpy(key,pos,blob_length); + key_length-= HA_KEY_BLOB_LENGTH; + length= min(key_length, key_part->length); + key_part->field->get_key_image((char *) key, length, + key_part->field->charset(), + Field::itRAW); + key+= HA_KEY_BLOB_LENGTH; } else { - length=min(key_length,key_part->length); - memcpy(key,table->record[0]+key_part->offset,(size_t) length); + length= min(key_length, key_part->length); + Field *field= key_part->field; + CHARSET_INFO *cs= field->charset(); + uint bytes= field->get_key_image((char *) key, length, cs, Field::itRAW); + if (bytes < length) + cs->cset->fill(cs, (char *) key + bytes, length - bytes, ' '); } key+=length; key_length-=length; diff --git a/sql/log.cc b/sql/log.cc index 7e97bfd0712..b91ec2b3dee 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1350,6 +1350,21 @@ COLLATION_CONNECTION=%u,COLLATION_DATABASE=%u,COLLATION_SERVER=%u", if (e.write(file)) goto err; } + /* + Use the same ONE_SHOT trick for making replication of lc_time_names. + */ + if (thd->variables.lc_time_names->number) // Not en_US + { + char buf[32]; + uint length= my_snprintf(buf, sizeof(buf), + "SET ONE_SHOT LC_TIME_NAMES=%u", + (uint) thd->variables.lc_time_names->number); + Query_log_event e(thd, buf, length, 0, FALSE); + e.set_log_pos(this); + e.error_code= 0; // This statement cannot fail (see [1]). + if (e.write(file)) + goto err; + } #endif if (thd->last_insert_id_used) diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 8d6cdebe1f7..6bd60280399 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -59,6 +59,8 @@ void kill_one_thread(THD *thd, ulong id); bool net_request_file(NET* net, const char* fname); char* query_table_status(THD *thd,const char *db,const char *table_name); +void net_set_write_timeout(NET *net, uint timeout); +void net_set_read_timeout(NET *net, uint timeout); #define x_free(A) { my_free((gptr) (A),MYF(MY_WME | MY_FAE | MY_ALLOW_ZERO_PTR)); } #define safeFree(x) { if(x) { my_free((gptr) x,MYF(0)); x = NULL; } } @@ -71,6 +73,7 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset; typedef struct my_locale_st { + uint number; const char *name; const char *description; const bool is_ascii; @@ -84,6 +87,7 @@ extern MY_LOCALE my_locale_en_US; extern MY_LOCALE *my_locales[]; MY_LOCALE *my_locale_by_name(const char *name); +MY_LOCALE *my_locale_by_number(uint number); /*************************************************************************** Configuration parameters @@ -422,6 +426,7 @@ struct Query_cache_query_flags ulong sql_mode; ulong max_sort_length; ulong group_concat_max_len; + ulong default_week_format; MY_LOCALE *lc_time_names; }; #define QUERY_CACHE_FLAGS_SIZE sizeof(Query_cache_query_flags) @@ -563,25 +568,22 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, uint &key_count, int select_field_count); int mysql_create_table(THD *thd,const char *db, const char *table_name, HA_CREATE_INFO *create_info, - List<create_field> &fields, List<Key> &keys, + Alter_info *alter_info, bool tmp_table, uint select_field_count); TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, const char *db, const char *name, - List<create_field> *extra_fields, - List<Key> *keys, + Alter_info *alter_info, List<Item> *items, MYSQL_LOCK **lock); int mysql_alter_table(THD *thd, char *new_db, char *new_name, HA_CREATE_INFO *create_info, TABLE_LIST *table_list, - List<create_field> &fields, - List<Key> &keys, + Alter_info *alter_info, uint order_num, ORDER *order, enum enum_duplicates handle_duplicates, - bool ignore, - ALTER_INFO *alter_info, bool do_send_ok=1); -int mysql_recreate_table(THD *thd, TABLE_LIST *table_list, bool do_send_ok); + bool ignore); +int mysql_recreate_table(THD *thd, TABLE_LIST *table_list); int mysql_create_like_table(THD *thd, TABLE_LIST *table, HA_CREATE_INFO *create_info, Table_ident *src_table); @@ -590,9 +592,6 @@ bool mysql_rename_table(enum db_type base, const char * old_name, const char *new_db, const char * new_name); -int mysql_create_index(THD *thd, TABLE_LIST *table_list, List<Key> &keys); -int mysql_drop_index(THD *thd, TABLE_LIST *table_list, - ALTER_INFO *alter_info); int mysql_prepare_update(THD *thd, TABLE_LIST *table_list, TABLE_LIST *update_table_list, Item **conds, uint order_num, ORDER *order); @@ -679,7 +678,8 @@ int get_quote_char_for_identifier(THD *thd, const char *name, uint length); void mysqld_list_fields(THD *thd,TABLE_LIST *table, const char *wild); int mysqld_dump_create_info(THD *thd, TABLE *table, int fd = -1); int mysqld_show_create(THD *thd, TABLE_LIST *table_list); -int mysqld_show_create_db(THD *thd, char *dbname, HA_CREATE_INFO *create); +int mysqld_show_create_db(THD *thd, char *dbname, + const HA_CREATE_INFO *create); void mysqld_list_processes(THD *thd,const char *user,bool verbose); int mysqld_show_status(THD *thd); @@ -861,6 +861,7 @@ bool open_log(MYSQL_LOG *log, const char *hostname, /* mysqld.cc */ extern void yyerror(const char*); +my_bool mysql_rm_tmp_tables(void); /* item_func.cc */ extern bool check_reserved_words(LEX_STRING *name); @@ -909,6 +910,7 @@ extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN]; extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file; extern char log_error_file[FN_REFLEN]; extern double log_10[32]; +extern double log_01[32]; extern ulonglong log_10_int[20]; extern ulonglong keybuff_size; extern ulong refresh_version,flush_version, thread_id,query_id,opened_tables; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index cd0ddc00624..51332053df6 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -210,12 +210,6 @@ inline void reset_floating_point_exceptions() } /* cplusplus */ - -#if defined(HAVE_LINUXTHREADS) -#define THR_KILL_SIGNAL SIGINT -#else -#define THR_KILL_SIGNAL SIGUSR2 // Can't use this with LinuxThreads -#endif #define MYSQL_KILL_SIGNAL SIGTERM #ifdef HAVE_GLIBC2_STYLE_GETHOSTBYNAME_R @@ -361,6 +355,7 @@ ulong my_bind_addr; /* the address we bind to */ volatile ulong cached_thread_count= 0; double log_10[32]; /* 10 potences */ +double log_01[32]; time_t start_time; char mysql_home[FN_REFLEN], pidfile_name[FN_REFLEN], system_time_zone[30]; @@ -456,6 +451,7 @@ pthread_cond_t COND_refresh,COND_thread_count, COND_slave_stopped, pthread_cond_t COND_thread_cache,COND_flush_thread_cache; pthread_t signal_thread; pthread_attr_t connection_attrib; +static uint thr_kill_signal; /* replication parameters, if master_host is not NULL, we are a slave */ uint master_port= MYSQL_PORT, master_connect_retry = 60; @@ -626,7 +622,7 @@ static void close_connections(void) DBUG_PRINT("info",("Waiting for select thread")); #ifndef DONT_USE_THR_ALARM - if (pthread_kill(select_thread,THR_CLIENT_ALARM)) + if (pthread_kill(select_thread, thr_client_alarm)) break; // allready dead #endif set_timespec(abstime, 2); @@ -1074,7 +1070,10 @@ void clean_up(bool print_message) #endif #ifdef HAVE_OPENSSL if (ssl_acceptor_fd) + { + SSL_CTX_free(ssl_acceptor_fd->ssl_context); my_free((gptr) ssl_acceptor_fd, MYF(MY_ALLOW_ZERO_PTR)); + } #endif /* HAVE_OPENSSL */ #ifdef USE_REGEX my_regex_end(); @@ -1573,6 +1572,12 @@ void end_thread(THD *thd, bool put_in_cache) thd=thread_cache.get(); thd->real_id=pthread_self(); (void) thd->store_globals(); + /* + THD::mysys_var::abort is associated with physical thread rather + than with THD object. So we need to reset this flag before using + this thread for handling of new THD object/connection. + */ + thd->mysys_var->abort= 0; thd->thr_create_time= time(NULL); threads.append(thd); pthread_mutex_unlock(&LOCK_thread_count); @@ -1934,7 +1939,10 @@ static void check_data_home(const char *path) extern "C" sig_handler handle_segfault(int sig) { + time_t curr_time; + struct tm tm; THD *thd=current_thd; + /* Strictly speaking, one needs a mutex here but since we have got SIGSEGV already, things are a mess @@ -1948,11 +1956,17 @@ extern "C" sig_handler handle_segfault(int sig) } segfaulted = 1; + + curr_time= time(NULL); + localtime_r(&curr_time, &tm); + fprintf(stderr,"\ -mysqld got signal %d;\n\ +%02d%02d%02d %2d:%02d:%02d - mysqld got signal %d;\n\ This could be because you hit a bug. It is also possible that this binary\n\ or one of the libraries it was linked against is corrupt, improperly built,\n\ or misconfigured. This error can also be caused by malfunctioning hardware.\n", + tm.tm_year % 100, tm.tm_mon+1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec, sig); fprintf(stderr, "\ We will try our best to scrape up some info that will hopefully help diagnose\n\ @@ -2049,7 +2063,9 @@ static void init_signals(void) DBUG_ENTER("init_signals"); if (test_flags & TEST_SIGINT) - my_sigset(THR_KILL_SIGNAL,end_thread_signal); + { + my_sigset(thr_kill_signal, end_thread_signal); + } my_sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called! if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL)) @@ -2104,10 +2120,13 @@ static void init_signals(void) #ifdef SIGTSTP sigaddset(&set,SIGTSTP); #endif - sigaddset(&set,THR_SERVER_ALARM); + if (thd_lib_detected != THD_LIB_LT) + sigaddset(&set,THR_SERVER_ALARM); if (test_flags & TEST_SIGINT) - sigdelset(&set,THR_KILL_SIGNAL); // May be SIGINT - sigdelset(&set,THR_CLIENT_ALARM); // For alarms + { + // May be SIGINT + sigdelset(&set, thr_kill_signal); + } sigprocmask(SIG_SETMASK,&set,NULL); pthread_sigmask(SIG_SETMASK,&set,NULL); DBUG_VOID_RETURN; @@ -2163,24 +2182,20 @@ extern "C" void *signal_hand(void *arg __attribute__((unused))) */ init_thr_alarm(max_connections + global_system_variables.max_insert_delayed_threads + 10); -#if SIGINT != THR_KILL_SIGNAL - if (test_flags & TEST_SIGINT) + if (thd_lib_detected != THD_LIB_LT && (test_flags & TEST_SIGINT)) { (void) sigemptyset(&set); // Setup up SIGINT for debug (void) sigaddset(&set,SIGINT); // For debugging (void) pthread_sigmask(SIG_UNBLOCK,&set,NULL); } -#endif (void) sigemptyset(&set); // Setup up SIGINT for debug #ifdef USE_ONE_SIGNAL_HAND (void) sigaddset(&set,THR_SERVER_ALARM); // For alarms #endif #ifndef IGNORE_SIGHUP_SIGQUIT (void) sigaddset(&set,SIGQUIT); -#if THR_CLIENT_ALARM != SIGHUP (void) sigaddset(&set,SIGHUP); #endif -#endif (void) sigaddset(&set,SIGTERM); (void) sigaddset(&set,SIGTSTP); @@ -3140,6 +3155,13 @@ int main(int argc, char **argv) MY_INIT(argv[0]); // init my_sys library & pthreads + /* Set signal used to kill MySQL */ +#if defined(SIGUSR2) + thr_kill_signal= thd_lib_detected == THD_LIB_LT ? SIGINT : SIGUSR2; +#else + thr_kill_signal= SIGINT; +#endif + #ifdef _CUSTOMSTARTUPCONFIG_ if (_cust_check_startup()) { @@ -3241,7 +3263,7 @@ we force server id to 2, but this MySQL server will not act as a slave."); */ error_handler_hook = my_message_sql; start_signal_handler(); // Creates pidfile - if (acl_init(opt_noacl) || + if (mysql_rm_tmp_tables() || acl_init(opt_noacl) || my_tz_init((THD *)0, default_tz_name, opt_bootstrap)) { abort_loop=1; @@ -3601,10 +3623,9 @@ static bool read_init_file(char *file_name) #ifndef EMBEDDED_LIBRARY static void create_new_thread(THD *thd) { + NET *net=&thd->net; DBUG_ENTER("create_new_thread"); - NET *net=&thd->net; // For easy ref - net->read_timeout = (uint) connect_timeout; if (protocol_version > 9) net->return_errno=1; @@ -3899,12 +3920,7 @@ extern "C" pthread_handler_decl(handle_connections_sockets, } if (sock == unix_sock) thd->host=(char*) my_localhost; -#ifdef __WIN__ - /* Set default wait_timeout */ - ulong wait_timeout= global_system_variables.net_wait_timeout * 1000; - (void) setsockopt(new_sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&wait_timeout, - sizeof(wait_timeout)); -#endif + create_new_thread(thd); } diff --git a/sql/net_serv.cc b/sql/net_serv.cc index 08184537896..a5a05d381cd 100644 --- a/sql/net_serv.cc +++ b/sql/net_serv.cc @@ -491,7 +491,7 @@ net_real_write(NET *net,const char *packet,ulong len) thr_alarm(&alarmed,(uint) net->write_timeout,&alarm_buff); #else alarmed=0; - vio_timeout(net->vio, 1, net->write_timeout); + /* Write timeout is set in net_set_write_timeout */ #endif /* NO_ALARM */ pos=(char*) packet; end=pos+len; @@ -684,7 +684,7 @@ my_real_read(NET *net, ulong *complen) if (net_blocking) thr_alarm(&alarmed,net->read_timeout,&alarm_buff); #else - vio_timeout(net->vio, 0, net->read_timeout); + /* Read timeout is set in net_set_read_timeout */ #endif /* NO_ALARM */ pos = net->buff + net->where_b; /* net->packet -4 */ @@ -995,3 +995,26 @@ my_net_read(NET *net) return len; } + +void net_set_read_timeout(NET *net, uint timeout) +{ + DBUG_ENTER("net_set_read_timeout"); + DBUG_PRINT("enter", ("timeout: %d", timeout)); + net->read_timeout= timeout; +#ifdef NO_ALARM + vio_timeout(net->vio, 0, timeout); +#endif + DBUG_VOID_RETURN; +} + + +void net_set_write_timeout(NET *net, uint timeout) +{ + DBUG_ENTER("net_set_write_timeout"); + DBUG_PRINT("enter", ("timeout: %d", timeout)); + net->write_timeout= timeout; +#ifdef NO_ALARM + vio_timeout(net->vio, 1, timeout); +#endif + DBUG_VOID_RETURN; +} diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 06e42ff363f..01b366077b0 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -128,6 +128,89 @@ static char is_null_string[2]= {1,0}; - get_quick_select() - Walk the SEL_ARG, materialize the key intervals, and create QUICK_RANGE_SELECT object that will read records within these intervals. + + 4. SPACE COMPLEXITY NOTES + + SEL_ARG graph is a representation of an ordered disjoint sequence of + intervals over the ordered set of index tuple values. + + For multi-part keys, one can construct a WHERE expression such that its + list of intervals will be of combinatorial size. Here is an example: + + (keypart1 IN (1,2, ..., n1)) AND + (keypart2 IN (1,2, ..., n2)) AND + (keypart3 IN (1,2, ..., n3)) + + For this WHERE clause the list of intervals will have n1*n2*n3 intervals + of form + + (keypart1, keypart2, keypart3) = (k1, k2, k3), where 1 <= k{i} <= n{i} + + SEL_ARG graph structure aims to reduce the amount of required space by + "sharing" the elementary intervals when possible (the pic at the + beginning of this comment has examples of such sharing). The sharing may + prevent combinatorial blowup: + + There are WHERE clauses that have combinatorial-size interval lists but + will be represented by a compact SEL_ARG graph. + Example: + (keypartN IN (1,2, ..., n1)) AND + ... + (keypart2 IN (1,2, ..., n2)) AND + (keypart1 IN (1,2, ..., n3)) + + but not in all cases: + + - There are WHERE clauses that do have a compact SEL_ARG-graph + representation but get_mm_tree() and its callees will construct a + graph of combinatorial size. + Example: + (keypart1 IN (1,2, ..., n1)) AND + (keypart2 IN (1,2, ..., n2)) AND + ... + (keypartN IN (1,2, ..., n3)) + + - There are WHERE clauses for which the minimal possible SEL_ARG graph + representation will have combinatorial size. + Example: + By induction: Let's take any interval on some keypart in the middle: + + kp15=c0 + + Then let's AND it with this interval 'structure' from preceding and + following keyparts: + + (kp14=c1 AND kp16=c3) OR keypart14=c2) (*) + + We will obtain this SEL_ARG graph: + + kp14 $ kp15 $ kp16 + $ $ + +---------+ $ +---------+ $ +---------+ + | kp14=c1 |--$-->| kp15=c0 |--$-->| kp16=c3 | + +---------+ $ +---------+ $ +---------+ + | $ $ + +---------+ $ +---------+ $ + | kp14=c2 |--$-->| kp15=c0 | $ + +---------+ $ +---------+ $ + $ $ + + Note that we had to duplicate "kp15=c0" and there was no way to avoid + that. + The induction step: AND the obtained expression with another "wrapping" + expression like (*). + When the process ends because of the limit on max. number of keyparts + we'll have: + + WHERE clause length is O(3*#max_keyparts) + SEL_ARG graph size is O(2^(#max_keyparts/2)) + + (it is also possible to construct a case where instead of 2 in 2^n we + have a bigger constant, e.g. 4, and get a graph with 4^(31/2)= 2^31 + nodes) + + We avoid consuming too much memory by setting a limit on the number of + SEL_ARG object we can construct during one range analysis invocation. */ class SEL_ARG :public Sql_alloc @@ -158,6 +241,8 @@ public: enum leaf_color { BLACK,RED } color; enum Type { IMPOSSIBLE, MAYBE, MAYBE_KEY, KEY_RANGE } type; + enum { MAX_SEL_ARGS = 16000 }; + SEL_ARG() {} SEL_ARG(SEL_ARG &); SEL_ARG(Field *,const char *,const char *); @@ -227,7 +312,8 @@ public: return new SEL_ARG(field, part, min_value, arg->max_value, min_flag, arg->max_flag, maybe_flag | arg->maybe_flag); } - SEL_ARG *clone(SEL_ARG *new_parent,SEL_ARG **next); + SEL_ARG *clone(struct st_qsel_param *param, SEL_ARG *new_parent, + SEL_ARG **next); bool copy_min(SEL_ARG* arg) { // Get overlapping range @@ -365,7 +451,7 @@ public: { return parent->left == this ? &parent->left : &parent->right; } - SEL_ARG *clone_tree(); + SEL_ARG *clone_tree(struct st_qsel_param *param); }; @@ -391,6 +477,8 @@ typedef struct st_qsel_param { max_key[MAX_KEY_LENGTH+MAX_FIELD_WIDTH]; bool quick; // Don't calulate possible keys COND *cond; + /* Number of SEL_ARG objects allocated by SEL_ARG::clone_tree operations */ + uint alloced_sel_args; } PARAM; static SEL_TREE * get_mm_parts(PARAM *param,COND *cond_func,Field *field, @@ -413,8 +501,8 @@ static void print_quick(QUICK_SELECT *quick,const key_map* needed_reg); static SEL_TREE *tree_and(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2); static SEL_TREE *tree_or(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2); static SEL_ARG *sel_add(SEL_ARG *key1,SEL_ARG *key2); -static SEL_ARG *key_or(SEL_ARG *key1,SEL_ARG *key2); -static SEL_ARG *key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag); +static SEL_ARG *key_or(PARAM *param, SEL_ARG *key1,SEL_ARG *key2); +static SEL_ARG *key_and(PARAM *param, SEL_ARG *key1,SEL_ARG *key2,uint clone_flag); static bool get_range(SEL_ARG **e1,SEL_ARG **e2,SEL_ARG *root1); static bool get_quick_keys(PARAM *param,QUICK_SELECT *quick,KEY_PART *key, SEL_ARG *key_tree,char *min_key,uint min_key_flag, @@ -424,6 +512,7 @@ static bool eq_tree(SEL_ARG* a,SEL_ARG *b); static SEL_ARG null_element(SEL_ARG::IMPOSSIBLE); static bool null_part_in_key(KEY_PART *key_part, const char *key, uint length); + /*************************************************************************** ** Basic functions for SQL_SELECT and QUICK_SELECT ***************************************************************************/ @@ -568,12 +657,17 @@ SEL_ARG::SEL_ARG(Field *field_,uint8 part_,char *min_value_,char *max_value_, left=right= &null_element; } -SEL_ARG *SEL_ARG::clone(SEL_ARG *new_parent,SEL_ARG **next_arg) +SEL_ARG *SEL_ARG::clone(PARAM *param, SEL_ARG *new_parent, SEL_ARG **next_arg) { SEL_ARG *tmp; + + /* Bail out if we have already generated too many SEL_ARGs */ + if (++param->alloced_sel_args > MAX_SEL_ARGS) + return 0; + if (type != KEY_RANGE) { - if (!(tmp= new SEL_ARG(type))) + if (!(tmp= new (param->mem_root) SEL_ARG(type))) return 0; // out of memory tmp->prev= *next_arg; // Link into next/prev chain (*next_arg)->next=tmp; @@ -581,20 +675,21 @@ SEL_ARG *SEL_ARG::clone(SEL_ARG *new_parent,SEL_ARG **next_arg) } else { - if (!(tmp= new SEL_ARG(field,part, min_value,max_value, - min_flag, max_flag, maybe_flag))) + if (!(tmp= new (param->mem_root) SEL_ARG(field,part, min_value,max_value, + min_flag, max_flag, maybe_flag))) return 0; // OOM tmp->parent=new_parent; tmp->next_key_part=next_key_part; if (left != &null_element) - tmp->left=left->clone(tmp,next_arg); + if (!(tmp->left=left->clone(param, tmp, next_arg))) + return 0; // OOM tmp->prev= *next_arg; // Link into next/prev chain (*next_arg)->next=tmp; (*next_arg)= tmp; if (right != &null_element) - if (!(tmp->right= right->clone(tmp,next_arg))) + if (!(tmp->right= right->clone(param, tmp, next_arg))) return 0; // OOM } increment_use_count(1); @@ -672,11 +767,12 @@ static int sel_cmp(Field *field, char *a,char *b,uint8 a_flag,uint8 b_flag) } -SEL_ARG *SEL_ARG::clone_tree() +SEL_ARG *SEL_ARG::clone_tree(PARAM *param) { SEL_ARG tmp_link,*next_arg,*root; next_arg= &tmp_link; - root= clone((SEL_ARG *) 0, &next_arg); + if (!(root= clone(param, (SEL_ARG *) 0, &next_arg))) + return 0; next_arg->next=0; // Fix last link tmp_link.next->prev=0; // Fix first link if (root) // If not OOM @@ -890,6 +986,7 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use, param.real_keynr[param.keys++]=idx; } param.key_parts_end=key_parts; + param.alloced_sel_args= 0; if ((tree=get_mm_tree(¶m,cond))) { @@ -991,7 +1088,8 @@ static SEL_TREE *get_mm_tree(PARAM *param,COND *cond) while ((item=li++)) { SEL_TREE *new_tree=get_mm_tree(param,item); - if (param->thd->is_fatal_error) + if (param->thd->is_fatal_error || + param->alloced_sel_args > SEL_ARG::MAX_SEL_ARGS) DBUG_RETURN(0); // out of memory tree=tree_and(param,tree,new_tree); if (tree && tree->type == SEL_TREE::IMPOSSIBLE) @@ -1524,7 +1622,7 @@ tree_and(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2) tree1->type=SEL_TREE::KEY_SMALLER; DBUG_RETURN(tree1); } - + /* Join the trees key per key */ SEL_ARG **key1,**key2,**end; for (key1= tree1->keys,key2= tree2->keys,end=key1+param->keys ; @@ -1537,12 +1635,13 @@ tree_and(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2) flag|=CLONE_KEY1_MAYBE; if (*key2 && !(*key2)->simple_key()) flag|=CLONE_KEY2_MAYBE; - *key1=key_and(*key1,*key2,flag); + *key1=key_and(param, *key1, *key2, flag); if (*key1 && (*key1)->type == SEL_ARG::IMPOSSIBLE) { tree1->type= SEL_TREE::IMPOSSIBLE; #ifdef EXTRA_DEBUG - (*key1)->test_use_count(*key1); + if (param->alloced_sel_args < SEL_ARG::MAX_SEL_ARGS) + (*key1)->test_use_count(*key1); #endif break; } @@ -1574,12 +1673,13 @@ tree_or(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2) for (key1= tree1->keys,key2= tree2->keys,end=key1+param->keys ; key1 != end ; key1++,key2++) { - *key1=key_or(*key1,*key2); + *key1= key_or(param, *key1, *key2); if (*key1) { result=tree1; // Added to tree1 #ifdef EXTRA_DEBUG - (*key1)->test_use_count(*key1); + if (param->alloced_sel_args < SEL_ARG::MAX_SEL_ARGS) + (*key1)->test_use_count(*key1); #endif } } @@ -1590,14 +1690,14 @@ tree_or(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2) /* And key trees where key1->part < key2 -> part */ static SEL_ARG * -and_all_keys(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) +and_all_keys(PARAM *param, SEL_ARG *key1, SEL_ARG *key2, uint clone_flag) { SEL_ARG *next; ulong use_count=key1->use_count; if (key1->elements != 1) { - key2->use_count+=key1->elements-1; + key2->use_count+=key1->elements-1; //psergey: why we don't count that key1 has n-k-p? key2->increment_use_count((int) key1->elements-1); } if (key1->type == SEL_ARG::MAYBE_KEY) @@ -1609,7 +1709,7 @@ and_all_keys(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) { if (next->next_key_part) { - SEL_ARG *tmp=key_and(next->next_key_part,key2,clone_flag); + SEL_ARG *tmp= key_and(param, next->next_key_part, key2, clone_flag); if (tmp && tmp->type == SEL_ARG::IMPOSSIBLE) { key1=key1->tree_delete(next); @@ -1618,6 +1718,8 @@ and_all_keys(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) next->next_key_part=tmp; if (use_count) next->increment_use_count(use_count); + if (param->alloced_sel_args > SEL_ARG::MAX_SEL_ARGS) + break; } else next->next_key_part=key2; @@ -1644,7 +1746,7 @@ and_all_keys(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag) */ static SEL_ARG * -key_and(SEL_ARG *key1, SEL_ARG *key2, uint clone_flag) +key_and(PARAM *param, SEL_ARG *key1, SEL_ARG *key2, uint clone_flag) { if (!key1) return key2; @@ -1660,9 +1762,9 @@ key_and(SEL_ARG *key1, SEL_ARG *key2, uint clone_flag) // key1->part < key2->part key1->use_count--; if (key1->use_count > 0) - if (!(key1= key1->clone_tree())) + if (!(key1= key1->clone_tree(param))) return 0; // OOM - return and_all_keys(key1,key2,clone_flag); + return and_all_keys(param, key1, key2, clone_flag); } if (((clone_flag & CLONE_KEY2_MAYBE) && @@ -1680,14 +1782,14 @@ key_and(SEL_ARG *key1, SEL_ARG *key2, uint clone_flag) if (key1->use_count > 1) { key1->use_count--; - if (!(key1=key1->clone_tree())) + if (!(key1=key1->clone_tree(param))) return 0; // OOM key1->use_count++; } if (key1->type == SEL_ARG::MAYBE_KEY) { // Both are maybe key - key1->next_key_part=key_and(key1->next_key_part,key2->next_key_part, - clone_flag); + key1->next_key_part=key_and(param, key1->next_key_part, + key2->next_key_part, clone_flag); if (key1->next_key_part && key1->next_key_part->type == SEL_ARG::IMPOSSIBLE) return key1; @@ -1698,7 +1800,7 @@ key_and(SEL_ARG *key1, SEL_ARG *key2, uint clone_flag) if (key2->next_key_part) { key1->use_count--; // Incremented in and_all_keys - return and_all_keys(key1,key2,clone_flag); + return and_all_keys(param, key1, key2, clone_flag); } key2->use_count--; // Key2 doesn't have a tree } @@ -1727,7 +1829,8 @@ key_and(SEL_ARG *key1, SEL_ARG *key2, uint clone_flag) } else if (get_range(&e2,&e1,key2)) continue; - SEL_ARG *next=key_and(e1->next_key_part,e2->next_key_part,clone_flag); + SEL_ARG *next=key_and(param, e1->next_key_part, e2->next_key_part, + clone_flag); e1->increment_use_count(1); e2->increment_use_count(1); if (!next || next->type != SEL_ARG::IMPOSSIBLE) @@ -1775,7 +1878,7 @@ get_range(SEL_ARG **e1,SEL_ARG **e2,SEL_ARG *root1) static SEL_ARG * -key_or(SEL_ARG *key1,SEL_ARG *key2) +key_or(PARAM *param, SEL_ARG *key1,SEL_ARG *key2) { if (!key1) { @@ -1823,7 +1926,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2) { swap_variables(SEL_ARG *,key1,key2); } - if (key1->use_count > 0 || !(key1=key1->clone_tree())) + if (key1->use_count > 0 || !(key1=key1->clone_tree(param))) return 0; // OOM } @@ -1967,7 +2070,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2) { // tmp.min. <= x <= tmp.max tmp->maybe_flag|= key.maybe_flag; key.increment_use_count(key1->use_count+1); - tmp->next_key_part=key_or(tmp->next_key_part,key.next_key_part); + tmp->next_key_part= key_or(param, tmp->next_key_part, key.next_key_part); if (!cmp) // Key2 is ready break; key.copy_max_to_min(tmp); @@ -1998,7 +2101,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2) tmp->increment_use_count(key1->use_count+1); /* Increment key count as it may be used for next loop */ key.increment_use_count(1); - new_arg->next_key_part=key_or(tmp->next_key_part,key.next_key_part); + new_arg->next_key_part= key_or(param, tmp->next_key_part, key.next_key_part); key1=key1->insert(new_arg); break; } diff --git a/sql/opt_range.h b/sql/opt_range.h index 4d425604921..4b20d1fe0fe 100644 --- a/sql/opt_range.h +++ b/sql/opt_range.h @@ -90,6 +90,8 @@ public: int init() { key_part_info= head->key_info[index].key_part; + if (file->inited != handler::NONE) + file->ha_index_or_rnd_end(); return error=file->ha_index_init(index); } virtual int get_next(); diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc index 412fc0dc037..f912d67fe06 100644 --- a/sql/opt_sum.cc +++ b/sql/opt_sum.cc @@ -68,9 +68,9 @@ static int maxmin_in_range(bool max_fl, Field* field, COND *cond); GROUP BY part. RETURN VALUES - 0 No errors - 1 if all items were resolved - -1 on impossible conditions + 0 no errors + 1 if all items were resolved + HA_ERR_KEY_NOT_FOUND on impossible conditions OR an error number from my_base.h HA_ERR_... if a deadlock or a lock wait timeout happens, for example */ @@ -216,7 +216,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds) if (error) { if (error == HA_ERR_KEY_NOT_FOUND || error == HA_ERR_END_OF_FILE) - return -1; // No rows matching WHERE + return HA_ERR_KEY_NOT_FOUND; // No rows matching WHERE /* HA_ERR_LOCK_DEADLOCK or some other error */ table->file->print_error(error, MYF(0)); return(error); @@ -303,7 +303,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds) if (error) { if (error == HA_ERR_KEY_NOT_FOUND || error == HA_ERR_END_OF_FILE) - return -1; // No rows matching WHERE + return HA_ERR_KEY_NOT_FOUND; // No rows matching WHERE /* HA_ERR_LOCK_DEADLOCK or some other error */ table->file->print_error(error, MYF(0)); return(error); diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc index 61fd5d9bce4..4c8703226a6 100644 --- a/sql/repl_failsafe.cc +++ b/sql/repl_failsafe.cc @@ -57,6 +57,7 @@ static Slave_log_event* find_slave_event(IO_CACHE* log, functions like register_slave()) are working. */ +#if NOT_USED static int init_failsafe_rpl_thread(THD* thd) { DBUG_ENTER("init_failsafe_rpl_thread"); @@ -99,7 +100,7 @@ static int init_failsafe_rpl_thread(THD* thd) thd->set_time(); DBUG_RETURN(0); } - +#endif void change_rpl_status(RPL_STATUS from_status, RPL_STATUS to_status) { @@ -573,12 +574,14 @@ err: } +#if NOT_USED int find_recovery_captain(THD* thd, MYSQL* mysql) { return 0; } +#endif - +#if NOT_USED pthread_handler_decl(handle_failsafe_rpl,arg) { DBUG_ENTER("handle_failsafe_rpl"); @@ -626,7 +629,7 @@ err: pthread_exit(0); DBUG_RETURN(0); } - +#endif int show_slave_hosts(THD* thd) { diff --git a/sql/set_var.cc b/sql/set_var.cc index 71ca382f9d9..520ee5c9f70 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -490,7 +490,7 @@ static sys_var_rand_seed1 sys_rand_seed1("rand_seed1"); static sys_var_rand_seed2 sys_rand_seed2("rand_seed2"); static sys_var_thd_ulong sys_default_week_format("default_week_format", - &SV::default_week_format); + &SV::default_week_format); sys_var_thd_ulong sys_group_concat_max_len("group_concat_max_len", &SV::group_concat_max_len); @@ -992,7 +992,6 @@ bool update_sys_var_str(sys_var_str *var_str, rw_lock_t *var_mutex, return 0; } - static bool sys_update_init_connect(THD *thd, set_var *var) { return update_sys_var_str(&sys_init_connect, &LOCK_sys_init_connect, var); @@ -1032,6 +1031,11 @@ static bool sys_update_ftb_syntax(THD *thd, set_var * var) { strmake(ft_boolean_syntax, var->value->str_value.c_ptr(), sizeof(ft_boolean_syntax)-1); + +#ifdef HAVE_QUERY_CACHE + query_cache.flush(); +#endif /* HAVE_QUERY_CACHE */ + return 0; } @@ -1128,14 +1132,14 @@ static void fix_tx_isolation(THD *thd, enum_var_type type) static void fix_net_read_timeout(THD *thd, enum_var_type type) { if (type != OPT_GLOBAL) - thd->net.read_timeout=thd->variables.net_read_timeout; + net_set_read_timeout(&thd->net, thd->variables.net_read_timeout); } static void fix_net_write_timeout(THD *thd, enum_var_type type) { if (type != OPT_GLOBAL) - thd->net.write_timeout=thd->variables.net_write_timeout; + net_set_write_timeout(&thd->net, thd->variables.net_write_timeout); } static void fix_net_retry_count(THD *thd, enum_var_type type) @@ -2570,19 +2574,38 @@ void sys_var_thd_time_zone::set_default(THD *thd, enum_var_type type) bool sys_var_thd_lc_time_names::check(THD *thd, set_var *var) { - char *locale_str =var->value->str_value.c_ptr(); - MY_LOCALE *locale_match= my_locale_by_name(locale_str); + MY_LOCALE *locale_match; - if(locale_match == NULL) + if (var->value->result_type() == INT_RESULT) { - my_printf_error(ER_UNKNOWN_ERROR, "Unknown locale: '%s'", MYF(0), locale_str); - return 1; + if (!(locale_match= my_locale_by_number((uint) var->value->val_int()))) + { + char buf[20]; + int10_to_str((int) var->value->val_int(), buf, -10); + my_printf_error(ER_UNKNOWN_ERROR, "Unknown locale: '%s'", MYF(0), buf); + return 1; + } } - else + else // STRING_RESULT { - var->save_result.locale_value= locale_match; - return 0; + char buff[6]; + String str(buff, sizeof(buff), &my_charset_latin1), *res; + if (!(res=var->value->val_str(&str))) + { + my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, "NULL"); + return 1; + } + const char *locale_str= res->c_ptr(); + if (!(locale_match= my_locale_by_name(locale_str))) + { + my_printf_error(ER_UNKNOWN_ERROR, + "Unknown locale: '%s'", MYF(0), locale_str); + return 1; + } } + + var->save_result.locale_value= locale_match; + return 0; } diff --git a/sql/set_var.h b/sql/set_var.h index 1ae3a18111f..78b34963e9d 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -764,12 +764,16 @@ class sys_var_thd_lc_time_names :public sys_var_thd public: sys_var_thd_lc_time_names(const char *name_arg): sys_var_thd(name_arg) - {} + { +#if MYSQL_VERSION_ID < 50000 + no_support_one_shot= 0; +#endif + } bool check(THD *thd, set_var *var); SHOW_TYPE type() { return SHOW_CHAR; } bool check_update_type(Item_result type) { - return type != STRING_RESULT; /* Only accept strings */ + return ((type != STRING_RESULT) && (type != INT_RESULT)); } bool check_default(enum_var_type type) { return 0; } bool update(THD *thd, set_var *var); diff --git a/sql/share/charsets/hebrew.xml b/sql/share/charsets/hebrew.xml index 5bcf222a728..981f308bfb5 100644 --- a/sql/share/charsets/hebrew.xml +++ b/sql/share/charsets/hebrew.xml @@ -40,7 +40,7 @@ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 - 02 02 02 02 02 02 02 02 02 02 02 00 00 00 00 00 + 02 02 02 02 02 02 02 02 02 02 02 00 00 20 20 00 </map> </ctype> @@ -106,7 +106,7 @@ 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 2017 05D0 05D1 05D2 05D3 05D4 05D5 05D6 05D7 05D8 05D9 05DA 05DB 05DC 05DD 05DE 05DF -05E0 05E1 05E2 05E3 05E4 05E5 05E6 05E7 05E8 05E9 05EA 0000 0000 0000 0000 0000 +05E0 05E1 05E2 05E3 05E4 05E5 05E6 05E7 05E8 05E9 05EA 0000 0000 200E 200F 0000 </map> </unicode> diff --git a/sql/slave.cc b/sql/slave.cc index 6785e92b9f9..75b18f6f307 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2625,7 +2625,6 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type) */ thd->variables.max_allowed_packet= global_system_variables.max_allowed_packet + MAX_LOG_EVENT_HEADER; /* note, incr over the global not session var */ - thd->net.read_timeout = slave_net_timeout; thd->master_access= ~(ulong)0; thd->priv_user = 0; thd->slave_thread = 1; @@ -4284,6 +4283,13 @@ Log_event* next_event(RELAY_LOG_INFO* rli) hot_log=0; // Using old binary log } } + /* + As there is no guarantee that the relay is open (for example, an I/O + error during a write by the slave I/O thread may have closed it), we + have to test it. + */ + if (!my_b_inited(cur_log)) + goto err; #ifndef DBUG_OFF { char llbuf1[22], llbuf2[22]; diff --git a/sql/spatial.cc b/sql/spatial.cc index 684f7e9ecf3..4e17e766090 100644 --- a/sql/spatial.cc +++ b/sql/spatial.cc @@ -210,23 +210,24 @@ static uint32 wkb_get_uint(const char *ptr, Geometry::wkbByteOrder bo) } -int Geometry::create_from_wkb(Geometry_buffer *buffer, - const char *wkb, uint32 len, String *res) +Geometry *Geometry::create_from_wkb(Geometry_buffer *buffer, + const char *wkb, uint32 len, String *res) { uint32 geom_type; Geometry *geom; if (len < WKB_HEADER_SIZE) - return 1; + return NULL; geom_type= wkb_get_uint(wkb+1, (wkbByteOrder)wkb[0]); if (!(geom= create_by_typeid(buffer, (int) geom_type)) || res->reserve(WKB_HEADER_SIZE, 512)) - return 1; + return NULL; res->q_append((char) wkb_ndr); res->q_append(geom_type); - return geom->init_from_wkb(wkb+WKB_HEADER_SIZE, len - WKB_HEADER_SIZE, - (wkbByteOrder) wkb[0], res); + + return geom->init_from_wkb(wkb + WKB_HEADER_SIZE, len - WKB_HEADER_SIZE, + (wkbByteOrder) wkb[0], res) ? geom : NULL; } diff --git a/sql/spatial.h b/sql/spatial.h index 378233a2156..553544d4c3f 100644 --- a/sql/spatial.h +++ b/sql/spatial.h @@ -244,8 +244,8 @@ public: static Geometry *create_from_wkt(Geometry_buffer *buffer, Gis_read_stream *trs, String *wkt, bool init_stream=1); - static int create_from_wkb(Geometry_buffer *buffer, - const char *wkb, uint32 len, String *res); + static Geometry *create_from_wkb(Geometry_buffer *buffer, const char *wkb, + uint32 len, String *res); int as_wkt(String *wkt, const char **end) { uint32 len= get_class_info()->m_name.length; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index c60bed09cf9..2f7661182a6 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -34,7 +34,6 @@ HASH assign_cache; static int open_unireg_entry(THD *thd,TABLE *entry,const char *db, const char *name, const char *alias); static void free_cache_entry(TABLE *entry); -static void mysql_rm_tmp_tables(void); extern "C" byte *table_cache_key(const byte *record,uint *length, @@ -47,7 +46,6 @@ extern "C" byte *table_cache_key(const byte *record,uint *length, bool table_cache_init(void) { - mysql_rm_tmp_tables(); return hash_init(&open_cache, &my_charset_bin, table_cache_size+16, 0, 0,table_cache_key, (hash_free_key) free_cache_entry, 0) != 0; @@ -2520,11 +2518,14 @@ int setup_fields(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, { reg2 Item *item; List_iterator<Item> it(fields); + bool save_is_item_list_lookup; DBUG_ENTER("setup_fields"); thd->set_query_id=set_query_id; thd->allow_sum_func= allow_sum_func; thd->where="field list"; + save_is_item_list_lookup= thd->lex->current_select->is_item_list_lookup; + thd->lex->current_select->is_item_list_lookup= 0; /* To prevent fail on forward lookup we fill it with zerows, @@ -2545,7 +2546,10 @@ int setup_fields(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, { if (!item->fixed && item->fix_fields(thd, tables, it.ref()) || (item= *(it.ref()))->check_cols(1)) + { + thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup; DBUG_RETURN(-1); /* purecov: inspected */ + } if (ref) *(ref++)= item; if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM && @@ -2553,6 +2557,7 @@ int setup_fields(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, item->split_sum_func(thd, ref_pointer_array, *sum_func_list); thd->used_tables|=item->used_tables(); } + thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup; DBUG_RETURN(test(thd->net.report_error)); } @@ -2749,6 +2754,8 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) { table_map not_null_tables= 0; Item_arena *arena= 0, backup; + bool save_is_item_list_lookup= thd->lex->current_select->is_item_list_lookup; + thd->lex->current_select->is_item_list_lookup= 0; DBUG_ENTER("setup_conds"); thd->set_query_id=1; @@ -2758,7 +2765,10 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) thd->where="where clause"; if (!(*conds)->fixed && (*conds)->fix_fields(thd, tables, conds) || (*conds)->check_cols(1)) + { + thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup; DBUG_RETURN(1); + } not_null_tables= (*conds)->not_null_tables(); } @@ -2774,7 +2784,10 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) if (!table->on_expr->fixed && table->on_expr->fix_fields(thd, tables, &table->on_expr) || table->on_expr->check_cols(1)) + { + thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup; DBUG_RETURN(1); + } thd->lex->current_select->cond_count++; /* @@ -2796,7 +2809,11 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) } if ((*conds) && !(*conds)->fixed && (*conds)->fix_fields(thd, tables, conds)) + { + thd->lex->current_select->is_item_list_lookup= + save_is_item_list_lookup; DBUG_RETURN(1); + } } } if (table->natural_join) @@ -2848,7 +2865,11 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) { if (!(*conds)->fixed && (*conds)->fix_fields(thd, tables, conds)) + { + thd->lex->current_select->is_item_list_lookup= + save_is_item_list_lookup; DBUG_RETURN(1); + } } } else @@ -2861,7 +2882,11 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) { if (!table->on_expr->fixed && table->on_expr->fix_fields(thd, tables, &table->on_expr)) - DBUG_RETURN(1); + { + thd->lex->current_select->is_item_list_lookup= + save_is_item_list_lookup; + DBUG_RETURN(1); + } } } } @@ -2883,9 +2908,11 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds) */ thd->lex->current_select->where= *conds; } + thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup; DBUG_RETURN(test(thd->net.report_error)); err: + thd->lex->current_select->is_item_list_lookup= save_is_item_list_lookup; if (arena) thd->restore_backup_item_arena(arena, &backup); DBUG_RETURN(1); @@ -2940,14 +2967,20 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors) } -static void mysql_rm_tmp_tables(void) +my_bool mysql_rm_tmp_tables(void) { uint i, idx; - char filePath[FN_REFLEN], *tmpdir; + char filePath[FN_REFLEN], *tmpdir, filePathCopy[FN_REFLEN]; MY_DIR *dirp; FILEINFO *file; + TABLE tmp_table; + THD *thd; DBUG_ENTER("mysql_rm_tmp_tables"); + if (!(thd= new THD)) + DBUG_RETURN(1); + thd->store_globals(); + for (i=0; i<=mysql_tmpdir_list.max; i++) { tmpdir=mysql_tmpdir_list.list[i]; @@ -2968,13 +3001,37 @@ static void mysql_rm_tmp_tables(void) if (!bcmp(file->name,tmp_file_prefix,tmp_file_prefix_length)) { - sprintf(filePath,"%s%s",tmpdir,file->name); - VOID(my_delete(filePath,MYF(MY_WME))); + char *ext= fn_ext(file->name); + uint ext_len= strlen(ext); + uint filePath_len= my_snprintf(filePath, sizeof(filePath), + "%s%s", tmpdir, file->name); + if (!bcmp(reg_ext, ext, ext_len)) + { + TABLE tmp_table; + if (!openfrm(filePath, "tmp_table", (uint) 0, + READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD, + 0, &tmp_table)) + { + /* We should cut file extention before deleting of table */ + memcpy(filePathCopy, filePath, filePath_len - ext_len); + filePathCopy[filePath_len - ext_len]= 0; + tmp_table.file->delete_table(filePathCopy); + closefrm(&tmp_table); + } + } + /* + File can be already deleted by tmp_table.file->delete_table(). + So we hide error messages which happnes during deleting of these + files(MYF(0)). + */ + VOID(my_delete(filePath, MYF(0))); } } my_dirend(dirp); } - DBUG_VOID_RETURN; + delete thd; + my_pthread_setspecific_ptr(THR_THD, 0); + DBUG_RETURN(0); } diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index fc03e03dee7..ee26bda3307 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -813,6 +813,7 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used) flags.sql_mode= thd->variables.sql_mode; flags.max_sort_length= thd->variables.max_sort_length; flags.group_concat_max_len= thd->variables.group_concat_max_len; + flags.default_week_format= thd->variables.default_week_format; flags.lc_time_names= thd->variables.lc_time_names; STRUCT_LOCK(&structure_guard_mutex); @@ -1016,6 +1017,7 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) flags.sql_mode= thd->variables.sql_mode; flags.max_sort_length= thd->variables.max_sort_length; flags.group_concat_max_len= thd->variables.group_concat_max_len; + flags.default_week_format= thd->variables.default_week_format; flags.lc_time_names= thd->variables.lc_time_names; memcpy((void *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)), &flags, QUERY_CACHE_FLAGS_SIZE); diff --git a/sql/sql_class.cc b/sql/sql_class.cc index c8d90848f6e..b187d29021a 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -1048,7 +1048,6 @@ bool select_export::send_data(List<Item> &items) } row_count++; Item *item; - char *buff_ptr=buff; uint used_length=0,items_left=items.elements; List_iterator_fast<Item> li(items); @@ -1148,19 +1147,18 @@ bool select_export::send_data(List<Item> &items) goto err; } } - buff_ptr=buff; // Place separators here if (res && (!exchange->opt_enclosed || result_type == STRING_RESULT)) { - memcpy(buff_ptr,exchange->enclosed->ptr(),exchange->enclosed->length()); - buff_ptr+=exchange->enclosed->length(); + if (my_b_write(&cache, (byte*) exchange->enclosed->ptr(), + exchange->enclosed->length())) + goto err; } if (--items_left) { - memcpy(buff_ptr,exchange->field_term->ptr(),field_term_length); - buff_ptr+=field_term_length; + if (my_b_write(&cache, (byte*) exchange->field_term->ptr(), + field_term_length)) + goto err; } - if (my_b_write(&cache,(byte*) buff,(uint) (buff_ptr-buff))) - goto err; } if (my_b_write(&cache,(byte*) exchange->line_term->ptr(), exchange->line_term->length())) diff --git a/sql/sql_class.h b/sql/sql_class.h index 05105bfc86a..db6f65cab55 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -1293,20 +1293,21 @@ class select_create: public select_insert { ORDER *group; const char *db; const char *name; - List<create_field> *extra_fields; - List<Key> *keys; HA_CREATE_INFO *create_info; + Alter_info *alter_info; MYSQL_LOCK *lock; Field **field; public: select_create(const char *db_name, const char *table_name, - HA_CREATE_INFO *create_info_par, - List<create_field> &fields_par, - List<Key> &keys_par, - List<Item> &select_fields,enum_duplicates duplic, bool ignore) - :select_insert (NULL, &select_fields, duplic, ignore), db(db_name), - name(table_name), extra_fields(&fields_par),keys(&keys_par), - create_info(create_info_par), lock(0) + HA_CREATE_INFO *create_info_arg, + Alter_info *alter_info_arg, + List<Item> &select_fields, + enum_duplicates duplic, bool ignore) + :select_insert(NULL, &select_fields, duplic, ignore), + db(db_name), name(table_name), + create_info(create_info_arg), + alter_info(alter_info_arg), + lock(0) {} int prepare(List<Item> &list, SELECT_LEX_UNIT *u); void store_values(List<Item> &values); diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 1b00539ed71..b84b2f7eef4 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -142,7 +142,7 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, DBUG_RETURN(-1); // This will force out message } - if (!select && limit != HA_POS_ERROR) + if ((!select || table->quick_keys.is_clear_all()) && limit != HA_POS_ERROR) usable_index= get_index_for_order(table, (ORDER*)(order->first), limit); if (usable_index == MAX_KEY) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index d6c746d5d5d..f5bbba742a5 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1805,7 +1805,7 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u) unit= u; table= create_table_from_items(thd, create_info, db, name, - extra_fields, keys, &values, &lock); + alter_info, &values, &lock); if (!table) DBUG_RETURN(-1); // abort() deletes table diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index dfe406c351e..270fdb3f20a 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1015,6 +1015,18 @@ int yylex(void *arg, void *yythd) } } + +Alter_info::Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root) + :drop_list(rhs.drop_list, mem_root), + alter_list(rhs.alter_list, mem_root), + key_list(rhs.key_list, mem_root), + create_list(rhs.create_list, mem_root), + flags(rhs.flags), + keys_onoff(rhs.keys_onoff), + tablespace_op(rhs.tablespace_op), + is_simple(rhs.is_simple) +{} + /* st_select_lex structures initialisations */ diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 12f89202e2d..7faeb8046c7 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -571,19 +571,61 @@ typedef class st_select_lex SELECT_LEX; #define ALTER_ORDER 64 #define ALTER_OPTIONS 128 -typedef struct st_alter_info +/** + @brief Parsing data for CREATE or ALTER TABLE. + + This structure contains a list of columns or indexes to be created, + altered or dropped. +*/ + +class Alter_info { +public: List<Alter_drop> drop_list; List<Alter_column> alter_list; + List<Key> key_list; + List<create_field> create_list; uint flags; enum enum_enable_or_disable keys_onoff; enum tablespace_op_type tablespace_op; bool is_simple; - st_alter_info(){clear();} - void clear(){keys_onoff= LEAVE_AS_IS;tablespace_op= NO_TABLESPACE_OP;} - void reset(){drop_list.empty();alter_list.empty();clear();} -} ALTER_INFO; + Alter_info() : + flags(0), + keys_onoff(LEAVE_AS_IS), + tablespace_op(NO_TABLESPACE_OP), + is_simple(1) + {} + void reset() + { + drop_list.empty(); + alter_list.empty(); + key_list.empty(); + create_list.empty(); + flags= 0; + keys_onoff= LEAVE_AS_IS; + tablespace_op= NO_TABLESPACE_OP; + is_simple= 1; + } + /** + Construct a copy of this object to be used for mysql_alter_table + and mysql_create_table. Historically, these two functions modify + their Alter_info arguments. This behaviour breaks re-execution of + prepared statements and stored procedures and is compensated by + always supplying a copy of Alter_info to these functions. + The constructed copy still shares key Key, Alter_drop, create_field + and Alter_column elements of the lists - these structures are not + modified and thus are not copied. + + @note You need to use check thd->is_fatal_error for out + of memory condition after calling this function. + */ + Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root); +private: + Alter_info &operator=(const Alter_info &rhs); // not implemented + Alter_info(const Alter_info &rhs); // not implemented +}; + /* The state of the lex parsing. This is saved in the THD struct */ @@ -620,8 +662,6 @@ typedef struct st_lex List<String> interval_list; List<LEX_USER> users_list; List<LEX_COLUMN> columns; - List<Key> key_list; - List<create_field> create_list; List<Item> *insert_list,field_list,value_list,update_list; List<List_item> many_values; List<set_var_base> var_list; @@ -654,7 +694,7 @@ typedef struct st_lex bool derived_tables; bool safe_to_cache_query; bool subqueries, ignore; - ALTER_INFO alter_info; + Alter_info alter_info; /* Prepared statements SQL syntax:*/ LEX_STRING prepared_stmt_name; /* Statement name (in all queries) */ /* diff --git a/sql/sql_list.h b/sql/sql_list.h index e799ecf3d6e..2075361a398 100644 --- a/sql/sql_list.h +++ b/sql/sql_list.h @@ -30,7 +30,7 @@ class Sql_alloc { public: - static void *operator new(size_t size) + static void *operator new(size_t size) throw () { return (void*) sql_alloc((uint) size); } @@ -38,7 +38,7 @@ public: { return (void*) sql_alloc((uint) size); } - static void *operator new(size_t size, MEM_ROOT *mem_root) + static void *operator new(size_t size, MEM_ROOT *mem_root) throw () { return (void*) alloc_root(mem_root, (uint) size); } static void operator delete(void *ptr, size_t size) { TRASH(ptr, size); } static void operator delete(void *ptr, MEM_ROOT *mem_root) @@ -66,21 +66,24 @@ public: pointer. */ -class list_node :public Sql_alloc + +/** + list_node - a node of a single-linked list. + @note We never call a destructor for instances of this class. +*/ + +struct list_node :public Sql_alloc { -public: list_node *next; void *info; list_node(void *info_par,list_node *next_par) :next(next_par),info(info_par) - {} + {} list_node() /* For end_of_list */ - { - info=0; - next= this; - } - friend class base_list; - friend class base_list_iterator; + { + info= 0; + next= this; + } }; @@ -96,11 +99,56 @@ public: inline void empty() { elements=0; first= &end_of_list; last=&first;} inline base_list() { empty(); } + /** + This is a shallow copy constructor that implicitly passes the ownership + from the source list to the new instance. The old instance is not + updated, so both objects end up sharing the same nodes. If one of + the instances then adds or removes a node, the other becomes out of + sync ('last' pointer), while still operational. Some old code uses and + relies on this behaviour. This logic is quite tricky: please do not use + it in any new code. + */ inline base_list(const base_list &tmp) :Sql_alloc() { - elements=tmp.elements; - first=tmp.first; - last=tmp.last; + elements= tmp.elements; + first= tmp.first; + last= elements ? tmp.last : &first; + } + /** + Construct a deep copy of the argument in memory root mem_root. + The elements themselves are copied by pointer. + */ + inline base_list(const base_list &rhs, MEM_ROOT *mem_root) + { + if (rhs.elements) + { + /* + It's okay to allocate an array of nodes at once: we never + call a destructor for list_node objects anyway. + */ + first= (list_node*) alloc_root(mem_root, + sizeof(list_node) * rhs.elements); + if (first) + { + elements= rhs.elements; + list_node *dst= first; + list_node *src= rhs.first; + for (; dst < first + elements - 1; dst++, src= src->next) + { + dst->info= src->info; + dst->next= dst + 1; + } + /* Copy the last node */ + dst->info= src->info; + dst->next= &end_of_list; + /* Setup 'last' member */ + last= &dst->next; + return; + } + } + elements= 0; + first= &end_of_list; + last= &first; } inline base_list(bool error) { } inline bool push_back(void *info) @@ -327,6 +375,8 @@ template <class T> class List :public base_list public: inline List() :base_list() {} inline List(const List<T> &tmp) :base_list(tmp) {} + inline List(const List<T> &tmp, MEM_ROOT *mem_root) : + base_list(tmp, mem_root) {} inline bool push_back(T *a) { return base_list::push_back(a); } inline bool push_front(T *a) { return base_list::push_front(a); } inline T* head() {return (T*) base_list::head(); } diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 5710f9c4c97..10124e5f5ff 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -353,7 +353,6 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, } sprintf(name, ER(ER_LOAD_INFO), (ulong) info.records, (ulong) info.deleted, (ulong) (info.records - info.copied), (ulong) thd->cuted_fields); - send_ok(thd,info.copied+info.deleted,0L,name); // on the slave thd->query is never initialized if (!thd->slave_thread) mysql_update_log.write(thd,thd->query,thd->query_length); @@ -378,6 +377,9 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, #endif /*!EMBEDDED_LIBRARY*/ if (transactional_table) error=ha_autocommit_or_rollback(thd,error); + + /* ok to client sent only after binlog write and engine commit */ + send_ok(thd, info.copied + info.deleted, 0L, name); err: if (thd->lock) { diff --git a/sql/sql_locale.cc b/sql/sql_locale.cc index 9dae55e4508..1f60c61ed46 100644 --- a/sql/sql_locale.cc +++ b/sql/sql_locale.cc @@ -24,17 +24,6 @@ #include "mysql_priv.h" -MY_LOCALE *my_locale_by_name(const char *name) -{ - MY_LOCALE **locale; - for( locale= my_locales; *locale != NULL; locale++) - { - if(!strcmp((*locale)->name, name)) - return *locale; - } - return NULL; -} - /***** LOCALE BEGIN ar_AE: Arabic - United Arab Emirates *****/ static const char *my_locale_month_names_ar_AE[13] = {"يناير","ÙØ¨Ø±Ø§ÙŠØ±","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوÙمبر","ديسمبر", NullS }; @@ -53,7 +42,16 @@ static TYPELIB my_locale_typelib_day_names_ar_AE = static TYPELIB my_locale_typelib_ab_day_names_ar_AE = { array_elements(my_locale_ab_day_names_ar_AE)-1, "", my_locale_ab_day_names_ar_AE, NULL }; MY_LOCALE my_locale_ar_AE= - { "ar_AE", "Arabic - United Arab Emirates", FALSE, &my_locale_typelib_month_names_ar_AE, &my_locale_typelib_ab_month_names_ar_AE, &my_locale_typelib_day_names_ar_AE, &my_locale_typelib_ab_day_names_ar_AE }; +{ + 6, + "ar_AE", + "Arabic - United Arab Emirates", + FALSE, + &my_locale_typelib_month_names_ar_AE, + &my_locale_typelib_ab_month_names_ar_AE, + &my_locale_typelib_day_names_ar_AE, + &my_locale_typelib_ab_day_names_ar_AE +}; /***** LOCALE END ar_AE *****/ /***** LOCALE BEGIN ar_BH: Arabic - Bahrain *****/ @@ -74,7 +72,16 @@ static TYPELIB my_locale_typelib_day_names_ar_BH = static TYPELIB my_locale_typelib_ab_day_names_ar_BH = { array_elements(my_locale_ab_day_names_ar_BH)-1, "", my_locale_ab_day_names_ar_BH, NULL }; MY_LOCALE my_locale_ar_BH= - { "ar_BH", "Arabic - Bahrain", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 7, + "ar_BH", + "Arabic - Bahrain", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_BH *****/ /***** LOCALE BEGIN ar_JO: Arabic - Jordan *****/ @@ -95,7 +102,16 @@ static TYPELIB my_locale_typelib_day_names_ar_JO = static TYPELIB my_locale_typelib_ab_day_names_ar_JO = { array_elements(my_locale_ab_day_names_ar_JO)-1, "", my_locale_ab_day_names_ar_JO, NULL }; MY_LOCALE my_locale_ar_JO= - { "ar_JO", "Arabic - Jordan", FALSE, &my_locale_typelib_month_names_ar_JO, &my_locale_typelib_ab_month_names_ar_JO, &my_locale_typelib_day_names_ar_JO, &my_locale_typelib_ab_day_names_ar_JO }; +{ + 8, + "ar_JO", + "Arabic - Jordan", + FALSE, + &my_locale_typelib_month_names_ar_JO, + &my_locale_typelib_ab_month_names_ar_JO, + &my_locale_typelib_day_names_ar_JO, + &my_locale_typelib_ab_day_names_ar_JO +}; /***** LOCALE END ar_JO *****/ /***** LOCALE BEGIN ar_SA: Arabic - Saudi Arabia *****/ @@ -116,7 +132,16 @@ static TYPELIB my_locale_typelib_day_names_ar_SA = static TYPELIB my_locale_typelib_ab_day_names_ar_SA = { array_elements(my_locale_ab_day_names_ar_SA)-1, "", my_locale_ab_day_names_ar_SA, NULL }; MY_LOCALE my_locale_ar_SA= - { "ar_SA", "Arabic - Saudi Arabia", FALSE, &my_locale_typelib_month_names_ar_SA, &my_locale_typelib_ab_month_names_ar_SA, &my_locale_typelib_day_names_ar_SA, &my_locale_typelib_ab_day_names_ar_SA }; +{ + 9, + "ar_SA", + "Arabic - Saudi Arabia", + FALSE, + &my_locale_typelib_month_names_ar_SA, + &my_locale_typelib_ab_month_names_ar_SA, + &my_locale_typelib_day_names_ar_SA, + &my_locale_typelib_ab_day_names_ar_SA +}; /***** LOCALE END ar_SA *****/ /***** LOCALE BEGIN ar_SY: Arabic - Syria *****/ @@ -137,7 +162,16 @@ static TYPELIB my_locale_typelib_day_names_ar_SY = static TYPELIB my_locale_typelib_ab_day_names_ar_SY = { array_elements(my_locale_ab_day_names_ar_SY)-1, "", my_locale_ab_day_names_ar_SY, NULL }; MY_LOCALE my_locale_ar_SY= - { "ar_SY", "Arabic - Syria", FALSE, &my_locale_typelib_month_names_ar_SY, &my_locale_typelib_ab_month_names_ar_SY, &my_locale_typelib_day_names_ar_SY, &my_locale_typelib_ab_day_names_ar_SY }; +{ + 10, + "ar_SY", + "Arabic - Syria", + FALSE, + &my_locale_typelib_month_names_ar_SY, + &my_locale_typelib_ab_month_names_ar_SY, + &my_locale_typelib_day_names_ar_SY, + &my_locale_typelib_ab_day_names_ar_SY +}; /***** LOCALE END ar_SY *****/ /***** LOCALE BEGIN be_BY: Belarusian - Belarus *****/ @@ -158,7 +192,16 @@ static TYPELIB my_locale_typelib_day_names_be_BY = static TYPELIB my_locale_typelib_ab_day_names_be_BY = { array_elements(my_locale_ab_day_names_be_BY)-1, "", my_locale_ab_day_names_be_BY, NULL }; MY_LOCALE my_locale_be_BY= - { "be_BY", "Belarusian - Belarus", FALSE, &my_locale_typelib_month_names_be_BY, &my_locale_typelib_ab_month_names_be_BY, &my_locale_typelib_day_names_be_BY, &my_locale_typelib_ab_day_names_be_BY }; +{ + 11, + "be_BY", + "Belarusian - Belarus", + FALSE, + &my_locale_typelib_month_names_be_BY, + &my_locale_typelib_ab_month_names_be_BY, + &my_locale_typelib_day_names_be_BY, + &my_locale_typelib_ab_day_names_be_BY +}; /***** LOCALE END be_BY *****/ /***** LOCALE BEGIN bg_BG: Bulgarian - Bulgaria *****/ @@ -179,7 +222,16 @@ static TYPELIB my_locale_typelib_day_names_bg_BG = static TYPELIB my_locale_typelib_ab_day_names_bg_BG = { array_elements(my_locale_ab_day_names_bg_BG)-1, "", my_locale_ab_day_names_bg_BG, NULL }; MY_LOCALE my_locale_bg_BG= - { "bg_BG", "Bulgarian - Bulgaria", FALSE, &my_locale_typelib_month_names_bg_BG, &my_locale_typelib_ab_month_names_bg_BG, &my_locale_typelib_day_names_bg_BG, &my_locale_typelib_ab_day_names_bg_BG }; +{ + 12, + "bg_BG", + "Bulgarian - Bulgaria", + FALSE, + &my_locale_typelib_month_names_bg_BG, + &my_locale_typelib_ab_month_names_bg_BG, + &my_locale_typelib_day_names_bg_BG, + &my_locale_typelib_ab_day_names_bg_BG +}; /***** LOCALE END bg_BG *****/ /***** LOCALE BEGIN ca_ES: Catalan - Catalan *****/ @@ -200,7 +252,16 @@ static TYPELIB my_locale_typelib_day_names_ca_ES = static TYPELIB my_locale_typelib_ab_day_names_ca_ES = { array_elements(my_locale_ab_day_names_ca_ES)-1, "", my_locale_ab_day_names_ca_ES, NULL }; MY_LOCALE my_locale_ca_ES= - { "ca_ES", "Catalan - Catalan", FALSE, &my_locale_typelib_month_names_ca_ES, &my_locale_typelib_ab_month_names_ca_ES, &my_locale_typelib_day_names_ca_ES, &my_locale_typelib_ab_day_names_ca_ES }; +{ + 13, + "ca_ES", + "Catalan - Catalan", + FALSE, + &my_locale_typelib_month_names_ca_ES, + &my_locale_typelib_ab_month_names_ca_ES, + &my_locale_typelib_day_names_ca_ES, + &my_locale_typelib_ab_day_names_ca_ES +}; /***** LOCALE END ca_ES *****/ /***** LOCALE BEGIN cs_CZ: Czech - Czech Republic *****/ @@ -221,7 +282,16 @@ static TYPELIB my_locale_typelib_day_names_cs_CZ = static TYPELIB my_locale_typelib_ab_day_names_cs_CZ = { array_elements(my_locale_ab_day_names_cs_CZ)-1, "", my_locale_ab_day_names_cs_CZ, NULL }; MY_LOCALE my_locale_cs_CZ= - { "cs_CZ", "Czech - Czech Republic", FALSE, &my_locale_typelib_month_names_cs_CZ, &my_locale_typelib_ab_month_names_cs_CZ, &my_locale_typelib_day_names_cs_CZ, &my_locale_typelib_ab_day_names_cs_CZ }; +{ + 14, + "cs_CZ", + "Czech - Czech Republic", + FALSE, + &my_locale_typelib_month_names_cs_CZ, + &my_locale_typelib_ab_month_names_cs_CZ, + &my_locale_typelib_day_names_cs_CZ, + &my_locale_typelib_ab_day_names_cs_CZ +}; /***** LOCALE END cs_CZ *****/ /***** LOCALE BEGIN da_DK: Danish - Denmark *****/ @@ -242,7 +312,16 @@ static TYPELIB my_locale_typelib_day_names_da_DK = static TYPELIB my_locale_typelib_ab_day_names_da_DK = { array_elements(my_locale_ab_day_names_da_DK)-1, "", my_locale_ab_day_names_da_DK, NULL }; MY_LOCALE my_locale_da_DK= - { "da_DK", "Danish - Denmark", FALSE, &my_locale_typelib_month_names_da_DK, &my_locale_typelib_ab_month_names_da_DK, &my_locale_typelib_day_names_da_DK, &my_locale_typelib_ab_day_names_da_DK }; +{ + 15, + "da_DK", + "Danish - Denmark", + FALSE, + &my_locale_typelib_month_names_da_DK, + &my_locale_typelib_ab_month_names_da_DK, + &my_locale_typelib_day_names_da_DK, + &my_locale_typelib_ab_day_names_da_DK +}; /***** LOCALE END da_DK *****/ /***** LOCALE BEGIN de_AT: German - Austria *****/ @@ -263,7 +342,16 @@ static TYPELIB my_locale_typelib_day_names_de_AT = static TYPELIB my_locale_typelib_ab_day_names_de_AT = { array_elements(my_locale_ab_day_names_de_AT)-1, "", my_locale_ab_day_names_de_AT, NULL }; MY_LOCALE my_locale_de_AT= - { "de_AT", "German - Austria", FALSE, &my_locale_typelib_month_names_de_AT, &my_locale_typelib_ab_month_names_de_AT, &my_locale_typelib_day_names_de_AT, &my_locale_typelib_ab_day_names_de_AT }; +{ + 16, + "de_AT", + "German - Austria", + FALSE, + &my_locale_typelib_month_names_de_AT, + &my_locale_typelib_ab_month_names_de_AT, + &my_locale_typelib_day_names_de_AT, + &my_locale_typelib_ab_day_names_de_AT +}; /***** LOCALE END de_AT *****/ /***** LOCALE BEGIN de_DE: German - Germany *****/ @@ -284,7 +372,16 @@ static TYPELIB my_locale_typelib_day_names_de_DE = static TYPELIB my_locale_typelib_ab_day_names_de_DE = { array_elements(my_locale_ab_day_names_de_DE)-1, "", my_locale_ab_day_names_de_DE, NULL }; MY_LOCALE my_locale_de_DE= - { "de_DE", "German - Germany", FALSE, &my_locale_typelib_month_names_de_DE, &my_locale_typelib_ab_month_names_de_DE, &my_locale_typelib_day_names_de_DE, &my_locale_typelib_ab_day_names_de_DE }; +{ + 4, + "de_DE", + "German - Germany", + FALSE, + &my_locale_typelib_month_names_de_DE, + &my_locale_typelib_ab_month_names_de_DE, + &my_locale_typelib_day_names_de_DE, + &my_locale_typelib_ab_day_names_de_DE +}; /***** LOCALE END de_DE *****/ /***** LOCALE BEGIN en_US: English - United States *****/ @@ -305,7 +402,16 @@ static TYPELIB my_locale_typelib_day_names_en_US = static TYPELIB my_locale_typelib_ab_day_names_en_US = { array_elements(my_locale_ab_day_names_en_US)-1, "", my_locale_ab_day_names_en_US, NULL }; MY_LOCALE my_locale_en_US= - { "en_US", "English - United States", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 0, + "en_US", + "English - United States", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_US *****/ /***** LOCALE BEGIN es_ES: Spanish - Spain *****/ @@ -326,7 +432,16 @@ static TYPELIB my_locale_typelib_day_names_es_ES = static TYPELIB my_locale_typelib_ab_day_names_es_ES = { array_elements(my_locale_ab_day_names_es_ES)-1, "", my_locale_ab_day_names_es_ES, NULL }; MY_LOCALE my_locale_es_ES= - { "es_ES", "Spanish - Spain", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 17, + "es_ES", + "Spanish - Spain", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_ES *****/ /***** LOCALE BEGIN et_EE: Estonian - Estonia *****/ @@ -347,7 +462,16 @@ static TYPELIB my_locale_typelib_day_names_et_EE = static TYPELIB my_locale_typelib_ab_day_names_et_EE = { array_elements(my_locale_ab_day_names_et_EE)-1, "", my_locale_ab_day_names_et_EE, NULL }; MY_LOCALE my_locale_et_EE= - { "et_EE", "Estonian - Estonia", FALSE, &my_locale_typelib_month_names_et_EE, &my_locale_typelib_ab_month_names_et_EE, &my_locale_typelib_day_names_et_EE, &my_locale_typelib_ab_day_names_et_EE }; +{ + 18, + "et_EE", + "Estonian - Estonia", + FALSE, + &my_locale_typelib_month_names_et_EE, + &my_locale_typelib_ab_month_names_et_EE, + &my_locale_typelib_day_names_et_EE, + &my_locale_typelib_ab_day_names_et_EE +}; /***** LOCALE END et_EE *****/ /***** LOCALE BEGIN eu_ES: Basque - Basque *****/ @@ -368,7 +492,16 @@ static TYPELIB my_locale_typelib_day_names_eu_ES = static TYPELIB my_locale_typelib_ab_day_names_eu_ES = { array_elements(my_locale_ab_day_names_eu_ES)-1, "", my_locale_ab_day_names_eu_ES, NULL }; MY_LOCALE my_locale_eu_ES= - { "eu_ES", "Basque - Basque", TRUE, &my_locale_typelib_month_names_eu_ES, &my_locale_typelib_ab_month_names_eu_ES, &my_locale_typelib_day_names_eu_ES, &my_locale_typelib_ab_day_names_eu_ES }; +{ + 19, + "eu_ES", + "Basque - Basque", + TRUE, + &my_locale_typelib_month_names_eu_ES, + &my_locale_typelib_ab_month_names_eu_ES, + &my_locale_typelib_day_names_eu_ES, + &my_locale_typelib_ab_day_names_eu_ES +}; /***** LOCALE END eu_ES *****/ /***** LOCALE BEGIN fi_FI: Finnish - Finland *****/ @@ -389,7 +522,16 @@ static TYPELIB my_locale_typelib_day_names_fi_FI = static TYPELIB my_locale_typelib_ab_day_names_fi_FI = { array_elements(my_locale_ab_day_names_fi_FI)-1, "", my_locale_ab_day_names_fi_FI, NULL }; MY_LOCALE my_locale_fi_FI= - { "fi_FI", "Finnish - Finland", FALSE, &my_locale_typelib_month_names_fi_FI, &my_locale_typelib_ab_month_names_fi_FI, &my_locale_typelib_day_names_fi_FI, &my_locale_typelib_ab_day_names_fi_FI }; +{ + 20, + "fi_FI", + "Finnish - Finland", + FALSE, + &my_locale_typelib_month_names_fi_FI, + &my_locale_typelib_ab_month_names_fi_FI, + &my_locale_typelib_day_names_fi_FI, + &my_locale_typelib_ab_day_names_fi_FI +}; /***** LOCALE END fi_FI *****/ /***** LOCALE BEGIN fo_FO: Faroese - Faroe Islands *****/ @@ -410,7 +552,16 @@ static TYPELIB my_locale_typelib_day_names_fo_FO = static TYPELIB my_locale_typelib_ab_day_names_fo_FO = { array_elements(my_locale_ab_day_names_fo_FO)-1, "", my_locale_ab_day_names_fo_FO, NULL }; MY_LOCALE my_locale_fo_FO= - { "fo_FO", "Faroese - Faroe Islands", FALSE, &my_locale_typelib_month_names_fo_FO, &my_locale_typelib_ab_month_names_fo_FO, &my_locale_typelib_day_names_fo_FO, &my_locale_typelib_ab_day_names_fo_FO }; +{ + 21, + "fo_FO", + "Faroese - Faroe Islands", + FALSE, + &my_locale_typelib_month_names_fo_FO, + &my_locale_typelib_ab_month_names_fo_FO, + &my_locale_typelib_day_names_fo_FO, + &my_locale_typelib_ab_day_names_fo_FO +}; /***** LOCALE END fo_FO *****/ /***** LOCALE BEGIN fr_FR: French - France *****/ @@ -431,7 +582,16 @@ static TYPELIB my_locale_typelib_day_names_fr_FR = static TYPELIB my_locale_typelib_ab_day_names_fr_FR = { array_elements(my_locale_ab_day_names_fr_FR)-1, "", my_locale_ab_day_names_fr_FR, NULL }; MY_LOCALE my_locale_fr_FR= - { "fr_FR", "French - France", FALSE, &my_locale_typelib_month_names_fr_FR, &my_locale_typelib_ab_month_names_fr_FR, &my_locale_typelib_day_names_fr_FR, &my_locale_typelib_ab_day_names_fr_FR }; +{ + 5, + "fr_FR", + "French - France", + FALSE, + &my_locale_typelib_month_names_fr_FR, + &my_locale_typelib_ab_month_names_fr_FR, + &my_locale_typelib_day_names_fr_FR, + &my_locale_typelib_ab_day_names_fr_FR +}; /***** LOCALE END fr_FR *****/ /***** LOCALE BEGIN gl_ES: Galician - Galician *****/ @@ -452,7 +612,16 @@ static TYPELIB my_locale_typelib_day_names_gl_ES = static TYPELIB my_locale_typelib_ab_day_names_gl_ES = { array_elements(my_locale_ab_day_names_gl_ES)-1, "", my_locale_ab_day_names_gl_ES, NULL }; MY_LOCALE my_locale_gl_ES= - { "gl_ES", "Galician - Galician", FALSE, &my_locale_typelib_month_names_gl_ES, &my_locale_typelib_ab_month_names_gl_ES, &my_locale_typelib_day_names_gl_ES, &my_locale_typelib_ab_day_names_gl_ES }; +{ + 22, + "gl_ES", + "Galician - Galician", + FALSE, + &my_locale_typelib_month_names_gl_ES, + &my_locale_typelib_ab_month_names_gl_ES, + &my_locale_typelib_day_names_gl_ES, + &my_locale_typelib_ab_day_names_gl_ES +}; /***** LOCALE END gl_ES *****/ /***** LOCALE BEGIN gu_IN: Gujarati - India *****/ @@ -473,7 +642,16 @@ static TYPELIB my_locale_typelib_day_names_gu_IN = static TYPELIB my_locale_typelib_ab_day_names_gu_IN = { array_elements(my_locale_ab_day_names_gu_IN)-1, "", my_locale_ab_day_names_gu_IN, NULL }; MY_LOCALE my_locale_gu_IN= - { "gu_IN", "Gujarati - India", FALSE, &my_locale_typelib_month_names_gu_IN, &my_locale_typelib_ab_month_names_gu_IN, &my_locale_typelib_day_names_gu_IN, &my_locale_typelib_ab_day_names_gu_IN }; +{ + 23, + "gu_IN", + "Gujarati - India", + FALSE, + &my_locale_typelib_month_names_gu_IN, + &my_locale_typelib_ab_month_names_gu_IN, + &my_locale_typelib_day_names_gu_IN, + &my_locale_typelib_ab_day_names_gu_IN +}; /***** LOCALE END gu_IN *****/ /***** LOCALE BEGIN he_IL: Hebrew - Israel *****/ @@ -494,7 +672,16 @@ static TYPELIB my_locale_typelib_day_names_he_IL = static TYPELIB my_locale_typelib_ab_day_names_he_IL = { array_elements(my_locale_ab_day_names_he_IL)-1, "", my_locale_ab_day_names_he_IL, NULL }; MY_LOCALE my_locale_he_IL= - { "he_IL", "Hebrew - Israel", FALSE, &my_locale_typelib_month_names_he_IL, &my_locale_typelib_ab_month_names_he_IL, &my_locale_typelib_day_names_he_IL, &my_locale_typelib_ab_day_names_he_IL }; +{ + 24, + "he_IL", + "Hebrew - Israel", + FALSE, + &my_locale_typelib_month_names_he_IL, + &my_locale_typelib_ab_month_names_he_IL, + &my_locale_typelib_day_names_he_IL, + &my_locale_typelib_ab_day_names_he_IL +}; /***** LOCALE END he_IL *****/ /***** LOCALE BEGIN hi_IN: Hindi - India *****/ @@ -515,7 +702,16 @@ static TYPELIB my_locale_typelib_day_names_hi_IN = static TYPELIB my_locale_typelib_ab_day_names_hi_IN = { array_elements(my_locale_ab_day_names_hi_IN)-1, "", my_locale_ab_day_names_hi_IN, NULL }; MY_LOCALE my_locale_hi_IN= - { "hi_IN", "Hindi - India", FALSE, &my_locale_typelib_month_names_hi_IN, &my_locale_typelib_ab_month_names_hi_IN, &my_locale_typelib_day_names_hi_IN, &my_locale_typelib_ab_day_names_hi_IN }; +{ + 25, + "hi_IN", + "Hindi - India", + FALSE, + &my_locale_typelib_month_names_hi_IN, + &my_locale_typelib_ab_month_names_hi_IN, + &my_locale_typelib_day_names_hi_IN, + &my_locale_typelib_ab_day_names_hi_IN +}; /***** LOCALE END hi_IN *****/ /***** LOCALE BEGIN hr_HR: Croatian - Croatia *****/ @@ -536,7 +732,16 @@ static TYPELIB my_locale_typelib_day_names_hr_HR = static TYPELIB my_locale_typelib_ab_day_names_hr_HR = { array_elements(my_locale_ab_day_names_hr_HR)-1, "", my_locale_ab_day_names_hr_HR, NULL }; MY_LOCALE my_locale_hr_HR= - { "hr_HR", "Croatian - Croatia", FALSE, &my_locale_typelib_month_names_hr_HR, &my_locale_typelib_ab_month_names_hr_HR, &my_locale_typelib_day_names_hr_HR, &my_locale_typelib_ab_day_names_hr_HR }; +{ + 26, + "hr_HR", + "Croatian - Croatia", + FALSE, + &my_locale_typelib_month_names_hr_HR, + &my_locale_typelib_ab_month_names_hr_HR, + &my_locale_typelib_day_names_hr_HR, + &my_locale_typelib_ab_day_names_hr_HR +}; /***** LOCALE END hr_HR *****/ /***** LOCALE BEGIN hu_HU: Hungarian - Hungary *****/ @@ -557,7 +762,16 @@ static TYPELIB my_locale_typelib_day_names_hu_HU = static TYPELIB my_locale_typelib_ab_day_names_hu_HU = { array_elements(my_locale_ab_day_names_hu_HU)-1, "", my_locale_ab_day_names_hu_HU, NULL }; MY_LOCALE my_locale_hu_HU= - { "hu_HU", "Hungarian - Hungary", FALSE, &my_locale_typelib_month_names_hu_HU, &my_locale_typelib_ab_month_names_hu_HU, &my_locale_typelib_day_names_hu_HU, &my_locale_typelib_ab_day_names_hu_HU }; +{ + 27, + "hu_HU", + "Hungarian - Hungary", + FALSE, + &my_locale_typelib_month_names_hu_HU, + &my_locale_typelib_ab_month_names_hu_HU, + &my_locale_typelib_day_names_hu_HU, + &my_locale_typelib_ab_day_names_hu_HU +}; /***** LOCALE END hu_HU *****/ /***** LOCALE BEGIN id_ID: Indonesian - Indonesia *****/ @@ -578,7 +792,16 @@ static TYPELIB my_locale_typelib_day_names_id_ID = static TYPELIB my_locale_typelib_ab_day_names_id_ID = { array_elements(my_locale_ab_day_names_id_ID)-1, "", my_locale_ab_day_names_id_ID, NULL }; MY_LOCALE my_locale_id_ID= - { "id_ID", "Indonesian - Indonesia", TRUE, &my_locale_typelib_month_names_id_ID, &my_locale_typelib_ab_month_names_id_ID, &my_locale_typelib_day_names_id_ID, &my_locale_typelib_ab_day_names_id_ID }; +{ + 28, + "id_ID", + "Indonesian - Indonesia", + TRUE, + &my_locale_typelib_month_names_id_ID, + &my_locale_typelib_ab_month_names_id_ID, + &my_locale_typelib_day_names_id_ID, + &my_locale_typelib_ab_day_names_id_ID +}; /***** LOCALE END id_ID *****/ /***** LOCALE BEGIN is_IS: Icelandic - Iceland *****/ @@ -599,7 +822,16 @@ static TYPELIB my_locale_typelib_day_names_is_IS = static TYPELIB my_locale_typelib_ab_day_names_is_IS = { array_elements(my_locale_ab_day_names_is_IS)-1, "", my_locale_ab_day_names_is_IS, NULL }; MY_LOCALE my_locale_is_IS= - { "is_IS", "Icelandic - Iceland", FALSE, &my_locale_typelib_month_names_is_IS, &my_locale_typelib_ab_month_names_is_IS, &my_locale_typelib_day_names_is_IS, &my_locale_typelib_ab_day_names_is_IS }; +{ + 29, + "is_IS", + "Icelandic - Iceland", + FALSE, + &my_locale_typelib_month_names_is_IS, + &my_locale_typelib_ab_month_names_is_IS, + &my_locale_typelib_day_names_is_IS, + &my_locale_typelib_ab_day_names_is_IS +}; /***** LOCALE END is_IS *****/ /***** LOCALE BEGIN it_CH: Italian - Switzerland *****/ @@ -620,7 +852,16 @@ static TYPELIB my_locale_typelib_day_names_it_CH = static TYPELIB my_locale_typelib_ab_day_names_it_CH = { array_elements(my_locale_ab_day_names_it_CH)-1, "", my_locale_ab_day_names_it_CH, NULL }; MY_LOCALE my_locale_it_CH= - { "it_CH", "Italian - Switzerland", FALSE, &my_locale_typelib_month_names_it_CH, &my_locale_typelib_ab_month_names_it_CH, &my_locale_typelib_day_names_it_CH, &my_locale_typelib_ab_day_names_it_CH }; +{ + 30, + "it_CH", + "Italian - Switzerland", + FALSE, + &my_locale_typelib_month_names_it_CH, + &my_locale_typelib_ab_month_names_it_CH, + &my_locale_typelib_day_names_it_CH, + &my_locale_typelib_ab_day_names_it_CH +}; /***** LOCALE END it_CH *****/ /***** LOCALE BEGIN ja_JP: Japanese - Japan *****/ @@ -641,7 +882,16 @@ static TYPELIB my_locale_typelib_day_names_ja_JP = static TYPELIB my_locale_typelib_ab_day_names_ja_JP = { array_elements(my_locale_ab_day_names_ja_JP)-1, "", my_locale_ab_day_names_ja_JP, NULL }; MY_LOCALE my_locale_ja_JP= - { "ja_JP", "Japanese - Japan", FALSE, &my_locale_typelib_month_names_ja_JP, &my_locale_typelib_ab_month_names_ja_JP, &my_locale_typelib_day_names_ja_JP, &my_locale_typelib_ab_day_names_ja_JP }; +{ + 2, + "ja_JP", + "Japanese - Japan", + FALSE, + &my_locale_typelib_month_names_ja_JP, + &my_locale_typelib_ab_month_names_ja_JP, + &my_locale_typelib_day_names_ja_JP, + &my_locale_typelib_ab_day_names_ja_JP +}; /***** LOCALE END ja_JP *****/ /***** LOCALE BEGIN ko_KR: Korean - Korea *****/ @@ -662,7 +912,16 @@ static TYPELIB my_locale_typelib_day_names_ko_KR = static TYPELIB my_locale_typelib_ab_day_names_ko_KR = { array_elements(my_locale_ab_day_names_ko_KR)-1, "", my_locale_ab_day_names_ko_KR, NULL }; MY_LOCALE my_locale_ko_KR= - { "ko_KR", "Korean - Korea", FALSE, &my_locale_typelib_month_names_ko_KR, &my_locale_typelib_ab_month_names_ko_KR, &my_locale_typelib_day_names_ko_KR, &my_locale_typelib_ab_day_names_ko_KR }; +{ + 31, + "ko_KR", + "Korean - Korea", + FALSE, + &my_locale_typelib_month_names_ko_KR, + &my_locale_typelib_ab_month_names_ko_KR, + &my_locale_typelib_day_names_ko_KR, + &my_locale_typelib_ab_day_names_ko_KR +}; /***** LOCALE END ko_KR *****/ /***** LOCALE BEGIN lt_LT: Lithuanian - Lithuania *****/ @@ -683,7 +942,16 @@ static TYPELIB my_locale_typelib_day_names_lt_LT = static TYPELIB my_locale_typelib_ab_day_names_lt_LT = { array_elements(my_locale_ab_day_names_lt_LT)-1, "", my_locale_ab_day_names_lt_LT, NULL }; MY_LOCALE my_locale_lt_LT= - { "lt_LT", "Lithuanian - Lithuania", FALSE, &my_locale_typelib_month_names_lt_LT, &my_locale_typelib_ab_month_names_lt_LT, &my_locale_typelib_day_names_lt_LT, &my_locale_typelib_ab_day_names_lt_LT }; +{ + 32, + "lt_LT", + "Lithuanian - Lithuania", + FALSE, + &my_locale_typelib_month_names_lt_LT, + &my_locale_typelib_ab_month_names_lt_LT, + &my_locale_typelib_day_names_lt_LT, + &my_locale_typelib_ab_day_names_lt_LT +}; /***** LOCALE END lt_LT *****/ /***** LOCALE BEGIN lv_LV: Latvian - Latvia *****/ @@ -704,7 +972,16 @@ static TYPELIB my_locale_typelib_day_names_lv_LV = static TYPELIB my_locale_typelib_ab_day_names_lv_LV = { array_elements(my_locale_ab_day_names_lv_LV)-1, "", my_locale_ab_day_names_lv_LV, NULL }; MY_LOCALE my_locale_lv_LV= - { "lv_LV", "Latvian - Latvia", FALSE, &my_locale_typelib_month_names_lv_LV, &my_locale_typelib_ab_month_names_lv_LV, &my_locale_typelib_day_names_lv_LV, &my_locale_typelib_ab_day_names_lv_LV }; +{ + 33, + "lv_LV", + "Latvian - Latvia", + FALSE, + &my_locale_typelib_month_names_lv_LV, + &my_locale_typelib_ab_month_names_lv_LV, + &my_locale_typelib_day_names_lv_LV, + &my_locale_typelib_ab_day_names_lv_LV +}; /***** LOCALE END lv_LV *****/ /***** LOCALE BEGIN mk_MK: Macedonian - FYROM *****/ @@ -725,7 +1002,16 @@ static TYPELIB my_locale_typelib_day_names_mk_MK = static TYPELIB my_locale_typelib_ab_day_names_mk_MK = { array_elements(my_locale_ab_day_names_mk_MK)-1, "", my_locale_ab_day_names_mk_MK, NULL }; MY_LOCALE my_locale_mk_MK= - { "mk_MK", "Macedonian - FYROM", FALSE, &my_locale_typelib_month_names_mk_MK, &my_locale_typelib_ab_month_names_mk_MK, &my_locale_typelib_day_names_mk_MK, &my_locale_typelib_ab_day_names_mk_MK }; +{ + 34, + "mk_MK", + "Macedonian - FYROM", + FALSE, + &my_locale_typelib_month_names_mk_MK, + &my_locale_typelib_ab_month_names_mk_MK, + &my_locale_typelib_day_names_mk_MK, + &my_locale_typelib_ab_day_names_mk_MK +}; /***** LOCALE END mk_MK *****/ /***** LOCALE BEGIN mn_MN: Mongolia - Mongolian *****/ @@ -746,7 +1032,16 @@ static TYPELIB my_locale_typelib_day_names_mn_MN = static TYPELIB my_locale_typelib_ab_day_names_mn_MN = { array_elements(my_locale_ab_day_names_mn_MN)-1, "", my_locale_ab_day_names_mn_MN, NULL }; MY_LOCALE my_locale_mn_MN= - { "mn_MN", "Mongolia - Mongolian", FALSE, &my_locale_typelib_month_names_mn_MN, &my_locale_typelib_ab_month_names_mn_MN, &my_locale_typelib_day_names_mn_MN, &my_locale_typelib_ab_day_names_mn_MN }; +{ + 35, + "mn_MN", + "Mongolia - Mongolian", + FALSE, + &my_locale_typelib_month_names_mn_MN, + &my_locale_typelib_ab_month_names_mn_MN, + &my_locale_typelib_day_names_mn_MN, + &my_locale_typelib_ab_day_names_mn_MN +}; /***** LOCALE END mn_MN *****/ /***** LOCALE BEGIN ms_MY: Malay - Malaysia *****/ @@ -767,7 +1062,16 @@ static TYPELIB my_locale_typelib_day_names_ms_MY = static TYPELIB my_locale_typelib_ab_day_names_ms_MY = { array_elements(my_locale_ab_day_names_ms_MY)-1, "", my_locale_ab_day_names_ms_MY, NULL }; MY_LOCALE my_locale_ms_MY= - { "ms_MY", "Malay - Malaysia", TRUE, &my_locale_typelib_month_names_ms_MY, &my_locale_typelib_ab_month_names_ms_MY, &my_locale_typelib_day_names_ms_MY, &my_locale_typelib_ab_day_names_ms_MY }; +{ + 36, + "ms_MY", + "Malay - Malaysia", + TRUE, + &my_locale_typelib_month_names_ms_MY, + &my_locale_typelib_ab_month_names_ms_MY, + &my_locale_typelib_day_names_ms_MY, + &my_locale_typelib_ab_day_names_ms_MY +}; /***** LOCALE END ms_MY *****/ /***** LOCALE BEGIN nb_NO: Norwegian(Bokml) - Norway *****/ @@ -788,7 +1092,16 @@ static TYPELIB my_locale_typelib_day_names_nb_NO = static TYPELIB my_locale_typelib_ab_day_names_nb_NO = { array_elements(my_locale_ab_day_names_nb_NO)-1, "", my_locale_ab_day_names_nb_NO, NULL }; MY_LOCALE my_locale_nb_NO= - { "nb_NO", "Norwegian(Bokml) - Norway", FALSE, &my_locale_typelib_month_names_nb_NO, &my_locale_typelib_ab_month_names_nb_NO, &my_locale_typelib_day_names_nb_NO, &my_locale_typelib_ab_day_names_nb_NO }; +{ + 37, + "nb_NO", + "Norwegian(Bokml) - Norway", + FALSE, + &my_locale_typelib_month_names_nb_NO, + &my_locale_typelib_ab_month_names_nb_NO, + &my_locale_typelib_day_names_nb_NO, + &my_locale_typelib_ab_day_names_nb_NO +}; /***** LOCALE END nb_NO *****/ /***** LOCALE BEGIN nl_NL: Dutch - The Netherlands *****/ @@ -809,7 +1122,16 @@ static TYPELIB my_locale_typelib_day_names_nl_NL = static TYPELIB my_locale_typelib_ab_day_names_nl_NL = { array_elements(my_locale_ab_day_names_nl_NL)-1, "", my_locale_ab_day_names_nl_NL, NULL }; MY_LOCALE my_locale_nl_NL= - { "nl_NL", "Dutch - The Netherlands", TRUE, &my_locale_typelib_month_names_nl_NL, &my_locale_typelib_ab_month_names_nl_NL, &my_locale_typelib_day_names_nl_NL, &my_locale_typelib_ab_day_names_nl_NL }; +{ + 38, + "nl_NL", + "Dutch - The Netherlands", + TRUE, + &my_locale_typelib_month_names_nl_NL, + &my_locale_typelib_ab_month_names_nl_NL, + &my_locale_typelib_day_names_nl_NL, + &my_locale_typelib_ab_day_names_nl_NL +}; /***** LOCALE END nl_NL *****/ /***** LOCALE BEGIN pl_PL: Polish - Poland *****/ @@ -830,7 +1152,16 @@ static TYPELIB my_locale_typelib_day_names_pl_PL = static TYPELIB my_locale_typelib_ab_day_names_pl_PL = { array_elements(my_locale_ab_day_names_pl_PL)-1, "", my_locale_ab_day_names_pl_PL, NULL }; MY_LOCALE my_locale_pl_PL= - { "pl_PL", "Polish - Poland", FALSE, &my_locale_typelib_month_names_pl_PL, &my_locale_typelib_ab_month_names_pl_PL, &my_locale_typelib_day_names_pl_PL, &my_locale_typelib_ab_day_names_pl_PL }; +{ + 39, + "pl_PL", + "Polish - Poland", + FALSE, + &my_locale_typelib_month_names_pl_PL, + &my_locale_typelib_ab_month_names_pl_PL, + &my_locale_typelib_day_names_pl_PL, + &my_locale_typelib_ab_day_names_pl_PL +}; /***** LOCALE END pl_PL *****/ /***** LOCALE BEGIN pt_BR: Portugese - Brazil *****/ @@ -851,7 +1182,16 @@ static TYPELIB my_locale_typelib_day_names_pt_BR = static TYPELIB my_locale_typelib_ab_day_names_pt_BR = { array_elements(my_locale_ab_day_names_pt_BR)-1, "", my_locale_ab_day_names_pt_BR, NULL }; MY_LOCALE my_locale_pt_BR= - { "pt_BR", "Portugese - Brazil", FALSE, &my_locale_typelib_month_names_pt_BR, &my_locale_typelib_ab_month_names_pt_BR, &my_locale_typelib_day_names_pt_BR, &my_locale_typelib_ab_day_names_pt_BR }; +{ + 40, + "pt_BR", + "Portugese - Brazil", + FALSE, + &my_locale_typelib_month_names_pt_BR, + &my_locale_typelib_ab_month_names_pt_BR, + &my_locale_typelib_day_names_pt_BR, + &my_locale_typelib_ab_day_names_pt_BR +}; /***** LOCALE END pt_BR *****/ /***** LOCALE BEGIN pt_PT: Portugese - Portugal *****/ @@ -872,7 +1212,16 @@ static TYPELIB my_locale_typelib_day_names_pt_PT = static TYPELIB my_locale_typelib_ab_day_names_pt_PT = { array_elements(my_locale_ab_day_names_pt_PT)-1, "", my_locale_ab_day_names_pt_PT, NULL }; MY_LOCALE my_locale_pt_PT= - { "pt_PT", "Portugese - Portugal", FALSE, &my_locale_typelib_month_names_pt_PT, &my_locale_typelib_ab_month_names_pt_PT, &my_locale_typelib_day_names_pt_PT, &my_locale_typelib_ab_day_names_pt_PT }; +{ + 41, + "pt_PT", + "Portugese - Portugal", + FALSE, + &my_locale_typelib_month_names_pt_PT, + &my_locale_typelib_ab_month_names_pt_PT, + &my_locale_typelib_day_names_pt_PT, + &my_locale_typelib_ab_day_names_pt_PT +}; /***** LOCALE END pt_PT *****/ /***** LOCALE BEGIN ro_RO: Romanian - Romania *****/ @@ -893,7 +1242,16 @@ static TYPELIB my_locale_typelib_day_names_ro_RO = static TYPELIB my_locale_typelib_ab_day_names_ro_RO = { array_elements(my_locale_ab_day_names_ro_RO)-1, "", my_locale_ab_day_names_ro_RO, NULL }; MY_LOCALE my_locale_ro_RO= - { "ro_RO", "Romanian - Romania", FALSE, &my_locale_typelib_month_names_ro_RO, &my_locale_typelib_ab_month_names_ro_RO, &my_locale_typelib_day_names_ro_RO, &my_locale_typelib_ab_day_names_ro_RO }; +{ + 42, + "ro_RO", + "Romanian - Romania", + FALSE, + &my_locale_typelib_month_names_ro_RO, + &my_locale_typelib_ab_month_names_ro_RO, + &my_locale_typelib_day_names_ro_RO, + &my_locale_typelib_ab_day_names_ro_RO +}; /***** LOCALE END ro_RO *****/ /***** LOCALE BEGIN ru_RU: Russian - Russia *****/ @@ -914,7 +1272,16 @@ static TYPELIB my_locale_typelib_day_names_ru_RU = static TYPELIB my_locale_typelib_ab_day_names_ru_RU = { array_elements(my_locale_ab_day_names_ru_RU)-1, "", my_locale_ab_day_names_ru_RU, NULL }; MY_LOCALE my_locale_ru_RU= - { "ru_RU", "Russian - Russia", FALSE, &my_locale_typelib_month_names_ru_RU, &my_locale_typelib_ab_month_names_ru_RU, &my_locale_typelib_day_names_ru_RU, &my_locale_typelib_ab_day_names_ru_RU }; +{ + 43, + "ru_RU", + "Russian - Russia", + FALSE, + &my_locale_typelib_month_names_ru_RU, + &my_locale_typelib_ab_month_names_ru_RU, + &my_locale_typelib_day_names_ru_RU, + &my_locale_typelib_ab_day_names_ru_RU +}; /***** LOCALE END ru_RU *****/ /***** LOCALE BEGIN ru_UA: Russian - Ukraine *****/ @@ -935,7 +1302,16 @@ static TYPELIB my_locale_typelib_day_names_ru_UA = static TYPELIB my_locale_typelib_ab_day_names_ru_UA = { array_elements(my_locale_ab_day_names_ru_UA)-1, "", my_locale_ab_day_names_ru_UA, NULL }; MY_LOCALE my_locale_ru_UA= - { "ru_UA", "Russian - Ukraine", FALSE, &my_locale_typelib_month_names_ru_UA, &my_locale_typelib_ab_month_names_ru_UA, &my_locale_typelib_day_names_ru_UA, &my_locale_typelib_ab_day_names_ru_UA }; +{ + 44, + "ru_UA", + "Russian - Ukraine", + FALSE, + &my_locale_typelib_month_names_ru_UA, + &my_locale_typelib_ab_month_names_ru_UA, + &my_locale_typelib_day_names_ru_UA, + &my_locale_typelib_ab_day_names_ru_UA +}; /***** LOCALE END ru_UA *****/ /***** LOCALE BEGIN sk_SK: Slovak - Slovakia *****/ @@ -956,7 +1332,16 @@ static TYPELIB my_locale_typelib_day_names_sk_SK = static TYPELIB my_locale_typelib_ab_day_names_sk_SK = { array_elements(my_locale_ab_day_names_sk_SK)-1, "", my_locale_ab_day_names_sk_SK, NULL }; MY_LOCALE my_locale_sk_SK= - { "sk_SK", "Slovak - Slovakia", FALSE, &my_locale_typelib_month_names_sk_SK, &my_locale_typelib_ab_month_names_sk_SK, &my_locale_typelib_day_names_sk_SK, &my_locale_typelib_ab_day_names_sk_SK }; +{ + 45, + "sk_SK", + "Slovak - Slovakia", + FALSE, + &my_locale_typelib_month_names_sk_SK, + &my_locale_typelib_ab_month_names_sk_SK, + &my_locale_typelib_day_names_sk_SK, + &my_locale_typelib_ab_day_names_sk_SK +}; /***** LOCALE END sk_SK *****/ /***** LOCALE BEGIN sl_SI: Slovenian - Slovenia *****/ @@ -977,7 +1362,16 @@ static TYPELIB my_locale_typelib_day_names_sl_SI = static TYPELIB my_locale_typelib_ab_day_names_sl_SI = { array_elements(my_locale_ab_day_names_sl_SI)-1, "", my_locale_ab_day_names_sl_SI, NULL }; MY_LOCALE my_locale_sl_SI= - { "sl_SI", "Slovenian - Slovenia", FALSE, &my_locale_typelib_month_names_sl_SI, &my_locale_typelib_ab_month_names_sl_SI, &my_locale_typelib_day_names_sl_SI, &my_locale_typelib_ab_day_names_sl_SI }; +{ + 46, + "sl_SI", + "Slovenian - Slovenia", + FALSE, + &my_locale_typelib_month_names_sl_SI, + &my_locale_typelib_ab_month_names_sl_SI, + &my_locale_typelib_day_names_sl_SI, + &my_locale_typelib_ab_day_names_sl_SI +}; /***** LOCALE END sl_SI *****/ /***** LOCALE BEGIN sq_AL: Albanian - Albania *****/ @@ -998,7 +1392,16 @@ static TYPELIB my_locale_typelib_day_names_sq_AL = static TYPELIB my_locale_typelib_ab_day_names_sq_AL = { array_elements(my_locale_ab_day_names_sq_AL)-1, "", my_locale_ab_day_names_sq_AL, NULL }; MY_LOCALE my_locale_sq_AL= - { "sq_AL", "Albanian - Albania", FALSE, &my_locale_typelib_month_names_sq_AL, &my_locale_typelib_ab_month_names_sq_AL, &my_locale_typelib_day_names_sq_AL, &my_locale_typelib_ab_day_names_sq_AL }; +{ + 47, + "sq_AL", + "Albanian - Albania", + FALSE, + &my_locale_typelib_month_names_sq_AL, + &my_locale_typelib_ab_month_names_sq_AL, + &my_locale_typelib_day_names_sq_AL, + &my_locale_typelib_ab_day_names_sq_AL +}; /***** LOCALE END sq_AL *****/ /***** LOCALE BEGIN sr_YU: Servian - Yugoslavia *****/ @@ -1019,7 +1422,16 @@ static TYPELIB my_locale_typelib_day_names_sr_YU = static TYPELIB my_locale_typelib_ab_day_names_sr_YU = { array_elements(my_locale_ab_day_names_sr_YU)-1, "", my_locale_ab_day_names_sr_YU, NULL }; MY_LOCALE my_locale_sr_YU= - { "sr_YU", "Servian - Yugoslavia", FALSE, &my_locale_typelib_month_names_sr_YU, &my_locale_typelib_ab_month_names_sr_YU, &my_locale_typelib_day_names_sr_YU, &my_locale_typelib_ab_day_names_sr_YU }; +{ + 48, + "sr_YU", + "Servian - Yugoslavia", + FALSE, + &my_locale_typelib_month_names_sr_YU, + &my_locale_typelib_ab_month_names_sr_YU, + &my_locale_typelib_day_names_sr_YU, + &my_locale_typelib_ab_day_names_sr_YU +}; /***** LOCALE END sr_YU *****/ /***** LOCALE BEGIN sv_SE: Swedish - Sweden *****/ @@ -1040,7 +1452,16 @@ static TYPELIB my_locale_typelib_day_names_sv_SE = static TYPELIB my_locale_typelib_ab_day_names_sv_SE = { array_elements(my_locale_ab_day_names_sv_SE)-1, "", my_locale_ab_day_names_sv_SE, NULL }; MY_LOCALE my_locale_sv_SE= - { "sv_SE", "Swedish - Sweden", FALSE, &my_locale_typelib_month_names_sv_SE, &my_locale_typelib_ab_month_names_sv_SE, &my_locale_typelib_day_names_sv_SE, &my_locale_typelib_ab_day_names_sv_SE }; +{ + 3, + "sv_SE", + "Swedish - Sweden", + FALSE, + &my_locale_typelib_month_names_sv_SE, + &my_locale_typelib_ab_month_names_sv_SE, + &my_locale_typelib_day_names_sv_SE, + &my_locale_typelib_ab_day_names_sv_SE +}; /***** LOCALE END sv_SE *****/ /***** LOCALE BEGIN ta_IN: Tamil - India *****/ @@ -1061,7 +1482,16 @@ static TYPELIB my_locale_typelib_day_names_ta_IN = static TYPELIB my_locale_typelib_ab_day_names_ta_IN = { array_elements(my_locale_ab_day_names_ta_IN)-1, "", my_locale_ab_day_names_ta_IN, NULL }; MY_LOCALE my_locale_ta_IN= - { "ta_IN", "Tamil - India", FALSE, &my_locale_typelib_month_names_ta_IN, &my_locale_typelib_ab_month_names_ta_IN, &my_locale_typelib_day_names_ta_IN, &my_locale_typelib_ab_day_names_ta_IN }; +{ + 49, + "ta_IN", + "Tamil - India", + FALSE, + &my_locale_typelib_month_names_ta_IN, + &my_locale_typelib_ab_month_names_ta_IN, + &my_locale_typelib_day_names_ta_IN, + &my_locale_typelib_ab_day_names_ta_IN +}; /***** LOCALE END ta_IN *****/ /***** LOCALE BEGIN te_IN: Telugu - India *****/ @@ -1082,7 +1512,16 @@ static TYPELIB my_locale_typelib_day_names_te_IN = static TYPELIB my_locale_typelib_ab_day_names_te_IN = { array_elements(my_locale_ab_day_names_te_IN)-1, "", my_locale_ab_day_names_te_IN, NULL }; MY_LOCALE my_locale_te_IN= - { "te_IN", "Telugu - India", FALSE, &my_locale_typelib_month_names_te_IN, &my_locale_typelib_ab_month_names_te_IN, &my_locale_typelib_day_names_te_IN, &my_locale_typelib_ab_day_names_te_IN }; +{ + 50, + "te_IN", + "Telugu - India", + FALSE, + &my_locale_typelib_month_names_te_IN, + &my_locale_typelib_ab_month_names_te_IN, + &my_locale_typelib_day_names_te_IN, + &my_locale_typelib_ab_day_names_te_IN +}; /***** LOCALE END te_IN *****/ /***** LOCALE BEGIN th_TH: Thai - Thailand *****/ @@ -1103,7 +1542,16 @@ static TYPELIB my_locale_typelib_day_names_th_TH = static TYPELIB my_locale_typelib_ab_day_names_th_TH = { array_elements(my_locale_ab_day_names_th_TH)-1, "", my_locale_ab_day_names_th_TH, NULL }; MY_LOCALE my_locale_th_TH= - { "th_TH", "Thai - Thailand", FALSE, &my_locale_typelib_month_names_th_TH, &my_locale_typelib_ab_month_names_th_TH, &my_locale_typelib_day_names_th_TH, &my_locale_typelib_ab_day_names_th_TH }; +{ + 51, + "th_TH", + "Thai - Thailand", + FALSE, + &my_locale_typelib_month_names_th_TH, + &my_locale_typelib_ab_month_names_th_TH, + &my_locale_typelib_day_names_th_TH, + &my_locale_typelib_ab_day_names_th_TH +}; /***** LOCALE END th_TH *****/ /***** LOCALE BEGIN tr_TR: Turkish - Turkey *****/ @@ -1124,7 +1572,16 @@ static TYPELIB my_locale_typelib_day_names_tr_TR = static TYPELIB my_locale_typelib_ab_day_names_tr_TR = { array_elements(my_locale_ab_day_names_tr_TR)-1, "", my_locale_ab_day_names_tr_TR, NULL }; MY_LOCALE my_locale_tr_TR= - { "tr_TR", "Turkish - Turkey", FALSE, &my_locale_typelib_month_names_tr_TR, &my_locale_typelib_ab_month_names_tr_TR, &my_locale_typelib_day_names_tr_TR, &my_locale_typelib_ab_day_names_tr_TR }; +{ + 52, + "tr_TR", + "Turkish - Turkey", + FALSE, + &my_locale_typelib_month_names_tr_TR, + &my_locale_typelib_ab_month_names_tr_TR, + &my_locale_typelib_day_names_tr_TR, + &my_locale_typelib_ab_day_names_tr_TR +}; /***** LOCALE END tr_TR *****/ /***** LOCALE BEGIN uk_UA: Ukrainian - Ukraine *****/ @@ -1145,7 +1602,16 @@ static TYPELIB my_locale_typelib_day_names_uk_UA = static TYPELIB my_locale_typelib_ab_day_names_uk_UA = { array_elements(my_locale_ab_day_names_uk_UA)-1, "", my_locale_ab_day_names_uk_UA, NULL }; MY_LOCALE my_locale_uk_UA= - { "uk_UA", "Ukrainian - Ukraine", FALSE, &my_locale_typelib_month_names_uk_UA, &my_locale_typelib_ab_month_names_uk_UA, &my_locale_typelib_day_names_uk_UA, &my_locale_typelib_ab_day_names_uk_UA }; +{ + 53, + "uk_UA", + "Ukrainian - Ukraine", + FALSE, + &my_locale_typelib_month_names_uk_UA, + &my_locale_typelib_ab_month_names_uk_UA, + &my_locale_typelib_day_names_uk_UA, + &my_locale_typelib_ab_day_names_uk_UA +}; /***** LOCALE END uk_UA *****/ /***** LOCALE BEGIN ur_PK: Urdu - Pakistan *****/ @@ -1166,7 +1632,16 @@ static TYPELIB my_locale_typelib_day_names_ur_PK = static TYPELIB my_locale_typelib_ab_day_names_ur_PK = { array_elements(my_locale_ab_day_names_ur_PK)-1, "", my_locale_ab_day_names_ur_PK, NULL }; MY_LOCALE my_locale_ur_PK= - { "ur_PK", "Urdu - Pakistan", FALSE, &my_locale_typelib_month_names_ur_PK, &my_locale_typelib_ab_month_names_ur_PK, &my_locale_typelib_day_names_ur_PK, &my_locale_typelib_ab_day_names_ur_PK }; +{ + 54, + "ur_PK", + "Urdu - Pakistan", + FALSE, + &my_locale_typelib_month_names_ur_PK, + &my_locale_typelib_ab_month_names_ur_PK, + &my_locale_typelib_day_names_ur_PK, + &my_locale_typelib_ab_day_names_ur_PK +}; /***** LOCALE END ur_PK *****/ /***** LOCALE BEGIN vi_VN: Vietnamese - Vietnam *****/ @@ -1187,7 +1662,16 @@ static TYPELIB my_locale_typelib_day_names_vi_VN = static TYPELIB my_locale_typelib_ab_day_names_vi_VN = { array_elements(my_locale_ab_day_names_vi_VN)-1, "", my_locale_ab_day_names_vi_VN, NULL }; MY_LOCALE my_locale_vi_VN= - { "vi_VN", "Vietnamese - Vietnam", FALSE, &my_locale_typelib_month_names_vi_VN, &my_locale_typelib_ab_month_names_vi_VN, &my_locale_typelib_day_names_vi_VN, &my_locale_typelib_ab_day_names_vi_VN }; +{ + 55, + "vi_VN", + "Vietnamese - Vietnam", + FALSE, + &my_locale_typelib_month_names_vi_VN, + &my_locale_typelib_ab_month_names_vi_VN, + &my_locale_typelib_day_names_vi_VN, + &my_locale_typelib_ab_day_names_vi_VN +}; /***** LOCALE END vi_VN *****/ /***** LOCALE BEGIN zh_CN: Chinese - Peoples Republic of China *****/ @@ -1208,7 +1692,16 @@ static TYPELIB my_locale_typelib_day_names_zh_CN = static TYPELIB my_locale_typelib_ab_day_names_zh_CN = { array_elements(my_locale_ab_day_names_zh_CN)-1, "", my_locale_ab_day_names_zh_CN, NULL }; MY_LOCALE my_locale_zh_CN= - { "zh_CN", "Chinese - Peoples Republic of China", FALSE, &my_locale_typelib_month_names_zh_CN, &my_locale_typelib_ab_month_names_zh_CN, &my_locale_typelib_day_names_zh_CN, &my_locale_typelib_ab_day_names_zh_CN }; +{ + 56, + "zh_CN", + "Chinese - Peoples Republic of China", + FALSE, + &my_locale_typelib_month_names_zh_CN, + &my_locale_typelib_ab_month_names_zh_CN, + &my_locale_typelib_day_names_zh_CN, + &my_locale_typelib_ab_day_names_zh_CN +}; /***** LOCALE END zh_CN *****/ /***** LOCALE BEGIN zh_TW: Chinese - Taiwan *****/ @@ -1229,269 +1722,753 @@ static TYPELIB my_locale_typelib_day_names_zh_TW = static TYPELIB my_locale_typelib_ab_day_names_zh_TW = { array_elements(my_locale_ab_day_names_zh_TW)-1, "", my_locale_ab_day_names_zh_TW, NULL }; MY_LOCALE my_locale_zh_TW= - { "zh_TW", "Chinese - Taiwan", FALSE, &my_locale_typelib_month_names_zh_TW, &my_locale_typelib_ab_month_names_zh_TW, &my_locale_typelib_day_names_zh_TW, &my_locale_typelib_ab_day_names_zh_TW }; +{ + 57, + "zh_TW", + "Chinese - Taiwan", + FALSE, + &my_locale_typelib_month_names_zh_TW, + &my_locale_typelib_ab_month_names_zh_TW, + &my_locale_typelib_day_names_zh_TW, + &my_locale_typelib_ab_day_names_zh_TW +}; /***** LOCALE END zh_TW *****/ /***** LOCALE BEGIN ar_DZ: Arabic - Algeria *****/ MY_LOCALE my_locale_ar_DZ= - { "ar_DZ", "Arabic - Algeria", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 58, + "ar_DZ", + "Arabic - Algeria", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_DZ *****/ /***** LOCALE BEGIN ar_EG: Arabic - Egypt *****/ MY_LOCALE my_locale_ar_EG= - { "ar_EG", "Arabic - Egypt", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 59, + "ar_EG", + "Arabic - Egypt", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_EG *****/ /***** LOCALE BEGIN ar_IN: Arabic - Iran *****/ MY_LOCALE my_locale_ar_IN= - { "ar_IN", "Arabic - Iran", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 60, + "ar_IN", + "Arabic - Iran", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_IN *****/ /***** LOCALE BEGIN ar_IQ: Arabic - Iraq *****/ MY_LOCALE my_locale_ar_IQ= - { "ar_IQ", "Arabic - Iraq", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 61, + "ar_IQ", + "Arabic - Iraq", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_IQ *****/ /***** LOCALE BEGIN ar_KW: Arabic - Kuwait *****/ MY_LOCALE my_locale_ar_KW= - { "ar_KW", "Arabic - Kuwait", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 62, + "ar_KW", + "Arabic - Kuwait", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_KW *****/ /***** LOCALE BEGIN ar_LB: Arabic - Lebanon *****/ MY_LOCALE my_locale_ar_LB= - { "ar_LB", "Arabic - Lebanon", FALSE, &my_locale_typelib_month_names_ar_JO, &my_locale_typelib_ab_month_names_ar_JO, &my_locale_typelib_day_names_ar_JO, &my_locale_typelib_ab_day_names_ar_JO }; +{ + 63, + "ar_LB", + "Arabic - Lebanon", + FALSE, + &my_locale_typelib_month_names_ar_JO, + &my_locale_typelib_ab_month_names_ar_JO, + &my_locale_typelib_day_names_ar_JO, + &my_locale_typelib_ab_day_names_ar_JO +}; /***** LOCALE END ar_LB *****/ /***** LOCALE BEGIN ar_LY: Arabic - Libya *****/ MY_LOCALE my_locale_ar_LY= - { "ar_LY", "Arabic - Libya", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 64, + "ar_LY", + "Arabic - Libya", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_LY *****/ /***** LOCALE BEGIN ar_MA: Arabic - Morocco *****/ MY_LOCALE my_locale_ar_MA= - { "ar_MA", "Arabic - Morocco", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 65, + "ar_MA", + "Arabic - Morocco", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_MA *****/ /***** LOCALE BEGIN ar_OM: Arabic - Oman *****/ MY_LOCALE my_locale_ar_OM= - { "ar_OM", "Arabic - Oman", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 66, + "ar_OM", + "Arabic - Oman", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_OM *****/ /***** LOCALE BEGIN ar_QA: Arabic - Qatar *****/ MY_LOCALE my_locale_ar_QA= - { "ar_QA", "Arabic - Qatar", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 67, + "ar_QA", + "Arabic - Qatar", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_QA *****/ /***** LOCALE BEGIN ar_SD: Arabic - Sudan *****/ MY_LOCALE my_locale_ar_SD= - { "ar_SD", "Arabic - Sudan", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 68, + "ar_SD", + "Arabic - Sudan", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_SD *****/ /***** LOCALE BEGIN ar_TN: Arabic - Tunisia *****/ MY_LOCALE my_locale_ar_TN= - { "ar_TN", "Arabic - Tunisia", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 69, + "ar_TN", + "Arabic - Tunisia", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_TN *****/ /***** LOCALE BEGIN ar_YE: Arabic - Yemen *****/ MY_LOCALE my_locale_ar_YE= - { "ar_YE", "Arabic - Yemen", FALSE, &my_locale_typelib_month_names_ar_BH, &my_locale_typelib_ab_month_names_ar_BH, &my_locale_typelib_day_names_ar_BH, &my_locale_typelib_ab_day_names_ar_BH }; +{ + 70, + "ar_YE", + "Arabic - Yemen", + FALSE, + &my_locale_typelib_month_names_ar_BH, + &my_locale_typelib_ab_month_names_ar_BH, + &my_locale_typelib_day_names_ar_BH, + &my_locale_typelib_ab_day_names_ar_BH +}; /***** LOCALE END ar_YE *****/ /***** LOCALE BEGIN de_BE: German - Belgium *****/ MY_LOCALE my_locale_de_BE= - { "de_BE", "German - Belgium", FALSE, &my_locale_typelib_month_names_de_DE, &my_locale_typelib_ab_month_names_de_DE, &my_locale_typelib_day_names_de_DE, &my_locale_typelib_ab_day_names_de_DE }; +{ + 71, + "de_BE", + "German - Belgium", + FALSE, + &my_locale_typelib_month_names_de_DE, + &my_locale_typelib_ab_month_names_de_DE, + &my_locale_typelib_day_names_de_DE, + &my_locale_typelib_ab_day_names_de_DE +}; /***** LOCALE END de_BE *****/ /***** LOCALE BEGIN de_CH: German - Switzerland *****/ MY_LOCALE my_locale_de_CH= - { "de_CH", "German - Switzerland", FALSE, &my_locale_typelib_month_names_de_DE, &my_locale_typelib_ab_month_names_de_DE, &my_locale_typelib_day_names_de_DE, &my_locale_typelib_ab_day_names_de_DE }; +{ + 72, + "de_CH", + "German - Switzerland", + FALSE, + &my_locale_typelib_month_names_de_DE, + &my_locale_typelib_ab_month_names_de_DE, + &my_locale_typelib_day_names_de_DE, + &my_locale_typelib_ab_day_names_de_DE +}; /***** LOCALE END de_CH *****/ /***** LOCALE BEGIN de_LU: German - Luxembourg *****/ MY_LOCALE my_locale_de_LU= - { "de_LU", "German - Luxembourg", FALSE, &my_locale_typelib_month_names_de_DE, &my_locale_typelib_ab_month_names_de_DE, &my_locale_typelib_day_names_de_DE, &my_locale_typelib_ab_day_names_de_DE }; +{ + 73, + "de_LU", + "German - Luxembourg", + FALSE, + &my_locale_typelib_month_names_de_DE, + &my_locale_typelib_ab_month_names_de_DE, + &my_locale_typelib_day_names_de_DE, + &my_locale_typelib_ab_day_names_de_DE +}; /***** LOCALE END de_LU *****/ /***** LOCALE BEGIN en_AU: English - Australia *****/ MY_LOCALE my_locale_en_AU= - { "en_AU", "English - Australia", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 74, + "en_AU", + "English - Australia", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_AU *****/ /***** LOCALE BEGIN en_CA: English - Canada *****/ MY_LOCALE my_locale_en_CA= - { "en_CA", "English - Canada", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 75, + "en_CA", + "English - Canada", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_CA *****/ /***** LOCALE BEGIN en_GB: English - United Kingdom *****/ MY_LOCALE my_locale_en_GB= - { "en_GB", "English - United Kingdom", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 1, + "en_GB", + "English - United Kingdom", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_GB *****/ /***** LOCALE BEGIN en_IN: English - India *****/ MY_LOCALE my_locale_en_IN= - { "en_IN", "English - India", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 76, + "en_IN", + "English - India", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_IN *****/ /***** LOCALE BEGIN en_NZ: English - New Zealand *****/ MY_LOCALE my_locale_en_NZ= - { "en_NZ", "English - New Zealand", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 77, + "en_NZ", + "English - New Zealand", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_NZ *****/ /***** LOCALE BEGIN en_PH: English - Philippines *****/ MY_LOCALE my_locale_en_PH= - { "en_PH", "English - Philippines", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 78, + "en_PH", + "English - Philippines", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_PH *****/ /***** LOCALE BEGIN en_ZA: English - South Africa *****/ MY_LOCALE my_locale_en_ZA= - { "en_ZA", "English - South Africa", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 79, + "en_ZA", + "English - South Africa", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_ZA *****/ /***** LOCALE BEGIN en_ZW: English - Zimbabwe *****/ MY_LOCALE my_locale_en_ZW= - { "en_ZW", "English - Zimbabwe", TRUE, &my_locale_typelib_month_names_en_US, &my_locale_typelib_ab_month_names_en_US, &my_locale_typelib_day_names_en_US, &my_locale_typelib_ab_day_names_en_US }; +{ + 80, + "en_ZW", + "English - Zimbabwe", + TRUE, + &my_locale_typelib_month_names_en_US, + &my_locale_typelib_ab_month_names_en_US, + &my_locale_typelib_day_names_en_US, + &my_locale_typelib_ab_day_names_en_US +}; /***** LOCALE END en_ZW *****/ /***** LOCALE BEGIN es_AR: Spanish - Argentina *****/ MY_LOCALE my_locale_es_AR= - { "es_AR", "Spanish - Argentina", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 81, + "es_AR", + "Spanish - Argentina", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_AR *****/ /***** LOCALE BEGIN es_BO: Spanish - Bolivia *****/ MY_LOCALE my_locale_es_BO= - { "es_BO", "Spanish - Bolivia", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 82, + "es_BO", + "Spanish - Bolivia", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_BO *****/ /***** LOCALE BEGIN es_CL: Spanish - Chile *****/ MY_LOCALE my_locale_es_CL= - { "es_CL", "Spanish - Chile", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 83, + "es_CL", + "Spanish - Chile", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_CL *****/ /***** LOCALE BEGIN es_CO: Spanish - Columbia *****/ MY_LOCALE my_locale_es_CO= - { "es_CO", "Spanish - Columbia", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 84, + "es_CO", + "Spanish - Columbia", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_CO *****/ /***** LOCALE BEGIN es_CR: Spanish - Costa Rica *****/ MY_LOCALE my_locale_es_CR= - { "es_CR", "Spanish - Costa Rica", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 85, + "es_CR", + "Spanish - Costa Rica", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_CR *****/ /***** LOCALE BEGIN es_DO: Spanish - Dominican Republic *****/ MY_LOCALE my_locale_es_DO= - { "es_DO", "Spanish - Dominican Republic", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 86, + "es_DO", + "Spanish - Dominican Republic", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_DO *****/ /***** LOCALE BEGIN es_EC: Spanish - Ecuador *****/ MY_LOCALE my_locale_es_EC= - { "es_EC", "Spanish - Ecuador", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 87, + "es_EC", + "Spanish - Ecuador", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_EC *****/ /***** LOCALE BEGIN es_GT: Spanish - Guatemala *****/ MY_LOCALE my_locale_es_GT= - { "es_GT", "Spanish - Guatemala", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 88, + "es_GT", + "Spanish - Guatemala", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_GT *****/ /***** LOCALE BEGIN es_HN: Spanish - Honduras *****/ MY_LOCALE my_locale_es_HN= - { "es_HN", "Spanish - Honduras", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 89, + "es_HN", + "Spanish - Honduras", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_HN *****/ /***** LOCALE BEGIN es_MX: Spanish - Mexico *****/ MY_LOCALE my_locale_es_MX= - { "es_MX", "Spanish - Mexico", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 90, + "es_MX", + "Spanish - Mexico", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_MX *****/ /***** LOCALE BEGIN es_NI: Spanish - Nicaragua *****/ MY_LOCALE my_locale_es_NI= - { "es_NI", "Spanish - Nicaragua", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 91, + "es_NI", + "Spanish - Nicaragua", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_NI *****/ /***** LOCALE BEGIN es_PA: Spanish - Panama *****/ MY_LOCALE my_locale_es_PA= - { "es_PA", "Spanish - Panama", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 92, + "es_PA", + "Spanish - Panama", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_PA *****/ /***** LOCALE BEGIN es_PE: Spanish - Peru *****/ MY_LOCALE my_locale_es_PE= - { "es_PE", "Spanish - Peru", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 93, + "es_PE", + "Spanish - Peru", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_PE *****/ /***** LOCALE BEGIN es_PR: Spanish - Puerto Rico *****/ MY_LOCALE my_locale_es_PR= - { "es_PR", "Spanish - Puerto Rico", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 94, + "es_PR", + "Spanish - Puerto Rico", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_PR *****/ /***** LOCALE BEGIN es_PY: Spanish - Paraguay *****/ MY_LOCALE my_locale_es_PY= - { "es_PY", "Spanish - Paraguay", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 95, + "es_PY", + "Spanish - Paraguay", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_PY *****/ /***** LOCALE BEGIN es_SV: Spanish - El Salvador *****/ MY_LOCALE my_locale_es_SV= - { "es_SV", "Spanish - El Salvador", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 96, + "es_SV", + "Spanish - El Salvador", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_SV *****/ /***** LOCALE BEGIN es_US: Spanish - United States *****/ MY_LOCALE my_locale_es_US= - { "es_US", "Spanish - United States", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 97, + "es_US", + "Spanish - United States", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_US *****/ /***** LOCALE BEGIN es_UY: Spanish - Uruguay *****/ MY_LOCALE my_locale_es_UY= - { "es_UY", "Spanish - Uruguay", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 98, + "es_UY", + "Spanish - Uruguay", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_UY *****/ /***** LOCALE BEGIN es_VE: Spanish - Venezuela *****/ MY_LOCALE my_locale_es_VE= - { "es_VE", "Spanish - Venezuela", FALSE, &my_locale_typelib_month_names_es_ES, &my_locale_typelib_ab_month_names_es_ES, &my_locale_typelib_day_names_es_ES, &my_locale_typelib_ab_day_names_es_ES }; +{ + 99, + "es_VE", + "Spanish - Venezuela", + FALSE, + &my_locale_typelib_month_names_es_ES, + &my_locale_typelib_ab_month_names_es_ES, + &my_locale_typelib_day_names_es_ES, + &my_locale_typelib_ab_day_names_es_ES +}; /***** LOCALE END es_VE *****/ /***** LOCALE BEGIN fr_BE: French - Belgium *****/ MY_LOCALE my_locale_fr_BE= - { "fr_BE", "French - Belgium", FALSE, &my_locale_typelib_month_names_fr_FR, &my_locale_typelib_ab_month_names_fr_FR, &my_locale_typelib_day_names_fr_FR, &my_locale_typelib_ab_day_names_fr_FR }; +{ + 100, + "fr_BE", + "French - Belgium", + FALSE, + &my_locale_typelib_month_names_fr_FR, + &my_locale_typelib_ab_month_names_fr_FR, + &my_locale_typelib_day_names_fr_FR, + &my_locale_typelib_ab_day_names_fr_FR +}; /***** LOCALE END fr_BE *****/ /***** LOCALE BEGIN fr_CA: French - Canada *****/ MY_LOCALE my_locale_fr_CA= - { "fr_CA", "French - Canada", FALSE, &my_locale_typelib_month_names_fr_FR, &my_locale_typelib_ab_month_names_fr_FR, &my_locale_typelib_day_names_fr_FR, &my_locale_typelib_ab_day_names_fr_FR }; +{ + 101, + "fr_CA", + "French - Canada", + FALSE, + &my_locale_typelib_month_names_fr_FR, + &my_locale_typelib_ab_month_names_fr_FR, + &my_locale_typelib_day_names_fr_FR, + &my_locale_typelib_ab_day_names_fr_FR +}; /***** LOCALE END fr_CA *****/ /***** LOCALE BEGIN fr_CH: French - Switzerland *****/ MY_LOCALE my_locale_fr_CH= - { "fr_CH", "French - Switzerland", FALSE, &my_locale_typelib_month_names_fr_FR, &my_locale_typelib_ab_month_names_fr_FR, &my_locale_typelib_day_names_fr_FR, &my_locale_typelib_ab_day_names_fr_FR }; +{ + 102, + "fr_CH", + "French - Switzerland", + FALSE, + &my_locale_typelib_month_names_fr_FR, + &my_locale_typelib_ab_month_names_fr_FR, + &my_locale_typelib_day_names_fr_FR, + &my_locale_typelib_ab_day_names_fr_FR +}; /***** LOCALE END fr_CH *****/ /***** LOCALE BEGIN fr_LU: French - Luxembourg *****/ MY_LOCALE my_locale_fr_LU= - { "fr_LU", "French - Luxembourg", FALSE, &my_locale_typelib_month_names_fr_FR, &my_locale_typelib_ab_month_names_fr_FR, &my_locale_typelib_day_names_fr_FR, &my_locale_typelib_ab_day_names_fr_FR }; +{ + 103, + "fr_LU", + "French - Luxembourg", + FALSE, + &my_locale_typelib_month_names_fr_FR, + &my_locale_typelib_ab_month_names_fr_FR, + &my_locale_typelib_day_names_fr_FR, + &my_locale_typelib_ab_day_names_fr_FR +}; /***** LOCALE END fr_LU *****/ /***** LOCALE BEGIN it_IT: Italian - Italy *****/ MY_LOCALE my_locale_it_IT= - { "it_IT", "Italian - Italy", FALSE, &my_locale_typelib_month_names_it_CH, &my_locale_typelib_ab_month_names_it_CH, &my_locale_typelib_day_names_it_CH, &my_locale_typelib_ab_day_names_it_CH }; +{ + 104, + "it_IT", + "Italian - Italy", + FALSE, + &my_locale_typelib_month_names_it_CH, + &my_locale_typelib_ab_month_names_it_CH, + &my_locale_typelib_day_names_it_CH, + &my_locale_typelib_ab_day_names_it_CH +}; /***** LOCALE END it_IT *****/ /***** LOCALE BEGIN nl_BE: Dutch - Belgium *****/ MY_LOCALE my_locale_nl_BE= - { "nl_BE", "Dutch - Belgium", TRUE, &my_locale_typelib_month_names_nl_NL, &my_locale_typelib_ab_month_names_nl_NL, &my_locale_typelib_day_names_nl_NL, &my_locale_typelib_ab_day_names_nl_NL }; +{ + 105, + "nl_BE", + "Dutch - Belgium", + TRUE, + &my_locale_typelib_month_names_nl_NL, + &my_locale_typelib_ab_month_names_nl_NL, + &my_locale_typelib_day_names_nl_NL, + &my_locale_typelib_ab_day_names_nl_NL +}; /***** LOCALE END nl_BE *****/ /***** LOCALE BEGIN no_NO: Norwegian - Norway *****/ MY_LOCALE my_locale_no_NO= - { "no_NO", "Norwegian - Norway", FALSE, &my_locale_typelib_month_names_nb_NO, &my_locale_typelib_ab_month_names_nb_NO, &my_locale_typelib_day_names_nb_NO, &my_locale_typelib_ab_day_names_nb_NO }; +{ + 106, + "no_NO", + "Norwegian - Norway", + FALSE, + &my_locale_typelib_month_names_nb_NO, + &my_locale_typelib_ab_month_names_nb_NO, + &my_locale_typelib_day_names_nb_NO, + &my_locale_typelib_ab_day_names_nb_NO +}; /***** LOCALE END no_NO *****/ /***** LOCALE BEGIN sv_FI: Swedish - Finland *****/ MY_LOCALE my_locale_sv_FI= - { "sv_FI", "Swedish - Finland", FALSE, &my_locale_typelib_month_names_sv_SE, &my_locale_typelib_ab_month_names_sv_SE, &my_locale_typelib_day_names_sv_SE, &my_locale_typelib_ab_day_names_sv_SE }; +{ + 107, + "sv_FI", + "Swedish - Finland", + FALSE, + &my_locale_typelib_month_names_sv_SE, + &my_locale_typelib_ab_month_names_sv_SE, + &my_locale_typelib_day_names_sv_SE, + &my_locale_typelib_ab_day_names_sv_SE +}; /***** LOCALE END sv_FI *****/ /***** LOCALE BEGIN zh_HK: Chinese - Hong Kong SAR *****/ MY_LOCALE my_locale_zh_HK= - { "zh_HK", "Chinese - Hong Kong SAR", FALSE, &my_locale_typelib_month_names_zh_CN, &my_locale_typelib_ab_month_names_zh_CN, &my_locale_typelib_day_names_zh_CN, &my_locale_typelib_ab_day_names_zh_CN }; +{ + 108, + "zh_HK", + "Chinese - Hong Kong SAR", + FALSE, + &my_locale_typelib_month_names_zh_CN, + &my_locale_typelib_ab_month_names_zh_CN, + &my_locale_typelib_day_names_zh_CN, + &my_locale_typelib_ab_day_names_zh_CN +}; /***** LOCALE END zh_HK *****/ + +/* + The list of all locales. + Note, locales must be ordered according to their + numbers to make my_locale_by_number() work fast. + Some debug asserts below check this. +*/ MY_LOCALE *my_locales[]= { &my_locale_en_US, @@ -1605,3 +2582,31 @@ MY_LOCALE *my_locales[]= &my_locale_zh_HK, NULL }; + + +MY_LOCALE *my_locale_by_number(uint number) +{ + MY_LOCALE *locale; + if (number >= array_elements(my_locales) - 1) + return NULL; + locale= my_locales[number]; + // Check that locale is on its correct position in the array + DBUG_ASSERT(locale == my_locales[locale->number]); + return locale; +} + + +MY_LOCALE *my_locale_by_name(const char *name) +{ + MY_LOCALE **locale; + for (locale= my_locales; *locale != NULL; locale++) + { + if (!my_strcasecmp(&my_charset_latin1, (*locale)->name, name)) + { + // Check that locale is on its correct position in the array + DBUG_ASSERT((*locale) == my_locales[(*locale)->number]); + return *locale; + } + } + return NULL; +} diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 19add72c23e..659926bdea3 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -867,7 +867,7 @@ static int check_connection(THD *thd) return(ER_HANDSHAKE_ERROR); } DBUG_PRINT("info", ("IO layer change in progress...")); - if (sslaccept(ssl_acceptor_fd, net->vio, thd->variables.net_wait_timeout)) + if (sslaccept(ssl_acceptor_fd, net->vio, net->read_timeout)) { DBUG_PRINT("error", ("Failed to read user information (pkt_len= %lu)", pkt_len)); @@ -897,7 +897,6 @@ static int check_connection(THD *thd) if ((thd->client_capabilities & CLIENT_TRANSACTIONS) && opt_using_transactions) net->return_status= &thd->server_status; - net->read_timeout=(uint) thd->variables.net_read_timeout; char *user= end; char *passwd= strend(user)+1; @@ -1029,6 +1028,10 @@ pthread_handler_decl(handle_one_connection,arg) NET *net= &thd->net; thd->thread_stack= (char*) &thd; + /* Use "connect_timeout" value during connection phase */ + net_set_read_timeout(net, connect_timeout); + net_set_write_timeout(net, connect_timeout); + if ((error=check_connection(thd))) { // Wrong permissions if (error > 0) @@ -1058,6 +1061,11 @@ pthread_handler_decl(handle_one_connection,arg) if (thd->query_error) thd->killed= 1; } + + /* Connect completed, set read/write timeouts back to tdefault */ + net_set_read_timeout(net, thd->variables.net_read_timeout); + net_set_write_timeout(net, thd->variables.net_write_timeout); + while (!net->error && net->vio != 0 && !thd->killed) { if (do_command(thd)) @@ -1175,6 +1183,7 @@ extern "C" pthread_handler_decl(handle_bootstrap,arg) free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC)); break; } + thd->set_time(); mysql_parse(thd,thd->query,length); close_thread_tables(thd); // Free tables if (thd->is_fatal_error) @@ -1261,7 +1270,7 @@ err: #ifndef EMBEDDED_LIBRARY /* - Read one command from socket and execute it (query or simple command). + Read one command from connection and execute it (query or simple command). This function is called in loop from thread function. SYNOPSIS do_command() @@ -1272,24 +1281,26 @@ err: bool do_command(THD *thd) { - char *packet; - uint old_timeout; + char *packet= 0; ulong packet_length; - NET *net; + NET *net= &thd->net; enum enum_server_command command; DBUG_ENTER("do_command"); - net= &thd->net; /* indicator of uninitialized lex => normal flow of errors handling (see my_message_sql) */ thd->lex->current_select= 0; - packet=0; - old_timeout=net->read_timeout; - // Wait max for 8 hours - net->read_timeout=(uint) thd->variables.net_wait_timeout; + /* + This thread will do a blocking read from the client which + will be interrupted when the next command is received from + the client, the connection is closed or "net_wait_timeout" + number of seconds has passed + */ + net_set_read_timeout(net, thd->variables.net_wait_timeout); + thd->clear_error(); // Clear error message net_new_transaction(net); @@ -1318,7 +1329,10 @@ bool do_command(THD *thd) vio_description(net->vio), command, command_name[command])); } - net->read_timeout=old_timeout; // restore it + + /* Restore read timeout value */ + net_set_read_timeout(net, thd->variables.net_read_timeout); + /* packet_length contains length of data, as it was stored in packet header. In case of malformed header, packet_length can be zero. @@ -1958,6 +1972,7 @@ static void reset_one_shot_variables(THD *thd) thd->update_charset(); thd->variables.time_zone= global_system_variables.time_zone; + thd->variables.lc_time_names= &my_locale_en_US; thd->one_shot_set= 0; } @@ -2478,19 +2493,42 @@ mysql_execute_command(THD *thd) } /* Skip first table, which is the table we are creating */ TABLE_LIST *create_table, *create_table_local; + /* + Code below (especially in mysql_create_table() and select_create + methods) may modify HA_CREATE_INFO structure in LEX, so we have to + use a copy of this structure to make execution prepared statement- + safe. A shallow copy is enough as this code won't modify any memory + referenced from this structure. + */ + HA_CREATE_INFO create_info(lex->create_info); + Alter_info alter_info(lex->alter_info, thd->mem_root); + + if (thd->is_fatal_error) + { + /* out of memory when creating a copy of alter_info */ + res= 1; + goto unsent_create_error; + } tables= lex->unlink_first_table(tables, &create_table, &create_table_local); if ((res= create_table_precheck(thd, tables, create_table))) goto unsent_create_error; + create_info.alias= create_table->alias; #ifndef HAVE_READLINK - lex->create_info.data_file_name=lex->create_info.index_file_name=0; + if (create_info.data_file_name) + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0, + "DATA DIRECTORY option ignored"); + if (create_info.index_file_name) + push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0, + "INDEX DIRECTORY option ignored"); + create_info.data_file_name= create_info.index_file_name= NULL; #else /* Fix names if symlinked tables */ - if (append_file_to_dir(thd, &lex->create_info.data_file_name, + if (append_file_to_dir(thd, &create_info.data_file_name, create_table->real_name) || - append_file_to_dir(thd,&lex->create_info.index_file_name, + append_file_to_dir(thd, &create_info.index_file_name, create_table->real_name)) { res=-1; @@ -2501,14 +2539,14 @@ mysql_execute_command(THD *thd) If we are using SET CHARSET without DEFAULT, add an implicite DEFAULT to not confuse old users. (This may change). */ - if ((lex->create_info.used_fields & + if ((create_info.used_fields & (HA_CREATE_USED_DEFAULT_CHARSET | HA_CREATE_USED_CHARSET)) == HA_CREATE_USED_CHARSET) { - lex->create_info.used_fields&= ~HA_CREATE_USED_CHARSET; - lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET; - lex->create_info.default_table_charset= lex->create_info.table_charset; - lex->create_info.table_charset= 0; + create_info.used_fields&= ~HA_CREATE_USED_CHARSET; + create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET; + create_info.default_table_charset= create_info.table_charset; + create_info.table_charset= 0; } /* The create-select command will open and read-lock the select table @@ -2542,11 +2580,14 @@ mysql_execute_command(THD *thd) if (!(res=open_and_lock_tables(thd,tables))) { res= -1; // If error + /* + select_create is currently not re-execution friendly and + needs to be created for every execution of a PS/SP. + */ if ((result=new select_create(create_table->db, create_table->real_name, - &lex->create_info, - lex->create_list, - lex->key_list, + &create_info, + &alter_info, select_lex->item_list, lex->duplicates, lex->ignore))) { @@ -2558,22 +2599,18 @@ mysql_execute_command(THD *thd) res=handle_select(thd, lex, result); select_lex->resolve_mode= SELECT_LEX::NOMATTER_MODE; } - //reset for PS - lex->create_list.empty(); - lex->key_list.empty(); } } else // regular create { if (lex->name) - res= mysql_create_like_table(thd, create_table, &lex->create_info, + res= mysql_create_like_table(thd, create_table, &create_info, (Table_ident *)lex->name); else { - res= mysql_create_table(thd,create_table->db, - create_table->real_name, &lex->create_info, - lex->create_list, - lex->key_list,0,0); + res= mysql_create_table(thd, create_table->db, + create_table->real_name, &create_info, + &alter_info, 0, 0); } if (!res) send_ok(thd); @@ -2591,15 +2628,49 @@ unsent_create_error: break; } case SQLCOM_CREATE_INDEX: + /* Fall through */ + case SQLCOM_DROP_INDEX: + /* + CREATE INDEX and DROP INDEX are implemented by calling ALTER + TABLE with proper arguments. This isn't very fast but it + should work for most cases. + + In the future ALTER TABLE will notice that only added + indexes and create these one by one for the existing table + without having to do a full rebuild. + + One should normally create all indexes with CREATE TABLE or + ALTER TABLE. + */ + { + Alter_info alter_info(lex->alter_info, thd->mem_root); + HA_CREATE_INFO create_info; + + if (thd->is_fatal_error) /* out of memory creating a copy of alter_info*/ + goto error; + if (check_one_table_access(thd, INDEX_ACL, tables)) goto error; /* purecov: inspected */ thd->enable_slow_log= opt_log_slow_admin_statements; if (end_active_trans(thd)) - res= -1; - else - res = mysql_create_index(thd, tables, lex->key_list); - break; + goto error; + /* + Currently CREATE INDEX or DROP INDEX cause a full table rebuild + and thus classify as slow administrative statements just like + ALTER TABLE. + */ + thd->enable_slow_log= opt_log_slow_admin_statements; + bzero((char*) &create_info, sizeof(create_info)); + create_info.db_type= DB_TYPE_DEFAULT; + create_info.row_type= ROW_TYPE_NOT_USED; + create_info.default_table_charset= thd->variables.collation_database; + + res= mysql_alter_table(thd, tables->db, tables->real_name, + &create_info, tables, &alter_info, + 0, (ORDER*)0, DUP_ERROR, 0); + break; + } #ifdef HAVE_REPLICATION case SQLCOM_SLAVE_START: { @@ -2642,6 +2713,17 @@ unsent_create_error: #else { ulong priv=0; + /* + Code in mysql_alter_table() may modify its HA_CREATE_INFO argument, + so we have to use a copy of this structure to make execution + prepared statement- safe. A shallow copy is enough as no memory + referenced from this structure will be modified. + */ + HA_CREATE_INFO create_info(lex->create_info); + Alter_info alter_info(lex->alter_info, thd->mem_root); + + if (thd->is_fatal_error) /* out of memory creating a copy of alter_info */ + goto error; if (lex->name && (!lex->name[0] || strlen(lex->name) > NAME_LEN)) { net_printf(thd, ER_WRONG_TABLE_NAME, lex->name); @@ -2655,7 +2737,7 @@ unsent_create_error: default database if the new name is not explicitly qualified by a database. (Bug #11493) */ - if (lex->alter_info.flags & ALTER_RENAME) + if (alter_info.flags & ALTER_RENAME) { if (! thd->db) { @@ -2671,7 +2753,7 @@ unsent_create_error: check_access(thd,INSERT_ACL | CREATE_ACL,select_lex->db,&priv,0,0)|| check_merge_table_access(thd, tables->db, (TABLE_LIST *) - lex->create_info.merge_list.first)) + create_info.merge_list.first)) goto error; /* purecov: inspected */ if (grant_option) { @@ -2690,26 +2772,26 @@ unsent_create_error: } } /* Don't yet allow changing of symlinks with ALTER TABLE */ - if (lex->create_info.data_file_name) + if (create_info.data_file_name) push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0, "DATA DIRECTORY option ignored"); - if (lex->create_info.index_file_name) + if (create_info.index_file_name) push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0, "INDEX DIRECTORY option ignored"); - lex->create_info.data_file_name=lex->create_info.index_file_name=0; + create_info.data_file_name= create_info.index_file_name= NULL; /* ALTER TABLE ends previous transaction */ if (end_active_trans(thd)) res= -1; else { thd->enable_slow_log= opt_log_slow_admin_statements; - res= mysql_alter_table(thd, select_lex->db, lex->name, - &lex->create_info, - tables, lex->create_list, - lex->key_list, - select_lex->order_list.elements, + res= mysql_alter_table(thd, select_lex->db, lex->name, + &create_info, + tables, + &alter_info, + select_lex->order_list.elements, (ORDER *) select_lex->order_list.first, - lex->duplicates, lex->ignore, &lex->alter_info); + lex->duplicates, lex->ignore); } break; } @@ -2736,7 +2818,7 @@ unsent_create_error: old_list=table[0]; new_list=table->next[0]; old_list.next=new_list.next=0; - if (check_grant(thd, ALTER_ACL, &old_list, 0, UINT_MAX, 0) || + if (check_grant(thd, ALTER_ACL | DROP_ACL, &old_list, 0, UINT_MAX, 0) || (!test_all_bits(table->next->grant.privilege, INSERT_ACL | CREATE_ACL) && check_grant(thd, INSERT_ACL | CREATE_ACL, &new_list, 0, @@ -2846,7 +2928,7 @@ unsent_create_error: goto error; /* purecov: inspected */ thd->enable_slow_log= opt_log_slow_admin_statements; res= (specialflag & (SPECIAL_SAFE_MODE | SPECIAL_NO_NEW_FUNC)) ? - mysql_recreate_table(thd, tables, 1) : + mysql_recreate_table(thd, tables) : mysql_optimize_table(thd, tables, &lex->check_opt); /* ! we write after unlocking the table */ if (!res && !lex->no_write_to_binlog) @@ -3123,14 +3205,6 @@ unsent_create_error: res= mysql_rm_table(thd,tables,lex->drop_if_exists, lex->drop_temporary); } break; - case SQLCOM_DROP_INDEX: - if (check_one_table_access(thd, INDEX_ACL, tables)) - goto error; /* purecov: inspected */ - if (end_active_trans(thd)) - res= -1; - else - res = mysql_drop_index(thd, tables, &lex->alter_info); - break; case SQLCOM_SHOW_DATABASES: #if defined(DONT_ALLOW_SHOW_COMMANDS) send_error(thd,ER_NOT_ALLOWED_COMMAND); /* purecov: inspected */ @@ -3363,6 +3437,12 @@ purposes internal to the MySQL server", MYF(0)); break; case SQLCOM_CREATE_DB: { + /* + As mysql_create_db() may modify HA_CREATE_INFO structure passed to + it, we need to use a copy of LEX::create_info to make execution + prepared statement- safe. + */ + HA_CREATE_INFO create_info(lex->create_info); if (end_active_trans(thd)) { res= -1; @@ -3393,7 +3473,7 @@ purposes internal to the MySQL server", MYF(0)); if (check_access(thd,CREATE_ACL,lex->name,0,1,0)) break; res= mysql_create_db(thd,(lower_case_table_names == 2 ? alias : lex->name), - &lex->create_info, 0); + &create_info, 0); break; } case SQLCOM_DROP_DB: @@ -4443,15 +4523,17 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type, if (type_modifier & PRI_KEY_FLAG) { lex->col_list.push_back(new key_part_spec(field_name,0)); - lex->key_list.push_back(new Key(Key::PRIMARY, NullS, HA_KEY_ALG_UNDEF, - 0, lex->col_list)); + lex->alter_info.key_list.push_back(new Key(Key::PRIMARY, NullS, + HA_KEY_ALG_UNDEF, 0, + lex->col_list)); lex->col_list.empty(); } if (type_modifier & (UNIQUE_FLAG | UNIQUE_KEY_FLAG)) { lex->col_list.push_back(new key_part_spec(field_name,0)); - lex->key_list.push_back(new Key(Key::UNIQUE, NullS, HA_KEY_ALG_UNDEF, 0, - lex->col_list)); + lex->alter_info.key_list.push_back(new Key(Key::UNIQUE, NullS, + HA_KEY_ALG_UNDEF, 0, + lex->col_list)); lex->col_list.empty(); } @@ -4571,8 +4653,14 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type, new_field->length++; } break; - case FIELD_TYPE_STRING: case FIELD_TYPE_VAR_STRING: + if (new_field->length < 4) + { + new_field->sql_type= FIELD_TYPE_STRING; + break; + } + /* fall through */ + case FIELD_TYPE_STRING: if (new_field->length <= MAX_FIELD_CHARLENGTH || default_value) break; /* Convert long CHAR() and VARCHAR columns to TEXT or BLOB */ @@ -4778,7 +4866,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type, new_field->sql_type, new_field->length); new_field->char_length= new_field->length; - lex->create_list.push_back(new_field); + lex->alter_info.create_list.push_back(new_field); lex->last_field=new_field; DBUG_RETURN(0); } @@ -5459,57 +5547,6 @@ Item * all_any_subquery_creator(Item *left_expr, /* - CREATE INDEX and DROP INDEX are implemented by calling ALTER TABLE with - the proper arguments. This isn't very fast but it should work for most - cases. - - In the future ALTER TABLE will notice that only added indexes - and create these one by one for the existing table without having to do - a full rebuild. - - One should normally create all indexes with CREATE TABLE or ALTER TABLE. -*/ - -int mysql_create_index(THD *thd, TABLE_LIST *table_list, List<Key> &keys) -{ - List<create_field> fields; - ALTER_INFO alter_info; - alter_info.flags= ALTER_ADD_INDEX; - alter_info.is_simple= 0; - HA_CREATE_INFO create_info; - DBUG_ENTER("mysql_create_index"); - bzero((char*) &create_info,sizeof(create_info)); - create_info.db_type=DB_TYPE_DEFAULT; - create_info.default_table_charset= thd->variables.collation_database; - create_info.row_type= ROW_TYPE_NOT_USED; - DBUG_RETURN(mysql_alter_table(thd,table_list->db,table_list->real_name, - &create_info, table_list, - fields, keys, 0, (ORDER*)0, - DUP_ERROR, 0, &alter_info)); -} - - -int mysql_drop_index(THD *thd, TABLE_LIST *table_list, ALTER_INFO *alter_info) -{ - List<create_field> fields; - List<Key> keys; - HA_CREATE_INFO create_info; - DBUG_ENTER("mysql_drop_index"); - bzero((char*) &create_info,sizeof(create_info)); - create_info.db_type=DB_TYPE_DEFAULT; - create_info.default_table_charset= thd->variables.collation_database; - create_info.row_type= ROW_TYPE_NOT_USED; - alter_info->clear(); - alter_info->flags= ALTER_DROP_INDEX; - alter_info->is_simple= 0; - DBUG_RETURN(mysql_alter_table(thd,table_list->db,table_list->real_name, - &create_info, table_list, - fields, keys, 0, (ORDER*)0, - DUP_ERROR, 0, alter_info)); -} - - -/* Multi update query pre-check SYNOPSIS @@ -5791,7 +5828,6 @@ int create_table_precheck(THD *thd, TABLE_LIST *tables, want_priv= ((lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) ? CREATE_TMP_ACL : CREATE_ACL); - lex->create_info.alias= create_table->alias; if (check_access(thd, want_priv, create_table->db, &create_table->grant.privilege, 0, 0) || check_merge_table_access(thd, create_table->db, diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 2688841d96c..b5aed0bbc4e 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1063,7 +1063,6 @@ static int mysql_test_select(Prepared_statement *stmt, int result= 1; DBUG_ENTER("mysql_test_select"); -#ifndef NO_EMBEDDED_ACCESS_CHECKS ulong privilege= lex->exchange ? SELECT_ACL | FILE_ACL : SELECT_ACL; if (tables) { @@ -1072,7 +1071,6 @@ static int mysql_test_select(Prepared_statement *stmt, } else if (check_access(thd, privilege, any_db,0,0,0)) DBUG_RETURN(1); -#endif if (!lex->result && !(lex->result= new (stmt->mem_root) select_send)) { @@ -1783,8 +1781,9 @@ static void reset_stmt_params(Prepared_statement *stmt) packet_length Query string length, including terminator character. */ -void mysql_stmt_execute(THD *thd, char *packet, uint packet_length) +void mysql_stmt_execute(THD *thd, char *packet_arg, uint packet_length) { + uchar *packet= (uchar*)packet_arg; // GCC 4.0.1 workaround ulong stmt_id= uint4korr(packet); /* Query text for binary log, or empty string if the query is not put into @@ -1792,7 +1791,7 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length) */ String expanded_query; #ifndef EMBEDDED_LIBRARY - uchar *packet_end= (uchar *) packet + packet_length - 1; + uchar *packet_end= packet + packet_length - 1; #endif Prepared_statement *stmt; DBUG_ENTER("mysql_stmt_execute"); @@ -1818,9 +1817,9 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length) #ifndef EMBEDDED_LIBRARY if (stmt->param_count) { - uchar *null_array= (uchar *) packet; - if (setup_conversion_functions(stmt, (uchar **) &packet, packet_end) || - stmt->set_params(stmt, null_array, (uchar *) packet, packet_end, + uchar *null_array= packet; + if (setup_conversion_functions(stmt, &packet, packet_end) || + stmt->set_params(stmt, null_array, packet, packet_end, &expanded_query)) goto set_params_data_err; } diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index a20f2a6506c..f83313a8fd8 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -89,8 +89,8 @@ static int send_file(THD *thd) The client might be slow loading the data, give him wait_timeout to do the job */ - old_timeout = thd->net.read_timeout; - thd->net.read_timeout = thd->variables.net_wait_timeout; + old_timeout= net->read_timeout; + net_set_read_timeout(net, thd->variables.net_wait_timeout); /* We need net_flush here because the client will not know it needs to send @@ -134,7 +134,7 @@ static int send_file(THD *thd) error = 0; err: - thd->net.read_timeout = old_timeout; + net_set_read_timeout(net, old_timeout); if (fd >= 0) (void) my_close(fd, MYF(0)); if (errmsg) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 0254e8f56dc..8b5664a7f96 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -265,6 +265,7 @@ JOIN::prepare(Item ***rref_pointer_array, select_lex->join= this; union_part= (unit_arg->first_select()->next_select() != 0); + thd->lex->current_select->is_item_list_lookup= 1; /* Check that all tables, fields, conds and order are ok */ if (setup_tables(tables_list) || @@ -531,23 +532,25 @@ JOIN::optimize() { int res; /* - opt_sum_query() returns -1 if no rows match to the WHERE conditions, - or 1 if all items were resolved, or 0, or an error number HA_ERR_... + opt_sum_query() returns HA_ERR_KEY_NOT_FOUND if no rows match + to the WHERE conditions, + or 1 if all items were resolved, + or 0, or an error number HA_ERR_... */ if ((res=opt_sum_query(tables_list, all_fields, conds))) { + if (res == HA_ERR_KEY_NOT_FOUND) + { + zero_result_cause= "No matching min/max row"; + error=0; + DBUG_RETURN(0); + } if (res > 1) { thd->fatal_error(); error= res; DBUG_RETURN(1); } - if (res < 0) - { - zero_result_cause= "No matching min/max row"; - error=0; - DBUG_RETURN(0); - } zero_result_cause= "Select tables optimized away"; tables_list= 0; // All tables resolved /* @@ -631,6 +634,12 @@ JOIN::optimize() DBUG_PRINT("error",("Error: make_select() failed")); DBUG_RETURN(1); } + if (conds &&!outer_join && const_table_map != found_const_table_map && + (select_options & SELECT_DESCRIBE) && + select_lex->master_unit() == &thd->lex->unit) // upper level SELECT + { + conds=new Item_int((longlong) 0,1); // Always false + } if (make_join_select(this, select, conds)) { zero_result_cause= @@ -644,6 +653,13 @@ JOIN::optimize() { ORDER *org_order= order; order=remove_const(this, order,conds,1, &simple_order); + if (thd->net.report_error) + { + error= 1; + DBUG_PRINT("error",("Error from remove_const")); + DBUG_RETURN(1); + } + /* If we are using ORDER BY NULL or ORDER BY const_expression, return result in any order (even if we are using a GROUP BY) @@ -747,6 +763,12 @@ JOIN::optimize() group_list= remove_const(this, (old_group_list= group_list), conds, rollup.state == ROLLUP::STATE_NONE, &simple_group); + if (thd->net.report_error) + { + error= 1; + DBUG_PRINT("error",("Error from remove_const")); + DBUG_RETURN(1); + } if (old_group_list && !group_list) select_distinct= 0; } @@ -763,6 +785,12 @@ JOIN::optimize() { group_list= procedure->group= remove_const(this, procedure->group, conds, 1, &simple_group); + if (thd->net.report_error) + { + error= 1; + DBUG_PRINT("error",("Error from remove_const")); + DBUG_RETURN(1); + } calc_group_buffer(this, group_list); } @@ -3917,14 +3945,17 @@ make_join_readinfo(JOIN *join, uint options) disable join cache because it will change the ordering of the results. Code handles sort table that is at any location (not only first after the const tables) despite the fact that it's currently prohibited. + We must disable join cache if the first non-const table alone is + ordered. If there is a temp table the ordering is done as a last + operation and doesn't prevent join cache usage. */ - if (!ordered_set && - (table == join->sort_by_table && + if (!ordered_set && !join->need_tmp && + ((table == join->sort_by_table && (!join->order || join->skip_sort_order || test_if_skip_sort_order(tab, join->order, join->select_limit, 1)) ) || - (join->sort_by_table == (TABLE *) 1 && i != join->const_tables)) + (join->sort_by_table == (TABLE *) 1 && i != join->const_tables))) ordered_set= 1; switch (tab->type) { @@ -4428,6 +4459,8 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond, *simple_order=0; // Must do a temp table to sort else if (!(order_tables & not_const_tables)) { + if (order->item[0]->with_subselect) + order->item[0]->val_str(&order->item[0]->str_value); DBUG_PRINT("info",("removing: %s", order->item[0]->full_name())); continue; // skip const item } @@ -5006,6 +5039,8 @@ static Field* create_tmp_field_from_field(THD *thd, Field* org_field, new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join if (org_field->type() == FIELD_TYPE_VAR_STRING) table->db_create_options|= HA_OPTION_PACK_RECORD; + else if (org_field->type() == FIELD_TYPE_DOUBLE) + ((Field_double *) new_field)->not_fixed= TRUE; } return new_field; } @@ -5045,7 +5080,7 @@ static Field* create_tmp_field_from_item(THD *thd, Item *item, TABLE *table, switch (item->result_type()) { case REAL_RESULT: new_field=new Field_double(item->max_length, maybe_null, - item->name, table, item->decimals); + item->name, table, item->decimals, TRUE); break; case INT_RESULT: new_field=new Field_longlong(item->max_length, maybe_null, @@ -5136,8 +5171,8 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, return new Field_string(sizeof(double)+sizeof(longlong), 0, item->name,table,&my_charset_bin); else - return new Field_double(item_sum->max_length,maybe_null, - item->name, table, item_sum->decimals); + return new Field_double(item_sum->max_length, maybe_null, + item->name, table, item_sum->decimals, TRUE); case Item_sum::VARIANCE_FUNC: /* Place for sum & count */ case Item_sum::STD_FUNC: if (group) @@ -5145,7 +5180,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, 0, item->name,table,&my_charset_bin); else return new Field_double(item_sum->max_length, maybe_null, - item->name,table,item_sum->decimals); + item->name, table, item_sum->decimals, TRUE); case Item_sum::UNIQUE_USERS_FUNC: return new Field_long(9,maybe_null,item->name,table,1); case Item_sum::MIN_FUNC: @@ -5160,8 +5195,8 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, default: switch (item_sum->result_type()) { case REAL_RESULT: - return new Field_double(item_sum->max_length,maybe_null, - item->name,table,item_sum->decimals); + return new Field_double(item_sum->max_length, maybe_null, + item->name, table, item_sum->decimals, TRUE); case INT_RESULT: return new Field_longlong(item_sum->max_length,maybe_null, item->name,table,item->unsigned_flag); @@ -8677,16 +8712,12 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, 'it' reassigned in if condition because fix_field can change it. */ - thd->lex->current_select->is_item_list_lookup= 1; if (!it->fixed && (it->fix_fields(thd, tables, order->item) || (it= *order->item)->check_cols(1) || thd->is_fatal_error)) - { - thd->lex->current_select->is_item_list_lookup= 0; return 1; // Wrong field - } - thd->lex->current_select->is_item_list_lookup= 0; + uint el= all_fields.elements; all_fields.push_front(it); // Add new field to field list ref_pointer_array[el]= it; @@ -9732,7 +9763,7 @@ bool JOIN::rollup_init() for (j=0 ; j < fields_list.elements ; j++) rollup.fields[i].push_back(rollup.null_items[i]); } - List_iterator_fast<Item> it(all_fields); + List_iterator<Item> it(all_fields); Item *item; while ((item= it++)) { @@ -9745,6 +9776,32 @@ bool JOIN::rollup_init() { item->maybe_null= 1; found_in_group= 1; + if (item->const_item()) + { + /* + For ROLLUP queries each constant item referenced in GROUP BY list + is wrapped up into an Item_func object yielding the same value + as the constant item. The objects of the wrapper class are never + considered as constant items and besides they inherit all + properties of the Item_result_field class. + This wrapping allows us to ensure writing constant items + into temporary tables whenever the result of the ROLLUP + operation has to be written into a temporary table, e.g. when + ROLLUP is used together with DISTINCT in the SELECT list. + Usually when creating temporary tables for a intermidiate + result we do not include fields for constant expressions. + */ + Item* new_item= new Item_func_rollup_const(item); + if (!new_item) + return 1; + new_item->fix_fields(thd,0, (Item **) 0); + thd->change_item_tree(it.ref(), new_item); + for (ORDER *tmp= group_tmp; tmp; tmp= tmp->next) + { + if (*tmp->item == item) + thd->change_item_tree(tmp->item, new_item); + } + } } } if (item->type() == Item::FUNC_ITEM && !found_in_group) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 41e145790e9..bf0e254d3e4 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -714,16 +714,7 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild, if (verbose) protocol->store(field->has_charset() ? field->charset()->name : "NULL", system_charset_info); - /* - Even if TIMESTAMP field can't contain NULL as its value it - will accept NULL if you will try to insert such value and will - convert NULL value to current TIMESTAMP. So YES here means - that NULL is allowed for assignment (but may be won't be - returned). - */ - pos=(byte*) ((flags & NOT_NULL_FLAG) && - field->type() != FIELD_TYPE_TIMESTAMP ? - "" : "YES"); + pos= (byte*) ((flags & NOT_NULL_FLAG) ? "" : "YES"); protocol->store((const char*) pos, system_charset_info); pos=(byte*) ((field->flags & PRI_KEY_FLAG) ? "PRI" : (field->flags & UNIQUE_KEY_FLAG) ? "UNI" : @@ -845,7 +836,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list) } int mysqld_show_create_db(THD *thd, char *dbname, - HA_CREATE_INFO *create_info) + const HA_CREATE_INFO *create_info) { int length; char path[FN_REFLEN]; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index f82dd627101..0316d6a3c10 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -456,8 +456,7 @@ void calculate_interval_lengths(CHARSET_INFO *cs, TYPELIB *interval, mysql_prepare_table() thd Thread object create_info Create information (like MAX_ROWS) - fields List of fields to create - keys List of keys to create + alter_info List of columns and indexes to create DESCRIPTION Prepares the table and key structures for table creation. @@ -468,8 +467,8 @@ void calculate_interval_lengths(CHARSET_INFO *cs, TYPELIB *interval, */ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, - List<create_field> &fields, - List<Key> &keys, bool tmp_table, uint &db_options, + Alter_info *alter_info, + bool tmp_table, uint &db_options, handler *file, KEY *&key_info_buffer, uint *key_count, int select_field_count) { @@ -482,10 +481,11 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, int timestamps= 0, timestamps_with_niladic= 0; int field_no,dup_no; int select_field_pos,auto_increment=0; + List_iterator<create_field> it(alter_info->create_list); + List_iterator<create_field> it2(alter_info->create_list); DBUG_ENTER("mysql_prepare_table"); - List_iterator<create_field> it(fields),it2(fields); - select_field_pos=fields.elements - select_field_count; + select_field_pos= alter_info->create_list.elements - select_field_count; null_fields=blob_columns=0; for (field_no=0; (sql_field=it++) ; field_no++) @@ -883,7 +883,8 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, /* Create keys */ - List_iterator<Key> key_iterator(keys), key_iterator2(keys); + List_iterator<Key> key_iterator(alter_info->key_list); + List_iterator<Key> key_iterator2(alter_info->key_list); uint key_parts=0, fk_key_count=0; bool primary_key=0,unique_key=0; Key *key, *key2; @@ -1333,23 +1334,27 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, SYNOPSIS mysql_create_table() - thd Thread object - db Database - table_name Table name - create_info Create information (like MAX_ROWS) - fields List of fields to create - keys List of keys to create - tmp_table Set to 1 if this is an internal temporary table - (From ALTER TABLE) + thd Thread object + db Database + table_name Table name + create_info [in/out] Create information (like MAX_ROWS) + alter_info [in/out] List of columns and indexes to create + tmp_table Set to 1 if this is an internal temporary table + (From ALTER TABLE) DESCRIPTION - If one creates a temporary table, this is automaticly opened + If one creates a temporary table, this is automatically opened no_log is needed for the case of CREATE ... SELECT, as the logging will be done later in sql_insert.cc select_field_count is also used for CREATE ... SELECT, and must be zero for standard create of table. + Note that structures passed as 'create_info' and 'alter_info' parameters + may be modified by this function. It is responsibility of the caller to + make a copy of create_info in order to provide correct execution in + prepared statements/stored routines. + RETURN VALUES 0 ok -1 error @@ -1357,8 +1362,8 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, int mysql_create_table(THD *thd,const char *db, const char *table_name, HA_CREATE_INFO *create_info, - List<create_field> &fields, - List<Key> &keys,bool tmp_table, + Alter_info *alter_info, + bool tmp_table, uint select_field_count) { char path[FN_REFLEN]; @@ -1371,7 +1376,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, DBUG_ENTER("mysql_create_table"); /* Check for duplicate fields and check type of table to create */ - if (!fields.elements) + if (!alter_info->create_list.elements) { my_error(ER_TABLE_MUST_HAVE_COLUMNS,MYF(0)); DBUG_RETURN(-1); @@ -1423,10 +1428,10 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, create_info->default_table_charset= db_info.default_table_charset; } - if (mysql_prepare_table(thd, create_info, fields, - keys, tmp_table, db_options, file, - key_info_buffer, &key_count, - select_field_count)) + if (mysql_prepare_table(thd, create_info, alter_info, tmp_table, + db_options, file, + key_info_buffer, &key_count, + select_field_count)) DBUG_RETURN(-1); /* Check if table exists */ @@ -1503,8 +1508,8 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, create_info->table_options=db_options; if (rea_create_table(thd, path, db, table_name, - create_info, fields, key_count, - key_info_buffer)) + create_info, alter_info->create_list, + key_count, key_info_buffer)) goto end; if (create_info->options & HA_LEX_CREATE_TMP_TABLE) { @@ -1592,8 +1597,7 @@ make_unique_key_name(const char *field_name,KEY *start,KEY *end) TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, const char *db, const char *name, - List<create_field> *extra_fields, - List<Key> *keys, + Alter_info *alter_info, List<Item> *items, MYSQL_LOCK **lock) { @@ -1627,7 +1631,7 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, ((Item_field *)item)->field : (Field*) 0)))) DBUG_RETURN(0); - extra_fields->push_back(cr_field); + alter_info->create_list.push_back(cr_field); } /* create and lock table */ /* QQ: create and open should be done atomic ! */ @@ -1641,8 +1645,8 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, open_table(). */ tmp_disable_binlog(thd); - if (!mysql_create_table(thd,db,name,create_info,*extra_fields, - *keys,0,select_field_count)) + if (!mysql_create_table(thd, db, name, create_info, alter_info, + 0, select_field_count)) { if (!(table=open_table(thd,db,name,name,(bool*) 0))) quick_rm_table(create_info->db_type,db,table_case_name(create_info,name)); @@ -2146,6 +2150,7 @@ send_result_message: case HA_ADMIN_TRY_ALTER: { + my_bool save_no_send_ok= thd->net.no_send_ok; /* This is currently used only by InnoDB. ha_innobase::optimize() answers "try with alter", so here we close the table, do an ALTER TABLE, @@ -2155,7 +2160,9 @@ send_result_message: TABLE_LIST *save_next= table->next; table->next= 0; tmp_disable_binlog(thd); // binlogging is done by caller if wanted - result_code= mysql_recreate_table(thd, table, 0); + thd->net.no_send_ok= TRUE; + result_code= mysql_recreate_table(thd, table); + thd->net.no_send_ok= save_no_send_ok; reenable_binlog(thd); close_thread_tables(thd); if (!result_code) // recreation went ok @@ -2635,206 +2642,6 @@ err: } -#ifdef NOT_USED -/* - CREATE INDEX and DROP INDEX are implemented by calling ALTER TABLE with - the proper arguments. This isn't very fast but it should work for most - cases. - One should normally create all indexes with CREATE TABLE or ALTER TABLE. -*/ - -int mysql_create_indexes(THD *thd, TABLE_LIST *table_list, List<Key> &keys) -{ - List<create_field> fields; - List<Alter_drop> drop; - List<Alter_column> alter; - HA_CREATE_INFO create_info; - int rc; - uint idx; - uint db_options; - uint key_count; - TABLE *table; - Field **f_ptr; - KEY *key_info_buffer; - char path[FN_REFLEN+1]; - DBUG_ENTER("mysql_create_index"); - - /* - Try to use online generation of index. - This requires that all indexes can be created online. - Otherwise, the old alter table procedure is executed. - - Open the table to have access to the correct table handler. - */ - if (!(table=open_ltable(thd,table_list,TL_WRITE_ALLOW_READ))) - DBUG_RETURN(-1); - - /* - The add_index method takes an array of KEY structs for the new indexes. - Preparing a new table structure generates this array. - It needs a list with all fields of the table, which does not need to - be correct in every respect. The field names are important. - */ - for (f_ptr= table->field; *f_ptr; f_ptr++) - { - create_field *c_fld= new create_field(*f_ptr, *f_ptr); - c_fld->unireg_check= Field::NONE; /*avoid multiple auto_increments*/ - fields.push_back(c_fld); - } - bzero((char*) &create_info,sizeof(create_info)); - create_info.db_type=DB_TYPE_DEFAULT; - create_info.default_table_charset= thd->variables.collation_database; - db_options= 0; - if (mysql_prepare_table(thd, &create_info, fields, - keys, /*tmp_table*/ 0, db_options, table->file, - key_info_buffer, key_count, - /*select_field_count*/ 0)) - DBUG_RETURN(-1); - - /* - Check if all keys can be generated with the add_index method. - If anyone cannot, then take the old way. - */ - for (idx=0; idx< key_count; idx++) - { - DBUG_PRINT("info", ("creating index %s", key_info_buffer[idx].name)); - if (!(table->file->index_ddl_flags(key_info_buffer+idx)& - (HA_DDL_ONLINE| HA_DDL_WITH_LOCK))) - break ; - } - if ((idx < key_count)|| !key_count) - { - /* Re-initialize the create_info, which was changed by prepare table. */ - bzero((char*) &create_info,sizeof(create_info)); - create_info.db_type=DB_TYPE_DEFAULT; - create_info.default_table_charset= thd->variables.collation_database; - /* Cleanup the fields list. We do not want to create existing fields. */ - fields.delete_elements(); - if (real_alter_table(thd, table_list->db, table_list->real_name, - &create_info, table_list, table, - fields, keys, drop, alter, 0, (ORDER*)0, - ALTER_ADD_INDEX, DUP_ERROR)) - /* Don't need to free((gptr) key_info_buffer);*/ - DBUG_RETURN(-1); - } - else - { - if (table->file->add_index(table, key_info_buffer, key_count)|| - build_table_path(path, sizeof(path), table_list->db, - (lower_case_table_names == 2) ? - table_list->alias : table_list->real_name, - reg_ext) == 0 || - mysql_create_frm(thd, path, &create_info, - fields, key_count, key_info_buffer, table->file)) - /* don't need to free((gptr) key_info_buffer);*/ - DBUG_RETURN(-1); - } - /* don't need to free((gptr) key_info_buffer);*/ - DBUG_RETURN(0); -} - - -int mysql_drop_indexes(THD *thd, TABLE_LIST *table_list, - List<Alter_drop> &drop) -{ - List<create_field> fields; - List<Key> keys; - List<Alter_column> alter; - HA_CREATE_INFO create_info; - uint idx; - uint db_options; - uint key_count; - uint *key_numbers; - TABLE *table; - Field **f_ptr; - KEY *key_info; - KEY *key_info_buffer; - char path[FN_REFLEN]; - DBUG_ENTER("mysql_drop_index"); - - /* - Try to use online generation of index. - This requires that all indexes can be created online. - Otherwise, the old alter table procedure is executed. - - Open the table to have access to the correct table handler. - */ - if (!(table=open_ltable(thd,table_list,TL_WRITE_ALLOW_READ))) - DBUG_RETURN(-1); - - /* - The drop_index method takes an array of key numbers. - It cannot get more entries than keys in the table. - */ - key_numbers= (uint*) thd->alloc(sizeof(uint*)*table->keys); - key_count= 0; - - /* - Get the number of each key and check if it can be created online. - */ - List_iterator<Alter_drop> drop_it(drop); - Alter_drop *drop_key; - while ((drop_key= drop_it++)) - { - /* Find the key in the table. */ - key_info=table->key_info; - for (idx=0; idx< table->keys; idx++, key_info++) - { - if (!my_strcasecmp(system_charset_info, key_info->name, drop_key->name)) - break; - } - if (idx>= table->keys) - { - my_error(ER_CANT_DROP_FIELD_OR_KEY, MYF(0), drop_key->name); - /*don't need to free((gptr) key_numbers);*/ - DBUG_RETURN(-1); - } - /* - Check if the key can be generated with the add_index method. - If anyone cannot, then take the old way. - */ - DBUG_PRINT("info", ("dropping index %s", table->key_info[idx].name)); - if (!(table->file->index_ddl_flags(table->key_info+idx)& - (HA_DDL_ONLINE| HA_DDL_WITH_LOCK))) - break ; - key_numbers[key_count++]= idx; - } - - bzero((char*) &create_info,sizeof(create_info)); - create_info.db_type=DB_TYPE_DEFAULT; - create_info.default_table_charset= thd->variables.collation_database; - - if ((drop_key)|| (drop.elements<= 0)) - { - if (real_alter_table(thd, table_list->db, table_list->real_name, - &create_info, table_list, table, - fields, keys, drop, alter, 0, (ORDER*)0, - ALTER_DROP_INDEX, DUP_ERROR)) - /*don't need to free((gptr) key_numbers);*/ - DBUG_RETURN(-1); - } - else - { - db_options= 0; - if (table->file->drop_index(table, key_numbers, key_count)|| - mysql_prepare_table(thd, &create_info, fields, - keys, /*tmp_table*/ 0, db_options, table->file, - key_info_buffer, key_count, - /*select_field_count*/ 0)|| - build_table_path(path, sizeof(path), table_list->db, - (lower_case_table_names == 2) ? - table_list->alias : table_list->real_name, - reg_ext) == 0 || - mysql_create_frm(thd, path, &create_info, - fields, key_count, key_info_buffer, table->file)) - /*don't need to free((gptr) key_numbers);*/ - DBUG_RETURN(-1); - } - - /*don't need to free((gptr) key_numbers);*/ - DBUG_RETURN(0); -} -#endif /* NOT_USED */ /* @@ -2887,15 +2694,21 @@ bool alter_table_manage_keys(TABLE *table, int indexes_were_disabled, /* Alter table + + + NOTE + The structures passed as 'create_info' and 'alter_info' parameters may + be modified by this function. It is responsibility of the caller to make + a copy of create_info in order to provide correct execution in prepared + statements/stored routines. */ int mysql_alter_table(THD *thd,char *new_db, char *new_name, HA_CREATE_INFO *create_info, TABLE_LIST *table_list, - List<create_field> &fields, List<Key> &keys, + Alter_info *alter_info, uint order_num, ORDER *order, - enum enum_duplicates handle_duplicates, bool ignore, - ALTER_INFO *alter_info, bool do_send_ok) + enum enum_duplicates handle_duplicates, bool ignore) { TABLE *table,*new_table; int error; @@ -3064,8 +2877,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, Query_log_event qinfo(thd, thd->query, thd->query_length, 0, FALSE); mysql_bin_log.write(&qinfo); } - if (do_send_ok) - send_ok(thd); + send_ok(thd); } else if (error > 0) { @@ -3091,10 +2903,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, restore_record(table,default_values); // Empty record for DEFAULT List_iterator<Alter_drop> drop_it(alter_info->drop_list); - List_iterator<create_field> def_it(fields); + List_iterator<create_field> def_it(alter_info->create_list); List_iterator<Alter_column> alter_it(alter_info->alter_list); - List<create_field> create_list; // Add new fields here - List<Key> key_list; // Add new keys here + Alter_info new_info; // Add new columns and indexes here create_field *def; /* @@ -3140,13 +2951,13 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, def->field=field; if (!def->after) { - create_list.push_back(def); + new_info.create_list.push_back(def); def_it.remove(); } } else { // Use old field value - create_list.push_back(def=new create_field(field,field)); + new_info.create_list.push_back(def= new create_field(field, field)); alter_it.rewind(); // Change default if ALTER Alter_column *alter; while ((alter=alter_it++)) @@ -3167,7 +2978,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, } } def_it.rewind(); - List_iterator<create_field> find_it(create_list); + List_iterator<create_field> find_it(new_info.create_list); while ((def=def_it++)) // Add new columns { if (def->change && ! def->field) @@ -3176,9 +2987,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, DBUG_RETURN(-1); } if (!def->after) - create_list.push_back(def); + new_info.create_list.push_back(def); else if (def->after == first_keyword) - create_list.push_front(def); + new_info.create_list.push_front(def); else { create_field *find; @@ -3202,7 +3013,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, table_name); DBUG_RETURN(-1); } - if (!create_list.elements) + if (!new_info.create_list.elements) { my_error(ER_CANT_REMOVE_ALL_FIELDS,MYF(0)); DBUG_RETURN(-1); @@ -3213,8 +3024,8 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, for which some fields exists. */ - List_iterator<Key> key_it(keys); - List_iterator<create_field> field_it(create_list); + List_iterator<Key> key_it(alter_info->key_list); + List_iterator<create_field> field_it(new_info.create_list); List<key_part_spec> key_parts; KEY *key_info=table->key_info; @@ -3272,24 +3083,37 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, key_part_length)); } if (key_parts.elements) - key_list.push_back(new Key(key_info->flags & HA_SPATIAL ? Key::SPATIAL : - (key_info->flags & HA_NOSAME ? - (!my_strcasecmp(system_charset_info, - key_name, primary_key_name) ? - Key::PRIMARY : Key::UNIQUE) : - (key_info->flags & HA_FULLTEXT ? - Key::FULLTEXT : Key::MULTIPLE)), - key_name, - key_info->algorithm, - test(key_info->flags & HA_GENERATED_KEY), - key_parts)); + { + Key *key; + enum Key::Keytype key_type; + + if (key_info->flags & HA_SPATIAL) + key_type= Key::SPATIAL; + else if (key_info->flags & HA_NOSAME) + { + if (! my_strcasecmp(system_charset_info, key_name, primary_key_name)) + key_type= Key::PRIMARY; + else + key_type= Key::UNIQUE; + } + else if (key_info->flags & HA_FULLTEXT) + key_type= Key::FULLTEXT; + else + key_type= Key::MULTIPLE; + + key= new Key(key_type, key_name, + key_info->algorithm, + test(key_info->flags & HA_GENERATED_KEY), + key_parts); + new_info.key_list.push_back(key); + } } { Key *key; while ((key=key_it++)) // Add new keys { if (key->type != Key::FOREIGN_KEY) - key_list.push_back(key); + new_info.key_list.push_back(key); if (key->name && !my_strcasecmp(system_charset_info,key->name,primary_key_name)) { @@ -3393,7 +3217,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, /* We don't log the statement, it will be logged later. */ tmp_disable_binlog(thd); error= mysql_create_table(thd, new_db, tmp_name, - create_info,create_list,key_list,1,0); + create_info, &new_info, 1, 0); reenable_binlog(thd); if (error) DBUG_RETURN(error); @@ -3422,10 +3246,10 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, next_insert_id=thd->next_insert_id; // Remember for loggin copied=deleted=0; if (!new_table->is_view) - error=copy_data_between_tables(table,new_table,create_list, - handle_duplicates, ignore, - order_num, order, &copied, &deleted, - alter_info->keys_onoff); + error= copy_data_between_tables(table, new_table, new_info.create_list, + handle_duplicates, ignore, + order_num, order, &copied, &deleted, + alter_info->keys_onoff); /* No need to have call to alter_table_manage_keys() in the else because in 4.1 we always copy data, except for views. In 5.0 it could happen @@ -3637,8 +3461,7 @@ end_temporary: my_snprintf(tmp_name, sizeof(tmp_name), ER(ER_INSERT_INFO), (ulong) (copied + deleted), (ulong) deleted, (ulong) thd->cuted_fields); - if (do_send_ok) - send_ok(thd,copied+deleted,0L,tmp_name); + send_ok(thd, copied + deleted, 0L, tmp_name); thd->some_tables_deleted=0; DBUG_RETURN(0); @@ -3828,30 +3651,26 @@ copy_data_between_tables(TABLE *from,TABLE *to, mysql_recreate_table() thd Thread handler tables Tables to recreate - do_send_ok If we should send_ok() or leave it to caller RETURN Like mysql_alter_table(). */ -int mysql_recreate_table(THD *thd, TABLE_LIST *table_list, - bool do_send_ok) +int mysql_recreate_table(THD *thd, TABLE_LIST *table_list) { - DBUG_ENTER("mysql_recreate_table"); LEX *lex= thd->lex; HA_CREATE_INFO create_info; - lex->create_list.empty(); - lex->key_list.empty(); - lex->col_list.empty(); - lex->alter_info.reset(); - lex->alter_info.is_simple= 0; // Force full recreate + Alter_info alter_info; + + DBUG_ENTER("mysql_recreate_table"); + bzero((char*) &create_info,sizeof(create_info)); create_info.db_type=DB_TYPE_DEFAULT; create_info.row_type=ROW_TYPE_DEFAULT; create_info.default_table_charset=default_charset_info; + alter_info.is_simple= 0; // Force full recreate DBUG_RETURN(mysql_alter_table(thd, NullS, NullS, &create_info, - table_list, lex->create_list, - lex->key_list, 0, (ORDER *) 0, - DUP_ERROR, 0, &lex->alter_info, do_send_ok)); + table_list, &alter_info, + 0, (ORDER *) 0, DUP_ERROR, 0)); } diff --git a/sql/sql_union.cc b/sql/sql_union.cc index f3f814831f5..615d060a5a8 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -135,6 +135,11 @@ st_select_lex_unit::init_prepare_fake_select_lex(THD *thd) fake_select_lex->table_list.link_in_list((byte *)&result_table_list, (byte **) &result_table_list.next); + for (ORDER *order= (ORDER *) global_parameters->order_list.first; + order; + order= order->next) + order->item= &order->item_ptr; + return options_tmp; } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index c6f4307f1ea..b72caac46a0 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1021,8 +1021,7 @@ create: TL_READ_NO_INSERT: TL_READ))) YYABORT; - lex->create_list.empty(); - lex->key_list.empty(); + lex->alter_info.reset(); lex->col_list.empty(); lex->change=NullS; bzero((char*) &lex->create_info,sizeof(lex->create_info)); @@ -1040,16 +1039,18 @@ create: if (!lex->current_select->add_table_to_list(lex->thd, $7, NULL, TL_OPTION_UPDATING)) YYABORT; - lex->create_list.empty(); - lex->key_list.empty(); + lex->alter_info.reset(); + lex->alter_info.is_simple= 0; + lex->alter_info.flags= ALTER_ADD_INDEX; lex->col_list.empty(); lex->change=NullS; } '(' key_list ')' { LEX *lex=Lex; + Key *key= new Key($2, $4.str, $5, 0, lex->col_list); - lex->key_list.push_back(new Key($2,$4.str, $5, 0, lex->col_list)); + lex->alter_info.key_list.push_back(key); lex->col_list.empty(); } | CREATE DATABASE opt_if_not_exists ident @@ -1305,29 +1306,34 @@ key_def: key_type opt_ident key_alg '(' key_list ')' { LEX *lex=Lex; - lex->key_list.push_back(new Key($1,$2, $3, 0, lex->col_list)); + Key *key= new Key($1, $2, $3, 0, lex->col_list); + lex->alter_info.key_list.push_back(key); + lex->col_list.empty(); /* Alloced by sql_alloc */ } | opt_constraint constraint_key_type opt_ident key_alg '(' key_list ')' { LEX *lex=Lex; const char *key_name= $3 ? $3:$1; - lex->key_list.push_back(new Key($2, key_name, $4, 0, - lex->col_list)); + Key *key= new Key($2, key_name, $4, 0, lex->col_list); + lex->alter_info.key_list.push_back(key); lex->col_list.empty(); /* Alloced by sql_alloc */ } | opt_constraint FOREIGN KEY_SYM opt_ident '(' key_list ')' references { LEX *lex=Lex; - lex->key_list.push_back(new foreign_key($4 ? $4:$1, lex->col_list, - $8, - lex->ref_list, - lex->fk_delete_opt, - lex->fk_update_opt, - lex->fk_match_option)); - lex->key_list.push_back(new Key(Key::MULTIPLE, $4 ? $4 : $1, - HA_KEY_ALG_UNDEF, 1, - lex->col_list)); + const char *key_name= $4 ? $4 : $1; + Key *key= new foreign_key(key_name, lex->col_list, + $8, + lex->ref_list, + lex->fk_delete_opt, + lex->fk_update_opt, + lex->fk_match_option); + lex->alter_info.key_list.push_back(key); + key= new Key(Key::MULTIPLE, key_name, + HA_KEY_ALG_UNDEF, 1, + lex->col_list); + lex->alter_info.key_list.push_back(key); lex->col_list.empty(); /* Alloced by sql_alloc */ } | constraint opt_check_constraint @@ -1850,8 +1856,6 @@ alter: if (!lex->select_lex.add_table_to_list(thd, $4, NULL, TL_OPTION_UPDATING)) YYABORT; - lex->create_list.empty(); - lex->key_list.empty(); lex->col_list.empty(); lex->select_lex.init_order(); lex->select_lex.db=lex->name=0; @@ -1859,9 +1863,7 @@ alter: lex->create_info.db_type= DB_TYPE_DEFAULT; lex->create_info.default_table_charset= NULL; lex->create_info.row_type= ROW_TYPE_NOT_USED; - lex->alter_info.reset(); - lex->alter_info.is_simple= 1; - lex->alter_info.flags= 0; + lex->alter_info.reset(); } alter_list {} @@ -2019,7 +2021,7 @@ alter_list_item: lex->alter_info.is_simple= 0; lex->alter_info.flags|= ALTER_OPTIONS; } - | order_clause + | alter_order_clause { LEX *lex=Lex; lex->alter_info.is_simple= 0; @@ -3779,6 +3781,29 @@ olap_opt: ; /* + Order by statement in ALTER TABLE +*/ + +alter_order_clause: + ORDER_SYM BY alter_order_list + ; + +alter_order_list: + alter_order_list ',' alter_order_item + | alter_order_item + ; + +alter_order_item: + simple_ident order_dir + { + THD *thd= YYTHD; + bool ascending= ($2 == 1) ? true : false; + if (add_order_to_list(thd, $1, ascending)) + YYABORT; + } + ; + +/* Order by statement in select */ @@ -4030,7 +4055,9 @@ drop: { LEX *lex=Lex; lex->sql_command= SQLCOM_DROP_INDEX; - lex->alter_info.drop_list.empty(); + lex->alter_info.reset(); + lex->alter_info.is_simple= 0; + lex->alter_info.flags= ALTER_DROP_INDEX; lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY, $3.str)); if (!lex->current_select->add_table_to_list(lex->thd, $5, NULL, @@ -5899,7 +5926,8 @@ opt_table: | table_ident { LEX *lex=Lex; - if (!lex->current_select->add_table_to_list(lex->thd, $1,NULL,0)) + if (!lex->current_select->add_table_to_list(lex->thd, $1,NULL, + TL_OPTION_UPDATING)) YYABORT; if (lex->grant == GLOBAL_ACLS) lex->grant = TABLE_ACLS & ~GRANT_ACL; diff --git a/sql/table.cc b/sql/table.cc index dab2f978327..a85da8395e7 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -393,17 +393,6 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, { char *val= (char*) interval->type_names[count]; interval->type_lengths[count]= strlen(val); - /* - Replace all ',' symbols with NAMES_SEP_CHAR. - See the comment in unireg.cc, pack_fields() function - for details. - */ - for (uint cnt= 0 ; cnt < interval->type_lengths[count] ; cnt++) - { - char c= val[cnt]; - if (c == ',') - val[cnt]= NAMES_SEP_CHAR; - } } interval->type_lengths[count]= 0; } diff --git a/sql/unireg.cc b/sql/unireg.cc index 4e1a68ae90f..e5ee0222f20 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -657,29 +657,48 @@ static bool pack_fields(File file, List<create_field> &create_fields, { if (field->interval_id > int_count) { - int_count=field->interval_id; - tmp.append(NAMES_SEP_CHAR); - for (const char **pos=field->interval->type_names ; *pos ; pos++) - { - char *val= (char*) *pos; - uint str_len= strlen(val); - /* - Note, hack: in old frm NAMES_SEP_CHAR is used to separate - names in the interval (ENUM/SET). To allow names to contain - NAMES_SEP_CHAR, we replace it with a comma before writing frm. - Backward conversion is done during frm file opening, - See table.cc, openfrm() function - */ - for (uint cnt= 0 ; cnt < str_len ; cnt++) + unsigned char sep= 0; + unsigned char occ[256]; + uint i; + unsigned char *val= NULL; + + bzero(occ, sizeof(occ)); + + for (i=0; (val= (unsigned char*) field->interval->type_names[i]); i++) + for (uint j = 0; j < field->interval->type_lengths[i]; j++) + occ[(unsigned int) (val[j])]= 1; + + if (!occ[(unsigned char)NAMES_SEP_CHAR]) + sep= (unsigned char) NAMES_SEP_CHAR; + else if (!occ[(unsigned int)',']) + sep= ','; + else + { + for (uint i=1; i<256; i++) + { + if(!occ[i]) + { + sep= i; + break; + } + } + + if(!sep) /* disaster, enum uses all characters, none left as separator */ { - char c= val[cnt]; - if (c == NAMES_SEP_CHAR) - val[cnt]= ','; + my_message(ER_WRONG_FIELD_TERMINATORS,ER(ER_WRONG_FIELD_TERMINATORS), + MYF(0)); + DBUG_RETURN(1); } - tmp.append(*pos); - tmp.append(NAMES_SEP_CHAR); - } - tmp.append('\0'); // End of intervall + } + + int_count= field->interval_id; + tmp.append(sep); + for (const char **pos=field->interval->type_names ; *pos ; pos++) + { + tmp.append(*pos); + tmp.append(sep); + } + tmp.append('\0'); // End of intervall } } if (my_write(file,(byte*) tmp.ptr(),tmp.length(),MYF_RW)) diff --git a/strings/conf_to_src.c b/strings/conf_to_src.c index 505bf154bec..b0b943df02a 100644 --- a/strings/conf_to_src.c +++ b/strings/conf_to_src.c @@ -270,7 +270,14 @@ main(int argc, char **argv __attribute__((unused))) } } - + fprintf(f, "/*\n"); + fprintf(f, " This file was generated by the conf_to_src utility. " + "Do not edit it directly,\n"); + fprintf(f, " edit the XML definitions in sql/share/charsets/ instead.\n\n"); + fprintf(f, " To re-generate, run the following in the strings/ " + "directory:\n"); + fprintf(f, " ./conf_to_src ../sql/share/charsets/ > FILE\n"); + fprintf(f, "*/\n\n"); fprintf(f,"#include <my_global.h>\n"); fprintf(f,"#include <m_ctype.h>\n\n"); diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index b680b69028c..63d33086a2e 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -1,3 +1,11 @@ +/* + This file was generated by the conf_to_src utility. Do not edit it directly, + edit the XML definitions in sql/share/charsets/ instead. + + To re-generate, run the following in the strings/ directory: + ./conf_to_src ../sql/share/charsets/ > FILE +*/ + #include <my_global.h> #include <m_ctype.h> @@ -1169,7 +1177,7 @@ uchar ctype_hebrew_general_ci[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00 +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x00 }; uchar to_lower_hebrew_general_ci[] = { @@ -1261,7 +1269,7 @@ uint16 to_uni_hebrew_general_ci[] = { 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, -0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x0000,0x0000,0x0000 +0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x200E,0x200F,0x0000 }; #endif @@ -5100,7 +5108,7 @@ uchar ctype_hebrew_bin[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, -0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00 +0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x20,0x20,0x00 }; uchar to_lower_hebrew_bin[] = { @@ -5173,7 +5181,7 @@ uint16 to_uni_hebrew_bin[] = { 0x05D0,0x05D1,0x05D2,0x05D3,0x05D4,0x05D5,0x05D6,0x05D7, 0x05D8,0x05D9,0x05DA,0x05DB,0x05DC,0x05DD,0x05DE,0x05DF, 0x05E0,0x05E1,0x05E2,0x05E3,0x05E4,0x05E5,0x05E6,0x05E7, -0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x0000,0x0000,0x0000 +0x05E8,0x05E9,0x05EA,0x0000,0x0000,0x200E,0x200F,0x0000 }; #endif diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 083b89d9275..b28af51d43e 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -319,10 +319,7 @@ then cp -fp config.log "$MYSQL_MAXCONFLOG_DEST" fi -( cd mysql-test - perl ./mysql-test-run.pl --force --report-features - perl ./mysql-test-run.pl --force --ps-protocol - true ) +make test-bt # Save mysqld-max ./libtool --mode=execute cp sql/mysqld sql/mysqld-max @@ -340,7 +337,7 @@ install -m 644 libmysqld/libmysqld.a $RBR%{_libdir}/mysql/ # Include libgcc.a in the devel subpackage (BUG 4921) if expr "$CC" : ".*gcc.*" > /dev/null ; then - libgcc=`$CC --print-libgcc-file` + libgcc=`$CC $CFLAGS --print-libgcc-file` if [ -f $libgcc ] then %define have_libgcc 1 @@ -559,8 +556,10 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysqld_multi.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_fix_privilege_tables.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql_install_db.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1* %doc %attr(644, root, man) %{_mandir}/man1/pack_isam.1* @@ -650,23 +649,33 @@ fi %files ndb-tools %defattr(-,root,root,0755) +%attr(755, root, root) %{_bindir}/ndb_config +%attr(755, root, root) %{_bindir}/ndb_desc %attr(755, root, root) %{_bindir}/ndb_mgm %attr(755, root, root) %{_bindir}/ndb_restore -%attr(755, root, root) %{_bindir}/ndb_waiter %attr(755, root, root) %{_bindir}/ndb_select_all %attr(755, root, root) %{_bindir}/ndb_select_count -%attr(755, root, root) %{_bindir}/ndb_desc %attr(755, root, root) %{_bindir}/ndb_show_tables -%attr(755, root, root) %{_bindir}/ndb_test_platform -%attr(755, root, root) %{_bindir}/ndb_config %attr(755, root, root) %{_bindir}/ndb_size.pl +%attr(755, root, root) %{_bindir}/ndb_test_platform +%attr(755, root, root) %{_bindir}/ndb_waiter %attr(-, root, root) %{_datadir}/mysql/ndb_size.tmpl +%doc %attr(644, root, man) %{_mandir}/man1/ndb_config.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_desc.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_select_all.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_select_count.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_show_tables.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_size.pl.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_waiter.1* %files ndb-extra %defattr(-,root,root,0755) +%attr(755, root, root) %{_bindir}/ndb_delete_all %attr(755, root, root) %{_bindir}/ndb_drop_index %attr(755, root, root) %{_bindir}/ndb_drop_table -%attr(755, root, root) %{_bindir}/ndb_delete_all +%doc %attr(644, root, man) %{_mandir}/man1/ndb_delete_all.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_drop_index.1* +%doc %attr(644, root, man) %{_mandir}/man1/ndb_drop_table.1* %files devel %defattr(-, root, root, 0755) @@ -712,6 +721,8 @@ fi %attr(755, root, root) %{_bindir}/mysqlmanager %attr(755, root, root) %{_bindir}/mysqlmanagerc %attr(755, root, root) %{_bindir}/mysqlmanager-pwgen +%doc %attr(644, root, man) %{_mandir}/man1/mysql_client_test.1* +%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1* %files Max %defattr(-, root, root, 0755) @@ -726,6 +737,15 @@ fi # itself - note that they must be ordered by date (important when # merging BK trees) %changelog +* Fri Mar 02 2007 Joerg Bruehe <joerg@mysql.com> + +- Add several man pages for NDB which are now created. + +* Fri Jan 05 2007 Kent Boortz <kent@mysql.com> + +- Add CFLAGS to gcc call with --print-libgcc-file, to make sure the + correct "libgcc.a" path is returned for the 32/64 bit architecture. + * Thu Dec 14 2006 Joerg Bruehe <joerg@mysql.com> - Include the new man pages for "my_print_defaults" and "mysql_tzinfo_to_sql" diff --git a/vio/vio.c b/vio/vio.c index 6174acd7024..1eeafe483dc 100644 --- a/vio/vio.c +++ b/vio/vio.c @@ -96,7 +96,7 @@ void vio_reset(Vio* vio, enum enum_vio_type type, vio->in_addr =vio_ssl_in_addr; vio->vioblocking =vio_ssl_blocking; vio->is_blocking =vio_is_blocking; - vio->timeout =vio_ssl_timeout; + vio->timeout =vio_timeout; } else /* default is VIO_TYPE_TCPIP */ #endif /* HAVE_OPENSSL */ diff --git a/vio/viossl.c b/vio/viossl.c index 62145fe5006..8da9723d7d8 100644 --- a/vio/viossl.c +++ b/vio/viossl.c @@ -416,15 +416,4 @@ int vio_ssl_blocking(Vio * vio __attribute__((unused)), } -void vio_ssl_timeout(Vio *vio __attribute__((unused)), - uint which __attribute__((unused)), - uint timeout __attribute__((unused))) -{ -#ifdef __WIN__ - ulong wait_timeout= (ulong) timeout * 1000; - (void) setsockopt(vio->sd, SOL_SOCKET, - which ? SO_SNDTIMEO : SO_RCVTIMEO, (char*) &wait_timeout, - sizeof(wait_timeout)); -#endif /* __WIN__ */ -} #endif /* HAVE_OPENSSL */ diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c index 46306cf48bb..1ac5d96d158 100644 --- a/vio/viosslfactories.c +++ b/vio/viosslfactories.c @@ -289,6 +289,8 @@ new_VioSSLConnectorFd(const char* key_file, DBUG_RETURN(ptr); ctor_failure: DBUG_PRINT("exit", ("there was an error")); + if (ptr->ssl_context) + SSL_CTX_free(ptr->ssl_context); my_free((gptr)ptr,MYF(0)); DBUG_RETURN(0); } @@ -390,6 +392,8 @@ new_VioSSLAcceptorFd(const char *key_file, ctor_failure: DBUG_PRINT("exit", ("there was an error")); + if (ptr->ssl_context) + SSL_CTX_free(ptr->ssl_context); my_free((gptr) ptr,MYF(0)); DBUG_RETURN(0); } |